Programmeren in TI-83+ Assembly/Applications/Verschillen in de code
In deze paragraaf leer je verschillen tussen "gewoon" Assembly in Applications wat betreft de code.
Een Application afsluiten
[bewerken]Een Assembly-programma kun je afsluiten met ret. Bij een Application werkt dit niet. Je moet een Application afsluiten met
bjump(_JForceCmdNoChar)
Overigens gaat het springen vanuit subroutines wel nog gewoon met ret. De hierboven genoemde instructie is alleen bedoeld voor het beëindigen van de Application.
Sommige bcalls werken niet meer
[bewerken]Sommige bcalls die je bij Assembly geleerd hebt, werken niet meer in Applications. Dit komt omdat Applications in het Archief draaien, en Assembly-programma's in het RAM. Hieronder zie je manieren om de functionaliteit van deze bcalls toch te kunnen gebruiken.
bcall(_PutS)
[bewerken]bcall(_PutS) werkt niet meer omdat de tekst in het RAM-geheugen moet staan. Er zijn dus twee manieren om dit op te lossen:
- De tekst tijdelijk naar bijvoorbeeld
appBackUpScreenverplaatsen. bcall(_PutS)zelf programmeren.
Meestal is de tweede optie makkelijker, vooral omdat bcall(_PutC) wel werkt. Je kunt dus met een soort lus ieder karakter afzonderlijk op het scherm zetten.
Hieronder zie je een voorbeeld van de Hello World-Application, volgens de tweede manier (vul de standaardcode en de header zelf aan):
BeginApp:
ld hl, $0000 ; CurCol en CurRow inladen
ld (CurCol), hl
ld hl, HelloTekst ; Tekst inladen
call StringSchrijven ; Is dus gelijk aan bcall(_PutS)
bcall(_GetKey) ; Wachten totdat er op een toets gedrukt wordt
bjump(_JForceCmdNoChar) ; Terug naar TI-OS
StringSchrijven: ; Deze subroutine schrijft de tekst op het scherm
ld a, (hl) ; Een letter van de tekst in a zetten
ret z ; Als a = 0, dan stoppen met schrijven en de routine beëindigen.
bcall(_PutC) ; Als het geen 0 is: op het scherm schrijven
inc hl ; hl verhogen, zodat we de volgende lus de volgende letter nemen
jr StringSchrijven ; Terug naar het begin van de subroutine
HelloTekst:
.db "Hello world!", 0
Merk op dat bcall(_PutC) de cursor direct naar rechts schuift (in tegenstelling tot bcall(_PutMap)) en daarom hoeven we de cursor niet handmatig door te schuiven.