treewide: restucture source tree per project

Signed-off-by: Max Regan <mgregan2@gmail.com>
This commit is contained in:
2017-04-20 18:12:28 -07:00
parent 6ba525b64b
commit e5acc3088c
24 changed files with 43 additions and 45 deletions

85
src/gbemu/video.c Normal file
View File

@@ -0,0 +1,85 @@
#include "gbemu/video.h"
#include <string.h>
/* TODO: This whole implementation is very simple.*/
/* TODO: Actual graphics output */
/* TODO: Implementation of most registers */
/* TODO: Interrupts */
void gb_video_init(struct gb_video *video)
{
memset(video, 0, sizeof(*video));
}
void gb_video_cycle(struct gb_video *video)
{
video->line_counter++;
if (video->line_counter >= CYCLES_PER_LINE){
video->line_counter = 0;
video->curline += 1;
if (video->curline > LCD_Y_MAX) {
video->curline = 0;
}
}
}
uint8_t gb_video_mem_read(struct gb_video *video, uint16_t addr)
{
switch (addr) {
case 0xFF40:
return video->lcdcont;
case 0xFF41:
return video->lcdstat;
case 0xFF42:
return video->scrolly;
case 0xFF43:
return video->scrollx;
case 0xFF44:
return video->curline;
case 0xFF45:
return video->cmpline;
case 0xFF4A:
return video->wndposy;
case 0xFF4B:
return video->wndposx;
default:
return 0;
}
}
void gb_video_mem_write(struct gb_video *video, uint16_t addr, uint8_t val)
{
uint8_t *write_addr;
switch (addr) {
case 0xFF40:
write_addr = &video->lcdcont;
case 0xFF41:
write_addr = &video->lcdstat;
case 0xFF42:
write_addr = &video->scrolly;
case 0xFF43:
write_addr = &video->scrollx;
case 0xFF44:
write_addr = &video->curline;
case 0xFF45:
write_addr = &video->cmpline;
case 0xFF47:
write_addr = &video->bgrdpal;
case 0xFF48:
write_addr = &video->obj0pal;
case 0xFF49:
write_addr = &video->obj1pal;
case 0xFF4A:
write_addr = &video->wndposy;
case 0xFF4B:
write_addr = &video->wndposx;
default:
return;
}
*write_addr = val;
}