view poster/os9/os9s.ind @ 8:7fd82a802a66

add os9
author anatofuz
date Fri, 19 Apr 2019 18:23:10 +0900
parents
children
line wrap: on
line source

-title: OS9/GAME09/FORTH/TL1

-author: 河野真治

--OS-9 の特徴

Microware 社によりMotorola のMC6809用に作られた 8bit OS。1980年初頭。

    Module と言う単位をメモリ上にどこに配置しても良い
    Time sharing を採用した並列実行(concurrent) (平行(parallel)ではない)
    Unix like なshell とpipe
    Basic09 というPascal likeな言語を持つ。

--MC6809

<center><img src="mc6809.gif"></center>


--Level 1/2

level 1    ROM上のOS9 p1 kernel で動作する。

level 2    MMUで2Mbyteのメモリを使える
    アドレス変換に対応し、512kメモリを使用できる。

--何をするか

Emulator 上で OS-9 を動かそう。

    できれば Level 2

なんで?

昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。

残念ながらハードはもうないけど、Emulator なら?

20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。

--OS9 with MMU

<center><img src="fig/os9mmu.svg"></center>

--kernel構成

<center><img src="fig/os9.svg"></center>

--kernel構成

OS9p1
   system callと割り込み処理
   Module 発見と管理

OS9p2
   メモリ管理
   Task管理
   Signal

--kernel構成2

IOMan
   SCF/RBFと device driver とdescriptor の登録

SCF
  sequencial file io manager

RBF
  randome block file io manager
  file system管理

--Runtime module

init
   boot用初期データ

sysgo
   clockとShellの起動

Clock
   timer 割り込み
   日付計算

--Runtime module 2

Shell

Device descriptor
   D0
   Term

Device driver
   PTY
   PDisk

--nitros9

OS9 をdisassemble したものらしい

Tandy Coco 上で動いていたらしい

ライセンス的にはだめかも

大目に見られてる?

--Emulator

sbc09というアセンブラEmulator上に実装して動作させた

sbc09 を mmu 対応にして level 2 まで動かした。

仮想RBF (random block filer manager )

    Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる

--OS-9 上のソフト

    BASIC09
    FORTH
    BASIC
    GAME09
    TL/1

--FORTH

PostScript の元になった言語

関数単位

    assembler を自分でかける

    : ACCEPT-TEST
       CR ." PLEASE TYPE UP TO 80 CHARACTERS:" CR
       ABUF 80 ACCEPT
       CR ." RECEIVED: " [CHAR] " EMIT
       ABUF SWAP TYPE [CHAR] " EMIT CR


--GAME09

VTLの日本での実装

記号的なBASIC

コンパイラとかが書かれた

    100  "ADDRESS=" A=?
    110  "TO     =" D=? @ !=900
    120  @=(A>D) #=-1
    900  / ??=A .=20 E=A !=1000
    910  $=$D .=5 B=0,5 ;=E+B>=A .=3 #=930
    920  ?$=E:B) " "

割とダメ。行番号なしの rvtl というのがある。

--Micro C

mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。

    04D7:                   * getchar()
    04D7:                   * {     return getc(stdin);
    04D7:                   getchar
    04D7: 3440                      PSHS    U
    04D9: 33E4                      LEAU    ,S
    04DB: EC20                      LDD     0,Y
    04DD: 3406                      PSHS    D
    04DF: 17FFB7                    LBSR    getc
    04E2: 3262                      LEAS    2,S
    04E4:                   * }
    04E4: 35C0                      PULS    U,PC

これを CbC にしたものがある。

--TL/1

大西氏のコンパイラ言語、データ型はByteとByte Arrayのみ。手続きと関数がある。

    PROC WAIT
    FUNC TIME
    %--- MAIN ---
    VAR MMI,MMJ,MMK
    BEGIN
      WRITE(1:ASCII($A))
      MMI:=1 MMJ:=2 MMK:=3
      WAIT(4,5)
      WRITE(1:MMI,CRLF)
    END
    %-- PROCEDURE WAIT --
    WAIT(WWA,WWB)
    VAR WWJ,WWK
    BEGIN
      WWJ:=4
      WWK:=TIME(6,7)
      WRITE(1:MMI,WWJ,WWA,WWB,WWK,CRLF)
    END

型がないのは現代的な気がする

--TL/1のオブジェクト

    020B: 9F 16          STX         <$16
    020D: 30 C9 01 C2    LEAX        +$01C2,U
    0211: 86 01          LDA         #$01
    0213: A7 00          STA         +$00,X     Mainの大域変数
    0215: 86 02          LDA         #$02           =局所変数
    0217: A7 01          STA         +$01,X
    0219: 86 03          LDA         #$03
    021B: A7 02          STA         +$02,X
    021D: 86 04          LDA         #$04
    021F: A7 03          STA         +$03,X
    0221: 86 05          LDA         #$05
    0223: A7 04          STA         +$04,X
    0225: 86 03          LDA         #$03
    0227: 17 00 0F       LBSR        $0239
    022A: 86 01          LDA         #$01
    022C: 97 01          STA         <$01
    022E: A6 00          LDA         +$00,X
    0230: 17 FE 3A       LBSR        $006D
    0233: 17 FE C6       LBSR        $00FC
    0236: 16 FE D6       LBRA        $010F
    0239: AF E3          STX         ,--S       
    023B: 30 86          LEAX        A,X        呼出側の局所変数の確保
    023D: 86 04          LDA         #$04
    023F: A7 02          STA         +$02,X
    0241: 86 06          LDA         #$06
    0243: A7 04          STA         +$04,X     局所変数
    0245: 86 07          LDA         #$07
    0247: A7 05          STA         +$05,X
    0249: 86 04          LDA         #$04
    024B: 17 00 24       LBSR        $0272
    024E: A7 03          STA         +$03,X
    0250: 86 01          LDA         #$01
    0252: 97 01          STA         <$01
    0254: A6 20          LDA         +$00,Y     大域変数
    0256: 17 FE 14       LBSR        $006D
    0259: A6 02          LDA         +$02,X     呼び出した方の引数
    025B: 17 FE 0F       LBSR        $006D
    025E: A6 00          LDA         +$00,X
    0260: 17 FE 0A       LBSR        $006D
    0263: A6 01          LDA         +$01,X
    0265: 17 FE 05       LBSR        $006D
    0268: A6 03          LDA         +$03,X
    026A: 17 FE 00       LBSR        $006D
    026D: 17 FE 8C       LBSR        $00FC
    0270: 35 90          PULS        PC,X

--Gears OS の参考になる?

module は Code Gear 。Data Gear を導入する。

OS 自体を module 構成にする

module を memory に mapping する

module 間の通信

module の生態系 (version 管理 )

   動く module の version の組合せ

TL/1 言語はシンプルに

型はメタレベルで付ける

大きなデータは write などの通信で行う


--さらに

qemu で TLB base で動かす

interpreter base の Emualtor ではなく、compile base にする

nitros-9 のソースコードのコメントを増やす

  まぁ、あんまりやりすぎないように