Advertisement
Zoinkity

DOGE2

Sep 10th, 2018
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.41 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import N64
  5. import argparse, os
  6.  
  7. cart = N64.Cart(b'\x807\x12@\x00\x00\x00\x0f\x80\x00\x04\x00\x00\x00\x14D\xff\xff\xff\xff'
  8.      b'\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00DOGEmu self-unloading bootst'
  9.      b'rap\x00@\x80h\x00@\x80H\x00@\x80X\x00<\x08\xa4p%\x08\x00\x00\x8d\t\x00\x0c'
  10.      b"\x15 \x00\xed\x00\x00\x00\x00'\xbd\xff\xe8\xaf\xb3\x00\x00\xaf\xb4\x00\x04"
  11.      b'\xaf\xb5\x00\x08\xaf\xb6\x00\x0c\xaf\xb7\x00\x10<\x08\xa4p%\x08\x00\x00'
  12.      b'<\n\xa3\xf8<\x0b\xa3\xf0<\x0c\xa40%\x8c\x00\x004\t\x00@\xad\t\x00\x04'
  13.      b'$\x11\x1f@\x00\x00\x00\x00"1\xff\xff\x16 \xff\xfd\x00\x00\x00\x00'
  14.      b'\xad\x00\x00\x084\t\x00\x14\xad\t\x00\x0c\xad\x00\x00\x00$\x11\x00\x04'
  15.      b'\x00\x00\x00\x00"1\xff\xff\x16 \xff\xfd\x00\x00\x00\x004\t\x00\x0e'
  16.      b'\xad\t\x00\x00$\x11\x00 "1\xff\xff\x16 \xff\xfe4\t\x01\x0f\xad\x89\x00\x00'
  17.      b'<\t\x18\x085)(8\xadI\x00\x08\xad@\x00\x14<\t\x80\x00\xadI\x00\x04\x00\x00h%'
  18.      b'\x00\x00p%<\x0f\xa3\xf0\x00\x00\xc0%<\x19\xa3\xf0<\x16\xa0\x00\x00\x00\xb8%'
  19.      b"<\x06\xa3\xf0<\x07\xa0\x00\x00\x00\x90%<\x14\xa0\x00'\xbd\xff\xb8"
  20.      b'\x03\xa0\xf0%<\x10\xa40\x8e\x10\x00\x04<\x11\x01\x01&1\x01\x01'
  21.      b'\x16\x11\x00\x05\x00\x00\x00\x00$\x10\x02\x005q@\x00\x10\x00\x00\x03'
  22.      b'\x00\x00\x00\x00$\x10\x04\x005q\x80\x00\xae.\x00\x04%\xf5\x00\x0c'
  23.      b'\r\x00\x01\xde\x00\x00\x00\x00\x10@\x008\x00\x00\x00\x00\xaf\xa2\x00\x00'
  24.      b'$\t \x00\xad\x89\x00\x00\x8d\xeb\x00\x00<\x08\xf0\xff\x01hX$\xaf\xab\x00\x04'
  25.      b'#\xbd\x00\x08$\t\x10\x00\xad\x89\x00\x00<\x08\xb0\x19\x15h\x00\x0c'
  26.      b'\x00\x00\x00\x00<\x08\x08\x00\x03\x08\xc0 \x030\xc8 \x030\xc8 <\x08\x00 '
  27.      b'\x02\xc8\xb0 \x02\x88\xa0 \x00\x12\x90@"R\x00\x01\x10\x00\x00\x03'
  28.      b'\x00\x00\x00\x00<\x08\x00\x10\x02\x88\xa0 $\x08 \x00\xad\x88\x00\x00'
  29.      b'\x8d\xe9\x00$\x8d\xfa\x00\x00$\x08\x10\x00\xad\x88\x00\x001)\xff\xff'
  30.      b'$\x08\x05\x00\x15(\x00\t\x00\x00\x00\x00<\x1b\x01\x00\x03[\xd0$\x17@\x00\x05'
  31.      b'\x00\x00\x00\x00<\x08\x10\x1c5\x08\n\x04\xad\xe8\x00\x18\x10\x00\x00\x03'
  32.      b'<\x08\x08\x0c5\x08\x12\x04\xad\xe8\x00\x18<\x08\x08\x00\x01\xc8p \x01\xf0x '
  33.      b'\x01\xf0x %\xad\x00\x01-\xa8\x00\x08\x15\x00\xff\xc4\x00\x00\x00\x00'
  34.      b'<\x08\xc4\x00\xadH\x00\x0c<\x08\x80\x00\xadH\x00\x04\x03\xc0\xe8%'
  35.      b'\x00\x00\x18%\x8f\xa9\x00\x04<\x08\xb0\t\x15(\x00\x16\x00\x00\x00\x00'
  36.      b"\xae8\x00\x04'5\x00\x0c\x8f\xa4\x00\x00#\xbd\x00\x08$\x05\x00\x01"
  37.      b'\r\x00\x02\x90\x00\x00\x00\x00\x8e\xc8\x00\x00<\x08\x00\x08\x01\x16@ '
  38.      b'\x8d\t\x00\x00\x8e\xc8\x00\x00<\x08\x00\x08\x01\x16@ \x8d\t\x00\x00'
  39.      b'<\x08\x04\x00\x01\xc8p \x030\xc8 <\x08\x00\x10\x02\xc8\xb0 \x10\x00\x00!'
  40.      b'\xae7\x00\x04$\xd5\x00\x0c\x8f\xa4\x00\x00#\xbd\x00\x08$\x05\x00\x01'
  41.      b'\r\x00\x02\x90\x00\x00\x00\x00\x8c\xe8\x00\x00<\x08\x00\x08\x01\x07@ '
  42.      b'\x8d\t\x00\x00<\x08\x00\x10\x01\x07@ \x8d\t\x00\x00<\x08\x00\x18\x01\x07@ '
  43.      b'\x8d\t\x00\x00\x8c\xe8\x00\x00<\x08\x00\x08\x01\x07@ \x8d\t\x00\x00'
  44.      b'<\x08\x00\x10\x01\x07@ \x8d\t\x00\x00<\x08\x00\x18\x01\x07@ \x8d\t\x00\x00'
  45.      b'<\x08\x08\x00\x02\xe8\xb8 \x00\xd00 \x00\xd00 <\x08\x00 \x00\xe88 $c\x00\x01'
  46.      b'\x00m@*\x15\x00\xff\xc3\x00\x00\x00\x00<\n\xa4p\x00\x12\x94\xc0<\t\x00\x06'
  47.      b'5)64\x012H%\xadI\x00\x10\x8dI\x00\x10<\x08\xa0\x005\x08\x03\x00<\t\x0f\xff'
  48.      b"5)\xff\xff\x02\xc9\xb0$\xad\x16\x00\x18\x03\xc0\xe8%'\xbd\x00H"
  49.      b'\x8f\xb3\x00\x00\x8f\xb4\x00\x04\x8f\xb5\x00\x08\x8f\xb6\x00\x0c'
  50.      b"\x8f\xb7\x00\x10'\xbd\x00\x18<\x08\x80\x00%\x08\x00\x00%\t@\x00%)\xff\xe0"
  51.      b'@\x80\xe0\x00@\x80\xe8\x00\xbd\x08\x00\x00\x01\t\x08+\x14 \xff\xfd%\x08\x00 '
  52.      b'<\x08\x80\x00%\x08\x00\x00%\t \x00%)\xff\xf0\xbd\t\x00\x00\x01\t\x08+'
  53.      b'\x14 \xff\xfd%\x08\x00\x10\x10\x00\x00\x13\x00\x00\x00\x00<\x08\x80\x00'
  54.      b'%\x08\x00\x00%\t@\x00%)\xff\xe0@\x80\xe0\x00@\x80\xe8\x00\xbd\x08\x00\x00'
  55.      b'\x01\t\x08+\x14 \xff\xfd%\x08\x00 <\x08\x80\x00%\x08\x00\x00%\t \x00'
  56.      b'%)\xff\xf0\xbd\x01\x00\x00\x01\t\x08+\x14 \xff\xfd%\x08\x00\x10<\n\xa4\x00'
  57.      b'%J\x00\x00<\x0b\xff\xf0<\t\x00\x10\x01KP$<\x08\xa4\x00%)\xff\xff'
  58.      b'<\x0b\xa4\x00%\x08\x04\xc0%k\x07t\x01\t@$\x01iX$<\t\xa0\x00\x01\n@%\x01jX%'
  59.      b'%)\x00\x00\x8d\r\x00\x00%\x08\x00\x04\x01\x0b\x08+%)\x00\x04\x14 \xff\xfb'
  60.      b'\xad-\xff\xfc<\x0c\x80\x00%\x8c\x00\x00\x01\x80\x00\x08\x00\x00\x00\x00'
  61.      b'<\x0b\xb0\x00\x8di\x00\x08<\n\x1f\xff5J\xff\xff<\x01\xa4`\x01*H$'
  62.      b'\xac)\x00\x00<\x08\xa4`\x8d\x08\x00\x101\x08\x00\x02U\x00\xff\xfd<\x08\xa4`'
  63.      b'$\x08\x10\x00\x01\x0b@ \x01\n@$<\x01\xa4`\xac(\x00\x04<\n\x00\x10%J\xff\xff'
  64.      b'<\x01\xa4`\xac*\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  65.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  66.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  67.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  68.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  69.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  70.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  71.      b'\x00\x00\x00\x00<\x0b\xa4`\x8dk\x00\x101k\x00\x01\x15`\xff\xe0'
  72.      b'\x00\x00\x00\x00<\x0b\xb0\x00\x8dd\x00\x08\x02\xc0(%<\x01]X4!\x8be'
  73.      b"\x00\xa1\x00\x19'\xbd\xff\xe0\xaf\xbf\x00\x1c\xaf\xb0\x00\x14<\x1f\x00\x10"
  74.      b'\x00\x00\x18%\x00\x00@%\x00\x80H%$\r\x00 \x00\x00\x10\x12$B\x00\x01\x00@8%'
  75.      b'\x00@P%\x00@X%\x00@\x80%\x00@0%\x00@`%\x8d"\x00\x00\x00\xe2\x18!\x00g\x08+'
  76.      b'\x10 \x00\x02\x00`(%%J\x00\x010C\x00\x1f\x01\xa3x#\x01\xe2\xc0\x06\x00bp\x04'
  77.      b'\x01\xd8 %\x00\xc2\x08+\x00\xa08%\x01bX&\x10 \x00\x04\x02\x04\x80!'
  78.      b'\x00\xe2\xc8&\x10\x00\x00\x02\x03&0&\x00\xc40&%\x08\x00\x04\x00Px&%)\x00\x04'
  79.      b'\x15\x1f\xff\xe8\x01\xec`!\x00\xeap&\x01\xcb8&\x02\x06\xc0&\x03\x0c\x80&'
  80.      b'<\x0b\xb0\x00\x8dh\x00\x10\x14\xe8\x00\x06\x00\x00\x00\x00\x8dh\x00\x14'
  81.      b'\x16\x08\x00\x03\x00\x00\x00\x00\x04\x11\x00\x03\x00\x00\x00\x00'
  82.      b'\x04\x11\xff\xff\x00\x00\x00\x00<\t\xa4\x08\x8d)\x00\x00\x8f\xb0\x00\x14'
  83.      b"\x8f\xbf\x00\x1c\x11 \x00\x06'\xbd\x00 $\n\x00A<\x01\xa4\x04\xac*\x00\x10"
  84.      b'<\x01\xa4\x08\xac \x00\x00<\x0b\x00\xaa5k\xaa\xae<\x01\xa4\x04\xac+\x00\x10'
  85.      b'<\x01\xa40$\x08\x05U\xac(\x00\x0c<\x01\xa4\x80\xac \x00\x18<\x01\xa4P'
  86.      b'\xac \x00\x0c<\x01\xa40$\t\x08\x00\xac)\x00\x00$\t\x00\x02<\x01\xa4`'
  87.      b'<\x08\xa0\x005\x08\x03\x00\xac)\x00\x10\xad\x17\x00\x14\xad\x15\x00\x0c'
  88.      b'\xad\x13\x00\x04\x12`\x00\x04\xad\x14\x00\x00<\t\xa6\x00\x10\x00\x00\x03'
  89.      b'%)\x00\x00<\t\xb0\x00%)\x00\x00\xad\t\x00\x08<\x08\xa4\x00%\x08\x00\x00'
  90.      b'!\t\x10\x00%\x08\x00\x04\x15\t\xff\xfe\xad\x00\xff\xfc<\x08\xa4\x00'
  91.      b'%\x08\x10\x00!\t\x10\x00%\x08\x00\x04\x15\t\xff\xfe\xad\x00\xff\xfc'
  92.      b'<\x0b\xb0\x00\x8di\x00\x08\x01 \x00\x08\x00\x00\x00\x00\x00\x00\x00\x00'
  93.      b"'\xbd\xff`\xaf\xb0\x00@\xaf\xb1\x00D\x00\x00\x88%\x00\x00\x80%"
  94.      b'\xaf\xa2\x00\x00\xaf\xa3\x00\x04\xaf\xa4\x00\x08\xaf\xa5\x00\x0c'
  95.      b'\xaf\xa6\x00\x10\xaf\xa7\x00\x14\xaf\xa8\x00\x18\xaf\xa9\x00\x1c'
  96.      b'\xaf\xaa\x00 \xaf\xab\x00$\xaf\xac\x00(\xaf\xad\x00,\xaf\xae\x000'
  97.      b'\xaf\xaf\x004\xaf\xb8\x008\xaf\xb9\x00<\xaf\xb2\x00H\xaf\xb3\x00L'
  98.      b'\xaf\xb4\x00P\xaf\xb5\x00T\xaf\xb6\x00X\xaf\xb7\x00\\\xaf\xbe\x00`'
  99.      b'\xaf\xbf\x00d\r\x00\x02 \x00\x00\x00\x00&\x10\x00\x01*\t\x00\x04'
  100.      b'\x15 \xff\xfb\x02"\x88!\x00\x11 \x82\r\x00\x02\x90$\x05\x00\x01\x8f\xbf\x00d'
  101.      b'\x00\x11\x10\x82\x8f\xb1\x00D\x8f\xa3\x00\x04\x8f\xa4\x00\x08'
  102.      b'\x8f\xa5\x00\x0c\x8f\xa6\x00\x10\x8f\xa7\x00\x14\x8f\xa8\x00\x18'
  103.      b'\x8f\xa9\x00\x1c\x8f\xaa\x00 \x8f\xab\x00$\x8f\xac\x00(\x8f\xad\x00,'
  104.      b'\x8f\xae\x000\x8f\xaf\x004\x8f\xb8\x008\x8f\xb9\x00<\x8f\xb0\x00@'
  105.      b'\x8f\xb2\x00H\x8f\xb3\x00L\x8f\xb4\x00P\x8f\xb5\x00T\x8f\xb6\x00X'
  106.      b"\x8f\xb7\x00\\\x8f\xbe\x00`\x03\xe0\x00\x08'\xbd\x00\xa0'\xbd\xff\xe0"
  107.      b'\xaf\xbf\x00\x1c\x00\x00H%\x00\x00X%\x00\x00`%)\x9a\x00@S@\x00\x18'
  108.      b'\x00\x00\x10%\r\x00\x02C\x01\x80 %X@\x00\x08):\x00P\x00I\xd0#\x03L\x00\x19'
  109.      b'\x00@H%\x00\x00\xd0\x12\x01zX!\x00\x00\x00\x00):\x00P\x17@\xff\xf1'
  110.      b'%\x8c\x00\x01\x00\x0b \x80\x00\x8b #\x00\x04 \x80\x00\x8b #\x00\x04 @'
  111.      b'\r\x00\x02`$\x84\xfc\x90\x10\x00\x00\x03\x8f\xbf\x00\x1c\x00\x00\x10%'
  112.      b"\x8f\xbf\x00\x1c'\xbd\x00 \x03\xe0\x00\x08\x00\x00\x00\x00'\xbd\xff\xd8"
  113.      b'\xaf\xbf\x00\x1c\x00\x00\x10%\r\x00\x02\x90$\x05\x00\x02\x00\x00\xf0%'
  114.      b'$\x1a\xff\xff\xae\x9a\x00\x04\x8e\x83\x00\x04\xae\x9a\x00\x00'
  115.      b'\xae\x9a\x00\x00\x00\x00\xe0%\x00\x03\x1c\x020z\x00\x01S@\x00\x03'
  116.      b"'\x9c\x00\x01$B\x00\x01'\x9c\x00\x01+\x9a\x00\x08\x17@\xff\xf9\x00\x03\x18B"
  117.      b"'\xde\x00\x01+\xda\x00\nW@\xff\xef$\x1a\xff\xff\x8f\xbf\x00\x1c'\xbd\x00("
  118.      b"\x03\xe0\x00\x08\x00\x00\x00\x00'\xbd\xff\xd8\xaf\xbf\x00\x1c\xaf\xa4\x00 "
  119.      b"\xa3\xa0\x00'\x00\x00@%\x00\x00P%4\r\xc8\x00\x00\x00p%)\xda\x00@W@\x00\x04"
  120.      b'\x01\xc0 %\x10\x00\x00 \x00\x00\x10%\x01\xc0 %\r\x00\x02\x90$\x05\x00\x01'
  121.      b"\r\x00\x02\xb4'\xa4\x00'\r\x00\x02\xb4'\xa4\x00'\x93\xba\x00'$\x1b\x03 "
  122.      b'\x8f\xa4\x00 \x03[\x00\x19\x00\x00@\x12\x01\x04\xd0#\x07C\x00\x03\x03M\xd8*'
  123.      b'\x00\x88\xd0#\x03M\xd8*S`\x00\x04\x8f\xa4\x00 \x03@h%\x01\xc0P%\x8f\xa4\x00 '
  124.      b'\x01\x04\xd8*S`\x00\x06\x01N\x10!%\xce\x00\x01)\xdb\x00AW`\xff\xe0)\xda\x00@'
  125.      b"\x01N\x10!\x00\x02\x10B\x8f\xbf\x00\x1c'\xbd\x00(\x03\xe0\x00\x08"
  126.      b"\x00\x00\x00\x00'\xbd\xff\xd80\x84\x00\xff$\x1b\x00\x018\x84\x00?"
  127.      b'\xaf\xbf\x00\x1c\x14\xbb\x00\x03<\x0fF\x00<\x1a\x80\x00\x01\xfax%'
  128.      b'0\x9a\x00\x01\x00\x1a\xd1\x80\x01\xfax%0\x9a\x00\x02\x00\x1a\xd3@\x01\xfax%'
  129.      b'0\x9a\x00\x04\x00\x1a\xd5\x00\x01\xfax%0\x9a\x00\x08\x00\x1a\xd1\x00'
  130.      b'\x01\xfax%0\x9a\x00\x10\x00\x1a\xd2\xc0\x01\xfax%0\x9a\x00 \x00\x1a\xd4\x80'
  131.      b'\x01\xfax%$\x1b\x00\x01\x14\xbb\x00\x03\xae\xaf\x00\x00<\x1a\xa40'
  132.      b"\xaf@\x00\x00\x8f\xbf\x00\x1c'\xbd\x00(\x03\xe0\x00\x08\x00\x00\x00\x00"
  133.      b"'\xbd\xff\xd8\xaf\xbf\x00\x1c$\x1a \x00<\x1b\xa40\xafz\x00\x00\x00\x00\xf0%"
  134.      b'\x8e\xbe\x00\x00$\x1a\x10\x00\xafz\x00\x00$\x1b\x00@\x03~\xd8$'
  135.      b'\x00\x1b\xd9\x82\x00\x00\xd0%\x03[\xd0%$\x1b@\x00\x03~\xd8$\x00\x1b\xdbB'
  136.      b'\x03[\xd0%<\x1b\x00@\x03~\xd8$\x00\x1b\xdd\x02\x03[\xd0%$\x1b\x00\x80'
  137.      b'\x03~\xd8$\x00\x1b\xd9\x02\x03[\xd0%4\x1b\x80\x00\x03~\xd8$\x00\x1b\xda\xc2'
  138.      b'\x03[\xd0%<\x1b\x00\x80\x03~\xd8$\x00\x1b\xdc\x82\x03[\xd0%\xa0\x9a\x00\x00'
  139.      b"\x8f\xbf\x00\x1c'\xbd\x00(\x03\xe0\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00"
  140.      b'\x02\x00\x10\x01@\n\x00\x88\x04@"\x02\x08\x10A\xff\x08\x08@D\x01 \x08\x7f'
  141.      b'\x02\x04\x10\x10\x80\x84\x04 A\xfe\x08\x08@"\x01\x10\x08\x80D\x04'
  142.      b'?\xc0\x07\x00\xc6\x08\x08\x80$\x01@\x02\x00\x10\x00\x80\x02\x00\x90\x04'
  143.      b'@A\x8c\x03\x80~\x02\x0c\x10\x10\x80D\x02 \t\x00H\x02@\x12\x01\x10\x08\x80'
  144.      b'\x84\x18?\x00\x7f\xe2\x00\x10\x00\x80\x04\x00 \x01\xff\x08\x00@\x02\x00'
  145.      b'\x10\x00\x80\x04\x00?\xf0\x7f\xe2\x00\x10\x00\x80\x04\x00 \x01\xff\x08\x00'
  146.      b'@\x02\x00\x10\x00\x80\x04\x00 \x00\x07\x00\xc6\x08\x08\x80$\x01@\x02'
  147.      b'\x00\x10\x00\x83\xf2\x00\x90\x04@a\x8d\x03\x88@\x12\x00\x90\x04\x80$'
  148.      b'\x01 \t\xff\xc8\x02@\x12\x00\x90\x04\x80$\x01 \x08\x07\x00\x10\x00'
  149.      b'\x80\x04\x00 \x01\x00\x08\x00@\x02\x00\x10\x00\x80\x04\x00 \x03\x80\x00'
  150.      b'@\x02\x00\x10\x00\x80\x04\x00 \x01\x00\x08\x00B\x02\x10\x10\x80\x82\x08'
  151.      b'\x0f\x80@"\x02\x10 \x82\x04 "\x01 \n\x80b\x02\x08\x10 \x80\x84\x02 '
  152.      b'\x08@\x02\x00\x10\x00\x80\x04\x00 \x01\x00\x08\x00@\x02\x00\x10\x00\x80'
  153.      b'\x04\x00?\xf0\x80\x0c\x00p\x07@Z\x02\xc8&A1\x11\x88\x8c(aC\x04\x18 \xc0\x04@'
  154.      b'#\x01\x14\x08\xa0D\x82"\x11\x10\x88DB"\t\x10(\x81D\x06 \x10\x0f\x01'
  155.      b'\x86\x10\x08\x80H\x01@\n\x00P\x02\x80\x14\x00\x90\x08\x80C\x0c\x07'
  156.      b'\x80\x7f\x82\x02\x10\x08\x80D\x02 \x11\x01\x0f\xf0@\x02\x00\x10\x00\x80'
  157.      b'\x04\x00 \x00\x0f\x01\x86\x10\x08\x80H\x01@\n\x00P\x02\x80\x14\x10\x90H\x81C'
  158.      b'\x0c\x07\x90\x7f\x82\x02\x10\x08\x80D\x02 !\xfe\x08 @\x82\x04\x10'
  159.      b'\x10\x80\x84\x02 \x10\x1f\x81\x02\x10\x08\x80D\x00\x10\x00p\x00p\x00'
  160.      b'@\x01\x10\x08\x80B\x04\x0f\xc0\x7f\xf0\x10\x00\x80\x04\x00 \x01\x00\x08'
  161.      b'\x00@\x02\x00\x10\x00\x80\x04\x00 \x01\x00@"\x01\x10\x08\x80D\x02'
  162.      b' \x11\x00\x88\x04@"\x01\x08\x10@\x81\x08\x07\x80@\x12\x00\x88\x08@B\x02\x08'
  163.      b' A\x01\x10\x08\x80D\x01@\n\x00 \x01\x00\x82\x0c\x10`\x82\x8a$Q"\x89'
  164.      b'\x14E\x14(\xa1E\n( \x81\x04\x08 @\x11\x01\x04\x10 \x80\x88\x02\x80\x08'
  165.      b'\x00@\x05\x00D\x04\x10 \x82\x02 \x08@\x11\x01\x08\x08 \x80\x88\x04@\x14\x00'
  166.      b'@\x02\x00\x10\x00\x80\x04\x00 \x01\x00\x7f\xe0\x01\x00\x10\x01\x00\x08\x00'
  167.      b'\x80\x08\x00\x80\x08\x00\x80\x04\x00@\x04\x00?\xf0\x0f\x80\x82\x08\x08@'
  168.      b'B\x02\x10\x10\x80\x84\x04 !\x01\x08\x08@A\x04\x07\xc0\x02\x000'
  169.      b'\x02\x80\x04\x00 \x01\x00\x08\x00@\x02\x00\x10\x00\x80\x04\x00 \x01\x00'
  170.      b'\x0f\x00\x84\x08\x10@\x80\x04\x00 \x02\x00 \x02\x00 \x02\x00 \x02'
  171.      b'\x00\x1f\xe0\x0f\x00\x84\x08\x10@\x80\x04\x00@\x1c\x00\x10\x00@\x02\x08'
  172.      b'\x10@\x81\x08\x07\x80\x01\x00\x18\x00\xc0\n\x00\x90\x04\x80D\x04 !'
  173.      b'\x02\x08\x1f\xf8\x02\x00\x10\x00\x80\x1f\x81\x00\x08\x00@\x02'
  174.      b'\x00\x17\x80\xc2\x04\x08\x00@\x02\x08\x10@\x81\x08\x07\x80\x0f\x00\x84\x08'
  175.      b'\x10@\x82\x00\x10\x00\xbc\x06\x10 A\x02\x08\x10@\x81\x08\x07\x80?'
  176.      b'\xc0\x02\x00 \x01\x00\x10\x00\x80\x04\x00@\x02\x00\x10\x01\x00\x08\x00@'
  177.      b'\x02\x00\x0f\x00\x84\x08\x10@\x82\x04\x08@<\x02\x10 A\x02\x08\x10'
  178.      b'@\x81\x08\x07\x80\x0f\x00\x84\x08\x10@\x82\x04\x10 C\x01\xe8\x00@'
  179.      b'\x02\x08\x10@\x81\x08\x07\x80\x02\x00\x10\x00\x80\x04\x00 \x01\x00\x08\x00'
  180.      b'@\x02\x00\x10\x00\x00\x00\x00 \x01\x00\xd8\x06\xc0\x12\x01 \x00\x00\x00'
  181.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04@"\x01\x10\x08'
  182.      b'\x87\xff\x04@"\x01\x10\x08\x83\xff\x84@"\x01\x10\x08\x80\xc0\x06\x00'
  183.      b'\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  184.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x80DA$\x05@\x1c\x00@\x07\x00T\x04\x90D@'
  185.      b' \x00\x00\x00\x00\x00\x00\x80\x04\x00 \x01\x00\x08\x0f\xfe\x02\x00\x10\x00'
  186.      b'\x80\x04\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  187.      b'\x00\x00\x00\x00\x00\x000\x01\x80\x04\x00@\x00\x00\x00\x00\x00\x00\x00\x00'
  188.      b'\x00\x00\x00\x00\x0f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  189.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  190.      b'0\x01\x80\x00\x00\x00\x00\x00\x00\x00@\x04\x00@\x04\x00@\x04\x00@'
  191.      b'\x04\x00@\x04\x00@\x04\x00@\x00\x00\x00\x00\x00\x00\x0c\x00`\x00\x00'
  192.      b'\x00\x00\x00\x00\x00\x00\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00'
  193.      b'\x00\x00\x00\x00\x00?\xf8\x00\x00\x00\x00\x03\xff\x80\x00\x00'
  194.      b'\x00\x00\x00\x00\x07\x00D\x04\x10 \x80\x04\x00@\x04\x00@\x02\x00\x10'
  195.      b'\x00\x00\x00\x00 \x01\x00\x07\x00\xc6\x08\x08\x80$1BJ"Q"\x89"6\x10\x02@!\x86'
  196.      b'\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  197.      b'\x00\x00\x00\x00<\x03\xbf\xc04c\x07\xfc$\x02\x00\x08\xacb\x00\x00'
  198.      b'\x0c\x00\x01S$\x08\x00\xf0\x0c\x00\x01M<\x04\x14\x00\x0c\x00\x01M'
  199.      b'\x8dh\x00\x18\xad(\x00\x00\x0c\x00\x01S$\x08\x00\xd0\x0c\x00\x01M<\x05\x00 '
  200.      b'$\x06\x13\xff\xac%\x00\x00$\x88\xec\x00\xac(\x00\x04\xac&\x00\x0c'
  201.      b'\x0c\x00\x01M<\x04\x10\x00\xac%\x00\x00\xac$\x00\x04\xac&\x00\x08'
  202.      b'\x0c\x00\x01M<\x1d\x80?\x0c\x00\x01S$\x08\x00\xf1<\x04\xa4\x00\x0c\x00\x01M'
  203.      b'<\x05\x80\x004\x84\x10\x00\x8db\x06\x1c$\xa5\x06\x80$\x86\x01\x10\x00\x04X%'
  204.      b'\x8c\xa8\x00\x00\x00\x00\x00\x0f\xac\x88\x00\x00\xbc\x90\x00\x00'
  205.      b' \x84\x00\x04 \xa5\x00\x04\x14\x86\xff\xf97\xbd\xff\xf0<\x01\xa0\x00'
  206.      b'0B\x00\xff\x00"\x18!\x90v\x05\x80\x8c4\x03\x00\x8c3\x03\x04\x8c5\x03\x0c'
  207.      b'\x8c(\x03\x18\x8c7\x03\x14\x01`\x00\x08\xac(\x03\xf0DOGEmu20UL; thanks LaC f'
  208.      b'or letting me pilfer your code! For use w/64drive hw1 only!\x00\x8c"\x00\x10'
  209.      b'0C\x00\x03\x14`\xff\xfd\x00\x00\x00\x00\x03\xe0\x00\x08\x00\x00\x00\x00'
  210.      b'\x8c"\x00\x100C\x00\x03\x14`\xff\xfd<\t\xb8\x00\x8d"\x02\x000C\xff\x00'
  211.      b'\x14`\xff\xfa\x8c"\x00\x100C\x00\x03\x14`\xff\xfd\x00\x00\x00\x00'
  212.      b'\x03\xe0\x00\x08\xad(\x02\x08????\xac??\x85\xdd???\xdd???????????????????'
  213.      b'????????????????????????????????????\xdd???????????????????????????????????'
  214.      b'?\xdd???????????????????????????????????????????????\xde??????????????????'
  215.      b'????????????????????????????????????????????????????\x91???????x???????????'
  216.      b'??\xdd?????????<\r\xbf\xc0\x8d\xa9\x07\xfc%\xad\x07\xc01)\x00\x80U \xff\xfc'
  217.      b'<\r\xbf\xc0<\x0b\xb0\x002s\x00\x01\x12`\x00\x022\xf7\x00\x01<\x0b\xa6\x00'
  218.      b'\x8d\xa8\x00<$\t\x00\x102\xd6\x00\xff2\xb5\x00\x01\x01\t@%<\t\xa4\x80'
  219.      b'\x8d)\x00\x181)\x00\x02U \xff\xfd<\t\xa4\x80\xad\xa8\x00<<\x0c\xa4`'
  220.      b'$\x08\x00\xff\xad\x88\x00\x14\xad\x88\x00\x18$\x08\x00\x0f\xad\x88\x00\x1c'
  221.      b'$\x08\x00\x03\xad\x88\x00 \x8di\x00\x00<\r\xa4\x10%\x8c\x00\x001(\x00\xff'
  222.      b'\xad\x88\x00\x14\x00\tB\x02\xad\x88\x00\x18\x00\tD\x02\xad\x88\x00\x1c'
  223.      b'\x00\tE\x02\xad\x88\x00 \x8d\xaf\x00\x0c \x08\x0f\xc0!k\x00@1\xef\x00\x01'
  224.      b'\x11\xe0\x00\x07%\xad\x00\x0c<\r\xa4\x10\x8d\xaf\x00\x0c%\xad\x00\x0c'
  225.      b'1\xef\x00 U\xe0\xff\xfc<\r\xa4\x10<\r\xa4\x00\x00\x080%%\xad\x00@'
  226.      b'\x8di\x00\x00!\x08\xff\xfc!k\x00\x04!\xad\x00\x04\x15\x00\xff\xfb'
  227.      b'\xad\xa9\xff\xfc<\x0b\xa4\x00%k\x00@\x01`\x00\x08@\x80H\x00\x00\x00\x00\x00'
  228.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  229.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  230.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  231.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  232.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  233.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  234.      b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
  235.      b'\x00\x00\x00\x00')
  236.  
  237.  
  238. Saves = (# 1: eeprom 4k
  239.          frozenset(('NAD','NB6','NBC','NBD','NBH','NBK','NBM','NBN','NBV','NCG','NCH','NCT','NCU','NCX','ND3','NDQ','NDR','NDU','NDY','NEA','NER','NF2','NFH','NFW','NFX','NGC','NGE','NGF','NGU','NGV','NHA','NHF','NIC','NIJ','NJM','NK2','NK4','NKA','NKI','NKT','NLB','NLL','NLR','NMI','NML','NMO','NMR','NMU','NMW','NN6','NNA','NPG','NPW','NPY','NR7','NRC','NRS','NS6','NSA','NSC','NSM','NSS','NSU','NSV','NSW','NT6','NTJ','NTM','NTN','NTP','NUT','NVL','NVY','NWR','NWU','NXO',)),
  240.          # 2: eeprom 16k
  241.          frozenset(('N3D','NB7','NCW','NCZ','ND4','ND6','NDO','NDP','NEP','NEV','NFU','NM8','NMV','NMX','NNB','NNX','NPD','NRZ','NX7','NYS',)),
  242.          # 3: SRAM 256Mb
  243.          frozenset(('NA2','NAL','NB5','CFZ','NFZ','NIB','NJG','NKG','NMF','NOB','CPS','NR6','NRE','NRI','NS4','NT3','NTE','NW2','NWL','NWX','NYW','CZL','NZL')),
  244.          # 4: FLASH 1Mb
  245.          frozenset(('NAF','NCC','NCK','NDL','NJD','NJF','NKJ','NM6','NMQ','CP2','NPF','NPO','NPN','NRH','NSQ','NT9','NW4','NZS',)),
  246.          # 5: Dezaemon 768Mb
  247.          frozenset(('CDZ',)),
  248.          # 6: Stadium FLASH
  249.          frozenset(('NP3',)),
  250.          )
  251.  
  252.  
  253. def main(rom=None, save=None):
  254.     if rom is None:
  255.         parser = argparse.ArgumentParser(description="Appends self-removing bootstrap to <file>.")
  256.         parser.add_argument('file', type=argparse.FileType('rb'))
  257.         parser.add_argument('save', type=int, nargs='?', default=None)
  258.         cl = parser.parse_args()
  259.         if cl.file is None: return
  260.  
  261.         rom = cl.file.read()
  262.         n, e = os.path.splitext(cl.file.name)
  263.         cl.file.close()
  264.         save = cl.save
  265.     else:
  266.         with open(rom, 'rb') as f:
  267.             n, e = os.path.splitext(f.name)
  268.             rom = f.read()
  269.     # Determine save type from header.
  270.     if save is None:
  271.         if rom[0x61F:0x620] == b'\x04':
  272.             # Aleck64 uses 16k eeprom
  273.             save = 2
  274.         else:
  275.             i = rom[0x3B:0x3E].decode(encoding='cp932',errors='replace')
  276.             for j in range(len(Saves)):
  277.                 if i in Saves[j]:
  278.                     save = j + 1
  279.                     break
  280.             else:
  281.                 save = 0
  282.     # Append ROM; first block on end.
  283.     cart.rom[0x1b] = save
  284.     cart.rom.extend(rom[0x1400:])
  285.     i = max(0, 0x4000000 - len(cart.rom))
  286.     cart.rom.extend(bytes(i))
  287.     cart.rom[0x3FFEC00:0x4000000] = rom[0:0x1400]
  288.     cart.calccrc('6102', True)
  289.     # TODO: For now just push out a file.
  290.     #   Eventually upload directly from here.
  291.     with open(n + '-upload' + e, 'wb') as f:
  292.         f.write(cart.rom)
  293.  
  294. if __name__ == '__main__':
  295.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement