mirror of https://github.com/nmlgc/ReC98.git
[C decompilation] [th02] First set of sound driver calls
This commit is contained in:
parent
404044f32b
commit
ed0437f80e
|
@ -44,7 +44,12 @@ bin\th02\op.exe: bin\th02\op.obj th02\op_02.c th02\op_03.c th02\op_04.c th02\op_
|
|||
$**
|
||||
|
|
||||
|
||||
bin\th02\maine.exe: bin\th02\maine.obj th02\maine_03.c th02\maine_04.c th02\maine_05.c
|
||||
bin\th02\main.exe: bin\th02\main.obj th02\main_02.c
|
||||
$(CC) $(CFLAGS) -ml -DGAME=2 -nbin\th02\ -eMAIN.EXE @&&|
|
||||
$**
|
||||
|
|
||||
|
||||
bin\th02\maine.exe: bin\th02\maine.obj th02\maine_02.c th02\maine_03.c th02\maine_04.c th02\maine_05.c
|
||||
$(CC) $(CFLAGS) -ml -3 -Z -DGAME=2 -nbin\th02\ -eMAINE.EXE @&&|
|
||||
$**
|
||||
|
|
||||
|
|
|
@ -19,3 +19,4 @@ typedef enum {
|
|||
} kaja_func_t;
|
||||
|
||||
#define PMD 0x60
|
||||
#define MMD 0x61
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
/* ReC98
|
||||
* -----
|
||||
* Code segment #2 of TH02's MAIN.EXE
|
||||
*/
|
||||
|
||||
#include "th02/th02.h"
|
||||
|
||||
extern char snd_active;
|
||||
|
||||
#define frame_delay_2 frame_delay
|
||||
|
||||
#include "th02/snd/kajafunc.c"
|
||||
#include "th02/snd/delaymea.c"
|
||||
#pragma codestring "\x00"
|
||||
#include "th02/snd/se.c"
|
|
@ -0,0 +1,13 @@
|
|||
/* ReC98
|
||||
* -----
|
||||
* Code segment #2 of TH02's MAINE.EXE
|
||||
*/
|
||||
|
||||
#include "th02/th02.h"
|
||||
|
||||
extern char snd_active;
|
||||
|
||||
#define frame_delay_2 frame_delay
|
||||
|
||||
#include "th02/snd/kajafunc.c"
|
||||
#include "th02/snd/delaymea.c"
|
10
th02/op_02.c
10
th02/op_02.c
|
@ -5,4 +5,14 @@
|
|||
|
||||
#include "th02/th02.h"
|
||||
|
||||
char snd_active = 0;
|
||||
char snd_unused = 0;
|
||||
|
||||
extern char snd_midi_active;
|
||||
|
||||
#include "th02/snd/se_data.c"
|
||||
|
||||
#include "th02/snd/kajafunc.c"
|
||||
#include "th02/snd/delaymea.c"
|
||||
#include "th02/snd/se.c"
|
||||
#include "th02/hardware/frmdely1.c"
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
void snd_delay_until_measure(int measure)
|
||||
{
|
||||
if(!snd_active) {
|
||||
frame_delay_2(100);
|
||||
return;
|
||||
}
|
||||
do {
|
||||
frame_delay_2(1);
|
||||
_AH = KAJA_GET_SONG_MEASURE;
|
||||
if(snd_midi_active != 1) {
|
||||
geninterrupt(PMD);
|
||||
} else {
|
||||
_DX = 192;
|
||||
geninterrupt(MMD);
|
||||
}
|
||||
} while(_AX < measure);
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
int snd_kaja_func(kaja_func_t ax)
|
||||
{
|
||||
if(snd_active) {
|
||||
_AX = ax;
|
||||
if(snd_midi_active != 1) {
|
||||
geninterrupt(PMD);
|
||||
} else {
|
||||
geninterrupt(MMD);
|
||||
}
|
||||
}
|
||||
return _AX;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
extern char snd_fm_possible;
|
||||
|
||||
extern unsigned char snd_se_playing;
|
||||
extern unsigned char snd_se_priorities[];
|
||||
extern unsigned char snd_se_priority_frames[];
|
||||
extern unsigned char snd_se_frame;
|
||||
|
||||
#pragma option -k-
|
||||
|
||||
void snd_se_reset(void)
|
||||
{
|
||||
snd_se_frame = 0;
|
||||
snd_se_playing = 0xFF;
|
||||
}
|
||||
|
||||
#pragma codestring "\x90"
|
||||
|
||||
void snd_se_play(int new_se)
|
||||
{
|
||||
if(!snd_fm_possible) {
|
||||
return;
|
||||
}
|
||||
if(snd_se_playing == 0xFF) {
|
||||
snd_se_playing = new_se;
|
||||
} else if(snd_se_priorities[snd_se_playing] <= snd_se_priorities[new_se]) {
|
||||
snd_se_playing = new_se;
|
||||
snd_se_frame = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void snd_se_update(void)
|
||||
{
|
||||
if(snd_fm_possible && snd_se_playing != 0xFF) {
|
||||
if(snd_se_frame == 0) __asm {
|
||||
mov ah, PMD_SE_PLAY
|
||||
mov al, snd_se_playing
|
||||
int PMD
|
||||
}
|
||||
snd_se_frame++;
|
||||
if(snd_se_priority_frames[snd_se_playing] < snd_se_frame) {
|
||||
snd_se_frame = 0;
|
||||
snd_se_playing = -1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#define SE_COUNT 33
|
||||
|
||||
unsigned char snd_se_playing = -1;
|
||||
unsigned char snd_se_priorities[SE_COUNT] = {
|
||||
0, 0, 32, 9, 2, 16, 5, 6, 48, 8, 9, 5, 16, 10, 17, 12, 32, 32, 16
|
||||
};
|
||||
unsigned char snd_se_priority_frames[SE_COUNT] = {
|
||||
0, 0, 36, 16, 4, 16, 8, 10, 48, 80, 24, 17, 11, 4, 80, 16, 48, 74, 32
|
||||
};
|
||||
unsigned char snd_se_frame = 0;
|
|
@ -123,14 +123,14 @@ void pascal frame_delay_2(int frames);
|
|||
extern char snd_midi_active;
|
||||
extern char snd_midi_possible;
|
||||
|
||||
void snd_kaja_func(kaja_func_t func);
|
||||
int snd_kaja_func(kaja_func_t func);
|
||||
|
||||
#define SND_LOAD_SONG (KAJA_GET_SONG_ADDRESS << 8)
|
||||
|
||||
void snd_load(const char *fn, int func);
|
||||
|
||||
void snd_se_reset(void);
|
||||
void snd_se_play(unsigned char se);
|
||||
void snd_se_play(int new_se);
|
||||
void snd_se_update(void);
|
||||
|
||||
// Music Room
|
||||
|
|
|
@ -10127,45 +10127,10 @@ sub_F913 endp
|
|||
|
||||
include th02/formats/pi_slot_palette_apply.asm
|
||||
include th02/formats/pi_slot_put.asm
|
||||
include th02/hardware/snd_kaja_func.asm
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
push bp
|
||||
mov bp, sp
|
||||
cmp _snd_active, 0
|
||||
jnz short loc_FA25
|
||||
push 64h ; 'd'
|
||||
nopcall frame_delay
|
||||
pop bp
|
||||
retf
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_FA25:
|
||||
push 1
|
||||
nopcall frame_delay
|
||||
mov ah, KAJA_GET_SONG_MEASURE
|
||||
cmp _snd_midi_active, 1
|
||||
jz short loc_FA39
|
||||
int 60h ; - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE
|
||||
; BX = handle
|
||||
; Return: CF set on error, DH = error code
|
||||
; CF clear if successful
|
||||
jmp short loc_FA3E
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_FA39:
|
||||
mov dx, 0C0h
|
||||
int 61h ; reserved for user interrupt
|
||||
|
||||
loc_FA3E:
|
||||
cmp ax, [bp+6]
|
||||
jb short loc_FA25
|
||||
pop bp
|
||||
retf
|
||||
; ---------------------------------------------------------------------------
|
||||
db 0
|
||||
|
||||
include th02/hardware/snd_se.asm
|
||||
extern _snd_kaja_func:proc
|
||||
extern _snd_se_reset:proc
|
||||
extern _snd_se_play:proc
|
||||
extern _snd_se_update:proc
|
||||
main_02_TEXT ends
|
||||
|
||||
; ===========================================================================
|
||||
|
@ -35015,6 +34980,7 @@ byte_1E301 db 3
|
|||
byte_1E302 db 0
|
||||
db 0
|
||||
include th02/formats/pfopen[data].asm
|
||||
public _snd_active
|
||||
_snd_active db 0
|
||||
db 0
|
||||
byte_1E30C db 1
|
||||
|
|
|
@ -927,7 +927,7 @@ sub_9AD4 proc near
|
|||
push 4
|
||||
call palette_white_in
|
||||
push 5
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
mov si, 0A0h
|
||||
jmp short loc_9B5C
|
||||
|
@ -2314,7 +2314,7 @@ var_4 = byte ptr -4
|
|||
push si
|
||||
push di
|
||||
push 6
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
xor si, si
|
||||
jmp short loc_A920
|
||||
|
@ -2338,7 +2338,7 @@ loc_A920:
|
|||
call sub_B200
|
||||
add sp, 0Ah
|
||||
push 8
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
mov si, 0B8h
|
||||
jmp short loc_A992
|
||||
|
@ -2374,7 +2374,7 @@ loc_A992:
|
|||
cmp si, 170h
|
||||
jl short loc_A947
|
||||
push 9
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
mov byte_F02A, 2Fh ; '/'
|
||||
push 1B000C0h
|
||||
|
@ -2384,7 +2384,7 @@ loc_A992:
|
|||
push 0Ch
|
||||
call sub_9643
|
||||
push 0Dh
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
mov dx, 0A6h ; '¦'
|
||||
mov al, 1
|
||||
|
@ -2409,7 +2409,7 @@ loc_A992:
|
|||
call sub_B200
|
||||
add sp, 0Ah
|
||||
push 11h
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push ds
|
||||
push offset aEd06b_rgb ; "ed06b.rgb"
|
||||
|
@ -2420,7 +2420,7 @@ loc_A992:
|
|||
push 29h ; ')'
|
||||
call rotrect
|
||||
push 15h
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push 200064h
|
||||
push 3
|
||||
|
@ -2443,7 +2443,7 @@ loc_A992:
|
|||
mov al, 0
|
||||
out dx, al
|
||||
push 19h
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
call sub_A8A4
|
||||
push ds
|
||||
|
@ -2473,7 +2473,7 @@ loc_A992:
|
|||
push 29h ; ')'
|
||||
call rotrect
|
||||
push 1Dh
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push ds
|
||||
push offset aEd07b_rgb ; "ed07b.rgb"
|
||||
|
@ -2484,7 +2484,7 @@ loc_A992:
|
|||
push 0E9h
|
||||
call rotrect
|
||||
push 21h ; '!'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push 200064h
|
||||
push 2
|
||||
|
@ -2494,7 +2494,7 @@ loc_A992:
|
|||
push 0E9h
|
||||
call rotrect
|
||||
push 25h ; '%'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
call sub_A8A4
|
||||
push ds
|
||||
|
@ -2520,7 +2520,7 @@ loc_A992:
|
|||
mov al, 0
|
||||
out dx, al
|
||||
push 29h ; ')'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
call _pi_slot_palette_apply stdcall, 0
|
||||
pop cx
|
||||
|
@ -2530,7 +2530,7 @@ loc_A992:
|
|||
push 0E9h
|
||||
call rotrect
|
||||
push 2Dh ; '-'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push ds
|
||||
push offset aEd08a_rgb ; "ed08a.rgb"
|
||||
|
@ -2541,7 +2541,7 @@ loc_A992:
|
|||
push 29h ; ')'
|
||||
call rotrect
|
||||
push 31h ; '1'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
call sub_A8A4
|
||||
push ds
|
||||
|
@ -2583,7 +2583,7 @@ loc_A992:
|
|||
push 29h ; ')'
|
||||
call rotrect
|
||||
push 35h ; '5'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push ds
|
||||
push offset aEd08c_rgb ; "ed08c.rgb"
|
||||
|
@ -2594,7 +2594,7 @@ loc_A992:
|
|||
push 29h ; ')'
|
||||
call rotrect
|
||||
push 39h ; '9'
|
||||
call sub_B855
|
||||
call _snd_delay_until_measure
|
||||
pop cx
|
||||
push 4
|
||||
call palette_black_out
|
||||
|
@ -3548,50 +3548,8 @@ sub_B756 endp
|
|||
|
||||
include th02/formats/pi_slot_palette_apply.asm
|
||||
include th02/formats/pi_slot_put.asm
|
||||
include th02/hardware/snd_kaja_func.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_B855 proc far
|
||||
|
||||
arg_0 = word ptr 6
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
cmp _snd_active, 0
|
||||
jnz short loc_B868
|
||||
push 64h ; 'd'
|
||||
nopcall frame_delay
|
||||
pop bp
|
||||
retf
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_B868:
|
||||
push 1
|
||||
nopcall frame_delay
|
||||
mov ah, KAJA_GET_SONG_MEASURE
|
||||
cmp _snd_midi_active, 1
|
||||
jz short loc_B87C
|
||||
int 60h ; - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE
|
||||
; BX = handle
|
||||
; Return: CF set on error, DH = error code
|
||||
; CF clear if successful
|
||||
jmp short loc_B881
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_B87C:
|
||||
mov dx, 0C0h
|
||||
int 61h ; reserved for user interrupt
|
||||
|
||||
loc_B881:
|
||||
cmp ax, [bp+arg_0]
|
||||
jb short loc_B868
|
||||
pop bp
|
||||
retf
|
||||
sub_B855 endp
|
||||
|
||||
extern _snd_kaja_func:proc
|
||||
extern _snd_delay_until_measure:proc
|
||||
maine_02_TEXT ends
|
||||
|
||||
; ===========================================================================
|
||||
|
@ -3772,6 +3730,7 @@ byte_D70B db 3
|
|||
byte_D70C db 0
|
||||
db 0
|
||||
include th02/formats/pfopen[data].asm
|
||||
public _snd_active
|
||||
_snd_active db 0
|
||||
db 0
|
||||
aUmx db '“Œ•û••–‚.˜^',0
|
||||
|
|
46
th02_op.asm
46
th02_op.asm
|
@ -2339,44 +2339,10 @@ include th02/hardware/snd_pmd_resident.asm
|
|||
include th02/hardware/snd_load.asm
|
||||
include th02/formats/pi_slot_palette_apply.asm
|
||||
include th02/formats/pi_slot_put.asm
|
||||
include th02/hardware/snd_kaja_func.asm
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
push bp
|
||||
mov bp, sp
|
||||
cmp _snd_active, 0
|
||||
jnz short loc_B232
|
||||
push 64h ; 'd'
|
||||
nopcall frame_delay_2
|
||||
pop bp
|
||||
retf
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_B232:
|
||||
push 1
|
||||
nopcall frame_delay_2
|
||||
mov ah, KAJA_GET_SONG_MEASURE
|
||||
cmp _snd_midi_active, 1
|
||||
jz short loc_B246
|
||||
int 60h ; - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE
|
||||
; BX = handle
|
||||
; Return: CF set on error, DH = error code
|
||||
; CF clear if successful
|
||||
jmp short loc_B24B
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_B246:
|
||||
mov dx, 0C0h
|
||||
int 61h ; reserved for user interrupt
|
||||
|
||||
loc_B24B:
|
||||
cmp ax, [bp+6]
|
||||
jb short loc_B232
|
||||
pop bp
|
||||
retf
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
include th02/hardware/snd_se.asm
|
||||
extern _snd_kaja_func:proc
|
||||
extern _snd_se_reset:proc
|
||||
extern _snd_se_play:proc
|
||||
extern _snd_se_update:proc
|
||||
extern FRAME_DELAY:proc
|
||||
op_02_TEXT ends
|
||||
|
||||
|
@ -2482,9 +2448,7 @@ include libs/master.lib/super_entry_bfnt[data].asm
|
|||
include libs/master.lib/superpa[data].asm
|
||||
include th02/formats/pfopen[data].asm
|
||||
aUmx db '“Œ•û••–‚.˜^',0
|
||||
_snd_active db 0
|
||||
db 0
|
||||
include th02/hardware/snd_se[data].asm
|
||||
extern _snd_active:byte
|
||||
extern _rank:byte
|
||||
|
||||
.data?
|
||||
|
|
Loading…
Reference in New Issue