Magellan Linux

Annotation of /trunk/mkinitrd-magellan/isolinux/font.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File size: 3451 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 ;; $Id: font.inc,v 1.1 2007-09-01 22:44:04 niro Exp $
2     ;; -----------------------------------------------------------------------
3     ;;
4     ;; Copyright 1994-2004 H. Peter Anvin - All Rights Reserved
5     ;;
6     ;; This program is free software; you can redistribute it and/or modify
7     ;; it under the terms of the GNU General Public License as published by
8     ;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9     ;; Boston MA 02111-1307, USA; either version 2 of the License, or
10     ;; (at your option) any later version; incorporated herein by reference.
11     ;;
12     ;; -----------------------------------------------------------------------
13    
14     ;;
15     ;; font.inc
16     ;;
17     ;; VGA font handling code
18     ;;
19    
20     section .text
21    
22     ;
23     ; loadfont: Load a .psf font file and install it onto the VGA console
24     ; (if we're not on a VGA screen then ignore.) It is called with
25     ; SI and DX:AX set by routine searchdir
26     ;
27     loadfont:
28     mov bx,trackbuf ; The trackbuf is >= 16K; the part
29     mov cx,[BufSafe] ; of a PSF file we care about is no
30     call getfssec ; more than 8K+4 bytes
31    
32     mov ax,[trackbuf] ; Magic number
33     cmp ax,0436h
34     jne lf_ret
35    
36     mov al,[trackbuf+2] ; File mode
37     cmp al,5 ; Font modes 0-5 supported
38     ja lf_ret
39    
40     mov bh,byte [trackbuf+3] ; Height of font
41     cmp bh,2 ; VGA minimum
42     jb lf_ret
43     cmp bh,32 ; VGA maximum
44     ja lf_ret
45    
46     ; Copy to font buffer
47     mov si,trackbuf+4 ; Start of font data
48     mov [VGAFontSize],bh
49     mov di,vgafontbuf
50     mov cx,(32*256) >> 2 ; Maximum size
51     rep movsd
52    
53     mov [UserFont], byte 1 ; Set font flag
54    
55     ; Fall through to use_font
56    
57     ;
58     ; use_font:
59     ; This routine activates whatever font happens to be in the
60     ; vgafontbuf, and updates the adjust_screen data.
61     ; Must be called with CS = DS = ES
62     ;
63     use_font:
64     test [UserFont], byte 1 ; Are we using a user-specified font?
65     jz adjust_screen ; If not, just do the normal stuff
66    
67     mov bp,vgafontbuf
68     mov bh,[VGAFontSize]
69    
70     xor bl,bl ; Needed by both INT 10h calls
71     cmp [UsingVGA], byte 1 ; Are we in graphics mode?
72     jne .text
73    
74     .graphics:
75     xor cx,cx
76     mov cl,bh ; CX = bytes/character
77     mov ax,480
78     div cl ; Compute char rows per screen
79     mov dl,al
80     dec al
81     mov [VidRows],al
82     mov ax,1121h ; Set user character table
83     int 10h
84     mov [VidCols], byte 79 ; Always 80 bytes/line
85     .lf_ret: ret ; No need to call adjust_screen
86    
87     .text:
88     mov cx,256
89     xor dx,dx
90     mov ax,1110h
91     int 10h ; Load into VGA RAM
92    
93     xor bl,bl
94     mov ax,1103h ; Select page 0
95     int 10h
96    
97     ; Fall through to adjust_screen
98    
99     lf_ret equ use_font.lf_ret
100    
101     ;
102     ; adjust_screen: Set the internal variables associated with the screen size.
103     ; This is a subroutine in case we're loading a custom font.
104     ;
105     adjust_screen:
106     pusha
107     mov al,[BIOS_vidrows]
108     and al,al
109     jnz vidrows_ok
110     mov al,24 ; No vidrows in BIOS, assume 25
111     ; (Remember: vidrows == rows-1)
112     vidrows_ok: mov [VidRows],al
113     mov ah,0fh
114     int 10h ; Read video state
115     dec ah ; Store count-1 (same as rows)
116     mov [VidCols],ah
117     popa
118     ret
119    
120    
121     ; VGA font buffer at the end of memory (so loading a font works even
122     ; in graphics mode, but don't put too much pressure on the .bss)
123     section .latebss
124     vgafontbuf resb 8192
125    
126     section .data
127     align 2, db 0
128     VGAFontSize dw 16 ; Defaults to 16 byte font
129     UserFont db 0 ; Using a user-specified font
130    
131