Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Type hw
  2.     Private:
  3.         ram(0 To &h1FFFFF) As UByte
  4.         bios(0 To &h7FFFF) As UByte
  5.     Public:
  6.         Declare Sub write8(ByVal addr As ULong, ByVal value As UByte)
  7.         Declare Sub write16(ByVal addr As ULong, ByVal value As UShort)
  8.         Declare Sub write32(ByVal addr As ULong, ByVal value As ULong)
  9.         Declare Function read8(ByVal addr As ULong) As UByte
  10.         Declare Function read16(ByVal addr As ULong) As UShort
  11.         Declare Function read32(ByVal addr As ULong) As ULong
  12. End Type
  13. Dim Shared mem As hw
  14.  
  15. Sub hw.write8(ByVal addr As ULong, ByVal value As UByte)
  16.     Select Case (addr Shr 16)
  17.         Case &h0000 To &h007F
  18.             ram(addr And &h1FFFFF) = value
  19.         Case &h8000 To &h807F
  20.             ram(addr And &h1FFFFF) = value
  21.         Case &hA000 To &hA07F
  22.             ram(addr And &h1FFFFF) = value
  23.         Case &h1F80
  24.        
  25.         Case &hFFFE
  26.            
  27.     End Select
  28. End Sub
  29. Sub hw.write16(ByVal addr As ULong, ByVal value As UShort)
  30.     Select Case (addr Shr 16)
  31.         Case &h0000 To &h007F
  32.             For i As Integer = 0 To 1
  33.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  34.             Next
  35.         Case &h8000 To &h807F
  36.             For i As Integer = 0 To 1
  37.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  38.             Next
  39.         Case &hA000 To &hA07F
  40.             For i As Integer = 0 To 1
  41.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  42.             Next
  43.         Case &h1F80
  44.        
  45.         Case &hFFFE
  46.            
  47.     End Select
  48. End Sub
  49. Sub hw.write32(ByVal addr As ULong, ByVal value As ULong)
  50.     Select Case (addr Shr 16)
  51.         Case &h0000 To &h007F
  52.             For i As Integer = 0 To 3
  53.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  54.             Next
  55.         Case &h8000 To &h807F
  56.             For i As Integer = 0 To 3
  57.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  58.             Next
  59.         Case &hA000 To &hA07F
  60.             For i As Integer = 0 To 3
  61.                 ram((addr+i) And &h1FFFFF) = (value Shr (8*i))
  62.             Next
  63.         Case &h1F80
  64.        
  65.         Case &hFFFE
  66.            
  67.     End Select
  68. End Sub
  69. Function hw.read8(ByVal addr As ULong) As UByte
  70.     Select Case (addr Shr 16)
  71.         Case &h0000 To &h007F
  72.             Return ram(addr And &h1FFFFF)
  73.         Case &h8000 To &h807F
  74.             Return ram(addr And &h1FFFFF)
  75.         Case &hA000 To &hA07F
  76.             Return ram(addr And &h1FFFFF)
  77.         Case &h1F80
  78.        
  79.         Case &hFFFE
  80.            
  81.     End Select
  82. End Function
  83. Function hw.read16(ByVal addr As ULong) As UShort
  84.     Dim As UShort value
  85.     Select Case (addr Shr 16)
  86.         Case &h0000 To &h007F
  87.             For i As Integer = 0 To 1
  88.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  89.             Next
  90.         Case &h8000 To &h807F
  91.             For i As Integer = 0 To 1
  92.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  93.             Next
  94.         Case &hA000 To &hA07F
  95.             For i As Integer = 0 To 1
  96.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  97.             Next
  98.         Case &h1F80
  99.    
  100.         Case &hFFFE
  101.        
  102.     End Select
  103.        
  104.     Return value
  105. End Function
  106. Function hw.read32(ByVal addr As ULong) As ULong
  107.     Dim As ULong value
  108.     Select Case (addr Shr 16)
  109.         Case &h0000 To &h007F
  110.             For i As Integer = 0 To 1
  111.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  112.             Next
  113.         Case &h8000 To &h807F
  114.             For i As Integer = 0 To 3
  115.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  116.             Next
  117.         Case &hA000 To &hA07F
  118.             For i As Integer = 0 To 3
  119.                 value = ram((addr+i)And &h1FFFFF) Shl (8 - (8*i))
  120.             Next
  121.         Case &h1F80
  122.        
  123.         Case &hFFFE
  124.            
  125.     End Select
  126.    
  127.     Return value
  128. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement