⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbgcode.inc

📁 MMURTL(tm) Computer Operating System Ver x0.8, source code.
💻 INC
📖 第 1 页 / 共 2 页
字号:
		CALL HexToDD			;dbgDumpAdd has address to dump!
		CMP EAX, 0
		JNE DumpDone

		CALL FAR PTR _ClrScr

dbgDump00:
		MOV dbgGPdd1, 24	;line counter begins at 24
dbgDump01:
		MOV dbgGPdd3, 4 	;number of quads per line
		PUSH dbgDumpAdd 	;convert address to text
		LEA EAX, dbgBuf
		PUSH EAX
		CALL DDtoHex

		LEA EAX, dbgBuf
		PUSH EAX
		PUSH 8
		PUSH 07h
		CALL FAR PTR _TTYOut
		CMP EAX, 0
		JNE DumpDone
dbgDump02:
		MOV dbgGPdd2, 6 	;byte offset begins at 6
		LEA EAX, dbgSpace
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut
		CMP EAX, 0
		JNE DumpDone
		MOV EBX, dbgDumpAdd ;get dump address
		MOV EAX, [EBX]	    ;Get what it's pointing to
		PUSH EAX			;make it a DD Text
		LEA EAX, dbgBuf
		PUSH EAX
		CALL DDtoHex
		MOV AL, dbgfDumpD	;Dumping DWORDS
		CMP AL, 0
		JE DumpB			;NO - go to display bytes

		LEA EAX, dbgBuf		;Yes display Quad
		PUSH EAX
		PUSH 8
		PUSH 07
		CALL FAR PTR _TTYOut
		JMP DumpDin

 dumpB:
		LEA EAX, dbgBuf			;Display First byte
		ADD EAX, dbgGPdd2
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut	;ignore error

		LEA EAX, dbgSpace       ;Display 1 spaces
		PUSH EAX
		PUSH 1
		PUSH 07h
		CALL FAR PTR _TTYOut
		DEC dbgGPdd2			;point to second 2 bytes
		DEC dbgGPdd2

		LEA EAX, dbgBuf 	    ;display 2st byte
		ADD EAX, dbgGPdd2
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut	;ignore error

		LEA EAX, dbgSpace		; display 1 space
		PUSH EAX
		PUSH 1
		PUSH 07h
		CALL FAR PTR _TTYOut

		DEC dbgGPdd2
		DEC dbgGPdd2

		LEA EAX, dbgBuf    		 ;display 3rd byte
		ADD EAX, dbgGPdd2
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut	;ignore error

		LEA EAX, dbgSpace		;a space
		PUSH EAX
		PUSH 1
		PUSH 07h
		CALL FAR PTR _TTYOut
		DEC dbgGPdd2
		DEC dbgGPdd2

		LEA EAX, dbgBuf         ;display 4th byte
		ADD EAX, dbgGPdd2
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut	;ignore error
DumpDin:
		INC dbgDumpAdd
		INC dbgDumpAdd
		INC dbgDumpAdd
		INC dbgDumpAdd
		DEC dbgGPdd3			;done with 4 quads??
		JNZ dbgDump02			;NO - go back for next 4 bytes

		LEA EAX, dbgSpace		;Yes - Display 2 spaces
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut

		LEA EAX,dbgX			;Query XY
		PUSH EAX
		LEA EAX,dbgY
		PUSH EAX
		CALL FAR PTR _GetXY

		PUSH dbgX		  		;Put 16 TEXT chars on right
		PUSH dbgY
		MOV EAX, dbgDumpAdd
		SUB EAX, 16
		PUSH EAX
		PUSH 16
		PUSH 07h
		CALL FAR PTR _PutVidChars	;ignore error

		LEA EAX, dbgCRLF        ;Do CR/LF
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut
		;
		DEC dbgGPdd1		;23lines yet??
		JNZ dbgDump01		;NO
		;
		LEA EAX, dbgCont    ;"Continue" Text
		PUSH EAX
		PUSH 31 		    ;hard coded (FIX ME)
		PUSH 07h
		CALL FAR PTR _TTYOut
dbgDump03:
		MOV EAX, OFFSET dbgKeyCode
		PUSH EAX
		CALL ReadDbgKbd
		MOV EAX, dbgKeyCode
		AND EAX, 0FFh				;Lop off key status bytes
		CMP EAX, 0
		JE dbgDump03
		CMP EAX, 1Bh		    ;Escape (Quit??)
		JE DumpDone

		LEA EAX, dbgCRLF	    ;Do CR/LF
		PUSH EAX
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut
		JMP dbgDump00

		;
 DumpDone:
 		CALL FAR PTR _ClrScr
 		MOV dbgX, 0
 		MOV dbgY, 0
		RETN
;===========================

dbgDispExchs:

		MOV dbgGPdd2, 0		;Exch# we are on
dbgDE00:
		CALL FAR PTR _ClrScr
		PUSH 0					;Col
		PUSH 0					;Line for labels
		PUSH OFFSET dbgExchMsg	;
		PUSH 54					;Length of message
		PUSH 07h
		CALL FAR PTR _PutVidChars	;
		MOV dbgGPdd1, 1			;line we are one

		;First we do the exchange on the current line
