Skip to content

Instantly share code, notes, and snippets.

@markjenkins
Last active March 1, 2020 18:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markjenkins/67111ff903720c74e37062e05ed8384b to your computer and use it in GitHub Desktop.
Save markjenkins/67111ff903720c74e37062e05ed8384b to your computer and use it in GitHub Desktop.
A disassembly of roms/M0-compact using disasm.py (8fd7ebfdf1bc54dd221b780247596c1cdb4efbb0) which can be assembled back to the original binary
LOADUI R14 0x0800
LOADUI R15 0x06A0
LOADUI R0 0x1100
FOPEN_READ
LOADUI R0 0x1101
FOPEN_WRITE
READSCID R0
ANDI R1 R0 0x000F
LOADUI R0 0x0001
SL0 R0 R0 R1
STORER16 R0 0x0656
ADDU R1 R0 R0
STORER16 R1 0x064E
ADDU R0 R1 R0
STORER16 R0 0x0646
COPY R12 R14
CALLI R15 0x01F4
LOADUI R0 0x1100
REWIND
FALSE R0
CALLI R15 0x0378
LOADUI R0 0x1100
FCLOSE
LOADUI R0 0x1101
FCLOSE
HALT
PUSHR R1 R15
PUSHR R2 R15
PUSHR R3 R15
PUSHR R4 R15
MOVE R2 R0
MOVE R3 R1
LOADUI R4 0x0000
LOADXU8 R0 R2 R4
LOADXU8 R1 R3 R4
ADDUI R4 R4 0x0001
CMPSKIP.NE R1 R0
JUMP.NZ R1 0xFFE8
FALSE R2
CMPSKIP.NE R0 R1
TRUE R2
MOVE R0 R2
POPR R4 R15
POPR R3 R15
POPR R2 R15
POPR R1 R15
RET R15
PUSHR R1 R15
PUSHR R2 R15
LOADU8 R2 R1 0x0000
JUMP.Z R2 0x0012
CMPJUMPI.E R0 R2 0x0010
ADDUI R1 R1 0x0001
JUMP.NZ R2 0xFFE2
FALSE R1
CMPSKIPI.E R1 0x0000
TRUE R2
MOVE R0 R2
POPR R2 R15
POPR R1 R15
RET R15
PUSHR R2 R15
MOVE R2 R0
LOAD8 R0 R2 0x0000
JUMP.Z R0 0x000E
FPUTC
ADDUI R2 R2 0x0001
JUMP 0xFFE6
POPR R2 R15
RET R15
PUSHR R1 R15
PUSHR R2 R15
PUSHR R3 R15
PUSHR R4 R15
MOVE R1 R0
FALSE R2
FALSE R3
LOAD8 R0 R1 0x0001
CMPSKIPI.NE R0 0x0078
JUMP 0x005E
LOADUI R4 0x000A
LOAD8 R0 R1 0x0000
CMPSKIPI.NE R0 0x002D
TRUE R2
CMPSKIPI.E R2 0x0000
ADDUI R1 R1 0x0001
LOAD8 R0 R1 0x0000
CMPSKIPI.NE R0 0x0000
JUMP 0x0080
MUL R3 R3 R4
SUBI R0 R0 0x0030
CMPSKIPI.GE R0 0x0000
JUMP 0x006C
CMPSKIPI.L R0 0x000A
JUMP 0x0062
ADDU R3 R3 R0
ADDUI R1 R1 0x0001
JUMP 0xFFC4
LOAD8 R0 R1 0x0000
CMPSKIPI.E R0 0x0030
JUMP 0x0044
ADDUI R1 R1 0x0002
LOAD8 R0 R1 0x0000
JUMP.Z R0 0x0032
SL0I R3 0x0004
SUBI R0 R0 0x0030
CMPSKIPI.L R0 0x000A
SUBI R0 R0 0x0007
CMPSKIPI.L R0 0x0010
SUBI R0 R0 0x0020
ADDU R3 R3 R0
ADDUI R1 R1 0x0001
JUMP 0xFFC2
CMPSKIPI.E R2 0x0000
NEG R3 R3
MOVE R0 R3
POPR R4 R15
POPR R3 R15
POPR R2 R15
POPR R1 R15
RET R15
PUSHR R0 R15
PUSHR R1 R15
PUSHR R2 R15
CALLI R15 0x00A2
PUSHR R0 R15
COPY R0 R12
LOADUI R1 0x0698
CALLI R15 0xFE12
JUMP.NZ R0 0x0014
CALLI R15 0x014C
POPR R0 R15
JUMP.NP R0 0x0068
JUMP 0xFFCC
POPR R0 R15
CALLI R15 0x0134
LOADR16 R0 0x03F8
ADDU R14 R14 R0
STORE R13 R12 0x0000
COPY R13 R12
COPY R12 R14
CALLI R15 0x004C
LOADR16 R0 0x03D6
STOREX R12 R13 R0
ADDUI R14 R14 0x0001
COPY R12 R14
CALLI R15 0x0032
PUSHR R0 R15
LOADR16 R0 0x03BA
STOREX R12 R13 R0
ADDUI R14 R14 0x0001
COPY R12 R14
POPR R0 R15
JUMP.P R0 0xFF68
POPR R2 R15
POPR R1 R15
POPR R0 R15
RET R15
PUSHR R1 R15
PUSHR R2 R15
LOADUI R1 0x1100
FGETC
JUMP.NP R0 0x009E
CMPSKIPI.NE R0 0x000A
JUMP 0x0094
CMPSKIPI.NE R0 0x0009
JUMP 0x008A
CMPSKIPI.NE R0 0x0020
JUMP 0x0080
COPY R2 R0
LOADUI R1 0x03C2
CALLI R15 0xFD98
LOADUI R1 0x1100
JUMP.NZ R0 0x0044
COPY R0 R2
CMPSKIPI.NE R0 0x0022
JUMP 0x0048
CMPSKIPI.NE R0 0x0027
JUMP 0x003E
PUSH8 R2 R14
LOADUI R1 0x1100
FGETC
COPY R2 R0
LOADUI R1 0x03C6
CALLI R15 0xFD56
JUMP.Z R0 0xFFDC
MOVE R0 R2
JUMP 0x0020
FGETC
CMPSKIPI.NE R0 0x000A
JUMP 0x0012
JUMP 0xFFEE
PUSH8 R0 R14
FGETC
CMPJUMPI.NE R0 R2 0xFFF2
POPR R2 R15
POPR R1 R15
RET R15
'233B'
'00002009'
'0A00'
PUSHR R0 R15
CMPJUMPI.E R12 R14 0x0008
POP8 R0 R14
JUMP 0xFFF2
POPR R0 R15
RET R15
JUMP.NP R0 0x016C
CALLI R15 0xFFDA
CALLI R15 0xFF0A
CMPJUMPI.E R12 R14 0xFFE8
COPY R2 R0
LOAD8 R0 R12 0x0000
LOADUI R1 0x055A
CALLI R15 0xFCCC
JUMP.Z R0 0x0022
COPY R0 R12
LOADUI R1 0x1101
CALLI R15 0xFCFA
LOADUI R0 0x000A
FPUTC
MOVE R0 R2
JUMP 0xFFAA
COPY R0 R12
LOADUI R1 0x0698
CALLI R15 0xFC3A
JUMP.Z R0 0x001C
CALLI R15 0xFF74
CALLI R15 0xFEA4
CALLI R15 0xFF68
CALLI R15 0xFE98
JUMP 0xFF78
LOAD8 R0 R12 0x0000
CMPSKIPI.E R0 0x0022
JUMP 0x001E
LOADUI R1 0x1101
CALLI R15 0x010E
LOADUI R0 0x000A
FPUTC
MOVE R0 R2
JUMP 0xFF4A
CMPSKIPI.E R0 0x0027
JUMP 0x0024
ADDUI R0 R12 0x0001
LOADUI R1 0x1101
CALLI R15 0xFC6C
LOADUI R0 0x000A
FPUTC
MOVE R0 R2
JUMP 0xFF1C
CALLI R15 0x0172
JUMP.Z R0 0x001E
LOADUI R1 0x1101
CALLI R15 0xFC42
LOADUI R0 0x000A
FPUTC
MOVE R0 R2
JUMP 0xFEF2
COPY R0 R12
LOAD8 R1 R12 0x0000
CALLI R15 0xFC4A
CMPSKIPI.E R1 0x0030
JUMP.Z R0 0x001E
LOADUI R1 0x1101
CALLI R15 0x00DE
LOADUI R0 0x000A
FPUTC
MOVE R0 R2
JUMP 0xFEB8
FALSE R1
LOADUI R0 0x0562
CALLI R15 0xFBE6
MOVE R0 R12
CALLI R15 0xFBDC
LOADUI R0 0x0576
CALLI R15 0xFBD0
HALT
RET R15
'3A21'
'40242526'
'00000A55'
'6E6B6E6F'
'776E206F'
'74686572'
'3A20'
NOP
'0A41'
'626F7274'
'696E6720'
'746F2070'
'72657665'
'6E742070'
'726F626C'
'656D730A'
'0000'
PUSHR R2 R15
PUSHR R3 R15
PUSHR R12 R15
ADDUI R12 R12 0x0001
FALSE R3
LOADXU16 R0 R12 R3
ANDI R2 R0 0x00FF
CALLI R15 0x003C
ADDUI R3 R3 0x0002
JUMP.NZ R2 0xFFE4
FALSE R0
ANDI R3 R3 0x0003
JUMP.Z R3 0x0010
CALLI R15 0x002E
ADDUI R3 R3 0x0001
JUMP 0xFFE0
POPR R12 R15
POPR R3 R15
POPR R2 R15
RET R15
PUSHR R0 R15
SR0I R0 0x0008
CALLI R15 0x0004
POPR R0 R15
PUSHR R0 R15
SR0I R0 0x0004
CALLI R15 0x0004
POPR R0 R15
ANDI R0 R0 0x000F
ADDUI R0 R0 0x0030
CMPSKIPI.LE R0 0x0039
ADDUI R0 R0 0x0007
FPUTC
RET R15
PUSHR R1 R15
PUSHR R2 R15
COPY R2 R13
JUMP.Z R2 0x002E
LOADR16 R1 0x0038
LOADX R0 R2 R1
COPY R1 R12
CALLI R15 0xFA1E
JUMP.NZ R0 0x000A
LOAD R2 R2 0x0000
JUMP 0xFFD6
LOADR16 R1 0x0016
LOADX R2 R2 R1
MOVE R0 R2
POPR R2 R15
POPR R1 R15
RET R15
'00'
ADD.CI R0 R2 R0 R0
'030000'
'44454649'
'4E450000'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment