; LINES 0.1, switch to 80x25, 80x43, or 80x50 text mode in DOS.
; Copyright (C) 2018, Seth Simon (sethsimon@sdf.org)
;
; 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, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see .
;
org 0x100
cpu 8086
start:
; Command tail is a Pascal-style string at 0x80, with an 0xd
; appended (not included in the length)
cld
mov di, 0x81
mov ch, 0
mov cl, byte [di - 1]
mov al, ' '
repe scasb
mov dx, usage_str
loop print_str
mov ax, word [di - 1]
cmp ax, 0x3532 ; 25?
je .l25
inc cx
inc cx ; CX = 25 lines ? 0 : 2
cmp ax, 0x3334 ; 43?
je .l43
cmp ax, 0x3035 ; 50?
jne print_str
; 80x25: 400 scan lines, each char is 16 pixels tall
; 80x50: 400 scan lines, each char is 8 pixels tall
; 80x43: 350 scan lines, each char is 8 pixels tall
.l25:
mov al, 2
db 0x3d ; CMP AX,IMMED16
.l43:
mov al, 1 ; AL = 0/1/2 => 200/350/400 scan lines
mov ah, 0x12
mov bl, 0x30
int 0x10 ; Select vertical resolution. Takes place
; on the next mode set
cmp al, 0x12
mov dx, need_vga_str
jne print_str
mov ax, 0x0500
int 0x10 ; Select page 0 (req'd for INT 10/AH=11)
mov ax, 3 ; AH=0, AL=mode=3
int 0x10 ; Mode set
mov ax, 0x1114
sub al, cl ; AX = 25 lines ? 1114 (8x16) : 1112 (8x8)
mov bl, 0 ; Block 0
int 0x10 ; Select font. This function is designed to
ret ; be executed immediately after a mode set.
print_str:
mov ah, 9
int 0x21
ret
need_vga_str:
db "Error: This program requires a VGA adapter$"
usage_str:
db "LINES 0.1, Copyright (C) 2018, Seth Simon (sethsimon@sdf.org).",13,10
db "This program comes with ABSOLUTELY NO WARRANTY. This is free",13,10
db "software, and you are welcome to redistribute it under certain",13,10
db "conditions; see the GNU GPLv3 for details.",13,10
db 13,10
db "Usage: lines ",13,10
db "Commands:",13,10
db " 25 Switch to 80x25",13,10
db " 43 Switch to 80x43",13,10
db " 50 Switch to 80x50$"