Import backup from 2003-12-20
This commit is contained in:
parent
5ccfd0fc74
commit
3bb1e5fffc
78
asmfuncs.asm
78
asmfuncs.asm
@ -40,84 +40,6 @@ _read_cr3:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
;copies 32bpp video buffer memory to LFB
|
|
||||||
;extern dword video_copyBuffer32(dword src, dword dest, dword pixelcount);
|
|
||||||
[global _video_copyBuffer32]
|
|
||||||
_video_copyBuffer32:
|
|
||||||
push ebp
|
|
||||||
mov ebp, esp
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
push ecx
|
|
||||||
mov esi, [ebp+8]
|
|
||||||
mov edi, [ebp+12]
|
|
||||||
mov ecx, [ebp+16]
|
|
||||||
rep movsd
|
|
||||||
pop ecx
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebp
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;copies 24bpp video buffer memory to LFB
|
|
||||||
;extern dword video_copyBuffer24(dword src, dword dest, dword pixelcount);
|
|
||||||
[global _video_copyBuffer24]
|
|
||||||
_video_copyBuffer24:
|
|
||||||
push ebp
|
|
||||||
mov ebp, esp
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
push ecx
|
|
||||||
mov esi, [ebp+8]
|
|
||||||
mov edi, [ebp+12]
|
|
||||||
mov ecx, [ebp+16]
|
|
||||||
_video_copyBuffer24_loop:
|
|
||||||
movsd
|
|
||||||
dec edi
|
|
||||||
loop _video_copyBuffer24_loop
|
|
||||||
pop ecx
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebp
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;copies 16bpp video buffer memory to LFB
|
|
||||||
;extern dword video_copyBuffer16(dword src, dword dest, dword pixelcount);
|
|
||||||
[global _video_copyBuffer16]
|
|
||||||
_video_copyBuffer16:
|
|
||||||
push ebp
|
|
||||||
mov ebp, esp
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
push ecx
|
|
||||||
push ebx
|
|
||||||
mov esi, [ebp+8]
|
|
||||||
mov edi, [ebp+12]
|
|
||||||
mov ecx, [ebp+16]
|
|
||||||
_video_copyBuffer16_loop:
|
|
||||||
lodsd ;eax = 32bpp color
|
|
||||||
shr eax, 3
|
|
||||||
mov ebx, eax
|
|
||||||
and ebx, 0x1F
|
|
||||||
shr eax, 2
|
|
||||||
and eax, 0xFFFFFFE0
|
|
||||||
or ebx, eax
|
|
||||||
and ebx, 0x7FF
|
|
||||||
shr eax, 3
|
|
||||||
and eax, 0xF800
|
|
||||||
or ebx, eax
|
|
||||||
mov eax, ebx
|
|
||||||
stosw ;store ax
|
|
||||||
loop _video_copyBuffer16_loop
|
|
||||||
pop ebx
|
|
||||||
pop ecx
|
|
||||||
pop edi
|
|
||||||
pop esi
|
|
||||||
pop ebp
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
%define VERSION "0.1.2" ;HOS version
|
%define VERSION "0.12" ;HOS version
|
||||||
|
|
||||||
%define BOOT_FAT_SEG 0x07E0 ;right after boot sector
|
%define BOOT_FAT_SEG 0x07E0 ;right after boot sector
|
||||||
%define BOOT_ROOT_SEG 0x0900 ;right after FAT
|
%define BOOT_ROOT_SEG 0x0900 ;right after FAT
|
||||||
|
20
kernel.c
20
kernel.c
@ -58,29 +58,13 @@ void k_init()
|
|||||||
|
|
||||||
printf("HOS 0.12 - Kernel Size: %d kb\n", kernel_size()/1024);
|
printf("HOS 0.12 - Kernel Size: %d kb\n", kernel_size()/1024);
|
||||||
printf("Memory available to OS: %d MB (Bytes: %d)\n", mm_totalmem/0x100000, mm_totalmem);
|
printf("Memory available to OS: %d MB (Bytes: %d)\n", mm_totalmem/0x100000, mm_totalmem);
|
||||||
printf("Freem memory: %d bytes\n", mm_freemem());
|
printf("Free memory: %d bytes\n", mm_freemem());
|
||||||
|
|
||||||
/* int fx;
|
|
||||||
int fy = 30;
|
|
||||||
int fc;
|
|
||||||
int fr;
|
|
||||||
word *vidmem = (word *)0xB8000;
|
|
||||||
for (fr = 0; fr < 25; fr++)
|
|
||||||
{
|
|
||||||
fx = 300;
|
|
||||||
for (fc = 0; fc < 80; fc++)
|
|
||||||
{
|
|
||||||
video_renderChar(fx, fy, (char)vidmem[fr*80+fc], 0xFFFFFF);
|
|
||||||
fx += 8;
|
|
||||||
}
|
|
||||||
fy += 10;
|
|
||||||
} */
|
|
||||||
|
|
||||||
dword key = 0;
|
dword key = 0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
key = kbdWaitKey();
|
key = kbdWaitKey();
|
||||||
if (((key & 0xFF00) >> 8) != 2) //key is not a control key
|
// if (((key & 0xFF00) >> 8) != 2) //key is not a control key
|
||||||
putc(key);
|
putc(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
mm.c
27
mm.c
@ -4,10 +4,15 @@
|
|||||||
// 0x368000 is first available byte (this is right after the kernel @ 1mb and the initrd @ 2mb, 1440kb.
|
// 0x368000 is first available byte (this is right after the kernel @ 1mb and the initrd @ 2mb, 1440kb.
|
||||||
|
|
||||||
|
|
||||||
|
//Pointer to the first pageblock in the linked list
|
||||||
pageblock *first_pageblock = (pageblock *) 0;
|
pageblock *first_pageblock = (pageblock *) 0;
|
||||||
|
//The total amount of physical memory available (bytes)
|
||||||
dword mm_totalmem = 0x100000; //start counting from 1mb
|
dword mm_totalmem = 0x100000; //start counting from 1mb
|
||||||
|
//The highest physical address
|
||||||
dword mm_highestAddress = 0;
|
dword mm_highestAddress = 0;
|
||||||
|
|
||||||
|
//This function initializes the memory manager's linked list, filling it with the
|
||||||
|
// memory areas returned by bios interrupt 0x8E20
|
||||||
void mm_init()
|
void mm_init()
|
||||||
{
|
{
|
||||||
dword *memmap_entries = (dword *) 0x9040A;
|
dword *memmap_entries = (dword *) 0x9040A;
|
||||||
@ -66,7 +71,7 @@ void mm_init()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//This function initializes a pageblock to be full of empty pointers
|
||||||
void mm_init_pageblockpage(pageblock *pbp)
|
void mm_init_pageblockpage(pageblock *pbp)
|
||||||
{
|
{
|
||||||
int a;
|
int a;
|
||||||
@ -83,6 +88,10 @@ void mm_init_pageblockpage(pageblock *pbp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This function allocates a certain number of physical pages for a particular process
|
||||||
|
//Returns:
|
||||||
|
// 0 - no free mem, invalied PID
|
||||||
|
// void* - physical address of allocated pages
|
||||||
void *mm_palloc(dword numpages, dword proc_pid)
|
void *mm_palloc(dword numpages, dword proc_pid)
|
||||||
{
|
{
|
||||||
if (proc_pid < PID_KERNEL)
|
if (proc_pid < PID_KERNEL)
|
||||||
@ -119,6 +128,7 @@ void *mm_palloc(dword numpages, dword proc_pid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method returns the number of free pageblock entries at the end of the linked list
|
||||||
dword mm_freeentries()
|
dword mm_freeentries()
|
||||||
{
|
{
|
||||||
pageblock *pb = first_pageblock;
|
pageblock *pb = first_pageblock;
|
||||||
@ -134,6 +144,10 @@ dword mm_freeentries()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method creates a new page used to hold more pageblock entries at the end of the linked list
|
||||||
|
//Returns:
|
||||||
|
// 0 - no free pages
|
||||||
|
// pageblock* - address of pageblock page
|
||||||
pageblock *mm_new_pageblock_page() //as of 09/26/03 this method leaks 4kb main memory per call, unrecoverable
|
pageblock *mm_new_pageblock_page() //as of 09/26/03 this method leaks 4kb main memory per call, unrecoverable
|
||||||
{
|
{
|
||||||
pageblock *pb = first_pageblock;
|
pageblock *pb = first_pageblock;
|
||||||
@ -155,6 +169,11 @@ pageblock *mm_new_pageblock_page() //as of 09/26/03 this method leaks 4kb main
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method frees a physical page
|
||||||
|
//Returns:
|
||||||
|
// 2 - pointer to free was a null pointer
|
||||||
|
// 1 - address not found
|
||||||
|
// 0 - all went well
|
||||||
int mm_pfree(void *ptr)
|
int mm_pfree(void *ptr)
|
||||||
{
|
{
|
||||||
if (ptr == 0)
|
if (ptr == 0)
|
||||||
@ -176,6 +195,7 @@ int mm_pfree(void *ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method returns a pointer to the last pageblock in the linked list
|
||||||
pageblock *mm_lastpageblockentry()
|
pageblock *mm_lastpageblockentry()
|
||||||
{
|
{
|
||||||
pageblock *pb = first_pageblock;
|
pageblock *pb = first_pageblock;
|
||||||
@ -188,6 +208,8 @@ pageblock *mm_lastpageblockentry()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method returns the next available-for-use pageblock entry
|
||||||
|
// or 0, if they are all used
|
||||||
pageblock *mm_nextpageblockentry()
|
pageblock *mm_nextpageblockentry()
|
||||||
{
|
{
|
||||||
pageblock *pb = first_pageblock;
|
pageblock *pb = first_pageblock;
|
||||||
@ -202,6 +224,7 @@ pageblock *mm_nextpageblockentry()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method returns the amount of free physical RAM
|
||||||
dword mm_freemem()
|
dword mm_freemem()
|
||||||
{
|
{
|
||||||
dword amount = 0;
|
dword amount = 0;
|
||||||
@ -217,6 +240,8 @@ dword mm_freemem()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method "walks" through the linked list of pageblock entries and
|
||||||
|
// combines any two entries that are adjacent and of the same type
|
||||||
void mm_coalesce(pageblock *pb)
|
void mm_coalesce(pageblock *pb)
|
||||||
{
|
{
|
||||||
pageblock *pbc = first_pageblock;
|
pageblock *pbc = first_pageblock;
|
||||||
|
8
mouse.c
8
mouse.c
@ -3,6 +3,7 @@
|
|||||||
// Author: Josh Holtrop
|
// Author: Josh Holtrop
|
||||||
|
|
||||||
|
|
||||||
|
//This method initializes the ps/2 mouse
|
||||||
void mouse_init()
|
void mouse_init()
|
||||||
{
|
{
|
||||||
outportb(0x64, 0x20); //tell keyboard controller we are going to read keyboard controller command byte
|
outportb(0x64, 0x20); //tell keyboard controller we are going to read keyboard controller command byte
|
||||||
@ -23,7 +24,7 @@ void mouse_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//This method is called when a mouse interrupt occurs
|
||||||
void isr_mouse()
|
void isr_mouse()
|
||||||
{
|
{
|
||||||
byte inb = inportb(0x60); //read mouse byte
|
byte inb = inportb(0x60); //read mouse byte
|
||||||
@ -50,15 +51,14 @@ void isr_mouse()
|
|||||||
mouse_y = video_mode.YResolution - 1;
|
mouse_y = video_mode.YResolution - 1;
|
||||||
if (mouse_inbuffer[0] & 0x01) //left button
|
if (mouse_inbuffer[0] & 0x01) //left button
|
||||||
{
|
{
|
||||||
video_pset(mouse_x, mouse_y, 0x00FFFFFF);
|
video_pset(mouse_x, mouse_y, 0x00FF8800);
|
||||||
printf("X: %d, Y: %d\n", mouse_x, mouse_y);
|
printf("X: %d, Y: %d\n", mouse_x, mouse_y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
video_pset(mouse_x, mouse_y, 0x00000000);
|
video_pset(mouse_x, mouse_y, 0x00FFFFFF);
|
||||||
printf("X: %d, Y: %d\n", mouse_x, mouse_y);
|
printf("X: %d, Y: %d\n", mouse_x, mouse_y);
|
||||||
}
|
}
|
||||||
video_copyBuffer();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ brFSID DB 'FAT12 ' ; 0036h - File System ID
|
|||||||
;------------------------------------------------------------------------
|
;------------------------------------------------------------------------
|
||||||
|
|
||||||
start:
|
start:
|
||||||
jmp 0:jmphere ;ensure that cs=0 and ip=0x7c...
|
jmp 0:jmphere ;ensure that cs=0 and ip=0x7c00...
|
||||||
jmphere:
|
jmphere:
|
||||||
;dl=drive number, save it!
|
;dl=drive number, save it!
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
@ -88,7 +88,7 @@ unreal:
|
|||||||
pop es ;segments back, with 4gb limits!
|
pop es ;segments back, with 4gb limits!
|
||||||
sti
|
sti
|
||||||
|
|
||||||
;now lets read in the FAT and root directory so we can search for the kernel file...
|
;now lets read in the FAT and root directory so we can search for the stage2 file...
|
||||||
mov ax, 0x0209 ;FAT1
|
mov ax, 0x0209 ;FAT1
|
||||||
mov cx, 0x0002
|
mov cx, 0x0002
|
||||||
xor dh, dh
|
xor dh, dh
|
||||||
|
134
video.c
134
video.c
@ -8,70 +8,20 @@ void video_init(ModeInfoBlock *mib)
|
|||||||
{
|
{
|
||||||
video_mode = *mib;
|
video_mode = *mib;
|
||||||
|
|
||||||
//Get a buffer region in memory for double-buffering video memory in 32bpp
|
switch(video_mode.BitsPerPixel)
|
||||||
vid_Buffer = mm_palloc((4*video_mode.XResolution*video_mode.YResolution)/4096+1, PID_KERNEL);
|
|
||||||
if ((dword)vid_Buffer == 0)
|
|
||||||
{
|
{
|
||||||
printf("ERROR - COULD NOT ALLOCATE MEMORY FOR VIDEO DOUBLE-BUFFER!!\n");
|
case 16:
|
||||||
halt();
|
vid_ptr16 = (word *) video_mode.PhysBasePtr;
|
||||||
|
video_psetp = &video_psetp16;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
vid_ptr24 = (byte *) video_mode.PhysBasePtr;
|
||||||
|
video_psetp = &video_psetp24;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
video_psetp = &video_psetp32;
|
||||||
|
vid_ptr32 = (dword *) video_mode.PhysBasePtr;
|
||||||
}
|
}
|
||||||
dword tot = ((video_mode.XResolution) * (video_mode.YResolution));
|
|
||||||
int a;
|
|
||||||
for (a = 0; a < tot; a++)
|
|
||||||
{
|
|
||||||
if (a < (tot / 4))
|
|
||||||
vid_Buffer[a] = 0x00FF0000;
|
|
||||||
else if (a < (tot / 2))
|
|
||||||
vid_Buffer[a] = 0x0000FF00;
|
|
||||||
else if (a < ((tot * 3) / 4))
|
|
||||||
vid_Buffer[a] = 0x000000FF;
|
|
||||||
else
|
|
||||||
vid_Buffer[a] = 0x00FFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
int VXR = video_mode.XResolution;
|
|
||||||
int VYR = video_mode.YResolution;
|
|
||||||
|
|
||||||
video_rectf(VXR*3/11, 0, VXR*4/11, VYR-1, 0x00000088); //test rectangles, draws "HOS"
|
|
||||||
video_rectf(VXR*7/11, 0, VXR*8/11, VYR-1, 0x00000088);
|
|
||||||
video_rectf(VXR/11, 0, VXR*2/11, VYR*2/5, 0x00000088);
|
|
||||||
video_rectf(VXR/11, VYR*3/5, VXR*2/11, VYR-1, 0x00000088);
|
|
||||||
video_rectf(VXR*5/11, VYR/5, VXR*6/11, VYR*4/5, 0x00000088);
|
|
||||||
video_rectf(VXR*9/11, VYR/5, VXR-1, VYR*2/5, 0x00000088);
|
|
||||||
video_rectf(VXR*8/11, VYR*3/5, VXR*10/11, VYR*4/5, 0x00000088);
|
|
||||||
|
|
||||||
|
|
||||||
int b;
|
|
||||||
for (a = 0; a < 256; a++)
|
|
||||||
{
|
|
||||||
for (b = 0; b < 256; b++)
|
|
||||||
{
|
|
||||||
video_pset(a+5, b+30, (a<<16)|(b<<8));
|
|
||||||
video_pset(a+270, b+30, (a<<8)|(b));
|
|
||||||
video_pset(a+535, b+30, (a<<16)|(b));
|
|
||||||
|
|
||||||
video_pset(a+5, b+290, (a<<16)|(b<<8)|0x000000ff);
|
|
||||||
video_pset(a+270, b+290, (a<<8)|(b)|0x00ff0000);
|
|
||||||
video_pset(a+535, b+290, (a<<16)|(b)|0x0000ff00);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int fx;
|
|
||||||
int fy = 25;
|
|
||||||
int fc;
|
|
||||||
int fr;
|
|
||||||
for (fr = 0; fr < 16; fr++)
|
|
||||||
{
|
|
||||||
fx = 15;
|
|
||||||
for (fc = 0; fc < 16; fc++)
|
|
||||||
{
|
|
||||||
video_renderChar(fx, fy, fr*16+fc, 0xFFFFFF);
|
|
||||||
fx += 8;
|
|
||||||
}
|
|
||||||
fy += 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
video_copyBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Renders a character using stdfont[] as a bitmask
|
//Renders a character using stdfont[] as a bitmask
|
||||||
@ -110,7 +60,7 @@ void video_horiz(int y, int x1, int x2, dword color)
|
|||||||
int pixel = y*video_mode.XResolution+x1;
|
int pixel = y*video_mode.XResolution+x1;
|
||||||
for (; x1 <= x2; x1++)
|
for (; x1 <= x2; x1++)
|
||||||
{
|
{
|
||||||
vid_Buffer[pixel++] = color;
|
video_psetp(pixel++, color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +84,7 @@ void video_vert(int x, int y1, int y2, dword color)
|
|||||||
int pixel = y1*video_mode.XResolution+x;
|
int pixel = y1*video_mode.XResolution+x;
|
||||||
for (; y1 <= y2; y1++)
|
for (; y1 <= y2; y1++)
|
||||||
{
|
{
|
||||||
vid_Buffer[pixel] = color;
|
video_psetp(pixel, color);
|
||||||
pixel+=video_mode.XResolution;
|
pixel+=video_mode.XResolution;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,48 +116,28 @@ inline void video_pset(int x, int y, dword color)
|
|||||||
{
|
{
|
||||||
if ((x < 0) || (x > video_mode.XResolution) || (y < 0) || (y > video_mode.YResolution))
|
if ((x < 0) || (x > video_mode.XResolution) || (y < 0) || (y > video_mode.YResolution))
|
||||||
return;
|
return;
|
||||||
vid_Buffer[y*video_mode.XResolution+x] = color;
|
video_psetp(y*video_mode.XResolution+x, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Copies double-buffer to VESA Linear Frame Buffer
|
//Draws a pixel at the specified pixel position
|
||||||
void video_copyBuffer()
|
void video_psetp16(int pixel, dword color)
|
||||||
{
|
{
|
||||||
switch (video_mode.BitsPerPixel)
|
vid_ptr16[pixel] = ((color&0xFF)>>3) | ((((color>>8)&0xFF)>>2)<<5) | ((((color>>16)&0xFF)>>3)<<11);
|
||||||
{
|
}
|
||||||
case 32:
|
|
||||||
video_copyBuffer32((dword)vid_Buffer, video_mode.PhysBasePtr, video_mode.XResolution*video_mode.YResolution);
|
//Draws a pixel at the specified pixel position
|
||||||
break;
|
void video_psetp24(int pixel, dword color)
|
||||||
case 24:
|
{
|
||||||
video_copyBuffer24((dword)vid_Buffer, video_mode.PhysBasePtr, video_mode.XResolution*video_mode.YResolution);
|
vid_ptr24[pixel*3] = color & 0xFF;
|
||||||
break;
|
vid_ptr24[pixel*3+1] = (color>>8) & 0xFF;
|
||||||
case 16:
|
vid_ptr24[pixel*3+2] = (color>>16) & 0xFF;
|
||||||
video_copyBuffer16((dword)vid_Buffer, video_mode.PhysBasePtr, video_mode.XResolution*video_mode.YResolution);
|
}
|
||||||
break;
|
|
||||||
}
|
//Draws a pixel at the specified pixel position
|
||||||
/*int pixel;
|
void video_psetp32(int pixel, dword color)
|
||||||
dword color;
|
{
|
||||||
for (pixel = 0; pixel < video_mode.XResolution*video_mode.YResolution; pixel++)
|
vid_ptr32[pixel] = color;
|
||||||
{
|
|
||||||
switch(video_mode.BitsPerPixel)
|
|
||||||
{
|
|
||||||
case 16:
|
|
||||||
color = vid_Buffer[pixel];
|
|
||||||
((word *)video_mode.PhysBasePtr)[pixel] = ((color&0xFF)>>3) | ((((color>>8)&0xFF)>>2)<<5) | ((((color>>16)&0xFF)>>3)<<11);
|
|
||||||
//vid_ptr16[pixel] = ((color&0xFF)>>3) | ((((color>>8)&0xFF)>>3)<<5) | ((((color>>16)&0xFF)>>3)<<10); //15 bit mode?
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
color = vid_Buffer[pixel];
|
|
||||||
((byte *)video_mode.PhysBasePtr)[pixel*3] = color & 0xFF;
|
|
||||||
((byte *)video_mode.PhysBasePtr)[pixel*3+1] = (color>>8) & 0xFF;
|
|
||||||
((byte *)video_mode.PhysBasePtr)[pixel*3+2] = (color>>16) & 0xFF;
|
|
||||||
break;
|
|
||||||
case 32:
|
|
||||||
color = vid_Buffer[pixel];
|
|
||||||
((dword *)video_mode.PhysBasePtr)[pixel] = color;
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
14
video.h
14
video.h
@ -8,14 +8,11 @@ void video_vert(int x, int y1, int y2, dword color);
|
|||||||
void video_rect(int x1, int y1, int x2, int y2, dword color);
|
void video_rect(int x1, int y1, int x2, int y2, dword color);
|
||||||
void video_rectf(int x1, int y1, int x2, int y2, dword color);
|
void video_rectf(int x1, int y1, int x2, int y2, dword color);
|
||||||
inline void video_pset(int x, int y, dword color);
|
inline void video_pset(int x, int y, dword color);
|
||||||
void video_psetp(int pixel, dword color);
|
void video_psetp16(int pixel, dword color);
|
||||||
void video_copyBuffer();
|
void video_psetp24(int pixel, dword color);
|
||||||
|
void video_psetp32(int pixel, dword color);
|
||||||
void video_renderChar(int x, int y, int character, dword color);
|
void video_renderChar(int x, int y, int character, dword color);
|
||||||
|
|
||||||
extern dword video_copyBuffer16(dword src, dword dest, dword pixelcount);
|
|
||||||
extern dword video_copyBuffer24(dword src, dword dest, dword pixelcount);
|
|
||||||
extern dword video_copyBuffer32(dword src, dword dest, dword pixelcount);
|
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
word ModeAttributes;
|
word ModeAttributes;
|
||||||
byte WinAAttributes;
|
byte WinAAttributes;
|
||||||
@ -56,7 +53,10 @@ typedef struct{
|
|||||||
} ModeInfoBlock;
|
} ModeInfoBlock;
|
||||||
|
|
||||||
ModeInfoBlock video_mode;
|
ModeInfoBlock video_mode;
|
||||||
dword *vid_Buffer;
|
byte *vid_ptr24;
|
||||||
|
word *vid_ptr16;
|
||||||
|
dword *vid_ptr32;
|
||||||
|
void (*video_psetp)(int, dword); //function pointer to set a pixel
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user