flash への不揮発データ書き込みの高速化検討

W29C040 への書き込みは 0x100 bytes 単位であり、この転送がとても早いことにいまさら気づいた. 1 byte 単位への書き込みでも polling なしに 0x100 bytes 単位で書いたほうが早いのではないかといまさら気づいた. byte programming data の command 発行か…

米国と台湾の銀行の話

US Bank → Wise → 日本の銀行 PLAID の接続後、 自分の US Bank 口座 → 自分の Wise USD 残高へ送金できました. 手数料は 0.13 % (0.0013 倍) でした. この後 Wise で日本円に両替して(手数料$2ぐらい)、自分の日本の銀行口座へ日本円で送金(手数料200円)で…

Flash Cartridge Troubleshooting: Challenges and Solutions

タイトルはAIが決めた. 内容は開発日誌でローカルのテキストファイルからの抜粋. 04-30 基板 TxROM と Memory AM29F040B の組み合わせは終わったので、以前の別の flash cartridge を出して動作確認開始. 基板 VRC6B と Memory W49F002 と W29C040 をみて W4…

米国、台湾、日本の銀行手続き

Union Bank → US Bank (米国) UFJ 銀行の口座を持っているとなぜか米国の Union Bank の口座が作れるというやつで 2018年 ごろに作りました. 滞在時以外は休眠口座となっていたのですが、昨年と今年は日本円の価値が少なすぎて米ドルで決済するようにしてま…

開発日記

Disk System の data の続き. head が最外周に移動した直後に読み込みを開始したところ、予想通り data の byte の並びに対して数 bit ズレたデータを取得できた. 別のデータは data の初期値が 1 になることも確認した. 予想外なのはこの2つ以外のパラメー…

C での文字列領域の確保

前置き(長い) 現在開発中の機材の不具合を分析していたところ MCU ではなく PC 側のソフトがよくないと判断をした. 問題の機能を修正したところ、プログラム終了時に segmentation error が出るようになった. その理由は memory leak であり、malloc はした…

ファミコンのスクロールテクニックを確認した

前置き(長い) 最近息抜きに Castlevania 3 をやっている. そこで気づいたのは縦スクロールのための空白(空黒?)領域が広いということ.この領域をなくすか考えてある程度プログラムを作った. この方針でも解決できるとは思うがプログラムが複雑になりすぎた*1…

開発日記

database を改める ROM の hash や構成は MAME の hash/nes.xml を正規化して SQLite にいれて、再集計している. ただ nes.xml の中身は信憑性が低いものが散見されるのでそれの集計や傾向を追っていると時間を浪費してしまう.信憑性の低さを上げるには図書…

68000 アセンブラテクニックその2

move.[bw] #0,dn clr.[bw] dn clr.l では moveq に置換するの対して move.[bw] では clr.[bw] を使う. moveq に変えてしまうと使用容量と実行速度が同じ上に bit 31:16 が 0 になってしまうのでよいことはない.話がそれるが clr 命令はレジスタのみに使う. c…

68000 アセンブラテクニックその1

データ分離して逆アセンブルした状態で、プログラムから置換をするという試行. プログラム全体の流れをみることはないので正常動作としては100%同じ動作になることを優先. clr.l dn moveq #0,dn move.l #imm,dn imm は -0x80 から 0x7f に限る. moveq #imm,d…

憂慮

長年 web 検索に google を使っていたがおせっかいな機能(映画のネタバレのような知らないふりをして楽しむことに事実を目立つ位置に堂々と書いてきた)とUIがおかしくなってきたことが原因で別の検索エンジンを検討している.google が直接悪くはないが、プロ…

開発日記

DMA 転送途中への USB での送信 8月中に実装した機能で録音と disksystem は相手のデバイスを動かしながらデータを取得し、バッファが半分溜まったら USB で送信するというリングバッファ状態を実装していた. ここまで下地を作ってしまったので ROM dump で…

開発日記

Disksystem の対応 この手の ROM dumper で diskimage を dump できるのかをようやく挑戦した. カードエッジの CPU(2A03) IRQ# を MCU の外部割り込み端子とをこの目的のために接続してありようやく動作確認した. 結果は数日で diskimage を dump できるまで…

開発日記

複数の似た処理の統合 かなり手間取ったが統合できた. 入力命令の解釈が不適切で DMA 2ch で動かせる内容を DMA 4ch で動いていて結果としてはあっているという問題が直せた. data を increment-pattern でいれると MCU が止まってしまうバグがあったが、統…

開発日記

前振り(ながい) 昨年8月まで設計は 74595 を 3 つにして、 CPU PHI2, CPU ROMSEL といった制御線は GPIO で制御していたが、 flash programming の性能がよくない(具体的にはソースが複雑になりすぎる上に遅い)ので制御線も 74595 を 1つ追加して DMA で動か…

