8
|
1 <html>
|
|
2 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
3 <head>
|
|
4 <STYLE type="text/css">
|
|
5 .main { width:100%; }
|
|
6 .side { top:0px; width:0%; position:fixed; left:80%; display:none}
|
|
7 </STYLE>
|
|
8 <script type="text/javascript">
|
|
9 function showElement(layer){
|
|
10 var myLayer = document.getElementById(layer);
|
|
11 var main = document.getElementById('mmm');
|
|
12 if(myLayer.style.display=="none"){
|
|
13 myLayer.style.width="20%";
|
|
14 main.style.width="80%";
|
|
15 myLayer.style.display="block";
|
|
16 myLayer.backgroundPosition="top";
|
|
17 } else {
|
|
18 myLayer.style.width="0%";
|
|
19 main.style.width="100%";
|
|
20 myLayer.style.display="none";
|
|
21 }
|
|
22 }
|
|
23 </script>
|
|
24 <title>OS9/GAME09/FORTH/TL1</title>
|
|
25 </head>
|
|
26 <body>
|
|
27 <div class="main" id="mmm">
|
|
28 <h1>OS9/GAME09/FORTH/TL1</h1>
|
|
29 <a href="#" right="0px" onclick="javascript:showElement('menu')">
|
|
30 <span>Menu</span>
|
|
31 </a>
|
|
32 <a href="#" left="0px" onclick="javascript:showElement('menu')">
|
|
33 <span>Menu</span>
|
|
34 </a>
|
|
35
|
|
36 <p>
|
|
37
|
|
38 <author> 河野真治</author>
|
|
39
|
|
40 <hr/>
|
|
41 <h2><a name="content000">OS-9 の特徴</a></h2>
|
|
42 Microware 社によりMotorola のMC6809用に作られた 8bit OS。1980年初頭。
|
|
43 <p>
|
|
44
|
|
45 <pre>
|
|
46 Module と言う単位をメモリ上にどこに配置しても良い
|
|
47 Time sharing を採用した並列実行(concurrent) (平行(parallel)ではない)
|
|
48 Unix like なshell とpipe
|
|
49 Basic09 というPascal likeな言語を持つ。
|
|
50
|
|
51 </pre>
|
|
52
|
|
53 <hr/>
|
|
54 <h2><a name="content001">MC6809</a></h2>
|
|
55
|
|
56 <p>
|
|
57 <center><img src="mc6809.gif"></center>
|
|
58 <p>
|
|
59
|
|
60 <hr/>
|
|
61 <h2><a name="content002">Level 1/2</a></h2>
|
|
62 level 1 ROM上のOS9 p1 kernel で動作する。
|
|
63 <p>
|
|
64 level 2 MMUで2Mbyteのメモリを使える
|
|
65 <pre>
|
|
66 アドレス変換に対応し、512kメモリを使用できる。
|
|
67
|
|
68 </pre>
|
|
69
|
|
70 <hr/>
|
|
71 <h2><a name="content003">何をするか</a></h2>
|
|
72
|
|
73 <p>
|
|
74 Emulator 上で OS-9 を動かそう。
|
|
75 <p>
|
|
76
|
|
77 <pre>
|
|
78 できれば Level 2
|
|
79
|
|
80 </pre>
|
|
81 なんで?
|
|
82 <p>
|
|
83 昔、自作のに乗っけれなかった。せっかく5万円も出して買ったのに。
|
|
84 <p>
|
|
85 残念ながらハードはもうないけど、Emulator なら?
|
|
86 <p>
|
|
87 20年前に「年取ったらやろう」と思っていたが、そろそろやるべき。
|
|
88 <p>
|
|
89
|
|
90 <hr/>
|
|
91 <h2><a name="content004">OS9 with MMU</a></h2>
|
|
92 <img src="fig/os9mmu.svg">
|
|
93
|
|
94 <p>
|
|
95
|
|
96 <hr/>
|
|
97 <h2><a name="content005">kernel構成</a></h2>
|
|
98 <img src="fig/os9.svg">
|
|
99
|
|
100 <p>
|
|
101
|
|
102 <hr/>
|
|
103 <h2><a name="content006">kernel構成</a></h2>
|
|
104 OS9p1
|
|
105 <pre>
|
|
106 system callと割り込み処理
|
|
107 Module 発見と管理
|
|
108
|
|
109 </pre>
|
|
110 OS9p2
|
|
111 <pre>
|
|
112 メモリ管理
|
|
113 Task管理
|
|
114 Signal
|
|
115
|
|
116 </pre>
|
|
117
|
|
118 <hr/>
|
|
119 <h2><a name="content007">kernel構成2</a></h2>
|
|
120
|
|
121 <p>
|
|
122 IOMan
|
|
123 <pre>
|
|
124 SCF/RBFと device driver とdescriptor の登録
|
|
125
|
|
126 </pre>
|
|
127 SCF
|
|
128 <pre>
|
|
129 sequencial file io manager
|
|
130
|
|
131 </pre>
|
|
132 RBF
|
|
133 <pre>
|
|
134 randome block file io manager
|
|
135 file system管理
|
|
136
|
|
137 </pre>
|
|
138
|
|
139 <hr/>
|
|
140 <h2><a name="content008">Runtime module</a></h2>
|
|
141
|
|
142 <p>
|
|
143 init
|
|
144 <pre>
|
|
145 boot用初期データ
|
|
146
|
|
147 </pre>
|
|
148 sysgo
|
|
149 <pre>
|
|
150 clockとShellの起動
|
|
151
|
|
152 </pre>
|
|
153 Clock
|
|
154 <pre>
|
|
155 timer 割り込み
|
|
156 日付計算
|
|
157
|
|
158 </pre>
|
|
159
|
|
160 <hr/>
|
|
161 <h2><a name="content009">Runtime module 2</a></h2>
|
|
162
|
|
163 <p>
|
|
164 Shell
|
|
165 <p>
|
|
166 Device descriptor
|
|
167 <pre>
|
|
168 D0
|
|
169 Term
|
|
170
|
|
171 </pre>
|
|
172 Device driver
|
|
173 <pre>
|
|
174 PTY
|
|
175 PDisk
|
|
176
|
|
177 </pre>
|
|
178
|
|
179 <hr/>
|
|
180 <h2><a name="content010">nitros9</a></h2>
|
|
181
|
|
182 <p>
|
|
183 OS9 をdisassemble したものらしい
|
|
184 <p>
|
|
185 Tandy Coco 上で動いていたらしい
|
|
186 <p>
|
|
187 ライセンス的にはだめかも
|
|
188 <p>
|
|
189 大目に見られてる?
|
|
190 <p>
|
|
191
|
|
192 <hr/>
|
|
193 <h2><a name="content011">Emulator</a></h2>
|
|
194 sbc09というアセンブラEmulator上に実装して動作させた
|
|
195 <p>
|
|
196 sbc09 を mmu 対応にして level 2 まで動かした。
|
|
197 <p>
|
|
198 仮想RBF (random block filer manager )
|
|
199 <p>
|
|
200
|
|
201 <pre>
|
|
202 Unix 上のファイルを Emulator 側からos9のファイルシステムとして見せる
|
|
203
|
|
204 </pre>
|
|
205
|
|
206 <hr/>
|
|
207 <h2><a name="content012">OS-9 上のソフト</a></h2>
|
|
208
|
|
209 <p>
|
|
210
|
|
211 <pre>
|
|
212 BASIC09
|
|
213 FORTH
|
|
214 BASIC
|
|
215 GAME09
|
|
216 TL/1
|
|
217
|
|
218 </pre>
|
|
219
|
|
220 <hr/>
|
|
221 <h2><a name="content013">FORTH</a></h2>
|
|
222
|
|
223 <p>
|
|
224 PostScript の元になった言語
|
|
225 <p>
|
|
226 関数単位
|
|
227 <p>
|
|
228
|
|
229 <pre>
|
|
230 assembler を自分でかける
|
|
231 : ACCEPT-TEST
|
|
232 CR ." PLEASE TYPE UP TO 80 CHARACTERS:" CR
|
|
233 ABUF 80 ACCEPT
|
|
234 CR ." RECEIVED: " [CHAR] " EMIT
|
|
235 ABUF SWAP TYPE [CHAR] " EMIT CR
|
|
236
|
|
237 </pre>
|
|
238
|
|
239 <hr/>
|
|
240 <h2><a name="content014">GAME09</a></h2>
|
|
241
|
|
242 <p>
|
|
243 VTLの日本での実装
|
|
244 <p>
|
|
245 記号的なBASIC
|
|
246 <p>
|
|
247 コンパイラとかが書かれた
|
|
248 <p>
|
|
249
|
|
250 <pre>
|
|
251 100 "ADDRESS=" A=?
|
|
252 110 "TO =" D=? @ !=900
|
|
253 120 @=(A>D) #=-1
|
|
254 900 / ??=A .=20 E=A !=1000
|
|
255 910 $=$D .=5 B=0,5 ;=E+B>=A .=3 #=930
|
|
256 920 ?$=E:B) " "
|
|
257
|
|
258 </pre>
|
|
259 割とダメ。行番号なしの rvtl というのがある。
|
|
260 <p>
|
|
261
|
|
262 <hr/>
|
|
263 <h2><a name="content015">Micro C</a></h2>
|
|
264 mohta氏と手塚氏の作った 6809 用の整数Cコンパイラ。構造体がある。
|
|
265 <p>
|
|
266
|
|
267 <pre>
|
|
268 04D7: * getchar()
|
|
269 04D7: * { return getc(stdin);
|
|
270 04D7: getchar
|
|
271 04D7: 3440 PSHS U
|
|
272 04D9: 33E4 LEAU ,S
|
|
273 04DB: EC20 LDD 0,Y
|
|
274 04DD: 3406 PSHS D
|
|
275 04DF: 17FFB7 LBSR getc
|
|
276 04E2: 3262 LEAS 2,S
|
|
277 04E4: * }
|
|
278 04E4: 35C0 PULS U,PC
|
|
279
|
|
280 </pre>
|
|
281 これを CbC にしたものがある。
|
|
282 <p>
|
|
283
|
|
284 <hr/>
|
|
285 <h2><a name="content016">TL/1</a></h2>
|
|
286 大西氏のコンパイラ言語、データ型はByteとByte Arrayのみ。手続きと関数がある。
|
|
287 <p>
|
|
288
|
|
289 <pre>
|
|
290 PROC WAIT
|
|
291 FUNC TIME
|
|
292 %--- MAIN ---
|
|
293 VAR MMI,MMJ,MMK
|
|
294 BEGIN
|
|
295 WRITE(1:ASCII($A))
|
|
296 MMI:=1 MMJ:=2 MMK:=3
|
|
297 WAIT(4,5)
|
|
298 WRITE(1:MMI,CRLF)
|
|
299 END
|
|
300 %-- PROCEDURE WAIT --
|
|
301 WAIT(WWA,WWB)
|
|
302 VAR WWJ,WWK
|
|
303 BEGIN
|
|
304 WWJ:=4
|
|
305 WWK:=TIME(6,7)
|
|
306 WRITE(1:MMI,WWJ,WWA,WWB,WWK,CRLF)
|
|
307 END
|
|
308
|
|
309 </pre>
|
|
310 型がないのは現代的な気がする
|
|
311 <p>
|
|
312
|
|
313 <hr/>
|
|
314 <h2><a name="content017">TL/1のオブジェクト</a></h2>
|
|
315
|
|
316 <pre>
|
|
317 020B: 9F 16 STX <$16
|
|
318 020D: 30 C9 01 C2 LEAX +$01C2,U
|
|
319 0211: 86 01 LDA #$01
|
|
320 0213: A7 00 STA +$00,X Mainの大域変数
|
|
321 0215: 86 02 LDA #$02 =局所変数
|
|
322 0217: A7 01 STA +$01,X
|
|
323 0219: 86 03 LDA #$03
|
|
324 021B: A7 02 STA +$02,X
|
|
325 021D: 86 04 LDA #$04
|
|
326 021F: A7 03 STA +$03,X
|
|
327 0221: 86 05 LDA #$05
|
|
328 0223: A7 04 STA +$04,X
|
|
329 0225: 86 03 LDA #$03
|
|
330 0227: 17 00 0F LBSR $0239
|
|
331 022A: 86 01 LDA #$01
|
|
332 022C: 97 01 STA <$01
|
|
333 022E: A6 00 LDA +$00,X
|
|
334 0230: 17 FE 3A LBSR $006D
|
|
335 0233: 17 FE C6 LBSR $00FC
|
|
336 0236: 16 FE D6 LBRA $010F
|
|
337 0239: AF E3 STX ,--S
|
|
338 023B: 30 86 LEAX A,X 呼出側の局所変数の確保
|
|
339 023D: 86 04 LDA #$04
|
|
340 023F: A7 02 STA +$02,X
|
|
341 0241: 86 06 LDA #$06
|
|
342 0243: A7 04 STA +$04,X 局所変数
|
|
343 0245: 86 07 LDA #$07
|
|
344 0247: A7 05 STA +$05,X
|
|
345 0249: 86 04 LDA #$04
|
|
346 024B: 17 00 24 LBSR $0272
|
|
347 024E: A7 03 STA +$03,X
|
|
348 0250: 86 01 LDA #$01
|
|
349 0252: 97 01 STA <$01
|
|
350 0254: A6 20 LDA +$00,Y 大域変数
|
|
351 0256: 17 FE 14 LBSR $006D
|
|
352 0259: A6 02 LDA +$02,X 呼び出した方の引数
|
|
353 025B: 17 FE 0F LBSR $006D
|
|
354 025E: A6 00 LDA +$00,X
|
|
355 0260: 17 FE 0A LBSR $006D
|
|
356 0263: A6 01 LDA +$01,X
|
|
357 0265: 17 FE 05 LBSR $006D
|
|
358 0268: A6 03 LDA +$03,X
|
|
359 026A: 17 FE 00 LBSR $006D
|
|
360 026D: 17 FE 8C LBSR $00FC
|
|
361 0270: 35 90 PULS PC,X
|
|
362
|
|
363 </pre>
|
|
364
|
|
365 <hr/>
|
|
366 <h2><a name="content018">Gears OS の参考になる?</a></h2>
|
|
367
|
|
368 <p>
|
|
369 module は Code Gear 。Data Gear を導入する。
|
|
370 <p>
|
|
371 OS 自体を module 構成にする
|
|
372 <p>
|
|
373 module を memory に mapping する
|
|
374 <p>
|
|
375 module 間の通信
|
|
376 <p>
|
|
377 module の生態系 (version 管理 )
|
|
378 <p>
|
|
379
|
|
380 <pre>
|
|
381 動く module の version の組合せ
|
|
382
|
|
383 </pre>
|
|
384 TL/1 言語はシンプルに
|
|
385 <p>
|
|
386 型はメタレベルで付ける
|
|
387 <p>
|
|
388 大きなデータは write などの通信で行う
|
|
389 <p>
|
|
390
|
|
391 <hr/>
|
|
392 <h2><a name="content019">さらに</a></h2>
|
|
393 qemu で TLB base で動かす
|
|
394 <p>
|
|
395 interpreter base の Emualtor ではなく、compile base にする
|
|
396 <p>
|
|
397 nitros-9 のソースコードのコメントを増やす
|
|
398 <p>
|
|
399 まぁ、あんまりやりすぎないように
|
|
400 <p>
|
|
401 </div>
|
|
402 <ol class="side" id="menu">
|
|
403 OS9/GAME09/FORTH/TL1
|
|
404 <li><a href="#content000"> OS-9 の特徴</a>
|
|
405 <li><a href="#content001"> MC6809</a>
|
|
406 <li><a href="#content002"> Level 1/2</a>
|
|
407 <li><a href="#content003"> 何をするか</a>
|
|
408 <li><a href="#content004"> OS9 with MMU</a>
|
|
409 <li><a href="#content005"> kernel構成</a>
|
|
410 <li><a href="#content006"> kernel構成</a>
|
|
411 <li><a href="#content007"> kernel構成2</a>
|
|
412 <li><a href="#content008"> Runtime module</a>
|
|
413 <li><a href="#content009"> Runtime module 2</a>
|
|
414 <li><a href="#content010"> nitros9</a>
|
|
415 <li><a href="#content011"> Emulator</a>
|
|
416 <li><a href="#content012"> OS-9 上のソフト</a>
|
|
417 <li><a href="#content013"> FORTH</a>
|
|
418 <li><a href="#content014"> GAME09</a>
|
|
419 <li><a href="#content015"> Micro C</a>
|
|
420 <li><a href="#content016"> TL/1</a>
|
|
421 <li><a href="#content017"> TL/1のオブジェクト</a>
|
|
422 <li><a href="#content018"> Gears OS の参考になる?</a>
|
|
423 <li><a href="#content019"> さらに</a>
|
|
424 </ol>
|
|
425
|
|
426 <hr/> 河野真治 / Tue Apr 16 16:57:59 2019
|
|
427 </body></html>
|