antoine-source/thetinies/TCK.Main.s

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