色々と一気に更新しました。
昨晩リリースしたMZ-800について、スクロールレジスタを修正しました。
CP/Mなどで、スクロールした際に画面が乱れる問題が解決しています。
普通の機種だと、スクロールレジスタって画面の表示上だけの機能なのですが、
MZ-800だと、CPUから見たVRAMのアドレスにも反映するみたいでして。
どれだけスクロールしても、画面の表示位置とCPUから見たVRAMのアドレスは
変わらないようになっています。なんと面妖な。
PC/JXで、高解像モードをサポートしました。
$A0000-$AFFFFに割り当てられる専用VRAMと漢字ROMの切り替え方と、
高解像モード・標準モードの切り替え方の調査にちょっと手間取ってました。
X1turboの方は、Y.S.さんからご提供いただいたZ80DMAの修正の取り込みと、
HD46505の信号発生タイミングの高精度化が中心です。
青き狼と白き牝鹿が動くようになっています、多謝多謝。
HD46505の修正はPC/JXにも関係してくるものですが、総スキャンライン数を#defineで
定数として宣言しているため、画面解像度の変更によってライン数が変更されたときに、
信号の発生に問題が生じていました。
X1turboの方では無理やり誤魔化してましたが、今回JXでも同じ問題に直面したため、
この際一気に修正を図っています。
X1の方は、これで何か新しく動くようになったソフトがある訳でもないですが、
まあ自己満足ですね(苦笑)
(2011/5/20 0:50追記)
更にY.S.さんからご提供いただいたZ80DMAの修正を取り込んでいます。
お陰様で随分と色々なソフトが動くようになってきています。
CPUを回しながら転送する件は、i8237やuPD71071、8086/186/286やi386などへの
横展開も考慮して、もう少し一般化した形で取り込ませて頂きました。
ループを抜けるのは、DMAの転送モードがシングルモード(BYTEモード)のときのみで、
他のモードでは従来通り最後まで転送するようにしています。
本当は、8237のブロック・デマンド・カスケードの各モードの違いも考慮すべきですが、
その辺はまたその内にでも。
サウンドバッファの50msec対応も一緒にやってます。
ただ、2〜3フレーム内にバッファを更新する必要がありますので、流石に厳しいですね。