ロジアナで確認しました。
結論ですが、いろいろと間違いが発見されました。
○mk2
★ページ切り替え(ポート0xb0)に設定した値は、垂直同期がH→Lのタイミングで反映される。
★PSGのIOA7には、垂直同期が出力されている。
1フレーム262ラインの内、3ラインが"L"、259ラインが"H"が出力されている。
○mk2SR
★ページ切り替え(ポート0xb0)に設定した値は、即時に反映される。
★OPNのIOA7には、帰線期間が出力されている(帰線期間は"H"、描画期間は"L")。
1フレーム262ラインの内、192ラインが"L"、70ラインが"H"(MODE2)
1フレーム262ラインの内、200ラインが"L"、62ラインが"H"(MODE5)
調査していませんが、66/66SRも、mk2/mk2SRと同等だと思います。
(カスタムLSIなどが同じなので)
特に、SRのOPNから読み出せるのが、垂直同期ではなく、帰線期間だったというのは、ちょっとびっくりです。
(確かにちゃんと調査してませんでしたが...)
以下、調査内容の詳細です。
こんなプログラムで調査してみました。
10 REM mode2/5,page4
20 FOR J=2 TO 4
30 SCREEN3,J,J:CLS:LINE(0,0)-(319,199),J,BF
40 NEXT
1000 GOSUB 9000
1010 EXEC &HDF00
9000 AD=&HDF00
9010 READA$:IF A$="**" THEN RETURN
9020 POKEAD,VAL("&H"+A$):AD=AD+1:GOTO 9010
10100 DATAf3,31,00,df,21,e8,03,cd,2a,df,3e,00,d3,91,3e,f0
10110 DATAd3,b0,3e,ff,d3,91,21,e8,03,cd,2a,df,3e,00,d3,91
10120 DATA3e,f6,d3,b0,3e,ff,d3,91,18,da,3e,78,3d,20,fd,2b
10130 DATA7c,b5,20,f6,c9
10140 DATA**
マシン語の内容は以下の通りです。
org $df00
di
ld sp,$df00
MAINLOOP;
ld hl,1000
call W_TIME
ld a,$00
out ($91),a ; プリンタポートへ出力(デバッグ用)
ld a,$f0 ; $c000〜を表示(MODE 1-4時)SCREEN,3
; $8000〜を表示(MODE 5時)SCREEN,2
out ($b0),a
ld a,$ff
out ($91),a ; プリンタポートへ出力(デバッグ用)
ld hl,1000
call W_TIME
ld a,$00
out ($91),a ; プリンタポートへ出力(デバッグ用)
ld a,$f6 ; $a000〜を表示(MODE 1-4時)SCREEN,4
; $4000〜を表示(MODE 5時)SCREEN,3
out ($b0),a
ld a,$ff
out ($91),a ; プリンタポートへ出力(デバッグ用)
jr MAINLOOP
;
; 時間待ち(大体 2ms × HL)
;
W_TIME:
.lp1: ld a,$78
.lp2: dec a
jr nz,.lp2
dec hl
ld a,h
or l
jr nz,.lp1
ret
プログラムは単純に違うページに違う色を付けて、ページを切り替えているだけのものです。
ロジアナで確認したものが以下の通りです。
信号は上から、
トリガ(プリンタポート)
PSG/OPNのIOA7(PSG/OPNから読み出せる値)
VSYNC(バッファ後、外部に出力されているもの)
HSYNC(バッファ後、外部に出力されているもの)
R(バッファ後、外部に出力されているもの)
G(バッファ後、外部に出力されているもの)
B(バッファ後、外部に出力されているもの)
H(バッファ後、外部に出力されているもの)
です。
mk2 MODE2
mk2 MODE5
mk2の場合、描画範囲では、MODE2/MODE5とも、すぐには画面が切り替えられずに、次のフレームで切り替わっています。
mk2SR MODE2
mk2SR MODE5
mk2SRの場合、描画範囲では、MODE2/MODE5とも、すぐに画面が切り替わっています。
さらに、IOA7が描画範囲では"L"になっているのが分かると思います。
さらに、VSYNCの前後で、画面を切り替えた時に、どこで反映されるかを確認しました。
mk2 MODE2 VSYNC後
mk2 MODE5 VSYNC後
VSYNCの後に画面切り替えを指示した場合、その次のフレームで画面が切り替わっています。
mk2 MODE2 VSYNC前
mk2 MODE5 VSYNC前
VSYNCの前に画面切り替えを指示した場合、VSYNCを跨いだ次のフレームで画面が切り替わっています。

