00cc9309cb
de6e324bdseparate emu thread10d3daf86Roms List improvements95d202f37Let's make the rom list process on a separate thread so the emulator doesnt take ages to load.fc306967fWow the ROM Header was just completely busted. Game list view works nowbad1691eefuck this shit2b59e5f46game list in progressd26417b83remappable inputs in progressac4af8106inpute72abc240update readme430139dc9Qt6 frontend3080d4d45Fix this small bug too08cd13b85Cop0 unused functions do not actually pose a threat (as per manual). They don't do anything, so shall we.61bb4fb44make idle loop detection a little more specific with where the load goesb037de4c3SAZDFsdff12e81e73eneed to figure out why n64-systemtest loops indefinitely at some address that appears to be valid (i think it's me not invalidating the cache properly)204f0e13bidle skipping seems to work!cb8bb634asdkfjlasdf58e5c89c1Fix compilation issue on my machine (no idea)24fb2898eattempting more serious idle skipping214719577Place rsp.Step inside cached interpreter. Gains about 3 more fpsbb97dcc23mmmmm920b77d38wjkhasdfjhkasdf430ccdab4it's a start...4f42a673aCached interpreter plays Mario 64. Start looking into RSP as wellc9a030787idle skipping works!5fbda03cenew idea366637abaIdle skipping... maybe?609fa2fb0Cache instructions implemented but broken lmao. Commented out for nowe140a6d12- Stop using inheritance for CPU, instead use composition. - Introduce KAIZEN_JIT_ENABLED optional define instead of relying on __aarch64__ and the like. - More cache work68e613057prep cache impl811b4d809fix clang formatfda755f7didkd5024ebbfsmall MI refactor in preparation of (eventually) implementing the RDRAM interface properly694b45341Merge commit '206dcdedf195fb320913584180edb12c7731e396' as 'external/SDL'206dcdedfSquashed 'external/SDL/' content from commit 4d17b99d0a4d16e1cb4need to update sdl848b19920Fix compilation errordb61b5299Merge commit 'e94a94559f28e49678fbcf72199a5258137b0fe9' as 'external/imgui'e94a94559Squashed 'external/imgui/' content from commit 02e9b8cac52edb3757need to update imguic1a705e86Emulate weird JALR behaviour4b4c32f4bFix exception for "unusable COP1" in 4 instructions i missed accidentally (again)df5828142Bug putting 0s in the log everywheref8b580048Make isviewer a sink to file8241e9735Fix exception for "unusable COP1" in 4 instructions i missed accidentallyb29715f20small changesd9a620bc1make use of my new small utility library0d1aa938eAdd 'external/ircolib/' from commit 'ce3cd726c8df8388d554abf8bb55d55020eb4450'e64eb40b3Fuck git git-subtree-dir: external/ircolib git-subtree-split:de6e324bde
386 lines
9.4 KiB
VB.net
386 lines
9.4 KiB
VB.net
Attribute VB_Name = "mMisc"
|
|
Option Explicit
|
|
|
|
'These are old library functions
|
|
|
|
Private Type Bit64Currency
|
|
value As Currency
|
|
End Type
|
|
|
|
Private Type Bit64Integer
|
|
LowValue As Long
|
|
HighValue As Long
|
|
End Type
|
|
|
|
Global Const LANG_US = &H409
|
|
|
|
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
|
|
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
|
|
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)
|
|
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
|
|
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
|
|
Public Declare Function SetDllDirectory Lib "kernel32" Alias "SetDllDirectoryA" (ByVal lpPathName As String) As Long
|
|
|
|
Function makeCur(high As Long, low As Long) As Currency
|
|
Dim c As Bit64Currency
|
|
Dim dl As Bit64Integer
|
|
dl.LowValue = low
|
|
dl.HighValue = high
|
|
LSet c = dl
|
|
makeCur = c.value
|
|
End Function
|
|
|
|
Function lng2Cur(v As Long) As Currency
|
|
Dim c As Bit64Currency
|
|
Dim dl As Bit64Integer
|
|
dl.LowValue = v
|
|
dl.HighValue = 0
|
|
LSet c = dl
|
|
lng2Cur = c.value
|
|
End Function
|
|
|
|
Function cur2str(v As Currency) As String
|
|
Dim c As Bit64Currency
|
|
Dim dl As Bit64Integer
|
|
c.value = v
|
|
LSet dl = c
|
|
If dl.HighValue = 0 Then
|
|
cur2str = Right("00000000" & Hex(dl.LowValue), 8)
|
|
Else
|
|
cur2str = Right("00000000" & Hex(dl.HighValue), 8) & "`" & Right("00000000" & Hex(dl.LowValue), 8)
|
|
End If
|
|
End Function
|
|
|
|
Function x64StrToCur(ByVal str As String) As Currency
|
|
|
|
str = Replace(Trim(str), "0x", "")
|
|
str = Replace(str, " ", "")
|
|
str = Replace(str, "`", "")
|
|
|
|
Dim low As String, high As String
|
|
Dim c As Bit64Currency
|
|
Dim dl As Bit64Integer
|
|
|
|
low = VBA.Right(str, 8)
|
|
dl.LowValue = CLng("&h" & low)
|
|
|
|
If Len(str) > 8 Then
|
|
high = Mid(str, 1, Len(str) - 8)
|
|
dl.HighValue = CLng("&h" & high)
|
|
End If
|
|
|
|
LSet c = dl
|
|
x64StrToCur = c.value
|
|
|
|
End Function
|
|
|
|
Function cur2lng(v As Currency) As Long
|
|
Dim c As Bit64Currency
|
|
Dim dl As Bit64Integer
|
|
c.value = v
|
|
LSet dl = c
|
|
cur2lng = dl.LowValue
|
|
End Function
|
|
|
|
Function readLng(offset As Long) As Long
|
|
Dim tmp As Long
|
|
CopyMemory ByVal VarPtr(tmp), ByVal offset, 4
|
|
readLng = tmp
|
|
End Function
|
|
|
|
Function readByte(offset As Long) As Byte
|
|
Dim tmp As Byte
|
|
CopyMemory ByVal VarPtr(tmp), ByVal offset, 1
|
|
readByte = tmp
|
|
End Function
|
|
|
|
Function readCur(offset As Long) As Currency
|
|
Dim tmp As Currency
|
|
CopyMemory ByVal VarPtr(tmp), ByVal offset, 8
|
|
readCur = tmp
|
|
End Function
|
|
|
|
Function col2Str(c As Collection, Optional emptyVal = "") As String
|
|
Dim v, tmp As String
|
|
|
|
If c.count = 0 Then
|
|
col2Str = emptyVal
|
|
Else
|
|
For Each v In c
|
|
col2Str = col2Str & hhex(v) & ", "
|
|
Next
|
|
col2Str = Mid(col2Str, 1, Len(col2Str) - 2)
|
|
End If
|
|
|
|
End Function
|
|
|
|
Function regCol2Str(hEngine As Long, c As Collection) As String
|
|
Dim v, tmp As String
|
|
|
|
If c.count = 0 Then Exit Function
|
|
|
|
For Each v In c
|
|
regCol2Str = regCol2Str & regName(hEngine, CLng(v)) & ", "
|
|
Next
|
|
regCol2Str = Mid(regCol2Str, 1, Len(regCol2Str) - 2)
|
|
|
|
End Function
|
|
|
|
|
|
|
|
Function b2Str(b() As Byte) As String
|
|
Dim i As Long
|
|
|
|
If AryIsEmpty(b) Then
|
|
b2Str = "Empty"
|
|
Else
|
|
For i = 0 To UBound(b)
|
|
b2Str = b2Str & hhex(b(i)) & " "
|
|
Next
|
|
b2Str = Trim(b2Str)
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
|
|
Function AryIsEmpty(ary) As Boolean
|
|
Dim i As Long
|
|
|
|
On Error GoTo oops
|
|
i = UBound(ary) '<- throws error if not initialized
|
|
AryIsEmpty = False
|
|
Exit Function
|
|
oops: AryIsEmpty = True
|
|
End Function
|
|
|
|
Public Function toBytes(ByVal hexstr, Optional strRet As Boolean = False)
|
|
|
|
'supports:
|
|
'11 22 33 44 spaced hex chars
|
|
'11223344 run together hex strings
|
|
'11,22,33,44 csv hex
|
|
'\x11,0x22 misc C source rips
|
|
'
|
|
'ignores common C source prefixes, operators, delimiters, and whitespace
|
|
'
|
|
'not supported
|
|
'1,2,3,4 all hex chars are must have two chars even if delimited
|
|
'
|
|
'a version which supports more formats is here:
|
|
' https://github.com/dzzie/libs/blob/master/dzrt/globals.cls
|
|
|
|
Dim ret As String, x As String, str As String
|
|
Dim r() As Byte, b As Byte, b1 As Byte
|
|
Dim foundDecimal As Boolean, tmp, i, a, a2
|
|
Dim pos As Long, marker As String
|
|
|
|
On Error GoTo nope
|
|
|
|
str = Replace(hexstr, vbCr, Empty)
|
|
str = Replace(str, vbLf, Empty)
|
|
str = Replace(str, vbTab, Empty)
|
|
str = Replace(str, Chr(0), Empty)
|
|
str = Replace(str, "{", Empty)
|
|
str = Replace(str, "}", Empty)
|
|
str = Replace(str, ";", Empty)
|
|
str = Replace(str, "+", Empty)
|
|
str = Replace(str, """""", Empty)
|
|
str = Replace(str, "'", Empty)
|
|
str = Replace(str, " ", Empty)
|
|
str = Replace(str, "0x", Empty)
|
|
str = Replace(str, "\x", Empty)
|
|
str = Replace(str, ",", Empty)
|
|
|
|
For i = 1 To Len(str) Step 2
|
|
x = Mid(str, i, 2)
|
|
If Not isHexChar(x, b) Then Exit Function
|
|
bpush r(), b
|
|
Next
|
|
|
|
If strRet Then
|
|
toBytes = StrConv(r, vbUnicode, LANG_US)
|
|
Else
|
|
toBytes = r
|
|
End If
|
|
|
|
nope:
|
|
End Function
|
|
|
|
Private Sub bpush(bAry() As Byte, b As Byte) 'this modifies parent ary object
|
|
On Error GoTo init
|
|
Dim x As Long
|
|
|
|
x = UBound(bAry) '<-throws Error If Not initialized
|
|
ReDim Preserve bAry(UBound(bAry) + 1)
|
|
bAry(UBound(bAry)) = b
|
|
|
|
Exit Sub
|
|
|
|
init:
|
|
ReDim bAry(0)
|
|
bAry(0) = b
|
|
|
|
End Sub
|
|
|
|
Sub push(ary, value) 'this modifies parent ary object
|
|
On Error GoTo init
|
|
Dim x
|
|
|
|
x = UBound(ary)
|
|
ReDim Preserve ary(x + 1)
|
|
|
|
If IsObject(value) Then
|
|
Set ary(x + 1) = value
|
|
Else
|
|
ary(x + 1) = value
|
|
End If
|
|
|
|
Exit Sub
|
|
init:
|
|
ReDim ary(0)
|
|
If IsObject(value) Then
|
|
Set ary(0) = value
|
|
Else
|
|
ary(0) = value
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Public Function isHexChar(hexValue As String, Optional b As Byte) As Boolean
|
|
On Error Resume Next
|
|
Dim v As Long
|
|
|
|
If Len(hexValue) = 0 Then GoTo nope
|
|
If Len(hexValue) > 2 Then GoTo nope 'expecting hex char code like FF or 90
|
|
|
|
v = CLng("&h" & hexValue)
|
|
If Err.Number <> 0 Then GoTo nope 'invalid hex code
|
|
|
|
b = CByte(v)
|
|
If Err.Number <> 0 Then GoTo nope 'shouldnt happen.. > 255 cant be with len() <=2 ?
|
|
|
|
isHexChar = True
|
|
|
|
Exit Function
|
|
nope:
|
|
Err.Clear
|
|
isHexChar = False
|
|
End Function
|
|
|
|
Function hhex(b) As String
|
|
hhex = Right("00" & Hex(b), 2)
|
|
End Function
|
|
|
|
Function rpad(x, i, Optional c = " ")
|
|
rpad = Left(x & String(i, c), i)
|
|
End Function
|
|
|
|
Function HexDump(bAryOrStrData, Optional hexOnly = 0, Optional ByVal startAt As Long = 1, Optional ByVal length As Long = -1) As String
|
|
Dim s() As String, chars As String, tmp As String
|
|
On Error Resume Next
|
|
Dim ary() As Byte
|
|
Dim offset As Long
|
|
Const LANG_US = &H409
|
|
Dim i As Long, tt, h, x
|
|
|
|
offset = 0
|
|
|
|
If TypeName(bAryOrStrData) = "Byte()" Then
|
|
ary() = bAryOrStrData
|
|
Else
|
|
ary = StrConv(CStr(bAryOrStrData), vbFromUnicode, LANG_US)
|
|
End If
|
|
|
|
If startAt < 1 Then startAt = 1
|
|
If length < 1 Then length = -1
|
|
|
|
While startAt Mod 16 <> 0
|
|
startAt = startAt - 1
|
|
Wend
|
|
|
|
startAt = startAt + 1
|
|
|
|
chars = " "
|
|
For i = startAt To UBound(ary) + 1
|
|
tt = Hex(ary(i - 1))
|
|
If Len(tt) = 1 Then tt = "0" & tt
|
|
tmp = tmp & tt & " "
|
|
x = ary(i - 1)
|
|
'chars = chars & IIf((x > 32 And x < 127) Or x > 191, Chr(x), ".") 'x > 191 causes \x0 problems on non us systems... asc(chr(x)) = 0
|
|
chars = chars & IIf((x > 32 And x < 127), Chr(x), ".")
|
|
If i > 1 And i Mod 16 = 0 Then
|
|
h = Hex(offset)
|
|
While Len(h) < 6: h = "0" & h: Wend
|
|
If hexOnly = 0 Then
|
|
push s, h & " " & tmp & chars
|
|
Else
|
|
push s, tmp
|
|
End If
|
|
offset = offset + 16
|
|
tmp = Empty
|
|
chars = " "
|
|
End If
|
|
If length <> -1 Then
|
|
length = length - 1
|
|
If length = 0 Then Exit For
|
|
End If
|
|
Next
|
|
|
|
'if read length was not mod 16=0 then
|
|
'we have part of line to account for
|
|
If tmp <> Empty Then
|
|
If hexOnly = 0 Then
|
|
h = Hex(offset)
|
|
While Len(h) < 6: h = "0" & h: Wend
|
|
h = h & " " & tmp
|
|
While Len(h) <= 56: h = h & " ": Wend
|
|
push s, h & chars
|
|
Else
|
|
push s, tmp
|
|
End If
|
|
End If
|
|
|
|
HexDump = Join(s, vbCrLf)
|
|
|
|
If hexOnly <> 0 Then
|
|
HexDump = Replace(HexDump, " ", "")
|
|
HexDump = Replace(HexDump, vbCrLf, "")
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
|
|
Function FileExists(path As String) As Boolean
|
|
On Error GoTo hell
|
|
|
|
If Len(path) = 0 Then Exit Function
|
|
If Right(path, 1) = "\" Then Exit Function
|
|
If Dir(path, vbHidden Or vbNormal Or vbReadOnly Or vbSystem) <> "" Then FileExists = True
|
|
|
|
Exit Function
|
|
hell: FileExists = False
|
|
End Function
|
|
|
|
Sub WriteFile(path, it)
|
|
Dim f
|
|
f = FreeFile
|
|
Open path For Output As #f
|
|
Print #f, it
|
|
Close f
|
|
End Sub
|
|
|
|
Function GetParentFolder(path) As String
|
|
Dim tmp() As String, ub As Long
|
|
On Error Resume Next
|
|
tmp = Split(path, "\")
|
|
ub = tmp(UBound(tmp))
|
|
If Err.Number = 0 Then
|
|
GetParentFolder = Replace(Join(tmp, "\"), "\" & ub, "")
|
|
Else
|
|
GetParentFolder = path
|
|
End If
|
|
End Function
|
|
|