Z80 オフセット ポインター コンバーターを作成しようとしていますが、プログラムをコンパイルしてテストすると、出力変数がゼロになります。
その背後にある計算は次のようになります。
- 指し示すオフセットを取得します。
- オフセットの下 4 桁を取り、残りを切り捨てます。
- オフセットが &H4000 - &H7FFF の範囲外にある場合は、(オフセット % &H4000) + &H4000 のように変換する必要があります。言い換えると:
- オフセットが &H0000 から &H3FFF の場合は、オフセットに &H4000 を追加します。
- オフセットが &H4000 から &H7FFF までの場合、オフセットに対して何もしないでください。
- オフセットが &H8000 から &HBFFF までの場合、オフセットから &H4000 を引きます。
- オフセットが &HC000 ~ &HFFFF の場合、オフセットから &H8000 を引きます。
変換ボタンのクリック時に呼び出されるイベントのコードは次のようになります。
Private Sub ConvertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConvertButton.Click
If GetOffsetRadioButton.Checked Then
If OffsetTextBox.TextLength > 0 Then
CoreActions.OffsetToPointer()
PointerTextBox.Text = CoreActions.NewOffset
PointerBankTextBox.Text = CoreActions.NewBank
End If
End If
End Sub
また、CoreActions モジュールの変換の背後にあるコードは次のとおりです。
Module CoreActions
Friend HexOffset As String = CoreForm.OffsetTextBox.Text
Friend PointerOffset As UInteger
Friend PointerBank As UInteger
Friend NewBank As String
Friend NewOffset As String
Friend Sub OffsetToPointer()
Dim DecOffset As Integer = Val("&H" & HexOffset)
PointerBank = DecOffset Mod 16384 ' 16384 = &H4000
PointerOffset = DecOffset Mod 65536 ' 65536 = &H10000
NewBank = Convert.ToString(PointerBank, 16)
NewOffset = Convert.ToString(PointerOffset, 16)
End Sub
End Module
出力が何もないことが判明した場合、正確には何が問題になっているのでしょうか? 実行時に例外や警告は表示されません...