開発日記

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個書きたいネタがあるが私の余裕が足りてな…

開発日記

PLD を試した 最初は SLG46620 で内部回路を組んでみた. この場合は特に問題なく組めたのだが、 Programming の手段が専用の Programmer が必要で、基板につけたMCUから programming できないことが判明. その programmer も入手できないので詰んだ.つぎによ…

開発日記

回路の改訂案 前回の回路までは address bus と data bus をシフトレジスタの 74595 で制御していたのですが、PHI2, ROMSEL#, RD#, WR# といった memory strobe の生成は MCU の GPIO (ソフトウェアで操作)とタイマ出力を 74139 と 7404 で生成していました.…

開発日記

DMA descriptor 前回の下記の記述について. ソフトが生成した descriptor は DMAC によって更新されてしまうこれは DMA の最後のサイクルに 2 度か 3 度同じ出力をするために、同じ descriptor を流用したところで想定とは違う動作をしていたために DMAC に…

開発日記

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