vgabios: Move vgafb_load_font to stdvga.c.
[seabios.git] / vgasrc / stdvga.c
index fd8514eeb59a27ffa60c8d0effa43f2d4cca05b2..9b915591a1e842e5d3ee6aff06c725882004dcc2 100644 (file)
@@ -10,6 +10,7 @@
 #include "farptr.h" // SET_FARVAR
 #include "biosvar.h" // GET_BDA
 #include "vgabios.h" // VGAREG_*
+#include "util.h" // memcpy_far
 
 // TODO
 //  * replace direct in/out calls with wrapper functions
@@ -288,7 +289,12 @@ stdvga_set_text_block_specifier(u8 spec)
     outw((spec << 8) | 0x03, VGAREG_SEQU_ADDRESS);
 }
 
-void
+
+/****************************************************************
+ * Font loading
+ ****************************************************************/
+
+static void
 get_font_access(void)
 {
     outw(0x0100, VGAREG_SEQU_ADDRESS);
@@ -300,7 +306,7 @@ get_font_access(void)
     outw(0x0406, VGAREG_GRDC_ADDRESS);
 }
 
-void
+static void
 release_font_access(void)
 {
     outw(0x0100, VGAREG_SEQU_ADDRESS);
@@ -313,6 +319,20 @@ release_font_access(void)
     outw(0x1005, VGAREG_GRDC_ADDRESS);
 }
 
+void
+stdvga_load_font(u16 seg, void *src_far, u16 count
+                 , u16 start, u8 destflags, u8 fontsize)
+{
+    get_font_access();
+    u16 blockaddr = ((destflags & 0x03) << 14) + ((destflags & 0x04) << 11);
+    void *dest_far = (void*)(blockaddr + start*32);
+    u16 i;
+    for (i = 0; i < count; i++)
+        memcpy_far(SEG_GRAPH, dest_far + i*32
+                   , seg, src_far + i*fontsize, fontsize);
+    release_font_access();
+}
+
 
 /****************************************************************
  * CRTC registers