Mercurial > hg > Events > OSC2019
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>D) #=-1 900 / ??=A .=20 E=A !=1000 910 $=$D .=5 B=0,5 ;=E+B>=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 <$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 </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>