# Programmeren in TI-83+ Assembly/Assembly-basis/Het eerste programma

Nu zijn we klaar om te beginnen met het eerste programma.

## Het programma maken
### Het programma intypen

Maak in Kladblok een nieuw bestand en typ in:
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

Start een MS-DOS-venster. Dat kan via het startmenu (Opdrachtprompt). Ga nu naar de submap Tasm, bijvoorbeeld met het commando
Sluit af met een enter. Geef daarna het commando
Er komt veel tekst in het DOS-scherm en als alles goed is gegaan, staat er op de laatste twee regels:
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

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?

Nu we weten wat dit programma doet, willen we natuurlijk ook graag weten hoe het werkt.

### Standaard-code

Ieder programma bevat bepaalde regels aan het begin en het eind. Deze regels zie je hieronder.
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.
* De include-file Wil je dit boek naast andere tutorials gebruiken, dan is het verstandig om ti83plus.inc enigszins aan te passen. Sommige tutorials gebruiken namelijk andere versies van dit bestand en dat zorgt ervoor dat programma's uit die tutorials dan niet goed werken of niet compileren. Het grootste verschil is bcall(...), deze wordt door veel andere tutorials geschreven als b_call(...). Dit kan gemakkelijk worden opgelost in ti83plus.inc door de volgende aanpassing te doen: voeg onder de regel
* #define bcall(xxxx) rst 28h \ .dw xxxx
* de volgende regel toe:
* #define b_call(xxxx) rst 28h \ .dw xxxx
Tot zover een korte beschrijving van de standaard-code.

### De rest van de code

We houden nu het volgende stukje code over.
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.
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.
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

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:
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.