最近GAME GEARが流行っているようなので、やりかけだったCOLECOVISIONのゲームを移植してみました。なお実機で動かすにはEverdrive GGが必要です。
http://www.geocities.jp/parallel_computer_inc/bios.html
必要なものは以下になります。
https://github.com/mamedev/mess-svn/blob/master/hash/coleco.xml
- BIOS(coleco.rom)
- Keyboard driver(sc3000.bin)
- Donky Kong(dkong.col)
16KBまでに限定されますがまずは、COLECOVISIONのメモリーマップに合うように、GAME GEARのROMファイルを構成します。
DONKEY.SG
0000H-1FFFH coleco.rom(patched) 2000H-2101H Keyboard driver 2102H-7FFFH unuse (all 0xff) 8000H-BFFFH dkong.col(patched)
GAME GEARとCOLECOVISIONでは、I/Oポート、VSYNC割り込みと、RAM構成が異なるので、以下の情報を元にROMパッチを作成しました。
http://www43.tok2.com/home/cmpslv/Coleco/EnrCol.htm
http://www43.tok2.com/home/cmpslv/Mark3/EnrM3.htm
coleco.rom
* Patch for coleco.rom * * Made by バイナリ書き替え君 Version 2.02 * *== TARGET_FILE ================ FILENAME coleco.rom * FileSize: 8192 bytes * LastMod : 2004/10/21 16:16:00 *=============================== 00000002: 73 C3 00000039: 1E 21 0000003D: 73 C3 00000056: 73 C3 00000067: 21 00 00000068: 80 20 00000089: 73 C3 00000091: 73 C3 00000094: 73 C3 00000173: FF 7F 0000017C: FF 7F 0000018E: FF 7F 000001C3: 70 C0 00000208: 73 C3 0000020E: 73 C3 00000212: 73 C3 00000215: 70 C0 0000022C: 70 C0 0000022F: 70 C0 00000232: 70 C0 00000235: 70 C0 0000023A: 70 C0 0000023E: FF 7F 00000242: FF 7F 00000246: FF 7F 0000024A: FF 7F 00000256: 73 C3 0000025C: 73 C3 0000029C: 70 C0 0000029F: 70 C0 000002A2: 70 C0 000002A5: 70 C0 000002C3: 70 C0 00000309: 70 C0 00000316: 70 C0 00000323: 70 C0 0000032E: 70 C0 00000336: FF 7F 00000343: 70 C0 00000355: FF 7F 0000048D: 73 C3 00000493: 73 C3 0000049A: 73 C3 000004FA: 73 C3 00000627: 73 C3 00000632: 73 C3 00000636: 73 C3 0000063E: 73 C3 00000641: 73 C3 00000644: 73 C3 00000649: 73 C3 0000064D: 73 C3 0000065A: 73 C3 00000660: 73 C3 00000663: 73 C3 00000666: 73 C3 0000066B: 73 C3 0000066E: 73 C3 00000671: 73 C3 00000674: 73 C3 00000677: 73 C3 0000067B: 73 C3 00000681: 73 C3 00000684: 73 C3 00000687: 73 C3 0000068D: 73 C3 0000069D: 73 C3 000006A1: 73 C3 000006A9: 73 C3 000006AC: 73 C3 000006AF: 73 C3 000006B5: 73 C3 000006B9: 73 C3 000006BF: 73 C3 000006D3: 73 C3 000006D6: 73 C3 000006DA: 73 C3 00000A8D: 73 C3 00000F39: 73 C3 00000F9F: 73 C3 00000FA5: 73 C3 00000FA9: 73 C3 00000FAC: 73 C3 00000FB2: 73 C3 00000FBD: 73 C3 00000FC3: 73 C3 00000FC7: 73 C3 00000FEC: 73 C3 00001028: 73 C3 0000103B: 73 C3 00001049: 73 C3 0000104F: 73 C3 00001052: 73 C3 00001057: 73 C3 0000107E: 73 C3 00001092: 73 C3 000010C4: 73 C3 000010CA: 73 C3 000010CE: 73 C3 00001113: 73 C3 0000112A: 73 C3 0000112D: 73 C3 00001130: 73 C3 00001133: 73 C3 00001136: 73 C3 00001139: 73 C3 0000114A: DB CD 0000114B: FC 10 0000114C: 2F 20 0000114D: 32 C9 0000114E: EE 00 0000114F: 73 00 00001155: 73 C3 00001160: 73 C3 00001166: 73 C3 0000116E: 73 C3 00001192: 73 C3 000011C7: 73 C3 000011E1: 73 C3 000011E4: 73 C3 000011EF: 73 C3 0000120D: 73 C3 00001210: 73 C3 0000121B: 73 C3 00001A6B: 73 C3 00001B23: 73 C3 00001B30: 73 C3 00001B91: 73 C3 00001B97: 73 C3 00001B9B: 73 C3 00001B9F: 73 C3 00001BA2: 73 C3 00001BAD: 73 C3 00001BB1: 73 C3 00001BBB: 73 C3 00001BD8: 73 C3 00001BEA: 73 C3 00001BFD: 73 C3 00001C15: 73 C3 00001C1B: 73 C3 00001C1F: 73 C3 00001C23: 73 C3 00001C26: 73 C3 00001C2E: 73 C3 00001C5F: 73 C3 00001C65: 73 C3 00001C7B: 73 C3 00001C81: 73 C3 00001C8A: 73 C3 00001CC1: 73 C3 00001CC7: 73 C3 00001CDA: 73 C3 00001CE3: 73 C3 00001CF2: 73 C3 00001CF8: 73 C3 00001CFC: 73 C3 00001D00: 73 C3 00001D2F: 73 C3 00001D35: 73 C3 00001D39: 73 C3 00001D3D: 73 C3 00001E67: 73 C3
Keyboard driver
ORG 2000H A2000: LD A,02H LD (0C7FFH),A RET DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH A2010: PUSH BC PUSH DE LD D,0FFH LD A,07H OUT (0DEH),A IN A,(0DCH) CPL BIT 4,A JR Z,SKIP LD D,0BFH SKIP: LD B,A LD C,A RL B RR C JR C,A202C RR C LD A,4CH AND B LD B,A LD A,02H AND C OR B JR A2038 A202C: RR C LD A,4CH AND B LD B,A LD A,02H AND C OR B OR 01H A2038: LD (0C3EEH),A LD A,(0C7FFH) LD (0C3F0H),A LD A,00H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEY8 LD A,02H JP TENKEY KEY8: IN A,(0DDH) CPL BIT 0,A JR Z,KEY2 LD A,0EH JP TENKEY KEY2: LD A,01H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEY9 LD A,08H JP TENKEY KEY9: IN A,(0DDH) CPL BIT 0,A JR Z,KEY3 LD A,04H JP TENKEY KEY3: LD A,02H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEY0 LD A,03H JP TENKEY KEY0: IN A,(0DDH) CPL BIT 0,A JR Z,KEY4 LD A,05H JP TENKEY KEY4: LD A,03H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEYA LD A,0DH JP TENKEY KEYA: IN A,(0DDH) CPL BIT 0,A JR Z,KEY5 LD A,06H JP TENKEY KEY5: LD A,04H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEYS LD A,0CH JP TENKEY KEYS: IN A,(0DDH) CPL BIT 0,A JR Z,KEY6 LD A,09H JP TENKEY KEY6: LD A,05H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,KEY7 LD A,01H JP TENKEY KEY7: LD A,06H OUT (0DEH),A IN A,(0DCH) CPL BIT 0,A JR Z,NOKEY LD A,0AH TENKEY: AND D LD (0C3F0H),A LD A,00H LD (0C7FFH),A NOKEY: POP DE POP BC IN A,(0BFH) EI RET END
dkong.col
* Patch for DONKEY.COL * * Made by バイナリ書き替え君 Version 2.02 * *== TARGET_FILE ================ FILENAME DONKEY.COL * FileSize: 16384 bytes * LastMod : 2015/05/09 02:22:06 *=============================== 00000003: 72 C2 00000005: 72 C2 00000007: 70 C0 00000009: 70 C0 0000004E: 70 C0 00000062: 70 C0 00000065: 70 C0 0000006E: 73 C3 00000074: 71 C1 00000077: 70 C0 0000007A: 70 C0 00000085: 70 C0 00000088: 70 C0 0000009D: 71 C1 000000A6: 71 C1 000000BB: 70 C0 000000C6: 70 C0 000000D5: 70 C0 000000DB: 70 C0 000000E2: 70 C0 000000E9: 70 C0 0000011F: 70 C0 00000126: 71 C1 0000012C: 71 C1 0000012F: 70 C0 00000132: 70 C0 00000149: 71 C1 00000154: 71 C1 0000015C: 71 C1 00000178: 70 C0 00000189: 70 C0 000001A9: 70 C0 000001D7: 70 C0 0000020A: 70 C0 0000020D: 70 C0 00000213: 70 C0 0000021A: 70 C0 00000224: 70 C0 00000229: 70 C0 0000022D: 70 C0 00000233: 70 C0 0000023B: 73 C3 00000248: 70 C0 00000251: 70 C0 00000254: 70 C0 00000269: 73 C3 000002DB: 70 C0 000002E6: 71 C1 000002EC: 71 C1 000002EF: 71 C1 000002F3: 71 C1 000002FC: 71 C1 000002FF: 71 C1 00000303: 71 C1 0000030D: 71 C1 00000311: 71 C1 0000031C: 71 C1 00000320: 71 C1 00000345: 71 C1 0000034B: 71 C1 00000352: 71 C1 00000358: 71 C1 00000360: 71 C1 00000363: 71 C1 0000036A: 71 C1 00000370: 71 C1 0000037C: 71 C1 00000380: 71 C1 00000383: 71 C1 00000389: 71 C1 0000038C: 71 C1 00000390: 71 C1 000003A9: 71 C1 000003B2: 71 C1 000003C3: 71 C1 000003C7: 71 C1 000003DA: 71 C1 000003DF: 71 C1 000003E3: 71 C1 000003EC: 71 C1 000003F1: 71 C1 000003F5: 71 C1 00000418: 71 C1 0000041F: 71 C1 00000427: 71 C1 0000042B: 71 C1 00000447: 70 C0 00000454: 70 C0 00000461: 70 C0 00000509: 70 C0 0000051B: 70 C0 0000055B: 73 C3 00000571: 71 C1 00000574: 70 C0 00000577: 70 C0 0000057A: 70 C0 0000057D: 70 C0 00000580: 71 C1 00000589: 71 C1 00000593: 71 C1 000005A8: 71 C1 000005AE: 71 C1 000005D1: 71 C1 000005D4: 70 C0 000005F7: 71 C1 00000601: 71 C1 00000627: 71 C1 00000633: 71 C1 0000063E: 70 C0 0000068F: 72 C2 00000692: 72 C2 00000695: 71 C1 00000699: 71 C1 000006A4: 72 C2 000006B9: 70 C0 00000760: 70 C0 000007B3: 73 C3 0000084D: 72 C2 00000871: 70 C0 00000880: 72 C2 00000889: 71 C1 00000891: 71 C1 00000895: 70 C0 00000983: 70 C0 00000997: 70 C0 000009A7: 70 C0 000009CA: 70 C0 00000A1A: 70 C0 00000A25: 70 C0 00000A33: 71 C1 00000A68: 71 C1 00000A6B: 70 C0 00000A9B: 71 C1 00000AF4: 70 C0 00000B03: 71 C1 00000B0C: 71 C1 00000B0F: 71 C1 00000B18: 71 C1 00000B1C: 70 C0 00000B26: 71 C1 00000B30: 71 C1 00000B40: 71 C1 00000B45: 71 C1 00000B49: 71 C1 00000B50: 71 C1 00000B91: 71 C1 00000B95: 71 C1 00000B9B: 71 C1 00000BA3: 71 C1 00000BB4: 71 C1 00000BC5: 71 C1 00000BE3: 71 C1 00000BEB: 71 C1 00000BF1: 71 C1 00000BF6: 70 C0 00000C06: 73 C3 00000C0F: 73 C3 00000C1B: 71 C1 00000C20: 71 C1 00000C23: 71 C1 00000C26: 71 C1 00000C29: 71 C1 00000C2C: 71 C1 00000C38: 71 C1 00000C52: 72 C2 00000C76: 71 C1 00000C8A: 71 C1 00000CBA: 71 C1 00000CC2: 70 C0 00000CCD: 71 C1 00000CD0: 70 C0 00000CD6: 70 C0 00000CFC: 71 C1 00000D08: 71 C1 00000D18: 70 C0 00000D2C: 70 C0 00000D42: 71 C1 00000D60: 71 C1 00000D6F: 71 C1 00000D88: 70 C0 00000D9E: 70 C0 00000DAC: 71 C1 00000DB9: 70 C0 00000DC6: 70 C0 00000DE2: 71 C1 00000DF0: 70 C0 00000E02: 70 C0 00000E09: 71 C1 00000E12: 70 C0 00000E15: 70 C0 00000E24: 71 C1 00000E2C: 71 C1 00000E2F: 70 C0 00000E3A: 71 C1 00000E3D: 70 C0 00000E46: 71 C1 00000E49: 70 C0 00000E52: 71 C1 00000E5B: 71 C1 00000E64: 71 C1 00000E67: 70 C0 00000E6C: 70 C0 00000E74: 70 C0 00000E7B: 71 C1 00000E7E: 71 C1 00000E81: 71 C1 00000E8A: 71 C1 00000EAA: 71 C1 00000EAD: 70 C0 00000EB0: 70 C0 00000EC0: 71 C1 00000EC5: 71 C1 00000ED3: 70 C0 00000ED7: 71 C1 00000EF9: 70 C0 00000F07: 70 C0 00000F0A: 70 C0 00000F19: 71 C1 00000F52: 70 C0 00000F5C: 70 C0 00000F62: 71 C1 00000F72: 70 C0 00000F7F: 71 C1 00000FA5: 70 C0 00000FAE: 70 C0 00000FB7: 70 C0 00000FBD: 71 C1 00001001: 70 C0 00001019: 70 C0 00001034: 70 C0 0000103B: 70 C0 00001040: 70 C0 00001046: 70 C0 00001050: 71 C1 00001056: 71 C1 0000106E: 70 C0 0000108A: 70 C0 00001091: 71 C1 000010C8: 71 C1 000010E2: 71 C1 000010E8: 71 C1 000010EF: 70 C0 000010F3: 71 C1 000010F9: 70 C0 000010FF: 71 C1 00001104: 70 C0 00001130: 70 C0 0000114A: 70 C0 00001185: 70 C0 0000118A: 70 C0 00001191: 71 C1 000011A1: 70 C0 000011AF: 70 C0 000011D1: 70 C0 000011D5: 70 C0 000011DF: 70 C0 000011F9: 71 C1 000011FF: 71 C1 00001213: 70 C0 00001234: 71 C1 00001242: 70 C0 0000128B: 71 C1 00001291: 71 C1 000012E2: 70 C0 00001327: 70 C0 0000133D: 70 C0 00001343: 70 C0 00001352: 70 C0 00001358: 70 C0 000013B0: 70 C0 000013C3: 70 C0 000013D6: 70 C0 00001400: 71 C1 0000140C: 70 C0 0000142E: 70 C0 00001450: 70 C0 00001464: 70 C0 00001518: 70 C0 0000151E: 70 C0 00001527: 70 C0 0000155E: 70 C0 00001565: 70 C0 0000156D: 72 C2 00001571: 70 C0 0000157D: 70 C0 00001583: 70 C0 00001592: 70 C0 00001596: 72 C2 00001599: 70 C0 000015AA: 70 C0 000015B3: 70 C0 000015BC: 70 C0 000015C2: 70 C0 000015C6: 70 C0 000015CF: 71 C1 000015D2: 71 C1 000015DA: 70 C0 000015E0: 71 C1 000015E5: 72 C2 000015E8: 71 C1 000015ED: 72 C2 000015F0: 70 C0 000015FA: 71 C1 00001609: 70 C0 00001618: 70 C0 0000161B: 70 C0 00001621: 70 C0 0000168A: 70 C0 0000168D: 70 C0 00001693: 70 C0 00001696: 70 C0 000016C2: 70 C0 000016D3: 70 C0 00001772: 70 C0 0000178A: 70 C0 000017A2: 70 C0 000017AC: 70 C0 000017C2: 70 C0 000017DE: 70 C0 00001809: 70 C0 00001816: 70 C0 0000181F: 70 C0 00001840: 70 C0 00001846: 70 C0 00001851: 70 C0 0000186F: 70 C0 00001881: 70 C0 00001885: 70 C0 0000189B: 70 C0 0000189F: 70 C0 000018B6: 70 C0 000018BB: 70 C0 000018D9: 70 C0 000018E3: 70 C0 000018F7: 70 C0 00001900: 70 C0 00001971: 70 C0 00001978: 70 C0 000019CE: 70 C0 000019EF: 70 C0 00001A07: 70 C0 00001A0D: 70 C0 00001A23: 70 C0 00001A2C: 70 C0 00001A4B: 70 C0 00001A59: 70 C0 00001A76: 71 C1 00001A7A: 71 C1 00001A81: 71 C1 00001A84: 71 C1 00001EA7: 71 C1 00001EAB: 71 C1 00001EB3: 72 C2 00001EB7: 72 C2 00001EBB: 72 C2 00001EC3: 72 C2 00001EC7: 72 C2 00001ECB: 72 C2 00001ECF: 72 C2 00001ED3: 72 C2 00001ED7: 72 C2 00001F0B: 71 C1 00002F80: 71 C1 00002FEC: 71 C1 00003012: 71 C1 00003038: 71 C1 000033A9: 71 C1 000033AF: 71 C1 000033B5: 71 C1 000033BB: 71 C1 000033C1: 71 C1 000033C7: 71 C1 000033DE: 71 C1 000033E4: 71 C1 000033FF: 71 C1 00003416: 71 C1 0000342B: 71 C1 00003440: 71 C1 00003467: 71 C1 00003479: 71 C1 000034D8: 71 C1 000034F1: 71 C1 0000350A: 71 C1 0000351F: 71 C1 0000352D: 71 C1 00003532: 71 C1 00003537: 71 C1 0000353C: 71 C1 0000355F: 71 C1 00003565: 71 C1 0000356B: 71 C1 00003571: 71 C1 000035D4: 72 C2 000035D9: 72 C2 000035DE: 72 C2 000035E3: 72 C2 000035E8: 72 C2 00003604: 72 C2 0000362B: 70 C0 0000362D: 71 C1 0000362F: 71 C1 00003631: 71 C1 00003637: 70 C0 00003639: 71 C1 0000363B: 71 C1 0000363D: 71 C1 0000363F: 71 C1 00003653: 70 C0 00003655: 71 C1 00003657: 71 C1 00003659: 71 C1 0000365B: 71 C1 00003669: 70 C0 0000366B: 71 C1 0000366D: 71 C1 0000366F: 71 C1 00003671: 71 C1 00003679: 71 C1 0000367B: 71 C1 0000367D: 71 C1