組み込まれたエンジニア

我輩は石である。名前はまだ無い。

ISEに二つのメモリの初期化をさせる

2009-02-14 13:18:16 | Weblog
Apple-I互換システムでは、WozのモニタとキャラクタジェネレータROMの二つのメモリを初期化したかったというのは、前に書いた。これらの内容は、bitファイルを作成した後から、自由に書き換えられると便利なので、合成前のソースではなく、bmmファイルとmemファイルから勝手に初期化する方法を模索していた。

ところが、ISEの標準パスでは、memファイルは一つしか許されないということらしい。(二つを指定した時には文句を言われなかったのに、二つ目を新規作成しようとしたら、メッセージが出てきた)。

とういうことで、方針としては、二つのメモリを一つとして扱い、一気に初期化してしまうことに決めた。


Apple-Iシステムのメモリマップと、data2memの認識するメモリマップを一致させる必要は全くないので、モニタROMのBRAMを 0x000-0x7FFに設置し、VRAMを0x800-0xFFFとする。こうしておいて、memファイルの、CGパターンの始まる所に、アドレス指定記述を置く。

シリアルケーブルを持ってこなかったり、独立して使えるVGAモニタが東京の職場にはなかったりするので、実機での確認はできないが、bitファイルは正しく生成されていることをdata2memのbitファイルダンプ機能を使って確認ずみ。

分ってしまえば、なぁんだということは多い。
(でも、説明書にもう少し書くか、エラーメッセージくらい出せよと言っておこう)

sfl2vlプリプロセッサの変更

2009-02-14 07:51:31 | Weblog
バレンタインにちなんで(?)、プリプロセッサに機能追加した。

%ifdef
%else
%endif

が、Cのプリプロセッサ同様に動作する。
それと、識別子中に、

abc%XX%def


と書くことで、マクロ定義した、XXを識別子の一部として認識させる。

ついでに、コメントのネストも動くようにした(はず)。

変更後のパッケージは、
次にある。

http://www.ip-arch.jp/sfl2vl.html

追記:電車の中であるが、ふと、ifdefがあって、ifndefがないのはどうよと思い、ifndefを追加した。上書きしたので、上のURLはそのまま。バタバタしていて、今回の機能はほとんど確認が取れていないので、上のパッケージは正式リリースではないことに注意。


もう一つついでに、SFL構文で使う数字に+/-で定数を付加することを許す。
%d N 10

module test_%N% {
 input a<N> ;
 output f<N-1> ;

 f=a<N-2:0> ;
 }

のような使い方を許すことで、ライブラリ化に便利となる(はず)。