debug rom: implement cmd loop

This commit is contained in:
Nero 2020-05-13 19:48:57 +00:00
parent 064b6ff6af
commit 47037ad708

View File

@ -1,8 +1,6 @@
cpu 8086 cpu 8086
org 0x0000 org 0x0000
stacksize: equ 0x20
db 0x55, 0xAA db 0x55, 0xAA
db 0x00 db 0x00
jmp init jmp init
@ -43,11 +41,8 @@ init: push ds
; load DS for ; load DS for
mov ds, ax mov ds, ax
mov al, [cs:2]
inc ax
shr ax, 1
; move down int 0x12 ptr to make space for us ; move down int 0x12 ptr to make space for us
sub [0x413], ax sub word [0x413], ((end - $$) >> 10)
; calculate segment from kilobytes ; calculate segment from kilobytes
mov ax, [0x413] mov ax, [0x413]
mov cl, 6 mov cl, 6
@ -141,7 +136,6 @@ printregs:
.fskip: shl dx, 1 .fskip: shl dx, 1
loop .floop loop .floop
call space call space
call crlf
ret ret
int3entry: int3entry:
@ -170,13 +164,35 @@ int3entry:
mov [reg_ss], ss mov [reg_ss], ss
mov [reg_es], es mov [reg_es], es
; initialize other segments and setup stack ; initialize other segments and setup stack
mov ax, cs
mov es, ax mov es, ax
mov ss, ax mov ss, ax
mov sp, (stack+stacksize) mov sp, end
call crlf call crlf
call printregs call printregs
loop: ; new line & show prompt
call crlf
mov al, '-'
int 0x10
; read data
call read
jc loop
; execute
call crlf
mov al, [cmdbuf]
call runcmd
jmp loop
runcmd: cmp al, 'r'
je printregs
; print a question mark
xor bx, bx
mov ax, 0x0e3F
int 0x10
ret
return: ; restore stack pointer return: ; restore stack pointer
mov ss, [reg_ss] mov ss, [reg_ss]
mov sp, [reg_sp] mov sp, [reg_sp]
@ -202,11 +218,47 @@ return: ; restore stack pointer
iret iret
names: db "AXCXDXBXSPBPSIDI" names: db "AXCXDXBXSPBPSIDI"
db "DSESSSCSIPFL" db "ESCSSSDSIPFL"
fnames: db "++++ODIT" fnames: db "++++ODIT"
db "SZ+A+P+C" db "SZ+A+P+C"
getc: xor ax, ax
int 0x16
test al, al
jz getc
ret
read: mov di, cmdbuf
.loop: call getc
cmp al, 0x03
je .can
cmp al, 0x0D
je .enter
cmp al, 0x08
je .bs
cmp di, cmdbuf+cmdlen
jnc .loop
stosb
mov ah, 0x0e
xor bx, bx
int 0x10
jmp .loop
ret
.bs: cmp di, cmdbuf
jbe .loop
xor bx, bx
mov ax, 0x0e08
int 0x10
mov al, 0x20
int 0x10
mov al, 0x08
int 0x10
dec di
jmp .loop
.can: stc
.enter: ret
codeend: codeend:
reg_ax: dw 0 reg_ax: dw 0
@ -226,6 +278,10 @@ reg_ds: dw 0
reg_ip: dw 0 reg_ip: dw 0
reg_fl: dw 0 reg_fl: dw 0
stack: times stacksize dw 0 cmdlen: equ 16
cmdbuf: times cmdlen dw 0
align 512 stack: times 0x80 dw 0
align 1024
end: