現在地

ソフトウェア

FDCボード (テスト編 その3)

テーマ:

カテゴリー:

ちょっと間があいてしまいました。

前回CRCエラーが出ているとはいえ一応セクタが読めるようになりました。データ転送のオーバランも発生していません。

FDCの回路を作るのは今回が初めてですが、8ビット時代に製作記事はよく読んでいました。そこではデータ転送が間に合うかどうかが大きな課題として扱われることが多く、ソフトウェアでステータスを見ながらでは取りこぼすということでいろいろな工夫がありました。

  • 他の割り込みを禁止する
  • DMA(Direct Memory Access)を利用する。これは速度の余裕ができてからもほかの理由で使われ続けました。
  • ステータスをチェックしないでデータ転送する。そのままでは正常に転送できないので、ハードウェアでFDCへのアクセスを引き伸ばす。

それで当初は心配していたのですが、さすがに当時とはCPUの速度が一桁以上上がっているので余裕がありますね。

FDCボード (テスト編 その2)

テーマ:

カテゴリー:

前回手動でコマンド発行するところまで書きました。

このままでは面倒ですし、何よりデータ転送を伴うコマンドが使えません。

メモリ上にコマンドとパラメータ列を書いておいて自動で送信、リザルトステータスの受信までを行えるようにします。

当初はステータスレジスタを参照しながら送信・受信を自動切換えさせようとしたのですが、なぜか不安定だったのでパラメータやリザルトのバイト数を指定するように変更しています。

FDCのマニュアルを読みながらだったので何かを見落としていた可能性が高いです。

これでFDCとのやりとりはできるようになったので、実際にディスクを読んでみることにします。

FDCボード (テスト編 その1)

テーマ:

カテゴリー:

先日から製作中のFDCボード、ハードウェアができたらソフトウェアを書かなくてはなりません。FDC絡みのソフトウェア経験はほとんどないのでいろいろ試しながらになります。

ベースとしてROMエミュレータのソフトウェアを使いました。I/O経由でRAMにアクセスしていたところを内蔵RAMに書き換えればメモリのダンプとセット、それからHEXファイルでの入出力が可能になります。

ATmegaのヒューズ設定で若干てこずりましたが...

それにFDCレジスタへのアクセス機能(コマンド)を追加します。

AVRA から AS へ

カテゴリー:

これまでAVRのソフトウェア開発はAVRAを使ってきました。文法が純正アセンブラとほぼ一緒で、NetBSD上で使えるのがその理由でした。

最近 8080, Z8, MC6800, MC6809 などで共通に使えるという理由で The Macroassembler AS を使うことが増えてきました。Z80 も容易に移行できたので、AVR もこの際統一しようとやってみたので引っかかった点などを書いてみようと思います。

題材は、ROMエミュレータのメモリ編集ルーチンの製作中のボードへの移植です。製作中のボードについてはある程度形になったところで取り上げようと思います。

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

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

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

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

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

10 "loop: bra loop

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

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

南青山アドベンチャー

テーマ:

昨日の表参道アドベンチャーに続いて南青山アドベンチャーです。

「南青山アドベンチャー」は独立なった「AhSKI!」1983年号に掲載されたテキストのアドベンチャーゲームです。やはり機種依存部分が分離された構造で、本体プログラムは共通で PC-6001, PC-8001/8801, MZ-80B/2000, PASOPIA の各機種に対応していました。

これもZ80バイナリなのでZ80コードを実行できる何らかの環境が必要なのも同様です。

プログラムは9000H~0E817Hまでとかなり大きくなっています。グラフィックは無いものの近傍のマップが表示されたりと画面表示も進歩していて、機種依存部分も9000H~91FFHと拡大されています。実行時にRAMに転送して実行しなければならないという状況も同様です。

機種依存部分のアドレスは以下のようになっています。

表参道アドベンチャー

テーマ:

呟いたら意外に反響があったので資料を残しておきます。

「表参道アドベンチャー」は「ASCII」1982年4月号の綴じ込み付録「AhSKI!」に掲載されたテキストのアドベンチャーゲームです。ソフトウェアに互換性の無いパソコンが乱立していた時代ですが、機種依存部分を分離することにより本体共通で PC-8001, MZ-80K/C, MZ-80B の各シリーズで実行可能となっていました。

この機種依存部分が分離されているということはそこだけ作り直せば他のハードウェアでも実行できる可能性があるということです。

ということで自作のボードで動かすために機種依存部分を解析しました。

ボードは翌年の「南青山アドベンチャー」のために製作したものですが問題なく実行できます。

こんなことをする人は少ないかもしれませんがここに記録しておきます。

まずこのゲームはZ80のバイナリなのでZ80か互換のプロセッサが必要です。あるいはZ80をエミュレーションする方法もあります。

PC-8001 テープからのオートスタート

カテゴリー:

テープ時代のメモの記事でオートスタートに触れたのでその仕組みを書いてみます。

PC-8001でバイナリ(いわゆるマシン語)のプログラムをテープから読んで実行するには普通次のようにします。

mon
*L
*GD55B

ここで「*」はプロンプトなので入力はしません。

mon」コマンドでマシン語モニタに入り、「L」でテープからロードし、「G」で実行します。「D55B」は実行開始アドレスです。

mon」「L」は不変なので憶えられますが、実行開始アドレスはプログラム毎に異なるので面倒です。そこで市販ソフトウェアを中心にこのオートスタートのテクニックが使われました。

The Macroassembler AS

カテゴリー:

以前うまくインストールできずに旧バージョンを入れてしのいでいた「The Macroassembler AS」ですが、公式ページを見に行ったところ数日前に新バージョンが出ていたことと、SBC6800, SBC6809のコードを書き始めるところだったことから最新版にアップデートしました。

前回はさらっと書いたので今回は流れを書いてみます。

私はNetBSD環境で使いたいのでソースコードからビルドすることにします。

まだpkgsrcには入っていないようです。私は野良ビルドしてしまうことが多いので気にしません。

Win32などバイナリの用意されているプラットフォームもあります。

ページ