0

我正在尝试创建一个 Z80 偏移指针转换器,但是当我编译程序并对其进行测试时,输出变量为零。

它背后的数学是这样的:

  1. 获取您希望指向的偏移量。
  2. 取偏移量的最后四位数字,并切断其余数字。
  3. 如果偏移量超出 &H4000 - &H7FFF 范围,则必须按如下方式转换:(offset % &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

1

基本上,这将给出你想要的结果。

Dim FixedOffset As Integer = (DecOffset And &H3FFF) Or &H4000
于 2013-04-08T12:36:32.793 回答