Naar inhoud springen

Programmeren in TI-83+ Assembly/Tekenen/Pixels tekenen

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

Het tekenen van losse pixels lijkt nutteloos. Maar vaak is het toch handig om het te kunnen. Bijvoorbeeld, door een for-loop van pixels kun je een lijn tekenen. Als eerste gaan we het geheugenadres bepalen van een pixel waarvan we de x- en de y-coördinaat weten.

Het geheugenadres van een enkele pixel ophalen

[bewerken]

De inhoud van deze paragraaf is nog niet getest en kan fouten bevatten. Je kunt het geheugenadres van een enkele pixel ophalen, bijvoorbeeld om hem zwart of wit te maken, met een bepaalde routine die we zo gaan schrijven. Je moet je daarbij wel bedenken, dat je niet alleen een geheugenadres krijgt, maar ook een bepaalde manier om de bit ín het geheugenadres te bepalen. (Als je dat niet snapt, kijk dan naar de afbeelding linksboven in de vorige paragraaf.)

Eerst schrijven we het algoritme op.

  1. Zet de x-coördinaat (van 0 t/m 95) in b en de y-coördinaat (van 0 t/m 63) in a.
  2. Vermenigvuldig a (= de y-coördinaat) met 12 (iedere rij bevat 96/8 = 12 bytes. Dus dit is eigenlijk het nummer (t.o.v. het begin van de tekenbuffer) van de eerste byte in de rij).
  3. Deel b door 8 (iedere byte bevat 8 pixels). Tel het geheel deel van de deling bij de vorige uitkomst op. Dit is het nummer (t.o.v. het begin van de tekenbuffer) van de byte waarin de gevraagde pixel staat.
  4. Tel hierbij plotSScreen op. We hebben nu het geheugenadres van de byte waarin de gevraagde pixel staat.
  5. De rest van de deling uit stap 3 is het nummer van de bit in de byte (als je van 1 naar 8 telt).

1. Coördinaten laden
Dat moet de aanroeper van de methode doen.

2. Vermenigvuldigen met 12
Hoe doen we dat?

  • Vermenigvuldigen met 2 geeft 2a.
  • Vermenigvuldigen met 2 geeft 4a.
  • Vermenigvuldigen met 2 geeft 8a.
  • 8a + 4a = 12a

Er is alleen één probleem. Stel a=30. Dan 12a=360. Dat past helemaal niet in a... We moeten dus eerst a overzetten op hl om de berekening te kunnen uitvoeren.

    ld h, 0              ; a overzetten op hl
    ld l, a
    add hl, hl           ; dit geeft 2a
    add hl, hl           ; dit geeft 4a
    ld d, h              ; het resultaat van 4a opslaan in de
    ld e, l
    add hl, hl           ; dit geeft 8a
    add hl, de           ; 8a + 4a = hl + de = 12a

3. Delen door 8
Hoe doen we dat? Delen door twee kan met de verschuiving (zie Geheugenbeheer>Verschuivingen) srl. Je gooit de rest dan weg: perfect, want we willen juist het gehele deel.

    srl b                ; dit geeft b/2
    srl b                ; dit geeft b/4
    srl b                ; dit geeft b/8
    ld d, 0              ; b overzetten op de - de is immers toch niet meer nodig, en zo kunnen we gemakkelijk de bij hl optellen
    ld e, b
    add hl, de

4. Optellen bij PlotSScreen
Dat spreekt voor zich:

    add hl, PlotSScreen  ; erbij het begin van de tekenbuffer optellen

5. Nummer van de bit bepalen
Voordat we dit stuk kunnen programmeren, moeten we bedenken hoe we het nummer van de bit willen krijgen. Het is namelijk zo, dat je aan slechts het nummer van de bit niet al te veel hebt. Je denkt misschien dat het mogelijk zou moeten zijn om set en res te gebruiken om de bit aan of uit te zetten, maar dit is niet mogelijk omdat het nummer van de bit al vastligt in de code; het is niet mogelijk om daarvoor bijvoorbeeld een register te gebruiken.

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