NAME ('MGF') ; PRI KAZDE ZMENE ZMENIT I CISLO VERZE V HLP.MAC ENTRY MG@INI,MG@WSG,MG@RSG ; PRACE NA UROVNI SEGMENTU ENTRY MG@ERR,MG@STP,MG@STR ; POLE SE STATISTIKOU CHYB ENTRY MGSCAN ; URCENI ZAZNAMOVEHO KMITOCTU NAHRAVKY ; ZONA: DS 2 ; ZONA PRO DATA ZONA2: DS 2 ; ADRESA CISLA SEGMENTU ; ZONA MUSI ZACINAT NA HRANICI 256 BYTE KB: DS 16 ; KONTROLNI BLOK 16 BYTE , KAZDY BYTE ; ODPOVIDA 1 DATOVEMU BLOKU. 00 - CHYBNY BLOK, FF - SPRAVNY BLOK(0..8) ; ; SB1: DS 1 ; SPRAVNY BLOK 1 SB2: DS 1 SB3: DS 1 OB: DS 1 ; OPRAVOVANY BLOK ; PCH: DS 1 ; POCET CHYB V RADCE PB: DS 1 ; POCET SPRAVNE PRECTENYCH BLOKU CHS: DS 1 ; CHYBNY SEGMENT COP: DS 1 ; CITAC OPRAV MG@ERR: PS: DS 8 ; POCET SEG. S 0 - 7 CHYBAMI AZ: DS 2 ; ADRESA ZONY CB: DS 1 ; CISLO BLOKU ; DZC: DB 10H ; DELKA ZAVADECI CASTI IU: DB 0FFH ; INFORMACNI UROVEN SPZ: DB 010H ; SPOLEHLIVOST ZAZNAMU ; ; ; ; TABULKA KODU TABK: DB 34H,38H,4CH,54H,58H,64H,68H,70H DB 8CH,94H,98H,0A4H,0A8H,0B0H,0C4H,0C8H ; ; DESIFROVACI TABULKA TABD: DB 0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H DB 0C0H,0C0H,0C0H,0E0H,0C0H,000H,001H,0C0H DB 0C0H,0C0H,0C0H,002H,0C0H,003H,004H,0C0H DB 0C0H,005H,006H,0C0H,007H,0C0H,0C0H,0C0H DB 0C0H,0C0H,0C0H,008H,0C0H,009H,00AH,0C0H DB 0C0H,00BH,00CH,0C0H,00DH,0C0H,0C0H,0C0H DB 0C0H,00EH,00FH,0C0H,080H,0C0H,0C0H,0C0H DB 0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H ; ; WPB: ANI 0FH ; VYSILA PULBYTE LXI B,TABK ADD C MOV C,A MVI A,0 ADC B MOV B,A LDAX B JMP WZNAK ; WZNAK DEFINUJE UZIVATEL ; ; SYSTEM PROCEDURE MG@WSG; MG@WSG: WSG: LXI H,KB ; VYSILA SEGMENT 256 BYTE MVI B,9 ; OBSADI 9 BYTE KB FF - SPRAVNE BLOKY WS1: MVI M,0FFH INX H DCR B JNZ WS1 MVI B,7 ; OBSADI 7 BYTE KB OO - CHYBNE BLOKY WS2: MVI M,0 INX H DCR B JNZ WS2 LHLD ZONA SHLD AZ CALL PAR ; DOPLNI PODELNOU PARITU SEGMENTU ; (143. BYTE) CALL OPRAV ; DOPLNI CHYBNE BLOKY CALL START ; SPUSTENI MGF LDA DZC MOV C,A WS3: CALL WKON ; VYSILA ZAV. CAST DCR C JNZ WS3 LHLD ZONA LDA SPZ MOV B,A WS4: PUSH B MVI A,2CH ; VYSILA SYNCHR. ZNAKY CALL WZNAK MVI A,0D0H CALL WZNAK MOV A,C MOV E,C ; E - STRADAC PODELNE PARITY BLOKU CALL WPB ; VYSILA CISLO BLOKU MVI D,10H WS5: MOV A,M ; VYSILA BLOK 16 BYTE RRC RRC RRC RRC MOV B,A XRA E MOV E,A MOV A,B CALL WPB ; VYSILA HORNI PULBYTE MOV A,M XRA E MOV E,A MOV A,M CALL WPB ; VYSILA SPODNI PULBYTE INR L DCR D JNZ WS5 MOV A,E CALL WPB ; VYSILA ZNAK PODELNE PARITY POP B INR C ; ZVETSI CISLO BLOKU DCR B JNZ WS4 CALL WKON JMP STOP ; ZASTAVENI MGF, RET ; ; ; WKON: MVI A,2CH CALL WZNAK ; VYSILA KONCOVOU CAST MVI A,0D0H CALL WZNAK MVI A,0D0H CALL WZNAK MVI A,2CH CALL WZNAK MVI A,0D0H CALL WZNAK MVI A,0D0H JMP WZNAK ; ; ; TABULKA OPRAV - RADKY A SLOUPCE MATICE TO: DB 000H,011H,022H,099H DB 033H,044H,055H,0AAH DB 066H,077H,088H,0BBH DB 0CCH,0DDH,0EEH,0FFH DB 000H,033H,066H,0CCH DB 011H,044H,077H,0DDH DB 022H,055H,088H,0EEH DB 099H,0AAH,0BBH,0FFH ; ; OPRAV: SUB A ; OPRAVI SEGMENT 256 BYTE STA COP ; NULOVANI CITACE OPRAV OP9: LXI D,TO ; NASTAVENI ADRESY TO MVI B,8 ; POCET CYKLU TESTU OP4: MVI C,4 ; POCET CYKLU V RADCE SUB A STA PCH ; NULOVANI POCTU CHYB V RADCE OP3: PUSH D CALL COMP JZ OP2 ; TEST SPRAVNOSTI BLOKU LXI H,PCH INR M ; ZVETSENI POCTU CHYB V RADCE OP2: POP D INX D DCR C JNZ OP3 ; TEST KONCE CYKLU V RADCE LDA PCH CPI 1 JZ OPRAVA ; PRI 1 CHYBE V RADCE ==> 1 CHYBNY BLOK DCR B JNZ OP4 ; TEST KONCE CYKLU NA VSECH RADKACH MVI B,10H ; TEST SPRAVNOSTI CELEHO SEGMENTU LXI H,KB MVI A,0FFH OP5: CMP M STC RNZ ; NAVRAT, CY=1 - SEGMENT NELZE OPRAVIT INX H DCR B JNZ OP5 XRA A ; CY=0 - OPRAVENY SEGMENT RET OPRAVA: DCX D ; UKAZUJE DO TO NA POSLEDNI BLOK RADKU MVI B,4 ; POCET CYKLU LXI H,SB1 OP6: PUSH D PUSH H CALL COMP ; 0 - O.K. MOV M,A JNZ OP7 ; TEST NA CHYBNY BLOK POP H POP D LDAX D ANI 0F0H MOV M,A ; OBSAZENI SB1 - SB3 INX H OP8: DCX D DCR B JNZ OP6 LXI H,COP ; OPRAVA BLOKU V RADCE INR M ; POCET OPRAV LHLD AZ MVI A,10H ; POCET CYKLU OP1: PUSH PSW PUSH H LXI H,SB1 MOV C,M ; C = SB1 INX H MOV B,M ; B = SB2 INX H MOV E,M ; E = SB3 ( CISLO BLOKU * 16 ) INX H MOV D,M ; D = OB POP H ANI 0FH MOV L,A ; L - CISLO BYTU V BLOKU ORA B MOV B,A ; B = ADRESA SPRAVNEHO BYTE MOV A,L ; RELATIVNE K ZACATKU BLOKU ORA C MOV C,A ; C = ADRESA SPRAVNEHO BYTE MOV A,L ORA D MOV D,A ; D = ADRESA OPRAVOVANEHO BYTE MOV A,L ORA E MOV E,A ; E = ADRESA SPRAVNEHO BYTE MOV L,B MOV A,M MOV L,C XRA M MOV L,D MOV M,A ; OPRAVA 1 BYTE POP PSW DCR A JNZ OP1 ; TEST KONCE CYKLU OPRAVY BLOKU JMP OP9 ; ; ; OP7: POP H ; DETEKOVAN CHYBNY BLOK V RADCE POP D ; NASTAV OB LDAX D ANI 0F0H STA OB JMP OP8 ; ; ; COMP: LDAX D ; TEST SPRAVNOSTI BLOKU ANI 0FH ; Z=0 O.K. MOV E,A MVI D,0 LXI H,KB DAD D MVI A,0FFH CMP M RET ; ; ; PAR: LHLD AZ ; OTESTUJE A DOPLNI PODELNOU PARITU MVI B,90H ;SEGMENTU WSG I RSG SUB A PA1: XRA M INX H DCR B JNZ PA1 ORA A RZ ; CY=0, SPRAVNA PARITA DCX H XRA M MOV M,A STC RET ; CY=1, CHYBNA PARITA ; ; ; ; RPB: DCR A JNZ RPB PUSH D ; CTE PULBYTE PUSH H LXÉ D,0600H LXÉ H,TABD RP1º CALÌ RIMÐ » CTÅ ¶ BITU MOÖ A,Å RAL MOÖ E,A DCÒ D JNÚ RP2 DAÄ Ä » DEKODOVANÉ PODLÅ TABD MOÖ A,M POÐ H POÐ D RET RP2: MVI A,17 ZR1: DCR A JNZ ZR1 JMP RP1 ; ; ; ; SYSTEM PROCEDURE MG@RSG: BOOLEAN; MG@RSG: RSG: LXI H,KB ; CTE SEGMENT 256 BYTE SUB A ; NULUJE KB (ZADNY PRIJATY BLOK) MVI B,10H RS1: MOV M,A INX H DCR B JNZ RS1 RS2: SUB A ; NASTAVENI POCTU BLOKU STA PB CALL START MVI A,1 RS3: CALL SYN ; HLEDA ZAVADECI CAST MVI A,10 CALL RPB CPI 80H ; SYN2 MVI A,11 JNZ RS3 MVI A,8 CALL RPB ; KONTROLUJE 1. SYN. ZNAK CPI 0E0H ; SYN1 MVI A,11 JNZ RS3 MVI A,8 CALL RPB ; KONTROLUJE 2. SYN. ZNAK CPI 80H MVI A,11 JNZ RS3 MVI A,8 CALL RPB ; KONTROLUJE 2. SYN. ZNAK CPI 80H MVI A,11 JNZ RS3 MVI A,10 RS4: CALL SYN ; HLEDA SYN. BLOKU MVI A,10 CALL RPB ; SYN1, SYN2 STA CB MOV E,A RLC JNC RS5 ; PRECTENO CISLO BLOKU RLC MVI A,9 JC RS4 ; CHYBNY ZNAK LDA PB ORA A JNZ RS7 ; 2. SYN. ZNAK - TEST NA KONEC MVI A,6 JMP RS4 RS5: MVI D,0 LXI H,KB DAD D MOV A,M INR A MVI A,6 JZ RS4 ; TEST NA 2. CTENI TEHOZ BLOKKU LHLD ZONA MOV A,E RLC RLC RLC RLC MOV L,A ; NASTAVENI ADRESY BLOKU MVI D,10H MVI A,1 RS6: CALL RPB ; CTE BLOK 16 BYTE, HORNI PULBYTE ORA A MOV B,A MVI A,11 JM RS4 MOV A,B XRA E ; POCITA PODELNOU PARITU MOV E,A MOV A,B RLC RLC RLC RLC MOV C,A MVI A,5 CALL RPB ; CTE SPODNI PULBYTE ORA A MOV B,A MVI A,11 JM RS4 MOV A,B XRA E MOV E,A MOV A,B ORA C MOV M,A ; ULOZENI 1 BYTE INX H DCR D MVI A,5 JNZ RS6 CALL RPB ; CTE ZNAK PODELNE PARITY CMP E ; KONTROLA PODELNE PARITY MVI A,11 JNZ RS4 LXI H,KB MVI D,0 LDA CB MOV E,A DAD D MVI M,0FFH ; ZAZNAM FF DO KB - SPRAVNE PRECTENY LXI H,PB ; BLOK INR M MVI A,4 JMP RS4 RS7: CALL STOP LHLD ZONA SHLD AZ CALL OPRAV JC CH ; CHYBNY SEGMENT CALL PAR JC CH LXI H,PS ; STATISTIKA CHYB LDA COP ; POCET OPRAV MVI D,0 MOV E,A DAD D INR M RET ; ROP: PUSH PSW ; INICIALIZACE PUSH H LXI H,PS MVI A,8 RO1: MVI M,0 ; NULOVANI STATISTICKYCH BUNEK INX H DCR A JNZ RO1 POP H POP PSW RET ; ; SYN: DCR A JNZ SYN LXI H,0FFFFH ; VYHLEDA SYNCHRONIZACNI POSLOUPNOST SY1: CALL RIMP ; 001011 110100 RAL ANÉ 1 DAÄ H ADÄ L MOÖ L,A CPÉ 0F4H JNÚ SY2 MOÖ A,H ANÉ 0FH CPÉ 2 RZ MVI B,13 ZR2: DCR B JNZ ZR2 JMP SY1 SY2: MVI B,14 JMP ZR2 ; ; ; ; STROJOVE ZAVISLA CAST VIDEO EQU 20H ; UMISTENI VIDEO RAM MMG EQU 0DFH ; MASKA - JEN BREAK OCW1 EQU 09FH ; MASKA - BREAK I TIMER P591 EQU 89H ; PORT 8259 P55C EQU 86H P55CW EQU 87H ; ;DEPUL: DB 0 ; KONSTANTA CEKACI SMYCKY ; 1 KHZ - OD ASI 50 DO 7C, OPTIMALNE ASI 60 ; 2 KHZ - OD ASI 20 DO 3C, OPTIMALNE ASI 28 ; ; SYSTEM PROCEDURE MG@INI(VAR BUFADR: WORD) MG@INI: LHLD VIDEO ; MUSI BYT NA HRANICI 256 BYTE SHLD ZONA MOV A,L STAX B ; V BC JE ADRESA, NA KTEROU DAT ADRESU BUFFERU INX B MOV A,H STAX B MOV A,L ; ADRESA CISLA SEGMENTU CALL ROP RET ; ; MG@STR: START: MVI A,MMG ; POVOLENO JEN BREAK OUT P591 MVI A,3 OUT P55CW RET ; MG@STP: STOP: MVI A,OCW1 ; POVOLENO BREAK I CASOVAC OUT P591 RET ; CH: JMP RSG ; PRI CHYBE DALSI SEGMENT ; WZNAK: PUSH B MOV B,A ; NEJVYSSICH 6 BITU AKUMULATORU MVI C,6 ; ZAKODUJ A POSLI NA MGF WZL: MOV A,B RLC MOV B,A JNC WZ1 WZM: IN P55C ; ZAPIS NULU ANI 20H ; CEKEJ NA HODINY JNZ WZM WZN: IN P55C ANI 20H JZ WZN MVI A,1 OUT P55CW WZ1: IN P55C ANI 20H JNZ WZ1 WZNN: IN P55C ANI 20H JZ WZNN XRA A OUT P55CW DCR C JNZ WZL POP B RET ; .COMMENT / RIMP: IN P55C ; PRECTI JEDEN BIT DO CY ANI 80H ; CEKEJ NA 1 JNZ RIMP RIMP1: IN P55C ANI 80H JZ RIMP1 LDA DEPUL RIMP2: DCR A ; ODPOCITEJ DELKU NULY JNZ RIMP2 IN P55C RLC RET / RIMP: PUSH B PUSH D MVI D,0 RI1: INR D IN P55C ANI 80H JZ RI1 MVI A,3 RI3: DCR A JNZ RI3 RI2: INR D IN P55C ANI 80H JNZ RI2 MOV A,D ; DELKA PERIODY ;? MOV M,D ;? INX H RLC MOV B,A ; 2* DO B RRC RRC RRC ANI 1FH ; DELKA PERIODY / 4 MOV C,A ; DO C LDA DELKA MOV D,A RRC RRC RRC ANI 1FH ; PREDCHOZI / 8 MOV E,A ; DO E MOV A,D SUB E ADD C ; DELKA-D-E+C APROXIMACE STA DELKA CMP B POP D POP B RET DELKA: DS 1 ; MGSCAN: ; DO POLE OD 80H DO 0FFH UMISTI CETNOST TRVANI JEDNOTLIVYCH BITU ; Z CELKOVEHO VZORKU 100 BITU. DLE MAXIMA CETNOSTI PAK LZE V HLAVNIM ; PROGRAMU URCIT KMITOCET NAHRAVKY, Z NEJ PROMENNOU DEPUL. ; CALL START LXI H,80H ; VYNULOVANI POLE MOV A,L ; DELKA LP4: MOV M,H INX H DCR A JNZ LP4 ; MOV D,A ; POCET VZORKU 256 LP0: MVI C,0 ; DOBA TRVANI BITU LP: IN P55C INR C ANI 80H JNZ LP LP2: IN P55C INR C ANI 80H JZ LP2 MOÖ A,C ANI 7FH ; PRO JISTOTU ADI 80H ; ADRESA DO POLE CETNOSTI MVI H,0 MOV L,A INR M ; ZMENA CETNOSTI DCR D JNZ LP0 CALL STOP RET END