📄 axd.vbs
字号:
End If
fmt = GetFormatFromKey(fmtKey)
If fmtPar = -1 Then
fmtPar = DefDisplayFormatPar
End If
call UpdateRegBankList(-1)
set CurRegBank = GetObjFromKey(RegBankIndex, RegBankList, RegBankNameString, RegBankIDString, index)
set RegisterList = CurRegBank.Registers()
count = RegisterList.count
BankName = CurRegBank.Name
If BankName = "User" Then
BankName = "User/System"
End If
iter = 0
do while iter < count
set Register = RegisterList(iter)
errText = Register.Format(fmt, fmtPar)
txt = txt & Chr(35) & CStr(iter + 1) & Chr(9) & Register.Name & Chr(9) & errText & chr(13) & chr(10)
RegNameString = RegNameString & CStr(Register.Name) & "%" & CStr(iter) & "%"
iter = iter + 1
loop
ListText = "Registers Bank" & Chr(58) & Chr(32) & BankName & chr(13) & chr(10) & regheader & txt
adw3cli.Display(ListText)
End Function
'Generic Padd/Remove Function
Function Pad(a, b)
Dim Pads, i
i = Len(a)
if i > b Then
a = mid(a, i-b+1) 'String bigger then b so truncate to b
i = b
End If
Pads = b-i
i = 0
do while i < Pads
a = "0" & a 'Pad zeros
i = i + 1
Loop
Pad = a
End Function
'Function to pad a string with zeros to the next even number
Function PadEven(a)
Dim l
l = Len(a)
l = Int((l+1)/2)*2
PadEven = Pad(a,l)
End Function
Function Unsigned(a)
Unsigned = "&h" & HexLong(a)
End Function
' Function to get a full unsigned string representation of a 32bit value , Hex() can't
Function HexLong(a)
Dim word16, upper, lower
Dim Supper, Slower
word16 = &h10000
upper = Int(a/word16)
if upper > 65536 Then
err.raise 1000, "VBScript", "Specified number or address larger then 0xFFFFFFFF"
end if
lower = a - upper*word16
Supper = Cstr(Hex(upper))
Slower = Cstr(Hex(lower))
HexLong = Pad(Supper,4) & Pad(Slower,4)
End Function
Function Memory(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar) '<--- CLI command
On Error Resume Next
Memory = MemoryInt(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar)
DisplayError
End Function
'Function MemoryInt(StartAddress, Address, MemSize, MemFormat)
Function MemoryInt(StartAddress, Address, MemSize, MemFormatKey, MemFmtPar)
Dim DesireMemSize
Dim MemObj, memText, MemRange
Dim SmallRange, LastTime, Range
dim iter, LineCount, OffSet
Dim Pads, iLoop, OutPads, iOutLoop
If Address = -1 Then
Address = Chr(43) & CStr(DefMemRange)
End If
If Left(Address, 1) = Chr(43) Then
CheckFormat = true
Else
checkformat = false
End If
If MemSize = -1 Then
DesireMemSize = DefMemSize
Else
DesireMemSize = ConvertMemSize(MemSize)
End If
' If MemFormat = -1 Then
' MemFormat = DefDisplayFormat
' End If
MemFormat = GetFormatFromKey(MemFormatKey)
LastTime = False
do
Range = InitRange(SmallRange, LastTime, StartAddress, Address)
If checkformat = true Then
If MemSize = 4 Then
If Range <= 4 Then
MemRange = 4
Else
'MemRange = 4*Fix((Range)/4)
If (Range Mod 4) = 0 Then
MemRange = Range
Else
' MemRange = Range + 1
MemRange = Range + (4 - BitsLeft)
'MemRange = 2*Fix((Range)/2)
End If
End If
ElseIf MemSize = 2 Then
If Range <= 2 Then
MemRange = 2
Else
If (Range Mod 2) = 0 Then
MemRange = Range
Else
MemRange = Range + 1
'MemRange = 2*Fix((Range)/2)
End If
End If
Else
MemRange = Range
End If
Else
If MemSize = 4 Then
If Range <= 4 Then
MemRange = 4
Else
BitsLeft = Range Mod 4
If BitsLeft = 0 Then
MemRange = Range
Else
MemRange = Range + (4 - BitsLeft)
'MemRange = 2*Fix((Range)/2)
End If
'MemRange = 4*Fix((Range + 4)/4)
End If
ElseIf MemSize = 2 Then
If Range <= 2 Then
MemRange = 2
Else
If (Range Mod 2) = 0 Then
MemRange = Range
Else
MemRange = Range + 1
End If
' MemRange = 2*Fix((Range + 2)/2)
End If
Else
MemRange = Range
End If
End If
set MemObj = currentthread.CreateMemory(StartAddress, MemRange)
' PM 64863 create memory uses "create and update" - we don't need create and read
' MemObj.GetFromTarget
ret = Round(CLng(MemRange)/16)
' now work out how many loops we need.
If ret * 16 < CLng(MemRange) Then
LineCount = ret
ElseIf ret = 0 Then
LineCount = 1
Else
LineCount = ret -1
End If
iter = 0
OffSet = 0
do while iter < LineCount
memText = MemObj.Format(MemFormat, MemFmtPar, DesireMemSize, OffSet, 16)
FormatAddress = "0x" & HexLong(StartAddress + OffSet)
outText = FormatAddress & Chr(9) & memText & chr(13) & chr(10)
If adw3cli.Display(outText) = 0 Then 'user aborted
Exit Function
End If
OffSet = OffSet + 16
iter = iter + 1
loop
BytesRemain = Clng(MemRange) - LineCount*16
If BytesRemain >= 0 Then
FormatAddress = "0x" & HexLong(StartAddress + OffSet)
memText = MemObj.Format(MemFormat, MemFmtPar, DesireMemSize, OffSet, BytesRemain)
outText = FormatAddress & Chr(9) & memText & chr(13) & chr(10)
If adw3cli.Display(outText) = 0 Then 'user aborted
Exit Function
End If
End If
If LastTime Then
Exit Function
End If
StartAddress = Unsigned(StartAddress + Range)
Address = Unsigned(Address)
set MemObj = Nothing
Loop
End Function
Function FillMem(StartAddress, Address, NewValue, RequiredMemSize) '<--- CLI command
On Error Resume Next
FillMem = FillMemInt(StartAddress, Address, NewValue, RequiredMemSize)
DisplayError
End Function
Function FillMemInt(StartAddress, Address, NewValue, RequiredMemSize)
Dim MemObj, MemRange, DesireMemSize
Dim SmallRange, LastTime
If RequiredMemSize = -1 Then
DesireMemSize = DefMemSize
Else
DesireMemSize = ConvertMemSize(RequiredMemSize)
End If
If Left(Address, 1) = Chr(43) Then
CheckFormat = true
Else
checkformat = false
End If
If CheckFormat = false Then
If RequiredMemSize = 4 Then
address = 4*Fix((address + 4)/4)
ElseIf RequiredMemSize = 2 Then
address = 2*Fix((address + 2)/2)
Else
address = address
End If
End If
If Left(NewValue, 1) = Chr(37) Then '^, but changed to %
NewValue = ExprToAddress(NewValue)
End If
LastTime = False
do
MemRange = InitRange(SmallRange, LastTime, StartAddress, Address)
currentthread.FillMemory StartAddress, MemRange, NewValue, DesireMemSize
If LastTime Then
Exit Function
End If
AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+MemRange) & chr(13) & chr(10)
If adw3cli.Display(AddressFound) = 0 Then 'user aborted
Exit Function
End If
StartAddress = Unsigned(StartAddress+MemRange)
Address = Unsigned(Address)
Loop
End Function
''''''
' set the memory locateion at expr1 to the value given.
'''''''''
Function SetMem(StartAddress, NewValue, MemSize) '<--- CLI command
On Error Resume Next
SetMem = SetMemInt(StartAddress, NewValue, MemSize)
DisplayError
End Function
Function SetMemInt(StartAddress, NewValue, MemSize)
Dim MemRange, DesireMemSize
StartAddress = ExprToAddress(StartAddress)
If MemSize = -1 Then
DesireMemSize = DefMemSize
Else
DesireMemSize = ConvertMemSize(MemSize)
End If
call GetRange(StartAddress, StartAddress+DesireMemSize-1)
NewValue = Unsigned(ExprToAddress(NewValue))
currentthread.FillMemory StartAddress, DesireMemSize, NewValue, DesireMemSize
End Function
' function to calculate range and overcomes problem with signed arithemetic with unsigned
Function GetRange(StartAddr, EndAddr)
Dim y, z, Range
y=-2147483648
z=2147483647
Range = EndAddr - StartAddr
If EndAddr < 0 and StartAddr >= 0 Then
y= Endaddr - y
z= z - StartAddr
Range = y + z + 1
End If
If EndAddr >= 0 and StartAddr < 0 Then
Range = -1
End If
If Range < 0 Then
err.raise 1000, "VBScript", "Invalid Range Specified."
End If
GetRange = Range
End Function
Function FindValue(SearchString, StartAddress, EndAddress)
On Error Resume Next
FindValue = FindValueInt(SearchString, StartAddress, EndAddress)
DisplayError
End Function
Function InitRange(SmallRange, LastTime, StartAddress, EndAddress)
SmallRange = &h10000 '64k is jugged to be best compromise
LastTime = False
InitRange = ComRange(StartAddress, EndAddress)
If InitRange > SmallRange Then
InitRange = SmallRange
Else
LastTime = True
End if
End Function
Function FindValueInt(SearchString, StartAddress, EndAddress)
Dim MemObj, AddressFound, InString, Range
Dim SmallRange, LastTime
InString = "&h" & PadEven(Hex(ExprToAddress(SearchString)))
LastTime = False
do
Range = InitRange(SmallRange, LastTime, StartAddress, EndAddress)
set MemObj = CurrentThread.CreateMemory(StartAddress, Range)
' MemObj.GetFromTarget
if LastTime Then
AddressFound = MemObj.FindInMemory(InString, StartAddress)
Else
AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+Range) & " "
AddressFound = AddressFound & MemObj.FindInMemory(InString, StartAddress)
End If
If adw3cli.Display(AddressFound) = 0 Then 'user aborted
Exit Function
End If
If LastTime Then
Exit Function
End If
set MemObj = Nothing
StartAddress = Unsigned(StartAddress+Range)
EndAddress = Unsigned(EndAddress)
Loop
End Function
' routine to translate comand parameters to range and addresses
' a1 - Start Address,
' a2 - End address (it is converted to End Address if range input)
' a2 - End address (according to v1.1, it is not covered to end address if range input)
Function ComRange(a1, a2)
Dim ParseVal, Range
a1 = ExprToAddress(a1)
ParseVal = a2
Range = Parse(ParseVal)
If Range = "Range" Then
ComRange = GetRange(0, ExprToAddress(ParseVal))
a2 = a1 + ComRange - 1
Else
a2 = ExprToAddress(a2)
If a1 = -1 and a2 = -1 Then 'full range specified
a1 = 0
a2 = &hffffffff
End If
ComRange = GetRange(a1, a2) + 1
End If
End Function
Function FindString(SearchString, StartAddress, EndAddress)
On Error Resume Next
FindString = FindStringInt(SearchString, StartAddress, EndAddress)
DisplayError
End Function
Function FindStringInt(SearchString, StartAddress, EndAddress)
Dim MemObj, AddressFound, Range
Dim SmallRange, LastTime
LastTime = False
do
Range = InitRange(SmallRange, LastTime, StartAddress, EndAddress)
set MemObj = CurrentThread.CreateMemory(StartAddress, Range)
' MemObj.GetFromTarget
if LastTime Then
AddressFound = MemObj.FindInMemory(SearchString, StartAddress)
Else
AddressFound = "0x" & HexLong(StartAddress) & " - 0x" & HexLong(StartAddress+Range) & " "
AddressFound = AddressFound & MemObj.FindInMemory(SearchString, StartAddress)
End If
If adw3cli.Display(AddressFound) = 0 Then 'user aborted
Exit Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -