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
822 lines
11 KiB
ArmAsm
822 lines
11 KiB
ArmAsm
*
|
|
* Canal Meurtre (éditeur)
|
|
*
|
|
* (c) 1986, Froggy Software
|
|
* (c) 2022, Antoine Vignau & Olivier Zardini
|
|
*
|
|
|
|
lst off
|
|
rel
|
|
dsk Fiche.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
|
|
|
|
*----------------------------------- Constantes
|
|
|
|
*-------------- Softswitches
|
|
|
|
KBD = $e0c000
|
|
KBDSTROBE = $e0c010
|
|
RDVBLBAR = $e0c019
|
|
GSOS = $e100a8
|
|
|
|
*-------------- GUI
|
|
|
|
wMAIN = 1
|
|
|
|
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
|
|
|
|
*--- Programme
|
|
|
|
NB_FICHES = 200 ; nombre de fiches du jeu
|
|
TAILLE_FICHE = 255 ; taille d'une fiche en octets
|
|
|
|
*----------------------------------- Entry point
|
|
|
|
phk
|
|
plb
|
|
|
|
_TLStartUp
|
|
pha
|
|
_MMStartUp
|
|
pla
|
|
sta myID
|
|
|
|
tdc
|
|
sta myDP
|
|
|
|
*--- 64K pour les NEWTV.BASE
|
|
|
|
jsr make64KB
|
|
|
|
sty ptrFICHES
|
|
sty proREAD+4
|
|
sty proWRITE+4
|
|
stx ptrFICHES+2
|
|
stx proREAD+6
|
|
stx proWRITE+6
|
|
|
|
jsr loadFILE
|
|
jsr init_fiche
|
|
|
|
*--- Chargement des outils
|
|
|
|
pha
|
|
pha
|
|
PushWord myID
|
|
PushWord #refIsResource
|
|
PushLong #1
|
|
_StartUpTools
|
|
PullLong SStopREC
|
|
|
|
_InitCursor
|
|
|
|
*--- Nettoie le cache de l'Event Manager
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushWord #0
|
|
_FlushEvents
|
|
pla
|
|
|
|
*----------------------------------------
|
|
* INITIALISATIONS
|
|
*----------------------------------------
|
|
|
|
pha
|
|
pha
|
|
PushLong #0
|
|
PushLong #wMAIN
|
|
PushLong #PAINTMAIN
|
|
PushLong #0
|
|
PushWord #refIsResource
|
|
PushLong #wMAIN
|
|
PushWord #$800e
|
|
_NewWindow2
|
|
PullLong wiMAIN
|
|
|
|
jsr getFICHE
|
|
|
|
*----------------------------------------
|
|
* TASK MASTER
|
|
*----------------------------------------
|
|
|
|
taskLOOP
|
|
PushWord #0
|
|
PushWord #0
|
|
PushWord #$c000
|
|
PushWord #0
|
|
_HandleDiskInsert
|
|
pla
|
|
pla
|
|
|
|
PushWord #0
|
|
PushWord #%11111111_11111111
|
|
PushLong #taskREC
|
|
_TaskMaster
|
|
pla
|
|
beq taskLOOP
|
|
|
|
asl
|
|
tax
|
|
jsr (taskTBL,x)
|
|
bra taskLOOP
|
|
|
|
*----------------------------------- Gestion des contrôles (ça veut dire boutons ou lineedit)
|
|
|
|
doCONTROL
|
|
lda taskREC+38
|
|
dec
|
|
asl
|
|
tax
|
|
jsr (taskCTL,x)
|
|
rts
|
|
|
|
taskCTL da doLINE
|
|
da doLINE
|
|
da doLINE
|
|
da doLINE
|
|
da doLINE
|
|
da doQUIT
|
|
da doPREVIOUS
|
|
da doNEXT
|
|
da doSAVE
|
|
|
|
*----------------------------------------
|
|
* CODE DU JEU
|
|
*----------------------------------------
|
|
|
|
doNOT
|
|
|
|
*--- Les Line Edit
|
|
|
|
doLINE
|
|
rts
|
|
|
|
*--- Bouton Enregistrer
|
|
|
|
doSAVE
|
|
jsr putFICHE
|
|
jmp saveFILE
|
|
|
|
*--- Bouton Quitter
|
|
|
|
doQUIT
|
|
jsr doSAVE
|
|
|
|
meQUIT
|
|
PushWord #refIsHandle
|
|
PushLong SStopREC
|
|
_ShutDownTools
|
|
|
|
meQUIT1
|
|
PushWord myID
|
|
_DisposeAll
|
|
|
|
PushWord myID
|
|
_MMShutDown
|
|
|
|
_TLShutDown
|
|
|
|
jsl GSOS
|
|
dw $2029
|
|
adrl proQUIT
|
|
|
|
brk $bd
|
|
|
|
*--- Bouton Fiche précédente
|
|
|
|
doPREVIOUS
|
|
jsr putFICHE
|
|
|
|
lda P
|
|
cmp #1
|
|
bne okPREV
|
|
rts
|
|
okPREV sec
|
|
sbc #1
|
|
sta P
|
|
jmp getFICHE
|
|
|
|
*--- Bouton Fiche suivante
|
|
|
|
doNEXT
|
|
jsr putFICHE
|
|
|
|
lda P
|
|
cmp nbFICHES
|
|
bcc okNEXT
|
|
beq okNEXT
|
|
rts
|
|
okNEXT clc
|
|
adc #1
|
|
sta P
|
|
jmp getFICHE
|
|
|
|
*----------------------------------------
|
|
* GESTION DES FICHES
|
|
*----------------------------------------
|
|
|
|
*-----------------------
|
|
* printP - affiche le numéro de la fiche
|
|
*-----------------------
|
|
|
|
printP
|
|
lda #' '
|
|
sta strP
|
|
sta strP+2
|
|
|
|
PushWord P
|
|
PushLong #strP
|
|
PushWord #3
|
|
PushWord #FALSE
|
|
_Int2Dec
|
|
|
|
pha
|
|
pha
|
|
_GetPort
|
|
|
|
PushLong wiMAIN
|
|
_SetPort
|
|
|
|
PushWord #210
|
|
PushWord #130
|
|
_MoveTo
|
|
|
|
PushLong #strP
|
|
_DrawCString
|
|
|
|
_SetPort
|
|
rts
|
|
|
|
strP asc ' '00
|
|
|
|
*-----------------------
|
|
* getFICHE - De F à la fenêtre
|
|
*-----------------------
|
|
|
|
getFICHE
|
|
jsr get_fiche
|
|
|
|
sep #$30
|
|
|
|
lda #40 ; Tell length is 40 chars
|
|
sta B1_6
|
|
sta B1_8
|
|
sta B1_10
|
|
sta B1_12
|
|
sta B1_14
|
|
|
|
ldx #0 ; Move strings to the buffer
|
|
]lp lda C2_6,x
|
|
sta B2_6,x
|
|
lda C2_8,x
|
|
sta B2_8,x
|
|
lda C2_10,x
|
|
sta B2_10,x
|
|
lda C2_12,x
|
|
sta B2_12,x
|
|
lda C2_14,x
|
|
sta B2_14,x
|
|
inx
|
|
cpx #40
|
|
bcc ]lp
|
|
|
|
rep #$30
|
|
|
|
PushLong wiMAIN ; Set LE
|
|
PushLong #1
|
|
PushLong #B1_6
|
|
_SetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #2
|
|
PushLong #B1_8
|
|
_SetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #3
|
|
PushLong #B1_10
|
|
_SetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #4
|
|
PushLong #B1_12
|
|
_SetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #5
|
|
PushLong #B1_14
|
|
_SetLETextByID
|
|
|
|
jmp printP
|
|
|
|
*-----------------------
|
|
* putFICHE - De la fenêtre à F
|
|
*-----------------------
|
|
|
|
putFICHE
|
|
PushLong wiMAIN ; Get LE
|
|
PushLong #1
|
|
PushLong #B1_6
|
|
_GetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #2
|
|
PushLong #B1_8
|
|
_GetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #3
|
|
PushLong #B1_10
|
|
_GetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #4
|
|
PushLong #B1_12
|
|
_GetLETextByID
|
|
|
|
PushLong wiMAIN
|
|
PushLong #5
|
|
PushLong #B1_14
|
|
_GetLETextByID
|
|
|
|
sep #$30
|
|
|
|
ldx #0 ; Clear destination strings
|
|
lda #' '
|
|
]lp sta C2_6,x
|
|
sta C2_8,x
|
|
sta C2_10,x
|
|
sta C2_12,x
|
|
sta C2_14,x
|
|
inx
|
|
cpx #40
|
|
bcc ]lp
|
|
|
|
ldx B1_6 ; Move strings to buffer
|
|
beq pf_2
|
|
ldx #0
|
|
]lp lda B2_6,x
|
|
sta C2_6,x
|
|
inx
|
|
cpx B1_6
|
|
bcc ]lp
|
|
pf_2
|
|
ldx B1_8
|
|
beq pf_3
|
|
ldx #0
|
|
]lp lda B2_8,x
|
|
sta C2_8,x
|
|
inx
|
|
cpx B1_8
|
|
bcc ]lp
|
|
pf_3
|
|
ldx B1_10
|
|
beq pf_4
|
|
ldx #0
|
|
]lp lda B2_10,x
|
|
sta C2_10,x
|
|
inx
|
|
cpx B1_10
|
|
bcc ]lp
|
|
pf_4
|
|
ldx B1_12
|
|
beq pf_5
|
|
ldx #0
|
|
]lp lda B2_12,x
|
|
sta C2_12,x
|
|
inx
|
|
cpx B1_12
|
|
bcc ]lp
|
|
pf_5
|
|
ldx B1_14
|
|
beq pf_6
|
|
ldx #0
|
|
]lp lda B2_14,x
|
|
sta C2_14,x
|
|
inx
|
|
cpx B1_14
|
|
bcc ]lp
|
|
pf_6
|
|
|
|
rep #$30
|
|
jmp set_fiche ; and save the data at ptrFICHES
|
|
|
|
*-----------------------
|
|
* init_fiche
|
|
*-----------------------
|
|
|
|
init_fiche
|
|
stz nbFICHES ; 0 texts on entry
|
|
|
|
lda proEOF ; is file empty?
|
|
ora proEOF+2
|
|
bne if1
|
|
rts
|
|
|
|
if1
|
|
lda ptrFICHES
|
|
sta dpFROM
|
|
clc
|
|
adc proEOF
|
|
sta dpTO
|
|
lda ptrFICHES+2
|
|
sta dpFROM+2
|
|
adc proEOF+2
|
|
sta dpTO+2
|
|
|
|
if2
|
|
lda dpFROM+2 ; did we reach the end of the file?
|
|
cmp dpTO+2
|
|
bcc if3
|
|
lda dpFROM
|
|
cmp dpTO
|
|
bcc if3
|
|
rts ; we are done!
|
|
|
|
if3
|
|
lda nbFICHES ; save the address of the string
|
|
asl
|
|
asl
|
|
tax
|
|
lda dpFROM
|
|
sta tblFICHES,x
|
|
lda dpFROM+2
|
|
sta tblFICHES+2,x
|
|
|
|
lda dpFROM
|
|
clc
|
|
adc #TAILLE_FICHE
|
|
sta dpFROM
|
|
lda dpFROM+2
|
|
adc #0
|
|
sta dpFROM+2
|
|
|
|
inc nbFICHES ; increment the number of strings
|
|
lda nbFICHES ; into our limit
|
|
cmp #NB_FICHES
|
|
bcc if2
|
|
rts
|
|
|
|
*-----------------------
|
|
* get_fiche(fiche%) - From ptrFICHES to F
|
|
*-----------------------
|
|
|
|
get_fiche
|
|
lda P
|
|
bne get_fiche1
|
|
rts
|
|
|
|
get_fiche1
|
|
cmp nbFICHES
|
|
bcc get_fiche2
|
|
beq get_fiche2
|
|
rts
|
|
|
|
get_fiche2
|
|
dec
|
|
asl
|
|
asl
|
|
tax
|
|
lda tblFICHES,x
|
|
sta dpFICHES
|
|
lda tblFICHES+2,x
|
|
sta dpFICHES+2
|
|
|
|
ldy #TAILLE_FICHE-1
|
|
sep #$20
|
|
]lp lda [dpFICHES],y
|
|
sta F,y
|
|
dey
|
|
bpl ]lp
|
|
rep #$20
|
|
rts
|
|
|
|
*-----------------------
|
|
* set_fiche(fiche%) - From F to ptrFICHES
|
|
*-----------------------
|
|
|
|
set_fiche
|
|
lda P
|
|
bne set_fiche1
|
|
rts
|
|
|
|
set_fiche1
|
|
cmp nbFICHES
|
|
bcc set_fiche2
|
|
beq set_fiche2
|
|
rts
|
|
|
|
set_fiche2
|
|
dec
|
|
asl
|
|
asl
|
|
tax
|
|
lda tblFICHES,x
|
|
sta dpFICHES
|
|
lda tblFICHES+2,x
|
|
sta dpFICHES+2
|
|
|
|
ldy #TAILLE_FICHE-1
|
|
sep #$20
|
|
]lp lda F,y
|
|
sta [dpFICHES],y
|
|
dey
|
|
bpl ]lp
|
|
rep #$20
|
|
rts
|
|
|
|
*---------------------------------------- Les données d'une fiche
|
|
|
|
P dw 1 ; 1ère fiche
|
|
nbFICHES ds 2
|
|
|
|
tblFICHES ds 4*NB_FICHES
|
|
|
|
F ds 1 ; fiche OK (non zero) ou KO (zero)
|
|
C2_1 ds 2
|
|
C2_2 ds 25
|
|
C2_3 ds 2
|
|
C2_4 ds 2
|
|
C2_5 ds 4
|
|
C2_6 ds 40
|
|
C2_7 ds 4
|
|
C2_8 ds 40
|
|
C2_9 ds 4
|
|
C2_10 ds 40
|
|
C2_11 ds 4
|
|
C2_12 ds 40
|
|
C2_13 ds 4
|
|
C2_14 ds 40
|
|
ds 3 ; garbage
|
|
|
|
*---------------------------------------- Les données des LineEdit
|
|
|
|
B1_6 ds 1
|
|
B2_6 ds 40
|
|
|
|
B1_8 ds 1
|
|
B2_8 ds 40
|
|
|
|
B1_10 ds 1
|
|
B2_10 ds 40
|
|
|
|
B1_12 ds 1
|
|
B2_12 ds 40
|
|
|
|
B1_14 ds 1
|
|
B2_14 ds 40
|
|
|
|
ds 117 ; bad coder...
|
|
|
|
*----------------------------------------
|
|
* FENETRES
|
|
*----------------------------------------
|
|
|
|
PAINTMAIN
|
|
PushLong wiMAIN
|
|
_DrawControls
|
|
rtl
|
|
|
|
*----------------------------------------
|
|
* 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
|
|
|
|
*----------------------------------------
|
|
* DATA
|
|
*----------------------------------------
|
|
|
|
*----------------------- Fenetres
|
|
|
|
wiMAIN ds 4
|
|
|
|
*----------------------- Memory manager
|
|
|
|
myID ds 2
|
|
myDP ds 2
|
|
|
|
SStopREC ds 4
|
|
|
|
ptrFICHES ds 4
|
|
|
|
*----------------------- 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 doNOT ; mouseUpEvt
|
|
da doNOT ; 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
|
|
|
|
*----------------------------------------
|
|
* GS/OS
|
|
*----------------------------------------
|
|
|
|
loadFILE
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPEN
|
|
|
|
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
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
rts
|
|
|
|
*---
|
|
|
|
saveFILE
|
|
jsl GSOS
|
|
dw $2010
|
|
adrl proOPEN
|
|
|
|
lda proOPEN+2
|
|
sta proWRITE+2
|
|
sta proCLOSE+2
|
|
|
|
lda proEOF
|
|
sta proWRITE+8
|
|
lda proEOF+2
|
|
sta proWRITE+10
|
|
|
|
jsl GSOS
|
|
dw $2013
|
|
adrl proWRITE
|
|
|
|
jsl GSOS
|
|
dw $2014
|
|
adrl proCLOSE
|
|
rts
|
|
|
|
*--- GS/OS data
|
|
|
|
proOPEN
|
|
dw 12
|
|
ds 2
|
|
adrl pFICHES
|
|
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
|
|
|
|
proWRITE
|
|
dw 5 ; 0 - pcount
|
|
ds 2 ; 2 - ref_num
|
|
ds 4 ; 4 - data_buffer (we are in same bank)
|
|
ds 4 ; 8 - request_count
|
|
ds 4 ; C - transfer_count
|
|
dw 1 ; cache_priority
|
|
|
|
proCLOSE
|
|
dw 1
|
|
ds 2
|
|
|
|
proQUIT
|
|
dw 2 ; pcount
|
|
ds 4 ; pathname
|
|
ds 2 ; flags
|
|
|
|
*---
|
|
|
|
pFICHES strl '1/NEWTV.BASE'
|