rdos/debug/edit.asm

91 lines
1.2 KiB
NASM

; Commands and utils related to displaying or editing memory or registers
cmd_r: cmp byte [si], 0
je printregs
call eat_register
jc .err
mov al, [cs:bx+rnames]
call putc
mov al, [cs:bx+rnames+1]
call putc
call space
call edit_word
call crlf
ret
.err: mov di, eat_register.emsg
jmp parse_error
printregs:
mov cx, 13
xor bx, bx
mov ah, 0x0e
mov si, reg_ax
.loop: push cx
mov dx, [cs:si+rnames]
lodsw
call printreg
pop cx
loop .loop
mov dx, [reg_fl]
mov si, fnames
mov cx, 16
.floop: mov al, [cs:si]
inc si
cmp al, '+'
je .fskip
test dx, 0x8000
jnz .fprnt
mov al, '-'
.fprnt: int 0x10
.fskip: shl dx, 1
loop .floop
call space
push ds
mov ds, [es:reg_cs]
mov si, [es:reg_ip]
call disasm
pop ds
call crlf
ret
printreg:
push ax
mov al, dl
call putc
mov al, dh
call putc
mov al, '='
call putc
pop dx
call print_dx
call space
ret
; let the user edit the word at ES:BX
edit_word:
push bx
mov dx, [es:bx]
call print_dx
mov al, '.'
call putc
mov byte [inmin], 4
mov byte [inmax], 4
mov word [ingetc], getch
call gets
pop bx
jc .ret
mov si, inbuf
call eat_hex_word
jc .err
mov [es:bx], dx
.ret: ret
.err: call crlf
mov di, eat_hex_word.emsg
jmp parse_error