luna_sio_cr0
moveccr edited this page Sep 20, 2021
·
2 revisions
SIO の CR0 において、コマンド(Bit5-3)とレジスタポインタ(Bit2-0)を 同時にセットしたらどうなるかについて調べた。
-
Channel Reset コマンドと同時にレジスタポインタをセットした場合、 Channel Reset が実行されてレジスタポインタは 0 になる。 (資料の通り)
-
Error Reset コマンドと同時にレジスタポインタをセットした場合、 Error Reset が実行されて、そののちレジスタポインタは指定した値になる。
その他のコマンドについては未調査だがおそらく Error Reset コマンドと 同じ挙動をすると推定される。
調査はシリアル経由で ROM モニタに接続して行った。
前半では、CR2B に AA を書いておき、Channel Reset と同時に SR2B を選択して AA が読めないことを確認している。CR2B の内容が SR2B にそのまま読めることを 利用している。
後半では、wait for input のところで本体キーボードをガーッと入力して SR1B Bit5 Rx overrun Error を起こす。その後 Error Reset の発行と同時に SR1 を選択すると、クリア後の SR1 の値が読み込めていることがわかる。
durian_n: util/autoserial (autoserial) % ./autoserial sio-reset.txt #channel B reset 51000006;,18 >51000006 51000006: 6C 6C 0D 0D 7C 7C 0E 0E *ll..||..* #channel B CR2=AA >51000006;,02 >51000006;,AA >51000006;,02 >51000006 51000006: AA 6C 0D 0D 7C 7C 0E 0E *.l..||..* #channel B reset + select SR2 >51000006;,1a >51000006 51000006: 6C 6C 0D 0D 7C 7C 0E 0E *ll..||..* #channel B ErrorReset + select SR2 >51000006;,32 >51000006 51000006: AA 6C 0D 0D 7C 7C 0E 0E *.l..||..* #channel B Init >51000006;,01 >51000006;,00 >51000006;,04 >51000006;,44 >51000006;,03 >51000006;,c1 #channel B SR1 >51000006;,01 >51000006 51000006: 03 6D 0D 0D 7C 7C 14 94 *.m..||..* #wait for key input #channel B SR1 >51000006;,01 >51000006 51000006: 23 6D 0D 0D 7C 7C 14 94 *#m..||..* #channel B ErrorReset + select SR1 >51000006;,31 >51000006 51000006: 03 6D 0D 0D 7C 7C 14 94 *.m..||..*