Programmeren in TI-83+ Assembly/Input en output/getKey

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in TI-83+ Assembly

Een belangrijk element van input is het geven van een toetsaanslag door de gebruiker. Die kun je opvangen met de bcall _getKey en _getCSC, beide belangrijke bcall's.

_getKey[bewerken]

bcall(_getKey) wacht op een toetsaanslag. Voordat er een toets is ingedrukt, kan het programma dus niet verder. _getKey zet de output (= een toetsnummer van de ingedrukte toets) in het register a.

De toetscodes[bewerken]

Hoe weet je nu welke waarde van a bij welke toets hoort? Dat gaat gemakkelijk omdat alle toetsen zijn gedefinieerd in ti83plus.inc. Zoek naar keypress equates. Alle toetsen beginnen met een k. Bijvoorbeeld de eerste in ti83plus.inc is kRight. Hierop wordt a dus ingesteld als er op het pijltje naar rechts is gedrukt.

2nd en Alpha[bewerken]

_getKey houdt ook rekening met 2nd en Alpha. Dus als er 2nd of Alpha (of Alpha-Alpha, als de lowercase-systeemvlag aanstaat) is ingedrukt, krijg je een andere code in a.

_getCSC[bewerken]

bcall(_getCSC) werkt op een heel andere manier. Deze bcall wacht niet totdat er een toets ingedrukt is, maar hij bepaalt of er een toets ingedrukt is. Als er geen toets ingedrukt is, loopt het programma gewoon door. Dit is vooral handig in spellen e.d. waarbij het ongewenst is dat het programma stopt totdat er een knop ingedrukt is.

Om verwarring te voorkomen: er is in TI-Basic een commando getKey. Deze lijkt meer op de bcall _getCSC dan op de bcall _getKey!

Opdracht[bewerken]

Schrijf een programma dat de toetscode van de ingedrukte toets, die door _getKey wordt teruggegeven, naar het scherm schrijft. Dit programma kun je dan direct gebruiken om een toetscode te vinden, mocht je die niet kunnen vinden.
Je kunt ook proberen om hetzelfde programma met _getCSC te schrijven.

Klap uit voor het antwoord

Versie met _getKey
Een mogelijk antwoord zie je hier. Vul de standaardcode zelf aan.

    bcall(_ClrLCDFull)  ; scherm leegmaken
    bcall(_getKey)      ; de toetscode staat nu in a

    ld hl, 0
    ld (CurRow), hl     ; tekst op bovenste regel
    ld hl, tekst
    bcall(_PutS)        ; tekst "Toetscode:" weergeven

    ld h, 0             ; a overzetten naar hl
    ld l, a

    bcall(_DispHL)      ; hl = toetscode op het scherm schrijven
    bcall(_NewLine)     ; nieuwe regel, anders komt "Done" over het getal te staan

    ret                 ; terug naar de TI-OS

tekst:
    .db "Toetscode:", 0

a wordt hier eerst overgezet naar hl, om ervoor te zorgen dat je deze met bcall(_DispHL) gemakkelijk op het scherm kunt schrijven.

Versie met _getCSC
Zie de versie met _getKey. Je moet enkele dingen aanpassen, dit kun je zelf doen.
Hint: zet _getCSC in een while-loop om ervoor te zorgen dat het programma wacht totdat je een toets ingedrukt hebt. Dus, in pseudocode:

while a=0
    bcall(_getCSC)
end

Het antwoord staat achterin het boek.


ArrowLeftNavbox.svg ← Karakters schrijven getKey Invoer door de gebruiker → ArrowRightNavbox.svg
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.