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

📄 iodat.inc

📁 利用386保护模式将DOS实模式下的PC总线I/O操作(in/out)实时捕捉到内存并可以显示在屏幕上。可用于ISA/VESA/PCI插卡及相关软件的输入/输出调试、I/O性能/行为分析和反汇编。Ve
💻 INC
字号:
;---------------------------------------------------------------
;iodat.inc - data for I/O Monitor                              |
;--------------------------------------------------------------|
;
iostack3        segment para stack 'STACK' use16
io_stack3       dw      256 dup('S')
io_sp3          label   word
iostack3        ends

iostack         segment para public 'STACK' use16
STACK_BEG       EQU     $
io_stack        dw      256 dup('S')
io_sp           label   word
STACK_END       EQU     $
iostack         ends

gdt_seg         segment para public 'data16' use16
                public  sel_databs
                public  sel_stack
                public  sel_video
                public  sel_data
                public  sel_tss_alias

GDT_BEG         EQU     $
sel_null        seg_descrip     <>
sel_tss         seg_descrip     <>
sel_tss_alias   seg_descrip     <>
sel_gdt_alias   seg_descrip     <>
sel_isrcode     seg_descrip     <>
sel_code        seg_descrip     <>
sel_databs      seg_descrip     <>
sel_stack       seg_descrip     <>
sel_video       seg_descrip     <>
sel_data        seg_descrip     <>
GDT_END         EQU     $
gdt_seg         ends

idt_seg         segment para public 'data16' use16
IDT_BEG         EQU     $
                DEFIDTI 0
                idt     <isrcode:int1_isr,gdt_seg:sel_isrcode,,PRESENT+(DPL0 shl 5)+INT_GATE,>
                DEFIDTI 2
                idt     <,,,PRESENT + (DPL0 shl 5) + INT_GATE,>

                irp     z, <4, 5, 6, 7>
                DEFIDTI &z
                endm

                irp     z, <8, 9, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh>
                DEFIDTE &z
                endm

 idt       (1fh - 0fh)  dup(<,,,PRESENT + (DPL0 shl 5) + INT_GATE,>)

                irp     z, <20h, 21h, 22h, 23h, 24h, 25h, 26h, 27h>
                DEFIDTI &z
                endm
 idt       (6Fh - 27h)  dup(<,,,PRESENT + (DPL0 shl 5) + INT_GATE,>)

                irp     z, <70h, 71h, 72h, 73h, 74h, 75h, 76h, 77h>
                DEFIDTI &z
                endm

IDT_END         EQU     $
idt_seg         ends

data            segment para public 'data16' use16
                public  start_port
                public  end_port
                public  old_int1
                public  old_user_int
                public  io_table
                public  IO_TAB_ENTRIES
                public  access_port
                public  access_info
		public  io_buf
		public  io_buf_end
		public  io_buf_ptr
		public  io_repeat_ptr
		public  io_buf_wrap
                public  display_loc
                public  trap_status


DATA_BEG        EQU     $
noprot_msg      db      'Cannot run if already in protected mode.', BEEP, CR, LF, '$'
not386_msg      db      'Program requires at least an 80386.', BEEP, CR, LF, '$'
bad_2nd_msg     db      '2nd port number must be >= first port.', BEEP, CR, LF, '$'
bad_arg_msg     db      'Invalid port address specified.', CR, LF, 'Usage: IOMON <start hex port address> <end hexd port address>', BEEP, CR, LF, '$'
start_port      dw      0
end_port        dw      0
old_int1        dd      ?
old_user_int    dd      ?
access_port     dw      ?
access_info     db      ?
trap_status     db      0


io_table        io_struc        <0e4h, INPUT+CONSTANT+ABYTE>
                io_struc        <0e5h, INPUT+CONSTANT+AWORD>
                io_struc        <0e6h, OUTPUT+CONSTANT+ABYTE>
                io_struc        <0e7h, OUTPUT+CONSTANT+AWORD>
                io_struc        <0ech, INPUT+ABYTE>
                io_struc        <0edh, INPUT+AWORD>
                io_struc        <0eeh, OUTPUT+ABYTE>
                io_struc        <0efh, OUTPUT+AWORD>
IO_TAB_ENTRIES  EQU     ($ - io_table)/size io_struc

io_buf		db      BUF_SIZE dup(0ffh)
io_buf_end	equ     $
io_buf_ptr	dw      offset io_buf
io_repeat_ptr	dw      offset io_buf
io_buf_wrap	db      0

gdtl            EQU     THIS FWORD
gdtlim          dw      (GDT_END-GDT_BEG)-1
gdtadrs         dd      ?

idtl            EQU     THIS FWORD
idtlim          dw      (IDT_END-IDT_BEG)-1
idtadrs         dd      ?

display_loc     dw      0               ;offset into video page
DATA_END        EQU     $
data            ends

tss_seg         segment para public 'data16' use16
TSS_BEG         EQU     $
                tss_dat <>
TSS_END         EQU     $
tss_seg         ends
;------end of iodat.inc

⌨️ 快捷键说明

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