From 135fa6c2e8977e405bdb360249f1e80bfa09b118 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 22 Mar 2024 17:10:14 -0400 Subject: [PATCH] svga works, optimize vga and clean up code --- README.md | 7 +++ bmp.c | 53 +++++++++++++++++++++ bmp.h | 19 ++++++++ chkn640.bmp | Bin 0 -> 308358 bytes dpmi.c | 50 ++++++++++++++++++++ dpmi.h | 18 +++++++ main.c | 60 ++++++++++++------------ makefile | 6 +++ svga.c | 102 ++++++++++++++++++++++++++++++++++++++++ vesa.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++ vesa.h | 57 ++++++++++++++++++++++ vga.asm | 124 +++++++++++++++++++++++++++++------------------- 12 files changed, 551 insertions(+), 78 deletions(-) create mode 100644 README.md create mode 100644 bmp.c create mode 100644 bmp.h create mode 100644 chkn640.bmp create mode 100644 dpmi.c create mode 100644 dpmi.h create mode 100644 svga.c create mode 100644 vesa.c create mode 100644 vesa.h diff --git a/README.md b/README.md new file mode 100644 index 0000000..25f7e61 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# VGA logic units in 256 colors and SVGA mode usage + +Some code to exercise the four logic units of the VGA card in +256 color mode, as well as code that gets SVGA mode +working. Most of this is in C, but some of it's in assembler +to help me learn assembler better, as well as get comfortable with +C/asm interop on x86. diff --git a/bmp.c b/bmp.c new file mode 100644 index 0000000..f11146b --- /dev/null +++ b/bmp.c @@ -0,0 +1,53 @@ +#include +#include + +#include "bmp.h" +#include "vesa.h" + +int readBMPHeader(FILE *fh, struct BMPImage *info) { + int sizeOfHeader; + char value; + unsigned int numberOfUsedColors; + + if ((fgetc(fh) != 'B') || (fgetc(fh) != 'M')) { + printf("Not a BMP file\n"); + return 1; + } + + fseek(fh, 12, SEEK_CUR); + + fread(&sizeOfHeader, sizeof(int), 1, fh); + fread(&info->width, sizeof(int), 1, fh); + fread(&info->height, sizeof(int), 1, fh); + fseek(fh, 2, SEEK_CUR); + fread(&info->bpp, sizeof(int), 1, fh); + + // for gimp, you need to add colors to the color map until it hits + // 16 colors, then the image will be a 256 color, 8 bpp image + // + // https://www.gimp-forum.net/Thread-indexing-into-8-bit?pid=13233#pid13233 + if (info->bpp != 8) return 1; + + fseek(fh, 18, SEEK_CUR); + fread(&numberOfUsedColors, sizeof(unsigned int), 1, fh); + printf("used colors: %d\n",numberOfUsedColors); + if (numberOfUsedColors > 256) return 1; + + + // get down to color data + fseek(fh, 14 + sizeOfHeader, SEEK_SET); + + fread(info->colors, sizeof(struct BMPColor), numberOfUsedColors, fh); + + return 0; +} + +void bmp256ColorPaletteToVESAColorPalette(struct BMPImage* bmpImage, struct VESAColor colors[]) { + int i; + + for (i = 0; i < 256; ++i) { + colors[i].red = bmpImage->colors[i].red >> 2; + colors[i].green = bmpImage->colors[i].green >> 2; + colors[i].blue = bmpImage->colors[i].blue >> 2; + } +} diff --git a/bmp.h b/bmp.h new file mode 100644 index 0000000..68430a5 --- /dev/null +++ b/bmp.h @@ -0,0 +1,19 @@ +#pragma pack(push,1) +struct BMPColor { + uint8_t blue; + uint8_t green; + uint8_t red; + uint8_t _a; +}; + +struct BMPImage { + uint16_t width; + uint16_t height; + uint16_t bpp; + struct BMPColor colors[256]; + char *memoryStart; + + uint16_t transparentColor; +}; +#pragma pack(pop) + diff --git a/chkn640.bmp b/chkn640.bmp new file mode 100644 index 0000000000000000000000000000000000000000..99b875df68eac0b4c67752c68b8d4fb01185525c GIT binary patch literal 308358 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 _KpTC!D!L`t^6L7!F8 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 WnO+0vkXbl_*T77?PJW?&4!PZAF> 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 literal 0 HcmV?d00001 diff --git a/dpmi.c b/dpmi.c new file mode 100644 index 0000000..10ed3bf --- /dev/null +++ b/dpmi.c @@ -0,0 +1,50 @@ +#include +#include +#include + +#include "dpmi.h" + +static uint16_t vbeDOSBufferDPMISelector = 0; + +/** +* This is memory accessible to real-mode x86, so that +* interrupts can access the data. +*/ +void *dpmiAllocateDOSMemory(int size) { + union REGS regs; + + // a paragraph is 16 bytes because why not + unsigned short sizeParagraphs = (size + 15) >> 4UL; + + regs.w.ax = 0x0100; + regs.w.bx = sizeParagraphs; + int386(0x31, ®s, ®s); + + vbeDOSBufferDPMISelector = regs.w.dx; + return (void *)(((unsigned long)regs.w.ax) << 4UL); +} + +void dpmiDeallocateDOSMemory() { + union REGS regs; + + regs.w.ax = 0x0101; + regs.w.dx = vbeDOSBufferDPMISelector; + int386(0x31, ®s, ®s); +} + +/** + * You only need to use this if you're passing a DPMI-allocated + * memory struture to an interrupt via ES:DI. Otherwise, a + * regular int386 call is sufficient. + */ +void dpmiInt(int interruptNo, struct dpmiRealModeRegs *rc) { + union REGS regs; + + // call the DPMI real mode interrupt handler + regs.w.ax = 0x0300; + regs.w.bx = interruptNo; // real mode interrupt + regs.w.cx = 0; // don't mess with our stack + regs.x.edi = (unsigned int)rc; + + int386(0x31, ®s, ®s); +} diff --git a/dpmi.h b/dpmi.h new file mode 100644 index 0000000..762b5ae --- /dev/null +++ b/dpmi.h @@ -0,0 +1,18 @@ +#ifndef __DPMI_H__ +#define __DPMI_H__ + +#include + +#pragma pack(push,1) +struct dpmiRealModeRegs { + uint32_t edi,esi,ebp,reserved; + uint32_t ebx,edx,ecx,eax; + uint16_t flags,es,ds,fs,gs,ip,cs,sp,ss; +}; +#pragma paack(pop) + +void *dpmiAllocateDOSMemory(int size); +void dpmiDeallocateDOSMemory(); +void dpmiInt(int interruptNo, struct dpmiRealModeRegs *); + +#endif diff --git a/main.c b/main.c index bcf289b..7dae515 100644 --- a/main.c +++ b/main.c @@ -7,14 +7,14 @@ extern void __cdecl enableUnchainedVGAMode(); extern void __cdecl enableTextMode(); extern void __cdecl fillScreen(int); extern void __cdecl latchCopyCube( - char offset, + int offset, int writtenValue, int writeMode, int setResetRegister, int enableSetResetRegister ); extern void __cdecl writeCube( - char offset, + int offset, int writeMode, int setResetRegister, int enableSetResetRegister @@ -23,7 +23,6 @@ extern void __cdecl drawColorCube( char offset, int color ); -extern int __cdecl paramTest(int wow); extern void far interrupt keyboardHandler(); extern char keyboardPressed; @@ -40,9 +39,9 @@ void populateExampleCube(void) { outp(0x3c4, 0x02); - for (y = 0; y < 16; ++y) { - for (x = 0; x < 16; ++x) { - outp(0x3c5, 1 << (x % 4)); + for (x = 0; x < 16; ++x) { + outp(0x3c5, 1 << (x % 4)); + for (y = 0; y < 16; ++y) { VGA[y * PLANE_WIDTH + x / 4] = y * 16 + x; } } @@ -50,20 +49,20 @@ void populateExampleCube(void) { 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 + // * latch copies with logical operators + // * plane selection // * barrel shifting - - int i,j; + // * set/reset int9Save = _dos_getvect(9); _dos_setvect(9, keyboardHandler); enableUnchainedVGAMode(); + // set a very bright color as the last possible color to make + // set/reset usage more visible outp(0x3c8, 255); outp(0x3c9, 63); outp(0x3c9, 63); @@ -71,27 +70,28 @@ int main(void) { fillScreen(0); - /* populateExampleCube(); - latchCopyCube(8, 0, 0x00, 0, 0); - latchCopyCube(12, 127, 0x00, 0, 0); - latchCopyCube(16, 0, 0x08, 0, 0); - latchCopyCube(20, 127, 0x08, 0, 0); - latchCopyCube(24, 0, 0x10, 0, 0); - latchCopyCube(28, 127, 0x10, 0, 0); - latchCopyCube(32, 0, 0x18, 0, 0); - latchCopyCube(36, 127, 0x18, 0, 0); - latchCopyCube(40, 0, 0x18 + 0x04, 0, 0); - latchCopyCube(44, 127, 0x18 + 0x04, 0, 0); - latchCopyCube(64, 0, 0x10, 7, 7); - latchCopyCube(68, 0, 0x10, 7, 0); - latchCopyCube(72, 0, 0x10, 0, 7); - */ - writeCube(0, 0x10, 0, 0); - writeCube(4, 0x10, 7, 0); - writeCube(8, 0x10, 7, 7); - writeCube(12, 0x10, 0, 7); + latchCopyCube(80 * 20, 0, 0x00, 0, 0); + latchCopyCube(80 * 20 + 5, 127, 0x00, 0, 0); + latchCopyCube(80 * 20 + 10, 0, 0x08, 0, 0); + latchCopyCube(80 * 20 + 15, 127, 0x08, 0, 0); + latchCopyCube(80 * 20 + 20, 0, 0x10, 0, 0); + latchCopyCube(80 * 20 + 25, 127, 0x10, 0, 0); + latchCopyCube(80 * 20 + 30, 0, 0x18, 0, 0); + latchCopyCube(80 * 20 + 35, 127, 0x18, 0, 0); + latchCopyCube(80 * 20 + 40, 127, 0x10, 1, 3); + + latchCopyCube(80 * 40, 0, 0x18 + 0x04, 0, 0); + latchCopyCube(80 * 40 + 5, 127, 0x18 + 0x04, 0, 0); + + latchCopyCube(80 * 40 + 10, 0, 0x10, 3, 3); + latchCopyCube(80 * 40 + 15, 0, 0x10, 1, 3); + latchCopyCube(80 * 40 + 20, 0, 0x10, 0, 3); + + writeCube(5, 0x00, 1, 3); + writeCube(10, 0x00, 0, 3); + writeCube(15, 0x00, 3, 0); while (keyboardPressed == 0); diff --git a/makefile b/makefile index 399726a..a368594 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,5 @@ obj = vga.o main.o +svga_obj = dpmi.o bmp.o vesa.o svga.o .c.o: wcc386 -q -bt=dos $< @@ -8,3 +9,8 @@ obj = vga.o main.o main.exe: $(obj) wcl386 -fe=main -bt=dos -l=dos4g $(obj) + +svga.exe: $(svga_obj) + wcl386 -fe=svga -bt=dos -l=dos4g $(svga_obj) + +all: main.exe svga.exe diff --git a/svga.c b/svga.c new file mode 100644 index 0000000..bafd115 --- /dev/null +++ b/svga.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include +#include + +/* + +Set up a 640x480x256 Super VGA screen and load a bitmap image into it. +Wait 10 seconds, then exit the program. + +Since this is going through DOS/4GW, we need to use the DOS Protected +Mode Interface (DPMI) to work with x86 Real Mode RAM so the VESA +interrupt functions have a place to accept and dump data. + +There were a lot of scattered examples as to how to get SVGA going, but: + +* most were written in assembler and, while I can read assembler, I don't + prefer to, especially in the early learning stages of a bunch of new concepts +* very few of them covered the whole pipeline of query display, then + set it up, then do something real with it + +So here's this one. Enjoy. + +John + +*/ + +// built from a combination of: +// +// * http://www.pennelynn.com/Documents/CUJ/HTML/14.08/KREHBIEL/KREHL1.HTM +// * https://forum.osdev.org/viewtopic.php?f=2&t=30186 +// * https://github.com/joncampbell123/doslib/blob/master/hw/vesa/vesa.c +// * https://stackoverflow.com/questions/3318410/pragma-pack-effect +// * https://www.delorie.com/djgpp/doc/dpmi/ch4.4.html +// * https://delorie.com/djgpp/doc/dpmi/api/310100.html +// * http://www.monstersoft.com/tutorial1/VESA_intro.html +// * http://www.delorie.com/djgpp/doc/ug/graphics/vesa.html.en +// * https://lhlaurini.xyz/VESA_Video_Modes +// * https://stackoverflow.com/questions/58328264/retrieve-list-of-vesa-video-modes-from-int-10h-ax-4f00h +// * https://github.com/execomrt/vesa2/blob/main/vbelib/vbecore.c#L262 +// * https://pdos.csail.mit.edu/6.828/2004/readings/hardware/vbe3.pdf + +#include "vesa.h" +#include "bmp.h" +#include "dpmi.h" + +/** + +If you want to enumerate all the possible modes to inspect, you would need +something like this to turn the segment:offset data into array elements you can +address in 32-bit DOS. + +uint16_t *modePtr; + +modePtr = (uint16_t*)((vbeInfo.VideoModeSegment << 4) + vbeInfo.VideoModeOffset); +for (i = 0; i < 4; ++i) { + printf("Available mode %d: 0x%x\n", i, modePtr[i]); +} + +*/ + +int main(void) { + int x, y; + FILE *bmp; + struct BMPImage bmpImage; + struct VESAColor colors[256]; + struct VbeInfo vbeInfo; + struct VbeModeInfo vbeModeInfo; + + setupVESAHandling(); + + vbeGetVBEInfo(&vbeInfo); + printf("VBE Version: 0x%x\n", vbeInfo.VbeVersion); + + bmp = fopen("chkn640.bmp", "rb"); + readBMPHeader(bmp, &bmpImage); + bmp256ColorPaletteToVESAColorPalette(&bmpImage, colors); + + // we could enumerate all the modes, but in DOSBox-X's default S3 VGA card, + // 0x101 is 640x480x256, and that's where I'm running this. it's more correct + // to select the mode based on examining capabilities for all available + // modes, but...eh. + startSVGAMode(0x101, &vbeModeInfo); + setVESAColorPalette(colors); + + for (y = 0; y < vbeModeInfo.YResolution; ++y) { + for (x = 0; x < vbeModeInfo.XResolution; ++x) { + setPixel(x, vbeModeInfo.YResolution - y, fgetc(bmp)); + } + } + + fclose(bmp); + + delay(10000); + + teardownVESAHandling(); + + return 0; +} diff --git a/vesa.c b/vesa.c new file mode 100644 index 0000000..406b18a --- /dev/null +++ b/vesa.c @@ -0,0 +1,133 @@ +#include +#include +#include + +#include "dpmi.h" +#include "vesa.h" + +char far *VGA = (char*)0xA0000; +long windowSizeBytes, bytesPerScanLine; +void *dosmem; +int currentWindowPosition; + +#define MAX_COLORS (256) + +void setupVESAHandling() { + dosmem = dpmiAllocateDOSMemory(1024); +} + +void teardownVESAHandling() { + dpmiDeallocateDOSMemory(); +} + +void addDOSMemToRealModeRegs(struct dpmiRealModeRegs *rc) { + rc->edi = (unsigned long)dosmem & 0xf; + rc->es = (unsigned long)dosmem >> 4; +} + +void vbeGetModeInfo( + uint16_t mode, + struct VbeModeInfo *modeInfo +) { + struct dpmiRealModeRegs rc={0}; + + _fmemset(dosmem, 0, sizeof(struct VbeModeInfo)); + + rc.eax = 0x4f01; + rc.ecx = mode; + addDOSMemToRealModeRegs(&rc); + + dpmiInt(0x10, &rc); + + _fmemcpy(modeInfo, dosmem, sizeof(struct VbeModeInfo)); +} + +int vbeGetVBEInfo( + struct VbeInfo far *p +) { + struct dpmiRealModeRegs rc={0}; + + // request VBE2 extended info + _fmemset(p, 0, sizeof(struct VbeInfo)); + _fmemcpy(p->VbeSignature,"VBE2",4); + _fmemcpy(dosmem, p, sizeof(struct VbeInfo)); + + rc.eax = 0x4f00; + addDOSMemToRealModeRegs(&rc); + + dpmiInt(0x10, &rc); + + _fmemcpy(p, dosmem, sizeof(struct VbeInfo)); + + return 0; +} + +void startSVGAMode(int mode, struct VbeModeInfo *vbeModeInfo) { + /** + * Side effects: sets some internal variables for window and scanline sizes + */ + union REGS regs; + + vbeGetModeInfo(mode, vbeModeInfo); + + windowSizeBytes = 1024L * vbeModeInfo->WinSize; + bytesPerScanLine = vbeModeInfo->BytesPerScanLine; + + regs.w.ax = 0x4f02; + regs.w.bx = mode; + int386(0x10, ®s, ®s); + + vbeSetWindow(0, 0); +} + +void vbeSetWindow(int window, int position) { + /** + * Side effects: tracks current window position + */ + union REGS regs; + + regs.w.ax = 0x4f05; + regs.h.bh = 0; + regs.h.bl = window; + regs.w.dx = position; + int386(0x10, ®s, ®s); + + currentWindowPosition = position; +} + +void maybeVbeSetWindow(int window, int position) { + if (currentWindowPosition == position) return; + + vbeSetWindow(window, position); +} + +void setVESAColorPalette( + struct VESAColor *colors +) { + struct dpmiRealModeRegs rc={0}; + int i; + + _fmemcpy(dosmem, colors, MAX_COLORS * 4); + + // prep our real mode interrupt call + rc.eax = 0x4f09; + rc.ebx = 0; + rc.ecx = MAX_COLORS; + rc.edx = 0; + addDOSMemToRealModeRegs(&rc); + + dpmiInt(0x10, &rc); +} + +void setPixel(int x, int y, int color) { + long absolutePosition = (long)y * bytesPerScanLine + x; + long windowPosition = absolutePosition / windowSizeBytes; + long windowOffset = absolutePosition % windowSizeBytes; + + /** + * This will not shift window positions unless needed. + */ + maybeVbeSetWindow(0, windowPosition); + + VGA[windowOffset] = color; +} diff --git a/vesa.h b/vesa.h new file mode 100644 index 0000000..7adcddf --- /dev/null +++ b/vesa.h @@ -0,0 +1,57 @@ +#ifndef __VESA_H__ +#define __VESA_H__ + +#include + +#pragma pack(push,1) +struct VbeInfo { + char VbeSignature[4]; + uint16_t VbeVersion; + uint32_t OemStringPtr; + uint32_t Capabilities; + + uint16_t VideoModeOffset; + uint16_t VideoModeSegment; + + uint16_t TotalMemory; + + int OemSoftwareRev; + char far *OemVendorNamePtr; + char far *OemProductNamePtr; + char far *OenProductRevPtr; + char Reserved[222]; + char OemData[256]; +}; + +struct VbeModeInfo { + uint16_t ModeAttributes; + uint8_t WinAAttributes; + uint8_t WinBAttributes; + uint16_t WinGranularity; + uint16_t WinSize; + uint16_t WinASegment; + uint16_t WinBSegment; + void *WindowFunction; + uint16_t BytesPerScanLine; + uint16_t XResolution; + uint16_t YResolution; + uint8_t XCharSize; + uint8_t YCharSize; + uint8_t NumberOfPlanes; + uint8_t BitsPerPixel; + uint8_t NumberOfBanks; + uint8_t MemoryModel; + uint8_t BankSize; + uint8_t NumberOfImagePages; + char more[500]; +}; + +struct VESAColor { + uint8_t blue; + uint8_t green; + uint8_t red; + uint8_t _a; +}; +#pragma pack(pop) + +#endif diff --git a/vga.asm b/vga.asm index bbe5a9b..f527d18 100644 --- a/vga.asm +++ b/vga.asm @@ -4,7 +4,6 @@ PUBLIC _fillScreen PUBLIC _latchCopyCube PUBLIC _drawColorCube PUBLIC _writeCube -PUBLIC _paramTest PUBLIC _keyboardPressed PUBLIC keyboardHandler_ @@ -39,6 +38,7 @@ keyboardHandler_: push eax push ebx + ; put scancode into bl in al, 0x60 mov bl, al @@ -50,6 +50,7 @@ keyboardHandler_: xchg ah, al out 0x61, al + ; a key is pressed if the topmost bit of the scancode is 0 and bl,0x80 jne _keyboardHandler_notKeydown @@ -62,8 +63,10 @@ _keyboardHandler_notKeydown: pop ebx pop eax sti + ; return from the interrupt in a way that preserves the calling stack iretd + _enableUnchainedVGAMode: mov ax,0x0013; int 0x10 @@ -85,12 +88,14 @@ _enableUnchainedVGAMode: ret + _enableTextMode: mov ah,0h mov al,DISPLAY_MODE_TEXT int 10h ret + _fillScreen: push ebp mov ebp, esp @@ -98,34 +103,45 @@ _fillScreen: ; set all bitplanes mov dx, VGA_SEQUENCE_CONTROLLER_INDEX mov al, 0x02 - mov ah, 0fh + mov ah, 0x0f out dx, ax - mov al, [ebp+8] ; requested color + push ebx + push ecx + push edx + sub eax,eax + mov al, [ebp+8] ; requested color - mov cx, 16000 ; loop index - mov ebx, 0xa0000 + ; we can write a long at a time and let the bus + ; and BIU work out the details. on a 16-bit ISA + ; bus with a 16-bit VGA card, this will be faster + ; than byte writes + sub edx,edx + add dl,al + shl edx,8 + add dl,al + shl edx,8 + add dl,al + shl edx,8 + add dl,al + + ; with all planes selected we only need to fill 16000 bytes of data + ; and we're filling them four bytes at a time + mov cx, 4000 + mov ebx, 0xA0000 ; VGA base address _fillScreen_loop: - mov BYTE PTR [ebx], al - inc ebx - loop _fillScreen_loop + mov DWORD PTR [ebx], edx + add ebx,4 + loop _fillScreen_loop + pop edx + pop ecx + pop ebx mov esp,ebp pop ebp ret -_paramTest: - push ebp - mov ebp,esp - - mov eax,0 - mov al, BYTE PTR [ebp+8] - - mov esp,ebp - pop ebp - ret - _drawColorCube: push ebp @@ -165,6 +181,7 @@ _drawColorCube: _drawColorCube_yLoop: mov [ebp-4],cx + ; put the VGA write offset into eax mov eax,[ebp-4] dec eax mov bl,80 @@ -174,7 +191,7 @@ _drawColorCube_yLoop: mov cx, 4 _drawColorCube_xLoop: - mov [eax],bh ; write color + mov [eax],bh ; write color four bytes at a time inc eax loop _drawColorCube_xLoop @@ -190,15 +207,15 @@ _drawColorCube_xLoop: ret - - _writeCube: push ebp mov ebp,esp ; we need a y variable sub esp,4 - ; and a current color - sub esp,4 + + push ebx + push ecx + push edx ; [ebp+8] is x offset ; [ebp+12] is data rotate @@ -222,57 +239,66 @@ _writeCube: mov ah, [ebp+20] out dx, ax - mov DWORD PTR [ebp-8],0 mov DWORD PTR [ebp-4],16 mov cx,[ebp-4] _writeCube_yLoop: mov [ebp-4],cx + ; determine the offset within VGA memory to write this line to + ; and put it in eax mov eax,[ebp-4] dec eax mov bl,80 mul bl - add eax,0xa0000 + add eax,0xA0000 + ; 16 pixels across mov cx,16 _writeCube_xLoop: - ; get the current plane - push ecx - dec cl - and cl,0x03 - - jne _writeCube_dontAdvanceVGA - inc eax -_writeCube_dontAdvanceVGA: - - mov bl,1 - sal bl,cl - pop ecx - push eax + ; get the plane to write to in bl + push ecx + dec ecx + and ecx,0x03 + mov bl,1 + shl bl,cl + pop ecx + ; write to one plane mov dx, VGA_SEQUENCE_CONTROLLER_INDEX mov al, VGA_SEQUENCE_CONTROLLER_MAP_MASK_MODE mov ah, bl out dx, ax + + ; select color to write into bl + mov ax,[ebp-4] + dec ax + mov bl,16 + mul bl + add al,cl + mov bl,al pop eax - ;mov ebx,[ebp+8] - - push ecx - mov ecx,[ebp+8] - mov bl,[ebp-8] - mov BYTE PTR [eax+ecx],bl - inc bl - mov [ebp-8],bl - pop ecx + push edx + push ecx + ; select the correct pixel offset (x / 4) and write the color + dec ecx + shr ecx,2 + add ecx,[ebp+8] + mov BYTE PTR [eax+ecx],bl + pop ecx + pop edx loop _writeCube_xLoop mov cx,[ebp-4] loop _writeCube_yLoop + pop edx + pop ecx + pop ebx + mov esp,ebp pop ebp ret @@ -359,6 +385,8 @@ _latchCopyCube_xLoop: ; loop until y is 0 loop _latchCopyCube_yLoop +_done: + ; put things back pop ebx pop edx