aboutsummaryrefslogtreecommitdiff
path: root/VexRiscvSocSoftware/libs/vga.h
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscvSocSoftware/libs/vga.h')
-rw-r--r--VexRiscvSocSoftware/libs/vga.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/VexRiscvSocSoftware/libs/vga.h b/VexRiscvSocSoftware/libs/vga.h
new file mode 100644
index 0000000..182b968
--- /dev/null
+++ b/VexRiscvSocSoftware/libs/vga.h
@@ -0,0 +1,78 @@
+/*
+ * vga.h
+ *
+ * Created on: Jul 8, 2017
+ * Author: spinalvm
+ */
+
+#ifndef VGA_H_
+#define VGA_H_
+#include <stdint.h>
+
+typedef struct {
+ uint32_t hSyncStart ,hSyncEnd;
+ uint32_t hColorStart,hColorEnd;
+
+ uint32_t vSyncStart ,vSyncEnd;
+ uint32_t vColorStart,vColorEnd;
+}Vga_Timing;
+
+static const Vga_Timing vga_h640_v480_r60 = {
+ .hSyncStart = 96,
+ .hSyncEnd = 800,
+ .hColorStart = 96 + 16,
+ .hColorEnd = 800 - 48,
+ .vSyncStart = 2,
+ .vSyncEnd = 525,
+ .vColorStart = 2 + 10,
+ .vColorEnd = 525 - 33
+};
+
+static const Vga_Timing vga_simRes = {
+ .hSyncStart = 8,
+ .hSyncEnd = 70,
+ .hColorStart = 16,
+ .hColorEnd = 64,
+ .vSyncStart = 2,
+ .vSyncEnd = 48,
+ .vColorStart = 8,
+ .vColorEnd = 40
+};
+
+static const Vga_Timing vga_simRes_h160_v120 = {
+ .hSyncStart = 8,
+ .hSyncEnd = 24+160,
+ .hColorStart = 16,
+ .hColorEnd = 16+160,
+ .vSyncStart = 2,
+ .vSyncEnd = 10+120,
+ .vColorStart = 6,
+ .vColorEnd = 6+120
+};
+
+typedef struct
+{
+ volatile uint32_t STATUS;
+ volatile uint32_t FRAME_SIZE;
+ volatile uint32_t FRAME_BASE;
+ volatile uint32_t DUMMY0[13];
+ volatile Vga_Timing TIMING;
+} Vga_Reg;
+
+static uint32_t vga_isBusy(Vga_Reg *reg){
+ return (reg->STATUS & 2) != 0;
+}
+
+static void vga_run(Vga_Reg *reg){
+ reg->STATUS = 1;
+}
+
+static void vga_stop(Vga_Reg *reg){
+ reg->STATUS = 0;
+ while(vga_isBusy(reg));
+}
+
+
+#endif /* VGA_H_ */
+
+