(2006-08-06) rescue-bootcd
This commit is contained in:
131
extra/syslinux-3.09/font.inc
Normal file
131
extra/syslinux-3.09/font.inc
Normal file
@@ -0,0 +1,131 @@
|
||||
;; $Id: font.inc,v 1.7 2004/12/27 07:04:08 hpa Exp $
|
||||
;; -----------------------------------------------------------------------
|
||||
;;
|
||||
;; Copyright 1994-2004 H. Peter Anvin - All Rights Reserved
|
||||
;;
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
|
||||
;; Boston MA 02111-1307, USA; either version 2 of the License, or
|
||||
;; (at your option) any later version; incorporated herein by reference.
|
||||
;;
|
||||
;; -----------------------------------------------------------------------
|
||||
|
||||
;;
|
||||
;; font.inc
|
||||
;;
|
||||
;; VGA font handling code
|
||||
;;
|
||||
|
||||
section .text
|
||||
|
||||
;
|
||||
; loadfont: Load a .psf font file and install it onto the VGA console
|
||||
; (if we're not on a VGA screen then ignore.) It is called with
|
||||
; SI and DX:AX set by routine searchdir
|
||||
;
|
||||
loadfont:
|
||||
mov bx,trackbuf ; The trackbuf is >= 16K; the part
|
||||
mov cx,[BufSafe] ; of a PSF file we care about is no
|
||||
call getfssec ; more than 8K+4 bytes
|
||||
|
||||
mov ax,[trackbuf] ; Magic number
|
||||
cmp ax,0436h
|
||||
jne lf_ret
|
||||
|
||||
mov al,[trackbuf+2] ; File mode
|
||||
cmp al,5 ; Font modes 0-5 supported
|
||||
ja lf_ret
|
||||
|
||||
mov bh,byte [trackbuf+3] ; Height of font
|
||||
cmp bh,2 ; VGA minimum
|
||||
jb lf_ret
|
||||
cmp bh,32 ; VGA maximum
|
||||
ja lf_ret
|
||||
|
||||
; Copy to font buffer
|
||||
mov si,trackbuf+4 ; Start of font data
|
||||
mov [VGAFontSize],bh
|
||||
mov di,vgafontbuf
|
||||
mov cx,(32*256) >> 2 ; Maximum size
|
||||
rep movsd
|
||||
|
||||
mov [UserFont], byte 1 ; Set font flag
|
||||
|
||||
; Fall through to use_font
|
||||
|
||||
;
|
||||
; use_font:
|
||||
; This routine activates whatever font happens to be in the
|
||||
; vgafontbuf, and updates the adjust_screen data.
|
||||
; Must be called with CS = DS = ES
|
||||
;
|
||||
use_font:
|
||||
test [UserFont], byte 1 ; Are we using a user-specified font?
|
||||
jz adjust_screen ; If not, just do the normal stuff
|
||||
|
||||
mov bp,vgafontbuf
|
||||
mov bh,[VGAFontSize]
|
||||
|
||||
xor bl,bl ; Needed by both INT 10h calls
|
||||
cmp [UsingVGA], byte 1 ; Are we in graphics mode?
|
||||
jne .text
|
||||
|
||||
.graphics:
|
||||
xor cx,cx
|
||||
mov cl,bh ; CX = bytes/character
|
||||
mov ax,480
|
||||
div cl ; Compute char rows per screen
|
||||
mov dl,al
|
||||
dec al
|
||||
mov [VidRows],al
|
||||
mov ax,1121h ; Set user character table
|
||||
int 10h
|
||||
mov [VidCols], byte 79 ; Always 80 bytes/line
|
||||
.lf_ret: ret ; No need to call adjust_screen
|
||||
|
||||
.text:
|
||||
mov cx,256
|
||||
xor dx,dx
|
||||
mov ax,1110h
|
||||
int 10h ; Load into VGA RAM
|
||||
|
||||
xor bl,bl
|
||||
mov ax,1103h ; Select page 0
|
||||
int 10h
|
||||
|
||||
; Fall through to adjust_screen
|
||||
|
||||
lf_ret equ use_font.lf_ret
|
||||
|
||||
;
|
||||
; adjust_screen: Set the internal variables associated with the screen size.
|
||||
; This is a subroutine in case we're loading a custom font.
|
||||
;
|
||||
adjust_screen:
|
||||
pusha
|
||||
mov al,[BIOS_vidrows]
|
||||
and al,al
|
||||
jnz vidrows_ok
|
||||
mov al,24 ; No vidrows in BIOS, assume 25
|
||||
; (Remember: vidrows == rows-1)
|
||||
vidrows_ok: mov [VidRows],al
|
||||
mov ah,0fh
|
||||
int 10h ; Read video state
|
||||
dec ah ; Store count-1 (same as rows)
|
||||
mov [VidCols],ah
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
; VGA font buffer at the end of memory (so loading a font works even
|
||||
; in graphics mode, but don't put too much pressure on the .bss)
|
||||
section .latebss
|
||||
vgafontbuf resb 8192
|
||||
|
||||
section .data
|
||||
align 2, db 0
|
||||
VGAFontSize dw 16 ; Defaults to 16 byte font
|
||||
UserFont db 0 ; Using a user-specified font
|
||||
|
||||
|
||||
Reference in New Issue
Block a user