8085 CPU - Disassemblatore per M10 e Tandy 102 

Questo mio disassemblatore per la CPU 80C85 dell'M10, l'ho scritto molti anni 
fa e lo uso da sempre. E' scritto anche per comandare una stampante qualsiasi 
con porta seriale (attivare riga 636 e bloccare la 637) o via parallela. 

I due listati DISX.BA e DATI.DO non si devono cambiare ma si devono caricare 
via RS232 nel PC. DATI.DO non si deve MAI MODIFICARE nella posizione fisica 
che occupa il codice macchina, altrimenti quando questo viene usato dal programma 
disassemblatore, si generano degli errori durante la lettura dei codici macchina 
e nei dati corrispondenti.

Per chiarire meglio, segue il listato Basic del disassemblatore.
Tutti i dati visualizzati sono in decimale.
Spiegazione alcuni punti del programma. 
Riga:
2000 Carica blocco Dati.do.
500 - 530 Usate solo per la costruzione del programma.
610 Esegue la lettura di 1024 byte dall'indirizzo di partenza.
635 Se si usa tutta scrive anche eventuali indirizzi -32768 o caratteri Ascii 
    se presenti.
5000 Indirizzo partenza in memoria dove scrivere i dati o codici in decimale a 
     8 bit.
8000 Indirizzo della memoria dove scrivere un numero decimale a 16 bit. 
I dati (Assembler) vengono caricati in D$(256) e riferimenti numerici in P(256).

Il mio linguaggio Assembler è un misto con i codici dello Z80 corrispondenti.

Ad esempio:  <  Significa - Carica un numero o copia un registro.  
            NN  Significa - Un numero a 16 Bit.
             N  Significa - Un numero a 8 bit.
           (HL)-1 Significa - Diminuisci di uno la memoria indirizzata da HL.

I registri sono: A (singolo) - BC - DE - HL (doppi) e infine SP.

DISX.BA
*************************
1 DEFINT A-Z
3 CLEAR 2500
4 KEY1,"goto600"+CHR$(13)
5 MAXFILES=5
10 DIM D$(256):DIM P(256)
20 PRINT"caricamento dati"
30 GOTO2000
40 STOP
50 GOTO500
90 INPUT"salvataggio dati=S";S$
95 IFS$<>"s"ORS$<>"S"THENSTOP
500 PRINT"immissione dati"
501 INPUT"start";S
502 FOR F=STO256
510 INPUT D$(F)
515 INPUT P(F)
520 PRINT(F-1),D$(F),P(F)
530 NEXTF
600 INPUT"start mem";S
602 INPUT"S=stampante";S$
603 IF S$="S"THEN OPEN"com:87N1D" FOR OUTPUT AS #2
610 FORV=STOS+1024
620 A=PEEK(V)
625 W=V:A=A+1
630 IFP(A)=1THENVS=PEEK(V+1):W=V:V=V+1:GOTO635
633 IFP(A)=2THEN VS=PEEK(V+1)+256*PEEK(V+2):W=V:V=V+2
635 PRINTW;TAB(7)A-1;TAB(13)D$(A);TAB(23)VS'TAB(30)W-32768'TAB(35)CHR$(AAND127)
636 'IFS$="S"THENPRINT#2,W;" ";A-1;" ";D$(A);" ";VS
637 IFS$="S"THENLPRINTCHR$(14);W;" ";A-1;" ";D$(A);" ";VS;CHR$(10)
639 VS=0
640 NEXTV
1040 STOP
2000 OPEN"ram:dati"FOR INPUT AS #1
2010 FOR F=1TO256
2020 INPUT #1,D$(F):INPUT #1,P(F)
2030 NEXT F:CLOSE
2040 CLS:GOTO600
3000 OPEN"ram:dati"FOR OUTPUT AS #1
3005 PRINT"salvo dati"
3010 FORF=1TO256
3020 PRINT #1,D$(F):PRINT #1,P(F)
3030 NEXT:CLOSE
3040 STOP
4020 NEXT
5000 INPUT"star mem per poke";ST
5010 FOR F=STTOST+100
5015 INPUTA
5020 POKEF,A:PRINT F,A
5030 NEXT
5040 GOTO600
8000 INPUT"nr * 2poke";NR
8010 INPUT"mem";M
8020 POKEM,NR-256*INT(NR/256)
8030 POKE(M+1),INT(NR/256):PRINTPEEK(M);"- ";PEEK(M+1)
8040 GOTO8000
*************************   
Segue i listati in modo testo DISX e DATI da scaricare per poi 
copiare all'interno del PC via RS232 Disx diventa DISX.BA e
Dati diventa DATI.DO.
    
....DISX.BA - Disassemblatore per CPU 8085
....DATI.DO - Dati per D$(256) e P(256)

Spero che per alcuni sia utile, sopratutto per chi studia.
Saluti, Emilio - ik1wjq. 

(Vai a pagina1)