; ; +-------------------------------------------------------------------------+ ; | This file has been generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2009 by Hex-Rays, | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : DE5454973591EBD937B11452A8B4882D ; File Name : th01/ZUNSOFT.COM ; Format : MS-DOS COM-file ; Base Address: 0h Range: 100h-2870h Loaded length: 2770h ; OS type : MS DOS ; Application type: Executable 16bit .386 .model tiny DGROUP group seg000 include ReC98.inc ; =========================================================================== ; Segment type: Pure code seg000 segment word public 'CODE' use16 assume cs:seg000 org 100h assume es:nothing, ss:seg000, ds:seg000, fs:nothing, gs:nothing include libs/BorlandC/c0.asm ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_367 proc near push bp mov bp, sp mov dx, 0A6h mov al, 1 out dx, al call graph_clear mov dx, 0A6h mov al, 0 out dx, al call graph_clear mov dx, 0A4h mov al, 0 out dx, al pop bp retn sub_367 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_384 proc near push bp mov bp, sp call mem_assign_all call graph_start call key_beep_off call text_systemline_hide call text_cursor_hide call egc_start call sub_367 call text_clear mov byte ptr ds:2870h, 0 mov byte ptr ds:2871h, 1 push 60h push 64h push 21Fh push 12Bh call grc_setclip call graph_hide push 21CEh call super_entry_bfnt call palette_show mov PaletteTone, 0 call palette_show call graph_show pop bp retn sub_384 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_3D0 proc near push bp mov bp, sp call super_free call sub_367 call mem_unassign call text_clear call egc_start pop bp retn sub_3D0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_3E4 proc near arg_0 = word ptr 4 arg_2 = byte ptr 6 arg_4 = word ptr 8 arg_6 = word ptr 0Ah push bp mov bp, sp push si push di mov si, [bp+arg_6] mov di, [bp+arg_4] mov ax, [bp+arg_0] cwd mov bl, [bp+arg_2] mov bh, 0 and bx, 0FFh add bx, bx push ax mov ax, [bx+2368h] push dx cwd pop cx pop bx call N_LXMUL@ mov cl, 8 call near ptr N_LXRSH@ mov [si], ax mov ax, [bp+arg_0] cwd mov bl, [bp+arg_2] mov bh, 0 and bx, 0FFh add bx, bx push ax mov ax, [bx+22E8h] push dx cwd pop cx pop bx call N_LXMUL@ mov cl, 8 call near ptr N_LXRSH@ mov [di], ax pop di pop si pop bp retn 8 sub_3E4 endp ; sp-analysis failed ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_439 proc near push bp mov bp, sp push si mov word ptr ds:2878h, 80h mov word ptr ds:2952h, 0FFF8h mov word ptr ds:287Ah, 140h mov word ptr ds:295Ah, 8 mov word ptr ds:287Ch, 100h loc_45B: mov word ptr ds:2954h, 0FFF8h mov word ptr ds:287Eh, 0F0h mov word ptr ds:295Ch, 8 mov word ptr ds:2880h, 180h mov word ptr ds:2956h, 0FFF8h mov word ptr ds:2882h, 0A0h mov word ptr ds:295Eh, 8 mov word ptr ds:2884h, 200h mov word ptr ds:2958h, 0FFF8h mov word ptr ds:2886h, 50h mov word ptr ds:2960h, 8 mov word ptr ds:2950h, 0 mov byte ptr ds:2872h, 0 mov byte ptr ds:2873h, 0 mov byte ptr ds:2874h, 17h mov byte ptr ds:2875h, 0 mov byte ptr ds:2876h, 0 xor si, si jmp short loc_4F5 ; --------------------------------------------------------------------------- loc_4C0: call IRand mov bx, 280h cwd idiv bx mov bx, si shl bx, 2 mov [bx+2888h], dx call IRand mov bx, 190h cwd idiv bx mov bx, si shl bx, 2 mov [bx+288Ah], dx call IRand mov bx, 20h cwd idiv bx add dl, 6 mov [si+2963h], dl inc si loc_4F5: cmp si, 32h jl short loc_4C0 mov byte ptr ds:2962h, 40h pop si loc_500: pop bp retn sub_439 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_502 proc near push bp mov bp, sp push si mov si, 3 jmp loc_5A6 ; --------------------------------------------------------------------------- loc_50C: push 0C0h mov al, [si+21D9h] cbw push ax call grcg_setcolor mov bx, si shl bx, 2 push word ptr [bx+2878h] mov bx, si shl bx, 2 push word ptr [bx+287Ah] push 60h call grcg_circlefill mov bx, si add bx, bx mov ax, [bx+2952h] mov bx, si shl bx, 2 add [bx+2878h], ax mov bx, si add bx, bx mov ax, [bx+295Ah] mov bx, si shl bx, 2 add [bx+287Ah], ax mov bx, si shl bx, 2 cmp word ptr [bx+2878h], 20h jle short loc_56A mov bx, si shl bx, 2 cmp word ptr [bx+2878h], 25Fh jle short loc_57B loc_56A: mov bx, si add bx, bx mov dx, 0FFFFh mov ax, [bx+2952h] imul dx mov [bx+2952h], ax loc_57B: mov bx, si shl bx, 2 cmp word ptr [bx+287Ah], 20h jle short loc_594 mov bx, si shl bx, 2 cmp word ptr [bx+287Ah], 16Fh jle short loc_5A5 loc_594: mov bx, si add bx, bx mov dx, 0FFFFh mov ax, [bx+295Ah] imul dx mov [bx+295Ah], ax loc_5A5: dec si loc_5A6: or si, si jl short loc_5AD jmp loc_50C ; --------------------------------------------------------------------------- loc_5AD: mov dx, 7Ch mov al, 0 out dx, al pop si pop bp retn sub_502 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_5B6 proc near var_4 = word ptr -4 var_2 = word ptr -2 enter 4, 0 push si push 0C0h push 5 call grcg_setcolor xor si, si jmp loc_66E ; --------------------------------------------------------------------------- loc_5C8: mov bx, si shl bx, 2 push word ptr [bx+2888h] mov bx, si shl bx, 2 push word ptr [bx+288Ah] call grcg_pset lea ax, [bp+var_2] push ax lea ax, [bp+var_4] push ax push word ptr ds:2962h mov al, [si+2963h] mov ah, 0 push ax call sub_3E4 mov bx, si shl bx, 2 mov ax, [bp+var_2] add [bx+2888h], ax mov bx, si shl bx, 2 mov ax, [bp+var_4] add [bx+288Ah], ax mov bx, si shl bx, 2 cmp word ptr [bx+2888h], 0 jge short loc_624 mov bx, si shl bx, 2 add word ptr [bx+2888h], 280h jmp short loc_63C ; --------------------------------------------------------------------------- loc_624: mov bx, si shl bx, 2 cmp word ptr [bx+2888h], 280h jl short loc_63C mov bx, si shl bx, 2 sub word ptr [bx+2888h], 280h loc_63C: mov bx, si shl bx, 2 cmp word ptr [bx+288Ah], 0 jge short loc_655 mov bx, si shl bx, 2 add word ptr [bx+288Ah], 190h jmp short loc_66D ; --------------------------------------------------------------------------- loc_655: mov bx, si shl bx, 2 cmp word ptr [bx+288Ah], 190h jl short loc_66D mov bx, si shl bx, 2 sub word ptr [bx+288Ah], 190h loc_66D: inc si loc_66E: cmp si, 32h jge short loc_676 jmp loc_5C8 ; --------------------------------------------------------------------------- loc_676: inc byte ptr ds:2962h mov dx, 7Ch mov al, 0 out dx, al pop si leave retn sub_5B6 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_683 proc near push bp mov bp, sp loc_686: out 5Fh, al in al, 0A0h ; PIC 2 same as 0020 for PIC 1 test al, 20h jnz short loc_686 loc_68E: out 5Fh, al in al, 0A0h ; PIC 2 same as 0020 for PIC 1 test al, 20h jz short loc_68E pop bp retn sub_683 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_698 proc near push bp mov bp, sp cmp word ptr ds:2950h, 32h jge short loc_6A5 jmp loc_7CB ; --------------------------------------------------------------------------- loc_6A5: cmp word ptr ds:2950h, 5Ah jge short loc_6CD cmp word ptr ds:2950h, 37h jnz short loc_6B6 jmp loc_7A6 ; --------------------------------------------------------------------------- loc_6B6: cmp word ptr ds:2950h, 3Ch jnz short loc_6C0 jmp loc_7A6 ; --------------------------------------------------------------------------- loc_6C0: cmp word ptr ds:2950h, 41h jz short loc_6CA jmp loc_7AE ; --------------------------------------------------------------------------- loc_6CA: jmp loc_7A6 ; --------------------------------------------------------------------------- loc_6CD: cmp word ptr ds:2950h, 6Eh jge short loc_720 push 100h push 0C0h mov al, ds:2873h cbw push ax mov al, ds:2874h cbw push ax push word ptr ds:2876h mov al, ds:2875h cbw push ax call super_wave_put push 140h push 0C0h mov al, ds:2873h cbw inc ax push ax mov al, ds:2874h cbw push ax push word ptr ds:2876h mov al, ds:2875h cbw push ax call super_wave_put dec byte ptr ds:2874h loc_711: mov al, ds:2875h add al, 4 mov ds:2875h, al mov al, ds:2876h add al, 4 jmp short loc_781 ; --------------------------------------------------------------------------- loc_720: cmp word ptr ds:2950h, 82h jge short loc_786 cmp word ptr ds:2950h, 6Eh jnz short loc_737 mov al, ds:2873h add al, 2 mov ds:2873h, al loc_737: push 100h push 0C0h mov al, ds:2873h cbw push ax mov al, ds:2874h cbw push ax push word ptr ds:2876h mov al, ds:2875h cbw push ax call super_wave_put push 140h push 0C0h mov al, ds:2873h cbw inc ax push ax mov al, ds:2874h cbw push ax push word ptr ds:2876h mov al, ds:2875h cbw push ax call super_wave_put inc byte ptr ds:2874h mov al, ds:2875h add al, 4 mov ds:2875h, al mov al, ds:2876h add al, 0FCh loc_781: mov ds:2876h, al pop bp retn ; --------------------------------------------------------------------------- loc_786: cmp word ptr ds:2950h, 0AAh jge short loc_7CB cmp word ptr ds:2950h, 9Bh jz short loc_7A6 cmp word ptr ds:2950h, 0A0h jz short loc_7A6 cmp word ptr ds:2950h, 0A5h jnz short loc_7AE loc_7A6: mov al, ds:2873h add al, 2 mov ds:2873h, al loc_7AE: push 100h push 0C0h mov al, ds:2873h cbw push ax call super_put_8 push 140h push 0C0h mov al, ds:2873h cbw inc ax push ax call super_put_8 loc_7CB: pop bp retn sub_698 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) _main proc near _argc = word ptr 4 _argv = word ptr 6 _envp = word ptr 8 push bp mov bp, sp push si push di xor ax, ax mov es, ax assume es:seg000 test byte ptr es:loc_45B+1, 40h jz short loc_7F0 mov al, 7 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 20h out 6Ah, al ; PC-98 GDC (6a): ; mov al, 6 out 6Ah, al ; PC-98 GDC (6a): ; and byte ptr es:[54Dh], 7Fh loc_7F0: call sub_384 call sub_439 loc_7F6: cmp word ptr ds:2950h, 0B4h jle short loc_80C cmp byte ptr ds:2872h, 0 jle short loc_873 mov al, ds:2872h add al, 0FEh jmp short loc_818 ; --------------------------------------------------------------------------- loc_80C: cmp byte ptr ds:2872h, 64h jge short loc_822 mov al, ds:2872h add al, 2 loc_818: mov ds:2872h, al cbw mov PaletteTone, ax call palette_show loc_822: push 0C0h push 0 call grcg_setcolor push 0Ch push 64h push 43h push 12Bh call grcg_byteboxfill_x call sub_5B6 call sub_502 call sub_698 call sub_683 call sub_683 mov al, ds:2870h mov ds:2871h, al out 0A4h, al xor byte ptr ds:2870h, 1 mov al, ds:2870h out 0A6h, al xor di, di xor si, si jmp short loc_864 ; --------------------------------------------------------------------------- loc_85D: push si call key_sense or di, ax inc si loc_864: cmp si, 8 jl short loc_85D or di, di jnz short loc_873 inc word ptr ds:2950h jmp short loc_7F6 ; --------------------------------------------------------------------------- loc_873: call sub_3D0 pop di pop si pop bp retn _main endp include libs/BorlandC/text_clear.asm include libs/BorlandC/txesc.asm db 0 include libs/master.lib/graph_400line.asm include libs/master.lib/graph_clear.asm include libs/master.lib/graph_hide.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/keybeep.asm include libs/master.lib/key_sense.asm include libs/master.lib/bfnt_header_read.asm include libs/master.lib/bfnt_entry_pat.asm include libs/master.lib/bfnt_header_analysis.asm include libs/master.lib/bfnt_palette_set.asm include libs/master.lib/dos_close.asm include libs/master.lib/dos_ropen.asm include libs/master.lib/super_entry_bfnt.asm include libs/master.lib/super_cancel_pat.asm include libs/master.lib/super_entry_pat.asm include libs/master.lib/super_put_8.asm include libs/master.lib/super_free.asm include libs/master.lib/super_entry_at.asm include libs/master.lib/super_wave_put.asm include libs/master.lib/smem_wget.asm include libs/master.lib/smem_release.asm include libs/master.lib/memheap.asm include libs/master.lib/mem_assign.asm include libs/master.lib/mem_unassign.asm include libs/master.lib/grc_setclip.asm include libs/master.lib/grcg_hline.asm include libs/master.lib/grcg_setcolor.asm include libs/master.lib/grcg_pset.asm include libs/master.lib/egc.asm include libs/master.lib/grcg_circlefill.asm include libs/master.lib/grcg_byteboxfill_x.asm include libs/master.lib/random.asm include libs/BorlandC/__abort.asm include libs/BorlandC/atexit.asm include libs/BorlandC/errormsg.asm include libs/BorlandC/exit.asm include libs/BorlandC/H_LRSH.ASM include libs/BorlandC/__IOERROR.ASM include libs/BorlandC/_isatty.asm include libs/BorlandC/lseek.asm include libs/BorlandC/N_LXMUL.ASM include libs/BorlandC/setupio.asm include libs/BorlandC/brk.asm include libs/BorlandC/nearheap.asm include libs/BorlandC/fflush.asm include libs/BorlandC/flushall.asm include libs/BorlandC/fseek.asm include libs/BorlandC/setvbuf.asm include libs/BorlandC/_strlen.asm include libs/BorlandC/write.asm include libs/BorlandC/writea.asm include libs/BorlandC/xfflush.asm ; --------------------------------------------------------------------------- db 0 db 0 db 0 include libs/BorlandC/c0[data].asm aTouhou_dat db 'touhou.dat',0 db 4, 3, 2, 1, 0 include libs/master.lib/version[data].asm include libs/master.lib/grp[data].asm db 0 include libs/master.lib/pal[data].asm include libs/master.lib/bfnt_id[data].asm include libs/master.lib/dos_ropen[data].asm include libs/master.lib/super_entry_bfnt[data].asm include libs/master.lib/superpa[data].asm include libs/master.lib/mem[data].asm include libs/master.lib/clip[data].asm include libs/master.lib/edges[data].asm include libs/master.lib/sin8[data].asm include libs/master.lib/sin7[data].asm include libs/master.lib/rand[data].asm aAbnormalProgra db 'Abnormal program termination',0Dh,0Ah,0 db 0 include libs/BorlandC/atexit[data].asm include libs/BorlandC/exit[data].asm include libs/BorlandC/files[data].asm __heaplen dw 0 include libs/BorlandC/__IOERROR[data].asm db 0 __stklen dw 1000h include libs/BorlandC/nearheap[data].asm include libs/BorlandC/setvbuf[data].asm include libs/BorlandC/sysnerr[data].asm InitStart label byte include libs/BorlandC/setupio[initdata].asm InitEnd label byte ExitStart label byte ExitEnd label byte bdata@ label byte ; TODO: Missing clip[bss].asm (8 bytes) somewhere in there... db 126h dup(?) include libs/master.lib/pal[bss].asm include libs/master.lib/superpa[bss].asm include libs/master.lib/super_wave_put[bss].asm db ? include libs/master.lib/mem[bss].asm dd ? dd ? dd ? dd ? include libs/BorlandC/atexit[bss].asm edata@ label byte seg000 ends end startx