antoine-source/thetinies/Tinies.Main2.s

1940 lines
53 KiB
ArmAsm

*******************************************************************************
******************************** INITS **************************************
*******************************************************************************
lda #pMAIN
ldx ptrUNPACK+1
jsr loadFILE
bcc bip
brl initOFF
bip lda ptrECRAN+1
jsr unPACK
*--- Look for preference file
lda #$6038
sta loadERR+3
lda #pPREF
ldx ptrUNPACK+1
jsr loadFILE
bcc bip30
brl bip40
bip30 lda ptrUNPACK
sta Debut
lda ptrUNPACK+2
sta Debut+2
ldy #0 ; Select
lda [Debut],y
sta ACTION
and #$7f
sta ACTION+2
iny ; Left
iny
lda [Debut],y
sta ACTION+4
and #$7f
sta ACTION+6
iny ; Right
iny
lda [Debut],y
sta ACTION+8
and #$7f
sta ACTION+10
iny ; Up
iny
lda [Debut],y
sta ACTION+12
and #$7f
sta ACTION+14
iny ; Down
iny
lda [Debut],y
sta ACTION+16
and #$7f
sta ACTION+18
ldy #14 ; Level
lda [Debut],y
sta LEVEL
sta level
iny ; Life
iny
lda [Debut],y
sta life
iny ; Joker
iny
lda [Debut],y
sta joker
ldx LEVEL
lda #0
]lp cpx #0
beq bip31
clc
adc #8
dex
bpl ]lp
lda #0
bip31 clc
adc #PASSWRD
sta bip32+1
ldx #0
bip32 lda PASSWRD,x
sec
sbc #$0300
sta SAVESBU,x
inx
inx
cpx #8
bne bip32
*--- Look for construction kit mode
bip40 lda #pDATAS2
ldx ptrUNPACK+1
jsr loadFILE
bcs bip20
lda #$eaea
sta loadERR+3
lda #1
sta okDATAS2
bra bip21
bip20 lda #$eaea
sta loadERR+3
stz okDATAS2
*---
bip21 lda #pDOCU
ldx ptrUNPACK+1
jsr loadFILE
bcc bip1
brl initOFF
bip1 lda ptrBOUGE+1
jsr unPACK
ldal $e102e9
cmp #$0202
beq bip11
pha
and #$ff00
cmp #$0200
beq bip10
pla
and #$00ff
cmp #$0002
beq bip11
lda #pDOCUS
bra bip12
bip10 pla
bip11 lda #pDOCFR
bip12 ldx ptrNIV+1
jsr loadFILE
bcc bip2
brl initOFF
bip2 lda ptrNIV
sta AFTTBI
sta AFTDEB0+1
sta AFTDEB3+1
lda #pSPRITE
ldx ptrUNPACK+1
jsr loadFILE
bcc bip3
brl initOFF
bip3 lda ptrDATAS+1
jsr unPACK
*---
LDA #$0000
STA POSX
STA POSY
STA A1 ; INIT SOURIS
STA AP
JSR SAUV ; SAUVEGARDE DECOR
JSR DESS
LDA #$0001
JMP PICT ; AFFICHE L'IMAGE MAIN
okDATAS2 ds 2
okDATAS3 ds 2
*-------------------------- Message
hex 0d0d
asc 'Is it possible to create a game without any easter eggs ?'
asc ':-)'
hex 0d0d
*****************************************************************************
**************************** 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 Ligne,X
CLC
SOURIS2 ADC #$0000 ; CALCUL DE A1 (160*POSY+POSX)
STA A1
JSR TRACE ; ON DESSINE LE POINTEUR
*****
SECR 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
JMP BUMPDEF ; AUCUN BOUTON DETECTE : TRAITEMENT PAR DEFAUT
*******************************************************************************
*********************** TRAITEMENT DES BOUTONS ******************************
*******************************************************************************
BORD4 LDX SECR2+1 ; NUMERO DU BUMPER (*2)
LDA #BORD44
STA BUMPER5+1 ; ADRESSE D'EXECUTION
JMP BUMPER
BORD44 JMP SOURIS1 ; ON SORT SANS LIRE LA SOURIS
BORD5 LDA ECRAN
CMP #$0009 ; ON EST SUR L'ECRAN LINE, ON NE CHANGE RIEN
BEQ BORD55
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
*********** TINIES MAIN
ECR0100 LDX SECR2+1 ; MAIN : DOCUMENTATION
LDA #ECR01000
STA BUMPER5+1
JMP BUMPER
ECR01000 LDA #$0002 ; IMAGE DOCU
JMP PICT
ECR0101 LDX SECR2+1 ; MAIN : EXIT
LDA #ECR01010
STA BUMPER5+1
JMP BUMPER
ECR01010 lda #1
jsr nowWAIT
jsr fadeOUT
brl initOFF ; ON QUIT
ECR0102 LDX SECR2+1 ; MAIN : PLAY
LDA #ECR01020
STA BUMPER5+1
JMP BUMPER
ECR01020 lda LEVEL ; TRANSFERT DE LEVEL ET DES TOUCHES
sta level
ldx #0
txy
]lp lda ACTION,x
sta keyPREF,y
inx
inx
inx
inx
iny
iny
cpy #10
bne ]lp
jsr saveFILE
LDA okDATAS2 ; DETECTION DU DEUXIEME JEU DE TABLEAU
BEQ ECR01021
LDA #$0003
JMP PICT3 ; SELECTION DU JEU
ECR01021 lda #1
jsr nowWAIT
jsr fadeOUT
brl entryGAME ; SAUT AU JEU
ECR0103 LDA #ECR01030 ; MAIN : SURFACE SAISIE CODE
STA SURFACE5+1
JMP SURFACE
ECR01030 JSR DESS1 ; SAISIE DU CODE
JSR SAVESAI
JSR ECR0110 ; REAFFICHAGE
JSR SAUV
JMP SOURIS
ECR0104 LDA #ECR01040 ; MAIN : SURFACE SAISIE HAUT
STA SURFACE5+1
JMP SURFACE
ECR01040 JSR DESS1 ; SAISIE HAUT
STZ HAUT
LDX #$0CFC
JSR DIRECT
STA HAUT ; VALEUR CLAVIER
AND #$007F
STA HAUT+2 ; VALEUR ASCII
JSR ECR0110 ; AFFICHAGE
JSR SAUV
JMP SOURIS
ECR0105 LDA #ECR01050 ; MAIN : SURFACE SAISIE BAS
STA SURFACE5+1
JMP SURFACE
ECR01050 JSR DESS1 ; SAISIE BAS
STZ BAS
LDX #$223C
JSR DIRECT
STA BAS ; VALEUR CLAVIER
AND #$007F
STA BAS+2 ; VALEUR ASCII
JSR ECR0110 ; AFFICHAGE
JSR SAUV
JMP SOURIS
ECR0106 LDA #ECR01060 ; MAIN : SURFACE SAISIE GAUCHE
STA SURFACE5+1
JMP SURFACE
ECR01060 JSR DESS1 ; SAISIE GAUCHE
STZ GAUCHE
LDX #$1792
JSR DIRECT
STA GAUCHE ; VALEUR CLAVIER
AND #$007F
STA GAUCHE+2 ; VALEUR ASCII
JSR ECR0110 ; AFFICHAGE
JSR SAUV
JMP SOURIS
ECR0107 LDA #ECR01070 ; MAIN : SURFACE SAISIE DROITE
STA SURFACE5+1
JMP SURFACE
ECR01070 JSR DESS1 ; SAISIE DROITE
STZ DROITE
LDX #$17A6
JSR DIRECT
STA DROITE ; VALEUR CLAVIER
AND #$007F
STA DROITE+2 ; VALEUR ASCII
JSR ECR0110 ; AFFICHAGE
JSR SAUV
JMP SOURIS
ECR0108 LDA #ECR01080 ; MAIN : SURFACE SAISIE ACTION
STA SURFACE5+1
JMP SURFACE
ECR01080 JSR DESS1 ; SAISIE ACTION
STZ ACTION
LDX #$179C
JSR DIRECT
STA ACTION ; VALEUR CLAVIER
AND #$007F
STA ACTION+2 ; VALEUR ASCII
JSR ECR0110 ; AFFICHAGE
JSR SAUV
JMP SOURIS
ECR0109 LDA #ECR01090 ; MAIN : SURFACE TIPS
STA SURFACE5+1
JMP SURFACE
ECR01090 NOP
LDA TIPSFLAG ; PLUS COURT...
BNE ECR01091
INC TIPSFLAG
ECR01091 JMP SOURIS
TIPSFLAG HEX 0000
ECR0110 JSR SAVESAF ; AFFICHAGE ECRAN MAIN
LDA #$2CFC ; UP
STA OPENADR
LDA HAUT+2
JSR OPENCAR
LDA #$379C ; ACTION
STA OPENADR
LDA ACTION+2
JSR OPENCAR
LDA #$423C ; DOWN
STA OPENADR
LDA BAS+2
JSR OPENCAR
LDA #$3792 ; <-
STA OPENADR
LDA GAUCHE+2
JSR OPENCAR
LDA #$37A6 ; ->
STA OPENADR
LDA DROITE+2
JSR OPENCAR
LDA LEVEL ; AFFICHAGE LEVEL
STA VALH
LDA #$2C10
STA ADRE
JSR TRANS ; AFFICHAGE RHS
RTS
LEVEL HEX 0000 ; N[ DU NIVEAU (1-110)
ACTION HEX B000,3000 ; CLAVIER,ASCII
GAUCHE HEX B400,3400 ; TOUCHE DE DIRECTION
DROITE HEX B600,3600
HAUT HEX B800,3800
BAS HEX B200,3200
DIRECT NOP ; SAISIE DIRECTION
LDY #$0004
DIREC LDA #$0000
STAL $012000,X
STAL $012002,X ; NETTOY LA SURFACE
TXA
CLC
ADC #$00A0
TAX
DEY
BPL DIREC
LDA #$9999 ; AFFICHAGE TIRET ROUGE
STAL $012000,X
LDA #$9099
STAL $012002,X
DIRECKB LDAL $00BFFF
BPL DIRECKB
STAL $00C010 ; BIT $C010
XBA
AND #$00FF
CMP #$00A6
BEQ DIRECKB ; ON ELIMINE &
CMP #$00A0
BMI DIRECKB
CMP #$00DB
BMI DIRECKB1
CMP #$00E1
BMI DIRECKB
CMP #$00FB
BPL DIRECKB
DIRECKB1 CMP HAUT ; ON ACCEPTE LE CARACTERE
BEQ DIRECKB
CMP BAS
BEQ DIRECKB
CMP GAUCHE ; ON VERIFIE QU'ON NE DOUBLONNE PAS
BEQ DIRECKB
CMP DROITE
BEQ DIRECKB
CMP ACTION
BEQ DIRECKB
TAY
LDA #$0000 ; NETTOYAGE TIRET ROUGE
STAL $012000,X
STAL $012002,X
TYA
RTS
*********** TINIES DOCUMENTATION
ECR0200 LDX SECR2+1 ; DOCU : <-
LDA #ECR02000
STA BUMPER5+1
JMP BUMPER
ECR02000 LDA AFTIND ; PAGE PRECEDENTE
BEQ ECR02001
DEC AFTIND
STZ AFTFL4
JSR AFFTEXT
ECR02001 JMP SOURIS1
ECR0201 LDX SECR2+1 ; DOCU : ->
LDA #ECR02010
STA BUMPER5+1
JMP BUMPER
ECR02010 LDA AFTFL4 ; PAGE SUIVANTE
BNE ECR02011 ; ON EST AU BOUT DU FICHIER
INC AFTIND ; INDEX
JSR AFFTEXT
ECR02011 JMP SOURIS1
ECR0202 LDX SECR2+1 ; DOCU : o
LDA #ECR02020
STA BUMPER5+1
JMP BUMPER
ECR02020 LDA AFTIND ; INDICE DE PAGE
BEQ ECR02021
STZ AFTFL4 ; SOMMAIRE
STZ AFTIND ; PREMIERE PAGE
STZ AFTCONT
JSR AFFTEXT
ECR02021 JMP SOURIS1
ECR0203 LDX SECR2+1 ; DOCU : EXIT
LDA #ECR02030
STA BUMPER5+1
JMP BUMPER
ECR02030 STZ AFTCONT ; ECRAN MAIN
LDA #$0001
JMP PICT
*********** TINIES SELECT
ECR0300 LDX SECR2+1 ; SELECT : CLASSIC
LDA #ECR03000
STA BUMPER5+1
JMP BUMPER
ECR03000 lda #1
jsr nowWAIT
stz okDATAS3
jsr fadeOUT
BRL entryGAME
ECR0301 LDX SECR2+1 ; SELECT : EXTEND
LDA #ECR03010
STA BUMPER5+1
JMP BUMPER
ECR03010 lda #1
jsr nowWAIT
lda #1
sta okDATAS3
jsr fadeOUT
BRL entryGAME
***************************************************************************
****************************** DATA *************************************
***************************************************************************
************ BUMPER MANAGER ************ PAVE
BUMPER LDA FLAGTAB,X
BEQ BUMPER2
LDA BOUT
BEQ BUMPER1
BUMPER0 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 BUMPER0 ; 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
**********************************************
HEX 0A00 ; MAIN NB DE BOUTONS DANS ECRAN1
ECR01TAB HEX B600,3F01,8900,C700 ; DOCU TABLEAU DES BOUTONS POUR ECRAN1
HEX 0000,8900,8900,C700 ; EXIT X0,X1 Y0,Y1
HEX 4E00,F200,5D00,8500 ; PLAY
HEX 2C00,6300,3400,3D00 ; CODE
HEX F700,0201,1200,1B00 ; HAUT
HEX F700,0201,3400,3D00 ; BAS
HEX E300,ED00,2300,2C00 ; GAUCHE
HEX 0B01,1301,2300,2C00 ; DROITE
HEX F700,0201,2300,2C00 ; ACTION
HEX 1700,1800,1E00,1F00 ; TIPS
ECR01DAT HEX 0600,1800,D87E,1D00 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE
HEX 0E00,2400,1D7A,0000 ; EXIT
HEX 0100,0100,405D,9B00 ; PLAY
HEX 0400 ; DOCU
ECR02TAB HEX 6C00,7800,B600,BF00 ; <-
HEX 9000,9C00,B600,BF00 ; ->
HEX 8100,8700,B800,BD00 ; POINT
HEX 0601,3801,B300,C100 ; EXIT
ECR02DAT HEX 0300,0900,F691,2A00 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE
HEX 0300,0900,0892,6A06
HEX 0200,0500,4093,AA0C
HEX 0800,0700,E892,5D10
HEX 0200 ; SELECT
ECR03TAB HEX 5D00,9E00,6500,7300 ; CLASSIC X0,X1 Y0,Y1
HEX A200,E300,6500,7300 ; EXTENT
ECR03DAT HEX 0E00,0700,D161,3105 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE
HEX 0C00,0700,F761,3100
****************
ECRTAB DA ECR01TAB,ECR02TAB,ECR03TAB ; ADRESSES DES TABLEAUX
ECRDAT DA ECR01DAT,ECR02DAT,ECR03DAT ; ADRESSE DES DONNEES BUMPERS
ECRDESA DA ECRDES1,ECRDES2,ECRDES3 ; ADRESSE POUR LES DESTINATIONS
ECRDES1 DA ECR0100,ECR0101,ECR0102,ECR0103,ECR0104 ; MAIN : ADRESSES DES DESTINATIONS
DA ECR0105,ECR0106,ECR0107,ECR0108,ECR0109
ECRDES2 DA ECR0200,ECR0201,ECR0202,ECR0203 ; DOCUMENTATION
ECRDES3 DA ECR0300,ECR0301 ; SELECT
********************* SOUS ROUTINES SOURIS **************************
DEC HEX 000000000000 ; DECOR SOUS LE POINTEUR
HEX 000000000000
HEX 000000000000
HEX 000000000000
HEX 000000000000
HEX 000000000000
PTPAI HEX FFFFFFFF0000
HEX 0F00000F0000 ; POINTEUR POSITION PAIRE
HEX 00F000F00000
HEX 000F00F00000
HEX 0000FF000000
HEX 00000F000000
PTPAIMA HEX 00000000FFFF
HEX F0000000FFFF ; MASQUE POSITION PAIRE
HEX FF00000FFFFF
HEX FFF0000FFFFF
HEX FFFF00FFFFFF
HEX FFFFF0FFFFFF
PTIMP HEX 0FFFFFFFF000
HEX 00F00000F000 ; POINTEUR POSITION IMPAIRE
HEX 000F000F0000
HEX 0000F00F0000
HEX 00000FF00000
HEX 000000F00000
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 0000 ; ECRAN 1,2,3...
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
********************
SEXIT LDY #$FFFF
RTS
SLECT LDAL $00C026 ; $C027 LECTURE SOURIS
BPL SEXIT
AND #$0200 ; BUG
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
**********************
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 $012000,X
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 $012000,X
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
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 $012000,X
TRACE2 AND $A0A0,Y ; ET AVEC LE MASQUE
TRACE3 ORA $A0A0,Y ; OU AVEC LE MOTIF
TRACE4 STAL $012000,X
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
*************************************************
AFFSPRR INC AFFSPRF ; BUMPER RELEVE
AFFSPRE LDA ECRAN ; BUMPER ENFONCE
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 ; *4
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 ptrDATAS
sta AFFSPR4+1
lda ptrDATAS+1
sta AFFSPR4+2
SECR17 LDA\ $0000,X ; @ SPRITE
clc
adc AFFSPR4+1
STA AFFSPR4+1
LDA AFFSPRF ; FLAG DE AFFSPR
BNE AFFSPR2 ; ON DESSINE LE SPRITE RELEVE
LDA AFFSPR4+1
CLC ; SPRITE ENFONCE
ADC #$1720 ; 37 LIGNES PLUS BAS
STA AFFSPR4+1
AFFSPR2 LDY #$0000 ; HAUTEUR-1
AFFSPR3 LDX #$0000 ; NOMBRE DE *4-2
AFFSPR4 LDAL $060000,X ; ADRESSE SPRITE (BANC 06)
AFFSPR5 STAL $012000,X ; ADRESSE ECRAN
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
RTS
AFFSPRF HEX 0000 ; FLAG RELEVE/ENFONCE
*-------------------------- Message
hex 0d0d
asc 'Have you ever dreamed of playing the level you prefer ?'
hex 0d0d
***************** AFFICHE DES CHIFFRES SUR 3 COLONNES ****************************
TRANS LDA VALH ; ON CONVERTIT L'HEXA EN DECIMAL
BNE TRANS1
LDA #$000A ; LE CHIFFRE EN NOIR
STA VAL2
STA VAL3
stz VAL1
BRA TRANS6 ; ON AFFICHE LE NOIR
TRANS1 LDX #$0000
TRANS2 LDA VALH ; VALEUR EN HEXA
CMP #$0064 ; 100
BMI TRANS3
SEC
SBC #$0064
STA VALH
INX
BRA TRANS2
TRANS3 STX VAL3 ; CENTAINE
LDX #$0000
TRANS4 LDA VALH ; VALEUR EN HEXA
CMP #$000A ; 10
BMI TRANS5
SEC
SBC #$000A ; 10
STA VALH
INX
BRA TRANS4
TRANS5 STX VAL2 ; DIZAINE
STA VAL1 ; UNITES
LDA VAL3 ; CENTAINES
BNE TRANS6
LDY #$000A
STY VAL3 ; SI LE CHIFFRE DES CENTAINES EST 0, ON LE NOIRCI
LDA VAL2 ; DIZAINE
BNE TRANS6
STY VAL2 ; SI CENTAINE ET DIZAINE = ZERO, ON NOIRCIT LES 2
TRANS6 LDA ADRE ; ON AFFICHE LES 3 CHIFFRES
STA AFTCA+1 ; ADRESSE ECRAN
LDA VAL3
JSR CHIF ; CENTAINES
LDA ADRE
CLC
ADC #$0003
STA AFTCA+1 ; ADRESSE ECRAN
LDA VAL2
JSR CHIF ; DIZAINES
LDA ADRE
CLC
ADC #$0006
STA AFTCA+1 ; ADRESSE ECRAN
LDA VAL1
JSR CHIF ; UNITES
RTS
*********************
CHIF ASL ; DANS ACC LA VALEUR DECIMALE (0-9)
ASL
STA CHIF1+1
ASL
ASL ; *16
CLC
CHIF1 ADC #$0000 ; + *4
CLC
ADC #$0012 ; 10*2
TAX
LDY #$0012 ; 10*2
CHIF2 LDA AFBT0,X
STA AFBTT,Y
DEX
DEX ; RECOPIE DANS LE BUFFER
DEY
DEY
BPL CHIF2
*** AFFICHE CARACTERE ***
AFTCA LDA #$0000 ; ADRESSE ECRAN
STA AFTCA2+1
INC
INC
STA AFTCA4+1
LDX #$0000 ; 1 ere COLONNE
AFTCA1 LDA AFBTT,X
AFTCA2 STAL $012000
LDA AFTCA2+1
CLC
ADC #$00A0
STA AFTCA2+1 ; LIGNE SUIVANTE
INX
INX
CPX #$000A
BNE AFTCA1
LDX #$0000 ; 2 eme COLONNE
AFTCA3 LDA AFBTT1,X
AFTCA4 STAL $012000
LDA AFTCA4+1
CLC
ADC #$00A0
STA AFTCA4+1 ; LIGNE SUIVANTE
INX
INX
CPX #$000A
BNE AFTCA3
RTS
AFBTT HEX 00000000000000000000
AFBTT1 HEX 00000000000000000000
VALH HEX 0000 ; VALEUR HEXA
VAL1 HEX 0000
VAL2 HEX 0000 ; VALEUR DECIMALE
VAL3 HEX 0000
VAL4 HEX 0000
VALFLAG HEX 0000 ; SI !=0 ALORS 000 EN NOIR
ADRE HEX 0000 ; ADRESSE ECRAN
AFBT0 HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; 0
HEX 000F00FF000F000F0FFF0000000000000000FF00 ; 1
HEX 0FFF000000FF0F000FFFF0000F00F0000000FF00 ; 2
HEX 0FFF0000000F00000FFFF0000F00F0000F00F000 ; 3
HEX 0F000F000F000FFF00000000F000F000FF00F000 ; 4
HEX 0FFF0F000FFF00000FFFFF000000F0000F00F000 ; 5
HEX 00FF0F000FFF0F0000FFFF000000F0000F00F000 ; 6
HEX 0FFF0000000F00F000F0FF00F000000000000000 ; 7
HEX 00FF0F0000FF0F0000FFF0000F00F0000F00F000 ; 8
HEX 00FF0F0000FF00000FFFF0000F00FF000F00F000 ; 9
HEX 0000000000000000000000000000000000000000 ; NOIR
*-------------------------- Message
hex 0d0d
asc 'Let'27's just hope',0d
asc ':-)'
hex 0d0d
******************** TRAITEMENT ET AFFICHAGE ECRANS *********************
PICT PHA ; DESSINE LE DECOR SUR LE POINTEUR
JSR DESS1
PICT00 LDA ECRAN
BEQ PICT01
jsr fadeOUT
PICT01 PLA
STA ECRAN ; DANS ACC LE NUMERO DE L'ECRAN
dec
asl
tax
lda ECRADTAB,x
tax
lda ptrECRAN+1,x ; et mettre ces 3 lignes
ldy #0
jsr fadeIN
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 ECRMAIN,ECRDOCU ; NOM DES ECRANS POUR INIT
ECRADTAB dw 0,4
CLNFLG LDX #$0062 ; ON MET TOUS LES FLAG DE BUMPER A 0
LDA #$0000
CLNFLG1 STA FLAGTAB,X
DEX
DEX
BPL CLNFLG1
RTS
PICT3 STA ECRAN ; CREATION DE L'IMAGE SELECT
JSR DESS1
JSR fadeOUT
LDA ptrDATAS+1
STA PICT31+2
* CLC
* ADC #$007E
* STA Fin3+2
* STA Fin5+2 ; INIT FADE IN
* STA Fin7+2
LDA PICT31+1
AND #$FF00
ORA #$004E
STA PICT31+1
LDY #$001A
PICT30 LDX #$0048
PICT31 LDAL $060000,X
PICT32 STAL $015B8B,X ; IMAGE
DEX
DEX
BPL PICT31
LDA PICT31+1
CLC
ADC #$00A0
STA PICT31+1 ; LIGNE SUIVANTE
LDA PICT32+1
CLC
ADC #$00A0
STA PICT32+1
DEY
BPL PICT30
LDA #$5B8B
STA PICT32+1 ; REMET LA VALEUR
lda ptrDATAS+1
ldy #-1
jsr fadeIN
* JSR Fin0 ; FADEIN
JSR CLNFLG ; LES FLAGS DE BUMPER A ZERO
STZ BMPFLG ; LES FLAGS A ZERO
JSR SAUV
JMP SOURIS1
*********** TRAITEMENT INITIAL A L'AFFICHAGE
ECRMAIN JSR ECR0110 ; ECRAN MAIN
JSR SAUV
JMP SOURIS1
ECRDOCU STZ AFTCONT ; ECRAN DOCUMENTATION
JSR AFFTEXT ; INITIALISATION COMPLETE
JSR SAUV
JMP SOURIS1
*********************************************************************
******** SAISIE *******************
SAVESAI LDY #$0006 ; NETTOYAGE SURFACE
SAVESAI1 LDA #$0000
LDX #$0018
SAVESAI2 STAL $0141D6,X ; 1 LIGNES
DEX
DEX
BPL SAVESAI2
LDA SAVESAI2+1
CLC ; 5 LIGNES A EFFACER
ADC #$00A0
STA SAVESAI2+1
DEY
BNE SAVESAI1
LDA #$41D6 ; REMET LA VALEUR
STA SAVESAI2+1
LDX #$0006 ; NETTOYAGE BUFFER ET NOM DE SAUVEGARDE (8 LETTRES)
LDA #$0000
SAVESAI3 STA SAVESBU,X
DEX
DEX
BPL SAVESAI3
LDA #$9999 ; AFFICHAGE TIRET ROUGE
STAL $01450C
LDA #$9099
STAL $01450E
SAVESAI4 LDAL $00BFFF ; ON COMMENCE LA SAISIE : ON ATTEND 1 LETTRE
BPL SAVESAI4
STAL $00C010 ; BIT $C010
XBA
AND #$00FF
CMP #$00FF ; DELETE : ON EFFACE LA LETTRE
BNE SAVESAI10
LDA SAVESLS
BEQ SAVESAI4 ; RIEN A EFFACER
JSR SAVESGE ; EFFACE 1 LETTRE : DECALAGE DROITE
JSR SAVESAF ; REAFFICHE LA CHAINE
DEC SAVESLS
BRA SAVESAI4
SAVESAI10 CMP #$00C1 ; MAJUSCULE ?
BMI SAVESAI4
CMP #$00DB
BMI SAVESAI5
CMP #$00E1 ; MINUSCULE ?
BMI SAVESAI4
CMP #$00FB
BPL SAVESAI4
SEC
SBC #$0020
BRA SAVESAI5 ; CONVERSION MINUSCULE -> MAJUSCULE
SAVESAI5 TAY
JSR SAVESDE ; DECALAGE GAUCHE
STY SAVESBU+7
JSR SAVESAF ; AFFICHAGE
LDA SAVESLS
INC
CMP #$0008
BEQ SAVESAI8 ; ON A SAISIE HUIT LETTRES
STA SAVESLS
BRA SAVESAI4
SAVESAI8 STZ SAVESLS ; C'EST LA FIN (8 LETTRES SAISIES)
LDA #$0000 ; EFFACE LE TIRET ROUGE
STAL $01450C
STAL $01450E
LDX #$0006 ; ON VERIFIE LE CODE
SAVESAI9 LDA SAVESBU,X
CLC
ADC #$0300
STA SAVECRY,X ; ON CRYPTE
DEX
DEX
BPL SAVESAI9
LDY #$0000
LDX #$0000
SAVESAI6 LDA SAVECRY,Y ; ON CHERCHE
CMP PASSWRD,X
BNE SAVESAI7
CPY #$0006
BEQ SAVESAI11 ; TROUVE
INY
INY
INX
INX
BRA SAVESAI6
SAVESAI7 LDY #$0000
INX
INX
CPX #$0328
BNE SAVESAI6
LDA #$0000 ; PAS TROUVE...
STA LEVEL
LDX #$0006
SAVESAI12 LDA SAVEDEF,X ; ON RECOPIE ADJUACES (DEFAULT)
STA SAVESBU,X
DEX
DEX
BPL SAVESAI12
RTS
SAVESAI11 INX
INX
TXA
LSR
LSR ; /8
LSR
dec
STA LEVEL
sta level
stz joker
stz life
RTS
SAVESDE LDX #$0000 ; DECALAGE 1 CRAN VERS LA GAUCHE
SAVESDE1 LDA SAVESBU+1,X
STA SAVESBU,X
INX
INX
CPX #$000A
BNE SAVESDE1
RTS
SAVESGE LDX #$0006 ; DECALAGE 1 CRAN VERS LA DROITE
SAVESGE1 LDA SAVESBU,X
STA SAVESBU+1,X
DEX
DEX
BPL SAVESGE1
LDA #$0000 ; PLACE UN ZERO AU DEBUT
STA SAVESBU-1
RTS
SAVESAF LDY #$0000 ; AFFICHAGE SAISIE : 8 CARACTERES
LDA #$41D7
STA OPENADR
SAVESAF1 LDA SAVESBU,Y
AND #$007F ; PASSAGE 8 bit -> 7 bit
JSR OPENCAR ; AFFICHE 1 CARAC
INY
CPY #$0008
BNE SAVESAF1
RTS
HEX 0000
SAVESBU HEX C1,C4,CA,D5,C1,C3,C5,D3,0000 ; ADJUACES PAR DEFAUT
SAVESLS HEX 0000 ; NB DE LETTRES SAISIES
SAVEDEF HEX C1C4CAD5C1C3C5D3
SAVECRY HEX 0000000000000000
OPENCAR PHY ; RECOIT DANS ACC LE CARACTERE ET L'AFFICHE (OPENADR)
AND #$00FF
CMP #$0020 ; ESPACE -> SP
BNE OPENCAR8
LDA #$009E
OPENCAR8 STA OPENCAR6+1
LDY #$0063
OPENCAR5 LDA AFTTBL,Y ; ON CHERCHE LE SPRITE CORESPONDANT
AND #$00FF
OPENCAR6 CMP #$00FF
BEQ OPENCAR7
DEY
BPL OPENCAR5
LDY #$003B ; PAS TROUVE, ON MET UN ESPACE (40)
OPENCAR7 TYA
ASL
TAY
LDA AFTADR,Y ; ADRESSE DES SPRITES
STA OPENCAR1+1
CLC
ADC #$000A
STA OPENCAR3+1
LDA OPENADR ; ADRESSE DESTINATION
STA OPENCAR2+1
INC
INC
STA OPENCAR4+1
INC
STA OPENADR
LDY #$0000 ; 1 ere COLONNE
OPENCAR1 LDA $AAAA,Y
OPENCAR2 STAL $012000
LDA OPENCAR2+1
CLC
ADC #$00A0
STA OPENCAR2+1 ; LIGNE SUIVANTE
INY
INY
CPY #$000A
BNE OPENCAR1
LDY #$0000 ; 2 eme COLONNE
OPENCAR3 LDA $AAAA,Y
OPENCAR4 STAL $012000
LDA OPENCAR4+1
CLC
ADC #$00A0
STA OPENCAR4+1 ; LIGNE SUIVANTE
INY
INY
CPY #$000A
BNE OPENCAR3
PLY
RTS
OPENADR HEX 0000 ; ADRESSE ECRAN
OBJAFF SEC ; AFFICHAGE OBJET
SBC #$00F0
ASL
TAX
lda ptrDATAS
sta OBJAFF1+1
lda ptrDATAS+1
sta OBJAFF1+2
LDA OBJETT,X
clc
adc OBJAFF1+1
STA OBJAFF1+1 ; ADRESSE SPR
LDA AFTAE
STA OBJAFF2+1 ; ADRESSE ECR
LDY #$0017
OBJAFF0 LDX #$000A
OBJAFF1 LDAL $060000,X ; ADRESSE SPRITE
OBJAFF2 STAL $012000,X ; ADRESSE ECRAN
DEX
DEX
BPL OBJAFF1
LDA OBJAFF1+1 ; LIGNE SUIVANTE
CLC
ADC #$00A0
STA OBJAFF1+1
LDA OBJAFF2+1
CLC
ADC #$00A0
STA OBJAFF2+1
DEY
BPL OBJAFF0
RTS
*-------------------------- Message
hex 0d0d
asc 'No wind, no wave, no woman, then no future'
hex 0d0d
*************************************************
OBJETT HEX E12E,6140,E151,0B2F,EF2E,6F40,EF51,FD2E,7D40,FD51
AFTADR DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 0-13
DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ,AFT0 ; 14-26
DA AFT1,AFT2,AFT3,AFT4,AFT5,AFT6,AFT7,AFT8,AFT9,AFTPL,AFTMOI,AFTET,AFTSL,AFTEG ; 27-40
DA AFTSO,AFTPE,AFTPI,AFTSU,AFTIN,AFTPO,AFTPF,AFTDP,AFTPT,AFTVI,AFTRO ; 41-51
DA AFTGU,AFTAP,AFTPV,AFTDI,AFTDO,AFTAC,AFTPC,AFTSP ; 52-59
DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 60-73
DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ ; 74-85
DA AFTA,AFTC,AFTE,AFTU,AFTE,AFTE,AFTA,AFTO,AFTBA,AFTRD,AFTFD,AFTFG,AFTSP,AFTNS ; 86-99
AFTA HEX 00FF0F000FFF0F000F00F0000F00FF000F000F00 ; A
AFTB HEX 0FFF0F000FFF0F000FFFF0000F00F0000F00F000 ; B
AFTC HEX 00FF0F000F000F0000FFF0000F0000000F00F000 ; C
AFTD HEX 0FFF0F000F000F000FFFF0000F000F000F00F000 ; D
AFTE HEX 0FFF0F000FFF0F000FFFFF00000000000000FF00 ; E
AFTF HEX 0FFF0F000FFF0F000F00FF000000000000000000 ; F
AFTG HEX 00FF0F000F000F0000FFF0000000FF000F00F000 ; G
AFTH HEX 0F000F000FFF0F000F000F000F00FF000F000F00 ; H
AFTI HEX 0FFF000F000F000F0FFFFF00000000000000FF00 ; I
AFTJ HEX 000F000000000F0000FFFF00F000F000F0000000 ; J
AFTK HEX 0F000F000FFF0F000F000F00F0000000F0000F00 ; K
AFTL HEX 0F000F000F000F000FFF0000000000000000FF00 ; L
AFTM HEX 0F000FF00F0F0F000F000F00FF000F000F000F00 ; M
AFTN HEX 0F000FF00F0F0F000F000F000F000F00FF000F00 ; N
AFTO HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; O
AFTP HEX 0FFF0F000FFF0F000F00F0000F00F00000000000 ; P
AFTQ HEX 00FF0F000F000F0000FFF0000F000F00F0000F00 ; Q
AFTR HEX 0FFF0F000FFF0F000F00F0000F00F000F0000F00 ; R
AFTS HEX 00FF0F0000FF00000FFFFF000000F0000F00F000 ; S
AFTT HEX 0FFF000F000F000F000FFF000000000000000000 ; T
AFTU HEX 0F000F000F000F0000FF0F000F000F000F00F000 ; U
AFTV HEX 0F000F0000F000F0000F0F000F00F000F0000000 ; V
AFTW HEX 0F000F000F0F0FF00F000F000F000F00FF000F00 ; W
AFTX HEX 0F0000F0000F00F00F000F00F0000000F0000F00 ; X
AFTY HEX 0F000F0000F0000F000F0F000F00F00000000000 ; Y
AFTZ HEX 0FFF0000000F00F00FFFFF00F00000000000FF00 ; Z
AFT0 HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; 0
AFT1 HEX 000F00FF000F000F0FFF0000000000000000FF00 ; 1
AFT2 HEX 0FFF000000FF0F000FFFF0000F00F0000000FF00 ; 2
AFT3 HEX 0FFF0000000F00000FFFF0000F00F0000F00F000 ; 3
AFT4 HEX 0F000F000F000FFF00000000F000F000FF00F000 ; 4
AFT5 HEX 0FFF0F000FFF00000FFFFF000000F0000F00F000 ; 5
AFT6 HEX 00FF0F000FFF0F0000FFFF000000F0000F00F000 ; 6
AFT7 HEX 0FFF0000000F00F000F0FF00F000000000000000 ; 7
AFT8 HEX 00FF0F0000FF0F0000FFF0000F00F0000F00F000 ; 8
AFT9 HEX 00FF0F0000FF00000FFFF0000F00FF000F00F000 ; 9
AFTPL HEX 000F000F0FFF000F000F00000000FF0000000000 ; +
AFTMOI HEX 000000000FFF0000000000000000FF0000000000 ; -
AFTET HEX 0F0F00FF0FFF00FF0F0F0F00F000FF00F0000F00 ; *
AFTSL HEX 00000000000F00F00F000F00F000000000000000 ; /
AFTEG HEX 00000FFF00000FFF00000000FF000000FF000000 ; =
AFTSO HEX 00000000000000000FFF0000000000000000FF00 ; _
AFTPE HEX 000F000F000F0000000F00000000000000000000 ; !
AFTPI HEX 00FF0F00000F0000000FF0000F00F00000000000 ; ?
AFTSU HEX 00F0000F0000000F00F000000000F00000000000 ; >
AFTIN HEX 0000000F00F0000F0000F000000000000000F000 ; <
AFTPO HEX 000F00F000F000F0000F00000000000000000000 ; (
AFTPF HEX 000F000000000000000F0000F000F000F0000000 ; )
AFTDP HEX 0000000F0000000F000000000000000000000000 ; :
AFTPT HEX 0000000000000000000F00000000000000000000 ; .
AFTVI HEX 0000000000000000000F000000000000F0000000 ; ,
AFTRO HEX 00FF00F000FF00000000F000F000F00000000000 ; o
AFTGU HEX 00F000F0000000000000F000F000000000000000 ; "
AFTAP HEX 000F000F00000000000000000000000000000000 ; '
AFTPV HEX 0000000000000000000F0000F0000000F0000000 ; ;
AFTDI HEX 00F00FFF00F00FFF00F0F000FF00F000FF00F000 ; #
AFTDO HEX 00FF0F0F00FF000F0FFFFF000000F0000F00F000 ; $
AFTAC HEX 000F00F00F00000000000000F0000F0000000000 ; ^
AFTPC HEX 0FF00FF0000F00F00F000F00F0000000FF00FF00 ; %
AFTSP HEX 0000000000000000000000000000000000000000 ; SPACE
AFTRD HEX 00FF0FFF0FFF0FFF00FFF000FF00FF00FF00F000 ; o
AFTBA HEX 0FF0F0000F0000F0FF00FF00F0F0FF00F000F000 ; SP
AFTFD HEX 000F000F0FFF000F000F0000F000FF00F0000000 ; ->
AFTFG HEX 000F00FF0FFF00FF000F00000000FF0000000000 ; <-
AFTNS HEX 0FFF0FFF0FFF0FFF0FFFFF00FF00FF00FF00FF00 ; NO SE
AFTTBL HEX 4142434445464748494A4B4C4D4E4F505152535455565758595A ; A-Z
HEX 30313233343536373839 ; 0-9
HEX 2B2D2A2F3D5F213F3E3C28293A2E2C ; +-*/=_!?><():.,
HEX 5B22273B23245E2520 ; o"';#$^% @
HEX 6162636465666768696A6B6C6D6E6F707172737475767778797A ; a-z
HEX 888D8E9D8F9089999E94C8C709 ; @\{|}^e^a^oIo-><-TAB
PASSWRD ASC "AGJXAFEVGDSLAQDLGUOLDHKQNHBDCUUFRHSWUVHDEQTULDCRBRTFRHPDOFTRAQVD"
ASC "CRAGSXPSRDWESNIWTDNJVLLLDHNDJRIQVDMETKEDUQPDSXBRLDNGPDP\PUESPDNG"
ASC "NLFHSDIOBUOFIQDLBXSNPXLLLRGLMDRDOFTRGOAETUIVEPEVCRNYJHHRRHNGCOIQ"
ASC "NHGDPRL\PHTUAFCHSSOQEQCULDZ\HRMLHHNGOXTNPDP\ESISCRCNSWUPEWHLGDNJ"
ASC "IQLDDRNFIQTHAVSDMDSWWROGAERRIQSWBDCNBDNDEFLRWKISGUOLIPPRCXBDCXBD"
ASC "DHCODUOOSLMSUQDHUQHXSFHRLHGDMXRDAQIPCDTHLDUJMDGDPDLVD\SVBUOFRHVH"
ASC "PRRUUQDHULGXASEUNRNKMLSFPHRXSPIWD\SVDHKQDLUUGDSLOGOUCDUVPHAVAQCK"
ASC "UUOUDHFHSXBEPLCNRXLDSFAUNRDXORPKCRBHGDLHTUOOTDCVPHAVVDMEX\LRWLRH"
ASC "SFIXMLNWEXGHRXNHEUUSPOOWMDRLCRNNNXRVHLSSSQOEHRMRPRRWCDRRCKAUGHDD"
ASC "UQNHPRWVPROQRRMDPUEDPUESSDIOZROQIVOVNXRVHHNGWROGAJOQUSSQLDNGDLVX"
ASC "NLCNMDSWPLCNRRLOOXTVSSOWKDLDAFCHTHLRRXLDWRRNLDUGGUALUSLDPRLROFTR"
ASC "RHPDDHTDFHLGUQFRBDDLVHLOPDTLBHEITLTDSDUFPXPLUQPUMDSWEUUSQXAUFHLG"
ASC "GUIISLDHWKIWUQNLDRWQIQSXUQLLIVOSMXAGDLBX"
**************************** AFFICHAGE TEXT **********************************
AFFTEXT LDA #$0062 ; LONGUEUR DE LA Ligne
STA AFTAM1+1 ; 90
STZ AFTLIG
STZ AFTCOL
JSR AFTLC ; EN HAUT A GAUCHE
STA AFTAE
JSR AFTNE ; CLEAR SCREEN
LDA AFTCONT
BNE AFTDEB1
*** DEBUT ***
AFTDEB0 LDA #$0000 ; DEBUT DU TEXTE 040000
STA AFTDEB3+1
STA AFTTBI
STZ AFTCONT
STZ AFTIND ; PREMIERE PAGE
STZ AFTFL4 ; FIN DE FICHIER
BRA AFTDEB3
AFTDEB1 LDA AFTIND
ASL
TAX ; ON SE MET A LA BONNE PAGE
LDA AFTTBI,X ; ADRESSE
STA AFTDEB3+1
******************
AFTDEB3 lda #0000 ; ADRESSE DE LA PREMIERE LETTRE
sta AFTDEB4+1
sta AFTAM+1
sep #$20
lda ptrNIV+2
sta AFTDEB4+3
sta AFTAM+3
rep #$20
LDY #$0000
AFTDEB4 LDAL $040000 ; ADRESSE DU MOT
sec
sbc #$0303
CMP #$A4A4 ; FIN DU FICHIER : ]]
BEQ AFTFFI0
AND #$00FF
BEQ AFTFFI0 ; FIN DU FICHIER : 00
CMP #$00A4 ; TIPS...
BEQ AFTTIPS
CMP #$0020 ; ESPACE
BEQ AFTES0
CMP #$000D ; RETURN
BEQ AFTRE0
CMP #$0009 ; TABULATION
BEQ AFTTA0
INY
INC AFTDEB4+1
BRA AFTDEB4
AFTES0 JMP AFTES
AFTRE0 JMP AFTRE
AFTTA0 JMP AFTTA
AFTFFI0 JMP AFTFFI ; FIN DE FICHIER
AFTTIPS LDA TIPSFLAG
BEQ AFTFFI0
BRA AFTES0 ; ON IGNORE
***************
AFTFFI INC AFTFL4 ; FIN DU FICHIER
JMP AFTFI
AFTTA CPY #$0000 ; TAB
BNE AFTTA1
LDA #$0001 ; TAB SEUL
STA AFTTR3+1
JMP AFTTR1
AFTTA1 INC AFTFL3 ; MOT AVANT
JMP AFTMO
AFTRE CPY #$0000 ; RETURN
BNE AFTRE1
LDA #$0001 ; RETURN SEUL
STA AFTTR6+1
JMP AFTTR5
AFTRE1 INC AFTFL2 ; MOT AVANT
JMP AFTMO
AFTES CPY #$0000 ; ESPACE
BNE AFTES1
LDA #$0001 ; ESPACE SEUL
STA AFTTR10+1
JMP AFTTR8
AFTES1 INC AFTFL1 ; MOT AVANT
JMP AFTMO
********* AFFICHAGE MOT ***********
AFTMO CPY #$0033
BMI AFTMO2
INY ; MOT SUIVANT
STY AFTMO1+1
LDA AFTDEB3+1
CLC
AFTMO1 ADC #$0000
STA AFTDEB3+1
JMP AFTDEB3
AFTMO2 LDA #$0034
SEC
SBC AFTCOL
STA AFTMO3+1
AFTMO3 CPY #$0000 ; NB COLON RESTANTE
BMI AFTMO5
LDA AFTLIG
CMP #$001A ; 26 LIGNES
BNE AFTMO4
JMP AFTFI ; FIN ECRAN
AFTMO4 STZ AFTCOL
INC AFTLIG
AFTMO5 LDA AFTDEB3+1 ; ADRESSE DU DERNIER MOT
STA AFTAM+1
TYA
STA AFTAM8+1
INC
STA AFTTR3+1 ; LONGUEUR DU MOT +1
STA AFTTR6+1
STA AFTTR10+1
JSR AFTLC
STA AFTAE
JSR AFTAM
****** TRAITEMENT DU SPACE, RETURN, TAB ... ******
AFTTR LDA AFTFL3 ; TAB
BEQ AFTTR4
STZ AFTFL3
AFTTR1 LDA AFTDEB3+1
CLC
AFTTR3 ADC #$0000 ; LONGUEUR+1
STA AFTDEB3+1
LDA AFTCOL
ASL
TAX
LDA AFTTAB,X
CMP #$0033
BMI AFTTR2
LDA AFTLIG ; ON VA A LA LIGNE
CMP #$001A
BEQ AFTFI ; FIN ECRAN
INC AFTLIG
LDA #$0000
AFTTR2 STA AFTCOL
JMP AFTDEB3
AFTTR4 LDA AFTFL2 ; RETURN
BEQ AFTTR7
STZ AFTFL2
AFTTR5 LDA AFTDEB3+1
CLC
AFTTR6 ADC #$0000 ; LONGUEUR+1
STA AFTDEB3+1
LDA AFTLIG
CMP #$001A ; 26 LIGNES
BEQ AFTFI ; FIN ECRAN
INC AFTLIG
STZ AFTCOL
JMP AFTDEB3
AFTTR7 LDA AFTFL1 ; SPACE
BEQ AFTTR11 ; **********
STZ AFTFL1
AFTTR8 LDA AFTDEB3+1
CLC
AFTTR10 ADC #$0000 ; LONGUEUR +1
STA AFTDEB3+1
LDA AFTCOL
INC
STA AFTCOL
CMP #$0033
BMI AFTTR9
LDA AFTLIG
CMP #$001A
BEQ AFTFI ; FIN ECRAN
INC AFTLIG
STZ AFTCOL
AFTTR9 JMP AFTDEB3
AFTTR11 LDA AFTDEB3+1
CLC
ADC AFTTR10+1 ; LONGUEUR +1
STA AFTDEB3+1
JMP AFTDEB3
******* FIN D'AFFICHAGE D'1 PAGE *******
AFTFI INC AFTCONT ;
LDA AFTIND
INC
ASL ;
TAX
LDA AFTDEB3+1
STA AFTTBI,X ; INDEX TAB
RTS ; ON SORT
************************** AFFICHAGE GRAPHIQUE ********************************
AFTAM LDAL $040000 ; ADRESSE DE LA LETTRE
AND #$00FF
sec
sbc #$0003
STA AFTAM3+1 ; cherche le caractere dans la table
AND #$00FF
CMP #$00F0 ; CARACTERE SPECIAUX : OBJETS
BMI AFTAM1
JSR OBJAFF ; AFFICHAGE OBJETS
BRA AFTAM7
AFTAM1 LDX #$0000 ; LONGUEUR DE LA Ligne DE CARACTERE
AFTAM2 LDA AFTTBL,X
AND #$00FF
AFTAM3 CMP #$0000 ; notre caractere
BEQ AFTAM5
CPX #$0000
BEQ AFTAM4
DEX
BRA AFTAM2
AFTAM4 LDX #$0063 ; PAS DANS LA Ligne
AFTAM5 JSR AFTCAR ; AFFICHE LE CARACTERE
DEY ; DANS Y LA LONGUEUR DU MOT
BEQ AFTAM7
LDA AFTAE
INC
INC ; ADREC LETTRE SUIVANTE
INC
STA AFTAE
INC AFTAM+1 ; LETTRE SUIVANTE
BRA AFTAM
AFTAM7 LDA AFTCOL
CLC
AFTAM8 ADC #$0000 ; LONGUEUR DU MOT+1
STA AFTCOL
RTS
******* NETTOYAGE ********
AFTNE LDA #$25A2
STA AFTNE2+1 ; INIT
LDY #$00A0 ; 160 LIGNES
AFTNE1 LDA #$0000
LDX #$0099 ; 306/2
AFTNE2 STAL $0125A2,X
DEX ; 1 LIGNE
DEX
BPL AFTNE2
LDA AFTNE2+1
CLC ; LIGNE SUIVANTE
ADC #$00A0
STA AFTNE2+1
DEY
BPL AFTNE1
RTS
******** AFFICHE CARACTERE ********
AFTCAR TXA ; RECOIT DANS X LA POSITION
ASL ; DU CARACTERE
TAX
LDA AFTADR,X
STA AFTCAR1+1
CLC
ADC #$000A
STA AFTCAR3+1
LDA AFTAE
STA AFTCAR2+1
INC
INC
STA AFTCAR4+1
LDX #$0000 ; 1 ere COLONNE
AFTCAR1 LDA $AAAA,X
AFTCAR2 STAL $012000
LDA AFTCAR2+1
CLC
ADC #$00A0
STA AFTCAR2+1 ; LIGNE SUIVANTE
INX
INX
CPX #$000A
BNE AFTCAR1
LDX #$0000 ; 2 eme COLONNE
AFTCAR3 LDA $AAAA,X
AFTCAR4 STAL $012000
LDA AFTCAR4+1
CLC
ADC #$00A0
STA AFTCAR4+1 ; LIGNE SUIVANTE
INX
INX
CPX #$000A
BNE AFTCAR3
RTS
*********** LIGNE COLONNE *************
AFTLC LDA AFTLIG
ASL
TAX
LDA AFTTL,X ; LIGNE
STA AFTLC1+1
LDA AFTCOL
ASL
TAX
LDA AFTTC,X ; COLON
CLC
AFTLC1 ADC #$0000
CLC
ADC #$2000
RTS
*-------------------------- Message
hex 0d0d
asc 'What is the difference the MAC IIcx and the SE30 ? $1000'
hex 0d0d
*************** TABLES, VARIABLES ET FLAGS ******************
AFTAE HEX 0000 ; ADRESSE ECRAN ECRITURE
AFTLIG HEX 0000 ; 0 A 26 LIGNES
AFTCOL HEX 0000 ; 0 A 50 COLONNES
AFTIND HEX 0000 ; INDEX PAGES
AFTFL1 HEX 0000 ; 1 SI SPACE
AFTFL2 HEX 0000 ; 1 SI RETURN
AFTFL3 HEX 0000 ; 1 SI TAB
AFTFL4 HEX 0000 ; 1 SI FIN DE FICHIER
AFTCONT HEX 0000 ; 1 SI NON FIN
AFTTBI HEX 0000000000000000000000000000000000000000 ; 10
HEX 0000000000000000000000000000000000000000 ; 20
HEX 0000000000000000000000000000000000000000 ; 30
HEX 0000000000000000000000000000000000000000 ; 40
AFTTL HEX A0056009200DE010A0146018201CE01FA0236027202B ; 0-10
HEX E02EA0326036203AE03DA04160452049E04CA0506054 ; 11-21
HEX 2058E05BA05F60632067 ; 22-26
AFTTC HEX 0300060009000C000F001200150018001B001E002100 ; 0-10
HEX 240027002A002D0030003300360039003C003F004200 ; 11-21
HEX 450048004B004E005100540057005A005D0060006300 ; 22-32
HEX 660069006C006F007200750078007B007E0081008400 ; 33-43
HEX 87008A008D009000930096009900 ; 44-50
AFTTAB HEX 040004000400040008000800080008000C000C000C000C00 ; 12
HEX 100010001000100014001400140014001800180018001800 ;
HEX 1C001C001C001C0020002000200020002400240024002400 ;
HEX 28002800280028002C002C002C002C003000300030003000 ;
HEX 34003400340034003800380038003800
*******************************************************************************