antoine-source/canalmeurtre/canalmeurtre.s

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