MANIMANIAのレトロエロゲーカウントダウン

人生の残り時間が半分を切ったというのに若き日に目にしたエロゲーに魂を引かれ続けるイタいおっさんがこなしたゲームを紹介。

晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その2)

2012-07-03 12:14:43 | レトロパソコンのお作法
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その1)からの続き。
最初の1行だけ重複してます。

3B66:074C E8 0001 call sub_13 ; (0750)

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0678, 074C ;ディスクリザルト,ディスクリセットルーチン
;##########################################################################

3B66:0750 sub_13 proc near
3B66:0750 2B C0 sub ax,ax ; AX=0000H
3B66:0752 8E C0 mov es,ax ; ES=0000H
3B66:0754 ,BB 0564 mov bx,0564h ;
3B66:0757 B0 C0 mov al,0C0h
3B66:0759 B9 0004 mov cx,4

3B66:075C locloop_27: ; xref 3B66:0762
3B66:075C 26: 08 07 or es:[bx],al
3B66:075F 83 C3 08 add bx,8
3B66:0762 E2 F8 loop locloop_27 ; Loop if cx > 0

3B66:0764 B4 0D mov ah,0Dh
3B66:0766 CD 21 int 21h ; DOS Services ah=function 0Dh
; flush disk buffers to disk
3B66:0768 C3 retn
sub_13 endp

3B66:074F C3 retn ;==================================================================
sub_12 endp


3B66:0793 E8 FEF4 call sub_10 ; (068A)

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0793
;##########################################################################

3B66:068A sub_10 proc near
3B66:068A 56 push si ; SI退避
3B66:068B 06 push es ; ES退避
3B66:068C 2B F6 sub si,si ; SI=0000H
3B66:068E B8 0002 mov ax,2 ; AX=0002H
3B66:0691 B1 21 mov cl,21h ; CL=21H
3B66:0693 D3 E8 shr ax,cl ; AXを21H回右シフト。AX=0000H,
; Shift w/zeros fill
3B66:0695 A9 0001 test ax,1 ; ZF=0
3B66:0698 74 39 jz 06D3h ; Jump if zero,ZF=1なら06D3Hへ
3B66:069A 46 inc si ; SI=0001H
3B66:069B 1E push ds ; DS退避
3B66:069C 2B C0 sub ax,ax ; AX=0000H
3B66:069E 8E D8 mov ds,ax ; DS=0000H
3B66:06A0 ,BB 0018 mov bx,0018 ; BX=0018H
3B66:06A3 8B 07 mov ax,[bx] ; AX=DS:[0018H],STOPキーの割込ベクタオフセットのメモリ
3B66:06A5 2E: A3 06DC mov cs:[06DCH],ax ; CS:[06DCH]にSTOPキーの割込ベクタオフセットのメモリを代入
3B66:06A9 8B 47 02 mov ax,[bx+2] ; AX=DS:[001AH],STOPキーの割込ベクタセグメントのメモリ
3B66:06AC 2E: A3 06DE mov cs:[06DEH],ax ; CS:[06DEH]に=STOPキーの割込ベクタセグメントのメモリを代入
3B66:06B0 B8 06E0 mov ax,6E0h ; AX=6E0H
3B66:06B3 89 07 mov [bx],ax ; DS:[0018H],STOPキーの割込ベクタオフセットのメモリを6E0Hに書き換え
3B66:06B5 8C 4F 02 mov [bx+2],cs ; DS:[001AH],STOPキーの割込ベクタセグメントのメモリをCS:に書き換え
; [001AH]:[0018H]=本来のSTOPキーの割込ベクタを[06DEH]:[06DCH]にコピーし,
; STOPキーの割込ベクタをCS:[06E0H]にコピーした
3B66:06B8 2B C0 sub ax,ax ; AX=0000H
3B66:06BA BB 00FF mov bx,0FFh ; BX=00FFH
3B66:06BD 0F ;* pop cs ; DS=CS,Dangerous-8088 only
3B66:06BE BE 2EC3 mov si,2EC3h ; SI=2EC3H
3B66:06C1 C4 16 06DC les dx,dword ptr ds:06DCh ; Load seg:offset ptr,word load reg and ES
; DXに[06DCH],ESにDS:,=本来のSTOPキーの割込ベクタのメモリをロード
3B66:06C5 ,BB 0018 mov bx,0018 ; BX=0018H
3B66:06C8 89 17 mov [bx],dx ; [0018H]にDS:[06DCH]を代入
3B66:06CA 8C 47 02 mov [bx+2],es ; [001AH]にDS:を代入 ;★本来のSTOPキーの割込ベクタの内容に戻っただけか?
3B66:06CD 1F pop ds ; DS復帰
3B66:06CE 0B C0 or ax,ax ; Zero ? AX=0000HなのでZF=1
3B66:06D0 74 01 jz 06D3h ; Jump if zero ZF=1なので06D3Hへ
3B66:06D2 46 inc si ; SI=2EC4H
3B66:06D3 loc_23: ; xref 3B66:0698, 06D0
3B66:06D3 8B C6 mov ax,si ; 06D0HからきたときはSI=23C3H=AX
3B66:06D5 A2 0616 mov [0616h],al ; [0616H]=C3H
3B66:06D8 07 pop es ; ES復帰
3B66:06D9 5E pop si ; SI復帰
3B66:06DA C3 retn
sub_10 endp

