Published on Wednesday 21 April, 2021

MSX Experimenten #1 Machinetaal lader in MSX-BASIC

Machinetaal lader in MSX-BASIC

Deze MSX-BASIC code laadt de specifieke opcodes , in de data regels, in het geheugen.

Het voordeel van deze werkwijze is dat je geen extra software nodig hebt om een assembly programma te compileren.

Hieronder vind je de betreffende MSX-BASIC code die dit toelaat te doen.

10 REM ML Loader
20 REM
30 REM by Gwen De Brul
40 REM
50 SCREEN 0
60 ST=&HC000 
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)

Ik ga hieronder in het kort uitleggen wat de code juist doet.

regel 10-40 zijn enkel informatie regels die eigenlijk geen ander belang hebben dan informatie te geven over de naam van het programma en de naam van de programmeur.

regel 50 zet het scherm op “SCREEN 0” dit is op de MSX computers het tekst scherm met 40x24 karakters op een scherm. Dit is ook het standaard weergavescherm op de MSX computers.

regel 60 bevat de locatie waar de machinetaal code moet ingeladen worden. In dit voorbeeld is dit aan het begin van pagina 3 van het geheugen (de bovenste 16K). Ik doe dit op deze locatie omdat ik dan pagina 1 en 2 volledig kan benutten voor programma data.

Natuurlijk is dit voor deze MSX Experimenten niet echt nodig omdat dit korte stukjes code zijn, maar bij echte programmas is dit wel een voordeel.

Je kan deze regel zelf naar believen aanpassen, let wel dat zonder memory switching je enkel pagina 2 en een stukje van pagina 3 ter beschikking hebt. In pagina 3 kan je ongeveer 5KB aan programmacode kwijt.

regel 70 is de grootte van het machinetaal programma dat opgenomen wordt in de DATA regels. Dit is nodig om de lus voor het POKEN van de opcodes in het geheugen te doorlopen.

Het is dus van uiterst belang dat dit de correcte grootte is. Als je de bytes telt in de DATA regels dan moet je daar 1 van aftrekken omdat men vanaf 0 begint te tellen. Dus als een programma 28 bytes telt dan moet je in deze variabele 27 zetten (ofwel &H1B in dit geval). Ik raad aan om zowel de geheugenlocatie als de grootte van het machinetaal programma in hexadecimale notatie te zetten. De opcodes in de DATA regels zijn ook altijd in hexadecimale notatie.

regel 80-120 is de eigenlijk lus om de opcodes in het geheugen te zetten, dit gebeurt aan de hand van de POKE instructie in MSX- BASIC.

Je kan alle MSX-BASIC instructies nakijken op de website MSX-BASIC Instructions.

Normaal neemt de POKE instructie 2 parameters namelijk het geheugen adres en de waarde die er ingezet moet worden. Die waarde is normaal een decimaal getal, dus in ons programma gebruiken we “&H” om aan te geven dat de waarde die we willen invoeren een hexadecimaal getal is.

regel 130 en 140 zijn nodig om aan te geven naar welke geheugenlocatie er moet gesprongen worden om het programma uit te voeren.

regel 130 zet de geheugenlocatie voor USR(0) op “&HC000” dit is de locatie waarop we dus het machinetaal programma hebben ingeladen via dit lader programma in MSX-BASIC.

regel 140 roept dan de instructie aan op die geheugenlocatie, waardoor dus effectief het machinetaal programma gestart word.

Slot

Dit is alles wat nodig is om in MSX-BASIC een machinetaal programma op een bepaalde geheugenlocatie te zetten zodat deze kan uitgevoerd worden.