Я пытаюсь создать конвертер смещения Z80, но когда я скомпилирую программу и протестирую ее, выходные переменные выходят как ноль.Преобразователь указателя, возвращающий неверные значения
Математика за ней идет как это:
- Возьмите смещение, которое вы хотите указать.
- Возьмите последние четыре цифры смещения и отрежьте остальные.
- Если смещение находится вне диапазона & 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
Что именно происходит, когда выходы выходят как ничто? Я не получаю никаких исключений или предупреждений во время выполнения ...
Что вы хотите сделать, это побитовая операция и смещение бит, правильно? – Fredou
да, в основном. – AlexTheRose
Что такое 'PointerOffset'? Мне кажется, что вы просто хотите взять «PointerBank» и добавить 4000h. Если вы действительно хотите «PointerOffset», то вы, вероятно, захотите разделить на 4000 часов, поскольку я не думаю, что ваш modulo достигает чего-то. У вас также есть две вещи, которые называются противоположными нормальными соглашениями. – Tommy