Compare commits

...

3 Commits

2 changed files with 96 additions and 17 deletions

View File

@ -8,16 +8,16 @@ mov ax, 0x1000
mov es, ax mov es, ax
mov bx, 0 mov bx, 0
mov al, 32 mov al, 0x20
mov dh, 0 mov dh, 0
mov ch, 0 mov ch, 0
mov cl, 2 mov cl, 0x2
mov ah, 2 mov ah, 0x2
int 0x13 int 0x13
jmp 0x1000:0 jmp 0x1000:0
times 510-($-$$) db 0 times 0x1fe-($-$$) db 0
db 0x55 db 0x55
db 0xaa db 0xaa

View File

@ -1,3 +1,5 @@
;Main
mov ax, 0x1000 mov ax, 0x1000
mov ds, ax mov ds, ax
@ -7,19 +9,31 @@ call print
loop: loop:
mov si, prompt mov si, prompt
call print call print
mov di, input
call read call read
cmp byte [input], 0 cmp byte [input], 0
je loop je loop
execute:
.hello:
mov si, input mov si, input
call print mov di, command.hello
mov si, newline call compare
call print jnc .echo
mov cx, 0x4e call hello
mov di, input
mov al, 0
rep stosb
jmp loop jmp loop
.echo:
mov si, input
mov di, command.echo
call compare
jnc .unknown
call echo
jmp loop
.unknown:
mov si, command.unknown
call print
jmp loop
;Calls
print: print:
lodsb lodsb
@ -32,15 +46,20 @@ jmp print
ret ret
read: read:
mov di, input
mov cx, 0x80
mov al, 0
rep stosb
mov di, input
mov cl, 0 mov cl, 0
.loop: .loop:
mov ah, 0 mov ah, 0
int 0x16 int 0x16
cmp al, 0xd cmp al, 0xd
je .return je .return
cmp al, 8 cmp al, 0x8
je .backspace je .backspace
cmp cl, 0x4d cmp cl, 0x80
je .loop je .loop
cmp al, 0x20 cmp al, 0x20
je .space je .space
@ -76,18 +95,78 @@ dec di
dec cl dec cl
jmp .loop jmp .loop
.return: .return:
mov di, input.end
.tspfind:
dec di
cmp byte [di], 0
je .tspfind
cmp byte [di], 0x20
je .tsperase
jmp .done
.tsperase:
mov al, 0
stosb
dec di
jmp .tspfind
.done:
mov si, newline mov si, newline
call print call print
ret ret
compare:
mov al, [si]
mov bl, [di]
cmp al, bl
jne .nequal
cmp al, 0
je .equal
inc si
inc di
jmp compare
.nequal:
clc
ret
.equal:
stc
ret
hello:
mov si, .msg
call print
ret
.msg:
db "Hello world!", 0xd, 0xa, 0
echo:
call read
cmp byte [input], 0
je loop
mov si, input
call print
mov si, newline
call print
ret
;Data
welcome: welcome:
db 0xd, 0xa, "Welcome to EttinOS!", 0xd, 0xa, 0xd, 0xa, 0 db 0xd, 0xa, "Welcome to EttinOS!", 0xd, 0xa, 0xd, 0xa, 0
input:
times 78 db 0
prompt: prompt:
db "> ", 0 db "> ", 0
command:
.hello:
db "hello", 0
.echo:
db "echo", 0
.unknown:
db "Unknown command", 0xd, 0xa, 0
newline: newline:
db 0xd, 0xa, 0 db 0xd, 0xa, 0
input:
times 0x80 db 0
.end:
db 0