MSX Experiments | #0 Machinetaal en MSX-BASIC
1. Voorbeeld integratie machinetaal in MSX BASIC
10 REM Hello World
20 REM
30 REM by Gwen De Brul
40 REM
50 SCREEN 0
60 ST=49152
70 L=&H1B
80 FOR I=0 TO L
90 READ A$
110 POKE ST+I,VAL("&H"+A$)
120 NEXT I
130 DEF USR=&HC000
140 USR0(0)
150 data 21,11,C0
160 data 7E
170 data FE,00
180 data CA,11,C0
190 data CD,A2,00
200 data 23
210 data C3,03,C0
220 data C9
230 REM db MESG "Hello World!",0
240 REM DEC data 72,101,108,108
245 data 111,32,87,111,114,108,100,33,0
250 data 48,65,6c,6c,6f,20,57,6f,72,6c
260 data 64,21,0
Regels 10 t/m 140 bevatten het MSX-BASIC programma om de machinetaal, die in de DATA regels staan, in het geheugen te plaatsen. Regels 150 t/m 220 en 260 bevatten de machinetaal opcodes voor het programma. De opcodes kunnen ook gebundeld worden in minder DATA regels, voorlopig en voor deze experimenten zet ik alles per commando op een aparte DATA regel.
Het originele assembly programma staat hieronder.
ld hl, MESG
loop: ld a, (hl)
cp 0x00
jr z, end
call 0x00A2 ;'CHPUT BIOS CALL
inc hl
jr loop
end: ret
MESG: DEFM “Hello World!”
2. Omzetten assembly naar opcodes
Om een assembly programma om te zetten naar opcodes kun je via deze website Z-80 Instructions doen. Elke instructie heeft zijn unieke opcode die je in de tabel kunt terugvinden.
Deze opcodes kun je dan in de DATA regels in een MSX-BASIC lader intypen, zoals je kan zien in het voorbeeld aan het begin.
Zelf gebruik ik ook een klein boekje “zakboekje Z-80” van J.B. Vonk van Kluwer technische boeken ISBN: 90-201-1808-0
Dit is een zeer goed naslagboekje en kan de website vervangen die ik eerder gelinkt heb.
3. Voordelen & Nadelen
A. Voordelen
- Geen bijkomende software nodig
- flexibel in het laden in geheugen
Het grootste voordeel is dat je geen extra software nodig hebt op je MSX, je kan gewoon de listing intypen en gaan met die banaan. Dit brengt ook wel een serieus probleem met zich mee, maar meer daarover bij de nadelen.
Je kan ook gemakkelijk kiezen waar in het geheugen je machinetaal wilt laden. Ik doe dit bij voorkeur in pagina 3 van het MSX geheugen (de bovenste 16K), zo heb ik pagina 1 en 2 beschikbaar voor data. Dit is niet van toepassing voor de experimenten, maar enkel als ik een echt programma ga schrijven.
B. Nadelen
- indien je code verandert moet je bij elke jump of call de psoities herberekenen
- Geen foutmeldingen, bij fout overtypen kan alles direct in de soep draaien
Een van de grootste nadelen is dat je geen foutmeldingen krijgt die je wel krijgt bij het compileren in een assembler zoals bijvoorbeeld bij HiSoft’s GEN80 assembler.
Mij maakt het niet uit omdat het debuggen van een machinetaal programma toch al complexer is dan bij de hedendaagse programmeertalen. Maar met oefenen en de kennis van je eigen programma gaat dit wel iets vlotter.
4. Slot
Dit was een korte introductie in hoe je machinetaal opcodes gebruikt in een MSX-BASIC lader, welke de opcodes in het MSX geheugen zet. Dit is de basis voor alle MSX Experimenten die ik ga toevoegen aan mijn website.