snd zik load save

This commit is contained in:
Antoine Vignau 2024-01-05 22:47:54 +01:00
parent ae90d28849
commit de09429b67
8 changed files with 22160 additions and 20706 deletions

View File

@ -0,0 +1,503 @@
*
* 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
stopMIDI99 rts
*--------------------------------------
initMIDI pha ; Check for AppleTalk
_GetIRQEnable
pla
and #$20
beq initMIDI1
inc fgMIDI
rts
initMIDI1 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
*-------------------------------------- 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
pSEQ strl '1/Data/Sequence'
pWAV strl '1/Data/Piano.Wav'
pBNK strl '1/Data/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

View File

@ -14,15 +14,6 @@
mx %11
BORDER ldal $c034
inc
stal $c034
rts
*-----------------------------------
mx %11
printNIVEAU ora #'0'
sta strNIVEAU+9
@ -372,22 +363,10 @@ COUT2 rep #$20
text2shr dw 9,19,29,39,49,59,69,79,89,99
dw 109,119,129,139,149,159,169,179,189,199
*text2shr dw 8,16,24,32,40,48,56,64
* dw 72,80,88,96,104,112,120,128
* dw 136,144,152,160,168,176,184,192
* dw 200
*-----------------------------------
mx %11
*RND rep #$30
* PushWord #0
* _Random
* pla
* sep #$30
* rts
RND rep #$30
ldal VERTCNT
xba
@ -422,14 +401,22 @@ playSOUND sty waveSTART
stx waveSTART+2
sta waveSIZE
PushWord #%0000_0000_1000_0000
lda seqPlay ; midi playing
beq playSOUND1 ; nope
_MSSuspend
playSOUND1 PushWord #%0000_0000_1000_0000
_FFStopSound
PushWord #$0701
PushLong #waveSTART
_FFStartSound
sep #$30
lda seqPlay ; midi playing
beq playSOUND2 ; nope
_MSResume
playSOUND2 sep #$30
rts
*--- Donnees Sound Tool Set

View File

