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 - 2024 0007 0000 ; 0008 0000 ;------------------------------------------------------ 0009 0000 ; 0010 0000 ; BANCHI 2 e 3 - Allocati da F800h a FFFFh 0011 0000 ; 0012 0000 ; NOTA: durante tutto il codice il registro B' contiene 00h se c'è la scheda video vecchia. Se non c'è contiene FFh 0013 0000 ; Il registro C' contiene il numero della pagina di menù visualizzata a video 0014 0000 ; Il registro D' se <> 00h indica che la routine "input" deve controllare anche il backspace (utilizzato dal programma di test della ram) 0015 0000 ; NOTA: I registri alternativi non vengono utilizzati dai monitor esadecimali 0016 0000 ; 0017 0000 ;------------------------------------------------------ 0018 0000 ; 0019 0000 ; CHANGELOG: 0020 0000 ; Rel. 1.3: inserito controllo presenza schede video 0021 0000 ; 09/01/2023 0022 0000 ; 0023 0000 ; Rel. 1.4: aggiunte voci di menù S1 e S2 0024 0000 ; 01/11/2024 spostato parte del codice in monitor1.asm 0025 0000 ; aggiunti entry point nell jump table iniziale 0026 0000 ; 0027 0000 ; Rel. 1.5: eliminata voce di menù "E" (restart a 1000h) e shift delle voci successive indietro 0028 0000 ; 20/11/2024 aggiunta voce di menù S2 (basic Microsoft AG4) 0029 0000 ; modificata voce di menù D in "JUMP A INDIRIZZO" con richiesta indirizzo esadecimale a cui saltare 0030 0000 ; 0031 0000 ; Rel. 1.6: aggiunto disassembler della eprom AG3 0032 0000 ; 21/11/2024 0033 0000 ; 0034 0000 ; Rel. 1.7: aggiunta richiesta banco da mappare per la funzione di menù "D" 0035 0000 ; 22/11/2024 0036 0000 ; 0037 0000 ; Rel. 1.8: corretto bug che mandava in crash la funzione "conversione floppy" 0038 0000 ; 25/11/2024 modificata funzione "prova tastiera". Ora visualizza su entrambi i video e gestisce i tasti BREAK 0039 0000 ; 0040 0000 0041 0000 banco .equ 05fh ; porta di I/O per la selezione del banco di memoria della EPROM 0042 0000 0043 0000 ;------------------------------------------------------ 0044 0000 ; ROUTINES ED INDIRIZZI DI MONITOR1.ASM 0045 0000 ;------------------------------------------------------ 0046 0000 0047 0000 menu1 .equ 0f000h 0048 0000 menu2 .equ 0f200h 0049 0000 menu3 .equ 0f400h 0050 0000 curs .equ 0f5f0h 0051 0000 0052 0000 0053 0000 ;------------------------------------------------------ 0054 0000 ; INDIRIZZI E JUMP TABLE DI TESTRAM4.ASM 0055 0000 ;------------------------------------------------------ 0056 0000 0057 0000 ; Indirizzi working area 0058 0000 cursd .equ 000fch ; posizione del cursore sui display 0059 0000 0060 0000 ; Jump table 0061 0000 inizio .equ 0F000h ; inizio programma 0062 0000 vis .equ 0F003h ; visualizza il messaggio puntato da HL 0063 0000 inp .equ 0F006h ; input dell'indirizzo di 4 caratteri in HL 0064 0000 0065 0000 0066 0000 ;------------------------------------------------------ 0067 0000 0068 0000 0069 F800 .org 0f800h 0070 F800 0071 F800 ; JUMP table 0072 F800 C3 42 F8 jp start ; F800h inizio firmware 0073 F803 C3 F8 FB jp input ; F803h routine input da tastiere per monitor esadecimale 0074 F806 C3 C8 FC jp video ; F806h routine output video per monitor esadecimale (visualizza su monitor vecchio, nuovo, e display tastiera esadecimale) 0075 F809 C3 BE FD jp lf0a5 ; F809h routine f0a5h identica a quella della eprom 2390 (inizializza i registri del SY6545 ed i PIO) 0076 F80C C3 99 FD jp lf060 ; F80Ch routine f060h identica a quella della eprom 2390 (carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare) 0077 F80F C3 A9 FD jp lf06e ; F80Fh routine f06eh identica a quella della eprom 2390 (carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare) 0078 F812 C3 D8 FA jp checv ; F812h routine calcolo presenza scheda video vecchia 0079 F815 C3 F6 FA jp chect ; F815h routine controllo presenza scheda video vecchia 0080 F818 C3 16 FB jp waitv ; F818h routine di attesa ritraccia video vecchio 0081 F81B C3 AB FB jp waitn ; F81Bh routine di attesa ritraccia video nuovo 0082 F81E C3 98 FB jp writen ; F81Eh routine di scrittura carattere sul video nuovo 0083 F821 C3 3F FB jp cursor ; F821h routine di accensione/spegnimento cursore sul video nuovo 0084 F824 C3 B4 FB jp vloc ; F824h calcola la locazione del video vecchio in base alla riga/colonna nella locazione puntata da HL e HL+1 per il video vecchio 0085 F827 C3 C6 FB jp nloc ; F827h calcola la locazione del video nuovo in base alla riga/colonna nella locazione puntata da HL e HL+1 per il video nuovo 0086 F82A C3 BB FB jp vloc1 ; F82Ah calcola la locazione del video vecchio in base alla riga/colonna contenute in BC 0087 F82D C3 CD FB jp nloc1 ; F82Dh calcola la locazione del video nuovo in base alla riga/colonna contenute in BC 0088 F830 C3 FF FA jp initv ; F830h pulizia video vecchio 0089 F833 C3 24 FB jp initn ; F833h pulizia video nuovo 0090 F836 C3 0E FE jp ctabdi ; F836h calcola l'indirizzo della tabella TABDIS, per la conversione dei valori da visualizzare sui display, e lo ritorna in HL 0091 F839 C3 6A FD jp vdisp ; F839h visualizza un messaggio puntato da HL sui display 0092 F83C C3 88 FD jp vdispc ; F83Ch visualizza il carattere contenuto in A sul display puntato da C, convertendolo nel formato compatibile con i caratteri dei display 0093 F83F C3 9B FB jp write1 ; F83Fh routine di scrittura carattere sul video nuovo senza attendere la ritraccia video 0094 F842 0095 F842 0096 F842 F3 start: di ; disabilita gli interrupt 0097 F843 21 ED 45 ld hl,045edh ; inizializza il vettore per l'NMI 0098 F846 22 66 00 ld (0066h),hl ; mettendo l'istruzione RETN (ED 45) 0099 F849 0100 F849 AF xor a ; spegne il motore del floppy 0101 F84A D3 D6 out (0d6h),a 0102 F84C 0103 F84C D9 exx ; inizializza il registro D' in modo che l'input da tastiera NON controlli anche il backspace 0104 F84D 57 ld d,a 0105 F84E D9 exx 0106 F84F 0107 F84F 3E 28 ld a,28h ; seleziona il banco con le subroutines. IMPORTANTE: questo banco deve rimanere sempre selezionato durante l'esecuzione del monitor multifirmware 0108 F851 D3 5F out (banco),a 0109 F853 0110 F853 ;------------------------------------------------------ 0111 F853 ; Lancia test ram se al boot è stato premuto ESC (sulle tastiere alfanumeriche) o CTRL+F (sulla tastiera esadecimale) 0112 F853 ;------------------------------------------------------ 0113 F853 0114 F853 3E CF ld a,0cfh ; inizializza il PIO 1/B (tastiera) 0115 F855 D3 87 out (87h),a 0116 F857 AF xor a 0117 F858 3D dec a 0118 F859 D3 87 out (87h),a 0119 F85B 0120 F85B tram1: ; controlla se esiste la scheda video vecchia 0121 F85B 21 00 00 ld hl,00000h ; inizializza il contatore 0122 F85E 0123 F85E 23 tram2: inc hl ; attende al massimo fino a che HL non diventa 1000h 0124 F85F 7C ld a,h ; infatti la ritraccia a "1" come tempo resta al massimo con HL a 0111h 0125 F860 FE 10 cp 10h ; se impiega più tempo significa che la scheda LX.388 non è presente 0126 F862 28 14 jr z,tram3 ; ha superato il timeout, quindi la scheda video vecchia non c'è 0127 F864 0128 F864 DB EB in a,(0ebh) ; controlla se c'è la ritraccia video 0129 F866 CB 7F bit 7,a 0130 F868 20 F4 jr nz,tram2 ; ritraccia non trovata, looppa 0131 F86A 0132 F86A 21 00 30 ld hl,03000h ; fa un ritardo per permettere alle tastiere di assestarsi all'accensione o al reset 0133 F86D 2B tram2a: dec hl 0134 F86E 7C ld a,h 0135 F86F B5 or l 0136 F870 20 FB jr nz,tram2a 0137 F872 0138 F872 DB EA in a,(0eah) ; controlla se c'è un tasto premuto sulla tastiera vecchia 0139 F874 CB 7F bit 7,a 0140 F876 20 17 jr nz,tram5 ; tasto premuto sulla tastiera vecchia 0141 F878 0142 F878 DB 85 tram3: in a,(085h) ; controlla se c'è un tasto premuto sulla tastiera nuova 0143 F87A 2F cpl 0144 F87B CB 7F bit 7,a 0145 F87D 20 10 jr nz,tram5 ; tasto premuto sulla tastiera nuova 0146 F87F 0147 F87F 01 FF 01 ld bc,01ffh ; controlla se c'è un tasto premuto sulla tastiera esadecimale 0148 F882 DB F0 tram4: in a,(0f0h) ; fa 255 input. Quello che è il bin 7 a 0 è il tasto premuto (a causa del contatore hardware che fa lo scan dei tasti) 0149 F884 CB 7F bit 7,a 0150 F886 28 24 jr z,tram8 ; tasto premuto sulla tastiera esadecimale 0151 F888 0B dec bc 0152 F889 78 ld a,b 0153 F88A B1 or c 0154 F88B 20 F5 jr nz,tram4 0155 F88D 0156 F88D 18 21 jr sp0 ; nessun tasto premuto 0157 F88F 0158 F88F E6 7F tram5: and 7fh ; controlla se è stato premuto ESC su una tastiera alfanumerica 0159 F891 FE 1B cp 01bh 0160 F893 20 1B jr nz,sp0 0161 F895 0162 F895 21 AE FE tram6: ld hl,out11 ; visualizza "test ram" sui display 0163 F898 01 F7 08 ld bc,08F7h 0164 F89B 7E tram7: ld a,(hl) 0165 F89C ED 79 out (c),a 0166 F89E 23 inc hl 0167 F89F 0D dec c 0168 F8A0 05 dec b 0169 F8A1 AF xor a 0170 F8A2 B8 cp b 0171 F8A3 20 F6 jr nz,tram7 0172 F8A5 0173 F8A5 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram 0174 F8A7 D3 5F out (banco),a 0175 F8A9 C3 00 F0 jp 0f000h ; salta al programma per il test della ram 0176 F8AC 0177 F8AC FE 1F tram8: cp 01fh ; controlla se è stato premuto CTRL+F sulla tastiera esadecimale 0178 F8AE 28 E5 jr z,tram6 0179 F8B0 0180 F8B0 ;------------------------------------------------------ 0181 F8B0 0182 F8B0 21 FF EB sp0: ld hl,0ebffh ; cerca dove posizionare lo SP prima di EC00 0183 F8B3 7E sp1: ld a,(hl) 0184 F8B4 2F cpl 0185 F8B5 77 ld (hl),a 0186 F8B6 BE cp (hl) 0187 F8B7 28 03 jr z,sp3 0188 F8B9 2B sp2: dec hl 0189 F8BA 18 F7 jr sp1 0190 F8BC 2F sp3: cpl 0191 F8BD 77 ld (hl),a 0192 F8BE BE cp (hl) 0193 F8BF 20 F8 jr nz,sp2 0194 F8C1 2B dec hl ; lo SP deve avere almeno una locazione di ram scrivibile dopo di lui, altrimenti EX (SP),HL non funziona 0195 F8C2 F9 ld sp,hl 0196 F8C3 0197 F8C3 CD BE FD call lf0a5 ; inizializza i registri del SY6545 ed i PIO 0198 F8C6 0199 F8C6 CD D8 FA call checv ; imposta il registro B' che indica se esiste la scheda video vecchia 0200 F8C9 0201 F8C9 21 58 FE tast0: ld hl,out0 ; visualizza il messaggio "SELECT" sui display 0202 F8CC CD 6A FD call vdisp 0203 F8CF 0204 F8CF CD 48 FB call vmenu1 ; pulisce i video e visualizza il menù 0205 F8D2 0206 F8D2 CD F8 FB tast0a: call input ; input da tastiere 0207 F8D5 F5 push af ; salva il numero digitato 0208 F8D6 0209 F8D6 FE 10 cp 10h 0210 F8D8 28 2E jr z,tast0c ; se è stato premuto CR salta subito al controllo del tasto 0211 F8DA 0212 F8DA FE 14 cp 14h ; se è maggiore di SHIFT+3 looppa 0213 F8DC 30 F4 jr nc,tast0a 0214 F8DE FE 01 cp 01h ; se è minore di 1 looppa 0215 F8E0 38 F0 jr c,tast0a 0216 F8E2 0217 F8E2 21 F0 F5 ld hl,curs ; calcola la posizione sul video vecchio per visualizzare il numero digitato 0218 F8E5 CD B4 FB call vloc ; calcola in DE l'indirizzo del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0219 F8E8 0220 F8E8 FE 11 cp 11h ; confronta il numero digitato con 11h 0221 F8EA CD 91 FA call convnu ; converte il numero nei caratteri che rappresentano la voce di menù (AF non viene toccato) 0222 F8ED 30 07 jr nc,tast0b ; se il numero digitato è >=11h e quindi deve visualizzare due caratteri va a tast0b 0223 F8EF 0224 F8EF 7D ld a,l ; recupera il carattere da visualizzare 0225 F8F0 12 ld (de),a ; visualizza il carattere sul video vecchio 0226 F8F1 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0227 F8F4 18 12 jr tast0c 0228 F8F6 0229 F8F6 7C tast0b: ld a,h ; recupera il primo carattere da visualizzare 0230 F8F7 12 ld (de),a ; visualizza il primo carattere sul video vecchio 0231 F8F8 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0232 F8FB 13 inc de ; punta alla posizione del successivo carattere a video 0233 F8FC 7D ld a,l ; recupera il secondo carattere da visualizzare 0234 F8FD 12 ld (de),a ; visualizza il secondo carattere sul video vecchio 0235 F8FE CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0236 F901 0237 F901 13 inc de ; punta alla posizione del successivo carattere a video 0238 F902 3E 3C ld a,'<' ; visualizza il carattere "<" 0239 F904 12 ld (de),a ; sul video vecchio 0240 F905 CD 98 FB call writen ; e sul video nuovo - Il cursore è già posizionato 0241 F908 0242 F908 F1 tast0c: pop af ; ripristina il numero digitato 0243 F909 0244 F909 21 12 FE ld hl,tabtas ; calcola il puntatore all'indirizzo della routine presente nella tabella TABTAS e ci salta 0245 F90C C3 A7 FA jp punt 0246 F90F 0247 F90F tast1: ; se 1 lancia il boot del basic da 5.5 K 0248 F90F 21 96 FE ld hl,out8 ; messaggio da visualizzare sul display 0249 F912 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0250 F915 3E 19 ld a,19h ; seleziona il banco del basic da 5.5 K su floppy 0251 F917 D3 5F out (banco),a 0252 F919 C3 00 F0 jp 0f000h 0253 F91C 0254 F91C tast2: ; se 2 lancia il boot vecchio 0255 F91C 21 60 FE ld hl,out1 ; messaggio da visualizzare sul display 0256 F91F CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0257 F922 3E 00 ld a,00h ; seleziona il banco della 1390 0258 F924 D3 5F out (banco),a 0259 F926 C3 00 F0 jp 0f000h 0260 F929 0261 F929 tast3: ; se 3 lancia il boot grafic 0262 F929 21 69 FE ld hl,out2 ; messaggio da visualizzare sul display 0263 F92C CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0264 F92F 3E 01 ld a,01h ; seleziona il banco della 2390 0265 F931 D3 5F out (banco),a 0266 F933 C3 00 F0 jp 0f000h 0267 F936 0268 F936 tast4: ; se 4 lancia il boot del S.O.N.E. 0269 F936 21 9F FE ld hl,out9 ; messaggio da visualizzare sul display 0270 F939 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0271 F93C 3E 1A ld a,1Ah ; seleziona il banco del s.o.n.e. 0272 F93E D3 5F out (banco),a 0273 F940 C3 00 F0 jp 0f000h 0274 F943 0275 F943 tast5: ; se 5 lancia il basic in rom rilocato in ram 0276 F943 21 72 FE ld hl,out3 ; messaggio da visualizzare sul display 0277 F946 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0278 F949 3E 08 ld a,08h ; seleziona il primo banco del basic in rom 0279 F94B 11 00 00 ld de,00000h ; seleziona l'indirizzo di destinazione 0280 F94E 06 08 ld b,08h ; seleziona il numero di banchi da spostare 0281 F950 CD C7 FA call setban ; sposta gli 8 banchi da 2K in ram 0282 F953 C3 00 00 jp 0000h ; salta al basic 0283 F956 0284 F956 tast6: ; se 6 lancia il monitor esadecimale originale non rilocato 0285 F956 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0286 F959 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0287 F95B 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0288 F95E 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0289 F960 CD C7 FA call setban ; sposta il banco in ram 0290 F963 C3 00 80 jp 8000h 0291 F966 0292 F966 tast7: ; se 7 lancia il monitor esadecimale non rilocato con lo SP rilocato prima di EC00 con il firmware non rilocato per il programmatore di eprom 0293 F966 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0294 F969 3E 20 ld a,20h ; seleziona il banco del monitor esadecimale con SP rilocato 0295 F96B 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0296 F96E 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0297 F970 CD C7 FA call setban ; sposta il banco in ram 0298 F973 C3 00 80 jp 8000h 0299 F976 0300 F976 tast8: ; se 8 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 per la tastiera alfanumerica con il firmware rilocato per il programmatore di eprom 0301 F976 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0302 F979 3E 1C ld a,1Ch ; seleziona il banco del monitor esadecimale rilocato per la tastiera alfanumerica 0303 F97B D3 5F out (banco),a 0304 F97D C3 00 F0 jp 0f000h 0305 F980 0306 F980 tast9: ; se 9 lancia il monitor esadecimale rilocato con lo SP rilocato prima di EC00 per la tastiera esadecimale con il firmware rilocato per il programmatore di eprom 0307 F980 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0308 F983 3E 1E ld a,1Eh ; seleziona il banco del monitor esadecimale rilocato per la tastiera esadecimale 0309 F985 D3 5F out (banco),a 0310 F987 C3 00 F0 jp 0f000h 0311 F98A 0312 F98A tastA: ; se A lancia direttamente il bootstrap multiplo 0313 F98A 21 83 FE ld hl,out5 ; messaggio da visualizzare sul display 0314 F98D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0315 F990 3E 06 ld a,06h ; seleziona il banco della 2390 modificata per non fare il check sul disco di boot 0316 F992 D3 5F out (banco),a 0317 F994 C3 7D F1 jp 0f17dh ; salta direttamente al BOOT 0318 F997 0319 F997 tastB: ; se B lancia il loader del basic da 5.5 K 0320 F997 CD BB FA call disp1 ; non visualizza alcun messaggio sui display e inizializza i video 0321 F99A 3E 04 ld a,04h ; seleziona il banco del monitor esadecimale originale 0322 F99C 11 00 80 ld de,08000h ; seleziona l'indirizzo di destinazione 0323 F99F 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0324 F9A1 CD C7 FA call setban ; sposta il banco in ram 0325 F9A4 0326 F9A4 3E 18 ld a,18h ; seleziona il banco del loader del basic da 5.5 K su cassetta 0327 F9A6 11 00 00 ld de,00000h ; seleziona il banco indicato da A e lo sposta in ram 0328 F9A9 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0329 F9AB CD C7 FA call setban ; sposta il banco in ram 0330 F9AE C3 69 00 jp 0069h ; salta al loader 0331 F9B1 0332 F9B1 tastC: ; se C lancia la prova tastiera 0333 F9B1 21 8A FE ld hl,out6 ; messaggio da visualizzare sul display 0334 F9B4 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0335 F9B7 3E 24 ld a,24h ; seleziona il banco del programma con la prova tastiera 0336 F9B9 D3 5F out (banco),a 0337 F9BB C3 00 F0 jp 0f000h 0338 F9BE 0339 F9BE tastD: ; se D salta all'indirizzo indicato 0340 F9BE 3E 01 ld a,01h ; imposta il registro D', che indica che l'input da tastiera deve controllare anche il BACKSPACE 0341 F9C0 D9 exx 0342 F9C1 57 ld d,a 0343 F9C2 D9 exx 0344 F9C3 0345 F9C3 3E 20 ld a,20h ; Spegne il cursore sul video nuovo 0346 F9C5 CD 3F FB call cursor 0347 F9C8 CD FF FA call initv ; Inizializza il video vecchio 0348 F9CB CD 24 FB call initn ; Inizializza il video nuovo 0349 F9CE 0350 F9CE 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram, che contiene le routine necessarie alla funzione "vis" e "inp" 0351 F9D0 D3 5F out (banco),a 0352 F9D2 21 3E FE ld hl,msgban ; visualizza "BANCO: " sui video 0353 F9D5 11 C9 FE ld de,outban ; messaggio da visualizzare sul display ("banco.") 0354 F9D8 CD 03 F0 call vis ; visualizza il messaggio puntato da HL 0355 F9DB 0356 F9DB 3E F1 ld a,0f1h ; imposta la posizione sui display 0357 F9DD 32 FC 00 ld (cursd),a 0358 F9E0 16 02 ld d,02h ; numero di caratteri in input 0359 F9E2 CD 06 F0 call inp ; input del banco in HL 0360 F9E5 E5 push hl ; salva il numero del banco nello stack 0361 F9E6 0362 F9E6 21 49 FE ld hl,msgadr ; visualizza "INDIRIZZO: " sui video 0363 F9E9 11 CF FE ld de,outadr ; messaggio da visualizzare sul display ("ind.") 0364 F9EC CD 03 F0 call vis ; visualizza il messaggio puntato da HL 0365 F9EF 0366 F9EF 3E F3 ld a,0f3h ; imposta la posizione sui display 0367 F9F1 32 FC 00 ld (cursd),a 0368 F9F4 16 04 ld d,04h ; numero di caratteri in input 0369 F9F6 CD 06 F0 call inp ; input dell'indirizzo in HL 0370 F9F9 0371 F9F9 D1 pop de ; recupera il numero del banco 0372 F9FA E5 push hl ; salva l'indirizzo digitato nello stack 0373 F9FB 0374 F9FB 21 91 FE ld hl,out7 ; messaggio da visualizzare sul display 0375 F9FE CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0376 FA01 0377 FA01 7B ld a,e ; recupera il banco da selezionare 0378 FA02 CB 3F srl a 0379 FA04 CB 3F srl a 0380 FA06 CB 3F srl a 0381 FA08 CB 3F srl a 0382 FA0A 0E F2 ld c,0f2h ; imposta la posizione sui display 0383 FA0C CD 88 FD call vdispc ; visualizza il carattere sui display 0384 FA0F 0385 FA0F 7B ld a,e ; recupera il banco da selezionare 0386 FA10 E6 0F and 0fh ; visualizza il secondo carattere del banco sui display 0387 FA12 0E F1 ld c,0f1h ; imposta la posizione sui display 0388 FA14 CD 88 FD call vdispc ; visualizza il carattere sui display 0389 FA17 0390 FA17 7B ld a,e ; recupera il banco da selezionare 0391 FA18 D3 5F out (banco),a ; seleziona il banco richiesto 0392 FA1A 0393 FA1A E1 pop hl ; recupera l'indirizzo a cui saltare 0394 FA1B E9 jp (hl) ; salta all'indirizzo richiesto 0395 FA1C 0396 FA1C tastE: ; se E carica le routines di stampa per monitor esadecimale a 0070 0397 FA1C 3E 07 ld a,07h ; seleziona il banco delle routines di stampa 0398 FA1E 11 70 00 ld de,00070h ; seleziona l'indirizzo di destinazione 0399 FA21 06 01 ld b,01h ; seleziona il numero di banchi da spostare 0400 FA23 CD C7 FA call setban ; sposta il banco in ram 0401 FA26 0402 FA26 3E 28 ld a,28h ; ripristina la selezione del banco delle subroutines 0403 FA28 D3 5F out (banco),a 0404 FA2A C3 C9 F8 jp tast0 0405 FA2D 0406 FA2D tast10: ; se RETURN cambia pagina di menù 0407 FA2D D9 exx ; carica il numero di pagina visualizzata in A 0408 FA2E 79 ld a,c 0409 FA2F D9 exx 0410 FA30 0411 FA30 3C inc a ; punta alla pagina successiva 0412 FA31 FE 04 cp 04h ; se è minore di 4 va bene 0413 FA33 38 02 jr c,tast1a 0414 FA35 3E 01 ld a,01h ; altrimenti carica la prima pagina 0415 FA37 0416 FA37 21 38 FE tast1a: ld hl,tabmen ; calcola il puntatore all'indirizzo della routine presente nella tabella TABMEN e ci salta 0417 FA3A CD A7 FA call punt ; effettua una CALL anziché un JP perché le routines vmenu1-2-3 escono con un RET 0418 FA3D 0419 FA3D C3 D2 F8 jp tast0a ; ritorna all'input da tastiera 0420 FA40 0421 FA40 tastF: ; se F lancia il programma per la conversione dei datamark dei floppy 0422 FA40 21 A6 FE ld hl,out10 ; messaggio da visualizzare sul display 0423 FA43 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0424 FA46 3E 22 ld a,22h ; seleziona il banco del monitor esadecimale rilocato per la tastiera alfanumerica 0425 FA48 D3 5F out (banco),a 0426 FA4A C3 00 F0 jp 0f000h 0427 FA4D 0428 FA4D tastS1: ; se SHIFT+1 lancia il programma per il test della ram 0429 FA4D 21 AE FE ld hl,out11 ; messaggio da visualizzare sul display 0430 FA50 CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0431 FA53 3E 26 ld a,26h ; seleziona il banco del programma per il test della ram 0432 FA55 D3 5F out (banco),a 0433 FA57 C3 00 F0 jp 0f000h 0434 FA5A 0435 FA5A tastS2: ; se SHIFT+2 lancia il basic Microsoft AG4 0436 FA5A 21 B7 FE ld hl,out12 ; messaggio da visualizzare sul display 0437 FA5D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0438 FA60 0439 FA60 CD E6 FB call stack ; cerca dove posizionare lo SP prima di C000, altrimenti lo SP ricopre il basic che è allocato da C000h a DFFFh 0440 FA63 F9 ld sp,hl 0441 FA64 0442 FA64 3E 2A ld a,2ah ; seleziona il primo banco del basic AG4 in rom 0443 FA66 11 00 C0 ld de,0c000h ; seleziona l'indirizzo di destinazione 0444 FA69 06 04 ld b,04h ; seleziona il numero di banchi da spostare 0445 FA6B CD C7 FA call setban ; sposta i 4 banchi da 2K in ram 0446 FA6E 0447 FA6E 3E C3 ld a,0c3h ; carica l'istruzione JUMP per l'NMI 0448 FA70 32 66 00 ld (0066h),a 0449 FA73 0450 FA73 3E 19 ld a,19h ; seleziona il banco del basic da 5.5 K su floppy, che (probabilmente) era utilizzato insieme al basic AG4 0451 FA75 D3 5F out (banco),a 0452 FA77 0453 FA77 C3 40 DF jp 0df40h ; salta al basic AG4 - Viene utilizzato lo SP dove si trova ora 0454 FA7A 0455 FA7A tastS3: ; se SHIFT+3 lancia il basic Microsoft AG3 0456 FA7A 21 C0 FE ld hl,out13 ; messaggio da visualizzare sul display 0457 FA7D CD B8 FA call disp ; visualizza il messaggio sui display e inizializza i video 0458 FA80 0459 FA80 CD E6 FB call stack ; cerca dove posizionare lo SP prima di C000, altrimenti lo SP ricopre il monitor che è allocato da D000h a DFFFh 0460 FA83 F9 ld sp,hl 0461 FA84 0462 FA84 3E 32 ld a,32h ; seleziona il primo banco del disassembler AG3 in rom 0463 FA86 11 00 D0 ld de,0d000h ; seleziona l'indirizzo di destinazione 0464 FA89 06 02 ld b,02h ; seleziona il numero di banchi da spostare 0465 FA8B CD C7 FA call setban ; sposta i 2 banchi da 2K in ram 0466 FA8E 0467 FA8E C3 00 D0 jp 0d000h ; salta al disassembler AG3 0468 FA91 0469 FA91 ;------------------------------------------------------ 0470 FA91 ; converte il numero nella voce di menù 0471 FA91 ; ritorna HL contentente i due caratteri da visualizzare che sono blank+numero, oppure S+numero 0472 FA91 0473 FA91 26 20 convnu: ld h,020h ; 020h=blank 0474 FA93 0475 FA93 F5 push af ; visualizza il numero digitato 0476 FA94 FE 10 cp 010h ; se A < 010h 0477 FA96 38 04 jr c,convn1 0478 FA98 0479 FA98 26 53 ld h,053h ; 053h="S" - converte in "S"+numero 0480 FA9A D6 10 sub 010h 0481 FA9C 0482 FA9C FE 0A convn1: cp 0Ah 0483 FA9E 38 02 jr c,convn2 ; se A < 0ah addiziona 30h, altrimenti addiziona 07h quindi addiziona 30h 0484 FAA0 C6 07 add a,07h ; il risultato è che se A >= 0ah addiziona 037h, altrimenti 030h 0485 FAA2 C6 30 convn2: add a,030h 0486 FAA4 6F ld l,a 0487 FAA5 0488 FAA5 F1 pop af 0489 FAA6 C9 ret 0490 FAA7 0491 FAA7 ;------------------------------------------------------ 0492 FAA7 ; calcola il puntatore ad una tabella di jump presente in HL e salta 0493 FAA7 0494 FAA7 punt: 0495 FAA7 F5 push af 0496 FAA8 C5 push bc 0497 FAA9 0498 FAA9 3D dec a ; decrementa A, lo moltiplica per 2 e lo addiziona ad HL 0499 FAAA CB 27 sla a 0500 FAAC 4F ld c,a 0501 FAAD AF xor a 0502 FAAE 47 ld b,a 0503 FAAF 09 add hl,bc ; HL ora punta all'indirizzo da richiamare che è presente nella tabella 0504 FAB0 4E ld c,(hl) ; carica il contenuto dell'indirizzo puntato da HL in BC 0505 FAB1 23 inc hl 0506 FAB2 46 ld b,(hl) 0507 FAB3 C5 push bc ; sposta BC su HL 0508 FAB4 E1 pop hl 0509 FAB5 0510 FAB5 C1 pop bc 0511 FAB6 F1 pop af 0512 FAB7 E9 jp (hl) ; salta alla routine calcolata 0513 FAB8 0514 FAB8 ;------------------------------------------------------ 0515 FAB8 ; visualizza il messaggio sui display, spegne il cursore sul video nuovo e inizializza i video 0516 FAB8 ; Se HL=0 non visualizza il messaggio sui display 0517 FAB8 ; Sporca AF 0518 FAB8 0519 FAB8 CD 6A FD disp: call vdisp ; Visualizza il messaggio indicato da HL sui display 0520 FABB 3E 20 disp1: ld a,20h ; Spegne il cursore sul video nuovo 0521 FABD CD 3F FB call cursor 0522 FAC0 CD FF FA call initv ; Inizializza il video vecchio 0523 FAC3 CD 24 FB call initn ; Inizializza il video nuovo 0524 FAC6 C9 ret 0525 FAC7 0526 FAC7 ;------------------------------------------------------ 0527 FAC7 ; Seleziona il banco indicato da A e lo sposta all'indirizzo indicato da DE 0528 FAC7 ; Sposta il numero di banchi indicati da B 0529 FAC7 ; Sporca tutti i registri 0530 FAC7 0531 FAC7 C5 setban: push bc 0532 FAC8 D3 5F out (banco),a ; seleziona il banco 0533 FACA 21 00 F0 ld hl,0f000h ; sposta il banco in ram 0534 FACD 01 00 08 ld bc,0800h 0535 FAD0 ED B0 ldir 0536 FAD2 3C inc a 0537 FAD3 3C inc a 0538 FAD4 C1 pop bc 0539 FAD5 10 F0 djnz setban ; decrementa B e looppa se <> 0 0540 FAD7 0541 FAD7 C9 ret 0542 FAD8 0543 FAD8 ;------------------------------------------------------ 0544 FAD8 ; controlla se la scheda video vecchia è presente. Per farlo verifica il cambiamento della ritraccia video 0545 FAD8 ; se la scheda video vecchia esiste ritorna 00h in B' 0546 FAD8 ; se la scheda video vecchia non esiste ritorna FFh in B' 0547 FAD8 0548 FAD8 F5 checv: push af 0549 FAD9 E5 push hl 0550 FADA 0551 FADA D9 exx ; mette 00h in B' 0552 FADB 06 00 ld b,00h 0553 FADD D9 exx 0554 FADE 0555 FADE 21 00 00 ld hl,00000h ; inizializza il contatore 0556 FAE1 0557 FAE1 23 checv1: inc hl ; attende al massimo fino a che HL non diventa 1000h 0558 FAE2 7C ld a,h ; Infatti la ritraccia a "1" come tempo resta al massimo con HL a 0111h 0559 FAE3 FE 10 cp 10h ; Se impiega più tempo significa che la scheda LX.388 non è presente 0560 FAE5 20 06 jr nz,checv2 0561 FAE7 0562 FAE7 D9 exx ; se la LX.388 non è presente carica FF in B' ed esce 0563 FAE8 06 FF ld b,0ffh 0564 FAEA D9 exx 0565 FAEB 18 06 jr checv3 0566 FAED 0567 FAED DB EB checv2: in a,(0ebh) ; controlla se c'è la ritraccia video 0568 FAEF CB 7F bit 7,a 0569 FAF1 20 EE jr nz,checv1 ; ritraccia non trovata, looppa 0570 FAF3 0571 FAF3 E1 checv3: pop hl 0572 FAF4 F1 pop af 0573 FAF5 C9 ret 0574 FAF6 0575 FAF6 ;------------------------------------------------------ 0576 FAF6 ; controlla se è stata rilevata la scheda video vecchia 0577 FAF6 ; ritorna Z a 0 se non c'è, Z a 1 se c'è 0578 FAF6 ; Sporca F 0579 FAF6 0580 FAF6 C5 chect: push bc ; salva il valore di A nel registro B 0581 FAF7 47 ld b,a 0582 FAF8 0583 FAF8 D9 exx ; recupera il valore dal registro B' 0584 FAF9 78 ld a,b 0585 FAFA D9 exx 0586 FAFB B7 or a ; imposta il flag Z 0587 FAFC 0588 FAFC 78 ld a,b ; recupera il valore di A dal registro B 0589 FAFD 0590 FAFD C1 pop bc 0591 FAFE C9 ret 0592 FAFF 0593 FAFF ;------------------------------------------------------ 0594 FAFF ; pulizia del video vecchio 0595 FAFF 0596 FAFF E5 initv: push hl 0597 FB00 D5 push de 0598 FB01 C5 push bc 0599 FB02 21 00 EC ld hl,0ec00h 0600 FB05 11 01 EC ld de,0ec01h 0601 FB08 36 20 ld (hl),20h 0602 FB0A 01 FF 01 ld bc,01ffh 0603 FB0D CD 16 FB call waitv ; attende la ritraccia 0604 FB10 ED B0 ldir 0605 FB12 C1 pop bc 0606 FB13 D1 pop de 0607 FB14 E1 pop hl 0608 FB15 C9 ret 0609 FB16 0610 FB16 ;------------------------------------------------------ 0611 FB16 ; attende la ritraccia del video vecchio 0612 FB16 0613 FB16 F5 waitv: push af 0614 FB17 0615 FB17 CD F6 FA call chect ; esce se non esiste la scheda video vecchia 0616 FB1A 20 06 jr nz,waitv2 0617 FB1C 0618 FB1C DB EB waitv1: in a,(0ebh) ; attende la ritraccia video 0619 FB1E CB 7F bit 7,a 0620 FB20 20 FA jr nz,waitv1 0621 FB22 0622 FB22 F1 waitv2: pop af 0623 FB23 C9 ret 0624 FB24 0625 FB24 ;------------------------------------------------------ 0626 FB24 ; pulizia del video nuovo 0627 FB24 0628 FB24 F5 initn: push af 0629 FB25 E5 push hl 0630 FB26 21 00 00 ld hl,0h 0631 FB29 CD A9 FD initn1: call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0632 FB2C 0633 FB2C 3E 20 ld a,20h ; imposta il carattere a "blank" 0634 FB2E CD 98 FB call writen ; scrive il carattere 0635 FB31 0636 FB31 23 inc hl 0637 FB32 7D ld a,l 0638 FB33 FE 81 cp 81h 0639 FB35 20 F2 jr nz,initn1 0640 FB37 7C ld a,h 0641 FB38 FE 07 cp 07h 0642 FB3A 20 ED jr nz,initn1 0643 FB3C 0644 FB3C E1 pop hl 0645 FB3D F1 pop af 0646 FB3E C9 ret 0647 FB3F 0648 FB3F ;------------------------------------------------------ 0649 FB3F ; accende o spegne il cursore sul video nuovo 0650 FB3F ; A=00h accende, A=20h spegne 0651 FB3F 0652 FB3F F5 cursor: push af 0653 FB40 0654 FB40 3E 0A ld a,0ah ; seleziona il registro R10 0655 FB42 D3 8C out (8ch),a 0656 FB44 0657 FB44 F1 pop af ; scrive il valore 0658 FB45 D3 8D out (8dh),a 0659 FB47 0660 FB47 C9 ret 0661 FB48 0662 FB48 ;------------------------------------------------------ 0663 FB48 ; Subroutine per la visualizzazione del menù sui video 0664 FB48 ; 0665 FB48 0666 FB48 21 00 F0 vmenu1: ld hl,menu1 ; visualizza la 1° pagina del menu 0667 FB4B D9 exx ; carica in C' il numero della pagina visualizzata 0668 FB4C 0E 01 ld c,01h 0669 FB4E D9 exx 0670 FB4F 18 10 jr vmenuA 0671 FB51 0672 FB51 21 00 F2 vmenu2: ld hl,menu2 ; visualizza la 2° pagina del menu 0673 FB54 D9 exx ; carica in C' il numero della pagina visualizzata 0674 FB55 0E 02 ld c,02h 0675 FB57 D9 exx 0676 FB58 18 07 jr vmenuA 0677 FB5A 0678 FB5A 21 00 F4 vmenu3: ld hl,menu3 ; visualizza la 3° pagina del menu 0679 FB5D D9 exx ; carica in C' il numero della pagina visualizzata 0680 FB5E 0E 03 ld c,03h 0681 FB60 D9 exx 0682 FB61 0683 FB61 CD BB FA vmenuA: call disp1 ; pulisce i video 0684 FB64 0685 FB64 F5 push af 0686 FB65 E5 vmenuB: push hl 0687 FB66 CD C6 FB call nloc ; calcola in DE l'indirizzo del video nuovo in base alla riga/colonna nella locazione puntata da HL e HL+1 0688 FB69 D5 push de 0689 FB6A E1 pop hl 0690 FB6B CD A9 FD call lf06e ; carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare 0691 FB6E 0692 FB6E E1 pop hl 0693 FB6F CD B4 FB call vloc ; calcola in DE l'indirizzo del video vecchio in base alla riga/colonna nella locazione puntata da HL e HL+1 0694 FB72 0695 FB72 7E vmenuC: ld a,(hl) ; recupera il carattere da scrivere 0696 FB73 CD 16 FB call waitv ; attende la ritraccia del video vecchio 0697 FB76 12 ld (de),a ; visualizza il carattere sul video vecchio 0698 FB77 13 inc de 0699 FB78 0700 FB78 CD 98 FB call writen ; attende la ritraccia e visualizza il carattere sul video nuovo 0701 FB7B 0702 FB7B 23 inc hl 0703 FB7C AF xor a ; controlla se il prossimo carattere è 00h 0704 FB7D BE cp (hl) 0705 FB7E 20 F2 jr nz,vmenuC 0706 FB80 23 inc hl 0707 FB81 2F cpl ; controlla se il prossimo carattere è 0ffh 0708 FB82 BE cp (hl) ; se no, ricarica la successiva prima posizione e looppa 0709 FB83 20 E0 jr nz,vmenuB 0710 FB85 0711 FB85 21 F0 F5 ld hl,curs ; calcola in DE l'indirizzo del cursore in base alla riga/colonna nella locazione puntata da HL e HL+1 0712 FB88 F1 pop af 0713 FB89 F5 push af 0714 FB8A CD C6 FB call nloc 0715 FB8D D5 push de 0716 FB8E E1 pop hl 0717 FB8F CD 99 FD call lf060 ; carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare 0718 FB92 0719 FB92 AF xor a ; accende il cursore sul video nuovo 0720 FB93 CD 3F FB call cursor 0721 FB96 0722 FB96 F1 pop af 0723 FB97 C9 ret 0724 FB98 0725 FB98 ;------------------------------------------------------ 0726 FB98 ; scrive il carattere presente in A sul video nuovo 0727 FB98 ; Con l'entry point write1 non attende la ritraccia 0728 FB98 0729 FB98 CD AB FB writen: call waitn ; attende la ritraccia 0730 FB9B D3 80 write1: out (80h),a ; scrive il carattere 0731 FB9D F5 push af 0732 FB9E 3E 1F ld a,1fh ; imposta gli attributi del carattere 0733 FBA0 D3 8E out (8eh),a 0734 FBA2 3E 1F ld a,31 ; update 0735 FBA4 D3 8C out (8ch),a 0736 FBA6 AF xor a 0737 FBA7 D3 8D out (8dh),a 0738 FBA9 F1 pop af 0739 FBAA C9 ret 0740 FBAB 0741 FBAB ;------------------------------------------------------ 0742 FBAB ; attende la ritraccia del video nuovo 0743 FBAB 0744 FBAB F5 waitn: push af 0745 FBAC 0746 FBAC DB 8C waitn1: in a,(8ch) 0747 FBAE CB 7F bit 7,a 0748 FBB0 28 FA jr z,waitn1 0749 FBB2 F1 pop af 0750 FBB3 C9 ret 0751 FBB4 0752 FBB4 ;------------------------------------------------------ 0753 FBB4 ; Calcola la locazione del video in base alla riga/colonna nella locazione puntata da HL e HL+1 0754 FBB4 ; Chiamare "vloc" per il video vecchio, "nloc" per il video nuovo 0755 FBB4 ; Ritorna DE. HL punterà al primo carattere da visualizzare 0756 FBB4 ; Sporca DE e HL 0757 FBB4 ; Con l'entry-point vloc1 o nloc1 il registro BC deve contenere il valore della riga/colonna. In questo caso HL non viene toccato 0758 FBB4 0759 FBB4 C5 vloc: push bc 0760 FBB5 46 ld b,(hl) ; numero riga 0761 FBB6 23 inc hl 0762 FBB7 4E ld c,(hl) ; numero colonna 0763 FBB8 23 inc hl ; punta al primo carattere del messaggio 0764 FBB9 18 01 jr vloc1a 0765 FBBB 0766 FBBB C5 vloc1: push bc 0767 FBBC F5 vloc1a: push af 0768 FBBD E5 push hl 0769 FBBE 21 00 EC ld hl,0ec00h ; prima locazione del video vecchio 0770 FBC1 11 20 00 ld de,00020h ; numero di caratteri che compongono una riga sul video vecchio 0771 FBC4 18 10 jr loc1 0772 FBC6 0773 FBC6 C5 nloc: push bc 0774 FBC7 46 ld b,(hl) ; numero riga 0775 FBC8 23 inc hl 0776 FBC9 4E ld c,(hl) ; numero colonna 0777 FBCA 23 inc hl ; punta al primo carattere del messaggio 0778 FBCB 18 01 jr nloc1a 0779 FBCD 0780 FBCD C5 nloc1: push bc 0781 FBCE F5 nloc1a: push af 0782 FBCF E5 push hl 0783 FBD0 21 58 01 ld hl,00158h ; indirizzo del primo carattere più offset (0158h) per centrare la videata sul video nuovo 0784 FBD3 11 50 00 ld de,00050h ; numero di caratteri che compongono una riga sul video nuovo 0785 FBD6 0786 FBD6 78 loc1: ld a,b ; aggiunge il numero di caratteri che compongono una riga per tutte le righe richieste 0787 FBD7 B7 or a ; cp 00h 0788 FBD8 28 04 jr z,loc2 0789 FBDA 19 add hl,de ; somma il numero di caratteri 0790 FBDB 05 dec b 0791 FBDC 18 F8 jr loc1 0792 FBDE 0793 FBDE 06 00 loc2: ld b,00h ; aggiunge il numero di caratteri relativi alla colonna richiesta 0794 FBE0 09 add hl,bc 0795 FBE1 EB ex de,hl ; mette il risultato in DE 0796 FBE2 0797 FBE2 E1 pop hl 0798 FBE3 F1 pop af 0799 FBE4 C1 pop bc 0800 FBE5 0801 FBE5 C9 ret 0802 FBE6 0803 FBE6 ;------------------------------------------------------ 0804 FBE6 ; Cerca dove posizionare lo SP prima di C000 0805 FBE6 ; Ritorna l'indirizzo in HL 0806 FBE6 ; 0807 FBE6 21 FF BF stack: ld hl,0bfffh 0808 FBE9 7E spA1: ld a,(hl) 0809 FBEA 2F cpl 0810 FBEB 77 ld (hl),a 0811 FBEC BE cp (hl) 0812 FBED 28 03 jr z,spA3 0813 FBEF 2B spA2: dec hl 0814 FBF0 18 F7 jr spA1 0815 FBF2 2F spA3: cpl 0816 FBF3 77 ld (hl),a 0817 FBF4 BE cp (hl) 0818 FBF5 20 F8 jr nz,spA2 0819 FBF7 0820 FBF7 C9 ret 0821 FBF8 0822 FBF8 ;------------------------------------------------------ 0823 FBF8 ; 0824 FBF8 ; Nuova routine di input tastiera per il monitor esadecimale 0825 FBF8 ; Sostituisce la 80AA e accetta l'input dalla tastiera alfanumerica vecchia o nuova 0826 FBF8 ; o dalla tastiera esadecimale convertendo il valore ricevuto in modo da essere 0827 FBF8 ; compatibile con la 80AA 0828 FBF8 ; 0829 FBF8 ; Dati ricevuti dalla tastiera: 0830 FBF8 ; Numeri da 0 a 9: da 30h a 39h 0831 FBF8 ; Lettere da A ad F: da 61h a 66h 0832 FBF8 ; Shift+numero da 1 a 9: da 21h a 29h 0833 FBF8 ; Shift+lettere da A ad F: da 41h a 46h 0834 FBF8 ; Return: 0dh 0835 FBF8 0836 FBF8 0837 FBF8 C5 input: push bc 0838 FBF9 D5 push de 0839 FBFA E5 push hl 0840 FBFB 0841 FBFB CD F6 FA t1: call chect ; Se non c'è la scheda video vecchia salta il controllo e passa subito alla tastiera nuova 0842 FBFE 20 06 jr nz,t2 0843 FC00 0844 FC00 DB EA t1x: in a,(0eah) ; tastiera vecchia 0845 FC02 CB 7F bit 7,a 0846 FC04 20 FA jr nz,t1x 0847 FC06 0848 FC06 DB 85 t2: in a,(085h) ; tastiera nuova 0849 FC08 CB 7F bit 7,a 0850 FC0A 28 FA jr z,t2 0851 FC0C 21 56 04 t2es1: ld hl,0456h ; tastiera esadecimale 0852 FC0F DB F0 t2es2: in a,(0f0h) 0853 FC11 CB 7F bit 7,a 0854 FC13 28 F7 jr z,t2es1 0855 FC15 2B t2es3: dec hl 0856 FC16 7C ld a,h 0857 FC17 B5 or l 0858 FC18 20 F5 jr nz,t2es2 0859 FC1A 0860 FC1A ; Input da tastiere 0861 FC1A CD F6 FA t2a: call chect ; Se non c'è la scheda video vecchia salta il controllo e passa subito alla tastiera nuova 0862 FC1D 20 06 jr nz,t2ax 0863 FC1F 0864 FC1F DB EA in a,(0eah) ; tastiera vecchia 0865 FC21 CB 7F bit 7,a 0866 FC23 20 38 jr nz,t2b 0867 FC25 0868 FC25 DB 85 t2ax: in a,(085h) ; tastiera nuova 0869 FC27 2F cpl 0870 FC28 CB 7F bit 7,a 0871 FC2A 20 31 jr nz,t2b 0872 FC2C DB F0 in a,(0f0h) ; tastiera esadecimale 0873 FC2E CB 7F bit 7,a 0874 FC30 28 10 jr z,tes4 0875 FC32 18 E6 jr t2a ; se non ho premuto nulla sulle tre tastiere allora looppa 0876 FC34 0877 FC34 ; Input da tastiera esadecimale 0878 FC34 21 56 04 tes1: ld hl,0456h 0879 FC37 0880 FC37 DB F0 tes2: in a,(0f0h) 0881 FC39 CB 7F bit 7,a 0882 FC3B 28 F7 jr z,tes1 0883 FC3D 2B tes3: dec hl 0884 FC3E 7C ld a,h 0885 FC3F B5 or l 0886 FC40 20 F5 jr nz,tes2 0887 FC42 0888 FC42 DB F0 tes4: in a,(0f0h) 0889 FC44 CB 7F bit 7,a 0890 FC46 20 FA jr nz,tes4 0891 FC48 47 ld b,a 0892 FC49 21 05 00 ld hl,0005h 0893 FC4C CD AE FC call rit 0894 FC4F 0895 FC4F DB F0 tes5: in a,(0f0h) 0896 FC51 4F ld c,a 0897 FC52 E6 7F and 7fh 0898 FC54 B8 cp b 0899 FC55 20 F8 jr nz,tes5 0900 FC57 CB 79 bit 7,c 0901 FC59 20 D9 jr nz,tes1 0902 FC5B 0903 FC5B 18 4D tes6: jr texit 0904 FC5D 0905 FC5D ; Conversione dato per tastiere alfanumeriche 0906 FC5D E6 7F t2b: and 7fh 0907 FC5F 0908 FC5F FE 0D cp 0dh ; controlla se è stato premuto RETURN 0909 FC61 20 04 jr nz,t3 0910 FC63 3E 10 ld a,10h ; se si carica il valore di Control+0 0911 FC65 18 43 jr texit 0912 FC67 0913 FC67 47 t3: ld b,a ; salva il registro A 0914 FC68 D9 exx ; recupera il registro D' 0915 FC69 7A ld a,d 0916 FC6A D9 exx 0917 FC6B B7 or a ; cp 00h - Se <> 0 deve controllare anche il BACKSPACE 0918 FC6C 78 ld a,b ; ripristina il registro A 0919 FC6D 28 08 jr z,t3b 0920 FC6F 0921 FC6F FE 08 cp 08h ; controlla se è stato premuto BACKSPACE 0922 FC71 20 04 jr nz,t3b 0923 FC73 3E 1F ld a,01fh ; se si carica il valore 01fh (equivalente a CTRL+F sulla tastiera esadecimale) 0924 FC75 18 33 jr texit 0925 FC77 0926 FC77 FE 3A t3b: cp 03ah ; controlla se è stato premuto un numero 0927 FC79 30 08 jr nc,t4 0928 FC7B FE 30 cp 030h 0929 FC7D 38 04 jr c,t4 0930 FC7F D6 30 sub 030h ; se si sottrae 30h ed esce 0931 FC81 18 27 jr texit 0932 FC83 0933 FC83 FE 67 t4: cp 67h ; controlla se è stata premuta una lettera tra A ed F 0934 FC85 30 08 jr nc,t5 0935 FC87 FE 61 cp 61h 0936 FC89 38 04 jr c,t5 0937 FC8B D6 57 sub 57h ; se si sottrae 57h ed esce 0938 FC8D 18 1B jr texit 0939 FC8F 0940 FC8F FE 2A t5: cp 2ah ; controlla se è stato premuto shift+numero (escluso 0) 0941 FC91 30 08 jr nc,t6 0942 FC93 FE 21 cp 21h 0943 FC95 38 04 jr c,t6 0944 FC97 D6 10 sub 10h ; se si sottrae 10h ed esce 0945 FC99 18 0F jr texit 0946 FC9B 0947 FC9B FE 47 t6: cp 47h ; controlla se è stato premuto shift+lettera da A ad F 0948 FC9D 30 08 jr nc,t7 0949 FC9F FE 41 cp 41h 0950 FCA1 38 04 jr c,t7 0951 FCA3 D6 27 sub 27h ; se si sottrae 27h ed esce 0952 FCA5 18 03 jr texit 0953 FCA7 0954 FCA7 C3 FB FB t7: jp t1 0955 FCAA 0956 FCAA E1 texit: pop hl 0957 FCAB D1 pop de 0958 FCAC C1 pop bc 0959 FCAD C9 ret 0960 FCAE 0961 FCAE ; Genera un ritardo 0962 FCAE 0963 FCAE E5 rit: push hl 0964 FCAF F5 push af 0965 FCB0 0966 FCB0 CD BB FC rit1: call rit2 0967 FCB3 2B dec hl 0968 FCB4 7C ld a,h 0969 FCB5 B5 or l 0970 FCB6 20 F8 jr nz,rit1 0971 FCB8 F1 pop af 0972 FCB9 E1 pop hl 0973 FCBA C9 ret 0974 FCBB 0975 FCBB F5 rit2: push af 0976 FCBC D5 push de 0977 FCBD 11 47 00 ld de,0047h 0978 FCC0 0979 FCC0 1B rit3: dec de 0980 FCC1 7A ld a,d 0981 FCC2 B3 or e 0982 FCC3 20 FB jr nz,rit3 0983 FCC5 D1 pop de 0984 FCC6 F1 pop af 0985 FCC7 C9 ret 0986 FCC8 0987 FCC8 ;------------------------------------------------------ 0988 FCC8 ; 0989 FCC8 ; Nuova routine di output su video per monitor esadecimale 0990 FCC8 ; Sostituisce la 80EC e accetta l'input dalle locazioni da 0000h a 0007h 0991 FCC8 ; convertendo il valore letto in modo da essere compatibile con la 80EC 0992 FCC8 ; Con l'entry point "video1" i registri BC, DE e HL devono essere già impostati 0993 FCC8 ; 0994 FCC8 0995 FCC8 F5 video: push af 0996 FCC9 C5 push bc 0997 FCCA D5 push de 0998 FCCB E5 push hl 0999 FCCC 1000 FCCC 3E 20 ld a,20h ; spegne il cursore sul video nuovo 1001 FCCE CD 3F FB call cursor 1002 FCD1 1003 FCD1 11 07 00 ld de,0007h ; contatore numero di caratteri da visualizzare (indica anche la locazione da cui prelevare il carattere da visualizzare) 1004 FCD4 01 00 EC ld bc,0ec00h ; posizione video vecchio 1005 FCD7 21 00 00 ld hl,0000h ; posizione video nuovo 1006 FCDA 1007 FCDA 3E 20 ld a,20h ; spegne il cursore sul video nuovo 1008 FCDC CD 3F FB call cursor 1009 FCDF 1010 FCDF E5 m1: push hl ; salva la posizione del video nuovo 1011 FCE0 21 22 FD ld hl,tabvid ; calcola il carattere da visualizzare leggendolo dalla tabella di conversione 1012 FCE3 1013 FCE3 C5 push bc 1014 FCE4 1A ld a,(de) ; legge il valore da visualizzare 1015 FCE5 06 00 ld b,0h ; lo converte nel carattere ascii 1016 FCE7 4F ld c,a 1017 FCE8 09 add hl,bc 1018 FCE9 C1 pop bc 1019 FCEA 1020 FCEA 7E ld a,(hl) ; legge dalla tabella il carattere da visualizzare 1021 FCEB 1022 FCEB CD F6 FA call chect ; controlla se esiste la scheda video vecchia 1023 FCEE 20 04 jr nz,m2 ; se non esiste non visualizza il carattere sulla scheda video vecchia 1024 FCF0 1025 FCF0 CD 16 FB call waitv ; attende la ritraccia video vecchio 1026 FCF3 02 ld (bc),a ; visualizza il carattere sul video vecchio 1027 FCF4 1028 FCF4 E1 m2: pop hl ; ripristina la posizione del video nuovo 1029 FCF5 CD 99 FD call lf060 ; carica in R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare 1030 FCF8 CD 98 FB call writen ; visualizza il carattere sul video nuovo 1031 FCFB 1032 FCFB 0C inc c ; incrementa la posizione del video vecchio 1033 FCFC 2C inc l ; incrementa la posizione del video nuovo 1034 FCFD 1D dec e ; decrementa il contatore dei caratteri da visualizzare 1035 FCFE 7B ld a,e ; controlla se ci sono altri caratteri da visualizzare 1036 FCFF FE FF cp 0ffh 1037 FD01 20 DC jr nz,m1 ; looppa se ci sono altri caratteri da visualizzare 1038 FD03 1039 FD03 ;------------------------------------------------------ 1040 FD03 ; Visualizza sui display della tastiera esadecimale 1041 FD03 ;------------------------------------------------------ 1042 FD03 01 F7 00 ld bc,00f7h ; porta di output del display 1043 FD06 11 07 00 ld de,0007h ; valore da visualizzare 1044 FD09 1045 FD09 21 46 FD m3: ld hl,tabdis ; carica l'indirizzo della tabella di conversione in HL 1046 FD0C 1A ld a,(de) ; legge il valore da visualizzare e lo mette in A 1047 FD0D 1048 FD0D C5 push bc ; carica il valore da visualizzare in BC 1049 FD0E 4F ld c,a 1050 FD0F AF xor a 1051 FD10 47 ld b,a 1052 FD11 09 add hl,bc ; HL ora punta all'indirizzo contenente il valore convertito 1053 FD12 C1 pop bc 1054 FD13 1055 FD13 7E ld a,(hl) ; carica il valore convertito in A 1056 FD14 ED 79 out (c),a ; e lo invia al display 1057 FD16 1058 FD16 1D dec e ; decrementa e passa al prossimo display/valore 1059 FD17 0D dec c 1060 FD18 79 ld a,c 1061 FD19 FE EF cp 0efh 1062 FD1B 20 EC jr nz,m3 ; (-16) 1063 FD1D 1064 FD1D E1 pop hl 1065 FD1E D1 pop de 1066 FD1F C1 pop bc 1067 FD20 F1 pop af 1068 FD21 C9 ret 1069 FD22 1070 FD22 1071 FD22 303132333435tabvid: .byte "0123456789ABCDEF" 1071 FD28 36373839414243444546 1072 FD32 2D204D522348 .byte "-", " ", "M", "R", "#", "H", "L", "P", "C", "G" 1072 FD38 4C504347 1073 FD3C 4E5152545556 .byte "NQRTUVJY S" 1073 FD42 4A592053 1074 FD46 1075 FD46 ;------------------------------------------------------ 1076 FD46 ; Tabella caratteri display 1077 FD46 ; Valori per l'accensione dei segmenti del display: 1078 FD46 ; 1079 FD46 ; 1 1080 FD46 ; - bit a 1 spegne il segmento 1081 FD46 ; 32 | | 2 1082 FD46 ; - 64 F0 = display a destra 1083 FD46 ; 16 | | 4 !! 1084 FD46 ; - F7 = display a sinistra 1085 FD46 ; 8 1086 FD46 ; 128 = punto decimale 1087 FD46 ; 1088 FD46 C0 tabdis: .byte 0c0h ;carattere 0 "0" 1089 FD47 F9 .byte 0f9h ;carattere 1 "1" 1090 FD48 A4 .byte 0a4h ;carattere 2 "2" 1091 FD49 B0 .byte 0b0h ;carattere 3 "3" 1092 FD4A 99 .byte 099h ;carattere 4 "4" 1093 FD4B 92 .byte 092h ;carattere 5 "5" o "S" 1094 FD4C 82 .byte 082h ;carattere 6 "6" 1095 FD4D F8 .byte 0f8h ;carattere 7 "7" 1096 FD4E 80 .byte 080h ;carattere 8 "8" 1097 FD4F 90 .byte 090h ;carattere 9 "9" 1098 FD50 88 .byte 088h ;carattere 0A "A" 1099 FD51 83 .byte 083h ;carattere 0B "b" 1100 FD52 C6 .byte 0c6h ;carattere 0C "C" 1101 FD53 A1 .byte 0a1h ;carattere 0d "d" 1102 FD54 86 .byte 086h ;carattere 0E "E" 1103 FD55 8E .byte 08eh ;carattere 0F "F" 1104 FD56 BF .byte 0bfh ;carattere 10 "-" 1105 FD57 FF .byte 0ffh ;carattere 11 " " blank 1106 FD58 AB .byte 0abh ;carattere 12 "n" bassa 1107 FD59 9D .byte 09dh ;carattere 13 "u" alta 1108 FD5A B6 .byte 0b6h ;carattere 14 "3" linee orizzontali" 1109 FD5B 89 .byte 089h ;carattere 15 "H" 1110 FD5C C7 .byte 0c7h ;carattere 16 "L" 1111 FD5D 8C .byte 08ch ;carattere 17 "P" 1112 FD5E A7 .byte 0a7h ;carattere 18 "c" bassa 1113 FD5F C2 .byte 0c2h ;carattere 19 "G" 1114 FD60 C8 .byte 0c8h ;carattere 1A "N" 1115 FD61 98 .byte 098h ;carattere 1B "q" 1116 FD62 AF .byte 0afh ;carattere 1C "r" 1117 FD63 87 .byte 087h ;carattere 1D "t" 1118 FD64 C1 .byte 0c1h ;carattere 1E "U" 1119 FD65 E3 .byte 0e3h ;carattere 1F "u" bassa 1120 FD66 E1 .byte 0e1h ;carattere 20 "J" 1121 FD67 91 .byte 091h ;carattere 21 "Y" 1122 FD68 FF .byte 0ffh ;carattere 22 " " blank 1123 FD69 FF .byte 0ffh ;carattere 23 " " blank 1124 FD6A 1125 FD6A 1126 FD6A ;------------------------------------------------------ 1127 FD6A ; Visualizza un messaggio puntato da HL sui display 1128 FD6A ; Il messaggio da visualizzare deve essere già nel formato compatibile con i caratteri dei display 1129 FD6A ; Il primo byte indica quanti caratteri visualizzare. I rimanenti display vengono messi a FFh (display spento) 1130 FD6A 1131 FD6A F5 vdisp: push af 1132 FD6B C5 push bc 1133 FD6C E5 push hl 1134 FD6D 1135 FD6D 0E F7 ld c,0f7h ; indirizzo del primo display 1136 FD6F 46 ld b,(hl) ; numero di caratteri da visualizzare 1137 FD70 23 inc hl 1138 FD71 1139 FD71 7E vdisp1: ld a,(hl) ; carica il carattere da visualizzare in A 1140 FD72 ED 79 out (c),a ; e lo invia al display 1141 FD74 23 inc hl ; punta al prossimo carattere da visualizzare 1142 FD75 0D dec c ; punta al prossimo display 1143 FD76 10 F9 djnz vdisp1 ; looppa se ci sono altri caratteri da visualizzare 1144 FD78 1145 FD78 79 vdisp2: ld a,c ; se rimangono altri display li spegne 1146 FD79 FE EF cp 0efh 1147 FD7B 28 07 jr z,vdisp3 1148 FD7D 3E FF ld a,0ffh ; spegne il display 1149 FD7F ED 79 out (c),a 1150 FD81 0D dec c ; punta al prossimo display 1151 FD82 18 F4 jr vdisp2 1152 FD84 1153 FD84 E1 vdisp3: pop hl 1154 FD85 C1 pop bc 1155 FD86 F1 pop af 1156 FD87 1157 FD87 C9 ret 1158 FD88 1159 FD88 ;------------------------------------------------------ 1160 FD88 ; Visualizza il carattere contenuto in A sul display puntato da C, convertendolo nel formato compatibile con i caratteri dei display 1161 FD88 1162 FD88 E5 vdispc: push hl 1163 FD89 F5 push af 1164 FD8A C5 push bc 1165 FD8B 1166 FD8B 21 46 FD ld hl,tabdis ; carica l'indirizzo della tabella di conversione in HL 1167 FD8E 4F ld c,a ; carica il valore da visualizzare in BC 1168 FD8F AF xor a 1169 FD90 47 ld b,a 1170 FD91 09 add hl,bc ; HL ora punta all'indirizzo contenente il valore convertito 1171 FD92 7E ld a,(hl) ; carica il valore convertito in A 1172 FD93 1173 FD93 C1 pop bc 1174 FD94 ED 79 out (c),a ; invia il valore convertito al display 1175 FD96 1176 FD96 F1 pop af 1177 FD97 E1 pop hl 1178 FD98 C9 ret 1179 FD99 1180 FD99 ;------------------------------------------------------ 1181 FD99 ; Routine f060h della eprom 2390 (carica in R14, R15, R18 e R19 l'indirizzo (HL) del cursore e del carattere da visualizzare) 1182 FD99 ; Routine f06eh della eprom 2390 (carica in R18 e R19 l'indirizzo (HL) del carattere da visualizzare) 1183 FD99 1184 FD99 F5 lf060: push af 1185 FD9A 3E 0E ld a,0eh ; carica da HL l'indirizzo del cursore 1186 FD9C D3 8C out (8ch),a 1187 FD9E 7C ld a,h 1188 FD9F D3 8D out (8dh),a 1189 FDA1 3E 0F ld a,0fh 1190 FDA3 D3 8C out (8ch),a 1191 FDA5 7D ld a,l 1192 FDA6 D3 8D out (8dh),a 1193 FDA8 F1 pop af 1194 FDA9 1195 FDA9 F5 lf06e: push af 1196 FDAA 3E 12 ld a,12h ; carica da HL l'indirizzo del carattere da visualizzare in R18 e R19 1197 FDAC D3 8C out (8ch),a 1198 FDAE 7C ld a,h 1199 FDAF D3 8D out (8dh),a 1200 FDB1 3E 13 ld a,13h 1201 FDB3 D3 8C out (8ch),a 1202 FDB5 7D ld a,l 1203 FDB6 D3 8D out (8dh),a 1204 FDB8 1205 FDB8 3E 1F ld a,1fh ; accesso a R31 del SY6545 per fare l'update 1206 FDBA D3 8C out (8ch),a 1207 FDBC F1 pop af 1208 FDBD C9 ret 1209 FDBE 1210 FDBE ;------------------------------------------------------ 1211 FDBE ; Routine f0a5h della eprom 2390 (inizializza i registri del SY6545 ed i PIO) 1212 FDBE 1213 FDBE DB 89 lf0a5: in a,(89h) ; setta il video a 80 colonne 1214 FDC0 CB 8F res 1,a 1215 FDC2 21 02 FE ld hl,tabini ; carica in HL l'indirizzo della tabella contenente i parametri di inizializzazione del video nuovo 1216 FDC5 D3 89 out (89h),a 1217 FDC7 3E 8F ld a,8fh ; inizializza i PIO 1218 FDC9 D3 82 out (82h),a ; PIO 0/A (RAM 0) 1219 FDCB D3 86 out (86h),a ; PIO 1/A (RAM 1) 1220 FDCD D3 8A out (8ah),a ; PIO 2/A (RAM 2) 1221 FDCF 3E CF ld a,0cfh 1222 FDD1 D3 83 out (83h),a ; PIO 0/B (stampante) 1223 FDD3 08 ex af,af' 1224 FDD4 AF xor a 1225 FDD5 D3 83 out (83h),a 1226 FDD7 08 ex af,af' 1227 FDD8 D3 87 out (87h),a ; PIO 1/B (tastiera) 1228 FDDA 08 ex af,af' 1229 FDDB 3D dec a 1230 FDDC D3 87 out (87h),a 1231 FDDE 08 ex af,af' 1232 FDDF D3 8B out (8bh),a ; PIO 2/B (busy stampante / controllo 40-80 caratteri) 1233 FDE1 3E F1 ld a,0f1h 1234 FDE3 D3 8B out (8bh),a 1235 FDE5 1236 FDE5 06 0C ld b,0ch ; inizializza i registri del SY6545 da R11 a R0 1237 FDE7 78 lf0ce: ld a,b 1238 FDE8 3D dec a 1239 FDE9 D3 8C out (8ch),a 1240 FDEB 7E ld a,(hl) 1241 FDEC D3 8D out (8dh),a 1242 FDEE 23 inc hl 1243 FDEF 10 F6 djnz lf0ce ; (-10) 1244 FDF1 1245 FDF1 06 08 lf0d8: ld b,08h ; azzera i registri del SY6545 da R19 a R12 1246 FDF3 1247 FDF3 78 lf0da: ld a,b 1248 FDF4 C6 0B add a,0bh 1249 FDF6 D3 8C out (8ch),a 1250 FDF8 AF xor a 1251 FDF9 D3 8D out (8dh),a 1252 FDFB 10 F6 djnz lf0da ; (-10) 1253 FDFD 1254 FDFD 3E 1F lf086: ld a,1fh ; accesso a R31 del SY6545 per fare l'update 1255 FDFF D3 8C out (8ch),a 1256 FE01 C9 ret 1257 FE02 1258 FE02 ;------------------------------------------------------ 1259 FE02 ; Tabella per l'inizializzazione dei registri della scheda video grafica 1260 FE02 1261 FE02 0B000B481818tabini: .byte 0bh, 00h, 0bh, 48h, 18h, 18h, 00h, 1ah, 28h, 57h, 50h, 6fh 1261 FE08 001A2857506F 1262 FE0E 1263 FE0E ;------------------------------------------------------ 1264 FE0E ; Calcola l'indirizzo della tabella TABDIS e lo ritorna in HL 1265 FE0E 1266 FE0E 21 46 FD ctabdi: ld hl,tabdis 1267 FE11 C9 ret 1268 FE12 1269 FE12 ;------------------------------------------------------ 1270 FE12 ; Jump table per il richiamo della routine di gestione della voce di menu selezionata 1271 FE12 1272 FE12 0F F9 tabtas: .dw tast1 1273 FE14 1C F9 .dw tast2 1274 FE16 29 F9 .dw tast3 1275 FE18 36 F9 .dw tast4 1276 FE1A 43 F9 .dw tast5 1277 FE1C 56 F9 .dw tast6 1278 FE1E 66 F9 .dw tast7 1279 FE20 76 F9 .dw tast8 1280 FE22 80 F9 .dw tast9 1281 FE24 8A F9 .dw tastA 1282 FE26 97 F9 .dw tastB 1283 FE28 B1 F9 .dw tastC 1284 FE2A BE F9 .dw tastD 1285 FE2C 1C FA .dw tastE 1286 FE2E 40 FA .dw tastF 1287 FE30 2D FA .dw tast10 1288 FE32 4D FA .dw tastS1 1289 FE34 5A FA .dw tastS2 1290 FE36 7A FA .dw tastS3 1291 FE38 1292 FE38 ;------------------------------------------------------ 1293 FE38 ; Jump table per il richiamo della routine di visualizzazione della pagina di menù 1294 FE38 1295 FE38 48 FB tabmen: .dw vmenu1 1296 FE3A 51 FB .dw vmenu2 1297 FE3C 5A FB .dw vmenu3 1298 FE3E 1299 FE3E ;------------------------------------------------------ 1300 FE3E ; Messaggi utilizzati dalla funzione "D" del menù 1301 FE3E 1302 FE3E 000042414E43msgban: .byte 000h, 000h, "BANCO: ", 000h, 0ff 1302 FE44 4F3A2000A5 1303 FE49 0100494E4449msgadr: .byte 001h, 000h, "INDIRIZZO: ", 000h, 0ffh 1303 FE4F 52495A5A4F3A2000FF 1304 FE58 1305 FE58 ;------------------------------------------------------ 1306 FE58 ; Tabelle per visualizzazione su display tastiera esadecimale 1307 FE58 ; 1308 FE58 ; 1309 FE58 ; Valori per l'accensione dei segmenti del display: 1310 FE58 ; 1311 FE58 ; 1 1312 FE58 ; - bit a 1 spegne il segmento 1313 FE58 ; 32 | | 2 1314 FE58 ; - 64 F0 = display a destra 1315 FE58 ; 16 | | 4 !! 1316 FE58 ; - F7 = display a sinistra 1317 FE58 ; 8 1318 FE58 ; 128 = punto decimale 1319 FE58 ; 1320 FE58 ; Fare la somma dei valori e poi complementare il risultato 1321 FE58 ; 1322 FE58 ;------------------------------------------------------ 1323 FE58 ; Messaggi da visualizzare sui display 1324 FE58 1325 FE58 07FF9286C786out0: .byte 07h, 0FFh, 092h, 086h, 0C7h, 086h, 0C6h, 087h ; select 1325 FE5E C687 1326 FE60 08AB86A1C092out1: .byte 08h, 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 079h, 092h ; nedos 1.5 1326 FE66 FF7992 1327 FE69 08AB86A1C092out2: .byte 08h, 0ABh, 086h, 0A1h, 0C0h, 092h, 0FFh, 042h, 0F9h ; nedos G.1 1327 FE6F FF42F9 1328 FE72 08838892F9C6out3: .byte 08h, 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 0F9h, 082h ; basic 16 1328 FE78 FFF982 1329 FE7B 07C8C0ABF987out4: .byte 07h, 0C8h, 0C0h, 0ABh, 0F9h, 087h, 0C0h, 0AFh ; monitor (non utilizzato) 1329 FE81 C0AF 1330 FE83 06FFFF83C0C0out5: .byte 06h, 0FFh, 0FFh, 083h, 0C0h, 0C0h, 087h ; boot 1330 FE89 87 1331 FE8A 06FFFF878692out6: .byte 06h, 0FFh, 0FFh, 087h, 086h, 092h, 087h ; test 1331 FE90 87 1332 FE91 04C19286AF out7: .byte 04h, 0C1h, 092h, 086h, 0AFh ; user 1333 FE96 08838892F9C6out8: .byte 08h, 083h, 088h, 092h, 0F9h, 0C6h, 0FFh, 012h, 092h ; basic 5.5 1333 FE9C FF1292 1334 FE9F 06FFFF92C0ABout9: .byte 06h, 0FFh, 0FFh, 092h, 0C0h, 0ABh, 086h ; sone 1334 FEA5 86 1335 FEA6 07FF8EC7C08Cout10: .byte 07h, 0FFh, 08Eh, 0C7h, 0C0h, 08Ch, 08Ch, 091h ; floppy 1335 FEAC 8C91 1336 FEAE 0887869287FFout11: .byte 08h, 087h, 086h, 092h, 087h, 0FFh, 0AFh, 088h, 0C8h ; test ram 1336 FEB4 AF88C8 1337 FEB7 08838892F946out12: .byte 08h, 083h, 088h, 092h, 0F9h, 046h, 088h, 0C2h, 099h ; basic.ag4 1337 FEBD 88C299 1338 FEC0 08A1F9928812out13: .byte 08h, 0A1h, 0F9h, 092h, 088h, 012h, 088h, 0C2h, 0B0h ; disas.ag3 1338 FEC6 88C2B0 1339 FEC9 058388ABC640outban: .byte 05h, 083h, 088h, 0ABh, 0C6h, 040h ; banco. 1340 FECF 03 F9 AB 21 outadr: .byte 03h, 0F9h, 0ABh, 021h ; ind. 1341 FED3 1342 FED3 ;------------------------------------------------------ 1343 FED3 1344 FFFF .org 0ffffh 1345 FFFF 00 .byte 00h 1346 10000 1347 10000 .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 F5F0 N curs 00FC N cursd FA91 N convnu FA9C N convn1 FAA2 N convn2 FAD8 N checv FAE1 N checv1 FAED N checv2 FAF3 N checv3 FAF6 N chect FB3F N cursor FE0E N ctabdi FAB8 N disp FABB N disp1 F000 N inizio F006 N inp FAFF N initv FB24 N initn FB29 N initn1 FBF8 N input FBD6 N loc1 FBDE N loc2 FD99 N lf060 FDA9 N lf06e FDBE N lf0a5 FDE7 N lf0ce FDF1 N lf0d8 FDF3 N lf0da FDFD N lf086 F000 N menu1 F200 N menu2 F400 N menu3 FCDF N m1 FCF4 N m2 FD09 N m3 FE3E N msgban FE49 N msgadr FBC6 N nloc FBCD N nloc1 FBCE N nloc1a FE58 N out0 FE60 N out1 FE69 N out2 FE72 N out3 FE7B N out4 FE83 N out5 FE8A N out6 FE91 N out7 FE96 N out8 FE9F N out9 FEA6 N out10 FEAE N out11 FEB7 N out12 FEC0 N out13 FEC9 N outban FECF N outadr FAA7 N punt FCAE N rit FCB0 N rit1 FCBB N rit2 FCC0 N rit3 F842 N start F8B0 N sp0 F8B3 N sp1 F8B9 N sp2 F8BC N sp3 FAC7 N setban FBE6 N stack FBE9 N spA1 FBEF N spA2 FBF2 N spA3 F85B N tram1 F85E N tram2 F86D N tram2a F878 N tram3 F882 N tram4 F88F N tram5 F895 N tram6 F89B N tram7 F8AC N tram8 F8C9 N tast0 F8D2 N tast0a F8F6 N tast0b F908 N tast0c F90F N tast1 F91C N tast2 F929 N tast3 F936 N tast4 F943 N tast5 F956 N tast6 F966 N tast7 F976 N tast8 F980 N tast9 F98A N tastA F997 N tastB F9B1 N tastC F9BE N tastD FA1C N tastE FA2D N tast10 FA37 N tast1a FA40 N tastF FA4D N tastS1 FA5A N tastS2 FA7A N tastS3 FBFB N t1 FC00 N t1x FC06 N t2 FC0C N t2es1 FC0F N t2es2 FC15 N t2es3 FC1A N t2a FC25 N t2ax FC34 N tes1 FC37 N tes2 FC3D N tes3 FC42 N tes4 FC4F N tes5 FC5B N tes6 FC5D N t2b FC67 N t3 FC77 N t3b FC83 N t4 FC8F N t5 FC9B N t6 FCA7 N t7 FCAA N texit FD22 N tabvid FD46 N tabdis FE02 N tabini FE12 N tabtas FE38 N tabmen F003 N vis FB48 N vmenu1 FB51 N vmenu2 FB5A N vmenu3 FB61 N vmenuA FB65 N vmenuB FB72 N vmenuC FBB4 N vloc FBBB N vloc1 FBBC N vloc1a FCC8 N video FD6A N vdisp FD71 N vdisp1 FD78 N vdisp2 FD84 N vdisp3 FD88 N vdispc FB16 N waitv FB1C N waitv1 FB22 N waitv2 FB98 N writen FB9B N write1 FBAB N waitn FBAC N waitn1 ADDR 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------------------------------------------- F800 C3 42 F8 C3 F8 FB C3 C8 FC C3 BE FD C3 99 FD C3 F810 A9 FD C3 D8 FA C3 F6 FA C3 16 FB C3 AB FB C3 98 F820 FB C3 3F FB C3 B4 FB C3 C6 FB C3 BB FB C3 CD FB F830 C3 FF FA C3 24 FB C3 0E FE C3 6A FD C3 88 FD C3 F840 9B FB F3 21 ED 45 22 66 00 AF D3 D6 D9 57 D9 3E F850 28 D3 5F 3E CF D3 87 AF 3D D3 87 21 00 00 23 7C F860 FE 10 28 14 DB EB CB 7F 20 F4 21 00 30 2B 7C B5 F870 20 FB DB EA CB 7F 20 17 DB 85 2F CB 7F 20 10 01 F880 FF 01 DB F0 CB 7F 28 24 0B 78 B1 20 F5 18 21 E6 F890 7F FE 1B 20 1B 21 AE FE 01 F7 08 7E ED 79 23 0D F8A0 05 AF B8 20 F6 3E 26 D3 5F C3 00 F0 FE 1F 28 E5 F8B0 21 FF EB 7E 2F 77 BE 28 03 2B 18 F7 2F 77 BE 20 F8C0 F8 2B F9 CD BE FD CD D8 FA 21 58 FE CD 6A FD CD F8D0 48 FB CD F8 FB F5 FE 10 28 2E FE 14 30 F4 FE 01 F8E0 38 F0 21 F0 F5 CD B4 FB FE 11 CD 91 FA 30 07 7D F8F0 12 CD 98 FB 18 12 7C 12 CD 98 FB 13 7D 12 CD 98 F900 FB 13 3E 3C 12 CD 98 FB F1 21 12 FE C3 A7 FA 21 F910 96 FE CD B8 FA 3E 19 D3 5F C3 00 F0 21 60 FE CD F920 B8 FA 3E 00 D3 5F C3 00 F0 21 69 FE CD B8 FA 3E F930 01 D3 5F C3 00 F0 21 9F FE CD B8 FA 3E 1A D3 5F F940 C3 00 F0 21 72 FE CD B8 FA 3E 08 11 00 00 06 08 F950 CD C7 FA C3 00 00 CD BB FA 3E 04 11 00 80 06 01 F960 CD C7 FA C3 00 80 CD BB FA 3E 20 11 00 80 06 01 F970 CD C7 FA C3 00 80 CD BB FA 3E 1C D3 5F C3 00 F0 F980 CD BB FA 3E 1E D3 5F C3 00 F0 21 83 FE CD B8 FA F990 3E 06 D3 5F C3 7D F1 CD BB FA 3E 04 11 00 80 06 F9A0 01 CD C7 FA 3E 18 11 00 00 06 01 CD C7 FA C3 69 F9B0 00 21 8A FE CD B8 FA 3E 24 D3 5F C3 00 F0 3E 01 F9C0 D9 57 D9 3E 20 CD 3F FB CD FF FA CD 24 FB 3E 26 F9D0 D3 5F 21 3E FE 11 C9 FE CD 03 F0 3E F1 32 FC 00 F9E0 16 02 CD 06 F0 E5 21 49 FE 11 CF FE CD 03 F0 3E F9F0 F3 32 FC 00 16 04 CD 06 F0 D1 E5 21 91 FE CD B8 FA00 FA 7B CB 3F CB 3F CB 3F CB 3F 0E F2 CD 88 FD 7B FA10 E6 0F 0E F1 CD 88 FD 7B D3 5F E1 E9 3E 07 11 70 FA20 00 06 01 CD C7 FA 3E 28 D3 5F C3 C9 F8 D9 79 D9 FA30 3C FE 04 38 02 3E 01 21 38 FE CD A7 FA C3 D2 F8 FA40 21 A6 FE CD B8 FA 3E 22 D3 5F C3 00 F0 21 AE FE FA50 CD B8 FA 3E 26 D3 5F C3 00 F0 21 B7 FE CD B8 FA FA60 CD E6 FB F9 3E 2A 11 00 C0 06 04 CD C7 FA 3E C3 FA70 32 66 00 3E 19 D3 5F C3 40 DF 21 C0 FE CD B8 FA FA80 CD E6 FB F9 3E 32 11 00 D0 06 02 CD C7 FA C3 00 FA90 D0 26 20 F5 FE 10 38 04 26 53 D6 10 FE 0A 38 02 FAA0 C6 07 C6 30 6F F1 C9 F5 C5 3D CB 27 4F AF 47 09 FAB0 4E 23 46 C5 E1 C1 F1 E9 CD 6A FD 3E 20 CD 3F FB FAC0 CD FF FA CD 24 FB C9 C5 D3 5F 21 00 F0 01 00 08 FAD0 ED B0 3C 3C C1 10 F0 C9 F5 E5 D9 06 00 D9 21 00 FAE0 00 23 7C FE 10 20 06 D9 06 FF D9 18 06 DB EB CB FAF0 7F 20 EE E1 F1 C9 C5 47 D9 78 D9 B7 78 C1 C9 E5 FB00 D5 C5 21 00 EC 11 01 EC 36 20 01 FF 01 CD 16 FB FB10 ED B0 C1 D1 E1 C9 F5 CD F6 FA 20 06 DB EB CB 7F FB20 20 FA F1 C9 F5 E5 21 00 00 CD A9 FD 3E 20 CD 98 FB30 FB 23 7D FE 81 20 F2 7C FE 07 20 ED E1 F1 C9 F5 FB40 3E 0A D3 8C F1 D3 8D C9 21 00 F0 D9 0E 01 D9 18 FB50 10 21 00 F2 D9 0E 02 D9 18 07 21 00 F4 D9 0E 03 FB60 D9 CD BB FA F5 E5 CD C6 FB D5 E1 CD A9 FD E1 CD FB70 B4 FB 7E CD 16 FB 12 13 CD 98 FB 23 AF BE 20 F2 FB80 23 2F BE 20 E0 21 F0 F5 F1 F5 CD C6 FB D5 E1 CD FB90 99 FD AF CD 3F FB F1 C9 CD AB FB D3 80 F5 3E 1F FBA0 D3 8E 3E 1F D3 8C AF D3 8D F1 C9 F5 DB 8C CB 7F FBB0 28 FA F1 C9 C5 46 23 4E 23 18 01 C5 F5 E5 21 00 FBC0 EC 11 20 00 18 10 C5 46 23 4E 23 18 01 C5 F5 E5 FBD0 21 58 01 11 50 00 78 B7 28 04 19 05 18 F8 06 00 FBE0 09 EB E1 F1 C1 C9 21 FF BF 7E 2F 77 BE 28 03 2B FBF0 18 F7 2F 77 BE 20 F8 C9 C5 D5 E5 CD F6 FA 20 06 FC00 DB EA CB 7F 20 FA DB 85 CB 7F 28 FA 21 56 04 DB FC10 F0 CB 7F 28 F7 2B 7C B5 20 F5 CD F6 FA 20 06 DB FC20 EA CB 7F 20 38 DB 85 2F CB 7F 20 31 DB F0 CB 7F FC30 28 10 18 E6 21 56 04 DB F0 CB 7F 28 F7 2B 7C B5 FC40 20 F5 DB F0 CB 7F 20 FA 47 21 05 00 CD AE FC DB FC50 F0 4F E6 7F B8 20 F8 CB 79 20 D9 18 4D E6 7F FE FC60 0D 20 04 3E 10 18 43 47 D9 7A D9 B7 78 28 08 FE FC70 08 20 04 3E 1F 18 33 FE 3A 30 08 FE 30 38 04 D6 FC80 30 18 27 FE 67 30 08 FE 61 38 04 D6 57 18 1B FE FC90 2A 30 08 FE 21 38 04 D6 10 18 0F FE 47 30 08 FE FCA0 41 38 04 D6 27 18 03 C3 FB FB E1 D1 C1 C9 E5 F5 FCB0 CD BB FC 2B 7C B5 20 F8 F1 E1 C9 F5 D5 11 47 00 FCC0 1B 7A B3 20 FB D1 F1 C9 F5 C5 D5 E5 3E 20 CD 3F FCD0 FB 11 07 00 01 00 EC 21 00 00 3E 20 CD 3F FB E5 FCE0 21 22 FD C5 1A 06 00 4F 09 C1 7E CD F6 FA 20 04 FCF0 CD 16 FB 02 E1 CD 99 FD CD 98 FB 0C 2C 1D 7B FE FD00 FF 20 DC 01 F7 00 11 07 00 21 46 FD 1A C5 4F AF FD10 47 09 C1 7E ED 79 1D 0D 79 FE EF 20 EC E1 D1 C1 FD20 F1 C9 30 31 32 33 34 35 36 37 38 39 41 42 43 44 FD30 45 46 2D 20 4D 52 23 48 4C 50 43 47 4E 51 52 54 FD40 55 56 4A 59 20 53 C0 F9 A4 B0 99 92 82 F8 80 90 FD50 88 83 C6 A1 86 8E BF FF AB 9D B6 89 C7 8C A7 C2 FD60 C8 98 AF 87 C1 E3 E1 91 FF FF F5 C5 E5 0E F7 46 FD70 23 7E ED 79 23 0D 10 F9 79 FE EF 28 07 3E FF ED FD80 79 0D 18 F4 E1 C1 F1 C9 E5 F5 C5 21 46 FD 4F AF FD90 47 09 7E C1 ED 79 F1 E1 C9 F5 3E 0E D3 8C 7C D3 FDA0 8D 3E 0F D3 8C 7D D3 8D F1 F5 3E 12 D3 8C 7C D3 FDB0 8D 3E 13 D3 8C 7D D3 8D 3E 1F D3 8C F1 C9 DB 89 FDC0 CB 8F 21 02 FE D3 89 3E 8F D3 82 D3 86 D3 8A 3E FDD0 CF D3 83 08 AF D3 83 08 D3 87 08 3D D3 87 08 D3 FDE0 8B 3E F1 D3 8B 06 0C 78 3D D3 8C 7E D3 8D 23 10 FDF0 F6 06 08 78 C6 0B D3 8C AF D3 8D 10 F6 3E 1F D3 FE00 8C C9 0B 00 0B 48 18 18 00 1A 28 57 50 6F 21 46 FE10 FD C9 0F F9 1C F9 29 F9 36 F9 43 F9 56 F9 66 F9 FE20 76 F9 80 F9 8A F9 97 F9 B1 F9 BE F9 1C FA 40 FA FE30 2D FA 4D FA 5A FA 7A FA 48 FB 51 FB 5A FB 00 00 FE40 42 41 4E 43 4F 3A 20 00 A5 01 00 49 4E 44 49 52 FE50 49 5A 5A 4F 3A 20 00 FF 07 FF 92 86 C7 86 C6 87 FE60 08 AB 86 A1 C0 92 FF 79 92 08 AB 86 A1 C0 92 FF FE70 42 F9 08 83 88 92 F9 C6 FF F9 82 07 C8 C0 AB F9 FE80 87 C0 AF 06 FF FF 83 C0 C0 87 06 FF FF 87 86 92 FE90 87 04 C1 92 86 AF 08 83 88 92 F9 C6 FF 12 92 06 FEA0 FF FF 92 C0 AB 86 07 FF 8E C7 C0 8C 8C 91 08 87 FEB0 86 92 87 FF AF 88 C8 08 83 88 92 F9 46 88 C2 99 FEC0 08 A1 F9 92 88 12 88 C2 B0 05 83 88 AB C6 40 03 FED0 F9 AB 21 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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFB0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 tasm: Number of errors = 0