diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-06-08 22:11:44 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-06-08 22:11:44 +0100 |
commit | cb6d24b838632e1269a5e4bb4e83425061f5d853 (patch) | |
tree | fd58b5d7ceddb9bf0fd3f3058b71d53a03ebd32b /src | |
parent | c5e314048afd1ba3f87204b0655af70f95ae7ab1 (diff) | |
download | gold-mine-run-cb6d24b838632e1269a5e4bb4e83425061f5d853.tar.gz gold-mine-run-cb6d24b838632e1269a5e4bb4e83425061f5d853.zip |
Detect the VGA card before setting mode 0x13
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/vga.c | 12 | ||||
-rw-r--r-- | src/vga.h | 2 |
3 files changed, 17 insertions, 3 deletions
@@ -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); @@ -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, ®s); + if (regs.h.al != 0x1a) + return 0; + + memset(®s, 0, sizeof(regs)); regs.x.ax = mode; __dpmi_int(0x10, ®s); @@ -57,6 +65,8 @@ void set_mode(uint8_t mode) outportw(0x3d4, 0x8e11); /* restore retrace */ enable(); } + + return 1; } void wait_vsync() @@ -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 */ |