3B66:0796 0E push cs ;
3B66:0797 07 pop es ; ES=CS
3B66:0798 BB 061E mov bx,61Eh ; BX=061EH
3B66:079B 83 C3 0F add bx,0Fh ; BX=062DH
3B66:079E B1 04 mov cl,4 ; CL=04H
3B66:07A0 D3 EB shr bx,cl ; BXを4H回右シフト。BX=0062H
; Shift w/zeros fill
3B66:07A2 C3 retn
sub_14 endp

3B66:020E B4 4A mov ah,4Ah ; 割り当てられたメモリブロックのサイズ変更。メモリ開放処理。
3B66:0210 CD 21 int 21h ; DOS Services ah=function 4Ah, ES=メモリ領域のセグメントアドレス
; change memory allocation BX==開放したいメモリの大きさ(パラグラフ)
; bx=bytes/16, es=mem segment
3B66:0212 ,BA 0368 mov dx,0368H ; DX=0368H,文字列'メモリーが解放できません。$'
3B66:0215 73 07 jnc 021Eh ; Jump if carry=0, CF=0(エラーなし)なら0021EHへ

3B66:0217 90 nop


ADVSHELL endp
;**********************************************************************************************
;メモリ解放エラー発生時
3B66:0218 sub_1 proc near
3B66:0218 loc_1: ; xref 3B66:0254
3B66:0218 E8 0069 call 0284h ; (0284) エラー文字列表示ルーチンへ

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0218 ; エラー文字列表示ルーチン
;##########################################################################

3B66:0284 sub_3 proc near
3B66:0284 B4 09 mov ah,9 ; DX=0368Hで飛んできた。文字列 'メモリーが解放できません。$'
3B66:0286 CD 21 int 21h ; DOS Services ah=function 09h 文字列の表示,DS:DXから$までの文字列を画面に表示
; display char string at ds:dx
3B66:0288 loc_10: ; xref 3B66:028A
3B66:0288 ,FA cli ; Disable interrupts 外部割込禁止
3B66:0289 F4 hlt ; Halt processor 割込がかかるまでCPUを停止させる
3B66:028A EB FC jmp short loc_10 ; (0288)
sub_3 endp

;メモリ解放エラー発生時処理終了
;**********************************************************************************************
;使われない処理?
3B66:021B 90 nop
3B66:021C loc_2: ; xref 3B66:021C
3B66:021C EB FE jmp short loc_2 ; (021C) 無限ループ
sub_1 endp

;メモリ解放成功時 プログラムロード準備ルーチン

