Programmeren in TI-83+ Assembly/Speciaal/Antwoorden van de opdrachten
Hieronder vind je de antwoorden van de opdrachten, gesorteerd op paragraaf.
1.3 Registers
bewerkenOpdracht:
- Maak een programma dat het getal 14 in het register a laadt, en dit daarna overzet naar register b.
Vul de standaardcode zelf aan.
ld a, 14 ; 14 in a laden ld b, a ; a in b laden ret ; terug naar TI-OS
1.4 Variabelen
bewerkenOpdracht:
- Maak een programma met een variabele Getal, die aan het begin van het programma 0 bedraagt. Aan het eind van het programma moet de variabele 2 bedragen.
Vul de standaardcode zelf aan.
ld a, 2 ; 2 in a laden ld (Getal), a ; het getal in a in Getal laden (haakjes!) ret ; terug naar TI-OS Getal: .db 0
Merk op dat je 2 niet direct in (Getal) kunt laden, dit moet via een register (in dit geval a).
2.1 Springen en subroutines
bewerkenOpdracht:
- Maak een programma dat vier keer een tekst op het scherm schrijft. Gebruik daarvoor een subroutine met een bcall. Roep deze vier keer aan.
Vul de standaardcode zelf aan.
call TekstSchrijven ; TekstSchrijven aanroepen call TekstSchrijven ; ... en nog een keer ... call TekstSchrijven call TekstSchrijven ret ; Terug naar de TI-OS. TekstSchrijven: ; Let op, níét PenCol instellen, want dan zouden de "Hallo!"'s iedere keer op dezelfde plek komen! ld hl, Tekst ; Laad het label in hl. bcall(_PutS) ; Zet de tekst, die staat vanaf hl (dus het label) op het scherm. bcall(_NewLine) ; Zet de cursor op de volgende regel op kolom 0. ret ; Terug naar de hoofdmodule. Tekst: ; Label Tekst .db "Hallo!", 0 ; Voeg aan het programma de tekenreeks "Hallo!" toe, gevolgd door een nul.
2.5 Loops
bewerkenOpdracht:
- Pas de opdracht van paragraaf 1 van dit deel aan, en gebruik nu een for-loop.
Vul de standaardcode zelf aan. Deze oplossing is nog niet getest!
ld b, 4 BeginLoop: call TekstSchrijven ; TekstSchrijven aanroepen djnz BeginLoop ; Één aftrekken van b en als het resultaat niet 0 is, naar BeginLoop springen EindLoop: ret ; Terug naar de TI-OS. TekstSchrijven: ; Let op, níét PenCol instellen, want dan zouden de "Hallo!"'s iedere keer op dezelfde plek komen! ld hl, Tekst ; Laad het label in hl. bcall(_PutS) ; Zet de tekst, die staat vanaf hl (dus het label) op het scherm. bcall(_NewLine) ; Zet de cursor op de volgende regel op kolom 0. ret ; Terug naar de hoofdmodule. Tekst: ; Label Tekst .db "Hallo!", 0 ; Voeg aan het programma de tekenreeks "Hallo!" toe, gevolgd door een nul.
Opmerking: in dit geval is het niet veel korter, maar vooral bij 5 of meer herhalingen is dit erg nuttig.
4.4 getKey
bewerkenOpdracht:
- 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.
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
5.1 De tekenbuffer
bewerkenOpdracht:
- Probeer om het hele scherm zwart te maken. Hint: je kunt een for-loop gebruiken.