;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; RDOS operating system ; Copyright (C) 1988-2000, Leif Ekblad ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. The only exception to this rule ; is for commercial usage in embedded systems. For information on ; usage in commercial embedded systems, contact embedded@rdos.net ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; ; The author of this program may be contacted at leif@rdos.net ; ; KDEBUG.ASM ; Kernel part kernel debugger ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INCLUDE ..\driver.def INCLUDE ..\os\protseg.def INCLUDE ..\user.def INCLUDE ..\os.def INCLUDE ..\user.inc INCLUDE ..\os.inc INCLUDE ..\os\system.def INCLUDE gate.def ; ds = datasegment .386p .387 code SEGMENT byte use16 public 'CODE' extrn init_local:near extrn init_ipc_debug:near extrn init_crashdeb:near extrn init_remote:near extrn SetDataSel:near assume cs:code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ReadData ; ; DESCRIPTION: ; ; PARAMETERS: DX:EBX ADDRESS ; ES THREAD ; AL RESULT ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public ReadData ReadData Proc near push bx push esi mov esi,ebx mov bx,es test word ptr gs:p_rflags+2,2 jz read_data_prot read_data_virt: ReadThreadSegment jmp read_data_done read_data_prot: ReadThreadSelector read_data_done: pop esi pop bx ret ReadData Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ReadData64 ; ; DESCRIPTION: ; ; PARAMETERS: DX:EBX ADDRESS ; ES THREAD ; AL RESULT ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public ReadData64 ReadData64 Proc near push bx push esi mov esi,ebx mov bx,es ReadThread64 pop esi pop bx ret ReadData64 Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetIllegalOsGate ; ; DESCRIPTION: Get illegal OS gate name ; ; PARAMETERS: ES:DI Name buffer ; CX Buffer size ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public GetIllegalOsGate GetIllegalOsGate PROC near push ds push fs mov ax,osgate_sel mov ds,ax mov fs,[bx].os_gate_name_sel mov esi,[bx].os_gate_name_offset xor bx,bx illegal_out_os_loop: mov al,fs:[esi] or al,al je illegal_out_os_ok stosb inc esi inc bx loop illegal_out_os_loop illegal_out_os_ok: inc cx mov al,' ' rep stosb pop fs pop ds ret GetIllegalOsGate ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetIllegalUserGate ; ; DESCRIPTION: Get illegal user gate name ; ; PARAMETERS: ES:DI Name buffer ; CX Buffer size ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public GetIllegalUserGate GetIllegalUserGate PROC near push ds push fs mov ax,usergate_sel mov ds,ax mov fs,[bx].user_gate_name_sel mov esi,[bx].user_gate_name_offset xor bx,bx illegal_out_user_loop: mov al,fs:[esi] or al,al je illegal_out_user_ok stosb inc esi inc bx loop illegal_out_user_loop illegal_out_user_ok: inc cx mov al,' ' rep stosb pop fs pop ds ret GetIllegalUserGate ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetOsCall ; ; DESCRIPTION: Get OS call gate name ; ; PARAMETERS: ES:DI Name buffer ; CX Buffer size ; DX:BX Address ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public GetOsCall GetOsCall PROC near push ds push fs push si ; mov ax,word ptr gs:p_rflags+2 test ax,2 jnz short get_oscall_error ; push cx mov ax,osgate_sel mov ds,ax xor si,si mov cx,osgate_entries get_oscall_scan_loop: cmp dx,ds:[si].os_gate_sel jne get_oscall_scan_next ; cmp bx,word ptr ds:[si].os_gate_offset je get_oscall_found get_oscall_scan_next: add si,8 loop get_oscall_scan_loop ; pop cx jmp short get_oscall_error get_oscall_found: pop cx mov fs,[si].os_gate_name_sel mov si,word ptr [si].os_gate_name_offset xor bx,bx get_oscall_out_loop: mov al,fs:[si] or al,al je get_oscall_out_ok ; stosb inc si inc bx loop get_oscall_out_loop get_oscall_out_ok: inc cx mov al,' ' rep stosb clc jmp get_oscall_end get_oscall_error: stc get_oscall_end: pop si pop fs pop ds ret GetOsCall ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetUserCall ; ; DESCRIPTION: Get user gate name ; ; PARAMETERS: ES:DI Name buffer ; CX Buffer size ; DX:BX Address ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public GetUserCall GetUserCall PROC near push ds push fs push si mov ax,word ptr gs:p_rflags+2 test ax,2 jnz short get_usercall_error ; push cx mov ax,usergate_sel mov ds,ax xor si,si mov cx,usergate_entries get_usercall_scan_loop: cmp dx,ds:[si].user_gate_entry_sel16 jne get_usercall_not_entry16 ; cmp bx,word ptr ds:[si].user_gate_entry_offset16 je get_usercall_found get_usercall_not_entry16: cmp dx,ds:[si].user_gate_entry_sel32 jne get_usercall_not_entry32 ; cmp bx,word ptr ds:[si].user_gate_entry_offset32 je get_usercall_found get_usercall_not_entry32: cmp dx,ds:[si].user_gate_sel16 je get_usercall_found ; cmp dx,ds:[si].user_gate_sel32 je get_usercall_found ; add si,1 SHL USER_GATE_SHIFT loop get_usercall_scan_loop ; pop cx jmp short get_usercall_error get_usercall_found: pop cx mov fs,[si].user_gate_name_sel mov esi,[si].user_gate_name_offset xor bx,bx get_usercall_out_loop: mov al,fs:[esi] or al,al je get_usercall_out_ok ; stosb inc esi inc bx loop get_usercall_out_loop get_usercall_out_ok: inc cx mov al,' ' rep stosb clc jmp get_usercall_end get_usercall_error: stc get_usercall_end: pop si pop fs pop ds ret GetUserCall ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: interact_inc ; ; DESCRIPTION: Interact increment ; ; PARAMETERS: GS TSS ; DX:ESI Adress to data ; CL Number of digits ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public interact_incr interact_incr PROC near push eax push bx push esi xor eax,eax clc rcr cl,1 mov al,cl pushf add esi,eax mov bx,gs test word ptr gs:p_rflags+2,2 jz interact_inc_read_prot interact_inc_read_virt: ReadThreadSegment jmp interact_inc_read_done interact_inc_read_prot: ReadThreadSelector interact_inc_read_done: popf jnc inc_low inc_hi: add al,10h jmp inc_j inc_low: mov ah,al inc al and al,0Fh and ah,0F0h or al,ah inc_j: test word ptr gs:p_rflags+2,2 jz interact_inc_write_prot interact_inc_write_virt: WriteThreadSegment jmp interact_inc_write_done interact_inc_write_prot: WriteThreadSelector interact_inc_write_done: pop esi pop bx pop eax ret interact_incr ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: interact_dec ; ; DESCRIPTION: Interact decrement ; ; PARAMETERS: GS TSS ; DX:ESI Adress to data ; CL Number of digits ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public interact_decr interact_decr PROC near push eax push bx push esi xor eax,eax clc rcr cl,1 mov al,cl pushf add esi,eax mov bx,gs test word ptr gs:p_rflags+2,2 jz interact_dec_read_prot interact_dec_read_virt: ReadThreadSegment jmp interact_dec_read_done interact_dec_read_prot: ReadThreadSelector interact_dec_read_done: popf jnc dec_low dec_hi: sub al,10h jmp dec_j dec_low: mov ah,al dec al and al,0Fh and ah,0F0h or al,ah dec_j: test word ptr gs:p_rflags+2,2 jz interact_dec_write_prot interact_dec_write_virt: WriteThreadSegment jmp interact_dec_write_done interact_dec_write_prot: WriteThreadSelector interact_dec_write_done: pop esi pop bx pop eax ret interact_decr ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: interact_set_value ; ; DESCRIPTION: Interact set new value ; ; PARAMETERS: GS TSS ; DX:ESI Adress to data ; CL Digit # ; CH Value ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public interact_set_value interact_set_value PROC near push eax push bx push esi xor eax,eax clc rcr cl,1 mov al,cl pushf add esi,eax mov bx,gs test word ptr gs:p_rflags+2,2 jz interact_set_read_prot interact_set_read_virt: ReadThreadSegment jmp interact_set_read_done interact_set_read_prot: ReadThreadSelector interact_set_read_done: popf jnc set_low set_hi: and al,0Fh mov ah,ch shl ah,4 or al,ah jmp set_j set_low: and al,0F0h or al,ch set_j: test word ptr gs:p_rflags+2,2 jz interact_set_write_prot interact_set_write_virt: WriteThreadSegment jmp interact_set_write_done interact_set_write_prot: WriteThreadSelector interact_set_write_done: pop esi pop bx pop eax ret interact_set_value ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec16 ; ; DESCRIPTION: INC / DEC ; ; PARAMETERS: GS 80386 TSS ; DX:ESI address to data ; AL operation ('+' och '-') ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; incdec16 PROC near mov fs,dx cmp al,'+' jne not_inc_reg16 ; inc word ptr fs:[esi] ret not_inc_reg16: cmp al,'-' jne not_dec_reg16 ; dec word ptr fs:[esi] ret not_dec_reg16: ret incdec16 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec32 ; ; DESCRIPTION: INC / DEC ; ; PARAMETERS: GS 80386 TSS ; DX:ESI address to data ; AL operation ('+' och '-') ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; incdec32 PROC near mov fs,dx cmp al,'+' jne not_inc_reg32 ; inc dword ptr fs:[esi] ret not_inc_reg32: cmp al,'-' jne not_dec_reg32 ; dec dword ptr fs:[esi] ret not_dec_reg32: ret incdec32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec64 ; ; DESCRIPTION: INC / DEC ; ; PARAMETERS: GS 80386 TSS ; DX:ESI address to data ; AL operation ('+' och '-') ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; incdec64 PROC near mov fs,dx cmp al,'+' jne not_inc_reg64 ; add dword ptr fs:[esi],1 adc dword ptr fs:[esi+4],0 ret not_inc_reg64: cmp al,'-' jne not_dec_reg64 ; sub dword ptr fs:[esi],1 sbb dword ptr fs:[esi+4],0 ret not_dec_reg64: ret incdec64 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_eax ; ; DESCRIPTION: INC / DEC EAX ; ; PARAMETERS: GS 8086 TSS ; AL operation ('+' och '-') ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_eax incdec_eax PROC near mov dx,gs mov esi,OFFSET p_rax call incdec32 ret incdec_eax ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_ebx ; ; DESCRIPTION: INC / DEC EBX ; ; PARAMETERS: GS 8086 TSS ; AL operation ('+' och '-') ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_ebx incdec_ebx PROC near mov dx,gs mov esi,OFFSET p_rbx call incdec32 ret incdec_ebx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_ecx ; ; DESCRIPTION: INC / DEC ECX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_ecx incdec_ecx PROC near mov dx,gs mov esi,OFFSET p_rcx call incdec32 ret incdec_ecx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_edx ; ; DESCRIPTION: INC / DEC EDX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_edx incdec_edx PROC near mov dx,gs mov esi,OFFSET p_rdx call incdec32 ret incdec_edx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_esi ; ; DESCRIPTION: INC / DEC ESI ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_esi incdec_esi PROC near mov dx,gs mov esi,OFFSET p_rsi call incdec32 ret incdec_esi ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_edi ; ; DESCRIPTION: INC / DEC EDI ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_edi incdec_edi PROC near mov dx,gs mov esi,OFFSET p_rdi call incdec32 ret incdec_edi ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_esp ; ; DESCRIPTION: INC / DEC ESP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_esp incdec_esp PROC near mov dx,gs mov esi,OFFSET p_rsp call incdec32 ret incdec_esp ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_ebp ; ; DESCRIPTION: INC / DEC EBP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_ebp incdec_ebp PROC near mov dx,gs mov esi,OFFSET p_rbp call incdec32 ret incdec_ebp ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_epc ; ; DESCRIPTION: INC / DEC EIP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_epc incdec_epc PROC near mov dx,gs mov esi,OFFSET p_rip call incdec32 ret incdec_epc ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rip ; ; DESCRIPTION: INC / DEC RIP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rip incdec_rip PROC near mov dx,gs mov esi,OFFSET p_rip call incdec64 ret incdec_rip ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rax ; ; DESCRIPTION: INC / DEC RAX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rax incdec_rax PROC near mov dx,gs mov esi,OFFSET p_rax call incdec64 ret incdec_rax ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rbx ; ; DESCRIPTION: INC / DEC RBX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rbx incdec_rbx PROC near mov dx,gs mov esi,OFFSET p_rbx call incdec64 ret incdec_rbx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rcx ; ; DESCRIPTION: INC / DEC RCX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rcx incdec_rcx PROC near mov dx,gs mov esi,OFFSET p_rcx call incdec64 ret incdec_rcx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rdx ; ; DESCRIPTION: INC / DEC RDX ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rdx incdec_rdx PROC near mov dx,gs mov esi,OFFSET p_rdx call incdec64 ret incdec_rdx ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rsi ; ; DESCRIPTION: INC / DEC RSI ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rsi incdec_rsi PROC near mov dx,gs mov esi,OFFSET p_rsi call incdec64 ret incdec_rsi ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rdi ; ; DESCRIPTION: INC / DEC RDI ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rdi incdec_rdi PROC near mov dx,gs mov esi,OFFSET p_rdi call incdec64 ret incdec_rdi ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r8 ; ; DESCRIPTION: INC / DEC R8 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r8 incdec_r8 PROC near mov dx,gs mov esi,OFFSET p_r8 call incdec64 ret incdec_r8 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r9 ; ; DESCRIPTION: INC / DEC R9 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r9 incdec_r9 PROC near mov dx,gs mov esi,OFFSET p_r9 call incdec64 ret incdec_r9 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r10 ; ; DESCRIPTION: INC / DEC R10 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r10 incdec_r10 PROC near mov dx,gs mov esi,OFFSET p_r10 call incdec64 ret incdec_r10 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r11 ; ; DESCRIPTION: INC / DEC R11 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r11 incdec_r11 PROC near mov dx,gs mov esi,OFFSET p_r11 call incdec64 ret incdec_r11 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r12 ; ; DESCRIPTION: INC / DEC R12 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r12 incdec_r12 PROC near mov dx,gs mov esi,OFFSET p_r12 call incdec64 ret incdec_r12 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r13 ; ; DESCRIPTION: INC / DEC R13 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r13 incdec_r13 PROC near mov dx,gs mov esi,OFFSET p_r13 call incdec64 ret incdec_r13 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r14 ; ; DESCRIPTION: INC / DEC R14 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r14 incdec_r14 PROC near mov dx,gs mov esi,OFFSET p_r14 call incdec64 ret incdec_r14 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_r15 ; ; DESCRIPTION: INC / DEC R15 ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_r15 incdec_r15 PROC near mov dx,gs mov esi,OFFSET p_r15 call incdec64 ret incdec_r15 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rbp ; ; DESCRIPTION: INC / DEC RBP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rbp incdec_rbp PROC near mov dx,gs mov esi,OFFSET p_rbp call incdec64 ret incdec_rbp ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_rsp ; ; DESCRIPTION: INC / DEC RSP ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_rsp incdec_rsp PROC near mov dx,gs mov esi,OFFSET p_rsp call incdec64 ret incdec_rsp ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_cs ; ; DESCRIPTION: INC / DEC CS ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_cs incdec_cs PROC near mov dx,gs mov esi,OFFSET p_cs call incdec16 ret incdec_cs ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_ds ; ; DESCRIPTION: INC / DEC DS ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_ds incdec_ds PROC near mov dx,gs mov esi,OFFSET p_ds call incdec16 ret incdec_ds ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_es ; ; DESCRIPTION: INC / DEC ES ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_es incdec_es PROC near mov dx,gs mov esi,OFFSET p_es call incdec16 ret incdec_es ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_fs ; ; DESCRIPTION: INC / DEC FS ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_fs incdec_fs PROC near mov dx,gs mov esi,OFFSET p_fs call incdec16 ret incdec_fs ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_gs ; ; DESCRIPTION: INC / DEC GS ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_gs incdec_gs PROC near mov dx,gs mov esi,OFFSET p_gs call incdec16 ret incdec_gs ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: incdec_ss ; ; DESCRIPTION: INC / DEC SS ; ; PARAMETERS: GS 8086 TSS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public incdec_ss incdec_ss PROC near mov dx,gs mov esi,OFFSET p_ss call incdec16 ret incdec_ss ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: Register writes ; ; DESCRIPTION: ; ; PARAMETERS: GS Address to readable TSS ; FS Screen selector ; Uses all registers ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public ds_sel ds_sel PROC near mov ax,gs:p_ds call SetDataSel ret ds_sel ENDP public ss_sel ss_sel PROC near mov ax,gs:p_ss call SetDataSel ret ss_sel ENDP public cs_sel cs_sel PROC near mov ax,gs:p_cs call SetDataSel ret cs_sel ENDP public es_sel es_sel PROC near mov ax,gs:p_es call SetDataSel ret es_sel ENDP public fs_sel fs_sel PROC near mov ax,gs:p_fs call SetDataSel ret fs_sel ENDP public gs_sel gs_sel PROC near mov ax,gs:p_gs call SetDataSel ret gs_sel ENDP public no_adr no_adr PROC near xor eax,eax xor bx,bx ret no_adr ENDP public bx_adr bx_adr PROC near movzx eax,word ptr gs:p_rbx xor bx,bx ret bx_adr ENDP public bp_adr bp_adr PROC near movzx eax,word ptr gs:p_rbp xor bx,bx ret bp_adr ENDP public si_adr si_adr PROC near movzx eax,word ptr gs:p_rsi xor bx,bx ret si_adr ENDP public di_adr di_adr PROC near movzx eax,word ptr gs:p_rdi xor bx,bx ret di_adr ENDP public eax_adr eax_adr PROC near mov eax,dword ptr gs:p_rax xor bx,bx ret eax_adr ENDP public rax_adr rax_adr PROC near mov eax,dword ptr gs:p_rax mov bx,word ptr gs:p_rax+4 ret rax_adr ENDP public ebx_adr ebx_adr PROC near mov eax,dword ptr gs:p_rbx xor bx,bx ret ebx_adr ENDP public rbx_adr rbx_adr PROC near mov eax,dword ptr gs:p_rbx mov bx,word ptr gs:p_rbx+4 ret rbx_adr ENDP public ecx_adr ecx_adr PROC near mov eax,dword ptr gs:p_rcx xor bx,bx ret ecx_adr ENDP public rcx_adr rcx_adr PROC near mov eax,dword ptr gs:p_rcx mov bx,word ptr gs:p_rcx+4 ret rcx_adr ENDP public edx_adr edx_adr PROC near mov eax,dword ptr gs:p_rdx xor bx,bx ret edx_adr ENDP public rdx_adr rdx_adr PROC near mov eax,dword ptr gs:p_rdx mov bx,word ptr gs:p_rdx+4 ret rdx_adr ENDP public esi_adr esi_adr PROC near mov eax,dword ptr gs:p_rsi xor bx,bx ret esi_adr ENDP public rsi_adr rsi_adr PROC near mov eax,dword ptr gs:p_rsi mov bx,word ptr gs:p_rsi+4 ret rsi_adr ENDP public edi_adr edi_adr PROC near mov eax,dword ptr gs:p_rdi xor bx,bx ret edi_adr ENDP public rdi_adr rdi_adr PROC near mov eax,dword ptr gs:p_rdi mov bx,word ptr gs:p_rdi+4 ret rdi_adr ENDP public ebp_adr ebp_adr PROC near mov eax,dword ptr gs:p_rbp xor bx,bx ret ebp_adr ENDP public rbp_adr rbp_adr PROC near mov eax,dword ptr gs:p_rbp mov bx,word ptr gs:p_rbp+4 ret rbp_adr ENDP public esp_adr esp_adr PROC near mov eax,dword ptr gs:p_rsp xor bx,bx ret esp_adr ENDP public rsp_adr rsp_adr PROC near mov eax,dword ptr gs:p_rsp mov bx,word ptr gs:p_rsp+4 ret rsp_adr ENDP public eip_adr eip_adr PROC near mov eax,dword ptr gs:p_rip xor bx,bx ret eip_adr ENDP public rip_adr rip_adr PROC near mov eax,dword ptr gs:p_rip mov bx,word ptr gs:p_rip+4 ret rip_adr ENDP public r8d_adr r8d_adr PROC near mov eax,dword ptr gs:p_r8 xor bx,bx ret r8d_adr ENDP public r8_adr r8_adr PROC near mov eax,dword ptr gs:p_r8 mov bx,word ptr gs:p_r8+4 ret r8_adr ENDP public r9d_adr r9d_adr PROC near mov eax,dword ptr gs:p_r9 xor bx,bx ret r9d_adr ENDP public r9_adr r9_adr PROC near mov eax,dword ptr gs:p_r9 mov bx,word ptr gs:p_r9+4 ret r9_adr ENDP public r10d_adr r10d_adr PROC near mov eax,dword ptr gs:p_r10 xor bx,bx ret r10d_adr ENDP public r10_adr r10_adr PROC near mov eax,dword ptr gs:p_r10 mov bx,word ptr gs:p_r10+4 ret r10_adr ENDP public r11d_adr r11d_adr PROC near mov eax,dword ptr gs:p_r11 xor bx,bx ret r11d_adr ENDP public r11_adr r11_adr PROC near mov eax,dword ptr gs:p_r11 mov bx,word ptr gs:p_r11+4 ret r11_adr ENDP public r12d_adr r12d_adr PROC near mov eax,dword ptr gs:p_r12 xor bx,bx ret r12d_adr ENDP public r12_adr r12_adr PROC near mov eax,dword ptr gs:p_r12 mov bx,word ptr gs:p_r12+4 ret r12_adr ENDP public r13d_adr r13d_adr PROC near mov eax,dword ptr gs:p_r13 xor bx,bx ret r13d_adr ENDP public r13_adr r13_adr PROC near mov eax,dword ptr gs:p_r13 mov bx,word ptr gs:p_r13+4 ret r13_adr ENDP public r14d_adr r14d_adr PROC near mov eax,dword ptr gs:p_r14 xor bx,bx ret r14d_adr ENDP public r14_adr r14_adr PROC near mov eax,dword ptr gs:p_r14 mov bx,word ptr gs:p_r14+4 ret r14_adr ENDP public r15d_adr r15d_adr PROC near mov eax,dword ptr gs:p_r15 xor bx,bx ret r15d_adr ENDP public r15_adr r15_adr PROC near mov eax,dword ptr gs:p_r15 mov bx,word ptr gs:p_r15+4 ret r15_adr ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: init ; ; DESCRIPTION: Init kernel debugger ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init Proc far call init_local call init_crashdeb call init_ipc_debug call init_remote ret init Endp code ENDS END init