Example #1
0
void retro_run(void)
{
   bool updated = false;
   static int frames = 0;

   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated)
      check_variables();

   poll_cb();
   gbemu_update_input();

   RETRO_PERFORMANCE_INIT(gbemu_main_func);
   RETRO_PERFORMANCE_START(gbemu_main_func);
   gbemu_run();
   RETRO_PERFORMANCE_STOP(gbemu_main_func);

//   if(!GB.LCDC.LCD_enable)
//      memset(gbemu_frame, 0xFF, sizeof(gbemu_frame));

#ifdef VIEW_TILEMAP
   gbemu_draw_sprite_map();
   gbemu_draw_bgmap();
   gbemu_draw_tilemap();
   gbemu_dump_memory();
#endif

   uint16_t* read_pos = gbemu_sound_buffer;
   while (read_pos < GB.APU.write_pos - 2048)
   {
      audio_batch_cb(read_pos, 1024);
      read_pos += 2048;
   }

   audio_batch_cb(read_pos, (GB.APU.write_pos - read_pos) >> 1);
//   gbemu_printf("samples played : %i\n", (GB.APU.write_pos - gbemu_sound_buffer) >> 1);
   video_cb(gbemu_frame, GBEMU_DRAWBUFFER_W, GBEMU_DRAWBUFFER_H, GBEMU_DRAWBUFFER_W * 2);
//   DEBUG_HOLD();
//   gbemu_printf("frame : %i\n", frames);
   frames++;
   fflush(stdout);
//   gbemu_check_exit_request();
}
Example #2
0
void retro_run(void)
{
   int i;
   bool updated = false;

   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated)
      check_variables();

   input_poll_cb();

   for (i=0; i < 130; i++)
      KBD_RES(i);

   for (i=0; i < sizeof(keymap)/sizeof(keymap_t); i++)
      if (input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, keymap[i].retro))
         KBD_SET(keymap[i].fmsx);

   joystate = 0;

   for (i = 0; i < sizeof(joymap) / sizeof(keymap_t); i++)
   {
	   if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, joymap[i].retro))
	   {
		   if (i < joy_keyboard_begin)
			   JOY_SET(joymap[i].fmsx);
		   else
			   KBD_SET(joymap[i].fmsx);
	   }
   }

   RETRO_PERFORMANCE_INIT(core_retro_run);
   RETRO_PERFORMANCE_START(core_retro_run);

   RunZ80(&CPU);
   RenderAndPlayAudio(SND_RATE / 60);

   RETRO_PERFORMANCE_STOP(core_retro_run);

   fflush(stdout);

#ifdef PSP
   static unsigned int __attribute__((aligned(16))) d_list[32];
   void* const texture_vram_p = (void*) (0x44200000 - (640 * 480)); // max VRAM address - frame size

   sceKernelDcacheWritebackRange(XBuf, 256*240 );
   sceGuStart(GU_DIRECT, d_list);
   sceGuCopyImage(GU_PSM_5650, 0, 0, image_buffer_width, image_buffer_height, image_buffer_width, image_buffer, 0, 0, image_buffer_width, texture_vram_p);

   sceGuTexSync();
   sceGuTexImage(0, 512, 256, image_buffer_width, texture_vram_p);
   sceGuTexMode(GU_PSM_5650, 0, 0, GU_FALSE);
   sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGB);
   sceGuDisable(GU_BLEND);
   sceGuFinish();

   video_cb(texture_vram_p, image_buffer_width, image_buffer_height, image_buffer_width * sizeof(uint16_t));
#else
   video_cb(image_buffer, image_buffer_width, image_buffer_height, image_buffer_width * sizeof(uint16_t));