dbgDE01:
		PUSH dbgGPdd2 			;Convert Exch number for display
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH 0					;Col
		PUSH dbgGPdd1			;Line we are one
		PUSH OFFSET dbgBuf		;ExchNum
		PUSH 8
		PUSH 07h
		CALL FAR PTR _PutVidChars	;

		;Then we do the Exch Owner (Job Number) next to it

		MOV EAX, dbgGPdd2		; Exch number
		MOV EDX, sEXCH          ; Compute offset of Exch in rgExch
		MUL EDX                 ;
		MOV EDX,prgExch         ; Add offset of rgExch => EAX
		ADD EAX,EDX             ; EAX now pts to Exch
		MOV dbgGPdd3, EAX		; pExch into save variable
		MOV EBX, [EAX.Owner]	; pJCB of Owner into EBX
		XOR EAX, EAX			; Clear for use as JobNum
		OR EBX, EBX				; pNIL? (No owner if so)
		JZ dbgDE03
		MOV EAX, [EBX.JobNum]	;
dbgDE03:
		PUSH EAX	 			;Convert Job Number
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH 10					;Col
		PUSH dbgGPdd1			;Line
		PUSH OFFSET dbgBuf		;
		PUSH 8
		PUSH 07h
		CALL FAR PTR _PutVidChars	;

		MOV dbgGPdd5, 0			;Set pNextMsg to 0

		;See if there is a first message

		MOV EAX, dbgGPdd3		;pExch -> EAX
		MOV EBX, [EAX.fEMsg]	;MsgFlag -> EBX
		OR EBX, EBX				;Is is 1 (a message)?
		JZ dbgDE05				;No, Go check for tasks

		MOV EBX, [EAX.EHead]	;pMsg -> EBX
		OR EBX, EBX				;Is is NIL (no msg)?
		JZ dbgDE13				;Yes. Go to next Exch

		;Display Messages
dbgDE04:
		MOV dbgGPdd6, 0			;Flag to indicate we are doing messages
		MOV EAX, [EBX.NextLB]	;For next msg in chain (if it exists)
		MOV dbgGPdd5, EAX		;Save for loop
		MOV EAX, [EBX.DataHi]	;Get dMsg1
		MOV EDX, [EBX.DataLo]	;Get dMsg2
		PUSH EDX				;Save dMsg2

		PUSH EAX	 			;Convert dMsg1
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH 20					;Col
		PUSH dbgGPdd1			;Line
		PUSH OFFSET dbgBuf		;
		PUSH 8
		PUSH 07h
		CALL FAR PTR _PutVidChars	;

		POP EDX					;Get dMsg2 back

		;Could have left it on stack, but would be confusing later...
		;"simplicity of maintenance is as important as simplicity of design"

		PUSH EDX	 			;Convert dMsg2
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH 30						;Col
		PUSH dbgGPdd1				;Line
		PUSH OFFSET dbgBuf			;
		PUSH 8
		PUSH 07h
		CALL FAR PTR _PutVidChars	;
		JMP  dbgDE07				;Next line please

		;See if there are tasks waiting
dbgDE05:
		MOV dbgGPdd6, 1			;Flag to indicate we are doing tasks
		MOV dbgGPdd5, 0			;Clear pNextTask
		MOV EAX, dbgGPdd3		;pExch -> EAX
		MOV EBX, [EAX.EHead]	;pTSS -> EBX
		OR EBX, EBX				;Is is 0 (no TSS)?
		JZ dbgDE07				;
dbgDE06:
		MOV EAX, [EBX.NextTSS]
		MOV dbgGPdd5, EAX		;Save ptr to next task if it exists
		XOR EAX, EAX
		MOV AX, [EBX.TSSNum]	;Get Number of Task at exch

		PUSH EAX	 			;Convert Task Number
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH 50					;Col
		PUSH dbgGPdd1			;Line
		PUSH OFFSET dbgBuf		;
		PUSH 8
		PUSH 07h
		CALL FAR PTR _PutVidChars	;

dbgDE07:
		INC dbgGPdd1			;Next line
		CMP dbgGPdd1, 23		;23 lines yet?
		JB dbgDE09				;No
		;
dbgDE08:
		PUSH 0					;Col
		PUSH 24					;Line
		PUSH OFFSET dbgCont		;
		PUSH 31					;length of Cont string
		PUSH 07h
		CALL FAR PTR _PutVidChars	;

		MOV EAX, OFFSET dbgKeyCode
		PUSH EAX
		CALL ReadDbgKbd
		MOV EAX, dbgKeyCode
		AND EAX, 0FFh				;Lop off key status bytes
		CMP EAX, 1Bh			    ;Escape (Quit??)
		JE dbgDEDone

		CMP dbgGPdd2, nDynEXCH		; Number of dynamic exchanges
		JAE dbgDEDone				; All Exchs displayed

		CALL FAR PTR _ClrScr		;
		PUSH 0						;Col
		PUSH 0						;Line for labels
		PUSH OFFSET dbgExchMsg		;
		PUSH 54						;Length of message
		PUSH 07h
		CALL FAR PTR _PutVidChars		;
		MOV dbgGPdd1, 1				;line we are on line 1 again