@ -201,7 +201,7 @@ newA$ hex 0100411246012E4931394DFF
hex 5A11440444052E4330344330354830344830354231394AFF
hex 502144072E4330374830374230364AFF
hex 3F002E443438FF
hex 3F002E443438FF ; QUIT - D48
hex 40002E4434394EFF
hex 14182E4435304BFF
hex 14424122450C2E4435314BFF
@ -218,8 +218,8 @@ newA$ hex 0100411246012E4931394DFF
hex 564A41152E4435334BFF
hex 5758451041152E4631364435374BFF
hex 575841152E4436364BFF
hex 54002E443539FF
hex 55002E443630FF
hex 54002E443539FF ; SAVE - D59
hex 55002E443630FF ; LOAD - D60
hex 2526411D4410460C2E443631FF
hex 2526411D460C2E4438364EFF
hex 2526411D2E4436324EFF
@ -359,7 +359,6 @@ M$53 dfb 2,29,0
tblMP$ da MP$1,MP$2,MP$3,MP$4,MP$5
MP$ ds 6 ; le mot de passe <20> trouver (5 + 00)
MP$1 asc 'ORIC1'
MP$2 asc 'ATMOS'
MP$3 asc 'GENIS'
@ -403,24 +402,24 @@ tblVH$ dfb $bd
dfb >V$91,>V$92,>V$93,>V$94,>V$95,>V$96,>V$97,>V$98,>V$99,>V$100
dfb >V$101,>V$102,>V$103,>V$104,>V$105,>V$106,>V$107,>V$108,>V$109,>V$110
dfb >V$111,>V$112,>V$113,>V$114,>V$115,>V$116,>V$117,>V$118,>V$119,>V$120
dfb <V$121,<V$122,<V$123,<V$124,<V$125,<V$126,<V$127,<V$128,<V$129,<V$130
dfb >V$121,>V$122,>V$123,>V$124,>V$125,>V$126,>V$127,>V$128,>V$129,>V$130
dfb >V$131,>V$132,>V$133,>V$134,>V$135,>V$136,>V$137,>V$138,>V$139
dfb >V$200
tblV dfb $bd
dfb 01,01,02,02,03,03,04,04,05,05
dfb 01,01,02,02,03,03,04,04,05,05 ; 1
dfb 05,05,06,06,10,10,10,11,12,12
dfb 13,13,14,15,16,17,17,17,18,19
dfb 13,13,14,15,16,17,17,17,18,19 ; 21
dfb 19,20,20,21,22,23,24,25,25,25
dfb 26,27,28,29,30,31,32,33,34,35
dfb 26,27,28,29,30,31,32,33,34,35 ; 41
dfb 35,36,37,37,38,38,38,39,39,39
dfb 40,41,42,43,43,44,45,46,47,48
dfb 40,41,42,43,43,44,45,46,47,48 ; 61
dfb 49,50,50,50,51,51,52,52,52,53
dfb 54,54,55,55,56,56,57,58,58,59
dfb 60,61,62,62,63,63,64,65,66,67
dfb 68,69,69,70,70,71,72,73,73,74
dfb 54,54,55,55,56,56,57,58,58,59 ; 81
dfb 60,61,62,62,63,63,64,65,66,67 ; 91
dfb 68,69,69,70,70,71,72,73,73,74 ; 101
dfb 75,76,77,77,78,78,79,80,80,80
dfb 81,81,82,83,83,84,84,84,85,85
dfb 81,81,82,83,83,84,84,84,85,85 ; 121
dfb 85,86,87,87,88,88,89,89,90 ; last was 00, now 90
dfb 200
@ -518,7 +517,7 @@ V$91 str 'DEMA'
V$92 str 'ECOU'
V$93 str 'CHRO'
V$94 str 'TEMP'
V$95 str 'QUIT'
V$95 str 'QUIT' ; 63 (3F)
V$96 str 'ABAN'
V$97 str 'SUIC'
V$98 str 'MANU'
@ -537,7 +536,7 @@ V$110 str 'ORDI'
V$111 str 'ESSA'
V$112 str 'FLAQ'
V$113 str 'PORT'
V$114 str 'SAS'
V$114 str 'SAS '
V$115 str 'LIST'
V$116 str 'INVE'
V$117 str 'ESCA'
@ -549,12 +548,12 @@ V$122 str 'ENER'
V$123 str 'TOUR'
V$124 str 'PAGE'
V$125 str 'FEUI'
V$126 str 'SAVE'
V$126 str 'SAVE' ; 84 (54)
V$127 str 'SAUV'
V$128 str 'CSAV'
V$129 str 'LOAD'
V$130 str 'CLOA'
V$131 str 'ENRE'
V$129 str 'LOAD' ; 85 (55)
V$130 str 'ENRE'
V$131 str 'CLOA'
V$132 str 'ETEI'
V$133 str 'RETA'
V$134 str 'CORR'

Binary file not shown.

View File

