Z80 ASAMBLER

54 views
Skip to first unread message

Nicolae Muntean

unread,
Jan 25, 2022, 12:18:23 PM1/25/22
to RomanianHomeComputer
Buna seara la toata lumea 

Am rugamintea de a ma ajuta si pe mine sa inteleg cum sa compilezi un asm pt z80, spre exemplu un cod de boot de pe cobrasov. Am incercat pe un i5 64 cu win 7 64 si primesc doar errori. Daca cineva are un tutorial de la cap la coada ii ramin dator...

MULTUMESC

Mihai Gaitos

unread,
Jan 26, 2022, 6:01:38 AM1/26/22
to romanianho...@googlegroups.com
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!
--
Ați primit acest mesaj deoarece sunteți abonat(ă) la grupul „RomanianHomeComputer” din Grupuri Google.
Pentru a vă dezabona de la acest grup și pentru a nu mai primi e-mailuri de la acesta, trimiteți un e-mail la adresa romanianhomecomp...@googlegroups.com.
Pentru a vizualiza această discuție pe web, accesați https://groups.google.com/d/msgid/romanianhomecomputer/dac0c566-6c4b-4fb3-a480-740f2312787fn%40googlegroups.com.

George Chirtoaca

unread,
Jan 26, 2022, 6:34:16 AM1/26/22
to romanianho...@googlegroups.com
Salut,

Eu am preferat sa fac asamblare pe PC, folosind:
Aveam legat HC-ul la PC prin seriala, si dupa editare (cu EditPlus de exemplu) lansam comanda de asamblare cu o scurtatura si vedeam log-ul in editor. Apoi cu alta scurtatura, trimiteam binarul la HC prin seriala folosind COM2HC (https://github.com/0sAND1s/COM2HC). Sau lansam in emulator Spectaculator binarul impachetat ca fisier .TAP. Sau cand aveam unitate floppy la PC, scriam  binarul pe discheta cu HCDisk (https://github.com/0sAND1s/HCDisk) si plimbam discheta intre PC si HC.


Bogdan Necula

unread,
Jan 26, 2022, 8:48:01 AM1/26/22
to romanianho...@googlegroups.com
salut!

confirm cele spuse de dl. Mihai Gaitos.
o metoda destul de simpla pentru cei cu Windows (>= 10) e sa folosim WSL (un tutorial aici: https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10). 
dupa ce-l avem instalat si configurat, pe Ubuntu sau Debian se instaleaza z80asm cu:

sudo apt install z80asm

si apoi fisierul modificat cum a descris Mihai se asambleaza cu:

z80asm EPROM_2K_COBRA_64K.asm -o EPROM_2K_COBRA_64K.bin

atasez si fisierul modificat, daca vrea cineva sa testeze.

EPROM_2K_COBRA_64K.asm

Nicolae Muntean

unread,
Jan 26, 2022, 11:28:25 AM1/26/22
to romanianho...@googlegroups.com
Buna seara ,

Am reusit ceva cu z80 simulator ide de la oshonsoft.com, care are module de asamblare si dezasamblare  cu exceptia unei singure comenzi :

M_20	DEFM	"ITC BRASOV - 1986-2016" si unde in continuare este DEFM
SI L-EAM MODIFICAT IN DEFB CU MICI PROBLEME LA AFISARE 

VA MULTUMESC MULT , AM SA INCERC TOATE PROPUNERILE.
O SEARA MINUNTA...

Nicolae Muntean

unread,
Jan 29, 2022, 5:11:49 AM1/29/22
to romanianho...@googlegroups.com
Multumesc la toata lumea pentru ajutor.
Cu pasmo am reusit sa compilez ok
Reply all
Reply to author
Forward
0 new messages