From: Jacob Potter Date: Tue, 25 Nov 2008 10:00:45 +0000 (-0500) Subject: Merge branch 'master' of /storage/git/netwatch X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/112c8c75deab100cf02c2e9e850c9e8474ef1a92?hp=7da36fbdd33af46634d7ac7a6ebae1ea213f64dd Merge branch 'master' of /storage/git/netwatch --- diff --git a/aseg-paging/smi.c b/aseg-paging/smi.c index bd29f64..bc0960f 100644 --- a/aseg-paging/smi.c +++ b/aseg-paging/smi.c @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include "../net/net.h" #include "vga-overlay.h" @@ -19,12 +21,43 @@ void smi_entry(void) pcisave = inl(0xCF8); vgasave = inb(0x3D4); pci_unbother_all(); + + serial_init(); + + if (fb) + fb->getvmode(fb->priv); counter++; sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter); - strblit(statstr, 0, 0); + strblit(statstr, 0, 0, 0); + + /* wee! */ + if (fb && !fb->curmode.text) + { + output("not text! nope nope nope"); + int ass[][2] = { + {1,0}, {4,0},{5,0},{6,0}, {8,0},{9,0},{10,0}, + {0,1}, {2,1}, {4,1}, {8,1}, + {0,2},{1,2},{2,2}, {4,2},{5,2},{6,2}, {8,2},{9,2},{10,2}, + {0,3}, {2,3}, {6,3}, {10,3}, + {0,4}, {2,4}, {4,4},{5,4},{6,4}, {8,4},{9,4},{10,4}, + {-1,-1} + }; + int p; + for (p = 0; ass[p][0] != -1; p++) + { + int x, y; + for (y = 0; y < 8; y++) + for (x = 0; x < 8; x++) + { + unsigned long a = + (unsigned long) fb->fbaddr + + ((y+ass[p][1]*8) * fb->curmode.xres + ass[p][0]*8 + x) * 4; + *(unsigned long *)p2v(a) = 0xFF0000FF; + } + } + } - serial_init(); eth_poll(); if (inl(0x840) & 0x1000) diff --git a/aseg-paging/vga-overlay.c b/aseg-paging/vga-overlay.c index 2fe4dc6..e6e223c 100644 --- a/aseg-paging/vga-overlay.c +++ b/aseg-paging/vga-overlay.c @@ -40,7 +40,7 @@ static char * vga_base() ); } -void strblit(char *src, int row, int col) +void strblit(char *src, int row, int col, int fill) { char *destp = vga_base() + row * 80 * 2 + col * 2; outb(0x80, 0x3C); @@ -54,7 +54,15 @@ void strblit(char *src, int row, int col) { *(destp++) = *(src++); *(destp++) = COLOR; + col++; } + if (fill) + while (col < 80) + { + *(destp++) = ' '; + *(destp++) = COLOR; + col++; + } outb(0x80, 0x3F); smram_restore_state(old_state); @@ -63,24 +71,10 @@ void strblit(char *src, int row, int col) void outlog() { - int y, x; - char *basep = vga_base(); - - smram_state_t old_state = smram_save_state(); - - smram_aseg_set_state(SMRAM_ASEG_SMMCODE); + int y; - for (y = 0; y < LOG_ONSCREEN; y++) - for (x = 40; x < 80; x++) - { - basep[y*80*2+x*2] = ' '; - basep[y*80*2+x*2+1] = 0x1F; - } - - smram_restore_state(old_state); - for (y = -LOG_ONSCREEN; y < 0; y++) - strblit(logents[(y + prodptr) % LOGLEN], y + LOG_ONSCREEN, 40); + strblit(logents[(y + prodptr) % LOGLEN], y + LOG_ONSCREEN, 40, 1); } void dolog(const char *s) diff --git a/include/vga-overlay.h b/include/vga-overlay.h index ec9efd5..d493f67 100644 --- a/include/vga-overlay.h +++ b/include/vga-overlay.h @@ -3,7 +3,7 @@ void vga_flush_imm(int enb); -void strblit(char *src, int row, int col); +void strblit(char *src, int row, int col, int fill); void dolog(char *s); void dologf(char *s, ...); diff --git a/video/fb.c b/video/fb.c index ed404e1..416b3b2 100644 --- a/video/fb.c +++ b/video/fb.c @@ -1,3 +1,3 @@ #include -struct fbdevice *fb; +struct fbdevice *fb = 0; diff --git a/video/tnt2.c b/video/tnt2.c index 73a3d0b..5ab5f02 100644 --- a/video/tnt2.c +++ b/video/tnt2.c @@ -12,7 +12,7 @@ static struct fbdevice tnt2_fb = { static unsigned int vgard(unsigned char a) { - outb(a, 0x3D4); + outb(0x3D4, a); return (unsigned int)inb(0x3D5); } @@ -22,7 +22,7 @@ static void tnt2_getvmode(void *priv) tnt2_fb.curmode.yres = (vgard(0x12) | (vgard(0x7) & 2) << 7 | (vgard(0x7) & 0x40) << 3) + 1; switch (vgard(0x28)) { - case 4: + case 3: tnt2_fb.curmode.format = FB_RGB888; tnt2_fb.curmode.bytestride = 4; tnt2_fb.curmode.text = 0; @@ -31,7 +31,8 @@ static void tnt2_getvmode(void *priv) tnt2_fb.curmode.text = 1; break; default: - outputf("Unknown TNT2 format %d", vgard(0x28)); + tnt2_fb.curmode.text = 1; + outputf("Unknown TNT2 format %x", vgard(0x28)); break; } }