Skip to content

luna_sio_cr0

moveccr edited this page Sep 20, 2021 · 2 revisions

LUNA の SIO (uPD7201) の調査メモ

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..||..*