mirror of
https://github.com/antoinevignau/source.git
synced 2024-12-29 11:30:55 +00:00
256a862d79
Antoine's source code of Canal Meurtre
1559 lines
22 KiB
ArmAsm
1559 lines
22 KiB
ArmAsm
*
|
|
* Canal Meurtre (FR)
|
|
*
|
|
* (c) 1986, Froggy Software
|
|
* (c) 2022, Antoine Vignau & Olivier Zardini
|
|
*
|
|
|
|
lst off
|
|
rel
|
|
dsk CanalMeurtre.l
|
|
|
|
mx %00
|
|
xc
|
|
xc
|
|
|
|
*----------------------------------- Macros
|
|
|
|
use 4/Ctl.Macs
|
|
use 4/Desk.Macs
|
|
use 4/Event.Macs
|
|
use 4/Font.Macs
|
|
use 4/Int.Macs
|
|
use 4/Line.Macs
|
|
use 4/Locator.Macs
|
|
use 4/Mem.Macs
|
|
use 4/Menu.Macs
|
|
use 4/MIDISyn.Macs
|
|
use 4/Misc.Macs
|
|
use 4/Print.Macs
|
|
use 4/Qd.Macs
|
|
use 4/QdAux.Macs
|
|
use 4/Resource.Macs
|
|
use 4/Scrap.Macs
|
|
use 4/Sound.Macs
|
|
use 4/Std.Macs
|
|
use 4/TextEdit.Macs
|
|
use 4/Util.Macs
|
|
use 4/Window.Macs
|
|
|
|
*-----------------------
|
|
* macros
|
|
*-----------------------
|
|
|
|
@val mac
|
|
PushWord ]2
|
|
PushWord ]1
|
|
jsr val
|
|
eom
|
|
|
|
@left mac
|
|
PushWord ]3
|
|
PushWord ]2
|
|
PushWord ]1
|
|
jsr left
|
|
eom
|
|
|
|
@charcmp mac
|
|
PushWord #]2
|
|
PushWord #]1
|
|
jsr charcmp
|
|
eom
|
|
|
|
@copystring mac
|
|
PushWord #]3
|
|
PushWord #]2
|
|
PushWord #]1
|
|
jsr copy_string
|
|
eom
|
|
|
|
@instr mac
|
|
PushWord #]3
|
|
PushWord #]2
|
|
PushWord #]1
|
|
jsr instr
|
|
eom
|
|
|
|
*----------------------------------- Constantes
|
|
|
|
*-------------- Softswitches
|
|
|
|
KBD = $e0c000
|
|
KBDSTROBE = $e0c010
|
|
RDVBLBAR = $e0c019
|
|
GSOS = $e100a8
|
|
|
|
*-------------- GUI
|
|
|
|
wMAIN = 1
|
|
alertQUIT = $0100
|
|
alertRESTART = $0200
|
|
|
|
refIsPointer = $0
|
|
refIsHandle = $1
|
|
refIsResource = $2
|
|
|
|
appleKey = $0100
|
|
mouseUpEvt = $0002
|
|
keyDownEvt = $0003
|
|
|
|
*--------------
|
|
|
|
dpFROM = $80
|
|
dpTO = dpFROM+4
|
|
|
|
dpFICHES = $90 ; pointeur vers NEWTV.BASE
|
|
dpENTREE = dpFICHES+4 ; pointeur vers une fiche
|
|
|
|
Debut = $a0
|
|
Arrivee = Debut+4
|
|
Second = Arrivee+4
|
|
|
|
*---
|
|
|
|
TRUE = 1
|
|
FALSE = 0
|
|
|
|
*----------------------------------- Entry point
|
|
|
|
phk
|
|
plb
|
|
|
|
_TLStartUp
|
|
pha
|
|
_MMStartUp
|
|
pla
|
|
sta myID
|
|
|
|
tdc
|
|
sta myDP
|
|
|
|
*--- Version du systeme
|
|
|
|
jsl GSOS
|
|
dw $202a
|
|
adrl proVERS
|
|
|
|
lda proVERS+2
|
|
and #%01111111_11111111
|
|
cmp #$0402
|
|
bcs okVERS
|
|
|
|
pha
|
|
PushLong #verSTR1
|
|
PushLong #verSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT1
|
|
|
|
*--- 64K pour les images des scènes
|
|
|
|
okVERS jsr make64KB
|
|
bcc okMEM1
|
|
|
|
koMEM pha
|
|
PushLong #memSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT1
|
|
|
|
okMEM1
|
|
sty ptrIMAGE ; set pointer to show_cartouche
|
|
sty ptrToSourceLocInfo2+2
|
|
stx ptrIMAGE+2
|
|
stx ptrToSourceLocInfo2+4
|
|
|
|
*--- 64K pour la sauvegarde de l'écran
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sep #$10 ; save pointer+2
|
|
stx saveBACK1+3 ; for interactions
|
|
stx loadBACK1+3 ; with the toolbox
|
|
rep #$10
|
|
|
|
*--- 64K pour les images compressees
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sty ptrUNPACK
|
|
stx ptrUNPACK+2
|
|
|
|
*--- 64K pour les décors
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sty ptrDECORB
|
|
stx ptrDECORB+2
|
|
stx ptrDECORN+2
|
|
|
|
*--- 64K pour les NEWTV.BASE
|
|
|
|
jsr make64KB
|
|
bcs koMEM
|
|
|
|
sty ptrFICHES
|
|
stx ptrFICHES+2
|
|
|
|
*--- Chargement des outils
|
|
|
|
pha
|
|
pha
|
|
PushWord myID
|
|
PushWord #refIsResource
|
|
PushLong #1
|
|
_StartUpTools
|
|
PullLong SStopREC
|
|
bcc okTOOL
|
|
|
|
pha
|
|
PushLong #tolSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT0
|
|
|
|
*--- Et la musique...
|
|
|
|
okTOOL
|
|
_InitCursor
|
|
|
|
jsr set_texte ; set text language
|
|
|
|
*--- Nettoie le cache de l'Event Manager
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushWord #0
|
|
_FlushEvents
|
|
pla
|
|
|
|
*--- On continue...
|
|
|
|
jsr initMIDI
|
|
jsr randomMIDI ; select a sequence 0-7
|
|
jsr TWILIGHToff
|
|
|
|
*--- Et la bordure...
|
|
|
|
PushWord #0
|
|
PushWord #$1c
|
|
_ReadBParam
|
|
pla
|
|
sta saveBORDER
|
|
|
|
PushWord #0
|
|
PushWord #$1c
|
|
_WriteBParam
|
|
|
|
sep #$20 ; black border
|
|
ldal $e0c034
|
|
and #$f0
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
PushLong #sourcePAT
|
|
_GetPenPat
|
|
|
|
PushLong #thePATTERN
|
|
_SetPenPat
|
|
|
|
*--- Charge et décompresse les décors
|
|
|
|
lda #pDECORB
|
|
ldx ptrUNPACK+2
|
|
ldy ptrUNPACK
|
|
jsr loadFILE
|
|
bcc decor_ok
|
|
|
|
decor_ko
|
|
pha
|
|
PushLong #filSTR1
|
|
PushLong #errSTR2
|
|
PushLong #errSTR1
|
|
PushLong #errSTR2
|
|
_TLTextMountVolume
|
|
pla
|
|
brl meQUIT
|
|
|
|
decor_ok
|
|
ldx ptrDECORB+2
|
|
ldy ptrDECORB
|
|
jsr unpackAPF
|
|
|
|
lda #pDECORN
|
|
ldx ptrUNPACK+2
|
|
ldy ptrUNPACK
|
|
jsr loadFILE
|
|
bcs decor_ko
|
|
|
|
ldx ptrDECORN+2
|
|
ldy ptrDECORN
|
|
jsr unpackAPF
|
|
|
|
*--- Charge les textes
|
|
|
|
jsr load_fiche ; exit if error
|
|
jsr init_fiche
|
|
jsr load_font
|
|
jsr initialisation
|
|
|
|
jsr doSOUNDON ; midi on
|
|
|
|
*----------------------------------------
|
|
* INITIALISATIONS
|
|
*----------------------------------------
|
|
|
|
memOK
|
|
pha
|
|
pha
|
|
PushLong #0
|
|
PushLong #wMAIN
|
|
PushLong #PAINTMAIN
|
|
PushLong #0
|
|
PushWord #refIsResource
|
|
PushLong #wMAIN
|
|
PushWord #$800e
|
|
_NewWindow2
|
|
PullLong wiMAIN
|
|
|
|
ldx ptrDECORB+2
|
|
ldy ptrDECORB
|
|
jsr show_picture
|
|
|
|
*----------------------------------------
|
|
* TASK MASTER
|
|
*----------------------------------------
|
|
|
|
taskLOOP
|
|
PushWord #0
|
|
PushWord #0
|
|
PushWord #$c000
|
|
PushWord #0
|
|
_HandleDiskInsert
|
|
pla
|
|
pla
|
|
|
|
inc VBLCounter0
|
|
|
|
jsr checkREPLAY ; midi replay
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushLong #taskREC
|
|
_TaskMaster
|
|
pla
|
|
beq taskLOOP
|
|
|
|
asl
|
|
tax
|
|
jsr (taskTBL,x)
|
|
bra taskLOOP
|
|
|
|
*----------------------------------- Gestion du keyDown
|
|
* on gère les open-apple-qqch
|
|
|
|
doKEYDOWN
|
|
lda taskMODIFIERS
|
|
and #appleKey
|
|
cmp #appleKey
|
|
beq doOPENAPPLE
|
|
rts
|
|
|
|
*--- gère les open-apple-qqch
|
|
|
|
doOPENAPPLE
|
|
ldx #-1
|
|
sep #$20
|
|
]lp inx
|
|
lda tblKEYVALUE,x ; get key
|
|
cmp #$ff ; end of table
|
|
beq doOPENAPPLE99 ; so exit
|
|
cmp taskMESSAGE ; same as pressed key?
|
|
bne ]lp ; no, loop
|
|
|
|
rep #$20
|
|
txa
|
|
asl
|
|
tax
|
|
jmp (tblKEYADDRESS,x)
|
|
|
|
doOPENAPPLE99
|
|
doNOT
|
|
rep #$20
|
|
rts
|
|
|
|
*---
|
|
|
|
tblKEYVALUE
|
|
asc 'QqOoSs'
|
|
asc 'Rr'
|
|
asc 'Zz'
|
|
hex ff
|
|
|
|
tblKEYADDRESS
|
|
da doQUIT,doQUIT,doLOAD,doLOAD,doSAVE,doSAVE
|
|
da doRESTART,doRESTART
|
|
da doMUSIK,doMUSIK
|
|
|
|
*----------------------------------- Gestion des contrôles (ça veut dire boutons ou lineedit)
|
|
|
|
doCONTROL
|
|
lda taskREC+38
|
|
cmp #6
|
|
bcc doBOUTON
|
|
bne doOK
|
|
rts ; c'est le line edit, on ne fait rien
|
|
|
|
*--- Le bouton OK est l'ID 7
|
|
|
|
doOK
|
|
jmp gosub43
|
|
|
|
*--- Les boutons de 1 à 5 (routines TO, 55)
|
|
|
|
doBOUTON
|
|
@charcmp #T2;#'R'
|
|
bne ctl_notR
|
|
|
|
gosub49
|
|
pea $0004 ; nombre de caractères
|
|
lda taskREC+38 ; gère le choix de la REPONSE
|
|
dec
|
|
asl
|
|
tax
|
|
lda tblREP,x
|
|
pha
|
|
jsr val
|
|
sta P
|
|
jmp print_fiche
|
|
|
|
tblREP da C2_5,C2_7,C2_9,C2_11,C2_13
|
|
|
|
ctl_notR
|
|
@charcmp #T2;#'M'
|
|
bne ctl_notM
|
|
|
|
gosub39
|
|
@val #C2_5;#4 ; gère le choix du MESSAGE (tjs le premier)
|
|
sta P
|
|
jmp print_fiche
|
|
|
|
ctl_notM
|
|
@charcmp #T2;#'C'
|
|
bne ctl_notC
|
|
|
|
jmp gosub31
|
|
|
|
ctl_notC
|
|
@charcmp #T2;#'D'
|
|
bne ctl_notD
|
|
|
|
jmp gosub43
|
|
|
|
ctl_notD ; do nada
|
|
rts
|
|
|
|
*--- Gestion des choix possibles (c'est aléatoire)
|
|
|
|
gosub31
|
|
jsr Random
|
|
and #3 ; 0..1..2..3
|
|
inc ; 1..2..3..4
|
|
sta H
|
|
|
|
@val #C2_5;#4
|
|
cmp H
|
|
beq goto37 ; <=
|
|
bcs goto18 ; >
|
|
|
|
goto37
|
|
@val #C2_9;#4
|
|
sta P
|
|
|
|
@copystring #C5;#C2_10;#40
|
|
jsr gosub3
|
|
jmp print_fiche
|
|
|
|
goto18
|
|
@val #C2_7;#4
|
|
sta P
|
|
|
|
@copystring #C5;#C2_8;#40
|
|
jsr gosub3
|
|
jmp print_fiche
|
|
|
|
*--- Gestion de l'edit line saisi (il faut comparer les chaînes)
|
|
|
|
gosub43
|
|
PushLong wiMAIN
|
|
PushLong #6
|
|
PushLong #R0
|
|
_GetLETextByID
|
|
|
|
lda R0 ; longueur de chaîne
|
|
and #$ff
|
|
sta L3
|
|
beq gosub43_1 ; un p'tit string
|
|
|
|
jsr upperCASE ; mets la chaîne en MAJUSCULES STP
|
|
|
|
@val #C2_1;#2 ; entree max
|
|
sta C
|
|
|
|
lda #3-1 ; compare les chaînes
|
|
]lp pha
|
|
asl
|
|
tax
|
|
PushWord L3
|
|
lda ptrTEXT,x
|
|
pha
|
|
PushWord #R1
|
|
jsr strcmp
|
|
beq gosub43_2 ; même chaîne
|
|
|
|
pla
|
|
inc
|
|
cmp C
|
|
bcc ]lp
|
|
* beq ]lp
|
|
|
|
* on n'a pas trouvé de correspondance
|
|
|
|
gosub43_1
|
|
|
|
@copystring #C5;#C2_8;#40
|
|
jsr gosub3
|
|
@val #C2_7;#4
|
|
sta P
|
|
jmp print_fiche
|
|
|
|
*--- on a trouvé une correspondance
|
|
|
|
gosub43_2
|
|
pla
|
|
@val #C2_9;#4
|
|
sta P
|
|
jmp print_fiche
|
|
|
|
*----------------------------------- UPPERcase
|
|
|
|
upperCASE
|
|
sep #$30
|
|
|
|
ldy #0
|
|
]lp ldx R1,y
|
|
lda tblUPPER,x
|
|
sta R1,y
|
|
iny
|
|
cpy R0
|
|
bcc ]lp
|
|
* beq ]lp
|
|
|
|
rep #$30
|
|
rts
|
|
|
|
tblUPPER
|
|
hex 000102030405060708090A0B0C0D0E0F
|
|
hex 101112131415161718191A1B1C1D1E1F
|
|
hex 202122232425262728292A2B2C2D2E2F
|
|
hex 303132333435363738393A3B3C3D3E3F
|
|
hex 404142434445464748494A4B4C4D4E4F
|
|
hex 505152535455565758595A5B5C5D5E5F
|
|
hex 604142434445464748494A4B4C4D4E4F ; a-z => A-Z
|
|
hex 505152535455565758595A7B7C7D7E7F
|
|
hex 808182838485868788898A8B8C8D8E8F
|
|
hex 909192939495969798999A9B9C9D9E9F
|
|
hex A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
|
|
hex B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF
|
|
hex C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF
|
|
hex D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF
|
|
hex E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
|
|
hex F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
|
|
|
|
*----------------------------------- Gestion du mouseUp
|
|
* on compare les coordonnées avec celles du incontent
|
|
* si dans le même rectangle, on traite
|
|
|
|
doMOUSEUP
|
|
jsr check_boutonstv ; vérifie les boutons de la télévision
|
|
bcs doMOUSEUP1 ; not handled, others are controls
|
|
jmp handle_boutonstv ; handle it, please
|
|
doMOUSEUP1
|
|
rts
|
|
|
|
*----------------------------
|
|
* TWILIGHToff
|
|
* Turns Twilight II off
|
|
*
|
|
* Entry:
|
|
* n/a
|
|
*
|
|
* Exit:
|
|
* n/a
|
|
*
|
|
*----------------------------
|
|
|
|
*Debut = $00
|
|
*Arrivee = Debut+4
|
|
|
|
lenV1 = $49bf
|
|
lenV2 = $539a
|
|
|
|
offV1 = $117a
|
|
offV2 = $154c
|
|
|
|
TWILIGHToff
|
|
phd
|
|
lda myDP
|
|
tcd
|
|
|
|
ldal $e11600
|
|
sta Debut
|
|
ldal $e11602
|
|
sta Debut+2
|
|
|
|
TWILIGHToff1
|
|
ldy #8
|
|
lda [Debut],y
|
|
ldx #offV1
|
|
cmp #lenV1
|
|
beq TWILIGHToff2
|
|
ldx #offV2
|
|
cmp #lenV2
|
|
bne TWILIGHToff3
|
|
|
|
TWILIGHToff2
|
|
stx offTWILIGHT
|
|
|
|
lda [Debut]
|
|
sta Arrivee
|
|
sta ptrTWILIGHT
|
|
ldy #2
|
|
lda [Debut],y
|
|
sta Arrivee+2
|
|
sta ptrTWILIGHT+2
|
|
|
|
txy
|
|
lda [Arrivee],y
|
|
cmp #$0ef0
|
|
bne TWILIGHToff3
|
|
lda #$0e80
|
|
sta [Arrivee],y
|
|
inc fgTWILIGHT
|
|
pld
|
|
rts
|
|
|
|
TWILIGHToff3
|
|
ldy #16
|
|
lda [Debut],y
|
|
tax
|
|
iny
|
|
iny
|
|
lda [Debut],y
|
|
sta Debut+2
|
|
txa
|
|
sta Debut
|
|
|
|
lda Debut
|
|
ora Debut+2
|
|
bne TWILIGHToff1
|
|
pld
|
|
rts
|
|
|
|
*----------------------------
|
|
* TWILIGHTon
|
|
* Turns Twilight II on
|
|
*
|
|
* Entry:
|
|
* n/a
|
|
*
|
|
* Exit:
|
|
* n/a
|
|
*
|
|
*----------------------------
|
|
|
|
TWILIGHTon
|
|
lda fgTWILIGHT
|
|
bne TWILIGHTon1
|
|
rts
|
|
|
|
TWILIGHTon1
|
|
phd
|
|
lda myDP
|
|
tcd
|
|
|
|
lda ptrTWILIGHT
|
|
sta Arrivee
|
|
lda ptrTWILIGHT+2
|
|
sta Arrivee+2
|
|
ldy offTWILIGHT
|
|
lda #$0ef0
|
|
sta [Arrivee],y
|
|
|
|
pld
|
|
rts
|
|
|
|
*--- Twilight II
|
|
|
|
ptrTWILIGHT ds 4
|
|
fgTWILIGHT ds 2
|
|
offTWILIGHT ds 2
|
|
|
|
*----------------------------------------
|
|
* FENETRES
|
|
*----------------------------------------
|
|
|
|
PAINTMAIN
|
|
PushLong wiMAIN
|
|
_DrawControls
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
jsr font_it ; force Courier
|
|
|
|
plb
|
|
rtl
|
|
|
|
*----------------------------------------
|
|
* CODE DU JEU
|
|
*----------------------------------------
|
|
|
|
*----------------------------------------
|
|
* Affiche une image de décor
|
|
*----------------------------------------
|
|
|
|
show_picture
|
|
sty ptrToSourceLocInfo+2
|
|
stx ptrToSourceLocInfo+4
|
|
|
|
_HideCursor
|
|
PushLong #paintParamPtr
|
|
_PaintPixels
|
|
|
|
PushWord #0
|
|
PushLong #ColorTableArray
|
|
_SetColorTable
|
|
PushWord #0
|
|
_SetAllSCBs
|
|
_ShowCursor
|
|
rts
|
|
|
|
*---
|
|
|
|
paintParamPtr
|
|
adrl ptrToSourceLocInfo
|
|
adrl ptrToDestLocInfo
|
|
adrl ptrToSourceRect
|
|
adrl ptrToDestPoint
|
|
dw $0000 ; mode copy
|
|
ds 4
|
|
|
|
ptrToSourceLocInfo
|
|
dw $0000 ; mode 320
|
|
ds 4 ; ptrDECORB or ptrDECORN
|
|
dw 160
|
|
dw 0,0,200,320
|
|
|
|
ptrToDestLocInfo
|
|
dw $0000 ; mode 320
|
|
adrl $012000
|
|
dw 160
|
|
dw 0,0,200,320
|
|
|
|
ptrToSourceRect
|
|
dw 0,0,200,320
|
|
ptrToDestPoint
|
|
dw 0,0
|
|
|
|
*----------------------------------------
|
|
* Affiche une image de télévision
|
|
*----------------------------------------
|
|
|
|
show_cartouche
|
|
_HideCursor
|
|
PushLong #paintParamPtr2
|
|
_PaintPixels
|
|
_ShowCursor
|
|
rts
|
|
|
|
*---
|
|
|
|
paintParamPtr2
|
|
adrl ptrToSourceLocInfo2
|
|
adrl ptrToDestLocInfo2
|
|
adrl ptrToSourceRect2
|
|
adrl ptrToDestPoint2
|
|
dw $0000 ; mode copy
|
|
ds 4
|
|
|
|
ptrToSourceLocInfo2
|
|
dw $0000 ; mode 320
|
|
ds 4 ; ptrIMAGE
|
|
dw 160
|
|
dw 0,0,200,320
|
|
|
|
ptrToDestLocInfo2
|
|
dw $0000 ; mode 320
|
|
adrl $012000
|
|
dw 160
|
|
dw 0,0,200,320
|
|
|
|
ptrToSourceRect2
|
|
dw 0,0,117,138 ; Rectangle of the source rectangle (because I tweaked the unpackAPF routine)
|
|
ptrToDestPoint2
|
|
dw 13,27 ; This is where the cartouche is displayed
|
|
|
|
*----------------------------------- Open
|
|
|
|
doLOAD
|
|
jsr doSOUNDOFF ; midi off
|
|
jsr saveBACK
|
|
|
|
PushWord #30
|
|
PushWord #43
|
|
PushLong #strLOADFILE
|
|
PushLong #0
|
|
PushLong #typeLIST
|
|
PushLong #replyPTR
|
|
_SFGetFile
|
|
|
|
jsr loadBACK
|
|
jsr doSOUNDON ; midi on
|
|
|
|
lda replyPTR
|
|
bne doLOAD1
|
|
rts
|
|
|
|
doLOAD1
|
|
jsr copyPATH
|
|
jmp loadALL
|
|
|
|
*----------------------------------- Save
|
|
|
|
doSAVE
|
|
jsr doSOUNDOFF ; midi off
|
|
jsr saveBACK
|
|
|
|
PushWord #25
|
|
PushWord #36
|
|
PushLong #strSAVEFILE
|
|
PushLong #namePATH
|
|
PushWord #15
|
|
PushLong #replyPTR
|
|
_SFPutFile
|
|
|
|
jsr loadBACK
|
|
jsr doSOUNDON ; midi on
|
|
|
|
lda replyPTR
|
|
bne doSAVE1
|
|
rts
|
|
|
|
doSAVE1
|
|
jsr copyPATH
|
|
jmp saveALL
|
|
|
|
*--- Recopie le filename du fichier de sauvegarde
|
|
|
|
copyPATH
|
|
sep #$20
|
|
ldx #16-1
|
|
]lp lda namePATH1,x
|
|
sta pGAME+4,x
|
|
dex
|
|
bpl ]lp
|
|
|
|
lda namePATH
|
|
inc
|
|
inc
|
|
sta pGAME
|
|
rep #$20
|
|
rts
|
|
|
|
*--- Charge le fichier de sauvegarde en mémoire
|
|
|
|
loadALL
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPENGAME
|
|
bcs loadKO99
|
|
|
|
lda proOPENGAME+2
|
|
sta proREADGAME+2
|
|
sta proCLOSE+2
|
|
|
|
jsr loadPART
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
loadKO99
|
|
rts
|
|
|
|
*---
|
|
|
|
loadPART
|
|
ldx #NB_INDICATEURS
|
|
ldy #C1
|
|
jsr loadIT
|
|
|
|
ldx #2
|
|
ldy #P
|
|
|
|
loadIT
|
|
stx proREADGAME+8
|
|
sty proREADGAME+4
|
|
jsl GSOS
|
|
dw $2012
|
|
adrl proREADGAME
|
|
rts
|
|
|
|
|
|
*--- Enregistre le fichier de sauvegarde
|
|
|
|
saveALL
|
|
jsl GSOS
|
|
dw $2002
|
|
adrl proDESTROYGAME
|
|
|
|
jsl GSOS
|
|
dw $2001
|
|
adrl proCREATEGAME
|
|
bcs saveKO99
|
|
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPENGAME
|
|
bcs saveKO99
|
|
|
|
lda proOPENGAME+2
|
|
sta proWRITEGAME+2
|
|
sta proCLOSE+2
|
|
|
|
jsr savePART
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
saveKO99
|
|
rts
|
|
|
|
*---
|
|
|
|
savePART
|
|
ldx #NB_INDICATEURS
|
|
ldy #C1
|
|
jsr saveIT
|
|
|
|
ldx #2
|
|
ldy #P
|
|
|
|
saveIT
|
|
stx proWRITEGAME+8
|
|
sty proWRITEGAME+4
|
|
jsl GSOS
|
|
dw $2013
|
|
adrl proWRITEGAME
|
|
rts
|
|
|
|
*----------------------------------- Restart
|
|
|
|
doRESTART
|
|
jsr saveBACK
|
|
|
|
PushWord #0
|
|
PushWord #5
|
|
PushLong #0
|
|
* PushLong #alertRESTART
|
|
pea $0000
|
|
lda #alertRESTART
|
|
ora saveLANGUAGE
|
|
pha
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq re1
|
|
rts
|
|
|
|
re1
|
|
* jsr initialisation2
|
|
jmp initialisation
|
|
|
|
*----------------------------------- Quit
|
|
|
|
doQUIT
|
|
jsr saveBACK
|
|
|
|
PushWord #0
|
|
PushWord #5
|
|
PushLong #0
|
|
* PushLong #alertQUIT
|
|
pea $0000
|
|
lda #alertQUIT
|
|
ora saveLANGUAGE
|
|
pha
|
|
_AlertWindow
|
|
|
|
jsr loadBACK
|
|
|
|
pla
|
|
beq meQUIT
|
|
rts
|
|
|
|
*----------------------------------- Quit
|
|
|
|
meQUIT
|
|
jsr stopMIDI
|
|
jsr TWILIGHTon
|
|
|
|
_SoundShutDown
|
|
|
|
PushLong #sourcePAT
|
|
_SetPenPat
|
|
|
|
PushWord saveBORDER
|
|
PushWord #$1c
|
|
_WriteBParam
|
|
|
|
sep #$20
|
|
ldal $e0c034
|
|
and #$f0
|
|
ora saveBORDER
|
|
stal $e0c034
|
|
rep #$20
|
|
|
|
meQUIT0
|
|
PushWord #refIsHandle
|
|
PushLong SStopREC
|
|
_ShutDownTools
|
|
|
|
meQUIT1
|
|
PushWord myID
|
|
_DisposeAll
|
|
|
|
PushWord myID
|
|
_MMShutDown
|
|
|
|
_TLShutDown
|
|
|
|
jsl GSOS
|
|
dw $2029
|
|
adrl proQUIT
|
|
|
|
brk $bd
|
|
|
|
*----------------------------------------
|
|
* MEMOIRE
|
|
*----------------------------------------
|
|
|
|
make64KB
|
|
pha
|
|
pha
|
|
PushLong #$010000
|
|
PushWord myID
|
|
PushWord #%11000000_00011100
|
|
PushLong #0
|
|
_NewHandle
|
|
phd
|
|
tsc
|
|
tcd
|
|
lda [3]
|
|
tax ; low in X
|
|
ldy #2
|
|
lda [3],y
|
|
txy ; low in Y
|
|
tax ; high in X
|
|
pld
|
|
pla ; we do not keep track of the handle
|
|
pla
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* GFX
|
|
*----------------------------------------
|
|
|
|
unpackAPF
|
|
sty Arrivee ; where to unpack the image located at ptrUNPACK
|
|
stx Arrivee+2
|
|
|
|
lda ptrUNPACK
|
|
sta Debut
|
|
lda ptrUNPACK+2
|
|
sta Debut+2
|
|
|
|
ldy #$0b
|
|
lda [Debut],y
|
|
sta PixelsPerScanLine
|
|
|
|
ldy #$0f
|
|
ldx #0
|
|
]lp lda [Debut],y
|
|
sta ColorTableArray,x
|
|
iny
|
|
iny
|
|
inx
|
|
inx
|
|
cpx #32
|
|
bcc ]lp
|
|
|
|
lda Debut ; ScanLineDirectory
|
|
clc
|
|
adc #$31
|
|
sta Second
|
|
lda Debut+2
|
|
adc #0
|
|
sta Second+2
|
|
|
|
lda [Debut],y ; PackedScanLines
|
|
sta NumScanLines
|
|
asl
|
|
asl
|
|
* tax
|
|
clc
|
|
adc #$31
|
|
sta Debut
|
|
* lda Debut+2
|
|
* adc #0
|
|
* sta Debut+2
|
|
|
|
lda #0
|
|
|
|
* Decompresse les lignes now
|
|
|
|
unpackAPF1
|
|
pha
|
|
asl
|
|
asl
|
|
tay
|
|
lda [Second],y
|
|
sta APFpackedSize
|
|
|
|
lda Debut
|
|
sta APFpackedHa
|
|
lda Debut+2
|
|
sta APFpackedHa+2
|
|
|
|
lda Arrivee
|
|
sta APFstartHa
|
|
lda Arrivee+2
|
|
sta APFstartHa+2
|
|
|
|
lda #1536
|
|
sta APFsizePtr
|
|
|
|
pha
|
|
PushLong APFpackedHa
|
|
PushWord APFpackedSize
|
|
PushLong #APFstartHa
|
|
PushLong #APFsizePtr
|
|
_UnPackBytes
|
|
pla ; next from
|
|
clc
|
|
adc Debut
|
|
sta Debut
|
|
* lda #0 ; same bank
|
|
* adc Debut+2
|
|
* sta Debut+2
|
|
|
|
* lda PixelsPerScanLine ; next to
|
|
* lsr
|
|
* clc
|
|
* adc Arrivee
|
|
lda Arrivee
|
|
clc
|
|
adc #160
|
|
sta Arrivee
|
|
* lda #0 ; same bank
|
|
* adc Arrivee+2
|
|
* sta Arrivee+2
|
|
|
|
pla
|
|
inc
|
|
cmp NumScanLines
|
|
bcc unpackAPF1
|
|
rts
|
|
|
|
*-- Data
|
|
|
|
PixelsPerScanLine ds 2
|
|
ColorTableArray ds 32
|
|
NumScanLines ds 2
|
|
|
|
APFpackedHa ds 4
|
|
APFpackedSize ds 2
|
|
APFstartHa ds 4
|
|
APFsizePtr ds 2
|
|
|
|
*-----------------------------------
|
|
* SAVE THE SHR SCREEN
|
|
*-----------------------------------
|
|
|
|
saveBACK
|
|
_HideCursor
|
|
|
|
ldx #$8000-2
|
|
]lp ldal $e12000,x
|
|
saveBACK1 stal $000000,x
|
|
dex
|
|
dex
|
|
bpl ]lp
|
|
|
|
exitBACK _ShowCursor
|
|
rts
|
|
|
|
*-----------------------------------
|
|
* RESTORE THE SHR SCREEN
|
|
*-----------------------------------
|
|
|
|
loadBACK
|
|
_HideCursor
|
|
|
|
ldx #$8000-2
|
|
loadBACK1 ldal $000000,x
|
|
stal $012000,x
|
|
stal $e12000,x
|
|
dex
|
|
dex
|
|
bpl loadBACK1
|
|
bmi exitBACK
|
|
|
|
*--- Genere un nombre aleatoire
|
|
|
|
Random
|
|
ldal $e0c02e
|
|
xba
|
|
clc
|
|
adc VBLCounter0
|
|
sta VBLCounter0
|
|
and #$ff
|
|
rts
|
|
|
|
VBLCounter0 ds 2
|
|
|
|
*----------------------------
|
|
* nowWAIT
|
|
* Wait A seconds
|
|
*
|
|
* Entry:
|
|
* A: nb of seconds to wait
|
|
*
|
|
* Exit:
|
|
* A/X: scrambled
|
|
*
|
|
*----------------------------
|
|
|
|
nowWAIT
|
|
dec
|
|
tax
|
|
lda #0
|
|
]lp clc
|
|
adc #60
|
|
cpx #0
|
|
beq nowWAIT1
|
|
dex
|
|
bra ]lp
|
|
|
|
nowWAIT1 pha
|
|
]lp ldal RDVBLBAR-1
|
|
bpl ]lp
|
|
]lp ldal RDVBLBAR-1
|
|
bmi ]lp
|
|
|
|
pla
|
|
dec
|
|
bne nowWAIT1
|
|
sec
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* DATA
|
|
*----------------------------------------
|
|
|
|
*----------------------- Fenetres
|
|
|
|
wiMAIN ds 4
|
|
|
|
*----------------------- Memory manager
|
|
|
|
myID ds 2
|
|
myDP ds 2
|
|
|
|
SStopREC ds 4
|
|
|
|
ptrIMAGE ds 4 ; where a scene image is loaded
|
|
ptrUNPACK ds 4 ; where the background picture is laoded
|
|
ptrDECORB ds 4 ; décor lumière allumée
|
|
ptrDECORN adrl $8000 ; décord lumière éteinte (ptrDECORB+$8000)
|
|
|
|
ptrFICHES ds 4 ; les données multilingues du jeu
|
|
|
|
fgSND ds 2 ; set if sound file not loaded
|
|
haSND ds 4 ; the handle to the sound pointer
|
|
temp ds 2
|
|
|
|
saveBORDER ds 2
|
|
saveLANGUAGE ds 2
|
|
|
|
*----------------------- Tool locator
|
|
|
|
verSTR1 str 'System 6.0.1 Required!'
|
|
verSTR2 str 'Press a key to quit'
|
|
fntSTR1 str 'Helvetica.09 font missing'
|
|
fntSTR2 str 'Please install it!'
|
|
tolSTR1 str 'Error while loading tools'
|
|
memSTR1 str 'Cannot allocate memory'
|
|
filSTR1 str 'Cannot load file'
|
|
filSTR2 str 'Cannot load text file'
|
|
filSTR3 str 'Cannot load font file'
|
|
errSTR1 str 'Quit'
|
|
errSTR2 str ''
|
|
errSTR3 str 'Continue'
|
|
|
|
*----------------------- Window manager
|
|
|
|
taskREC ds 2 ; wmWhat +0
|
|
taskMESSAGE ds 4 ; wmMessage +2
|
|
taskWHEN ds 4 ; wmWhen +6
|
|
taskWHERE ds 4 ; wmWhere +10
|
|
taskMODIFIERS ds 2 ; wmModifiers +14
|
|
taskDATA ds 4 ; wmTaskData +16
|
|
adrl $001fffff ; wmTaskMask +20
|
|
ds 4 ; wmLastClickTick +24
|
|
ds 2 ; wmClickCount +28
|
|
ds 4 ; wmTaskData2 +30
|
|
ds 4 ; wmTaskData3 +34
|
|
ds 4 ; wmTaskData4 +38
|
|
ds 4 ; wmLastClickPt +42
|
|
|
|
taskTBL da doNOT ; Null
|
|
da doNOT ; mouseDownEvt
|
|
da doMOUSEUP ; mouseUpEvt
|
|
da doKEYDOWN ; keyDownEvt
|
|
da doNOT
|
|
da doNOT ; autoKeyEvt
|
|
da doNOT ; updateEvt
|
|
da doNOT
|
|
da doNOT ; activateEvt
|
|
da doNOT ; switchEvt
|
|
da doNOT ; deskAccEvt
|
|
da doNOT ; driverEvt
|
|
da doNOT ; app1Evt
|
|
da doNOT ; app2Evt
|
|
da doNOT ; app3Evt
|
|
da doNOT ; app4Evt
|
|
da doNOT ; wInDesk
|
|
da doNOT ; wInMenuBar
|
|
da doNOT ; wCLickCalled
|
|
da doNOT ; wInContent - was doCONTENT
|
|
da doNOT ; wInDrag
|
|
da doNOT ; wInGrow
|
|
da doNOT ; wInGoAway
|
|
da doNOT ; wInZoom
|
|
da doNOT ; wInInfo
|
|
da doNOT ; wInSpecial
|
|
da doNOT ; wInDeskItem
|
|
da doNOT ; wInFrame
|
|
da doNOT ; wInactMenu
|
|
da doNOT ; wInClosedNDA
|
|
da doNOT ; wInCalledSysEdit
|
|
da doNOT ; wInTrackZoom
|
|
da doNOT ; wInHitFrame
|
|
da doCONTROL ; wInControl
|
|
da doNOT ; wInControlMenu
|
|
|
|
*----------------------------------------
|
|
* STD FILE
|
|
*----------------------------------------
|
|
|
|
*---
|
|
|
|
strLOADFILE str 'Charger quel jeu ?'
|
|
strSAVEFILE str 'Enregistrer sous...'
|
|
|
|
typeLIST hex 01
|
|
hex 5d ; Game/Edu files
|
|
replyPTR ds 2 ; 0 good
|
|
ds 2 ; 2 fileType
|
|
ds 2 ; 4 auxFileType
|
|
namePATH
|
|
hex 06 ; 6 fileName
|
|
namePATH1
|
|
asc 'Partie' ; 7 fileName (16 normally)
|
|
ds 9
|
|
loadPATH
|
|
ds 1 ; 22 fullPathname (string length)
|
|
loadPATH1
|
|
ds 129 ; 23 fullPathname (128 normally)
|
|
|
|
*----------------------------------------
|
|
* GS/OS
|
|
*----------------------------------------
|
|
|
|
loadFILE
|
|
sta proOPEN+4 ; filename
|
|
sty proREAD+4 ; RAM pointer low
|
|
stx proREAD+6 ; RAM pointer high
|
|
|
|
loadFILE1
|
|
stz proERR
|
|
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPEN
|
|
bcs loadERR
|
|
|
|
lda proOPEN+2
|
|
sta proREAD+2
|
|
sta proCLOSE+2
|
|
|
|
lda proEOF
|
|
sta proREAD+8
|
|
lda proEOF+2
|
|
sta proREAD+10
|
|
|
|
jsl GSOS
|
|
dw $2012
|
|
adrl proREAD
|
|
bcs loadERR
|
|
|
|
loadFILE2
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
|
|
ldy proREAD+12 ; length read
|
|
ldx proREAD+14
|
|
rts
|
|
|
|
loadERR jsr loadFILE2
|
|
ldy #0
|
|
tyx
|
|
sec
|
|
rts
|
|
|
|
*--- GS/OS data
|
|
|
|
proERR
|
|
ds 2
|
|
|
|
*--- For the game party
|
|
|
|
proCREATEGAME
|
|
dw 7 ; pcount
|
|
adrl pGAME ; pathname
|
|
dw $c3 ; access_code
|
|
dw $5d ; file_type
|
|
adrl $801e ; aux_type
|
|
ds 2 ; storage_type
|
|
ds 4 ; eof
|
|
ds 4 ; resource_eof
|
|
|
|
proDESTROYGAME
|
|
dw 1 ; pcount
|
|
adrl pGAME ; pathname
|
|
|
|
proOPENGAME
|
|
dw 2
|
|
ds 2
|
|
adrl pGAME
|
|
|
|
proREADGAME
|
|
dw 4 ; 0 - pcount
|
|
ds 2 ; 2 - ref_num
|
|
adrl pGAME ; 4 - data_buffer
|
|
ds 4 ; 8 - request_count
|
|
ds 4 ; C - transfer_count
|
|
|
|
proWRITEGAME
|
|
dw 5 ; 0 - pcount
|
|
ds 2 ; 2 - ref_num
|
|
adrl pGAME ; 4 - data_buffer (we are in same bank)
|
|
ds 4 ; 8 - request_count
|
|
ds 4 ; C - transfer_count
|
|
dw 1 ; cache_priority
|
|
|
|
*--- For the game images
|
|
|
|
proOPEN
|
|
dw 12
|
|
ds 2
|
|
adrl pIMAGE
|
|
ds 2
|
|
ds 2
|
|
ds 2
|
|
ds 2
|
|
ds 4
|
|
ds 2
|
|
ds 8
|
|
ds 8
|
|
ds 4
|
|
proEOF ds 4
|
|
|
|
proREAD
|
|
dw 4 ; 0 - nb parms
|
|
ds 2 ; 2 - file id
|
|
ds 4 ; 4 - pointer
|
|
ds 4 ; 8 - length
|
|
ds 4 ; C - length read
|
|
|
|
proCLOSE
|
|
dw 1
|
|
ds 2
|
|
|
|
proQUIT
|
|
dw 2 ; pcount
|
|
ds 4 ; pathname
|
|
ds 2 ; flags
|
|
|
|
proVERS
|
|
dw 1 ; pcount
|
|
ds 2 ; version
|
|
|
|
*--- offset to image number is +16
|
|
|
|
pIMAGE strl '1/data/images/XXXX'
|
|
pDECORB strl '1/data/images/DECORB'
|
|
pDECORN strl '1/data/images/DECORN'
|
|
pPUB strl '1/data/images/PUB'
|
|
pPLAN strl '1/data/images/PLAN'
|
|
pFICHES strl '1/data/textes/fr/NEWTV.BASE'
|
|
|
|
pGAME strl '0/ '
|
|
|
|
*----------------------------------------
|
|
* LES AUTRES FICHIERS
|
|
*----------------------------------------
|
|
|
|
put game.s
|
|
put midi.s
|
|
|
|
*---
|
|
|
|
asc 0d
|
|
asc "----------------"0d
|
|
asc " "0d
|
|
asc " CANAL MEURTRE "0d
|
|
asc " "0d
|
|
asc " Antoine Vignau "0d
|
|
asc "Olivier Zardini"0d
|
|
asc " "0d
|
|
asc " Paques 2022 "0d
|
|
asc " "0d
|
|
asc "----------------"0d |