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

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

<html>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<head>
<STYLE type="text/css">
.main { width:100%; }
.side { top:0px; width:0%; position:fixed; left:80%; display:none}
</STYLE>
<script type="text/javascript">
function showElement(layer){
    var myLayer = document.getElementById(layer);
    var main = document.getElementById('mmm');
    if(myLayer.style.display=="none"){
        myLayer.style.width="20%";
        main.style.width="80%";
        myLayer.style.display="block";
        myLayer.backgroundPosition="top";
    } else { 
        myLayer.style.width="0%";
        main.style.width="100%";
        myLayer.style.display="none";
    }
}
</script>
<title>OS9/GAME09/FORTH/TL1</title>
</head>
<body>
<div class="main" id="mmm">
<h1>OS9/GAME09/FORTH/TL1</h1>
<a href="#" right="0px" onclick="javascript:showElement('menu')">
<span>Menu</span>
</a>
<a href="#" left="0px" onclick="javascript:showElement('menu')">
<span>Menu</span>
</a>

<p>

<author> 河野真治</author>

<hr/>
<h2><a name="content000">OS-9 の特徴</a></h2>
Microware 社によりMotorola のMC6809用に作られた 8bit OS。1980年初頭。
<p>

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

</pre>

<hr/>
<h2><a name="content001">MC6809</a></h2>

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

<hr/>
<h2><a name="content002">Level 1/2</a></h2>
level 1    ROM上のOS9 p1 kernel で動作する。
<p>
level 2    MMUで2Mbyteのメモリを使える
<pre>
    アドレス変換に対応し、512kメモリを使用できる。

</pre>

<hr/>
<h2><a name="content003">何をするか</a></h2>

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

<pre>
    できれば Level 2

</pre>
なんで?
<p>
昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。
<p>
残念ながらハードはもうないけど、Emulator なら?
<p>
20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。
<p>

<hr/>
<h2><a name="content004">OS9 with MMU</a></h2>
<img src="fig/os9mmu.svg">

<p>

<hr/>
<h2><a name="content005">kernel構成</a></h2>
<img src="fig/os9.svg">

<p>

<hr/>
<h2><a name="content006">kernel構成</a></h2>
OS9p1
<pre>
   system callと割り込み処理
   Module 発見と管理

</pre>
OS9p2
<pre>
   メモリ管理
   Task管理
   Signal

</pre>

<hr/>
<h2><a name="content007">kernel構成2</a></h2>

<p>
IOMan
<pre>
   SCF/RBFと device driver とdescriptor の登録

</pre>
SCF
<pre>
  sequencial file io manager

</pre>
RBF
<pre>
  randome block file io manager
  file system管理

</pre>

<hr/>
<h2><a name="content008">Runtime module</a></h2>

<p>
init
<pre>
   boot用初期データ

</pre>
sysgo
<pre>
   clockとShellの起動

</pre>
Clock
<pre>
   timer 割り込み
   日付計算

</pre>

<hr/>
<h2><a name="content009">Runtime module 2</a></h2>

<p>
Shell
<p>
Device descriptor
<pre>
   D0
   Term

</pre>
Device driver
<pre>
   PTY
   PDisk

</pre>

<hr/>
<h2><a name="content010">nitros9</a></h2>

<p>
OS9 をdisassemble したものらしい
<p>
Tandy Coco 上で動いていたらしい
<p>
ライセンス的にはだめかも
<p>
大目に見られてる?
<p>

<hr/>
<h2><a name="content011">Emulator</a></h2>
sbc09というアセンブラEmulator上に実装して動作させた
<p>
sbc09 を mmu 対応にして level 2 まで動かした。
<p>
仮想RBF (random block filer manager )
<p>

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

</pre>

<hr/>
<h2><a name="content012">OS-9 上のソフト</a></h2>

<p>

<pre>
    BASIC09
    FORTH
    BASIC
    GAME09
    TL/1

</pre>

<hr/>
<h2><a name="content013">FORTH</a></h2>

<p>
PostScript の元になった言語
<p>
関数単位
<p>

<pre>
    assembler を自分でかける
    : ACCEPT-TEST
       CR ." PLEASE TYPE UP TO 80 CHARACTERS:" CR
       ABUF 80 ACCEPT
       CR ." RECEIVED: " [CHAR] " EMIT
       ABUF SWAP TYPE [CHAR] " EMIT CR

</pre>

<hr/>
<h2><a name="content014">GAME09</a></h2>

<p>
VTLの日本での実装
<p>
記号的なBASIC
<p>
コンパイラとかが書かれた
<p>

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

</pre>
割とダメ。行番号なしの rvtl というのがある。
<p>

<hr/>
<h2><a name="content015">Micro C</a></h2>
mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。
<p>

<pre>
    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

</pre>
これを CbC にしたものがある。
<p>

<hr/>
<h2><a name="content016">TL/1</a></h2>
大西氏のコンパイラ言語、データ型はByteとByte Arrayのみ。手続きと関数がある。
<p>

<pre>
    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

</pre>
型がないのは現代的な気がする
<p>

<hr/>
<h2><a name="content017">TL/1のオブジェクト</a></h2>

<pre>
    020B: 9F 16          STX         &lt;$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         &lt;$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         &lt;$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

</pre>

<hr/>
<h2><a name="content018">Gears OS の参考になる?</a></h2>

<p>
module は Code Gear 。Data Gear を導入する。
<p>
OS 自体を module 構成にする
<p>
module を memory に mapping する
<p>
module 間の通信
<p>
module の生態系 (version 管理 )
<p>

<pre>
   動く module の version の組合せ

</pre>
TL/1 言語はシンプルに
<p>
型はメタレベルで付ける
<p>
大きなデータは write などの通信で行う
<p>

<hr/>
<h2><a name="content019">さらに</a></h2>
qemu で TLB base で動かす
<p>
interpreter base の Emualtor ではなく、compile base にする
<p>
nitros-9 のソースコードのコメントを増やす
<p>
  まぁ、あんまりやりすぎないように
<p>
</div>
<ol class="side" id="menu">
OS9/GAME09/FORTH/TL1
<li><a href="#content000">  OS-9 の特徴</a>
<li><a href="#content001">  MC6809</a>
<li><a href="#content002">  Level 1/2</a>
<li><a href="#content003">  何をするか</a>
<li><a href="#content004">  OS9 with MMU</a>
<li><a href="#content005">  kernel構成</a>
<li><a href="#content006">  kernel構成</a>
<li><a href="#content007">  kernel構成2</a>
<li><a href="#content008">  Runtime module</a>
<li><a href="#content009">  Runtime module 2</a>
<li><a href="#content010">  nitros9</a>
<li><a href="#content011">  Emulator</a>
<li><a href="#content012">  OS-9 上のソフト</a>
<li><a href="#content013">  FORTH</a>
<li><a href="#content014">  GAME09</a>
<li><a href="#content015">  Micro C</a>
<li><a href="#content016">  TL/1</a>
<li><a href="#content017">  TL/1のオブジェクト</a>
<li><a href="#content018">  Gears OS の参考になる?</a>
<li><a href="#content019">  さらに</a>
</ol>

<hr/>  河野真治 /  Tue Apr 16 16:57:59 2019
</body></html>