Mercurial > hg > Events > OSC2019
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 のソースコードのコメントを増やす まぁ、あんまりやりすぎないように