
J'ai amélioré un poil la page du wiki, mais du coup pour le contenu, je te laisse éditer

.nolist
#include "ti84pce.inc"
.list
.org userMem-2
.db tExtTok,tAsm84CeCmp
.assume ADL=1
di ; bloque les interruptions
ld (sauv_iy+2),iy ; préserve iy
exx ; ainsi que les registres
ld (sauv_bc+1),bc ; bc'
ld (sauv_de+1),de ; de'
ld (sauv_hl+1),hl ; hl'
exx ; car on permutera vers ces registres' au coeur du test
ld hl,$f20030 ; initialise le timer1
ld a,(hl) ; en prenant le soin
and %11000000 ; de ne pas déranger
ld (hl),a ; les timers 2 et 3
inc l
set 1,(hl) ; On veut 1 chrono (et pas un compte-à-rebours)
ld bc,1000 ; On va tester 1000x la même chose
L00p: ld de,-145 ; remet à -145 le compteur (valeur 32bits)
ld hl,$f20000 ; histoire d'avoir comme résultat 0
ld (hl),de ; lorsque rien n'est à mesurer
ld l,3 ; (c'est une tare!)
ld (hl),$ff
ld l,$30
timer_on: set 0,(hl) ; lance le chrono
exx ; bascule en registres ' (pour préserver bc, de & hl)
ld (sauv_sp+1),sp ; sauvegarde l'état de la pile SP
ld ix,EnRam
ld iy,EnRam
ld hl,EnRam
ld de,EnRam
ld bc,30
ld a,5
;-------------------------- Placer ici ce que l'on veut mesurer
cpir
;-------------------------------
exx ; revient vers l'utilisation de bc, de & hl
timer_stop: res 0,(hl) ; on stoppe le chrono
sauv_sp: ld sp,0 ; rétabli l'état de la pile
ld l,h ; lit le compteur
ld de,(hl) ; et le compare
ld hl,(resultat) ; au meilleur des scores
sbc hl,de ; précédents...
jr c,pass ; C'est plus bas?
ld (resultat),de ; Alors on actualise
pass: dec bc ; sinon on décremente
ld a,b ; le compteur de boucle
or c ; Pas encore à 0 ?...
jr nz,L00p ; Alors on boucle!
exx ; restaure
sauv_bc: ld bc,0 ; les valeurs initiales
sauv_de: ld de,0 ; stockées dans bc' , de' , & hl'
sauv_hl: ld hl,0
exx
sauv_iy: ld iy,0 ; restaure iy
ld hl,(resultat) ; affiche le résultat retenu
jp _DispHL
;------------------------------------
Sprog: ret ; pour tester les CALL...
resultat: .db $ff,$ff,$ff ; contient le résultat
EnRam: .db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
ld bc,$123456 ; 16 / 12
add a,a ; 4 / 3
nop ; 4 / 3
ret ; 21 / 19
;ce code exécuté en Ram:
ld bc,$d40000 ; 16
ld a,(bc) ; 8
ld bc,$e30800 ; 16
ld a,(bc) ; 7
;ce même code exécuté en $e30800:
ld bc,$d40000 ; 12
ld a,(bc) ; 7
ld bc,$e30800 ; 12
ld a,(bc) ; 6
MateoConLechuga wrote:I noticed above that you say you measure 256 times and take the lowest time because the CPU timer sync is not aligned. This is slightly incorrect; you are noticing the variable times because of the DMA access by the LCD, which halts execution of the CPU while it is copying to the screen. Just a heads up, nice work on getting the actual values
Epharius wrote:Oué mais... j'ai eu un bug assez bizarre en voulant écrire dans cette partie de la mémoire. Tu devrais faire un peu attention...
Quand j'ai écris 01 à l'adresse $e0xx08, ma calculatrice est devenue super lente (3 secondes pour effacer l'écran). Il a fallu mettre 0 à cette adresse pour la remettre à la vitesse normale. J'ai d'ailleurs ensuite remarqué que quand c'était un nombre pair, c'était rapide, et impair, c'était lent. Donc ça a bien à voir avec le 8ème bit en partant de la gauche.
Bref, en effet, ce qui m'a fait peur c'est que c'était insensible au RAM CLEARED, mais plus de peur que de mal x)
Return to Langages alternatifs
Users browsing this forum: ClaudeBot [spider] and 2 guests