Skip to content

Commit 3bce1cd

Browse files
fixed dm cmd: last invalid mcb no longer displayed
1 parent dfa4a2e commit 3bce1cd

4 files changed

Lines changed: 47 additions & 45 deletions

File tree

HISTORY.TXT

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
0.99c [29 Septemb 2006]
2222
- RX changed. Now it toggles 16/32 bit register dump.
2323
- RN displays floating point register status.
24-
0.99d [02 October 2006]
24+
0.99d [2 October 2006]
2525
- bugfix: RN displayed error-pointer registers wrong.
2626
0.99e [12 October 2006]
2727
- XR command added to reallocate EMS handle.
@@ -35,7 +35,7 @@
3535
0.99g [25 October 2006]
3636
- bugfix: U was unable to recognise [ESP] related memory operands
3737
(i.e. mov eax,[esp]).
38-
0.99h [07 November 2006]
38+
0.99h [7 November 2006]
3939
- bugfix: R trying to display content of effective address has
4040
caused a GPF in v86-mode if this address was FFFFh of FFFDh.
4141
- IW, ID, OW and OD implemented.
@@ -105,7 +105,7 @@
105105
int 2Fh is now hooked later. This allows to debug applications
106106
which install their own DPMI host during initialization.
107107
- DEBUGX: DL understands an optional "count" argument.
108-
1.11 [06 February 2008]
108+
1.11 [6 February 2008]
109109
- bugfix: debugger lost debuggee's HiWord(EFL) in real-mode.
110110
- bugfix: if debuggee set CR0 AM bit and EFL AC flag, an
111111
exception 11h occured in the debugger.
@@ -200,21 +200,21 @@
200200
MS debug is accepted now ( which is a segment register followed
201201
by a colon ).
202202
- file makex.bat added.
203-
1.24 [04 July 2011]
203+
1.24 [4 July 2011]
204204
- bugfix: line assembler didn't encode 32-bit addressing with SIB
205205
byte correctly in v1.23.
206206
- debug script DPMICL16.SCR added.
207-
1.25 [08 August 2011]
207+
1.25 [8 August 2011]
208208
- 2 variants (F & G) added to makex.bat
209-
1.26 [16 January 2020]
209+
1.26 [16.1.2020]
210210
- bugfix 'a' cmd: 'MOV sreg, mem' and 'MOV mem, sreg' needed a size.
211211
- bugfix 'xm' cmd: logical page displayed was 2 digits only.
212212
- DEBUGX: interrupt and exception 07 intercepted.
213213
- DEBUGX: int 2Fh was "rehooked" if protected-mode debuggee caused a
214214
break in real-mode.
215215
- bugfix 'xs' cmd: no of pages of just the first handle was displayed,
216216
and the handle total was not correct.
217-
1.27 [08 November 2020]
217+
1.27 [8.11.2020]
218218
- added new variant DEBUGXU.COM. This version does not use int 15h,
219219
ah=87h inside the DX command, thus avoiding to disable a possibly
220220
active unreal mode. The catch is that this version's DX command won't
@@ -226,7 +226,7 @@
226226
- if InDOS flag is set, a '!' is preceding the debugger prompt.
227227
- BIOS used when waiting for a key in help msg display.
228228
- 'e' cmd uses BIOS if InDOS flag set.
229-
1.28 [10 March 2022]
229+
1.28 [10.3.2022]
230230
- DEBUGX bugfix e-cmd: used wrong offset when reading from 32-bit
231231
segments.
232232
- DEBUGX bugfix d-cmd: hiword(ecx) wasn't cleared, resulting in a
@@ -237,7 +237,7 @@
237237
- DEBUGX: int 2Fh, ax=1686h to detect mode no longer used - this makes
238238
interrupt 2Fh traceable.
239239
- bugfix 'e' cmd: don't stop input after byte '0d' has been entered.
240-
1.29 [06 May 2022]
240+
1.29 [6.5.2022]
241241
- DEBUGX bugfix c/d/e/m/s-cmd: an offset beyond 0ffffh was rejected if
242242
the segment descriptor's 'default-size' flag wasn't set.
243243
- DEBUGX bugfix e-cmd interactive mode: offset increment and decrement
@@ -261,7 +261,7 @@
261261
intercepted protected-mode int 21h and refuses to quit.
262262
- another variant - DEBUGXV - may be created. It allows to flip video
263263
screen between debugger and debuggee.
264-
2.00 [5 December 2022]
264+
2.00 [5.12.2022]
265265
- fixed: routine int21ah9 did use DOS, even if InDos flag was set.
266266
- fixed: reading stdin from file wasn't fully MS Debug compatible.
267267
- fixed: correctly handle tabs if output is via BIOS.
@@ -295,8 +295,9 @@
295295
converted to selectors during initial switch to protected-mode.
296296
- DEBUGX: exceptions 0dh/0eh are set/reset on debugger entry/exit.
297297
- DEBUGXV: stop in debugger if SYSREQ is pressed.
298-
2.1 []
299-
- added a ring0 (PL0) variant for long mode - DebugRL.bin.
298+
2.01 [7.1.2024]
300299
- fixed: addr/opsize prefixes "toggle", but just once.
301-
- added bp/bc cmds for ring 0 variants (DebugR/DebugRL).
302-
- ignore debug exception if inside debugger.
300+
- fixed: debug exceptions occuring inside debug are now ignored.
301+
- fixed dm cmd: invalid last mcb no longer displayed.
302+
- added a ring0 (PL0) variant for long mode - DebugRL.bin.
303+
- DEBUGR(L): added bp & bc cmds.

