Schermopkuis
Bij het opstarten van een C64 demo zit er vaak zo een fancy scherm-opkuis-routine bij. Alle karaktertjes vallen weg of schuiven ofzij of worden blokjes die rondzweven. Schuun allemaal… Toch ook eens proberen of ik zoiets vrij simplistisch in elkaar kan boksen denk ik dan.
Al is het maar in BASIC.
10 FOR L = 0 TO 25
20 FOR T = 0 TO 38
30 FOR J = 0 TO 38 – T
40 A = 1024+L*40+J
50 POKE A,PEEK(A+1)
60 NEXT J
70 NEXT T
80 NEXT L
De miserie zit hem in het correct nesten van de nodige loops. Allereerst moet elke lijn leeggemaakt worden. 25 lijnen dus graag 25 keer uitvoeren in loop 1 (regel 10) . De cleanup gaan van rechts naar links dus de lege ruimte aan de rechterkant moet je niet nodeloos blijven herhalen (regel 20). De derde loop werkt dan de overblijvende ruimte aan de linkerkant af van het eerste karakter tot het laatste waar nog een karakter zou mogen staan (regel 30). Vervolgens het schermadres berekenen dat aan de beurt is om “ontvanger” te zijn. Het schermgeheugen begint op adres 1024, hierbij wordt het regelnummer bijgeteld alsook het karakter (regel 40) om vervolgens de inhoudt van het adres dat er zich rechts (dus 1 adres hoger) van bevindt in te copieren (regel 50). En dan nog een kwestie van de 3 loops af te sluiten.
Nu het eens in assembler proberen.. Dat gaat BAK-KEN sneller gaan.
BTW.. Zoek de bug.

By Bud, February 13, 2010 @ 2:52 pm
Dit zal de bug wel zijn:
- De lus op regel 10 loopt van 0 tot 25, dat is 26 keer. Dat moet 25 keer zijn, dus 0 tot 24.
…maar ik tel er nog twee:
- De meest rechter kolom word niet gewist, dus houd je een scherm over met lijnen van dezelfde tekens als de rechter kolom niet leeg is, en houd je geen leeg scherm over.
- De kleur informatie word niet mee naar links verschoven. De kleuren blijven dus staan als de tekens naar links bewegen.
By FRaNKy, February 15, 2010 @ 1:04 pm
Yep, dat zijn ze ongeveer en mijn “goesting” ging op het moment idd niet verder dan dat