Almost lost technologies

ここは昔の CPU を用いた工作記事を書くために用意しました。

NIBL (for SC/MP III) のメモリマップ

SC/MP-III 用の NIBL はとりあえず無理矢理 AS assembler で通るようにしたので、とりあえずバラックで組んで試験するのと並行して、まず整数 Basic で都合の良い用に手直ししようかと。
まず、メモリマップが気に入りません。当時のメモリ状況ならこれでよかったんでしょうけど、、、

NIBL のメモリマップ

SC/MP-III だと 0xff00-0xffff が 6502 なんかの ZP相当で、スクラッチとして使えるのですが、オンチップメモリは全部 NIBL が使っていて、そのすぐ下にメモリが置きたい。一方、NIBL は 0x1000 番地から 256Byte をワークに使っていて、そこにメモリがなければならない、という構成です。ベタッと RAM で埋めると 60KB という中途半端な領域が必要。
また RAM 開始番地まで 1.5KB しか空きがないので FP 処理を押し込むにはやや狭い。はみ出すと今度は上位側に ROM を持ってこないといけないんですけど、AS の都合で実メモリマップと ROM メモリマップが違っていると (そんな機能はないのでバイナリを繋げないといけなく) 処理が面倒。また、IO は好き勝手に置け、ということになっているんですけど、置いた位置までで RAM がお終いとなるので、これも上の方に持ってこないといけない。

案としては、

  1. 32KB RAM を 0x1000-0x8eff と 0xff00-0xffbf に来るようにする。FP が残り 1.5KB に入らない場合 (多分入らない)ROM 割り付けは細工する。I/O は fe00 あたりに置く。または 空き領域は RAM で埋めてしまい同様にする。ROMベースで直していると ROM の細工が入るのは悩むところ。
  2. RAM ワークを 0x8000 からに移動してしまう。これをやると自動実行 ROM 処理を潰す必要あり。
  3. RAM ワークを 0x4000 からに移動し、RAM は 0x4000-0xbeff と 0xff00-0xffbf に来るようにする。デコード回路は面倒だが、他の修正は少ない。

とりあえず、今回は (3) で、デコーダは今回は LS138 あたり一発とは行かないので GAL を焼く方向で考えています。

#なお、自動実行ROMアドレスは上の図だと 0x2000 開始になっていますが、アセンブラ見る限りは 0x8000 からです。