Mercurial > repos > simple16
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_