Contents of /tags/mkinitrd-6_5_0/isolinux/font.inc
Parent Directory | Revision Log
Revision 1345 -
(show annotations)
(download)
Fri Jun 3 21:22:00 2011 UTC (13 years, 3 months ago) by niro
File size: 3544 byte(s)
Fri Jun 3 21:22:00 2011 UTC (13 years, 3 months ago) by niro
File size: 3544 byte(s)
tagged 'mkinitrd-6_5_0'
1 | ;; ----------------------------------------------------------------------- |
2 | ;; |
3 | ;; Copyright 1994-2008 H. Peter Anvin - All Rights Reserved |
4 | ;; |
5 | ;; This program is free software; you can redistribute it and/or modify |
6 | ;; it under the terms of the GNU General Public License as published by |
7 | ;; the Free Software Foundation, Inc., 53 Temple Place Ste 330, |
8 | ;; Boston MA 02111-1307, USA; either version 2 of the License, or |
9 | ;; (at your option) any later version; incorporated herein by reference. |
10 | ;; |
11 | ;; ----------------------------------------------------------------------- |
12 | |
13 | ;; |
14 | ;; font.inc |
15 | ;; |
16 | ;; VGA font handling code |
17 | ;; |
18 | |
19 | section .text |
20 | |
21 | ; |
22 | ; loadfont: Load a .psf font file and install it onto the VGA console |
23 | ; (if we're not on a VGA screen then ignore.) |
24 | ; The font is on top of the getc stack. |
25 | ; |
26 | loadfont.err: jmp close ; Tailcall the close routine |
27 | |
28 | loadfont: |
29 | mov di,trackbuf |
30 | mov cx,4 |
31 | call readc ; Read header |
32 | jc .err |
33 | |
34 | mov ax,[trackbuf] ; Magic number |
35 | cmp ax,0436h |
36 | jne .err |
37 | |
38 | mov al,[trackbuf+2] ; File mode |
39 | cmp al,5 ; Font modes 0-5 supported |
40 | ja .err |
41 | |
42 | xor bx,bx |
43 | mov bh,[trackbuf+3] ; Height of font |
44 | cmp bh,2 ; VGA minimum |
45 | jb .err |
46 | cmp bh,32 ; VGA maximum |
47 | ja .err |
48 | |
49 | ; Load the actual font |
50 | mov di,trackbuf |
51 | mov cx,bx ; Bytes = font height * 256 |
52 | call readc |
53 | jc .err |
54 | |
55 | call close |
56 | |
57 | ; Copy to font buffer |
58 | mov si,trackbuf ; Start of font data |
59 | mov [VGAFontSize],bh |
60 | push es |
61 | mov cx,aux_seg |
62 | mov es,cx |
63 | mov di,aux.fontbuf |
64 | mov cx,bx |
65 | shr cx,2 |
66 | rep movsd |
67 | pop es |
68 | |
69 | mov [UserFont], byte 1 ; Set font flag |
70 | |
71 | ; |
72 | ; use_font: |
73 | ; This routine activates whatever font happens to be in the |
74 | ; vgafontbuf, and updates the adjust_screen data. |
75 | ; Must be called with CS = DS |
76 | ; |
77 | use_font: |
78 | test byte [UsingVGA], ~03h ; Nonstandard mode? |
79 | jz .modeok |
80 | call vgaclearmode |
81 | |
82 | .modeok: |
83 | test [UserFont], byte 1 ; Are we using a user-specified font? |
84 | jz adjust_screen ; If not, just do the normal stuff |
85 | |
86 | push es |
87 | mov bp,aux_seg |
88 | mov es,bp |
89 | |
90 | mov bp,aux.fontbuf ; ES:BP -> font |
91 | mov bh,[VGAFontSize] |
92 | xor bl,bl ; Needed by both INT 10h calls |
93 | |
94 | test byte [UsingVGA], 01h ; Are we in graphics mode? |
95 | jz .text |
96 | |
97 | .graphics: |
98 | xor cx,cx |
99 | mov cl,bh ; CX = bytes/character |
100 | mov ax,[GXPixRows] |
101 | div cl ; Compute char rows per screen |
102 | mov dl,al |
103 | dec ax |
104 | mov [VidRows],al |
105 | mov ax,1121h ; Set user character table |
106 | int 10h |
107 | mov ax,[GXPixCols] |
108 | shr ax,3 ; 8 pixels/character |
109 | dec ax |
110 | mov [VidCols],al |
111 | pop es |
112 | ret ; No need to call adjust_screen |
113 | |
114 | .text: |
115 | mov cx,256 |
116 | xor dx,dx |
117 | mov ax,1110h |
118 | int 10h ; Load into VGA RAM |
119 | pop es |
120 | |
121 | xor bl,bl |
122 | mov ax,1103h ; Select page 0 |
123 | int 10h |
124 | |
125 | ; |
126 | ; adjust_screen: Set the internal variables associated with the screen size. |
127 | ; This is a subroutine in case we're loading a custom font. |
128 | ; |
129 | adjust_screen: |
130 | pusha |
131 | mov al,[BIOS_vidrows] |
132 | and al,al |
133 | jnz vidrows_ok |
134 | mov al,24 ; No vidrows in BIOS, assume 25 |
135 | ; (Remember: vidrows == rows-1) |
136 | vidrows_ok: mov [VidRows],al |
137 | mov ah,0fh |
138 | int 10h ; Read video state |
139 | dec ah ; Store count-1 (same as rows) |
140 | mov [VidCols],ah |
141 | popa |
142 | ret |
143 | |
144 | section .data |
145 | alignz 2 |
146 | VGAFontSize dw 16 ; Defaults to 16 byte font |
147 | UserFont db 0 ; Using a user-specified font |
148 | |
149 | section .bss1 |
150 | alignb 4 |
151 | GXPixCols resw 1 ; Graphics mode pixel columns |
152 | GXPixRows resw 1 ; Graphics mode pixel rows |