開発日記

DMA descriptor 用途によって分かれる descriptor 群をあらかじめ3通り用意しておいて、DMAC->BASEADDR だけを書き換えようという案. これを作るのに手間取った. シミュレータ上はそれとなくできたが、MCU で動かすと下記の問題が判明. DMAC->BASEADDR は DM…

開発日記

USB 受信 前回の通りで実装に成功. PCKSIZE を調整することで受信処理の効率化と安定化を確認. 受信側の汎用バッファはなくなったが、送信側の汎用バッファは0x200bytesも確保しているので RAM の 1/8 を浪費していることが判明. そのうち減らす. 0x80000 + …

開発日記

flash programming に成功. sector erase 0x10000 bytes, back switch 8 times 込みで 0x10000 bytes の転送で 16 秒かかっている. おそいし、USBの受信が安定していない. USB 受信 64 bytes を超えるPCからの送信はMCU 側の処理が多くなると、USB 受信パケ…

開発日記

近況 諸事情で休止期間が入っていますが、MCU からのファミカセ操作の続きです.今月にはいってからブートローダの作成、タイムアウトの実装、ROM dump が実装できました. ROM dump は DMA を利用するのでかなり早いです. 0x80000+0x40000 bytes の dump が 3…

開発日記

近況 先週ぐらいから MCU のソースに手を入れて専用ソフトで通信するプロトコルの策定とそれの C ソースの実装をしています. memory read, memory write に関してはそれでできています.flash memory programming になると、programming の空き時間があるので…

C のソースの変なかきかた

C++ のほうがテンプレート活用で変なかきかたできるんでしょうけど、私には C++ は難しくて使えません. タグを活用する タグは struct/enum/union につけられる名前で、変数や関数名と名前空間が別です. とはいえ struct だけが利用される傾向にあり、いつの…

約5年半ぶりにファミコンの技術情報サイトを更新しました

2016年の更新は大したものではないので実質7年半ぶりでしょうか. ドラクエ4の記事は書いてみたらおもしろくなかったのでそのうち消すと思います.今回は RAM の不定値とか hotswap (電源を入れたままカセットを交換する行為) について説明してます. RAM の不…

VRAM A10 と VRAM CS#

dumper/programmer においてあまり重要ではない扱いになっている VRAM A10 と VRAM CS# 端子について最近の考察をお伝えします. カートリッジ自動検出 既存の dumper soft ではカートリッジ自動検出は ROM data の hash (checksum) を算出してやっていますが…

mruby のビルドの手順

https://na6ko.hatenadiary.jp/entry/2021/06/10/213745 の続きです. 目的: require が必要なのでコンパイルが必要. 環境: msys2-mingw64 でのビルド. mattn/mruby-require fts.h が不要. msys2-mingw64 でビルドできる. git clone https://github.com/mruby…

ROM dumper からの ROM 以外へのアクセス

半年前から集中力が続かずあきらめ気味になっていたのですが、わりと新しい MCU とファミコンカセットをつなぐ機器の第1回試作が終わりました. 第5回ぐらいまで試作はある予定なので完成する自信が全くありません. ですので期待しないでください.今回はPCとM…

くだらない英語の例

wget (ソフト名)を使ってファイルをダウンロードしました I wget'ed a file. I wgot a file. くだけた英語で Email を出しましたは I emailed と名詞を動詞にすることがある. くだけた英語で wget を使いましたは emailed に従うと矛盾が発生する.米国人曰く…

訂正しました

command 0xf3 と 0xf5 bit 変更は XOR 演算ではなく AND 演算でした. 該当部は訂正補足お詫びを追加しました.

FF3 のメモリ破壊応用例

youtu.becheap さんのアイディアを元にウルで戦闘をしたあとサラひめとウルに戻ってお祝いされる内容を組んでみました. 今回自分のアイテム並べ総当りツールに手をいれてたんですが、重要ではないアイテムの数量は1固定だったので、cheap さんの案のようにア…

FF3 のメモリ破壊とスクリプトポインタ

cheap さんご提案の内容を確認したら、ポインタ上位8bitに 0x64 (ミスリルかぶと)をいれて普通の会話(会話後 0xa3f8) と組わせてスクリプトポインタ(cpu address $0072) を 0x64f8 に設定していました. そこから cpu address $6506-$650b にあるセーブデータ…

FF3 の Any % no credits warp 部門への問題提議

Final Fantasy III - speedrun.com 先日たまたまそのあたりを見ていたら重要なことに気づきました. この部門の名目は「なにをやってもいいがクレジットに(直接)飛ばない」というもので実際にはアイテム溢れなりアイテム変化のバグを駆使した10年前のピロ彦さ…

FF3 のスクリプトデータの解析

cheap さんの掲示板に投稿しようとおもったのですが、.pl ファイルが not found で投稿できませんでした. (直してくださったらこの件はそっちに書きます) [引数なし] 00-bf (未調査) FF2 と同じで町人などの移動や方向制御だと思う c0-cf プレイヤーキャラの…

