効能
VTL_on_FPGAのの操作をスタンドアローン(パソコン無し)で実行できます
(1)PS2キーボード
(2)VGAキャラクター表示 80x25行x2色(256色から選択)
(3)VGAグラフィック表示 640x480x256色
(4)SDRAMアクセス 32MB
(5)プログラム格納 64KB(EPCS) ※制御が大変だったが結構便利
画面の操作
1.テキスト表示
(1)操作入出力表示
シリアルとパラに表示しています。(追加操作不要)
(2)VDTのみに表示
IOの$14番地に書き込むと表示されます。
例 L=0,159 <$14=$30+(L&15) @=L+1 <- NG(文字欠け)
※但し、改行中は入力を見ておらず、この方法では文字欠けが発生します。
シリアルと同時ならOKよ
例 L=0,159 $=$30+(L&15) @=L+1 <- OK
(3)VDTに位置指定で表示
IOの$12番地に表示アドレス、$13番地に表示データを書き込むと表示されます。
例 W=0,10 @=W+1 P=1*80 L=0,79 <$12=P+L <$13=$30 @=L+1
※但し、表示開始位置を0リセットするので、この後の一回目は変なスクロールが発生。
また、スクロール中に表示すると文字欠けするので、この考慮が必要。
(3)色指定
文字/背景色は2種類の何れかを選べます。
文字データ+$000で色指定0、文字データ+$100で色指定1となります。
文字色指定0は$10、色指定1は$11に$xxyy(xx=背景色 yy=文字色)により指定します。
例 <$10=$00FF <$11=$E000 L=0,159 $=$130+(L&15) @=L+1 <- 文字黒、背景赤
色データは8bitで「rrrgggbb」の並びとなっています。
グラフィック表示
$15にX座標、$16にY座標、$17に色データを書き込むと表示されます。
例 10 Y=120,239 <$16=Y <- 画面に白い四角を表示
20 X=160,319 <$15=X
30 <$17=$FF
40 @=X+1 @=Y+1
※画面の左上に書いた覚えのない線が見えるが、なんだろう。
動作概要
PS2キーボード
(1)スキャンコードの取得が「EP4CE6-Starter-Board-Docs」に記載されているで流用。
このロジックでは、キーを操作すると、acd_doneが一瞬ONする。
(2)スキャンコードからアスキーコードへの変換を実装。
※VTLで使用する最低限の変換、なにか漏れているかもしれない。
(3)VTLとの接続ロジックを記述、次の動作となる。
キー入力 -> acd_rdy(ON) -> キー読取 -> acd_req(ON) -> acd_rdy(OFF)
(4)シリアル入力時に合わせて入力確認を行う事により、VTLから読み取る。
VGAキャラクター表示
(1)FPGAメモリに50MHzで駆動するテキストバッファを確保。
(2)25MHzクロックのHI/LOで、VTL(W)/ディスプレイ(R)アクセスを切り替える。
(3)画面表示に合わせてテキストバッファからディスプレイデータを読出し。
(4)FPGAメモリに25MHzで駆動するCG(キャラクタージェネレーター)を確保。
(5)ディスプレイデータでCGを選択し、キャラクターを表示。
(6)VTLからのアクセスはフラグを立てて、アクセス可能なタイミングで書き込む。
VTLからのアクセスが遅いので、通常は問題なくアクセス可能。
但し、インターロックがないので、スクロール中にアクセスすると、文字欠け発生。
(7)表示の為にメモリを4KB消費。使わない場合はTD4の主メモリを増やすが吉。
VGAグラフィック表示
(1)VGAのグラフィックバッファとしてSDRAMを使用する。
(2)SDRAMは25MHzに2バイト毎のアクセスが可能な設定なので、VTL/VGA交互にアクセス。
(3)VGAは12.5MHz毎に2byte読出し、25MHz毎に1dot(1byte)表示する。
(4)グラフィック表示でSDRAMを307.2KB使用しているが残りは空き地、もったいない。
SDRAM
(1)SDRAMは、クロック150MHz、CL=3で駆動。
(2)150MHzを6分周して、25MHz毎にR/Wを実施している。
※元ネタ(エミュレーター)は64MHzの8分周なので、タイミング的になにか誤っているかも。
※ライブラリを使用したほうが間違いないのだろうが、I/Fが複雑で良く判らない。
(3)6分周のタイミングでras,cas,weを操作すると、最後に読出しデータが出てくる。
(4)VDTが定期的にアクセスするので、リフレッシュはやっていない。
プログラム格納
(1)EPCSの最後のエリア($70000 - $7FFFF)を使用。(FPGAでは使っていない模様)
(2)追加書き込みを行い、最後まで行ったらフォーマットする。
(3)書き換え回数は10万回と言われているので、フォーマットを10万回行える。
(4)エリアは極めて小さいが、4KBのプログラムなら16本入る。
※このボードではASMIが正常に動作しなかったので、ローレベルから制御している。
その他
とりあえず動いているのレベルであり、状況によっては動かない可能性が有ります。
上記記載のハード、ソフトは無保証であり、各自の責任においてご利用願います。