前回は総当りでやったが連分数を利用してみる. 前回は最初の Rational の使い方が悪かった. Rational の中に float をいれてはいけない. master = Rational(12288, 1000) dest = Rational(315, 88) divide_by = master / dest(45056/13125) となる. これを手…
lut を使う場合に 4bit x4 で無難に実装しているんだが 1 bit + 5 bit x3 の実装を試してみたが、これがかなり tricky にわりと早くメモリ消費もそこそこらしいというコードができた. lea table+0x80,a0 moveq #0x3e,d1 moveq #0,d0 ;output q add.w d2,d2 ;…
年末から痔です.
FPGA で音関連の回路を作ろうとすると master clock が I2S の都合で12.28800 MHz で音源ICが 3.579545 MHz という場合にどう対応するか苦慮する場合がよくある.12.28800 MHz の clock domain で 3.579545 MHz の device を動かす場合に分周して動かす方法が…
3月までにあったたくさんの病気に反省し、悪い姿勢になりがちだった椅子を変えたり、食事内容を変えつつ日々をすごすことで、慢性的な症状に対して接骨院や医者にもうこなくていと言われることが2つになった. ただし、予防としての通院は行くようにしている.
概要 bit rotation で CPU が1つのレジスタの幅を超えた場合、または 24 bit などの2の累乗の値ではない 8 の倍数では複数の bit rotation 命令を組み合わせて目的を達成することができる. 本説明ではすべて変数は符号なしの扱いでの計算とする. x64 の命令…
年末から年始 12月29日に発熱 → 1月1日に一旦治る → 1月3日に再発熱 → 1月4日(土曜日)に医者にいこうにも1月4日は輪番診療の対象ではなくどこも年始休みでやってなくて、唯一開院の場所にいった所、長蛇の列を見て断念.無駄にタクシーに乗って家に帰るだけと…
古いPCゲームソフトとMIDI ファイルの読み込み - narukoの開発メモ上記の続き.このプログラムはゲーム起動中に CPU core 1 つを使用率100%にしつづけてしまう. 原因は GDI を利用しており、Windows の API の PeekMessage() を利用した無限ループになってい…
以前ストリートファイター2の文字列を調べていたところ、SSF2 に 「よく ここまで たどりついたな。だが 今回は ロケテスト・バージョン。(以下略)」という文字列が残っていたので、Vampire Hunter - Darkstalkers' Revenge でも本で似たような文字列があっ…
nesdev にある Standard Read for 2 Controllers and Famicom のコードが最適でそのコードは rol 命令を利用している. ror; bcc とするにはループの外で org $C5F7 tax ldy #$81 sty $4016 dey sty $4016 sty <$6e,x lc604: lda $4016,x and #%11 cmp #1 ror …
Joycard系を認識しないソフトを日本向けライセンス品でみつけてしまった. 下記. 信長の野望・全国版 三國志 (光栄) 蒼き狼と白き牝鹿 ジンギスカン これらのソフトをみたら、 zeropage addressing をまったく利用していない! 拡張コントローラ認識のための修…
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円)で…
タイトルは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つ以外のパラメー…
前置き(長い) 現在開発中の機材の不具合を分析していたところ MCU ではなく PC 側のソフトがよくないと判断をした. 問題の機能を修正したところ、プログラム終了時に segmentation error が出るようになった. その理由は memory leak であり、malloc はした…
前置き(長い) 最近息抜きに Castlevania 3 をやっている. そこで気づいたのは縦スクロールのための空白(空黒?)領域が広いということ.この領域をなくすか考えてある程度プログラムを作った. この方針でも解決できるとは思うがプログラムが複雑になりすぎた*1…
database を改める ROM の hash や構成は MAME の hash/nes.xml を正規化して SQLite にいれて、再集計している. ただ nes.xml の中身は信憑性が低いものが散見されるのでそれの集計や傾向を追っていると時間を浪費してしまう.信憑性の低さを上げるには図書…
move.[bw] #0,dn clr.[bw] dn clr.l では moveq に置換するの対して move.[bw] では clr.[bw] を使う. moveq に変えてしまうと使用容量と実行速度が同じ上に bit 31:16 が 0 になってしまうのでよいことはない.話がそれるが clr 命令はレジスタのみに使う. c…
データ分離して逆アセンブルした状態で、プログラムから置換をするという試行. プログラム全体の流れをみることはないので正常動作としては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 で動か…
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 をいれて修正したこ…
ソフト開発としてつまっていることはないがスランプになってしまってコードが見たくなり別件が入ったことで停滞中... 作業量が少ない対応として Windows 98 時代のゲームソフトの修正をしてみた.BGM として MIDI (.mid) ファイルを利用するのだが、ファイル…