aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-06-08 22:11:44 +0100
committerJuan J. Martinez <jjm@usebox.net>2023-06-08 22:11:44 +0100
commitcb6d24b838632e1269a5e4bb4e83425061f5d853 (patch)
treefd58b5d7ceddb9bf0fd3f3058b71d53a03ebd32b
parentc5e314048afd1ba3f87204b0655af70f95ae7ab1 (diff)
downloadgold-mine-run-cb6d24b838632e1269a5e4bb4e83425061f5d853.tar.gz
gold-mine-run-cb6d24b838632e1269a5e4bb4e83425061f5d853.zip
Detect the VGA card before setting mode 0x13
-rw-r--r--TODO.md1
-rw-r--r--src/main.c6
-rw-r--r--src/vga.c12
-rw-r--r--src/vga.h2
4 files changed, 17 insertions, 4 deletions
diff --git a/TODO.md b/TODO.md
index a3e7d49..8636906 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,7 +1,6 @@
# TODO
- drawing
- - detect VGA
- sw blitter
- input
- joystick?
diff --git a/src/main.c b/src/main.c
index c0e7dc3..672a478 100644
--- a/src/main.c
+++ b/src/main.c
@@ -17,7 +17,11 @@ int main(int argc, char *argv[])
atexit(keyb_free);
/* set VGA 320x200, 256 col */
- set_mode(0x13);
+ if (!set_mode(0x13))
+ {
+ fprintf(stderr, "ERROR: failed to init the VGA card\n");
+ return 1;
+ }
set_palette(binary_palette_start);
diff --git a/src/vga.c b/src/vga.c
index e90ebba..6b093c0 100644
--- a/src/vga.c
+++ b/src/vga.c
@@ -25,9 +25,17 @@ void close_framebuffer()
__djgpp_nearptr_disable();
}
-void set_mode(uint8_t mode)
+uint8_t set_mode(uint8_t mode)
{
__dpmi_regs regs = { 0 };
+
+ /* detect VGA card */
+ regs.x.ax = 0x1a00;
+ __dpmi_int(0x10, &regs);
+ if (regs.h.al != 0x1a)
+ return 0;
+
+ memset(&regs, 0, sizeof(regs));
regs.x.ax = mode;
__dpmi_int(0x10, &regs);
@@ -57,6 +65,8 @@ void set_mode(uint8_t mode)
outportw(0x3d4, 0x8e11); /* restore retrace */
enable();
}
+
+ return 1;
}
void wait_vsync()
diff --git a/src/vga.h b/src/vga.h
index a185974..8dae83d 100644
--- a/src/vga.h
+++ b/src/vga.h
@@ -14,7 +14,7 @@ typedef struct {
uint8_t open_framebuffer();
void close_framebuffer();
-void set_mode(uint8_t mode);
+uint8_t set_mode(uint8_t mode);
void wait_vsync();
/* the palette is expected to be 8 bit per color, and will be converted to VGA's 6 bit per color */