2009-01-01から1年間の記事一覧

文書書きと英語しゃべり

プログラムに関しては落ち着きはじめたので公開用の技術文書とか wiki 用の下書きを書いてる。kazzo プロジェクト自体に割く時間を減らして FPGA の方にとりかかりたいので、その準備といったところ。V-USB のライセンスの関係とか、興味を持つ強力な開発者…

todo

dump mode の処理を flash mode にフィードバックしたり、おもしろ変数名、タグ名を修正。 H/V の自動判別 disk は改善しなかったのであきらめた。理由は分からん。

dump mode

dump length の指定 スクリプトが強力になったのでやりたくてもやれなかったことができた。たとえば MMC5 だと管理できる ROM は 8M(16M??)/8M なんだけど大半のソフトが 2M/2M。全ての管理領域を読み込むのは時間の無駄なので、デフォルトを 2M/2M にしてそ…

時間を有効に使おう

エラーチェックするためにスクリプトを 2pass 方式にした。のはいいんだが、ちゃんと動かなくて問題を見つけるまでに2h消費。script 内部で userpointer にするためにポインタの cast をせなあかん場所があって、そこがポインタのポインタになっていた。cast…

dump mode 実装できた

ものの4時間ぐらいで書いたコードでまともに動いてしまった。細かいエラーチェック入れたら終わりじゃん。いまだから書くけど去年の時点で lua とか squirrel を知らなかったんだよね。それをしっていたらどれくらい時間を節約できたかとか、スクリプトの可…

動作確認ついで

flash memory の動作確認ばっかやってるんだけど、書き込むデータはなんでもよい。その中でついつい遊んでしまうのがロックマンシリーズ。いろんなハード(UNROM, SGROM, TLROM, TGROM) にあるし、どれを遊んでもそこそこおもしろい。筆者は3が一番お気に入り…

時間計測をしてはいけない

経過時間が気になって気になって、ルーチンの最適化に心を奪われる。ルーチンの最適化なんてものはソースが読みづらくなるだけで、他の生産行為を妨げるからである。だから、えーと、ちょっと無駄な処理を発見したので似たような処理を追加して昨日の条件で…

書き込み時間

