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

ファミコンの 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 …

アーケード用ストリートファイターIIの日本語文字列

https://dev.upergrafx.com/sf2message/ 気になったので ROM image から抜き出しました. いくつか仕様をかきます. 位置、色、改行の制御は抜きました. 改行=文字列の終端です. ----xxxx----, #x はわたしが独自にいれました. 濁音/半濁音記号とかな文字は分…

ICE40 の spi programmer と jtag debugger その4

d2xx と libftdi1 の共有 d2xx のほう. static int x_ft_write(void *tt, uint8_t *data, int length) { struct d2xx *t = tt; DWORD rc; FT_STATUS s = FT_Write(t->h, data, length, &rc); assert(s == FT_OK); return rc; } static int x_ft_read(void *t…

ICE40 の spi programmer と jtag debugger その3

Radiant Programmer の処理速度がとても遅い理由 実際に動くまでに約10秒かかる理由 FTDI 提供の libmpsse を自分でプログラムを書いてみたら、libmpsee の関数を呼ぶだけで3秒もかかった. それらを3つぐらい呼んでいることが原因かもしれない.FT_SetLatency…

mantisbt のID が 7 桁で多すぎる

core/bug_api.php: 2180 function bug_format_id( $p_bug_id ) { #$t_padding = config_get( 'display_bug_padding' ); $t_padding = 3; $t_string = sprintf( '%0' . (int)$t_padding . 'd', $p_bug_id ); return event_signal( 'EVENT_DISPLAY_BUG_ID', $t…

ICE40 の spi programmer と jtag debugger その2

昨日書いた回路で SS が双方向で共有信号でないので tristate buffer は経由せず AD4 = SS 直結としました. その回路を組んだところちゃんと動きませんでした.理由は Radiant Programmer が出す波形が CRESET_B を L レベルのまま FT232H から SPI を操作し…

ICE40 の spi programmer と jtag debugger その1

UPduino を昨年少し触っていてある程度使い勝手がわかったのですべて自分で設計した基板を動かしはじめました. いまのところは programming の部分で停滞しているのでその先の動作にはまだ至りません. FT232H と ADbus UPduino では FT232H を利用していまし…

SAMD21 で各種ソフトを動かしてみたが性能不足で評価終了

前回は外部デバイスに対してでしたが内部の話です. Wavpack Tiny Decoder (CPUの性能不足) tiny decoder は Makefile を調整して ARM 用にしたぐらいですが、リンクも問題なく、動かすことができました.ソースツリーに含まれている ARM 用のアセンブラソース…

SAMD21 のドライバを書いてみる

ASF (メーカー提供のライブラリ)なしでやってます. I2S (断念) master clock を入力もしくは内部の GCLK を利用し SCK (BCLK), FS (LRCK) を出すのはそんなに難しくありません. そこから data を出すのにつまってしまい、適切な解決方法が不明で断念となりま…

CD image を可逆/非可逆圧縮して保存する

前回 libFLAC を組み込めるか検討しましたが大変そうなのでやめました. そのあと... とても長い間やる気をなくしてしまいました. WavPack を利用する 別途同目的の規格を探していたところ、 WavPack のダウンロードページに https://www.wavpack.com/downloa…

webブラウザの top へ戻るボタンを消すまどろこっしい手順

ブラウザの右下にでてくる top へ戻るボタンは PC で見るときには home キーを押せば代用できるので邪魔という理由でサンプルをいれたり都度消したりしてたが全部消すには程遠いのでスクリプトで網羅生成することにした. 簡単な解析 いまでの user style she…