src/DEBUG.ASM

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
; - add MMX instructions for A and U
4949
; - support loading *.HEX files
5050

51-
VERSION textequ <2.1>
51+
VERSION textequ <2.01>
5252

5353
option casemap:none
5454
option proc:private
@@ -238,7 +238,7 @@ SYSRQINT equ 9 ;if CATCHSYSREQ==1, defines the method (int 09h or int 15h)
238238

239239
ifndef CATCHINT01
240240
CATCHINT01 equ 1 ;catch INT 01 (single-step)
241-
NOEXC01INDBG equ 1 ;v2.1: ignore unexpected debug exceptions in debug itself
241+
NOEXC01INDBG equ 1 ;v2.01: ignore unexpected debug exceptions in debug itself
242242
endif
243243
ifndef CATCHINT03
244244
CATCHINT03 equ 1 ;catch INT 03 (break)
@@ -4851,6 +4851,9 @@ endif
48514851

48524852
if DMCMD
48534853

4854+
;--- dm cmd: display list of MCBs
4855+
;--- DI=lineout
4856+
48544857
mcbout proc
48554858
; mov di,offset line_out
48564859
mov ax,"SP"
@@ -4862,33 +4865,36 @@ mcbout proc
48624865
call putsline ;destroys cx,dx,bx
48634866

48644867
mov si,[wMCB]
4868+
push ds
48654869
nextmcb:
48664870
mov di,offset line_out
4867-
push ds
48684871
call setds2si
4869-
mov ch,ds:[0000]
4870-
mov bx,ds:[0001] ;owner psp
4871-
mov dx,ds:[0003]
48724872
mov ax,si
48734873
call hexword ;segment address of MCB
48744874
mov al,' '
48754875
stosb
4876-
mov al,ch
4877-
call hexbyte ;'M' or 'Z'
4876+
mov al,ds:[0000];'M' or 'Z'
4877+
cmp al,'Z'
4878+
jz @F
4879+
cmp al,'M'
4880+
jnz mcbout_done
4881+
@@:
4882+
call hexbyte
48784883
mov al,' '
48794884
stosb
4880-
mov ax,bx
4881-
call hexword ;MCB owner
4885+
mov ax,ds:[0001];MCB owner
4886+
mov bx,ax
4887+
call hexword
48824888
mov al,' '
48834889
stosb
4884-
mov ax,dx
4885-
call hexword ;MCB size in paragraphs
4890+
mov ax,ds:[0003];MCB size in paragraphs
4891+
mov dx,ax
4892+
call hexword
48864893
mov al,' '
48874894
stosb
48884895
and bx,bx
48894896
jz mcbisfree
48904897
push si
4891-
push cx
48924898
push dx
48934899
mov si,8
48944900
mov cx,2
@@ -4903,21 +4909,17 @@ nextmcbchar: ;copy "name" of owner MCB
49034909
and al,al
49044910
loopnz nextmcbchar
49054911
pop dx
4906-
pop cx
49074912
pop si
49084913
mcbisfree:
4909-
pop ds
49104914
add si,dx
49114915
jc mcbout_done
49124916
inc si
4913-
push cx
4917+
pop ds
4918+
push ds
49144919
call putsline ;destroys cx,dx,bx
4915-
pop cx
4916-
cmp ch,'Z'
4917-
jz nextmcb
4918-
cmp ch,'M'
4919-
jz nextmcb
4920+
jmp nextmcb
49204921
mcbout_done:
4922+
pop ds
49214923
ret
49224924

