.Z80 ; ************************************************** ; * * ; * M O N I T O R Z 8 0 * ; * * ; * LUMIR VANEK * ; * * ; ************************************************** ; TITLE * * * M O N I T O R Z 8 0 * * * ; ; M A P A P O R T U ; ;----------------------------------------------------------- ;00 PA - OUT KLAVESNICE ;01 PB - IN KLAVESNICE, TISKARNA ;02 PC - OUT D/A PREVODNIK ;03 CW PPI 8255/1 ;----------------------------------------------------------- ;04 KANAL 0 ;05 KANAL 1 DELI 125 ;06 KANAL 2 REFRESH (0,2 SEC.) ;07 KANAL 3 TIME (1 SEC.) CTC/1 ;----------------------------------------------------------- ;14 KANAL 0 TISKARNA BODY HORIZONTALNE ;15 KANAL 1 TISKARNA BODY VERTIKALNE ;16 KANAL 2 ;17 KANAL 3 OBSLUHA FRONTY (2 SEC.) CTC/2 ;----------------------------------------------------------- ;20 DATA MAGTNETOFON ;21 CW USART 8251 ;----------------------------------------------------------- ;24 PA - OUT ;25 PB - IN ;26 PC - OUT TISKARNA ;27 CW PPI 8255/2 ;----------------------------------------------------------- ;28 PA - OUT EPROG - ADRESA ;29 PB - OUT EPROG - ADRESA ;2A PC - OUT/IN EPROG - DATA ;2B CW PPI 8255/3 ;----------------------------------------------------------- ;2C OUT EPROG - OVLADANI ZDROJU Uprg. ;----------------------------------------------------------- ; ; PAGE 60 ; ; M A P A P A M E T I ; ;-------------------------------------------------------FFFF ; ; VIDEORAM (1K BYTE) ; ;-------------------------------------------------------FC00 ;* STACK TASKU 0 (512 BYTE) FBFF ;* ;* 1 KBYTE --------------------------------------------FA00 ;* STACK TASKU 1 (512 BYTE) F9FF ;* ;-------------------------------------------------------F800 ;* INTERRUPT VECTOR TABLE (256 BYTE) F7FF ;* -----------------------------------------------------F700 ;* (IY + Q) F6FF ;* 1 KBYTE --------------------------------------------F600 ;* (IX + Q) F5FF ;* -----------------------------------------------------F500 ;* PROMENNE F4FF ;-------------------------------------------------------F400 ; F3FF ; QUEPRT (1KBYTE) ; ;-------------------------------------------------------F000 ; ; ; ; ; ; UZIVATELSKA RAM (52 KBYTE) ; ; ; ; ;-------------------------------------------------------2000 ; ; ; EPROM/RAM (8 KBYTE) ; ; ;-------------------------------------------------------0000 ; UZIRAM EQU 01FFFH ADRDIS EQU 0FC00H BUFPRT EQU 0F4BFH ;VE SKUTECNOSTI FC40H STACK0 EQU 0FBFFH STACK1 EQU 0F9FFH INTVCT EQU 0F7H ;INTERRUPT VECTOR IXREG EQU 0F580H IYREG EQU 0F680H ; SYSBUN EQU 0F400H COPAF EQU 0F401H COPBC EQU 0F403H COPDE EQU 0F405H COPHL EQU 0F407H ZALAF EQU 0F409H ZALBC EQU 0F40BH ZALDE EQU 0F40DH ZALHL EQU 0F40FH COPSP EQU 0F411H COPIX EQU 0F413H COPIY EQU 0F415H COPI EQU 0F417H ERRBRK EQU 0F418H ADRSTP EQU 0F41AH OPKSTP EQU 0F41CH LENFIL EQU 0F41DH ADRFIL EQU 0F41FH NAMFL1 EQU 0F421H NAMFL2 EQU 0F42CH SP0TSK EQU 0F437H SP1TSK EQU 0F439H ; ; DATOVA OBLAST PRO ARITMETIKU ; DCNT EQU 0F43BH LPCNT EQU 0F43CH OVRFLW EQU 0F43DH MCADR EQU 0F43EH MPADR EQU 0F440H NBYTE EQU 0F442H NDIGIT EQU 0F444H CNT EQU 0F445H DVADR EQU 0F446H DSADR EQU 0F448H HDEPTR EQU 0F44AH ODEPTR EQU 0F44CH COUNT EQU 0F44EH PROD EQU 0F450H MCAND EQU 0F460H HIDE1 EQU 0F450H HIDE2 EQU 0F460H ; SEC EQU 0F470H MIN EQU 0F471H HOD EQU 0F472H ADRKUR EQU 0F473H ;ADRESA KURZORU QUEPRT EQU 0F3FFH ZACQUE EQU 0F475H KONQUE EQU 0F477H ; ORG 0000H .PHASE 0000H ; ; RESET: LD SP,STACK0 IM 2 JP INIT1 ;INITATION ; ; TISK RETEZCE ASCII, POSLEDNI ZNAK = 00H ; RST1: EX (SP),HL PUSH BC TTA1: LD A,(HL) CP 00H LD C,A JR NZ,TTA2 RST 28H POP BC INC HL EX (SP),HL RET TTA2: RST 28H INC HL JR TTA1 DS 15 ; ; TISKNE ASCII V C ; RST5: PUSH HL CALL CO POP HL RET DS 10 ; ; ERROR ; RST7: CALL COPREG CALL NEWLN RST 08H DB 'ERROR ', 0 CALL TISKIA LD DE,(ERRBRK) ;ADRESA STOPBODU CALL TISKWD RST 08H DB 'H', 0 CALL NTSREG JP RMON ; DS 6 ; ; ZAMENI NIBLY V B ; EXNIBL: RLC B RLC B RLC B RLC B RET ; ; BREAK ; NMI: CALL COPREG CALL NEWLN RST 08H DB 'BREAK ', 0 CALL TISKIA LD DE,(ERRBRK) ;ADRESA BREAKU CALL TISKWD RST 08H DB 'H', 0 CALL NTSREG LD HL,RMON PUSH HL RETN ; ; POKRACOVANI MONITORU ; INIT1: LD A,0FFH OUT (2CH), A ;OVLADANI Uprg. V EPROGu LD A,INTVCT ;INTERRUPT VECTOR LD I,A LD HL,0F700H ;NULOVANI INT.VECT.TABLE LD BC,0100H XOR A CALL MFILL LD HL,STACK1 ;INICIALIZACE MULTITASKINGU LD BC,TASK1 ;ADRESA STARTU TASKU 1 DEC HL LD (HL),B DEC HL LD (HL),C ;HOTOVO LD (SP1TSK),HL LD A,082H ;CW 8255 - PA, PC - OUT, PB - IN OUT (03H),A ;8255/1 - KLAVESNICE, D/A OUT (27H),A ;8255/2 - TISKARNA LD A,0FFH OUT (02H),A OUT (026H),A LD A,20H OUT (024H),A LD A,09BH ;CW 8255 - PA, PB, PC - IN OUT (2BH),A ;8255/3 - EPROM PROGR. LD HL,QUEPRT LD (ZACQUE),HL LD (KONQUE),HL LD A,01H LD (SYSBUN),A ;DEFINICE SYST. BUNKY CALL NULDIS CALL INIMGF CALL INICTC NOP NOP NOP ;INI... RMON: LD DE,8030H CALL PIP LD DE,UZIRAM ;UZIVATELSKA RAM EI RST 08H DB '* MONITOR', 0 MN1: RST 08H DB 08DH ;CR MN2: CALL CI LD A,C ; ; PRIKAZY MONITORU ; CP 'G' ; GO JR NZ,MN5 RST 08H DB 'GO:', 0 CALL MONAV2 CALL ENTWD JR C,MN4 ;BYL UKONCEN CR CALL ZADSTP ;ZADANI BREACPOINTU MN3: PUSH DE ;ULOZ ZADANOU ADRESU RET ;A SKOC NA NI (NA TU ADRESU) MN4: RST 08H DB 08DH ;CR JR MN3 ; MN5: CP 'S' ; SBR JR NZ,MN9 RST 08H DB 'SBR:', 0 CALL MONAV2 CALL ENTWD JR C,MN8 ;BYL UKONCEN CR LD (HL),0E0H CALL MONAV MN6: CALL MN7 ;STACK <- ADR.NAVRATU (MN6+1) JR RMON MN7: PUSH DE ;STACK <- ADR.PODPROGRAMU RET ;SKOK DO PODPROGRAMU MN8: RST 08H DB 08DH ;CR JR MN6 ; MN9: CP 'R' ; REG JR NZ,NOVB CALL TISREG JR MN1 ; NOVB: CP ' ' ; MODIFY DATA JR NZ,MN13 INC DE BMN: CALL TISKWD ;TISKNI NOVOU ADRESU RST 08H DB 0A0H ;SPACE ZDMN: LD A,(DE) ;ZJISTI DATA LD B,A CALL TISKB ;TISKNI JE CALL MONAV2 CP 03AH JR NZ,MN10 JR MN1 MN10: CALL DECUK CALL DECUK CALL ENTBY JR NC,MN11 LD A,B LD (DE),A ;ULOZ NOVA DATA MN12: RST 08H DB 08DH ;CR ZPET: JR MN2 MN11: CALL CI CP 0DH JR Z,MN12 JR MN11 ; MN13: CP 08H ;BS JR NZ,MN14 DEC DE ;ZPET JR BMN ; MN14: CP 0DH JR NZ,MN16 INC DE CALL TISKWD RST 08H DB 0A0H ;SPACE LD A,(DE) ;ZJISTI DATA LD B,A CALL TISKB ;TISKNI JE RST 08H DB 08DH ;CR JR ZPET ; MN16: CP 'A' ; NEW ADRESS JR NZ,MN17 RST 08H DB 'ADR:', 0 CALL MONAV2 CALL ENTWD JR ZDMN ; MN17: CP 'M' ; MEMORY DUMP JR NZ,MN18 RST 08H DB 'MEM:', 0 CALL MONAV2 CALL TPL JR ZPET ; MN18: CP 'D' ; DISPLACEMENT JR NZ,MN19 RST 08H DB 'DIS:', 0 CALL MONAV2 CALL DISPLA JR ZPET ; MN19: CP 'F' ; FILE JR NZ,MN20 RST 08H DB 'FIL:', 0 CALL MONAV2 CALL FIL JR ZPET ; MN20: CP 'T' ; TRANSF JR NZ,MN21 RST 08H DB 'TRF:', 0 CALL MONAV2 CALL MOV ZPET1: JR ZPET ; MN21: CP 'C' ; CONTINUE JR NZ,MN22 RST 08H DB 'CON:', 0 LD A,(SYSBUN) AND 020H JR Z,CON3 ;STOPBOD NENI ZADAN LD DE,(ADRSTP) ;ADRESA STOPBODU CALL TISKWD ;TISK ADRESY EX DE,HL LD A,(OPKSTP) ;PREPSANY OPERACNI KOD LD (HL),A LD A,(SYSBUN) AND 0DFH ;ZRUS PRIZNAK STOPBODU LD (SYSBUN),A EX DE,HL CON4: CALL MONAV2 CP 03AH ;CR ? JR Z,CON2 CALL ZADSTP ;ZADANI STOPBODU CON1: LD HL,(ZALAF) PUSH HL POP AF EX AF,AF' LD A,(COPI) LD I,A LD HL,(COPAF) PUSH HL POP AF LD HL,(ZALHL) LD DE,(ZALDE) LD BC,(ZALBC) EXX LD IX,(COPIX) LD IY,(COPIY) LD DE,(COPDE) LD BC,(COPBC) LD SP,(COPSP) LD HL,(ERRBRK) DEC HL PUSH HL LD HL,(COPHL) RET ;CONTINUE CON2: RST 08H DB 08DH JR CON1 CON3: RST 08H DB '#', 0 ;STOPBOD NEBYL LD DE,(ERRBRK) CALL TISKWD ;TISK ADRESY JR CON4 ; MN22: CP 'I' ; INPUT JR NZ,MN23 RST 08H DB 'IN ', 0 CALL MONAV2 CALL ENTBY ;ADR PORTU LD C,B IN B,(C) RST 08H DB ':', 0 CALL TISKB RST 08H DB 08DH ;CR ZPET2: JP ZPET1 ; MN23: CP 'O' ; OUTPUT JR NZ,MN24 RST 08H DB 'OUT ', 0 CALL MONAV2 CALL ENTBY RST 08H DB ':', 0 CALL MONAV2 PUSH BC CALL ENTBY POP DE LD C,D OUT (C),B RST 08H DB 08DH ;CR JR ZPET2 ; MN24: CP 'P' ; PRINT JR NZ,MN25 LD A,(SYSBUN) XOR 80H LD (SYSBUN),A JR ZPET2 ; MN25: CP 'L' ; LOAD JR NZ,MN26 RST 08H DB 'LOA:', 0 CALL MONAV2 CALL LOAD JR ZPET2 ; MN26: CP 'Q' ; SAVE JR NZ,MN27 RST 08H DB 'SAV:', 0 CALL MONAV2 CALL SAVE JR ZPET2 ; MN27: CP 'V' ; (VERIFY) JR NZ,MN28 RST 08H DB 'VFY:', 0 CALL MONAV2 CALL VERIFY ZPET3: JR ZPET2 ; MN28: CP 'B' ; BOOT JR NZ,MN30 RST 08H DB 'BOO', 0 CALL MONAV LD HL,0000H LD DE,2000H BOO1: LD A,(HL) LD (HL),A INC HL CALL HILOZ JR NZ,BOO1 OUT (0CH),A RST 0 ; MN30: CP 'X' ; BASIC JR NZ,SMYTEC RST 08H DB 'BAS', 0 CALL MONAV CALL 01215H JR ZPET3 ; SMYTEC: JP MN2 ;KONEC MONITOROVE SMYCKY ; ; SEJME JEDNU KLAVESU ; JKLAV: CALL KLAV CALL TUK RET ; ; KOMPARACE DE A HL ; HILOZ: LD A,D ;HL=DE Z=1 SUB H ;HLDE CY=1 Z=0 SBC A,L RET ; ; NULUJE JEDEN RADEK DISPLEJE ; NULRAD: CALL NULS LD HL,(ADRKUR) PUSH BC LD BC,04020H ;64 CYKLU,MEZERA NU1: LD (HL),C INC HL DJNZ NU1 DEC HL LD (ADRKUR),HL CALL NULS LD HL,(ADRKUR) LD (HL),0E0H POP BC RET ; ; TEST UVOLNENOSTI KLAVES ; TUK: PUSH AF PUSH BC TN1: XOR A ;NULUJ A TN2: LD C,00H OUT (C),A INC C IN B,(C) BIT 0,B JR Z,TN1 ;JE ZMACKNUTO CALL INC CP 00H JR NZ,TN2 ;JE UZ CELA KLAVESNICE? POP BC POP AF RET ; ; INKREMENTUJE BITY 0 - 5 A REG. ; INC: PUSH DE LD E,A AND 03FH INC A RES 6,A LD D,A LD A,E AND 0C0H OR D POP DE RET ; ; INKREMENTACE UKAZATELE KURZORU - BITY 0-9 HL ; INCUK: LD HL,(ADRKUR) PUSH AF IN1: INC HL LD A,H OR L JR NZ,DN1 DEC HL POP AF LD (ADRKUR),HL JR ROLDIS ; ; DEKREMENTCE UKAZATELE KURZORU ; DECUK: LD HL,(ADRKUR) PUSH AF LD A,H AND 03H OR L JR Z,DN1 DEC HL DN1: POP AF LD (ADRKUR),HL RET ; ; POSUNE OBSAH VIDEORAM O 1 RADEK NAHORU ; SPODNI SMAZE, NASTAVI NA NEJ HL ; ROLDIS: PUSH BC PUSH DE PUSH HL LD DE,ADRDIS LD HL,0FC40H ;0TY ZNAK 1VY RADEK LD BC,03C0H ;960 ZNAKU LDIR POP HL CALL NULRAD POP DE POP BC RET ; ; SNULUJE UKAZTEL SLOUPCE (NULTA POZICE) ; NULS: LD HL,(ADRKUR) PUSH AF LD A,L AND 0C0H LD L,A POP AF LD (ADRKUR),HL RET ; ; DO HL 0-TA POSICE DALSIHO RADKU ; NEWLN: LD HL,(ADRKUR) PUSH AF LD A,L OR 03FH ;POSLEDNI SLOUPEC LD L,A JR IN1 ; ; ROTACE DE O 1 NIBL DOLEVA ; LROWD: PUSH BC LD B,04H LR1: RLC E RL D RR E RLC E DJNZ LR1 ;4 KRAT POP BC RET ; ; PREVOD KODU KLAVESNICE V A NA HEX. DO NIZSI ; POLOVINY E, DE PREDTIM ROTUJE, NENI-LI TO ; HEX. ZNAK, CY=1 ; KLHEXW: PUSH HL PUSH BC LD HL,TABKL LD BC,0010H ;10 KRAT CPIR ;HLEDEJ JR Z,NASLI ;? SCF ;NENASLI JR KW1 NASLI: CALL LROWD PUSH AF LD A,E AND 0F0H ;ZRUS NIZSI NIBL OR C ;ZAPIS NOVY LD E,A POP AF OR A KW1: POP BC POP HL RET ; TABKL: DB 023H ;F V KODU KLAVESNICE DB 012H ;E DB 022H ;D DB 034H ;C DB 036H ;B DB 020H ;A DB 08H ;9 DB 07H ;8 DB 06H ;7 DB 05H ;6 DB 04H ;5 DB 03H ;4 DB 02H ;3 DB 01H ;2 DB 00H ;1 DB 09H ;0 ; ; PREVOD KODU KLAVESNICE V A NA HEX DO NIZSI ; POLOVINY B, PREDTIM HO ROTUJE, NENI-LI TO ; HEX ZNAK, CY=1 ; KLHEXB: PUSH HL PUSH BC LD HL,TABKL LD BC,0010H ;16 KRAT CPIR JR Z,KB1 SCF POP BC POP HL RET KB1: LD H,C POP BC PUSH AF LD A,B RLCA RLCA RLCA RLCA AND 0F0H ;ZRUS NIZSI NIBL OR H LD B,A POP AF POP HL OR A RET ; ; MAZE VIDEORAM ; NULDIS: PUSH AF PUSH BC PUSH DE PUSH HL LD BC,03FFH ;POCET CYKLU LD DE,0FC01H ;1. ZNAK 0-TEHO RADKU LD HL,ADRDIS LD (HL),020H ;MEZERA LDIR LD HL,ADRDIS LD (ADRKUR),HL POP HL POP DE POP BC POP AF RET ; ; VSTUP BYTE Z KLAVESNICE, UKONCENI ' ' CY=0 ; CR CY=1 ; CENTBY: CALL JKLAV ENTBY: CALL RUTEB ;1. ZNAK JE V A JR C,CENTBY EB2: CALL JKLAV ;2. ZNAK DO A CALL RUTEB JR C,EB2 ENB1: CALL JKLAV ;2* ZNAK DO A CP 03AH ;JE TO CR ? JR NZ,ENB2 SCF RET ENB2: CP 038H ;JE TO SP ? JR NZ,ENB3 XOR A RET ENB3: CALL KLHEXB JR C,ENB1 CALL DECUK CALL DECUK CALL TISKB JR ENB1 ; ; ENTER WORD SP CY=0, CR CY=1 ; CENTWD: CALL JKLAV ENTWD: CALL RUTEW ;1. ZNAK JE V A JR C,CENTWD EW2: CALL JKLAV ;2. ZNAK DO A CALL RUTEW JR C,EW2 EW3: CALL JKLAV ;3. ZNAK DO A CALL RUTEW JR C,EW3 EW4: CALL JKLAV ;4. ZNAK DO A CALL RUTEW JR C,EW4 ENW1: CALL JKLAV ;4* ZNAK DO A CP 038H ;SP JR NZ,ENW2 RST 08H DB ' ', 0 OR A RET ENW2: CP 03AH ;CR JR NZ,ENW3 RST 08H DB ' ', 0 SCF RET ENW3: CALL KLHEXW PUSH BC LD B,04H ENW4: CALL DECUK DJNZ ENW4 POP BC CALL TISKWD JR ENW1 ; ; RUTINA PRO PODPROGRAMY VSTUPU ; RUTE: CALL C,TUK RET C CALL PREV RST 028H CALL TUK OR A RET ; ; RUTINA PRO VSTUP BYTE ; RUTEB: CALL KLHEXB CALL RUTE RET ; ; RUTINA PRO ENTER WORD ; RUTEW: CALL KLHEXW CALL RUTE RET ; ; TISK BYTE V B REG. ; TISKB: PUSH BC PUSH AF CALL EXNIBL ;NEJDRIV VYSSI NIBL LD A,B CALL HEXASC RST 028H CALL EXNIBL LD A,B CALL HEXASC RST 028H TB1: POP AF POP BC RET ; ; TISKNE OBSAH DE ; TISKWD: PUSH BC LD B,04H PUSH AF TW1: CALL LROWD LD A,E CALL HEXASC RST 028H DJNZ TW1 JR TB1 ; ; TISK TEXTU " IN ADRESS " ; TISKIA: RST 08H DB 'IN ADRESS ', 0 RET ; ; PREVOD A REG. HEX. NA A,C REG. ASCII ; HEXASC: AND 0FH ADD A,090H DAA ADC A,040H DAA LD C,A RET ; ; ULOZI KOPIE REGISTRU, INICIALIZUJE SP, ; BLOKUJE INT ; COPREG: DI LD (COPBC),BC LD (COPDE),DE LD (COPHL),HL EXX LD (ZALBC),BC LD (ZALDE),DE LD (ZALHL),HL POP BC ;ADR.,ODKUD BYLA RUTINA VOLANA POP HL ;ADR. CHYBY+1 LD (ERRBRK),HL ;ULOZ ADR. CHYBY LD (COPSP),SP ;ULOZ SP LD SP,STACK0 PUSH BC ;NAVRATOVA ADRESA PUSH AF POP HL LD (COPAF),HL EX AF,AF' PUSH AF POP HL LD (ZALAF),HL LD (COPIX),IX LD (COPIY),IY LD A,I LD (COPI),A RET ; ; TISKNE KOPIE REGISTRU ; NTSREG: CALL NEWLN TISREG: PUSH AF PUSH BC PUSH DE RST 08H DB 'R' DB 'E' DB 'G' DB ':' DB 08DH ;CR PUSH IX PUSH IY LD B,0BH ;11 KRAT LD IX,TABTR LD IY,COPAF ;ADRESA 1. KOPIE TR1: PUSH BC LD B,03H ;3 KRAT TR2: LD C,(IX+0) LD HL,(ADRKUR) LD (HL),C INC IX CALL INCUK DJNZ TR2 POP BC LD E,(IY+0) LD D,(IY+1) INC IY INC IY CALL TISKWD RST 08H DB '*', 0 DJNZ TR1 POP IY POP IX RST 08H DB 'I=', 0 LD A,(COPI) LD B,A CALL TISKB RST 08H DB '*' DB 08DH ;CR POP DE POP BC POP AF RET ; TABTR: DB 'AF=' DB 'BC=' DB 'DE=' DB 'HL=' DB 'AF',27H DB 'BC',27H DB 'DE',27H DB 'HL',27H DB 'SP=' DB 'IX=' DB 'IY=' ; ; CONSOL OUTPUT ; CO: PUSH PSW ;TISKNE ASCII V C REG. LD HL,(ADRKUR) LD A,H OR 0FCH ;POJISTKA PROTI PREPSANI RAM LD H,A LD A,C CP 0DH ;CR ? JR NZ,CO1 LD (HL),020H CALL NEWLN CO4: LD (HL),0E0H POP AF RET CO1: CP 0FFH ;FORM FEED JR NZ,CO2 CALL NULDIS LD HL,(ADRDIS) JR CO4 CO2: CP 08H ;BS? JR NZ,CO10 LD (HL),20H CALL DECUK JR CO4 CO10: AND 07FH ;ASCII ZNAK LD (HL),A ;TISK CALL INCUK LD HL,(ADRKUR) JR CO4 ; ; PRINTER OUTPUT + CO ; PRTOUT: PUSH HL PUSH DE LD HL,(ZACQUE) PO0: PUSH HL LD DE,(KONQUE) LD (HL),C CALL DECQUE CALL HILOZ JR NZ,PO1 POP HL ;QUE IS FULL JR PO0 PO1: POP DE ;ZRUS ZBYTECNOU ADR. LD (ZACQUE),HL RST 28H ;ZNAK NA DISPLEJ PO2: POP DE POP HL RET ; ; PREVOD ASCII A REG. NA BIN. A REG ; NENI-LI HEX. CY=1, CY=0 O.K. ; ASCBIN: CP 030H ;ZNAK < 0 ? RET C ;ANO - CHYBA, VEN CP 03AH ;'9'+1 > '9' ? JR NC,NA1 ;ANO-MRKNI SE NA A AND 0FH ;NE-ORIZNOUT NA BIN RET ;TAHNI VEN NA1: AND 01FH CP 01H ;ZNAK < 'A' ? RET C ;ANO-CHYBA, VEN CP 07H ;ZNAK > 'F' ? CCF RET C ;ANO-CHYBA, VEN ADD A,09H ;PREKLENOUT DIRU '9'-'A' RET ; ; NAPLNENI PAMETI KONSTANTOU (PODLE L.ZAJICKA) ; MFILL: LD E,A LD A,B OR C RET Z ;BC = 0, VEN DEC BC LD A,B OR C RET Z ;BC = 1, NIC SE NPRENASI LD (HL),E ;BYTE NA NEJNIZSI HODNOTU LD D,H LD E,L INC DE ;DE = HL + 1 LDIR RET ; ; OBSLUHA KLAVESNICE, ZNAK DO A REG. ; S S K K K K K K ; KLAV: PUSH BC PUSH DE XOR A LD B,A ;CITAC PRUCHODU SMYCKAMA KN1: LD C,00H ;ADRESA KLAVESNICE OUT (C),A ;KOD ZNAKU NA KLAVESNICI INC C IN D,(C) BIT 0,D ;BYLO ZMACKNUTO ? JR Z,KN4 CALL CMAIM DB 030H ;SHIFT JR NZ,KN2 RES 0,B ;V A JE KOD S A NEBYL ZMACKNUT JR KN3 KN2: CALL CMAIM DB 03BH ;SHIFT JR NZ,KN3 RES 1,B ;V A JE KOD S A NEBYL ZMACKNUT KN3: CALL INC ;KOD DALSIHO ZNAKU JR KN1 KN4: CALL CMAIM DB 030H ;SHIFT JR NZ,KN5 ;KDYZ TO NENI ON BIT 0,B ;KOLIKATY PRUCHOD ? JR NZ,KN3 SET 0,B ;NASTAV PRUCHOD SMYCKOU XOR 080H ;NEGUJ S JR KN3 KN5: CALL CMAIM DB 03BH ;SHIFT JR NZ,KN6 BIT 1,B ;KOLIKATY PRUCHOD ? JR NZ,KN3 SET 1,B ;NASTAV PRUCHOD SMYCKOU XOR 040H ;S JR KN3 KN6: LD B,00 OUT (C),B ;ZHASNI LED LD DE,2030H CALL PIP POP DE POP BC RET ; ; POROVNA A REG. A BYTE ZA VOLANIM, BEZ ; BITU 6,7 ; CMAIM: EX (SP),HL ;HL <- ADRESA BYTE PUSH BC LD C,(HL) ;BYTE DO C INC HL ;ADRESA NAVRATU LD B,A AND 03FH CP C LD A,B POP BC EX (SP),HL RET ; ; VYPOCET HODNOTY RELATIVNIHO SKOKU ; DISPLA: CALL ENTWD RST 08H DB '-> ', 0 PUSH DE ;1. OPERAND PUSH DE CALL CENTWD ;2. OPERAND EX (SP),HL EX DE,HL XOR A SBC HL,DE EX DE,HL POP HL ;KURZOR ZPATKY LD B,E RST 08H DB ':', 0 DEC B DEC B CALL TISKB RST 08H DB 'H' DB 08DH ;CR POP DE ;ADRESA ODKUD SE SKACE INC DE ;ADRESA ULOZENI OFSETU LD A,B LD (DE),A ;ULOZENI RET ; ; INTELLIGENT BLOCK TRANSFER (PODLE L.ZAJICKA) ; IBT: AND A SBC HL,DE ;ODECET ADR ADD HL,DE ;OBNOVENI ADR RET Z ;ZDROJ = CIL JR C,IBACK LDIR RET IBACK: ADD HL,BC DEC HL EX DE,HL ;HL <- 1. BYTE ADR. ZDROJE ADD HL,BC DEC HL EX DE,HL LDDR SCF RET ; ; MOZNOST NAVRATU Z PRIKAZU MONITORU ; MONAV2: CALL JKLAV CP 039H ;DEL ? RET NZ POP AF ;ZRUS ADRESU NAVRATU CALL NULRAD JP MN2 ; ; TISK PAMETOVE LOKACE ; TPL: CALL ENTWD RST 08H DB 08DH TPL1: LD A,E AND 0F0H LD E,A CALL TISKWD RST 08H DB ' ', 0 TPL2: LD A,(DE) LD B,A CALL TISKB RST 08H DB ' ', 0 INC DE LD A,E AND 0FH CP 00H JR NZ,TPL2 RST 08H DB 08DH ;CR TPL3: CALL JKLAV CP 038H JR Z,TPL1 CP 03AH RET Z JR TPL3 ; ; NAPLNENI PAMETI KONSTANTOU ; FIL: CALL ENTWD ;POCATECNI ADRESA PUSH DE RST 08H DB '- ', 0 CALL CENTWD ;KONCOVA ADRESA EX (SP),HL ;HL ZACATEK, STACK KURZOR EX DE,HL ;HL KONEC, DE ZACATEK AND A SBC HL,DE EX (SP),HL ;STACK ROZDIL, HL KURZOR JR C,UKF ;ZAC > KON JR Z,UKF ;ZAC = KON RST 08H DB ':', 0 CALL CENTBY LD A,B ;OBSAH POP BC ;ROZDIL INC BC EX DE,HL ;HL ZACATAK, DE KURZOR PUSH DE ;KURZOR CALL MFILL POP HL ;KURZOR UKF: RST 08H DB 08DH ;CR RET ; ; PRESUN BLOKU DAT ; MOV: CALL ENTWD ;ZACATEK ZDROJE PUSH DE RST 08H DB '- ', 0 CALL CENTWD ;KONEC ZDROJE INC DE EX (SP),HL ;HL ZAC.ZDR. STACK KURZOR EX DE,HL ;DE ZAC., HL KONEC AND A SBC HL,DE EX (SP),HL ;STACK ROZDIL HL KURZOR JR C,UKOM ;ZAC > KON JR Z,UKOM ;ZAC = KON PUSH DE RST 08H DB '-> ', 0 CALL CENTWD ;CILOVA ADRESA POP BC EX (SP),HL ;STACK KURZOR, HL ROZDIL PUSH BC PUSH HL POP BC POP HL CALL IBT POP HL ;KURZOR UKOM: RST 08H DB 08DH ;CR RET ; ; MOZNOST NAVRATU Z PRIKAZU MONITORU ; MONAV: CALL JKLAV CP 039H JR Z,MNV1 CP 03AH ;CR JR NZ,MONAV RST 08H DB 08DH RET MNV1: POP AF ;ADR. NAVRATU CALL NULRAD JP MN2 ; ; PREVOD Z KODU KLAVESNICE A REG. ; DO ASCII C REG. ; PREV: PUSH AF PUSH BC PUSH HL LD HL,TABZN LD BC,0040H CPIR JR Z,PN1 CP 03AH JR NZ,PN2 LD A,0DH JR PN5 PN2: CP 039H JR NZ,PN3 LD A,08H ;BS JR PN5 PN1: LD A,020H ADD A,C PN5: POP HL POP BC LD C,A POP AF OR A RET PN3: POP HL POP BC POP AF SCF RET ; TABZN: DB 0D8H ;_ DB 0D9H ;^ DB 0D3H ;} DB 0C9H ;\ DB 0D2H ;[ DB 032H ;Z DB 015H ;Y DB 033H ;X DB 011H ;W DB 035H ;V DB 016H ;U DB 014H ;T DB 021H ;S DB 013H ;R DB 010H ;Q DB 019H ;P DB 018H ;O DB 037H ;N DB 029H ;M DB 028H ;L DB 027H ;K DB 026H ;J DB 017H ;I DB 025H ;H DB 024H ;G DB 023H ;F DB 012H ;E DB 022H ;D DB 034H ;C DB 036H ;B DB 020H ;A DB 0C8H ;@ DB 01AH ;? DB 0C5H ;> DB 0C4H ;= DB 0C6H ;< DB 0CAH ;; DB 0CBH ;: DB 08H ;9 DB 07H ;8 DB 06H ;7 DB 05H ;6 DB 04H ;5 DB 03H ;4 DB 02H ;3 DB 01H ;2 DB 00H ;1 DB 09H ;0 DB 0C3H ;/ DB 0AH ;. DB 0C1H ;- DB 0BH ;, DB 0C0H ;+ DB 0C2H ;* DB 0D1H ;) DB 0D0H ;( DB 0D5H ;' DB 0C7H ;& DB 031H ;% DB 0D6H ;$ DB 0D7H ;# DB 0D4H ;" DB 01BH ;! DB 038H ; ; ; ; INICIALIZACE 8251 ; INIMGF: LD A,40H ;RESET 8251 OUT (21H),A LD A,0FDH OUT (021H),A LD A,035H OUT (021H),A RET ; ; VYSTUP BYTE V A REG. NA PASKU ; PUTMGF: PUSH AF WAIMGO: IN A,(021H) AND 01H JR Z,WAIMGO POP AF OUT (20H),A RET ; ; VSTUP BYTE Z PASKY DO A REG. ; GETMGF: IN A,(21H) PUSH AF AND 38H ;NECH JEN PRIZNAK PARITY ERR. JR Z,GETMG1 LD A,35H OUT (21H),A ;NULUJ PRIZNAKY CHYB GETMG1: POP AF AND 02H JR Z,GETMGF IN A,(020H) PUSH AF IN A,(21H) AND 08H ;PARITY ERROR JR Z,GETMG2 POP AF SCF ;ERR RET GETMG2: POP AF AND A ;O.K. RET ; ; VYSTUP BLOKU NA MGF ; MGOBLK: LD B,00H ;KONTROLNI SOUCET MGO1: LD A,(HL) CALL PUTMGF ADD A,B ;MODIFIKOVAT LD B,A ;KONTROLNI SOUCET INC HL ;DALSI BYTE DEC DE ;ZMENSIT DELKU LD A,D CP 0FFH ;NULOVA DELKA ? JR NZ,MGO1 ;NE - OPAKOVAT MG02: LD A,B CALL PUTMGF RET ; ; ZAPIS SYNCHRA A HLAVICKY ; MGORE1: LD L,010H ;POCET '55' MGORE0: LD A,0AAH CALL PUTMGF DEC L JR NZ,MGORE0 LD L,010H ;POCET '00' MGORE2: XOR A CALL PUTMGF DEC L ;VSECHNY ? JR NZ,MGORE2 ;NE - OPAKOVAT LD L,010H ;POCET '55' MGORE3: LD A,055H CALL PUTMGF DEC L JR NZ,MGORE3 RST 08H DB ' *', 0 LD HL,NAMFL1 ;JMENO LD DE,000BH CALL MGOBLK LD HL,(LENFIL) EX DE,HL LD HL,(ADRFIL) JR MGOBLK ; ; VSTUP BLOKU DAT ; MGIBL1: LD C,0FFH ;UVAZOVANI KONTR.SOUCTU MGIBLK: LD B,00H ;NULOVANI KONTR. SOUCTU MGIBL3: CALL GETMGF DEC C INC C JR Z,MGIBL2 ;PRESKOC UKLADANI LD (HL),A ;ULOZ BYTE MGIBL2: ADD A,B ;MODIFIKACE LD B,A ;KONTR. SOUCTU INC HL DEC DE ;ZMENSI DELKU LD A,D ;PRECTEN CELY BLOK ? CP 0FFH JR NZ,MGIBL3 CALL GETMGF CP B ;POROVNANI S VYPOCTENYM RET ; ; NACTENI SYNCHRA A HLAVICKY ; MGIREC: LD L,010H ;POCET '00' BYTU MGIR1: CALL GETMGF OR A ; 00 ? JR NZ,MGIREC DEC L JR NZ,MGIR1 LD L,010H MGIR2: CALL GETMGF CP 055H JR NZ,MGIREC DEC L JR NZ,MGIR2 RST 08H DB ' *', 0 LD HL,NAMFL2 LD DE,000BH ;DELKA JMENA CALL MGIBL1 JR NZ,MGIREC ;CHYBA, OPAKOVAT LD BC,0B00H LD HL,(NAMFL1) LD DE,(NAMFL2) MGIRE4: LD A,(DE) CP (HL) JR Z,MGIR3 INC C MGIR3: INC HL INC DE DJNZ MGIRE4 XOR A CP C JR NZ,MGIR5 LD HL,(LENFIL) EX DE,HL LD HL,(ADRFIL) JR MGIBL1 MGIR5: LD B,0BH LD DE,NAMFL2 MGIR6: LD A,(DE) LD C,A RST 028H INC DE DJNZ MGIR6 RST 08H DB 08DH JR MGIREC ; ; CTENI Z MGF ; LOAD: CALL KOMMG CALL MGIREC RST 08H DB ' O.K.' DB 08DH RET ; ; ZAPIS NA MGF ; SAVE: CALL KOMMG CALL MGORE1 RST 08H DB ' O.K.' DB 08DH RET ; ; KOMUNIKACE RUTIN PRACUJICICH S MGF ; KOMMG: CALL ENTWD LD (ADRFIL),DE PUSH DE RST 08H DB '- ', 0 CALL CENTWD EX (SP),HL ;ADRDIS NA TOP EX DE,HL AND A SBC HL,DE LD (LENFIL),HL POP HL ;ADRDIS KOMMG1: PUSH HL CALL ENTFNM ;JMENO SOUBORU JR NZ,KOMMG3 POP HL PUSH HL LD B,0BH KOMMG2: LD (HL),20H INC HL DJNZ KOMMG2 POP HL JR KOMMG1 KOMMG3: POP BC ;ZRUS STARY ADRDIS RET ; ; VSTUP JMENA SOUBORU XXXXXXXX.XXX ; ENTFNM: RST 08H DB 'NAME: ', 0 LD B,08H LD DE,NAMFL1 ENF1: CALL CI LD A,C CP 0FFH RET Z CP '.' JR NZ,ENF4 ENF2: EX DE,HL LD (HL),20H EX DE,HL INC DE DJNZ ENF2 RST 028H ENF5: LD B,03H ENF3: CALL CI LD A,C CP 0FFH RET Z CP 030H JR C,ENF3 LD (DE),A INC DE RST 028H DJNZ ENF3 ENF6: CALL JKLAV CP 039H ;DEL RET Z CP 03AH ;CR JR NZ,ENF6 XOR A DEC A ;Z=0 RET ENF4: CP 30H JR C,ENF1 LD (DE),A INC DE RST 028H DJNZ ENF1 RST 08H DB '.', 0 JR ENF5 ; ; KOMPARACE HL A DE ; COMP: LD A,H ;HL=DE CY=0 Z=1 CP D ;HL>DE CY=0 Z=0 RET NZ ;HL