現在地

MC68kボード復活作戦(番外編)


MC68kボード復活作戦のために当時の開発環境を引っ張り出しました。今回はそれについて書いてみたいと思います。

まずは使用したアセンブラです。

CP/M-68Kが動いてからは付属のアセンブラ・Cコンパイラを使用しましたが、それまではPC-8001mk2上でクロスアセンブラを使用していました。『I/O』1986年2月号掲載のクロスアセンブラです。

これはN BASIC上で動作するもので、ソースは次のようにBASICのエディタを流用して入力します。

10 "loop: bra loop

BASICの文法的には間違っているので「run」すれば当然エラーになりますが、文字列の形式になっているのでそのままメモリに格納されます。アセンブラはそれを読んでアセンブルするというわけです。

これはディスク無しで動作するものなのでアセンブラ本体・ソース・オブジェクト・シンボルテーブルなどすべてがRAM上になければなりません。ソースとオブジェクトはオーバラップさせることもできますが、一度アセンブルするとソースが破壊されます。

少しでもメモリを節約するためにソースは切り詰めていました。

  • コメントは無し
  • ラベルは短く:どうせ先頭から6文字しか識別されません。
  • インデント無し

それでもメモリが足りなくなり、RAMエリア拡大を行ないました。

PC-8001mk2のN BASICモードでのメモリマップは次のようになっています。

  • 0000H~5FFFH:N BASIC ROM
  • 6000H~7FFFH:未使用
  • 8000H~0E9FFH:フリーエリア
  • 0EA00H~0FFFFH:N BASIC ワークエリア

0000H~7FFFHには普段使われない裏RAMがあるので、これを6000H~7FFFHに出現させられれば8kBフリーエリアが増やせる可能性があります。残念ながら部分的に切り替えることはできないので、次のようなプログラムを実行していました。

       1/       0 :                     	CPU	Z80
       2/       0 :                     
       3/    FF40 :                     	ORG	0FF40H
       4/    FF40 :                     	
       5/    FF40 : 21 00 00            	LD	HL,0000H
       6/    FF43 : 11 00 00            	LD	DE,0000H
       7/    FF46 : 01 00 60            	LD	BC,6000H
       8/    FF49 : 3E 10               	LD	A,10H
       9/    FF4B : D3 E2               	OUT	(0E2H),A
      10/    FF4D : ED B0               	LDIR
      11/    FF4F : 3E 11               	LD	A,11H
      12/    FF51 : D3 E2               	OUT	(0E2H),A
      13/    FF53 : 21 00 60            	LD	HL,6000H
      14/    FF56 : C3 E9 17            	JP	17E9H
      15/    FF59 :                     	

当時はこの程度わざわざアセンブラなど使っていません。頭の中でアセンブルできていましたし、暗記していた時期もあります。

5~10行目はBASIC ROMの内容を同アドレスの裏RAMにコピーし、11,12行目で裏RAMに切り替えます。これ以降はBASICのエリアも書き込めるので壊さないように注意する必要があります。13,14行目でフリーエリアの開始アドレスを6000Hに変更します。

これでしばらく時間が稼げたのですが、Tiny BASICの拡張が続いてまた足りなくなりました。

しかたなくTiny BASICのソースを3分割したのですが、アブソリュートアセンブラなので相互参照は面倒なことになりました。

その後、CP/M-68Kを移植してからはメモリの制限も事実上無く、分割アセンブルも自由にできるようになり、この環境はまったく使わなくなりました。

参考文献・関連図書: 
桑原泰雄(1986)「68000クロス・アセンブラ」,『I/O』1986年2月号, pp.249-253, 工学社.

コメント

N-BASICをシャドウRAMにしたのですね。そういう目的ではないにせよ。(笑)

RAMにしてもウエイトは変わらなかったと思いますね。

PC-8001は16kBと32kBでRAM開始アドレスが変わったので開始アドレスを変更するルーチンがROMに入っていて簡単に切り替えられたのです。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。