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
appBackUpScreen
verplaatsen. 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.