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)