Import backup from 2003-08-19

This commit is contained in:
Josh Holtrop 2003-08-19 22:00:00 -04:00
parent 82cf9a9de4
commit 8efede851c
5 changed files with 60 additions and 5 deletions

BIN
flop.img

Binary file not shown.

View File

@ -12,6 +12,7 @@ void k_init();
#include "functions.c" #include "functions.c"
#include "video.c" #include "video.c"
dword timer = 0;
void k_init() void k_init()
{ {
@ -28,12 +29,16 @@ void k_init()
video_horiz(a, 2, 1021, 0); video_horiz(a, 2, 1021, 0);
video_vert(a, 2, 765, 0x0000FFFF); video_vert(a, 2, 765, 0x0000FFFF);
} }
video_rect(10, 10, 100, 100, 0x00FFFFFF);
video_rectf(11, 11, 99, 99, 0x00FFFF00);
} }
void isr(dword num) void isr(dword num)
{ {
if (num == 0x20) if (num == 0x20)
{ {
timer++;
video_rect(20,20,600,600,timer);
(*(char*)0xB8000)++; (*(char*)0xB8000)++;
*(char*)0xB8001 = 7; *(char*)0xB8001 = 7;
eoi(); eoi();

View File

@ -619,8 +619,8 @@ vesa_modenogood:
;------------------------------------------------------ ;------------------------------------------------------
vesa_done: vesa_done:
xor ax, ax ;wait for keypress... ; xor ax, ax ;wait for keypress...
int 0x16 ; int 0x16
jmp go_pm jmp go_pm

53
video.c
View File

@ -77,6 +77,53 @@ void video_vert(int x, int y1, int y2, dword color)
} }
} }
void video_rect(int x1, int y1, int x2, int y2, dword color)
{
checkBoundsx(x1);
checkBoundsx(x2);
checkBoundsy(y1);
checkBoundsy(y2);
if (x2 < x1)
{
int tmp = x2;
x2 = x1;
x1 = tmp;
}
if (y2 < y1)
{
int tmp = y2;
y2 = y1;
y1 = tmp;
}
video_horiz(y1, x1, x2, color);
video_horiz(y2, x1, x2, color);
video_vert(x1, y1, y2, color);
video_vert(x2, y1, y2, color);
}
void video_rectf(int x1, int y1, int x2, int y2, dword color)
{
checkBoundsx(x1);
checkBoundsx(x2);
checkBoundsy(y1);
checkBoundsy(y2);
if (x2 < x1)
{
int tmp = x2;
x2 = x1;
x1 = tmp;
}
if (y2 < y1)
{
int tmp = y2;
y2 = y1;
y1 = tmp;
}
int a;
for (a = 0; a <= (y2-y1); a++)
video_horiz(y1+a, x1, x2, color);
}
inline void video_pset(int x, int y, dword color) inline void video_pset(int x, int y, dword color)
{ {
video_psetp(y*video_mode.XResolution+x, color); video_psetp(y*video_mode.XResolution+x, color);
@ -91,9 +138,9 @@ void video_psetp(int pixel, dword color)
//vid_ptr16[pixel] = ((color&0xFF)>>3) | ((((color>>8)&0xFF)>>3)<<5) | ((((color>>16)&0xFF)>>3)<<10); //vid_ptr16[pixel] = ((color&0xFF)>>3) | ((((color>>8)&0xFF)>>3)<<5) | ((((color>>16)&0xFF)>>3)<<10);
break; break;
case 24: case 24:
vid_ptr24[pixel] = (color>>16) & 0xFF; vid_ptr24[pixel*3] = color & 0xFF;
vid_ptr24[pixel+1] = (color>>8) & 0xFF; vid_ptr24[pixel*3+1] = (color>>8) & 0xFF;
vid_ptr24[pixel+2] = color & 0xFF; vid_ptr24[pixel*3+2] = (color>>16) & 0xFF;
break; break;
case 32: case 32:
vid_ptr32[pixel] = color; vid_ptr32[pixel] = color;

View File

@ -4,9 +4,12 @@
void video_init(); void video_init();
void video_horiz(int y, int x1, int x2, dword color); void video_horiz(int y, int x1, int x2, dword color);
void video_vert(int x, int y1, int y2, dword color); 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_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_psetp(int pixel, dword color);
#define checkBoundsx(x) (x<0 ? x=0 : (x>=video_mode.XResolution ? x=video_mode.XResolution-1 : 0)) #define checkBoundsx(x) (x<0 ? x=0 : (x>=video_mode.XResolution ? x=video_mode.XResolution-1 : 0))
#define checkBoundsy(x) (x<0 ? x=0 : (x>=video_mode.YResolution ? x=video_mode.YResolution-1 : 0)) #define checkBoundsy(x) (x<0 ? x=0 : (x>=video_mode.YResolution ? x=video_mode.YResolution-1 : 0))