4 #include <lunaix/types.h>
6 /* -- Attribute Controller -- */
9 // Attribute Mode Control Register
12 // Overscan Color Register
15 // Color Plane Enable Register
18 // Horizontal Pixel Panning Register
21 // Color Select Register
30 // Clocking Mode Register
36 // Character Map Select Register
39 // Sequencer Memory Mode Register
42 /* -- GFX Controller -- */
48 // Enable Set/Reset Register
51 // Color Compare Register
54 // Data Rotate Register
57 // Read Map Select Register
60 // Graphics Mode Register
63 // Miscellaneous Graphics Register
66 // Color Don't Care Register
72 /* -- CRT Controller -- */
76 // Horizontal Total Register
79 // End Horizontal Display Register
82 // Start Horizontal Blanking Register
85 // End Horizontal Blanking Register
88 // Start Horizontal Retrace Register
91 // End Horizontal Retrace Register
94 // Vertical Total Register
100 // Preset Row Scan Register
101 #define VGA_CR08 0x08
103 // Maximum Scan Line Register
104 #define VGA_CR09 0x09
106 // Cursor Start Register
107 #define VGA_CR0A 0x0A
109 // Cursor End Register
110 #define VGA_CR0B 0x0B
112 // Start Address High Register
113 #define VGA_CR0C 0x0C
115 // Start Address Low Register
116 #define VGA_CR0D 0x0D
118 // Cursor Location High Register
119 #define VGA_CR0E 0x0E
121 // Cursor Location Low Register
122 #define VGA_CR0F 0x0F
124 // Vertical Retrace Start Register
125 #define VGA_CR10 0x10
127 // Vertical Retrace End Register
128 #define VGA_CR11 0x11
130 // Vertical Display End Register
131 #define VGA_CR12 0x12
134 #define VGA_CR13 0x13
136 // Underline Location Register
137 #define VGA_CR14 0x14
139 // Start Vertical Blanking Register
140 #define VGA_CR15 0x15
142 // End Vertical Blanking
143 #define VGA_CR16 0x16
145 // CRTC Mode Control Register
146 #define VGA_CR17 0x17
148 // Line Compare Register
149 #define VGA_CR18 0x18
150 #define VGA_CRCOUNT 0x19
152 /* -- Digital-Analogue Converter -- */
158 #define VGA_DAC1 0x3C9
160 // DAC State Register
161 #define VGA_DAC2 0x3C7
169 #define VGA_MODE_GFX (0b0001)
175 u32_t (*read)(struct vga*, u32_t type, u32_t index, u32_t mask);
176 void (*write)(struct vga*, u32_t type, u32_t index, u32_t val, u32_t mask);
178 *set_seq)(struct vga*, u32_t type, size_t off, u32_t* seq, size_t len);
179 void (*set_dac_palette)(struct vga*, u32_t*, size_t);
191 size_t h_cclk; // horizontal char clock count;
192 size_t v_cclk; // vertical char clock count;
193 size_t pel_dot; // pixel per dot clock
199 struct vga_regops reg_ops;
203 * @brief Create a new VGA state
205 * @param reg_base base address for register accessing
206 * @param fb address to frame buffer
207 * @param fb_sz size of usable frame buffer
208 * @return struct vga* VGA state
211 vga_new_state(ptr_t reg_base, ptr_t fb, ptr_t fb_sz);
214 * @brief Config VGA active displaying region dimension (resolution)
216 * @param width width in pixel counts
217 * @param hight height in pixel counts
218 * @param freq frame update frequency
219 * @param d9 use D9 character clock
222 vga_config_rect(struct vga*, size_t width, size_t hight, size_t freq, int d9);
225 vga_reload_config(struct vga*);
228 vga_update_palette(struct vga* state, u32_t* lut, size_t len);
230 #endif /* __LUNAIX_VGA_H */