【发布时间】:2013-04-07 21:22:09
【问题描述】:
我正在尝试创建一个 Z80 偏移指针转换器,但是当我编译程序并对其进行测试时,输出变量为零。
它背后的数学是这样的:
- 获取您希望指向的偏移量。
- 取偏移量的最后四位数字,并剪掉其余数字。
- 如果偏移量超出 &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