G-BASICのゲームをカートリッジ化する

ぴゅう太のテープロードが不安定かつ時間がかかるので、試しにRAM&ROMカートリッジ2化してみました。

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

----------------
0000 3FFF BIOS
----------------
4000 4FFF BIOS
5000 5FFF G-BASIC1
----------------
6000 7FFF RAM
----------------
8000 8FFF LOADER
----------------
9000 BFFF G-BASIC2
----------------
C000 DFFF RAM
----------------
F000 F0FF CPU RAM
----------------

G-BASICのプログラムはVRAMにある16KBなので、RAM&ROMカートリッジ2のローダーで読み込みました。

>mame64 pyuuta -ui_active -debug -resolution 512x384 -cass JUMPMAN.wav

MAMEのデバッガから以下のコマンドでDUMPしました

save ram.bin,F000,100,maincpu

saved vram.bin,0000,4000,tms9928a
#include <libti99/vdp.h>

void main()
{
  /* VDP SETUP */
  int x = set_bitmap_raw(VDP_SPR_8x8);
  VDP_SET_REGISTER(VDP_REG_MODE1, x);
  VDP_SET_REGISTER(VDP_REG_SIT,   7); // 1C00
/*  VDP_SET_REGISTER(VDP_REG_CT, 0x80); // 2000
  VDP_SET_REGISTER(VDP_REG_PDT,   0); // 0000
  VDP_SET_REGISTER(VDP_REG_SDT,   3); // 1800 */
  VDP_SET_REGISTER(VDP_REG_SAL,0x3E); // 1F00

  /* RESTORE VRAM */
  vdpmemcpy(0x0000, (unsigned char*)0x5000, 0x1000);
  vdpmemcpy(0x1000, (unsigned char*)0x9000, 0x3000);

  /* RETURN TO G-BASIC */
  __asm__("li   r0,>F000");
  __asm__("li   r1,>0100");
  __asm__("li   r15,>6000");
  __asm__("movb *R0+,*R15+");
  __asm__("dec  r1");
  __asm__("joc  >0FFA");
  __asm__("lwpi >6000");
  __asm__("li   r0,>8F00");
  __asm__("li   r1,>0100");
  __asm__("li   r15,>F000");
  __asm__("movb *R0+,*R15+");
  __asm__("dec  r1");
  __asm__("joc  >0FFA");
  __asm__("limi >0003");
  __asm__("lwpi >F0A0");
  __asm__("b @>0E5C");
}