ファミコンの FF3 の RTA 草案

アイテムの並びがわかってもピアノを弾くのが未だ現実的なのですが、いくつか調査しました. 結果は cheap さんが提案したピアノ演奏+かわのたての方法が有力だとわかりました. ピアノ演奏の原理 移動画面の CPU address $0072 (ポインタ)の参照先に data 0xd…

ファミコンの FF3 のメニューの改定の終わり

kazzo で flash cartridge へ program して動作確認をしました. kazzo... 自分で作ってなんですが10年も経てばボロは出るわけで使いづらいです. 描画途中に CPU address $2001 bit3:2 = 2'b01 にする 前回 PPU A12 がうまく動かず MMC3 の IRQ counter が想…

ファミコンの FF3 のメニューの描画に IRQ を当ててみた

疑似スクロール 疑似スクロールはアイテム欄が32個(=16行)あるのに対し1画面で16個(=8行)の表示をしています. よろしくないのは1つのnametableでスクロールしているようにみせているので、上下端でカーソルを動かすとアイテム欄の nametable をすべて描画し…

ファミコンの FF3 のメニューの描画を早くした

先日別の方が普通にプレイしている姿をみてて、スタートボタンを押してからメニューがでるまでに毎度1度秒以上かかるのが気になったので改修してみました.ROM の CRC32 は 0x57E220D0 のものです. 遅い原因 画面描画を止めずに vblank を待って限られた時間…

お仕事募集

自己紹介 筆者は個人事業主で、電子回路とそれに関わるファームウェア開発を主としております.2021年になってから半導体の供給不足が問題となり状況は毎月悪化していて回復の見込みがなく、ソフトウェア開発の仕事を募集いたします. 得意分野 6502, 68000, Z…

ファイナルファンタジー3のTASの詳細

FF3 のゲーム開始前 ルールとして許可されているなら address 0x00f9 へ data 0xdd を仕込むことができます. 簡単な調査で見つかったのは address 0x00f9 を 1P のキー入力として使えるのは(superがない)魂斗羅と F1 センセーションの2本でした.data 0xdd は…

FF2 の script を調べた

他の作業がスランプのためファミコンソフトの解析をしてごまかしてます... script data の解析 エンディング呼び出しだけ調べてましたが他のも調べました. data 0x00 から 0xbf (1 byte) キャラの移動と方向転換、あとは初期化ができるかもしれません. datab…

mruby のコンパイルがうまくいかない

楽しかった TAS は終わりで mruby の構築をはじめます. いままでは pacman -S mruby でとってこれるバイナリパッケージを使ってましたが、 require が使えないことが大変によろしくないのでコンパイルをすることにしました. 一連の流れ git clone https://gi…

FF2 の TAS を作った

先週土曜日に完成しました. https://www.nicovideo.jp/watch/sm38840650詳細はこっち. http://tasvideos.org/7136S.html今回の TAS を通じてわかったのは最適化作業はつまらなく Lua 言語がマジに作れば作るほど貧弱の2点です.前回ここにかいた 67 回の AB …

FF2 の皇帝呼び出しを調べたらさらに短縮できた

前回のイベント番号で CPU address $0072 の script (scenario) pointer へ設定される値は下記です. イベント番号@ pointer の table は CPU address $0d:$bfc0 にあり正規の値は 0 から 0x19 でそれを超えると MMC1 の bank 境界をまたぎます. ROM FF3 同様…

FF2 の皇帝呼び出しを調べた

原理説明 (簡素) 2人目がブリンクの本を武器として熟練度を上げたときに CPU address $62BA に data 0x0f (10 進数で 15) が代入される. CPU address $62BA は聖堂で復活するときに起きるイベント番号で 0x0f は皇帝が出てきて最終戦となる. イベント番号が…

パラレル 5V の flash memory の datasheet をみた

anago 相当の flash programmer を mruby で作ってみようとしました. anago で最近気になったことを直してみようと調べてみました. GUI でデバイスを動かすときにスレッドをまともに扱っていない → 適切な直し方は知っているが C++ でつくるのめんどい flash…

mruby - mpsse 経由で SPI Flash/ I2C EEPROM programmer を作るその2

mruby でエラーの行番号を出す方法を下記を参考にいれました. API ドキュメントは読んでないので本当にいいのか保証がありません. https://tyfkda.github.io/blog/2013/09/21/mruby-backtrace.htmlソースコードは整備ができましたので公開いたします. プロジ…

mruby - mpsse 経由で SPI Flash/ I2C EEPROM programmer を作るその1

ICE40 専用ではなく汎用の 8 pin memory programmer を作ることにしました. 24 系 I2C EEPROM と 25 系 SPI flash のピン配置 1つの socket で対応ということで下記にしました. socket SPI flash I2C EEPROM 1 AD4 8 +3.3V |1 CS# 8 Vcc |1 A0 8 Vcc 2 DO 7 …