49234925
setds2si:
@@ -10982,8 +10984,8 @@ parse_pt endp
1098210984
; Uses AH,BX,CX,(E)DX.
1098310985

1098410986
parseql proc
10985-
mov [eqflag],0 ;mark '=' as absent
1098610987
mov bx,[regs.rCS] ;default segment
10988+
mov [eqflag],al
1098710989
cmp al,'='
1098810990
jne peq1 ;if no '=' operand
1098910991
call skipwhite
@@ -10994,7 +10996,6 @@ endif
1099410996
call getaddr ;get address into bx:(e)dx
1099510997
sizeprfX ;mov [eqladdr+0],edx
1099610998
mov [eqladdr+0],dx
10997-
inc [eqflag]
1099810999
peq1:
1099911000
mov [eqladdr+4],bx
1100011001
ret
@@ -11005,8 +11006,8 @@ parseql endp
1100511006
; Uses AX.
1100611007

1100711008
seteq proc
11008-
cmp [eqflag],0 ;'=' argument given?
11009-
jz @F
11009+
cmp [eqflag],'=' ;'=' argument given?
11010+
jnz @F
1101011011
sizeprfX ;mov eax,[eqladdr+0]
1101111012
mov ax,[eqladdr+0]
1101211013
sizeprfX ;mov [regs.rIP+0],eax
@@ -12400,7 +12401,7 @@ if DRIVER or RING0 or BOOTDBG
1240012401
ret
1240112402
endif
1240212403
else
12403-
mov [bInDbg], 1 ; v2.1: variable is set only when debug is entered via interrupt
12404+
mov [bInDbg], 1 ; v2.01: variable is set only when debug is entered via interrupt
1240412405
push ds
1240512406
pop es
1240612407
mov cl, 4

src/DISASM.INC

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ if ?PM
192192
call getseldefsize
193193
mov [bCSAttr],al
194194
if 0
195-
;--- ?PM v2.1: don't preset opsize/adrsize prefixes if D bit is set;
195+
;--- ?PM v2.01: don't preset opsize/adrsize prefixes if D bit is set;
196196
;--- those prefixes toggle just once.
197197
jz @F
198198
or [preflags], PRE32D or PRE32A
@@ -301,14 +301,14 @@ da_fpugrp:
301301
;--- dis_jmp2[5]: Instruction prefix. At this point, bl = prefix bits; bh = segment
302302

303303
da_insprf:
304-
if 0 ; v2.1: removed - opsize/adrsize prefixes "toggle" just once
304+
if 0 ; v2.01: removed - opsize/adrsize prefixes "toggle" just once
305305
mov al,bl
306306
and bl,not (PRE32D or PRE32A) ;these flags are XORed!
307307
endif
308308
test bl,[preflags]
309309
jnz disbad0 ;if there are duplicates
310310
or [preflags],bl
311-
if 0 ; v2.1: removed - opsize/adrsize prefixes "toggle" just once
311+
if 0 ; v2.01: removed - opsize/adrsize prefixes "toggle" just once
312312
mov bl,al
313313
and al,PRE32D or PRE32A
314314
xor [preflags],al
@@ -326,7 +326,7 @@ disbad0:
326326

327327
da13pre:
328328

329-
if ?PM ; v2.1: update opsize/adrsize prefixes if D bit set AFTER prefixes have been read
329+
if ?PM ; v2.01: update opsize/adrsize prefixes if D bit set AFTER prefixes have been read
330330
test [bCSAttr], 40h
331331
jz @F
332332
xor [preflags], PRE32D or PRE32A

src/DPRINTF.INC

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ ltob PROC
7878
ltob ENDP
7979

8080
;--- ss doesn't need to be dgroup
81-
;--- v2.1: ss may be 32-bit!
81+
;--- v2.01: ss may be 32-bit!
8282

8383
dprintf PROC
8484

0 commit comments

Comments
 (0)