8
|
1 -title: OS9/GAME09/FORTH/TL1
|
|
2
|
|
3 -author: 河野真治
|
|
4
|
|
5 --OS-9 の特徴
|
|
6
|
|
7 Microware 社によりMotorola のMC6809用に作られた 8bit OS。1980年初頭。
|
|
8
|
|
9 Module と言う単位をメモリ上にどこに配置しても良い
|
|
10 Time sharing を採用した並列実行(concurrent) (平行(parallel)ではない)
|
|
11 Unix like なshell とpipe
|
|
12 Basic09 というPascal likeな言語を持つ。
|
|
13
|
|
14 --MC6809
|
|
15
|
|
16 <center><img src="mc6809.gif"></center>
|
|
17
|
|
18
|
|
19 --Level 1/2
|
|
20
|
|
21 level 1 ROM上のOS9 p1 kernel で動作する。
|
|
22
|
|
23 level 2 MMUで2Mbyteのメモリを使える
|
|
24 アドレス変換に対応し、512kメモリを使用できる。
|
|
25
|
|
26 --何をするか
|
|
27
|
|
28 Emulator 上で OS-9 を動かそう。
|
|
29
|
|
30 できれば Level 2
|
|
31
|
|
32 なんで?
|
|
33
|
|
34 昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。
|
|
35
|
|
36 残念ながらハードはもうないけど、Emulator なら?
|
|
37
|
|
38 20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。
|
|
39
|
|
40 --OS9 with MMU
|
|
41
|
|
42 <center><img src="fig/os9mmu.svg"></center>
|
|
43
|
|
44 --kernel構成
|
|
45
|
|
46 <center><img src="fig/os9.svg"></center>
|
|
47
|
|
48 --kernel構成
|
|
49
|
|
50 OS9p1
|
|
51 system callと割り込み処理
|
|
52 Module 発見と管理
|
|
53
|
|
54 OS9p2
|
|
55 メモリ管理
|
|
56 Task管理
|
|
57 Signal
|
|
58
|
|
59 --kernel構成2
|
|
60
|
|
61 IOMan
|
|
62 SCF/RBFと device driver とdescriptor の登録
|
|
63
|
|
64 SCF
|
|
65 sequencial file io manager
|
|
66
|
|
67 RBF
|
|
68 randome block file io manager
|
|
69 file system管理
|
|
70
|
|
71 --Runtime module
|
|
72
|
|
73 init
|
|
74 boot用初期データ
|
|
75
|
|
76 sysgo
|
|
77 clockとShellの起動
|
|
78
|
|
79 Clock
|
|
80 timer 割り込み
|
|
81 日付計算
|
|
82
|
|
83 --Runtime module 2
|
|
84
|
|
85 Shell
|
|
86
|
|
87 Device descriptor
|
|
88 D0
|
|
89 Term
|
|
90
|
|
91 Device driver
|
|
92 PTY
|
|
93 PDisk
|
|
94
|
|
95 --nitros9
|
|
96
|
|
97 OS9 をdisassemble したものらしい
|
|
98
|
|
99 Tandy Coco 上で動いていたらしい
|
|
100
|
|
101 ライセンス的にはだめかも
|
|
102
|
|
103 大目に見られてる?
|
|
104
|
|
105 --Emulator
|
|
106
|
|
107 sbc09というアセンブラEmulator上に実装して動作させた
|
|
108
|
|
109 sbc09 を mmu 対応にして level 2 まで動かした。
|
|
110
|
|
111 仮想RBF (random block filer manager )
|
|
112
|
|
113 Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる
|
|
114
|
|
115 --OS-9 上のソフト
|
|
116
|
|
117 BASIC09
|
|
118 FORTH
|
|
119 BASIC
|
|
120 GAME09
|
|
121 TL/1
|
|
122
|
|
123 --FORTH
|
|
124
|
|
125 PostScript の元になった言語
|
|
126
|
|
127 関数単位
|
|
128
|
|
129 assembler を自分でかける
|
|
130
|
|
131 : ACCEPT-TEST
|
|
132 CR ." PLEASE TYPE UP TO 80 CHARACTERS:" CR
|
|
133 ABUF 80 ACCEPT
|
|
134 CR ." RECEIVED: " [CHAR] " EMIT
|
|
135 ABUF SWAP TYPE [CHAR] " EMIT CR
|
|
136
|
|
137
|
|
138 --GAME09
|
|
139
|
|
140 VTLの日本での実装
|
|
141
|
|
142 記号的なBASIC
|
|
143
|
|
144 コンパイラとかが書かれた
|
|
145
|
|
146 100 "ADDRESS=" A=?
|
|
147 110 "TO =" D=? @ !=900
|
|
148 120 @=(A>D) #=-1
|
|
149 900 / ??=A .=20 E=A !=1000
|
|
150 910 $=$D .=5 B=0,5 ;=E+B>=A .=3 #=930
|
|
151 920 ?$=E:B) " "
|
|
152
|
|
153 割とダメ。行番号なしの rvtl というのがある。
|
|
154
|
|
155 --Micro C
|
|
156
|
|
157 mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。
|
|
158
|
|
159 04D7: * getchar()
|
|
160 04D7: * { return getc(stdin);
|
|
161 04D7: getchar
|
|
162 04D7: 3440 PSHS U
|
|
163 04D9: 33E4 LEAU ,S
|
|
164 04DB: EC20 LDD 0,Y
|
|
165 04DD: 3406 PSHS D
|
|
166 04DF: 17FFB7 LBSR getc
|
|
167 04E2: 3262 LEAS 2,S
|
|
168 04E4: * }
|
|
169 04E4: 35C0 PULS U,PC
|
|
170
|
|
171 これを CbC にしたものがある。
|
|
172
|
|
173 --TL/1
|
|
174
|
|
175 大西氏のコンパイラ言語、データ型はByteとByte Arrayのみ。手続きと関数がある。
|
|
176
|
|
177 PROC WAIT
|
|
178 FUNC TIME
|
|
179 %--- MAIN ---
|
|
180 VAR MMI,MMJ,MMK
|
|
181 BEGIN
|
|
182 WRITE(1:ASCII($A))
|
|
183 MMI:=1 MMJ:=2 MMK:=3
|
|
184 WAIT(4,5)
|
|
185 WRITE(1:MMI,CRLF)
|
|
186 END
|
|
187 %-- PROCEDURE WAIT --
|
|
188 WAIT(WWA,WWB)
|
|
189 VAR WWJ,WWK
|
|
190 BEGIN
|
|
191 WWJ:=4
|
|
192 WWK:=TIME(6,7)
|
|
193 WRITE(1:MMI,WWJ,WWA,WWB,WWK,CRLF)
|
|
194 END
|
|
195
|
|
196 型がないのは現代的な気がする
|
|
197
|
|
198 --TL/1のオブジェクト
|
|
199
|
|
200 020B: 9F 16 STX <$16
|
|
201 020D: 30 C9 01 C2 LEAX +$01C2,U
|
|
202 0211: 86 01 LDA #$01
|
|
203 0213: A7 00 STA +$00,X Mainの大域変数
|
|
204 0215: 86 02 LDA #$02 =局所変数
|
|
205 0217: A7 01 STA +$01,X
|
|
206 0219: 86 03 LDA #$03
|
|
207 021B: A7 02 STA +$02,X
|
|
208 021D: 86 04 LDA #$04
|
|
209 021F: A7 03 STA +$03,X
|
|
210 0221: 86 05 LDA #$05
|
|
211 0223: A7 04 STA +$04,X
|
|
212 0225: 86 03 LDA #$03
|
|
213 0227: 17 00 0F LBSR $0239
|
|
214 022A: 86 01 LDA #$01
|
|
215 022C: 97 01 STA <$01
|
|
216 022E: A6 00 LDA +$00,X
|
|
217 0230: 17 FE 3A LBSR $006D
|
|
218 0233: 17 FE C6 LBSR $00FC
|
|
219 0236: 16 FE D6 LBRA $010F
|
|
220 0239: AF E3 STX ,--S
|
|
221 023B: 30 86 LEAX A,X 呼出側の局所変数の確保
|
|
222 023D: 86 04 LDA #$04
|
|
223 023F: A7 02 STA +$02,X
|
|
224 0241: 86 06 LDA #$06
|
|
225 0243: A7 04 STA +$04,X 局所変数
|
|
226 0245: 86 07 LDA #$07
|
|
227 0247: A7 05 STA +$05,X
|
|
228 0249: 86 04 LDA #$04
|
|
229 024B: 17 00 24 LBSR $0272
|
|
230 024E: A7 03 STA +$03,X
|
|
231 0250: 86 01 LDA #$01
|
|
232 0252: 97 01 STA <$01
|
|
233 0254: A6 20 LDA +$00,Y 大域変数
|
|
234 0256: 17 FE 14 LBSR $006D
|
|
235 0259: A6 02 LDA +$02,X 呼び出した方の引数
|
|
236 025B: 17 FE 0F LBSR $006D
|
|
237 025E: A6 00 LDA +$00,X
|
|
238 0260: 17 FE 0A LBSR $006D
|
|
239 0263: A6 01 LDA +$01,X
|
|
240 0265: 17 FE 05 LBSR $006D
|
|
241 0268: A6 03 LDA +$03,X
|
|
242 026A: 17 FE 00 LBSR $006D
|
|
243 026D: 17 FE 8C LBSR $00FC
|
|
244 0270: 35 90 PULS PC,X
|
|
245
|
|
246 --Gears OS の参考になる?
|
|
247
|
|
248 module は Code Gear 。Data Gear を導入する。
|
|
249
|
|
250 OS 自体を module 構成にする
|
|
251
|
|
252 module を memory に mapping する
|
|
253
|
|
254 module 間の通信
|
|
255
|
|
256 module の生態系 (version 管理 )
|
|
257
|
|
258 動く module の version の組合せ
|
|
259
|
|
260 TL/1 言語はシンプルに
|
|
261
|
|
262 型はメタレベルで付ける
|
|
263
|
|
264 大きなデータは write などの通信で行う
|
|
265
|
|
266
|
|
267 --さらに
|
|
268
|
|
269 qemu で TLB base で動かす
|
|
270
|
|
271 interpreter base の Emualtor ではなく、compile base にする
|
|
272
|
|
273 nitros-9 のソースコードのコメントを増やす
|
|
274
|
|
275 まぁ、あんまりやりすぎないように
|
|
276
|
|
277
|
|
278
|