晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その2)からの続き。
最初の1行だけ重複してます。
3B66:0250 E8 0005 call sub_2 ; (0258)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################
3B66:0258 sub_2 proc near ; CX=03D6H,DX=03B7H(='ADVH.EXE')
3B66:0258 0E push cs
3B66:0259 07 pop es ; CS=ES,パラメータブロックセグメントアドレス
3B66:025A FE 06 03A0 inc byte ptr [03A0h] ; (3B66:03A0=33H='3')インクリメントして34H='4'
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=03D6H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 D6 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=パラメータブロックの位置
; BX=(03D6=10 20 5C 4D 45 53 5C 48 4F 30 30 30 30 2E 4D 45 53 0D)
; ^P半角スペース\MES\HO0000.MESリターンキー)
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F5Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(4)$'
3B66:0283 C3 retn
sub_2 endp
3B66:0253 5E pop si ; SI復帰,SI=0418H
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=[0418H]=01H
3B66:0223 84 C0 test al,al ; (3B66:0418=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=03D0H=[0419H]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03AEH=[041BH]
3B66:0230 83 C6 05 add si,5 ; SI=041DH
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=041DH
3B66:0250 E8 0005 call sub_2 ; (0258)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################
3B66:0258 sub_2 proc near ; CX=03D0H,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=34H='4')インクリメントして35H='5'
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=03D0H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 D0 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=パラメータブロックの位置
; BX=(03D0=02 20 33 0D)
; B:半角スペース'3'リターンキー)
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F4Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(5)$'
3B66:0283 C3 retn
sub_2 endp
3B66:0253 5E pop si ; SI復帰,SI=041DH
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=[041DH]=00H
3B66:0223 84 C0 test al,al ; (3B66:041D=00H),ZF=1
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=1なのでスルー
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227) 無限ループ
3B66:0229 90 nop
;**********************************************************************************************
;プログラムロードエラー発生時
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で飛んできた。文字列 'プログラムが起動できません。(5)$'
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:02B5 90 db 90h
;##########################################################################
;
; External Entry Point 致命的エラー(INT24)発生時の独自割込処理
;
;##########################################################################
3B66:02B6 int_24h_entry proc far ; xref 3B66:0635
3B66:02B6 55 push bp ; 各レジスタ退避
3B66:02B7 57 push di
3B66:02B8 56 push si
3B66:02B9 1E push ds
3B66:02BA 06 push es
3B66:02BB 53 push bx
3B66:02BC 51 push cx
3B66:02BD 52 push dx
3B66:02BE 50 push ax
3B66:02BF F6 C4 80 test ah,80h ; AHの第7bitが1でなければ0
3B66:02C2 75 4E jnz 0312h ; Jump if not zero
; AHの第7bitが0ならALを0にしてAX以外のレジスタ復帰。
3B66:02C4 0E push cs
3B66:02C5 1F pop ds ; CS=DS
3B66:02C6 04 41 add al,41h ; AL=41H 'A'
3B66:02C8 A2 043F mov 043Fh,al ; (3B66:043F=41h)
; エラー表示内のドライブレター表記部分に,
; ドライブレターの文字コードを代入。
3B66:02CB 8B DF mov bx,di ; BX=DI
3B66:02CD 2A FF sub bh,bh ; BH=00H
3B66:02CF 83 FB 0C cmp bx,0Ch ; BXと0CHを比較(BHが00Hなので事実上,BL(DL)と0CHとの比較)
3B66:02D2 73 3E jae 0312h ; Jump if above or =
; BL>=0CHなら,ALを0にして各レジスタ復帰(02C2Hと同じ)
3B66:02D4 B8 A000 mov ax,0A000h ; AX=0A000H
3B66:02D7 8E C0 mov es,ax ; ES=0A000H,テキストVRAMセグメント
3B66:02D9 ,BF 0F00 mov di,0F00h ; DI=0F00H
3B66:02DC ,BE 042E mov si,042Eh ; SI=042EH
3B66:02DF D1 E3 shl bx,1 ; Shift w/zeros fill,SHIFT LOGICAL LEFT 左シフトbit7をCFに,bit0を0に
3B66:02E1 E8 FFA8 call 028Ch ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=65h)
3B66:0296 26: 88 05 mov es:[di],al ; (A000:0F00=00H)
3B66:0299 83 C7 02 add di,2 ; DI=0F02H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (042Eh=20H),SIを042Fhに・・・SI=0456HでAL=00H,SI=0457Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=20HなのでZF=0, [SI]=0456Hになるまで00Hなし。ES:[DI]に042EHから0456Hまでのデータをロード
; 半角スペース10個,'ドライブ A: デ エラー ハッセイ ・・・ ',00H,Aはエラーの発生したドライブによって変動
3B66:029F 75 F0 jnz 0291h ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02E4 8B B7 04FA mov si,[04FAh] ; (3B66:04FA=457h)
3B66:02E8 E8 FFA1 call sub_4 ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=0E1h)
3B66:0296 26: 88 05 mov es:[di],al
3B66:0299 83 C7 02 add di,2 ; DI=0F04H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (0457h=CCH),SIを0458hに・・・・・・SI=0474HでAL=00H,SI=0475Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=CCHなのでZF=0
; 'プロテクトシール ヲ ハガシテ クダサイ。 ',00H
3B66:029F 75 F0 jnz 0291h1 ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02EB ,BE 04ED mov si,[04ED] ; (3B66:04ED=20h)
3B66:02EE E8 FF9B call sub_4 ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=0E1h)
3B66:0296 26: 88 05 mov es:[di],al
3B66:0299 83 C7 02 add di,2 ; DI=0F06H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (04EDh=20H),SIを04EEhに・・・,SI=04F8HでAL=00H,SI=04F9Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=20HなのでZF=0
; 半角スペース11個,,00H
3B66:029F 75 F0 jnz 0291h1 ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02F1 E8 FFAE call sub_5 ; (02A2) ブザー鳴動処理
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02F1 ブザー鳴動処理
;##########################################################################
3B66:02A2 sub_5 proc near
3B66:02A2 B0 06 mov al,6
3B66:02A4 E6 37 out 37h,al ; port 37h I/O Non-standard
; ポート番号037H(8255Aのコントロールレジスタ)に
; 06Hを出力する。
; 06h ブザー 06h=鳴動
; http://www.webtech.co.jp/company/doc/undocumented_mem/io_syste.txt
3B66:02A6 2B C9 sub cx,cx ; CX=00H
3B66:02A8 locloop_13: ; xref 3B66:02A8 LOOP4つ分のウエイトか?
3B66:02A8 E2 FE loop locloop_13 ; Loop if cx > 0
3B66:02AA locloop_14: ; xref 3B66:02AA
3B66:02AA E2 FE loop locloop_14 ; Loop if cx > 0
3B66:02AC locloop_15: ; xref 3B66:02AC
3B66:02AC E2 FE loop locloop_15 ; Loop if cx > 0
3B66:02AE locloop_16: ; xref 3B66:02AE
3B66:02AE E2 FE loop locloop_16 ; Loop if cx > 0
3B66:02B0 B0 07 mov al,7
3B66:02B2 E6 37 out 37h,al ; port 37h I/O Non-standard
; ポート番号037H(8255Aのコントロールレジスタ)に
; 07Hを出力する。
; 07h ブザー 07h=停止
; http://www.webtech.co.jp/company/doc/undocumented_mem/io_syste.txt
3B66:02B4 C3 retn
sub_5 endp
3B66:02F4 E8 0027 call sub_6 ; (031E)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02F4, 0737
;##########################################################################
3B66:031E sub_6 proc near
3B66:031E loc_20: ; xref 3B66:032A
3B66:031E B4 01 mov ah,1 ; キーバッファ状態のセンス(キーバッファ内先頭1文字分)
; BH=00H,キー入力データなし
; BH=01H,キー入力データあり,AH=キーコード,AL=キーデータ
3B66:0320 CD 18 int 18h ; ROM basic
3B66:0322 53 push bx ; BX退避
3B66:0323 B4 00 mov ah,0 ; キーデータの読み出し(1文字の入力待ち)
3B66:0325 CD 18 int 18h ; ROM basic キーバッファ内先頭1文字分のキー入力データを取り出し,
; AH=キーコード,AL=キーデータを出力
3B66:0327 5B pop bx ; BX復帰
3B66:0328 84 FF test bh,bh ; BHは00Hか?キー入力データなしなら結果は0
3B66:032A 75 F2 jnz loc_20 ; Jump if not zero キー入力データがあれば031Ehへループ
3B66:032C C3 retn
sub_6 endp
3B66:02F7 ,BF 0F00 mov di,[0F00H] ; (A000:0F00=00h)
3B66:02FA B9 0050 mov cx,50h ; CX=0050H,50H回セット
3B66:02FD locloop_17: ; xref 3B66:030B
3B66:02FD B8 E120 mov ax,0E120h
3B66:0300 26: 88 05 mov es:[di],al
3B66:0303 26: 88 A5 2000 mov es:[2000],ah ; (A000:2000=0E1h)
3B66:0308 83 C7 02 add di,2
3B66:030B E2 F0 loop locloop_17 ; Loop if cx > 0
3B66:030D 58 pop ax ; AX復帰
3B66:030E B0 01 mov al,1 ; AL=01H
3B66:0310 EB 03 jmp short loc_19 ; (0315)
3B66:0312 loc_18: ; xref 3B66:02C2, 02D2
3B66:0312 58 pop ax ; AX復帰
3B66:0313 2A C0 sub al,al ; AL=00H
3B66:0315 loc_19: ; xref 3B66:0310
3B66:0315 5A pop dx ;各レジスタ復帰
3B66:0316 59 pop cx
3B66:0317 5B pop bx
3B66:0318 07 pop es
3B66:0319 1F pop ds
3B66:031A 5E pop si
3B66:031B 5F pop di
3B66:031C 5D pop bp
int_24h_entry endp
;##########################################################################
;
; External Entry Point
;
;##########################################################################
3B66:031D int_06h_entry proc far ; xref 3B66:061F
3B66:031D CF iret ; Interrupt return 割込からのリターン命令
int_06h_entry endp
;* No entry point to code
3B66:0367 90 db 90h
3B66:0368 83 81 83 82 83 8A data_73 db 'メモリーが解放できません。$'
3B66:036E 81 5B 82 AA 89 F0
3B66:0374 95 FA 82 C5 82 AB
3B66:037A 82 DC 82 B9 82 F1
3B66:0380 81 42 24
3B66:0383 83 76 83 8D 83 4F db 'プログラムが起動できません。(0)$'
3B66:0389 83 89 83 80 82 AA
3B66:038F 8B 4E 93 AE 82 C5
3B66:0395 82 AB 82 DC 82 B9
3B66:039B 82 F1 81 42 28 30
3B66:03A1 29 24
3B66:03A3 4D 55 53 44 52 56 db 'MUSDRV.COM',0
3B66:03A9 2E 43 4F 4D
3B66:03AD 00
3B66:03AE 48 41 52 45 2E 45 db 'HARE.EXE',0
3B66:03B4 58 45
3B66:03B6
3B66:03B7 41 44 56 48 2E 45 db 'ADVH.EXE',0
3B66:03BD 58 45
3B69:03BF 00
3B69:03C0 00 0D 00 00 02 db 00h, 00h, 0Dh, 00h, 00h, 02h
3B69:03C5 20 31 0D 00 00 02 db 20h, 31h, 0Dh, 00h, 00h, 02h
3B69:03CB 20 32 0D 00 00 10 db 20h, 32h, 0Dh, 00h, 00h, 10h
3B69:03D1 20 5C 4D 45 53 5C db ' \MES\HO0000.MES', 0Dh
3B69:03D7 48 4F 30 30 30 30
3B69:03DD 2E 4D 45 53 0D
3B66:03E2 00 00 db 0,0
3B69:03E4 41 3A 5C 4D 55 53 db 'A:\MUS\HO-OPN.M'
3B69:03EA 5C 48 4F 2D 4F 50
3B69:03F0 4E 2E 4D
3B69:03F3 00 db 0
3B66:07A4 1B 5B 32 4A 24 data_96 db 1Bh, '[2J$' ; xref 3B66:0777 1BHはエスケープコード,[2Jで画面をクリアし,カーソルをホームに
3B66:07A9 1B 5B 6D 41 64 76 data_97 db 1Bh, '[mAdvShell for ADVH System ' ; xref 3B66:0781
3B66:07AF 53 68 65 6C 6C 20
3B66:07B5 66 6F 72 20 41 44
3B66:07BB 56 48 20 53 79 73
3B66:07C1 74 65 6D 20
3B66:07C5 20 56 65 72 2E 31 db ' Ver.1.01', 0Dh, 0Ah, 'Copyright'
3B66:07CB 2E 30 31 0D 0A 43
3B66:07D1 6F 70 79 72 69 67
3B66:07D7 68 74
3B66:07D9 28 43 29 20 54 75 db '(C) Tuneup 1988,89.', 0Dh, 'Copy'
3B66:07DF 6E 65 75 70 20 31
3B66:07E5 39 38 38 2C 38 39
3B66:07EB 2E 0D 43 6F 70 79
3B66:07F1 72 69 67 68 74 28 db 'right(C) Fairytale/カクテル・ソフト',
3B66:07F7 43 29 20 46 61 69
3B66:07FD 72 79 74 61 6C 65
3B66:0803 2F B6 B8 C3 D9 A5
3B66:0809 BF CC C4
3B66:080C 20 31 39 38 38 2C db ' 1988,89.', 0Dh, 0Ah, 0Dh, 0Ah, 0Dh,0Ah
3B66:0812 38 39 2E 0D 0A 0D
3B66:0818 0A 0D 0A
3B66:081B 81 40 90 B0 82 EA db ' 晴れのちおおさわぎ', 0Dh, 0Ah
3B66:0821 82 CC 82 BF 82 A8
3B66:0827 82 A8 82 B3 82 ED
3B66:082D 82 AC 0D 0A
3B66:0831 0D 0A 81 40 81 40 db 0Dh, 0Ah, ' ',
3B66:0837 1B 5B 35 3B 34 33 db 1Bh, '[5;43m [[[ プログラムを読み込み中 ]]] ' ブリンク(点滅・背景黄色)
3B66:083D 6D 81 40 5B 5B 5B ;81 40は全角スペースの文字コード
3B66:0841 20 83 76 83 8D 83
3B66:0847 8D 83 4F 83 89 83
3B66:084D 80 82 F0 93 C7 82
3B66:0853 DD 8D 9E 82 DD 92
3B66:0859 86 20 5D 5D 5D 81
3B66:085F 40
3B66:0860 1B 5B 6D 0D 0A 0D db 1Bh,'[m', 0Dh, 0Ah, 0Dh, 0Ah, 0Dh, 0Ah
3B66:0867 0A 0D 0A
3B66:0869 24 db '$'
3B66:086A 83 68 83 89 83 43 db 'ドライブA:から起動しなおしてく'
3B66:0870 83 75 82 60 81 46
3B66:0876 82 A9 82 E7 8B 4E
3B66:087C 93 AE 82 B5 82 C8
3B66:0882 82 A8 82 B5 82 C4
3B66:0888 82 AD
3B66:088A 82 BE 82 B3 82 A2 db 'ださい。'
3B66:0890 81 42
3B66:0892 07 db 7
3B66:0893 0D 0A 24 db 0Dh, 0Ah, '$'
3B66:0896 83 68 83 89 83 43 data_100 db 'ドライブA:のディスクを確認して' ; xref 3B66:072C
3B66:089C 83 75 82 60 81 46
3B66:08A2 82 CC 83 66 83 42
3B66:08A8 83 58 83 4E 82 F0
3B66:08AE 8A 6D 94 46 82 B5
3B66:08B4 82 C4
3B66:08B6 82 AD 82 BE 82 B3 db 'ください。', 7, '$'
3B66:08BC 82 A2 81 42 07 24
3B66:08C2 0D 81 40 81 40 81 data_103 db 0Dh, ' ' ; xref 3B66:073E
3B66:08C8 40 81 40 81 40 81
3B66:08CE 40 81 40 81 40 81
3B66:08D4 40 81 40 81 40 81
3B66:08DA 40 81 40 81 40
3B66:08DF 81 40 81 40 81 40 db ' ', 0Dh, '$'
3B66:08E5 81 40 81 40 81 40
3B66:08EB 81 40 0D 24
3B66:08EF 90 db 90h
3B66:08F0 CA DA C9 C1 B5 B5 data_104 db 'ハレノチオオサワギA)' ; xref 3B66:070F
3B66:08F6 BB DC B7 DE 41 29
3B66:08FC 00 00 00 00 db 00h, 00h, 00h, 00h
seg_a ends
end start
ほんとはその3でも収まりきらなかったので,半角エラーメッセージデータなどを一部省略しました。
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その1)はこちら。
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その2)はこちら。
<<著作権に関して>>
本記事に引用している全てのソフトの名称・画像の著作権・その他権利は、制作、販売されたソフトハウス、メーカー、または作者様に帰属します。本サイトでの上記著作物の取扱いは、著作権など各権利関係を侵害することが目的ではありません。問題などある場合は、メール(gekigangarあっとmail.goo.ne.jp)にてその旨お知らせください。
最初の1行だけ重複してます。
3B66:0250 E8 0005 call sub_2 ; (0258)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################
3B66:0258 sub_2 proc near ; CX=03D6H,DX=03B7H(='ADVH.EXE')
3B66:0258 0E push cs
3B66:0259 07 pop es ; CS=ES,パラメータブロックセグメントアドレス
3B66:025A FE 06 03A0 inc byte ptr [03A0h] ; (3B66:03A0=33H='3')インクリメントして34H='4'
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=03D6H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 D6 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=パラメータブロックの位置
; BX=(03D6=10 20 5C 4D 45 53 5C 48 4F 30 30 30 30 2E 4D 45 53 0D)
; ^P半角スペース\MES\HO0000.MESリターンキー)
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F5Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(4)$'
3B66:0283 C3 retn
sub_2 endp
3B66:0253 5E pop si ; SI復帰,SI=0418H
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=[0418H]=01H
3B66:0223 84 C0 test al,al ; (3B66:0418=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=03D0H=[0419H]
3B66:022D 8B 54 03 mov dx,[si+3] ; DX=03AEH=[041BH]
3B66:0230 83 C6 05 add si,5 ; SI=041DH
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=041DH
3B66:0250 E8 0005 call sub_2 ; (0258)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:0250
;##########################################################################
3B66:0258 sub_2 proc near ; CX=03D0H,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=34H='4')インクリメントして35H='5'
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=03D0H ;041E 00 00
3B66:0268 8C 5F 04 mov [bx+4],ds ; DS:[0422H]=DS ;0420 D0 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=パラメータブロックの位置
; BX=(03D0=02 20 33 0D)
; B:半角スペース'3'リターンキー)
3B66:027E CD 21 int 21h ; DOS Services ah=function 4Bh
; run progm @ds:dx, parm @es:bx INT 0F4Hのアドレスにロードした?
3B66:0280 BA 0383 mov dx,383h ; 文字列'プログラムが起動できません。(5)$'
3B66:0283 C3 retn
sub_2 endp
3B66:0253 5E pop si ; SI復帰,SI=041DH
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=[041DH]=00H
3B66:0223 84 C0 test al,al ; (3B66:041D=00H),ZF=1
3B66:0225 75 03 jnz 022Ah ; Jump if not zero, ZF=1なのでスルー
3B66:0227 loc_5: ; xref 3B66:0227
3B66:0227 EB FE jmp short loc_5 ; (0227) 無限ループ
3B66:0229 90 nop
;**********************************************************************************************
;プログラムロードエラー発生時
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で飛んできた。文字列 'プログラムが起動できません。(5)$'
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:02B5 90 db 90h
;##########################################################################
;
; External Entry Point 致命的エラー(INT24)発生時の独自割込処理
;
;##########################################################################
3B66:02B6 int_24h_entry proc far ; xref 3B66:0635
3B66:02B6 55 push bp ; 各レジスタ退避
3B66:02B7 57 push di
3B66:02B8 56 push si
3B66:02B9 1E push ds
3B66:02BA 06 push es
3B66:02BB 53 push bx
3B66:02BC 51 push cx
3B66:02BD 52 push dx
3B66:02BE 50 push ax
3B66:02BF F6 C4 80 test ah,80h ; AHの第7bitが1でなければ0
3B66:02C2 75 4E jnz 0312h ; Jump if not zero
; AHの第7bitが0ならALを0にしてAX以外のレジスタ復帰。
3B66:02C4 0E push cs
3B66:02C5 1F pop ds ; CS=DS
3B66:02C6 04 41 add al,41h ; AL=41H 'A'
3B66:02C8 A2 043F mov 043Fh,al ; (3B66:043F=41h)
; エラー表示内のドライブレター表記部分に,
; ドライブレターの文字コードを代入。
3B66:02CB 8B DF mov bx,di ; BX=DI
3B66:02CD 2A FF sub bh,bh ; BH=00H
3B66:02CF 83 FB 0C cmp bx,0Ch ; BXと0CHを比較(BHが00Hなので事実上,BL(DL)と0CHとの比較)
3B66:02D2 73 3E jae 0312h ; Jump if above or =
; BL>=0CHなら,ALを0にして各レジスタ復帰(02C2Hと同じ)
3B66:02D4 B8 A000 mov ax,0A000h ; AX=0A000H
3B66:02D7 8E C0 mov es,ax ; ES=0A000H,テキストVRAMセグメント
3B66:02D9 ,BF 0F00 mov di,0F00h ; DI=0F00H
3B66:02DC ,BE 042E mov si,042Eh ; SI=042EH
3B66:02DF D1 E3 shl bx,1 ; Shift w/zeros fill,SHIFT LOGICAL LEFT 左シフトbit7をCFに,bit0を0に
3B66:02E1 E8 FFA8 call 028Ch ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=65h)
3B66:0296 26: 88 05 mov es:[di],al ; (A000:0F00=00H)
3B66:0299 83 C7 02 add di,2 ; DI=0F02H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (042Eh=20H),SIを042Fhに・・・SI=0456HでAL=00H,SI=0457Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=20HなのでZF=0, [SI]=0456Hになるまで00Hなし。ES:[DI]に042EHから0456Hまでのデータをロード
; 半角スペース10個,'ドライブ A: デ エラー ハッセイ ・・・ ',00H,Aはエラーの発生したドライブによって変動
3B66:029F 75 F0 jnz 0291h ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02E4 8B B7 04FA mov si,[04FAh] ; (3B66:04FA=457h)
3B66:02E8 E8 FFA1 call sub_4 ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=0E1h)
3B66:0296 26: 88 05 mov es:[di],al
3B66:0299 83 C7 02 add di,2 ; DI=0F04H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (0457h=CCH),SIを0458hに・・・・・・SI=0474HでAL=00H,SI=0475Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=CCHなのでZF=0
; 'プロテクトシール ヲ ハガシテ クダサイ。 ',00H
3B66:029F 75 F0 jnz 0291h1 ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02EB ,BE 04ED mov si,[04ED] ; (3B66:04ED=20h)
3B66:02EE E8 FF9B call sub_4 ; (028C)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02E1, 02E8, 02EE
;##########################################################################
3B66:028C sub_4 proc near
3B66:028C FC cld ; Clear direction ; ディレクションフラグを0(増加)にリセット
3B66:028D B4 65 mov ah,65h ; AX=6500H
3B66:028F EB 0B jmp 029Ch ; (029C)
3B66:0291 loc_11: ; xref 3B66:029F
3B66:0291 26: 88 A5 2000 mov es:[2000h],ah ; (A000:2000=0E1h)
3B66:0296 26: 88 05 mov es:[di],al
3B66:0299 83 C7 02 add di,2 ; DI=0F06H
3B66:029C loc_12: ; xref 3B66:028F
3B66:029C AC lodsb ; String [si] to al, DS:[SI]で示されるメモリのバイト値をALレジスタに転送し,SIの値を1増加または減少させる
; (04EDh=20H),SIを04EEhに・・・,SI=04F8HでAL=00H,SI=04F9Hでルーチン終了
3B66:029D 0A C0 or al,al ; Zero ? AL=20HなのでZF=0
; 半角スペース11個,,00H
3B66:029F 75 F0 jnz 0291h1 ; Jump if not zero
3B66:02A1 C3 retn
sub_4 endp
3B66:02F1 E8 FFAE call sub_5 ; (02A2) ブザー鳴動処理
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02F1 ブザー鳴動処理
;##########################################################################
3B66:02A2 sub_5 proc near
3B66:02A2 B0 06 mov al,6
3B66:02A4 E6 37 out 37h,al ; port 37h I/O Non-standard
; ポート番号037H(8255Aのコントロールレジスタ)に
; 06Hを出力する。
; 06h ブザー 06h=鳴動
; http://www.webtech.co.jp/company/doc/undocumented_mem/io_syste.txt
3B66:02A6 2B C9 sub cx,cx ; CX=00H
3B66:02A8 locloop_13: ; xref 3B66:02A8 LOOP4つ分のウエイトか?
3B66:02A8 E2 FE loop locloop_13 ; Loop if cx > 0
3B66:02AA locloop_14: ; xref 3B66:02AA
3B66:02AA E2 FE loop locloop_14 ; Loop if cx > 0
3B66:02AC locloop_15: ; xref 3B66:02AC
3B66:02AC E2 FE loop locloop_15 ; Loop if cx > 0
3B66:02AE locloop_16: ; xref 3B66:02AE
3B66:02AE E2 FE loop locloop_16 ; Loop if cx > 0
3B66:02B0 B0 07 mov al,7
3B66:02B2 E6 37 out 37h,al ; port 37h I/O Non-standard
; ポート番号037H(8255Aのコントロールレジスタ)に
; 07Hを出力する。
; 07h ブザー 07h=停止
; http://www.webtech.co.jp/company/doc/undocumented_mem/io_syste.txt
3B66:02B4 C3 retn
sub_5 endp
3B66:02F4 E8 0027 call sub_6 ; (031E)
;##########################################################################
; SUBROUTINE
;
; Called from: 3B66:02F4, 0737
;##########################################################################
3B66:031E sub_6 proc near
3B66:031E loc_20: ; xref 3B66:032A
3B66:031E B4 01 mov ah,1 ; キーバッファ状態のセンス(キーバッファ内先頭1文字分)
; BH=00H,キー入力データなし
; BH=01H,キー入力データあり,AH=キーコード,AL=キーデータ
3B66:0320 CD 18 int 18h ; ROM basic
3B66:0322 53 push bx ; BX退避
3B66:0323 B4 00 mov ah,0 ; キーデータの読み出し(1文字の入力待ち)
3B66:0325 CD 18 int 18h ; ROM basic キーバッファ内先頭1文字分のキー入力データを取り出し,
; AH=キーコード,AL=キーデータを出力
3B66:0327 5B pop bx ; BX復帰
3B66:0328 84 FF test bh,bh ; BHは00Hか?キー入力データなしなら結果は0
3B66:032A 75 F2 jnz loc_20 ; Jump if not zero キー入力データがあれば031Ehへループ
3B66:032C C3 retn
sub_6 endp
3B66:02F7 ,BF 0F00 mov di,[0F00H] ; (A000:0F00=00h)
3B66:02FA B9 0050 mov cx,50h ; CX=0050H,50H回セット
3B66:02FD locloop_17: ; xref 3B66:030B
3B66:02FD B8 E120 mov ax,0E120h
3B66:0300 26: 88 05 mov es:[di],al
3B66:0303 26: 88 A5 2000 mov es:[2000],ah ; (A000:2000=0E1h)
3B66:0308 83 C7 02 add di,2
3B66:030B E2 F0 loop locloop_17 ; Loop if cx > 0
3B66:030D 58 pop ax ; AX復帰
3B66:030E B0 01 mov al,1 ; AL=01H
3B66:0310 EB 03 jmp short loc_19 ; (0315)
3B66:0312 loc_18: ; xref 3B66:02C2, 02D2
3B66:0312 58 pop ax ; AX復帰
3B66:0313 2A C0 sub al,al ; AL=00H
3B66:0315 loc_19: ; xref 3B66:0310
3B66:0315 5A pop dx ;各レジスタ復帰
3B66:0316 59 pop cx
3B66:0317 5B pop bx
3B66:0318 07 pop es
3B66:0319 1F pop ds
3B66:031A 5E pop si
3B66:031B 5F pop di
3B66:031C 5D pop bp
int_24h_entry endp
;##########################################################################
;
; External Entry Point
;
;##########################################################################
3B66:031D int_06h_entry proc far ; xref 3B66:061F
3B66:031D CF iret ; Interrupt return 割込からのリターン命令
int_06h_entry endp
;* No entry point to code
3B66:0367 90 db 90h
3B66:0368 83 81 83 82 83 8A data_73 db 'メモリーが解放できません。$'
3B66:036E 81 5B 82 AA 89 F0
3B66:0374 95 FA 82 C5 82 AB
3B66:037A 82 DC 82 B9 82 F1
3B66:0380 81 42 24
3B66:0383 83 76 83 8D 83 4F db 'プログラムが起動できません。(0)$'
3B66:0389 83 89 83 80 82 AA
3B66:038F 8B 4E 93 AE 82 C5
3B66:0395 82 AB 82 DC 82 B9
3B66:039B 82 F1 81 42 28 30
3B66:03A1 29 24
3B66:03A3 4D 55 53 44 52 56 db 'MUSDRV.COM',0
3B66:03A9 2E 43 4F 4D
3B66:03AD 00
3B66:03AE 48 41 52 45 2E 45 db 'HARE.EXE',0
3B66:03B4 58 45
3B66:03B6
3B66:03B7 41 44 56 48 2E 45 db 'ADVH.EXE',0
3B66:03BD 58 45
3B69:03BF 00
3B69:03C0 00 0D 00 00 02 db 00h, 00h, 0Dh, 00h, 00h, 02h
3B69:03C5 20 31 0D 00 00 02 db 20h, 31h, 0Dh, 00h, 00h, 02h
3B69:03CB 20 32 0D 00 00 10 db 20h, 32h, 0Dh, 00h, 00h, 10h
3B69:03D1 20 5C 4D 45 53 5C db ' \MES\HO0000.MES', 0Dh
3B69:03D7 48 4F 30 30 30 30
3B69:03DD 2E 4D 45 53 0D
3B66:03E2 00 00 db 0,0
3B69:03E4 41 3A 5C 4D 55 53 db 'A:\MUS\HO-OPN.M'
3B69:03EA 5C 48 4F 2D 4F 50
3B69:03F0 4E 2E 4D
3B69:03F3 00 db 0
3B66:07A4 1B 5B 32 4A 24 data_96 db 1Bh, '[2J$' ; xref 3B66:0777 1BHはエスケープコード,[2Jで画面をクリアし,カーソルをホームに
3B66:07A9 1B 5B 6D 41 64 76 data_97 db 1Bh, '[mAdvShell for ADVH System ' ; xref 3B66:0781
3B66:07AF 53 68 65 6C 6C 20
3B66:07B5 66 6F 72 20 41 44
3B66:07BB 56 48 20 53 79 73
3B66:07C1 74 65 6D 20
3B66:07C5 20 56 65 72 2E 31 db ' Ver.1.01', 0Dh, 0Ah, 'Copyright'
3B66:07CB 2E 30 31 0D 0A 43
3B66:07D1 6F 70 79 72 69 67
3B66:07D7 68 74
3B66:07D9 28 43 29 20 54 75 db '(C) Tuneup 1988,89.', 0Dh, 'Copy'
3B66:07DF 6E 65 75 70 20 31
3B66:07E5 39 38 38 2C 38 39
3B66:07EB 2E 0D 43 6F 70 79
3B66:07F1 72 69 67 68 74 28 db 'right(C) Fairytale/カクテル・ソフト',
3B66:07F7 43 29 20 46 61 69
3B66:07FD 72 79 74 61 6C 65
3B66:0803 2F B6 B8 C3 D9 A5
3B66:0809 BF CC C4
3B66:080C 20 31 39 38 38 2C db ' 1988,89.', 0Dh, 0Ah, 0Dh, 0Ah, 0Dh,0Ah
3B66:0812 38 39 2E 0D 0A 0D
3B66:0818 0A 0D 0A
3B66:081B 81 40 90 B0 82 EA db ' 晴れのちおおさわぎ', 0Dh, 0Ah
3B66:0821 82 CC 82 BF 82 A8
3B66:0827 82 A8 82 B3 82 ED
3B66:082D 82 AC 0D 0A
3B66:0831 0D 0A 81 40 81 40 db 0Dh, 0Ah, ' ',
3B66:0837 1B 5B 35 3B 34 33 db 1Bh, '[5;43m [[[ プログラムを読み込み中 ]]] ' ブリンク(点滅・背景黄色)
3B66:083D 6D 81 40 5B 5B 5B ;81 40は全角スペースの文字コード
3B66:0841 20 83 76 83 8D 83
3B66:0847 8D 83 4F 83 89 83
3B66:084D 80 82 F0 93 C7 82
3B66:0853 DD 8D 9E 82 DD 92
3B66:0859 86 20 5D 5D 5D 81
3B66:085F 40
3B66:0860 1B 5B 6D 0D 0A 0D db 1Bh,'[m', 0Dh, 0Ah, 0Dh, 0Ah, 0Dh, 0Ah
3B66:0867 0A 0D 0A
3B66:0869 24 db '$'
3B66:086A 83 68 83 89 83 43 db 'ドライブA:から起動しなおしてく'
3B66:0870 83 75 82 60 81 46
3B66:0876 82 A9 82 E7 8B 4E
3B66:087C 93 AE 82 B5 82 C8
3B66:0882 82 A8 82 B5 82 C4
3B66:0888 82 AD
3B66:088A 82 BE 82 B3 82 A2 db 'ださい。'
3B66:0890 81 42
3B66:0892 07 db 7
3B66:0893 0D 0A 24 db 0Dh, 0Ah, '$'
3B66:0896 83 68 83 89 83 43 data_100 db 'ドライブA:のディスクを確認して' ; xref 3B66:072C
3B66:089C 83 75 82 60 81 46
3B66:08A2 82 CC 83 66 83 42
3B66:08A8 83 58 83 4E 82 F0
3B66:08AE 8A 6D 94 46 82 B5
3B66:08B4 82 C4
3B66:08B6 82 AD 82 BE 82 B3 db 'ください。', 7, '$'
3B66:08BC 82 A2 81 42 07 24
3B66:08C2 0D 81 40 81 40 81 data_103 db 0Dh, ' ' ; xref 3B66:073E
3B66:08C8 40 81 40 81 40 81
3B66:08CE 40 81 40 81 40 81
3B66:08D4 40 81 40 81 40 81
3B66:08DA 40 81 40 81 40
3B66:08DF 81 40 81 40 81 40 db ' ', 0Dh, '$'
3B66:08E5 81 40 81 40 81 40
3B66:08EB 81 40 0D 24
3B66:08EF 90 db 90h
3B66:08F0 CA DA C9 C1 B5 B5 data_104 db 'ハレノチオオサワギA)' ; xref 3B66:070F
3B66:08F6 BB DC B7 DE 41 29
3B66:08FC 00 00 00 00 db 00h, 00h, 00h, 00h
seg_a ends
end start
ほんとはその3でも収まりきらなかったので,半角エラーメッセージデータなどを一部省略しました。
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その1)はこちら。
晴れのちおおさわぎ!(PC-98,カクテル・ソフト)ADVSHELL.COM解析(その2)はこちら。
<<著作権に関して>>
本記事に引用している全てのソフトの名称・画像の著作権・その他権利は、制作、販売されたソフトハウス、メーカー、または作者様に帰属します。本サイトでの上記著作物の取扱いは、著作権など各権利関係を侵害することが目的ではありません。問題などある場合は、メール(gekigangarあっとmail.goo.ne.jp)にてその旨お知らせください。