.nolist #include "ti84pce.inc" .list .org userMem-2 .db tExtTok,tAsm84CeCmp .assume ADL=1 ld hl, $e00105 ; fastest ld (hl),h ; ld hl,Chrs ld de,$d0ea1f-2111 ld bc,2111 ldir ld hl,$d000a4 set 3,(hl) call _RunIndicOff ; désactive le témoin d'exécution ld hl,$d40000 ; mémorise la barre d'état ld de,$d031f6 ; en zone PixelShadow+PixelShadow2+CmdPixelShadow ld bc,19200 ldir ld hl,$007200 ; inscrit la variable Ans ld (OP1+1),hl ; dans OP1 ld (OP1),hl ; (correspond au call _AnsName) call _RclVarSym ; Que contient Ans ?.. cp 4 jr nz,mode8 inc de inc de ld a,(de) cp 112 jr nz,mode8 ld de,$d40000+19200 ld bc,153600-19200 ld a,$2d jr RaTr mode8: ld de,$d40000 ld bc,76800 ld a,$27 RaTr: ld hl,$e40000 ldir ld ($e30018),a ld hl,$d07d24 ld de,$d40000 ld (hl),de ld l,$27 ld (hl),231 ; couleur texte inc hl ld de,$010100 ; zoom haut,zoom larg,couleur de fond ld (hl),de ld hl,$d07d3a ld ($d07d34),hl ; cette adresse contient l'adr d'1 pointeur vers la ld de,$d52c00+338 ld (hl),de ; zone où sera stocké le prochain sprite défini ld hl,PalDat ld de,$d07d00 ld c,36 ldir ld hl,$e30200 ; initialise les 256 couleurs... PaLooP: ld d,b ld a,b and a,%11000000 srl d rra ld e,a ld a,%00011111 and a,b or a,e ld (hl),a inc hl ld (hl),d inc hl inc b jr nz,PaLooP ld hl,CLSCREEN ld de,$e30800 ld bc,972 ldir ld hl,$e00205 ; normal ld (hl),h ret PalDat: .db 2,24,224,0,152,68,194,96,16,59,231,255,222,148,74,41 .db 4,6,7,64,160,98,162,135,199,33,99,165,40,88,216 .db 31,191,22,150,246 ;/////////////////////////////////////////////////////////// CLSCREEN: ld hl,$e00105 ; fastest ld (hl),h ld hl,$007200 ; $72 = token de Ans ld (OP1+1),hl ; que l'on écrit dans OP1 ld (OP1),hl ; (correspond au call _AnsName) call _RclVarSym ; Ans contient une valeur 8bits (couleur) ld hl,OP1+1 dec a jr z,UneLi ; on va la connaître en lisant xor a ; directement le contenu d' OP1 ld e,(hl) ; 128=1chiffre; 129=2chiffres; 130=3chiffres inc hl rld bit 1,e jr nz,TroisC bit 0,e jr z,RaTTr ld b,10 ld c,a mlt bc rld jr bratt TroisC: ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld add a,e bratt: add a,c ; maintenant que la couleur est dans A, RaTTr: ld hl,$d40000 ; on peut en remplir ld (hl),a ; tout l'écran ld de,$d40001 ld bc,76799 ldir Retour: ld hl,$e00205 ; normal ld (hl),h ret ;------------------------------------------------------------------------ UneLi: ld a,(de) ; nb d'éléments cp 5 jr c,Retour sbc hl,hl sub 5 ex de,hl inc hl inc hl inc hl ElLoop: ld ixh,a xor a bit 1,(hl) jr nz,TroisX bit 0,(hl) inc hl jr z,ChifX rld ld d,10 ld e,a mlt de rld add a,e ld e,a jr RaTTX ChifX: rld ld e,a jr RaTTX TroisX: inc hl rld ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl ex de,hl add a,l ld l,a add hl,bc ex de,hl RaTTX: push de xor a ld d,a ld e,8 add hl,de ld e,(hl) ; 128=1chiffre; 129=2chiffres; 130=3chiffres inc hl rld bit 1,e jr nz,TroisY bit 0,e jr z,RaTTY ld d,10 ld e,a mlt de rld jr brattY TroisY: ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl add a,c brattY: add a,e RaTTY: ex de,hl ld h,160 ld l,a mlt hl add hl,hl ld bc,$d40000 add hl,bc pop bc add hl,bc push hl ; push la valeur $d40000+X+Y*640 ex de,hl ld de,8 add hl,de xor a bit 1,(hl) jr nz,TroisW bit 0,(hl) inc hl jr z,ChifW rld ld d,10 ld e,a mlt de rld add a,e ld e,a ex de,hl jr RaTTW ChifW: rld ex de,hl sbc hl,hl ld l,a jr RaTTW TroisW: inc hl rld ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl ex de,hl add a,l ld l,a add hl,bc ld a,l RaTTW: or h jp z,$e309d0 ; jp z,Error ld ($e309b1),hl ;ld (boxw1+1),hl ld ($e309be),hl ;ld (boxw2+1),hl dec hl ld ($e3098b),hl ; ld (boxw0+1),hl ld hl,8 add hl,de xor a ; directement le contenu d' OP1 ld e,(hl) ; 128=1chiffre; 129=2chiffres; 130=3chiffres inc hl rld bit 1,e jr nz,TroisH bit 0,e jr z,RaTTH ld d,10 ld e,a mlt de rld jr brattH TroisH: ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl add a,c brattH: add a,e RaTTH: or a jr z,Error ld ixl,a ld de,8 add hl,de xor a ; directement le contenu d' OP1 ld e,(hl) ; 128=1chiffre; 129=2chiffres; 130=3chiffres inc hl rld bit 1,e jr nz,TroisK bit 0,e jr z,RaTTK ld d,10 ld e,a mlt de rld jr brattK TroisK: ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl add a,c brattK: add a,e RaTTK: ld ($e30996),a ; ld (ecrKl+1),a boxw0: ld bc,0 ld a,b or a,c bxhaut: ld a,ixl pop de push de ex (sp),hl ecrKl: ld (hl),0 jr z,C_a0 inc de ldir dec de C_a0: dec a jr z,bxfyn ld bc,320 add hl,bc di ld ($e309ca),sp ; ld (GrdSp+1),sp ld sp,640 bxknt: ex de,hl boxw1: ld bc,0 lddr dec a jr z,bxfin inc hl add hl,sp inc de ex de,hl boxw2: ld bc,0 ldir dec hl add hl,sp dec de dec a jr nz,bxknt bxfin: GrdSp: ld sp,0 ei bxfyn: ld a,ixh Error: ld de,8 pop hl add hl,de sub a,5 jp nc,$e30865 ; jp nc,ElLoop ld hl,$e00205 ; normal ld (hl),h ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; avdfsp: cp e jp z,$e30b08 ; defspr Redur: ld hl,$e00205 ld (hl),h ret SPRITE: ld hl,$e00105 ; <-- SPRITE est en adresse ... $e309ed ! ld (hl),h ld hl,$007200 ld (OP1+1),hl ; dans OP1 ld (OP1),hl ; (correspond au call _AnsName) call _RclVarSym ; Que contient Ans ?.. ex de,hl ld de,3 dec a ; c'est une liste? (a=1) jr nz,avdfsp ; jr nz,avdfsp affspr: ld a,(hl) ; nb d'éléments cp e jr c,Redur ; jr c,Redur sub e ElLp: add hl,de ld ixh,a xor a bit 1,(hl) jr nz,TroysN bit 0,(hl) inc hl jr z,ChyfN rld ld d,10 ld e,a mlt de rld add a,e ld e,a jr RaTyN ChyfN: rld ld e,a jr RaTyN TroysN: inc hl rld ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl ex de,hl add a,l ld l,a add hl,bc ex de,hl RaTyN: push de ; push le nO xor a ld d,a ld e,8 add hl,de bit 1,(hl) jr nz,TroysX bit 0,(hl) inc hl jr z,ChyfX rld ld d,10 ld e,a mlt de rld add a,e ld e,a jr RaTyX ChyfX: rld ld e,a jr RaTyX TroysX: inc hl rld ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl ex de,hl add a,l ld l,a add hl,bc ex de,hl RaTyX: push de ; push le param X xor a ld d,a ld e,8 add hl,de ld e,(hl) ; 128=1chiffre; 129=2chiffres; 130=3chiffres inc hl rld bit 1,e jr nz,TroysY bit 0,e jr z,RaTyY ld d,10 ld e,a mlt de rld jr bratyY TroysY: ld b,100 ld c,a mlt bc rld ld d,10 ld e,a mlt de inc hl rld dec hl add a,c bratyY: add a,e RaTyY: ex de,hl ld h,160 ld l,a mlt hl add hl,hl ld bc,$d40000 add hl,bc pop bc add hl,bc ld ($e30ae3),hl ; =(AdrKc+1) , hl=adr.Ecran ex de,hl ex (sp),hl ; hl =n0 du sprite ex de,hl ld hl,$d07d3a add hl,de add hl,de add hl,de ld de,(hl) ; de = entete (data) ld a,(de) ; width inc de ld ($e30ae7),a ; = (SpLuup+1) ld hl,320 ld b,0 ld c,a sbc hl,bc ld a,(de) inc de di ld ($e30af1),sp ; = (OlSP+1) ld sp,hl AdrKc: ld hl,0 SpLuup: ld c,0 ex de,hl ldir ex de,hl add hl,sp dec a jr nz,SpLuup OlSP: ld sp,0 ei ld a,ixh ld de,8 pop hl sub a,3 jp nc,$e30a0f ; jp nc,ElLp Retur: ld hl,$e00205 ld (hl),h ret ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ defspr: ld a,(hl) or a jr z,Retur inc hl inc hl ld de,(hl) ld bc,$303030 ; string "000" ? (=sprite n° 0 ? ) ex de,hl sbc hl,bc jr nz,pAs000 ld hl,$d07d3a ld ($d07d34),hl ; cette adresse contient l'adr d'1 pointeur vers la ld bc,$d52c00+338 ld (hl),bc ; zone où sera stocké le prochain sprite défini pAs000: inc de inc de inc de inc de ld a,(de) sub a,48 cp a,17 jr c,okLarg sub a,7 okLarg: ld h,a ld ($e30b7f),a ; flarg+1 ld ($e30ba5),a ; flargg+1 inc de ld a,(de) sub a,48 cp a,17 jr c,okHaut sub a,7 okHaut: ld b,a ld ($e30b7c),a ; fhaut+1 inc de inc de ld a,(de) cp 49 jr nc,piks ld a,49 piks: cp 56 jr c,oiks ld a,55 oiks: sub 48 ld l,a ld ($e30b9d),a ; eldir+1 ld ($e30b94),a ; z00m+1 mlt hl ld c,l ld hl,($d07d34) ld hl,(hl) ld (hl),c inc hl ld c,a mlt bc ld (hl),c inc hl ld ix,$d07d00 fhaut: ld b,0 bbouk: push bc flarg: ld b,0 ld ($e30ba9),hl ; arrhl+1 CodHex: inc de ld a,(de) sub a,48 cp a,17 jr c,bon sub a,7 bon: ld ixl,a ld c,(ix+0) z00m: ld a,1 cdf: ld (hl),c inc hl dec a jr nz,cdf djnz CodHex eldir: ld a,0 ld c,a dec a jr z,passld push de ex de,hl flargg: ld b,0 mlt bc arrhl: ld hl,0 kbk: push bc ldir pop bc dec a jr nz,kbk ex de,hl pop de passld: pop bc djnz bbouk ex de,hl ld hl,($d07d34) inc hl inc hl inc hl ld ($d07d34),hl ld (hl),de ld hl,$e00205 ld (hl),h ret ; One-Byte Tokens : Chrs: .fill 48,0 .db %111100,%110000,%110000,%110000,%110000,%110000,%111100,0 ; [ .db %111100,%1100,%1100,%1100,%1100,%1100,%111100,0 ; ] .db %1110,%11000,%11000,%1110000,%11000,%11000,%1110,0 ; { .db %1110000,%11000,%11000,%1110,%11000,%11000,%1110000,0 ; } .db %0,%0,%11011000,%1101100,%1100000,%1100000,%11110000,0 ; r (bas) .db 0,%11000,%100100,%100100,%11000,0,0,0 ; ° .fill 32,0 .db %1100,%11000,%110000,%110000,%110000,%11000,%1100,0 ; ( .db %110000,%11000,%1100,%1100,%1100,%11000,%110000,0 ; ) .fill 64,0 .db 0,0,0,%111100,0,0,0,0 ; - .db 0,0,%111100,%100000,%111000,%100000,%111100,0 ; E .fill 112,0 .db %1101100,%1101100,%1101100,0,0,0,0,0 ; " .db 0,0,0,0,0,%11000,%11000,%110000 ; , .db %11000,0,%111000,%11000,%11000,%11000,%111100,0 ; i .db %11000,%11000,%11000,%11000,%11000,0,%11000,0 ; ! .db 0,0,0,0,0,%11000,%11000,0 ; . .fill 8,0 .db %1111100,%11000110,%11001110,%11010110,%11100110,%11000110,%1111100,0 ; 0 .db %11000,%111000,%11000,%11000,%11000,%11000,%1111110,0 ; 1 .db %111100,%1100110,%110,%111100,%1100000,%1100110,%1111110,0 ; 2 .db %111100,%1100110,%110,%11100,%110,%1100110,%111100,0 ; 3 .db %11000,%111000,%1011000,%10011000,%11111110,%11000,%111100,0 ; 4 .db %1111110,%1100010,%1100000,%111100,%110,%1100110,%111100,0 ; 5 .db %111100,%1100110,%1100000,%1111100,%1100110,%1100110,%111100,0 ; 6 .db %1111110,%1000110,%110,%1100,%11000,%11000,%11000,0 ; 7 .db %111100,%1100110,%1100110,%111100,%1100110,%1100110,%111100,0 ; 8 .db %111100,%1100110,%1100110,%111110,%110,%1100110,%111100,0 ; 9 .db 0,0,0,0,0,%11000,%11000,0 ; . .db 0,0,%111100,%100000,%111000,%100000,%111100,0 ; E .fill 16,0 .db 0,0,%11000,%11000,0,%11000,%11000,0 ; : .fill 16,0 .db %11000,%111100,%1100110,%1100110,%1111110,%1100110,%1100110,0 ; A .db %11111100,%1100110,%1100110,%1111100,%1100110,%1100110,%11111100,0 ; B .db %111100,%1100110,%11000000,%11000000,%11000000,%1100110,%111100,0 ; C .db %11111000,%1101100,%1100110,%1100110,%1100110,%1101100,%11111000,0 ; D .db %11111110,%1100010,%1101000,%1111000,%1101000,%1100010,%11111110,0 ; E .db %11111110,%1100010,%1101000,%1111000,%1101000,%1100000,%11110000,0 ; F .db %111100,%1100110,%11000000,%11000000,%11001110,%11000110,%1111110,0 ; G .db %1100110,%1100110,%1100110,%1111110,%1100110,%1100110,%1100110,0 ; H .db %1111110,%11000,%11000,%11000,%11000,%11000,%1111110,0 ; I .db %11110,%1100,%1100,%1100,%11001100,%11001100,%1111000,0 ; J .db %11100110,%1100110,%1101100,%1111000,%1101100,%1100110,%11100110,0 ; K .db %11110000,%1100000,%1100000,%1100000,%1100010,%1100110,%11111110,0 ; L .db %11000110,%11101110,%11111110,%11111110,%11010110,%11000110,%11000110,0 ; M .db %11000110,%11100110,%11110110,%11011110,%11001110,%11000110,%11000110,0 ; N .db %111000,%1101100,%11000110,%11000110,%11000110,%1101100,%111000,0 ; O .db %11111100,%1100110,%1100110,%1111000,%1100000,%1100000,%11110000,0 ; P .db %111000,%1101100,%11000110,%11000110,%11011010,%11001100,%1110110,0 ; Q .db %11111100,%1100110,%1100110,%1111100,%1101100,%1100110,%11100010,0 ; R .db %111100,%1100110,%1100000,%111100,%110,%1100110,%111100,0 ; S .db %1111110,%1011010,%11000,%11000,%11000,%11000,%111100,0 ; T .db %1100110,%1100110,%1100110,%1100110,%1100110,%1100110,%111100,0 ; U .db %1100110,%1100110,%1100110,%1100110,%1100110,%111100,%11000,0 ; V .db %11000110,%11000110,%11000110,%11010110,%11111110,%11101110,%11000110,0 ; W .db %11000110,%1101100,%111000,%111000,%1101100,%11000110,%11000110,0 ; X .db %1100110,%1100110,%1100110,%111100,%11000,%11000,%111100,0 ; Y .db %11111110,%11000110,%10001100,%11000,%110010,%1100110,%11111110,0 ; Z .db %111000,%1101100,%11000110,%11111110,%11000110,%1101100,%111000,0 ; theta .fill 112,0 .db 0,0,%1111110,0,0,%1111110,0,0 ; = .db %1100,%11000,%110000,%1100000,%110000,%11000,%1100,0 ; < .db %1100000,%110000,%11000,%1100,%11000,%110000,%1100000,0 ; > .db %1100,%11000,%110000,%1111100,0,0,%1111100,0 ; ≤ .db %1100000,%110000,%11000,%1111100,0,0,%1111100,0 ; ≥ .db %1000,%1000,%11111110,%10000,%10000,%11111110,%100000,%100000 ; ≠ .db 0,%11000,%11000,%1111110,%11000,%11000,0,0 ; + .db 0,0,0,%1111110,0,0,0,0 ; - .fill 128,0 .db 0,%1100110,%111100,%11111111,%111100,%1100110,0,0 ; * .db %110,%1100,%11000,%110000,%1100000,%11000000,%10000000,0 ; / .fill 320,0 .db 0,0,0,%11111110,%1101100,%1101100,%1101100,0 ; π .fill 8,0 .db %11000,%11000,%11000,0,0,0,0,0 ; ' .db %111100,%1100110,%110,%1100,%11000,0,%11000,0 ; ? .db 0,0,0,%111100,0,0,0,0 ; - ; 2-Byte Tokens ($bb,$xx) : Chrs2: .db %10000,%111000,%1101100,%11000110,0,0,0,0 ; ^ .db %1111000,%11000110,%11000110,%11111100,%11000110,%1100110,%11111000,%11000000 ; β .fill 24,0 ; γ , Δ , δ .db 0,0,%11110,%110000,%1111100,%110000,%11110,0 ; ε .db 0,%11000000,%1100000,%110000,%111000,%1101100,%11000110,0 ; λ .db 0,0,%1100110,%1100110,%1100110,%1111100,%1100000,%1100000 ; μ .db 0,0,0,%11111110,%1101100,%1101100,%1101100,0 ; π .fill 8,0 ; ρ .db %11111110,%1100110,%110000,%11000,%110000,%1100110,%11111110,0 ; Σ .fill 16,0 .db 0,%1111100,%11000110,%11000110,%11000110,%1101100,%11101110,0 ; Ω .fill 8,0 ; p .db 0,%11100110,%111100,%11000,%111000,%1101100,%11000011,0 ; X .db %11111110,%1100010,%1101000,%1111000,%1101000,%1100000,%11110000,0 ; F .db 0,0,%1111000,%1100,%1111100,%11001100,%1110110,0 ; a .db %11100000,%11100000,%1111100,%1100110,%1100110,%1100110,%11011100,0 ; b .db 0,0,%111100,%1100110,%1100000,%1100110,%111100,0 ; c .db %11100,%1100,%1111100,%11001100,%11001100,%11001100,%1110110,0 ; d .db 0,0,%111100,%1100110,%1111110,%1100000,%111100,0 ; e .db %11100,%110110,%110000,%1111000,%110000,%110000,%1111000,0 ; f .db 0,0,%111110,%1100110,%1100110,%111110,%110,%1111100 ; g .db %11100000,%1100000,%1101100,%1110110,%1100110,%1100110,%11100110,0 ; h .db %11000,0,%111000,%11000,%11000,%11000,%111100,0 ; i .db %110,0,%1110,%110,%110,%1100110,%1100110,%111100 ; j .db %11100000,%1100000,%1100110,%1101100,%1111000,%1101100,%11100110,0 ; k .fill 8,0 ; unused .db %111000,%11000,%11000,%11000,%11000,%11000,%111100,0 ; l .db 0,0,%1101100,%11111110,%11010110,%11010110,%11000110,0 ; m .db 0,0,%11011000,%1100110,%1100110,%1100110,%1100110,0 ; n .db 0,0,%111100,%1100110,%1100110,%1100110,%111100,0 ; o .db 0,0,%11011100,%1100110,%1100110,%1111100,%1100000,%11110000 ; p .db 0,0,%1110110,%11001100,%11001100,%1111100,%1100,%11110 ; q .db 0,0,%11011000,%1101100,%1100000,%1100000,%11110000,0 ; r .db 0,0,%111100,%1100000,%111100,%110,%11111100,0 ; s .db %110000,%110000,%1111100,%110000,%110000,%110110,%11100,0 ; t .db 0,0,%1100110,%1100110,%1100110,%1100110,%111110,0 ; u .db 0,0,%1100110,%1100110,%1100110,%111100,%11000,0 ; v .db 0,0,%11000110,%11010110,%11010110,%11111110,%1101100,0 ; w .db 0,0,%11000110,%1101100,%111000,%1101100,%11000110,0 ; x .db 0,0,%1100110,%1100110,%1100110,%111110,%110,%1111100 ; y .db 0,0,%1111110,%1001100,%11000,%110000,%1111110,0 ; z .db 0,0,0,%1111110,%11011000,%11011000,%1110000,0 ; σ .fill 8,0 ; τ .db %1111110,%11000,%11000,%11000,%11000,%11000,%1111110,0 ; I .fill 24,0 .db %1111100,%11000110,%11011110,%11011110,%11011110,%11000000,%1111100,0 ; @ .db %1101100,%1101100,%11111110,%1111100,%11111110,%1101100,%1101100,0 ; # .db %11000,%111110,%1011000,%111100,%11010,%1111100,%11000,0 ; $ .db %111000,%1101100,%111000,%1110110,%11011100,%11001100,%1110110,0 ; & .fill 8,0 ; ` .db 0,0,%11000,%11000,0,%11000,%11000,%110000 ; ; .db %11000000,%1100000,%110000,%11000,%1100,%110,%10,0 ; \ .fill 8,0 ; | .db 0,0,0,0,0,0,0,255 ; _ .db 0,%11000110,%11001100,%11000,%110000,%1100110,%11000110,0 ; % .fill 8,0 ; ... .fill 8,0 ; ∠ .fill 8,0 ; ß .fill 8,0 ; x .fill 8,0 ; T .fill 8,0 ; 0(mini) .fill 8,0 ; 1 .fill 8,0 ; 2 .fill 8,0 ; 3 .fill 8,0 ; 4 .fill 8,0 ; 5 .fill 8,0 ; 6 .fill 8,0 ; 7 .fill 8,0 ; 8 .fill 8,0 ; 9 .fill 8,0 ; 10 .fill 8,0 ; ← .fill 8,0 ; → .fill 8,0 ; ↑ .fill 8,0 ; ↓ .fill 8,0 ; unused .fill 8,0 ; x .fill 8,0 ; ∫ .fill 8,0 ; ↑ .fill 8,0 ; ↓ .fill 8,0 ; √ .db 0,0,%1111110,0,0,%1111110,0,0 ; =