- Code: Select all
;-----> Copy the gbuf to the screen (fast)
;Input: nothing
;Output: graph buffer is copied to the screen
fastCopy:
di
ld a,$80
out ($10),a
ld hl,plotSScreen-12-(-(12*64)+1)
ld a,$20
ld c,a
inc hl
dec hl
fastCopyAgain:
ld b,64
inc c
ld de,-(12*64)+1
out ($10),a
add hl,de
ld de,10
fastCopyLoop:
add hl,de
inc hl
inc hl
inc de
ld a,(hl)
out ($11),a
dec de
djnz fastCopyLoop
ld a,c
cp $2B+1
jr nz,fastCopyAgain
ret
D'après mes calculs, cette routine dure 51588 T-States.
J'ai vite remarqué qu'en fonction de la TI utilisée, il était parfois possible d'accélérer la routine.
En effet, concernant mes TI-82 Plus et TI-84 Pocket.fr, nul besoin d'attendre un certain délai entre chaque écriture de port (instruction Out) alors qu'avec mon ancienne TI-83 Plus (de 1997), il est impératif d'avoir un délai minimum d'exactement 45 T-States entre chaque out($11),a et bien plus encore concernant ma TI-83 Parcus !
J'ai donc réfléchi à une sorte de super FastCopy destiné aux modèles TI les plus rapides.
Voici ce que ça donne:
- Code: Select all
di ; 4 Interdit les interruptions.
ld a,1 ; (7) bascule en mode
out($10),a ; (11) d'affiche 8-bit.
in a,($10) ; (10) controleur LCD assez rapide?
rla ; (4) bit7 à 1 ? (veut dire "occupé")
jr c,ClassicFastCopy ; (12/7) oui? Alors on pars vers le classique fastcopy.
; sinon, on peut travailler sans délai !
ld hl,plotSScreen+767 ; 10 Fin du buffer (=coin inf.droit).
ld c,$11 ; 7 Port de données (lcd data port).
ld a,6 ; 7 Après chaque "out($11)," (data port), la pos. d'écriture
out($10),a ; 11 video bougera d'1 octet vers la gauche.
ld a,$2b ; 7 colonne 12 (tout à droite)
out($10),a ; 11
ld a,$bf ; 7 et dernière ligne tout en bas, donc on
ligne:
out ($10),a ; 11 modifie la position verticale.
outd ; 16 Equivaut à out(c),(hl) / dec hl / dec b
outd ; 16 Ecriture d'une
outd ; 16 ligne
outd ; 16 entière
outd ; 16 de
outd ; 16 données
outd ; 16 (donc 12 octets)
outd ; 16 Lorsque la position d'écriture
outd ; 16 arrive complètement à gauche,
outd ; 16 elle repasse , ensuite,
outd ; 16 automatiquement à l'opposé
outd ; 16 (donc comme au début: tout à droite).
dec a ; 4 On passe à la ligne supérieure.
jp m,ligne ; 10 Pas encore sous $80 ? alors on boucle.
ret ; 10 Terminé.
ClassicFastCopy: ; ici la routine fastcopy classique...
; (...)
Ce qui nous donne un total de 14001 T-States (on a presque divisé le temps précédent par 4 !)
1 T-State=1/6 microseconde à 6Mhz
Ce qui nous donne 13233/6 = env. 2333 microsecondes pour la TI-82 Plus