org $7c00

jmp boot_load
nop

times 59 db 0ffh

boot_load:

mov si, title
call print_str

@@:
call get_string
jmp @b


;FUNCTIONS

bspace:
pusha
mov ah, 03h
mov bh, 00h
int 10h
mov ah, 02h
dec dl
int 10h
popa
retn


check_char:
cmp al, 08h
je delete
cmp al, 0dh
je rtn
retn


delete:
pusha
call bspace
dec di
popa
retn


get_char_w_echo:
mov ax, 0h
int 16h
call print_char
retn


get_string:
pusha
mov di, str_array
@@:
call get_char_w_echo
call check_char
stosb
jne @b
mov si, str_array
call print_str
popa
retn


newline:
pusha
mov si, crlf
call print_str
popa
retn


print_char:
push bx
push cx
mov ah, 09h
mov bx, 000ah ;0a = green
mov cx, 01h
int 10h
cmp al, 08h
je @f
call space
@@:
pop cx
pop bx
retn


print_str:
push bx
mov bx, 0h
@@:
lodsb
or al, al
jz @f
mov ah, 0eh
int 10h
jmp @b
@@:
pop bx
retn


rtn:

space:
pusha
mov ah, 03h
mov bh, 00h
int 10h
mov ah, 02h
inc dl
int 10h
popa
retn


;DATA


crlf db 0dh,0ah,0
directions db 'Enter only numbers and -+/*',0dh,0ah,0
title db 'OS Calculator',0dh,0ah,0
warning db 'If you enter any thing else you will not get an error, just a wrong answer.',0dh,0ah,0


offs rb 1
str_array rb 50




rb 510 + $$ - $
db 055h, 0aah