Adding Canal Meurtre

Antoine's source code of Canal Meurtre
This commit is contained in:
Antoine Vignau
2022-10-29 21:27:32 +02:00
parent 33f00570f0
commit 256a862d79
7 changed files with 4415 additions and 0 deletions

BIN
.DS_Store vendored

Binary file not shown.

1559
canalmeurtre/canalmeurtre.s Normal file

File diff suppressed because it is too large Load Diff

821
canalmeurtre/fiche.s Normal file
View File

@@ -0,0 +1,821 @@
*
* 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'

1464
canalmeurtre/game.s Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

569
canalmeurtre/midi.s Normal file
View File

@@ -0,0 +1,569 @@
*
* Midi routines
*
* (c) 2020, Brutal Deluxe Software
* Antoine Vignau & Olivier Zardini
*
dpSEQ = $f8
seqOFFSET = $006
seqTEMPO = $18A
seqTPB = $190
*--------------------------------------
mx %00
stopMIDI
lda fgMIDI
bne stopMIDI99
_KillAllNotes ; Stop MidiSynth
_MSShutDown
PushWord #35 ; unload MidiSynth
_UnloadOneTool
_SoundShutDown
stopMIDI99
rts
*--------------------------------------
initMIDI
pha ; Check for AppleTalk
_GetIRQEnable
pla
and #$20
beq initMIDI1
inc fgMIDI
rts
initMIDI1
lda myDP
clc
adc #$100
pha
_SoundStartUp
PushWord #35 ; Load MidiSynth
PushWord #0
_LoadOneTool
bcc initMIDI2
inc fgMIDI
rts
initMIDI2
_MSStartUp ; Start MidiSynth
bcc musicMEMORY
inc fgMIDI
rts
*-------------------------------------- Now, get RAM
musicMEMORY
PushLong #0
PushLong #$10000
PushWord myID
PushWord #%11000000_00011100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
sta ptrSEQ
ldy #2
lda [3],y
sta ptrSEQ+2
pld
pla
pla
bcc musicMEMORY1
inc fgMIDI ; cannot assign memory for MIDI sequences
rts
musicMEMORY1
PushLong #0
PushLong #$10000
PushWord myID
PushWord #%11000000_00011100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
sta ptrBNK
ldy #2
lda [3],y
sta ptrBNK+2
pld
pla
pla
bcc musicMEMORY2
inc fgMIDI ; cannot assign memory for MIDI sequences
rts
musicMEMORY2
PushLong #0
PushLong #$10000
PushWord myID
PushWord #%11000000_00011100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
sta ptrWAV
ldy #2
lda [3],y
sta ptrWAV+2
pld
pla
pla
bcc loadWAV
inc fgMIDI ; cannot assign memory for MIDI sequences
rts
*-------------------------------------- Load WAV
loadWAV
lda #pWAV
sta midiOPEN+4
jsl GSOS
dw $2010
adrl midiOPEN
sta midiERR
lda midiOPEN+2
sta midiSETMARK+2
sta midiREAD+2
sta midiCLOSE+2
jsl GSOS
dw $2016
adrl midiSETMARK
lda ptrWAV
sta midiREAD+4
lda ptrWAV+2
sta midiREAD+6
stz midiREAD+8
lda #1
sta midiREAD+10
jsl GSOS
dw $2012
adrl midiREAD
sta midiERR
jsl GSOS
dw $2014
adrl midiCLOSE
lda midiERR ; check err
beq loadBNK
inc fgMIDI ; exit
rts
*-------------------------------------- Load BNK
loadBNK
lda #pBNK ; load the MIDI bank
ldx ptrBNK+2
ldy ptrBNK
jsr loadGSOS
lda midiERR ; check err
beq loadSEQUENCE
inc fgMIDI
rts
*-------------------------------------- Load Sequence
loadSEQUENCE
lda #pSEQ
ldx ptrSEQ+2
ldy ptrSEQ
jsr loadGSOS
lda midiERR ; check err
beq initMUSIC
inc fgMIDI
rts
*-------------------------------------- Play sequence
initMUSIC
lda ptrSEQ
sta playMUSIC5+1 ; save pointers
sta playMUSIC55+1
lda ptrSEQ+2
sta playMUSIC6+1
sta playMUSIC66+1
_KillAllNotes
lda myDP
tcd
playMUSIC5
lda #$bdbd ; patched
sta dpSEQ
playMUSIC6
lda #$bdbd ; patched
sta dpSEQ+2
ldy #seqOFFSET
lda [dpSEQ],y
clc
playMUSIC55
adc #$bdbd ; patched
sta seqPlayRec
lda #0
playMUSIC66
adc #$bdbd ; patched
sta seqPlayRec+2
ldy #seqTEMPO
lda [dpSEQ],y
asl
sec
sbc #10
pha
_SetTempo
ldy #seqTPB
lda [dpSEQ],y
pha
_SetBeat
*--- Toutes les pistes sont actives
lda ptrBNK
clc
adc #$400
sta ptrINST
lda ptrBNK+2
adc #0
sta ptrINST+2
stz myINDEX
]lp PushWord myINDEX
PushWord #$8000
_SetPlayTrack
PushWord myINDEX
PushWord #-1
_TrackToChannel
PushWord myINDEX
PushWord #2
_SetTrackOut
PushLong ptrINST
PushWord myINDEX
_SetInstrument
lda ptrINST
clc
adc #$120
sta ptrINST
lda ptrINST+2
adc #0
sta ptrINST+2
inc myINDEX
lda myINDEX
cmp #16
bne ]lp
*---
sei
PushLong ptrWAV
PushWord #0 ; docStart
PushWord #0 ; byteCount (=64ko)
_WriteRamBlock
PushLong #callBackRec
_SetCallBack
PushWord #0
PushWord #0
PushLong seqClock
PushLong seqPlayRec
_Locate
PullLong seqPlayRec
cli ; end of the long init!
rts
*--------------------------------------
doMUSIK
lda fgMIDI ; can we play?
bne nozik99
lda fgMIDIPLAY
eor #1
sta fgMIDIPLAY
beq doSOUNDON
bne doSOUNDOFF
nozik99
rts
fgMIDIPLAY ds 2
*--------------------------------------
doSOUNDON
lda fgMIDI ; can we play?
bne playMUSIC99
lda #$0100 ; no, let's start playing!
sta seqPlay
PushLong #seqPlayRec
_SeqPlayer
stz fgLOOP
playMUSIC99
rts
*--------------------------------------
doSOUNDOFF
lda fgMIDI
bne stopMUSIC99
stz seqPlay
PushLong #seqPlayRec
_SeqPlayer
_KillAllNotes
stopMUSIC99
rts
*-------------------------------------- Suspend music
suspendMUSIC
lda fgMIDI
ora fgMIDIPLAY
bne suspendMUSIC9
_MSSuspend
suspendMUSIC9
rts
*-------------------------------------- Resume music
resumeMUSIC
lda fgMIDI
ora fgMIDIPLAY
bne resumeMUSIC9
_MSResume
resumeMUSIC9
rts
*--------------------------------------
checkREPLAY
lda fgMIDI
bne checkREPLAY99
lda fgLOOP
beq checkREPLAY99
jsr doSOUNDON
checkREPLAY99
rts
*--------------------------------------
replayMUSIC
lda #-1
stal fgLOOP
rtl
fgLOOP dw -1
*-------------------------------------- Select random sequence
randomMIDI
jsr Random ; get random 0-7
and #7
bcc randomMIDI
jsr midi_setit ; check file exists
bcc mr_ok ; it is ok, it is the sequence
lda #0 ; force sequence 1
jsr midi_setit
mr_ok rts
*-------------------------------------- Check a sequence
midi_setit
clc
adc #'1'
sep #$20
sta pSEQ+26
rep #$20
lda #pSEQ ; check file exists
sta midiOPEN+4
jsl GSOS
dw $2010
adrl midiOPEN
bcs midi_setit99
lda midiOPEN+2
sta midiCLOSE+2
jsl GSOS
dw $2014
adrl midiCLOSE
midi_setit99
rts
*-------------------------------------- Load a file
loadGSOS
sta midiOPEN+4
sty midiREAD+4
stx midiREAD+6
stz midiERR
jsl GSOS
dw $2010
adrl midiOPEN
bcs loadGSOSERR
lda midiOPEN+2
sta midiREAD+2
sta midiCLOSE+2
lda midiEOF
sta midiREAD+8
lda midiEOF+2
sta midiREAD+10
jsl GSOS
dw $2012
adrl midiREAD
bcs loadGSOSERR
loadGSOS2
jsl GSOS
dw $2014
adrl midiCLOSE
rts
loadGSOSERR
jsr loadGSOS2
inc fgMIDI
rts
*-------------------------------------- DATA
myINDEX ds 2
*--- GS/OS
midiERR ds 2
midiOPEN dw 12
ds 2
adrl pSEQ
ds 2
ds 2
ds 2
ds 2
ds 4
ds 2
ds 8
ds 8
ds 4
midiEOF ds 4
midiREAD dw 4
ds 2
ds 4
ds 4
ds 4
midiCLOSE dw 1
ds 2
midiSETMARK dw 3
ds 2
ds 2
adrl $900 ; +$900 pour WAV
*--- GS/OS Strings (+26 pour le random de la musique)
pSEQ strl '1/data/musiques/sequence1'
pWAV strl '1/data/musiques/piano.wav'
pBNK strl '1/data/musiques/piano.bnk'
*--- Memory
ptrSEQ ds 4
ptrWAV ds 4
ptrBNK ds 4
*--- Flags
fgMIDI ds 2 ; can play MIDI if 0
*--- Instruments
ptrINST ds 4
*--- MidiSynth
seqPlayRec
ds 4
ds 4
ds 4
ds 4
seqPlay ds 2 ; Play
seqClock ds 4
callBackRec adrl replayMUSIC ; When sequence ends !
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4
ds 4

1
canalmeurtre/readme.txt Normal file
View File

@@ -0,0 +1 @@
MURDER CHANNEL