100 lines
934 B
NASM
100 lines
934 B
NASM
org 0x7C00
|
|
|
|
cols: equ 80
|
|
rows: equ 30
|
|
|
|
main:
|
|
mov ax, cs
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov ss, ax
|
|
xor sp, sp
|
|
|
|
mov ah, 0x42
|
|
mov si, dap
|
|
int 0x13
|
|
|
|
mov ax, 0x0011
|
|
int 0x10
|
|
|
|
mov di, txtbuf
|
|
.loop:
|
|
call sync
|
|
xor ax, ax
|
|
int 0x16
|
|
stosb
|
|
jmp .loop
|
|
|
|
hlt:
|
|
hlt
|
|
jmp hlt
|
|
|
|
sync:
|
|
push ax
|
|
push si
|
|
push di
|
|
push es
|
|
mov si, txtbuf
|
|
mov ax, 0xA000
|
|
mov es, ax
|
|
mov di, 0
|
|
|
|
mov bx, font
|
|
mov cx, rows
|
|
.loop:
|
|
call charline
|
|
loop .loop
|
|
|
|
pop es
|
|
pop di
|
|
pop si
|
|
pop ax
|
|
ret
|
|
|
|
charline:
|
|
push bx
|
|
push cx
|
|
mov cx, 8
|
|
.loop:
|
|
call scanline
|
|
call scanline
|
|
inc bh
|
|
loop .loop
|
|
add si, cols
|
|
pop cx
|
|
pop bx
|
|
ret
|
|
|
|
scanline:
|
|
push si
|
|
push cx
|
|
mov cx, cols
|
|
.loop:
|
|
lodsb
|
|
mov bl, al
|
|
mov al, [bx]
|
|
stosb
|
|
loop .loop
|
|
pop cx
|
|
pop si
|
|
ret
|
|
|
|
dap:
|
|
db 0x10
|
|
db 1
|
|
dw 20
|
|
dw font, 0
|
|
dq 1
|
|
|
|
times (510 - ($-$$)) nop
|
|
|
|
dw 0xAA55
|
|
|
|
font:
|
|
incbin "cp437.bin"
|
|
|
|
txtbuf:
|
|
times (rows * cols) db 0
|
|
|
|
end:
|