- 注册时间
- 2004-8-27
- 最后登录
- 1970-1-1
|
代码:
Function DisAssemble2SFile(InFile As String, OutFile As String, InStart As Long, OutStart As Long) As String
On Error Resume Next
Dim ArrPtr As Long
Dim BinArr() As Byte
Dim FLen As Long
Dim TmpLine1 As String
Dim TmpLine2 As String
Dim TmpByte As Byte
Open InFile For Binary As #1
Open OutFile For Output As #2
FLen = LOF(1)
ReDim BinArr(FLen - InStart - 1) As Byte
Get #1, InStart + 1, BinArr()
ArrPtr = 0
Do Until ArrPtr > FLen - InStart - 1
TmpByte = BinArr(ArrPtr)
TmpLine1 = "$" & HexPlus4(ArrPtr + OutStart) & "> " '"$8000> "
Select Case TmpByte
Case &H71, &H31, &HD1, &H51, &HB1, &H11, &HF1, &H91
'IND,Y
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 1)) & ") ,Y ;"
ArrPtr = ArrPtr + 2
Case &H61, &H21, &HC1, &H41, &HA1, &H1, &HE1, &H81
'IND,X
'TmpLine1 = TmpLine1 & Hexplus2(TmpByte) & " " & Hexplus2(BinArr(ArrPtr + 1)) & " " & Hexplus2(BinArr(ArrPtr + 2)) & " : "
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 1)) & " ,X) ;"
ArrPtr = ArrPtr + 2
Case &H6D, &HCC, &H2D, &HE, &H2C, &HCD, &HEC, &HEC, &HCE, &H40, &HEE, &H4C, &HAD, &HAE, &HAC, &H4E, &HD, &H2E, &H6E, &HED, &H8D, &H8E, &H8C
'ABS-INT-JSR
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ;"
ArrPtr = ArrPtr + 3
Case &H0
'INT
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " $00,$" & HexPlus2(BinArr(ArrPtr + 1)) & ",$" & HexPlus2(BinArr(ArrPtr + 2)) & " ; " & SysFuncAI(&H0, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))
'TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ; " & SysFuncAI(&H0, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))
ArrPtr = ArrPtr + 3
Case &H20
'JSR
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ; " & SysFuncAI(&H20, HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)))
ArrPtr = ArrPtr + 3
Case &H7D, &H3D, &H1E, &HDD, &HDE, &H5D, &HFE, &HBD, &HBC, &H5E, &H1D, &H3E, &H7E, &HFD, &H9D
'ABSX
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ,X ;"
ArrPtr = ArrPtr + 3
Case &H79, &H39, &HD9, &H59, &HB8, &HBE, &H19, &HF9, &H99
'ABSY
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & " ,Y ;"
ArrPtr = ArrPtr + 3
Case &HA, &H4A, &H2A, &H6A
'ACM
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " : "
TmpLine2 = " ;"
'TmpLine2 = " A ;"
ArrPtr = ArrPtr + 1
Case &H69, &H29, &HC0, &HC9, &HE0, &HE0, &H49, &HA9, &HA2, &HA0, &H9, &HE9
'IM
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " #$" & HexPlus2(BinArr(ArrPtr + 1)) & " ;"
ArrPtr = ArrPtr + 2
Case &H18, &HD8, &H58, &HB8, &HCA, &H88, &HE8, &HC8, &HEA, &H48, &H8, &H68, &H28, &H4D, &H60, &H38, &HF8, &H78, &HAA, &HA8, &HBA, &H8A, &H9A, &H98
'IMP
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " : "
TmpLine2 = " ;"
ArrPtr = ArrPtr + 1
Case &H6C
'IND..only jmp
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " " & HexPlus2(BinArr(ArrPtr + 2)) & " : "
TmpLine2 = " ($" & HexPlus2(BinArr(ArrPtr + 2)) & HexPlus2(BinArr(ArrPtr + 1)) & ") ;"
ArrPtr = ArrPtr + 3
Case &H90, &HB0, &HF0, &H30, &HD0, &H10, &H50, &H70
'RLT
'??
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
'''TmpLine2 = " $" & HexPlus4(ArrPtr + OutStart + 2 + ((128 + BinArr(ArrPtr + 1)) Mod 255) - 128) & " ;"
TmpLine2 = " L" & HexPlus4(ArrPtr + OutStart + 2 + ((128 + BinArr(ArrPtr + 1)) Mod 256) - 128) & " ;"
ArrPtr = ArrPtr + 2
Case &H65, &H25, &H6, &HC4, &H24, &HC5, &HE4, &HE4, &HC6, &H45, &HE6, &HA5, &HA6, &HA4, &H46, &H5, &H26, &H66, &HE5, &H85, &H86, &H84
'ZP
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & " ;"
ArrPtr = ArrPtr + 2
Case &H75, &H35, &H16, &HD5, &HD6, &H55, &HF6, &HB5, &HB4, &H56, &H15, &H36, &H76, &HF5, &H95, &H94
'ZPX
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & " ,X ;"
ArrPtr = ArrPtr + 2
Case &HB6, &H96
'ZPY
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " " & HexPlus2(BinArr(ArrPtr + 1)) & " : "
TmpLine2 = " $" & HexPlus2(BinArr(ArrPtr + 1)) & " ,Y ;"
ArrPtr = ArrPtr + 2
Case Else
'UNKNOW
TmpLine1 = TmpLine1 & HexPlus2(TmpByte) & " : "
TmpLine2 = ".DB " & HexPlus2(TmpByte) & " ;unrecognize code"
ArrPtr = ArrPtr + 1
End Select
Select Case TmpByte
Case &H71, &H61, &H6D, &H7D, &H79, &H69, &H65, &H75
'ADC
TmpLine1 = TmpLine1 & "ADC" & TmpLine2
Case &H31, &H21, &H2D, &H3D, &H39, &H29, &H25, &H35
'AND
TmpLine1 = TmpLine1 & "AND" & TmpLine2
Case &HE, &H1E, &HA, &H6, &H16
'ASL
TmpLine1 = TmpLine1 & "ASL" & TmpLine2
Case &H90
'BCC
TmpLine1 = TmpLine1 & "BCC" & TmpLine2
Case &HB0
'BCS
TmpLine1 = TmpLine1 & "BCS" & TmpLine2
Case &HF0
'BEQ
TmpLine1 = TmpLine1 & "BEQ" & TmpLine2
Case &H30
'BMI
TmpLine1 = TmpLine1 & "BMI" & TmpLine2
Case &HD0
'BNE
TmpLine1 = TmpLine1 & "BNE" & TmpLine2
Case &H10
'BPL
TmpLine1 = TmpLine1 & "BPL" & TmpLine2
Case &H50
'BVC
TmpLine1 = TmpLine1 & "BVC" & TmpLine2
Case &H70
'BVS
TmpLine1 = TmpLine1 & "BVS" & TmpLine2
Case &H2C, &H24
'BIT
TmpLine1 = TmpLine1 & "BIT" & TmpLine2
Case &H18
'CLC
TmpLine1 = TmpLine1 & "CLC" & TmpLine2
Case &HD8
'CLD
TmpLine1 = TmpLine1 & "CLD" & TmpLine2
Case &H58
'CLI
TmpLine1 = TmpLine1 & "CLI" & TmpLine2
Case &HB8
'CLV
TmpLine1 = TmpLine1 & "CLV" & TmpLine2
Case &HD1, &HC1, &HCD, &HDD, &HD9, &HC9, &HC5, &HD5
'CMP
TmpLine1 = TmpLine1 & "CMP" & TmpLine2
Case &HEC, &HE0, &HE4
'CPX
TmpLine1 = TmpLine1 & "CPX" & TmpLine2
Case &HC0, &HC4, &HCC
'CPY
TmpLine1 = TmpLine1 & "CPY" & TmpLine2
Case &HCE, &HDE, &HC6, &HD6
'DEC
TmpLine1 = TmpLine1 & "DEC" & TmpLine2
Case &HCA
'DEX
TmpLine1 = TmpLine1 & "DEX" & TmpLine2
Case &H88
'DEY
TmpLine1 = TmpLine1 & "DEY" & TmpLine2
Case &H51, &H41, &H40, &H5D, &H59, &H49, &H45, &H55
'EOR
TmpLine1 = TmpLine1 & "EOR" & TmpLine2
Case &HEE, &HFE, &HE6, &HF6
'INC
TmpLine1 = TmpLine1 & "INC" & TmpLine2
Case &H0
'INT
'TmpLine1 = TmpLine1 & "INT" & TmpLine2
TmpLine1 = TmpLine1 & ".DB" & TmpLine2
Case &HE8
'INX
TmpLine1 = TmpLine1 & "INX" & TmpLine2
Case &HC8
'INY
TmpLine1 = TmpLine1 & "INY" & TmpLine2
Case &H4C, &H6C
'JMP
TmpLine1 = TmpLine1 & "JMP" & TmpLine2
Case &H20
'JSR
TmpLine1 = TmpLine1 & "JSR" & TmpLine2
Case &HB1, &HA1, &HAD, &HBD, &HB8, &HA9, &HA5, &HB5
'LDA
TmpLine1 = TmpLine1 & "LDA" & TmpLine2
Case &HAE, &HBE, &HA2, &HA6, &HB6
'LDX
TmpLine1 = TmpLine1 & "LDX" & TmpLine2
Case &HAC, &HBC, &HA0, &HA4, &HB4
'LDY
TmpLine1 = TmpLine1 & "LDY" & TmpLine2
Case &H4E, &H5E, &H4A, &H46, &H56
'LSR
TmpLine1 = TmpLine1 & "LSR" & TmpLine2
Case &HEA
'NOP
TmpLine1 = TmpLine1 & "NOP" & TmpLine2
Case &H11, &H1, &HD, &H1D, &H19, &H9, &H5, &H15
'ORA
TmpLine1 = TmpLine1 & "ORA" & TmpLine2
Case &H48
'PHA
TmpLine1 = TmpLine1 & "PHA" & TmpLine2
Case &H8
'PHP
TmpLine1 = TmpLine1 & "PHP" & TmpLine2
Case &H68
'PLA
TmpLine1 = TmpLine1 & "PLA" & TmpLine2
Case &H28
'PLP
TmpLine1 = TmpLine1 & "PLP" & TmpLine2
Case &H2E, &H3E, &H2A, &H26, &H36
'ROL
TmpLine1 = TmpLine1 & "ROL" & TmpLine2
Case &H6E, &H7E, &H6A, &H66, &H76
'ROR
TmpLine1 = TmpLine1 & "ROR" & TmpLine2
Case &H4D
'RTI
TmpLine1 = TmpLine1 & "RTI" & TmpLine2
Case &H60
'RTS
TmpLine1 = TmpLine1 & "RTS" & TmpLine2
Case &HF1, &HE1, &HED, &HFD, &HF9, &HE9, &HE5, &HF5
'SBC
TmpLine1 = TmpLine1 & "SBC" & TmpLine2
Case &H38
'SEC
TmpLine1 = TmpLine1 & "SEC" & TmpLine2
Case &HF8
'SED
TmpLine1 = TmpLine1 & "SED" & TmpLine2
Case &H78
'SEI
TmpLine1 = TmpLine1 & "SEI" & TmpLine2
Case &H91, &H81, &H8D, &H9D, &H99, &H85, &H95
'STA
TmpLine1 = TmpLine1 & "STA" & TmpLine2
Case &H8E, &H86, &H96
'STX
TmpLine1 = TmpLine1 & "STX" & TmpLine2
Case &H8C, &H84, &H94
'STY
TmpLine1 = TmpLine1 & "STY" & TmpLine2
Case &HAA
'TAX
TmpLine1 = TmpLine1 & "TAX" & TmpLine2
Case &HA8
'TAY
TmpLine1 = TmpLine1 & "TAY" & TmpLine2
Case &HBA
'TSX
TmpLine1 = TmpLine1 & "TSX" & TmpLine2
Case &H8A
'TXA
TmpLine1 = TmpLine1 & "TXA" & TmpLine2
Case &H9A
'TXS
TmpLine1 = TmpLine1 & "TXS" & TmpLine2
Case &H98
'TYA
TmpLine1 = TmpLine1 & "TYA" & TmpLine2
Case Else
TmpLine1 = TmpLine1 & TmpLine2
End Select
Print #2, TmpLine1
Loop
Close
End Function
|
|