0000 ; 0000 ; Zdrojovy kod obsluzneho monitoru pocitace PMI-80 0000 ;************************************************* 0000 ;* (c) www.nostalcomp.cz 2010 * 0000 ;************************************************* 0000 ; 0000 ; Disassembled by: 0000 ; DASMx object code disassembler 0000 ; (c) Copyright 1996-1999 Conquest Consultants 0000 ; Version 1.30 (Oct 6 1999) 0000 ; 0000 ; File: pmi80.rom, Size: 1024 bytes, Checksum: 82C9, CRC-32: B93F4407 0000 ; Soubor PMI-80.ROM byl porovnan s obsahem ROM originalniho PMI a je identicky! 0000 ; 0000 ; Date: Tue Apr 06 20:17:03 2010 0000 ; 0000 ; CPU: Intel 8080 (MCS-80/85 family) 0000 ; 0000 ; Poznamka: RST 7 = FFh a je to nevyuzita (nenaprogramovana) pametova bunka 0000 ; 0000 ; Zaneseny tez upravy pro monitory PMI-80r, PMI-85 a PMI Z-80 (PMI-880) 0000 ; 0000 ; 0000 STACK: EQU 0x1fe9 0000 INT_VECTOR: EQU 0x1fe6 0000 VIDEO_POINTER: EQU 0x1ffc 0000 VIDEORAM: EQU 0x1fef 0000 IN_DATA: EQU 0x1ffa 0000 IN_ADR: EQU 0x1ff8 0000 ; 0000 .ORG 00000H 0000 START: ; 0000h - RESET 0000 3E 8A MVI a,08AH ; nastaveni sluzebniho 8255A. 0002 D3 FB OUT 0FBH ; CW 8Ah => rezim 0, PA out, PB inp, PC0-3 out, PC4-7 inp 0004 00 NOP ; lze vlozit DI (adresa 0004h = F3h) pro vsechny verze 0005 C3 2E 00 JMP L002E 0008 ; 0008 ENTRY: ; 0008h - BREAK STOP 0008 ; 0008 22 DF 1F SHLD 0X1FDF 000B E1 POP h 000C 22 E2 1F SHLD 0X1FE2 000F 21 00 00 LXI h,0000h 0012 39 DAD sp 0013 22 E4 1F SHLD 0X1FE4 0016 21 DD 1F LXI h,0X1FDD 0019 F9 SPHL 001A C5 PUSH b 001B D5 PUSH d 001C F5 PUSH psw 001D E1 POP h 001E 22 DD 1F SHLD 0x1FDD 0021 2A EC 1F LHLD 0x1FEC 0024 3A EE 1F LDA 0x1FEE 0027 77 MOV m,a 0028 21 20 02 LXI h,TEXT_BR_STOP 002B C3 40 00 JMP L0040 002E L002E: 002E 21 E9 1F LXI h,STACK 0031 22 E4 1F SHLD 0x1FE4 0034 C3 3D 00 JMP L003D ;PMI Z-80 upravit skok na L_IM na adresu 003Bh: 0037 ;na adresu 0035h staci dat misto 3Dh hodnotu 3Bh 0037 FF RST 7 0038 INTERRUPT: 0038 C3 E6 1F JMP INT_VECTOR ; 0038h - pevna adresa preruseni (typu RST7) 003B ; nasleduji 2 volne byty, ktere lze vyuzit pro vlozeni instrukce IM1 pro Z-80: 003B FF RST 7 ;003Bh = EDh (label L_IM: IM1 (režim přerušení jako u 8080, 2 byte) 003C FF RST 7 ;003Ch = 56h (IM1 je dvoubajtova!) 003D L003D: 003D 21 E7 01 LXI h,TEXT_PMI_80 0040 L0040: 0040 31 E9 1F LXI sp,STACK 0043 L0043: 0043 22 FC 1F SHLD VIDEO_POINTER 0046 CD 16 01 CALL OUTKE 0049 21 EF 1F LXI h,VIDEORAM 004C 22 FC 1F SHLD VIDEO_POINTER 004F L004F: 004F 3E 1D MVI a,01DH 0051 CD AB 00 CALL CLEAR 0054 CD 16 01 CALL OUTKE 0057 21 0B 02 LXI h,TABPRIKAZY 005A 06 06 MVI b,006H 005C L005C: 005C BE CMP m 005D 23 INX h 005E CA 6D 00 JZ L006D 0061 23 INX h 0062 23 INX h 0063 05 DCR b 0064 C2 5C 00 JNZ L005C 0067 L0067: 0067 21 02 02 LXI h,TEXT_ERROR 006A C3 40 00 JMP L0040 006D L006D: 006D 4E MOV c,m 006E 23 INX h 006F 66 MOV h,m 0070 69 MOV l,c 0071 E9 PCHL 0072 ; PCHL - obsah HL do PC = skok na adresu, ktery byla v HL (indexovy skok). 0072 ; - adresy v HL jsou adresami exekutiv (rutin) jednotlivych prikazu. 0072 ; 0072 ; Konec hlavni programove smycky. 0072 ; Nasleduji jednotlive vykonne exekutivy prikazu a podprogramy 0072 PRIKAZ_MEM: ; MEM 0072 3E 16 MVI a,016H 0074 CD AB 00 CALL CLEAR 0077 CD D7 00 CALL MODAD 007A L007A: 007A 7E MOV a,m 007B 32 FA 1F STA IN_DATA 007E 3E 18 MVI a,018H 0080 02 STAX b 0081 CD FB 00 CALL MODDA 0084 2A F8 1F LHLD IN_ADR 0087 3A FA 1F LDA IN_DATA 008A 77 MOV m,a 008B 23 INX h 008C 22 F8 1F SHLD IN_ADR 008F CD BB 00 CALL OUTAD 0092 C3 7A 00 JMP L007A 0095 TEXT_MG_RUN: 0095 1E 16 20 19 19 12 15 1B 1E DB 01EH,016H,020H,019H,019H,012H,015H,01BH,01EH 009E TEXT_MG_STOP: 009E 1E 16 20 19 05 10 11 13 1E DB 01EH,016H,020H,019H,005H,010H,011H,013H,01EH 00A7 FF RST 7 00A8 FF RST 7 00A9 FF RST 7 00AA FF RST 7 00AB CLEAR: 00AB 11 08 00 LXI d,ENTRY 00AE L00AE: 00AE 2A FC 1F LHLD VIDEO_POINTER 00B1 19 DAD d 00B2 36 19 MVI m,019H 00B4 1D DCR e 00B5 C2 AE 00 JNZ L00AE 00B8 2B DCX h 00B9 77 MOV m,a 00BA C9 RET 00BB ; 00BB OUTAD: 00BB 01 F1 1F LXI b,01FF1H 00BE 2A F8 1F LHLD IN_ADR 00C1 7C MOV a,h 00C2 CD C6 00 CALL L00C6 00C5 L00C5: 00C5 7D MOV a,l 00C6 L00C6: 00C6 D5 PUSH d 00C7 57 MOV d,a 00C8 0F RRC 00C9 0F RRC 00CA 0F RRC 00CB 0F RRC 00CC E6 0F ANI 00FH 00CE 02 STAX b 00CF 03 INX b 00D0 7A MOV a,d 00D1 E6 0F ANI 00FH 00D3 02 STAX b 00D4 03 INX b 00D5 D1 POP d 00D6 C9 RET 00D7 ; 00D7 MODAD: 00D7 CD BB 00 CALL OUTAD 00DA CD 16 01 CALL OUTKE 00DD C8 RZ 00DE D2 97 01 JNC L0197 00E1 2A F8 1F LHLD IN_ADR 00E4 E6 0F ANI 00FH 00E6 29 DAD h 00E7 29 DAD h 00E8 29 DAD h 00E9 29 DAD h 00EA 85 ADD l 00EB 6F MOV l,a 00EC 22 F8 1F SHLD IN_ADR 00EF C3 D7 00 JMP MODAD 00F2 ; 00F2 OUTDA: 00F2 01 F6 1F LXI b,0x1FF6 00F5 2A FA 1F LHLD IN_DATA 00F8 C3 C5 00 JMP L00C5 00FB ; 00FB MODDA: 00FB CD F2 00 CALL OUTDA 00FE CD 16 01 CALL OUTKE 0101 C8 RZ 0102 D2 9D 01 JNC L019D 0105 00 NOP 0106 00 NOP 0107 00 NOP 0108 E6 0F ANI 00FH 010A 29 DAD h 010B 29 DAD h 010C 29 DAD h 010D 29 DAD h 010E 85 ADD l 010F 6F MOV l,a 0110 22 FA 1F SHLD IN_DATA 0113 C3 FB 00 JMP MODDA 0116 ; 0116 OUTKE: 0116 CD 40 01 CALL DISP ;volej DISP 0119 D2 16 01 JNC OUTKE ;bylo neco zmacknuto? Kdyz ne, volej DISP 011C 0F RRC ;odrotuj vpravo (z DISPu jde hodnota odrotovana vlevo, 011D ;takze RRC ji jen restauruje) 011D 4F MOV c,a ;ulozime se kod klavesy 011E L011E: 011E CD 40 01 CALL DISP ;volej DISP 0121 DA 1E 01 JC L011E ;byly klavesy uvolneny? Kdyz ne, volej DISP 0124 CD 40 01 CALL DISP ;jeste jednou zavolej DISP (proc?) 0127 79 MOV a,c ;natahni hodnotu kodu klavesy z C 0128 FE 90 CPI 090H ;a porovnej ji s kodem klavesy = (90h) 012A C9 RET ;RETURN??? Nemelo by zde byt nejake dalsi vyhodnoceni? 012B ;Nebo jde jen o nastaveni priznaku? 012B ; pravdepodobne jiz nepouzivany usek s vyhodnocenim (nevedou sem zadne skoky) 012B 08 DB 008H 012C 09 DAD b 012D 0D DCR c 012E 0B DCX b 012F 0A LDAX b 0130 13 INX d 0131 14 INR d 0132 0E 0C MVI c,00CH 0134 0F RRC 0135 05 DCR b 0136 1A LDAX d 0137 0D DCR c 0138 0B DCX b 0139 0A LDAX b 013A E4 DF D9 CPO 0xD9DF 013D DB DD IN 0DDH 013F FF RST 7 0140 ; konec asi jiz nepouzivane casti kodu 0140 DISP: ;tento podprogram byl okomentovan jiz v puvodni dokumentaci v AR 11/1984 0140 ; ale v tomto AR je spatna tabulka TABKEY. Spravne je to zde. 0140 E5 PUSH h 0141 C5 PUSH b 0142 D5 PUSH d 0143 11 00 00 LXI d,0000h ;nul D,E 0146 42 MOV b,d ;nul B 0147 7A MOV a,d ;nul A 0148 32 FE 1F STA 0x1FFE ;inic STATUS 014B LOOP1: 014B 3E 7F MVI a,07FH ;blok segmenty 014D D3 F8 OUT 0F8H ;port segment 014F 00 NOP 0150 7B MOV a,e 0151 2F CMA 0152 D3 FA OUT 0FAH ;nastav digit 0154 00 NOP 0155 2A FC 1F LHLD VIDEO_POINTER ;nastav ukazatel vypisu 0158 19 DAD d ;pripocitej digit 0159 4E MOV c,m ;vloz zobrazovana data 015A 21 BE 01 LXI h,TPREV ;nastav tabulku prevodu znaku 015D 09 DAD b 015E 7E MOV a,m ;segment data 015F D3 F8 OUT 0F8H ;port segment 0161 00 NOP 0162 3A FE 1F LDA 0x1FFE ;lda STATUS 0165 B7 ORA a 0166 C2 88 01 JNZ NOKEY ;KEY? 0169 0E 09 MVI c,009H ;ANO 016B 21 9A 01 LXI h,0019AH ;lxi h, TABKEY-9 nastav tabulku prevodu klaves 016E DB FA IN 0FAH ;vstup KEY kod 0170 00 NOP 0171 E6 70 ANI 070H ;maska 0173 07 RLC 0174 07 RLC 0175 D2 82 01 JNC PRVA ;ANO, první rada 0178 07 RLC ;NE 0179 D2 81 01 JNC DRUHA ;ANO, druhá rada 017C 07 RLC ;NE 017D DA 88 01 JC NOKEY ;C!=1, zadna rada 0180 09 DAD b ;pripocitej radu 0181 DRUHA: 0181 09 DAD b ;pripocitej radu 0182 PRVA: 0182 09 DAD b ;pripocitej radu 0183 19 DAD d ;pripocitej KEY 0184 7E MOV a,m ;vyber kod KEY 0185 32 FE 1F STA 0x1FFE ;vloz do STATUS 0188 NOKEY: 0188 1C INR e ;dalsi digit 0189 3E 0A MVI a,00AH 018B BB CMP e 018C C2 4B 01 JNZ LOOP1 ;posledni digit? 018F 3A FE 1F LDA 0x1FFE ;lda STATUS ANO, posledni 0192 07 RLC ;nastav carry 0193 D1 POP d 0194 C1 POP b 0195 E1 POP h 0196 C9 RET 0197 ; 0197 L0197: 0197 21 F0 01 LXI h,TEXT_ERR_ADRES 019A C3 40 00 JMP L0040 019D ; 019D L019D: 019D 21 F9 01 LXI h,TEXT_ERR_DATA 01A0 C3 40 00 JMP L0040 01A3 ; tabulka klaves. 01A3 ; 80h-8Fh = klavesy 0-F, 9xh = ridici klavesy, FFh = neosazeno 01A3 TABKEY: 01A3 80 84 88 91 8D 8C 89 85 81 DB 080H,084H,088H,091H,08DH,08CH,089H,085H,081H ;3. radek matice tl. 01AC 82 86 8A 9A 8F 8E 8B 87 83 DB 082H,086H,08AH,09AH,08FH,08EH,08BH,087H,083H ;2. radek matice tl. 01B5 FF 94 93 FF 97 92 FF FF 90 DB 0FFH,094H,093H,0FFH,097H,092H,0FFH,0FFH,090H ;1. radek matice tl. 01BE ; tabulka pro prevod kodu znaku na sedmisegmentove vyjadreni 01BE ; pozor, je to invertovane! 01BE TPREV: 01BE 40 DB 040H ;znak 0 01BF 79 DB 079H ;znak 1, atd. dle tabulky znaku: 01C0 24 30 19 12 02 78 00 18 08 03 46 21 DB 024H,030H,019H,012H,002H,078H,000H,018H,008H,003H,046H,021H 01CC 06 0E 07 23 2F 0C 47 63 48 71 37 7F DB 006H,00EH,007H,023H,02FH,00CH,047H,063H,048H,071H,037H,07FH 01D8 09 2B 0B 2C 5D 3F 42 61 DB 009H,02BH,00BH,02CH,05DH,03FH,042H,061H 01E0 7B DB 07BH ;znak c. 22 (carka), posledni v tabulce znaku 01E1 11 DB 011H ;v tabulce znaku v manualu neni 01E2 FF RST 7 ; volny prostor (lze vyuzit pro upravy) 01E3 FF RST 7 01E4 FF RST 7 01E5 FF RST 7 01E6 FF RST 7 01E7 TEXT_PMI_80: ;zacina na adrese 01E7h 01E7 1E 13 16 01 19 1F 08 00 1E DB 01EH,013H,016H,001H,019H,01FH,008H,000H,01EH 01F0 ;TEXT_PMI_80r: 01F0 ; db 01EH, 013H, 016H, 001H, 01FH, 008H, 000H, 012H 01EH 01F0 ; text pro repliku PMI-80r od 01E7h 01F0 ;TEXT_PMI_85: 01F0 ; db 01EH, 013H, 016H, 001H, 019H, 01FH, 008H, 005H, 01EH 01F0 ; na 01EEh dat hodnotu 05h 01F0 ;TEXT_PMI Z-80 01F0 ; db 013H, 016H, 001H, 019H, 019H, 002H, 01FH, 008H, 000H 01F0 ; alternativni text pro Z-80 (od 01E7h) 01F0 ;TEXT_PMI_880: 01F0 ; db 01EH, 013H, 016H, 001H, 019H, 008H, 008H, 000H, 01EH 01F0 ; alternativni text pro U880D 01F0 ; na 01EC dat hodnotu 08h 01F0 TEXT_ERR_ADRES: 01F0 0E 12 12 18 0A 0D 12 0E 05 DB 00EH,012H,012H,018H,00AH,00DH,012H,00EH,005H 01F9 TEXT_ERR_DATA: 01F9 0E 12 12 18 19 0D 0A 10 0A DB 00EH,012H,012H,018H,019H,00DH,00AH,010H,00AH 0202 TEXT_ERROR: 0202 1E 19 0E 12 12 11 12 19 1E DB 01EH,019H,00EH,012H,012H,011H,012H,019H,01EH 020B TABPRIKAZY: ;kod prikazu (klavesy) + adresa obsluzneho programu (low, high) 020B 92 72 00 DB 092H,072H,000H ; MEM 020E 91 29 02 DB 091H,029H,002H ; EX 0211 97 5A 02 DB 097H,05AH,002H ; BR 0214 9A 7E 02 DB 09AH,07EH,002H ; R 0217 94 4C 03 DB 094H,04CH,003H ; SAVE 021A 93 8C 03 DB 093H,08CH,003H ; LOAD 021D FF FF FF DB 0FFH,0FFH,0FFH ; Zde mely byt asi Rst 7 (nevyuzite misto) 0220 TEXT_BR_STOP: 0220 1E 0B 12 1F 05 10 11 13 1E DB 01EH,00BH,012H,01FH,005H,010H,011H,013H,01EH 0229 PRIKAZ_EX: ; EX 0229 3E 20 MVI a,020H 022B CD AB 00 CALL CLEAR 022E 2A E2 1F LHLD 0x1FE2 0231 22 F8 1F SHLD IN_ADR 0234 CD D7 00 CALL MODAD 0237 2A F8 1F LHLD IN_ADR 023A 22 E2 1F SHLD 0x1FE2 023D 3E 06 MVI a,006H 023F D3 F8 OUT 0F8H 0241 00 NOP 0242 3E 0F MVI a,00FH 0244 D3 FA OUT 0FAH 0246 00 NOP 0247 21 E9 1F LXI h,STACK 024A F9 SPHL 024B D1 POP d 024C C1 POP b 024D F1 POP psw 024E 2A E4 1F LHLD 0x1FE4 0251 F9 SPHL 0252 2A E2 1F LHLD 0x1FE2 0255 E5 PUSH h 0256 2A DF 1F LHLD 0x1FDF 0259 C9 RET 025A ; 025A PRIKAZ_BR: ; BR 025A 3E 0B MVI a,00BH 025C CD AB 00 CALL CLEAR 025F 2A EC 1F LHLD 0x1FEC 0262 22 F8 1F SHLD IN_ADR 0265 CD D7 00 CALL MODAD 0268 2A F8 1F LHLD IN_ADR 026B 22 EC 1F SHLD 0x1FEC 026E 7E MOV a,m 026F 32 EE 1F STA 0x1FEE 0272 36 CF MVI m,0CFH 0274 2A E2 1F LHLD 0x1FE2 0277 2B DCX h 0278 22 E2 1F SHLD 0x1FE2 027B C3 29 02 JMP PRIKAZ_EX 027E ; 027E PRIKAZ_R: ; R 027E 3E 12 MVI a,012H 0280 CD AB 00 CALL CLEAR 0283 CD 16 01 CALL OUTKE 0286 D2 67 00 JNC L0067 0289 E6 0F ANI 00FH 028B 01 06 00 LXI b,00006H 028E L028E: 028E 21 2A 01 LXI h,0012AH 0291 0B DCX b 0292 09 DAD b 0293 0C INR c 0294 0D DCR c 0295 CA 4F 00 JZ L004F 0298 BE CMP m 0299 C2 8E 02 JNZ L028E 029C L029C: 029C 21 2F 01 LXI h,0012FH 029F CD CD 02 CALL L02CD 02A2 5D MOV e,l 02A3 21 34 01 LXI h,00134H 02A6 CD CD 02 CALL L02CD 02A9 63 MOV h,e 02AA 22 F6 1F SHLD 0x1FF6 02AD C5 PUSH b 02AE CD CA 02 CALL L02CA 02B1 E5 PUSH h 02B2 4E MOV c,m 02B3 23 INX h 02B4 66 MOV h,m 02B5 69 MOV l,c 02B6 22 F8 1F SHLD IN_ADR 02B9 CD D7 00 CALL MODAD 02BC D1 POP d 02BD 7D MOV a,l 02BE 12 STAX d 02BF 13 INX d 02C0 7C MOV a,h 02C1 12 STAX d 02C2 C1 POP b 02C3 0D DCR c 02C4 C2 9C 02 JNZ L029C 02C7 C3 4F 00 JMP L004F 02CA L02CA: 02CA 21 39 01 LXI h,00139H 02CD L02CD: 02CD 06 00 MVI b,000H 02CF 09 DAD b 02D0 6E MOV l,m 02D1 26 1F MVI h,01FH 02D3 C9 RET 02D4 ; 02D4 TOUT: 02D4 06 09 MVI b,009H 02D6 L02D6: 02D6 3E C7 MVI a,0C7H 02D8 CD EE 02 CALL L02EE 02DB 79 MOV a,c 02DC 1F RAR 02DD 4F MOV c,a 02DE 3E 8F MVI a,08FH 02E0 1F RAR 02E1 CD EE 02 CALL L02EE 02E4 3E 47 MVI a,047H 02E6 CD EE 02 CALL L02EE 02E9 05 DCR b 02EA C2 D6 02 JNZ L02D6 02ED C9 RET 02EE ; 02EE L02EE: 02EE 16 20 MVI d,020H 02F0 L02F0: 02F0 D3 F8 OUT 0F8H 02F2 1E 04 MVI e,004H 02F4 L02F4: 02F4 1D DCR e 02F5 C2 F4 02 JNZ L02F4 02F8 EE 40 XRI 040H 02FA 15 DCR d 02FB C2 F0 02 JNZ L02F0 02FE C9 RET 02FF ; 02FF FF RST 7 0300 TIN: 0300 06 08 MVI b,008H 0302 16 00 MVI d,000H 0304 L0304: 0304 CD 42 03 CALL L0342 0307 DA 04 03 JC L0304 030A CD 42 03 CALL L0342 030D DA 04 03 JC L0304 0310 L0310: 0310 CD 42 03 CALL L0342 0313 D2 10 03 JNC L0310 0316 CD 42 03 CALL L0342 0319 D2 10 03 JNC L0310 031C L031C: 031C 15 DCR d 031D CD 42 03 CALL L0342 0320 DA 1C 03 JC L031C 0323 CD 42 03 CALL L0342 0326 DA 1C 03 JC L031C 0329 L0329: 0329 14 INR d 032A CD 42 03 CALL L0342 032D D2 29 03 JNC L0329 0330 CD 42 03 CALL L0342 0333 D2 29 03 JNC L0329 0336 7A MOV a,d 0337 17 RAL 0338 79 MOV a,c 0339 1F RAR 033A 4F MOV c,a 033B 16 00 MVI d,000H 033D 05 DCR b 033E C2 1C 03 JNZ L031C 0341 C9 RET 0342 ; 0342 L0342: 0342 1E 02 MVI e,002H 0344 L0344: 0344 1D DCR e 0345 C2 44 03 JNZ L0344 0348 DB FA IN 0FAH 034A 17 RAL 034B C9 RET 034C ; 034C PRIKAZ_SAVE: 034C 3E 05 MVI a,005H 034E CD AB 00 CALL CLEAR 0351 CD D7 00 CALL MODAD 0354 CD FB 00 CALL MODDA 0357 21 95 00 LXI h,TEXT_MG_RUN 035A 22 FC 1F SHLD VIDEO_POINTER 035D CD 16 01 CALL OUTKE 0360 3E 23 MVI a,023H 0362 D3 F8 OUT 0F8H 0364 3E 0F MVI a,00FH 0366 D3 FA OUT 0FAH 0368 16 F0 MVI d,0F0H 036A 3E C7 MVI a,0C7H 036C CD F0 02 CALL L02F0 036F 3A FA 1F LDA IN_DATA 0372 4F MOV c,a 0373 CD D4 02 CALL TOUT 0376 3E 10 MVI a,010H 0378 CD AB 00 CALL CLEAR 037B 2A F8 1F LHLD IN_ADR 037E L037E: 037E 4E MOV c,m 037F CD D4 02 CALL TOUT 0382 2C INR l 0383 C2 7E 03 JNZ L037E 0386 L0386: 0386 21 9E 00 LXI h,TEXT_MG_STOP 0389 C3 43 00 JMP L0043 038C ; 038C PRIKAZ_LOAD: 038C 3E 14 MVI a,014H 038E CD AB 00 CALL CLEAR 0391 CD D7 00 CALL MODAD 0394 CD FB 00 CALL MODDA 0397 21 95 00 LXI h,TEXT_MG_RUN 039A L039A: 039A 22 FC 1F SHLD VIDEO_POINTER 039D CD 16 01 CALL OUTKE 03A0 L03A0: 03A0 2A F8 1F LHLD IN_ADR 03A3 3E 07 MVI a,007H 03A5 D3 F8 OUT 0F8H 03A7 3E 0F MVI a,00FH 03A9 D3 FA OUT 0FAH 03AB L03AB: 03AB 16 A0 MVI d,0A0H 03AD L03AD: 03AD CD 42 03 CALL L0342 03B0 DA AB 03 JC L03AB 03B3 15 DCR d 03B4 C2 AD 03 JNZ L03AD 03B7 CD 00 03 CALL TIN 03BA 3A FA 1F LDA IN_DATA 03BD B9 CMP c 03BE C2 CC 03 JNZ L03CC 03C1 L03C1: 03C1 CD 00 03 CALL TIN 03C4 71 MOV m,c 03C5 2C INR l 03C6 C2 C1 03 JNZ L03C1 03C9 C3 86 03 JMP L0386 03CC ; 03CC L03CC: 03CC DA E7 03 JC L03E7 03CF 3E 0F MVI a,00FH 03D1 CD AB 00 CALL CLEAR 03D4 79 MOV a,c 03D5 01 F6 1F LXI b,0x1FF6 03D8 CD C6 00 CALL L00C6 03DB 21 EF 1F LXI h,VIDEORAM 03DE 22 FC 1F SHLD VIDEO_POINTER 03E1 CD 16 01 CALL OUTKE 03E4 C3 A0 03 JMP L03A0 03E7 ; 03E7 L03E7: 03E7 21 ED 03 LXI h,TEXT_MG_SPAT 03EA C3 9A 03 JMP L039A 03ED TEXT_MG_SPAT: 03ED 1E 16 20 19 05 13 0A 10 1E DB 01EH,016H,020H,019H,005H,013H,00AH,010H,01EH 03F6 FF RST 7 ; volny prostor na konci PROM (lze vyuzit pro upravy) 03F7 FF RST 7 03F8 FF RST 7 03F9 FF RST 7 03FA FF RST 7 03FB FF RST 7 03FC FF RST 7 03FD FF RST 7 03FE FF RST 7 03FF FF RST 7 ;03FFh konec 1KB PROM 0400 ; Poznamka: port PB sluzebni 8255A lze nastavit 0400 ; pouze na jednoduchy vstup/vystup v rezimu 0 0400 ; 0400 ; vstup: mvi a,08Ah 0400 ; out 0FBh 0400 ; 0400 ; vystup: mvi a,088h 0400 ; out 0FBh 0400 ; 0400 ; jina nastaveni tohoto obvodu nejsou mozna! 0400 ; Pridavny 8255A lze nastavit dle libosti. 0400 ; 0400 ;***************************** www.nostalcomp.cz ***************************** STACK: 1FE9 DEFINED AT LINE 24 > USED AT LINE 59 > USED AT LINE 72 > USED AT LINE 372 INT_VECTOR: 1FE6 DEFINED AT LINE 25 > USED AT LINE 65 VIDEO_POINTER: 1FFC DEFINED AT LINE 26 > USED AT LINE 74 > USED AT LINE 77 > USED AT LINE 134 > USED AT LINE 256 > USED AT LINE 533 > USED AT LINE 564 > USED AT LINE 598 VIDEORAM: 1FEF DEFINED AT LINE 27 > USED AT LINE 76 > USED AT LINE 597 IN_DATA: 1FFA DEFINED AT LINE 28 > USED AT LINE 112 > USED AT LINE 117 > USED AT LINE 185 > USED AT LINE 203 > USED AT LINE 542 > USED AT LINE 580 IN_ADR: 1FF8 DEFINED AT LINE 29 > USED AT LINE 116 > USED AT LINE 120 > USED AT LINE 145 > USED AT LINE 172 > USED AT LINE 180 > USED AT LINE 362 > USED AT LINE 364 > USED AT LINE 388 > USED AT LINE 390 > USED AT LINE 431 > USED AT LINE 547 > USED AT LINE 567 START: 0000 DEFINED AT LINE 32 ENTRY: 0008 DEFINED AT LINE 38 > USED AT LINE 132 L002E: 002E DEFINED AT LINE 58 > USED AT LINE 36 INTERRUPT: 0038 DEFINED AT LINE 64 L003D: 003D DEFINED AT LINE 69 > USED AT LINE 61 L0040: 0040 DEFINED AT LINE 71 > USED AT LINE 57 > USED AT LINE 94 > USED AT LINE 301 > USED AT LINE 305 L0043: 0043 DEFINED AT LINE 73 > USED AT LINE 555 L004F: 004F DEFINED AT LINE 78 > USED AT LINE 413 > USED AT LINE 442 L005C: 005C DEFINED AT LINE 84 > USED AT LINE 91 L0067: 0067 DEFINED AT LINE 92 > USED AT LINE 404 L006D: 006D DEFINED AT LINE 95 > USED AT LINE 87 PRIKAZ_MEM: 0072 DEFINED AT LINE 106 L007A: 007A DEFINED AT LINE 110 > USED AT LINE 122 TEXT_MG_RUN: 0095 DEFINED AT LINE 123 > USED AT LINE 532 > USED AT LINE 562 TEXT_MG_STOP: 009E DEFINED AT LINE 125 > USED AT LINE 554 CLEAR: 00AB DEFINED AT LINE 131 > USED AT LINE 80 > USED AT LINE 108 > USED AT LINE 360 > USED AT LINE 386 > USED AT LINE 402 > USED AT LINE 529 > USED AT LINE 546 > USED AT LINE 559 > USED AT LINE 593 L00AE: 00AE DEFINED AT LINE 133 > USED AT LINE 138 OUTAD: 00BB DEFINED AT LINE 143 > USED AT LINE 121 > USED AT LINE 168 L00C5: 00C5 DEFINED AT LINE 148 > USED AT LINE 186 L00C6: 00C6 DEFINED AT LINE 150 > USED AT LINE 147 > USED AT LINE 596 MODAD: 00D7 DEFINED AT LINE 167 > USED AT LINE 109 > USED AT LINE 181 > USED AT LINE 363 > USED AT LINE 389 > USED AT LINE 432 > USED AT LINE 530 > USED AT LINE 560 OUTDA: 00F2 DEFINED AT LINE 183 > USED AT LINE 189 MODDA: 00FB DEFINED AT LINE 188 > USED AT LINE 115 > USED AT LINE 204 > USED AT LINE 531 > USED AT LINE 561 OUTKE: 0116 DEFINED AT LINE 206 > USED AT LINE 75 > USED AT LINE 81 > USED AT LINE 169 > USED AT LINE 190 > USED AT LINE 208 > USED AT LINE 403 > USED AT LINE 534 > USED AT LINE 565 > USED AT LINE 599 L011E: 011E DEFINED AT LINE 212 > USED AT LINE 214 DISP: 0140 DEFINED AT LINE 239 > USED AT LINE 207 > USED AT LINE 213 > USED AT LINE 215 LOOP1: 014B DEFINED AT LINE 248 > USED AT LINE 291 DRUHA: 0181 DEFINED AT LINE 280 > USED AT LINE 276 PRVA: 0182 DEFINED AT LINE 282 > USED AT LINE 274 NOKEY: 0188 DEFINED AT LINE 287 > USED AT LINE 266 > USED AT LINE 278 L0197: 0197 DEFINED AT LINE 299 > USED AT LINE 171 L019D: 019D DEFINED AT LINE 303 > USED AT LINE 192 TABKEY: 01A3 DEFINED AT LINE 308 TPREV: 01BE DEFINED AT LINE 314 > USED AT LINE 259 TEXT_PMI_80: 01E7 DEFINED AT LINE 327 > USED AT LINE 70 TEXT_ERR_ADRES: 01F0 DEFINED AT LINE 342 > USED AT LINE 300 TEXT_ERR_DATA: 01F9 DEFINED AT LINE 344 > USED AT LINE 304 TEXT_ERROR: 0202 DEFINED AT LINE 346 > USED AT LINE 93 TABPRIKAZY: 020B DEFINED AT LINE 348 > USED AT LINE 82 TEXT_BR_STOP: 0220 DEFINED AT LINE 356 > USED AT LINE 56 PRIKAZ_EX: 0229 DEFINED AT LINE 358 > USED AT LINE 398 PRIKAZ_BR: 025A DEFINED AT LINE 384 PRIKAZ_R: 027E DEFINED AT LINE 400 L028E: 028E DEFINED AT LINE 407 > USED AT LINE 415 L029C: 029C DEFINED AT LINE 416 > USED AT LINE 441 L02CA: 02CA DEFINED AT LINE 443 > USED AT LINE 425 L02CD: 02CD DEFINED AT LINE 445 > USED AT LINE 418 > USED AT LINE 421 TOUT: 02D4 DEFINED AT LINE 452 > USED AT LINE 544 > USED AT LINE 550 L02D6: 02D6 DEFINED AT LINE 454 > USED AT LINE 466 L02EE: 02EE DEFINED AT LINE 469 > USED AT LINE 456 > USED AT LINE 462 > USED AT LINE 464 L02F0: 02F0 DEFINED AT LINE 471 > USED AT LINE 479 > USED AT LINE 541 L02F4: 02F4 DEFINED AT LINE 474 > USED AT LINE 476 TIN: 0300 DEFINED AT LINE 483 > USED AT LINE 579 > USED AT LINE 584 L0304: 0304 DEFINED AT LINE 486 > USED AT LINE 488 > USED AT LINE 490 L0310: 0310 DEFINED AT LINE 491 > USED AT LINE 493 > USED AT LINE 495 L031C: 031C DEFINED AT LINE 496 > USED AT LINE 499 > USED AT LINE 501 > USED AT LINE 515 L0329: 0329 DEFINED AT LINE 502 > USED AT LINE 505 > USED AT LINE 507 L0342: 0342 DEFINED AT LINE 518 > USED AT LINE 487 > USED AT LINE 489 > USED AT LINE 492 > USED AT LINE 494 > USED AT LINE 498 > USED AT LINE 500 > USED AT LINE 504 > USED AT LINE 506 > USED AT LINE 575 L0344: 0344 DEFINED AT LINE 520 > USED AT LINE 522 PRIKAZ_SAVE: 034C DEFINED AT LINE 527 L037E: 037E DEFINED AT LINE 548 > USED AT LINE 552 L0386: 0386 DEFINED AT LINE 553 > USED AT LINE 588 PRIKAZ_LOAD: 038C DEFINED AT LINE 557 L039A: 039A DEFINED AT LINE 563 > USED AT LINE 604 L03A0: 03A0 DEFINED AT LINE 566 > USED AT LINE 600 L03AB: 03AB DEFINED AT LINE 572 > USED AT LINE 576 L03AD: 03AD DEFINED AT LINE 574 > USED AT LINE 578 L03C1: 03C1 DEFINED AT LINE 583 > USED AT LINE 587 L03CC: 03CC DEFINED AT LINE 590 > USED AT LINE 582 L03E7: 03E7 DEFINED AT LINE 602 > USED AT LINE 591 TEXT_MG_SPAT: 03ED DEFINED AT LINE 605 > USED AT LINE 603