# Programmeren in TI-83+ Assembly/Inleiding en inhoudsopgave
## Inleiding

Welkom in het wikibook Programmeren in TI-83+ Assembly! Dit boek leert je om te programmeren in de programmeertaal Assembly voor de TI-83+ of de TI-84+. Dit zijn grafische rekenmachines van Texas Instruments. Er is ook een andere programmeertaal op deze rekenmachines, namelijk TI-Basic (zie het wikibook Programmeren in TI-Basic). Je kunt dit boek in principe doornemen en begrijpen zonder programmeerervaring, maar het wordt wel een stuk makkelijker als je al iets van programmeren weet, zodat ten minste de concepten je bekend voorkomen. Het is bijvoorbeeld een goed idee om van tevoren TI-Basic te leren; dit is een eenvoudige programmeertaal die uitstekend geschikt is om programmeerervaring op te doen.

## Wat is assembly?

Assembly is een taal die de processor (bijna) direct kan begrijpen. De processor in de TI-83+ en TI-84+ is de Zilog Z80. Deze processor heeft alleen commando's (zogenaamde instructies) voor heel simpele zaken, bijvoorbeeld een geheugenplek uitlezen en de data in een opslagplaats zetten. Dat betekent dat heel "simpele" structuren (zoals een if- of for-statement in hogere programmeertalen, zoals TI-Basic) volledig met de hand moeten worden gemaakt. Voordat je een programma hebt dat nuttige dingen gaat doen, ben je meestal al pagina's code verder. Echter, je kunt met assembly wel veel meer, want het is veel flexibeler.

## Voordelen en nadelen t.o.v. TI-Basic

Assembly heeft een aantal voor- en nadelen ten opzichte van TI-Basic. Hieronder volgt een kleine opsomming:

### Voordelen

* Assembly is veel sneller dan TI-Basic. Alle geavanceerde spelletjes voor de rekenmachine zou je bijvoorbeeld nooit in TI-Basic kunnen maken, omdat deze programmeertaal daarvoor gewoon te langzaam is.
* Assembly heeft controle over de hele rekenmachine. Je kunt er veel meer mee dan met TI-Basic. De processor wordt namelijk direct aangesproken, zodat je in feite alles kunt doen wat het besturingssysteem ook zou kunnen. Het loont zich dus wel om assembly te leren. Enkele van de vele dingen die mogelijk zijn met assembly:
** de run-indicator uit of aan zetten
** tekst wit drukken op een zwarte achtergrond
** nieuwe variabelen maken (bijvoorbeeld lijsten of AppVars) en ze aanpassen
** bij Applications (ook een vorm van assembly) kun je zelfs de werking van het besturingssysteem aanpassen aan je wensen met zogenaamde Hooks
* Vaak zijn assemblyprogramma's ook nog kleiner dan TI-Basic-programma's, tenzij je alleen commando's zoals Disp gebruikt.

### Nadelen

* Assembly moet op de computer geprogrammeerd en gecompileerd worden, voordat het naar de rekenmachine kan worden overgezonden.
* Assembly is veel moeilijker te leren dan TI-Basic. Dit komt doordat heel veel commando's, die in TI-Basic ingebouwd zijn, eigenlijk een hele lijst assemblycodering bevatten. Denk aan Input; in assembly moet je zoiets helemaal zelf opbouwen door zelf alle toetsaanslagen te registeren, de corresponderende karakters ergens in het geheugen op te slaan en ze op het scherm te zetten, zodat de gebruiker kan zien wat hij heeft getypt.
* Als een assemblyprogramma crasht, is direct het RAM-geheugen gewist (of zelfs erger, als je bijvoorbeeld het besturingssysteem wist met het programma), bij TI-Basic verschijnt er gewoon een foutmelding. Dat komt omdat je de processor bij assembly direct aanspreekt. Daarom is het bij assembly heel belangrijk om de programma's goed te testen voor ze worden verzonden naar de rekenmachine.

## Opzet van dit boek

Dit boek bestaat uit (op dit moment) 9 hoofdstukken. Ieder hoofdstuk bevat een aantal paragrafen; iedere paragraaf staat op een aparte pagina. Op iedere pagina van dit boek staat onderaan de pagina een balkje met de mogelijkheid om naar de volgende of vorige pagina te gaan. Verder staat er op iedere pagina rechts bovenaan een beknopte versie van de inhoudsopgave. Op veel pagina's staan bovendien één of meerdere opgaven. Het wordt aangeraden om deze te maken, want daar leer je het meeste van.

## Inhoudsopgave

* Assembly-basis
** Voorbereiding
** Het eerste programma
** Registers
** Variabelen
** De stack
** Toets
* Controle
** Springen en subroutines
** Optellen en aftrekken
** Het register f
** Voorwaarden
** Loops
** Toets
* Geheugenbeheer
** Getallenstelsels
** Het gebruik van EQU
** Arrays en matrices
** Het gebruik van ldir
** Verschuivingen
** Toets
* Input en output
** Logische en bit-instructies
** Strings schrijven
** Karakters schrijven
** getKey
** Invoer door de gebruiker
** Toets
* Tekenen
** De tekenbuffer
** Pixels tekenen
** Horizontale lijnen
** Diagonale lijnen
** Werken met sprites
** Toets
* Registers en procedures
** Meer registers
** De indexregisters
** Werking van de stack
** De instructies call en ret
** De OP-registers
** Toets
* Applications
** Het maken van applications
** De header
** Verschillen in de code
** Hooks
** Toets
* Gebruikersvariabelen
** Een variabele aanmaken
** Toets
* Extra
** Debuggen
** Toets
* Speciaal
** Problemen
** De instructieset
** bcalls

## Pdf- en printversie

Een printversie van dit boek is hier te vinden. Een pdf-versie van dit boek is hier te vinden (klik op Downloaden als pdf-bestand).