diff src/vdp.h @ 43:6e7bfe83d2b0

Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
author Michael Pavone <pavone@retrodev.com>
date Sat, 27 Aug 2016 22:38:31 -0700
parents 083347ccd508
children
line wrap: on
line diff
--- a/src/vdp.h	Mon Apr 11 23:35:51 2016 -0700
+++ b/src/vdp.h	Sat Aug 27 22:38:31 2016 -0700
@@ -2,69 +2,38 @@
 #define VDP_H_
 
 typedef struct {
-	uint16_t source;
-	uint16_t x;
-	uint8_t  hflip;
-	uint8_t  palpriority;
-} sprite_draw;
-
-typedef struct {
 	uint16_t *framebuffer;
-	uint8_t  *drawbuffer;
-	uint8_t  *readbuffer;
 	uint32_t cycles;
 	uint32_t clock_inc;
 	int      pitch;
 	
-	uint16_t fifo;
-	uint16_t dest_offset;
 	uint16_t status;
 	
 	uint16_t vcounter;
 	uint16_t hcounter;
 	
-	uint16_t vscroll;
-	uint16_t hscroll;
 	
-	uint16_t draw_source;
-	uint16_t draw_dest;
+	uint8_t  vram[128*1024];
+	uint16_t cram[256];
 	
+	uint16_t start_offset;
 	
-	uint16_t vram[32*512];
-	uint8_t  linebuffers[328*2];
-	uint16_t sram[64*2];
-	uint16_t cram[64];
+	uint8_t  top_skip;
+	uint8_t  bottom_skip;
+	uint8_t  pal_select;
 	
-	sprite_draw sprite_draws[40];
-	
-	uint8_t  fifo_dest;
-	uint8_t  draw_counter;
-	uint8_t  hflip;
-	uint8_t  palpriority;
-	uint8_t  current_draw;
+	uint8_t  pal_write_index;
+	uint8_t  pal_write_count;
 } vdp;
 
-enum {
-	FIFO_DEST_INVALID,
-	FIFO_DEST_VRAM,
-	FIFO_DEST_SRAM,
-	FIFO_DEST_CRAM
-};
-
-#define VDP_STATUS_FIFO         1
-#define VDP_STATUS_VRAM         2
-#define VDP_STATUS_SRAM         4
-#define VDP_STATUS_ENABLED      8
-#define VDP_STATUS_SPRITE_SCAN  16
-#define VDP_STATUS_PENDING_VINT 32
 
 void vdp_init(vdp *context, uint32_t clock_div);
 void vdp_run(vdp *context, uint32_t target);
-void vdp_write_address(vdp *context, uint16_t value);
-void vdp_write_data(vdp *context, uint16_t value);
-void vdp_write_hscroll(vdp *context, uint16_t value);
+void vdp_write_mode(vdp *context, uint16_t value);
+void vdp_write_cram(vdp *context, uint16_t value);
 uint32_t vdp_next_interrupt(vdp *context);
 void vdp_ack_interrupt(vdp *context);
 uint8_t vdp_interrupt_pending(vdp *context);
+uint8_t *vdp_get_back_buffer(vdp *context);
 
 #endif //VDP_H_