Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ti83pce.inc"
- .assume ADL=1
- .db tExtTok,tAsm84CeCmp
- .org userMem
- ;#macro safe_call(x) push iy \ ld iy,$D00080 \ call x \ pop iy #endmacro
- ;;........................................................
- ;;........................................................
- ;;Reglage
- LD B ,%00001000 ;DE3
- LD HL,$D03342 ;HL4
- LD ($D031F6),HL ;Adresse de HL4
- LD (HL),B
- LD HL,$D4D290 ;DE4
- PUSH HL
- LD HL,$D0335B ;HL2
- LD (HL),B
- PUSH HL
- LD HL,$D4C390 ;DE2
- PUSH HL
- LD HL,$D0335B ;HL3
- LD (HL),B
- LD DE,$D4C390 ;DE3
- EXX
- LD HL,$D03374 ;HL1
- LD (HL),B
- LD DE,$D4B490 ;DE1
- PUSH HL
- ;;........................................................
- ;;Detection des touches
- Boucle:
- LD HL,$F50000
- LD (HL),2
- XOR A
- scan_wait:
- CP (HL)
- JR nz,scan_wait
- POP HL
- DGetKey:
- LD A,($F5001E)
- BIT 0,A
- CALL NZ,_Kdown
- BIT 1,A
- CALL nz,_Kleft
- BIT 2,A
- CALL nz,_Kright
- BIT 3,A
- CALL nz,_Kup
- ;;........................................................
- ;;Detection des collisions
- ;(DE)=Sprite regle
- ;(HL)=HL1
- PUSH BC ;save BC
- LD B,$7
- EX DE,HL ; test coté droit
- ADD HL,BC ;Permet de mettre sur un pixel noir si attein les bords (ajoute 7)
- LD A,(HL)
- OR A,0
- JP z,EndTheGame ;Test si c'est un pixel noir
- SBC HL,BC ;remait DE à son ancienne valeure
- EX DE,HL ; test coté gauche
- SBC HL,BC ;Permet de mettre sur un pixel noir si attein les bords (ajoute 7)
- LD A,(HL)
- OR A,0
- JP z,EndTheGame ;Test si c'est un pixel noir
- ADD HL,BC ;remait DE à son ancienne valeure
- EX DE,HL
- PUSH BC
- LD A,(HL)
- BIT 4,A
- JP nz,EndTheGame
- ;;........................................................
- ;;Affichage de la tête
- AffichageTete:
- PUSH DE
- BIT 0,B
- CALL nz,_Adown
- BIT 3,B
- CALL nz,_Aup
- BIT 1,B
- CALL nz,_Aleft
- BIT 2,B
- CALL nz,_Aright
- CALL _SpriteA ; stake: 1.BC 2.HL
- POP BC
- POP HL
- POP IX
- POP IY
- PUSH HL
- PUSH DE
- LEA HL,IY
- ;;........................................................
- ;;Affichage de la partie après la tête
- GetMouveAfterA:
- LD C,(HL)
- BIT 0,C
- CALL nz,_AftermouveDown
- BIT 3,C
- CALL nz,_AftermouveUp
- BIT 1,C
- CALL nz,_AftermouveLeft
- BIT 2,C
- CALL nz,_AftermouveRight
- GetSpriteAfterA:
- POP BC
- POP HL
- LD A,(HL)
- PUSH HL
- PUSH BC
- CP A,C
- JP nz,GetSpriteAfterA_Rotation
- BIT 0,C
- CALL nz,_GetSpriteAADown
- BIT 3,C
- CALL nz,_GetSpriteAAUp
- BIT 1,C
- CALL nz,_GetSpriteAALeft
- BIT 2,C
- CALL nz,_GetSpriteAARight
- AffiSpriteAfterA:
- Call _SpriteA
- POP BC
- POP IX
- POP IY
- POP HL
- PUSH IX
- PUSH DE
- LEA DE,IY
- ;;........................................................
- ;;Gestion de la pomme
- ;;Utilise HL1, et les registres HL, DE, BC.
- ;Detection
- ;(DE)=Sprite DE1
- ;(HL)=HL1
- LD A,(HL) ; test position, si 1, c'est fini ;) .
- BIT 5,A
- JP z,FinEtSuite
- PUSH HL ;Sauvegarde
- PUSH DE
- PUSH BC
- Alleatoire:
- ;routine aleatoire TheMachine02
- ;;Expects ADL mode.
- ;;Output: HL
- ;;50cc
- ;;33 bytes
- ;;cycle length: 281,474,959,933,440 (about 2.8 trillion)
- ld de,(seed1)
- or a
- sbc hl,hl
- add hl,de
- add hl,hl
- add hl,hl
- inc l
- add hl,de
- ld (seed1),hl
- ld hl,(seed2)
- add hl,hl
- sbc a,a
- and %00011011
- xor l
- ld l,a
- ld (seed2),hl
- add hl,de
- ;fin de la routine
- LD DE,0
- LD A,H
- LD E,L
- AND A,%00000001
- LD D,A
- OR A,A
- SBC HL,HL
- ;test si
- BIT 0,D
- JR z,Matrice
- LD A,R
- AND A,%01111111
- LD E,A ;empeche de dépassement de 450
- Matrice:
- LD HL,$D0300A ;debut matrice
- ADD HL,DE
- LD A,(HL)
- BIT 4,A
- JR z,Alleatoire
- AND A,%11011111
- LD (HL),A
- VRAMPomme:
- EX DE,HL
- LD DE,$D40645 ;debut VRAM
- LD C,$19
- PommeY:
- SBC HL,BC
- PUSH HL
- INC H
- LD L,$40
- EX DE,HL
- ADD HL,DE
- EX DE,HL
- JP m,PommeY
- INC H
- LD L,$40
- EX DE,HL
- SBC HL,DE
- EX DE,HL
- PUSH HL
- ADD HL,BC
- LD C,$12
- EX DE,HL
- PommeX:
- DEC E
- ADD HL,BC
- JP m,PommeX
- SBC HL,BC
- EX DE,HL
- LD HL,SpritePomme
- CALL _SpriteA
- POP BC
- POP DE
- POP HL
- JP Boucle ;Detection des touches
- FinEtSuite:
- EXX
- ;;........................................................
- ;;Affichage de la queue
- AffQueue:
- PUSH DE
- LD C,(HL)
- BIT 0,C
- CALL nz,_AFFQDown
- BIT 3,C
- CALL nz,_AFFQUp
- BIT 1,C
- CALL nz,_AFFQLeft
- BIT 2,C
- CALL nz,_AFFQRight
- CALL _SpriteA
- POP HL
- POP BC
- POP IX
- POP IY
- PUSH HL
- PUSH DE
- PUSH IX
- PUSH BC
- LD HL,$D031F6 ;adresse de HL4
- LEA DE,IY
- ;;........................................................
- ;;Effacement et remise à 0 de la partie des dirrections et du bit de d'information sur si le corps du serpent est bien là, du registre B
- Effacement:
- ld C,(HL)
- BIT 0,C
- CALL nz,_EffDown
- BIT 3,C
- CALL nz,_EffUp
- BIT 1,C
- CALL nz,_EffLeft
- BIT 2,C
- CALL nz,_EffRight
- LD HL,$FFFF
- CALL _SpriteA
- POP BC
- POP HL
- POP IX
- POP IY
- PUSH DE
- PUSH HL
- PUSH BC
- LEA HL,IY
- LEA DE,IX
- EXX
- JP Boucle
- ;;........................................................
- GetSpriteAfterA_Rotation:
- BIT 0,C
- CALL nz,_GetSpriteAARDown
- BIT 3,C
- CALL nz,_GetSpriteAARUp
- BIT 1,C
- CALL nz,_GetSpriteAARLeft
- BIT 2,C
- CALL nz,_GetSpriteAARRight
- JP AffiSpriteAfterA
- ;;........................................................
- EndTheGame: ;end ;)
- ;;........................................................
- _Kdown:
- BIT 3,B
- JP nz,AffichageTete
- RES 1,B
- RES 2,B
- SET 0,B
- RET
- _Kup:
- BIT 0,B
- JP nz,AffichageTete
- RES 1,B
- RES 2,B
- SET 3,B
- RET
- _Kleft:
- BIT 2,B
- JP nz,AffichageTete
- RES 0,B
- RES 3,B
- SET 1,B
- RET
- _Kright:
- BIT 1,B
- JP nz,AffichageTete
- RES 0,B
- RES 3,B
- SET 2,B
- RET
- _Adown:
- POP IX
- LD (HL),B
- LD E,$11
- ADD HL,DE
- POP DE
- PUSH HL
- PUSH BC
- LD BC,$F00
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- PUSH IX
- LD HL,SpriteDownA
- RET
- _Aup:
- POP IX
- LD (HL),B
- LD E,$11
- SBC HL,DE
- POP DE
- PUSH HL
- PUSH BC
- LD BC,$F00
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- PUSH IX
- LD HL,SpriteUpA
- RET
- _Aleft:
- POP IX
- LD (HL),B
- DEC HL
- POP DE
- PUSH HL
- PUSH BC
- LD C,$B
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- PUSH IX
- LD HL,SpriteLeftA
- RET
- _Aright:
- POP IX
- LD (HL),B
- INC HL
- POP DE
- PUSH HL
- PUSH BC
- LD C,$B
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- PUSH IX
- LD HL,SpriteRightA
- RET
- _AftermouveDown:
- POP IY
- LD E,$11
- ADD HL,DE
- LEA DE,IX
- PUSH HL
- PUSH BC
- LD BC,$F00
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- PUSH IY
- RET
- _AftermouveUp:
- POP IY
- LD E,$11
- SBC HL,DE
- LEA DE,IX
- PUSH HL
- PUSH BC
- LD BC,$F00
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- PUSH IY
- RET
- _AftermouveLeft:
- POP IY
- DEC HL
- LEA DE,IX
- PUSH HL
- PUSH BC
- LD C,$B
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- PUSH IY
- RET
- _AftermouveRight:
- POP IY
- INC HL
- LEA DE,IX
- PUSH HL
- PUSH BC
- LD C,$B
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- PUSH IY
- RET
- _GetSpriteAADown:
- LD HL,SpriteAADown
- RET
- _GetSpriteAAUp:
- LD HL,SpriteAAUP
- RET
- _GetSpriteAALeft:
- LD HL,SpriteAALeft
- RET
- _GetSpriteAARight:
- LD HL,SpriteAARight
- RET
- _GetSpriteAARDown:
- LD HL,SpriteAARDown
- RET
- _GetSpriteAARUp:
- LD HL,SpriteAARUp
- RET
- _GetSpriteAARLeft:
- LD HL,SpriteAARLeft
- RET
- _GetSpriteAARRight:
- LD HL,SpriteAARRight
- RET
- _AFFQDown:
- POP IX
- LD E,$11
- ADD HL,DE
- POP DE
- PUSH HL
- LD BC,$F00
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- LD HL,SpriteAGdown
- PUSH IX
- RET
- _AFFQUp:
- POP IX
- LD E,$11
- SBC HL,DE
- POP DE
- PUSH HL
- LD BC,$F00
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- LD HL,SpriteAGup
- PUSH IX
- RET
- _AFFQLeft:
- POP IX
- DEC HL
- POP DE
- PUSH HL
- LD C,$B
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- LD HL,SpriteAGleft
- PUSH IX
- RET
- _AFFQRight:
- POP IX
- INC HL
- POP DE
- PUSH HL
- LD C,$B
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- LD HL,SpriteAGright
- PUSH IX
- RET
- _EffDown:
- LD (HL),0
- LD C,$11
- ADD HL,BC
- LD ($D031F6),HL ;adresse de HL4
- LD BC,$F00
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- RET
- _EffUp:
- LD (HL),0
- LD C,$11
- SBC HL,BC
- LD ($D031F6),HL ;adresse de HL4
- LD BC,$F00
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- RET
- _EffLeft:
- LD (HL),0
- DEC HL
- LD ($D031F6),HL ;adresse de HL4
- LD C,B
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- RET
- _EffRight:
- LD (HL),0
- INC HL
- LD ($D031F6),HL ;adresse de HL4
- LD C,$B
- EX DE,HL
- ADD HL,BC
- EX DE,HL
- RET
- _SpriteA:
- LD A,12
- CopyLineA:
- INC B \ LD C,$40
- LDIR
- LD C,$B
- EX DE,HL
- ADD hl,BC
- EX DE,HL
- DEC A
- JR nz,CopyLineA
- LD BC,$F0C
- EX DE,HL
- SBC HL,BC
- EX DE,HL
- RET
- .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement