0

Z80 オフセット ポインター コンバーターを作成しようとしていますが、プログラムをコンパイルしてテストすると、出力変数がゼロになります。

その背後にある計算は次のようになります。

  1. 指し示すオフセットを取得します。
  2. オフセットの下 4 桁を取り、残りを切り捨てます。
  3. オフセットが &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

出力が何もないことが判明した場合、正確には何が問題になっているのでしょうか? 実行時に例外や警告は表示されません...

4

1 に答える 1