【问题标题】:Pointer converter returning incorrect values指针转换器返回不正确的值
【发布时间】:2013-04-07 21:22:09
【问题描述】:

我正在尝试创建一个 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

输出结果什么都没有,到底出了什么问题?我在运行时没有收到任何异常或警告...

【问题讨论】:

  • 你要做的是按位运算和位移,对吧?
  • PointerOffset 是干什么用的?在我看来,您只想使用PointerBank 并添加 4000h。如果你真的想要PointerOffset,那么你可能想除以 4000h,因为我认为你的模数没有任何效果。您还可以以与正常约定相反的方式命名这两件事。

标签: vb.net pointers hex converter z80


【解决方案1】:

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

Dim FixedOffset As Integer = (DecOffset And &H3FFF) Or &H4000

【讨论】:

    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多