まだまだCMT セーブの設計中です。
タイトルは、"8255と8049の設計”ですが、実際は SD をコントロールしているファームウエアの設計です。
Windows やDOS と違って直接デバイスを触るため、OS でやっている処理をする羽目になっています。
やっとそれなりな物が出来ましたが、特殊な条件の時の処理が未実装です(結構面倒...)
SD カードのプログラムは、もうお腹いっぱいな状態です...
2012年03月14日
2012年03月03日
8255と8049の設計(14)
CMT セーブの設計中なんですが...
前のロードの時の設計(というかプログラム)が悪いのか、このまま行くと手直しがすごく大変で、さらにバグりそうです。
最初にSDカードのアクセスのプログラムを書くときに、後の事を考えずに作ったのがまずかったようですね...
今後の事(FDD対応)の事もあるため、プログラム全部を見直して、再設計中です。
アセンブラなので、大変なんですが(−−;
前のロードの時の設計(というかプログラム)が悪いのか、このまま行くと手直しがすごく大変で、さらにバグりそうです。
最初にSDカードのアクセスのプログラムを書くときに、後の事を考えずに作ったのがまずかったようですね...
今後の事(FDD対応)の事もあるため、プログラム全部を見直して、再設計中です。
アセンブラなので、大変なんですが(−−;
2012年02月06日
mk2のバスリクエストについて(2)
ちょっと書き込みの時間が空いてしまいました。
BUSRQ を間引く方法はちゃんと動きそうなんですが、原因不明の不具合が出ました。
mk2 でMODE1〜4 の時のみ、左にゴミが出るというものです。
他のモードではちゃんと動いているんですけどねー。
BUSRQ を間引く方法はちゃんと動きそうなんですが、原因不明の不具合が出ました。
mk2 でMODE1〜4 の時のみ、左にゴミが出るというものです。
他のモードではちゃんと動いているんですけどねー。
2011年10月19日
8255と8049の設計(11)
ロード完了直後にハングする問題は、また8049関連でした。
どうもロード直後に、ロード完了のコマンドを投げる前に、ゲームキーの調査のコマンドを投げられているらしく、これが悪さしているようです。
この部分を修正して、ついでにSDRAM周りに機能を追加しました。
SDRAMは、16ビット幅のものが搭載されているのですが、このうち8ビットしか使っていませんでした。
書き込みや読み出しでコケた場合にエラーを検出するように、上位8ビットにエラー検出用のバイトを設けました。
と言っても、元データとアドレス上位8ビット、アドレス下位8ビットをXOR したものを書き込んでいるだけですが。
ロードは出来るようになりましたが、大抵のソフトはどこか調子が悪いような動きをします。
オールBASICでも、平気で(?)ハングアップしたり、よくわからないErrorで止まったり...
メモリの読み込みではコケてないようなので他に原因があるのですが、8049周りか他なのか、まだ絞り込めていません。
というか、どうやって調べていけばいいか、まだ思いついていないんですね...
↓は、比較的まともに動いたソフトです。

どうもロード直後に、ロード完了のコマンドを投げる前に、ゲームキーの調査のコマンドを投げられているらしく、これが悪さしているようです。
この部分を修正して、ついでにSDRAM周りに機能を追加しました。
SDRAMは、16ビット幅のものが搭載されているのですが、このうち8ビットしか使っていませんでした。
書き込みや読み出しでコケた場合にエラーを検出するように、上位8ビットにエラー検出用のバイトを設けました。
と言っても、元データとアドレス上位8ビット、アドレス下位8ビットをXOR したものを書き込んでいるだけですが。
ロードは出来るようになりましたが、大抵のソフトはどこか調子が悪いような動きをします。
オールBASICでも、平気で(?)ハングアップしたり、よくわからないErrorで止まったり...
メモリの読み込みではコケてないようなので他に原因があるのですが、8049周りか他なのか、まだ絞り込めていません。
というか、どうやって調べていけばいいか、まだ思いついていないんですね...
↓は、比較的まともに動いたソフトです。
2011年10月18日
8255と8049の設計(10)
CMT のリードを実装するのに、SDカードから読み込ませるのは結構大変で、ヘタすると何が何やらわからなくなりそう。
なので、内部にプログラムを書き込んだROMを持たせて、そこからリードするという風に、とりあえず実装してみました。
後に、このROMをSDカードのインタフェース部に置き換える感じです。
ROM からの待ち時間が少ないと、ロードの最初の部分が壊れるようで、かなり速度を落とさないとダメなようです。
(もしかしたら、他の原因かも)
短いプログラムならロードは出来たのですが、ちょっと長くなるとロードが終わると暴走します。
うーん、いろいろと引っ掛かるなぁ...
なので、内部にプログラムを書き込んだROMを持たせて、そこからリードするという風に、とりあえず実装してみました。
後に、このROMをSDカードのインタフェース部に置き換える感じです。
ROM からの待ち時間が少ないと、ロードの最初の部分が壊れるようで、かなり速度を落とさないとダメなようです。
(もしかしたら、他の原因かも)
短いプログラムならロードは出来たのですが、ちょっと長くなるとロードが終わると暴走します。
うーん、いろいろと引っ掛かるなぁ...
8255と8049の設計(9)
すぐ止まる原因は、やはり 8049 が問題でした。
>> 4)キーボードポーリング
>> 5)RxRDYポーリング
の時は、コマンドを待たせておく事にしたのですが、これがうまく行かない時があったようです。
シミュレーションで、ポーリングとコマンドが重なる時を検証すると、再現しました...
キーボードの問題も直したので、CMT周りと音源周り以外は実装が完了しました。
気になったので、CRTKILL(OUT&H93,2)をすると、こんな画面に。


