我正在尝试创建一个 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
输出结果一无所有的地方到底出了什么问题?我在运行时没有收到任何异常或警告...