Initial checkin of toy OS project.
[os.git] / boot1 / video.asm
1 ;;; Display the ASCIIZ string at ds:si via BIOS VIDEO call (real mode only)
2 Write:
3         lodsb                   ; load char to al, increment si
4         or al, al               ; see if it's null
5         jz .DONE                ; if so, we're finished
6         mov ah, 0x0E            ; service 0x0E: output one char
7         mov bh, 0x00            ; display page 0
8         mov bl, 0x07            ; char text attrib (white on black)
9         int 0x10                ; invoke bios
10         jmp Write      ; next char
11 .DONE:
12         ret
13
14 ;;; Probe the video system of the machine via BIOS VIDEO calls, populate 
15 ;;; the HARDWARE_INFO buffer (real mode only).
16 PROBE_VIDEO:
17         ;; identify the display type
18         call DISP_ID
19         mov [bDisplayType], al
20
21         ;; determine the font size
22         call FONT_SIZE
23         mov [bFontSize], al
24         ret
25
26 ;;; Determine the font size (width in pixels) of the current display.
27 FONT_SIZE:
28         cmp al, 0x0a
29         jl .TRY_OLD
30         mov al, BYTE 16
31         ret
32 .TRY_OLD:
33         cmp al, BYTE 1
34         jne .TRY_CGA
35         mov al, BYTE 14
36         ret
37 .TRY_CGA:       
38         cmp al, BYTE 2
39         jne .TRY_VGA
40         mov al, BYTE 8
41         ret
42 .TRY_VGA:
43         mov ah, 0x11
44         mov al, 0x30
45         mov bh, 0
46         int 0x10
47         mov al, cl
48         ret
49
50 ;;; Determine the video type via BIOS VIDEO call
51 DISP_ID:
52         xor ax, ax
53         mov ah, 0x1a
54         int 0x10
55         cmp al, 0x1a
56         jne .TRY_EGA
57         mov al, bl
58         ret
59 .TRY_EGA:
60         mov ah, 0x12
61         mov bx, 0x10
62         int 0x10
63         cmp bx, 0x10
64         je .OLD_BOARDS
65         cmp bh, 0
66         je .EGA_COLOR
67         mov al, 5
68         ret
69 .EGA_COLOR:
70         mov al, 4
71         ret
72 .OLD_BOARDS:
73         int 0x11
74         and al, 0x30
75         cmp al, 0x30
76         jne .CGA
77         mov al, 1
78         ret
79 .CGA:
80         mov al, 2
81         ret