Compare commits
3 Commits
5e665edffe
...
0daa68f804
Author | SHA1 | Date |
---|---|---|
CrazyEttin | 0daa68f804 | |
CrazyEttin | 0c0c882b21 | |
CrazyEttin | 46691e9975 |
|
@ -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
|
||||||
|
|
105
src/os.asm
105
src/os.asm
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue