Ce asamblor ai incercat?
De curiozitate am facut acum un test folosind "The Z80 assembler"
https://www.nongnu.org/z80asm/
Ma rog, eu sunt mai confortabil pe Linux dar cred ca softul ar merge
si sub Windows. Oricum, pasii au fost asa (cu mentiunea ca eu sunt
cam old-school, intrebati daca e ceva neclar in ce am povestit):
Downloadat asamblorul, dezarhivat intr-un director, compilat (rulat
make in directorul respectiv), copiat binarul rezultat in
/usr/local/bin
Pentru teste am folosit listingul acesta de la cobrasov:
http://cobrasov.com/CoBra%20Project/Software/ROM/Code%20Hacking%20&%20Programming/CoBra%2064K%20STD%20BOOT%20hacking/BOOT_2K_COBRA_64K.html
Copiat textul intr-un fisier si apoi operat urmatoarele modificari:
Sters coloanele cu adrese si valori din partea stanga a liniilor
necomentate, ex:
0000 3E80 LD A,$80
a devenit
LD A,$80
(in principiu am facut asta folosind block select din editor, daca
se doreste trimit aici fisierul rezultat ca sa fie mai clar)
am incercat sa asamblez cu z80asm astfel:
$ z80asm tboot.asm
tboot.asm:1532: error: unable to resolve reference: 07C7
; ---@@@07FD:07->0F
tboot.asm:1532: error: unable to resolve reference: 07EF
tboot.asm:1532: error: unable to resolve reference: D4
tboot.asm:1532: error: unable to resolve reference: 07CB
tboot.asm:1532: error: unable to resolve reference: 07C7
; ---@@@07F3:07->0F
tboot.asm:1532: error: unable to resolve reference: C9
tboot.asm:1532: error: unable to resolve reference: 07E0
tboot.asm:1532: error: unable to resolve reference: 07CC
tboot.asm:1532: error: unable to resolve reference: C6
tboot.asm:1532: error: unable to resolve reference: 07CB
tboot.asm:1532: error: unable to resolve reference: 3F
*** 11 errors found ***
Dupa cum se vede au fost niste problemute in sensul ca anumite
valori hexa din fisierul sursa nu incep cu caracterul $ care sa ii
indice asamblorului ca e vorba despre numere. Cautat si adaugat $ in
fata numerelor respective, majoritatea sunt la coada fisierului, de
exemplu
JR NC,07CB
transformat in
JR NC,$07CB
Si asa mai departe; e putin peste mana caci eroarea e semnalata la
ultima linie din fisier, dar nu au fost multe asa ca nu am sapat mai
in amanunt
Odata operate modificarile respective, fisierul rezultat este
identic cu binarul de pe site.
Alta abordare, complicata dar potential utila in anumite cazuri
specifice:
Ca o mare paranteza, pana acum foloseam un setup destul de dubios,
in sensul ca rulam asamblorul lui Microsoft de CP/M folosind un soi
de runtime de CP/M pentru Linux; motivul pentru gimnastica
respectiva este ca am inceput din nou sa scriu ASM de Z80 pe HC cu
CP/M (adica pe masina fizica) si astea au fost tool-urile pe care le
aveam (incluse parca pe disketa de la HC). Odata ce am inceput sa
plimb fisierele intre PC si HC, mi-a fost mai comod sa folosesc
acelasi asamblor, chiar daca e mai primitiv. Totusi, pentru cazul in
care e cineva interesant, ce am folosit este zxcc
https://www.seasip.info/Unix/Zxcc/
zxcc este instalat, dar in directorul in care fac asamblarea am
programele (de CP/M)
M80.COM si
L80.COM (este important sa fie cu
litere mari) dupa care comenzile de asamblare si linkeditare sunt ca
in CP/M dar prefixate cu zxcc, de exemplu astfel:
zxcc M80 =serial
zxcc M80 =rx
zxcc L80 -rx,serial.rel/s,rx/n/e
1. asambleaza serial.mac in serial.rel
2. asambleaza rx.mac in rx.rel
3. linkediteaza rx.rel si serial.rel in
rx.com
Inca odata precizez ca treaba asta e facuta pe un computer cu
Linux, ba chiar unul nu foarte nou (Slackware 14.2); dar daca
doreste cineva pot porni un Devuan mai modern sau chiar un Pi si
scriu un tutorial step-by-step acolo.
In sfarsit o ultima precizare legata de abordare: Cand te lovesti
de ceva de genul "cum dracului asamblez asta", e util de pornit cu
ceva simplu, de pilda un fisier sursa cu o singura linie (chiar
doar un NOP) si vazut ca iese ce trebuie. Apoi work from there (LD
A,3 de pilda sau etichete, etc), pana cand se pot asambla fara
eror bucati tot mai mari din fisierul sursa.
Treaba e ca asambloarele au directive specifice, stiluri
particulare de scris numere, samd. z80asm pe care l-am gasit acum
e foarte prietenos/tolerant in privinta asta, din fericire.
Succes!