dbgDE09:
		MOV EBX, dbgGPdd5			;Set up to loop for next msg/task
		XOR EBX, EBX				;Another pointer in the link?
		JZ dbgDE13					;No
		MOV EAX, dbgGPdd6			;
		OR EAX, EAX					;NonZero if we are doing tasks
		JNZ dbgDE06					;Tasks
		JMP dbgDE04					;Messages
dbgDE13:
		INC dbgGPdd2				; Exch number
		CMP dbgGPdd2, nDynEXCH		; Number of dynamic exchanges
		JAE dbgDE08					; Go back for prompt (to pause)
		JMP dbgDE01					; Back to display new exch num
dbgDEDone:
 		CALL FAR PTR _ClrScr
 		MOV dbgX, 0
 		MOV dbgY, 0
		RETN
;=============================================================================
; This is for Debugger Address Info display
; Call with:
;		EAX loaded with address to display (Linear Address)
;		ESI loaded with EA of text line to display
;   We save all registers cause the vid calls don't
;=============================================================================
DispAddr:
		PUSHAD
		PUSH EAX		   ;Save number to display

		PUSH ESI				;ptr to line
		PUSH 06h				;Length of line
		PUSH 07h				;Vid Attribute
		CALL FAR PTR _TTYOut	;Do it

		POP EAX 			   ;Get number back for display

		PUSH EAX
		PUSH OFFSET dbgBuf
		CALL DDtoHex

		PUSH OFFSET dbgBuf
		PUSH 8
		PUSH 07h
		CALL FAR PTR _TTYOut

		PUSH OFFSET dbgCRLF
		PUSH 2
		PUSH 07h
		CALL FAR PTR _TTYOut

		CALL dbgCheckScroll

		POPAD
		RETN
;===============================================
;DbgInfo - Displays important linear address for the OS

DbgInfo:
		MOV ESI,OFFSET DbgM0	;IDT
		LEA EAX, IDT
		CALL DispAddr
		MOV ESI,OFFSET DbgM1	;GDT
		LEA EAX, GDT
		CALL DispAddr
		MOV ESI,OFFSET DbgM2	;RQBs
		MOV EAX, pRQBs
		CALL DispAddr
		MOV ESI,OFFSET DbgM3	;MonTSS
		MOV EAX, OFFSET MonTSS
		CALL DispAddr
		MOV ESI,OFFSET DbgM4	;pTSS3
		MOV EAX, pDynTSSs
		CALL DispAddr
		MOV ESI,OFFSET DbgM5	;LBs
		LEA EAX, rgLBs
		CALL DispAddr
		MOV ESI,OFFSET DbgM6	;RdyQ
		LEA EAX, RdyQ
		CALL DispAddr
		MOV ESI,OFFSET DbgM7	;JCBs
		MOV EAX, pJCBs
		CALL DispAddr
		MOV ESI,OFFSET DbgM8	;SVCs
		LEA EAX, rgSVC
		CALL DispAddr
		MOV ESI,OFFSET DbgM9	;Exchs
		MOV EAX, prgExch
		CALL DispAddr
		MOV ESI,OFFSET DbgPA	;PAM (Page Allocation map)
		LEA EAX, rgPAM
		CALL DispAddr
		MOV ESI,OFFSET DbgMB	;Timer Blocks
		LEA EAX, rgTmrBlks
		CALL DispAddr
		RETN


;=======================================================
;All of the debugger text is displayed in a window
;between colums 0 and 66, and line 0 to 24. The other
;areas are resrved for the menu, query line,
;and the register display.
;This checks to see if the cursor is on line 23.
;If so, we scroll up the text area by one line.

dbgCheckScroll:
		LEA EAX,dbgX			;Query XY (See what line and Col)
		PUSH EAX
		LEA EAX,dbgY
		PUSH EAX
		CALL FAR PTR _GetXY
		CMP	dbgY, 23			;Are we at bottom (just above menu)??
		JB	dbgNoScroll			;No, go back for next key

		PUSH 0					;Yes, Scroll test area (Col 0-64, Line 0-24)
		PUSH 0
		PUSH 66					;Columns 0-65
		PUSH 24					;Lines 0-23
		PUSH 1					;fUp (1)
		CALL FAR PTR _ScrollVid

		PUSH 0					;Got to Column 0, Line 22
		PUSH 22
		CALL FAR PTR _SetXY
dbgNoScroll:
		RETN
;
;------------------------------------------------
;Clear the query line (Line 23, 40 chars)

dbgClearQuery:
		PUSH 0			  		;Col 0, Line 23
		PUSH 23
		PUSH OFFSET dbgClear
		PUSH 40
		PUSH 07h
		CALL FAR PTR _PutVidChars	;ignore error
		RETN

;========= module end ============

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -