Newsgroup: it.comp.retrocomputing
Titolo: Domanda Assemblatore Z80

Sto esercitandomi ad usare un assemblatore z80 per verificare se riesce ad
assemblare correttamente il codice sorgente della mia scheda Ferguson
BigBoard I. Al reset, la CPU esegue una sequenza inserita nei suoi primi 16
bytes:
	DI
ROMRAM:	LD HL,0010H
	LD DE,ROM
	LD BC,0800H
	LDIR
	JP ROM
	NOP
Questa sequenza consente di ricopiare il contenuto della Eprom 2716 da
2Kbyte nella RAM all’indirizzo F000H per poi saltare ad eseguire il codice
ricopiato in RAM.
 
L’assemblatore richiede di inserire 3 indirizzi in esadecimale.
 
1)Inserisci l'indirizzo di base del flash o memoria ROM del sistema. Questa
procedura guidata presuppone che questa zona è contigua, ma il linker non
si limita a questa configurazione
 
2)Inserire l'indirizzo di START di base di RAM nel sistema. Questa
procedura guidata si assume RAM è contiguo al di sopra questo indirizzo il
linker non si limita a questa configurazione
 
3)Inserire l'indirizzo di base di START logica di RAM nel sistema di notare
che gli indirizzi logici sono da 0000 a FFFF. Per un programma
sopraelevata, questo dovrebbe essere vuota per assegnazione automatica.
 
I valori cui pensavo sarebbero:
 
1) 0000H, perché per la ROM l’indirizzo della ROM stessa è 0000H
2) 0000H, perché nel sistema CPM la pagina zero della RAM inizia a 0000H
3) 0000H, perché non impiegando bank switching (non so esattamente cosa
sia) la pagina zero e lo start della RAM  dovrebbe essere ancora 0000H
 
In questo modo però ottengo un file .bin da 62kb come se fosse una immagine
di tutta la RAM da 0000 a F7FF invece che un file da 2Kbyte.  
 
Potreste suggerirmi cosa inserire esattamente?
 
Grazie per ogni utile suggerimento.
Enrico

 Potreste suggerirmi cosa inserire esattamente?
 
Ricopio qui la risposta che ti ho dato per email...
 
Ma esattamente cosa vuoi fare? Modificare il sorgente del firmware e 
assemblarlo?
Se č cosě, il firmware da eseguire č allocato all'indirizzo F000h, quindi 
dovendo assemblare il codice sorgente senza utilizzare un linker lo devi 
allocare a questo indirizzo.
Attenzione, dico "il firmware da eseguire" perchč nella copia vengono omessi 
i 16 bytes del loader (con ld hl,0010h), quindi devi cominciare ad 
assemblare il firmware vero e proprio a partire da F000h escludendo il 
loader, altrimenti ti viene tutto spostato di 16 bytes in avanti.
 
Normalmente l'indirizzo in cui viene allocato il codice č determinato 
dall'istruzione .ORG all'interno del codice stesso. Il fatto che 
l'assemblatore ti chieda tutti 'sti indirizzi mi sembra una decisa 
complicazione...
A sensazione mantenendo il loader direi che devi mettere EFF0h (cioč F000h - 
16 bytes) ed otterresti un file da 2K + 16 bytes, ma č una supposizione.
 
Io utilizzerei TASM come assemblatore, che č piů semplice, e subito prima 
della label "ROM:" nel codice ci metterei un bel .ORG F000h. Poi toglierei 
le istruzioni del loader (i 16 bytes che hai riportato) e assemblerei. Cosě 
ottieni sicuramente l'assemblato pulito del firmware (senza loader) allocato 
ad F000h e quindi eseguibile correttamente dalla macchina (dopo essere stato 
rilocato dal loader).
 
Poi, dovendo includere il programma assemblato in nuova rom, occorre 
aggiungere i 16 bytes del loader in testa al file binario assemblato e 
programmare la rom.
 
C'č solo una cosa che non mi quadra: la rom originale č da 2K? Perchč con 
quelle istruzioni del loader si vanno a rilocare in ram 16 bytes oltre la 
fine della rom (infatti in BC c'č 0800h e non 07F0h, dato che HL parte da 
10h). Ma puň essere semplicemente un errore "originale"...
 
Ciao.
Roberto
 
 

IDEM
 
Cia Roberto,
rileggendo la tua email mi sono venute in mente alcune riflessioni. 
 
Ho cambiato ogni macroistruzione del sorgente assembler della mia board
come indicato qui in fondo 
http://www.oshonsoft.com/z80helptopics.html
 scoprendo che sicuramente il
sorgente originale era scritto con 
http://www.cs.vassar.edu/cgi-bin/man/man2html?z80-asm+5
 per via delle
macroistruzione che conteneva.
 
Alcune cose ho dovuto impostarle a mano, ma finalmente il sorgente con le
macroistruzioni “riconvertite” per il TASM è IDENTICO alla copia originale
della mia eprom. 
 
Grazie
Enrico
 

 della mia eprom.
 
scusami, ma se hai individuato l' assemblatore originale in un programma 
opensource *nix scaricare la tarball, compilare e poi assemblare no ???????
 
(il tutto l' ho fatto in 5 minuti: si compila senza problemi out-of-box 
(salvo un bel po' di warnings, come l' autore stesso segnala nella sua 
webpage...) ed in più ci sta un buon emulatore-debugger.....)
 
e be, se non altro, hai fatto un buon esercizio di hacking (e comunque, 
in alcuni ambienti retrocomputing/emulatori/homebrew il problema "WTF e' 
l' assembler usato" è noto (di sicuro nell' ambiente homebrew NES, 
ricordo un thread sul come identificare l' assemblatore usato nei sources)
 
Saluti,
dott. Piergiorgio.