From 7a1801b0bdecc58fd9ea58702e254cf4f333b72e Mon Sep 17 00:00:00 2001 From: tomascz Date: Thu, 17 Oct 2019 10:28:39 +0200 Subject: [PATCH] Version 1.5 --- src/LZW/lzw.asm | 189 ++++++++++++++++++++++------------------------- src/LZW/main.asm | 118 ++++++++++------------------- 2 files changed, 128 insertions(+), 179 deletions(-) diff --git a/src/LZW/lzw.asm b/src/LZW/lzw.asm index 459a40f..493d898 100644 --- a/src/LZW/lzw.asm +++ b/src/LZW/lzw.asm @@ -9,27 +9,41 @@ ; o o o o ; / \ / \ ; o o o o +; +; +; +; zaznam ve slovniku (8 bajtu): +; +; | 0 1 | 2 3 | 4 5 | 6 7 | +; +-----------+-----------+-----------+-----------+ +; | pravy | Prefix | levy | V | Z | +; +; kde V = vyvazenost {-2,...,2} +; Z = znak +; + PRUCHOD .EQU $5bff ; zasobnik informaci o Pruchodu stromem NIL .EQU 0 -SLO_PL3 .EQU SLOVNIK+(SLO_MAX*ZAZ_LEN*2) ; Velikost Zaznamu je dvojnasobna +ZAZ_LEK .EQU 8 ; pocet bajtu jednoho Zaznamu ve Slovniku komprese +SLOVNIK .EQU SLO_PLN+(SLO_MAX*ZAZ_LEK) ; adresa zacatku Slovniku komprese ;ld hl,0 ; boot sektor (zakomentovano protoze nastaveno v nadmodulu) ;push hl ; prvni uspesne zkomprimovany logicky sektor (zakomentovano protoze vlozeno v nadmodulu) ;push hl ; logicky sektor ke kompresi (zakomentovano protoze vlozeno v nadmodulu) - ld (_SP+1),sp ; zaloha SP + ld (_SPK+1),sp ; zaloha SP ld b,8 ; B = pocet volnych bitu Vystupu ld hl,VYSTUP ; inicializace aktualniho bajtu Vystupu - ld (_ZapisK+1),hl + ld (_VystuK+1),hl ld hl,SLOVNIK ; inicializace volne pozice ve Slovniku - ld (_Slov+1),hl + ld (_SlovK+1),hl ld h,l ; inicializace Korene stromu (zaruceno H=L=0) ld (_Koren+1),hl @@ -38,7 +52,6 @@ SLO_PL3 .EQU SLOVNIK+(SLO_MAX*ZAZ_LEN*2) ; Velikost Zaznamu je dvojnasobna push hl SektorK -#IFNDEF __DEBUG__ push bc ; zaloha poctu volnych bitu Vystupu call LOGFYZ ; logicky sektor v HL na fyzickou stopu a sektor v BC @@ -49,7 +62,7 @@ SektorK .BYTE 36 ; barva (zde Paper 4, Ink 4) .BYTE STP_STA ; adresa - ld a,(_ZapisK+2) ; zobrazeni statistiky zaplnenosti Vystupu; A = informace <0;255> + ld a,(_VystuK+2) ; zobrazeni statistiky zaplnenosti Vystupu; A = informace <0;255> sub VYSTUP>>8 call Statist .BYTE 36 ; barva (zde Paper 4, Ink 4) @@ -63,13 +76,6 @@ SektorK pop de ; obnova Prefixu pop bc ; obnova poctu volnych bitu Vystupu -#IFDEF __EMUL__ - ld de,$4400 - ld hl,BUFFER - ld bc,512 - ldir -#ENDIF -#ENDIF di ; zakazani preruseni (protoze pouzivany stinove registry) xor a ; Carry=0 @@ -91,7 +97,7 @@ RepeatK inc iy ; test konce Buffru .BYTE $fd ; meni nasledujici instrukci na Ld(A,High(IY)) ld a,h ; Ld(A,High(IY)) cp (BUFFER+512)>>8 - jp nc,BufCelK + jr nc,BufCelK ld c,(iy+0) ; do C Znak z Buffru exx @@ -111,7 +117,7 @@ HledejK ex de,hl ; v zasobniku Pruchodu vytvoreni informace o Rodici Zaznamu inc h ; pokud HL'=Nil, Zaznam [AktPrefix,AktZnak] ve Slovniku neexistuje a nutno jej vytvorit dec h ; nelze Ld(A,H), Or(A) protoze nutno zachovat A - jp z,ZaznamK + jr z,ZaznamK ld sp,hl ; do SP Zaznam ve Slovniku ld b,h ; do BC' zaloha zacatku Zaznamu @@ -122,15 +128,15 @@ HledejK ex de,hl ; v zasobniku Pruchodu vytvoreni informace o Rodici Zaznamu xor a sbc hl,de exx - jp c,HledejK ; Zaznamenany Prefix mensi nez akt. Prefix, hledani v "pravem podstromu" + jr c,HledejK ; Zaznamenany Prefix mensi nez akt. Prefix, hledani v "pravem podstromu" pop hl ; do HL' "levy podstrom" jp nz,HledejK ; Zaznamenany Prefix vetsi nez akt. Prefix, hledani v "levem podstromu" exx pop af ; do A Zaznamenany Znak sub c - jp z,ShodaK ; Zaznamenany Znak shodny s akt. Znakem + jr z,ShodaK ; Zaznamenany Znak shodny s akt. Znakem exx - jp nc,HledejK ; Zaznamenany Znak --vetsi-- nez akt. Znak, hledani v --"levem podstromu"-- + jr nc,HledejK ; Zaznamenany Znak --vetsi-- nez akt. Znak, hledani v --"levem podstromu"-- ld h,b ld l,c ld sp,hl @@ -138,13 +144,13 @@ HledejK ex de,hl ; v zasobniku Pruchodu vytvoreni informace o Rodici Zaznamu jp HledejK ; Zaznamenany Znak --mensi-- nez akt. Znak, hledani v --"pravem podstromu"-- ShodaK ; ve Slovniku nalezen Zaznam [AktPrefix,AktZnak] - pouziti Zaznamu jako aktualniho Prefixu (a pokus o jeho rozsireni dalsim znakem) - ld hl,-8 + ld hl,-ZAZ_LEK add hl,sp ex de,hl jp RepeatK BufCelK ; cely Buffer zpracovan - ld a,$21 ; zmena instrukce Jp(nc,...) na "neskodnou" Ld(Hl,...) + ld a,$21 ; zmena instrukce Jp(...) na "neskodnou" Ld(Hl,...) ld (_BuffOk),a xor a jp _Vyst3K ; zapis aktualniho Prefixu na Vystup @@ -152,47 +158,33 @@ BufCelK ; cely Buffer zpracovan SloPlnK ; vyprazdneni plneho Seznamu a Slovniku ld hl,SLOVNIK ; inicializace volne pozice ve Slovniku - ld (_Slov+1),hl - ;ld hl,NIL ; inicializace Korene stromu - ld h,a ; H=L=A=0 - ;ld l,a ; zakomentovano protoze L=A=0 zaruceno jiz z HL=Slovnik vyse - ld (_Koren+1),hl - jp _Vyst3K ; zaruceno A=0 - + ld (_SlovK+1),hl + ld h,l ; H=L=0 (L=0 zaruceno jiz z HL=Slovnik vyse) KorenK ld (_Koren+1),hl ; nastaveni Korene stromu xor a jp _Vyst2K -KorenDE ld (_Koren+1),de - jp _ZazVyv - ZaznamK exx ; ve Slovniku vytvoreni Zaznamu [AktPrefix,AktZnak] -_Slov ld hl,$0000 ; do HL volna pozice ve Slovniku ($0000 = urceno za behu) - ex af,af' ; do A' zaloha specifickych informaci o Rodici - ld a,h ; zaplnen-li Slovnik, vyprazdneni - sub SLO_PL3>>8 - jp z,SloPlnK - ld a,l ; urceni dalsi volne pozice ve Slovniku - or 7 - ld l,a - inc hl - ld (_Slov+1),hl - ld sp,hl ; vytvoreni Zaznamu - ld h,c ; Zaznamenani Znaku v H a Vyvazenosti v L +_SlovK ld sp,$0000 ; do SP volna pozice ve Slovniku ($0000 = urceno za behu) + ld h,c ; Zaznamenani Znaku v H a Vyvazenosti=0 v L ld l,0 push hl ld h,l ; H=L=0 push hl ; Zaznamenani "leveho podstromu" (=Nil) push de ; Zaznamenani Prefixu push hl ; zaznamenani "praveho podstromu" (=Nil) - + ex af,af' ; do A' zaloha specifickych informaci o Rodici exx + ;ld hl,NIL ; zakomentovano protoze HL'=Nil zaruceno add hl,sp + bit 6,h ; zaplnen-li Slovnik, vyprazdneni (6.bit=0 = H' Zaznam HL' ma "pravy podstrom", 0 <=> jinak - rlca - and 1 - ld b,a - ld (hl),d ; Rodic jako "pravy podstrom" Zaznamu + ld (hl),d ; Rodic DE' jako "levy podstrom" Zaznamu HL' dec l - dec e - res 2,e - ld (hl),e + ld (hl),b ex de,hl ; do DE' Zaznam, do HL' Rodic - inc l ; do A: "-1" <=> Rodic HL' ma "pravy podstrom", 0 <=> jinak - xor a + rlca ; do A: 1 <=> Rodic HL' ma "pravy podstrom", 0 <=> jinak + rlca + and 1 + set 2,l ; A -= ( 1 <=> Rodic HL' ma "levy podstrom", 0 <=> jinak ) cp (hl) - sbc a,a - add a,b ; urceni a nastaveni Vyvazenosti Rodice DE' - set 2,l - inc l + sbc a,0 + neg ; A=-A jp _RodVyv -Rot_LL ex af,af' ; nutna Rotace LL (v HL' Zaznam, v DE' Rodic) - set 2,l ; "levy podstrom" Zaznamu HL' musi "pravym podstromem" Rodice DE' +KorenDE ld (_Koren+1),de + jp _ZazVyv + +Rot_RR ex af,af' ; nutna Rotace RR (v HL' Zaznam, v DE' Rodic) + set 2,e ; "pravy podstrom" Zaznamu HL' musi "levym podstromem" Rodice DE' ldi ld a,(hl) ld (de),a - rlca ; do B': "-1" <=> Zaznam HL' ma "levy podstrom", 0 <=> jinak - rlca - sbc a,a - ld b,a - ld (hl),d ; Rodic jako "levy podstrom" Zaznamu + ld (hl),d ; Rodic DE' jako "pravy podstrom" Zaznamu HL' dec l - dec e - ld (hl),e - res 2,l ; obnova zacatku Zaznamu HL' + ld (hl),b ex de,hl ; do DE' Zaznam, do HL' Rodic - set 2,l ; do A: 1 <=> Rodic HL' ma "levy podstrom", 0 <=> jinak - inc l - xor a + rlca ; do A: 1 <=> Rodic HL' ma "levy podstrom", 0 <=> jinak + rlca + and 1 + res 2,l ; A -= ( 1 <=> Rodic HL' ma "pravy podstrom", 0 <=> jinak ) cp (hl) - adc a,b ; urceni a nastaveni Vyvazenosti Rodice HL' - inc l -_RodVyv ld (hl),a + sbc a,0 + set 2,l + +_RodVyv inc l ; urceni a nastaveni Vyvazenosti Rodice HL' + ld (hl),a + ld e,c ; obnova Low(Zaznam) pop hl ; do HL' Nadrodic (tj. rodic Rodice) (v DE' Zaznam) ld a,h or a - jp z,KorenDE + jr z,KorenDE pop af ; do A specificke informace o Rodici or a - jp m,_NadRod ; ma-li Zaznam soucasti "praveho podstromu" Nadrodice, skoc + ld b,l ; do B' zaloha Low(Nadrodic) (pro pripad ze nutna Dvojita rotace) + jr nz,_NadRod ; ma-li Zaznam soucasti "praveho podstromu" Nadrodice, skoc set 2,l ; Zaznam soucast --"leveho podstromu"-- Nadrodice, pricti 4 _NadRod ld (hl),e ; Zaznam DE' jako "pravy/levy podstrom" Nadrodice HL' inc l ld (hl),d ex af,af' ; rozhodnuti zda nutna Dvojita rotace - jp nz,_RotDvo + jr nz,_RotDvo _ZazVyv ld a,e ; nulovani Vyvazenosti Zaznamu HL' or 6 @@ -331,8 +321,8 @@ _ZazVyv ld a,e ; nulovani Vyvazenosti Zaznamu HL' _Vyst2K exx _Vyst3K or d ; (zaruceno A=0) do A horni bajt Prefixu, tj. A=D=High(Prefix) - jp z,_ZapisK ; prefixem je Ascii znak - sub SLOVNIK>>8 ; A-=High(Slovnik) (protoze Slovnik na adrese $xx00) + jp z,_VystuK ; prefixem je Ascii znak + sub SLO_PLN>>8 ; A-=High(SLO_PLN) (protoze zarovnani Slovniku na $xx00) rra ; zaruceno Carry=0 rr e rra @@ -340,7 +330,7 @@ _Vyst3K or d ; (zaruceno A=0) do A horni bajt Prefixu, tj. A=D=High(Prefix) rra rr e inc a ; symbol ma kod "za" Ascii -_ZapisK ld hl,$0000 ; do HL ukaz volne pozice Vystupu ($0000 = urceno za behu) +_VystuK ld hl,$0000 ; do HL ukaz volne pozice Vystupu ($0000 = urceno za behu) ld d,b ; do D pocet volnych bitu Vystupu ld b,N_BITU ; zapis nBitu symbolu na Vystup _Zap1K rra @@ -350,11 +340,11 @@ _Zap1K rra jp nz,_Zap2K inc hl ; dalsi bajt Vystupu inc h ; test zaplnenosti Vystupu - jp z,KonecK ; zaplnen-li Vystup, konec (Carry=0) + jr z,KonecK ; zaplnen-li Vystup, konec (Carry=0) dec h ld d,8 _Zap2K djnz _Zap1K - ld (_ZapisK+1),hl ; uchovani ukaz volne pozice Vystupu + ld (_VystuK+1),hl ; uchovani ukaz volne pozice Vystupu ld b,d ; do B zpet pocet volnych bitu Vystupu ld d,0 ; aktualni Znak prefixem dalsiho znaku (D=0, E=C) ld e,c @@ -362,21 +352,20 @@ _BuffOk jp RepeatK ; opcode instrukce po zpracovani celeho Buffru zmenen z Jp(. ld a,$c3 ; uprava opcodu instrukce BuffOk z Ld(Hl,...) zpet na Jp(...) ld (_BuffOk),a -_SP ld sp,$0000 ; obnova SP ($0000 = urceno za behu) +_SPK ld sp,$0000 ; obnova SP ($0000 = urceno za behu) __NSekt ld hl,$0000 ; do HL pocet sektoru na diskete ($0000 = urceno za behu) pop de inc de push de xor a sbc hl,de - ld h,d ; do HL pripadny dalsi sektor - ld l,e + ex de,hl ; do HL pripadny dalsi sektor jp nz,SektorK ; zpracovany-li vsechny sektory, komprese hotova inc a ; A=1, tj. cela disketa zpracovana (zaruceno ze predtim A=0) ld (_Hotovo+1),a - ld hl,(_ZapisK+1) ; do HL ukaz volne pozice Vystupu + ld hl,(_VystuK+1) ; do HL ukaz volne pozice Vystupu _FifoK rr (hl) ; rolovani fifo aby na nejnizsim bitu prvni zapsany bit djnz _FifoK -KonecK ld sp,(_SP+1) ; obnova SP (v pripade ze Buffer plny) +KonecK ld sp,(_SPK+1) ; obnova SP (v pripade ze Buffer plny) diff --git a/src/LZW/main.asm b/src/LZW/main.asm index 6d2f962..f7e606a 100644 --- a/src/LZW/main.asm +++ b/src/LZW/main.asm @@ -4,25 +4,23 @@ ADRDRAM .EQU AUXBUF ; adresa v DRAM kam utilita z obrazovky presunuta aby udelala prostor pro Slovnik -#DEFINE __DEBUG__0 ; testovaci verze -#DEFINE __EMUL__0 ; verze ktera urcena pro emulator +#DEFINE __DEBUG__0 ; testovaci verze pro emulator BOR_SRC .EQU 4 ; barva Borderu pro signalizaci vlozeni zdrojove diskety BOR_TRG .EQU 6 ; cilove BOR_PAR .EQU 5 ; potvrzeni parametr('u) zdrojove diskety N_BITU .EQU 10 ; pocet bitu komprimovaneho symbolu -ZAZ_LEN .EQU 4 ; pocet bajtu jednoho zaznamu ve Slovniku (nelze 8 kvuli zpetne kompatibilite Unlzw) -SLOVNIK .EQU $4000 SLO_MAX .EQU ((1 << (N_BITU-8))-1)*256 ; max pocet zaznamu ve Slovniku -SLO_PLN .EQU SLOVNIK+(SLO_MAX*ZAZ_LEN) ; adresa konce Slovniku +SLO_PLN .EQU $4000 ; adresa konce Slovniku komprese VYSTUP .EQU $5d00 VYS_PLN .EQU $ff00 VYS_STA .EQU $21 ; zacatek zobrazeni statistiky zaplnenosti Buffru v atributove casti obrazovky ($5800+xx) STP_STA .EQU $61 ; zacatek zobrazeni statistiky zpracovanosti stop v atributove casti obrazovky ($5800+xx) +BUFFER .EQU $3800 ; (DIRBUF) Buffer na adrese jejiz dolni bajt nulovy (tj. XX00) - ; na adrese SrcSekt mozno pretizit informaci o poctu sektoru na jedne stope zdrojove diskety (0 = hodnota v bootu zdrojove diskety je validni) - ; na adrese SrcSekt-1 mozno pretizit informaci o poctu sektoru na jedne stope cilove diskety (vychozi hodnotou je zde 9, viz Dsk80x9) + ; na adrese SrcStop mozno pretizit informaci o poctu stop na zdrojove diskete (0 = pouzita hodnota z bootu zdrojove diskety) + ; na adrese SrcStop-1 mozno pretizit informaci o poctu sektoru na jedne stope cilove diskety (vychozi hodnotou je zde 9, viz Dsk80x9) .ORG ADRDRAM @@ -31,7 +29,6 @@ STP_STA .EQU $61 ; zacatek zobrazeni statistiky zpracovanosti stop v atributove push bc push de -#IFNDEF __DEBUG__ ld a,79 ; prestrankovani do DROM (viz ZX Magazin 6/93, str. 17) ld hl,$3ef7 ; provedeni ekvivalentu Poke #247,79 prostrednictvim zapisu 79 do fiktivniho sekvencniho souboru zacinajiciho na adrese #247 = 16119 = $3ef7 push hl @@ -44,12 +41,6 @@ STP_STA .EQU $61 ; zacatek zobrazeni statistiky zpracovanosti stop v atributove rst 00 ; prestrankovani pop hl pop hl -#ELSE - ld hl,$a000 - ld de,BUFFER - ld bc,N_SEKT*512 - ldir -#ENDIF call Presun+(16384-ADRDRAM) ; kopie utility z obrazovky do DRAM (aby odpovidaly adresy volani rutin) @@ -57,9 +48,10 @@ STP_STA .EQU $61 ; zacatek zobrazeni statistiky zpracovanosti stop v atributove Lzw push hl ; prvni uspesne zkomprimovany logicky sektor (predpoklad) push hl ; logicky sektor ke kompresi -#IFNDEF __DEBUG__ +#IFNDEF __DEBUG__ ld a,BOR_SRC ; signalizace vlozeni zdrojove diskety call DskZmen ; nutno "+(.)" protoze PC odvozen od ORG (a ukazuje do DRAM) a rutina DskZmen je (zatim) na obrazovce +#ENDIF pop hl push hl @@ -69,33 +61,39 @@ Lzw push hl ; prvni uspesne zkomprimovany logicky sektor (predpoklad) call GETPAR ; do IX tabulka parametru, nacteni Bootu do $3a00(AUXBUF) = Buffer a naplneni tabulky ukazovane IX parametry vlozeneho disku - ld a,(SrcSekt+(16384-ADRDRAM)) ; pretizeni informace o poctu sektoru na jedne stope zdrojove diskety ziskaneho z jejiho bootu (0 = hodnota v bootu zdrojove diskety je validni) + ld hl,DRPAR_A+1 ; pretizeni informace o 40-ti stope diskete v 80-ti stope mechanice + res 5,(hl) + inc l + ld a,(SrcStop+(16384-ADRDRAM)) ; pretizeni informace o poctu stop na zdrojove diskete (0 = pouzita hodnota z bootu zdrojove diskety) or a - jr z,Boot ; 0 = hodnota v bootu zdrojove diskety je validni - ld (DRPAR_A+3),a + jr z,Boot ; 0 = pouzita hodnota v bootu zdrojove diskety + ld (hl),a -Boot call DSKSTP ; zastaveni mechaniky +Boot push hl + call DSKSTP ; zastaveni mechaniky xor a ; otevreni tiskoveho kanalu 0 rst 28 .WORD CHAN_OPEN - ld a,(DRPAR_A+2) ; zobrazeni rozpoznaneho poctu stop na zdrojove diskete + pop hl + ld a,(hl) ; zobrazeni rozpoznaneho poctu stop na zdrojove diskete ve formatu "TTxSS" + inc l call ByteHex+(16384-ADRDRAM) ; nutno "+(.)" aby volana rutina na obrazovce protoze cast utility byla v DRAM prepsana boot sektorem diskety ld a,'x' ; aby zobrazeno "TTxSS" rst 10 - ld a,(DRPAR_A+3) ; zobrazeni rozpoznaneho poctu sektoru na stopu + ld a,(hl) ; zobrazeni rozpoznaneho poctu sektoru na stopu call ByteHex+(16384-ADRDRAM) ; nutno "+(.)" aby volana rutina na obrazovce protoze cast utility byla v DRAM prepsana boot sektorem diskety - xor a ; urceni celkoveho poctu sektoru na diskete jako Strany*Stopy*Sektory - ld hl,AUXBUF+177 + ld hl,AUXBUF+177 ; urceni celkoveho poctu sektoru na diskete jako Strany*Stopy*Sektory bit 4,(hl) ; nemeni Carry, pouze nastavuje Zero - inc hl + inc hl ; nelze Inc(L) protoze nutno zachovat Zero ld e,(hl) ; do E pocet stop - inc hl + inc hl ; nelze Inc(L) protoze nutno zachovat Zero ld l,(hl) ; do L pocet sektoru jr z,_Nasob rl e -_Nasob ld d,a ; D=H=A=0 - ld h,d +_Nasob xor a + ld d,a ; D=H=A=0 + ld h,a push de ; uchovani poctu stop pro vytvoreni statistiky jejich zpracovanosti nize rst 28 .WORD HLMULDE ; ZX ROM rutina pro nasobeni HL*=DE @@ -104,6 +102,7 @@ _Nasob ld d,a ; D=H=A=0 call Presun+(16384-ADRDRAM) ; kopie utility z obrazovky do DRAM (aby odpovidaly adresy volani rutin) jp $+3 ; nelze "$+3-(16384-ADRDRAM)" protoze aktualni PC jiz odvozen od ORG a tedy ukazuje do DRAM +#IFNDEF __DEBUG__ ld a,BOR_PAR ; signalizace pozadavku potvrzeni rozpoznaneho formatu zdrojove diskety call DskZmen ld a,(LASTKEY) ; nestisknuto-li P (tj. nepotvrzeny-li rozpoznane parametry zdrojove diskety), Konec @@ -111,6 +110,9 @@ _Nasob ld d,a ; D=H=A=0 ld (_Hotovo+1),a ; LastKey<>P -> Hotovo=1 pop bc ; do BC pocet stop (vyuzito nize pri vytvoreni statistiky zpracovanosti stop) jp nz,Konec +#ELSE + pop bc ; do BC pocet stop (vyuzito nize pri vytvoreni statistiky zpracovanosti stop) +#ENDIF ;pop bc ; vytvoreni statistiky zpracovanosti stop; A = informace <0;255> ; (zakomentovano protoze provedeno vyse) ld a,c @@ -124,52 +126,24 @@ _Nasob ld d,a ; D=H=A=0 .BYTE VYS_STA ; adresa BootOk call DRVSYS ; do IX tabulka parametru -#ENDIF + #include "lzw.asm" -#IFNDEF __DEBUG__ + call SwapPar ; zastaveni mechaniky a prohozeni aktualnich informaci o diskete a mechanice s informacemi o cilove diskete 80x9 -#ENDIF -#IFDEF __EMUL__ -#IFDEF __DEBUG__ -; ld hl,REZERVA -; ld de,BUFFER -; or a -; sbc hl,de -; ld b,l -; ld hl,BUFFER -;Smaz1 ld (hl),255 -; inc hl -; djnz Smaz1 - - ld hl,SLO_PLN - ld de,SLOVNIK - or a - sbc hl,de - ex de,hl - ld b,0 -Smaz2 ld (hl),b - inc hl - dec de - ld a,d - or e - jr nz,Smaz2 -#ENDIF -#ENDIF pop hl ; v zasobniku prohozeni logickeho sektoru ke kompresi a prvniho uspesne zkomprimovaneho logickeho sektoru ex (sp),hl push hl - +#IFNDEF __DEBUG__ ld a,BOR_TRG ; signalizace vlozeni cilove diskety call DskZmen -#IFNDEF __DEBUG__ - call DRVSYS ; do IX tabulka parametru disku #ENDIF + call DRVSYS ; do IX tabulka parametru disku + #include "unlzw.asm" -#IFNDEF __DEBUG__ + call SwapPar ; zastaveni mechaniky a prohozeni aktualnich informaci o diskete a mechanice s informacemi o zdrojove diskete -#ENDIF Konec pop hl ; obnova SP pop hl @@ -177,9 +151,7 @@ _Hotovo ld a,$00 ; opakovani cyklu Komprese-Dekomprese pro zbyvajici sektory ($ or a jp z,Lzw -#IFNDEF __DEBUG__ - - ld a,2*100 ; zruseni statistiky zpracovanosti stop; B = pocet zpracovanych stop, A = informace <0;255> + ld a,2*100 ; zruseni statistiky zpracovanosti stop; A = informace <0;255> call Statist .BYTE 56 ; barva (zde Paper 7, Ink 0) .BYTE STP_STA ; adresa @@ -187,7 +159,6 @@ _Hotovo ld a,$00 ; opakovani cyklu Komprese-Dekomprese pro zbyvajici sektory ($ ld de,16384 ; presun utility zpet na obrazovku ld hl,ADRDRAM call _Presun -#ENDIF pop de ; obnoveni puvodnich stinovych registr('u) pop bc @@ -239,7 +210,7 @@ _Prohod ld a,(de) ld (hl),a ld a,c ld (de),a - inc hl + inc l inc de djnz _Prohod jp DSKSTP ; return @@ -259,7 +230,7 @@ Statist pop hl ; zobrazeni statistiky; A = informace <0;255> inc hl ld d,$58 _Statis ld (de),a ; vykresleni statistiky - inc de + inc e djnz _Statis pop de pop bc @@ -287,18 +258,7 @@ _Presun ld bc,1024 ret Dsk80x9 .BYTE 129,24,80,9 ; informace o diskete 80x9 v mechanice A -SrcSekt .BYTE 0 ; pretizeni informace o poctu sektoru na jedne stope zdrojove diskety (0 = hodnota v bootu zdrojove diskety je validni) - +SrcStop .BYTE 0 ; pretizeni informace o poctu stop na zdrojove diskete (0 = pouzita hodnota z bootu zdrojove diskety) -#IFDEF __DEBUG__ -; .ORG $4200 ; Buffer na adrese jejiz v jehoz hornim bajtu jsou dolni dva bity nulove (tj. XX00) -;BUFFER .FILL $600,0 -;REZERVA .BYTE 255 ; visualni znacka konce Buffru -;REZERVA .EQU $4400 -BUFFER .EQU $8000 -REZERVA .EQU BUFFER+512 -#ELSE -BUFFER .EQU $3800 ; (AUXBUF) Buffer na adrese jejiz dolni bajt nulovy (tj. XX00) -#ENDIF .END