mirror of
https://github.com/antoinevignau/source.git
synced 2024-12-30 18:31:21 +00:00
757886e58e
Antoine's source code of Blockade
1395 lines
28 KiB
ArmAsm
1395 lines
28 KiB
ArmAsm
*
|
|
* Blockade: Souris
|
|
*
|
|
|
|
*--------------------------------------
|
|
|
|
maximumX = 312
|
|
maximumY = 194
|
|
|
|
|
|
theMOUSE lda nbPIECES
|
|
bne theMOUSE1
|
|
lda #0
|
|
rts
|
|
|
|
theMOUSE1 jsr moREAD
|
|
jsr moCONTROL
|
|
bcs theMOUSE10
|
|
|
|
cpx #-1
|
|
beq theMOUSE10
|
|
cpx #135*2
|
|
bcc theMOUSE4
|
|
brl doBUTTON
|
|
|
|
theMOUSE4 lda coorX
|
|
sta oldX
|
|
lda coorY
|
|
sta oldY
|
|
lda currC
|
|
sta oldC
|
|
|
|
ldy #0
|
|
|
|
theMOUSE5 jsr checkVALID
|
|
bcc theMOUSE6
|
|
|
|
ldx oldX
|
|
stx coorX
|
|
ldy oldY
|
|
sty coorY
|
|
lda oldC
|
|
sta currC
|
|
|
|
bra theMOUSE10
|
|
|
|
theMOUSE6 lda #-1
|
|
sta windowC
|
|
|
|
ldx coorX
|
|
stx currX
|
|
ldy coorY
|
|
sty currY
|
|
|
|
jsr moBACK
|
|
jsr nowPLAY
|
|
jsr moFORE
|
|
|
|
ldx currX
|
|
stx coorX
|
|
ldy currY
|
|
sty coorY
|
|
|
|
brl theMOUSE
|
|
|
|
*---
|
|
|
|
theMOUSE10 lda fgBORDURE
|
|
beq theMOUSE12
|
|
|
|
sep #$20
|
|
ldal $e0c034
|
|
inc
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
theMOUSE12 ldy #0
|
|
jsr clickIT
|
|
bcc theMOUSE13
|
|
brl theMOUSE
|
|
|
|
theMOUSE13 sta theKEY
|
|
|
|
cpy #0
|
|
bne theMOUSE14
|
|
|
|
ldal $e0c060
|
|
bmi theMOUSE14
|
|
brl theMOUSE30
|
|
|
|
theMOUSE14 lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"Q"
|
|
bne theMOUSE16
|
|
|
|
jsr doQUIT
|
|
bcs theMOUSE15
|
|
lda #-1
|
|
clc
|
|
rts
|
|
theMOUSE15 brl theMOUSE
|
|
|
|
theMOUSE16 lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"R"
|
|
bne theMOUSE17
|
|
|
|
lda #-2
|
|
rts
|
|
|
|
theMOUSE17 lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"Z"
|
|
bne theMOUSE18
|
|
|
|
lda #-1
|
|
sta windowC
|
|
|
|
jsr moBACK
|
|
jsr restoreALL
|
|
jsr moFORE
|
|
brl theMOUSE
|
|
|
|
theMOUSE18 lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"P"
|
|
bne theMOUSE20
|
|
|
|
jsr doLEVEL
|
|
bcc theMOUSE19
|
|
jsr moFORE
|
|
brl theMOUSE
|
|
theMOUSE19 lda #-2
|
|
rts
|
|
|
|
theMOUSE20 lda theKEY
|
|
cmp #"?"
|
|
bne theMOUSE21
|
|
|
|
jsr doHELP
|
|
brl theMOUSE
|
|
|
|
theMOUSE21 lda fgFX
|
|
bne theMOUSE22
|
|
lda fgSND
|
|
beq theMOUSE22
|
|
|
|
lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"S"
|
|
bne theMOUSE22
|
|
|
|
lda fgPLAY
|
|
eor #1
|
|
sta fgPLAY
|
|
brl theMOUSE
|
|
|
|
theMOUSE22 lda fgZIK
|
|
bne theMOUSE24
|
|
lda fgSND
|
|
beq theMOUSE24
|
|
|
|
lda theKEY
|
|
and #%00000000_11011111
|
|
cmp #"M"
|
|
bne theMOUSE24
|
|
|
|
lda zikPLAY
|
|
eor #1
|
|
sta zikPLAY
|
|
beq theMOUSE23
|
|
jsr shutMUSIC2
|
|
bra theMOUSE24
|
|
theMOUSE23 jsr shutMUSIC1
|
|
|
|
theMOUSE24 brl theMOUSE
|
|
|
|
*---
|
|
|
|
theMOUSE30 ldx coorX
|
|
stx oldX
|
|
ldy coorY
|
|
sty oldY
|
|
ldx currC
|
|
stx oldC
|
|
|
|
lda theKEY
|
|
cmp #"4"
|
|
beq theMOUSE32
|
|
cmp #$88
|
|
beq theMOUSE32
|
|
cmp #"J"
|
|
beq theMOUSE32
|
|
cmp #"j"
|
|
beq theMOUSE32
|
|
|
|
cmp #"6"
|
|
beq theMOUSE33
|
|
cmp #$95
|
|
beq theMOUSE33
|
|
cmp #"L"
|
|
beq theMOUSE33
|
|
cmp #"l"
|
|
beq theMOUSE33
|
|
|
|
cmp #"8"
|
|
beq theMOUSE34
|
|
cmp #$8b
|
|
beq theMOUSE34
|
|
cmp #"I"
|
|
beq theMOUSE34
|
|
cmp #"i"
|
|
beq theMOUSE34
|
|
|
|
cmp #"2"
|
|
beq theMOUSE35
|
|
cmp #"5"
|
|
beq theMOUSE35
|
|
cmp #$8a
|
|
beq theMOUSE35
|
|
cmp #"K"
|
|
beq theMOUSE35
|
|
cmp #"k"
|
|
beq theMOUSE35
|
|
|
|
theMOUSE31 brl theMOUSE
|
|
|
|
theMOUSE32 lda coorX
|
|
beq theMOUSE31
|
|
dec coorX
|
|
bra theMOUSE36
|
|
|
|
theMOUSE33 lda coorX
|
|
cmp #14
|
|
beq theMOUSE31
|
|
inc coorX
|
|
bra theMOUSE36
|
|
|
|
theMOUSE34 lda coorY
|
|
beq theMOUSE31
|
|
dec coorY
|
|
bra theMOUSE36
|
|
|
|
theMOUSE35 lda coorY
|
|
cmp #8
|
|
beq theMOUSE31
|
|
inc coorY
|
|
|
|
theMOUSE36 ldx coorX
|
|
ldy coorY
|
|
jsr calcPLATEAU
|
|
tax
|
|
ldy #1
|
|
brl theMOUSE5
|
|
|
|
*--------------------------------------
|
|
|
|
doBUTTON lda #-1
|
|
sta windowC
|
|
|
|
cpx #135*2
|
|
bne doBUTTON1
|
|
lda #"?" ; help
|
|
ldy #-1
|
|
brl theMOUSE13
|
|
doBUTTON1 cpx #136*2
|
|
bne doBUTTON2
|
|
lda #"P" ; level
|
|
ldy #-1
|
|
brl theMOUSE13
|
|
doBUTTON2 cpx #137*2
|
|
bne doBUTTON3
|
|
lda #"S" ; sound
|
|
ldy #-1
|
|
brl theMOUSE13
|
|
doBUTTON3 cpx #138*2
|
|
bne doBUTTON4
|
|
lda #"M" ; music
|
|
ldy #-1
|
|
brl theMOUSE13
|
|
doBUTTON4 cpx #139*2
|
|
bne doBUTTON5
|
|
lda #"Q" ; quit
|
|
ldy #-1
|
|
brl theMOUSE13
|
|
doBUTTON5 brl theMOUSE
|
|
|
|
*--------------------------------------
|
|
|
|
doLEVEL lda #' '
|
|
sta strLEVEL
|
|
|
|
lda level
|
|
sta oldLEVEL
|
|
|
|
jsr moBACK
|
|
|
|
lda #$9999 ; Affiche barre rouge
|
|
stal $e19913
|
|
stal $e19914
|
|
|
|
jsr putLEVEL1
|
|
|
|
]lp jsr clickIT
|
|
bcs ]lp
|
|
cmp #$b1
|
|
bcc ]lp
|
|
cmp #$ba
|
|
bcs ]lp
|
|
|
|
sep #$20
|
|
and #$7f
|
|
sta strLEVEL+1
|
|
rep #$20
|
|
|
|
jsr putLEVEL1
|
|
|
|
]lp jsr clickIT
|
|
bcs ]lp
|
|
cmp #$8d
|
|
beq doLEVEL1
|
|
cmp #$b0
|
|
bcc ]lp
|
|
cmp #$ba
|
|
bcs ]lp
|
|
|
|
sep #$20
|
|
and #$7f
|
|
pha
|
|
lda strLEVEL+1
|
|
sta strLEVEL
|
|
pla
|
|
sta strLEVEL+1
|
|
rep #$20
|
|
|
|
doLEVEL1 lda #$0000
|
|
stal $e19913
|
|
stal $e19914
|
|
|
|
sep #$20
|
|
|
|
lda strLEVEL+1
|
|
and #$0f
|
|
pha
|
|
lda strLEVEL
|
|
and #$0f
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
clc
|
|
adc 1,s
|
|
sta level
|
|
pla
|
|
|
|
lda level
|
|
cmp #130 ; 130d=82h
|
|
bcs doLEVEL3
|
|
|
|
ldx #0
|
|
]lp lda scdVAR,x
|
|
cmp level
|
|
beq doLEVEL2
|
|
inx
|
|
bne ]lp
|
|
ldx #1
|
|
doLEVEL2 stx level
|
|
|
|
lda level
|
|
cmp oldLEVEL
|
|
bne doLEVEL4
|
|
|
|
rep #$20
|
|
jsr putLEVEL
|
|
sec
|
|
rts
|
|
|
|
doLEVEL3 rep #$20
|
|
lda #1
|
|
sta level
|
|
sta oldLEVEL
|
|
jsr putLEVEL
|
|
clc
|
|
rts
|
|
|
|
doLEVEL4 rep #$20
|
|
lda level
|
|
sta oldLEVEL
|
|
jsr putLEVEL
|
|
clc
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
doHELP jsr moBACK
|
|
|
|
sei
|
|
lda zikPLAY
|
|
sta copyPLAY
|
|
stz zikPLAY
|
|
jsr shutMUSIC1
|
|
cli
|
|
|
|
lda ptrSCR
|
|
sta Debut
|
|
lda ptrSCR+2
|
|
sta Debut+2
|
|
|
|
ldx #0
|
|
]lp txy
|
|
ldal $e12000,x
|
|
sta [Debut],y
|
|
inx
|
|
inx
|
|
bpl ]lp
|
|
|
|
jsr fadeOUT
|
|
ldx ptrHELP1+2
|
|
ldy ptrHELP1
|
|
lda #-1
|
|
jsr fadeIN
|
|
jsr moFORE
|
|
|
|
lda #2
|
|
sta window
|
|
|
|
lda #-1
|
|
sta windowC
|
|
|
|
lda #"1"
|
|
sta theKEY
|
|
|
|
*---
|
|
|
|
doHELP1 sep #$20
|
|
ldal $e0c000
|
|
bpl doHELP2
|
|
stal $e0c010
|
|
cmp #$9b
|
|
beq doHELP3
|
|
|
|
doHELP2 rep #$20
|
|
|
|
jsr moREAD
|
|
jsr moCONTROL
|
|
bcs doHELP1
|
|
cpx #142*2
|
|
bne doHELP21
|
|
|
|
lda theKEY
|
|
cmp #"1"
|
|
bne doHELP21
|
|
|
|
*---
|
|
|
|
lda fgSND
|
|
beq doHELP21
|
|
lda fgAAHH
|
|
bne doHELP21
|
|
|
|
sei
|
|
lda ptrUNPACK
|
|
clc
|
|
adc #$8000
|
|
sta zikMUSIC
|
|
lda ptrUNPACK+2
|
|
adc #0
|
|
sta zikMUSIC+2
|
|
lda #$18
|
|
sta zikPAGE
|
|
|
|
jsr shutMUSIC2
|
|
|
|
lda #1
|
|
sta fgPAGE
|
|
sta zikPLAY
|
|
sta whichSND
|
|
|
|
lda #-1
|
|
sta windowC
|
|
|
|
brl doHELP1
|
|
|
|
*---
|
|
|
|
doHELP21 inc theKEY
|
|
|
|
lda theKEY
|
|
cmp #"7"
|
|
bne doHELP10
|
|
|
|
doHELP3 sep #$20
|
|
stal $e0c010
|
|
rep #$20
|
|
|
|
jsr moBACK
|
|
jsr fadeOUT
|
|
ldx ptrSCR+2
|
|
ldy ptrSCR
|
|
lda #-1
|
|
jsr fadeIN
|
|
jsr moFORE
|
|
|
|
*---
|
|
|
|
sei
|
|
|
|
lda ptrMUSIC
|
|
sta zikMUSIC
|
|
lda ptrMUSIC+2
|
|
sta zikMUSIC+2
|
|
lda #$373
|
|
sta zikPAGE
|
|
|
|
stz whichSND
|
|
lda copyPLAY
|
|
sta zikPLAY
|
|
beq doHELP31
|
|
|
|
jsr shutMUSIC2
|
|
|
|
*---
|
|
|
|
doHELP31 lda #-1
|
|
sta windowC
|
|
stz window
|
|
rts
|
|
|
|
*---
|
|
|
|
doHELP10 lda theKEY
|
|
cmp #"2"
|
|
bne doHELP11
|
|
ldx ptrHELP2+2
|
|
ldy ptrHELP2
|
|
bra doHELP20
|
|
|
|
doHELP11 cmp #"3"
|
|
bne doHELP12
|
|
ldx ptrHELP3+2
|
|
ldy ptrHELP3
|
|
bra doHELP20
|
|
|
|
doHELP12 cmp #"4"
|
|
bne doHELP13
|
|
ldx ptrHELP4+2
|
|
ldy ptrHELP4
|
|
bra doHELP20
|
|
|
|
doHELP13 cmp #"5"
|
|
bne doHELP14
|
|
ldx ptrHELP5+2
|
|
ldy ptrHELP5
|
|
bra doHELP20
|
|
|
|
doHELP14 ldx ptrHELP6+2
|
|
ldy ptrHELP6
|
|
|
|
doHELP20 stx temp+4
|
|
sty temp+6
|
|
jsr moBACK
|
|
jsr fadeOUT
|
|
ldx temp+4
|
|
ldy temp+6
|
|
lda #-1
|
|
jsr fadeIN
|
|
jsr moFORE
|
|
|
|
lda #-1
|
|
sta windowC
|
|
|
|
brl doHELP1
|
|
|
|
*--------------------------------------
|
|
|
|
doQUIT lda #1
|
|
sta window
|
|
lda #-1
|
|
sta windowC
|
|
jsr showMSG
|
|
|
|
doQUIT1 sep #$20
|
|
ldal $e0c000
|
|
bpl doQUIT2
|
|
stal $e0c010
|
|
cmp #$9b
|
|
bne doQUIT2
|
|
rep #$20
|
|
ldx #141*2
|
|
bra doQUIT3
|
|
|
|
doQUIT2 rep #$20
|
|
jsr moREAD
|
|
jsr moCONTROL
|
|
bcs doQUIT1
|
|
|
|
cpx #140*2
|
|
bne doQUIT3
|
|
|
|
stz window
|
|
lda #-1
|
|
sta windowC
|
|
jsr redrawMSG
|
|
clc
|
|
rts
|
|
|
|
doQUIT3 cpx #141*2
|
|
bne doQUIT1
|
|
|
|
stz window
|
|
lda #-1
|
|
sta windowC
|
|
jsr redrawMSG
|
|
sec
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
checkVALID cpy #1
|
|
beq checkVALID1
|
|
|
|
lda window2XY,x
|
|
pha
|
|
and #$ff
|
|
sta coorX
|
|
pla
|
|
xba
|
|
and #$ff
|
|
sta coorY
|
|
|
|
checkVALID1 lda coorX ; regarde si varX=1
|
|
ora currX
|
|
cmp #1
|
|
beq checkVALID2
|
|
cmp coorX
|
|
beq checkVALID2
|
|
|
|
lda coorY ; regarde si varY=1
|
|
ora currY
|
|
cmp #1
|
|
beq checkVALID2
|
|
cmp coorY
|
|
beq checkVALID2
|
|
sec
|
|
rts
|
|
|
|
checkVALID2 lda coorX
|
|
cmp currX
|
|
beq checkVALID4
|
|
ldy #1
|
|
lda coorY
|
|
cmp currY
|
|
bne checkVALID3
|
|
lda coorX
|
|
sec
|
|
sbc currX
|
|
cmp #1
|
|
beq checkVALID5
|
|
ldy #0
|
|
lda coorY
|
|
cmp currY
|
|
bne checkVALID3
|
|
lda currX
|
|
sec
|
|
sbc coorX
|
|
cmp #1
|
|
beq checkVALID5
|
|
checkVALID3 sec
|
|
rts
|
|
|
|
checkVALID4 lda coorY
|
|
cmp currY
|
|
beq checkVALID3
|
|
ldy #3
|
|
lda coorX
|
|
cmp currX
|
|
bne checkVALID3
|
|
lda coorY
|
|
sec
|
|
sbc currY
|
|
cmp #1
|
|
beq checkVALID5
|
|
ldy #2
|
|
lda coorX
|
|
cmp currX
|
|
bne checkVALID3
|
|
lda currY
|
|
sec
|
|
sbc coorY
|
|
cmp #1
|
|
beq checkVALID5
|
|
sec
|
|
rts
|
|
|
|
checkVALID5 sty theDIR
|
|
clc
|
|
rts
|
|
|
|
*--------------------------------------
|
|
* Routines souris
|
|
|
|
moREAD jsr moTOOL
|
|
|
|
sep #$20
|
|
ldal $e0c034
|
|
and #$f0
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
lda moX
|
|
cmp oldMOx
|
|
bne moREAD1
|
|
lda moY
|
|
cmp oldMOy
|
|
bne moREAD1
|
|
rts
|
|
|
|
moREAD1 jsr moBACK
|
|
ldx moX
|
|
stx oldMOx
|
|
ldy moY
|
|
sty oldMOy
|
|
jsr moFORE
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
moCONTROL lda window
|
|
asl
|
|
tax
|
|
lda windowS+2,x
|
|
asl
|
|
pha
|
|
lda windowS,x
|
|
asl
|
|
tax
|
|
|
|
moCONTROL1 lda moX
|
|
cmp windowL,x
|
|
bcc moCONTROL2
|
|
cmp windowR,x
|
|
bcs moCONTROL2
|
|
|
|
lda moY
|
|
cmp windowU,x
|
|
bcc moCONTROL2
|
|
cmp windowD,x
|
|
bcc moCONTROL3
|
|
|
|
moCONTROL2 inx
|
|
inx
|
|
txa
|
|
cmp 1,s
|
|
bcc moCONTROL1
|
|
ldx #-1
|
|
|
|
moCONTROL3 pla
|
|
|
|
lda moBTN0
|
|
and #%00000000_11000000
|
|
cmp #%00000000_01000000
|
|
beq moCONTROL10
|
|
cmp #%00000000_10000000
|
|
beq moCONTROL20
|
|
cmp #%00000000_11000000
|
|
bne moCONTROL4
|
|
brl moCONTROL30
|
|
moCONTROL4 sec
|
|
rts
|
|
|
|
*- is up, was down
|
|
|
|
moCONTROL10 cpx #-1
|
|
bne moCONTROL12
|
|
ldx windowC
|
|
lda windowFLG,x
|
|
and #%00000000_00000010
|
|
bne moCONTROL11
|
|
lda windowFLG,x
|
|
and #%00000000_00000001
|
|
beq moCONTROL11
|
|
lda windowFLG,x
|
|
and #%11111111_11111110
|
|
sta windowFLG,x
|
|
ldy #0
|
|
jsr inverseIT
|
|
moCONTROL11 sec ; not same control
|
|
rts
|
|
moCONTROL12 cpx windowC
|
|
bne moCONTROL11
|
|
lda windowFLG,x
|
|
and #%00000000_00000010
|
|
bne moCONTROL11
|
|
lda windowFLG,x
|
|
and #%00000000_00000001
|
|
beq moCONTROL13
|
|
lda windowFLG,x
|
|
and #%11111111_11111110
|
|
sta windowFLG,x
|
|
ldy #0
|
|
jsr inverseIT
|
|
moCONTROL13 clc ; same control
|
|
rts
|
|
|
|
*- is down, was up
|
|
|
|
moCONTROL20 cpx #-1
|
|
beq moCONTROL21
|
|
lda windowFLG,x
|
|
and #%00000000_00000010
|
|
bne moCONTROL21
|
|
stx windowC
|
|
lda windowFLG,x
|
|
and #%00000000_00000001
|
|
bne moCONTROL21
|
|
lda windowFLG,x
|
|
and #%11111111_11111110
|
|
ora #%00000000_00000001
|
|
sta windowFLG,x
|
|
ldy #1
|
|
jsr inverseIT
|
|
moCONTROL21 sec ; set new control
|
|
rts
|
|
|
|
*- is down, was down
|
|
|
|
moCONTROL30 cpx windowC
|
|
beq moCONTROL32
|
|
ldx windowC
|
|
cpx #-1
|
|
beq moCONTROL31
|
|
lda windowFLG,x
|
|
and #%00000000_00000010
|
|
bne moCONTROL31
|
|
lda windowFLG,x
|
|
and #%00000000_00000001
|
|
beq moCONTROL31
|
|
lda windowFLG,x
|
|
and #%11111111_11111110
|
|
sta windowFLG,x
|
|
ldy #0
|
|
jsr inverseIT
|
|
moCONTROL31 sec ; no more on control
|
|
rts
|
|
|
|
moCONTROL32 cpx #-1
|
|
beq moCONTROL33
|
|
lda windowFLG,x
|
|
and #%00000000_00000010
|
|
bne moCONTROL33
|
|
lda windowFLG,x
|
|
and #%00000000_00000001
|
|
bne moCONTROL33
|
|
lda windowFLG,x
|
|
and #%11111111_11111110
|
|
ora #%00000000_00000001
|
|
sta windowFLG,x
|
|
ldy #1
|
|
jsr inverseIT
|
|
moCONTROL33 sec ; same control
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
moTOOL ldal $e0c026
|
|
bpl moTOOL1
|
|
and #%00000010_00000000
|
|
beq moTOOL2
|
|
ldal $e0c024
|
|
moTOOL1 rts
|
|
|
|
moTOOL2 ldal $e0c024
|
|
tax
|
|
and #%00000000_10000000
|
|
eor #%00000000_10000000
|
|
lsr moBTN1
|
|
eor moBTN1
|
|
and #%00000000_11000000
|
|
sta moBTN1
|
|
|
|
ldal $e0c024
|
|
tay
|
|
and #%00000000_10000000
|
|
eor #%00000000_10000000
|
|
lsr moBTN0
|
|
eor moBTN0
|
|
and #%00000000_11000000
|
|
sta moBTN0
|
|
|
|
*- Occupe toi de X
|
|
|
|
txa
|
|
and #%00000000_00111111
|
|
pha
|
|
txa
|
|
and #%00000000_01000000
|
|
beq moTOOL3
|
|
|
|
lda moX
|
|
clc
|
|
adc 1,s
|
|
sec
|
|
sbc #64
|
|
bcc moTOOL4
|
|
sta moX
|
|
bra moTOOL4
|
|
|
|
moTOOL3 lda moX
|
|
clc
|
|
adc 1,s
|
|
cmp #maximumX
|
|
bcs moTOOL4
|
|
sta moX
|
|
|
|
*- Occupe toi de Y
|
|
|
|
moTOOL4 pla ; Recupere la pile
|
|
|
|
tya
|
|
and #%00000000_00111111
|
|
pha
|
|
tya
|
|
and #%00000000_01000000
|
|
beq moTOOL6
|
|
|
|
lda moY
|
|
clc
|
|
adc 1,s
|
|
sec
|
|
sbc #64
|
|
bcc moTOOL5
|
|
sta moY
|
|
moTOOL5 pla
|
|
rts
|
|
|
|
moTOOL6 lda moY
|
|
clc
|
|
adc 1,s
|
|
cmp #maximumY
|
|
bcs moTOOL7
|
|
sta moY
|
|
moTOOL7 pla
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
moBACK lda oldMOx
|
|
lsr
|
|
pha
|
|
|
|
lda oldMOy
|
|
asl
|
|
tay
|
|
lda Ligne,y
|
|
clc
|
|
adc 1,s
|
|
tax
|
|
|
|
ldy #0
|
|
|
|
moBACK1 lda moDATA,y
|
|
stal $e12000,x
|
|
lda moDATA+2,y
|
|
stal $e12002,x
|
|
lda moDATA+4,y
|
|
stal $e12004,x
|
|
|
|
txa
|
|
clc
|
|
adc #160
|
|
tax
|
|
cpx #$7d00
|
|
bcs moBACK2
|
|
iny
|
|
iny
|
|
iny
|
|
iny
|
|
iny
|
|
iny
|
|
cpy #36
|
|
bne moBACK1
|
|
|
|
moBACK2 pla
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
moFORE lda #moDATA
|
|
sta moFORE3+1
|
|
sta moFORE4+1
|
|
sta moFORE5+1
|
|
ldy #0
|
|
ldx #36
|
|
|
|
lda moX
|
|
lsr
|
|
pha
|
|
bcc moFORE1
|
|
|
|
lda #moDATA
|
|
sec
|
|
sbc #36
|
|
sta moFORE3+1
|
|
sta moFORE4+1
|
|
sta moFORE5+1
|
|
ldy #36
|
|
ldx #72
|
|
|
|
moFORE1 stx moFORE6+1
|
|
|
|
lda moY
|
|
asl
|
|
tax
|
|
lda Ligne,x
|
|
clc
|
|
adc 1,s
|
|
tax
|
|
|
|
moFORE2 ldal $e12000,x
|
|
moFORE3 sta moDATA,y
|
|
and moMASK,y
|
|
ora moSPRI,y
|
|
stal $e12000,x
|
|
|
|
iny
|
|
iny
|
|
ldal $e12002,x
|
|
moFORE4 sta moDATA,y
|
|
and moMASK,y
|
|
ora moSPRI,y
|
|
stal $e12002,x
|
|
|
|
iny
|
|
iny
|
|
ldal $e12004,x
|
|
moFORE5 sta moDATA,y
|
|
and moMASK,y
|
|
ora moSPRI,y
|
|
stal $e12004,x
|
|
|
|
txa
|
|
clc
|
|
adc #160
|
|
tax
|
|
cpx #$7d00
|
|
bcs moFORE7
|
|
|
|
iny
|
|
iny
|
|
moFORE6 cpy #-1
|
|
bne moFORE2
|
|
|
|
moFORE7 pla
|
|
rts
|
|
|
|
*--------------------------------------
|
|
|
|
inverseIT cpx #144*2
|
|
bcs inverseIT0
|
|
|
|
lda windowFLG,x
|
|
and #%00000000_00000100
|
|
beq inverseIT1
|
|
inverseIT0 rts
|
|
|
|
inverseIT1 phx
|
|
|
|
txa
|
|
sec
|
|
sbc #135*2
|
|
tax
|
|
|
|
cpy #1
|
|
beq inverseIT2
|
|
|
|
lda windowNOR,x
|
|
bra inverseIT3
|
|
|
|
inverseIT2 lda windowINV,x
|
|
|
|
inverseIT3 clc
|
|
adc ptrSPRITE
|
|
sta Debut
|
|
lda ptrSPRITE+2
|
|
adc #0
|
|
sta Debut+2
|
|
|
|
lda windowSCR,x
|
|
clc
|
|
adc #$2000
|
|
sta Arrivee
|
|
lda #$00e1
|
|
sta Arrivee+2
|
|
|
|
lda windowLR,x
|
|
lsr
|
|
sta temp
|
|
|
|
lda windowUP,x
|
|
sta temp+2
|
|
|
|
jsr moBACK ; restore background
|
|
|
|
inverseIT5 ldy #0
|
|
sep #$20
|
|
]lp lda [Debut],y
|
|
sta [Arrivee],y
|
|
iny
|
|
cpy temp
|
|
bne ]lp
|
|
rep #$20
|
|
|
|
lda Debut
|
|
clc
|
|
adc #160
|
|
sta Debut
|
|
|
|
lda Arrivee
|
|
clc
|
|
adc #160
|
|
sta Arrivee
|
|
cmp #$9d00
|
|
bcs inverseIT6
|
|
|
|
dec temp+2
|
|
lda temp+2
|
|
bpl inverseIT5
|
|
|
|
inverseIT6 jsr moFORE ; show cursor
|
|
plx ; pull X from stack
|
|
|
|
rts
|
|
|
|
*--------------------------------------
|
|
* Fenetres
|
|
|
|
showMSG lda ptrSPRITE+1
|
|
sta showMSG3+2
|
|
|
|
lda adrMSG ; adresse source
|
|
clc
|
|
adc ptrSPRITE
|
|
sta showMSG3+1
|
|
|
|
lda adrMSGscr ; adresse ecran
|
|
sta showMSG2+1
|
|
sta showMSG4+1
|
|
|
|
lda adrMSGx ; nombre de points
|
|
lsr
|
|
sta temp
|
|
lda adrMSGy ; nombre de lignes
|
|
sta temp+2
|
|
|
|
lda ptrUNPACK
|
|
sta Debut
|
|
lda ptrUNPACK+2
|
|
sta Debut+2
|
|
|
|
jsr moBACK
|
|
|
|
ldy #0
|
|
showMSG1 ldx #0
|
|
sep #$20
|
|
showMSG2 ldal $e12000,x
|
|
sta [Debut],y
|
|
showMSG3 ldal $e12000,x
|
|
showMSG4 stal $e12000,x
|
|
iny
|
|
inx
|
|
cpx temp
|
|
bcc showMSG2
|
|
rep #$20
|
|
|
|
lda showMSG3+1
|
|
clc
|
|
adc #160
|
|
sta showMSG3+1
|
|
lda showMSG3+2
|
|
adc #0
|
|
sta showMSG3+2
|
|
|
|
lda showMSG2+1
|
|
clc
|
|
adc #160
|
|
sta showMSG2+1
|
|
sta showMSG4+1
|
|
cmp #$9d00
|
|
bcs showMSG5
|
|
|
|
dec temp+2
|
|
lda temp+2
|
|
bpl showMSG1
|
|
|
|
showMSG5 jsr moFORE
|
|
|
|
rts
|
|
|
|
*-------------------------- Redraw Fenetre
|
|
|
|
redrawMSG lda adrMSGscr ; adresse ecran
|
|
sta redrawMSG3+1
|
|
|
|
lda adrMSGx ; nombre de points
|
|
lsr
|
|
sta temp
|
|
lda adrMSGy ; nombre de lignes
|
|
sta temp+2
|
|
|
|
lda ptrUNPACK
|
|
sta Debut
|
|
lda ptrUNPACK+2
|
|
sta Debut+2
|
|
|
|
jsr moBACK
|
|
|
|
ldy #0
|
|
redrawMSG1 ldx #0
|
|
sep #$20
|
|
redrawMSG2 lda [Debut],y
|
|
redrawMSG3 stal $e12000,x
|
|
iny
|
|
inx
|
|
cpx temp
|
|
bcc redrawMSG2
|
|
rep #$20
|
|
|
|
lda redrawMSG3+1
|
|
clc
|
|
adc #160
|
|
sta redrawMSG3+1
|
|
cmp #$9d00
|
|
bcs redrawMSG4
|
|
|
|
dec temp+2
|
|
lda temp+2
|
|
bpl redrawMSG1
|
|
|
|
redrawMSG4 jsr moFORE
|
|
|
|
rts
|
|
|
|
*--- Donnes fenetres
|
|
|
|
window ds 2 ; numero de la fenetre active
|
|
windowC dw -1 ; numero du controle actif
|
|
windowS dw 0 ; debut des boutons de la fenetre
|
|
dw 140
|
|
dw 142
|
|
dw 144
|
|
|
|
windowL dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 5,25,45,65,85,105,125,145,165,185,205,225,245,265,285
|
|
dw 6,178,245,266,282
|
|
dw 126,144
|
|
dw 30,0
|
|
|
|
windowR dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 24,44,64,84,104,124,144,164,184,204,224,244,264,284,304
|
|
dw 39,236,260,274,313
|
|
dw 193,175
|
|
dw 46,319
|
|
|
|
windowU dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
dw 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20
|
|
dw 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40
|
|
dw 60,60,60,60,60,60,60,60,60,60,60,60,60,60,60
|
|
dw 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80
|
|
dw 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100
|
|
dw 120,120,120,120,120,120,120,120,120,120,120,120,120,120,120
|
|
dw 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140
|
|
dw 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160
|
|
dw 185,187,185,185,185
|
|
dw 89,105
|
|
dw 77,0
|
|
|
|
windowD dw 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19
|
|
dw 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39
|
|
dw 59,59,59,59,59,59,59,59,59,59,59,59,59,59,59
|
|
dw 79,79,79,79,79,79,79,79,79,79,79,79,79,79,79
|
|
dw 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99
|
|
dw 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119
|
|
dw 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139
|
|
dw 159,159,159,159,159,159,159,159,159,159,159,159,159,159,159
|
|
dw 179,179,179,179,179,179,179,179,179,179,179,179,179,179,179
|
|
dw 195,193,195,195,195
|
|
dw 99,115
|
|
dw 88,199
|
|
|
|
*--- Flags des fenetres
|
|
* bit 0: windowFLG (old windowA) -> 0
|
|
* bit 1: windowTGT (can't be target if 1) -> 2
|
|
* bit 2: windowREF (can't refresh if 1) -> 4
|
|
|
|
windowFLG dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
|
dw 0,0,0,0,0
|
|
dw 0,0
|
|
dw 4,4
|
|
|
|
*---
|
|
|
|
window2XY dw $000,$001,$002,$003,$004,$005,$006,$007,$008,$009,$00a,$00b,$00c,$00d,$00e
|
|
dw $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e
|
|
dw $200,$201,$202,$203,$204,$205,$206,$207,$208,$209,$20a,$20b,$20c,$20d,$20e
|
|
dw $300,$301,$302,$303,$304,$305,$306,$307,$308,$309,$30a,$30b,$30c,$30d,$30e
|
|
dw $400,$401,$402,$403,$404,$405,$406,$407,$408,$409,$40a,$40b,$40c,$40d,$40e
|
|
dw $500,$501,$502,$503,$504,$505,$506,$507,$508,$509,$50a,$50b,$50c,$50d,$50e
|
|
dw $600,$601,$602,$603,$604,$605,$606,$607,$608,$609,$60a,$60b,$60c,$60d,$60e
|
|
dw $700,$701,$702,$703,$704,$705,$706,$707,$708,$709,$70a,$70b,$70c,$70d,$70e
|
|
dw $800,$801,$802,$803,$804,$805,$806,$807,$808,$809,$80a,$80b,$80c,$80d,$80e
|
|
|
|
coorX ds 2
|
|
coorY ds 2
|
|
|
|
*---
|
|
|
|
windowNOR dw $73a3,$75d9,$741a,$7425,$742d
|
|
dw $24ef,$2ef8
|
|
windowINV dw $6874,$6c47,$68a7,$68b9,$68d1
|
|
dw $608c,$6054
|
|
windowSCR dw $73a3,$75d9,$741a,$7425,$742d
|
|
dw $37df,$41e8
|
|
windowLR dw 34,40,18,10,32
|
|
dw 70,34
|
|
windowUP dw 10,4,10,10,10
|
|
dw 10,10
|
|
|
|
*--- Adresses des fenetres
|
|
|
|
adrMSG dw $1cc0 ; adresse source
|
|
adrMSGscr dw $4fb0 ; adresse ecran
|
|
adrMSGx dw 128 ; nombre de colonnes
|
|
adrMSGy dw 94-46 ; nombre de lignes
|
|
|
|
*--- Datas souris
|
|
|
|
moX ds 2 ; coordonnee X
|
|
moY ds 2 ; coordonnee Y
|
|
moBTN0 ds 2 ; bouton 0
|
|
moBTN1 ds 2 ; bouton 1
|
|
oldMOx ds 2 ; ancienne coordonnee X
|
|
oldMOy ds 2 ; ancienne coordonnee Y
|
|
|
|
moDATA ds 36 ; buffer du fond de l'image
|
|
|
|
moSPRI hex FFFFFFFF0000 ; sprite pointeur pair
|
|
hex 0F00000F0000
|
|
hex 00F000F00000
|
|
hex 000F00F00000
|
|
hex 0000FF000000
|
|
hex 00000F000000
|
|
|
|
hex 0FFFFFFFF000 ; sprite pointeur impair
|
|
hex 00F00000F000
|
|
hex 000F000F0000
|
|
hex 0000F00F0000
|
|
hex 00000FF00000
|
|
hex 000000F00000
|
|
|
|
moMASK hex 00000000FFFF ; mask pointeur pair
|
|
hex F0000000FFFF
|
|
hex FF00000FFFFF
|
|
hex FFF0000FFFFF
|
|
hex FFFF00FFFFFF
|
|
hex FFFFF0FFFFFF
|
|
|
|
hex F00000000FFF ; mask pointeur impair
|
|
hex FF0000000FFF
|
|
hex FFF00000FFFF
|
|
hex FFFF0000FFFF
|
|
hex FFFFF00FFFFF
|
|
hex FFFFFF0FFFFF
|