Cにおけるラベル直後の変数宣言とswitch

void hoge0(int v) { //{} がない switch, 分岐が1つだけで使い物にならない switch(v) label: break; //{} がないので label は有効 goto label; } void hoge1(int v) { //{} がある switch switch(v){ case 1: break; label: break; } //label: は switch{…

開発日記

カードエッジの Sound Out 端子から MCU に配線し ADC を使う. これによって燃えプロ系のボイスをアナログ経路で録音することに成功. *1 録音手法 TCx->EVSYS->ADC, ADC->DMA->EVSYS をつなぐ. TC から ADC はタイマの OVERFLOW イベントを ADC につなぐ. AD…

開発日記

休止期間も含めて3か月もまともに動作しなかった LZ93D50 とその周辺の対応の大半がようやく終わった. variant が2つあってそれはまだ対応してない. 問題その1/未完: write cycle で MCU が死ぬ CPU_RW の配線が不適切だったので OR gate をいれて修正したこ…

古いPCゲームソフトとMIDI ファイルの読み込み

ソフト開発としてつまっていることはないがスランプになってしまってコードが見たくなり別件が入ったことで停滞中... 作業量が少ない対応として Windows 98 時代のゲームソフトの修正をしてみた.BGM として MIDI (.mid) ファイルを利用するのだが、ファイル…

開発日記

現在は協力者にファミコンソフトを大量に借りて、 dump 機能の動作確認をしている. 意外とやることがおおく flash programming の機能修正ができていない.設計初期から構想があった nametable control register によるカートリッジハードの検出を実装した. …

開発日記

MCU からの送信が不安定になる問題を解決して安定した programming を確認できた. 長かった... 細かい部分で直すところはたくさんあるが、基礎部分の構築ができたことがとてもうれしい.送信の不安定は前回の通りでここから改善に苦労した. bootloader 部に送…

開発日記

前回書いたシミュレータと本物のソースコードの統合はほぼ完了. 約2週間前に programming も片側の領域ずつ動かすのは安定動作を確認. 疑似並列 programming は対策をいれてはいるが安定動作していない. 最初の疑似並列動作の波形を確認してから、 WBC (野球…

開発日記

SWD 切り替えの回路に不具合があったものの放置していたのをいまさら対応. 原因はICの単なるハンダづけの不良.MCU 用の build で text mode で DMA のあとに文字を打つと1文字無視されることがあるバグの原因調査. 原因はおそらく2つ. 1つ目が5Vの電源投入後…

開発日記

数日前にシミュレータ上でのテストは通った. 性能とメモリ使用量は課題はあるものの MCU 用にコンパイルして調整することになった.久しぶりとなる MCU 用のコンパイルでは意外なことに 0x1000 bytes だけの RAM は余裕があり、0x6000 bytes の ROM の使用率…

開発日記

programming の設計はだいたい完成したと2,3日前に思った. その後少し足りない機能を追加して性能を改善した. 昨夜から今夜にかけてはテストをしやすくするためにソースを整理したときに問題が発生した.カートリッジがうまくささってないときのエラー判断が…

開発日記

前回の DMA descriptor の構成を基礎に programming の task 切り替えを実装途中. ソースコードは大して長くないのに考えることが多すぎて非常に疲れる. 2022年8月のコードはごっそり削除. ソフトのコードでここまで密度が高いのはあまりなくて verilog かい…

開発日記

今回の並列 programming は下記の順番(上から下)で bus cycle を DMA で一度に連続で動かす. 通常 |page programming r a d l c|l c c $5555 $aa 1 4| 1 $103 c $2aaa $55 1 /| 1 / c $5555 $90 1 /| 1 / c d+0 ww 1 /|$100 / p $5555 $aa 1 4| 1 $103 p $2a…

開発日記

2022-09-19 の続きです. 4個目の 74595 を追加する回路は10月の時点で完成*1、その後3か月間諸事情により停止、思い出すのに2週間というところで新しいハードウェアの対応が必要最小限でできたのが先週半ばです.今回の対応で 4 spi cycles = 1 memory cycle …

解析記事を追加

12月下旬から開発作業を再開しているのですがスランプのため以前調査した麻雀(HVC-MJ)の裏技を記事にしました. 意外だったのは Disk の麻雀(FMC-MJA)がどのエミュレータでもちゃんと動くことでした. seesaawiki.jp

開発日記 (UNROM 互換設計)

リセットボタンを押さずリセット相当の命令(jmp ($FFFC))を実行させる回路を設計途中. これはおそらくレジスタが5個いるので先述の SLG46826 で組んでみることにした. リセットについては後日記載する予定. (もう1個書きたいネタがあるが私の余裕が足りてな…