ROMにmoduleそのまま載せて shell を起動して mdir するところまで動きました。あとやるとすると、
Basic09 動かす
Timer emulation を入れてconcurentに動かす
Floppy Disk読んで仮想なドライバ書いて動かす
MMUまで書いて level2 まで動かす
あたりでしょうけど、やらないかも知れないです。
A09 に OS9 用のコマンドを入れた (mod/emod/ifp1/os9)
mod はCRCを生成するように
module をファイルにまとめて配置する makerom プログラム
まで書いて動かしたんですが、
EmulatorのV09は有無を言わせずTimer割り込みする作り
実行途中でいきなり暴走してて何かと思ったよ。 で、まず、それを切ることから。でも、ぜんぜん動かないので、
V09 に disassemble/trace/dump/break
などを結局全部実装してしまったので、80年代の自作PCのmonitorでプログラムしてる気分を満喫しました。
その辺に落ちてた os9 のmoduleを表示するプログラムが結構ひどくて、それで通った大丈夫ってのは全部間違いで、OS9 側で蹴られてた。if (crc[0]=crc1) とか書いてあって、0でなければok表示するとかひどすぎる...
OS9 のアセンブラのmod は、ORGを強制的に0に設定するってのを見落としてて driver entry へのオフセットがずれていたってのが、最後のバグだったかな。
OS9のkernelでは hash とか使わずに固定なmodule テーブルを頭から全部コードが。マイコン時代はそれが合理的だったんだよな。
CRC生成自体はOS9 kernelに含まれてないのか。当時、その辺りがネックだったが、今は拾ってこれるからね。CRCチェックを切って実装するのが楽だったんじゃないかな。
% ./v09 -l 0xd000 -rom os9/os9.rom -nt
x=0000 y=0000 u=0000 s=0000 a=00 b=00 cc=00 pc=F876: 8E 00 20 LDX #$0020
v09>?
s [count] one step trace
n step over
f finish this call (until stack pop)
b [adr] set break point
l break point list
d [n] delte break point list
c [count] continue;
x [adr] dump
xi [adr] disassemble
L file start log to file
S file set input file
X exit
q exit
U file upload from srecord file
D file download to srecord file
R do reset
h,? print this
v09>n
OS-9 LEVEL ONE VERSION 1.2
COPYRIGHT 1980 BY MOTOROLA INC.
AND MICROWARE SYSTEMS CORP.
REPRODUCED UNDER LICENSE
TO DRAGON DATA LTD.
ALL RIGHTS RESERVED.
Shell
OS9:mdir
Module directory at 00:00:00
Shell Init Mdir SysGo IOMan
SCF TERM PTY OS9p2 OS9
OS9:x=cf80 y=0222 u=07b2 s=07b0 a=f4 b=f0 cc=f8 pc=FA96: E7 C4 STB ,U
v09>xi
FA96: E7 C4 STB ,U
FA98: 84 0F ANDA #$0F
FA9A: AA C4 ORA ,U
FA9C: A7 C4 STA ,U
FA9E: 39 RTS
FA9F: 53 COMB
FAA0: C6 D0 LDB #$D0
No comments:
Post a Comment