mz-700
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mz-700 [2023/12/06 12:48] – araki | mz-700 [2023/12/07 07:07] (現在) – [概要] araki | ||
---|---|---|---|
行 2: | 行 2: | ||
===== 概要 ===== | ===== 概要 ===== | ||
+ | |||
+ | {{: | ||
===== MZ-800エミュレータでMZ-700のIPLを使う ===== | ===== MZ-800エミュレータでMZ-700のIPLを使う ===== | ||
行 113: | 行 115: | ||
=== 画面モードの設定と画面クリア === | === 画面モードの設定と画面クリア === | ||
+ | MZ-700のROM内にも画面クリアーのコードがあるが、アトリビュートだけを0x71(文字色白、背景青)にするだけで、文字データ自体をクリアしない。 | ||
+ | |||
+ | MZ-700の場合はリセットでおそらくテキストVRAMがクリアされるのだが、MZ-800ではそうではないため、VRAMをクリアするコードを追加してやる必要がある。 | ||
+ | これを行わないとリセット直後に謎の模様が画面に表示されることになる。 | ||
=== 8255/ | === 8255/ | ||
+ | MZ-700と異なり、MZ-800は8253のポート0の出力がスピーカーに直結せずに、代わりに SN76489ANの Audio INにつながっている。 | ||
+ | また、SN76489ANにクロックの供給も行っている。 | ||
+ | このクロックの供給の制御は 8255が行っている。 | ||
+ | このため、この関係に従って初期化を行わないと、謎のホワイトノイズが出っぱなしになり、8253にコマンドを送っても音を奏でることがなくなってしまう。 | ||
+ | MZ-700の8255の初期化は、8253からSN76489ANへのクロック供給を有効化しないため、これに代わる処理を行い、逆にMZ-700側の初期化ルーチンをバイパスしてやる必要がある。 | ||
+ | |||
+ | 幸い、1Z-009Aの8253/ | ||
+ | |||
+ | ==== 初期化コード ==== | ||
+ | |||
+ | 上記の処理を以下のように実装した。 | ||
+ | |||
+ | < | ||
+ | ; | ||
+ | ; MZ-800 to MZ-700 | ||
+ | ; | ||
+ | .z80 | ||
+ | org | ||
+ | mz700 | ||
+ | stack | ||
+ | cgrom | ||
+ | pcgram | ||
+ | mset53 | ||
+ | |||
+ | entry: | ||
+ | di | ||
+ | im 1 ; set interrupt mode to 1 | ||
+ | |||
+ | ld a,8 ; set MZ-700 mode | ||
+ | out | ||
+ | ld a,1 ; set CRTC to MZ-700 mode | ||
+ | out | ||
+ | out | ||
+ | out | ||
+ | ld sp, | ||
+ | ; init 8255 | ||
+ | ld a,08ah | ||
+ | ld (0e003h), | ||
+ | ld a,1 | ||
+ | ld (0e003h), | ||
+ | ld a,5 | ||
+ | ld (0e003h), | ||
+ | ; init 8253 | ||
+ | ld de,0 | ||
+ | call mset53 | ||
+ | ; init PIO | ||
+ | ld bc,04fch | ||
+ | ld hl,piodat | ||
+ | otir | ||
+ | ld bc,04fdh | ||
+ | otir | ||
+ | ; init SIO | ||
+ | ld a,1 | ||
+ | out | ||
+ | xor a | ||
+ | out | ||
+ | ; init PSG (SN76489AN) | ||
+ | ld b,4 | ||
+ | ld a,09fh | ||
+ | psgset: | ||
+ | out | ||
+ | add | ||
+ | djnz psgset | ||
+ | ; init screen | ||
+ | ld hl,0d800h | ||
+ | ld de,0d000h | ||
+ | ld bc,0400h | ||
+ | cls_loop: | ||
+ | ld (hl), | ||
+ | inc hl | ||
+ | xor a | ||
+ | ld (de), | ||
+ | inc de | ||
+ | |||
+ | dec bc | ||
+ | ld a,b | ||
+ | or c | ||
+ | jr nz,cls_loop | ||
+ | |||
+ | ; copy CGROM to PCG | ||
+ | in a,(0e0h) | ||
+ | ld de,pcgram | ||
+ | ld hl,cgrom | ||
+ | ld bc,1000h | ||
+ | ldir | ||
+ | in a,(0e1h) | ||
+ | |||
+ | jp mz700 | ||
+ | |||
+ | org | ||
+ | piodat | ||
+ | |||
+ | end | ||
+ | </ | ||
mz-700.1701866922.txt.gz · 最終更新: 2023/12/06 12:48 by araki