#endif



}
Example #3
0
void update_frame_ge(void)
{
   check_gba_video_status();


//   return;

//   printf("video mode: %u\n", gba_video_registers->lcd_control.bg_mode);

   int i;

   palette_ram_8bit[0]=palette_ram[0]&0x7FFF;

   for (i=1; i<256;i++)
      palette_ram_8bit[i]=palette_ram[i]|0x8000;

   palette_ram_8bit[256]=palette_ram[256]&0x7FFF;

   for (i=257; i<512;i++)
      palette_ram_8bit[i]=palette_ram[i]|0x8000;

   for (i=0; i<512;i++)
   {
      if (i&0xF)
         palette_ram_4bit[i]=palette_ram_8bit[i]|0x8000;

      else
         palette_ram_4bit[i]=palette_ram_8bit[i]&0x7FFF;

   }


//   sceKernelDcacheWritebackAll();
//   sceKernelDcacheWritebackInvalidateAll();
   RETRO_PERFORMANCE_INIT(gu_sync_time);
   RETRO_PERFORMANCE_START(gu_sync_time);
   sceGuSync(0,0);
   RETRO_PERFORMANCE_STOP(gu_sync_time);

   main_context_status= sceGuGetAllStatus();
   sceGeSaveContext(&main_context_buffer);
   sceGuSetCallback(GU_CALLBACK_FINISH, list_finish_callback);


   sceGuStart(GU_DIRECT, d_list);

   init_3Dprojection();
   setup_3Dprojection_16bit();
   sceGuDisable(GU_DEPTH_TEST);

//   sceGuDepthBuffer((void*)VRAM_DEPTH,512);
   sceGuDepthMask(GU_TRUE);
   sceGuDepthRange(0,65535);
   sceGuDisable(GU_CULL_FACE);
   sceGuDisable(GU_CLIP_PLANES);

//   sceGuTexFilter(GU_NEAREST,GU_NEAREST);

   RETRO_PERFORMANCE_INIT(gba_upload_vram_proc);
   RETRO_PERFORMANCE_START(gba_upload_vram_proc);
   gba_upload_vram();
   RETRO_PERFORMANCE_STOP(gba_upload_vram_proc);

//   sceGuDrawBufferList(GU_PSM_5551, GBA_FRAME_TEXTURE_GU, GBA_LINE_SIZE);
   sceGuDrawBufferList(GU_PSM_8888, GBA_FRAME_TEXTURE_GU, GBA_LINE_SIZE);
   sceGuDepthBuffer(GBA_DEPTH_BUFFER, GBA_LINE_SIZE);

   sceGuScissor(0,0,GBA_SCREEN_WIDTH,GBA_SCREEN_HEIGHT);
   sceGuScissor(0,0,240,160);
   sceGuEnable(GU_SCISSOR_TEST);


//   sceGuClearColor(0x000000FF);
//   sceGuClearColor((palette_ram[0]&0x1F<<3)|(palette_ram[0]&0x3E0<<6)|(palette_ram[0]&0x7C00<<9)|0xFF000000);
   sceGuClearColor(GU_COLOR(((palette_ram[0]>> 0) & 31) / 31.0f,
                            ((palette_ram[0]>> 5) & 31) / 31.0f,
                            ((palette_ram[0]>>10) & 31) / 31.0f,
                            1.0));
   sceGuClear(GU_COLOR_BUFFER_BIT);

//   if (gba_draw_bg[gba_video_registers->lcd_control.bg_mode])
//      gba_draw_bg[gba_video_registers->lcd_control.bg_mode]();


   RETRO_PERFORMANCE_INIT(gba_draw_bg_mode0_proc);
   RETRO_PERFORMANCE_START(gba_draw_bg_mode0_proc);
   gba_draw_bg_mode0();
   RETRO_PERFORMANCE_STOP(gba_draw_bg_mode0_proc);

//   sceGuFinish();
   sceGuFinishId(GBA_DISPLAY_LIST_ID);

//   RETRO_PERFORMANCE_INIT(gu_sync_time);
//   RETRO_PERFORMANCE_START(gu_sync_time);
//   sceGuSync(0,0);
//   RETRO_PERFORMANCE_STOP(gu_sync_time);

}
Example #4
0
static void gba_draw_bg_mode0 (void)
{

//   goto show_tiles;

   RETRO_PERFORMANCE_INIT(draw_bgs_procs);
   RETRO_PERFORMANCE_START(draw_bgs_procs);

   sceGuEnable(GU_BLEND);
   sceGuBlendFunc(GU_ADD,GU_SRC_ALPHA,GU_ONE_MINUS_SRC_ALPHA,0xFFFFFFFF,0xFFFFFFFF);
//   sceGuEnable(GU_DEPTH_TEST);
   sceGuDepthMask(GU_FALSE);
   sceGuDepthFunc(GU_GEQUAL);
//   sceGuDisable(GU_BLEND);
   //BG0


   if (gba_video_registers->lcd_control.screen_display_BG3)
      draw_bg(&gba_video_registers->BG3_control, &gba_video_registers->BG3_scroll);
   if (gba_video_registers->lcd_control.screen_display_BG2)
      draw_bg(&gba_video_registers->BG2_control, &gba_video_registers->BG2_scroll);
   if (gba_video_registers->lcd_control.screen_display_BG1)
      draw_bg(&gba_video_registers->BG1_control, &gba_video_registers->BG1_scroll);
   if (gba_video_registers->lcd_control.screen_display_BG0)
      draw_bg(&gba_video_registers->BG0_control, &gba_video_registers->BG0_scroll);

   RETRO_PERFORMANCE_STOP(draw_bgs_procs);

   RETRO_PERFORMANCE_INIT(draw_sprites_proc);
   RETRO_PERFORMANCE_START(draw_sprites_proc);
//   draw_sprites_old();
//   sceGuClutMode(GU_PSM_5551,0,0xFF,32);
   draw_sprites();
   RETRO_PERFORMANCE_STOP(draw_sprites_proc);




   return;

show_tiles:

   sceGuTexMode(GU_PSM_T16, 0, 0, GU_TRUE);
   sceGuClutMode(GU_PSM_5551,0,0xFF,0);
   sceGuClutLoad(32, palette_ram);
   sceGuDisable(GU_BLEND);

   sceGuEnable(GU_TEXTURE_2D);
   sceGuTexFunc(GU_TFX_REPLACE,GU_TCC_RGB);
//   sceGuClutMode(GU_PSM_4444,0,0xFF,0);
//   sceGuClutLoad(32, index_copy_clut);

   if (show_4bit_tilemap)
   {
      sceGuTexImage(0, 256, 256, 256, ((u16*)GBA_VRAMTEXTURE_4bit)
            + 256 * 256 * tilemap_offset);

      sceGuDrawArray(GU_SPRITES, GU_TEXTURE_16BIT | GU_VERTEX_16BIT |
            GU_TRANSFORM_2D, 2, NULL,(void*)frame_256_256);
   }
   else
   {
      sceGuTexImage(0, 128, 256, 128, ((u16*)GBA_VRAMTEXTURE_8bit)
            + 128 * 256 * tilemap_offset);

      sceGuDrawArray(GU_SPRITES, GU_TEXTURE_16BIT | GU_VERTEX_16BIT |
            GU_TRANSFORM_2D, 2, NULL,(void*)frame_128_256);
   }




}