[C decompilation] [th02] First set of sound driver calls

This commit is contained in:
nmlgc 2015-03-04 02:39:36 +01:00
parent 404044f32b
commit ed0437f80e
13 changed files with 160 additions and 143 deletions

View File

@ -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 @&&|
$**
|

View File

@ -19,3 +19,4 @@ typedef enum {
} kaja_func_t;
#define PMD 0x60
#define MMD 0x61

15
th02/main_02.c Normal file
View File

@ -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"

13
th02/maine_02.c Normal file
View File

@ -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"

View File

@ -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"

17
th02/snd/delaymea.c Normal file
View File

@ -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);
}

12
th02/snd/kajafunc.c Normal file
View File

@ -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;
}

45
th02/snd/se.c Normal file
View File

@ -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;
}
}
}

10
th02/snd/se_data.c Normal file
View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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?