info screen modes
This commit is contained in:
parent
ddb69c4517
commit
17c4fb77ba
1
gb.c
1
gb.c
|
@ -28,6 +28,7 @@ Gb gb_new(void)
|
|||
goto fail;
|
||||
}
|
||||
*(gb.ppu)=(Ppu){0};
|
||||
gb.ppu->mode=M_MEM;
|
||||
|
||||
gb.ram=malloc(0x10000);
|
||||
if(!gb.ram)
|
||||
|
|
1
gb.h
1
gb.h
|
@ -19,6 +19,7 @@ typedef struct Gb
|
|||
uint8_t paused;
|
||||
bool video;
|
||||
bool log;
|
||||
size_t timer; // How often to show disassembly
|
||||
} Gb;
|
||||
|
||||
Gb gb_new(void);
|
||||
|
|
89
ppu.c
89
ppu.c
|
@ -56,43 +56,74 @@ uint32_t ppu_updatewindow(struct Gb*gb,uint8_t*ram)
|
|||
if(!gb->ppu->screen||!gb->ppu->info)return 1;
|
||||
delay++;
|
||||
if(delay%400!=0)return 0;
|
||||
if(!tigrClosed(gb->ppu->screen)&&!tigrKeyHeld(gb->ppu->screen,TK_ESCAPE)&&!tigrClosed(gb->ppu->info)&&!tigrKeyHeld(gb->ppu->info,TK_ESCAPE))
|
||||
|
||||
if(!tigrClosed(gb->ppu->screen) && !tigrKeyHeld(gb->ppu->screen,TK_ESCAPE) && !tigrClosed(gb->ppu->info) && !tigrKeyHeld(gb->ppu->info,TK_ESCAPE))
|
||||
{
|
||||
tigrClear(gb->ppu->screen,tigrRGB(255,255,255));
|
||||
tigrClear(gb->ppu->info,tigrRGB(0x22,0x22,0x22));
|
||||
if(tigrKeyDown(gb->ppu->screen,'P'))gb->paused=!gb->paused;
|
||||
if(tigrKeyDown(gb->ppu->screen,TK_SPACE))tilemap=!tilemap;
|
||||
|
||||
//Draw all tiles
|
||||
if(tilemap)//LCD DISPLAY ON
|
||||
// Draw graphical/main screen
|
||||
{
|
||||
//uint16_t tilemap_select=0x9800;
|
||||
//if(ram[0xff40]&0x40)tilemap_select=0x9c00;
|
||||
for(int j=0;j<18;j++)//tile map veritcal
|
||||
for(int i=0;i<20;i++)//tile map horizontal
|
||||
ppu_drawtile(gb->ppu,i*8,j*8,0x8000,ram[0x9800+(j*0x20+i)],ram);
|
||||
tigrClear(gb->ppu->screen,tigrRGB(255,255,255));
|
||||
if(tigrKeyDown(gb->ppu->screen,'P'))gb->paused=!gb->paused;
|
||||
if(tigrKeyDown(gb->ppu->screen,'L'))gb->log=!gb->log;
|
||||
if(tigrKeyDown(gb->ppu->screen,'M'))gb->ppu->mode=!gb->ppu->mode;
|
||||
if(tigrKeyDown(gb->ppu->screen,TK_SPACE))tilemap=!tilemap;
|
||||
|
||||
uint16_t oam_offs=0xfe00;//should be 0xfe00
|
||||
for(int i=0;i<40;i+=4)//OAM sprites
|
||||
if(ram[oam_offs+i*4]>=8&&ram[oam_offs+i*4+1]>=16)
|
||||
ppu_drawtile(gb->ppu,ram[oam_offs+i*4]-8,ram[oam_offs+i*4+1]-16,0x8000,ram[oam_offs+i*4+2],ram);
|
||||
//Draw all tiles
|
||||
if(tilemap)//LCD DISPLAY ON
|
||||
{
|
||||
//uint16_t tilemap_select=0x9800;
|
||||
//if(ram[0xff40]&0x40)tilemap_select=0x9c00;
|
||||
for(int j=0;j<18;j++)//tile map veritcal
|
||||
for(int i=0;i<20;i++)//tile map horizontal
|
||||
ppu_drawtile(gb->ppu,i*8,j*8,0x8000,ram[0x9800+(j*0x20+i)],ram);
|
||||
|
||||
uint16_t oam_offs=0xfe00;//should be 0xfe00
|
||||
for(int i=0;i<40;i+=4)//OAM sprites
|
||||
if(ram[oam_offs+i*4]>=8&&ram[oam_offs+i*4+1]>=16)
|
||||
ppu_drawtile(gb->ppu,ram[oam_offs+i*4]-8,ram[oam_offs+i*4+1]-16,0x8000,ram[oam_offs+i*4+2],ram);
|
||||
}
|
||||
else
|
||||
// for(int i=0;i<256+128;i++)
|
||||
for(int i=0;i<256;i++)
|
||||
ppu_drawtile(gb->ppu,i%16*8,(i/16)*8,0x8000,i,ram);
|
||||
}
|
||||
else
|
||||
// for(int i=0;i<256+128;i++)
|
||||
for(int i=0;i<256;i++)
|
||||
ppu_drawtile(gb->ppu,i%16*8,(i/16)*8,0x8000,i,ram);
|
||||
|
||||
// for(int i=0;i<0xff;i++)
|
||||
// Draw information screen
|
||||
{
|
||||
tigrClear(gb->ppu->info,tigrRGB(0x22,0x22,0x22));
|
||||
|
||||
// Print mode name
|
||||
static char str[128];
|
||||
auto uint16_t ad=0xff46;
|
||||
auto uint8_t i=0;
|
||||
info:
|
||||
sprintf(str,"%.4x: %.2x %.2x %.2x %.2x %.2x %.2x",ad+i*6,ram[ad+i*6],ram[ad+i*6+1],ram[ad+i*6+2],ram[ad+i*6+3],ram[ad+i*6+4],ram[ad+i*6+5]);
|
||||
print(0,i*12+1,str);
|
||||
if(i++<9)goto info;
|
||||
sprintf(str,"PC: %.4x%s",gb->cpu->pc,gb->paused?" [paused]":"");
|
||||
print(0,1+i*12,str);
|
||||
sprintf(str,"%s",(gb->ppu->mode==M_MEM)?("memory"):("disasm"));
|
||||
print(0,0,str);
|
||||
|
||||
switch(gb->ppu->mode)
|
||||
{
|
||||
|
||||
default:
|
||||
case M_MEM:
|
||||
{
|
||||
auto uint16_t ad=0xff46;
|
||||
auto uint8_t i=0;
|
||||
|
||||
while(i<9)
|
||||
{
|
||||
sprintf(str,"%.4x: %.2x %.2x %.2x %.2x %.2x %.2x",ad+i*6,ram[ad+i*6],ram[ad+i*6+1],ram[ad+i*6+2],ram[ad+i*6+3],ram[ad+i*6+4],ram[ad+i*6+5]);
|
||||
print(0,12+i*12+1,str);
|
||||
++i;
|
||||
}
|
||||
sprintf(str,"PC: %.4x%s",gb->cpu->pc,gb->paused?" [paused]":"");
|
||||
print(0,12+1+i*12,str);
|
||||
break;
|
||||
}
|
||||
|
||||
case M_DASM:
|
||||
{
|
||||
static char str[128];
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user