Mercurial > repos > simple16
comparison src/vdp.h @ 22:407725d9a02f
Implemented sprite drawing. Added small sprite example.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 30 Mar 2016 19:55:48 -0700 |
parents | 04fc17376999 |
children | a085f17b79e9 |
comparison
equal
deleted
inserted
replaced
21:91ded3b12d96 | 22:407725d9a02f |
---|---|
1 #ifndef VDP_H_ | 1 #ifndef VDP_H_ |
2 #define VDP_H_ | 2 #define VDP_H_ |
3 | |
4 typedef struct { | |
5 uint16_t source; | |
6 uint16_t x; | |
7 uint8_t hflip; | |
8 uint8_t palpriority; | |
9 } sprite_draw; | |
3 | 10 |
4 typedef struct { | 11 typedef struct { |
5 uint16_t *framebuffer; | 12 uint16_t *framebuffer; |
6 uint8_t *drawbuffer; | 13 uint8_t *drawbuffer; |
7 uint8_t *readbuffer; | 14 uint8_t *readbuffer; |
20 uint16_t hscroll; | 27 uint16_t hscroll; |
21 | 28 |
22 uint16_t draw_source; | 29 uint16_t draw_source; |
23 uint16_t draw_dest; | 30 uint16_t draw_dest; |
24 | 31 |
32 | |
25 uint16_t vram[32*512]; | 33 uint16_t vram[32*512]; |
26 uint8_t linebuffers[328*2]; | 34 uint8_t linebuffers[328*2]; |
27 uint16_t sram[64*2]; | 35 uint16_t sram[64*2]; |
28 uint16_t cram[64]; | 36 uint16_t cram[64]; |
29 | 37 |
38 sprite_draw sprite_draws[40]; | |
39 | |
30 uint8_t fifo_dest; | 40 uint8_t fifo_dest; |
31 uint8_t draw_counter; | 41 uint8_t draw_counter; |
32 uint8_t palpriority; | 42 uint8_t palpriority; |
43 uint8_t current_draw; | |
33 } vdp; | 44 } vdp; |
34 | 45 |
35 enum { | 46 enum { |
36 FIFO_DEST_INVALID, | 47 FIFO_DEST_INVALID, |
37 FIFO_DEST_VRAM, | 48 FIFO_DEST_VRAM, |
38 FIFO_DEST_SRAM, | 49 FIFO_DEST_SRAM, |
39 FIFO_DEST_CRAM | 50 FIFO_DEST_CRAM |
40 }; | 51 }; |
41 | 52 |
42 #define VDP_STATUS_FIFO 1 | 53 #define VDP_STATUS_FIFO 1 |
43 #define VDP_STATUS_VRAM 2 | 54 #define VDP_STATUS_VRAM 2 |
44 #define VDP_STATUS_SRAM 4 | 55 #define VDP_STATUS_SRAM 4 |
45 #define VDP_STATUS_ENABLED 8 | 56 #define VDP_STATUS_ENABLED 8 |
57 #define VDP_STATUS_SPRITE_SCAN 16 | |
46 | 58 |
47 void vdp_init(vdp *context, uint32_t clock_div); | 59 void vdp_init(vdp *context, uint32_t clock_div); |
48 void vdp_run(vdp *context, uint32_t target); | 60 void vdp_run(vdp *context, uint32_t target); |
49 void vdp_write_address(vdp *context, uint16_t value); | 61 void vdp_write_address(vdp *context, uint16_t value); |
50 void vdp_write_data(vdp *context, uint16_t value); | 62 void vdp_write_data(vdp *context, uint16_t value); |