< Programmeren in TI-83+ Assembly < Applications

Programmeren in TI-83+ Assembly

In deze paragraaf leer je verschillen tussen "gewoon" Assembly in Applications wat betreft de code.

Een Application afsluiten

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

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)

bcall(_PutS) werkt niet meer omdat de tekst in het RAM-geheugen moet staan. Er zijn dus twee manieren om dit op te lossen:

  1. De tekst tijdelijk naar bijvoorbeeld appBackUpScreen verplaatsen.
  2. 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.

This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.