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);