実機での実行結果をあまり覚えていないんですが、bernie さん所の日記を探してみると、似たような写真が。
多分、よさそうかなぁ。
ただ、実装していろいろと触っていて、問題がいくつか見つかりました。
・突然暴走する
どうもこれは、SDRAM の読み出しでコケる場合があるようです。タイミングを変更してからは暴走していません。
・連続でOUT 命令を実行すると、おかしくなる。
10 OUT &H93,3:GOTO 10
とかいうプログラムを実行すると、ちょっとしてから、?UL Error が出る。とりあえず保留。
・PAINT 命令の動作がヘン
ちゃんと塗りつぶしてくれない事がある。これも保留。
先にCMT のLOAD を実装するつもりです。
が、またSDカードのアクセス関係なので、ちょっとグッタリです...
>> 4)キーボードポーリング
>> 5)RxRDYポーリング
の時は、コマンドを待たせておく事にしたのですが、これがうまく行かない時があったようです。
シミュレーションで、ポーリングとコマンドが重なる時を検証すると、再現しました...
キーボードの問題も直したので、CMT周りと音源周り以外は実装が完了しました。
気になったので、CRTKILL(OUT&H93,2)をすると、こんな画面に。
実機での実行結果をあまり覚えていないんですが、bernie さん所の日記を探してみると、似たような写真が。
多分、よさそうかなぁ。
ただ、実装していろいろと触っていて、問題がいくつか見つかりました。
・突然暴走する
どうもこれは、SDRAM の読み出しでコケる場合があるようです。タイミングを変更してからは暴走していません。
・連続でOUT 命令を実行すると、おかしくなる。
10 OUT &H93,3:GOTO 10
とかいうプログラムを実行すると、ちょっとしてから、?UL Error が出る。とりあえず保留。
・PAINT 命令の動作がヘン
ちゃんと塗りつぶしてくれない事がある。これも保留。
先にCMT のLOAD を実装するつもりです。
が、またSDカードのアクセス関係なので、ちょっとグッタリです...
2011年10月17日
8255と8049の設計(8)
キーボードは、PC-6001と同じキーマトリックスを作って実現しました。
キーマトリックスは、ハードウエアで実現してもいいんですが、使う時に面倒なのでPS/2 のキーボードを使えるようにしました。
ただし、日本語キーボード専用になります。
キーボードにないキーは、以下のようにしました。
かな :全角/半角
GRAPH :ALT
↓↑ :Page Up
STOP :End
とりあえず動きます。

...が、問題アリ。
・HOMEキー、Page Up キーなどの動きがおかしい
・すぐにハングアップする。
1つ目の問題は何となく分かっていて、PS/2 の拡張キーを押した時の動作が、こちらの意図と違うようです。
問題は2つ目で、8049 との連携がうまく行っていなく、ハングする所は決まって、106D〜1071 の間を無限ループします。
原因調査中...
キーマトリックスは、ハードウエアで実現してもいいんですが、使う時に面倒なのでPS/2 のキーボードを使えるようにしました。
ただし、日本語キーボード専用になります。
キーボードにないキーは、以下のようにしました。
かな :全角/半角
GRAPH :ALT
↓↑ :Page Up
STOP :End
とりあえず動きます。
...が、問題アリ。
・HOMEキー、Page Up キーなどの動きがおかしい
・すぐにハングアップする。
1つ目の問題は何となく分かっていて、PS/2 の拡張キーを押した時の動作が、こちらの意図と違うようです。
問題は2つ目で、8049 との連携がうまく行っていなく、ハングする所は決まって、106D〜1071 の間を無限ループします。
原因調査中...
2011年10月15日
8255と8049の設計(5)
2011年10月14日
8255と8049の設計(4)
8255に関しては、MODE2/MODE0 固定でとりあえずHDL化が完了しました。
8049 に関しては、8049 へ出力したデータの取り込みと、ゲーム用キー調査に関するレスポンスさえ作れば、とりあえずBASIC が起動する所まで行くはずです。
ダミーでとりあえず作ってみました。すると...暴走(−−;)
ロジアナで調べてみると、SDRAMからのデータがおかしい...
例の取り込みタイミング問題かと、いろいろ試してみてもダメ。
よく見てみると、データの出力に、取り込みのタイミングが間に合っていない。
100M でアクセスしているのを、4Mで読み出しているので、全然問題ないはずなのだが...
結局、デコーダの間違いでした(−−;
トップレベルでシミュレーションしてなかった箇所でした。やっぱりシミュレーションすべきですねぇ。
メモリ周りの問題は解決しましたが、まだ 8255 + 8049 は動いてくれません。
8049 に関しては、8049 へ出力したデータの取り込みと、ゲーム用キー調査に関するレスポンスさえ作れば、とりあえずBASIC が起動する所まで行くはずです。
ダミーでとりあえず作ってみました。すると...暴走(−−;)
ロジアナで調べてみると、SDRAMからのデータがおかしい...
例の取り込みタイミング問題かと、いろいろ試してみてもダメ。
よく見てみると、データの出力に、取り込みのタイミングが間に合っていない。
100M でアクセスしているのを、4Mで読み出しているので、全然問題ないはずなのだが...
結局、デコーダの間違いでした(−−;
トップレベルでシミュレーションしてなかった箇所でした。やっぱりシミュレーションすべきですねぇ。
メモリ周りの問題は解決しましたが、まだ 8255 + 8049 は動いてくれません。

