0001 0000 ;------------------------------------------------------ 0002 0000 ; 0003 0000 ; Monitor multi-firmware per start-up 0004 0000 ; computer Z80 Nuova Elettronica 0005 0000 ; 0006 0000 ; Copyright Roberto Bazzano - 2006 0007 0000 ; 0008 0000 ;------------------------------------------------------ 0009 0000 ; 0010 0000 ; BANCHI 2 e 3 - Allocati da F800h a FFFFh 0011 0000 ; 0012 0000 ;------------------------------------------------------ 0013 0000 ; .org 00000h ; solo per debug con simulatore 0014 0000 ;------------------------------------------------------ 0015 0000 0016 0000 banco .equ 05fh ; porta di I/O per la selezione del banco di memoria della EPROM 0017 0000 0018 F800 .org 0f800h 0019 F800 0020 F800 C3 03 F8 jp start 0021 F803 0022 F803 F3 start: di ; disabilita gli interrupt 0023 F804 3E C9 ld a,0c9h ; inizializza il vettore per l'NMI 0024 F806 32 66 00 ld (0066h),a 0025 F809 0026 F809 AF xor a ; spegne il motore del floppy 0027 F80A D3 D6 out (0d6h),a 0028 F80C 0029 F80C 21 FF EB ld hl,0ebffh ; cerca dove posizionare lo SP prima di EC00 0030 F80F 7E sp1: ld a,(hl) 0031 F810 2F cpl 0032 F811 77 ld (hl),a 0033 F812 BE cp (hl) 0034 F813 28 03 jr z,sp3 0035 F815 2B sp2: dec hl 0036 F816 18 F7 jr sp1 0037 F818 2F sp3: cpl 0038 F819 77 ld (hl),a 0039 F81A BE cp (hl) 0040 F81B 20 F8 jr nz,sp2 0041 F81D F9 ld sp,hl 0042 F81E 0043 F81E 3E 01 ld a,01h ; seleziona il banco della 2390 0044 F820 D3 5F out (banco),a 0045 F822 CD A5 F0 call 0f0a5h ; inizializza i registri del SY6545 ed i PIO 0046 F825 0047 F825 CD 09 FA tast0: call initn ; pulisce il video nuovo 0048 F828 CD E9 F9 call initv ; pulisce il video vecchio 0049 F82B 0050 F82B 21 D2 FD ld hl,out0 ; visualizza il messaggio "SELECT" sui display 0051 F82E CD CB FA call msg 0052 F831 0053 F831 CD 2D FA call vmenu1 ; visualizza il menù 0054 F834 0055 F834 CD 00 FF tast0a: call input ; input da tastiere 0056 F837 FE 10 cp 10h ; se è stato premuto CR salta subito al controllo del tasto 0057 F839 28 1E jr z,tast1 0058 F83B FE 0F cp 0Fh ; controlla se è stato digitato un numero tra 1 e E 0059 F83D 30 F5 jr nc,tast0a 0060 F83F FE 01 cp 01h 0061 F841 38 F1 jr c,tast0a 0062 F843 0063 F843 21 D0 FD ld hl,curs ; calcola la posizione sul video vecchio per visualizzare il numero digitato 0064 F846 CD A0 FA call vloc ; calcola in DE l'indirizzo del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0065 F849 0066 F849 F5 push af ; visualizza il numero digitato 0067 F84A FE 0A cp 0Ah 0068 F84C 30 04 jr nc,tast0b ; se A >= 0ah addiziona 037h, altrimenti 030h 0069 F84E C6 30 add a,030h 0070 F850 18 02 jr tast0c 0071 F852 C6 37 tast0b: add a,037h 0072 F854 12 tast0c: ld (de),a ; sul video vecchio 0073 F855 CD 84 FA call writen ; e sul video nuovo - Il cursore è già posizionato 0074 F858 F1 pop af 0075 F859 0076 F859 FE 01 tast1: cp 01h ; se 1 lancia il boot del basic da 5.5 K 0077 F85B 20 13 jr nz,tast2 0078 F85D 21 12 FE ld hl,out10 ; visualizza il messaggio sui display 0079 F860 CD CB FA call msg 0080 F863 CD 09 FA call initn ; pulisce il video nuovo 0081 F866 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0082 F869 3E 19 ld a,19h ; seleziona il banco del basic da 5.5 K 0083 F86B D3 5F out (banco),a 0084 F86D C3 00 F0 jp 0f000h 0085 F870 0086 F870 FE 02 tast2: cp 02h ; se 2 lancia il boot vecchio 0087 F872 20 13 jr nz,tast3 0088 F874 21 DA FD ld hl,out1 ; visualizza il messaggio sui display 0089 F877 CD CB FA call msg 0090 F87A CD 09 FA call initn ; pulisce il video nuovo 0091 F87D CD 22 FA call curoff ; spegne il cursore sul video nuovo 0092 F880 3E 00 ld a,00h ; seleziona il banco della 1390 0093 F882 D3 5F out (banco),a 0094 F884 C3 00 F0 jp 0f000h 0095 F887 0096 F887 FE 03 tast3: cp 03h ; se 3 lancia il boot grafic 0097 F889 20 10 jr nz,tast4 0098 F88B 21 E2 FD ld hl,out2 ; visualizza il messaggio sui display 0099 F88E CD CB FA call msg 0100 F891 CD E9 F9 call initv ; pulisce il video vecchio 0101 F894 3E 01 ld a,01h ; seleziona il banco della 2390 0102 F896 D3 5F out (banco),a 0103 F898 C3 00 F0 jp 0f000h 0104 F89B 0105 F89B FE 04 tast4: cp 04h ; se 4 lancia il boot del S.O.N.E. 0106 F89D 20 10 jr nz,tast5 0107 F89F 21 1A FE ld hl,out11 ; visualizza il messaggio sui display 0108 F8A2 CD CB FA call msg 0109 F8A5 CD E9 F9 call initv ; pulisce il video vecchio 0110 F8A8 3E 1A ld a,1Ah ; seleziona il banco del s.o.n.e. 0111 F8AA D3 5F out (banco),a 0112 F8AC C3 00 F0 jp 0f000h 0113 F8AF 0114 F8AF FE 05 tast5: cp 05h ; se 5 lancia il basic in rom rilocato in ram 0115 F8B1 20 24 jr nz,tast6 0116 F8B3 21 EA FD ld hl,out3 ; visualizza il messaggio sui display 0117 F8B6 CD CB FA call msg 0118 F8B9 CD 09 FA call initn ; pulisce il video nuovo 0119 F8BC CD 22 FA call curoff ; spegne il cursore sul video nuovo 0120 F8BF 3E 08 ld a,08h ; seleziona il primo banco del basic in rom 0121 F8C1 11 00 00 ld de,00000h 0122 F8C4 0123 F8C4 D3 5F tast5a: out (banco),a ; sposta gli 8 banchi da 2K in ram 0124 F8C6 01 00 08 ld bc,0800h 0125 F8C9 21 00 F0 ld hl,0f000h 0126 F8CC ED B0 ldir 0127 F8CE 3C inc a 0128 F8CF 3C inc a 0129 F8D0 FE 18 cp 18h 0130 F8D2 20 F0 jr nz,tast5a 0131 F8D4 C3 00 00 jp 0000h ; salta al basic 0132 F8D7 0133 F8D7 FE 06 tast6: cp 06h ; se 6 lancia il monitor esadecimale originale non rilocato 0134 F8D9 20 1B jr nz,tast7 ; con il firmware non rilocato per il programmatore di eprom 0135 F8DB CD E9 F9 call initv ; pulisce il video vecchio 0136 F8DE CD 09 FA call initn ; pulisce il video nuovo 0137 F8E1 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0138 F8E4 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0139 F8E6 D3 5F out (banco),a 0140 F8E8 21 00 F0 ld hl,0f000h ; sposta i due monitor in ram 0141 F8EB 11 00 80 ld de,08000h 0142 F8EE 01 00 08 ld bc,0800h 0143 F8F1 ED B0 ldir 0144 F8F3 C3 00 80 jp 8000h 0145 F8F6 0146 F8F6 FE 07 tast7: cp 07h ; se 7 lancia il monitor esadecimale non rilocato con lo SP rilocato prima di EC00 0147 F8F8 20 1B jr nz,tast8 ; con il firmware non rilocato per il programmatore di eprom 0148 F8FA CD E9 F9 call initv ; pulisce il video vecchio 0149 F8FD CD 09 FA call initn ; pulisce il video nuovo 0150 F900 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0151 F903 3E 20 ld a,20h ; seleziona il banco del monitor esadecimale con SP rilocato 0152 F905 D3 5F out (banco),a 0153 F907 21 00 F0 ld hl,0f000h ; sposta i due monitor in ram 0154 F90A 11 00 80 ld de,08000h 0155 F90D 01 00 08 ld bc,0800h 0156 F910 ED B0 ldir 0157 F912 C3 00 80 jp 8000h 0158 F915 0159 F915 FE 08 tast8: cp 08h ; se 8 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 0160 F917 20 16 jr nz,tast9 ; per la tastiera alfanumerica con il firmware rilocato per il programmatore di eprom 0161 F919 21 F2 FD ld hl,out4 ; visualizza il messaggio sui display 0162 F91C CD CB FA call msg 0163 F91F CD E9 F9 call initv ; pulisce il video vecchio 0164 F922 CD 09 FA call initn ; pulisce il video nuovo 0165 F925 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0166 F928 3E 1C ld a,1Ch ; seleziona il banco del monitor esadecimale rilocato per la tastiera alfanumerica 0167 F92A D3 5F out (banco),a 0168 F92C C3 00 F0 jp 0f000h 0169 F92F 0170 F92F FE 09 tast9: cp 09h ; se 9 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 0171 F931 20 10 jr nz,tastA ; per la tastiera esadecimale con il firmware rilocato per il programmatore di eprom 0172 F933 CD E9 F9 call initv ; pulisce il video vecchio 0173 F936 CD 09 FA call initn ; pulisce il video nuovo 0174 F939 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0175 F93C 3E 1E ld a,1Eh ; seleziona il banco del monitor esadecimale rilocato per la tastiera esadecimale 0176 F93E D3 5F out (banco),a 0177 F940 C3 00 F0 jp 0f000h 0178 F943 0179 F943 FE 0A tastA: cp 0Ah ; se A lancia direttamente il bootstrap multiplo 0180 F945 20 16 jr nz,tastB 0181 F947 21 FA FD ld hl,out7 ; visualizza il messaggio sui display 0182 F94A CD CB FA call msg 0183 F94D CD E9 F9 call initv ; pulisce il video vecchio 0184 F950 CD 09 FA call initn ; pulisce il video nuovo 0185 F953 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0186 F956 3E 06 ld a,06h ; seleziona il banco della 2390 modificata per non fare il check sul disco di boot 0187 F958 D3 5F out (banco),a 0188 F95A C3 7D F1 jp 0f17dh ; salta direttamente al BOOT 0189 F95D 0190 F95D FE 0B tastB: cp 0Bh ; se B lancia il loader del basic da 5.5 K 0191 F95F 20 27 jr nz,tastC 0192 F961 CD 09 FA call initn ; pulisce il video nuovo 0193 F964 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0194 F967 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0195 F969 D3 5F out (banco),a 0196 F96B 21 00 F0 ld hl,0f000h ; sposta il monitor in ram 0197 F96E 11 00 80 ld de,08000h 0198 F971 01 00 04 ld bc,0400h 0199 F974 ED B0 ldir 0200 F976 3E 18 ld a,18h ; seleziona il banco del loader del basic da 5.5 K 0201 F978 D3 5F out (banco),a 0202 F97A 21 00 F0 ld hl,0f000h ; sposta il loader in ram 0203 F97D 11 00 00 ld de,00000h 0204 F980 01 00 04 ld bc,0400h 0205 F983 ED B0 ldir 0206 F985 C3 69 00 jp 0069h ; salta al loader 0207 F988 0208 F988 FE 0C tastC: cp 0Ch ; se C lancia la prova tastiera 0209 F98A 20 0F jr nz,tastD 0210 F98C 21 02 FE ld hl,out8 ; visualizza il messaggio sui display 0211 F98F CD CB FA call msg 0212 F992 CD 09 FA call initn ; pulisce il video nuovo 0213 F995 CD 22 FA call curoff ; spegne il cursore sul video nuovo 0214 F998 C3 DD FA jp key 0215 F99B 0216 F99B FE 0D tastD: cp 0Dh ; se D lancia il basic in rom (salta a 0000h) 0217 F99D 20 12 jr nz,tastE 0218 F99F 21 0A FE ld hl,out9 ; visualizza il messaggio sui display 0219 F9A2 CD CB FA call msg 0220 F9A5 CD E9 F9 call initv ; pulisce il video vecchio 0221 F9A8 CD 09 FA call initn ; pulisce il video nuovo 0222 F9AB CD 22 FA call curoff ; spegne il cursore sul video nuovo 0223 F9AE C3 00 00 jp 0000h 0224 F9B1 0225 F9B1 FE 0E tastE: cp 0Eh ; se E salta a 1000h senza modificare i display ed i monitor 0226 F9B3 20 03 jr nz,tastF 0227 F9B5 C3 00 10 jp 01000h 0228 F9B8 0229 F9B8 FE 0F tastF: cp 0Fh ; se F sposta le routines di stampa per monitor esadecimale a 0070 0230 F9BA 20 12 jr nz,tast10 0231 F9BC 3E 07 ld a,07h ; seleziona il banco delle routines di stampa 0232 F9BE D3 5F out (banco),a 0233 F9C0 21 00 F0 ld hl,0f000h ; sposta le routines in ram 0234 F9C3 11 70 00 ld de,00070h 0235 F9C6 01 00 04 ld bc,0400h 0236 F9C9 ED B0 ldir 0237 F9CB C3 25 F8 jp tast0 0238 F9CE 0239 F9CE FE 10 tast10: cp 10h ; se RETURN cambia pagina di menù 0240 F9D0 20 14 jr nz,tastFF 0241 F9D2 3A 3D EC ld a,(0EC3Dh) ; posizione del video vecchio in cui c'è il numero di pagina visualizzata 0242 F9D5 CD E9 F9 call initv ; pulisce il video vecchio 0243 F9D8 CD 09 FA call initn ; pulisce il video nuovo 0244 F9DB FE 31 cp 31h ; confronta il valore di A con "1" (A era stato salvato nello stack) 0245 F9DD CC 32 FA call z,vmenu2 ; visualizza la pagina di menù appropriata 0246 F9E0 C4 2D FA call nz,vmenu1 0247 F9E3 C3 34 F8 jp tast0a 0248 F9E6 0249 F9E6 C3 34 F8 tastFF: jp tast0a 0250 F9E9 0251 F9E9 ;------------------------------------------------------ 0252 F9E9 ; pulizia del video vecchio 0253 F9E9 0254 F9E9 E5 initv: push hl 0255 F9EA D5 push de 0256 F9EB C5 push bc 0257 F9EC 21 00 EC ld hl,0ec00h 0258 F9EF 11 01 EC ld de,0ec01h 0259 F9F2 36 20 ld (hl),20h 0260 F9F4 01 FF 01 ld bc,01ffh 0261 F9F7 CD 00 FA call waitv ; attende la ritraccia 0262 F9FA ED B0 ldir 0263 F9FC C1 pop bc 0264 F9FD D1 pop de 0265 F9FE E1 pop hl 0266 F9FF C9 ret 0267 FA00 0268 FA00 ;------------------------------------------------------ 0269 FA00 ; attende la ritraccia del video vecchio 0270 FA00 0271 FA00 F5 waitv: push af 0272 FA01 0273 FA01 DB EB waitv1: in a,(0ebh) ; attende la ritraccia video 0274 FA03 CB 7F bit 7,a 0275 FA05 20 FA jr nz,waitv1 0276 FA07 F1 pop af 0277 FA08 C9 ret 0278 FA09 0279 FA09 ;------------------------------------------------------ 0280 FA09 ; pulizia del video nuovo 0281 FA09 0282 FA09 F5 initn: push af 0283 FA0A 21 00 00 ld hl,0h 0284 FA0D CD 71 FA initn1: call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0285 FA10 0286 FA10 3E 20 ld a,20h ; imposta il carattere a "blank" 0287 FA12 CD 84 FA call writen ; scrive il carattere 0288 FA15 0289 FA15 23 inc hl 0290 FA16 7D ld a,l 0291 FA17 FE 81 cp 81h 0292 FA19 20 F2 jr nz,initn1 0293 FA1B 7C ld a,h 0294 FA1C FE 07 cp 07h 0295 FA1E 20 ED jr nz,initn1 0296 FA20 0297 FA20 F1 pop af 0298 FA21 C9 ret 0299 FA22 0300 FA22 ;------------------------------------------------------ 0301 FA22 ; spegne il cursore sul video nuovo 0302 FA22 0303 FA22 F5 curoff: push af 0304 FA23 0305 FA23 3E 0A ld a,0ah ; seleziona il registro R10 0306 FA25 D3 8C out (8ch),a 0307 FA27 3E 20 ld a,020h ; scrive il valore 32 (20h) per spegnere il cursore 0308 FA29 D3 8D out (8dh),a 0309 FA2B 0310 FA2B F1 pop af 0311 FA2C C9 ret 0312 FA2D 0313 FA2D ;------------------------------------------------------ 0314 FA2D ; Subroutine per la visualizzazione del menù sui video 0315 FA2D ; 0316 FA2D 0317 FA2D 21 5D FB vmenu1: ld hl,menu1 ; visualizza la 1° pagina del menu 0318 FA30 18 03 jr vis 0319 FA32 21 A7 FC vmenu2: ld hl,menu2 ; visualizza la 2° pagina del menu 0320 FA35 F5 vis: push af 0321 FA36 E5 vis1: push hl 0322 FA37 CD AD FA call nloc ; calcola in DE l'indirizzo del video nuovo in base alla riga/colonna nella locazione puntata da HL e HL+1 0323 FA3A D5 push de 0324 FA3B E1 pop hl 0325 FA3C CD 71 FA call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0326 FA3F 0327 FA3F E1 pop hl 0328 FA40 CD A0 FA call vloc ; calcola in DE l'indirizzo del video vecchio in base alla riga/colonna nella locazione puntata da HL e HL+1 0329 FA43 0330 FA43 7E vis2: ld a,(hl) ; recupera il carattere da scrivere 0331 FA44 CD 00 FA call waitv ; attende la ritraccia del video vecchio 0332 FA47 12 ld (de),a ; visualizza il carattere sul video vecchio 0333 FA48 13 inc de 0334 FA49 0335 FA49 CD 84 FA call writen ; attende la ritraccia e visualizza il carattere sul video nuovo 0336 FA4C 0337 FA4C 23 inc hl 0338 FA4D AF xor a ; controlla se il prossimo carattere è 00h 0339 FA4E BE cp (hl) 0340 FA4F 20 F2 jr nz,vis2 0341 FA51 23 inc hl 0342 FA52 2F cpl ; controlla se il prossimo carattere è 0ffh 0343 FA53 BE cp (hl) ; se no, ricarica la successiva prima posizione e looppa 0344 FA54 20 E0 jr nz,vis1 0345 FA56 0346 FA56 21 D0 FD ld hl,curs ; calcola in DE l'indirizzo del cursore in base alla riga/colonna nella locazione puntata da HL e HL+1 0347 FA59 CD AD FA call nloc 0348 FA5C D5 push de 0349 FA5D E1 pop hl 0350 FA5E CD 63 FA call lf060 ; carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare 0351 FA61 F1 pop af 0352 FA62 C9 ret 0353 FA63 0354 FA63 ;------------------------------------------------------ 0355 FA63 ; Subroutines identiche a quelle della eprom 2390 0356 FA63 ; 0357 FA63 3E 0E lf060: ld a,0eh ; carica da HL l'indirizzo del cursore 0358 FA65 D3 8C out (8ch),a 0359 FA67 7C ld a,h 0360 FA68 D3 8D out (8dh),a 0361 FA6A 3E 0F ld a,0fh 0362 FA6C D3 8C out (8ch),a 0363 FA6E 7D ld a,l 0364 FA6F D3 8D out (8dh),a 0365 FA71 0366 FA71 3E 12 lf06e: ld a,12h ; carica da HL l'indirizzo del carattere da visualizzare in R18 e R19 0367 FA73 D3 8C out (8ch),a 0368 FA75 7C ld a,h 0369 FA76 D3 8D out (8dh),a 0370 FA78 3E 13 ld a,13h 0371 FA7A D3 8C out (8ch),a 0372 FA7C 7D ld a,l 0373 FA7D D3 8D out (8dh),a 0374 FA7F ; jr lf086 ; (8) 0375 FA7F 0376 FA7F ;lf07e: ld a,0ah 0377 FA7F ; out (8ch),a 0378 FA7F ; ld a,20h 0379 FA7F ; out (8dh),a 0380 FA7F 0381 FA7F 3E 1F lf086: ld a,1fh ; accesso a R31 del SY6545 per fare l'update 0382 FA81 D3 8C out (8ch),a 0383 FA83 C9 ret 0384 FA84 0385 FA84 ;------------------------------------------------------ 0386 FA84 ; scrive il carattere presente in A sul video nuovo 0387 FA84 0388 FA84 CD 97 FA writen: call waitn ; attende la ritraccia 0389 FA87 D3 80 out (80h),a ; scrive il carattere 0390 FA89 F5 push af 0391 FA8A 3E 1F ld a,1fh ; imposta gli attributi del carattere 0392 FA8C D3 8E out (8eh),a 0393 FA8E 3E 1F ld a,31 ; update 0394 FA90 D3 8C out (8ch),a 0395 FA92 AF xor a 0396 FA93 D3 8D out (8dh),a 0397 FA95 F1 pop af 0398 FA96 C9 ret 0399 FA97 0400 FA97 ;------------------------------------------------------ 0401 FA97 ; attende la ritraccia del video nuovo 0402 FA97 0403 FA97 F5 waitn: push af 0404 FA98 0405 FA98 DB 8C waitn1: in a,(8ch) 0406 FA9A CB 7F bit 7,a 0407 FA9C 28 FA jr z,waitn1 0408 FA9E F1 pop af 0409 FA9F C9 ret 0410 FAA0 0411 FAA0 ;------------------------------------------------------ 0412 FAA0 ; Calcola la locazione del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0413 FAA0 ; Chiamare "vloc" per il video vecchio, "nloc" per il video nuovo 0414 FAA0 ; Ritorna DE. HL punterà al primo carattere da visualizzare 0415 FAA0 0416 FAA0 F5 vloc: push af 0417 FAA1 06 00 ld b,00h 0418 FAA3 4E ld c,(hl) 0419 FAA4 E5 push hl 0420 FAA5 21 00 EC ld hl,0ec00h 0421 FAA8 11 20 00 ld de,00020h 0422 FAAB 18 0B jr loc1 0423 FAAD 0424 FAAD F5 nloc: push af 0425 FAAE 06 00 ld b,00h 0426 FAB0 4E ld c,(hl) 0427 FAB1 E5 push hl 0428 FAB2 21 58 01 ld hl,00158h ; offset per centrare la videata sul video nuovo da 80x24 0429 FAB5 11 50 00 ld de,00050h 0430 FAB8 0431 FAB8 79 loc1: ld a,c 0432 FAB9 FE 00 cp 00h 0433 FABB 28 04 jr z,loc2 0434 FABD 19 add hl,de 0435 FABE 0D dec c 0436 FABF 18 F7 jr loc1 0437 FAC1 0438 FAC1 EB loc2: ex de,hl 0439 FAC2 E1 pop hl 0440 FAC3 23 inc hl 0441 FAC4 4E ld c,(hl) 0442 FAC5 EB ex de,hl 0443 FAC6 09 add hl,bc 0444 FAC7 EB ex de,hl 0445 FAC8 23 inc hl 0446 FAC9 F1 pop af 0447 FACA C9 ret 0448 FACB 0449 FACB ;------------------------------------------------------ 0450 FACB ; Visualizza il messaggio puntato da HL sui display della tastiera esadecimale 0451 FACB 0452 FACB F5 msg: push af 0453 FACC C5 push bc 0454 FACD 01 F7 08 ld bc,08F7h 0455 FAD0 7E msg1: ld a,(hl) 0456 FAD1 ED 79 out (c),a 0457 FAD3 23 inc hl 0458 FAD4 0D dec c 0459 FAD5 05 dec b 0460 FAD6 AF xor a 0461 FAD7 B8 cp b 0462 FAD8 20 F6 jr nz,msg1 0463 FADA C1 pop bc 0464 FADB F1 pop af 0465 FADC C9 ret 0466 FADD 0467 FADD 0468 FADD ;------------------------------------------------------ 0469 FADD ; ROUTINE PER LA PROVA TASTIERA 0470 FADD 0471 FADD CD E9 F9 key: call initv 0472 FAE0 01 20 00 ld bc,0020h 0473 FAE3 0474 FAE3 21 00 EC iniz: ld hl,0ec00h 0475 FAE6 DB EA in a,(0eah) ; input da tastiera vecchia 0476 FAE8 CD F8 FA call keyvis 0477 FAEB 0478 FAEB DB 85 in a,(085h) ; input da tastiera nuova 0479 FAED CD F8 FA call keyvis 0480 FAF0 0481 FAF0 DB 85 in a,(085h) ; input da tastiera nuova complementato 0482 FAF2 2F cpl 0483 FAF3 CD F8 FA call keyvis 0484 FAF6 0485 FAF6 18 EB jr iniz 0486 FAF8 0487 FAF8 0488 FAF8 CD 04 FB keyvis: call key1 ; visualizza il dato come arriva da tastiera 0489 FAFB 09 add hl,bc ; si posiziona sulla riga successiva 0490 FAFC 0491 FAFC E6 7F and 7fh ; visualizza il dato con lo strobe a 0 0492 FAFE CD 04 FB call key1 0493 FB01 09 add hl,bc ; si posiziona due righe dopo 0494 FB02 09 add hl,bc 0495 FB03 0496 FB03 C9 ret 0497 FB04 0498 FB04 E5 key1: push hl 0499 FB05 F5 push af 0500 FB06 F5 push af 0501 FB07 F1 loop: pop af 0502 FB08 07 rlca 0503 FB09 38 07 jr c,uno 0504 FB0B CD 00 FA call waitv 0505 FB0E 36 30 ld (hl),'0' 0506 FB10 18 05 jr cont 0507 FB12 CD 00 FA uno: call waitv 0508 FB15 36 31 ld (hl),'1' 0509 FB17 F5 cont: push af 0510 FB18 23 inc hl 0511 FB19 7D ld a,l 0512 FB1A E6 0F and 0fh 0513 FB1C FE 08 cp 08h 0514 FB1E 20 E7 jr nz,loop 0515 FB20 F1 pop af 0516 FB21 0517 FB21 CD 49 FB call sep ; separatore 0518 FB24 0519 FB24 F1 pop af ; visualizza il byte 0520 FB25 F5 push af 0521 FB26 1F rra 0522 FB27 1F rra 0523 FB28 1F rra 0524 FB29 1F rra 0525 FB2A E6 0F and 0fh 0526 FB2C CD 53 FB call lett ; somma l'offset per l'ASCII del numero o della lettera 0527 FB2F CD 00 FA call waitv 0528 FB32 77 ld (hl),a 0529 FB33 23 inc hl 0530 FB34 F1 pop af 0531 FB35 F5 push af 0532 FB36 E6 0F and 0fh 0533 FB38 CD 53 FB call lett 0534 FB3B CD 00 FA call waitv 0535 FB3E 77 ld (hl),a 0536 FB3F 0537 FB3F CD 49 FB call sep ; separatore 0538 FB42 0539 FB42 F1 pop af ; visualizza il carattere ASCII 0540 FB43 CD 00 FA call waitv 0541 FB46 77 ld (hl),a 0542 FB47 E1 pop hl 0543 FB48 C9 ret 0544 FB49 0545 FB49 23 sep: inc hl ; separatore 0546 FB4A 23 inc hl 0547 FB4B CD 00 FA call waitv 0548 FB4E 36 2D ld (hl),'-' 0549 FB50 23 inc hl 0550 FB51 23 inc hl 0551 FB52 C9 ret 0552 FB53 0553 FB53 FE 0A lett: cp 0Ah 0554 FB55 38 03 jr c,lett1 ; salta se minore 0555 FB57 C6 37 add a,55 0556 FB59 C9 ret 0557 FB5A C6 30 lett1: add a,'0' 0558 FB5C C9 ret 0559 FB5D 0560 FB5D 0561 FB5D ;------------------------------------------------------ 0562 FB5D 0563 FB5D 00065A383020menu1: .byte 000h, 006h, "Z80 NUOVA ELETTRONICA", 00h 0563 FB63 4E554F564120454C455454524F4E49434100 0564 FB75 010C424F4F54 .byte 001h, 00ch, "BOOTSTRAP", 00h 0564 FB7B 535452415000 0565 FB81 011D312F3200 .byte 001h, 01dh, "1/2", 00h 0566 FB87 030031203E20 .byte 003h, 000h, "1 > BOOT BASIC 5.5K SU " 0566 FB8D 424F4F5420424153494320352E354B20535520 0567 FBA0 464C4F505059 .byte "FLOPPY", 00h 0567 FBA6 00 0568 FBA7 040032203E20 .byte 004h, 000h, "2 > BOOT NE-DOS 1.5", 00h 0568 FBAD 424F4F54204E452D444F5320312E3500 0569 FBBD 050033203E20 .byte 005h, 000h, "3 > BOOT NE-DOS GRAFIC 1.0", 00h 0569 FBC3 424F4F54204E452D444F532047524146494320312E3000 0570 FBDA 060034203E20 .byte 006h, 000h, "4 > BOOT S.O.N.E.", 00h 0570 FBE0 424F4F5420532E4F2E4E2E452E00 0571 FBEE 070035203E20 .byte 007h, 000h, "5 > BASIC 16K IN RAM", 00h 0571 FBF4 42415349432031364B20494E2052414D00 0572 FC05 080036203E20 .byte 008h, 000h, "6 > MONITOR ORIGINALE " 0572 FC0B 4D4F4E49544F52204F524947494E414C4520 0573 FC1D 4E4F20494E54 .byte "NO INTERR.", 00h 0573 FC23 4552522E00 0574 FC28 090037203E20 .byte 009h, 000h, "7 > MONITOR SP RILOC. " 0574 FC2E 4D4F4E49544F522053502052494C4F432E20 0575 FC40 4E4F20494E54 .byte "NO INTERR.", 00h 0575 FC46 4552522E00 0576 FC4B 0A0038203E20 .byte 00Ah, 000h, "8 > MONITOR A VIDEO " 0576 FC51 4D4F4E49544F52204120564944454F20 0577 FC61 2852494C4F43 .byte "(RILOCATO)", 00h 0577 FC67 41544F2900 0578 FC6C 0B0043523E20 .byte 00Bh, 000h, "CR> CAMBIA PAGINA", 00h 0578 FC72 43414D42494120504147494E4100 0579 FC80 0D0F3E203C00 .byte 00Dh, 00Fh, "> <", 00h 0580 FC86 0F0028432920 .byte 00Fh, 000h, "(C) ROBERTO BAZZANO " 0580 FC8C 524F424552544F2042415A5A414E4F20 0581 FC9C 323030302D32 .byte "2000-2008", 00h 0581 FCA2 30303800 0582 FCA6 FF .byte 0ffh 0583 FCA7 0584 FCA7 00065A383020menu2: .byte 000h, 006h, "Z80 NUOVA ELETTRONICA", 00h 0584 FCAD 4E554F564120454C455454524F4E49434100 0585 FCBF 010C424F4F54 .byte 001h, 00ch, "BOOTSTRAP", 00h 0585 FCC5 535452415000 0586 FCCB 011D322F3200 .byte 001h, 01dh, "2/2", 00h 0587 FCD1 030039203E20 .byte 003h, 000h, "9 > MONITOR ORIGINALE " 0587 FCD7 4D4F4E49544F52204F524947494E414C4520 0588 FCE9 2852494C4F43 .byte "(RILOCATO)", 00h 0588 FCEF 41544F2900 0589 FCF4 040041203E20 .byte 004h, 000h, "A > BOOT IMMEDIATO NE-DOS", 00h 0589 FCFA 424F4F5420494D4D45444941544F204E452D444F5300 0590 FD10 050042203E20 .byte 005h, 000h, "B > LOADER BASIC 5.5K SU " 0590 FD16 4C4F4144455220424153494320352E354B20535520 0591 FD2B 434153532E00 .byte "CASS.", 00h 0592 FD31 060043203E20 .byte 006h, 000h, "C > PROVA TASTIERA", 00h 0592 FD37 50524F564120544153544945524100 0593 FD46 070044203E20 .byte 007h, 000h, "D > RESTART A 0000H", 00h 0593 FD4C 52455354415254204120303030304800 0594 FD5C 080045203E20 .byte 008h, 000h, "E > RESTART A 1000H", 00h 0594 FD62 52455354415254204120313030304800 0595 FD72 090046203E20 .byte 009h, 000h, "F > LOAD ROUTINES STAMPA " 0595 FD78 4C4F414420524F5554494E4553205354414D504120 0596 FD8D 412030303730 .byte "A 0070H", 00h 0596 FD93 4800 0597 FD95 0B0043523E20 .byte 00Bh, 000h, "CR> CAMBIA PAGINA", 00h 0597 FD9B 43414D42494120504147494E4100 0598 FDA9 0D0F3E203C00 .byte 00Dh, 00Fh, "> <", 00h 0599 FDAF 0F0028432920 .byte 00Fh, 000h, "(C) ROBERTO BAZZANO " 0599 FDB5 524F424552544F2042415A5A414E4F20 0600 FDC5 323030302D32 .byte "2000-2008", 00h 0600 FDCB 30303800 0601 FDCF FF .byte 0ffh 0602 FDD0 0603 FDD0 0D 10 curs: .byte 00Dh, 010h ; riga/colonna in cui posizionare il cursore 0604 FDD2 0605 FDD2 ; Tabelle per visualizzazione su display tastiera esadecimale 0606 FDD2 ; 0607 FDD2 ; 0608 FDD2 ; Valori per l'accensione dei segmenti del display: 0609 FDD2 ; 0610 FDD2 ; 1 0611 FDD2 ; - bit a 1 spegne il segmento 0612 FDD2 ; 32 | | 2 0613 FDD2 ; - 64 F0 = display a destra 0614 FDD2 ; 16 | | 4 !! 0615 FDD2 ; - F7 = display a sinistra 0616 FDD2 ; 8 0617 FDD2 ; 128 = punto decimale 0618 FDD2 0619 FDD2 FF9286C786C6out0: .byte 0ffh, 092h, 086h, 0C7h, 086h, 0C6h, 087h, 0ffh ; select 0619 FDD8 87FF 0620 FDDA AB86A1C092FFout1: .byte 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 079h, 092h ; nedos 1.5 0620 FDE0 7992 0621 FDE2 AB86A1C092FFout2: .byte 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 042h, 0F9h ; nedos G.1 0621 FDE8 42F9 0622 FDEA 838892F9C6FFout3: .byte 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 0F9h, 082h ; basic 16 0622 FDF0 F982 0623 FDF2 C8C0ABF987C0out4: .byte 0C8h, 0C0h, 0ABh, 0F9h, 087h, 0C0h, 0AFh, 0FFh ; monitor 0623 FDF8 AFFF 0624 FDFA FFFF83C0C087out7: .byte 0FFh, 0FFh, 083h, 0C0h, 0C0h, 087h, 0FFh, 0FFh ; boot 0624 FE00 FFFF 0625 FE02 FFFF87869287out8: .byte 0FFh, 0FFh, 087h, 086h, 092h, 087h, 0FFh, 0FFh ; test 0625 FE08 FFFF 0626 FE0A FFFFC19286AFout9: .byte 0FFh, 0FFh, 0C1h, 092h, 086h, 0AFh, 0FFh, 0FFh ; user 0626 FE10 FFFF 0627 FE12 838892F9C6FFout10: .byte 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 012h, 092h ; basic 5.5 0627 FE18 1292 0628 FE1A FFFF92C0AB86out11: .byte 0FFh, 0FFh, 092h, 0C0h, 0ABh, 086h, 0FFh, 0FFh ; sone 0628 FE20 FFFF 0629 FE22 0630 FE22 0631 FE22 ;------------------------------------------------------ 0632 FE22 ; 0633 FE22 ; Nuova routine di input tastiera per il monitor esadecimale 0634 FE22 ; Sostituisce la 80AA e accetta l'input dalla tastiera alfanumerica vecchia o nuova 0635 FE22 ; o dalla tastiera esadecimale convertendo il valore ricevuto in modo da essere 0636 FE22 ; compatibile con la 80AA 0637 FE22 ; 0638 FE22 ; Dati ricevuti dalla tastiera: 0639 FE22 ; Numeri da 0 a 9: da 30h a 39h 0640 FE22 ; Lettere da A ad F: da 61h a 66h 0641 FE22 ; Shift+numero da 1 a 9: da 21h a 29h 0642 FE22 ; Shift+lettere da A ad F: da 41h a 46h 0643 FE22 ; Return: 0dh 0644 FE22 0645 FE22 0646 FF00 .org 0FF00h 0647 FF00 0648 FF00 C5 input: push bc 0649 FF01 D5 push de 0650 FF02 E5 push hl 0651 FF03 0652 FF03 ; Controllo tasto ancora premuto 0653 FF03 DB EA t1: in a,(0eah) ; tastiera vecchia 0654 FF05 CB 7F bit 7,a 0655 FF07 20 FA jr nz,t1 0656 FF09 DB 85 t2: in a,(085h) ; tastiera nuova 0657 FF0B CB 7F bit 7,a 0658 FF0D 28 FA jr z,t2 0659 FF0F 21 56 04 t2es1: ld hl,0456h ; tastiera esadecimale 0660 FF12 DB F0 t2es2: in a,(0f0h) 0661 FF14 CB 7F bit 7,a 0662 FF16 28 F7 jr z,t2es1 0663 FF18 2B t2es3: dec hl 0664 FF19 7C ld a,h 0665 FF1A B5 or l 0666 FF1B 20 F5 jr nz,t2es2 0667 FF1D 0668 FF1D ; Input da tastiere 0669 FF1D DB EA t2a: in a,(0eah) ; tastiera vecchia 0670 FF1F CB 7F bit 7,a 0671 FF21 20 38 jr nz,t2b 0672 FF23 DB 85 in a,(085h) ; tastiera nuova 0673 FF25 2F cpl 0674 FF26 CB 7F bit 7,a 0675 FF28 20 31 jr nz,t2b 0676 FF2A DB F0 in a,(0f0h) ; tastiera esadecimale 0677 FF2C CB 7F bit 7,a 0678 FF2E 28 10 jr z,tes4 0679 FF30 18 EB jr t2a ; se non ho premuto nulla sulle tre tastiere allora looppa 0680 FF32 0681 FF32 ; Input da tastiera esadecimale 0682 FF32 21 56 04 tes1: ld hl,0456h 0683 FF35 0684 FF35 DB F0 tes2: in a,(0f0h) 0685 FF37 CB 7F bit 7,a 0686 FF39 28 F7 jr z,tes1 0687 FF3B 2B tes3: dec hl 0688 FF3C 7C ld a,h 0689 FF3D B5 or l 0690 FF3E 20 F5 jr nz,tes2 0691 FF40 0692 FF40 DB F0 tes4: in a,(0f0h) 0693 FF42 CB 7F bit 7,a 0694 FF44 20 FA jr nz,tes4 0695 FF46 47 ld b,a 0696 FF47 21 05 00 ld hl,0005h 0697 FF4A CD 9C FF call rit 0698 FF4D 0699 FF4D DB F0 tes5: in a,(0f0h) 0700 FF4F 4F ld c,a 0701 FF50 E6 7F and 7fh 0702 FF52 B8 cp b 0703 FF53 20 F8 jr nz,tes5 0704 FF55 CB 79 bit 7,c 0705 FF57 20 D9 jr nz,tes1 0706 FF59 0707 FF59 18 3D tes6: jr texit 0708 FF5B 0709 FF5B ; Conversione dato per tastiere alfanumeriche 0710 FF5B E6 7F t2b: and 7fh 0711 FF5D 0712 FF5D FE 0D cp 0dh ; controlla se è stato premuto Return 0713 FF5F 20 04 jr nz,t3 0714 FF61 3E 10 ld a,10h ; se si carica il valore di Control+0 0715 FF63 18 33 jr texit 0716 FF65 0717 FF65 FE 3A t3: cp 03ah ; controlla se è stato premuto un numero 0718 FF67 30 08 jr nc,t4 0719 FF69 FE 30 cp 030h 0720 FF6B 38 04 jr c,t4 0721 FF6D D6 30 sub 030h ; se si sottrae 30h ed esce 0722 FF6F 18 27 jr texit 0723 FF71 0724 FF71 FE 67 t4: cp 67h ; controlla se è stata premuta una lettera tra A ed F 0725 FF73 30 08 jr nc,t5 0726 FF75 FE 61 cp 61h 0727 FF77 38 04 jr c,t5 0728 FF79 D6 57 sub 57h ; se si sottrae 57h ed esce 0729 FF7B 18 1B jr texit 0730 FF7D 0731 FF7D FE 2A t5: cp 2ah ; controlla se è stato premuto shift+numero (escluso 0) 0732 FF7F 30 08 jr nc,t6 0733 FF81 FE 21 cp 21h 0734 FF83 38 04 jr c,t6 0735 FF85 D6 10 sub 10h ; se si sottrae 10h ed esce 0736 FF87 18 0F jr texit 0737 FF89 0738 FF89 FE 47 t6: cp 47h ; controlla se è stato premuto shift+lettera da A ad F 0739 FF8B 30 08 jr nc,t7 0740 FF8D FE 41 cp 41h 0741 FF8F 38 04 jr c,t7 0742 FF91 D6 27 sub 27h ; se si sottrae 27h ed esce 0743 FF93 18 03 jr texit 0744 FF95 0745 FF95 C3 03 FF t7: jp t1 0746 FF98 0747 FF98 E1 texit: pop hl 0748 FF99 D1 pop de 0749 FF9A C1 pop bc 0750 FF9B C9 ret 0751 FF9C 0752 FF9C ; Genera un ritardo 0753 FF9C 0754 FF9C E5 rit: push hl 0755 FF9D F5 push af 0756 FF9E 0757 FF9E CD A9 FF rit1: call rit2 0758 FFA1 2B dec hl 0759 FFA2 7C ld a,h 0760 FFA3 B5 or l 0761 FFA4 20 F8 jr nz,rit1 0762 FFA6 F1 pop af 0763 FFA7 E1 pop hl 0764 FFA8 C9 ret 0765 FFA9 0766 FFA9 F5 rit2: push af 0767 FFAA D5 push de 0768 FFAB 11 47 00 ld de,0047h 0769 FFAE 0770 FFAE 1B rit3: dec de 0771 FFAF 7A ld a,d 0772 FFB0 B3 or e 0773 FFB1 20 FB jr nz,rit3 0774 FFB3 D1 pop de 0775 FFB4 F1 pop af 0776 FFB5 C9 ret 0777 FFB6 0778 FFB6 ;------------------------------------------------------ 0779 FFB6 ; 0780 FFB6 ; Nuova routine di output su video per monitor esadecimale 0781 FFB6 ; Sostituisce la 80EC e accetta l'input dalle locazioni da 0000h a 0007h 0782 FFB6 ; convertendo il valore letto in modo da essere compatibile con la 80EC 0783 FFB6 ; 0784 FFB6 0785 FFB6 .org 0FFB6h 0786 FFB6 0787 FFB6 F5 push af 0788 FFB7 C5 push bc 0789 FFB8 D5 push de 0790 FFB9 E5 push hl 0791 FFBA 0792 FFBA 11 07 00 m1: ld de,0007h 0793 FFBD 01 00 EC ld bc,0ec00h 0794 FFC0 0795 FFC0 21 DB FF m2: ld hl,tabout 0796 FFC3 C5 push bc 0797 FFC4 1A ld a,(de) 0798 FFC5 06 00 ld b,0h 0799 FFC7 4F ld c,a 0800 FFC8 09 add hl,bc 0801 FFC9 C1 pop bc 0802 FFCA 0803 FFCA 7E ld a,(hl) 0804 FFCB CD 00 FA call waitv ; attende la ritraccia video 0805 FFCE 02 ld (bc),a 0806 FFCF 1D dec e 0807 FFD0 0C inc c 0808 FFD1 7B ld a,e 0809 FFD2 FE FF cp 0ffh 0810 FFD4 20 EA jr nz,m2 0811 FFD6 0812 FFD6 E1 pop hl 0813 FFD7 D1 pop de 0814 FFD8 C1 pop bc 0815 FFD9 F1 pop af 0816 FFDA C9 ret 0817 FFDB 0818 FFDB 303132333435tabout: .byte "0123456789ABCDEF" 0818 FFE1 36373839414243444546 0819 FFEB 2D204D522348 .byte "-", " ", "M", "R", "#", "H", "L", "P", "C", "G" 0819 FFF1 4C504347 0820 FFF5 4E5152545556 .byte "NQRTUVJY S" 0820 FFFB 4A592053 0821 FFFF 0822 FFFF 0823 FFFF ;------------------------------------------------------ 0824 FFFF 0825 0000 .org 10000h 0826 0000 .end Type Key: N=NULL_SEG C=CODE_SEG B=BIT_SEG X=EXTD_SEG D=DATA_SEG L=Local E=Export Value Type Label ----- ---- ------------------------------ 005F N banco FA22 N curoff FB17 N cont FDD0 N curs F9E9 N initv FA09 N initn FA0D N initn1 FAE3 N iniz FF00 N input FADD N key FAF8 N keyvis FB04 N key1 FA63 N lf060 FA71 N lf06e FA7F N lf086 FAB8 N loc1 FAC1 N loc2 FB07 N loop FB53 N lett FB5A N lett1 FACB N msg FAD0 N msg1 FB5D N menu1 FCA7 N menu2 FFBA N m1 FFC0 N m2 FAAD N nloc FDD2 N out0 FDDA N out1 FDE2 N out2 FDEA N out3 FDF2 N out4 FDFA N out7 FE02 N out8 FE0A N out9 FE12 N out10 FE1A N out11 FF9C N rit FF9E N rit1 FFA9 N rit2 FFAE N rit3 F803 N start F80F N sp1 F815 N sp2 F818 N sp3 FB49 N sep F825 N tast0 F834 N tast0a F852 N tast0b F854 N tast0c F859 N tast1 F870 N tast2 F887 N tast3 F89B N tast4 F8AF N tast5 F8C4 N tast5a F8D7 N tast6 F8F6 N tast7 F915 N tast8 F92F N tast9 F943 N tastA F95D N tastB F988 N tastC F99B N tastD F9B1 N tastE F9B8 N tastF F9CE N tast10 F9E6 N tastFF FF03 N t1 FF09 N t2 FF0F N t2es1 FF12 N t2es2 FF18 N t2es3 FF1D N t2a FF32 N tes1 FF35 N tes2 FF3B N tes3 FF40 N tes4 FF4D N tes5 FF59 N tes6 FF5B N t2b FF65 N t3 FF71 N t4 FF7D N t5 FF89 N t6 FF95 N t7 FF98 N texit FFDB N tabout FB12 N uno FA2D N vmenu1 FA32 N vmenu2 FA35 N vis FA36 N vis1 FA43 N vis2 FAA0 N vloc FA00 N waitv FA01 N waitv1 FA84 N writen FA97 N waitn FA98 N waitn1 ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------------------------------------------- F800 C3 03 F8 F3 3E C9 32 66 00 AF D3 D6 21 FF EB 7E F810 2F 77 BE 28 03 2B 18 F7 2F 77 BE 20 F8 F9 3E 01 F820 D3 5F CD A5 F0 CD 09 FA CD E9 F9 21 D2 FD CD CB F830 FA CD 2D FA CD 00 FF FE 10 28 1E FE 0F 30 F5 FE F840 01 38 F1 21 D0 FD CD A0 FA F5 FE 0A 30 04 C6 30 F850 18 02 C6 37 12 CD 84 FA F1 FE 01 20 13 21 12 FE F860 CD CB FA CD 09 FA CD 22 FA 3E 19 D3 5F C3 00 F0 F870 FE 02 20 13 21 DA FD CD CB FA CD 09 FA CD 22 FA F880 3E 00 D3 5F C3 00 F0 FE 03 20 10 21 E2 FD CD CB F890 FA CD E9 F9 3E 01 D3 5F C3 00 F0 FE 04 20 10 21 F8A0 1A FE CD CB FA CD E9 F9 3E 1A D3 5F C3 00 F0 FE F8B0 05 20 24 21 EA FD CD CB FA CD 09 FA CD 22 FA 3E F8C0 08 11 00 00 D3 5F 01 00 08 21 00 F0 ED B0 3C 3C F8D0 FE 18 20 F0 C3 00 00 FE 06 20 1B CD E9 F9 CD 09 F8E0 FA CD 22 FA 3E 04 D3 5F 21 00 F0 11 00 80 01 00 F8F0 08 ED B0 C3 00 80 FE 07 20 1B CD E9 F9 CD 09 FA F900 CD 22 FA 3E 20 D3 5F 21 00 F0 11 00 80 01 00 08 F910 ED B0 C3 00 80 FE 08 20 16 21 F2 FD CD CB FA CD F920 E9 F9 CD 09 FA CD 22 FA 3E 1C D3 5F C3 00 F0 FE F930 09 20 10 CD E9 F9 CD 09 FA CD 22 FA 3E 1E D3 5F F940 C3 00 F0 FE 0A 20 16 21 FA FD CD CB FA CD E9 F9 F950 CD 09 FA CD 22 FA 3E 06 D3 5F C3 7D F1 FE 0B 20 F960 27 CD 09 FA CD 22 FA 3E 04 D3 5F 21 00 F0 11 00 F970 80 01 00 04 ED B0 3E 18 D3 5F 21 00 F0 11 00 00 F980 01 00 04 ED B0 C3 69 00 FE 0C 20 0F 21 02 FE CD F990 CB FA CD 09 FA CD 22 FA C3 DD FA FE 0D 20 12 21 F9A0 0A FE CD CB FA CD E9 F9 CD 09 FA CD 22 FA C3 00 F9B0 00 FE 0E 20 03 C3 00 10 FE 0F 20 12 3E 07 D3 5F F9C0 21 00 F0 11 70 00 01 00 04 ED B0 C3 25 F8 FE 10 F9D0 20 14 3A 3D EC CD E9 F9 CD 09 FA FE 31 CC 32 FA F9E0 C4 2D FA C3 34 F8 C3 34 F8 E5 D5 C5 21 00 EC 11 F9F0 01 EC 36 20 01 FF 01 CD 00 FA ED B0 C1 D1 E1 C9 FA00 F5 DB EB CB 7F 20 FA F1 C9 F5 21 00 00 CD 71 FA FA10 3E 20 CD 84 FA 23 7D FE 81 20 F2 7C FE 07 20 ED FA20 F1 C9 F5 3E 0A D3 8C 3E 20 D3 8D F1 C9 21 5D FB FA30 18 03 21 A7 FC F5 E5 CD AD FA D5 E1 CD 71 FA E1 FA40 CD A0 FA 7E CD 00 FA 12 13 CD 84 FA 23 AF BE 20 FA50 F2 23 2F BE 20 E0 21 D0 FD CD AD FA D5 E1 CD 63 FA60 FA F1 C9 3E 0E D3 8C 7C D3 8D 3E 0F D3 8C 7D D3 FA70 8D 3E 12 D3 8C 7C D3 8D 3E 13 D3 8C 7D D3 8D 3E FA80 1F D3 8C C9 CD 97 FA D3 80 F5 3E 1F D3 8E 3E 1F FA90 D3 8C AF D3 8D F1 C9 F5 DB 8C CB 7F 28 FA F1 C9 FAA0 F5 06 00 4E E5 21 00 EC 11 20 00 18 0B F5 06 00 FAB0 4E E5 21 58 01 11 50 00 79 FE 00 28 04 19 0D 18 FAC0 F7 EB E1 23 4E EB 09 EB 23 F1 C9 F5 C5 01 F7 08 FAD0 7E ED 79 23 0D 05 AF B8 20 F6 C1 F1 C9 CD E9 F9 FAE0 01 20 00 21 00 EC DB EA CD F8 FA DB 85 CD F8 FA FAF0 DB 85 2F CD F8 FA 18 EB CD 04 FB 09 E6 7F CD 04 FB00 FB 09 09 C9 E5 F5 F5 F1 07 38 07 CD 00 FA 36 30 FB10 18 05 CD 00 FA 36 31 F5 23 7D E6 0F FE 08 20 E7 FB20 F1 CD 49 FB F1 F5 1F 1F 1F 1F E6 0F CD 53 FB CD FB30 00 FA 77 23 F1 F5 E6 0F CD 53 FB CD 00 FA 77 CD FB40 49 FB F1 CD 00 FA 77 E1 C9 23 23 CD 00 FA 36 2D FB50 23 23 C9 FE 0A 38 03 C6 37 C9 C6 30 C9 00 06 5A FB60 38 30 20 4E 55 4F 56 41 20 45 4C 45 54 54 52 4F FB70 4E 49 43 41 00 01 0C 42 4F 4F 54 53 54 52 41 50 FB80 00 01 1D 31 2F 32 00 03 00 31 20 3E 20 42 4F 4F FB90 54 20 42 41 53 49 43 20 35 2E 35 4B 20 53 55 20 FBA0 46 4C 4F 50 50 59 00 04 00 32 20 3E 20 42 4F 4F FBB0 54 20 4E 45 2D 44 4F 53 20 31 2E 35 00 05 00 33 FBC0 20 3E 20 42 4F 4F 54 20 4E 45 2D 44 4F 53 20 47 FBD0 52 41 46 49 43 20 31 2E 30 00 06 00 34 20 3E 20 FBE0 42 4F 4F 54 20 53 2E 4F 2E 4E 2E 45 2E 00 07 00 FBF0 35 20 3E 20 42 41 53 49 43 20 31 36 4B 20 49 4E FC00 20 52 41 4D 00 08 00 36 20 3E 20 4D 4F 4E 49 54 FC10 4F 52 20 4F 52 49 47 49 4E 41 4C 45 20 4E 4F 20 FC20 49 4E 54 45 52 52 2E 00 09 00 37 20 3E 20 4D 4F FC30 4E 49 54 4F 52 20 53 50 20 52 49 4C 4F 43 2E 20 FC40 4E 4F 20 49 4E 54 45 52 52 2E 00 0A 00 38 20 3E FC50 20 4D 4F 4E 49 54 4F 52 20 41 20 56 49 44 45 4F FC60 20 28 52 49 4C 4F 43 41 54 4F 29 00 0B 00 43 52 FC70 3E 20 43 41 4D 42 49 41 20 50 41 47 49 4E 41 00 FC80 0D 0F 3E 20 3C 00 0F 00 28 43 29 20 52 4F 42 45 FC90 52 54 4F 20 42 41 5A 5A 41 4E 4F 20 32 30 30 30 FCA0 2D 32 30 30 38 00 FF 00 06 5A 38 30 20 4E 55 4F FCB0 56 41 20 45 4C 45 54 54 52 4F 4E 49 43 41 00 01 FCC0 0C 42 4F 4F 54 53 54 52 41 50 00 01 1D 32 2F 32 FCD0 00 03 00 39 20 3E 20 4D 4F 4E 49 54 4F 52 20 4F FCE0 52 49 47 49 4E 41 4C 45 20 28 52 49 4C 4F 43 41 FCF0 54 4F 29 00 04 00 41 20 3E 20 42 4F 4F 54 20 49 FD00 4D 4D 45 44 49 41 54 4F 20 4E 45 2D 44 4F 53 00 FD10 05 00 42 20 3E 20 4C 4F 41 44 45 52 20 42 41 53 FD20 49 43 20 35 2E 35 4B 20 53 55 20 43 41 53 53 2E FD30 00 06 00 43 20 3E 20 50 52 4F 56 41 20 54 41 53 FD40 54 49 45 52 41 00 07 00 44 20 3E 20 52 45 53 54 FD50 41 52 54 20 41 20 30 30 30 30 48 00 08 00 45 20 FD60 3E 20 52 45 53 54 41 52 54 20 41 20 31 30 30 30 FD70 48 00 09 00 46 20 3E 20 4C 4F 41 44 20 52 4F 55 FD80 54 49 4E 45 53 20 53 54 41 4D 50 41 20 41 20 30 FD90 30 37 30 48 00 0B 00 43 52 3E 20 43 41 4D 42 49 FDA0 41 20 50 41 47 49 4E 41 00 0D 0F 3E 20 3C 00 0F FDB0 00 28 43 29 20 52 4F 42 45 52 54 4F 20 42 41 5A FDC0 5A 41 4E 4F 20 32 30 30 30 2D 32 30 30 38 00 FF FDD0 0D 10 FF 92 86 C7 86 C6 87 FF AB 86 A1 C0 92 FF FDE0 79 92 AB 86 A1 C0 92 FF 42 F9 83 88 92 F9 C6 FF FDF0 F9 82 C8 C0 AB F9 87 C0 AF FF FF FF 83 C0 C0 87 FE00 FF FF FF FF 87 86 92 87 FF FF FF FF C1 92 86 AF FE10 FF FF 83 88 92 F9 C6 FF 12 92 FF FF 92 C0 AB 86 FE20 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FED0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FEF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF00 C5 D5 E5 DB EA CB 7F 20 FA DB 85 CB 7F 28 FA 21 FF10 56 04 DB F0 CB 7F 28 F7 2B 7C B5 20 F5 DB EA CB FF20 7F 20 38 DB 85 2F CB 7F 20 31 DB F0 CB 7F 28 10 FF30 18 EB 21 56 04 DB F0 CB 7F 28 F7 2B 7C B5 20 F5 FF40 DB F0 CB 7F 20 FA 47 21 05 00 CD 9C FF DB F0 4F FF50 E6 7F B8 20 F8 CB 79 20 D9 18 3D E6 7F FE 0D 20 FF60 04 3E 10 18 33 FE 3A 30 08 FE 30 38 04 D6 30 18 FF70 27 FE 67 30 08 FE 61 38 04 D6 57 18 1B FE 2A 30 FF80 08 FE 21 38 04 D6 10 18 0F FE 47 30 08 FE 41 38 FF90 04 D6 27 18 03 C3 03 FF E1 D1 C1 C9 E5 F5 CD A9 FFA0 FF 2B 7C B5 20 F8 F1 E1 C9 F5 D5 11 47 00 1B 7A FFB0 B3 20 FB D1 F1 C9 F5 C5 D5 E5 11 07 00 01 00 EC FFC0 21 DB FF C5 1A 06 00 4F 09 C1 7E CD 00 FA 02 1D FFD0 0C 7B FE FF 20 EA E1 D1 C1 F1 C9 30 31 32 33 34 FFE0 35 36 37 38 39 41 42 43 44 45 46 2D 20 4D 52 23 FFF0 48 4C 50 43 47 4E 51 52 54 55 56 4A 59 20 53 00 tasm: Number of errors = 0