PicoVGA
1.0-cmake
VGA/TV display on Raspberry Pico
vga_config.h
1
2
// ****************************************************************************
3
//
4
// VGA configuration
5
//
6
// ****************************************************************************
7
8
// === Configuration
9
#define LAYERS 4 // total layers 1..4 (1 base layer + 3 overlapped layers)
10
#define SEGMAX 8 // max. number of video segment per video strip (size of 1 sSegm = 28 bytes)
11
#define STRIPMAX 8 // max. number of video strips (size of 1 sStrip = sSegm size*SEGMAX+4 = 228 bytes)
12
// size of sScreen = sStrip size*STRIPMAX+4 = 1828 bytes
13
14
#define MAXX 640 // max. resolution in X direction (must be power of 4)
15
#define MAXY 480 // max. resolution in Y direction
16
17
#define MAXLINE 700 // max. number of scanlines (including sync and dark lines)
18
19
// === Scanline render buffers (800 pixels: default size of buffers = 2*4*(800+8+800+24)+800 = 13856 bytes
20
// Requirements by format, base layer 0, 1 wrap X segment:
21
// GF_GRAPH8 ... control buffer 16 bytes
22
// GF_TILE8 ... control buffer "width"+8 bytes
23
// GF_TILE16 ... control buffer "width/2"+8 bytes
24
// GF_TILE32 ... control buffer "width/4"+8 bytes
25
// GF_TILE64 ... control buffer "width/8"+8 bytes
26
// GF_PROGRESS ... control buffer 24 bytes
27
// other formats: data buffer "width" bytes, control buffer 16 bytes
28
#define DBUF0_MAX (MAXX+8) // max. size of data buffer of layer 0
29
#define CBUF0_MAX ((MAXX+24)/4) // max. size of control buffer of layer 0
30
31
// Requirements by format, overlapped layer 1..3:
32
// LAYERMODE_SPRITE* ... data buffer "width"+4 bytes, control buffer 24 bytes
33
// LAYERMODE_FASTSPRITE* ... data buffer "width"+4 bytes, control buffer up to "width*2"+16 bytes
34
// other formats ... data buffer 4 bytes, control buffer 24 bytes
35
#define DBUF1_MAX (MAXX+8) // max. size of data buffer of layer 1
36
#define CBUF1_MAX ((MAXX+24)/4) // max. size of control buffer of layer 1
37
38
#define DBUF2_MAX (MAXX+8) // max. size of data buffer of layer 2
39
#define CBUF2_MAX ((MAXX+24)/4) // max. size of control buffer of layer 2
40
41
#define DBUF3_MAX (MAXX+8) // max. size of data buffer of layer 3
42
#define CBUF3_MAX ((MAXX+24)/4) // max. size of control buffer of layer 3
43
44
#if LAYERS==1
45
#define DBUF_MAX DBUF0_MAX // max. size of data buffer
46
#define CBUF_MAX CBUF0_MAX // max. size of control buffer
47
#elif LAYERS==2
48
#define DBUF_MAX (DBUF0_MAX+DBUF1_MAX) // max. size of data buffer
49
#define CBUF_MAX (CBUF0_MAX+CBUF1_MAX) // max. size of control buffer
50
#elif LAYERS==3
51
#define DBUF_MAX (DBUF0_MAX+DBUF1_MAX+DBUF2_MAX) // max. size of data buffer
52
#define CBUF_MAX (CBUF0_MAX+CBUF1_MAX+CBUF2_MAX) // max. size of control buffer
53
#elif LAYERS==4
54
#define DBUF_MAX (DBUF0_MAX+DBUF1_MAX+DBUF2_MAX+DBUF3_MAX) // max. size of data buffer
55
#define CBUF_MAX (CBUF0_MAX+CBUF1_MAX+CBUF2_MAX+CBUF3_MAX) // max. size of control buffer
56
#else
57
#error Unsupported number of layers!
58
#endif
59
60
// === VGA port pins
61
// GP0 ... VGA B0 blue
62
// GP1 ... VGA B1
63
// GP2 ... VGA G0 green
64
// GP3 ... VGA G1
65
// GP4 ... VGA G2
66
// GP5 ... VGA R0 red
67
// GP6 ... VGA R1
68
// GP7 ... VGA R2
69
// GP8 ... VGA SYNC synchronization (inverted: negative SYNC=LOW=0x80, BLACK=HIGH=0x00)
70
#define VGA_GPIO_FIRST 0 // first VGA GPIO
71
#define VGA_GPIO_NUM 9 // number of VGA GPIOs, including HSYNC and VSYNC
72
#define VGA_GPIO_OUTNUM 8 // number of VGA color GPIOs, without HSYNC and VSYNC
73
#define VGA_GPIO_LAST (VGA_GPIO_FIRST+VGA_GPIO_NUM-1) // last VGA GPIO
74
#define VGA_GPIO_SYNC 8 // VGA SYNC GPIO
75
76
// VGA PIO and state machines
77
#define VGA_PIO pio0 // VGA PIO
78
#define VGA_SM0 0 // VGA state machine of base layer 0
79
#define VGA_SM1 1 // VGA state machine of overlapped layer 1
80
#define VGA_SM2 2 // VGA state machine of overlapped layer 2
81
#define VGA_SM3 3 // VGA state machine of overlapped layer 3
82
#define VGA_SM(layer) (VGA_SM0+(layer)) // VGA state machine of the layer
83
84
#if LAYERS==1
85
#define VGA_SMALL B0 // mask of all state machines
86
#elif LAYERS==2
87
#define VGA_SMALL (B0+B1) // mask of all state machines
88
#elif LAYERS==3
89
#define VGA_SMALL (B0+B1+B2) // mask of all state machines
90
#elif LAYERS==4
91
#define VGA_SMALL (B0+B1+B2+B3) // mask of all state machines
92
#else
93
#error Unsupported number of layers!
94
#endif
95
96
// VGA DMA
97
#define VGA_DMA 0 // VGA DMA base channel
98
#define VGA_DMA_CB0 (VGA_DMA+0) // VGA DMA channel - control block of base layer
99
#define VGA_DMA_PIO0 (VGA_DMA+1) // VGA DMA channel - copy data of base layer to PIO (raises IRQ0 on quiet)
100
#define VGA_DMA_CB1 (VGA_DMA+2) // VGA DMA channel - control block of overlapped layer 1
101
#define VGA_DMA_PIO1 (VGA_DMA+3) // VGA DMA channel - copy data of overlapped layer 1 to PIO
102
#define VGA_DMA_CB2 (VGA_DMA+4) // VGA DMA channel - control block of overlapped layer 1
103
#define VGA_DMA_PIO2 (VGA_DMA+5) // VGA DMA channel - copy data of overlapped layer 2 to PIO
104
#define VGA_DMA_CB3 (VGA_DMA+6) // VGA DMA channel - control block of overlapped layer 1
105
#define VGA_DMA_PIO3 (VGA_DMA+7) // VGA DMA channel - copy data of overlapped layer 3 to PIO
106
107
#define VGA_DMA_CB(layer) (VGA_DMA_CB0+(layer)*2) // VGA DMA control channel of the layer
108
#define VGA_DMA_PIO(layer) (VGA_DMA_PIO0+(layer)*2) // VGA DMA data channel of the layer
109
110
#define VGA_DMA_NUM (LAYERS*2) // number of used DMA channels
111
#define VGA_DMA_FIRST VGA_DMA // first used DMA
112
#define VGA_DMA_LAST (VGA_DMA_FIRST+VGA_DMA_NUM-1) // last used DMA
vga_config.h
Generated by
1.8.17