commit 9ec9389bdff867a95943413fbeec89e9ff989d97 Author: John Bintz Date: Tue Mar 19 08:18:55 2024 -0400 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b6b859 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +*.err +*.exe diff --git a/main.c b/main.c new file mode 100644 index 0000000..f8e5b8f --- /dev/null +++ b/main.c @@ -0,0 +1,34 @@ +#include +#include + +extern void __cdecl enableUnchainedVGAMode(); +extern void __cdecl enableTextMode(); + +char far *VGA = (char*)0xA0000; + +int main(void) { + // activate unchained vga mode + // set up 8 very clear colors + // place some data into video memory to be latch copied + // show off the following + // * latch copies + // * masking + // * barrel shifting + + int i,j; + + enableUnchainedVGAMode(); + + outp(0x3c4, 0x02); + + for (i = 0; i < 200; ++i) { + for (j = 0; j < 4; ++j) { + outp(0x3c5, 1 << j); + VGA[i] = j + 1; + } + } + + delay(5000); + + enableTextMode(); +} diff --git a/makefile b/makefile new file mode 100644 index 0000000..399726a --- /dev/null +++ b/makefile @@ -0,0 +1,10 @@ +obj = vga.o main.o + +.c.o: + wcc386 -q -bt=dos $< + +.asm.o: + wasm $< + +main.exe: $(obj) + wcl386 -fe=main -bt=dos -l=dos4g $(obj) diff --git a/run b/run new file mode 100755 index 0000000..c3a5dc6 --- /dev/null +++ b/run @@ -0,0 +1,3 @@ +#!/bin/sh + +wmake -h && dosbox-x -nolog main.exe diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..d5417d6 --- /dev/null +++ b/setup.sh @@ -0,0 +1,5 @@ +export WATCOM=~/Applications/open-watcom-v2/rel +export INCLUDE=$WATCOM/h +export LIB=$WATCOM/lib286/dos:$WATCOM/lib286 +export PATH=$WATCOM/binl64:$WATCOM/binl:$PATH + diff --git a/vga.asm b/vga.asm new file mode 100644 index 0000000..88c8ae7 --- /dev/null +++ b/vga.asm @@ -0,0 +1,48 @@ +PUBLIC _enableUnchainedVGAMode +PUBLIC _enableTextMode + +DISPLAY_MODE_VGA equ 13h +DISPLAY_MODE_TEXT equ 03h + +VGA_SEQUENCE_CONTROLLER_INDEX equ 0x3c4 +VGA_SEQUENCE_CONTROLLER_DATA equ 0x3c5h +VGA_SEQUENCE_CONTROLLER_MEMORY_MODE equ 0x04 + +VGA_CRT_CONTROLLER_INDEX equ 0x03d4 +VGA_CRT_CONTROLLER_DATA equ 0x03d5 +VGA_CRT_CONTROLLER_UNDERLINE_LOC equ 0x14 +VGA_CRT_CONTROLLER_MODE_CONTROL equ 0x17 + +.386 +.model flat,c + +.CODE + +_enableUnchainedVGAMode: + mov ax,0x0013; + int 0x10 + + mov dx, VGA_SEQUENCE_CONTROLLER_INDEX + mov al, VGA_SEQUENCE_CONTROLLER_MEMORY_MODE + mov ah, 0x06 + out dx, ax + + mov dx, VGA_CRT_CONTROLLER_INDEX + mov al, VGA_CRT_CONTROLLER_MODE_CONTROL + mov ah, 0xe3 + out dx, ax + + mov dx, VGA_CRT_CONTROLLER_INDEX + mov al, VGA_CRT_CONTROLLER_UNDERLINE_LOC + mov ah, 0x00 + out dx, ax + + ret + +_enableTextMode: + mov ah,0h + mov al,DISPLAY_MODE_TEXT + int 10h + ret + +end