COL2MSX

COLECOVISIONのゲームをMSX1で動かすMISSIONというエミュレータがあります。

http://www.komkon.org/~dekogel/mission.html

f:id:tanam:20140704033555p:image:w360

思うところあって、MISSIONのパッチが当たったBIOSを抽出してみます。MISSIONでCOLECOVISIONをエミュレーションしている最中に、MESSのデバッガから以下のコマンドを打ちます。

> save mission.rom,0,3000

色々調べた結果は、COLECOVISIONのメモリーマップに合うように、MISSION.ROMとゲームを構成するのが良さそうです。

0000H-2FFFH MISSION.ROM(Patched COLECO.ROM)
3000H-7FFFH unuse (all 0xff)
8000H-BFFFH DONKEY.COL

あくまで解析結果を確認するプログラムをHIGH-TECH Cで作っただけであって、エミュレーションはMISSIONそのものになります。

COL2MSX.C

#include <stdio.h>

unsigned char rom[0x4000];

void boot(unsigned char *rom);

int main( int ac, char **av )
{
    FILE *fp;
    if ((fp = fopen(av[1], "rb")) == NULL) {
        printf("file open error!!\n");
        exit(-1);
    }
    fread(0x8000, 1, 0x4000, fp);
    fclose(fp);
    if ((fp = fopen("MISSION.ROM", "rb")) == NULL) {
        printf("file open error!!\n");
        exit(-1);
    }
    fread(rom, 1, 0x3000, fp);
    fclose(fp);
    boot(rom);
    return 0;
}

void boot(unsigned char *rom)
{
#asm
    LD A,0F3H
    LD (7EFFH),A
    LD A,21H
    LD (7F00H),A
    LD L,(IX+6)
    LD H,(IX+7)
    LD (7F01H),HL
    LD A,11H
    LD (7F03H),A
    LD HL,0000H
    LD (7F04H),HL
    LD A,01H
    LD (7F06H),A
    LD HL,4000H
    LD (7F07H),HL
    LD HL,0B0EDH
    LD (7F09H),HL
    LD A,0C7H
    LD (7F0BH),A
    JP 7EFFH
#endasm
}