3B66:021E loc_3: ; xref 3B66:0215
3B66:021E ,BE 03FA mov si,03FAH ; SI=03FAH
3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[03FAH],INT 0FEHの割込ベクタセグメントアドレス
3B66:0223 84 C0 test al,al ; (3B66:03FA=01H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=03C0H=[03FBH]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03A3H=[03FDH]
3B66:0230 83 C6 05 add si,5 ; SI=03FFH
3B66:0233 FE C8 dec al ; AL=00H
3B66:0235 74 18 jz 024Fh ; Jump if zero

3B66:0237 FE C8 dec al
3B66:0239 74 08 jz 0243h ; Jump if zero
3B66:023B FE C8 dec al
3B66:023D 75 10 jnz 024Fh ; Jump if not zero

3B66:023F B0 02 mov al,2 ; AL=02H
3B66:0241 EB 08 jmp short 024Bh ; (024B)

3B66:0243 loc_7: ; xref 3B66:0239
3B66:0243 2A C0 sub al,al ; AL=00H
3B66:0245 8B D9 mov bx,cx
3B66:0247 CD F1 int 0F1h ; ??INT Non-standard interrupt

3B66:0249 B0 01 mov al,1 ; AL=01H

3B66:024B loc_8: ; xref 3B66:0241
3B66:024B CD F1 int 0F1h ; ??INT Non-standard interrupt
3B66:024D EB D2 jmp short 0221h ; (0221)

3B66:024F loc_9: ; xref 3B66:0235, 023D
3B66:024F 56 push si ; SI退避,SI=03FFH
3B66:0250 E8 0005 call sub_2 ; (0258)

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################

3B66:0258 sub_2 proc near ; CX=03C0H,DX=03A3H(='MUSDRV.COM')
3B66:0258 0E push cs
3B66:0259 07 pop es ; CS=ES,パラメータブロックセグメントアドレス
3B66:025A FE 06 03A0 inc byte ptr [03A0h] ; (3B66:03A0=30H='0')インクリメントして31H='1'
3B66:025E ,BB 041E mov bx,041Eh ; BX=041EH,パラメータブロックオフセットアドレス
; パラメータブロックはCS:041EH
3B66:0261 C7 07 0000 mov word ptr [bx],0 ; DS:[041EH]=0000H ;041EH以下のメモリ書き換え
3B66:0265 89 4F 02 mov [bx+2],cx ; DS:[0420H]=CX=03C0H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 C0 03 DS DS 5C 00 DS DS
3B66:026B C7 47 06 005C mov word ptr [bx+6],5Ch ; DS:[0424H]=005CH ;0428 6C 00 DS DS
3B66:0270 8C 5F 08 mov [bx+8],ds ; DS:[0426H]=DS
3B66:0273 C7 47 0A 006C mov word ptr [bx+0Ah],6Ch ; DS:[0428H]=006CH
3B66:0278 8C 5F 0C mov [bx+0Ch],ds ; DS:[042AH]=DS
3B66:027B B8 4B00 mov ax,4B00h ; プログラムのロードと実行
; DS:DX==実行可能プログラムファイルのASCIIZパス名の位置,パス名はNULLで終わらなければならない。
; ES:BX=パラメータブロックの位置 (03C0=00 0D) ドライブ番号0H:カレント,リターンキーのキャラクターコード
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F0Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(1)$'
3B66:0283 C3 retn
sub_2 endp

3B66:0253 5E pop si ; SI復帰,SI=03FFH
3B66:0254 72 C2 jc 0218h ; Jump if carry Set エラーなければCF=0でスルー,エラーがあればCF=1なので0218Hへ

;**********************************************************************************************
;プログラムロードエラー発生時
3B66:0218 sub_1 proc near
3B66:0218 loc_1: ; xref 3B66:0254
3B66:0218 E8 0069 call 0284h ; (0284) エラー文字列表示ルーチンへ

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0218 ; エラー文字列表示ルーチン
;##########################################################################

3B66:0284 sub_3 proc near
3B66:0284 B4 09 mov ah,9 ; DX=0383Hで飛んできた。文字列 'プログラムが起動できません。(0)$'
3B66:0286 CD 21 int 21h ; DOS Services ah=function 09h 文字列の表示,DS:DXから$までの文字列を画面に表示
; display char string at ds:dx
3B66:0288 loc_10: ; xref 3B66:028A
3B66:0288 ,FA cli ; Disable interrupts 外部割込禁止
3B66:0289 F4 hlt ; Halt processor 割込がかかるまでCPUを停止させる
3B66:028A EB FC jmp short loc_10 ; (0288)
sub_3 endp
;**********************************************************************************************
;プログラムロード成功時
3B66:0256 EB C9 jmp short 0221h ; (0221),SI=03FFH

3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[03FFH]
3B66:0223 84 C0 test al,al ; (3B66:03FF=01H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=03C4H=[0400H]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03AEH=[0402H]
3B66:0230 83 C6 05 add si,5 ; SI=0404H
3B66:0233 FE C8 dec al ; AL=00H
3B66:0235 74 18 jz 024Fh ; Jump if zero

(省略)
3B66:024F loc_9: ; xref 3B66:0235, 023D
3B66:024F 56 push si ; SI退避,SI=0404H
3B66:0250 E8 0005 call sub_2 ; (0258)

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################

3B66:0258 sub_2 proc near ; CX=03C4H,DX=03AEH(='HARE.EXE')
3B66:0258 0E push cs
3B66:0259 07 pop es ; CS=ES,パラメータブロックセグメントアドレス
3B66:025A FE 06 03A0 inc byte ptr [03A0h] ; (3B66:03A0=31H='1')インクリメントして32H='2'
3B66:025E ,BB 041E mov bx,041Eh ; BX=041EH,パラメータブロックオフセットアドレス
; パラメータブロックはCS:041EH
3B66:0261 C7 07 0000 mov word ptr [bx],0 ; DS:[041EH]=0000H ;041EH以下のメモリ書き換え
3B66:0265 89 4F 02 mov [bx+2],cx ; DS:[0420H]=CX=03C4H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 C4 03 DS DS 5C 00 DS DS
3B66:026B C7 47 06 005C mov word ptr [bx+6],5Ch ; DS:[0424H]=005CH,第1FCB ;0428 6C 00 DS DS
3B66:0270 8C 5F 08 mov [bx+8],ds ; DS:[0426H]=DS
3B66:0273 C7 47 0A 006C mov word ptr [bx+0Ah],6Ch ; DS:[0428H]=006CH,第2FCB
3B66:0278 8C 5F 0C mov [bx+0Ch],ds ; DS:[042AH]=DS
3B66:027B B8 4B00 mov ax,4B00h ; プログラムのロードと実行
; DS:DX=パス名の位置,ES:BX=パラメータブロックの位置(03C4=02 20 31 0D)
;ドライブ番号2=B:半角スペース'1'リターンキー
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F1Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(2)$'
3B66:0283 C3 retn
sub_2 endp

3B66:0253 5E pop si ; SI復帰,SI=0404H
3B66:0254 72 C2 jc 0218h ; Jump if carry Set エラーなければCF=0でスルー,エラーがあればCF=1なので0218Hへ
3B66:0256 EB C9 jmp short 0221h ; (0221)

3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[0404H]=02H
3B66:0223 84 C0 test al,al ; (3B66:0404=02H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=03EAH=[0405H]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=0000H=[0407H]
3B66:0230 83 C6 05 add si,5 ; SI=0409H
3B66:0233 FE C8 dec al ; AL=01H
3B66:0235 74 18 jz 024Fh ; Jump if zero 0じゃないのでスルー
3B66:0237 FE C8 dec al ; AL=00H
3B66:0239 74 08 jz 0243h ; Jump if zero 0なので0243Hへ

(省略)
3B66:0243 loc_7: ; xref 3B66:0239
3B66:0243 2A C0 sub al,al ; AL=00H
3B66:0245 8B D9 mov bx,cx ; BX=03EAH(03EA=42 3A 5C 4D 55 53 5C 48 4F 2D 4F 50 4E 2E 4D 00)
;'B:\MUS\HO-OPN.M'
3B66:0247 CD F1 int 0F1h ; INT 0F1H ;HARE.EXEを実行

3B66:0249 B0 01 mov al,1 ; AL=01H

3B66:024B loc_8: ; xref 3B66:0241
3B66:024B CD F1 int 0F1h ; INT 0F1H ;AL=01Hで再びHARE.EXEを実行か?
3B66:024D EB D2 jmp short 0221h ; (0221)

3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[0409H]=01H
3B66:0223 84 C0 test al,al ; (3B66:0409=01H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=03CAH=[040AH]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03AEH=[040CH]
3B66:0230 83 C6 05 add si,5 ; SI=040EH
3B66:0233 FE C8 dec al ; AL=00H
3B66:0235 74 18 jz 024Fh ; Jump if zero 0なので024FHへ

(省略)
3B66:024F loc_9: ; xref 3B66:0235, 023D
3B66:024F 56 push si ; SI退避,SI=040EH
3B66:0250 E8 0005 call sub_2 ; (0258)

;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################

3B66:0258 sub_2 proc near ; CX=03CAH,DX=03AEH(='HARE.EXE')
3B66:0258 0E push cs
3B66:0259 07 pop es ; CS=ES,パラメータブロックセグメントアドレス
3B66:025A FE 06 03A0 inc byte ptr [03A0h] ; (3B66:03A0=32H='2')インクリメントして33H='3'
3B66:025E ,BB 041E mov bx,041Eh ; BX=041EH,パラメータブロックオフセットアドレス
; パラメータブロックはCS:041EH
3B66:0261 C7 07 0000 mov word ptr [bx],0 ; DS:[041EH]=0000H ;041EH以下のメモリ書き換え
3B66:0265 89 4F 02 mov [bx+2],cx ; DS:[0420H]=CX=03CAH ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 CA 03 DS DS 5C 00 DS DS
3B66:026B C7 47 06 005C mov word ptr [bx+6],5Ch ; DS:[0424H]=005CH ;0428 6C 00 DS DS
3B66:0270 8C 5F 08 mov [bx+8],ds ; DS:[0426H]=DS
3B66:0273 C7 47 0A 006C mov word ptr [bx+0Ah],6Ch ; DS:[0428H]=006CH
3B66:0278 8C 5F 0C mov [bx+0Ch],ds ; DS:[042AH]=DS
3B66:027B B8 4B00 mov ax,4B00h ; プログラムのロードと実行
; DS:DX=パス名の位置,ES:BX=パラメータブロックの位置(03CA=02 20 32 0D)
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh =B:半角スペース'2'リターンキー
; run progm @ds:dx, parm @es:bx INT 0F2Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(3)$'
3B66:0283 C3 retn
sub_2 endp

3B66:0253 5E pop si ; SI復帰,SI=040EH
3B66:0254 72 C2 jc 0218h ; Jump if carry Set エラーなければCF=0でスルー,エラーがあればCF=1なので0218Hへ
3B66:0256 EB C9 jmp short 0221h ; (0221)

3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[040EH]=03H
3B66:0223 84 C0 test al,al ; (3B66:0404=03H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=0000H=[040FH]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=0000H=[0411H]
3B66:0230 83 C6 05 add si,5 ; SI=0413H
3B66:0233 FE C8 dec al ; AL=02H
3B66:0235 74 18 jz 024Fh ; Jump if zero 0じゃないのでスルー
3B66:0237 FE C8 dec al ; AL=01H
3B66:0239 74 08 jz 0243h ; Jump if zero 0じゃないのでスルー
3B66:023B FE C8 dec al ; AL=00H
3B66:023D 75 10 jnz 024Fh ; Jump if not zero 0なのでスルー
3B66:023F B0 02 mov al,2 ; AL=02H
3B66:0241 EB 08 jmp short 024Bh ; (024B)

(省略)
3B66:024B loc_8: ; xref 3B66:0241
3B66:024B CD F1 int 0F1h ; AL=02HでHARE.EXE?
3B66:024D EB D2 jmp short 0221h ; (0221)

3B66:0221 loc_4: ; xref 3B66:024D, 0256
3B66:0221 ,8A 04 mov al,[si] ; AL=[0413H]=01H
3B66:0223 84 C0 test al,al ; (3B66:0413=01H),AL=00Hでなければ,ZF=0
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=0なら022AHへ
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227)
3B66:0229 90 db 90h
3B66:022A loc_6: ; xref 3B66:0225
3B66:022A 8B 4C 01 mov cx,[si+1]  ; CX=03D6H=[0414H]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03B7H=[0416H]
3B66:0230 83 C6 05 add si,5 ; SI=0418H
3B66:0233 FE C8 dec al ; AL=00H
3B66:0235 74 18 jz 024Fh ; Jump if zero 0なので024FHへ

(省略)
3B66:024F loc_9: ; xref 3B66:0235, 023D
3B66:024F 56 push si ; SI退避,SI=0418H
3B66:0250 E8 0005 call sub_2 ; (0258)

以下,その3に続く。

晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その1)はこちら
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その3)はこちら

<<著作権に関して>>
本記事に引用している全てのソフトの名称・画像の著作権・その他権利は、制作、販売されたソフトハウス、メーカー、または作者様に帰属します。本サイトでの上記著作物の取扱いは、著作権など各権利関係を侵害することが目的ではありません。問題などある場合は、メール(gekigangarあっとmail.goo.ne.jp)にてその旨お知らせください。