First commit

This commit is contained in:
Juhani Krekelä 2022-03-11 18:55:48 +02:00
commit 9cbd526b37
3 changed files with 107 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.com

19
Makefile Normal file
View File

@ -0,0 +1,19 @@
NASM = nasm
.SUFFIXES:
.SUFFIXES: .asm .com
all: dosclock.com
.asm.com:
$(NASM) -fbin -o $@ $<
clean:
rm -f *.com
distclean: clean
run: dosclock.com
dosbox $<
.PHONY: all clean distclean run

87
dosclock.asm Normal file
View File

@ -0,0 +1,87 @@
org 0x100
cpu 8086
bits 16
section .code
setup:
; Save original video mode
mov ah, 0xf
int 0x10
mov [original_video_mode], al
; Move to VGA 320x200 256 color mode
mov ah, 0
mov al, 0x13
int 0x10
; Set es to point to VGA framebuffer
mov ax, 0xa000
mov es, ax
mainloop:
mov ah, 0x2c
int 0x21
cmp ch, [hour]
jne .changed
cmp cl, [minute]
jne .changed
cmp dh, [second]
jne .changed
jmp .unchanged
.changed:
call clear_screen
mov [hour], ch
mov [minute], cl
mov [second], dh
mov bp, 0
add bp, [hour]
mov byte [es:bp], 1
mov bp, [width]
add bp, [minute]
mov byte [es:bp], 2
mov bp, [width]
add bp, [width]
add bp, [second]
mov byte [es:bp], 4
.unchanged:
hlt
jmp mainloop
exit:
; Restore video mode
mov ah, 0
mov al, [original_video_mode]
int 0x10
ret
clear_screen:
push bp
xor bp, bp
.loop:
mov word [es:bp], 0
inc bp
cmp bp, 320*200/2
jne .loop
pop bp
ret
section .rodata
width dw 320
height dw 200
section .data
hour dw 0
minute dw 0
second dw 0
original_video_mode db 0