@ -21,10 +21,12 @@
use 4/Locator.Macs
use 4/Mem.Macs
use 4/Menu.Macs
use 4/MidiSyn.Macs
use 4/Misc.Macs
use 4/QD.Macs
use 4/QDAux.Macs
use 4/Sound.Macs
use 4/Std.Macs
use 4/Util.Macs
use 4/Window.Macs
@ -89,9 +91,9 @@ ICI phk
tdc
sta myDP
lda #tblMP$
lda #fgMIDI
stal $300
lda #^tblMP$
lda #^fgMIDI
stal $302
_TLStartUp
@ -206,6 +208,8 @@ okTOOL _HideMenuBar
sta ptrSCREEN+2
okSHADOW
jsr initMIDI
jsr doSOUNDON
*-----------------------------------
* IL FAUT JOUER MAINTENANT
@ -213,40 +217,13 @@ okSHADOW
jmp PLAY
*-----------------------------------
lda #1
sta myINDEX
loop rep #$30
PushWord #0
_ClearScreen
lda myINDEX
jsr showPIC
mx %11
]lp ldal $c000
bpl ]lp
stal $c010
cmp #$9b
beq QUIT
inc myINDEX
lda myINDEX
cmp #58
bne loop
mx %00
*-----------------------------------
* AU REVOIR LE IIGS
*-----------------------------------
QUIT rep #$30
jsr stopMIDI
meQUIT PushWord #refIsPointer
PushLong ssREC
_ShutDownTools
@ -321,10 +298,197 @@ loadBACK _HideCursor
rts
*-----------------------------------
* DES DONNES 16-BITS
* LOAD/SAVE
*-----------------------------------
myINDEX ds 2
*----------------------------------- Open
doLOAD rep #$30
jsr doSOUNDOFF
rep #$30
jsr saveBACK
PushWord #30
PushWord #43
PushLong #strLOADFILE
PushLong #0
PushLong #typeLIST
PushLong #replyPTR
_SFGetFile
jsr loadBACK
jsr doSOUNDON
rep #$30
lda replyPTR
bne doLOAD1
rts
doLOAD1 jsr copyPATH
jsr loadALL
sep #$30
rts
mx %
*----------------------------------- Save
doSAVE rep #$30
jsr doSOUNDOFF
rep #$30
jsr saveBACK
PushWord #25
PushWord #36
PushLong #strSAVEFILE
PushLong #namePATH
PushWord #15
PushLong #replyPTR
_SFPutFile
jsr loadBACK
jsr doSOUNDON
rep #$30
lda replyPTR
bne doSAVE1
rts
doSAVE1 jsr copyPATH
jsr saveALL
sep #$30
rts
*--- Recopie le filename du fichier de sauvegarde
mx %00
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 #FIN_DATA-DEBUT_DATA
ldy #A1
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 #FIN_DATA-DEBUT_DATA
ldy #A1
saveIT stx proWRITEGAME+8
sty proWRITEGAME+4
jsl GSOS
dw $2013
adrl proWRITEGAME
rts
*--- For the game party
proCREATEGAME
dw 7 ; pcount
adrl pGAME ; pathname
dw $c3 ; access_code
dw $5d ; file_type
adrl $8020 ; 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
pGAME strl '0/ '
*-----------------------------------
* DES DONNES 16-BITS
*-----------------------------------
*----------------------------------- Memory Manager
@ -422,6 +586,9 @@ toolTBL dw $0000 ; flags
proERR ds 2 ; GS/OS error code
proCLOSE dw 1 ; pcount
ds 2 ; ID
proQUIT dw 2 ; pcount
ds 4 ; pathname
ds 2 ; flags
@ -462,6 +629,7 @@ loadPATH1 ds 129 ; 23 fullPathname (128 normally)
put leretour.s
put engine.s
put fr.s
put ../common/midi.s
put ../common/images.s
*--- It's the end

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@
*-----------------------------------
CH = $24 ; cursor horizontal position
CV = $25 ; cursor vertical position
CV = CH+2 ; cursor vertical position
LINNUM = $50 ; result from GETADR
textX = $30 ; les X/Y pour afficher les
@ -26,7 +26,6 @@ chrRA = $15
chrDEL = $7f
chrRET = $0d
chrSPC = $20
*TEXTBUFFER = $200
maxLEN = 40
chrOUI = 'O'
@ -80,8 +79,8 @@ idxTIMER = 200
*-----------------------------------
PLAY sep #$30
jsr initALL
REPLAY sep #$30
jsr HGR
jsr HOME ; clear text screen
@ -978,7 +977,7 @@ tbl4000 da $bdbd,:4010,:4020,:4030,:4040,:4050,:4060,:4070,:4080,:4090
:4470 @print #str4470
rts
:4480 jsr :5500
:4480 jsr :5500 ; QUITTER
cmp #chrNON
bne :4481
jmp :500
@ -1080,13 +1079,12 @@ MDP$ asc 'MANOIR'
*----------- SAVE - LOGO
:4590 @print #str4590
rts
:4590 jmp doSAVE
*----------- LOAD - LOGO
:4600 @print #str4600
rts
:4600 jsr doLOAD
jmp REPLAY
*----------- LE MOT DE PASSE FINAL
@ -1521,12 +1519,6 @@ initALL
sta O,x
dex
bpl ]lp
* ldx #nbO*2 ; reset object table
*]lp lda refO$,x
* sta tblO$,x
* dex
* bpl ]lp
rts
*-----------------------------------
@ -1794,7 +1786,6 @@ H ds 1
HH ds 1
MO$1 ds 1 ; mot 1
MO$2 ds 1 ; mot 2
MO$3 ds 1 ; mot 3
N ds 1
NL ds 1
OK ds 1
@ -1807,12 +1798,13 @@ lenSTRING ds 1
MINUTES ds 2 ; 0..20 en dŽcimal
SECONDES ds 2 ; 0..59
MP$ ds 6 ; le mot de passe ˆ trouver (5 + 00)
C ds 32+1
E$ ds 32 ; the longest string
P ds 32+1
X$1 ds 1+4 ; premier mot saisi
X$2 ds 1+4 ; deuxi<78>me mot saisi
X$3 ds 1+4 ; troisi<73>me mot saisi
FIN_DATA

Binary file not shown.