いろいろ調べているうちに分かったこともメモ。
VRAMアドレス 縦40x横30 1文字1ワード (1文字画面上部にはみ出る) 50004Fh 500ECFh +---------------------+ | | | | | | | | 〜 〜 〜 〜 | | | | | | | | | | +---------------------+ 500000h 500080h … 500E80h ※画面上部の見えない部分にもアドレスあり 文字コード ex.) CC 30 1バイト目が文字色、2バイト目が文字コード? 文字コードは一般的なASCIIコード+α 文字色 数値 パレット 色 C0 00 灰 C4 01 青 C8 02 赤 CC 03 緑 D0 04 紫 D4 05 水色 D8 06 黄色 DC 07 赤紫 E0 08 白黒 E4 09 黄黒 E8 0A 白黒? EC ? 赤黒 ※色は大体の感じ、他にも数値はありそう ガレッガ入力 1479 AM_RANGE(0x21c01c, 0x21c01d) AM_WRITE(toaplan2_coin_word_w) 1480 AM_RANGE(0x21c020, 0x21c021) AM_READ_PORT("IN1") 1481 AM_RANGE(0x21c024, 0x21c025) AM_READ_PORT("IN2") 1482 AM_RANGE(0x21c028, 0x21c029) AM_READ_PORT("SYS") 1483 AM_RANGE(0x21c02c, 0x21c02d) AM_READ_PORT("DSWA") 1484 AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB") 1485 AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR") 1486 AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r) 2P START 21C029h 40 ※1P STARTが20hでor値 1P Control 21C021h 読み出し部分 001722: 1039 0021 C021 move.b $21c021.l, D0 001728: 6100 001A bsr $1744 | 001744: 4A39 0010 CA13 tst.b $10ca13.l 00174A: 6700 FF46 beq $1692 00174E: 1200 move.b D0, D1 001750: 0240 00F0 andi.w #$f0, D0 001754: 0241 000F andi.w #$f, D1 001758: 803B 1004 or.b ($4,PC,D1.w), D0 00175C: 4E75 rts | 001692: 4E75 rts 色コード6bit +文字コード 10bit oo oo oo xx xx xx xx xx
で、そんなことを調べながらも改造プログラムをROMイメージに書き込んだら、なんと画面がバグだらけ。
バグバグ!バグバグ!
2時間ほど悩んだ挙句、バイナリエディタにプログラムを貼り付けた際に、インサートモードになっていたことが判明。なんだよそれ……
まあ、なんとかROMイメージになったのでROMに焼いて実機でテストです。
アッー!?
なんと文字化け&色化け。
なんということでしょう!なんということでしょう!
エミュ上では正常に動作するもののROMに焼いて基板に乗せるとこんなんなってしまいます。
同時に、2P STARTを押しているフラグがうまく書き込めていないのか、表示ON/OFF切り替えも「スタートボタン押している間だけ表示」と望んでいる動作と違う挙動を示します。
なんかうまくRAMに書き込めていないか、データが化けてる感じ……?
奇数アドレスにアクセスしてる……のは、1バイトずつ書込なら関係ないよね。
深夜までtwitterでのすけさんにアドバイスをもらいながらいろいろ試したものの、解決しませんでした。
ちょっと難しそうですが、もうちょっと実験してみましょう。