debug.rom: re-implement displaying flags and returning to code
This commit is contained in:
parent
c8adeb35d2
commit
064b6ff6af
@ -72,6 +72,18 @@ init: push ds
|
|||||||
pop ds
|
pop ds
|
||||||
retf
|
retf
|
||||||
|
|
||||||
|
crlf: xor bx, bx
|
||||||
|
mov ax, 0x0e0a
|
||||||
|
int 0x10
|
||||||
|
mov al, 0x0d
|
||||||
|
int 0x10
|
||||||
|
ret
|
||||||
|
|
||||||
|
space: xor bx, bx
|
||||||
|
mov ax, 0x0e20
|
||||||
|
int 0x10
|
||||||
|
ret
|
||||||
|
|
||||||
print16:
|
print16:
|
||||||
; setup bx and ah for int 10h call
|
; setup bx and ah for int 10h call
|
||||||
xor bx, bx
|
xor bx, bx
|
||||||
@ -97,7 +109,7 @@ print16:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
printregs:
|
printregs:
|
||||||
mov cx, 14
|
mov cx, 13
|
||||||
xor bx, bx
|
xor bx, bx
|
||||||
mov ah, 0x0e
|
mov ah, 0x0e
|
||||||
mov si, reg_ax
|
mov si, reg_ax
|
||||||
@ -112,10 +124,24 @@ printregs:
|
|||||||
lodsw
|
lodsw
|
||||||
mov dx, ax
|
mov dx, ax
|
||||||
call print16
|
call print16
|
||||||
mov al, ' '
|
call space
|
||||||
int 0x10
|
|
||||||
pop cx
|
pop cx
|
||||||
loop .loop
|
loop .loop
|
||||||
|
|
||||||
|
mov dx, [reg_fl]
|
||||||
|
mov si, fnames
|
||||||
|
mov cx, 16
|
||||||
|
.floop: lodsb
|
||||||
|
cmp al, '+'
|
||||||
|
je .fskip
|
||||||
|
test dx, 0x8000
|
||||||
|
jnz .fprnt
|
||||||
|
mov al, '-'
|
||||||
|
.fprnt: int 0x10
|
||||||
|
.fskip: shl dx, 1
|
||||||
|
loop .floop
|
||||||
|
call space
|
||||||
|
call crlf
|
||||||
ret
|
ret
|
||||||
|
|
||||||
int3entry:
|
int3entry:
|
||||||
@ -147,15 +173,40 @@ int3entry:
|
|||||||
mov es, ax
|
mov es, ax
|
||||||
mov ss, ax
|
mov ss, ax
|
||||||
mov sp, (stack+stacksize)
|
mov sp, (stack+stacksize)
|
||||||
|
call crlf
|
||||||
|
|
||||||
call printregs
|
call printregs
|
||||||
|
|
||||||
hlt: hlt
|
return: ; restore stack pointer
|
||||||
jmp hlt
|
mov ss, [reg_ss]
|
||||||
|
mov sp, [reg_sp]
|
||||||
|
; push flags, CS and IP
|
||||||
|
mov ax, [reg_fl]
|
||||||
|
push ax
|
||||||
|
mov ax, [reg_cs]
|
||||||
|
push ax
|
||||||
|
mov ax, [reg_ip]
|
||||||
|
push ax
|
||||||
|
; restore GPR
|
||||||
|
mov ax, [reg_ax]
|
||||||
|
mov cx, [reg_cx]
|
||||||
|
mov dx, [reg_dx]
|
||||||
|
mov bx, [reg_bx]
|
||||||
|
mov bp, [reg_bp]
|
||||||
|
mov si, [reg_si]
|
||||||
|
mov di, [reg_di]
|
||||||
|
; restore segment registers
|
||||||
|
mov es, [reg_es]
|
||||||
|
mov ds, [reg_ds]
|
||||||
|
; final jump back
|
||||||
|
iret
|
||||||
|
|
||||||
names: db "AXCXDXBXSPBPSIDI"
|
names: db "AXCXDXBXSPBPSIDI"
|
||||||
db "DSESSSCSIPFL"
|
db "DSESSSCSIPFL"
|
||||||
|
|
||||||
|
fnames: db "++++ODIT"
|
||||||
|
db "SZ+A+P+C"
|
||||||
|
|
||||||
codeend:
|
codeend:
|
||||||
|
|
||||||
reg_ax: dw 0
|
reg_ax: dw 0
|
||||||
|
Loading…
Reference in New Issue
Block a user