mirror of
https://github.com/antoinevignau/source.git
synced 2024-12-29 11:30:55 +00:00
548200a90a
Antoine's The Tinies & Oliver's TCK source code
3119 lines
86 KiB
ArmAsm
3119 lines
86 KiB
ArmAsm
*
|
|
* TCK: Olivier
|
|
*
|
|
|
|
LDX #$7FFE ; NETTOY ECRAN
|
|
LDA #$0000
|
|
LP1 STAL $012000,X
|
|
DEX
|
|
DEX
|
|
BPL LP1
|
|
|
|
ADR LDA ptrTCK1+1 ; MISE A JOUR DES ADRESSES
|
|
AND #$FF00
|
|
STA ADR1+1
|
|
STA ADR2+1
|
|
LDA SPMSKTAB2+1
|
|
AND #$00FF
|
|
ADR1 ORA #$FF00
|
|
STA SPMSKTAB2+1
|
|
LDA SPMSKTAB2+4
|
|
AND #$00FF
|
|
ADR2 ORA #$FF00
|
|
STA SPMSKTAB2+4
|
|
LDA ptrNIV+1
|
|
AND #$FF00
|
|
STA ADR3+1
|
|
LDA ptrTCK2+1
|
|
AND #$FF00
|
|
STA ADR4+1
|
|
LDY #$0000 ; ADRESSE DES SPRITES SANS MASQUE
|
|
LDX #$0003
|
|
ADR0 LDA SPMSKTAB2+11,Y
|
|
AND #$00FF
|
|
ADR3 ORA #$FF00
|
|
STA SPMSKTAB2+11,Y
|
|
LDA SPMSKTAB2+14,Y
|
|
AND #$00FF
|
|
ADR4 ORA #$FF00
|
|
STA SPMSKTAB2+14,Y
|
|
TYA
|
|
CLC
|
|
ADC #$000A
|
|
TAY
|
|
DEX
|
|
BPL ADR0
|
|
LDA ptrTCK2+1 ; ADRESSE SPRITE2 : TCK2
|
|
STA AFFSPR4+2
|
|
STZ AFFSPR4+1
|
|
STA AFFZONE2+2
|
|
STA COPYBL00+1
|
|
STA COPYBL2+1
|
|
STA COPYBL3+1
|
|
STA COPYBLN+1
|
|
LDA ptrNIV+1 ; ADRESSE NIVEAU : NIV02
|
|
STA COPYBL0+1
|
|
STA COPYBL1+1
|
|
STA COPYBL4+1
|
|
STA COPYBLN0+1
|
|
STA COPYBL8+1
|
|
LDA ptrTAB+1 ; ADRESSE TABLE DE DESCRIPTION
|
|
STA COPYLVL1+2
|
|
STA COPYDES2+2
|
|
|
|
LDA fgLANG
|
|
BNE LANGUE2
|
|
|
|
LDX #$0086
|
|
LANGUE1 LDA ERRMESU,X ; MESSAGE ERREUR EN ANGLAIS
|
|
STA ERRMES1,X
|
|
DEX
|
|
DEX
|
|
BPL LANGUE1
|
|
|
|
LDA #TEXTEUSD ; DOCUMENTATION EN ANGLAIS
|
|
STA AFTLIG1+1
|
|
|
|
LANGUE2 LDA #$0000
|
|
STA POSX
|
|
STA POSY
|
|
STA A1 ; INIT SOURIS
|
|
STA AP
|
|
JSR SAUV ; SAUVEGARDE DECOR
|
|
JSR DESS
|
|
|
|
JSR MAKESPR ; CREATION PLANCHE SPRITE2 AVEC PALETTE ET ZONE ROSE
|
|
|
|
LDA #$0000
|
|
JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A
|
|
JSR CONVLVL ; CONVERTI LES VALEURS
|
|
|
|
LDA LEVEL ; GESTION DU TEMPS
|
|
STA level
|
|
JSR doTIME
|
|
LDA minutes
|
|
STA TIMEMIN
|
|
LDA secondes
|
|
STA TIMESEC
|
|
|
|
LDA #$0002
|
|
JMP PICT ; IMAGE PRINCIPALE (MENU DROITE)
|
|
|
|
*****************************************************************************
|
|
**************************** MOUSE MANAGER ********************************
|
|
*****************************************************************************
|
|
|
|
SOURIS LDA BOUT ; ANCIEN BOUT=NOUVEAU BOUT
|
|
STA BOUT1
|
|
|
|
SOURIS0 JSR SLECT ; LECTURE SOURIS
|
|
CPY #$FFFF
|
|
BEQ SECR ; DONNEES NON DISPONIBLES
|
|
|
|
SOURIS1 LDA A1 ; A1 POSITION ACTUELLE
|
|
STA AP ; AP ANCIENNE POSITION
|
|
LDA POSX
|
|
LSR
|
|
STA SOURIS2+1
|
|
LDA POSY
|
|
ASL
|
|
TAX
|
|
LDA TABLE,X
|
|
CLC
|
|
SOURIS2 ADC #$0000 ; CALCUL DE A1 (160*POSY+POSX)
|
|
STA A1
|
|
JSR TRACE ; ON DESSINE LE POINTEUR
|
|
|
|
*****
|
|
|
|
SECR JSR KEYBOARD ; TOUCHE ?
|
|
LDA ECRAN
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA ECRTAB,X
|
|
TAY ; ADRESSE TABLEAU DES BOUTONS
|
|
DEC
|
|
DEC
|
|
TAX
|
|
SECR0 LDA\ $0000,X ; NB DE BUMPER DANS ECRAN
|
|
ASL
|
|
STA SECR8+1
|
|
|
|
LDX #$0000
|
|
LDA POSX
|
|
SECR1 CMP\ $0000,Y ; X0 ECR1, ECR2, ECR3 ...
|
|
BMI SECR4
|
|
INY
|
|
INY
|
|
SECR11 CMP\ $0000,Y ; X1
|
|
BPL SECR5
|
|
INY
|
|
INY
|
|
LDA POSY
|
|
SECR12 CMP\ $0000,Y ; Y0
|
|
BMI SECR6
|
|
INY
|
|
INY
|
|
SECR13 CMP\ $0000,Y ; Y1
|
|
BPL SECR7
|
|
STX SECR2+1 ; ON EST SUR UN BUMPER
|
|
LDA ECRAN
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA ECRDESA,X
|
|
STA SECR20+1 ; ADRESSE DE L'ADRESSE EXECUTION
|
|
SECR2 LDX #$0000 ; NUMERO DU BUMPER TRAVERSE (*2)
|
|
SECR20 LDA $FFFF,X
|
|
STA SECR3+1
|
|
SECR3 JMP $A0A0 ;
|
|
|
|
SECR4 INY
|
|
INY
|
|
SECR5 INY
|
|
INY
|
|
SECR6 INY
|
|
INY ; BOUTON SUIVANT
|
|
SECR7 INY
|
|
INY
|
|
LDA POSX
|
|
INX
|
|
INX
|
|
SECR8 CPX #$0000 ; NB DE BOUTON
|
|
BMI SECR1
|
|
JSR BORD5 ; FORCE LA BORDURE NOIRE
|
|
JMP BUMPDEF ; AUCUN BOUTON DETECTE : TRAITEMENT PAR DEFAUT
|
|
|
|
*******************************************************************************
|
|
*********************** TRAITEMENT DES BOUTONS ******************************
|
|
*******************************************************************************
|
|
|
|
KEYBOARD LDAL $00BFFF
|
|
BPL KEYBOAR1
|
|
STAL $00C010 ; BIT $C010
|
|
TAX ; SAUVEGARDE
|
|
LDA ECRAN
|
|
CMP #$0003
|
|
BPL KEYBOAR4
|
|
TXA ; RECUP
|
|
AND #$FF00
|
|
CMP #$A000 ; BARRE ESPACE
|
|
BNE KEYBOAR5
|
|
PLA ; RECUPERE L'ADRESSE DE RETOUR DU JSR
|
|
JSR DESS1
|
|
LDA MAISELE
|
|
BEQ KEYBOAR2
|
|
LDA #$0006
|
|
JMP PICT1
|
|
KEYBOAR2 LDA #$0005
|
|
JMP PICT1
|
|
KEYBOAR5 CMP #$9500 ; FLECHE -> ET <-
|
|
BEQ KEYBOAR6
|
|
CMP #$8800 ; <-
|
|
BNE KEYBOAR1
|
|
PLA ; RECUPERE L'ADRESSE DU JSR
|
|
JSR DESS1
|
|
JMP ECR0181 ; <-
|
|
KEYBOAR6 PLA
|
|
JSR DESS1
|
|
JMP ECR0191 ; ->
|
|
KEYBOAR1 RTS
|
|
KEYBOAR4 CMP #$0005 ; 5,6 -> OK
|
|
BEQ KEYBOAR3
|
|
CMP #$0006
|
|
BEQ KEYBOAR3
|
|
RTS
|
|
KEYBOAR3 TXA ; LA BARRE D'ESPACE FAIT DISPARAITRE LE MENU
|
|
AND #$FF00
|
|
CMP #$A000 ; BARRE ESPACE ?
|
|
BNE KEYBOAR1
|
|
PLA ; RECUP LE JSR
|
|
JSR DESS1
|
|
LDA DROITE ; REVIENT AU MAIN
|
|
JMP PICT1
|
|
|
|
BORD5 LDAL $00C034 ; ICI TRAITEMENT PAR DEFAUT
|
|
AND #$FFF0 ; BORDURE NOIRE
|
|
STAL $00C034
|
|
BORD55 RTS
|
|
|
|
BORD6 LDAL $00C034
|
|
AND #$FFF0
|
|
ORA #$0001 ; ROUGE
|
|
STAL $00C034
|
|
RTS
|
|
|
|
**************** MAIN
|
|
|
|
ECR0100 LDX SECR2+1 ; MAIN : TIME
|
|
LDA #ECR0101
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0101 NOP
|
|
LDA #$0003
|
|
JMP PICT1
|
|
|
|
ECR0110 LDX SECR2+1 ; MAIN : LEVEL
|
|
LDA #ECR0111
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0111 NOP
|
|
LDA LEVEL
|
|
STA OLDLEVEL ; SAUVEGARDE LE LEVEL COURANT
|
|
LDA #$0004
|
|
JMP PICT1
|
|
|
|
ECR0120 LDX SECR2+1 ; MAIN : PLAY
|
|
LDA #ECR0121
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0121 NOP
|
|
JSR VERIFOK
|
|
BCC ECR0122
|
|
LDA #$000B ; ATTENTION PROBLEME
|
|
JMP PICT1
|
|
ECR0122 LDA TIMEMIN ; ROUTINE DE PLAY
|
|
STA minutes
|
|
LDA TIMESEC
|
|
STA secondes
|
|
JSR putTIME ; BOGUE
|
|
LDA LEVEL
|
|
STA level
|
|
JSR putTIME
|
|
JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU
|
|
LDA LEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU
|
|
JSR COPYDES
|
|
LDX #$00CE
|
|
ECR0123 LDA LEVELBUF,X
|
|
STA plateau5,X
|
|
DEX
|
|
DEX
|
|
BPL ECR0123
|
|
JMP tiniesPLAY
|
|
|
|
ECR0130 LDX SECR2+1 ; MAIN : SELECT
|
|
LDA #ECR0131
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0131 NOP
|
|
LDA MAISELE
|
|
BEQ ECR0132
|
|
LDA #$0006
|
|
JMP PICT1
|
|
ECR0132 LDA #$0005
|
|
JMP PICT1
|
|
|
|
MAISELE HEX 0000 ; 0:GROUND,1:ITEM
|
|
|
|
ECR0140 LDX SECR2+1 ; MAIN : v/^
|
|
LDA #ECR0141
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0141 NOP
|
|
LDA MAISELE
|
|
BEQ ECR0142
|
|
STZ MAISELE
|
|
LDA GRZONE
|
|
JSR SEBLCKG ; GROUND
|
|
LDA DROITE
|
|
JMP PICT1
|
|
ECR0142 LDA #$0001
|
|
STA MAISELE
|
|
LDA ITZONE
|
|
JSR SEBLCKI ; ITEM
|
|
LDA DROITE
|
|
JMP PICT1
|
|
|
|
ECR0150 LDX SECR2+1 ; MAIN : MENU
|
|
LDA #ECR0151
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0151 NOP
|
|
LDA #$0008
|
|
JMP PICT1
|
|
|
|
ECR0160 LDX SECR2+1 ; MAIN : DOCU
|
|
LDA #ECR0161
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0161 NOP
|
|
JSR fadeOUT ; FADE ET AFFICHAGE DE L'ECRAN DOCUMENTATION
|
|
LDA ptrDOC+1
|
|
LDY #$0000
|
|
JSR fadeIN
|
|
LDA #$0009
|
|
JMP PICT1
|
|
|
|
ECR0170 LDX SECR2+1 ; MAIN : QUIT
|
|
LDA #ECR0171
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0171 NOP
|
|
LDA #$000A
|
|
JMP PICT1
|
|
|
|
ECR0180 LDX SECR2+1 ; MAIN : <
|
|
LDA #ECR0181
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0181 NOP
|
|
LDA DROITE
|
|
CMP #$0001
|
|
BEQ ECR0182
|
|
JSR CLNDROIT ; NETTOY
|
|
LDA #$0001
|
|
STA DROITE
|
|
JMP PICT1
|
|
ECR0182 JMP SOURIS1
|
|
|
|
ECR0190 LDX SECR2+1 ; MAIN : >
|
|
LDA #ECR0191
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0191 NOP
|
|
LDA DROITE
|
|
CMP #$0002
|
|
BEQ ECR0192
|
|
JSR CLNGAUCH ; NETTOY
|
|
LDA #$0002
|
|
STA DROITE
|
|
JMP PICT1
|
|
ECR0192 JMP SOURIS1
|
|
|
|
ECR01A0 LDX SECR2+1 ; SURFACE QUADRILLEE GAUCHE
|
|
LDA #ECR01A1
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR01A1 NOP
|
|
LDA POSX
|
|
SEC
|
|
SBC #$0004 ; 4
|
|
TAX
|
|
LDA ZONESCR,X
|
|
AND #$00FF
|
|
DEC
|
|
STA SCRZONE
|
|
LDA POSY
|
|
SEC
|
|
SBC #$0004 ; 4
|
|
TAX
|
|
LDA ZONESCR,X
|
|
AND #$00FF
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA MULTREIZ,X ; *13
|
|
CLC
|
|
ADC SCRZONE
|
|
STA SCRZONE ; OFFSET
|
|
JSR PLACEBUF ; PLACE LE CODE DANS GROUBUF OU DANS ITEMBUF
|
|
LDA SCRZONE
|
|
JSR SEBLCKS ; AFFICHAGE DU SPRITE DANS LA GRILLE
|
|
ECR01A2 JSR WAITVBL ; REDESSINE LA GRILLE
|
|
JSR GRILHM
|
|
JSR GRILVM
|
|
JSR GRILHG
|
|
JSR GRILVG
|
|
JSR EFFDROIT ; BANDE NOIRE
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECR01B0 LDX SECR2+1 ; SURFACE QUADRILLEE DROITE
|
|
LDA #ECR01B1
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR01B1 NOP
|
|
LDA POSX
|
|
SEC
|
|
SBC #$0034 ; 52
|
|
TAX
|
|
LDA ZONESCR,X
|
|
AND #$00FF
|
|
INC ; ++
|
|
STA SCRZONE
|
|
LDA POSY
|
|
SEC
|
|
SBC #$0004 ; 4
|
|
TAX
|
|
LDA ZONESCR,X
|
|
AND #$00FF
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA MULTREIZ,X ; *13
|
|
CLC
|
|
ADC SCRZONE
|
|
STA SCRZONE
|
|
JSR PLACEBUF ; PLACE LE CODE DE L'OBJET DANS GROUBUF OU ITEMBUF
|
|
LDA SCRZONE
|
|
JSR SEBLCKS ; AFFICHAGE DU SPRITE DANS LA GRILLE
|
|
ECR01B2 JSR WAITVBL ; GRILLE
|
|
JSR GRILHM
|
|
JSR GRILVM
|
|
JSR GRILHD
|
|
JSR GRILVD
|
|
JSR EFFGAUCH ; BANDE NOIRE
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
SCRZONE HEX 0000
|
|
DROITE HEX 0200
|
|
MULTREIZ HEX 0000,0D00,1A00,2700,3400,4100,4E00,5B00,6800
|
|
|
|
PLACEBUF LDAL $00C025 ; PLACE LE CODE DE L'OBJET DANS GROUBUF OU ITEMBUF
|
|
AND #$0080
|
|
BEQ PLACEBU3 ; BIT 7=1 TOUCHE POMME ENFONCE
|
|
************* ENLEVE
|
|
LDA SCRZONE ; ON ENLEVE L'OBJET DES BUFFERS
|
|
ASL
|
|
TAX
|
|
LDA MAISELE
|
|
BNE PLACEBU4
|
|
************* ENLEVE GROUND
|
|
LDA GRZONE
|
|
PHA
|
|
LDA #$0031 ; GROUND
|
|
STA GROUBUF,X
|
|
STA ITEMBUF,X
|
|
STA GRZONE
|
|
LDA SCRZONE
|
|
JSR SEBLCKS ; AFFICHE DU NOIR
|
|
PLA
|
|
STA GRZONE
|
|
PLA
|
|
LDA DROITE
|
|
CMP #$0001
|
|
BNE PLACEBU5
|
|
JMP ECR01B2 ;
|
|
PLACEBU5 JMP ECR01A2
|
|
************* ENLEVE ITEM
|
|
PLACEBU4 LDA ITEMBUF,X ; ENLEVE L'ITEM
|
|
BEQ PLACEBU6
|
|
CMP #$0031
|
|
BEQ PLACEBU6 ; ON VERIFIE QU'IL Y AIT BIEN UN OBJET A ENLEVER
|
|
LDA #$0031
|
|
STA ITEMBUF,X
|
|
LDA ITZONE
|
|
PHA
|
|
LDA GROUBUF,X
|
|
STA ITZONE
|
|
LDA SCRZONE ; DESSINE LE SOL DESSUS
|
|
JSR SEBLCKS ; AFFICHE
|
|
PLA
|
|
STA ITZONE
|
|
PLA ; RECUPERE L'ADRESSE DU RTS
|
|
LDA DROITE
|
|
CMP #$0001
|
|
BEQ PLACEBU7
|
|
JMP ECR01A2 ; REDESSINE LA GRILLE
|
|
PLACEBU7 JMP ECR01B2
|
|
PLACEBU6 JMP SOURIS1
|
|
************* PLACE
|
|
PLACEBU3 LDA SCRZONE ; ET VERIFIE AU PASSAGE
|
|
ASL
|
|
TAX
|
|
LDA MAISELE
|
|
BEQ PLACEBU1
|
|
************* PLACE ITEM
|
|
LDA GROUBUF,X ; ITEM
|
|
CMP #$0007
|
|
BEQ PLACEBU2
|
|
CMP #$0004
|
|
BMI PLACEBU2
|
|
PLA ; INTERDICTION DE POSER UN OBJET SUR UN MUR
|
|
JMP SOURIS1
|
|
PLACEBU2 LDA ITZONE
|
|
STA ITEMBUF,X
|
|
RTS
|
|
************* PLACE GROUND
|
|
PLACEBU1 LDA GRZONE ; GROUND
|
|
STA GROUBUF,X
|
|
LDA #$0031
|
|
STA ITEMBUF,X ; ON ENLEVE L'OBJET
|
|
RTS
|
|
|
|
************* TIME
|
|
|
|
ECR0300 LDX SECR2+1 ; TIME : <<
|
|
LDA #ECR0301
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0301 NOP
|
|
LDA TIMEMIN ; MINUTE --
|
|
BEQ ECR0302
|
|
DEC
|
|
STA TIMEMIN
|
|
JSR AFFTIMM ; AFFICHAGE TIME
|
|
ECR0302 JMP SOURIS1
|
|
|
|
ECR0310 LDX SECR2+1 ; TIME : >>
|
|
LDA #ECR0311
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0311 NOP ; MINUTE ++
|
|
LDA TIMEMIN
|
|
CMP #$003B ; 59
|
|
BEQ ECR0312
|
|
INC
|
|
STA TIMEMIN
|
|
JSR AFFTIMM ; AFFICHAGE TIME
|
|
ECR0312 JMP SOURIS1
|
|
|
|
ECR0320 LDX SECR2+1 ; TIME : <
|
|
LDA #ECR0321
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0321 NOP ; SECONDE --
|
|
LDA TIMESEC
|
|
BEQ ECR0322
|
|
DEC
|
|
STA TIMESEC
|
|
JSR AFFTIMM ; AFFICHAGE TIME
|
|
ECR0322 JMP SOURIS1
|
|
|
|
ECR0330 LDX SECR2+1 ; TIME : >
|
|
LDA #ECR0331
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0331 NOP ; SECONDE ++
|
|
LDA TIMESEC
|
|
CMP #$003B ; 59
|
|
BEQ ECR0332
|
|
INC
|
|
STA TIMESEC
|
|
JSR AFFTIMM ; AFFICHAGE TIME
|
|
ECR0332 JMP SOURIS1
|
|
|
|
ECR0340 LDX SECR2+1 ; TIME : OK
|
|
LDA #ECR0341
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0341 NOP
|
|
JSR CLNTIME ; NETTOY
|
|
LDA DROITE
|
|
JMP PICT1
|
|
|
|
TIMEMIN HEX 0000
|
|
TIMESEC HEX 0000
|
|
TIMEMIND HEX 0000
|
|
TIMEMINU HEX 0000
|
|
TIMESECD HEX 0000
|
|
TIMESECU HEX 0000
|
|
|
|
AFFTIMG LDA #TIMECO1
|
|
STA AFFTIM2+1
|
|
BRA AFFTIM
|
|
AFFTIMM LDA #TIMECO2
|
|
STA AFFTIM2+1
|
|
BRA AFFTIM
|
|
AFFTIMD LDA #TIMECO3
|
|
STA AFFTIM2+1
|
|
|
|
AFFTIM LDA TIMEMIN ; MINUTE
|
|
ASL
|
|
TAX
|
|
LDA HEXDEC,X
|
|
XBA
|
|
AND #$00FF
|
|
STA TIMEMINU
|
|
LDA HEXDEC,X
|
|
AND #$00FF
|
|
STA TIMEMIND
|
|
LDA TIMESEC ; SECONDE
|
|
ASL
|
|
TAX
|
|
LDA HEXDEC,X
|
|
XBA
|
|
AND #$00FF
|
|
STA TIMESECU
|
|
LDA HEXDEC,X
|
|
AND #$00FF
|
|
STA TIMESECD
|
|
LDY #$0000
|
|
AFFTIM1 LDA TIMEMIND,Y ; AFFICHAGE
|
|
CLC
|
|
ADC #$001A
|
|
TAX
|
|
AFFTIM2 LDA TIMECO1,Y
|
|
STA AFTAE
|
|
JSR AFTCAR ; AFFICHE MIN DIZAINE
|
|
INY
|
|
INY
|
|
CPY #$0008
|
|
BNE AFFTIM1
|
|
RTS
|
|
|
|
MAJTIME LDA OLDLEVEL ; MISE A JOUR DU TEMPS
|
|
STA level
|
|
LDA TIMEMIN ; SAUVEGARDE DE L'ANCIEN
|
|
STA minutes
|
|
LDA TIMESEC
|
|
STA secondes
|
|
JSR putTIME
|
|
LDA LEVEL ; CHARGE LE NOUVEAU
|
|
STA level
|
|
JSR doTIME
|
|
LDA minutes
|
|
STA TIMEMIN
|
|
LDA secondes
|
|
STA TIMESEC
|
|
RTS
|
|
|
|
TIMECO1 HEX 0405,0805,0D05,1105 ; COORDONNEES GAUCHE
|
|
TIMECO2 HEX C82A,CC2A,D12A,D52A ; COORDONNEES CENTRE
|
|
TIMECO3 HEX 8C05,9005,9505,9905 ; COORDONNEES DROITE
|
|
|
|
*********** LEVEL
|
|
|
|
ECR0400 LDX SECR2+1 ; LEVEL : <<
|
|
LDA #ECR0401
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0401 NOP
|
|
LDA LEVEL ; LEVEL -=10
|
|
BEQ ECR0403
|
|
CMP #$000A
|
|
BMI ECR0402
|
|
SEC
|
|
SBC #$000A
|
|
STA LEVEL
|
|
JSR AFFLEVL2
|
|
JMP SOURIS1
|
|
ECR0402 STZ LEVEL
|
|
JSR AFFLEVL2
|
|
ECR0403 JMP SOURIS1
|
|
|
|
ECR0410 LDX SECR2+1 ; LEVEL : <
|
|
LDA #ECR0411
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0411 NOP
|
|
LDA LEVEL ; LEVEL --
|
|
BEQ ECR0412
|
|
DEC
|
|
STA LEVEL
|
|
JSR AFFLEVL2 ; AFFICHAGE LEVEL
|
|
ECR0412 JMP SOURIS1
|
|
|
|
ECR0420 LDX SECR2+1 ; LEVEL : >
|
|
LDA #ECR0421
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0421 NOP
|
|
LDA LEVEL ; LEVEL ++
|
|
CMP #$0064 ; 100
|
|
BEQ ECR0422
|
|
INC
|
|
STA LEVEL
|
|
JSR AFFLEVL2 ; AFFICHAGE
|
|
ECR0422 JMP SOURIS1
|
|
|
|
ECR0430 LDX SECR2+1 ; LEVEL : >>
|
|
LDA #ECR0431
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0431 NOP
|
|
LDA LEVEL ; LEVEL +=10
|
|
CMP #$0064 ; 100
|
|
BEQ ECR0433
|
|
CMP #$005A ; 90
|
|
BPL ECR0432
|
|
CLC
|
|
ADC #$000A
|
|
STA LEVEL
|
|
JSR AFFLEVL2 ; AFFICHAGE LEVEL
|
|
JMP SOURIS1
|
|
ECR0432 LDA #$0064 ; 100
|
|
STA LEVEL
|
|
JSR AFFLEVL2
|
|
ECR0433 JMP SOURIS1
|
|
|
|
ECR0440 LDX SECR2+1 ; LEVEL : OK
|
|
LDA #ECR0441
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0441 NOP
|
|
JSR MAJLEVEL ; MISE A JOUR DU NIVEAU (SAUV/LOAD)
|
|
JSR MAJTIME ; MISE A JOUR DU TEMPS (SAUV/LOAD)
|
|
JSR MAJPICT ; VERIFIE QUE L'ON AIT PAS BESOIN DE CHANGER LE DECOR
|
|
JSR CLNLEVE ; NETTOY
|
|
LDA DROITE
|
|
JMP PICT1
|
|
|
|
LEVEL HEX 0000 ; NIVEAU 0-109
|
|
LEVELC HEX 0000
|
|
LEVELD HEX 0000
|
|
LEVELU HEX 0000
|
|
OLDLEVEL HEX 0000 ; NUMERO DU LEVEL EN ENTREE
|
|
|
|
AFFLEVL1 LDA #LEVELCO1
|
|
STA AFFLEVL7+1
|
|
BRA AFFLEVL4
|
|
AFFLEVL2 LDA #LEVELCO2
|
|
STA AFFLEVL7+1
|
|
BRA AFFLEVL4
|
|
AFFLEVL3 LDA #LEVELCO3
|
|
STA AFFLEVL7+1
|
|
AFFLEVL4 LDA LEVEL
|
|
* INC
|
|
CMP #$0064 ; 100
|
|
BMI AFFLEVL5
|
|
LDX #$0001
|
|
STX LEVELC
|
|
SEC
|
|
SBC #$0064
|
|
AFFLEVL5 ASL
|
|
TAX
|
|
LDA HEXDEC,X
|
|
XBA
|
|
AND #$00FF
|
|
STA LEVELU
|
|
LDA HEXDEC,X
|
|
AND #$00FF
|
|
STA LEVELD
|
|
LDY #$0000
|
|
AFFLEVL6 LDA LEVELC,Y
|
|
CLC
|
|
ADC #$0057
|
|
TAX
|
|
AFFLEVL7 LDA LEVELCO1,Y
|
|
STA AFTAE
|
|
JSR AFTCAR ; AFFICHE
|
|
INY
|
|
INY
|
|
CPY #$0006
|
|
BNE AFFLEVL6
|
|
STZ LEVELC
|
|
RTS
|
|
|
|
MAJLEVEL JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU
|
|
LDA OLDLEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU
|
|
JSR COPYDES
|
|
LDA LEVEL
|
|
JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A
|
|
JSR CONVLVL ; CONVERTI LES VALEURS
|
|
RTS
|
|
|
|
MAJPICT LDA LEVEL ; DOIT ON CHANGER LE DECOR
|
|
ASL
|
|
TAX
|
|
LDA HEXDEC,X
|
|
AND #$00FF
|
|
STA MAJPICLE
|
|
LDA OLDLEVEL
|
|
ASL
|
|
TAX
|
|
LDA HEXDEC,X
|
|
AND #$00FF
|
|
CMP MAJPICLE
|
|
BNE MAJPICT2
|
|
RTS
|
|
MAJPICT2 LDA LEVEL ; CHARGE LE FICHIER NIVlevel
|
|
STA level
|
|
JSR loadNIV
|
|
JSR MAKESPR ; CREATION DE LA PLANCHE SPRITE AVEC PALETTE ET ZONE ROSE
|
|
RTS
|
|
|
|
MAJPICLE HEX 0000
|
|
|
|
LEVELCO1 HEX 4615,4A15,4E15 ; AFFICHAGE GAUCHE
|
|
LEVELCO2 HEX CA2A,CE2A,D22A ; AFFICHAGE MILIEU
|
|
LEVELCO3 HEX CE15,D215,D615 ; AFFICHAGE DROITE
|
|
|
|
************** SELECT GROUND
|
|
|
|
ECR0500 LDX SECR2+1 ; GROUND : SURFACE
|
|
LDA #ECR0501
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0501 NOP
|
|
LDA POSX
|
|
SEC
|
|
SBC #$006A ; 106
|
|
TAX
|
|
LDA ZONEGRH,X
|
|
AND #$00FF
|
|
BEQ ECR0502 ; RIEN
|
|
DEC
|
|
TAY ; SAUVEGARDE
|
|
LDA POSY
|
|
SEC
|
|
SBC #$0015 ; 21
|
|
TAX
|
|
LDA ZONEGRV,X
|
|
AND #$00FF
|
|
BEQ ECR0502 ; RIEN
|
|
STY GRZONE
|
|
DEC
|
|
ASL
|
|
ASL ; *4
|
|
CLC
|
|
ADC GRZONE
|
|
STA GRZONE
|
|
JSR SEBLCKG ; AFFICHAGE BLOCK DANS LE MENU
|
|
ECR0502 JSR CLNGROU ; NETTOY
|
|
LDA DROITE
|
|
STA ECRAN
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
GRZONE HEX 0000
|
|
|
|
*************** SELECT ITEM
|
|
|
|
ECR0600 LDX SECR2+1 ; ITEM
|
|
LDA #ECR0601
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0601 NOP
|
|
LDA POSX
|
|
SEC
|
|
SBC #$005C ; 92
|
|
TAX
|
|
LDA ZONEGRH,X
|
|
AND #$00FF
|
|
BEQ ECR0602 ; RIEN
|
|
DEC
|
|
TAY ; SAUVEGARDE
|
|
LDA POSY
|
|
SEC
|
|
SBC #$0028 ; 40
|
|
TAX
|
|
LDA ZONEGRV,X
|
|
AND #$00FF
|
|
BEQ ECR0602 ; RIEN
|
|
STY ITZONE
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA MULCINQ,X ; *5
|
|
CLC
|
|
ADC ITZONE
|
|
ASL
|
|
TAX
|
|
LDA ITCVTAB,X
|
|
STA ITZONE
|
|
CMP #$0032 ; TINIES
|
|
BEQ ECR0603
|
|
CMP #$001D ; BOMBE
|
|
BEQ ECR0603
|
|
CMP #$0015 ; SLEEPER
|
|
BEQ ECR0603
|
|
CMP #$0019 ; TELEPORTEUR
|
|
BEQ ECR0603
|
|
CMP #$0021 ; PORTE
|
|
BEQ ECR0603
|
|
CMP #$0025 ; INTERRUPTEUR
|
|
BEQ ECR0603
|
|
JSR SEBLCKI ; AFFICHAGE BLOCK DANS LE MENU
|
|
ECR0602 JSR CLNITEM ; NETTOY
|
|
LDA DROITE
|
|
STA ECRAN
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
ECR0603 JSR CLNITEM ; NETTOY
|
|
LDA #$0007 ; COULEUR NECESSAIRE
|
|
JMP PICT1
|
|
|
|
ITZONE HEX 3300 ; TINIES BLEU
|
|
MULCINQ HEX 0000,0500,0A00,0F00,1400,1900,1E00
|
|
|
|
ITCVTAB HEX 3200,1D00,2E00,2F00,3000
|
|
HEX 2900,2A00,2B00,2C00,1400
|
|
HEX 1500,1900,2100,2500,2D00
|
|
|
|
**************** SELECT COLOR
|
|
|
|
ECR0700 LDX SECR2+1 ; COLOR
|
|
LDA #ECR0701
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR0701 NOP
|
|
LDA POSX
|
|
SEC
|
|
SBC #$006A ; 106
|
|
TAX
|
|
LDA ZONEGRH,X
|
|
AND #$00FF
|
|
BEQ ECR0702 ; RIEN
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA COLOCVT,X ; TABLE DE CONVERSION COULEUR-INDICE
|
|
CLC
|
|
ADC ITZONE
|
|
STA ITZONE
|
|
JSR CLNCOLO ; NETTOY
|
|
JSR SEBLCKI ; AFFICHAGE DU BLOC DANS LE MENU
|
|
LDA DROITE
|
|
JMP PICT1
|
|
ECR0702 JMP SOURIS1
|
|
|
|
COLOCVT HEX 0100,0000,0300,0200
|
|
|
|
**************** MENU
|
|
|
|
ECR0800 LDX SECR2+1 ; MENU : LOAD
|
|
LDA #ECR0801
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0801 NOP
|
|
lda #pTAB
|
|
ldx ptrTAB+1
|
|
JSR loadFILE
|
|
LDA LEVEL
|
|
JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A
|
|
JSR CONVLVL ; CONVERTI LES VALEURS
|
|
lda LEVEL ; MISE A JOUR DU TEMPS
|
|
sta OLDLEVEL
|
|
sta level
|
|
jsr doTIME ; +
|
|
lda minutes ; +
|
|
sta TIMEMIN ; +
|
|
lda secondes ; +
|
|
sta TIMESEC ; +
|
|
* LDA TIMEMIN
|
|
* STA minutes
|
|
* LDA TIMESEC
|
|
* STA secondes
|
|
* JSR putTIME
|
|
JMP SOURIS1
|
|
|
|
ECR0810 LDX SECR2+1 ; MENU : SAVE
|
|
LDA #ECR0811
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0811 NOP
|
|
JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU
|
|
LDA LEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU
|
|
JSR COPYDES
|
|
lda LEVEL ; CHARGE LE NOUVEAU TIME
|
|
sta OLDLEVEL
|
|
sta level
|
|
lda TIMEMIN ; +
|
|
sta minutes ; +
|
|
lda TIMESEC ; +
|
|
sta secondes ; +
|
|
jsr putTIME ; +
|
|
* jsr doTIME
|
|
* LDA minutes
|
|
* STA TIMEMIN
|
|
* LDA secondes
|
|
* STA TIMESEC
|
|
JSR saveFILE
|
|
JMP SOURIS1
|
|
|
|
ECR0820 LDX SECR2+1 ; MENU : CUT
|
|
LDA #ECR0821
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0821 NOP
|
|
JSR CONVBUF ; CONV GROU+ITE -> LEVEL
|
|
JSR CUT ; COPY LEVEL -> CLIPBOARD
|
|
LDA #$0001
|
|
STA CLIPFLAG
|
|
JMP SOURIS1
|
|
|
|
ECR0830 LDX SECR2+1 ; MENU : PASTE
|
|
LDA #ECR0831
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0831 NOP
|
|
LDA CLIPFLAG
|
|
BEQ ECR0832
|
|
JSR PASTE ; COPY CLIPBOARD -> LEVEL
|
|
JSR CONVLVL ; CONV LEVEL -> GROU+ITE
|
|
ECR0832 JMP SOURIS1
|
|
|
|
CLIPFLAG HEX 0000 ; 0:VIDE, 1:PLEIN
|
|
|
|
ECR0840 LDX SECR2+1 ; MENU : ABOUT
|
|
LDA #ECR0841
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0841 NOP
|
|
JSR CLNMENU
|
|
JMP ABOUT
|
|
|
|
ECR0850 LDX SECR2+1 ; MENU : OK
|
|
LDA #ECR0851
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0851 NOP
|
|
JSR CLNMENU ; NETTOY
|
|
LDA DROITE
|
|
JMP PICT1
|
|
|
|
*************** DOC
|
|
|
|
ECR0900 LDX SECR2+1 ; <
|
|
LDA #ECR0901
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0901 NOP
|
|
LDA AFTIND
|
|
BEQ ECR0902
|
|
DEC
|
|
STA AFTIND
|
|
JSR AFTPAG ; AFICHAGE PAGE PRECEDENTE
|
|
ECR0902 JMP SOURIS1
|
|
|
|
ECR0910 LDX SECR2+1 ; >
|
|
LDA #ECR0911
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0911 NOP
|
|
LDA AFTIND
|
|
ECR0912 CMP #$0006 ; NB DE PAGES MAXI
|
|
BEQ ECR0913
|
|
INC
|
|
STA AFTIND
|
|
JSR AFTPAG ; AFFICHAGE PAGE SUIVANTE
|
|
ECR0913 JMP SOURIS1
|
|
|
|
ECR0920 LDX SECR2+1 ; o
|
|
LDA #ECR0921
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0921 NOP
|
|
LDA AFTIND ; SAUT A LA 1ere PAGE
|
|
BEQ ECR0922
|
|
STZ AFTIND
|
|
JSR AFTPAG
|
|
ECR0922 JMP SOURIS1
|
|
|
|
ECR0930 LDX SECR2+1 ; OK
|
|
LDA #ECR0931
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR0931 NOP
|
|
STZ AFTIND
|
|
JMP LP4 ; FADE OUT ET RETOUR A L'ECRAN PRINCIPAL
|
|
|
|
DOCADR HEX 0000 ; ADRESSE DU TEXTE DOCU (FRANCAIS/ANGLAIS)
|
|
|
|
************* QUIT
|
|
|
|
ECR1000 LDX SECR2+1 ; QUIT : QUIT
|
|
LDA #ECR1001
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR1001 NOP
|
|
JSR CLNQUIT
|
|
JMP initOFF ; GOOD BYE
|
|
|
|
ECR1010 LDX SECR2+1 ; QUIT : OK
|
|
LDA #ECR1011
|
|
STA BUMPER5+1
|
|
JMP BUMPER0
|
|
ECR1011 NOP
|
|
JSR CLNQUIT ; NETTOY
|
|
LDA DROITE
|
|
JMP PICT1
|
|
|
|
************ WARNING
|
|
|
|
ECR1100 LDX SECR2+1 ; WARNING : OK
|
|
LDA #ECR1101
|
|
STA BUMPER5+1
|
|
JMP BUMPER
|
|
ECR1101 NOP
|
|
JSR CLNWARN ; NETTOY
|
|
LDA DROITE
|
|
JMP PICT
|
|
|
|
************ ECRAN ABOUT ***********
|
|
|
|
ABOUT JSR fadeOUT ; AFFICHE L'ECRAN ABOUT
|
|
* LDA ptrABOUT+1
|
|
* LDY #$0000
|
|
* JSR fadeIN
|
|
jsr aboutMENU
|
|
|
|
JSR SBOUT ; ATTEND UN CLICK DE SOURIS
|
|
|
|
LP4 JSR fadeOUT
|
|
LDA ptrNIV+1
|
|
AND #$FF00
|
|
ORA #$007E
|
|
STA LP3+2
|
|
LDX #$001F ; PALETTE IMAGE
|
|
LP3 LDAL $047E00,X
|
|
STAL $019E00,X
|
|
DEX
|
|
DEX
|
|
BPL LP3
|
|
LDA DROITE
|
|
JMP PICT ; REVIENS A L'IMAGE
|
|
|
|
************* VERIFICATION DU CONTENU DU NIVEAU *************
|
|
|
|
VERIFOK LDX #$0010
|
|
LDA #$0000
|
|
VERIFO1 STA TINIEV,X ; REMISE A ZERO
|
|
DEX
|
|
DEX
|
|
BPL VERIFO1
|
|
LDY #$019E ; ON COMPTE CHAQUE OCCURENCE DES TINIES & SLEEPER
|
|
VERIFO2 LDA GROUBUF,Y
|
|
LDX #$0000
|
|
CMP #$0032 ; TINIE VERT
|
|
BEQ VERIFO3
|
|
LDX #$0002
|
|
CMP #$0033 ; TINIE BLEU
|
|
BEQ VERIFO3
|
|
LDX #$0004
|
|
CMP #$0034 ; TINIE ROUGE
|
|
BEQ VERIFO3
|
|
LDX #$0006
|
|
CMP #$0035 ; TINIE JAUNE
|
|
BEQ VERIFO3
|
|
LDX #$0008
|
|
CMP #$0015 ; SLEEPER VERT
|
|
BEQ VERIFO3
|
|
LDX #$000A
|
|
CMP #$0016 ; SLEEPER BLEU
|
|
BEQ VERIFO3
|
|
LDX #$000C
|
|
CMP #$0017 ; SLEEPER ROUGE
|
|
BEQ VERIFO3
|
|
LDX #$000E
|
|
CMP #$0018 ; SLEEPER JAUNE
|
|
BEQ VERIFO3
|
|
LDX #$0010
|
|
VERIFO3 INC TINIEV,X
|
|
DEY
|
|
DEY
|
|
BPL VERIFO2
|
|
LDA SLEEPV ; ON VERIFIE
|
|
CMP TINIEV
|
|
BMI VERIFO4
|
|
LDA SLEEPB
|
|
CMP TINIEB
|
|
BMI VERIFO5
|
|
LDA SLEEPR
|
|
CMP TINIER
|
|
BMI VERIFO6
|
|
LDA SLEEPJ
|
|
CMP TINIEJ
|
|
BMI VERIFO7
|
|
LDA TINIEV
|
|
ORA TINIEB
|
|
ORA TINIER
|
|
ORA TINIEJ
|
|
BEQ VERIFO8
|
|
CLC
|
|
RTS ; OK PAS DE PROBLEME
|
|
VERIFO4 LDA #$0001 ; PAS ASSEZ DE SLEEPER VERT
|
|
STA ERRORFL
|
|
SEC
|
|
RTS
|
|
VERIFO5 LDA #$0002 ; PAS ASSEZ DE SLEEPER BLEU
|
|
STA ERRORFL
|
|
SEC
|
|
RTS
|
|
VERIFO6 LDA #$0003 ; PAS ASSEZ DE SLEEPER ROUGE
|
|
STA ERRORFL
|
|
SEC
|
|
RTS
|
|
VERIFO7 LDA #$0004 ; PAS ASSEZ DE SLEEPER JAUNE
|
|
STA ERRORFL
|
|
SEC
|
|
RTS
|
|
VERIFO8 LDA #$0005 ; PAS DE TINIES !!
|
|
STA ERRORFL
|
|
SEC
|
|
RTS
|
|
|
|
TINIEV HEX 0000 ; NOMBRE DE TINIES
|
|
TINIEB HEX 0000
|
|
TINIER HEX 0000
|
|
TINIEJ HEX 0000
|
|
|
|
SLEEPV HEX 0000 ; NOMBRE DE SLEEPER
|
|
SLEEPB HEX 0000
|
|
SLEEPR HEX 0000
|
|
SLEEPJ HEX 0000
|
|
ERRORFL HEX 0000
|
|
|
|
ERRTINIE LDA #ERRMES1 ; PAS DE TINIES
|
|
LDX #$2A18
|
|
JSR ERRAFF
|
|
LDA #ERRMES2
|
|
LDX #$2DD8
|
|
JSR ERRAFF
|
|
LDA #ERRMES3
|
|
LDX #$3198
|
|
JSR ERRAFF
|
|
LDA #TEXTEFRD
|
|
STA AFTLIG1+1
|
|
RTS
|
|
|
|
ERRSLVR LDA #ERRMES5
|
|
LDX #$3198
|
|
JSR ERRAFF
|
|
JMP ERRSLEEP
|
|
ERRSLBL LDA #ERRMES7
|
|
LDX #$3198
|
|
JSR ERRAFF
|
|
JMP ERRSLEEP
|
|
ERRSLRG LDA #ERRMES6
|
|
LDX #$3198
|
|
JSR ERRAFF
|
|
JMP ERRSLEEP
|
|
ERRSLJN LDA #ERRMES8
|
|
LDX #$3198
|
|
JSR ERRAFF
|
|
JMP ERRSLEEP
|
|
|
|
ERRSLEEP LDA #ERRMES1 ; PROBLEME DE SLEEPER
|
|
LDX #$2A18
|
|
JSR ERRAFF
|
|
LDA #ERRMES4
|
|
LDX #$2DD8
|
|
JSR ERRAFF
|
|
LDA #TEXTEFRD
|
|
STA AFTLIG1+1
|
|
RTS
|
|
|
|
ERRAFF STX AFTAE
|
|
STA AFTLIG1+1
|
|
LDY #$0000
|
|
JSR AFTLIG1
|
|
RTS
|
|
|
|
ERRMES1 ASC " IMPOSSIBLE ! ",8D
|
|
ERRMES2 ASC "IL N'Y A PAS DE ",8D
|
|
ERRMES3 ASC " TINIES EN JEU. ",8D
|
|
ERRMES4 ASC "IL MANQUE DES ",8D
|
|
ERRMES5 ASC " SLEEPER VERTS.",8D
|
|
ERRMES6 ASC " SLEEPER ROUGES.",8D
|
|
ERRMES7 ASC " SLEEPER BLEUS.",8D
|
|
ERRMES8 ASC " SLEEPER JAUNES.",8D
|
|
|
|
ERRMESU ASC " IMPOSSIBLE ! ",8D
|
|
ASC "THERE IS NOT ANY",8D
|
|
ASC "TINIES ON GAME. ",8D
|
|
ASC "THERE IS A LACK ",8D
|
|
ASC "OF GREEN SLEEPER",8D
|
|
ASC "OF RED SLEEPER. ",8D
|
|
ASC "OF BLUE SLEEPER.",8D
|
|
ASC "OF YELOW SLEEPER",8D
|
|
|
|
************* GESTION DU CONTENU DES NIVEAUX
|
|
|
|
COPYLVL ASL ; COPY DU Aeme NIVEAU DANS LEVELBUF
|
|
TAX
|
|
LDA MULDCH,X ; *208
|
|
TAX
|
|
LDY #$0000
|
|
COPYLVL1 LDAL $058000,X
|
|
STA LEVELBUF,Y
|
|
INX
|
|
INX
|
|
INY
|
|
INY
|
|
CPY #$00D0
|
|
BNE COPYLVL1
|
|
RTS
|
|
|
|
COPYDES ASL ; COPY DE LEVELBUF A LA PLACE DU Aeme NIVEAU
|
|
TAX
|
|
LDA MULDCH,X ; *208
|
|
TAX
|
|
LDY #$0000
|
|
COPYDES1 LDA LEVELBUF,Y
|
|
COPYDES2 STAL $058000,X
|
|
INX
|
|
INX
|
|
INY
|
|
INY
|
|
CPY #$00D0
|
|
BNE COPYDES1
|
|
RTS
|
|
|
|
CONVLVL LDX #$0000 ; CONVERSION LEVELBUF -> GROUBUF,ITEBUF
|
|
LDY #$0000
|
|
CONVLVL1 LDA LEVELBUF,Y ; GROUND
|
|
AND #$00FF
|
|
STA GROUBUF,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF1,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF2,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF3,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF4,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF5,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF6,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA GROUBUF7,X
|
|
INY
|
|
INX
|
|
INX
|
|
CPX #$001A ; 13*2
|
|
BNE CONVLVL1
|
|
LDX #$0000
|
|
CONVLVL2 LDA LEVELBUF,Y ; ITEM
|
|
AND #$00FF
|
|
STA ITEMBUF,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF1,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF2,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF3,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF4,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF5,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF6,X
|
|
INY
|
|
LDA LEVELBUF,Y
|
|
AND #$00FF
|
|
STA ITEMBUF7,X
|
|
INY
|
|
INX
|
|
INX
|
|
CPX #$001A ; 13*2
|
|
BNE CONVLVL2
|
|
LDX #$00CE ; CONVERSION DE LA PARTIE GROUND
|
|
CONVLVL3 LDA GROUBUF,X
|
|
CMP #$00FF
|
|
BNE CONVLVL7
|
|
LDA #$0031 ; VIDE
|
|
BRA CONVLVL5
|
|
CONVLVL7 ASL
|
|
TAY
|
|
LDA CONVLBG,Y
|
|
CONVLVL5 STA GROUBUF,X
|
|
DEX
|
|
DEX
|
|
BPL CONVLVL3
|
|
LDX #$00CE ; CONVERSION DE LA PARTIE ITEM
|
|
CONVLVL4 LDA ITEMBUF,X
|
|
CMP #$00FF
|
|
BNE CONVLVL8
|
|
LDA #$0031 ; VIDE
|
|
BRA CONVLVL6
|
|
CONVLVL8 ASL
|
|
TAY
|
|
LDA CONVLBI,Y
|
|
CONVLVL6 STA ITEMBUF,X
|
|
DEX
|
|
DEX
|
|
BPL CONVLVL4
|
|
RTS
|
|
|
|
CONVBUF LDY #$0000 ; CONVERSION BUFF -> LEVEL
|
|
LDX #$0000
|
|
CONVBUF1 LDA GROUBUF,X ; GROUND
|
|
AND #$00FF
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF1,X
|
|
AND #$00FF
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF2,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF3,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF4,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF5,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF6,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA GROUBUF7,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
INX
|
|
INX
|
|
CPX #$001A ; 13*2
|
|
BNE CONVBUF1
|
|
LDX #$0000
|
|
CONVBUF2 LDA ITEMBUF,X ; GROUND
|
|
AND #$00FF
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF1,X
|
|
AND #$00FF
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF2,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF3,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF4,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF5,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF6,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
LDA ITEMBUF7,X
|
|
STA LEVELBUF,Y
|
|
INY
|
|
INX
|
|
INX
|
|
CPX #$001A ; 13*2
|
|
BNE CONVBUF2
|
|
LDX #$0000 ; CONVERSION CODE BUF -> CODE LVL
|
|
CONVBUF3 LDA LEVELBUF,X
|
|
AND #$00FF
|
|
ASL
|
|
TAY
|
|
LDA CONVBULV,Y
|
|
STA CONVBUF4+1
|
|
LDA LEVELBUF,X
|
|
AND #$FF00
|
|
CONVBUF4 ORA #$00FF
|
|
STA LEVELBUF,X
|
|
INX
|
|
CPX #$00D0 ; 13*8 *2
|
|
BNE CONVBUF3
|
|
RTS
|
|
|
|
CUT LDX #$00CE ; COPY LEVEL -> CLIPBOARD
|
|
CUT1 LDA LEVELBUF,X
|
|
STA CLIPBBUF,X
|
|
DEX
|
|
DEX
|
|
BPL CUT1
|
|
RTS
|
|
|
|
PASTE LDX #$00CE ; COPY CLIPBOARD -> LEVEL
|
|
PASTE1 LDA CLIPBBUF,X
|
|
STA LEVELBUF,X
|
|
DEX
|
|
DEX
|
|
BPL PASTE1
|
|
RTS
|
|
|
|
CONVLBG HEX 0000,0100,0200,0300,0700,0D00,3600,0600,0400,1300,0B00
|
|
HEX 0F00,0500,0800,1200,0A00,1000,1100,0900,0E00,0C00
|
|
|
|
CONVLBI HEX 3200,3300,3400,3500,1500,1600,1700,1800,1900,1A00,1B00,1C00,1D00
|
|
HEX 1E00,1F00,2000,2100,2200,2300,2400,2500,2600,2700
|
|
HEX 2800,2900,2A00,2B00,2C00,2D00,2E00,2F00,3000,1400
|
|
|
|
CONVBULV HEX 0000,0100,0200,0300,0800,0C00,0700,0400,0D00,1200
|
|
HEX 0F00,0A00,1400,0500,1300,0B00,1000,1100,0E00,0900
|
|
HEX 2000,0400,0500,0600,0700,0800,0900,0A00,0B00,0C00
|
|
HEX 0D00,0E00,0F00,1000,1100,1200,1300,1400,1500,1600
|
|
HEX 1700,1800,1900,1A00,1B00,1C00,1D00,1E00,1F00,FF00
|
|
HEX 0000,0100,0200,0300,0600
|
|
|
|
MULDCH HEX 0000,D000,A001,7002,4003,1004,E004,B005,8006,5007,2008,F008,C009,900A,600B,300C
|
|
HEX 000D,D00D,A00E,700F,4010,1011,E011,B012,8013,5014,2015,F015,C016,9017,6018,3019
|
|
HEX 001A,D01A,A01B,701C,401D,101E,E01E,B01F,8020,5021,2022,F022,C023,9024,6025,3026
|
|
HEX 0027,D027,A028,7029,402A,102B,E02B,B02C,802D,502E,202F,F02F,C030,9031,6032,3033
|
|
HEX 0034,D034,A035,7036,4037,1038,E038,B039,803A,503B,203C,F03C,C03D,903E,603F,3040
|
|
HEX 0041,D041,A042,7043,4044,1045,E045,B046,8047,5048,2049,F049,C04A,904B,604C,304D
|
|
HEX 004E,D04E,A04F,7050,4051,1052,E052,B053,8054,5055,2056,F056,C057,9058,6059,305A
|
|
|
|
GROUBUF HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF1 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF2 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF3 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF4 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF5 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF6 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
GROUBUF7 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
|
|
ITEMBUF HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF1 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF2 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF3 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF4 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF5 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF6 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
ITEMBUF7 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
|
|
|
|
LEVELBUF HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0000
|
|
|
|
CLIPBBUF HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0000
|
|
|
|
***************************************************************************
|
|
****************************** DATA *************************************
|
|
***************************************************************************
|
|
|
|
************ BUMPER MANAGER ************ PAVE
|
|
|
|
BUMPER LDA #$0000 ; PREMIERE PLANCHE SPRITE
|
|
BRA BUMPER7
|
|
BUMPER0 LDA #$0001 ; DEUXIEME PLANCHE SPRITE
|
|
BUMPER7 STA PLANCHE
|
|
LDA FLAGTAB,X
|
|
BEQ BUMPER2
|
|
LDA BOUT
|
|
BEQ BUMPER1
|
|
BUMPER6 JMP SOURIS
|
|
BUMPER1 STZ FLAGTAB,X ; RELEVE LE BUMPER ET EFFECTUE LE TRAITEMENT
|
|
STZ BMPFLG
|
|
JSR DESS1
|
|
JSR AFFSPRR
|
|
JSR SAUV
|
|
BUMPER5 JMP $FFFF ; TRAITEMENT A EFFECTUER
|
|
BUMPER2 STX BUMPER4+1 ; SAUVEGARDE TEMPORAIRE DE X
|
|
LDA BMPFLG
|
|
BEQ BUMPER3
|
|
LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN
|
|
STZ FLAGTAB,X
|
|
STZ BMPFLG
|
|
STX SECR2+1
|
|
JSR DESS1
|
|
JSR AFFSPRR
|
|
JSR SAUV
|
|
BUMPER3 LDA BOUT
|
|
BEQ BUMPER6 ; JMP SOURIS
|
|
BUMPER4 LDX #$FFFF ; RECUPERE LA VALEUR DE X PERTURBEE PAR LA REMONTE FORCEE
|
|
STX LAST ; ENFONCE LE BUMPER SUR LEQUEL ON SE TROUVE
|
|
LDA #$0001
|
|
STA BMPFLG
|
|
STA FLAGTAB,X
|
|
STX SECR2+1
|
|
JSR DESS1
|
|
JSR AFFSPRE
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
************* SURFACE MANAGER ************* ZONE D'ECRAN
|
|
|
|
SURFACE LDA BMPFLG ; X CONTIENT LE NUMERO DU BOUTON
|
|
BEQ SURFACE1
|
|
LDX LAST ; ON FORCE SA RELEVE
|
|
STZ BMPFLG
|
|
STZ FLAGTAB,X
|
|
STX SECR2+1
|
|
JSR DESS1
|
|
JSR AFFSPRR
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
SURFACE1 LDA BOUT
|
|
BEQ SURFACE2
|
|
SURFACE5 JMP $FFFF ; TRAITEMENT A EFFECTUER
|
|
SURFACE2 JMP SOURIS
|
|
|
|
******** TRAITEMENT PAR DEFAUT *********
|
|
|
|
BUMPDEF LDA BMPFLG
|
|
BEQ BUMPDEF1
|
|
LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN
|
|
STZ FLAGTAB,X
|
|
STZ BMPFLG
|
|
STX SECR2+1
|
|
JSR DESS1
|
|
JSR AFFSPRR
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
BUMPDEF1 JMP SOURIS
|
|
|
|
**********************************************
|
|
|
|
ZONESCR HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
|
|
HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
|
|
HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03
|
|
HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04
|
|
HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05
|
|
HEX 06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06
|
|
HEX 07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07
|
|
HEX 08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08
|
|
HEX 09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09
|
|
HEX 0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A
|
|
HEX 0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B
|
|
HEX 0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C
|
|
HEX 0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D
|
|
|
|
ZONEGRH HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,00,00,00,00
|
|
HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,00,00,00,00
|
|
HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,00,00,00,00
|
|
HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,00,00,00,00
|
|
HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,00,00,00,00
|
|
|
|
ZONEGRV HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,00,00,00
|
|
HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,00,00,00
|
|
HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,00,00,00
|
|
HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,00,00,00
|
|
HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,00,00,00
|
|
|
|
HEX 0B00 ; MAIN GAUCHE NB DE BOUTONS DANS ECRAN1
|
|
ECR01TAB HEX 0600,2A00,0600,1700 ; TIME TABLEAU DES BOUTONS POUR ECRAN1
|
|
HEX 0700,2800,2000,3100 ; LEVEL X0,X1 Y0,Y1
|
|
HEX 0800,2800,3A00,4500 ; PLAY
|
|
HEX 0400,2C00,4E00,7200 ; SELECT
|
|
HEX 0800,2800,7600,8100 ; v/^
|
|
HEX 0800,2800,8A00,9500 ; MENU
|
|
HEX 0800,2800,9A00,A500 ; DOCU
|
|
HEX 0800,2800,AA00,B500 ; QUIT
|
|
HEX 0800,1400,B900,C400 ; <
|
|
HEX 1C00,2800,B900,C400 ; >
|
|
HEX 3400,3B01,0400,C300 ; ZONE QUADRILLEE
|
|
|
|
ECR01DAT HEX 0700,0500,452B,7345,6045 ; TIME LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE RELEVE, @ SPRITE ENFONCE
|
|
HEX 0900,0500,833B,3349,2049 ; LEVEL
|
|
HEX 0900,0B00,4444,F34C,E04C ; PLAY
|
|
HEX 0B00,0500,2264,7754,6054 ; SELECT
|
|
HEX 0900,0B00,C469,3358,2058 ; v/^
|
|
HEX 0900,0B00,4476,B35F,A05F ; MENU
|
|
HEX 0900,0B00,4480,3367,2067 ; DOCU
|
|
HEX 0900,0B00,448A,B36E,A06E ; QUIT
|
|
HEX 0400,0B00,A493,3276,2076 ; <
|
|
HEX 0400,0B00,AE93,3B76,2976 ; >
|
|
HEX 0100,0100,009F,009F,009F ; SPRITE INVISIBLE
|
|
|
|
HEX 0B00 ; MAIN DROITE
|
|
ECR02TAB HEX 1601,3A01,0600,1700 ; TIME
|
|
HEX 1701,3801,2000,3100 ; LEVEL
|
|
HEX 1801,3801,3A00,4500 ; PLAY
|
|
HEX 1401,3C01,4E00,7200 ; SELECT
|
|
HEX 1801,3801,7600,8100 ; v/^
|
|
HEX 1801,3801,8A00,9500 ; MENU
|
|
HEX 1801,3801,9A00,A500 ; DOCU
|
|
HEX 1801,3801,AA00,B500 ; QUIT
|
|
HEX 1801,2401,B900,C400 ; <
|
|
HEX 2C01,3801,B900,C400 ; >
|
|
HEX 0400,0B01,0400,C300 ; ZONE QUDRILLEE
|
|
|
|
ECR02DAT HEX 0700,0500,CD2B,7345,6045 ; TIME LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE RELEVE, @ SPRITE ENFONCE
|
|
HEX 0900,0500,0B3C,3349,2049 ; LEVEL
|
|
HEX 0900,0B00,CC44,F34C,E04C ; PLAY
|
|
HEX 0B00,0500,AA64,7754,6054 ; SELECT
|
|
HEX 0900,0B00,4C6A,3358,2058 ; v/^
|
|
HEX 0900,0B00,CC76,B35F,A05F ; MENU
|
|
HEX 0900,0B00,CC80,3367,2067 ; DOCU
|
|
HEX 0900,0B00,CC8A,B36E,A06E ; QUIT
|
|
HEX 0400,0B00,2C94,3276,2076 ; <
|
|
HEX 0400,0B00,3694,3B76,2976 ; >
|
|
HEX 0100,0100,009F,009F,009F
|
|
|
|
HEX 0500 ; TIME
|
|
ECR03TAB HEX 8600,9100,5000,5900 ; <<
|
|
HEX 9400,9F00,5000,5900 ; >>
|
|
HEX A200,AD00,5000,5900 ; <
|
|
HEX B000,BB00,5000,5900 ; >
|
|
HEX 9000,B100,5E00,6900 ; OK
|
|
|
|
ECR03DAT HEX 0300,0900,4352,4658,4D58 ; <<
|
|
HEX 0300,0900,4A52,865E,8D5E ; >>
|
|
HEX 0300,0900,5152,C664,CD64 ; <
|
|
HEX 0300,0900,5852,066B,0D6B ; >
|
|
HEX 0900,0B00,085B,8645,4476 ; OK
|
|
|
|
HEX 0500 ; LEVEL
|
|
ECR04TAB HEX 8600,9100,5000,5900 ; <<
|
|
HEX 9400,9F00,5000,5900 ; <
|
|
HEX A200,AD00,5000,5900 ; >
|
|
HEX B000,BB00,5000,5900 ; >>
|
|
HEX 9000,B100,5E00,6900 ; OK
|
|
|
|
ECR04DAT HEX 0300,0900,4352,4658,4D58 ; <<
|
|
HEX 0300,0900,4A52,C664,CD64 ; <
|
|
HEX 0300,0900,5152,066B,0D6B ; >
|
|
HEX 0300,0900,5852,865E,8D5E ; >>
|
|
HEX 0900,0B00,085B,8645,4476 ; OK
|
|
|
|
HEX 0100 ; SELECT GROUND
|
|
ECR05TAB HEX 6A00,D500,1500,9900 ; GROUNDS
|
|
|
|
ECR05DAT HEX 0100,0100,009F,009F,009F
|
|
|
|
HEX 0100 ; SELECT ITEM
|
|
ECR06TAB HEX 5C00,E400,2800,7600 ; ITEMS
|
|
|
|
ECR06DAT HEX 0100,0100,009F,009F,009F
|
|
|
|
HEX 0100 ; SELECT COLOR
|
|
ECR07TAB HEX 6A00,D500,3C00,4F00 ; COLORS
|
|
|
|
ECR07DAT HEX 0100,0100,009F,009F,009F
|
|
|
|
HEX 0600 ; MENU
|
|
ECR08TAB HEX 5E00,A200,4800,5300 ; LOAD
|
|
HEX 5E00,A200,5600,6100 ; SAVE
|
|
HEX B800,E400,4100,4C00 ; CUT
|
|
HEX B800,E400,4F00,5A00 ; PASTE
|
|
HEX B800,E400,5D00,6800 ; ABOUT
|
|
HEX 9000,B100,6B00,7600 ; OK
|
|
|
|
ECR08DAT HEX 1100,0B00,2F4D,0D42,8D49 ; LOAD
|
|
HEX 1100,0B00,EF55,0D51,8D58 ; SAVE
|
|
HEX 0B00,0B00,FC48,6076,7776 ; CUT
|
|
HEX 0B00,0B00,BC51,8E76,A576 ; PASTE
|
|
HEX 0B00,0B00,7C5A,0D6F,246F ; ABOUT
|
|
HEX 0900,0B00,2863,ED31,0D3A ; OK
|
|
|
|
HEX 0400 ; DOCU
|
|
ECR09TAB HEX 6C00,7700,B600,BF00 ; <-
|
|
HEX 9000,9B00,B600,BF00 ; ->
|
|
HEX 8100,8600,B800,BD00 ; o
|
|
HEX 1201,2F01,B700,BE00 ; EXIT
|
|
|
|
ECR09DAT HEX 0300,0900,F691,7052,304C ; <-
|
|
HEX 0300,0900,0892,7752,374C ; ->
|
|
HEX 0200,0500,4093,3A01,9A05 ; o
|
|
HEX 0800,0700,E892,3042,3047 ; EXIT
|
|
|
|
HEX 0200 ; QUIT
|
|
ECR10TAB HEX 7E00,C300,4300,4E00 ; QUIT
|
|
HEX 9000,B100,5300,5E00 ; OK
|
|
|
|
ECR10DAT HEX 1200,0B00,1F4A,0D60,8D67 ; QUIT
|
|
HEX 0900,0B00,2854,ED31,0D3A ; OK
|
|
|
|
HEX 0100 ; WARNING
|
|
ECR11TAB HEX 9000,B000,5A00,6500 ; OK
|
|
|
|
ECR11DAT HEX 0900,0B00,8858,8645,4476 ; OK
|
|
|
|
****************
|
|
|
|
ECRTAB DA ECR01TAB,ECR02TAB,ECR03TAB,ECR04TAB ; ADRESSES DES TABLEAUX
|
|
DA ECR05TAB,ECR06TAB,ECR07TAB,ECR08TAB
|
|
DA ECR09TAB,ECR10TAB,ECR11TAB
|
|
|
|
ECRDAT DA ECR01DAT,ECR02DAT,ECR03DAT,ECR04DAT ; ADRESSE DES DONNEES BUMPERS
|
|
DA ECR05DAT,ECR06DAT,ECR07DAT,ECR08DAT
|
|
DA ECR09DAT,ECR10DAT,ECR11DAT
|
|
|
|
ECRDESA DA ECRDES1,ECRDES2,ECRDES3,ECRDES4 ; ADRESSE POUR LES DESTINATIONS
|
|
DA ECRDES5,ECRDES6,ECRDES7,ECRDES8
|
|
DA ECRDES9,ECRDES10,ECRDES11
|
|
|
|
****
|
|
|
|
ECRDES1 DA ECR0100,ECR0110,ECR0120,ECR0130,ECR0140 ; MAIN GAUCHE
|
|
DA ECR0150,ECR0160,ECR0170,ECR0180,ECR0190
|
|
DA ECR01B0
|
|
|
|
ECRDES2 DA ECR0100,ECR0110,ECR0120,ECR0130,ECR0140 ; MAIN DROITE
|
|
DA ECR0150,ECR0160,ECR0170,ECR0180,ECR0190
|
|
DA ECR01A0
|
|
|
|
ECRDES3 DA ECR0300,ECR0310,ECR0320,ECR0330,ECR0340 ; TIME
|
|
|
|
ECRDES4 DA ECR0400,ECR0410,ECR0420,ECR0430,ECR0440 ; LEVEL
|
|
|
|
ECRDES5 DA ECR0500 ; SELECT GROUND
|
|
|
|
ECRDES6 DA ECR0600 ; SELECT ITEM
|
|
|
|
ECRDES7 DA ECR0700 ; SELECT COLOR
|
|
|
|
ECRDES8 DA ECR0800,ECR0810,ECR0820,ECR0830,ECR0840 ; MENU
|
|
DA ECR0850
|
|
|
|
ECRDES9 DA ECR0900,ECR0910,ECR0920,ECR0930 ; DOCU
|
|
|
|
ECRDES10 DA ECR1000,ECR1010 ; QUIT
|
|
|
|
ECRDES11 DA ECR1100 ; WARNING
|
|
|
|
********************* SOUS ROUTINES SOURIS **************************
|
|
|
|
DEC HEX 000000000000 ; DECOR SOUS LE POINTEUR
|
|
HEX 000000000000
|
|
HEX 000000000000
|
|
HEX 000000000000
|
|
HEX 000000000000
|
|
HEX 000000000000
|
|
|
|
PTPAI HEX AAAAAAAA0000
|
|
HEX 0A00000A0000 ; POINTEUR POSITION PAIRE
|
|
HEX 00A000A00000
|
|
HEX 000A00A00000
|
|
HEX 0000AA000000
|
|
HEX 00000A000000
|
|
|
|
PTPAIMA HEX 00000000FFFF
|
|
HEX F0000000FFFF ; MASQUE POSITION PAIRE
|
|
HEX FF00000FFFFF
|
|
HEX FFF0000FFFFF
|
|
HEX FFFF00FFFFFF
|
|
HEX FFFFF0FFFFFF
|
|
|
|
PTIMP HEX 0AAAAAAAA000
|
|
HEX 00A00000A000 ; POINTEUR POSITION IMPAIRE
|
|
HEX 000A000A0000
|
|
HEX 0000A00A0000
|
|
HEX 00000AA00000
|
|
HEX 000000A00000
|
|
|
|
PTIMPMA HEX F00000000FFF
|
|
HEX FF0000000FFF ; MASQUE POSITION IMPAIRE
|
|
HEX FFF00000FFFF
|
|
HEX FFFF0000FFFF
|
|
HEX FFFFF00FFFFF
|
|
HEX FFFFFF0FFFFF
|
|
|
|
POSX HEX 0000 ; 0-312
|
|
POSY HEX 0000 ; 0-194
|
|
A1 HEX 0000 ; POSITION ACTUELLE
|
|
AP HEX 0000 ; ANCIENNE POSITION
|
|
ECRAN HEX 0100 ; ECRAN 1,2,3...
|
|
OLDECR HEX 0000 ; ECRAN PRECEDENT
|
|
GO HEX 0000 ; CONTIENT LE NUMERO DU BOUTON ENFONCE (A RELACHER)
|
|
LAST HEX 0000 ; DERNIER BUMPER ENFONCE
|
|
BMPFLG HEX 0000 ; A 1 SI UN BUMPER EST DEJA ENFONCE
|
|
|
|
BOUT HEX 0000 ; BOUTON
|
|
BOUT1 HEX 0000 ;
|
|
DELX HEX 000000
|
|
DELY HEX 000000 ; DONNEES SOURIS
|
|
NEX HEX 0000
|
|
NEY HEX 0000
|
|
|
|
FLAGTAB HEX 0000000000000000000000000000000000000000 ; FLAGS : 1 SI BUMPER ENFONCE
|
|
HEX 0000000000000000000000000000000000000000 ; NB DE BUMPER/BOUTON DANS 1 ECRAN
|
|
HEX 0000000000000000000000000000000000000000
|
|
HEX 0000000000000000000000000000000000000000
|
|
HEX 0000000000000000000000000000000000000000
|
|
|
|
TABLE HEX 0000A0004001E00180022003C00360040005A0054006E00680072008C0086009000AA00A400BE00B
|
|
HEX 800C200DC00D600E000FA00F4010E01080112012C01260130014A0144015E01580162017C0176018
|
|
HEX 0019A019401AE01A801B201CC01C601D001EA01E401FE01F80202021C02160220023A0234024E024
|
|
HEX 80252026C02660270028A0284029E029802A202BC02B602C002DA02D402EE02E802F2030C0306031
|
|
HEX 0032A0324033E03380342035C03560360037A0374038E0388039203AC03A603B003CA03C403DE03D
|
|
HEX 803E203FC03F60400041A0414042E04280432044C04460450046A0464047E04780482049C049604A
|
|
HEX 004BA04B404CE04C804D204EC04E604F0050A0504051E05180522053C05360540055A0554056E056
|
|
HEX 80572058C0586059005AA05A405BE05B805C205DC05D605E005FA05F4060E06080612062C0626063
|
|
HEX 0064A0644065E06580662067C06760680069A069406AE06A806B206CC06C606D006EA06E406FE06F
|
|
HEX 80702071C07160720073A0734074E07480752076C07660770078A0784079E079807A207BC07B607C
|
|
|
|
********************
|
|
|
|
SEXIT LDY #$FFFF
|
|
RTS
|
|
|
|
SLECT LDAL $00C026 ; $C027 LECTURE SOURIS
|
|
BPL SEXIT
|
|
AND #$0200
|
|
BEQ SLECT1
|
|
LDAL $00C024
|
|
BRA SLECT
|
|
SLECT1 LDA #$0000 ; BOUT,NEX,NEY A 0 PAR DEFAUT
|
|
STA BOUT
|
|
STA NEX
|
|
STA NEY
|
|
LDAL $00C023 ; $C024 : DELTA X
|
|
BIT #$4000 ; SIGNE ?
|
|
BNE SLECT3
|
|
AND #$3F00 ; POSITIF
|
|
STA DELX
|
|
BRA SLECT4
|
|
SLECT3 AND #$3F00 ; NEGATIF
|
|
STA SLECT33+1
|
|
INC NEX
|
|
LDA #$4000 ; 64
|
|
SEC
|
|
SLECT33 SBC #$0000
|
|
STA DELX
|
|
SLECT4 LDAL $00C023 ; $C024 : DELTA Y
|
|
BMI SLECT44 ; NO BOUT : LECTURE SUR Y DE BOUTON 1
|
|
INC BOUT ; BOUT=1
|
|
SLECT44 BIT #$4000 ; SIGNE ?
|
|
BNE SLECT5
|
|
AND #$3F00 ; POSITIF
|
|
STA DELY
|
|
BRA SLECT6
|
|
SLECT5 AND #$3F00 ; NEGATIF
|
|
STA SLECT55+1
|
|
INC NEY
|
|
LDA #$4000 ; 64
|
|
SEC
|
|
SLECT55 SBC #$0000
|
|
STA DELY
|
|
SLECT6 LDA NEX ; CALCUL DE POSX
|
|
BNE SLECT8
|
|
LDA POSX ; DELX > 0
|
|
CLC
|
|
ADC DELX+1
|
|
CMP #$0139 ; 313
|
|
BMI SLECT7
|
|
LDA #$0138 ; 312
|
|
SLECT7 STA POSX
|
|
BRA SLECT10
|
|
SLECT8 LDA POSX ; DELX < 0
|
|
SEC
|
|
SBC DELX+1
|
|
BPL SLECT9
|
|
LDA #$0000
|
|
SLECT9 STA POSX
|
|
SLECT10 LDA NEY ; CALCUL DE POSY
|
|
BNE SLECT12
|
|
LDA POSY ; DELY > 0
|
|
CLC
|
|
ADC DELY+1
|
|
CMP #$00C3 ; 195
|
|
BMI SLECT11
|
|
LDA #$00C2 ; 194
|
|
SLECT11 STA POSY
|
|
BRA SLECT14
|
|
SLECT12 LDA POSY ; DELY < 0
|
|
SEC
|
|
SBC DELY+1
|
|
BPL SLECT13
|
|
LDA #$0000
|
|
SLECT13 STA POSY
|
|
SLECT14 RTS
|
|
|
|
SBOUT LDAL $00C026 ; ON ATTEND UN CLICK DE SOURIS ($C027)
|
|
BPL SBOUT ; ET LE RELACHEMENT
|
|
AND #$0200
|
|
BEQ SBOUT1
|
|
LDAL $00C024
|
|
BRA SBOUT
|
|
SBOUT1 LDAL $00C023 ; DONNEES SOURIS PRETE $C024 : DELTA X
|
|
LDAL $00C023 ; $C024 : DELTA Y
|
|
BMI SBOUT ; LECTURE SUR Y DE BOUTON 1, BIT 7=0 <=> ENFONCE
|
|
SBOUT2 LDAL $00C026
|
|
BPL SBOUT2
|
|
AND #$0200
|
|
BEQ SBOUT3
|
|
LDAL $00C024
|
|
BRA SBOUT2
|
|
SBOUT3 LDAL $00C023 ; DONNEES SOURIS PRETE $C024 : DELTA X
|
|
LDAL $00C023 ; $C024 : DELTA Y
|
|
BPL SBOUT2 ; LECTURE SUR Y DE BOUTON 1, BIT 7=0 <=> ENFONCE
|
|
RTS
|
|
|
|
**********************
|
|
|
|
DESS1 LDA A1
|
|
BRA DESS2
|
|
DESS LDA AP ; DESSINE LE DECOR (LIE A AP), ANCIENNE POSITION
|
|
DESS2 CLC
|
|
ADC #$2000
|
|
STA DESS4+1
|
|
LDY #$0000
|
|
LDX #$0004 ; LARGEUR 3
|
|
DESS3 LDA DEC,Y
|
|
DESS4 STAL $E12000,X ; PROUT
|
|
INY
|
|
INY
|
|
DEX
|
|
DEX
|
|
BPL DESS3
|
|
CPY #$0024 ; NB CASES (36)
|
|
BPL DESS5
|
|
LDX #$0004 ; LARGEUR 3
|
|
LDA DESS4+1
|
|
CLC
|
|
ADC #$00A0
|
|
STA DESS4+1
|
|
BRA DESS3
|
|
DESS5 RTS
|
|
|
|
SAUV LDA A1 ; SAUVEGARDE LE DECOR (LIE A A1), NOUVELLE POSITION
|
|
CLC
|
|
ADC #$2000
|
|
STA SAUV1+1
|
|
LDY #$0000
|
|
LDX #$0004 ; LARGEUR 3
|
|
SAUV1 LDAL $E12000,X ; PROUT
|
|
STA DEC,Y
|
|
INY
|
|
INY
|
|
DEX
|
|
DEX
|
|
BPL SAUV1
|
|
CPY #$0024 ; NB CASES (36)
|
|
BPL SAUV2
|
|
LDX #$0004 ; LARGEUR 3
|
|
LDA SAUV1+1
|
|
CLC
|
|
ADC #$00A0
|
|
STA SAUV1+1
|
|
BRA SAUV1
|
|
SAUV2 RTS
|
|
|
|
TRACE JSR DESS ; OK
|
|
JSR SAUV
|
|
TRACE6 LDA A1 ; DESSINE LE POINTEUR POSITION PAIRE
|
|
CLC
|
|
ADC #$2000
|
|
STA TRACE1+1
|
|
STA TRACE4+1
|
|
LDA POSX
|
|
LSR
|
|
BCC TRACEP
|
|
LDX #PTIMP ; POSITION IMPAIRE
|
|
LDY #PTIMPMA
|
|
BRA TRACE0
|
|
TRACEP LDX #PTPAI ; POSITION PAIRE
|
|
LDY #PTPAIMA
|
|
TRACE0 STX TRACE3+1 ; MOTIF
|
|
STY TRACE2+1 ; MASQUE
|
|
LDY #$0000
|
|
LDX #$0000
|
|
TRACE1 LDAL $E12000,X ; PROUT
|
|
TRACE2 AND $A0A0,Y ; ET AVEC LE MASQUE
|
|
TRACE3 ORA $A0A0,Y ; OU AVEC LE MOTIF
|
|
TRACE4 STAL $E12000,X ; PROUT
|
|
INY
|
|
INY
|
|
INX
|
|
INX
|
|
CPX #$0006 ; LARGEUR 3
|
|
BNE TRACE1
|
|
CPY #$0024 ; NB CASES (36)
|
|
BEQ TRACE5
|
|
LDX #$0000
|
|
LDA TRACE1+1
|
|
CLC
|
|
ADC #$00A0
|
|
STA TRACE1+1
|
|
STA TRACE4+1
|
|
BRA TRACE1
|
|
TRACE5 RTS
|
|
|
|
************* AFFICHAGE BUMPER *************************
|
|
|
|
AFFSPRR INC AFFSPRF ; BUMPER RELEVE
|
|
AFFSPRE LDA PLANCHE ; BUMPER ENFONCE
|
|
BEQ AFFSPR6
|
|
LDA #$8000
|
|
STA AFFSPR4+1
|
|
AFFSPR6 LDA ECRAN ; ECRAN SELECTION GROUND,ITEM,COULEUR
|
|
AFFSPR0 DEC
|
|
ASL
|
|
TAX
|
|
LDA ECRDAT,X ; ADRESSE DU TABLEAU DES DATA POUR L'ECRAN CONCERNE
|
|
STA AFFSPR1+1
|
|
LDA SECR2+1 ; CONTIENT LE NUMERO DU BUMPER (*2)
|
|
ASL
|
|
ASL ; *5
|
|
CLC
|
|
ADC SECR2+1
|
|
CLC
|
|
AFFSPR1 ADC #$0000 ; ADRESSE DATA BUMPER
|
|
TAX
|
|
SECR14 LDA\ $0000,X ; LONGUEUR
|
|
DEC
|
|
ASL
|
|
STA AFFSPR3+1
|
|
INX
|
|
INX
|
|
SECR15 LDA\ $0000,X ; HAUTEUR
|
|
DEC
|
|
STA AFFSPR2+1
|
|
INX
|
|
INX
|
|
SECR16 LDA\ $0000,X ; @ ECRAN
|
|
STA AFFSPR5+1
|
|
INX
|
|
INX
|
|
LDA AFFSPRF ; FLAG DE AFFSPR
|
|
BEQ SECR18 ; ON DESSINE LE SPRITE RELEVE
|
|
SECR17 LDA\ $0000,X ; @ SPRITE RELEVE
|
|
CLC
|
|
ADC AFFSPR4+1
|
|
STA AFFSPR4+1
|
|
BRA AFFSPR2
|
|
SECR18 INX
|
|
INX
|
|
LDA\ $0000,X
|
|
CLC ; SPRITE ENFONCE
|
|
ADC AFFSPR4+1
|
|
STA AFFSPR4+1
|
|
AFFSPR2 LDY #$0000 ; HAUTEUR-1
|
|
AFFSPR3 LDX #$0000 ; NOMBRE DE *4-2
|
|
AFFSPR4 LDAL $042000,X ; ADRESSE SPRITE (BANC 04)
|
|
AFFSPR5 STAL $E12000,X ; ADRESSE ECRAN PROUT
|
|
DEX
|
|
DEX
|
|
BPL AFFSPR4 ; RECOPIE 1 LIGNE
|
|
LDA AFFSPR4+1
|
|
CLC ; LIGNE SUIVANTE SPRITE
|
|
ADC #$00A0
|
|
STA AFFSPR4+1
|
|
LDA AFFSPR5+1
|
|
CLC ; LIGNE SUIVANTE ECRAN
|
|
ADC #$00A0
|
|
STA AFFSPR5+1
|
|
DEY
|
|
BPL AFFSPR3
|
|
STZ AFFSPRF
|
|
STZ AFFSPR4+1 ; PAR DEFAUT PLANCHE 1
|
|
RTS
|
|
AFFSPRF HEX 0000 ; FLAG RELEVE/ENFONCE
|
|
PLANCHE HEX 0000 ; 0:PLANCHE 1, 1:PLANCHE 2
|
|
|
|
******************** TRAITEMENT ET AFFICHAGE ECRANS *********************
|
|
|
|
PICT1 LDX ECRAN ; PASSAGE ECRAN SANS CHANGEMENT DE FOND
|
|
STX OLDECR
|
|
STA ECRAN
|
|
JSR SAUV
|
|
JMP PICT21
|
|
|
|
PICT PHA
|
|
JSR SAUV
|
|
JSR DESS ; ENLEVE LE POINTEUR
|
|
PLA
|
|
LDX ECRAN
|
|
STX OLDECR
|
|
STA ECRAN
|
|
|
|
PICT21 JSR CLNFLG ; LES FLAGS DE BUMPER A ZERO
|
|
STZ BMPFLG ; LES FLAGS A ZERO
|
|
LDA ECRAN ; AFFICHAGES LIE A CHAQUE ECRAN
|
|
DEC
|
|
ASL
|
|
TAX
|
|
LDA ECRANTAB,X
|
|
STA PICT20+1
|
|
PICT20 JMP $FFFF ; ON VA SUR LA ROUTINE CORRESPONDANTE
|
|
|
|
ECRANTAB DA ECRMAI1,ECRMAI2,ECRTIME,ECRLEVE,ECRGROU ; NOM DES ECRANS POUR INIT D'AFFICHAGE
|
|
DA ECRITEM,ECRCOLO,ECRMENU,ECRDOCU,ECRQUIT
|
|
DA ECRWARN
|
|
|
|
CLNFLG LDX #$0062 ; ON MET TOUS LES FLAG DE BUMPER A 0
|
|
LDA #$0000
|
|
CLNFLG1 STA FLAGTAB,X
|
|
DEX
|
|
DEX
|
|
BPL CLNFLG1
|
|
RTS
|
|
|
|
CHANGFLG HEX 0000 ; 0 SI PAS DE CHANGEMENT D'ECRAN QUAND ON REVIENT DU CTPN
|
|
; 1 SI CHANGEMENT PIECES/FLECHES
|
|
; 2 SI CHANGEMENT DECOR
|
|
; 3 SI CHANGEMENT TOTAL : PIECES/FLECHES et DECOR
|
|
|
|
*********** TRAITEMENT INITIAL A L'AFFICHAGE D'UN ECRAN
|
|
|
|
ECRMAI1 NOP ; CREATION DE L'ECRAN
|
|
JSR AFFGAUCH ; AFFICHAGE A GAUCHE
|
|
LDA MAISELE
|
|
BEQ ECRMAI11
|
|
LDA ITZONE ; AFFICHAGE BLOCK ITEM DANS LE MENU
|
|
JSR SEBLCKI
|
|
JSR AFFECRG ; AFFICHE LE GROUND
|
|
JSR AFFECRI ; AFFICHE LES ITEM PAR DESSUS
|
|
BRA ECRMAI12
|
|
ECRMAI11 LDA GRZONE
|
|
JSR SEBLCKG ; AFFICHAGE BLOCK GROUND DANS LE MENU
|
|
JSR AFFECRG ; AFFICHE LE GROUND
|
|
ECRMAI12 JSR WAITVBL ; GRILLE
|
|
JSR GRILHM
|
|
JSR GRILHD
|
|
JSR GRILVM
|
|
JSR GRILVD
|
|
JSR EFFGAUCH ; BANDE NOIRE
|
|
JSR AFFLEVL1 ; AFFICHAGE DU LEVEL
|
|
JSR AFFTIMG
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRMAI2 NOP ; CREATION DE L'ECRAN
|
|
JSR AFFDROIT ; AFFICHAGE A DROITE
|
|
LDA MAISELE
|
|
BEQ ECRMAI21
|
|
LDA ITZONE ; AFFICHAGE BLOCK ITEM DANS LE MENU
|
|
JSR SEBLCKI
|
|
JSR AFFECRG ; AFFICHE LE FOND
|
|
JSR AFFECRI ; AFFICHE LES ITEM
|
|
BRA ECRMAI22
|
|
ECRMAI21 LDA GRZONE
|
|
JSR SEBLCKG ; AFFICHAGE BLOCK GROUND DANS LE MENU
|
|
JSR AFFECRG ; AFFICHE LE GROUND
|
|
ECRMAI22 JSR WAITVBL ; GRILLE
|
|
JSR GRILHM
|
|
JSR GRILHG
|
|
JSR GRILVM
|
|
JSR GRILVG
|
|
JSR EFFDROIT ; BANDE NOIRE
|
|
JSR AFFLEVL3 ; AFFICHAGE DU LEVEL
|
|
JSR AFFTIMD
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRTIME NOP ; CREATION DE L'ECRAN
|
|
JSR AFFTIME
|
|
JSR AFFTIMM
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRLEVE NOP ; CREATION DE L'ECRAN
|
|
JSR AFFLEVE
|
|
JSR AFFLEVL2 ; AFFICHE LE NUMERO DU NIVEAU
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRGROU NOP ; CREATION DE L'ECRAN
|
|
JSR AFFGROU
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRITEM NOP ; CREATION DE L'ECRAN
|
|
JSR AFFITEM
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRCOLO NOP ; CREATION DE L'ECRAN
|
|
JSR AFFCOLO
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRMENU NOP ; CREATION DE L'ECRAN
|
|
JSR AFFMENU
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRDOCU NOP ; CREATION DE L'ECRAN
|
|
JSR AFTPAG
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRQUIT NOP ; CREATION DE L'ECRAN
|
|
JSR AFFQUIT
|
|
JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
ECRWARN NOP ; CREATION DE L'ECRAN
|
|
JSR AFFWARN
|
|
LDA ERRORFL
|
|
CMP #$0001
|
|
BNE ECRWARN1
|
|
JSR ERRSLVR ; SLEEPER VERT
|
|
BRA ECRWARN5
|
|
ECRWARN1 CMP #$0002
|
|
BNE ECRWARN2
|
|
JSR ERRSLBL ; SLEEPER BLEU
|
|
BRA ECRWARN5
|
|
ECRWARN2 CMP #$0003
|
|
BNE ECRWARN3
|
|
JSR ERRSLRG ; SLEEPER ROUGE
|
|
BRA ECRWARN5
|
|
ECRWARN3 CMP #$0004
|
|
BNE ECRWARN4
|
|
JSR ERRSLJN ; SLEEPER JAUNE
|
|
BRA ECRWARN5
|
|
ECRWARN4 JSR ERRTINIE ; PAS DE TINIES
|
|
ECRWARN5 JSR SAUV
|
|
JMP SOURIS1
|
|
|
|
************** ROUTINES AFFICHAGES ECRANS ***************
|
|
|
|
AFFDROIT LDY #$00C7 ; HAUTEUR -1
|
|
LDX #$0016 ; LARGEUR
|
|
LDA #$0088 ; @ SPRITE
|
|
STA AFFZONE2+1
|
|
LDA #$2088 ; @ ECRAN
|
|
JSR AFFZONE ; AFFICHE A DROITE
|
|
RTS
|
|
|
|
EFFDROIT LDX #$0086 ; NETTOY LA BANDE
|
|
LDY #$00C7
|
|
EFFDROI2 LDA #$0000 ; ON FORCE EN NOIR
|
|
STAL $E12000,X ; PROUT
|
|
TXA
|
|
CLC
|
|
ADC #$00A0
|
|
TAX
|
|
DEY
|
|
BPL EFFDROI2
|
|
RTS
|
|
|
|
CLNDROIT LDY #$00C7 ; HAUTEUR -1
|
|
LDX #$0018 ; LARGEUR
|
|
LDA #$2086 ; @ ECRAN
|
|
JSR CLNZONE ; NETTOY A DROITE
|
|
RTS
|
|
|
|
AFFGAUCH LDY #$00C7 ; HAUTEUR -1
|
|
LDX #$0016 ; LARGEUR
|
|
LDA #$0088 ; @ SPRITE
|
|
STA AFFZONE2+1
|
|
LDA #$2000 ; @ ECRAN
|
|
JSR AFFZONE ; AFFICHE A GAUCHE
|
|
RTS
|
|
|
|
EFFGAUCH LDX #$0018 ; NETTOY LA BANDE
|
|
LDY #$00C7
|
|
EFFGAUC2 LDAL $E12000,X ; PROUT
|
|
AND #$0F00
|
|
STAL $E12000,X ; PROUT
|
|
TXA
|
|
CLC
|
|
ADC #$00A0
|
|
TAX
|
|
DEY
|
|
BPL EFFGAUC2
|
|
RTS
|
|
|
|
CLNGAUCH LDY #$00C7 ; HAUTEUR -1
|
|
LDX #$0018 ; LARGEUR /2 -2
|
|
LDA #$2000 ; @ ECRAN
|
|
JSR CLNZONE ; NETTOY A GAUCHE
|
|
RTS
|
|
|
|
WAITVBL LDAL $E1C02E
|
|
AND #$00FF
|
|
CMP #$00B0
|
|
BNE WAITVBL
|
|
RTS
|
|
|
|
AFFTIME LDY #$003B
|
|
LDX #$0044
|
|
LDA #$2841
|
|
STA AFFZONE2+1
|
|
LDA #$41ED
|
|
JSR AFFZONE ; AFFICHE TIME
|
|
RTS
|
|
|
|
CLNTIME LDY #$003B
|
|
LDX #$0044
|
|
LDA #$41ED
|
|
JSR CLNZONE ; NETTOY TIME
|
|
RTS
|
|
|
|
AFFLEVE LDY #$003B
|
|
LDX #$0044
|
|
LDA #$0181
|
|
STA AFFZONE2+1
|
|
LDA #$41ED
|
|
JSR AFFZONE ; AFFICHE LEVEL
|
|
RTS
|
|
|
|
CLNLEVE LDY #$003B
|
|
LDX #$0044
|
|
LDA #$41ED
|
|
JSR CLNZONE ; NETTOY LEVE
|
|
RTS
|
|
|
|
AFFGROU LDY #$009A
|
|
LDX #$003C
|
|
LDA #$80A1
|
|
STA AFFZONE2+1 ; DEUXIEME PLANCHE
|
|
LDA #$2991
|
|
JSR AFFZONE ; AFFICHE GROUND
|
|
RTS
|
|
|
|
CLNGROU LDY #$009A
|
|
LDX #$003C
|
|
LDA #$2991
|
|
JSR CLNZONE ; NETTOY GROU
|
|
RTS
|
|
|
|
AFFITEM LDY #$0064
|
|
LDX #$004A
|
|
LDA #$80E0 ; DEUXIEME PLANCHE
|
|
STA AFFZONE2+1
|
|
LDA #$356A
|
|
JSR AFFZONE ; AFFICHE ITEM
|
|
RTS
|
|
|
|
CLNITEM LDY #$0064
|
|
LDX #$004A
|
|
LDA #$356A
|
|
JSR CLNZONE ; NETTOY ITEM
|
|
RTS
|
|
|
|
AFFCOLO LDY #$0029
|
|
LDX #$003C
|
|
LDA #$E221
|
|
STA AFFZONE2+1 ; DEUXIEME PLANCHE DE SPRITE
|
|
LDA #$41F1
|
|
JSR AFFZONE ; AFFICHE COLORS
|
|
RTS
|
|
|
|
CLNCOLO LDY #$0029
|
|
LDX #$003C
|
|
LDA #$41F1
|
|
JSR CLNZONE ; NETTOY COLORS
|
|
RTS
|
|
|
|
AFFMENU LDY #$0048
|
|
LDX #$004E
|
|
LDA #$4EF7
|
|
STA AFFZONE2+1
|
|
LDA #$41E8
|
|
JSR AFFZONE ; AFFICHE MENU
|
|
RTS
|
|
|
|
CLNMENU LDY #$0048
|
|
LDX #$004E
|
|
LDA #$41E8
|
|
JSR CLNZONE ; NETTOY MENU
|
|
RTS
|
|
|
|
CLNDOCU LDY #$0000
|
|
LDX #$0000
|
|
LDA #$0000
|
|
JSR CLNZONE ; NETTOY DOCU
|
|
RTS
|
|
|
|
AFFQUIT LDY #$0030
|
|
LDX #$003E
|
|
LDA #$0140
|
|
STA AFFZONE2+1
|
|
LDA #$41F0
|
|
JSR AFFZONE ; AFFICHE QUIT
|
|
RTS
|
|
|
|
CLNQUIT LDY #$0030
|
|
LDX #$003E
|
|
LDA #$41F0
|
|
JSR CLNZONE ; NETTOY QUIT
|
|
RTS
|
|
|
|
AFFWARN LDY #$0037
|
|
LDX #$003E
|
|
LDA #$2080
|
|
STA AFFZONE2+1
|
|
LDA #$41F0
|
|
JSR AFFZONE ; AFFICHE WARNING
|
|
RTS
|
|
|
|
CLNWARN LDY #$0037
|
|
LDX #$003E
|
|
LDA #$41F0
|
|
JSR CLNZONE ; NETTOY WARNING
|
|
RTS
|
|
|
|
******
|
|
|
|
AFFZONE STX AFFZONE1+1 ; RECOPIE UN SPRITE SUR L'ECRAN
|
|
STA AFFZONE3+1
|
|
AFFZONE1 LDX #$0000 ; NOMBRE DE *4-2
|
|
AFFZONE2 LDAL $042000,X ; ADRESSE ZONE SPRITE
|
|
AFFZONE3 STAL $E12000,X ; ADRESSE ZONE ECRAN PROUT
|
|
DEX
|
|
DEX
|
|
BPL AFFZONE2 ; RECOPIE 1 LIGNE
|
|
LDA AFFZONE2+1
|
|
CLC ; LIGNE SUIVANTE SPRITE
|
|
ADC #$00A0
|
|
STA AFFZONE2+1
|
|
LDA AFFZONE3+1
|
|
CLC ; LIGNE SUIVANTE ECRAN
|
|
ADC #$00A0
|
|
STA AFFZONE3+1
|
|
DEY
|
|
BPL AFFZONE1
|
|
RTS
|
|
|
|
CLNZONE STA CLNZONE2+1 ; EFFACE UNE ZONE
|
|
STA CLNZONE3+1
|
|
STX CLNZONE1+1
|
|
CLNZONE1 LDX #$0000 ; NOMBRE DE *4-2
|
|
CLNZONE2 LDAL $012000,X ; ADRESSE ZONE
|
|
CLNZONE3 STAL $012000,X ; ADRESSE ZONE
|
|
DEX
|
|
DEX
|
|
BPL CLNZONE2 ; RECOPIE 1 LIGNE
|
|
LDA CLNZONE2+1
|
|
CLC ; LIGNE SUIVANTE SPRITE
|
|
ADC #$00A0
|
|
STA CLNZONE2+1
|
|
LDA CLNZONE3+1
|
|
CLC ; LIGNE SUIVANTE ECRAN
|
|
ADC #$00A0
|
|
STA CLNZONE3+1
|
|
DEY
|
|
BPL CLNZONE1
|
|
RTS
|
|
|
|
******
|
|
|
|
GRILHG LDX #$01E2 ; GRILLE HORI GAUCHE
|
|
LDY #$000B
|
|
BRA GRILH1
|
|
|
|
GRILHM LDX #$01FA ; GRILLE HORI MILIEU
|
|
LDY #$0035
|
|
BRA GRILH1
|
|
|
|
GRILHD LDX #$0266 ; GRILLE HORI DROITE
|
|
LDY #$000B
|
|
BRA GRILH1
|
|
|
|
GRILH1 LDAL $012000,X ; GRILLE HORIZONTALE
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $012000,X
|
|
LDAL $012F00,X ; L2
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $012F00,X
|
|
LDAL $013E00,X ; L3
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $013E00,X
|
|
LDAL $014D00,X ; L4
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $014D00,X
|
|
LDAL $015C00,X ; L5
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $015C00,X
|
|
LDAL $016B00,X ; L6
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $016B00,X
|
|
LDAL $017A00,X ; L7
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $017A00,X
|
|
LDAL $018900,X ; L8
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $018900,X
|
|
LDAL $019800,X ; L9
|
|
AND #$F0F0
|
|
ORA #$0909
|
|
STAL $019800,X
|
|
INX
|
|
INX
|
|
DEY
|
|
BPL GRILH3
|
|
RTS
|
|
GRILH3 JMP GRILH1
|
|
|
|
GRILVG LDX #$01E1
|
|
LDY #$0060
|
|
BRA GRILV1
|
|
|
|
GRILVD LDX #$0271
|
|
LDY #$0060
|
|
BRA GRILV1
|
|
|
|
GRILV1 LDAL $012000,X ; GRILLE VERTICALE LARGEUR 2
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012000,X
|
|
LDAL $01200C,X
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $01200C,X
|
|
TXA
|
|
CLC
|
|
ADC #$0140 ; 2 LIGNES
|
|
TAX
|
|
DEY
|
|
BPL GRILV1
|
|
RTS
|
|
|
|
GRILVM LDX #$01F9
|
|
LDY #$0060
|
|
BRA GRILV2
|
|
|
|
GRILV2 LDAL $012000,X ; GRILLE VERTICALE LARGEUR 10
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012000,X
|
|
LDAL $01200C,X ; L2
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $01200C,X
|
|
LDAL $012018,X ; L3
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012018,X
|
|
LDAL $012024,X ; L4
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012024,X
|
|
LDAL $012030,X ; L5
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012030,X
|
|
LDAL $01203C,X ; L6
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $01203C,X
|
|
LDAL $012048,X ; L7
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012048,X
|
|
LDAL $012054,X ; L8
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012054,X
|
|
LDAL $012060,X ; L9
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $012060,X
|
|
LDAL $01206C,X ; L10
|
|
AND #$FFF0
|
|
ORA #$0009
|
|
STAL $01206C,X
|
|
TXA
|
|
CLC
|
|
ADC #$0140 ; 2 LIGNES
|
|
TAX
|
|
DEY
|
|
BPL GRILV3
|
|
RTS
|
|
GRILV3 JMP GRILV2
|
|
|
|
*********
|
|
|
|
MAKESPR LDY #$0026 ; CREATION DE L'ECRAN SPRITE2 A PARTIR DE NIVEAU
|
|
MAKESPR1 LDA GRDTAB2,Y ; GROUND
|
|
TAX
|
|
LDA GRDTAB1,Y
|
|
PHY
|
|
JSR COPYBL0 ; AFFICHE NIVEAU -> SPRITE2
|
|
PLY
|
|
DEY
|
|
DEY
|
|
BPL MAKESPR1
|
|
LDA #$1E00 ; COPY LE BLOC A COTE DES TINIES
|
|
LDX #$4B40
|
|
JSR COPYBL8
|
|
LDA #$4B00 ; COPY DE L'ANIM A LA PLACE DU BLOC
|
|
LDX #$1E00
|
|
JSR COPYBL8
|
|
LDY #$001A
|
|
MAKESPR2 LDA ITETAB2,Y ; ITEM
|
|
TAX
|
|
LDA ITETAB1,Y
|
|
PHY
|
|
JSR COPYBL0 ; AFFICHE NIVEAU -> SPRITE2
|
|
PLY
|
|
DEY
|
|
DEY
|
|
BPL MAKESPR2
|
|
LDA #$0000 ; COPY DU SOL SOUS LES TINIES
|
|
LDX #$4B00
|
|
JSR COPYBL8
|
|
LDA #$0000
|
|
LDX #$4B10
|
|
JSR COPYBL8
|
|
LDA #$0000
|
|
LDX #$4B20
|
|
JSR COPYBL8
|
|
LDA #$0000
|
|
LDX #$4B30
|
|
JSR COPYBL8
|
|
LDA #$0001 ; COPY DES 4 TINIES DANS NIVEAU
|
|
JSR SPRMSK ; VERT
|
|
LDA #$0002
|
|
JSR SPRMSK ; BLEU
|
|
LDA #$0003
|
|
JSR SPRMSK ; ROUGE
|
|
LDA #$0004
|
|
JSR SPRMSK ; JAUNE
|
|
LDA #$0000 ; COLLE PAR DESSUS LA ZONE ROSE
|
|
JSR SPRMSK
|
|
LDA ptrNIV+1 ; PALETTE
|
|
AND #$FF00
|
|
ORA #$007E
|
|
STA LP2+2
|
|
LDX #$001F ; PALETTE IMAGE
|
|
LP2 LDAL $047E00,X
|
|
STAL $019E00,X
|
|
DEX
|
|
DEX
|
|
BPL LP2
|
|
RTS
|
|
|
|
SEBLCKG ASL ; COPIE DANS LE BUFFER SELECT D'UN BLOC GROUND
|
|
TAY
|
|
LDA GRDTAB2,Y
|
|
LDY DROITE
|
|
CPY #$0002
|
|
BEQ SEBLCKG1
|
|
LDX #$5206 ; ADRESSE ECRAN E1 GAUCHE
|
|
JSR COPYBL3
|
|
RTS
|
|
SEBLCKG1 LDX #$528E ; ADRESSE ECRAN E1 DROITE
|
|
JSR COPYBL3
|
|
RTS
|
|
|
|
SEBLCKI ASL ; COPIE DANS LE BUFFER SELECT D'UN BLOC ITEM
|
|
TAY
|
|
LDA GRDTAB2,Y
|
|
LDY DROITE
|
|
CPY #$0002
|
|
BEQ SEBLCKI1
|
|
LDX #$5206 ; ADRESSE ECRAN E1 GAUCHE
|
|
JSR COPYBL4
|
|
RTS
|
|
SEBLCKI1 LDX #$528E ; ADRESSE ECRAN E1 DROITE
|
|
JSR COPYBL4
|
|
RTS
|
|
|
|
AFFECRG LDA DROITE ; AFFICHE L'ECRAN GROUND
|
|
CMP #$0001
|
|
BEQ AFFECRGD
|
|
AFFECRGG LDA #GAUCHTAB ; AFFICHE A GAUCHE
|
|
BRA AFFECRG0
|
|
AFFECRGD LDA #DROITTAB ; AFFICHE A DROITE
|
|
AFFECRG0 STA AFFECRG2+1
|
|
LDY #$0000
|
|
AFFECRG1 PHY ; NUMERO DU CADRE
|
|
AFFECRG2 LDA GAUCHTAB,Y
|
|
TAY
|
|
LDA GROUBUF,Y ; NUMERO DU SPRITE
|
|
ASL
|
|
TAX
|
|
LDA GRDTAB1,X ; ADRESSE SPRITE
|
|
PHA
|
|
LDA GRILLETA,Y ; ADRESSE ECRAN
|
|
TAX
|
|
PLA
|
|
JSR COPYBL1 ; COPY BLOCK
|
|
PLY
|
|
INY
|
|
INY
|
|
CPY #$00B0 ; 11*8 *2
|
|
BNE AFFECRG1
|
|
RTS
|
|
|
|
AFFECRI LDA DROITE ; AFFICHE L'ECRAN ITEM SUR L'ECRAN GROUND
|
|
CMP #$0001
|
|
BEQ AFFECRID
|
|
AFFECRIG LDA #GAUCHTAB ; AFFICHE A GAUCHE
|
|
BRA AFFECRI0
|
|
AFFECRID LDA #DROITTAB ; AFFICHE A DROITE
|
|
AFFECRI0 STA AFFECRI2+1
|
|
LDY #$0000
|
|
AFFECRI1 PHY ; NUMERO DU CADRE
|
|
AFFECRI2 LDA GAUCHTAB,Y
|
|
TAY
|
|
LDA ITEMBUF,Y ; NUMERO DU SPRITE
|
|
CMP #$0014 ; 20
|
|
BMI AFFECRI3
|
|
CMP #$0031 ; 49
|
|
BEQ AFFECRI3
|
|
CMP #$0036
|
|
BPL AFFECRI3
|
|
ASL
|
|
TAX
|
|
LDA GRDTAB1,X ; ADRESSE SPRITE
|
|
PHA
|
|
LDA GRILLETA,Y ; ADRESSE ECRAN
|
|
TAX
|
|
PLA
|
|
JSR COPYBL1 ; COPY BLOCK
|
|
AFFECRI3 PLY
|
|
INY
|
|
INY
|
|
CPY #$00B0 ; 11*8 *2
|
|
BNE AFFECRI1
|
|
RTS
|
|
|
|
SEBLCKS ASL ; COPIE DANS LA GRILLE LE BLOC DU BUFFER
|
|
TAY
|
|
LDA GRILLETA,Y
|
|
TAY ; Y=ADRESSE ECRAN
|
|
LDA MAISELE
|
|
BEQ SEBLCKS1
|
|
LDA ITZONE ; ITEM OU GROUND
|
|
BRA SEBLCKS2
|
|
SEBLCKS1 LDA GRZONE ;
|
|
SEBLCKS2 ASL
|
|
TAX
|
|
LDA GRDTAB1,X ; A=ADRESSE SPRITE
|
|
TYX
|
|
JSR COPYBL1
|
|
RTS
|
|
|
|
GAUCHTAB HEX 0000,0200,0400,0600,0800,0A00,0C00,0E00,1000,1200,1400
|
|
HEX 1A00,1C00,1E00,2000,2200,2400,2600,2800,2A00,2C00,2E00
|
|
HEX 3400,3600,3800,3A00,3C00,3E00,4000,4200,4400,4600,4800
|
|
HEX 4E00,5000,5200,5400,5600,5800,5A00,5C00,5E00,6000,6200
|
|
HEX 6800,6A00,6C00,6E00,7000,7200,7400,7600,7800,7A00,7C00
|
|
HEX 8200,8400,8600,8800,8A00,8C00,8E00,9000,9200,9400,9600
|
|
HEX 9C00,9E00,A000,A200,A400,A600,A800,AA00,AC00,AE00,B000
|
|
HEX B600,B800,BA00,BC00,BE00,C000,C200,C400,C600,C800,CA00
|
|
|
|
DROITTAB HEX 0400,0600,0800,0A00,0C00,0E00,1000,1200,1400,1600,1800
|
|
HEX 1E00,2000,2200,2400,2600,2800,2A00,2C00,2E00,3000,3200
|
|
HEX 3800,3A00,3C00,3E00,4000,4200,4400,4600,4800,4A00,4C00
|
|
HEX 5200,5400,5600,5800,5A00,5C00,5E00,6000,6200,6400,6600
|
|
HEX 6C00,6E00,7000,7200,7400,7600,7800,7A00,7C00,7E00,8000
|
|
HEX 8600,8800,8A00,8C00,8E00,9000,9200,9400,9600,9800,9A00
|
|
HEX A000,A200,A400,A600,A800,AA00,AC00,AE00,B000,B200,B400
|
|
HEX BA00,BC00,BE00,C000,C200,C400,C600,C800,CA00,CC00,CE00
|
|
|
|
GRDTAB1 HEX 0000,1000,2000,3000,7000,100F,6000,4000,200F,700F
|
|
HEX 400F,9000,900F,5000,800F,000F,500F,600F,300F,8000
|
|
HEX 001E,101E,201E,301E,401E,501E,601E,701E,801E,901E
|
|
HEX 002D,102D,202D,302D,402D,502D,602D,702D,802D,902D
|
|
HEX 003C,103C,203C,303C,403C,503C,603C,703C,803C,903C
|
|
HEX 004B,104B,204B,304B,404B
|
|
|
|
GRDTAB2 HEX 6504,7304,8104,8F04,4515,5315,6115,6F15,2526,3326
|
|
HEX 4126,4F26,0537,1337,2137,2F37,E547,F347,0148,0F48
|
|
HEX 001E,101E,201E,301E,401E,501E,601E,701E,801E,901E
|
|
HEX 002D,102D,202D,302D,402D,502D,602D,702D,802D,902D
|
|
HEX 003C,103C,203C,303C,403C,503C,603C,703C,803C,903C
|
|
HEX 004B,104B,204B,304B,404B
|
|
|
|
ITETAB1 HEX 901E,603C,703C,803C,103C,203C,303C,403C,001E,101E,701E,602D,802D,503C
|
|
ITETAB2 HEX B204,C004,CE04,DC04,8415,9215,A015,AE15,BC15,6426,7226,8026,8E26,9C26
|
|
|
|
GRILLETA HEX 8222,8E22,9A22,A622,B222,BE22,CA22,D622,E222,EE22,FA22,0623,1223
|
|
HEX 8231,8E31,9A31,A631,B231,BE31,CA31,D631,E231,EE31,FA31,0632,1232
|
|
HEX 8240,8E40,9A40,A640,B240,BE40,CA40,D640,E240,EE40,FA40,0641,1241
|
|
HEX 824F,8E4F,9A4F,A64F,B24F,BE4F,CA4F,D64F,E24F,EE4F,FA4F,0650,1250
|
|
HEX 825E,8E5E,9A5E,A65E,B25E,BE5E,CA5E,D65E,E25E,EE5E,FA5E,065F,125F
|
|
HEX 826D,8E6D,9A6D,A66D,B26D,BE6D,CA6D,D66D,E26D,EE6D,FA6D,066E,126E
|
|
HEX 827C,8E7C,9A7C,A67C,B27C,BE7C,CA7C,D67C,E27C,EE7C,FA7C,067D,127D
|
|
HEX 828B,8E8B,9A8B,A68B,B28B,BE8B,CA8B,D68B,E28B,EE8B,FA8B,068C,128C
|
|
|
|
COPYBL0 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> SPRITE2
|
|
STY COPYBL6+2
|
|
COPYBL00 LDY #$0480
|
|
STY COPYBL7+2
|
|
STA COPYBL6+1
|
|
TXA
|
|
CLC
|
|
ADC #$8000
|
|
STA COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBL1 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> ECRAN 01
|
|
STY COPYBL6+2
|
|
LDY #$0120
|
|
STY COPYBL7+2
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBL4 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> ECRAN E1
|
|
STY COPYBL6+2
|
|
LDY #$E120 ; PROUT
|
|
STY COPYBL7+2
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBL2 LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> ECRAN 01
|
|
STY COPYBL6+2
|
|
LDY #$0120
|
|
STY COPYBL7+2
|
|
CLC
|
|
ADC #$8000
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBL3 LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> ECRAN E1
|
|
STY COPYBL6+2
|
|
LDY #$E120 ; PROUT
|
|
STY COPYBL7+2
|
|
CLC
|
|
ADC #$8000
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBLN LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> NIVEAU
|
|
STY COPYBL6+2
|
|
COPYBLN0 LDY #$0500
|
|
STY COPYBL7+2
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
JMP COPYBLM
|
|
COPYBL8 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> NIVEAU
|
|
STY COPYBL6+2
|
|
STY COPYBL7+2
|
|
STA COPYBL6+1
|
|
STX COPYBL7+1
|
|
COPYBLM LDY #$0017 ; HAUTEUR-1
|
|
COPYBL5 LDX #$000A ; NOMBRE DE *4-2
|
|
COPYBL6 LDAL $05A0A0,X ; ADRESSE NIVEAU
|
|
COPYBL7 STAL $048000,X ; ADRESSE SPRITE2
|
|
DEX
|
|
DEX
|
|
BPL COPYBL6 ; RECOPIE 1 LIGNE
|
|
LDA COPYBL6+1
|
|
CLC ; LIGNE SUIVANTE SPRITE
|
|
ADC #$00A0
|
|
STA COPYBL6+1
|
|
LDA COPYBL7+1
|
|
CLC ; LIGNE SUIVANTE ECRAN
|
|
ADC #$00A0
|
|
STA COPYBL7+1
|
|
DEY
|
|
BPL COPYBL5
|
|
RTS
|
|
|
|
****************** AFFICHAGE SPRITE SANS MASQUE **********************
|
|
|
|
SPRMSK ASL ; ROUTINE AFFICHAGE SPRITE SANS MASQUE
|
|
TAX
|
|
LDA MULDIX,X ; *10
|
|
TAX
|
|
LDA SPMSKTAB2,X ; ADRESSE BASSE DESTINATION
|
|
STA SPRMSK2+1
|
|
STA SPRMSK5+1
|
|
STA SPRMSK7+1
|
|
INX
|
|
LDA SPMSKTAB2,X ; ADRESSE HAUTE DESTINATION
|
|
STA SPRMSK2+2
|
|
STA SPRMSK5+2
|
|
STA SPRMSK7+2
|
|
INX
|
|
INX
|
|
LDA SPMSKTAB2,X ; ADRESSE BASSE SOURCE
|
|
STA SPRMSK1+1
|
|
STA SPRMSK3+1
|
|
STA SPRMSK4+1
|
|
STA SPRMSK6+1
|
|
INX
|
|
LDA SPMSKTAB2,X ; ADRESSE HAUTE SOURCE
|
|
STA SPRMSK1+2
|
|
STA SPRMSK3+2
|
|
STA SPRMSK4+2
|
|
STA SPRMSK6+2
|
|
INX
|
|
INX
|
|
LDA SPMSKTAB2,X ; LONGUEUR
|
|
ASL
|
|
STA SPRMSK8+1
|
|
INX
|
|
INX
|
|
LDA SPMSKTAB2,X ; HAUTEUR
|
|
STA SPRMSK9+1
|
|
|
|
LDY #$0000
|
|
SPRMSK00 PHY
|
|
LDX #$0000
|
|
SPRMSK0 PHX
|
|
SPRMSK1 LDAL $AAAAAA,X ; 4 POINTS
|
|
AND #$00FF
|
|
TAY
|
|
SPRMSK2 LDAL $E12000,X ; ECRAN PROUT
|
|
AND SPMSKTAB3,Y
|
|
SPRMSK3 ORAL $AAAAAA,X ; SPRITE
|
|
STA SPMSKTAB1
|
|
INX
|
|
SPRMSK4 LDAL $AAAAAA,X ; SPRITE
|
|
AND #$00FF
|
|
TAY
|
|
SPRMSK5 LDAL $E12000,X ; ECRAN PROUT
|
|
AND SPMSKTAB3,Y
|
|
SPRMSK6 ORAL $AAAAAA,X ; SPRITE
|
|
STA SPMSKTAB1+1
|
|
DEX
|
|
LDA SPMSKTAB1
|
|
SPRMSK7 STAL $E12000,X ; ECRAN PROUT
|
|
PLX
|
|
INX
|
|
INX
|
|
SPRMSK8 CPX #$AAAA
|
|
BNE SPRMSK0
|
|
LDA SPRMSK2+1 ; ECRAN LIGNE SUIVANTE
|
|
CLC
|
|
ADC #$00A0
|
|
STA SPRMSK2+1
|
|
STA SPRMSK5+1
|
|
STA SPRMSK7+1
|
|
LDA SPRMSK1+1 ; SPRITE LIGNE SUIVANTE
|
|
CLC
|
|
ADC #$00A0
|
|
STA SPRMSK1+1
|
|
STA SPRMSK3+1
|
|
STA SPRMSK4+1
|
|
STA SPRMSK6+1
|
|
PLY
|
|
INY
|
|
SPRMSK9 CPY #$AAAA
|
|
BNE SPRMSK00
|
|
RTS
|
|
|
|
SPMSKTAB1 HEX 000000
|
|
|
|
SPMSKTAB2 HEX 8A9B04,A0C004,1600,5500 ; ADR DESTI,ADR SOURCE,LONG/4,HAUTEUR
|
|
HEX 004B04,6D9104,0600,1800
|
|
HEX 104B04,A48404,0600,1800
|
|
HEX 204B04,2D8104,0600,1800
|
|
HEX 304B04,ADA104,0600,1800
|
|
|
|
SPMSKTAB3 HEX FF,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
|
|
|
MULDIX HEX 0000,0A00,1400,1E00,2800,3200,3C00,4600,5000,5A00,6400
|
|
|
|
*********************************************************************
|
|
|
|
HEXDEC HEX 0000,0001,0002,0003,0004,0005,0006,0007,0008,0009
|
|
HEX 0100,0101,0102,0103,0104,0105,0106,0107,0108,0109
|
|
HEX 0200,0201,0202,0203,0204,0205,0206,0207,0208,0209
|
|
HEX 0300,0301,0302,0303,0304,0305,0306,0307,0308,0309
|
|
HEX 0400,0401,0402,0403,0404,0405,0406,0407,0408,0409
|
|
HEX 0500,0501,0502,0503,0504,0505,0506,0507,0508,0509
|
|
HEX 0600,0601,0602,0603,0604,0605,0606,0607,0608,0609
|
|
HEX 0700,0701,0702,0703,0704,0705,0706,0707,0708,0709
|
|
HEX 0800,0801,0802,0803,0804,0805,0806,0807,0808,0809
|
|
HEX 0900,0901,0902,0903,0904,0905,0906,0907,0908,0909
|
|
HEX 0A00,0A01,0A02,0A03,0A04,0A05,0A06,0A07,0A08,0A09
|
|
|
|
KBD LDAL $00BFFF ; LECTURE DU CLAVIER
|
|
BPL KBD
|
|
STAL $00C010
|
|
RTS
|