; ; +-------------------------------------------------------------------------+ ; | This file has been generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2009 by Hex-Rays, | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 712EDD4642948A68F70365DC4DB06C62 ; File Name : th04/ZUN.COM:ZUNSP (-4) ; Format : MS-DOS COM-file ; Base Address: 0h Range: 100h-1180h Loaded length: 1080h ; OS type : MS DOS ; Application type: Executable 16bit .386 .model tiny ; =========================================================================== ; Segment type: Pure code seg000 segment byte public 'CODE' use16 assume cs:seg000 org 100h assume es:nothing, ss:nothing, ds:seg000, fs:nothing, gs:nothing public start start: jmp short sub_10C ; --------------------------------------------------------------------------- aSprite16 db 'SPRITE16',0 db 4 ; =============== S U B R O U T I N E ======================================= ; Attributes: noreturn sub_10C proc near ; FUNCTION CHUNK AT 0191 SIZE 0000000B BYTES cld push offset aZunsp_comVersi ; "ZUNSP.COM Version 1.00 Copyright(C) "... call sub_676 push es mov ax, 0 mov es, ax assume es:seg000 mov bx, word ptr es:start mov es, word ptr es:aSprite16 ; "SPRITE16" assume es:nothing mov ax, es:[bx+2] xchg al, ah pop es assume es:nothing cmp ax, 'OK' jnz short loc_137 mov word_F40, 1 jmp short loc_13D ; --------------------------------------------------------------------------- loc_137: mov word_F40, 0 loc_13D: mov ax, 1180h shr ax, 4 inc ax mov word_F43, ax mov sp, offset word_F38 push ds pop es assume es:seg000 mov bx, word_F43 mov ah, 4Ah int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) ; ES = segment address of block to change ; BX = new size in paragraphs jnb short loc_161 push offset aGbgvgkpkpmvOFs ; "メモリ縮小に失敗しました。\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_161: mov di, 81h mov al, 0Dh mov cx, 80h repne scasb mov byte ptr [di-1], 0 mov si, 81h call sub_920 cmp word_1070, 0 jbe short loc_186 call sub_A36 mov ax, 4C00h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- jmp short loc_191 ; --------------------------------------------------------------------------- loc_186: push offset aUsageZunspZPat ; "Usage: ZUNSP -z (常駐)\r\n "... call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) sub_10C endp ; AL = exit code ; --------------------------------------------------------------------------- ; START OF FUNCTION CHUNK FOR sub_10C loc_191: cmp cs:word_F40, 0 jz short locret_19B int 40h ; Hard disk - Relocated Floppy Handler (original INT 13h) locret_19B: retn ; END OF FUNCTION CHUNK FOR sub_10C ; =============== S U B R O U T I N E ======================================= sub_19C proc near mov bx, 1000 mov ah, 48h int 21h ; DOS - 2+ - ALLOCATE MEMORY ; BX = number of 16-byte paragraphs desired jnb short loc_1B0 push offset aGbgvgkvkslvsvV ; "メモリが足りません。\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_1B0: mov word_F3C, ax add word_F43, 1000 mov bx, 1000 mov ah, 48h int 21h ; DOS - 2+ - ALLOCATE MEMORY ; BX = number of 16-byte paragraphs desired jnb short loc_1CD push offset aGbgvgkvkslvsvV ; "メモリが足りません。\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_1CD: mov word_F3E, ax add word_F43, 1000 retn sub_19C endp ; =============== S U B R O U T I N E ======================================= sub_1D7 proc near call sub_A0A mov byte_F42, al retn sub_1D7 endp ; =============== S U B R O U T I N E ======================================= sub_1DE proc near call sub_19C call sub_520 call sub_540 call sub_610 push ds push es mov ds, word_F3C xor si, si mov ax, 0A800h mov es, ax assume es:nothing xor di, di mov cx, 1F40h rep movsw pop es assume es:nothing pop ds retn sub_1DE endp ; =============== S U B R O U T I N E ======================================= sub_201 proc near call sub_19C call sub_540 call sub_A0A mov dx, ax call sub_A0A mov bx, ax call sub_A0A mov di, ax call sub_A0A push ax call sub_A0A mov cx, ax pop ax call sub_BD0 call sub_364 call sub_C10 retn sub_201 endp ; =============== S U B R O U T I N E ======================================= sub_22A proc far push bx mov bl, ah xor bh, bh shl bx, 1 mov bx, cs:off_103E[bx] mov cs:word_F45, bx pop bx sti call cs:word_F45 iret sub_22A endp ; =============== S U B R O U T I N E ======================================= sub_243 proc near push es xor ax, ax mov es, ax assume es:seg000 mov bl, byte_F42 xor bh, bh shl bx, 2 mov es, word ptr es:[bx+2] assume es:nothing mov di, 102h mov si, 102h mov cx, 0Ah repe cmpsb pop es jz short loc_2A6 call sub_19C push es xor ax, ax mov es, ax assume es:seg000 mov dx, cs mov ax, offset sub_22A mov bl, byte_F42 xor bh, bh shl bx, 2 xchg dx, es:[bx+2] xchg ax, es:[bx] mov word_F38, dx mov word_F3A, ax pop es assume es:nothing movzx eax, byte_F42 push eax mov bx, sp mov dx, offset aPatuvVVVBbInt0 ; "常駐しました。(int %02Xh)\r\n" call sub_640 add sp, 4 mov dx, word_F43 mov ax, 3100h int 21h ; DOS - DOS 2+ - TERMINATE BUT STAY RESIDENT ; AL = exit code, DX = program size, in paragraphs ; --------------------------------------------------------------------------- jmp short locret_2AC ; --------------------------------------------------------------------------- loc_2A6: push offset aVVVPatuvVVvvVB ; "すでに常駐しています。\r\n" call sub_676 locret_2AC: retn sub_243 endp ; =============== S U B R O U T I N E ======================================= sub_2AD proc near xor ax, ax mov es, ax assume es:seg000 mov bl, byte_F42 xor bh, bh shl bx, 2 mov es, word ptr es:[bx+2] assume es:nothing mov di, 102h mov si, 102h mov cx, 0Ah repe cmpsb jnz short loc_339 mov dx, es:word_F38 mov ax, es:word_F3A push es xor ax, ax mov es, ax assume es:seg000 mov bl, byte_F42 xor bh, bh shl bx, 2 mov es:[bx+2], dx mov es:[bx], ax pop es assume es:nothing push es mov es, word ptr es:2Ch mov ah, 49h int 21h ; DOS - 2+ - FREE MEMORY ; ES = segment address of area to be freed jnb short loc_2FC push offset aKLlcIci ; "環境領域解放失敗\r\n" call sub_676 loc_2FC: pop es push es mov es, word ptr es:0F3Ch mov ah, 49h int 21h ; DOS - 2+ - FREE MEMORY ; ES = segment address of area to be freed jnb short loc_30F push offset aGGxgngfbGCIci ; "マスクデータ領域解放失敗\r\n" call sub_676 loc_30F: pop es push es mov es, word ptr es:0F3Eh mov ah, 49h int 21h ; DOS - 2+ - FREE MEMORY ; ES = segment address of area to be freed jnb short loc_322 push offset aGxgGfbGCIci ; "ベタデータ領域解放失敗\r\n" call sub_676 loc_322: pop es mov ah, 49h int 21h ; DOS - 2+ - FREE MEMORY ; ES = segment address of area to be freed jnb short loc_331 push offset aGrbGhcIci ; "コード領域解放失敗\r\n" call sub_676 jmp short locret_33F ; --------------------------------------------------------------------------- loc_331: push offset aI ; "解放しました。\r\n" call sub_676 jmp short locret_33F ; --------------------------------------------------------------------------- loc_339: push offset aPatuvVVvvVV ; "常駐していません。\r\n" call sub_676 locret_33F: retn sub_2AD endp ; =============== S U B R O U T I N E ======================================= sub_340 proc near mov cs:word_1064, dx retn sub_340 endp ; =============== S U B R O U T I N E ======================================= sub_346 proc near mov cs:word_1066, dx retn sub_346 endp ; =============== S U B R O U T I N E ======================================= sub_34C proc near mov cs:word_1068, dx retn sub_34C endp ; =============== S U B R O U T I N E ======================================= sub_352 proc near mov cs:word_106E, dx retn sub_352 endp ; =============== S U B R O U T I N E ======================================= sub_358 proc near mov cs:word_106A, dx retn sub_358 endp ; =============== S U B R O U T I N E ======================================= sub_35E proc near mov cs:word_106C, dx retn sub_35E endp ; =============== S U B R O U T I N E ======================================= sub_364 proc near push ax push bx push cx push dx push si push di push bp push ds push es push cs pop ds xor ah, ah mov word_105A, dx mov word_105C, bx mov word_105E, di mov word_1060, ax mov word_1062, cx mov word_1054, 0 cmp word_105C, 0 jge short loc_3C1 mov ax, word_105C add ax, word_1062 cmp ax, 0 jg short loc_3A1 jmp short loc_3F8 ; --------------------------------------------------------------------------- jmp short loc_3EE ; --------------------------------------------------------------------------- loc_3A1: mov ax, 0 sub ax, word_105C mov word_1054, ax shl ax, 4 mov dx, ax shl ax, 2 add ax, dx add word_105E, ax mov word_105C, 0 jmp short loc_3EE ; --------------------------------------------------------------------------- loc_3C1: cmp word_105C, 0C8h jb short loc_3CD jmp short loc_3F8 ; --------------------------------------------------------------------------- jmp short loc_3EE ; --------------------------------------------------------------------------- loc_3CD: mov dx, word_105C add dx, word_1062 cmp dx, 0C8h jle short loc_3EE mov ax, 0C8h sub ax, word_105C mov dx, word_1062 sub dx, ax mov word_1054, dx jmp short $+2 loc_3EE: mov ax, word_1054 sub word_1062, ax call sub_402 loc_3F8: pop es pop ds pop bp pop di pop si pop dx pop cx pop bx pop ax retn sub_364 endp ; =============== S U B R O U T I N E ======================================= sub_402 proc near mov si, word_105E mov ax, word_105A shr ax, 3 and ax, 0FFFEh xor dx, dx mov cx, word_105C imul di, cx, 50h add di, ax mov ax, word_105A and ax, 0Fh mov word_1050, ax mov dx, 4ACh mov ax, word_1050 shl ax, 4 out dx, ax mov word_1052, 0 xor ax, ax cmp word_1050, 0 setnz al mov word_1052, ax mov ax, 0A800h mov es, ax assume es:nothing mov dx, 4AEh mov ax, word_1060 shl ax, 4 dec ax out dx, ax mov ax, word_1060 add ax, word_1052 mov word_1058, ax mov ax, word_1058 shl ax, 1 mov dx, 50h sub dx, ax mov word_1056, dx cmp cs:word_1064, 0 jz short loc_49C mov dx, 4A2h mov ax, 0FFh out dx, ax mov dx, 4A8h mov ax, cs:word_106C out dx, ax mov dx, 4A2h mov ax, 40FFh out dx, ax mov dx, 4A4h mov ax, 0CACh out dx, ax mov dx, 4A6h mov ax, cs:word_1066 out dx, ax mov ds, cs:word_F3E jmp short loc_4EB ; --------------------------------------------------------------------------- loc_49C: cmp cs:word_1068, 0 jz short loc_4CB mov dx, 4A0h mov ax, 0FFF0h out dx, ax mov dx, 4A2h mov ax, 0FFh out dx, ax mov dx, 4A4h mov ax, 0CC0h out dx, ax mov dx, 4A8h mov ax, cs:word_106C out dx, ax mov ds, cs:word_F3C call sub_4F8 jmp short loc_4DA ; --------------------------------------------------------------------------- loc_4CB: mov dx, 4A2h mov ax, 0FFh out dx, ax mov dx, 4A8h mov ax, cs:word_106C out dx, ax loc_4DA: mov dx, 4A4h mov ax, cs:word_106A out dx, ax mov ax, 0A800h mov ds, ax assume ds:nothing add si, 3E80h loc_4EB: mov dx, 4A0h mov ax, cs:word_106E out dx, ax call sub_4F8 retn sub_402 endp ; --------------------------------------------------------------------------- nop ; =============== S U B R O U T I N E ======================================= sub_4F8 proc near push si push di mov bx, cs:word_1062 mov dx, cs:word_1058 mov ax, cs:word_1056 loc_508: mov cx, dx rep movsw add si, ax add di, ax dec bx jnz short loc_508 pop di pop si retn sub_4F8 endp ; --------------------------------------------------------------------------- db 10 dup(0) ; =============== S U B R O U T I N E ======================================= sub_520 proc near push ds push es pusha mov al, 1 out 6Ah, al ; PC-98 GDC (6a): ; xor al, al out 0A6h, al ; Interrupt Controller #2, 8259A call sub_5D0 call sub_5F7 call sub_5A4 xor al, al out 0A4h, al ; Interrupt Controller #2, 8259A xor al, al out 0A6h, al ; Interrupt Controller #2, 8259A popa pop es assume es:nothing pop ds assume ds:seg000 retn sub_520 endp ; =============== S U B R O U T I N E ======================================= sub_540 proc near push ds push es pusha call sub_C10 xor al, al out 0A6h, al ; Interrupt Controller #2, 8259A mov es, cs:word_F3E xor di, di xor ax, ax mov cx, 1F40h rep stosw mov es, cs:word_F3E mov ax, 0A800h call sub_590 mov ax, 0B000h call sub_590 mov ax, 0B800h call sub_590 mov ax, 0E000h call sub_590 mov ds, cs:word_F3E mov es, cs:word_F3C xor si, si xor di, di mov cx, 1F40h loc_586: lodsw not ax stosw loop loc_586 popa pop es pop ds retn sub_540 endp ; =============== S U B R O U T I N E ======================================= sub_590 proc near mov ds, ax xor bx, bx mov cx, 1F40h loc_597: mov ax, [bx+3E80h] or es:[bx], ax add bx, 2 loop loc_597 retn sub_590 endp ; =============== S U B R O U T I N E ======================================= sub_5A4 proc near push ds push es pusha call sub_BD0 mov ax, 0A800h mov ds, ax assume ds:nothing mov bl, 0 mov bh, 1 mov di, 3E80h mov cx, 1F40h loc_5B9: mov al, bl out 0A6h, al ; Interrupt Controller #2, 8259A mov dx, [di] mov al, bh out 0A6h, al ; Interrupt Controller #2, 8259A mov [di], dx inc di inc di loop loc_5B9 call sub_C10 popa pop es pop ds assume ds:seg000 retn sub_5A4 endp ; =============== S U B R O U T I N E ======================================= sub_5D0 proc near push ds push es pusha call sub_BD0 mov ax, 0A800h mov ds, ax assume ds:nothing mov es, ax assume es:nothing xor si, si xor di, di mov cx, 0C8h loc_5E4: push cx mov cx, 28h rep movsw pop cx add si, 50h loop loc_5E4 call sub_C10 popa pop es assume es:nothing pop ds assume ds:seg000 retn sub_5D0 endp ; =============== S U B R O U T I N E ======================================= sub_5F7 proc near call sub_BD0 mov ax, 0A800h mov ds, ax assume ds:nothing mov es, ax assume es:nothing mov si, 0 mov di, 3E80h mov cx, 1F40h rep movsw call sub_C10 retn sub_5F7 endp ; =============== S U B R O U T I N E ======================================= sub_610 proc near push es pusha call sub_BD0 mov dx, 4A4h mov ax, 0 out dx, ax mov ax, 0A800h mov es, ax xor di, di mov ax, 0 mov cx, 1F40h rep stosw call sub_C10 popa pop es assume es:nothing retn sub_610 endp ; --------------------------------------------------------------------------- db 15 dup(0) ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_640 proc near var_D0 = byte ptr -0D0h enter 0D0h, 0 push es push di push ss pop es lea di, [bp+var_D0] call sub_6B0 push ds push dx push ss pop ds assume ds:seg000 lea dx, [bp+var_D0] call sub_660 pop dx pop ds pop di pop es leave retn sub_640 endp ; =============== S U B R O U T I N E ======================================= sub_660 proc near push ax push dx push si mov si, dx loc_665: mov dl, [si] or dl, dl jz short loc_672 mov ah, 2 int 21h ; DOS - DISPLAY OUTPUT ; DL = character to send to standard output inc si jmp short loc_665 ; --------------------------------------------------------------------------- loc_672: pop si pop dx pop ax retn sub_660 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_676 proc near arg_0 = word ptr 4 push bp mov bp, sp push dx push ds mov dx, [bp+arg_0] push ss pop ds call sub_660 pop ds pop dx pop bp retn 2 sub_676 endp ; =============== S U B R O U T I N E ======================================= sub_689 proc near cmp dl, 30h jb short loc_692 cmp dl, 3Ah retn ; --------------------------------------------------------------------------- loc_692: clc retn sub_689 endp ; =============== S U B R O U T I N E ======================================= sub_694 proc near cmp al, 61h jb short loc_69B cmp al, 7Bh retn ; --------------------------------------------------------------------------- loc_69B: clc retn sub_694 endp ; =============== S U B R O U T I N E ======================================= sub_69D proc near call sub_694 jnb short locret_6A4 and al, 0DFh locret_6A4: retn sub_69D endp ; --------------------------------------------------------------------------- db 11 dup(0) ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_6B0 proc near var_50 = byte ptr -50h var_18 = word ptr -18h var_14 = dword ptr -14h var_10 = word ptr -10h var_C = word ptr -0Ch var_8 = word ptr -8 var_4 = word ptr -4 enter 50h, 0 pusha push ds push es mov si, dx jmp loc_86D ; --------------------------------------------------------------------------- loc_6BC: cmp byte ptr [si], 25h jnz loc_83F mov [bp+var_4], 0 mov [bp+var_8], 0 mov [bp+var_C], 0 mov [bp+var_10], 0 inc si cmp byte ptr [si], 2Dh jnz short loc_6E3 inc si mov [bp+var_C], 1 loc_6E3: cmp byte ptr [si], 30h jnz short loc_6EE inc si mov [bp+var_10], 1 loc_6EE: xor ax, ax xor dx, dx jmp short loc_701 ; --------------------------------------------------------------------------- loc_6F4: imul ax, 0Ah xor dx, dx mov dl, [si] sub dl, 30h add ax, dx inc si loc_701: cmp byte ptr [si], 30h jb short loc_70B cmp byte ptr [si], 39h jbe short loc_6F4 loc_70B: mov [bp+var_4], ax cmp byte ptr [si], 75h jnz short loc_779 inc si mov edx, ss:[bx] add bx, 4 mov [bp+var_14], 0Ah loc_723: push ds push bx push ss pop ds lea bx, [bp+var_50] mov ecx, [bp+var_14] call sub_89F lea dx, [bp+var_50] call sub_C40 add [bp+var_8], ax pop bx pop ds cmp [bp+var_C], 0 jnz short loc_75F cmp [bp+var_10], 0 jz short loc_74D call sub_87D jmp short loc_750 ; --------------------------------------------------------------------------- loc_74D: call sub_883 loc_750: push ds push si push ss pop ds lea si, [bp+var_50] call sub_897 pop si pop ds jmp loc_86D ; --------------------------------------------------------------------------- loc_75F: cmp [bp+var_C], 1 jnz loc_86D push ds push si push ss pop ds lea si, [bp+var_50] call sub_897 pop si pop ds call sub_883 jmp loc_86D ; --------------------------------------------------------------------------- loc_779: cmp byte ptr [si], 64h jnz short loc_7A3 inc si mov edx, ss:[bx] add bx, 4 or edx, edx jns short loc_796 neg edx mov byte ptr es:[di], 2Dh inc di inc [bp+var_8] loc_796: mov [bp+var_14], 0Ah jmp short loc_723 ; --------------------------------------------------------------------------- jmp loc_86D ; --------------------------------------------------------------------------- loc_7A3: cmp byte ptr [si], 78h jnz short loc_7C3 inc si mov edx, ss:[bx] add bx, 4 mov [bp+var_14], 10h mov [bp+var_18], 1 jmp loc_723 ; --------------------------------------------------------------------------- jmp loc_86D ; --------------------------------------------------------------------------- loc_7C3: cmp byte ptr [si], 58h jnz short loc_7E3 inc si mov edx, ss:[bx] add bx, 4 mov [bp+var_14], 10h mov [bp+var_18], 0 jmp loc_723 ; --------------------------------------------------------------------------- jmp loc_86D ; --------------------------------------------------------------------------- loc_7E3: cmp byte ptr [si], 62h jnz short loc_802 inc si mov edx, ss:[bx] add bx, 4 mov [bp+var_14], 2 mov [bp+var_18], 0 jmp loc_723 ; --------------------------------------------------------------------------- jmp short loc_86D ; --------------------------------------------------------------------------- loc_802: cmp byte ptr [si], 73h jnz short loc_830 inc si push ds push si lds si, ss:[bx] add bx, 4 mov dx, si call sub_C40 mov [bp+var_8], ax cmp [bp+var_C], 0 jnz short loc_826 call sub_883 call sub_897 jmp short loc_82C ; --------------------------------------------------------------------------- loc_826: call sub_897 call sub_883 loc_82C: pop si pop ds jmp short loc_86D ; --------------------------------------------------------------------------- loc_830: cmp byte ptr [si], 'c' jnz short loc_86D inc si mov al, ss:[bx] add bx, 4 stosb jmp short loc_86D ; --------------------------------------------------------------------------- loc_83F: cmp word ptr [si], 'n\' jnz short loc_850 add si, 2 mov al, 0Dh stosb mov al, 0Ah stosb jmp short loc_86D ; --------------------------------------------------------------------------- loc_850: cmp word ptr [si], 'r\' jnz short loc_85E add si, 2 mov al, 0Dh stosb jmp short loc_86D ; --------------------------------------------------------------------------- loc_85E: cmp word ptr [si], 't\' jnz short loc_86C add si, 2 mov al, 9 stosb jmp short loc_86D ; --------------------------------------------------------------------------- loc_86C: movsb loc_86D: cmp byte ptr [si], 0 jnz loc_6BC mov byte ptr es:[di], 0 pop es pop ds popa leave retn sub_6B0 endp ; =============== S U B R O U T I N E ======================================= sub_87D proc near mov al, 30h call sub_889 retn sub_87D endp ; =============== S U B R O U T I N E ======================================= sub_883 proc near mov al, 20h call sub_889 retn sub_883 endp ; =============== S U B R O U T I N E ======================================= sub_889 proc near mov cx, [bp-4] sub cx, [bp-8] cmp cx, 1 jl short locret_896 rep stosb locret_896: retn sub_889 endp ; =============== S U B R O U T I N E ======================================= sub_897 proc near lodsb stosb or al, al jnz short sub_897 dec di retn sub_897 endp ; =============== S U B R O U T I N E ======================================= sub_89F proc near push eax push ebx push ecx push edx mov eax, edx push bx loc_8AB: xor edx, edx div ecx mov dl, byte ptr cs:a0123456789abcd[edx] ; "0123456789ABCDEF" cmp word ptr [bp-18h], 0 jz short loc_8C2 or dl, 20h loc_8C2: mov [bx], dl inc bx or eax, eax jnz short loc_8AB mov byte ptr [bx], 0 pop bx mov dx, bx call sub_8EC pop edx pop ecx pop ebx pop eax retn sub_89F endp ; --------------------------------------------------------------------------- a0123456789abcd db '0123456789ABCDEF' ; =============== S U B R O U T I N E ======================================= sub_8EC proc near push es push ax push cx push dx push si push di push ds pop es assume es:seg000 mov di, dx xor al, al mov cx, 0FFFFh repne scasb sub di, 2 mov si, dx jmp short loc_90C ; --------------------------------------------------------------------------- loc_904: mov al, [si] xchg al, [di] mov [si], al inc si dec di loc_90C: cmp si, di jnb short loc_915 cmp byte ptr [si], 0 jnz short loc_904 loc_915: pop di pop si pop dx pop cx pop ax pop es assume es:nothing retn sub_8EC endp ; --------------------------------------------------------------------------- db 4 dup(0) ; =============== S U B R O U T I N E ======================================= sub_920 proc near push ax push bx push cx push dx push si push di mov word_1070, 0 mov di, offset byte_1072 loc_92F: call sub_982 mov al, [si] or al, al jz short loc_940 cmp al, 0Dh jz short loc_940 cmp al, 3Bh jnz short loc_945 loc_940: mov byte ptr [si], 0 jmp short loc_97B ; --------------------------------------------------------------------------- loc_945: cmp byte ptr [si], 22h jnz short loc_96D inc si mov [di], si add di, 2 inc word_1070 call sub_9B5 jnb short loc_964 push offset aSVVVsVkmivVivs ; "対になる \" が見つかりません。\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_964: mov byte ptr [si], 0 inc si call sub_999 jmp short loc_92F ; --------------------------------------------------------------------------- loc_96D: mov [di], si add di, 2 inc word_1070 call sub_999 jmp short loc_92F ; --------------------------------------------------------------------------- loc_97B: pop di pop si pop dx pop cx pop bx pop ax retn sub_920 endp ; =============== S U B R O U T I N E ======================================= sub_982 proc near mov al, [si] cmp al, 20h jz short loc_992 cmp al, 2Ch jz short loc_992 cmp al, 9 jz short loc_992 jmp short locret_998 ; --------------------------------------------------------------------------- loc_992: mov byte ptr [si], 0 inc si jmp short sub_982 ; --------------------------------------------------------------------------- locret_998: retn sub_982 endp ; =============== S U B R O U T I N E ======================================= sub_999 proc near mov al, [si] cmp al, 20h jz short loc_9AF cmp al, 2Ch jz short loc_9AF cmp al, 9 jz short loc_9AF or al, al jz short loc_9AF cmp al, 0Dh jnz short loc_9B1 loc_9AF: jmp short locret_9B4 ; --------------------------------------------------------------------------- loc_9B1: inc si jmp short sub_999 ; --------------------------------------------------------------------------- locret_9B4: retn sub_999 endp ; =============== S U B R O U T I N E ======================================= sub_9B5 proc near mov al, [si] cmp al, 22h jnz short loc_9BE clc jmp short locret_9CC ; --------------------------------------------------------------------------- loc_9BE: or al, al jz short loc_9C6 cmp al, 0Dh jnz short loc_9C9 loc_9C6: stc jmp short locret_9CC ; --------------------------------------------------------------------------- loc_9C9: inc si jmp short sub_9B5 ; --------------------------------------------------------------------------- locret_9CC: retn sub_9B5 endp ; =============== S U B R O U T I N E ======================================= sub_9CD proc near cmp word_1070, 0 jnz short loc_9DF push offset aI_0 ; "引数が足りません。\r\n\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_9DF: dec word_1070 mov si, word_10F2 add word_10F2, 2 mov si, [si] retn sub_9CD endp ; =============== S U B R O U T I N E ======================================= sub_9EF proc near cmp word_1070, 0 jnz short loc_9F9 stc jmp short locret_A09 ; --------------------------------------------------------------------------- loc_9F9: dec word_1070 mov si, word_10F2 add word_10F2, 2 mov si, [si] clc locret_A09: retn sub_9EF endp ; =============== S U B R O U T I N E ======================================= sub_A0A proc near push si push dx call sub_9CD mov dx, si call sub_A90 jnb short loc_A21 push offset aRftlvVCVvtlvko ; "数値では無い値が指定されています。\r\n\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_A21: pop dx pop si retn sub_A0A endp ; =============== S U B R O U T I N E ======================================= sub_A24 proc near push si push dx mov ax, 0 call sub_9EF jnb short loc_A33 mov dx, si call sub_A90 loc_A33: pop dx pop si retn sub_A24 endp ; =============== S U B R O U T I N E ======================================= sub_A36 proc near mov word_10F2, offset byte_1072 loc_A3C: mov si, word_10F2 add word_10F2, 2 mov si, [si] cmp word_1070, 0 jnz short loc_A50 jmp short locret_A88 ; --------------------------------------------------------------------------- loc_A50: dec word_1070 mov al, [si] cmp al, 2Dh jnz short loc_A5E mov al, 2Fh mov [si], al loc_A5E: mov bx, offset off_101C loc_A61: cmp word ptr [bx], 0 jnz short loc_A71 push offset aGigvgvgzguvkcM ; "オプションが無効です。\r\n\r\n" call sub_676 mov ax, 4C01h int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) ; AL = exit code ; --------------------------------------------------------------------------- loc_A71: mov di, [bx] call sub_C52 jnz short loc_A81 pusha push es call word ptr [bx+2] pop es popa jmp short loc_A86 ; --------------------------------------------------------------------------- loc_A81: add bx, 4 jmp short loc_A61 ; --------------------------------------------------------------------------- loc_A86: jmp short loc_A3C ; --------------------------------------------------------------------------- locret_A88: retn sub_A36 endp ; --------------------------------------------------------------------------- db 7 dup(0) ; =============== S U B R O U T I N E ======================================= sub_A90 proc near push bx push dx push si mov si, dx cmp byte ptr [si], 27h jnz short loc_ABB cmp word ptr [si+2], 27h jnz short loc_AA8 mov al, [si+1] xor ah, ah clc jmp short loc_B01 ; --------------------------------------------------------------------------- loc_AA8: cmp word ptr [si+3], 27h jnz short loc_AB6 mov ax, [si+1] xchg ah, al clc jmp short loc_B01 ; --------------------------------------------------------------------------- loc_AB6: xor ax, ax stc jmp short loc_B01 ; --------------------------------------------------------------------------- loc_ABB: cmp byte ptr [si], 24h jnz short loc_AC6 inc si call sub_B4B jmp short loc_B01 ; --------------------------------------------------------------------------- loc_AC6: mov dx, si call sub_C40 mov bx, ax mov al, [bx+si-1] call sub_69D cmp al, 48h jnz short loc_AE6 mov dl, [bx+si-1] mov byte ptr [bx+si-1], 0 call sub_B4B mov [bx+si-1], dl jmp short loc_B01 ; --------------------------------------------------------------------------- loc_AE6: cmp al, 42h jnz short loc_AF9 mov dl, [bx+si-1] mov byte ptr [bx+si-1], 0 call sub_B75 mov [bx+si-1], dl jmp short loc_B01 ; --------------------------------------------------------------------------- loc_AF9: call sub_B05 jnb short loc_B01 call sub_BA2 loc_B01: pop si pop dx pop bx retn sub_A90 endp ; =============== S U B R O U T I N E ======================================= sub_B05 proc near push si push dx push cx push bp xor ax, ax xor dx, dx mov bp, 0 cmp byte ptr [si], 2Dh jnz short loc_B1B inc si mov bp, 0FFFFh jmp short loc_B21 ; --------------------------------------------------------------------------- loc_B1B: cmp byte ptr [si], 2Bh jnz short loc_B21 inc si loc_B21: mov dl, [si] inc si or dl, dl jz short loc_B3E call sub_689 jb short loc_B30 stc jmp short loc_B46 ; --------------------------------------------------------------------------- loc_B30: push dx mov cx, 0Ah mul cx pop dx sub dl, 30h add ax, dx jmp short loc_B21 ; --------------------------------------------------------------------------- loc_B3E: cmp bp, 0FFFFh jnz short loc_B45 neg ax loc_B45: clc loc_B46: pop bp pop cx pop dx pop si retn sub_B05 endp ; =============== S U B R O U T I N E ======================================= sub_B4B proc near push si push dx xor dx, dx loc_B4F: lodsb or al, al jz short loc_B70 cmp al, 5Bh jb short loc_B5A sub al, 20h loc_B5A: sub al, 30h cmp al, 0Ah jb short loc_B66 sub al, 7 cmp al, 10h jnb short loc_B6F loc_B66: xor ah, ah shl dx, 4 add dx, ax jmp short loc_B4F ; --------------------------------------------------------------------------- loc_B6F: stc loc_B70: mov ax, dx pop dx pop si retn sub_B4B endp ; =============== S U B R O U T I N E ======================================= sub_B75 proc near push si push bx push dx mov dx, si call sub_C40 mov bx, si add bx, ax xor ax, ax jmp short loc_B99 ; --------------------------------------------------------------------------- loc_B85: mov dl, [si] cmp dl, 30h jz short loc_B94 cmp dl, 31h jz short loc_B94 stc jmp short loc_B9E ; --------------------------------------------------------------------------- loc_B94: shr dl, 1 rcl ax, 1 inc si loc_B99: cmp si, bx jnz short loc_B85 clc loc_B9E: pop dx pop bx pop si retn sub_B75 endp ; =============== S U B R O U T I N E ======================================= sub_BA2 proc near push di push es push cs pop es assume es:seg000 mov ax, 1 mov di, offset aOn ; "ON" call sub_C52 jz short loc_BC2 mov ax, 0 mov di, offset aOff ; "OFF" call sub_C52 jz short loc_BC2 mov ax, 0 stc jmp short loc_BC3 ; --------------------------------------------------------------------------- loc_BC2: clc loc_BC3: pop es assume es:nothing pop di retn sub_BA2 endp ; --------------------------------------------------------------------------- db 10 dup(0) ; =============== S U B R O U T I N E ======================================= sub_BD0 proc near push ax push dx cli mov al, 7 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 5 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 6 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 80h out 7Ch, al mov dx, 4A0h mov ax, 0FFF0h out dx, ax mov dx, 4A2h mov ax, 0FFh out dx, ax mov dx, 4A4h mov ax, 28F0h out dx, ax mov dx, 4A8h mov ax, 0FFFFh out dx, ax mov dx, 4ACh xor ax, ax out dx, ax mov dx, 4AEh mov ax, 0Fh out dx, ax sti pop dx pop ax retn sub_BD0 endp ; =============== S U B R O U T I N E ======================================= sub_C10 proc near push ax push dx cli mov dx, 4A0h mov ax, 0FFF0h out dx, ax mov dx, 4A2h mov ax, 0FFh out dx, ax mov dx, 4A8h mov ax, 0FFFFh out dx, ax mov al, 7 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 4 out 6Ah, al ; PC-98 GDC (6a): ; mov al, 6 out 6Ah, al ; PC-98 GDC (6a): ; xor al, al out 7Ch, al sti pop dx pop ax retn sub_C10 endp ; --------------------------------------------------------------------------- db 4 dup(0) ; =============== S U B R O U T I N E ======================================= sub_C40 proc near push si push dx mov si, dx mov dx, 0FFFFh loc_C47: inc dx lodsb or al, al jnz short loc_C47 mov ax, dx pop dx pop si retn sub_C40 endp ; =============== S U B R O U T I N E ======================================= sub_C52 proc near push ax push dx push si push di loc_C56: mov al, [si] call sub_69D mov dl, al mov al, es:[di] call sub_69D mov dh, al inc si inc di cmp dl, dh jnz short loc_C6F or dl, dl jnz short loc_C56 loc_C6F: cmp dl, dh pop di pop si pop dx pop ax retn sub_C52 endp ; --------------------------------------------------------------------------- db 10 dup(0) aGbgvgkpkpmvOFs db 'メモリ縮小に失敗しました。',0Dh,0Ah,0 aVVVPatuvVVvvVB db 'すでに常駐しています。',0Dh,0Ah,0 aKLlcIci db '環境領域解放失敗',0Dh,0Ah,0 aGGxgngfbGCIci db 'マスクデータ領域解放失敗',0Dh,0Ah,0 aGxgGfbGCIci db 'ベタデータ領域解放失敗',0Dh,0Ah,0 aGrbGhcIci db 'コード領域解放失敗',0Dh,0Ah,0 aI db '解放しました。',0Dh,0Ah,0 aPatuvVVvvVV db '常駐していません。',0Dh,0Ah,0 db 200h dup(0) word_F38 dw 0 word_F3A dw 0 word_F3C dw 0 word_F3E dw 0 word_F40 dw 0 byte_F42 db 42h word_F43 dw 0 word_F45 dw 0 aGbgvgkvkslvsvV db 'メモリが足りません。',0Dh,0Ah,0 aPatuvVVVBbInt0 db '常駐しました。(int %02Xh)',0Dh,0Ah,0 aZunsp_comVersi db 'ZUNSP.COM Version 1.00 Copyright(C) 1997 ZUN ',0Dh,0Ah db 0Dh,0Ah,0 aUsageZunspZPat db 'Usage: ZUNSP -z (常駐)',0Dh,0Ah db ' -r (解放)',0Dh,0Ah,0 aZ db '/Z',0 aR db '/R',0 aV db '/V',0 aMasktest db 'MASKTEST',0 aPressy db 'PRESSY',0 aCopyul db 'COPYUL',0 aClsu db 'CLSU',0 aSprite db 'SPRITE',0 off_101C dw offset aZ, offset sub_243 dw offset aR, offset sub_2AD dw offset aV, offset sub_1D7 dw offset aMasktest, offset sub_1DE dw offset aPressy, offset sub_5D0 dw offset aCopyul, offset sub_5A4 dw offset aClsu, offset sub_610 dw offset aSprite, offset sub_201 dw 0 off_103E dw offset sub_520 dw offset sub_540 dw offset sub_364 dw offset sub_340 dw offset sub_346 dw offset sub_34C dw offset sub_352 dw offset sub_358 dw offset sub_35E word_1050 dw 0 word_1052 dw 0 word_1054 dw 0 word_1056 dw 0 word_1058 dw 0 word_105A dw 0 word_105C dw 0 word_105E dw 0 word_1060 dw 0 word_1062 dw 0 word_1064 dw 0 word_1066 dw 0Fh word_1068 dw 1 word_106A dw 28FCh word_106C dw 0FFFFh word_106E dw 0FFF0h word_1070 dw 0 byte_1072 db 80h dup(0) word_10F2 dw 0 aSVVVsVkmivVivs db '対になる " が見つかりません。',0Dh,0Ah,0 aI_0 db '引数が足りません。',0Dh,0Ah db 0Dh,0Ah,0 aRftlvVCVvtlvko db '数値では無い値が指定されています。',0Dh,0Ah db 0Dh,0Ah,0 aGigvgvgzguvkcM db 'オプションが無効です。',0Dh,0Ah db 0Dh,0Ah,0 db 3 dup(0) aOn db 'ON',0 aOff db 'OFF',0 db 9 dup(0) seg000 ends end start