Programmeren in TI-83+ Assembly/Assembly-basis/Het eerste programma
Nu zijn we klaar om te beginnen met het eerste programma.
Het programma maken
[bewerken]Het programma intypen
[bewerken]Maak in Kladblok een nieuw bestand en typ in:
.nolist
#include "ti83plus.inc"
.list
.org $9D93
.db t2ByteTok, tAsmCmp
bcall(_ClrLCDFull) ; wis het LCD-scherm
ret ; terug naar de TI-OS
.end
.end
Sla het bestand op als clrscrn.z80 in de map Source. Let op: een bestandsnaam van een programma mag alleen uit letters bestaan en niet meer dan acht tekens bevatten!
Het programma compileren
[bewerken]Start een MS-DOS-venster. Dat kan via het startmenu (Opdrachtprompt). Ga nu naar de submap Tasm, bijvoorbeeld met het commando
cd C:\Asm\Tasm
Sluit af met een enter. Geef daarna het commando
asm clrscrn
Er komt veel tekst in het DOS-scherm en als alles goed is gegaan, staat er op de laatste twee regels:
==== Klaar; het programma is opgeslagen in Exec\clrscrn.8xp ==== ==== Klaar ====
Het programma is nu klaar. De volgende stap is om het te testen.
(2/12/'12) In DosBox lukt het niet om met het geleverde .bat bestand het .Z80 bestand te assembleren. Omdat 64-bits versies van Windows geen 16-bits modus meer hebben, heb je dus een 32-bits versie van Windows nodig.
Het programma testen
[bewerken]Open nu de TI-83 Flash Debugger. Klik op de knop Nieuw (met het vel papier erop). Klik op TI-83 Plus. Je ziet nu een scherm met bovenin een menubalk, klik hierin op Load en dan op RAM File... en open de map Asm\Exec. Open het bestand CLRSCRN.8XP. Klik dan op het zwarte driehoekje om de rekenmachine te starten.
Je ziet nu een rekenmachine op het scherm. Klik achtereenvolgens op 2nd en dan op Catalog (boven de 0). Ga met de pijltjes naar Asm( en klik op de Enter-knop. Klik op PRGM en druk op Enter als het programma CLRSCRN geselecteerd is. Druk nogmaals op Enter om het programma uit te voeren. Er kunnen nu twee dingen gebeuren:
- Het scherm wordt leeg en er verschijnt Done op het scherm. Alles is goed gegaan: ga door naar de volgende paragraaf.
- Het scherm wordt leeg en het RAM wordt gewist. Het programma is gecrasht. Controleer of je alles goed hebt uitgevoerd... Als je er niet uitkomt, ga dan naar Problemen.
Hoe werkt dit programma?
[bewerken]Nu we weten wat dit programma doet, willen we natuurlijk ook graag weten hoe het werkt.
Standaard-code
[bewerken]Ieder programma bevat bepaalde regels aan het begin en het eind. Deze regels zie je hieronder.
.nolist
#include "ti83plus.inc"
.list
.org $9D93
.db t2ByteTok, tAsmCmp
; Het programma komt hier.
.end
.end
Alle regels die je hierboven ziet, staan dus in ieder programma dat je schrijft. Het gaat er nu niet helemaal om wat iedere regel van deze standaard-code doet, maar hieronder staat een kleine samenvatting.
- .nolist Dit heeft te maken met een list-file die TASM genereert. Een list-file is een bestand met uitgebreide informatie over het gegenereerde programma. Als je de hele ti83plus.inc laat opnemen in de list-file, wordt die wel erg lang. Daarom wordt die hier uitgezet.
- #include "ti83plus.inc" Het bestand ti83plus.inc wordt hier ingevoegd in de broncode. Dit bestand zorgt ervoor dat je commando's kunt geven met hun namen en niet met hun hex-codes.
- .list De list-file wordt hier weer aangezet.
- .org $9D93 Dit geeft aan waar het programma wordt geladen in het geheugen.
- .db t2ByteTok, tAsmCmp Dit vertelt de rekenmachine in welke codering het programma is geschreven.
- .end Het einde van het programma. Er staan er twee, omdat TASM de laatste regel in het bestand soms overslaat, en op deze manier weten we zeker dat TASM een
.end
meekrijgt.
Tot zover een korte beschrijving van de standaard-code.
De rest van de code
[bewerken]We houden nu het volgende stukje code over.
bcall(_ClrLCDFull) ; wis het LCD-scherm
ret ; terug naar de TI-OS
Dat ziet er al veel beter uit, toch? Regel voor regel zal ik uitleggen wat dit betekent.
Gedeelten achter een puntkomma zijn commentaar, hier doet de rekenmachine dus niets mee.
bcall(_ClrLCDFull) ; wis het LCD-scherm
Dit is een rom-call: een aanroep aan de rekenmachine om iets te doen, in dit geval dus het scherm leegmaken. Rom-calls worden altijd voorafgegaan door bcall
, daarachter komt tussen haakjes de opdracht die je geeft. Deze opdrachten worden in ti83plus.inc omgezet in hexadecimale codes, waar de rekenmachine mee overweg kan. Vandaar de opdracht #include "ti83plus.inc" aan het begin, anders zou je de hex-codes in moeten geven.
ret ; terug naar de TI-OS
Deze regel zorgt ervoor dat de processor in de rekenmachine weer teruggaat naar de TI-OS, het besturingssysteem van de rekenmachine. Zonder deze regel zou het programma crashen (en het RAM-geheugen dus wissen) omdat de TI-OS nooit meer bereikt wordt. Denk er dus altijd aan om deze regel in te geven...
De list-file
[bewerken]Zoals hierboven al aangegeven, maakt TASM tijdens het assembleren een zogenaamde list-file of listing. De list-file komt bij de bronbestanden in de source-map te staan. Hieronder zie je de listfile die TASM genereert bij het bovenstaande programma:
0003 0000 .list 0004 9D93 .org $9D93 0005 9D93 BB 6D .db t2ByteTok, tAsmCmp 0006 9D95 0007 9D95 EF bcall(_ClrLCDFull) ; wis het LCD-scherm 0007 9D96 40 45 0008 9D98 C9 ret ; terug naar de TI-OS 0009 9D99 0010 9D99 .end 0011 9D99 .end tasm: Number of errors = 0
In de eerste kolom staan de regelnummers in je bronbestand. In de tweede kolom (vier tekens) staat het adres waarop in de rekenmachine de instructie zal komen te staan. Achter deze vier tekens staat (niet bij alle regels) de hexadecimale waarden die TASM genereert. Je ziet bijvoorbeeld dat ret
vertaald wordt als C9
. Ten slotte zie je het programma zelf. Bovendien worden ook foutmeldingen en dergelijke in de listing opgenomen.
Op dit moment is de listing nog niet erg nuttig, maar in een later stadium kun je hier wel informatie uit halen.