AM29F040B で 0x20000 byte のデータ書き込み。erase 時間も含む。 単体: 共に21秒 2つ同時: 29秒 さすがに2倍とはいかなかったが 1.4 倍のスピードアップは結構でかい。ただ AM29F040B は他のデバイスと比べて、write の待ち時間が長い(データを送る余裕が…

progress バーもどきをつけた

実行中は数字と #(1つ5%) が増えていく感じ。エスケープシーケンスを使ったんで、 rxvt とか cygwin のシェル経由だと動く。 cmd.exe はだめなのでどうしたものか、nethack のソースを軽く見てみた。なんとかなると思うけど、config で設定を変えないとだめ…

flash うんぬん

erase request が利かない件 デバッグクライアントが erase の古い仕様だった。消えるわけない。直したら成功率 100% になった。 コマンドアドレス付近で書き込みが停まる件 flash write するときの波形を見直したら、バス衝突してた。直したら成功率 100% …

UOROM に迫れた

UOROM が届いたので、実験した UNROM 通りに HC161 の制御信号をつないだところから。 LD = PHI2 | R/W read ok program ok 立ち上がらねえええええ! 実験のやり直しから。なんで動くんだ、実験した HC32 がおもしろなのか。別のHC32 つないだら動かないので…

AM29F040B で書き込みが安定しない件

flash memory が erase command を受け付けない。erase を行う手段は 2 つあって、kazzo で erase command を発行する方法と、デバッグクライアントから 1write ずつ計6回送って erase command を発行する。通常は前者で、試しに使ってみたカセットで動かな…

やること

anago, flash 書き込み専用ソフト 書き込み状態をステータスバーっぽいやつにする あとはやることないような disk anago を作ってる過程でバス制御周りでバグがなんこかあったので、seek が停まるのがなおってるといいな それでもだめならあきらめるかなぁ k…

UNROM にも迫る

UNROM へ flash 書き込みができないのは、バンク切り替えが暴発してしまうわけなので対策を考えてみた。UNROM についてる 74xx32 (HC or LS. どっちでもよい) の OR ゲートが1個余ってるので下記の変更を行う。 変更前 /LOAD = CPU R/W 変更後 /LOAD = CPU R…

MMC6 に迫る

HKROM/MMC6 採用ソフトの Star Tropics を TKROM/MMC3 にいれてみたら、タイトル画面は立ち上がったものの、曲もならないしそのうち停まった。次回、HKROM に TKROM ソフトをいれてみたらどうなるか!? をやりたいが、MMC6 って Star Tropics シリーズだけだ…

C# に移行できなかった

squirrel を C# から動かすには dll でコンパイルかけて、それのラッパを作る必要がわかった。それだけで工数かかるってのに、libusb 関連もあるので面倒すぎて C# は却下。正直なところ継承は欲しいんだ。そうすると C++ なんだが、アドレス保護は C とかわ…

product id, device id

flash memory というか、ROM にも id を得る方法があるので、現行は手動設定しているものを自動で設定できないか試してみた。 id 取得手順が似ているがばらばら 取得アドレスがアドレスバス全部のやつがある 実際に動かしてみたら安定しなかった というわけ…

squirrel を導入した

API がわりと細かいので、ラッピング関数を作る必要が出てきてソースが増えた。あとは、文書を読んでごりごりとコーディング。ここまではよい。コルーチンの実装の wakeup 直後に unknown error で squirrel の vm が落ちる。スタックの制御が悪いのかとか悩…

並行書き込み

コルーチンがないと実装できなかったので、日本語文書が多い lua を選択。あとは unagi のソースを使いまわす。lua の使い方とか host 側の制御プログラムを作るのにちょっと手間取ったが、AVR 側との通信はわりと素直に動いてくれた。c から lua を呼んで、…

flash memory

MMC3, VRC6, VRC7 あたりは安定しているんだが、MMC5, VRC4 がだめ。 MMC5 erase command を打ち込むと erase 途中のデータは規則的に変化したものがでてくるが、これが8割ぐらいの確率でとれない。なので erase 完了のタイミングがわからずに、erase 途中に…

flash memory その2

Charcter ROM 領域の W29C040 の書き込みが安定しない 0x100 byte 書いた後に比較して、一致しなかったら書き込みし直す実装をいれたら大丈夫! Program ROM 領域はそんなんなかったんだけどなぁ... AM29F040B の erase がうまくいかない erase 中のデータ出…

flash memory

unagi に相当な手を入れて、Program ROM 領域の書き込みを確認。mmc5 だけうまくいってないけど、根が深そうなので後回し。Charcter ROM 領域も同様に実装したはずなのに、書き込みが実装できず。問題点はわかってるのだが、修正点が見つからん。phi2 関連で…

ほそく

ディスクに関しては詰まってるのでだめになるかも!

disk 進行状況

DRAM access は phi2 を定期的に更新するようにしたが、改善せず。もしかして DRAM enable flag でもあるのかもしれない。 disk が 1 seek でとまる原因は、motor を動かしてから $4032.bit1 == 0 になる直後。 head が外周→内周になった直後に停まるのでそ…

disk 進行状況

motor が動かなかったり、停まらなかったりする理由は write タイミングで wait をはさまないといけないため。 motor の制御は 1seek で停まるか、動き続けるか(強制的に停められる)のどっちかなんだが、よくわからず。 DRQ の発生は確認しているが 20 回程…

kazzo (試作品)が届いた

面倒くさい配線作業をばくてんさんにやっていただきました。ありがとう。Famicom で 14 + 13 + 8 のバスラインがあって面倒。 verilog でやってるのは 23 + 16 が大量にあるやつだから手作業でやったら狂気の沙汰というやつ。 read 現状のシーケンスは下記の…

verilog を書いてみた

ruby の言語仕様が HDL から取られたことに気づいた。 複数分岐 ruby case nantara when 0 iyan = 4 when 5 iyan = uhun else ahan = 4 end verilog case nantara 0: iyan = 4; 5: iyan = uhun; default: ahan = 5; endcase数値表現 ruby 0b1010_0101 0xffff…

とりあえず開発ソフトを触ってみる

いろいろな下調べから Altera の Cyclone II にすることにした。Quartus II をインストールして 1chip MSX のソースをコンパイルしたり、 opencores.org にあった 68000 コアをコンパイルしてみた。ハードウェア記述言語のソースってこーなってるのかと感動…

プロジェクトの説明 - (名称未定)

FPGA/CPLD で古いハードを作ってみようってやつ。MSX とかパックマン基板とかが有名。具体的なハードは現段階では上げないが、1980年台後半にメジャーになった 68000 と Z80 の構成のやつ。きっかけは入手困難な部品が多い箇所は 74IC が大量に組まれている…

プロジェクトの説明 - kazzo

AVR を利用して USB と FC 60pin edge connector を接続して、read 及び write を行うハードウェア。既存のハードウェアは read することに重みを置いているのに対して、 write と IRQ の活用を強化している。 write bank 切り替えと PPU 領域のメモリを RAM…