Mercurial > repos > simple16
view src/vdp.h @ 27:351a0d0cce3b
Updated spec to make the 3rd and 4th controller IO ports as reserved
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 01 Apr 2016 21:51:46 -0700 |
parents | 083347ccd508 |
children | 6e7bfe83d2b0 |
line wrap: on
line source
#ifndef VDP_H_ #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; uint16_t vram[32*512]; uint8_t linebuffers[328*2]; uint16_t sram[64*2]; uint16_t cram[64]; sprite_draw sprite_draws[40]; uint8_t fifo_dest; uint8_t draw_counter; uint8_t hflip; uint8_t palpriority; uint8_t current_draw; } 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); uint32_t vdp_next_interrupt(vdp *context); void vdp_ack_interrupt(vdp *context); uint8_t vdp_interrupt_pending(vdp *context); #endif //VDP_H_