PC-98
3バイトのリセットコマンドの中身
ずいぶん前にどこからか拾ってきたリセットコマンドはたったの3バイト。
どんな中身か調べてみた。
sdasm.exeで逆アセンブルした。いつまでも逆アセンブルが終わらないので、途中でctrl+Cして出力されたものをVzで追ったら下のような部分があった。
1E61:0100 E6F0 out 0F0h,al
1E61:0102 1A00 sbb al,[bx+si]
この2行をもとにつぎのようなコードを作成し、アセンブラにかける。
開発環境
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International
r7.asm
;;; r7.com
code segment
assume cs:code, ds:code
org 100h
start:
out 0f0h,al
sbb al,[bx+si]
code ends
end start
すると、4バイトのcomファイルができる。
逆アセンブルしても、結果は一緒。
1E61:0100 E6F0 out 0F0h,al
1E61:0102 1A00 sbb al,[bx+si]
unixtoolのodでダンプすると、やっぱり一緒。
でも、r7.comは2行目が4になっている。
A:\>od -x r7.com
0000000 f0e6 001a
0000004
A:\>od -x r.com
0000000 f0e6 001a
0000003
r7.comをedix.comでダンプすると次のようになった。
segoffset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F sum 0123456789abcdef
3E53:0000 E6 F0 1A 00 00 00 00 00-00 00 00 00 00 00 00 00 :F0 跼..............
---------------------------------------------------------------
check_sum E6 F0 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 :F0
r.com(3バイト)をedix.comでダンプすると、
segoffset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F sum 0123456789abcdef
3E7D:0000 E6 F0 1A 00 00 00 00 00-00 00 00 00 00 00 00 00 :F0 跼..............
---------------------------------------------------------------
check_sum E6 F0 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 :F0
やっぱり同じに見える。
でも、vzで読み込むと、4バイトのほうは次のようになっている。
(^Z^@は制御文字)
跼^Z^@
3バイトのほうは
跼
の1文字だけ。
そこで、4バイトのほうをVzで読んで^Z^@を消して保存。
すると、ファイルサイズが3バイトになった。
-a--rwx 3 Apr 3 2022 16:18 r7b.com
このファイルを起動すると、無事(?)リセットされた。