Naar inhoud springen

Programmeren in TI-83+ Assembly/Applications/Verschillen in de code

Uit Wikibooks

Programmeren in TI-83+ Assembly

Voorblad / Inhoudsopgave

Assembly-basis

1 · 2 · 3 · 4 · 5 · T

Controle

1 · 2 · 3 · 4 · 5 · T

Geheugenbeheer

1 · 2 · 3 · 4 · 5 · T

Input en output

1 · 2 · 3 · 4 · 5 · T

Tekenen

1 · 2 · 3 · 4 · 5 · T

Registers en procedures

1 · 2 · 3 · 4 · 5 · T

Applications

1 · 2 · 3 · 4 · T

Gebruikersvariabelen

1 · T

Extra

1 · T

Speciaal

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:

  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.

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.