; ; +-------------------------------------------------------------------------+ ; | This file has been generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2009 by Hex-Rays, | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : AD4E53E1F1A042FBDA82F86B9BD6728C ; File Name : th01/OP.EXE ; Format : MS-DOS executable (EXE) ; Base Address: 0h Range: 0h-14040h Loaded length: 13418h ; Entry Point : 0:0 ; OS type : MS DOS ; Application type: Executable 16bit .286 ; Force the .model directive to create 16-bit default segments... .model large __LARGE__ equ 1 .386 ; ... then switch to what we actually need. ; And yes, we can't move this to an include file for some reason. include ReC98.inc include th01/th01.inc include libs/BorlandC/regs.inc option emulator extern @$bdla$qnv:proc extern @$bnwa$qui:proc extern FTOL@:proc extern SCOPY@:proc extern __fgetc:proc extern __mbcjmstojis:proc extern __mbctype:byte extern __mscjmstojis:proc extern __setargv__:proc ; main() needs both to be set extern __setenvp__:proc extern _atol:proc extern _close:proc extern _delay:proc extern _execl:proc extern _exit:proc extern _farfree:proc extern _farmalloc:proc extern _fclose:proc extern _filelength:proc extern _fopen:proc extern _fputc:proc extern _fputs:proc extern _fread:proc extern _getvect:proc extern _int86:proc extern _intdosx:proc extern _memcmp:proc extern _memcpy:proc extern _memset:proc extern _open:proc extern _printf:proc extern _segread:proc extern _setvect:proc extern _strcmp:proc extern _toupper:proc extern _vsprintf:proc ; =========================================================================== ; Segment type: Pure code _TEXT segment word public 'CODE' use16 assume cs:_TEXT assume es:nothing, ds:DGROUP, fs:nothing, gs:nothing include libs/piloadc/piloadc.asm include libs/master.lib/graph_400line.asm include libs/master.lib/graph_clear.asm include libs/master.lib/graph_show.asm include libs/master.lib/graph_start.asm include libs/master.lib/palette_show.asm include libs/master.lib/palette_init.asm include libs/master.lib/respal_exist.asm include libs/master.lib/respal_free.asm include libs/master.lib/resdata.asm include libs/master.lib/file_read.asm include libs/master.lib/file_close.asm include libs/master.lib/file_ropen.asm include libs/master.lib/file_seek.asm include libs/master.lib/dos_free.asm include libs/master.lib/keystart.asm include libs/master.lib/keybios.asm include libs/master.lib/dos_ropen.asm include libs/master.lib/egc.asm include libs/master.lib/random.asm _TEXT ends ; --------------------------------------------------------------------------- ; =========================================================================== ; Segment type: Pure code op_01_TEXT segment byte public 'CODE' use16 assume cs:op_01_TEXT ;org 4 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing enter 2, 0 push si push di xor si, si jmp short loc_A1E5 ; --------------------------------------------------------------------------- loc_A1CE: push 190h call @$bnwa$qui pop cx mov bx, si shl bx, 2 mov [bx+118Eh], dx mov [bx+118Ch], ax inc si loc_A1E5: cmp si, 50h ; 'P' jl short loc_A1CE push 4 call _grcg_setcolor_tdw push 1 call _graph_accesspage_func add sp, 4 xor si, si jmp short loc_A22A ; --------------------------------------------------------------------------- loc_A1FF: xor di, di mov [bp-2], si jmp short loc_A223 ; --------------------------------------------------------------------------- loc_A206: les bx, _VRAM_PLANE_B add bx, [bp-2] mov al, es:[bx] mov bx, si shl bx, 2 les bx, [bx+118Ch] add bx, di mov es:[bx], al inc di add word ptr [bp-2], 50h ; 'P' loc_A223: cmp di, 190h jl short loc_A206 inc si loc_A22A: cmp si, 50h ; 'P' jl short loc_A1FF call _grcg_off_func push 0 call _graph_accesspage_func pop cx pop di pop si leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A240 proc far _ptr = byte ptr -12h var_B = byte ptr -0Bh var_A = byte ptr -0Ah var_9 = byte ptr -9 var_8 = byte ptr -8 stream = dword ptr -6 var_1 = byte ptr -1 enter 12h, 0 mov [bp+var_1], 0 push ds push offset aRB ; "rb" push ds push offset path ; "reiiden.cfg" call _fopen add sp, 8 mov word ptr [bp+stream+2], dx mov word ptr [bp+stream], ax or ax, dx jnz short loc_A266 loc_A262: mov [bp+var_1], 1 loc_A266: cmp [bp+var_1], 0 jnz short loc_A2CE pushd [bp+stream] ; stream push 0B0001h ; size push ss lea ax, [bp+_ptr] push ax ; ptr call _fread add sp, 0Ch push 7 ; n push ds push offset s ; "REIIDEN" push ss lea ax, [bp+_ptr] push ax ; s1 call _memcmp add sp, 0Ah or ax, ax jz short loc_A2A8 pushd [bp+stream] ; stream call _fclose add sp, 4 jmp short loc_A262 ; --------------------------------------------------------------------------- loc_A2A8: mov al, [bp+var_B] mov byte ptr word_12320, al mov al, [bp+var_A] mov byte ptr word_12320+1, al mov al, [bp+var_9] mov byte ptr word_12322, al mov al, [bp+var_8] mov byte ptr word_12322+1, al pushd [bp+stream] ; stream call _fclose add sp, 4 leave retf ; --------------------------------------------------------------------------- loc_A2CE: mov byte ptr word_12320, 1 mov byte ptr word_12320+1, 1 mov byte ptr word_12322, 1 mov byte ptr word_12322+1, 2 leave retf sub_A240 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A2E4 proc far stream = dword ptr -6 var_1 = byte ptr -1 enter 6, 0 mov [bp+var_1], 0 push ds push offset aWb ; "wb" push ds push offset path ; "reiiden.cfg" call _fopen add sp, 8 mov word ptr [bp+stream+2], dx mov word ptr [bp+stream], ax or ax, dx jnz short loc_A30A mov [bp+var_1], 1 loc_A30A: cmp [bp+var_1], 0 jnz short locret_A361 pushd [bp+stream] ; stream push ds push offset s ; "REIIDEN" call _fputs pushd [bp+stream] ; stream mov al, byte ptr word_12320 cbw push ax ; c call _fputc pushd [bp+stream] ; stream mov al, byte ptr word_12320+1 cbw push ax ; c call _fputc pushd [bp+stream] ; stream mov al, byte ptr word_12322 cbw push ax ; c call _fputc pushd [bp+stream] ; stream mov al, byte ptr word_12322+1 cbw push ax ; c call _fputc pushd [bp+stream] ; stream call _fclose add sp, 24h locret_A361: leave retf sub_A2E4 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A363 proc far var_30 = byte ptr -30h var_2F = byte ptr -2Fh outregs = REGS ptr -20h inregs = REGS ptr -10h enter 30h, 0 mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 7 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 8 push ss lea ax, [bp+var_30] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 14h test byte ptr [bp+outregs+1], 4 jnz short loc_A3A8 test [bp+var_2F], 8 jz short loc_A3C9 loc_A3A8: cmp word_12334, 0 jnz short loc_A3CF mov al, byte_12325 dec al mov byte_12325, al cbw or ax, ax jge short loc_A3C1 mov byte_12325, 3 loc_A3C1: mov word_12334, 1 jmp short loc_A3CF ; --------------------------------------------------------------------------- loc_A3C9: mov word_12334, 0 loc_A3CF: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 9 push ss lea ax, [bp+var_30] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 20h jnz short loc_A3F7 test [bp+var_2F], 8 jz short loc_A419 loc_A3F7: cmp word_12336, 0 jnz short loc_A41F mov al, byte_12325 inc al mov byte_12325, al cbw cmp ax, 3 jle short loc_A411 mov byte_12325, 0 loc_A411: mov word_12336, 1 jmp short loc_A41F ; --------------------------------------------------------------------------- loc_A419: mov word_12336, 0 loc_A41F: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 3 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 10h jz short loc_A448 mov byte_12327, 1 jmp short loc_A44D ; --------------------------------------------------------------------------- loc_A448: mov byte_12327, 0 loc_A44D: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 5 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 2 jz short loc_A476 mov byte_12328, 1 jmp short loc_A47B ; --------------------------------------------------------------------------- loc_A476: mov byte_12328, 0 loc_A47B: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 0 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 1 jz short loc_A4A4 mov byte_12329, 1 leave retf ; --------------------------------------------------------------------------- loc_A4A4: mov byte_12329, 0 leave retf sub_A363 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A4AB proc far var_30 = byte ptr -30h var_2F = byte ptr -2Fh outregs = REGS ptr -20h inregs = REGS ptr -10h enter 30h, 0 mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 7 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 8 push ss lea ax, [bp+var_30] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 14h test byte ptr [bp+outregs+1], 4 jnz short loc_A4F0 test [bp+var_2F], 8 jz short loc_A512 loc_A4F0: cmp word_12339, 0 jnz short loc_A518 mov al, byte_12325 dec al mov byte_12325, al cbw or ax, ax jge short loc_A50A mov al, byte_12338 mov byte_12325, al loc_A50A: mov word_12339, 1 jmp short loc_A518 ; --------------------------------------------------------------------------- loc_A512: mov word_12339, 0 loc_A518: test byte ptr [bp+outregs+1], 8 jnz short loc_A524 test [bp+var_2F], 40h jz short loc_A52B loc_A524: mov byte_12326, 1 jmp short loc_A530 ; --------------------------------------------------------------------------- loc_A52B: mov byte_12326, 0 loc_A530: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 9 push ss lea ax, [bp+var_30] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 20h jnz short loc_A558 test [bp+var_2F], 8 jz short loc_A57F loc_A558: cmp word_1233B, 0 jnz short loc_A585 mov al, byte_12325 inc al mov byte_12325, al cbw mov dl, byte_12338 mov dh, 0 cmp ax, dx jle short loc_A577 mov byte_12325, 0 loc_A577: mov word_1233B, 1 jmp short loc_A585 ; --------------------------------------------------------------------------- loc_A57F: mov word_1233B, 0 loc_A585: test byte ptr [bp+outregs+1], 10h jnz short loc_A591 test [bp+var_2F], 1 jz short loc_A598 loc_A591: mov byte_1232B, 1 jmp short loc_A59D ; --------------------------------------------------------------------------- loc_A598: mov byte_1232B, 0 loc_A59D: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 3 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 10h jz short loc_A5C6 mov byte_12327, 1 jmp short loc_A5CB ; --------------------------------------------------------------------------- loc_A5C6: mov byte_12327, 0 loc_A5CB: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 5 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 2 jz short loc_A5F4 mov byte_12328, 1 jmp short loc_A5F9 ; --------------------------------------------------------------------------- loc_A5F4: mov byte_12328, 0 loc_A5F9: mov byte ptr [bp+inregs+1], 4 mov byte ptr [bp+inregs], 0 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah test byte ptr [bp+outregs+1], 1 jz short loc_A622 mov byte_12329, 1 leave retf ; --------------------------------------------------------------------------- loc_A622: mov byte_12329, 0 leave retf sub_A4AB endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A629 proc far arg_0 = word ptr 6 push bp mov bp, sp push si push di mov ax, [bp+arg_0] shl ax, 6 mov dx, [bp+arg_0] shl dx, 4 add ax, dx mov si, ax push 0Fh call _grcg_setcolor_rmw pop cx xor di, di jmp short loc_A65C ; --------------------------------------------------------------------------- loc_A64A: les bx, _VRAM_PLANE_B add bx, si mov dword ptr es:[bx], 0FFFFFFFFh inc di add si, 4 loc_A65C: cmp di, 14h jl short loc_A64A call _grcg_off_func pop di pop si pop bp retf sub_A629 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A66A proc far var_192 = byte ptr -192h var_2 = word ptr -2 enter 192h, 0 push si push di mov [bp+var_2], 0 xor si, si xor di, di lea ax, [bp+var_192] push ss push ax push ds push offset unk_1233D mov cx, 190h call SCOPY@ jmp short loc_A6F5 ; --------------------------------------------------------------------------- loc_A68D: push 10280h push si push 0 call _egc_copy_rect_1_to_0 add sp, 8 push 10280h push di push 0 call _egc_copy_rect_1_to_0 add sp, 8 loc_A6AF: call IRand mov bx, 190h cwd idiv bx mov si, dx cmp [bp+si+var_192], 0 jnz short loc_A6AF mov [bp+si+var_192], 1 loc_A6C8: call IRand mov bx, 190h cwd idiv bx mov di, dx cmp [bp+di+var_192], 0 jnz short loc_A6C8 mov [bp+di+var_192], 1 push si call sub_A629 pop cx push di call sub_A629 pop cx push 1 call _frame_delay pop cx loc_A6F5: mov ax, [bp+var_2] inc [bp+var_2] cmp ax, 64h ; 'd' jb short loc_A68D push 1 call _graph_accesspage_func pop cx call sub_BB85 push 0 call _graph_accesspage_func pop cx pop di pop si leave retf sub_A66A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A719 proc far push bp mov bp, sp push ds push offset aReimu_mdt ; "reimu.mdt" call _mdrv2_bgm_load add sp, 4 call _mdrv2_bgm_play push 1 call _graph_accesspage_func pop cx push ds push offset aReiiden2_grp ; "REIIDEN2.grp" call sub_DAEC add sp, 4 call _z_palette_black call sub_BB85 push ds push offset aReiiden3_grp ; "REIIDEN3.grp" call sub_DB6F add sp, 4 push 0 call _graph_accesspage_func pop cx call sub_BC8B push 64h ; 'd' call _frame_delay pop cx call sub_A66A pop bp retf sub_A719 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A772 proc far push bp mov bp, sp push 1 call _graph_accesspage_func pop cx call sub_BB85 push 0 call _graph_accesspage_func pop cx push ds push offset aOp_win_grp ; "op_win.grp" call sub_DBAF add sp, 4 call sub_BB85 pop bp retf sub_A772 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A79D proc far push bp mov bp, sp mov al, byte_1232F cbw cmp ax, 1 jnz short loc_A7AE call _resident_free loc_A7AE: call key_end pop bp retf sub_A79D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A7B5 proc far push bp mov bp, sp push si call sub_A2E4 pushd [dword_13418] push word_12322+1 push word_12322 push word_12320+1 push word_12320 call _resident_stuff_set add sp, 0Ch call sub_A79D call _mdrv2_bgm_fade_out_nonblock call game_switch_binary mov al, _mode cbw cmp ax, 2 jnz short loc_A7FC les bx, _resident mov es:[bx+reiidenconfig_t.mode], 1 jmp short loc_A820 ; --------------------------------------------------------------------------- loc_A7FC: mov al, _mode cbw cmp ax, 3 jnz short loc_A810 les bx, _resident mov es:[bx+reiidenconfig_t.mode], 3 jmp short loc_A820 ; --------------------------------------------------------------------------- loc_A810: cmp _mode, 0 jnz short loc_A820 les bx, _resident mov es:[bx+reiidenconfig_t.mode], 0 loc_A820: les bx, _resident mov es:[bx+reiidenconfig_t.route], 0 mov es:[bx+reiidenconfig_t.stage], 0 mov al, byte ptr word_12322+1 add al, 2 mov es:[bx+reiidenconfig_t.rem_lives], al mov es:[bx+reiidenconfig_t.p_value], 0 xor si, si jmp short loc_A867 ; --------------------------------------------------------------------------- loc_A842: mov ax, si add ax, ax les bx, _resident add bx, ax mov es:[bx+reiidenconfig_t.continues_per_scene], 0 mov ax, si shl ax, 2 mov bx, word ptr _resident add bx, ax mov es:[bx+reiidenconfig_t.bonus_per_stage], 0 inc si loc_A867: cmp si, 4 jl short loc_A842 les bx, _resident mov es:[bx+reiidenconfig_t.score_highest], 0 mov es:[bx+reiidenconfig_t.continues_total], 0 mov es:[bx+reiidenconfig_t.end_flag], 0 mov es:[bx+reiidenconfig_t.unused_1], 0 mov es:[bx+reiidenconfig_t.snd_need_init], 1 mov es:[bx+reiidenconfig_t.bullet_speed], -4 pushd 0 push ds push offset aReiiden_0 ; "reiiden" push ds push offset aReiiden_0 ; "reiiden" call _execl add sp, 0Ch pop si pop bp retf sub_A7B5 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A8AD proc far push bp mov bp, sp call sub_A2E4 pushd [dword_13418] push word_12322+1 push word_12322 push word_12320+1 push word_12320 call _resident_stuff_set add sp, 0Ch les bx, _resident cmp es:[bx+reiidenconfig_t.stage], 0 jnz short loc_A8E1 mov ax, seg op_01_TEXT mov es, ax assume es:op_01_TEXT loc_A8E1: call sub_A79D call _mdrv2_bgm_fade_out_nonblock call game_switch_binary les bx, _resident assume es:nothing mov es:[bx+reiidenconfig_t.mode], 0 mov es:[bx+reiidenconfig_t.snd_need_init], 1 mov al, byte ptr word_12322+1 add al, 2 mov es:[bx+reiidenconfig_t.rem_lives], al mov es:[bx+reiidenconfig_t.unused_1], 0 mov es:[bx+reiidenconfig_t.bullet_speed], -4 mov es:[bx+reiidenconfig_t.p_value], 0 pushd 0 push ds push offset s ; "REIIDEN" push ds push offset s ; "REIIDEN" call _execl add sp, 0Ch pop bp retf sub_A8AD endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A92C proc far arg_0 = word ptr 6 push bp mov bp, sp mov ax, [bp+arg_0] mov bx, 70 cwd idiv bx cmp dx, 50 jge short loc_A954 call _graph_putsa_fx c, 244, (2Fh shl 16) or 306, offset aVgvhvsb@vjvdvx, ds ; " HIT KEY" pop bp retf ; --------------------------------------------------------------------------- loc_A954: push 100080h push 13200F4h call _egc_copy_rect_1_to_0 add sp, 8 pop bp retf sub_A92C endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A96A proc far var_14 = byte ptr -14h @@y = word ptr -4 @@x = word ptr -2 arg_0 = word ptr 6 arg_2 = word ptr 8 enter 14h, 0 push si mov si, [bp+arg_0] lea ax, [bp+var_14] push ss push ax push ds push offset off_124CD mov cx, 10h call SCOPY@ mov [bp+@@x], 244 mov ax, si imul ax, 14h add ax, 276 mov [bp+@@y], ax mov bx, si shl bx, 2 lea ax, [bp+var_14] add bx, ax pushd dword ptr ss:[bx] mov ax, [bp+arg_2] or ax, 30h push ax push [bp+@@y] push [bp+@@x] call _graph_putsa_fx add sp, 0Ah pop si leave retf sub_A96A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_A9B9 proc far var_42 = byte ptr -42h var_2E = byte ptr -2Eh var_1E = byte ptr -1Eh var_A = word ptr -0Ah var_8 = byte ptr -8 arg_0 = word ptr 6 arg_2 = word ptr 8 enter 42h, 0 push si push di mov si, [bp+arg_0] lea ax, [bp+var_1E] push ss push ax push ds push offset off_124DD mov cx, 14h call SCOPY@ lea ax, [bp+var_2E] push ss push ax push ds push offset off_124F1 mov cx, 10h call SCOPY@ lea ax, [bp+var_8] push ss push ax push ds push offset off_12501 mov cx, 8 call SCOPY@ lea ax, [bp+var_42] push ss push ax push ds push offset off_12509 mov cx, 14h call SCOPY@ mov di, 0E4h mov ax, si imul ax, 14h add ax, 10Ah mov [bp+var_A], ax push 1000B0h push ax push di call _egc_copy_rect_1_to_0 add sp, 8 or si, si jnz short loc_AA34 mov al, byte ptr word_12320 cbw shl ax, 2 lea dx, [bp+var_2E] jmp short loc_AA54 ; --------------------------------------------------------------------------- loc_AA34: cmp si, 1 jnz short loc_AA45 mov al, byte ptr word_12320+1 cbw shl ax, 2 lea dx, [bp+var_8] jmp short loc_AA54 ; --------------------------------------------------------------------------- loc_AA45: cmp si, 2 jnz short loc_AA83 mov al, byte ptr word_12322+1 cbw shl ax, 2 lea dx, [bp+var_42] loc_AA54: add ax, dx mov bx, ax pushd dword ptr ss:[bx] mov bx, si shl bx, 2 lea ax, [bp+var_1E] add bx, ax pushd dword ptr ss:[bx] ; arglist push ds push offset aSS ; "%s%s" mov ax, [bp+arg_2] or ax, 30h push ax ; int push [bp+var_A] ; int push di ; int call sub_D5F8 add sp, 12h jmp short loc_AAB2 ; --------------------------------------------------------------------------- loc_AA83: cmp si, 3 jz short loc_AA8D cmp si, 4 jnz short loc_AAB2 loc_AA8D: mov bx, si shl bx, 2 lea ax, [bp+var_1E] add bx, ax pushd dword ptr ss:[bx] ; arglist push ds push (offset aSS+2) ; format mov ax, [bp+arg_2] or ax, 30h push ax ; int push [bp+var_A] ; int push di ; int call sub_D5F8 add sp, 0Eh loc_AAB2: pop di pop si leave retf sub_A9B9 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_AAB6 proc far var_46 = byte ptr -46h var_A = word ptr -0Ah var_8 = byte ptr -8 arg_0 = word ptr 6 arg_2 = word ptr 8 enter 46h, 0 push si push di mov si, [bp+arg_0] lea ax, [bp+var_8] push ss push ax push ds push offset off_1251E mov cx, 8 call SCOPY@ lea ax, [bp+var_46] push ss push ax push ds push offset off_12526 mov cx, 3Ch ; '<' call SCOPY@ mov di, 0E4h mov ax, si imul ax, 28h add ax, 11Eh mov [bp+var_A], ax push 1000B0h push ax push di call _egc_copy_rect_1_to_0 add sp, 8 or si, si jnz short loc_AB69 push 1000C0h mov ax, [bp+var_A] add ax, 14h push ax push di call _egc_copy_rect_1_to_0 add sp, 8 mov al, byte_1251D cbw push ax mov bx, si shl bx, 2 lea ax, [bp+var_8] add bx, ax pushd dword ptr ss:[bx] ; arglist push ds push offset aS_2d ; "%s%.2d" mov ax, [bp+arg_2] or ax, 30h push ax ; int push [bp+var_A] ; int push di ; int call sub_D5F8 add sp, 10h mov al, byte_1251D cbw shl ax, 2 lea dx, [bp+var_46] add ax, dx mov bx, ax pushd dword ptr ss:[bx] push ds push (offset aSS+2) mov ax, [bp+arg_2] or ax, 30h push ax mov ax, [bp+var_A] add ax, 14h push ax jmp short loc_AB8A ; --------------------------------------------------------------------------- loc_AB69: cmp si, 1 jnz short loc_AB93 mov bx, si shl bx, 2 lea ax, [bp+var_8] add bx, ax pushd dword ptr ss:[bx] ; arglist push ds push (offset aSS+2) ; format mov ax, [bp+arg_2] or ax, 30h push ax ; int push [bp+var_A] ; int loc_AB8A: push di ; int call sub_D5F8 add sp, 0Eh loc_AB93: pop di pop si leave retf sub_AAB6 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_AB97 proc far push bp mov bp, sp cmp word_12564, 0 jnz short loc_AC04 push 6400B0h push 10A00DCh call _egc_copy_rect_1_to_0 add sp, 8 push 50000h call sub_A96A add sp, 4 push 50001h call sub_A96A add sp, 4 push 50002h call sub_A96A add sp, 4 push 50003h call sub_A96A add sp, 4 push 0Fh mov al, byte_12325 cbw push ax call sub_A96A add sp, 4 mov word_12564, 1 mov al, byte_12325 cbw mov word_12562, ax loc_AC04: mov al, byte_12325 cbw cmp ax, word_12562 jz short loc_AC30 push 5 push word_12562 call sub_A96A add sp, 4 push 0Fh mov al, byte_12325 cbw push ax call sub_A96A add sp, 4 mov al, byte_12325 cbw mov word_12562, ax loc_AC30: cmp byte_12327, 0 jnz short loc_AC3E cmp byte_12328, 0 jz short loc_AC6E loc_AC3E: mov al, byte_12325 cbw mov bx, ax cmp bx, 3 ja short loc_AC6E add bx, bx jmp cs:off_AC7C[bx] loc_AC50: call sub_A7B5 jmp short loc_AC6E ; --------------------------------------------------------------------------- loc_AC56: call sub_A8AD jmp short loc_AC6E ; --------------------------------------------------------------------------- loc_AC5C: mov byte_1232A, 1 mov word_12564, 0 jmp short loc_AC6E ; --------------------------------------------------------------------------- loc_AC69: mov byte_1232C, 1 loc_AC6E: cmp byte_12329, 0 jz short loc_AC7A mov byte_1232C, 1 loc_AC7A: pop bp retf sub_AB97 endp ; --------------------------------------------------------------------------- off_AC7C dw offset loc_AC50 dw offset loc_AC56 dw offset loc_AC5C dw offset loc_AC69 ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_AC84 proc far push bp mov bp, sp cmp word_12566, 0 jnz short loc_ACF9 mov byte_12325, 0 mov word_12568, 0 mov word_12566, 1 mov byte_12338, 4 push 5000B0h push 11400DCh call _egc_copy_rect_1_to_0 add sp, 8 push 0F0000h call sub_A9B9 add sp, 4 push 50001h call sub_A9B9 add sp, 4 push 50002h call sub_A9B9 add sp, 4 push 50003h call sub_A9B9 add sp, 4 push 50004h call sub_A9B9 add sp, 4 loc_ACF9: mov al, byte_12325 cbw cmp ax, word_12568 jz short loc_AD25 push 5 push word_12568 call sub_A9B9 add sp, 4 push 0Fh mov al, byte_12325 cbw push ax call sub_A9B9 add sp, 4 mov al, byte_12325 cbw mov word_12568, ax loc_AD25: mov al, byte_12326 cbw cmp ax, 1 jnz short loc_AD96 cmp word_1256A, 0 jnz short loc_AD9C mov al, byte_12325 cbw or ax, ax jz short loc_AD49 cmp ax, 1 jz short loc_AD5C cmp ax, 2 jz short loc_AD6F jmp short loc_AD80 ; --------------------------------------------------------------------------- loc_AD49: dec byte ptr word_12320 mov al, byte ptr word_12320 cbw or ax, ax jge short loc_AD80 mov byte ptr word_12320, 3 jmp short loc_AD80 ; --------------------------------------------------------------------------- loc_AD5C: dec byte ptr word_12320+1 mov al, byte ptr word_12320+1 cbw or ax, ax jge short loc_AD80 mov byte ptr word_12320+1, 1 jmp short loc_AD80 ; --------------------------------------------------------------------------- loc_AD6F: dec byte ptr word_12322+1 mov al, byte ptr word_12322+1 cbw or ax, ax jge short loc_AD80 mov byte ptr word_12322+1, 4 loc_AD80: push 0Fh mov al, byte_12325 cbw push ax call sub_A9B9 add sp, 4 mov word_1256A, 1 jmp short loc_AD9C ; --------------------------------------------------------------------------- loc_AD96: mov word_1256A, 0 loc_AD9C: mov al, byte_1232B cbw cmp ax, 1 jnz short loc_AE10 cmp word_1256C, 0 jnz short loc_AE16 mov al, byte_12325 cbw or ax, ax jz short loc_ADC0 cmp ax, 1 jz short loc_ADD4 cmp ax, 2 jz short loc_ADE8 jmp short loc_ADFA ; --------------------------------------------------------------------------- loc_ADC0: inc byte ptr word_12320 mov al, byte ptr word_12320 cbw cmp ax, 3 jle short loc_ADFA mov byte ptr word_12320, 0 jmp short loc_ADFA ; --------------------------------------------------------------------------- loc_ADD4: inc byte ptr word_12320+1 mov al, byte ptr word_12320+1 cbw cmp ax, 1 jle short loc_ADFA mov byte ptr word_12320+1, 0 jmp short loc_ADFA ; --------------------------------------------------------------------------- loc_ADE8: inc byte ptr word_12322+1 mov al, byte ptr word_12322+1 cbw cmp ax, 4 jle short loc_ADFA mov byte ptr word_12322+1, 0 loc_ADFA: push 0Fh mov al, byte_12325 cbw push ax call sub_A9B9 add sp, 4 mov word_1256C, 1 jmp short loc_AE16 ; --------------------------------------------------------------------------- loc_AE10: mov word_1256C, 0 loc_AE16: cmp byte_12327, 0 jnz short loc_AE24 cmp byte_12328, 0 jz short loc_AE2D loc_AE24: mov al, byte_12325 cbw cmp ax, 4 jz short loc_AE34 loc_AE2D: cmp byte_12329, 0 jz short loc_AE44 loc_AE34: mov byte_1232A, 3 mov word_12566, 0 mov byte_12325, 2 loc_AE44: cmp byte_12327, 0 jnz short loc_AE52 cmp byte_12328, 0 jz short loc_AE6B loc_AE52: mov al, byte_12325 cbw cmp ax, 3 jnz short loc_AE6B mov byte_1232A, 2 mov word_12566, 0 mov byte_12325, 0 loc_AE6B: pop bp retf sub_AC84 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_AE6D proc far var_3C = byte ptr -3Ch enter 3Ch, 0 lea ax, [bp+var_3C] push ss push ax push ds push offset off_1256E mov cx, 3Ch ; '<' call SCOPY@ call _mdrv2_bgm_stop mov al, byte_1251D cbw shl ax, 2 lea dx, [bp+var_3C] add ax, dx mov bx, ax pushd dword ptr ss:[bx] ; path call _mdrv2_bgm_load add sp, 4 call _mdrv2_bgm_play leave retf sub_AE6D endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_AEA8 proc far push bp mov bp, sp cmp word_125AA, 0 jnz short loc_AF00 mov byte_12325, 0 mov word_125AC, 0 mov word_125AA, 1 mov byte_12327, 0 mov byte_12328, 0 mov byte_12338, 1 push 6400B0h push 10A00DCh call _egc_copy_rect_1_to_0 add sp, 8 push 0F0000h call sub_AAB6 add sp, 4 push 50001h call sub_AAB6 add sp, 4 loc_AF00: mov al, byte_12325 cbw cmp ax, word_125AC jz short loc_AF2C push 5 push word_125AC call sub_AAB6 add sp, 4 push 0Fh mov al, byte_12325 cbw push ax call sub_AAB6 add sp, 4 mov al, byte_12325 cbw mov word_125AC, ax loc_AF2C: mov al, byte_12326 cbw cmp ax, 1 jnz short loc_AF69 cmp word_125AE, 0 jnz short loc_AF6F cmp byte_12325, 0 jnz short loc_AF53 dec byte_1251D cmp byte_1251D, 0 jge short loc_AF53 mov byte_1251D, 0Eh loc_AF53: push 0Fh mov al, byte_12325 cbw push ax call sub_AAB6 add sp, 4 mov word_125AE, 1 jmp short loc_AF6F ; --------------------------------------------------------------------------- loc_AF69: mov word_125AE, 0 loc_AF6F: mov al, byte_1232B cbw cmp ax, 1 jnz short loc_AFAC cmp word_125B0, 0 jnz short loc_AFB2 cmp byte_12325, 0 jnz short loc_AF96 inc byte_1251D cmp byte_1251D, 0Fh jl short loc_AF96 mov byte_1251D, 0 loc_AF96: push 0Fh mov al, byte_12325 cbw push ax call sub_AAB6 add sp, 4 mov word_125B0, 1 jmp short loc_AFB2 ; --------------------------------------------------------------------------- loc_AFAC: mov word_125B0, 0 loc_AFB2: cmp byte_12327, 0 jnz short loc_AFC0 cmp byte_12328, 0 jz short loc_AFC9 loc_AFC0: mov al, byte_12325 cbw cmp ax, 1 jz short loc_AFD0 loc_AFC9: cmp byte_12329, 0 jz short loc_AFE0 loc_AFD0: mov byte_1232A, 4 mov word_125AA, 0 mov byte_12325, 3 loc_AFE0: cmp byte_12327, 0 jnz short loc_AFEE cmp byte_12328, 0 jz short loc_AFF9 loc_AFEE: cmp byte_12325, 0 jnz short loc_AFF9 call sub_AE6D loc_AFF9: pop bp retf sub_AEA8 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __cdecl main(int argc, const char **argv, const char **envp) public _main _main proc far outregs = REGS ptr -2Ch inregs = REGS ptr -1Ch var_C = word ptr -0Ch var_9 = byte ptr -9 var_8 = dword ptr -8 var_4 = dword ptr -4 _argc = word ptr 4 _argv = dword ptr 6 _envp = dword ptr 0Ah enter 2Ch, 0 push si push di xor si, si xor di, di call _mdrv2_resident or ax, ax jnz short loc_B015 push ds push offset aGogbgGtg@gcglv ; "バッチファイルから起動してよ" jmp loc_B25D ; --------------------------------------------------------------------------- loc_B015: mov byte_1232D, 0 mov dword_12330, 0 mov byte_1232E, 0 cmp word ptr [bp+_argv], 1 jle loc_B0D6 les bx, [bp+_argv+2] les bx, es:[bx+4] mov al, es:[bx] cbw cmp ax, 73h ; 's' jnz short loc_B045 mov _mode, 1 loc_B045: les bx, [bp+_argv+2] les bx, es:[bx+4] mov al, es:[bx] cbw cmp ax, 74h ; 't' jnz short loc_B05A mov _mode, 2 loc_B05A: les bx, [bp+_argv+2] les bx, es:[bx+4] mov al, es:[bx] cbw cmp ax, 64h ; 'd' jnz short loc_B06F mov _mode, 3 loc_B06F: push 3 ; n push ds push offset aCon ; "CON" les bx, [bp+_argv+2] pushd dword ptr es:[bx+4] ; s1 call _memcmp add sp, 0Ah or ax, ax jnz short loc_B0D6 les bx, [bp+_argv+2] mov eax, es:[bx+8] mov [bp+var_4], eax pushd [bp+var_4] call _atol add sp, 4 mov byte_1232D, al les bx, [bp+_argv+2] pushd dword ptr es:[bx+0Ch] call _atol add sp, 4 mov word ptr dword_12330+2, dx mov word ptr dword_12330, ax les bx, [bp+_argv+2] mov eax, es:[bx+10h] mov [bp+var_8], eax pushd [bp+var_8] call _atol add sp, 4 mov byte_1232E, al loc_B0D6: call _mdrv2_check_board call game_init call sub_A240 mov al, byte ptr word_12320+1 cbw mov si, ax mov byte ptr [bp+inregs+1], 3 push ss lea ax, [bp+outregs] push ax ; outregs push ss lea ax, [bp+inregs] push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah call key_start call sub_A719 xor ax, ax mov es, ax mov al, es:0500h or al, 20h mov [bp+var_9], al xor ax, ax mov dl, [bp+var_9] mov es, ax mov es:0500h, dl jmp short loc_B135 ; --------------------------------------------------------------------------- loc_B126: push 1 call _frame_delay pop cx push di call sub_A92C pop cx inc di loc_B135: call key_sense_bios or ax, ax jz short loc_B126 call sub_A772 mov eax, dword_13418 mov random_seed, eax jmp loc_B21A ; --------------------------------------------------------------------------- loc_B14D: cmp byte_1232A, 0 jnz short loc_B15F call sub_A363 call sub_AB97 jmp loc_B1EE ; --------------------------------------------------------------------------- loc_B15F: mov al, byte_1232A cbw cmp ax, 1 jnz short loc_B172 call sub_A4AB call sub_AC84 jmp short loc_B1EE ; --------------------------------------------------------------------------- loc_B172: mov al, byte_1232A cbw cmp ax, 2 jnz short loc_B185 call sub_A4AB call sub_AEA8 jmp short loc_B1EE ; --------------------------------------------------------------------------- loc_B185: mov al, byte_1232A cbw cmp ax, 3 jnz short loc_B1D8 mov al, byte ptr word_12320+1 cbw cmp ax, si jz short loc_B1C9 cmp byte ptr word_12320+1, 0 jnz short loc_B1A4 call _mdrv2_bgm_stop jmp short loc_B1C3 ; --------------------------------------------------------------------------- loc_B1A4: mov al, byte ptr word_12320+1 cbw cmp ax, 1 jnz short loc_B1C3 call _mdrv2_bgm_stop push ds push offset aReimu_mdt ; "reimu.mdt" call _mdrv2_bgm_load add sp, 4 call _mdrv2_bgm_play loc_B1C3: mov al, byte ptr word_12320+1 cbw mov si, ax loc_B1C9: push 0Fh call _frame_delay pop cx mov byte_1232A, 0 jmp short loc_B1EE ; --------------------------------------------------------------------------- loc_B1D8: mov al, byte_1232A cbw cmp ax, 4 jnz short loc_B1EE push 0Fh call _frame_delay pop cx mov byte_1232A, 1 loc_B1EE: xor ax, ax mov es, ax mov ax, word ptr es:[0524h] mov [bp+var_C], ax xor ax, ax mov dx, [bp+var_C] mov es, ax mov word ptr es:[0526h], dx mov es, ax mov byte ptr es:[0528h], 0 inc dword_13418 push 1 call _frame_delay pop cx loc_B21A: cmp byte_1232C, 0 jz loc_B14D call sub_A2E4 mov byte_1232F, 1 call _mdrv2_bgm_stop call sub_A79D push 1 call _graph_accesspage_func pop cx call sub_BB12 push 0 call _graph_accesspage_func pop cx call sub_BB12 call game_exit call _mdrv2_bgm_stop push ds push offset format ; "おつかれさまでした!!\n" loc_B25D: call _printf add sp, 4 pop di pop si leave retf _main endp op_01_TEXT ends ; =========================================================================== ; Segment type: Pure code op_02_TEXT segment byte public 'CODE' use16 extern _frame_delay:proc op_02_TEXT ends ; =========================================================================== ; Segment type: Pure code op_03_TEXT segment byte public 'CODE' use16 extern _vsync_init:proc extern _vsync_exit:proc extern _z_vsync_wait:proc op_03_TEXT ends ; =========================================================================== op_04_TEXT segment byte public 'CODE' use16 extern _z_text_init:proc extern _z_text_25line:proc extern _z_text_setcursor:proc extern _z_text_clear:proc extern _z_text_show:proc extern _z_text_print:proc op_04_TEXT ends ; =========================================================================== ; Segment type: Pure code op_05_TEXT segment byte public 'CODE' use16 assume cs:op_05_TEXT ;org 3 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; void __interrupt _int06_nop() _int06_nop proc far push eax push ebx push ecx push edx push es push ds push esi push edi push bp mov bp, seg _DATA mov ds, bp mov bp, sp pop bp pop edi pop esi pop ds pop es pop edx pop ecx pop ebx pop eax iret _int06_nop endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public GAME_INIT game_init proc far push bp mov bp, sp cmp _game_initialized, 0 jnz short @@ret mov _game_initialized, 1 push 6 ; interruptno call _getvect pop cx mov word ptr _int06_old+2, dx mov word ptr _int06_old+0, ax push seg _int06_game_exit push offset _int06_game_exit ; isr push 6 ; interruptno call _setvect add sp, 6 call _vsync_init call _z_text_init call egc_start call graph_start call respal_create call _z_respal_set call vram_planes_set @@ret: pop bp retf game_init endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public GAME_EXIT game_exit proc far push bp mov bp, sp cmp _game_initialized, 1 jnz short @@ret mov _game_initialized, 0 nopcall game_exit_inner call respal_free @@ret: pop bp retf game_exit endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public GAME_SWITCH_BINARY game_switch_binary proc far push bp mov bp, sp cmp _game_initialized, 1 jnz short @@ret nopcall game_exit_inner call _z_text_25line push 0 call _z_text_setcursor pop cx call _z_text_clear call _z_text_show mov _game_initialized, 0 @@ret: pop bp retf game_switch_binary endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame game_exit_inner proc far push bp mov bp, sp mov _game_initialized, 0 push seg _int06_nop push offset _int06_nop ; isr push 6 ; interruptno call _setvect call _vsync_exit call _z_text_clear call sub_BD3A call sub_B8D0 call egc_start pushd [dword ptr _int06_old] ; isr push 6 ; interruptno call _setvect add sp, 0Ch pop bp retf game_exit_inner endp ; =============== S U B R O U T I N E ======================================= ; Attributes: noreturn bp-based frame ; void __interrupt _int06_game_exit() _int06_game_exit proc near push eax push ebx push ecx push edx push es push ds push esi push edi push bp mov bp, seg _DATA mov ds, bp mov bp, sp call game_exit push 0 ; status call _exit ; --------------------------------------------------------------------------- pop cx pop bp pop edi pop esi pop ds pop es pop edx pop ecx pop ebx pop eax iret _int06_game_exit endp ; =============== S U B R O U T I N E ======================================= ; Attributes: noreturn bp-based frame game_exit_print_error proc near @@buffer = byte ptr -104h var_4 = word ptr -4 var_2 = word ptr -2 _format = dword ptr 6 arglist = byte ptr 0Ah enter 104h, 0 lea ax, [bp+arglist] mov [bp+var_2], ss mov [bp+var_4], ax push [bp+var_2] push ax ; arglist pushd [bp+_format] ; format push ss lea ax, [bp+@@buffer] push ax ; buffer call _vsprintf call game_exit push ss lea ax, [bp+@@buffer] push ax call _z_text_print push 1 ; status call _exit ; --------------------------------------------------------------------------- add sp, 12h leave retf game_exit_print_error endp op_05_TEXT ends ; --------------------------------------------------------------------------- ; =========================================================================== ; Segment type: Pure code op_06_TEXT segment byte public 'CODE' use16 assume cs:op_06_TEXT assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing enter 10h, 0 nopcall sub_B91C mov byte ptr [bp-0Fh], 42h ; 'B' mov byte ptr [bp-0Bh], 0C0h push ss lea ax, [bp-10h] push ax push ss push ax push 18h call _int86 mov dx, 6Ah ; 'j' mov al, 1 out dx, al ; PC-98 GDC (6a): ; push ds push offset _z_Palettes nopcall sub_BA15 push 0 nopcall _graph_accesspage_func push 0 nopcall _graph_showpage_func add sp, 12h nopcall sub_BB3C mov dx, 68h ; 'h' mov al, 0Ah out dx, al GRCG_OFF_CLOBBERING dx nopcall sub_B901 leave retf ; --------------------------------------------------------------------------- enter 10h, 0 nopcall sub_B91C mov byte ptr [bp-0Fh], 42h ; 'B' mov byte ptr [bp-0Bh], 0C0h push ss lea ax, [bp-10h] push ax push ss push ax push 18h call _int86 mov dx, 6Ah ; 'j' mov al, 1 out dx, al ; PC-98 GDC (6a): ; push 0 nopcall _graph_accesspage_func push 0 nopcall _graph_showpage_func add sp, 0Eh mov dx, 68h ; 'h' mov al, 0Ah out dx, al GRCG_OFF_CLOBBERING dx nopcall sub_B901 leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B8D0 proc far push bp mov bp, sp nopcall _z_palette_black nopcall sub_BB3C push 0 nopcall _graph_accesspage_func push 0 nopcall _graph_showpage_func add sp, 4 nopcall sub_B901 mov dx, 68h ; 'h' mov al, 0Ah out dx, al GRCG_OFF_CLOBBERING dx pop bp retf sub_B8D0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B901 proc far inregs = REGS ptr -10h enter 10h, 0 mov byte ptr [bp+inregs+1], 40h push ss lea ax, [bp+inregs] push ax ; outregs push ss push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah leave retf sub_B901 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_B91C proc far inregs = REGS ptr -10h enter 10h, 0 mov byte ptr [bp+inregs+1], 41h ; 'A' push ss lea ax, [bp+inregs] push ax ; outregs push ss push ax ; inregs push 18h ; intno call _int86 add sp, 0Ah leave retf sub_B91C endp include th01/hardware/graph_page.asm include th01/hardware/color.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BA15 proc far arg_0 = dword ptr 6 push bp mov bp, sp push si xor si, si jmp short loc_BA56 ; --------------------------------------------------------------------------- loc_BA1D: mov ax, si imul ax, 3 les bx, [bp+arg_0] add bx, ax mov al, es:[bx+2] cbw push ax mov ax, si imul ax, 3 mov bx, word ptr [bp+arg_0] add bx, ax mov al, es:[bx+1] cbw push ax mov ax, si imul ax, 3 mov bx, word ptr [bp+arg_0] add bx, ax mov al, es:[bx] cbw push ax push si nopcall _z_palette_set_show add sp, 8 inc si loc_BA56: cmp si, COLOR_COUNT jl short loc_BA1D pop si pop bp retf sub_BA15 endp include th01/hardware/palette_set_show.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BB12 proc far _s = dword ptr -4 enter 4, 0 mov [bp+_s], 0A8000000h push 0 call _grcg_setcolor_rmw push 7D0000FFh ; c pushd [bp+_s] ; s call _memset add sp, 0Ah call _grcg_off_func leave retf sub_BB12 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BB3C proc far push bp mov bp, sp push 2 call _graph_accesspage_func call sub_BB12 push 2 call _graph_accesspage_func add sp, 4 call sub_BB12 pop bp retf sub_BB3C endp ; --------------------------------------------------------------------------- enter 4, 0 mov dword ptr [bp-4], 0A8000000h mov al, [bp+6] cbw push ax call _grcg_setcolor_rmw push 7D0000FFh pushd dword ptr [bp-4] call _memset add sp, 0Ah call _grcg_off_func leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BB85 proc far var_152 = byte ptr -152h var_102 = byte ptr -102h var_B2 = byte ptr -0B2h dest = byte ptr -62h @@page_other = byte ptr -11h var_10 = dword ptr -10h var_C = dword ptr -0Ch var_8 = dword ptr -8 src = dword ptr -4 enter 152h, 0 push si mov [bp+src], 0A8000000h mov [bp+var_8], 0B0000000h mov [bp+var_C], 0B8000000h mov [bp+var_10], 0E0000000h mov al, _page_back xor al, 1 mov [bp+@@page_other], al xor si, si jmp loc_BC62 ; --------------------------------------------------------------------------- loc_BBB7: push 50h ; 'P' ; n pushd [bp+src] ; src push ss lea ax, [bp+dest] push ax ; dest call _memcpy push 50h ; 'P' ; n pushd [bp+var_8] ; src push ss lea ax, [bp+var_B2] push ax ; dest call _memcpy push 50h ; 'P' ; n pushd [bp+var_C] ; src push ss lea ax, [bp+var_102] push ax ; dest call _memcpy push 50h ; 'P' ; n pushd [bp+var_10] ; src push ss lea ax, [bp+var_152] push ax ; dest call _memcpy graph_accesspage [bp+@@page_other] push 50h ; 'P' ; n push ss lea ax, [bp+dest] push ax ; src pushd [bp+src] ; dest call _memcpy add sp, 32h push 50h ; 'P' ; n push ss lea ax, [bp+var_B2] push ax ; src pushd [bp+var_8] ; dest call _memcpy push 50h ; 'P' ; n push ss lea ax, [bp+var_102] push ax ; src pushd [bp+var_C] ; dest call _memcpy push 50h ; 'P' ; n push ss lea ax, [bp+var_152] push ax ; src pushd [bp+var_10] ; dest call _memcpy add sp, 1Eh graph_accesspage _page_back add word ptr [bp+src], 50h ; 'P' add word ptr [bp+var_8], 50h ; 'P' add word ptr [bp+var_C], 50h ; 'P' add word ptr [bp+var_10], 50h ; 'P' inc si loc_BC62: cmp si, 190h jl loc_BBB7 pop si leave retf sub_BB85 endp include th01/hardware/palette_black.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BC8B proc far _s = byte ptr -32h var_31 = byte ptr -31h var_30 = byte ptr -30h var_2 = word ptr -2 enter 32h, 0 push si push di push 300000h ; c push ss lea ax, [bp+_s] push ax ; s call _memset add sp, 8 mov [bp+var_2], 0 jmp loc_BD2E ; --------------------------------------------------------------------------- loc_BCAC: call _z_vsync_wait xor si, si jmp short loc_BD1E ; --------------------------------------------------------------------------- loc_BCB5: xor di, di jmp short loc_BCE3 ; --------------------------------------------------------------------------- loc_BCB9: mov bx, si imul bx, 3 add bx, di lea ax, [bp+_s] add bx, ax mov al, ss:[bx] mov bx, si imul bx, 3 cmp al, _z_Palettes[bx+di] jge short loc_BCE2 mov bx, si imul bx, 3 add bx, di lea ax, [bp+_s] add bx, ax inc byte ptr ss:[bx] loc_BCE2: inc di loc_BCE3: cmp di, 3 jl short loc_BCB9 mov bx, si imul bx, 3 lea ax, [bp+var_30] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp+var_31] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp+_s] add bx, ax mov al, ss:[bx] cbw push ax push si call _z_palette_show_single add sp, 8 inc si loc_BD1E: cmp si, 10h jl short loc_BCB5 push 0Ah call _delay pop cx inc [bp+var_2] loc_BD2E: cmp [bp+var_2], 10h jl loc_BCAC pop di pop si leave retf sub_BC8B endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_BD3A proc far dest = byte ptr -32h var_31 = byte ptr -31h var_30 = byte ptr -30h var_2 = word ptr -2 enter 32h, 0 push si push di push 30h ; '0' ; n push ds push offset _z_Palettes ; src push ss lea ax, [bp+dest] push ax ; dest call _memcpy add sp, 0Ah mov [bp+var_2], 0 jmp short loc_BDD1 ; --------------------------------------------------------------------------- loc_BD5A: call _z_vsync_wait xor si, si jmp short loc_BDC1 ; --------------------------------------------------------------------------- loc_BD63: xor di, di jmp short loc_BD86 ; --------------------------------------------------------------------------- loc_BD67: mov bx, si imul bx, 3 add bx, di lea ax, [bp+dest] add bx, ax cmp byte ptr ss:[bx], 0 jle short loc_BD85 mov bx, si imul bx, 3 add bx, di add bx, ax dec byte ptr ss:[bx] loc_BD85: inc di loc_BD86: cmp di, 3 jl short loc_BD67 mov bx, si imul bx, 3 lea ax, [bp+var_30] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp+var_31] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp+dest] add bx, ax mov al, ss:[bx] cbw push ax push si call _z_palette_show_single add sp, 8 inc si loc_BDC1: cmp si, 10h jl short loc_BD63 push 0Ah call _delay pop cx inc [bp+var_2] loc_BDD1: cmp [bp+var_2], 10h jl short loc_BD5A pop di pop si leave retf sub_BD3A endp include th01/hardware/palette_white.asm ; --------------------------------------------------------------------------- enter 32h, 0 push si push di push 30000Fh push ss lea ax, [bp-32h] push ax call _memset add sp, 8 mov word ptr [bp-2], 0 jmp loc_BE9F ; --------------------------------------------------------------------------- loc_BE1D: call _z_vsync_wait xor si, si jmp short loc_BE8F ; --------------------------------------------------------------------------- loc_BE26: xor di, di jmp short loc_BE54 ; --------------------------------------------------------------------------- loc_BE2A: mov bx, si imul bx, 3 add bx, di lea ax, [bp-32h] add bx, ax mov al, ss:[bx] mov bx, si imul bx, 3 cmp al, _z_Palettes[bx+di] jle short loc_BE53 mov bx, si imul bx, 3 add bx, di lea ax, [bp-32h] add bx, ax dec byte ptr ss:[bx] loc_BE53: inc di loc_BE54: cmp di, 3 jl short loc_BE2A mov bx, si imul bx, 3 lea ax, [bp-30h] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp-31h] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp-32h] add bx, ax mov al, ss:[bx] cbw push ax push si call _z_palette_show_single add sp, 8 inc si loc_BE8F: cmp si, 10h jl short loc_BE26 push 0Ah call _delay pop cx inc word ptr [bp-2] loc_BE9F: cmp word ptr [bp-2], 10h jl loc_BE1D pop di pop si leave retf ; --------------------------------------------------------------------------- enter 32h, 0 push si push di push 30h ; '0' push ds push offset _z_Palettes push ss lea ax, [bp-32h] push ax call _memcpy add sp, 0Ah mov word ptr [bp-2], 0 jmp short loc_BF42 ; --------------------------------------------------------------------------- loc_BECB: call _z_vsync_wait xor si, si jmp short loc_BF32 ; --------------------------------------------------------------------------- loc_BED4: xor di, di jmp short loc_BEF7 ; --------------------------------------------------------------------------- loc_BED8: mov bx, si imul bx, 3 add bx, di lea ax, [bp-32h] add bx, ax cmp byte ptr ss:[bx], 0Fh jge short loc_BEF6 mov bx, si imul bx, 3 add bx, di add bx, ax inc byte ptr ss:[bx] loc_BEF6: inc di loc_BEF7: cmp di, 3 jl short loc_BED8 mov bx, si imul bx, 3 lea ax, [bp-30h] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp-31h] add bx, ax mov al, ss:[bx] cbw push ax mov bx, si imul bx, 3 lea ax, [bp-32h] add bx, ax mov al, ss:[bx] cbw push ax push si call _z_palette_show_single add sp, 8 inc si loc_BF32: cmp si, 10h jl short loc_BED4 push 0Ah call _delay pop cx inc word ptr [bp-2] loc_BF42: cmp word ptr [bp-2], 10h jl short loc_BECB pop di pop si leave retf ; --------------------------------------------------------------------------- push bp mov bp, sp push si xor si, si jmp short loc_BF7E ; --------------------------------------------------------------------------- loc_BF54: mov bx, si imul bx, 3 mov al, _z_Palettes[bx].b cbw push ax mov bx, si imul bx, 3 mov al, _z_Palettes[bx].g cbw push ax mov bx, si imul bx, 3 mov al, _z_Palettes[bx].r cbw push ax push si call _z_palette_show_single add sp, 8 inc si loc_BF7E: cmp si, 10h jl short loc_BF54 pop si pop bp retf ; --------------------------------------------------------------------------- push bp mov bp, sp push word ptr [bp+0Ah] call _grcg_setcolor_rmw pop cx mov bx, [bp+8] imul bx, 50h mov ax, [bp+6] sar ax, 3 add bx, ax mov ax, 0A800h mov cl, [bp+6] and cl, 7 mov dx, 80h sar dx, cl mov es, ax assume es:nothing mov es:[bx], dl call _grcg_off_func pop bp retf ; --------------------------------------------------------------------------- enter 2, 0 push si push di mov ax, [bp+8] imul ax, 50h mov dx, [bp+6] sar dx, 3 add ax, dx mov di, ax mov cl, [bp+6] and cl, 7 mov ax, 80h sar ax, cl mov [bp-2], ax xor si, si mov ax, 0A800h mov es, ax mov al, es:[di] cbw test [bp-2], ax jz short loc_BFEF or si, 1 loc_BFEF: mov ax, 0B000h mov es, ax assume es:nothing mov al, es:[di] cbw test [bp-2], ax jz short loc_C000 or si, 2 loc_C000: mov ax, 0B800h mov es, ax assume es:nothing mov al, es:[di] cbw test [bp-2], ax jz short loc_C011 or si, 4 loc_C011: mov ax, 0E000h mov es, ax assume es:nothing mov al, es:[di] cbw test [bp-2], ax jz short loc_C022 or si, 8 loc_C022: mov ax, si pop di pop si leave retf include th01/hardware/graph_r.asm extern _graph_putsa_fx:proc extern _z_respal_set:proc op_06_TEXT ends ; --------------------------------------------------------------------------- ; =========================================================================== ; Segment type: Pure code op_07_TEXT segment byte public 'CODE' use16 assume cs:op_07_TEXT assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing enter 10h, 0 push si push di mov ax, [bp+6] sar ax, 3 mov dx, [bp+8] shl dx, 6 add ax, dx mov dx, [bp+8] shl dx, 4 add ax, dx mov si, ax xor di, di jmp loc_D2C8 ; --------------------------------------------------------------------------- loc_D243: push 0 call _graph_accesspage_func les bx, _VRAM_PLANE_B add bx, si mov eax, es:[bx] mov [bp-10h], eax les bx, _VRAM_PLANE_R add bx, si mov eax, es:[bx] mov [bp-0Ch], eax les bx, _VRAM_PLANE_G add bx, si mov eax, es:[bx] mov [bp-8], eax les bx, _VRAM_PLANE_E add bx, si mov eax, es:[bx] mov [bp-4], eax push 1 call _graph_accesspage_func add sp, 4 les bx, _VRAM_PLANE_B add bx, si mov eax, [bp-10h] mov es:[bx], eax les bx, _VRAM_PLANE_R add bx, si mov eax, [bp-0Ch] mov es:[bx], eax les bx, _VRAM_PLANE_G add bx, si mov eax, [bp-8] mov es:[bx], eax les bx, _VRAM_PLANE_E add bx, si mov eax, [bp-4] mov es:[bx], eax add si, 50h ; 'P' inc di loc_D2C8: cmp di, 20h ; ' ' jl loc_D243 push 0 call _graph_accesspage_func pop cx pop di pop si leave retf include th01/hardware/vram_planes_set.asm EGC_START_COPY_DEF 1, far ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame _egc_copy_rect_1_to_0 proc far var_A = word ptr -0Ah var_8 = word ptr -8 var_6 = word ptr -6 var_4 = word ptr -4 var_2 = word ptr -2 arg_0 = word ptr 6 arg_2 = word ptr 8 arg_4 = word ptr 0Ah arg_6 = word ptr 0Ch enter 0Ah, 0 push si push di mov si, [bp+arg_0] mov di, si add si, [bp+arg_4] and di, 0FFF0h mov ax, di sar ax, 3 mov dx, [bp+arg_2] shl dx, 6 add ax, dx mov dx, [bp+arg_2] shl dx, 4 add ax, dx mov [bp+var_6], ax call egc_start_copy_1 mov [bp+var_2], 0 jmp short loc_D3B6 ; --------------------------------------------------------------------------- loc_D36C: mov [bp+var_4], di mov ax, [bp+var_6] mov [bp+var_A], ax jmp short loc_D3AA ; --------------------------------------------------------------------------- loc_D377: push 1 call _graph_accesspage_func les bx, _VRAM_PLANE_B add bx, [bp+var_A] mov ax, es:[bx] mov [bp+var_8], ax push 0 call _graph_accesspage_func add sp, 4 les bx, _VRAM_PLANE_B add bx, [bp+var_A] mov ax, [bp+var_8] mov es:[bx], ax add [bp+var_A], 2 add [bp+var_4], 10h loc_D3AA: cmp [bp+var_4], si jl short loc_D377 add [bp+var_6], 50h ; 'P' inc [bp+var_2] loc_D3B6: mov ax, [bp+var_2] cmp ax, [bp+arg_6] jl short loc_D36C call egc_off pop di pop si leave retf _egc_copy_rect_1_to_0 endp ; --------------------------------------------------------------------------- enter 4, 0 push si push di mov di, [bp+0Ah] mov ax, [bp+8] imul ax, 50h push ax mov ax, [bp+6] mov bx, 8 cwd idiv bx pop dx add dx, ax mov si, dx mov ax, di mov bx, 40h cwd idiv bx shl ax, 2 mov bx, ax mov ax, [bx+1474h] mov dx, [bx+1472h] push ax mov ax, di mov bx, 40h push dx cwd idiv bx imul dx, 281h pop ax add ax, dx pop dx mov [bp-2], dx mov [bp-4], ax xor cx, cx jmp short loc_D481 ; --------------------------------------------------------------------------- loc_D416: les bx, _VRAM_PLANE_B add bx, si mov eax, es:[bx] mov dx, cx shl dx, 2 les bx, [bp-4] add bx, dx mov es:[bx+1], eax les bx, _VRAM_PLANE_R add bx, si mov eax, es:[bx] mov dx, cx shl dx, 2 les bx, [bp-4] add bx, dx mov es:[bx+81h], eax les bx, _VRAM_PLANE_G add bx, si mov eax, es:[bx] mov dx, cx shl dx, 2 les bx, [bp-4] add bx, dx mov es:[bx+101h], eax les bx, _VRAM_PLANE_E add bx, si mov eax, es:[bx] mov dx, cx shl dx, 2 les bx, [bp-4] add bx, dx mov es:[bx+181h], eax add si, 50h ; 'P' inc cx loc_D481: cmp cx, 20h ; ' ' jl short loc_D416 pop di pop si leave retf ; --------------------------------------------------------------------------- enter 0Eh, 0 push si push di mov ax, [bp+8] imul ax, 50h push ax mov ax, [bp+6] mov bx, 8 cwd idiv bx pop dx add dx, ax mov di, dx mov ax, [bp+0Ah] mov bx, 40h cwd idiv bx shl ax, 2 mov bx, ax mov ax, [bx+1474h] mov dx, [bx+1472h] push ax mov ax, [bp+0Ah] mov bx, 40h push dx cwd idiv bx imul dx, 281h pop ax add ax, dx pop dx mov [bp-0Ch], dx mov [bp-0Eh], ax test byte ptr [bp+0Ch], 2 jz short loc_D4DF mov ax, 10h jmp short loc_D4E1 ; --------------------------------------------------------------------------- loc_D4DF: xor ax, ax loc_D4E1: mov [bp-2], ax test byte ptr [bp+0Ch], 1 jz short loc_D4F2 mov eax, 0FFFFh jmp short loc_D4F8 ; --------------------------------------------------------------------------- loc_D4F2: mov eax, 0FFFF0000h loc_D4F8: mov [bp-6], eax test byte ptr [bp+0Ch], 1 jz short loc_D507 mov ax, 10h jmp short loc_D509 ; --------------------------------------------------------------------------- loc_D507: xor ax, ax loc_D509: cwde mov [bp-0Ah], eax mov si, [bp-2] jmp loc_D5E8 ; --------------------------------------------------------------------------- loc_D515: mov ax, si shl ax, 2 les bx, [bp-0Eh] add bx, ax mov eax, [bp-6] and es:[bx+1], eax les bx, _VRAM_PLANE_B add bx, di mov eax, es:[bx] mov cl, [bp-0Ah] shl eax, cl mov edx, [bp-6] not edx and eax, edx mov dx, si shl dx, 2 les bx, [bp-0Eh] add bx, dx or es:[bx+1], eax mov eax, [bp-6] and es:[bx+81h], eax les bx, _VRAM_PLANE_R add bx, di mov eax, es:[bx] shl eax, cl mov edx, [bp-6] not edx and eax, edx mov dx, si shl dx, 2 les bx, [bp-0Eh] add bx, dx or es:[bx+81h], eax mov eax, [bp-6] and es:[bx+101h], eax les bx, _VRAM_PLANE_G add bx, di mov eax, es:[bx] shl eax, cl mov edx, [bp-6] not edx and eax, edx mov dx, si shl dx, 2 les bx, [bp-0Eh] add bx, dx or es:[bx+101h], eax mov eax, [bp-6] and es:[bx+181h], eax les bx, _VRAM_PLANE_E add bx, di mov eax, es:[bx] shl eax, cl mov edx, [bp-6] not edx and eax, edx mov dx, si shl dx, 2 les bx, [bp-0Eh] add bx, dx or es:[bx+181h], eax add di, 50h ; 'P' inc si loc_D5E8: mov ax, [bp-2] add ax, 10h cmp ax, si jg loc_D515 pop di pop si leave retf op_07_TEXT ends ; =========================================================================== ; Segment type: Pure code op_08_TEXT segment byte public 'CODE' use16 assume cs:op_08_TEXT ;org 8 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __cdecl __far sub_D5F8(int, int, int, char *format, char arglist) sub_D5F8 proc far @@buffer = byte ptr -104h var_4 = word ptr -4 var_2 = word ptr -2 arg_0 = word ptr 6 arg_2 = word ptr 8 arg_4 = word ptr 0Ah _format = dword ptr 0Ch arglist = byte ptr 10h enter 104h, 0 lea ax, [bp+arglist] mov [bp+var_2], ss mov [bp+var_4], ax push [bp+var_2] push ax ; arglist pushd [bp+_format] ; format push ss lea ax, [bp+@@buffer] push ax ; buffer call _vsprintf push ss lea ax, [bp+@@buffer] push ax push [bp+arg_4] push [bp+arg_2] push [bp+arg_0] call _graph_putsa_fx add sp, 16h leave retf sub_D5F8 endp op_08_TEXT ends ; =========================================================================== ; Segment type: Pure code op_09_TEXT segment byte public 'CODE' use16 assume cs:op_09_TEXT ;org 1 assume es:nothing, ss:nothing, ds:_DATA, fs:nothing, gs:nothing ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_D631 proc far var_38 = byte ptr -38h var_33 = byte ptr -33h var_8 = dword ptr -8 var_4 = word ptr -4 var_2 = word ptr -2 arg_0 = word ptr 6 arg_2 = dword ptr 8 enter 38h, 0 push si push di mov di, [bp+arg_0] pushd [bp+arg_2] call @arc_file_load$qnxc push ss lea ax, [bp+var_38] push ax push 6 call @arc_file_get$qncui mov al, [bp+var_33] cbw mov [bp+var_4], ax mov bx, di shl bx, 2 mov ax, [bx+1472h] or ax, [bx+1474h] jz short loc_D677 mov bx, di shl bx, 2 pushd dword ptr [bx+1472h] ; font call @$bdla$qnv add sp, 4 loc_D677: mov ax, [bp+var_4] imul ax, 281h push ax call @$bnwa$qui pop cx mov bx, di shl bx, 2 mov [bx+1474h], dx mov [bx+1472h], ax mov bx, di shl bx, 2 mov ax, [bx+1472h] or ax, [bx+1474h] jnz short loc_D6A7 mov ax, 0FFFDh jmp loc_D74E ; --------------------------------------------------------------------------- loc_D6A7: push ss lea ax, [bp+var_38] push ax push 30h ; '0' call @arc_file_get$qncui cmp word_129B8, 0 jz short loc_D6C7 push ss lea ax, [bp+var_38] push ax call sub_BA15 add sp, 4 loc_D6C7: mov al, byte ptr [bp+var_4] mov [di+72Fh], al mov bx, di shl bx, 2 mov ax, [bx+1474h] mov dx, [bx+1472h] mov word ptr [bp+var_8+2], ax mov word ptr [bp+var_8], dx mov [bp+var_2], 0 jmp short loc_D73F ; --------------------------------------------------------------------------- loc_D6E8: pushd [bp+var_8] push 1 call @arc_file_get$qncui mov ax, word ptr [bp+var_8] inc ax push word ptr [bp+var_8+2] push ax push 200h call @arc_file_get$qncui xor si, si jmp short loc_D732 ; --------------------------------------------------------------------------- loc_D707: mov ax, si shl ax, 2 les bx, [bp+var_8] add bx, ax mov eax, es:[bx+1] and eax, es:[bx+81h] and eax, es:[bx+101h] and eax, es:[bx+181h] not eax mov es:[bx+201h], eax inc si loc_D732: cmp si, 20h ; ' ' jl short loc_D707 inc [bp+var_2] add word ptr [bp+var_8], 281h loc_D73F: mov ax, [bp+var_2] cmp ax, [bp+var_4] jl short loc_D6E8 call @arc_file_free$qv xor ax, ax loc_D74E: pop di pop si leave retf sub_D631 endp ; --------------------------------------------------------------------------- push bp mov bp, sp push si mov si, [bp+6] cmp word ptr [bp+8], 0 jle short loc_D765 cmp word ptr [bp+8], 40h jle short loc_D76A loc_D765: mov ax, 0FFF7h jmp short loc_D7C3 ; --------------------------------------------------------------------------- loc_D76A: mov bx, si shl bx, 2 mov ax, [bx+1472h] or ax, [bx+1474h] jz short loc_D78B mov bx, si shl bx, 2 pushd dword ptr [bx+1472h] call @$bdla$qnv add sp, 4 loc_D78B: mov al, [bp+8] mov [si+72Fh], al mov ax, [bp+8] imul ax, 281h push ax call @$bnwa$qui pop cx mov bx, si shl bx, 2 mov [bx+1474h], dx mov [bx+1472h], ax mov bx, si shl bx, 2 mov ax, [bx+1472h] or ax, [bx+1474h] jnz short loc_D7C1 mov ax, 0FFFDh jmp short loc_D7C3 ; --------------------------------------------------------------------------- loc_D7C1: xor ax, ax loc_D7C3: pop si pop bp retf ; --------------------------------------------------------------------------- enter 2, 0 mov word_129B8, 0 pushd dword ptr [bp+8] push word ptr [bp+6] call sub_D631 add sp, 6 mov [bp-2], ax mov word_129B8, 1 leave retf ; --------------------------------------------------------------------------- push bp mov bp, sp push si mov si, [bp+6] mov bx, si shl bx, 2 mov ax, [bx+1472h] or ax, [bx+1474h] jz short loc_D827 mov bx, si shl bx, 2 pushd dword ptr [bx+1472h] call @$bdla$qnv add sp, 4 mov bx, si shl bx, 2 mov word ptr [bx+1474h], 0 mov word ptr [bx+1472h], 0 mov byte ptr [si+72Fh], 0 loc_D827: pop si pop bp retf ; --------------------------------------------------------------------------- enter 4, 0 push si push di mov di, [bp+8] mov ax, [bp+6] sar ax, 3 mov dx, di shl dx, 6 add ax, dx mov dx, di shl dx, 4 add ax, dx mov si, ax mov ax, [bp+0Ah] mov bx, 40h cwd idiv bx shl ax, 2 mov bx, ax mov ax, [bx+1474h] mov dx, [bx+1472h] push ax mov ax, [bp+0Ah] mov bx, 40h push dx cwd idiv bx imul dx, 281h pop ax add ax, dx pop dx mov [bp-2], dx mov [bp-4], ax xor cx, cx jmp short loc_D8E7 ; --------------------------------------------------------------------------- loc_D87C: mov ax, cx shl ax, 2 les bx, [bp-4] add bx, ax mov eax, es:[bx+1] les bx, _VRAM_PLANE_B add bx, si mov es:[bx], eax mov ax, cx shl ax, 2 les bx, [bp-4] add bx, ax mov eax, es:[bx+81h] les bx, _VRAM_PLANE_R add bx, si mov es:[bx], eax mov ax, cx shl ax, 2 les bx, [bp-4] add bx, ax mov eax, es:[bx+101h] les bx, _VRAM_PLANE_G add bx, si mov es:[bx], eax mov ax, cx shl ax, 2 les bx, [bp-4] add bx, ax mov eax, es:[bx+181h] les bx, _VRAM_PLANE_E add bx, si mov es:[bx], eax add si, 50h ; 'P' inc cx loc_D8E7: cmp cx, 20h ; ' ' jl short loc_D87C pop di pop si leave retf ; --------------------------------------------------------------------------- enter 8, 0 push si push di mov ax, [bp+8] imul ax, 50h push ax mov ax, [bp+6] mov bx, 8 cwd idiv bx pop dx add dx, ax mov di, dx mov ax, [bp+0Ah] mov bx, 40h cwd idiv bx shl ax, 2 mov bx, ax mov ax, [bx+1474h] mov dx, [bx+1472h] push ax mov ax, [bp+0Ah] mov bx, 40h push dx cwd idiv bx imul dx, 281h pop ax add ax, dx pop dx mov [bp-6], dx mov [bp-8], ax test byte ptr [bp+0Ch], 2 jz short loc_D945 mov ax, 10h jmp short loc_D947 ; --------------------------------------------------------------------------- loc_D945: xor ax, ax loc_D947: mov [bp-2], ax test byte ptr [bp+0Ch], 1 jz short loc_D955 mov ax, 10h jmp short loc_D957 ; --------------------------------------------------------------------------- loc_D955: xor ax, ax loc_D957: mov [bp-4], ax mov si, [bp-2] jmp short loc_D9D5 ; --------------------------------------------------------------------------- loc_D95F: mov ax, si shl ax, 2 les bx, [bp-8] add bx, ax mov eax, es:[bx+1] mov cl, [bp-4] shr eax, cl les bx, _VRAM_PLANE_B add bx, di mov es:[bx], ax mov ax, si shl ax, 2 les bx, [bp-8] add bx, ax mov eax, es:[bx+81h] shr eax, cl les bx, _VRAM_PLANE_R add bx, di mov es:[bx], ax mov ax, si shl ax, 2 les bx, [bp-8] add bx, ax mov eax, es:[bx+101h] shr eax, cl les bx, _VRAM_PLANE_G add bx, di mov es:[bx], ax mov ax, si shl ax, 2 les bx, [bp-8] add bx, ax mov eax, es:[bx+181h] shr eax, cl les bx, _VRAM_PLANE_E add bx, di mov es:[bx], ax add di, 50h ; 'P' inc si loc_D9D5: mov ax, [bp-2] add ax, 10h cmp ax, si jg short loc_D95F pop di pop si leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_D9E3 proc far arg_0 = dword ptr 6 push bp mov bp, sp pushd [bp+arg_0] call file_ropen or ax, ax jnz short loc_D9F8 mov ax, 1 pop bp retf ; --------------------------------------------------------------------------- loc_D9F8: pushd 12h push 0 call file_seek push ds push offset unk_136D2 push 30h ; '0' call file_read push ds push offset unk_136D2 call sub_BA15 add sp, 4 call file_close xor ax, ax pop bp retf sub_D9E3 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_DA22 proc far arg_0 = dword ptr 6 push bp mov bp, sp pushd [bp+arg_0] call file_ropen or ax, ax jnz short loc_DA37 mov ax, 1 pop bp retf ; --------------------------------------------------------------------------- loc_DA37: pushd 12h push 0 call file_seek push ds push offset unk_136D2 push 30h ; '0' call file_read call file_close xor ax, ax pop bp retf sub_DA22 endp ; --------------------------------------------------------------------------- push bp mov bp, sp push si push di les bx, [bp+6] dec word ptr es:[bx] jl short loc_DA77 mov ax, es:[bx+0Eh] mov si, es:[bx+0Ch] inc word ptr es:[bx+0Ch] mov es, ax mov al, es:[si] mov ah, 0 jmp short loc_DA83 ; --------------------------------------------------------------------------- loc_DA77: pushd dword ptr [bp+6] call __fgetc add sp, 4 loc_DA83: mov di, ax les bx, [bp+6] dec word ptr es:[bx] jl short loc_DAA2 mov ax, es:[bx+0Eh] mov si, es:[bx+0Ch] inc word ptr es:[bx+0Ch] mov es, ax mov al, es:[si] mov ah, 0 jmp short loc_DAAE ; --------------------------------------------------------------------------- loc_DAA2: pushd dword ptr [bp+6] call __fgetc add sp, 4 loc_DAAE: shl ax, 8 add di, ax mov ax, di pop di pop si pop bp retf ; --------------------------------------------------------------------------- push bp mov bp, sp xor dx, dx jmp short loc_DAE5 ; --------------------------------------------------------------------------- loc_DAC0: xor cx, cx jmp short loc_DADF ; --------------------------------------------------------------------------- loc_DAC4: mov ax, dx imul ax, 3 les bx, [bp+6] add bx, ax add bx, cx mov al, es:[bx] mov bx, dx imul bx, 3 add bx, cx mov [bx+1442h], al inc cx loc_DADF: cmp cx, 3 jl short loc_DAC4 inc dx loc_DAE5: cmp dx, 10h jl short loc_DAC0 pop bp retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_DAEC proc far var_1 = byte ptr -1 arg_0 = dword ptr 6 enter 2, 0 push si xor si, si push 4000h call @$bnwa$qui pop cx mov word ptr font+2, dx mov word ptr font, ax cmp word_129B8, 1 jnz short loc_DB0D or si, 2 loc_DB0D: cmp byte_129C7, 1 jnz short loc_DB17 mov si, 0F40h loc_DB17: cmp word_129BA, 1 jnz short loc_DB3F push si push 640000h pushd 4000h pushd [font] pushd [bp+arg_0] call _PiLoadL add sp, 12h mov [bp+var_1], al loc_DB3F: cmp word_129B8, 1 jnz short loc_DB50 pushd [bp+arg_0] call sub_D9E3 jmp short loc_DB58 ; --------------------------------------------------------------------------- loc_DB50: pushd [bp+arg_0] call sub_DA22 loc_DB58: add sp, 4 pushd [font] ; font call @$bdla$qnv add sp, 4 mov al, [bp+var_1] cbw pop si leave retf sub_DAEC endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_DB6F proc far var_2 = word ptr -2 arg_0 = dword ptr 6 enter 2, 0 mov word_129B8, 0 pushd [bp+arg_0] call sub_DAEC add sp, 4 mov [bp+var_2], ax mov word_129B8, 1 leave retf sub_DB6F endp ; --------------------------------------------------------------------------- enter 2, 0 mov word_129BA, 0 pushd dword ptr [bp+6] call sub_DAEC add sp, 4 mov [bp-2], ax mov word_129BA, 1 leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_DBAF proc far var_2 = word ptr -2 arg_0 = dword ptr 6 enter 2, 0 mov byte_129C7, 1 mov word_129B8, 0 pushd [bp+arg_0] call sub_DAEC add sp, 4 mov [bp+var_2], ax mov word_129B8, 1 mov byte_129C7, 0 leave retf sub_DBAF endp ; --------------------------------------------------------------------------- push bp mov bp, sp push si mov si, [bp+6] mov al, [si+18D2h] mov ah, 0 cmp ax, [bp+8] jle short loc_DBFD mov al, [bp+8] mov byte_129C8, al push si nopcall sub_DC1B pop cx mov byte_129C8, 0 loc_DBFD: pop si pop bp retf ; --------------------------------------------------------------------------- push bp mov bp, sp mov al, [bp+8] inc al mov byte_129C9, al push word ptr [bp+6] nopcall sub_DC1B pop cx mov byte_129C9, 0 pop bp retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_DC1B proc far var_2E = word ptr -2Eh var_2C = word ptr -2Ch var_29 = byte ptr -29h var_28 = word ptr -28h var_25 = byte ptr -25h var_24 = word ptr -24h var_21 = byte ptr -21h var_20 = word ptr -20h var_1D = byte ptr -1Dh var_1C = word ptr -1Ch var_1A = word ptr -1Ah var_17 = byte ptr -17h var_16 = word ptr -16h var_13 = byte ptr -13h var_12 = word ptr -12h var_F = byte ptr -0Fh var_E = word ptr -0Eh var_B = byte ptr -0Bh var_A = dword ptr -0Ah var_6 = dword ptr -6 var_2 = byte ptr -2 var_1 = byte ptr -1 arg_0 = word ptr 6 enter 2Eh, 0 push si push di mov di, [bp+arg_0] mov bx, di shl bx, 2 mov ax, [bx+1494h] mov dx, [bx+1492h] mov word ptr [bp+var_6+2], ax mov word ptr [bp+var_6], dx mov bx, di shl bx, 6 mov al, byte_129C8 cbw shl ax, 2 add bx, ax mov ax, [bx+14D4h] mov dx, [bx+14D2h] mov word ptr [bp+var_A+2], ax mov word ptr [bp+var_A], dx cmp byte_129C9, 0 jz short loc_DC66 mov al, byte_129C9 cbw dec ax push ax call _grcg_setcolor_rmw pop cx loc_DC66: xor si, si jmp loc_DDDC ; --------------------------------------------------------------------------- loc_DC6B: les bx, [bp+var_6] mov al, es:[bx] mov [bp+var_1], al inc word ptr [bp+var_6] cmp [bp+var_1], 1 jnz loc_DD47 les bx, [bp+var_6] mov al, es:[bx] mov [bp+var_2], al inc word ptr [bp+var_6] cmp [bp+var_2], 0 jz loc_DD47 les bx, [bp+var_6] mov al, es:[bx] mov [bp+var_1], al inc word ptr [bp+var_6] jmp loc_DD3B ; --------------------------------------------------------------------------- loc_DCA2: cmp [bp+var_1], 0 jnz loc_DD3A cmp byte_129C9, 0 jnz short loc_DD28 les bx, [bp+var_A] mov al, es:[bx] mov [bp+var_B], al inc word ptr [bp+var_A] mov [bp+var_E], si mov ax, 0A800h mov bx, [bp+var_E] mov dl, [bp+var_B] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_F], al inc word ptr [bp+var_A] mov [bp+var_12], si mov ax, 0B000h mov bx, [bp+var_12] mov dl, [bp+var_F] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_13], al inc word ptr [bp+var_A] mov [bp+var_16], si mov ax, 0B800h mov bx, [bp+var_16] mov dl, [bp+var_13] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_17], al inc word ptr [bp+var_A] mov [bp+var_1A], si inc si mov ax, 0E000h mov bx, [bp+var_1A] mov dl, [bp+var_17] mov es, ax assume es:nothing mov es:[bx], dl jmp short loc_DD3B ; --------------------------------------------------------------------------- loc_DD28: mov [bp+var_1C], si inc si mov ax, 0A800h mov bx, [bp+var_1C] mov es, ax assume es:nothing mov byte ptr es:[bx], 0FFh jmp short loc_DD3B ; --------------------------------------------------------------------------- loc_DD3A: inc si loc_DD3B: mov al, [bp+var_2] dec [bp+var_2] or al, al jnz loc_DCA2 loc_DD47: cmp [bp+var_1], 0 jnz loc_DDDB cmp byte_129C9, 0 jnz short loc_DDCC les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_1D], al inc word ptr [bp+var_A] mov [bp+var_20], si mov ax, 0A800h mov bx, [bp+var_20] mov dl, [bp+var_1D] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_21], al inc word ptr [bp+var_A] mov [bp+var_24], si mov ax, 0B000h mov bx, [bp+var_24] mov dl, [bp+var_21] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_25], al inc word ptr [bp+var_A] mov [bp+var_28], si mov ax, 0B800h mov bx, [bp+var_28] mov dl, [bp+var_25] mov es, ax assume es:nothing mov es:[bx], dl les bx, [bp+var_A] assume es:nothing mov al, es:[bx] mov [bp+var_29], al inc word ptr [bp+var_A] mov [bp+var_2C], si mov ax, 0E000h mov bx, [bp+var_2C] mov dl, [bp+var_29] mov es, ax assume es:nothing mov es:[bx], dl jmp short loc_DDDB ; --------------------------------------------------------------------------- loc_DDCC: mov [bp+var_2E], si mov ax, 0A800h mov bx, [bp+var_2E] mov es, ax assume es:nothing mov byte ptr es:[bx], 0FFh loc_DDDB: inc si loc_DDDC: cmp si, 7D00h jb loc_DC6B cmp byte_129C9, 0 jz short loc_DDF0 call _grcg_off_func loc_DDF0: pop di pop si leave retf sub_DC1B endp ; --------------------------------------------------------------------------- enter 0Ah, 0 push si push di mov di, [bp+6] pushd dword ptr [bp+8] call file_ropen or ax, ax jz loc_DEEF push 64h ; 'd' call @$bnwa$qui pop cx mov [bp-6], dx mov [bp-8], ax push dx push ax push 40h call file_read push 4 push ds push offset aHgrx ; "HGRX" pushd dword ptr [bp-8] call _memcmp add sp, 0Ah or ax, ax jz short loc_DE41 call file_close jmp loc_DEEF ; --------------------------------------------------------------------------- loc_DE41: les bx, [bp-8] assume es:nothing cmp byte ptr es:[bx+4], 1 jnb short loc_DE53 call file_close jmp loc_DEEF ; --------------------------------------------------------------------------- loc_DE53: les bx, [bp-8] mov al, es:[bx+4] mov [di+18D2h], al mov ax, es:[bx+8] mov [bp-2], ax mov ax, es:[bx+0Ah] mov [bp-4], ax mov bx, di shl bx, 2 mov ax, [bx+1492h] or ax, [bx+1494h] jz short loc_DE82 push di nopcall sub_E02B pop cx loc_DE82: push word ptr [bp-2] call @$bnwa$qui pop cx mov bx, di shl bx, 2 mov [bx+1494h], dx mov [bx+1492h], ax or ax, dx jnz short loc_DEA3 call file_close jmp short loc_DEEF ; --------------------------------------------------------------------------- loc_DEA3: mov word ptr [bp-0Ah], 0 jmp short loc_DEF7 ; --------------------------------------------------------------------------- loc_DEAA: mov bx, di shl bx, 6 mov ax, [bp-0Ah] shl ax, 2 add bx, ax mov ax, [bx+14D2h] or ax, [bx+14D4h] jz short loc_DEC8 push di nopcall sub_E02B pop cx loc_DEC8: push word ptr [bp-4] call @$bnwa$qui pop cx mov bx, di shl bx, 6 mov si, [bp-0Ah] shl si, 2 add bx, si mov [bx+14D4h], dx mov [bx+14D2h], ax or ax, dx jnz short loc_DEF4 call file_close loc_DEEF: mov ax, 1 jmp short loc_DF5C ; --------------------------------------------------------------------------- loc_DEF4: inc word ptr [bp-0Ah] loc_DEF7: les bx, [bp-8] mov al, es:[bx+4] mov ah, 0 cmp ax, [bp-0Ah] jg short loc_DEAA mov bx, di shl bx, 2 pushd dword ptr [bx+1492h] push word ptr [bp-2] call file_read mov word ptr [bp-0Ah], 0 jmp short loc_DF3B ; --------------------------------------------------------------------------- loc_DF1E: mov bx, di shl bx, 6 mov ax, [bp-0Ah] shl ax, 2 add bx, ax pushd dword ptr [bx+14D2h] push word ptr [bp-4] call file_read inc word ptr [bp-0Ah] loc_DF3B: les bx, [bp-8] mov al, es:[bx+4] mov ah, 0 cmp ax, [bp-0Ah] jg short loc_DF1E push word ptr [bp-6] push bx call @$bdla$qnv add sp, 4 call file_close xor ax, ax loc_DF5C: pop di pop si leave retf ; --------------------------------------------------------------------------- enter 4, 0 push si push di mov si, [bp+6] pushd dword ptr [bp+8] call file_ropen or ax, ax jz loc_DFFF push 64h ; 'd' call @$bnwa$qui pop cx mov [bp-2], dx mov [bp-4], ax push dx push ax push 40h call file_read push 4 push ds push offset aHgrx ; "HGRX" pushd dword ptr [bp-4] call _memcmp add sp, 0Ah or ax, ax jz short loc_DFAC call file_close jmp short loc_DFFF ; --------------------------------------------------------------------------- loc_DFAC: les bx, [bp-4] cmp byte ptr es:[bx+4], 1 jnb short loc_DFBD call file_close jmp short loc_DFFF ; --------------------------------------------------------------------------- loc_DFBD: les bx, [bp-4] mov al, es:[bx+4] mov [si+18D2h], al mov di, es:[bx+8] mov bx, si shl bx, 2 mov ax, [bx+1492h] or ax, [bx+1494h] jz short loc_DFE2 push si nopcall sub_E02B pop cx loc_DFE2: push di call @$bnwa$qui pop cx mov bx, si shl bx, 2 mov [bx+1494h], dx mov [bx+1492h], ax or ax, dx jnz short loc_E004 call file_close loc_DFFF: mov ax, 1 jmp short loc_E027 ; --------------------------------------------------------------------------- loc_E004: mov bx, si shl bx, 2 pushd dword ptr [bx+1492h] push di call file_read pushd dword ptr [bp-4] call @$bdla$qnv add sp, 4 call file_close xor ax, ax loc_E027: pop di pop si leave retf ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_E02B proc far arg_0 = word ptr 6 push bp mov bp, sp push si push di mov si, [bp+arg_0] mov bx, si shl bx, 2 mov ax, [bx+1492h] or ax, [bx+1494h] jz short loc_E065 mov bx, si shl bx, 2 pushd dword ptr [bx+1492h] ; font call @$bdla$qnv add sp, 4 mov bx, si shl bx, 2 mov word ptr [bx+1494h], 0 mov word ptr [bx+1492h], 0 loc_E065: xor di, di jmp short loc_E0B1 ; --------------------------------------------------------------------------- loc_E069: mov bx, si shl bx, 6 mov ax, di shl ax, 2 add bx, ax mov ax, [bx+14D2h] or ax, [bx+14D4h] jz short loc_E0B0 mov bx, si shl bx, 6 mov ax, di shl ax, 2 add bx, ax pushd dword ptr [bx+14D2h] ; font call @$bdla$qnv add sp, 4 mov bx, si shl bx, 6 mov ax, di shl ax, 2 add bx, ax mov word ptr [bx+14D4h], 0 mov word ptr [bx+14D2h], 0 loc_E0B0: inc di loc_E0B1: cmp di, 10h jl short loc_E069 pop di pop si pop bp retf sub_E02B endp ; --------------------------------------------------------------------------- enter 0Eh, 0 push si push di pushd dword ptr [bp+8] call file_ropen or ax, ax jz loc_E213 push 64h ; 'd' call @$bnwa$qui pop cx mov [bp-6], dx mov [bp-8], ax push dx push ax push 60h call file_read push 4 push ds push offset aHgrz ; "HGRZ" pushd dword ptr [bp-8] call _memcmp add sp, 0Ah or ax, ax jz short loc_E104 call file_close jmp loc_E213 ; --------------------------------------------------------------------------- loc_E104: les bx, [bp-8] mov al, es:[bx+4] mov [bp-9], al mov ah, 0 cmp ax, [bp+0Ch] jle loc_E265 mov ax, [bp+0Ch] shl ax, 2 add ax, 8 mov di, ax add bx, di mov eax, es:[bx] mov [bp-0Eh], eax push eax push 0 call file_seek pushd dword ptr [bp-8] push 40h call file_read push 4 push ds push offset aHgrx ; "HGRX" pushd dword ptr [bp-8] call _memcmp add sp, 0Ah or ax, ax jz short loc_E15E call file_close jmp loc_E213 ; --------------------------------------------------------------------------- loc_E15E: les bx, [bp-8] cmp byte ptr es:[bx+4], 1 jnb short loc_E170 call file_close jmp loc_E213 ; --------------------------------------------------------------------------- loc_E170: les bx, [bp-8] mov al, es:[bx+4] mov bx, [bp+6] mov [bx+18D2h], al mov bx, [bp-8] mov ax, es:[bx+8] mov [bp-2], ax mov ax, es:[bx+0Ah] mov [bp-4], ax mov bx, [bp+6] shl bx, 2 mov ax, [bx+1492h] or ax, [bx+1494h] jz short loc_E1A7 push word ptr [bp+6] call sub_E02B pop cx loc_E1A7: push word ptr [bp-2] call @$bnwa$qui pop cx mov bx, [bp+6] shl bx, 2 mov [bx+1494h], dx mov [bx+1492h], ax or ax, dx jnz short loc_E1C9 call file_close jmp short loc_E213 ; --------------------------------------------------------------------------- loc_E1C9: xor di, di jmp short loc_E219 ; --------------------------------------------------------------------------- loc_E1CD: mov bx, [bp+6] shl bx, 6 mov ax, di shl ax, 2 add bx, ax mov ax, [bx+14D2h] or ax, [bx+14D4h] jz short loc_E1EC push word ptr [bp+6] call sub_E02B pop cx loc_E1EC: push word ptr [bp-4] call @$bnwa$qui pop cx mov bx, [bp+6] shl bx, 6 mov si, di shl si, 2 add bx, si mov [bx+14D4h], dx mov [bx+14D2h], ax or ax, dx jnz short loc_E218 call file_close loc_E213: mov ax, 1 jmp short loc_E278 ; --------------------------------------------------------------------------- loc_E218: inc di loc_E219: les bx, [bp-8] mov al, es:[bx+4] mov ah, 0 cmp ax, di jg short loc_E1CD mov bx, [bp+6] shl bx, 2 pushd dword ptr [bx+1492h] push word ptr [bp-2] call file_read xor di, di jmp short loc_E258 ; --------------------------------------------------------------------------- loc_E23D: mov bx, [bp+6] shl bx, 6 mov ax, di shl ax, 2 add bx, ax pushd dword ptr [bx+14D2h] push word ptr [bp-4] call file_read inc di loc_E258: les bx, [bp-8] mov al, es:[bx+4] mov ah, 0 cmp ax, di jg short loc_E23D loc_E265: pushd dword ptr [bp-8] call @$bdla$qnv add sp, 4 call file_close xor ax, ax loc_E278: pop di pop si leave retf op_09_TEXT ends ; =========================================================================== ; Segment type: Pure code op_10_TEXT segment byte public 'CODE' use16 extern _resident_stuff_set:proc extern _resident_free:proc op_10_TEXT ends ; =========================================================================== ; Segment type: Pure code op_11_TEXT segment byte public 'CODE' use16 extern _mdrv2_resident:proc extern _mdrv2_bgm_load:proc extern _mdrv2_bgm_play:proc extern _mdrv2_bgm_stop:proc extern _mdrv2_bgm_fade_out_nonblock:proc extern _mdrv2_check_board:proc op_11_TEXT ends ; =========================================================================== op_12_TEXT segment byte public 'CODE' use16 extern @ARC_FILE_LOAD$QNXC:proc extern @ARC_FILE_GET$QNCUI:proc extern @ARC_FILE_FREE$QV:proc op_12_TEXT ends ; =========================================================================== .data word_12320 dw 101h word_12322 dw 201h _mode db 0 byte_12325 db 0 byte_12326 db 0 byte_12327 db 0 byte_12328 db 0 byte_12329 db 0 byte_1232A db 0 byte_1232B db 0 byte_1232C db 0 byte_1232D db 0 byte_1232E db 0 byte_1232F db 0 dword_12330 dd 0 word_12334 dw 0 word_12336 dw 0 byte_12338 db 3 word_12339 dw 0 word_1233B dw 0 unk_1233D db 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 db 0 db 0 word_123C0 dw 0 word_123C2 dw 0 word_123C4 dw 0 word_123C6 dw 0 byte_123C8 db 0 word_123C9 dw 0 byte_123CB db 0 word_123CC dw 0 word_123CE dw 0 word_123D0 dw 0 word_123D2 dw 0 word_123D4 dw 0 word_123D6 dw 0 db 0 db 0 word_123DA dw 0 word_123DC dw 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 dd 0 db 0 db 0 db 0 off_124CD dd aVrvsvVqvs ; " START " dd aVbvnvmvsvhvmvt ; "CONTINUE" dd aB@vnvovsvhvnvm ; " OPTION " dd aB@b@vpvtvhvsb@ ; "  QUIT  " off_124DD dd aB@vqvVmvjb@ ; " RANK  " dd aVlvtvrvhvb ; " MUSIC " dd aVovkvVxvdvq ; "PLAYER " dd aVlbdvsvdvrvs ; "M.TEST " dd aB@vpvtvhvsb@ ; " QUIT  " off_124F1 dd aEasy ; " EASY " dd aNormal ; "NORMAL" dd aHard ; " HARD " dd aLunatic ; "LUNATIC" off_12501 dd aOff ; " OFF " dd aFm ; " FM " off_12509 dd a3 ; " 3 " dd a4 ; " 4 " dd a5 ; " 5 " dd a6 ; " 6 " dd a7 ; " 7 " byte_1251D db 0 off_1251E dd aVlvtvrvhvbb@vm ; "MUSIC No." dd aB@b@vpvxvivf ; "  Quit " off_12526 dd aASacretLot ; " A Sacret Lot" dd aXcvR_o ; " 風の神社 " dd aIiiuvIPc ; " 永遠の巫女 " dd aHighlyResponsi ; " Highly Responsive" dd aUmx dd aOrientalMagici ; " Oriental Magician" dd aB@FjoVPmsUbb@ ; "  破邪の小太刀  " dd aTheLegendOfKag ; " The Legend of KAGE" dd aPositiveAndNeg ; "Positive and Negative" dd aB@b@UvoguRrb@b ; "   天使伝説   " dd aB@b@b@CvlB@b@b ; "    魔鏡    " dd aVvvUVRVnvVOuvV ; "いざ倒れ逝くその時まで" dd aB@b@oavVVrvivV ; "  死なばもろとも  " dd aB@b@Rpchmxom ; "   星幽剣士" dd aB@b@b@gagcgkgx ; "   アイリス" word_12562 dw 63h word_12564 dw 0 word_12566 dw 0 word_12568 dw 0 word_1256A dw 0 word_1256C dw 0 off_1256E dd aReimu_mdt ; "reimu.mdt" dd aZipangu_mdt ; "ZIPANGU.mdt" dd aSt0_mdt ; "st0.mdt" dd aSt1_mdt ; "st1.mdt" dd aSt2_mdt ; "st2.mdt" dd aSt3_mdt ; "st3.mdt" dd aSt4_mdt ; "st4.mdt" dd aSt5_mdt ; "st5.mdt" dd aPositive_mdt ; "positive.mdt" dd aLegend_mdt ; "legend.mdt" dd aKami_mdt ; "kami.mdt" dd aTensi_mdt ; "tensi.mdt" dd aSyugen_mdt ; "syugen.mdt" dd aAlice_mdt ; "alice.mdt" dd aIris_mdt ; "iris.mdt" word_125AA dw 0 word_125AC dw 0 word_125AE dw 0 word_125B0 dw 0 ; char path[] path db 'reiiden.cfg',0 aRB db 'rb',0 ; char s[] s db 'REIIDEN',0 ; char aWb[] aWb db 'wb',0 ; char aReimu_mdt[] aReimu_mdt db 'reimu.mdt',0 aReiiden2_grp db 'REIIDEN2.grp',0 aReiiden3_grp db 'REIIDEN3.grp',0 aOp_win_grp db 'op_win.grp',0 ; char aReiiden_0[] aReiiden_0 db 'reiiden',0 aVgvhvsb@vjvdvx db ' HIT KEY',0 aVrvsvVqvs db ' START ',0 aVbvnvmvsvhvmvt db 'CONTINUE',0 aB@vnvovsvhvnvm db ' OPTION ',0 aB@b@vpvtvhvsb@ db '  QUIT  ',0 aB@vqvVmvjb@ db ' RANK  ',0 aVlvtvrvhvb db ' MUSIC ',0 aVovkvVxvdvq db 'PLAYER ',0 aVlbdvsvdvrvs db 'M.TEST ',0 aB@vpvtvhvsb@ db ' QUIT  ',0 aEasy db ' EASY ',0 aNormal db 'NORMAL',0 aHard db ' HARD ',0 aLunatic db 'LUNATIC',0 aOff db ' OFF ',0 aFm db ' FM ',0 a3 db ' 3 ',0 a4 db ' 4 ',0 a5 db ' 5 ',0 a6 db ' 6 ',0 a7 db ' 7 ',0 ; char aSS[] aSS db '%s%s',0 aVlvtvrvhvbb@vm db 'MUSIC No.',0 aB@b@vpvxvivf db '  Quit ',0 aASacretLot db ' A Sacret Lot',0 aXcvR_o db ' 風の神社 ',0 aIiiuvIPc db ' 永遠の巫女 ',0 aHighlyResponsi db ' Highly Responsive',0 aUmx db ' 東方怪奇談 ',0 aOrientalMagici db ' Oriental Magician',0 aB@FjoVPmsUbb@ db '  破邪の小太刀  ',0 aTheLegendOfKag db ' The Legend of KAGE',0 aPositiveAndNeg db 'Positive and Negative',0 aB@b@UvoguRrb@b db '   天使伝説   ',0 aB@b@b@CvlB@b@b db '    魔鏡    ',0 aVvvUVRVnvVOuvV db 'いざ倒れ逝くその時まで',0 aB@b@oavVVrvivV db '  死なばもろとも  ',0 aB@b@Rpchmxom db '   星幽剣士',0 aB@b@b@gagcgkgx db '   アイリス',0 ; char aS_2d[] aS_2d db '%s%.2d',0 aZipangu_mdt db 'ZIPANGU.mdt',0 aSt0_mdt db 'st0.mdt',0 aSt1_mdt db 'st1.mdt',0 aSt2_mdt db 'st2.mdt',0 aSt3_mdt db 'st3.mdt',0 aSt4_mdt db 'st4.mdt',0 aSt5_mdt db 'st5.mdt',0 aPositive_mdt db 'positive.mdt',0 aLegend_mdt db 'legend.mdt',0 aKami_mdt db 'kami.mdt',0 aTensi_mdt db 'tensi.mdt',0 aSyugen_mdt db 'syugen.mdt',0 aAlice_mdt db 'alice.mdt',0 aIris_mdt db 'iris.mdt',0 aGogbgGtg@gcglv db 'バッチファイルから起動してよ',0 aCon db 'CON',0 ; char format[] format db 'おつかれさまでした!!',0Ah,0 include th01/hardware/vsync[data].asm include th01/ztext[data].asm public _game_initialized _game_initialized db 0 db 0 include th01/hardware/palette[data].asm include th01/hardware/graph_r[data].asm include th01/hardware/respal[data].asm word_129B8 dw 1 word_129BA dw 1 dd 0 dd 0 db 0 db 0 db 0 byte_129C7 db 0 byte_129C8 db 0 byte_129C9 db 0 aHgrx db 'HGRX',0 aHgrz db 'HGRZ',0 include libs/master.lib/version[data].asm include libs/master.lib/grp[data].asm include libs/master.lib/pal[data].asm include libs/master.lib/respal_exist[data].asm include libs/master.lib/resdata[data].asm include libs/master.lib/fil[data].asm include libs/master.lib/keytable[data].asm include libs/master.lib/keystart[data].asm include libs/master.lib/keyback[data].asm include libs/master.lib/dos_ropen[data].asm include libs/master.lib/clip[data].asm include libs/master.lib/rand[data].asm public _res_id _res_id db 'ReiidenConfig',0 include th01/mdrv2[data].asm .data? ; TODO: Missing clip[bss].asm (16 bytes) somewhere in there... dword_13418 dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? include th01/hardware/vsync[bss].asm dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? db ? ; db ? ; db ? ; word_13627 dw ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? word_13665 dw ? db ? _int06_old dd ? include th01/hardware/graph[bss].asm include th01/hardware/vram_planes[bss].asm dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? unk_136D2 db ? ; dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? dd ? db ? ; db ? ; db ? ; ; void (*font)(void) font dd ? include libs/master.lib/pal[bss].asm include libs/master.lib/fil[bss].asm include libs/master.lib/keystart[bss].asm dd ? dd ? dd ? dd ? public _resident _resident dd ? end