2013-04-07 18 views
0

我想創建一個Z80偏移指針轉換器,但是當我編譯程序並測試它時,輸出變量會變爲零。指針轉換器返回不正確的值

其背後的數學是這樣的:

  1. 採取偏移要指向。
  2. 取出偏移量的最後四位數字,然後切除其餘部分。
  3. 如果偏移的範圍& 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 

究竟是什麼地方出現錯誤的地方輸出結果什麼都沒有?我在運行時沒有得到任何例外或警告......

+0

你想要做的是按位操作和位移,對吧? – Fredou 2013-04-07 21:32:39

+0

是的,基本上。 – AlexTheRose 2013-04-07 22:07:20

+0

什麼是PointerOffset?它看起來像你只是想採取'PointerBank'並增加4000h。如果你真的想'PointerOffset',那麼你可能希望劃分4000h,因爲我不認爲你的模數實現了任何東西。你也有兩種與正常慣例相反的名字。 – Tommy 2013-04-08 04:05:58

回答

1

基本上,這會給你想要的結果。

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