From b7aa7291db836c46a10e85d56ea397b732740e46 Mon Sep 17 00:00:00 2001 From: nmlgc Date: Tue, 26 Aug 2014 06:07:19 +0200 Subject: [PATCH] [Reduction] #182: bgm_read_sdata [Binary change] Order of 2 relocations in all modified executables. --- ReC98.inc | 7 + libs/master.lib/bgm_read_sdata.asm | 226 +++++++++++++++++++++++++++++ th04_main.asm | 183 +---------------------- th04_maine.asm | 183 +---------------------- th04_op.asm | 183 +---------------------- th05_main.asm | 183 +---------------------- th05_maine.asm | 183 +---------------------- th05_op.asm | 183 +---------------------- 8 files changed, 245 insertions(+), 1086 deletions(-) create mode 100644 libs/master.lib/bgm_read_sdata.asm diff --git a/ReC98.inc b/ReC98.inc index 85715d28..6cb4b1f0 100644 --- a/ReC98.inc +++ b/ReC98.inc @@ -8,6 +8,13 @@ include libs/master.lib/func.inc include libs/master.lib/super.inc include libs/master.lib/bgm.inc +; Manually put dseg into DGROUP if we're not tiny. The alternative, renaming +; dseg to _DATA, unfortunately doesn't work because that segment is enforced +; to be 32-bit after specifying .386... +if @model ne 1 + DGROUP group dseg +endif + nopcall macro func if LDATA nop ; PC-98 Touhou compatibility diff --git a/libs/master.lib/bgm_read_sdata.asm b/libs/master.lib/bgm_read_sdata.asm new file mode 100644 index 00000000..0648216b --- /dev/null +++ b/libs/master.lib/bgm_read_sdata.asm @@ -0,0 +1,226 @@ +; master library - BGM +; +; Description: +; EFSファイルを読み込む +; +; Function/Procedures: +; int bgm_read_sdata(const char *fname); +; +; Parameters: +; fname ファイルネーム +; +; Returns: +; BGM_COMPLETE 正常終了 +; BGM_FILE_ERR ファイルがない +; BGM_FORMAT_ERR フォーマットが異常 +; BGM_OVERFLOW メモリが足りない +; +; Binding Target: +; Microsoft-C / Turbo-C / Turbo Pascal +; +; Running Target: +; PC-9801V +; +; Requiring Resources: +; CPU: V30 +; +; Notes: +; +; +; Assembly Language Note: +; +; +; Compiler/Assembler: +; TASM 3.0 +; OPTASM 1.6 +; +; Author: +; femy(淀 文武) : オリジナル・C言語版 +; steelman(千野 裕司) : アセンブリ言語版 +; +; Revision History: +; 93/12/19 Initial: b_r_sdat.asm / master.lib 0.22 <- bgmlibs.lib 1.12 + +MRETURN macro + pop SI + pop DI + leave + ret (DATASIZE*2) + EVEN +endm + +func BGM_READ_SDATA + enter 4,0 + push DI + push SI + + fname = (RETSIZE+1)*2 + + fbuf_seg= -2 + senum = -4 + + ; 指定したファイルがなければファイルエラー +if LDATA + push word ptr [BP+fname+2] +endif + push word ptr [BP+fname] + nopcall DOS_ROPEN + mov SI,AX + cmp SI,FileNotFound + jne short @@OPENED + mov AX,BGM_FILE_ERR + jmp short @@RETURN +@@NOMEM: + mov AX,InsufficientMemory +@@RETURN: + MRETURN + +@@OPENED: + push AX + push 0 + push 0 + push 2 + nopcall DOS_SEEK ; 最後にいく + mov DI,AX ; 長さの下位16bitだけみる + ; 64Kオーバーの動作は予測不能 + push SI + push 0 + push 0 + push 0 + nopcall DOS_SEEK ; 戻る + push DI + nopcall SMEM_WGET + jc short @@NOMEM + mov [BP+fbuf_seg],AX + push SI + push AX + push CX + push DI + nopcall DOS_READ + mov ES,[BP+fbuf_seg] + mov BX,AX + mov byte ptr ES:[BX],255 ; 終わりに0ffhを入れる + push SI + nopcall DOS_CLOSE + + CLD + + ;データセット + mov AX,glb.snum + mov [BP+senum],AX + + mov BX,AX + shl BX,3 ; type SESOUND +; mov AX,word ptr esound[BX].sbuf +; mov word ptr esound[BX].sptr,AX + mov word ptr esound[BX].sptr,0 ; offsetは0のはず + mov AX,word ptr esound[BX].sbuf+2 + mov word ptr esound[BX].sptr+2,AX + + xor DI,DI ; dcnt + xor SI,SI +@@LOOP_TOP: + mov DS,[BP+fbuf_seg] + ASSUME DS: NOTHING +@@TIL_NUMBER: + lodsb + cmp AL,';' + jne short @@NO_COMMENT +@@COMMENT_SKIP: + lodsb + cmp AL,0ffh + je short @@NUMBER_FOUND + cmp AL,0ah ; ';'が来たら改行まで飛ばす + jne short @@COMMENT_SKIP + +@@NO_COMMENT: + cmp AL,'0' + jb short @@L01 + cmp AL,'9' + jbe short @@NUMBER_FOUND +@@L01: + cmp AL,0ffh + jne short @@TIL_NUMBER +@@NUMBER_FOUND: + xor CX,CX ; dat = 0; + + ; 数字が来た + cmp AL,'0' + jb short @@NUMBER_END +@@WHILE_NUMBER: + cmp AL,'9' + ja short @@NUMBER_END + cmp AL,0ffh + je short @@NUMBER_END + + sub AL,'0' + mov DL,AL + mov DH,0 + + mov AX,CX ; CX = CX * 10 + shl AX,2 + add AX,CX + add AX,AX + add AX,DX ; .... + (c - '0') ; + mov CX,AX + lodsb + cmp AL,'0' + jae short @@WHILE_NUMBER +@@NUMBER_END: + + ; 数字が終わった + ; CXに数値が入った + push seg DGROUP + pop DS + ASSUME DS: DGROUP + + cmp AL,0ffh + je short @@LOOP_BREAK + + mov BX,glb.snum + shl BX,3 + mov DX,BX + les BX,esound[BX].sptr + mov ES:[BX],CX ; *esound[glb.senum].sptr = data + mov BX,DX + add word ptr esound[BX].sptr,2 ; esound[glb.senum].sptr++ + + or CX,CX ; dat = SEND? + je short @@DAT_IS_SEND + inc DI ; dcnt + cmp DI,SBUFMAX + jne short @@NOT_SBUFMAX +@@DAT_IS_SEND: + mov BX,glb.snum + shl BX,3 + les BX,esound[BX].sptr + xor DI,DI ; dcnt = 0; + mov ES:[BX],DI ; *esound[glb.senum].sptr = SEND + inc glb.snum + cmp glb.snum,SMAX + je short @@LOOP_BREAK ; break + + ; esound[glb.senum].sptr = esound[glb.senum].sbuf ; + mov BX,glb.snum + shl BX,3 +; mov CX,word ptr esound[BX].sbuf +; mov word ptr esound[BX].sptr,CX + mov word ptr esound[BX].sptr,0 ; offsetは0のはず + mov CX,word ptr esound[BX].sbuf+2 + mov word ptr esound[BX].sptr+2,CX +@@NOT_SBUFMAX: + cmp AL,0ffh + je short @@LOOP_BREAK + jmp @@LOOP_TOP +@@LOOP_BREAK: + + mov AX,glb.snum + cmp [BP+senum],AX + mov AX,BGM_FORMAT_ERR + je short @@FORMERR ; 一つも増えなかったなら失敗 + xor AX,AX ; BGM_COMPLETE +@@FORMERR: + push word ptr [BP+fbuf_seg] + nopcall SMEM_RELEASE + MRETURN +endfunc diff --git a/th04_main.asm b/th04_main.asm index 7b949fe4..e79f6b5d 100644 --- a/th04_main.asm +++ b/th04_main.asm @@ -5920,186 +5920,7 @@ sub_3680 endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_3878 proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_389E - mov ax, 0FFFEh - jmp short loc_3898 -; --------------------------------------------------------------------------- - -loc_3895: - mov ax, 0FFF8h - -loc_3898: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_389E: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_3895 - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+36A2h], 0 - mov ax, [bx+36A8h] - mov [bx+36A4h], ax - xor di, di - xor si, si - -loc_38F9: - mov ds, [bp+var_2] - -loc_38FC: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_390A - -loc_3901: - lodsb - cmp al, 0FFh - jz short loc_3916 - cmp al, 0Ah - jnz short loc_3901 - -loc_390A: - cmp al, 30h ; '0' - jb short loc_3912 - cmp al, 39h ; '9' - jbe short loc_3916 - -loc_3912: - cmp al, 0FFh - jnz short loc_38FC - -loc_3916: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_393C - -loc_391C: - cmp al, 39h ; '9' - ja short loc_393C - cmp al, 0FFh - jz short loc_393C - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_391C - -loc_393C: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_399D - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+36A2h] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+36A2h], 2 - or cx, cx - jz short loc_3966 - inc di - cmp di, 100h - jnz short loc_3996 - -loc_3966: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+36A2h] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_399D - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+36A2h], 0 - mov cx, [bx+36A8h] - mov [bx+36A4h], cx - -loc_3996: - cmp al, 0FFh - jz short loc_399D - jmp loc_38F9 -; --------------------------------------------------------------------------- - -loc_399D: - ; sub_3878+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_39AA - xor ax, ax - -loc_39AA: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_3878 endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -36664,7 +36485,7 @@ loc_134B2: mov byte ptr [si+3966h], 73h ; 's' push ds push offset unk_24CA4 - call sub_3878 + call bgm_read_sdata jmp loc_1357B ; --------------------------------------------------------------------------- diff --git a/th04_maine.asm b/th04_maine.asm index 17f4b447..303bb6e9 100644 --- a/th04_maine.asm +++ b/th04_maine.asm @@ -2977,186 +2977,7 @@ sub_2CFC endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_2E94 proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_2EBA - mov ax, 0FFFEh - jmp short loc_2EB4 -; --------------------------------------------------------------------------- - -loc_2EB1: - mov ax, 0FFF8h - -loc_2EB4: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_2EBA: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_2EB1 - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+1AB2h], 0 - mov ax, [bx+1AB8h] - mov [bx+1AB4h], ax - xor di, di - xor si, si - -loc_2F15: - mov ds, [bp+var_2] - -loc_2F18: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_2F26 - -loc_2F1D: - lodsb - cmp al, 0FFh - jz short loc_2F32 - cmp al, 0Ah - jnz short loc_2F1D - -loc_2F26: - cmp al, 30h ; '0' - jb short loc_2F2E - cmp al, 39h ; '9' - jbe short loc_2F32 - -loc_2F2E: - cmp al, 0FFh - jnz short loc_2F18 - -loc_2F32: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_2F58 - -loc_2F38: - cmp al, 39h ; '9' - ja short loc_2F58 - cmp al, 0FFh - jz short loc_2F58 - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_2F38 - -loc_2F58: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_2FB9 - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+1AB2h] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+1AB2h], 2 - or cx, cx - jz short loc_2F82 - inc di - cmp di, 100h - jnz short loc_2FB2 - -loc_2F82: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+1AB2h] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_2FB9 - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+1AB2h], 0 - mov cx, [bx+1AB8h] - mov [bx+1AB4h], cx - -loc_2FB2: - cmp al, 0FFh - jz short loc_2FB9 - jmp loc_2F15 -; --------------------------------------------------------------------------- - -loc_2FB9: - ; sub_2E94+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_2FC6 - xor ax, ax - -loc_2FC6: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_2E94 endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -21255,7 +21076,7 @@ loc_D12E: mov byte ptr [si+1B34h], 73h ; 's' push ds push offset unk_10062 - call sub_2E94 + call bgm_read_sdata jmp loc_D1F7 ; --------------------------------------------------------------------------- diff --git a/th04_op.asm b/th04_op.asm index 1a4be35e..06a1cfd1 100644 --- a/th04_op.asm +++ b/th04_op.asm @@ -3723,186 +3723,7 @@ sub_349A endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_3632 proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_3658 - mov ax, 0FFFEh - jmp short loc_3652 -; --------------------------------------------------------------------------- - -loc_364F: - mov ax, 0FFF8h - -loc_3652: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_3658: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_364F - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+2680h], 0 - mov ax, [bx+2686h] - mov [bx+2682h], ax - xor di, di - xor si, si - -loc_36B3: - mov ds, [bp+var_2] - -loc_36B6: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_36C4 - -loc_36BB: - lodsb - cmp al, 0FFh - jz short loc_36D0 - cmp al, 0Ah - jnz short loc_36BB - -loc_36C4: - cmp al, 30h ; '0' - jb short loc_36CC - cmp al, 39h ; '9' - jbe short loc_36D0 - -loc_36CC: - cmp al, 0FFh - jnz short loc_36B6 - -loc_36D0: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_36F6 - -loc_36D6: - cmp al, 39h ; '9' - ja short loc_36F6 - cmp al, 0FFh - jz short loc_36F6 - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_36D6 - -loc_36F6: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_3757 - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+2680h] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+2680h], 2 - or cx, cx - jz short loc_3720 - inc di - cmp di, 100h - jnz short loc_3750 - -loc_3720: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+2680h] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_3757 - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+2680h], 0 - mov cx, [bx+2686h] - mov [bx+2682h], cx - -loc_3750: - cmp al, 0FFh - jz short loc_3757 - jmp loc_36B3 -; --------------------------------------------------------------------------- - -loc_3757: - ; sub_3632+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_3764 - xor ax, ax - -loc_3764: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_3632 endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -22752,7 +22573,7 @@ loc_DDE6: mov byte ptr [si+2702h], 73h ; 's' push ds push offset unk_11A40 - call sub_3632 + call bgm_read_sdata jmp loc_DEAF ; --------------------------------------------------------------------------- diff --git a/th05_main.asm b/th05_main.asm index 07e381b6..3549ab5e 100644 --- a/th05_main.asm +++ b/th05_main.asm @@ -5829,186 +5829,7 @@ sub_367A endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_3812 proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_3838 - mov ax, 0FFFEh - jmp short loc_3832 -; --------------------------------------------------------------------------- - -loc_382F: - mov ax, 0FFF8h - -loc_3832: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_3838: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_382F - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+2FE8h], 0 - mov ax, [bx+2FEEh] - mov [bx+2FEAh], ax - xor di, di - xor si, si - -loc_3893: - mov ds, [bp+var_2] - -loc_3896: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_38A4 - -loc_389B: - lodsb - cmp al, 0FFh - jz short loc_38B0 - cmp al, 0Ah - jnz short loc_389B - -loc_38A4: - cmp al, 30h ; '0' - jb short loc_38AC - cmp al, 39h ; '9' - jbe short loc_38B0 - -loc_38AC: - cmp al, 0FFh - jnz short loc_3896 - -loc_38B0: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_38D6 - -loc_38B6: - cmp al, 39h ; '9' - ja short loc_38D6 - cmp al, 0FFh - jz short loc_38D6 - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_38B6 - -loc_38D6: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_3937 - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+2FE8h] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+2FE8h], 2 - or cx, cx - jz short loc_3900 - inc di - cmp di, 100h - jnz short loc_3930 - -loc_3900: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+2FE8h] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_3937 - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+2FE8h], 0 - mov cx, [bx+2FEEh] - mov [bx+2FEAh], cx - -loc_3930: - cmp al, 0FFh - jz short loc_3937 - jmp loc_3893 -; --------------------------------------------------------------------------- - -loc_3937: - ; sub_3812+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_3944 - xor ax, ax - -loc_3944: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_3812 endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -37801,7 +37622,7 @@ arg_2 = dword ptr 8 call sub_3D4E push ds push offset unk_23A48 - call sub_3812 + call bgm_read_sdata jmp short loc_14F62 ; --------------------------------------------------------------------------- diff --git a/th05_maine.asm b/th05_maine.asm index 43c2742e..ece1deac 100644 --- a/th05_maine.asm +++ b/th05_maine.asm @@ -3423,186 +3423,7 @@ sub_2E82 endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_301A proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_3040 - mov ax, 0FFFEh - jmp short loc_303A -; --------------------------------------------------------------------------- - -loc_3037: - mov ax, 0FFF8h - -loc_303A: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_3040: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_3037 - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+2726h], 0 - mov ax, [bx+272Ch] - mov [bx+2728h], ax - xor di, di - xor si, si - -loc_309B: - mov ds, [bp+var_2] - -loc_309E: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_30AC - -loc_30A3: - lodsb - cmp al, 0FFh - jz short loc_30B8 - cmp al, 0Ah - jnz short loc_30A3 - -loc_30AC: - cmp al, 30h ; '0' - jb short loc_30B4 - cmp al, 39h ; '9' - jbe short loc_30B8 - -loc_30B4: - cmp al, 0FFh - jnz short loc_309E - -loc_30B8: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_30DE - -loc_30BE: - cmp al, 39h ; '9' - ja short loc_30DE - cmp al, 0FFh - jz short loc_30DE - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_30BE - -loc_30DE: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_313F - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+2726h] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+2726h], 2 - or cx, cx - jz short loc_3108 - inc di - cmp di, 100h - jnz short loc_3138 - -loc_3108: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+2726h] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_313F - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+2726h], 0 - mov cx, [bx+272Ch] - mov [bx+2728h], cx - -loc_3138: - cmp al, 0FFh - jz short loc_313F - jmp loc_309B -; --------------------------------------------------------------------------- - -loc_313F: - ; sub_301A+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_314C - xor ax, ax - -loc_314C: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_301A endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -25039,7 +24860,7 @@ arg_2 = dword ptr 8 call sub_3556 push ds push offset unk_128A6 - call sub_301A + call bgm_read_sdata jmp short loc_EE12 ; --------------------------------------------------------------------------- diff --git a/th05_op.asm b/th05_op.asm index 5ba2bd84..5efc663f 100644 --- a/th05_op.asm +++ b/th05_op.asm @@ -2843,186 +2843,7 @@ sub_2CBA endp include libs/master.lib/bgm_bell_org.asm include libs/master.lib/bgm_mget.asm - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_2E52 proc far - -var_4 = word ptr -4 -var_2 = word ptr -2 -arg_0 = word ptr 6 -arg_2 = word ptr 8 - - enter 4, 0 - push di - push si - push [bp+arg_2] - push [bp+arg_0] - nop - call dos_ropen - mov si, ax - cmp si, 0FFFEh - jnz short loc_2E78 - mov ax, 0FFFEh - jmp short loc_2E72 -; --------------------------------------------------------------------------- - -loc_2E6F: - mov ax, 0FFF8h - -loc_2E72: - pop si - pop di - leave - retf 4 -; --------------------------------------------------------------------------- - -loc_2E78: - push ax - push 0 - push 0 - push 2 - nopcall dos_seek - mov di, ax - push si - push 0 - push 0 - push 0 - nopcall dos_seek - push di - nop - call smem_wget - jb short loc_2E6F - mov [bp+var_2], ax - push si - push ax - push cx - push di - nopcall dos_read - mov es, [bp+var_2] - mov bx, ax - mov byte ptr es:[bx], 0FFh - push si - nop - call dos_close - cld - mov ax, glb.snum - mov [bp+var_4], ax - mov bx, ax - shl bx, 3 - mov word ptr [bx+37AAh], 0 - mov ax, [bx+37B0h] - mov [bx+37ACh], ax - xor di, di - xor si, si - -loc_2ED3: - mov ds, [bp+var_2] - -loc_2ED6: - lodsb - cmp al, 3Bh ; ';' - jnz short loc_2EE4 - -loc_2EDB: - lodsb - cmp al, 0FFh - jz short loc_2EF0 - cmp al, 0Ah - jnz short loc_2EDB - -loc_2EE4: - cmp al, 30h ; '0' - jb short loc_2EEC - cmp al, 39h ; '9' - jbe short loc_2EF0 - -loc_2EEC: - cmp al, 0FFh - jnz short loc_2ED6 - -loc_2EF0: - xor cx, cx - cmp al, 30h ; '0' - jb short loc_2F16 - -loc_2EF6: - cmp al, 39h ; '9' - ja short loc_2F16 - cmp al, 0FFh - jz short loc_2F16 - sub al, 30h ; '0' - mov dl, al - mov dh, 0 - mov ax, cx - shl ax, 2 - add ax, cx - add ax, ax - add ax, dx - mov cx, ax - lodsb - cmp al, 30h ; '0' - jnb short loc_2EF6 - -loc_2F16: - push seg dseg - pop ds - cmp al, 0FFh - jz short loc_2F77 - mov bx, glb.snum - shl bx, 3 - mov dx, bx - les bx, [bx+37AAh] - mov es:[bx], cx - mov bx, dx - add word ptr [bx+37AAh], 2 - or cx, cx - jz short loc_2F40 - inc di - cmp di, 100h - jnz short loc_2F70 - -loc_2F40: - mov bx, glb.snum - shl bx, 3 - les bx, [bx+37AAh] - xor di, di - mov es:[bx], di - inc glb.snum - cmp glb.snum, 10h - jz short loc_2F77 - mov bx, glb.snum - shl bx, 3 - mov word ptr [bx+37AAh], 0 - mov cx, [bx+37B0h] - mov [bx+37ACh], cx - -loc_2F70: - cmp al, 0FFh - jz short loc_2F77 - jmp loc_2ED3 -; --------------------------------------------------------------------------- - -loc_2F77: - ; sub_2E52+107j ... - mov ax, glb.snum - cmp [bp+var_4], ax - mov ax, 0FFF5h - jz short loc_2F84 - xor ax, ax - -loc_2F84: - push [bp+var_2] - nop - call smem_release - pop si - pop di - leave - retf 4 -sub_2E52 endp - +include libs/master.lib/bgm_read_sdata.asm ; =============== S U B R O U T I N E ======================================= @@ -22634,7 +22455,7 @@ arg_2 = dword ptr 8 call sub_338E push ds push offset unk_1281E - call sub_2E52 + call bgm_read_sdata jmp short loc_DC70 ; ---------------------------------------------------------------------------