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

せっかくなのでmk2のゲームも32KBカートリッジ化してみました。

f:id:tanam:20180224221521j:image:w360

----------------
0000 3FFF BIOS
----------------
4000 6FFF BIOS
7000 7FFF G-BASIC2
----------------
8000 8FFF LOADER
----------------
9000 BFFF G-BASIC1
----------------
F000 F0FF CPU RAM
----------------

フラッシュメモリカートリッジ用のローダーで読み込みました。

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

#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*)0x9000, 0x3000);
  vdpmemcpy(0x3000, (unsigned char*)0x7000, 0x1000);

  /* RETURN TO G-BASIC */
  __asm__("lwpi >F0F0");
  __asm__("li   r0,>8F00");
  __asm__("li   r1,>00F0");
  __asm__("li   r2,>F000");
  __asm__("movb *r0+,*r2+");
  __asm__("dec  r1");
  __asm__("joc  >0FFA");
  __asm__("lwpi >F0A0");
  __asm__("li   r0,>8FF0");
  __asm__("li   r1,>0010");
  __asm__("li   r2,>F0F0");
  __asm__("movb *r0+,*r2+");
  __asm__("dec  r1");
  __asm__("joc  >0FFA");
  __asm__("limi >0003");
  __asm__("b @>0F8C");
}