COL2GG

最近GAME GEARが流行っているようなので、やりかけだったCOLECOVISIONのゲームを移植してみました。なお実機で動かすにはEverdrive GGが必要です。

http://www.geocities.jp/parallel_computer_inc/bios.html

f:id:tanam:20150510000447p:image:w360

必要なものは以下になります。

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