treewide: restucture source tree per project
Signed-off-by: Max Regan <mgregan2@gmail.com>
This commit is contained in:
85
src/gbemu/video.c
Normal file
85
src/gbemu/video.c
Normal 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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user