; ;******* MONITOR IQ 151 ************ ; ;IX.84 ; DATA EQU 8000H P55A EQU 84H ;PORT A P55B EQU 85H ;PORT B P55C EQU 86H ;PORT C P55CW EQU 87H ;RIDICI REGISTR 8255 MX EQU 98H ;RIDICI SLOVO PRO RADKY MY EQU 8AH ;RIDICI SLOVO PRO SLOUPCE CTSH EQU 30H ;MASKA PRO CTRL A SHIFT SHFT EQU 10H ;MASKA PRO SHIFT BSHF EQU 1204H CIM EQU 3 RIAM EQU 0CH LOM EQU 0C0H POM EQU 30H KPR EQU 1 PPR EQU 80H ; P551A EQU 0F8H ;PORT A - PERIFERIE P551B EQU 0F9H ;PORT B P551C EQU 0FAH ;PORT C P551R EQU 0FBH ; RIDICI REGISTR ; BASIC EQU 0C800H ;ZACATEK PRO BASIC MOVA EQU 0C000H ;OBLAST PRO KRESLIC PENPO EQU 179H UP EQU 0 PORTA EQU 0F0H PORTB EQU 0F4H CR EQU 0DH LF EQU 0AH ICW1 EQU 0F7H P590 EQU 88H ;ADRESA 8259 A0=0 P591 EQU 89H ; A0=1 OCW1 EQU 10011111B ; POVOLENO JEN IRQ6,IRQ5 MMG EQU 11011111B ; POVOLEN JEN BREAK EOI EQU 20H ;KONEC PRERUSENI PRO 8259 VRAM EQU 0FEH ; ORG 0F800H ; ; START: JMP CSTRT ;PRO EPROM OD NULY JMP CI ;VSTUP Z KLAVESNICE JMP RI ;VSTUP ZE CTECIHO ZARIZENI JMP CO ;VYSTUP NA OBRAZOVKU JMP PO ;VYSTUP NA PASKU JMP LO ;VYSTUP NA TISKARNU JMP MGRI ;VSTUP Z MG JMP MGPO ;VYSTUP NA MG ; ; CSTRT: MVI A,KPR ;KONSTANTA PREADRESACE OUT PPR ;PREADRESOVANI EPROM OD 0F800H MSIZE: ;URCENI VELIKOSTI RAM LXI H,0 MS1: INR H ;BLOKY PO 256 BYTECH MOV A,M CMA MOV M,A ;INVERZNI OBSAH CMP M ;SROVNANI CMA MOV M,A ;PUVODNI HODNOTA JZ MS1 ;JESTE RAM DCX H ;POSLEDNI ADRESA RAM MOV A,H CPI 0E8H JC MS2 MVI H,0E7H MS2: SHLD MEMTOP ;ULOZENI MVI L,(DATA-62) AND 0FFH SPHL ;SP MONITORU PUSH H MOV B,H MVI C,(DATA-32) AND 0FFH LXI H,JTBL ;PRESUN TABULKY PRERUSENI LXI D,JTBLE ;Z ROM DO RAM CALL MOV0 ; LXI B,KIC LXI H,VARIN LXI D,VARED CALL MOV0 ;INIT PROMENNYCH MONITORU ; LDA MOVA ;ROM KRESLICE CPI 3EH ;TEST UMISTENI JNZ TVRAM MVI A,UP STA PENPO OUT PORTB MVI A,0B6H OUT PORTA+3 XRA A OUT PORTA+2 MVI A,10H OUT PORTA+2 MVI A,32H OUT PORTA+3 MVI A,1 OUT PORTA XRA A OUT PORTA MVI A,72H OUT PORTA+3 MVI A,1 OUT PORTA+1 XRA A OUT PORTA+1 ; TVRAM: LXI H,IOBYT ;INIT MVI M,69H ;STATUS IO ; LXI H,0EC00H ;INIT VIDEO IN VRAM ;URCENI VELIKOSTI VIDEO RAM INR A JZ IPER MVI A,40H ;2 KBYTE-64 ZNAKU/RADEK STA DRAD MVI H,0E8H ; IPER: SHLD VIDEO MVI A,10110100B ;MOD 8255 A-VSTUP,B-VYSTUP-KLAVESNICE ; MOD 1 OUT P551R ; MVI A,00001001B ;INTE A=1 OUT P551R MVI A,00000101B ;INTE B=1 OUT P551R IN P551A ;FALESNE CTENI CTECKY ; ; JMP INITP ;POKRACOVANI INITU ; ; ;******** PODPROGRAM VSTUPU Z KLAVESNICE IQ 151 ******** ; ; CI: ; PUSH B PUSH H CI1: LDA TIMKL ;CASOVAC KLAVESNICE ANI 1FH JNZ CI1 STA BLBLIK CI2: CALL YKL ;TEST MATICE JNC CI2 ;NENI PLATNY ZNAK CPI 80H ;PRIZNAK SHIFT LXI H,BSHF ;KONSTANTA PRO BELL JZ BELX2 INR L JMP BELX2 ; ;*************************************** ; YKL: DI MVI A,MX ;MOD 55 OUT P55CW IN P55A ;STAV SLOUPCU CALL LOGA ;VYHODNOCENI MVI A,MY ;MOD 55 OUT P55CW ;OBNOVENI MODU EI RNC ;NEPLATNY STISK MOV H,L ;CISLO SLOUPCE IN P55B ;STAV RADKU CALL LOGA ;VYHODNOCENI RNC ;NEPLATNY STISK MOV A,L ;CISLO RADKU ADD A ADD A ADD A ORA H ;CISLO KLAVESY LXI H,YKL6 ;NAVRATOVA ADRESA PUSH H LXI H,TABCI;TABULKA KODU ADD L MOV L,A ;ADRESA PODLE CISLA MOV C,M ;ODPOVIDAJICI KOD MOV A,C ;KOD YKL3: CPI 18H ;TEST CTRL ZNAKU JNZ YKL7 LDA BLIKZ JMP YKL5 YKL7: CPI 21H RC IN P55C ;STAV CTRL A SHIFT CMA ;INVERZE ANI CTSH ;MASKA CTRL A SHIFT RZ ;PLATNY ZNAK ANI SHFT ;MASKA SHIFT JZ YKL4 ;CTRL ZNAK MOV H,A MOV A,C CPI '@' ;TEST KODU MOV A,H JC YKL2 ;KOD < 40H ADD A YKL2: XRA C ;UPRAVA DLE SHIFT MOV C,A ;KOD MVI A,80H ;PRIZNAK SHFT RET YKL4: MOV A,C ;KOD CPI '@' ;TEST KODU RC ANI 1FH ;UPRAVA NA CTRL YKL5: MOV C,A YKL6: LXI H,TIMKL ;CASOVAC KLAVESNICE DCR M INR M ;NASTAVENI PRIZNAKU STC ;PLATNY ZNAK RNZ INR M ;TIMKL=1 RET ;**************************************** ; ; TABCI: ;TABULKA PRO DEKODOVANI KLAVESNICE ; DB '12345678' DB 'QWERTYUI' DB 'ASDFGHJK' DB 'ZXCVBNM,' DB '9OL.',0DH,1DH,1CH,1 DB '0P',';/\',1EH,8,2 DB '^[]',1AH,5,0BH,0CH,4 DB '-@: _',19H,18H,3 ; ;******************************************** ; LOGA: MVI L,8 ;POCET BITU LOGA1:DCR L ;POCITADLO CMC RM ;NEBYLO STISKNUTO RLC JC LOGA1 ;DALSI ADI 2 RET ;**************************************** ; ; ; BELX: PUSH B ;SAVE REG. PUSH H BELX1:DI LHLD PBEEP ;PROMENNA HOUKACKY BELX2:PUSH D ;SAVE MOV E,L ;T 2-DOBA PULPERIODY MVI A,6 ;RIDICI SLOVO PRO C PORT BEEP1:MOV D,E OUT P55CW ;RIZENI PC3 BEEP2:DCX H DCR H INR H JZ BEEP3 DCR D JNZ BEEP2 XRI 1 JMP BEEP1 BEEP3:POP D ;RESTORE POP H MOV A,C ;ZNAK Z KLAVESNICE POP B EI RET ; ROLL: PUSH B ;SAVE PUSH D LHLD VIDEO ;ADRESY PRESUNU MOV E,L MOV D,H LDA DRAD MOV L,A LDA KOST ;DELKA STRANKY MOV C,A ROLL1:LDA DRAD MOV B,A ROLL2:MOV A,M STAX D INX D INX H DCR B JNZ ROLL2 ;JEDEN RADEK DCR C ;POCITADLO RADKU JNZ ROLL1 LDA DRAD ;POSLEDNI RADEK VYMAZAT MOV C,A MVI A,20H ROLL3:STAX D INX D DCR C JNZ ROLL3 POP D POP B RET ; ;************************************************ ; ORG 0F000H ; ;************************************************ ; ;* PODPROGRAM VYSTUPU NA OBRAZOVKU IQ 151 * ; ; CIO: CALL CIA ;VSTUP Z KLAVESNICE MOV C,A ;ZNAK JMP COA ; LIST CO: PUSH PSW PUSH B ;ULOZENI REGISTRU PUSH D PUSH H LXI H,ECO ;NAVRATOVA ADRESA PUSH H LXI H,BLBLI ;BLOKOVANI BLIKANI MOV M,L LDA BLIKZ ;OBNOVENI PUVODNIHO ZNAKU LHLD KURSO ;POD KURSOREM MOV M,A LXI D,GRAF ;PTR-STAV GRAFIKY MOV A,C ;ZNAK CPI 20H ;TEST CTRL ZNAKU JP ZAPIS ;>=20H,ZAPIS NA OBRAZOVKU SUI 7 RC ;CTRL<7 LXI H,BRAN ;TABULKA ADRES CTRL FUNKCI ADD L MOV L,A ;ADRESA FUNKCE PUSH D ;SAVE MOV E,M ;OFFSET MVI D,0 LXI H,ERASE ;ZACATEK FUNKCI DAD D ;VYPOCET ADRESY POP D ;RESTORE PUSH H ;NAVRATOVA ADRESA LXI H,POSIC ;PTR RET BRAN: DB (BEL-ERASE) AND 0FFH DB (CL-ERASE) AND 0FFH DB (TAB-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME-ERASE) AND 0FFH DB (CRTN-ERASE) AND 0FFH DB (GR-ERASE) AND 0FFH DB (GR-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (INV-ERASE) AND 0FFH DB (INV-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (CRG-ERASE) AND 0FFH DB (CU-ERASE) AND 0FFH DB (CD-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB (IC-ERASE) AND 0FFH DB (DC-ERASE) AND 0FFH DB (HOME1-ERASE) AND 0FFH DB 0 ERASE:LHLD VIDEO ;ZACATEK VIDEO RAM LDA DRAD ;DELKA RADKU ERAS1:MVI B,20H ;DELKA STRANKY ERAS2:MVI M,20H ;PLNENI MEZEROU INX H DCR B JNZ ERAS2 DCR A JNZ ERAS1 HOME: LXI H,0 ;PRESUN KURSORU SHLD POSICE ;DO 1.POSICE 1.RADKU HOME1:RET BEL: JMP BELX ;SIGNALIZACE CL: LHLD KURSO ;ADRESA KURSORU DCX H ;-1 LDA VIDEO+1 DCR A CMP H CL1: RZ ;NEJDE UZ DAL CL2: LDA DRAD ;DELKA RADKU MOV C,A ;SAVE DCR A ;-1 ANA L STA POSICE ;POSICE NA RADKU MOV A,C ;RESTORE CPI 40H ;TEST POCTU ZNAKU NA RADEK JZ CL3 DAD H CL3: DAD H DAD H MOV A,H ANI 1FH STA RADEK ;ULOZENI CISLA RADKU MOV H,A LDA KOST ;DELKA STRANKY INR A CMP H ;TEST RADEK RNZ ;OK LHLD KURSO ;ADRESA KURSORU JMP CL2 CRG: LHLD KURSO ;ADRESA KURSORU INX H ;POSUN JMP CL2 CU: INX H ;PTR NA RADEK MOV A,M DCR A ;RADEK-1 RM ;HORNI KONEC OBRAZOVKY MOV M,A ;ULOZENI RET CD: INX H ;PTR NA RADEK LDA KOST ;DELKA STRANKY CMP M ;RADEK RZ ;DOLNI KONEC OBRAZOVKY INR M RET TAB: MOV A,M ;POSICE ANI 0F8H ;URCENI ZONY ADI 8 ;4 ZONY PO 8 ZNACICH MOV C,A LDA DRAD DCR A ANA C MOV M,A RET IC: MVI B,' ' ;PLNICI ZNAK LDA KIC ;DELKA RADKU MOV C,A ;SAVE MOV A,M ;POSICE INX H MOV D,M LHLD KURSO ;ADRESA KURSORU IC3: DCR C ;KIC-1 RM PUSH H ;SAVE H INR A ;POSICE+1 LXI H,DRAD ;DELKA RADKU CMP M ;POSICE=DELKA RADKU JNZ IC1 ;NO LDA KOST CMP D ;RADEK=DELKA STRANKY JNZ IC2 ;NO CALL ROLL LXI H,RADEK DCR M NOP POP H PUSH B LDA DRAD CMA MOV C,A MVI B,0FFH DAD B POP B PUSH H IC2: XRA A IC1: POP H ;RESTORE MOV E,M ;ZNAK POD KURSOREM MOV M,B ;PLNICI ZNAK PUSH B MOV C,A MOV A,B CPI CR MOV A,C POP B RZ MOV B,E INX H JMP IC3 INV: INX D ;PTR-STAV INVERZE GR: MOV A,C ;ZNAK ANI 1 STAX D ;ULOZENI STAVU RET DC: LDA KIC ;DELKA RADKU MOV C,A DCR C MOV B,M ;POSICE INX H MOV D,M ;RADEK LHLD KURSO MOV A,M DC3: CPI CR RZ DCR C ;KIC-1 JM DC1 INX H INR B LDA DRAD CMP B ;POSICE=DELKA RADKU? JNZ DC2 ;NO LDA KOST CMP D ;RADEK=DELKA STRANKY RZ MVI B,0 ;POSICE=0 INR D ;RADEK+1 DC2: MOV A,M DCX H MOV M,A INX H JMP DC3 DC1: MVI M,CR RET CRTN: MVI M,0 ;POSICE=0 LXI H,0 SHLD GRAF ;NULOVANI MODU CRT LHLD KURSO ;ADRESA KURSORU MOV M,C ;ZAPIS CR DO OBRAZOVKY LDA RCR ;POCET RADKU PO CR MOV C,A CRTN1:LXI H,RADEK ;POLOHA KURZORU LDA KOST ;HRANICE STRANKY CMP M ;SROVNANI JNZ CRTN2 ;OK CALL ROLL ;ROLING DB 0FEH ;(CPI) CRTN2:INR M ;RADEK=RADEK+1 DCR C ;POCITADLO RADKU PO CR JNZ CRTN1 ;JESTE DALSI RET ZAPIS:XCHG MOV A,M ;GRAFIKA-STAV ANI 1 ;MASKA,1-GRAFIKA JZ ZAP1 MOV A,C ;ZNAK SUI 40H ;GRAF.ZNAKY 40H-5FH RM CPI 20H ;UPRAVA NA 0-1FH RP MOV C,A ZAP1: INX H ;INVERZE-STAV MOV A,M ANI 1 MOV A,C ;ZNAK JZ ZAP2 ORI 80H ;UPRAVA-INVERZE ZAP2: LHLD KURSO ;ADRESA KURSORU MOV M,A ;ZOBRAZENI LXI H,POSICE INR M ;POSICE+1->POSICE LDA DRAD ;DELKA RADKU DCR A CMP M ;TEST KONCE RADKU RP ;OK MVI M,0 ;POSICE=0 INX H ;RADEK INR M ;RADEK+1->RADEK LDA KOST ;DELKA STRANKY CMP M ;TEST KONCE STRANKY RP ;OK DCR M ;RADEK-1->RADEK CALL ROLL ;ROLOVANI RET ECO: MVI B,0 ;VYPOCET ADRESY KURSORU LDA DRAD ;DELKA RADKU MOV C,A LDA RADEK LHLD VIDEO DB 0FEH ECO1: DAD B DCR A JP ECO1 LDA POSICE MOV C,A DAD B SHLD KURSO ;ULOZENI MOV A,M ;ZNAK POD KURSOREM STA BLIKZ ;SAVE EECO: POP H ;OBNOVA REGISTRU POP D POP B POP PSW RET ; ;********************************************** ; ; INITP: POP H MVI A,ICW1 OUT P590 MOV A,H OUT P591 XRA A ;ICW4 OUT P591 MVI A,OCW1 OUT P591 MVI A,EOI OUT P590 EI ; LDA BASIC INR A JNZ BASIC ; LXI H,TMONIT ;TEXT MONITOR V2.0 STAR1:CALL PRINT ;VYPIS NA CRT ; ; RECO: LHLD MEMTOP MVI L,(DATA-62) AND 0FFH SPHL MVI A,OCW1 OUT P591 EI CALL COC ;VODICI ZNAK DB '>' CALL CIO ;VSTUP ZNAKU MOV A,C LXI H,CMTAB ;TABULKA PRIKAZU LXI B,NUCMD ;POCET PRIKAZU ; REC1: CMP M ;TEST ROVNOSTI JZ REC2 ;NALEZEN PRIKAZ INX H ;POSUN V TABULCE DCR C ;POCITADLO JNZ REC1 ;DALSI PRIKAZ JMP ERROR ;PRIKAZ NENALEZEN ; REC2: LXI H,CADR-2 ;SKOKOVA TABULKA PRIKAZU DAD B DAD B LXI B,RECO ;NAVRATOVA ADRESA PUSH B ;ULOZENI MVI B,2 ;POCET PARAMETRU MOV A,M ;DOLNI CAST ADRESY INX H MOV H,M ;HORNI CAST ADRESY MOV L,A REC3: PCHL ;SKOK PODLE PRIKAZU ; ; ; CMTAB: DB 'RSCGLDXWMF' NUCMD EQU $-CMTAB CADR: DW FILL ;ADRESY PRIKAZU DW MOVE DW WRITE DW CHANGE DW DISPLAY DW LOAD DW GO DW CALL1 DW SUBST DW RETRN ; ; ERROR: ; CALL COC DB '?' CRO: CALL COC DB CR CALL COC DB LF JMP RECO ; ; ; ; ; TMONIT:DB CR,1FH,'MONITOR',CR OR 80H ;***************************************************** ; ; MOVE: ; INR B ;POCET PARAMETRU CALL EXPR ;VSTUP PARAMETRU POP B ;ADRESA URCENI POP D ;KONEC BLOKU POP H ;ZACATEK BLOKU MOV0: ; MOV A,M STAX B INX B CALL HILO ;TEST KONCE JNC MOV0 ;DALSI ZNAK RET ; ; ;***************************************************** ; ; FILL: ; INR B ;POCET PARAMETRU CALL EXPR ;VSTUP PARAMETRU POP B ;PLNICI ZNAK POP D ;KONEC PLNENI POP H ;ZACATEK PLNENI FI0: ; MOV M,C ;ULOZENI CALL HILO ;TEST KONCE JNC FI0 ;DALSI ULOZENI RET ; ;***************************************************** ; WRITE: ; ; INR B ;3 PARAMETRY CALL EXPR ;VSTUP PARAMETRU POP B ;START.ADRESA POP D ;KONCOVA ADRESA POP H ;ZAC.ADRESA PUSH B ;START ADRESA CALL STARW ;START MOTORU ZAZNAM ; WR1: PUSH H ;ZAC.ADRESA LXI B,50H ;DELKA BLOKU DAD B CALL HILO1 ;DE-HL POP H ;ZAC.ADRESA MOV A,C ;DELKA BLOKU JNC WR2 ;DELKA=50H MOV A,E SUB L ;MENSI DELKA INR A ; WR2: PUSH D ;SAVE KONC.ADRESA MOV B,A ;DELKA BLOKU MVI D,0 ;INIT CHECKSUM CALL POC ;ZAZNAM ':' DB ':' MOV A,B ;DELKA BLOKU CALL PBYTE ;ZAZNAM ORA E ;DELKA BLOKU JZ WR5 ;DELKA=0 CALL PADR ;ZAZNAM ADRESY XRA A CALL PBYTE ;TYP ZAZNAMU ; WR3: MOV A,M ;DATA INX H ;POSUN PTR CALL PBYTE ;ZAZNAM DCR B ;DELKA BLOKU JNZ WR3 ;DALSI DATA CMA INR A ;CHECKSUM CALL PBYTE ;ZAZNAM CALL POC ;ZAZNAM CR DB CR CALL POC ;ZAZNAM LF DB LF POP D ;RESTORE KONC.ADRESA JMP WR1 ; ; WR5: POP H POP H ;START ADRESA CALL PADR ;ZAZNAM MVI A,1 ;KONCOVY ZAZNAM CALL PBYTE CMA INR A ;CHECKSUM CALL PBYTE ;ZAZNAM CALL POC DB CR CALL POC DB LF RET ; ; ; ;****************************************************************** ; CHANG: ; CALL CIO ;VSTUP ZNAKU MOV A,C CPI CR JNZ CHAN2 CHAN0:LXI H,TREG ;JMENA REGISTRU CALL PRINT ;VYPIS DI LXI D,FSAVE MVI B,6 CHAN1: XCHG MOV E,M INX H MOV D,M INX H XCHG CALL PRHL CALL COC DB ' ' DCR B JNZ CHAN1 JMP CRO ; CHAN2: ; LXI H,ACTBL ;TABULKA IDENT.REGISTRU MVI C,10 ;POCET REGISTRU ; CHAN3: CMP M ;SROVNANI JMENA JZ CH4 ;STEJNE INX H ;PRESKOK ADRESY A PRIZNAKU INX H INX H DCR C ;POCET JNZ CHAN3 JMP ERROR ;CHYBNY IDENT ; CH4: CALL COC ;VYPIS DB ' ' CH7: CALL DREG ;VYPIS OBSAHU REG CALL COC ;ODDELENI DB '-' CALL CIO ;VSTUP ZNAKU MOV A,C ;ZNAK CALL P2C ;TEST ODDELOVACE RC ;UKONCENI CR JZ CH5 ;ODDELOVAC PUSH H PUSH B LXI H,0 CALL EXPH1 ;VSTUP NOVEHO OBSAHU MOV A,L ;DOLNI BYTE STAX D ;ULOZENI POP PSW ;PRIZNAK ORA A ;TEST JM CH6 ;1 BYTE REG. INX D ;POSUN PTR MOV A,H ;HORNI BYTE STAX D ;ULOZENI CH6: POP H ;RESTORE CH5: XRA A ORA M JM LCRLF ;KONEC TABULKY MOV A,C ;ODDELOVAC CPI CR RZ ;UKONCENI FUNKCE JMP CH7 ;DALSI REG. ; ; TREG: DB ' A F B C D E H L S P' DB CR,LF OR 80H ; DREG: INX H ;POSUN NA ADRESU MOV E,M ;PREVZETI MVI D,FSAVE SHR 8 ;HORNI BYTE ADRESY INX H ;POSUN NA PRIZNAK MOV B,M ;PRESUN INX H ;POSUN PTR LDAX D ;HODNOTA REGISTRU CALL HEXCO ;VYPIS DCR B RM ;JENOM 1 BYTE DCX D ;POSUN PTR LDAX D ;2 BYTE JMP HEXCO ;VYPIS ; ACTBL: DB 'A',ASAVE AND 0FFH,0 DB 'F',FSAVE AND 0FFH,0 DB 'B',BSAVE AND 0FFH,0 DB 'C',CSAVE AND 0FFH,0 DB 'D',DSAVE AND 0FFH,0 DB 'E',ESAVE AND 0FFH,0 DB 'H',HSAVE AND 0FFH,0 DB 'L',LSAVE AND 0FFH,0 DB 'S',(SSAVE AND 0FFH)+1,1 DB 'P',(PSAVE AND 0FFH)+1,1 DB -1 ; ; ; ;********************************************************************* ; ; DISPL: ; DCR B ;POCET PARAMETRU CALL EXPR ;VSTUP POP H ;POCATECNI ADRESA ; DISP0: LDA KOST ;DELKA STRANKY RRC MOV B,A DISP1: DCR B ;POCITADLO JZ DISP3 ;KONEC TISKU CALL LCRLF CALL LPRHL ;VYPIS ADRESY DISP2: CALL LOC DB ' ' MOV A,M ;OBSAH PAMETI CALL LHXCO ;VYPIS INX H ;POSUN MOV A,L ANI 7 ;TEST KONCE RADKU JNZ DISP2 ;NENI KONEC RADKU JMP DISP1 ;NOVY RADEK ; DISP3: CALL CIA ;VSTUP ZNAKU CPI CR JZ LCRLF ;KONEC FUNKCE JMP DISP0 ;POKRACOVANI VYPISU ; ;********************************************************* ; LOAD: ; ; DCR B ;POCET PARAMETRU CALL EXPR ;VSTUP BAZOVE ADRESY IN P551A ;FALESNE CTENI CALL STARR ;SPUSTENI MOTORU MG ; READH: CALL RIX ;VSTUP ZNAKU SUI ':' ;CEKANI NA ':' JNZ READH MOV D,A ;INIT KONTROLNIHO SOUCTU CALL RBYTE ;DELKA BLOKU MOV E,A ;SAVE CALL RBYTE ;HORNI BYTE ADRESY MOV H,A CALL RBYTE ;DOLNI BYTE ADRESY MOV L,A MOV A,E ;DELKA BLOKU ANA A ;TEST JNZ RHEX1 ;NENI KONEC MOV A,L ORA H ;TEST ADRESY POP D ;SNIZENI ZASOBNIKU JZ RECO ;DALSI PRIKAZ MVI A,OCW1 OUT P591 PCHL ;SKOK PODLE ADRESY ; ; RHEX1: POP B ;BAZOVA ADRESA PUSH B DAD B ;BAZE + ADRESA CALL RBYTE ;TYP ZAZNAMU RHEX2: CALL RBYTE ;DATA MOV M,A ;ULOZENI INX H ;POSUN PTR DCR E ;POCITADLO DELKY BLOKU JNZ RHEX2 ;DALSI DATA CALL RBYTE ;KONTROLNI SOUCET JZ READH ;V PORADKU,DALSI CTENI JMP ERROR ;CHYBNA DATA,UKONCENI ; ; ;***************************************************************** ; CALL1: ; ; LHLD SSAVE LXI D,RETADR MOV M,E INX H MOV M,D ;JMP GO GO: ; CALL CIO ;VSTUP ZNAKU MOV A,C CALL P2C ;TEST ODDELOVACE JC RGRS JZ ERROR ;CHYBNY ODDELOVAC LXI H,0 CALL EXPH1 ;VSTUP ADRESY JNC ERROR ;CHYBNY ODDELOVAC GO2: SHLD PSAVE ;ZMENA PROGR.CITACE RGRS: DI ;OBNOVA REGISTRU LXI SP,FSAVE POP PSW ;OBNOVA AF POP B ; BC POP D ; DE LHLD SSAVE ;UKAZATEL STACKU SPHL ;OBNOVA LHLD PSAVE ;PROGR.CITAC PUSH H LHLD LSAVE ;OBNOVA HL EI RET ;SKOK DO PROGRAMU ; ;************************************************************* ; RETADR: CALL REGSV JMP RECO ; ;************************************************************** ; SUBST: ; CALL EXPHL ;VSTUP PARAMETRU RC ;NAVRAT PRI CR CPI ',' JZ ERROR ;CHYBNY ODDELOVAC SUBSZ: CALL CRLF CALL PRHL ;VYPIS ADRESY CALL COC DB ' ' MOV A,M ;OBSAH CALL HEXCO ;VYPIS CALL COC DB '-' CALL CIA ;VSTUP ZNAKU MOV C,A ;SAVE SUB1: MOV A,C ;ZNAK CALL P2C JC CRO ;UKONCENI JZ SUB4 ;DALSI VYPIS CPI 19H ;CUP JZ SUB5 ;ADRESA ZPET CALL COA PUSH H LXI H,0 ;POCATECNI NASTAVENI CALL EXPH1 ;VSTUP NOVE HODNOTY MOV A,L ;NOVA DATA POP H MOV M,A ;ULOZENI CMP M ;SROVNANI JNZ ERROR MOV A,C CPI CR RZ JMP SUB1 SUB4: INX H ;POSUN DB 0FEH ;PRESKOK SUB5: DCX H JMP SUBSZ ; ;**************************************************************** RETRN:LHLD ARETN PCHL ; ; SKIP ;***************************************************** ; ; POMOCNE PODPROGRAMY ; ;***************************************************** ; PRINT: MOV A,M ;ZNAK ORA A ;TEST MOV C,A JM PRIN1 ;POSLEDNI ZNAK CALL COA INX H JMP PRINT ;DALSI ZNAK PRIN1:ANI 7FH ;MASKA MOV C,A JMP COA ; ;***************************************************** ; ; HILO: ; INX H ;TEST HL NA 0FFFFH MOV A,H ORA L STC RZ HILO1: MOV A,E SUB L ; E - L -> A MOV A,D SBB H ; D - H - BORROW -> A RET ; ; CARRY=1 KDYZ HL > DE ; ;***************************************************** ; ; NIBBLE: ; SUI '0' RC ;MENSI NEZ '0' ; ADI '0'-'G' RC ;VETSI NEZ 'F' ; ADI 6 JP NI0 ;MEZI 'A'-'F' ; ADI 7 RC ;VETSI NEZ '9',MENSI NEZ 'A' ; NI0: ADI 0AH ORA A ;CARRY=0 RET ; ;CARRY=0 JE-LI V A HEXA CISLICE ; ;***************************************************** ; ; P2C: ; CPI ' ' ;TEST NA MEZERU RZ ; CPI ',' ;TEST CARKY RZ ; CPI CR ;TEST CR STC RZ ; CMC RET ; ;ZERO=1 JE-LI PLATNY ODDELOVAC,CARRY=1 JE-LI CR ; ;***************************************************** ; ; EXPHL: ; LXI H,0 ;POCATECNI NASTAVENI MEXO: CALL CIO ;VSTUP ZNAKU EXPH1:MOV A,C ;ZNAK CALL NIBBLE ;TEST HEXA CISLICE JC EXPH2 ;NENI HEXA CISLICE DAD H ;*2 DAD H ;*4 DAD H ;*8 DAD H ;*16 POSUN HL O 4 BITY DOLEVA ORA L ;PRIPOJENI VSTUP. ZNAKU MOV L,A JMP MEXO ;DALSI ZNAK ; EXPH2: MOV A,C ;ZNAK CALL P2C ;TEST ODDELOVACE RZ ;OK JMP ERROR ; ;********************************************************** ; EXPR1: POP PSW JC ERROR ; EXPR: ; CALL EXPHL ;VSTUP JEDNOHO PARAMETRU XTHL ;ULOZENI DO STACKU PUSH H ;NAVRATOVA ADRESA PUSH PSW DCR B ;POCET PARAMETRU JNZ EXPR1 POP PSW JNC ERROR RET ; ;**************************************************************** ; RBYTE: CALL RIX ;VSTUP ZNAKU CALL NIBBLE ;PREVOD NA BIN.TVAR RLC RLC RLC RLC MOV C,A ;SAVE CALL RIX ;VSTUP DRUHEHO ZNAKU CALL NIBBLE ;PREVOD ORA C ;SESTAVENI MOV C,A ;SAVE ADD D ;KONTROLNI SOUCET MOV D,A ;SAVE MOV A,C ;OBNOVENI DAT RET ; ;********************************************************* ; ; RIX: CALL RIA ;VSTUP ZE CTECKY ANI 7FH ;MASKA PARITY RET ; ;*************************************************** ; ; SINB2:MOV M,A ;ULOZENI DO BUFRU INR L ;POSUN PTR SUI CR ;TEST CR JNZ WKL1 ;NE MOV L,A ;INIT PTR=0 SHLD BUFR ;SAVE POP B ;RESTORE POP D DB 0FEH ;(CPI) MGRI: PUSH H ;SAVE RIX1A: LHLD BUFR ;PTR INR L ;POSUN SHLD BUFR ;SAVE JZ LDBUF ;IF L=0FFH - CTENI DO BUFRU DCR L MOV A,M ;ZNAK Z BUFRU CPI CR ;TEST CR JNZ RIX2 ;NENI MVI L,0FFH ;PRIZNAK PRAZDNEHO BUFRU SHLD BUFR ;SAVE RIX2: POP H RET ; LDBUF: ;CTENI BLOKU DO BUFRU PUSH D ;SAVE LDA DOBSE ;DOBA TRVANI BITU+POLARITA MOV D,A PUSH B ;SAVE WKL1: WKLID:IN P55C ;CEKANI NA UROVEN PODLE XRA D ;POLARITY JP WKLID MVI B,0FFH ;INIT DAT WHRA1:MVI E,9 ;POCET BITU+STOP+START WHRAS:IN P55C ;CEKANI NA START BIT XRA D XRA B JP WHRAS MOV A,B RAR DCR E ;POCITADLO BITU JZ SINB2 ;KONEC BYTU MOV B,A MOV A,D ANI 7FH WEC: DCR A ;CEKANI JNZ WEC ;DOBA TRVANI BITU IN P55C ;STAV XRA D ;UPRAVA PODLE POLARITY ANI 80H ORA B ;DOCASNA DATA MOV B,A INR A JZ WHRA1 JMP WHRAS ; ;********************************************************* ; MGPO: ; MOV A,C ;VYSTUPUJICI ZNAK PUSH B ORI 80H ;STOP BIT V 7BITU CMA ;INVERZE DAT MOV C,A DI CALL CTSE ;CEKANI NA SEST.HRANU 1 KHZ MVI A,1 ;RIDICI SLOVO PRO PC0 OUT P55CW ;START BIT MVI B,8 ;POCITADLO BITU SOUT1: CALL CTSE MOV A,C ;DATA ANI 1 ;1 BIT OUT P55CW ;VYSTUP MOV A,C RRC MOV C,A DCR B ;POCITADLO JNZ SOUT1 ;DALSI BIT EI POP B ;RESTORE MOV A,C CPI CR CZ WEIT RET ; ;************************************************************* ; CTSE: IN P55C ANI 20H ;MASKA 1 KHZ JZ CTSE ;JESTE NENI "H" COUT1: IN P55C ANI 20H JNZ COUT1 ;JESTE NENI "L" RET ; ;************************************************************** ; WEIT: LDA BTIME ;DOBA MEZIBL.MEZERY PUSH H LXI H,TIME ;CASOVAC 20MS ADD M WEIT3: CMP M ;CEKANI JP WEIT3 POP H RET ; ;********************************************************* ; ; ; CRLF: CALL COC ;VYSTUP CR NA CRT DB CR CALL COC ;VYSTUP LF NA CRT DB LF RET ; ;*************************************************************** ; ; LCRLF: CALL LOC ;VYSTUP CR NA LIST.ZARIZENI DB CR CALL LOC ;VYSTUP LF NA LIST.ZARIZENI DB LF RET ; ;*************************************************************** ; KONVP: RRC ;PREVOD HORNIHO NIBBLE RRC RRC RRC KONV1: ANI 0FH ;MASKA ADI 90H ;PREVOD NA KOD DAA ;ASCII HEX CISLICE ACI 40H DAA MOV C,A RET ; ;*************************************************************** ; ; PRHL: MOV A,H ;VYPIS HL V HEXA TVARU NA CRT CALL HEXCO ;VYPIS H MOV A,L ; HEXCO: PUSH PSW CALL KONVP CALL COA POP PSW CALL KONV1 JMP COA ; ;**************************************************************** ; PADR: ; MOV A,H ;VYPIS HL V HEXA TVARU CALL PBYTE ;NA PASKU MOV A,L ; PBYTE: ; MOV E,A CALL KONVP CALL POA MOV A,E CALL KONV1 CALL POA MOV A,E ADD D MOV D,A ;CHECKSUM RET ; ;:**************************************************** ; LPRHL: MOV A,H ;VYPIS HL V HEXA TVARU CALL LHXCO ;NA TISKARNU MOV A,L ; LHXCO: PUSH PSW CALL KONVP CALL LOA POP PSW CALL KONV1 JMP LOA ; ;**************************************************************** REGSV: SHLD LSAVE ;ULOZENI HL LXI H,2 REGS1:PUSH PSW DAD SP POP PSW SHLD SSAVE ;ULOZENI SP POP H ;NAVRATOVA ADRESA DI LXI SP,DSAVE+1 PUSH D PUSH B PUSH PSW XCHG LHLD MEMTOP MVI L,(DATA-62) AND 0FFH SPHL EI XCHG PCHL ; ;***************************************************************** ; ; CIA: LDA IOBYT ;STAV IO ANI CIM ;MASKA MVI A,CIU1 AND 0FFH JZ @USER ;USER1 LDA IOBYT ANI CIM DCR A JZ CI ;LOCAL CONSOLE DCR A JZ RI ;BATCH MODE MVI A,CIU2 AND 0FFH JMP @USER ;USER2 ; ;******************************************************************* ; ; COC: XTHL ;NAVRATOVA ADRESA - DATA MOV C,M INX H ;PRESKOK DAT XTHL ;OBNOVENI ;JMP COA ;VYPIS COA: LDA IOBYT ;STAV IO ANI CIM ;MASKA MVI A,COU1 AND 0FFH JZ @USER ;USER1 LDA IOBYT ANI CIM DCR A JZ CO ;CRT DCR A JZ LOA ;BATCH MODE MVI A,COU2 AND 0FFH JMP @USER ;USER2 ; ;********************************************************************** ; POC: XTHL ;ADRESA DAT MOV C,M ;DATA INX H XTHL ; POA: LDA IOBYT ;STAV IO ANI POM ;MASKA MVI A,POU1 AND 0FFH JZ @USER ;USER1 LDA IOBYT ANI POM CPI 00010000B JZ PO ;PUNCH CPI 00100000B JZ MGPO ;MAGN.TAPE MVI A,POU2 AND 0FFH JMP @USER ;USER2 ; ;************************************************************************ ; RIA: LDA IOBYT ;STAV IO ANI RIAM MVI A,RIU1 AND 0FFH JZ @USER ;USER1 LDA IOBYT ANI RIAM CPI 00000100B JZ RI ;READER CPI 00001000B JZ MGRI ;MAGN.TAPE MVI A,RIU2 AND 0FFH JMP @USER ;USER2 ; ;************************************************************************** ; LOC: XTHL ;ADRESA DAT MOV C,M INX H XTHL ;JMP LOA LOA: LDA IOBYT ;STAV IO ANI LOM MVI A,LOU1 AND 0FFH JZ @USER ;USER1 LDA IOBYT ANI LOM CPI 01000000B JZ COA CPI 10000000B MVI A,LOU2 AND 0FFH JNZ @USER ;USER2 ; ;************************************************************************ ; LO: MVI A,00001100B OUT P551R MVI A,00001111B OUT P551R LO1: IN P551C ;STATUS ANI 1 ;MASKA INTR JZ LO1 ;NENI READY MOV A,C ;ZNAK OUT P551B ;VYSTUP RET ; ;********************************************************************** ; PO: MVI A,00001110B OUT P551R DCR A OUT P551R PO1: IN P551C ;STATUS ANI 1 JZ PO1 ;NENI READY MOV A,C ;ZNAK OUT P551B ;VYSTUP RET ; ;********************************************************************** ; RI: IN P551C ;STATUS ANI 8 ;MASKA INTR A JZ RI IN P551A ;VSTUP RET ; ;********************************************** ; @USER: PUSH H LHLD MEMTOP MOV L,A XTHL RET ; ;*********************************************** ; STARW: ; MVI B,3 ;START NA 1 MOTORU ; LDA IOBYT ;STATUS PERIF. ANI 30H ;MASKA PO CPI 10H ;TEST DEROVAC MOV C,A CZ LEAD MOV A,C CPI 20H ;TEST MG RNZ ;NENI MG ; MOV A,B OUT P55CW ;START MOTORU RET ; ;************************************************* ; STARR: ; MVI B,3 ;START MOTORU 1 ; LDA IOBYT ;STATUS PERIF. ANI 0CH ;MASKA RI CPI 8 ;TEST MG RNZ ; MVI A,MMG ;MASKA PRERUSENI OUT P591 ;POVOLEN JEN BREAK ; LDA RADEK ;POSICE KURZORU SUI 8 JNC STRR2 MVI C,1AH ;KURZOR DOLU STRR1: CALL CO INR A JNZ STRR1 ; STRR2: LHLD VIDEO DCR L SHLD BUFR MOV A,B OUT P55CW RET ; ;************************************************** ; LEAD: PUSH B ;SAVE LXI B,4000H LEAD1: CALL PO DCR B JNZ LEAD1 POP B RET ; ;**************************************************** ; ; PODPROGRAMY PRERUSENI ; ;********************************************** ; PTIME: ; INTERRUPT 50HZ ; PUSH PSW PUSH H MVI A,EOI OUT P590 EI LXI H,TIMKL ;CASOVAC KLAVESNICE MOV A,M ;OBSAH ANA A ;TEST CNZ PT1 ;OSETRENI KLAVESNICE INX H ;BLOKOVANI BLIKANI MOV A,M ;OBSAH INX H ANA A ;TEST CZ BLIK ;BLIKANI KURSORU INR M ;CASOVAC 20MS JNZ PT2 INX H ;POSUN NA 2 BYTE CASOVACE INR M JNZ PT2 INX H INR M PT2: POP H POP PSW RET ; ; PT1: IN P55B ;STAV KLAVESNICE INR A MOV A,M ;TIMKL JZ PT3 ;NENI STISKNUTA KLAVESA INR A ;TIMKL+1 ANI 3FH MOV M,A ;ULOZENI CPI 21H RM DCR M RET ; PT3: ANA A ;TEST TIMKL MVI M,0 ;TIMKL=0 RM ADI 80H MOV M,A RET ; ; BLIK: MOV A,M ;TIME ANI 3 RNZ PUSH H LHLD KURSO ;ADRESA KURZORU MOV A,M ;ZNAK XRI 80H ;INVERZE MOV M,A ;ZOBRAZENI POP H RET ; ;********************************************** ; ; BREAK: ; SHLD LSAVE ;ULOZENI HL POP H ;NAVRATOVA ADRESA SHLD ADRBR ;SAVE LXI H,4 ; CALL REGS1 ;USCHOVANI OBSAHU REGISTRU CALL COC DB '#' LHLD ADRBR CALL PRHL ;VYPIS MVI A,EOI OUT P590 EI JMP CRO ; ;********************************************************* ; VARIN: DB 20H ;KONSTANTA DC,IC DB 1EH ;DELKA STRANKY DB 2 ;POCET RADKU PO CR DW 0 DW 1204H ;KONSTANTA PBEEP DW 0EC00H ;INIT PTR BUFRU DB 56H ;DELKA SER.BITU MG DB 33 ;DELKA MEZIBL.MEZERY DW CRO ;NAVRATOVA ADRESA PO R DB 20H ;DELKA RADKU DW 0EC00H DB 0 ;INIT UZIVATELSKYCH DB 0 ;REGISTRU DB 0 DB 0 DB 0 DB 0 DB 0 DB 0 DW 7FA0H DW 1000H ; VARED EQU VARIN+1BH ; ; JTBL: JMP START ;IRQ 0 DB 0FFH JMP START ;IRQ 1 DB 0FFH JMP START ;IRQ 2 DB 0FFH JMP START ;IRQ 3 DB 0FFH JMP START ;IRQ 4 DB 0FFH JMP BREAK ;IRQ 5 DB 0FFH JMP PTIME ;IRQ 6 DB 0FFH JMP START ;IRQ 7 JTBLE:DB 0FFH ; ; ORG 3 ; ; ;**** OBLAST PROMENNYCH MONITORU **** ; ; IOBYT:DS 1 ;STATUS IO MEMTO:DS 2 ;VRCH RAM TIMKL:DS 1 ;CASOVAC KLAVESNICE BLBLI:DS 1 ;BLOKOVANI BLIKANI TIME: DS 3 ;CASOVAC 20MS BLIKZ:DS 1 ;ZNAK POD KURZOREM KURSO:DS 2 ;ADRESA KURSORU POSIC:DS 1 ;POSICE KURSORU NA RADCE RADEK:DS 1 ;RADEK KDE SE NACHAZI KURSOR GRAF: DS 1 ;STATUS MODU GRAFIKY INV1: DS 1 ;STATUS MODU INVERZE KIC: DS 1 ;KONSTANTA PRO DC,IC KOST: DS 1 ;DELKA STRANKY NA CRT RCR: DS 1 ;POCET ODRADKOVANI PO CR ADRBR:DS 2 ;NAVRATOVA ADRESA BREAK PBEEP:DS 2 ;KONSTANTA HOUKACKY ; BUFR: DS 2 ;UMISTENI BUF. PRO MG DOBSE:DS 1 ;DOBA TRVANI 1 BITU - 1KHZ BTIME:DS 1 ;MEZIBLOKOVA MEZERA ARETN:DS 2 ;ADRESA SKOKU PO R DRAD: DS 1 ;DELKA RADKU NA CRT VIDEO:DS 2 ;UMISTENI VIDEO ; ; FSAVE:DS 1 ;OBLAST USCHOVANI UZIVATELSKYCH ASAVE:DS 1 ;REGISTRU CSAVE:DS 1 BSAVE:DS 1 ESAVE:DS 1 DSAVE:DS 1 LSAVE:DS 1 HSAVE:DS 1 SSAVE:DS 2 PSAVE:DS 2 ; ; ORG DATA-62 ; ; CIU1:DS 3 CIU2:DS 3 COU1:DS 3 COU2:DS 3 POU1:DS 3 POU2:DS 3 RIU1:DS 3 RIU2:DS 3 LOU1:DS 3 LOU2:DS 3 ; IRQ0: DS 4 IRQ1: DS 4 IRQ2: DS 4 IRQ3: DS 4 IRQ4: DS 4 IRQ5: DS 4 IRQ6: DS 4 IRQ7: DS 4 END