gbs その1

需要無視でgbsプレイヤーを制作中です。
技術的な旨みとしては結構いいと思うのですけれど
どうなんでしょう。


Z80カスタムをC言語で作れる
・GBエミュレータの1/10程度を実装したという満足感
とか。


資料は以下のとおり。
GameBoy Opcode Summary
http://gameboy.mongenel.com/dmg/opcodes.html
Gameboy CPU (LR35902) instruction set
http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html


現状、0x0200程度ある命令セットの4分の1ぐらいをdevkitARM用に手直し済。
大雑把にとあるソースコードを写経していて無心でないと身が持たないです。
GBAならその数倍。気が遠くなりそう。

// LD [BC], A
IWRAM_CODE void CpuExecInst0x02(void)
{
	MemWriteByte(Cpu.BC.uw, Cpu.AF.b.h);

	Cpu.cycle += 8;
}

// RLCA
IWRAM_CODE void CpuExecInst0x07(void)
{
	u8 carry = (Cpu.AF.b.h & 0x80) >> 7;

	Cpu.AF.b.h <<= 1;
	Cpu.AF.b.h += carry;

	CpuExecInstFlagC(carry);
	CpuExecInstFlagClear(FLAGS_NEGATIVE | FLAGS_ZERO | FLAGS_HALFCARRY);

	Cpu.cycle += 4;
}

1,2ヵ月の間、ひたすら命令セット書けって言われたら
頭から何か湧き出しそうです。


gbsのフォーマットはこちらです。
http://www.retrogames.com/music/gbsspec.txt