Simulatore per Z80

« Older   Newer »
  Share  
connesso
view post Posted on 4/12/2012, 20:55




Un saluto a tutti. Sto cercando un simulatore gratuito per il vecchio microprocessore Z80 e in rete ho trovato questo (scritto in java):

Zim Simulator:
purtroppo il forum non mi lascia inserire l'Url per il download del programma e del suo manuale, ma se cercate con Google lo trovate facilmente.

Tuttavia non riesco a capire con quale tipo di file far funzionare questo simulatore. Ho provato a creare semplici binari eseguibili in linguaggio macchina Z80, ma nessuno sembra caricarsi in memoria correttamente. E' possibile che stia commettendo un qualche banale errore di formato.

Purtroppo questo simulatore non è più attivamente mantenuto e non so chi contattare per chiarimenti. Qualcuno per caso lo ha usato e mi sa dare qualche idea?

Grazie!
 
Top
thermidor
view post Posted on 4/12/2012, 23:16




Lawrence saprà sicuramente aiutarti con un simulatore anche migliore, tra l' altro se guardi sul sito dovrebbe pure esserci.
 
Top
connesso
view post Posted on 5/12/2012, 08:14




Grazie per la risposta, ma non sono riuscito a trovare nessun altro simulatore, almeno per ambiente Windows. In realtà ne ho trovato un altro, ma altrettanto spartano e più complesso (devo usarlo a scuola con i miei studenti). Ma accetto volentieri suggerimenti!
 
Top
view post Posted on 5/12/2012, 09:15
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Bene, l'URL in questione è questo:

www.natmac.net/zim/

Un copia e incolla è sufficiente per il forum ad inserire il link.

Però, l'oggetto funziona in modo macchinoso, troppo macchinoso per i miei gusti. Un pò come usare un PC con schede PCI di I/O per accendere le lampade di casa. Tutti gli interruttori vanno a finire sulle schede di ingresso e dei relay pilotati dalle schede di uscita accendono le lampade di casa. Poi c'è Windows che tramite un link in rete fa girare su di un server un programma in java che riflette sulle uscite gli ingressi. Troppo casino per i miei gusti.
Circa trenta anni fa montai una macchina con un intel 8080A e tramite porte TTL riuscivo a controllare tutte le funzioni del computerino così montato, inserire direttamente i codici in memoria, fare il trace ecc... naturalmente tutto in binario. La stessa cosa si può fare con uno Z80, ed in effetti tanti codici sono perfettamente uguali. Se devi fare qualcosa con degli alunni ti consiglio di sviluppare una macchina di questo tipo come esercitazione. Non servirà a un tubo, perchè oggi l'informatica è tutta spazzatura o quasi, però alla fine, se non altro avranno idea di cosa ci sta dietro ai computer di ogni età.
 
Web  Top
connesso
view post Posted on 5/12/2012, 17:47




Condivido almeno in parte le tue considerazioni, Lawrence, ma... a parte tutto, sei capace di farlo funzionare? Io non ci sono riuscito in nessun modo. Eppure in teoria sembra semplice: basta fare File-Open program e caricare nella ROM un binario per Z80. In realtà sembra non si riesca a caricare proprio nulla. Non riesco a capire...
 
Top
view post Posted on 5/12/2012, 17:53
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Non so proprio come fare, non ho esperienza in casini internet e programmi java che girano su un server remoto e non so esattamente come andare a fare il download su quel server di un file in formato chissà come. Forse vuole il codice binario, forse vuole un file intel ascii, forse vuole un file in assembler in chissà quale forma e chissà come... Troppi forse, ma e chissà per i miei gusti. Mi dispiace non so aiutarti. :(
 
Web  Top
connesso
view post Posted on 6/12/2012, 07:16




Una precisazione: non è un programma che gira su un server remoto. Si tratta di un programma eseguito in locale, basta avere java installato sul proprio pc.

Per quanto riguarda il formato del file, io ho provato:
a) con un file binario (costruito a mano da me e assemblato con un assemblatore)
b) con un file di testo contenente codice assembly
c) con un file in formato intel Hex

Ci sono altre prove che posso ragionevolmente tentare?
Grazie
 
Top
thermidor
view post Posted on 6/12/2012, 09:07




Ti dirò, l' ho provato effettivamente è un po' macchinoso. Ad ogni modo io gli ho caricato questo file DEMO.Z80 il cui contenuto è:

;----------------------------+
; PROGRAMMA DIMOSTRATIVO |
;----------------------------|
;SORGENTE : DEMO.Z80 |
;FOGLIO ASSEMBLER: ASSEMB.TXT|
;CODICE PER EPROM: ASSEMB.BIN|
;----------------------------+

ORG #9F00
NVOLTE EQU 2
LD A,#F0
LD I,A
IM 2
EI
LD B,NVOLTE
LOOP CALL SOMMA
CALL EXTERN
CALL SHIFT
DJNZ LOOP
HALT

; SUBROUTINE DI SOMMA
; DIMOSTRATIVO

SOMMA PUSH AF ;SALVA
PUSH HL ;REGISTRI
PUSH IX
LD HL,#21FE
LD A,#15
LD (HL),#17
ADD A,(HL)
DAA ; FORMATO BCD
SCF
LD IX,10
LD (IX-1),#1F
INC IX
ADC A,(IX-2)
POP IX ;RIPRISTINA
POP HL ;REGISTRI
POP AF
RET

; SUBROUTINE DI INPUT/OUTPUT
; DIMOSTRATIVO

EXTERN PUSH AF ;SALVA
PUSH IX ;REGISTRI
IN A,(#E6)
LD IX,#1EF5
LD C,A
INC (IX+16)
OR A
SBC A,(IX+16)
OUT (C),A
DEC A
DEC C
OUT (C),A
POP IX ;RIPRISTINO
POP AF ;REGISTRI
RET

; SUBROUTINE DI SHIFT
; DIMOSTRATIVO

ORG #7000

SHIFT PUSH DE
PUSH IY
LD D,128
LD IY,#30F0
LD (IY+9),#FF
LD E,3
LOOP2 SLA (IY+9)
RL D
DEC E
JR NZ,LOOP2
POP IY
POP DE
RET

Lanciato effettivamente gira, e genera un file di log con tutto il trace:

DEC SP
JR NZ 32
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
DEC L
LD A, H
DEC C
LD A, (BC)
DEC SP
LD D, E
LD C, A
LD D, D
LD B, A
LD B, L
LD C, (HL)
LD D, H
LD B, L
JR NZ 32
LD B, L
LD C, L
LD B, D
LD C, H
LD B, L
LD D, D
LD A, (0x4120)
LD D, E
LD D, E
LD B, L
LD C, L
LD B, D
LD L, 0x54
LD E, B
LD D, H
LD A, H
DEC C
LD A, (BC)
DEC SP
LD B, E
LD C, A
LD B, H
LD C, C
LD B, E
LD B, L
JR NZ 80
LD C, H
LD D, H
LD B, L
JR NZ 69
JR NZ 32
LD C, L
LD B, C
DEC C
LD A, (BC)
JR NZ 32
LD D, E
LD C, B
LD C, C
LD B, (HL)
LD D, H
DEC C
LD A, (BC)
JR NZ 32
LD A, (BC)
DEC SP
JR NZ 83
LD D, D
LD B, L
LD B, A
LD C, C
LD D, E
LD D, H
LD D, D
LD C, C
DEC C
LD A, (BC)
JR NZ 32
LD B, (HL)
LD B, L
DEC C
LD A, (BC)
JR NZ 32
INC HL
LD SP, 0x0D37
LD A, (BC)
JR NZ 32
JR NZ 70
JR NZ 32
JR NZ 32
JR NZ 32
LD B, C
LD B, (HL)
DEC C
LD A, (BC)
JR NZ 32
LD D, L
LD D, H
CPL
LD C, A
LD D, L
LD D, H
LD D, B
LD D, L
LD D, H
DEC C
LD A, (BC)
DEC SP
JR NZ 68
LD D, E
LD D, H
LD D, D
LD C, C
DEC C
LD A, (BC)
JR NZ 32
LD E, B
INC L
INC HL
LD SP, 0x4645
DEC (HL)
DEC C
LD A, (BC)
JR NZ 32
LD SP, 0x2936
DEC C
LD A, (BC)
JR NZ 32
LD SP, 0x2936
DEC C
LD A, (BC)
JR NZ 32
DEC C
LD A, (BC)
JR NZ 32
DEC C
LD A, (BC)
JR NZ 32
JR NZ 32
LD B, L
LD D, H
DEC C
LD A, (BC)
DEC C
LD A, (BC)
DEC SP
JR NZ 83
JR NZ 32
JR NZ 32
LD E, C
DEC HL
ADD HL, SP
ADD HL, HL
INC L
INC HL
LD B, (HL)
LD B, (HL)
DEC C
LD A, (BC)
JR NZ 32
ADD HL, SP
ADD HL, HL
DEC C
LD A, (BC)
JR NZ 32
JR NZ 32
DEC C
LD A, (BC)
JR NZ 32
NOP
NOP
NOP
NOP

Di più non so, io sono analogico.
 
Top
thermidor
view post Posted on 6/12/2012, 09:35




In realtà è stato un puro caso, ossia non è che ha capito l' assembly, ha caricato l' esadecimale del testo e ha girato con le istruzioni, casuali che ha trovato.
In pratica mi pare che gli si debba dare proprio un file esadecimale, però effettivamente è incasinato sto simulatore.
 
Top
connesso
view post Posted on 6/12/2012, 12:53




Eh mi ero accorto anche io che dandogli un file esadecimale legge qualcosa, ma quel qualcosa non corrisponde al testo scritto! E' veramente un rebus. Non riesco a capire come dovrebbe funzionare, eppure sono sicuro che deve esserci un modo.
Grazie!!!
 
Top
thermidor
view post Posted on 6/12/2012, 14:07




Certo vuole il file esadecimale come fosse quello di una eprom, non ha un assemblatore.
Ci sarebbe da provare anche quello della Oshonsoft, il quale ha anche assembler/disassembler e un compilatore basic:
www.oshonsoft.com/z80.html
 
Top
connesso
view post Posted on 7/12/2012, 17:45




Grazie per la risposta, thermidor. Avevo già visto il simulatore della onshonsoft, ma non è gratis, bisogna pagare 25 dollari! Non posso farlo comprare alla mia scuola...

Per quanto riguarda il file esadecimale, scusa ma non capisco di cosa si tratta. Se è un file binario, contenente i codici operativi e gli operandi delle istruzioni Z80 è facile costruirne uno a mano (basta un qualsiasi edito Hex) e infatti io l'ho fatto... ma non funziona!

Un'altra possibilità è usare un assemblatore, come quello online che si trova qui: [url]http://k1.dyndns.org/cgi-bin/zasm.cgi[/url]

Basta caricare un file di testo con qualche istruzione in linguaggio assembly e lui produce un file binario o un file in formato Intel Hex.
Ovviamente ho provato anche questo, ma senza successo.

Temo che rimarrà per sempre un mistero. Mi consola solo il fatto che pensavo di essere scemo io che non sapevo farlo funzionare...
 
Top
thermidor
view post Posted on 8/12/2012, 14:39




Ma il file che devi usare è il .obj e non il .hex, prova ad usare qualche esempio che trovi se scarichi il demo della Oshonsoft, dovrebbe andare (spero). Comunque continuo a trovare troppo macchinoso quel software.
Non ho capito ma il simulatore serve a te o alla tua scuola?
 
Top
connesso
view post Posted on 9/12/2012, 13:01




Sono riuscito a capire come funziona, anche se non ho ancora capito perché! Il file binario contenente il programma in linguaggio macchina Z80 deve essere così costruito:

- i primi 32 bit (2 byte) devono contenere NOP (codice operativo 00h)
- dal byte 33 in poi si può scrivere il programma

A questo punto il simulatore funziona piuttosto bene.
Qualcuno ha idea del perché i primi due byte devono rimanere vuoti???
 
Top
view post Posted on 10/12/2012, 09:53
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Io credo che ogni simulatore/debugger ha il suo modus operandi o uploader. P.es. lo ZSID del CPM vuole un file binario con indirizzo di partenza del programma a 0100h. Una volta, quando il software era qualcosa di serio, si scriveva con un editor il file in assembler, poi lo si compilava con un assembler tipo ASMZ80 o ZASM, il quale rendeva un codice rilocabile .obj e infine con il loader tipo LODZ80 venivano accorpati tutti i files .obj in un unico file .bin che era un eseguibile a tutti gli effetti. Questo eseguibile poteva essere caricato con un debugger tipo ZSID con il quale si poteva operare in modalità simbolica molto utile. Ora, per semplificare la vita a tutti, si incasina tutto quanto a morte e non si viene a capo più di nulla. Purtroppo.
 
Web  Top
24 replies since 4/12/2012, 20:55   400 views
  Share