68000 Tiny BASIC の予約語
先日ソースコードを発見したMC68000用のTiny BASIC、せっかく発見したのでコードを整理してみようと思っています。
まずは手始めに予約語リストをまとめてみました。
先日ソースコードを発見したMC68000用のTiny BASIC、せっかく発見したのでコードを整理してみようと思っています。
まずは手始めに予約語リストをまとめてみました。
MC68kボード復活作戦のために当時の開発環境を引っ張り出しました。今回はそれについて書いてみたいと思います。
まずは使用したアセンブラです。
CP/M-68Kが動いてからは付属のアセンブラ・Cコンパイラを使用しましたが、それまではPC-8001mk2上でクロスアセンブラを使用していました。『I/O』1986年2月号掲載のクロスアセンブラです。
これはN BASIC上で動作するもので、ソースは次のようにBASICのエディタを流用して入力します。
10 "loop: bra loop
BASICの文法的には間違っているので「run」すれば当然エラーになりますが、文字列の形式になっているのでそのままメモリに格納されます。アセンブラはそれを読んでアセンブルするというわけです。
これはディスク無しで動作するものなのでアセンブラ本体・ソース・オブジェクト・シンボルテーブルなどすべてがRAM上になければなりません。ソースとオブジェクトはオーバラップさせることもできますが、一度アセンブルするとソースが破壊されます。
MC68020で外部バスがデータ・アドレスともに32ビットとなってメモリは当初計画のフルスペックの4GBとなりました。とはいえ登場した頃はまだ4GBのメモリを必要とする応用など無かったのでアドレスデコードが面倒くさいだけと思った人も多いでしょう。
ここまできてもメモリ管理ユニット(MMU)は内蔵されていません。メモリ空間の拡張のためにもMMUを必要とした80286などと異なり、必要性がそれほど無かったからかもしれません。
それでも仮想記憶には必要なので外付けとして用意されました。一つはMC68000,MC68010用のMC68451を拡張したらしいMC68461ですが、残念ながら詳しい資料が見当たりません。もう一つはMC68851、こちらは一部のパソコンなどにオプションで搭載できましたからそれなりに知られていました。いずれも論理メモリ空間・物理メモリ空間はともに4GBです。
命令フェッチのみですが256バイトのキャッシュも内蔵されました。
MC68010の前にMC68008について書いておきましょう。
Intelの8088に対抗して小規模向けに作られたのがMC68008です。データバスが8ビット、アドレスバスが20ビットに縮小されています。メモリ空間は1MBとなります。
これで不足するなら素直にMC68000を使えということです。
それでは本題のMC68010を見ていきましょう。
ハードウェア的にはMC68000と互換でそのまま挿し換えもできます。当然バス幅にも変更はなく、メモリ空間も16MBのままです。ソフトウェア的にはさまざまな改良点がありますが、メモリに関するものには次のようなものがあります。
MAA-1の改造のデバッグ状況は逐一実況してもなんなので大きな進展があったときに書くことにしますね。
今回はパーソナルなコンピュータのメモリ事情 (第8回: 80386以降)で書くと予告してまだ書いていなかったMC68000系のメモリ事情について取り上げてみようと思います。
以前書いたようにIntelは8086で64kBから1MBにメモリ空間を拡張するに際してはアドレスのレジスタ長を8ビット時代の16ビットのままセグメントによって拡張する道を選びました。単独で64kBを超えるメモリを必要とするプログラムが少ないという当時の事情を考慮すれば悪くない選択だったのでしょう。不幸は拡張を繰り返して使われ続けたことです。
一方でMotorolaは大胆にレジスタ長をデータもアドレスも32ビットにするという選択をしました。Intelが必要に応じて少しずつ拡張していくことになったのに対し、最初に考えうる最大限を計画しておいてそのサブセットを実装していくという道です。
テープ時代のメモの記事でオートスタートに触れたのでその仕組みを書いてみます。
PC-8001でバイナリ(いわゆるマシン語)のプログラムをテープから読んで実行するには普通次のようにします。
mon
*L
*GD55B
ここで「*
」はプロンプトなので入力はしません。
「mon
」コマンドでマシン語モニタに入り、「L
」でテープからロードし、「G
」で実行します。「D55B
」は実行開始アドレスです。
「mon
」「L
」は不変なので憶えられますが、実行開始アドレスはプログラム毎に異なるので面倒です。そこで市販ソフトウェアを中心にこのオートスタートのテクニックが使われました。
前回はスルーホールメッキの記事を読んだところまで書きました。
その後、大学に入ってから何人か趣味でマイコン回路を作っている方にも会いましたが、皆さん万能基板派でしたね。
大学の研究室でもあまり基板を起こす話は少なかったように思います。
就職後は私はソフトウェアがメインでしたが、何回か基板を作る機会に恵まれました。殆どは検討時に使用する治具基板でしたが、回路図の作成まで行なってパターン設計以降は外注というパターンです。部品のライブラリ作成も専門に行なう部署がありましたので、回路さえ書けば基板のことはあまり知らなくても何とかなります。その代わり費用は結構かかっていました。
実は勤め人時代に一度だけ仕事の回路を万能基板で作ったことがあります。
私の担当のところでは新規デバイスがいくつもあったのですが、他は大半が流用設計という状況でした。一種類の基板だけ先行で作るわけにもいかず、事前に検討したかったので手配線で作ったのです。手配線する人などほとんどいない状況でソフトウェア担当と思われていた私が作っていたのですから、通る人には不思議がられました。でも他の部分に大きく遅れることなく動かせたので役には立ちました。
このところSBC6809, SBC6800と買ったままになっていたものを組み立てていましたが、勢いで SBC8080 も組んでしまいました。
特にハマることもなく動作した SBC8080 + SUB8080 です。それぞれのボードについては近日中に書くつもりですが、今日は基板について思いつくまま書こうかなと思います。
こういう(人様の設計した)専用基板のキットを作ってはいても、本当は自分で設計していろいろと作りたいわけです。実際作りかけて中断しているものをいくつか取り上げてきましたし、未公表の作りかけも多数あります。構想段階のものまで含めればさらに増えます。
それなら何故完成しないかというと最近は万能基板に手配線する根気が続かなくなってしまったのです。
こんなものが残っていました。カセットテープ時代に使っていたメモです。20枚(テープ20本分)ほど出てきた内からいくつかお見せしましょう。
これはデモテープのものですね。
「No.1」はテープにも書いていた管理番号、「(A)」はもちろんA面のことです。テープ1本についてルーズリーフ1枚使って表裏にA面/B面を書いていました。
006, 039, 076 は使っていたテープレコーダでのカウンタ値です。これはレコーダの機種で異なるのでレコーダを変えたらまた調べなおさなくてはなりません。幸い私はこの1台を使い続けたので特に困ることはありませんでした。
次の「bas」はBASICのCSAVEコマンドで保存したものであることを表しています。