remove all global state

This commit is contained in:
corey 2024-05-17 12:16:52 -05:00
parent a67a3abad6
commit cff192ea1c
5 changed files with 22 additions and 22 deletions

2
gb.c
View File

@ -1,8 +1,8 @@
#include"gb.h"
#include<stdio.h>
#include<stdint.h>
#include<stdlib.h>
#include<time.h>
#include"gb.h"
Gb gb_new(void)
{

2
gb.h
View File

@ -2,6 +2,8 @@
#include<stdint.h>
struct Gb;
#include"cpu.h"
#include"ppu.h"

6
main.c
View File

@ -12,8 +12,6 @@
#define VIDEO
//#define PRINTING
bool paused=false;
int main(int argc,char **argv)
{
FILE *f;
@ -106,9 +104,9 @@ int main(int argc,char **argv)
for(;;)
{
#ifdef VIDEO
if(ppu_updatewindow(gb.ppu,gb.cpu,gb.ram))break;
if(ppu_updatewindow(&gb,gb.ram))break;
#endif
if(/*gb.*/paused)continue;
if(gb.paused)continue;
//Control Registers--
gb.ram[0xff44]+=1;//CURLINE (VBLANK INT AT:144-153)

32
ppu.c
View File

@ -1,15 +1,15 @@
#include"ppu.h"
#include<windows.h>
#include<stdio.h>
#include<inttypes.h>
#include<stdbool.h>
#include"gb.h"
#include"ppu.h"
#define print(x,y,str) tigrPrint(ppu->info,tfont,x,y,tigrRGB(0xdd,0x66,0x77),str);
#define print(x,y,str) tigrPrint(gb->ppu->info,tfont,x,y,tigrRGB(0xdd,0x66,0x77),str);
#define bit(x,n) ( ((x) & 1<<(n)) >> (n) )
#define bittest(x,y,n) (bit((x),(n))|bit((y),(n))<<1)
static uint32_t palette[4]={0x00ffffff,0x00389048,0x00284028,0x000000};
extern uint8_t paused;
uint32_t ppu_openwindow(Ppu*ppu,uint8_t*str)
{
@ -49,19 +49,19 @@ void ppu_drawtile(Ppu*ppu,uint8_t x,uint8_t y,uint16_t o,uint16_t t,uint8_t *ram
ppu->pixels.i[(j/2+y)*160+(i+x)]=palette[bittest(ram[o+j+t*16],ram[o+1+j+t*16],7-i)];
}
uint32_t ppu_updatewindow(Ppu*ppu,struct Cpu*cpu,uint8_t*ram)
uint32_t ppu_updatewindow(struct Gb*gb,uint8_t*ram)
{
static bool tilemap=false;
static uint32_t delay=0;
if(!ppu->screen||!ppu->info)return 1;
if(!gb->ppu->screen||!gb->ppu->info)return 1;
delay++;
if(delay%400!=0)return 0;
if(!tigrClosed(ppu->screen)&&!tigrKeyHeld(ppu->screen,TK_ESCAPE)&&!tigrClosed(ppu->info)&&!tigrKeyHeld(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(ppu->screen,tigrRGB(255,255,255));
tigrClear(ppu->info,tigrRGB(0x22,0x22,0x22));
if(tigrKeyDown(ppu->screen,'P'))paused=!paused;
if(tigrKeyDown(ppu->screen,TK_SPACE))tilemap=!tilemap;
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
@ -70,17 +70,17 @@ uint32_t ppu_updatewindow(Ppu*ppu,struct Cpu*cpu,uint8_t*ram)
//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(ppu,i*8,j*8,0x8000,ram[0x9800+(j*0x20+i)],ram);
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(ppu,ram[oam_offs+i*4]-8,ram[oam_offs+i*4+1]-16,0x8000,ram[oam_offs+i*4+2],ram);
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(ppu,i%16*8,(i/16)*8,0x8000,i,ram);
ppu_drawtile(gb->ppu,i%16*8,(i/16)*8,0x8000,i,ram);
// for(int i=0;i<0xff;i++)
{
@ -91,13 +91,13 @@ 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",cpu->pc,paused?" [paused]":"");
sprintf(str,"PC: %.4x%s",gb->cpu->pc,gb->paused?" [paused]":"");
print(0,1+i*12,str);
}
tigrUpdate(ppu->info);
tigrUpdate(ppu->screen);
tigrUpdate(gb->ppu->info);
tigrUpdate(gb->ppu->screen);
}
else
return -1; //0xffffffff

2
ppu.h
View File

@ -20,6 +20,6 @@ typedef struct Ppu
uint32_t ppu_closewindow(Ppu*ppu);
uint32_t ppu_openwindow(Ppu*ppu,uint8_t*str);
uint32_t ppu_updatewindow(struct Gb*gb,uint8_t*ram);
void ppu_drawtile(Ppu*ppu,uint8_t x,uint8_t y,uint16_t o,uint16_t t,uint8_t *ram);
void ppu_updatejoypad(Ppu*ppu,uint8_t*ram);
uint32_t ppu_updatewindow(Ppu*ppu,struct Cpu*cpu,uint8_t*ram);