Sunday, 1 July 2018

OS9

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: