📄 cwd-ovl.asm
字号:
;display the address.
;
mov eax,esi
sub eax,_DB_Base
mov ecx,8
test SystemFlags,1
jz @@Use32_1
mov ecx,4
@@Use32_1: call Bin2Hex
mov b[edi],' '
inc edi
mov b[edi],0
popm ecx,ebp
@@1: pushm esi,ecx
;
;Display a word.
;
mov ebx,-1
mov ax,0fffch
int 31h
jc @@BadAddr
push es
mov es,RealSegment
mov bl,es:[esi]
pop es
@@BadAddr: mov eax,ebx
mov cl,2
call Bin2Hex
mov b[edi],' '
inc edi
mov b[edi],0
popm esi,ecx
add esi,1
loop @@1
push esi
mov b[edi],0
mov bp,_DB_Handle
mov cl,0
mov ch,_DB_YPos
call LocateWindow
mov ebx,offset ABuffer
call PrintWindow
pop esi
popm ecx,ebp
inc _DB_YPos
dec ebp
jnz @@0
ret
DisplayBytes endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;Display window full of data.
;
;On Entry:-
;
;ESI - Watch entry.
;BP - Destination window.
;EAX - Base linear address.
;EBX - Source linear address.
;
DisplayText proc near
mov _DT_Base,eax
mov ax,WatchFlags[esi]
push esi
mov _DT_Flags,ax
mov _DT_Handle,bp
call PointWindow ;need dimensions.
mov ebp,8+1
test SystemFlags,1
jz @@Use32_0
mov ebp,4+1
;
@@Use32_0: mov edx,1
test _DT_Flags,2
jnz @@Use32_2
add edx,ebp
@@Use32_2: ;
movzx eax,WindowWidth2[esi]
cmp eax,edx
jnc @@ok
mov eax,edx
@@ok: sub edx,1
sub eax,edx
xor edx,edx
mov ecx,1
div ecx
mov ecx,eax
movzx ebp,WindowDepth2[esi]
;
mov _DT_YPos,0
pop esi
mov WatchWidth[esi],eax
mov esi,ebx ;source address.
@@0: pushm ecx,ebp
mov edi,offset ABuffer
test _DT_Flags,2
jnz @@1
pushm ecx,ebp
;
;display the address.
;
mov eax,esi
sub eax,_DT_Base
mov ecx,8
test SystemFlags,1
jz @@Use32_1
mov ecx,4
@@Use32_1: call Bin2Hex
mov b[edi],' '
inc edi
mov b[edi],0
popm ecx,ebp
@@1: pushm esi,ecx
;
;Display a byte.
;
mov ebx,-1
mov ax,0fffch
int 31h
jc @@BadAddr
push es
mov es,RealSegment
mov bl,es:[esi]
pop es
@@BadAddr: mov eax,ebx
or al,al
jnz @@ok9
mov al,'.'
@@ok9: mov b[edi],al
inc edi
mov b[edi],0
popm esi,ecx
add esi,1
loop @@1
push esi
mov b[edi],0
mov bp,_DT_Handle
mov cl,0
mov ch,_DT_YPos
call LocateWindow
call PointWindow
mov ax,WindowFlags[esi]
pushm eax,esi
and ax,65535-WindowTabs
or ax,WindowRaw
call ExtraWindow
mov ebx,offset ABuffer
call PrintWindow
popm eax,esi
mov WindowFlags[esi],ax
pop esi
popm ecx,ebp
inc _DT_YPos
dec ebp
jnz @@0
ret
DisplayText endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;Display window full of data.
;
;On Entry:-
;
;BP - Destination window.
;EAX - Base linear address.
;EBX - Source linear address.
;
DisplayMixed proc near
mov _DM_Base,eax
mov ax,WatchFlags[esi]
push esi
mov _DM_Flags,ax
mov _DM_Handle,bp
call PointWindow ;need dimensions.
mov ebp,8+1 ;+1+4
test SystemFlags,1
jz @@Use32_0
mov ebp,4+1 ;+1+4
;
@@Use32_0: mov edx,4
test _DM_Flags,2
jnz @@Use32_2
add edx,ebp
@@Use32_2: ;
movzx eax,WindowWidth2[esi]
cmp eax,edx
jnc @@ok
mov eax,edx
@@ok: sub edx,4
sub eax,edx
shr eax,2
mov ecx,eax
push eax
add al,al
add al,cl
add al,dl
mov _DM_APos,al
pop eax
movzx ebp,WindowDepth2[esi]
;
mov _DM_YPos,0
pop esi
mov WatchWidth[esi],eax
mov esi,ebx ;source address.
@@0: pushm ecx,ebp
mov edi,offset ABuffer
mov ebx,offset BBuffer
test _DM_Flags,2
jnz @@1
pushm ecx,ebp
;
;display the address.
;
mov eax,esi
sub eax,_DM_Base
mov ecx,8
test SystemFlags,1
jz @@Use32_1
mov ecx,4
@@Use32_1: call Bin2Hex
mov b[edi],' '
inc edi
mov b[edi],0
popm ecx,ebp
@@1: pushm esi,ecx
;
;Display a byte.
;
push ebx
mov ebx,-1
mov ax,0fffch
int 31h
jc @@BadAddr
push es
mov es,RealSegment
mov bl,es:[esi]
pop es
@@BadAddr: mov eax,ebx
pop ebx
push eax
mov cl,2
call Bin2Hex
mov b[edi],' '
inc edi
mov b[edi],0
pop eax
or al,al
jnz @@notz
mov al,'.'
@@notz: mov b[ebx],al
inc ebx
mov b[ebx],0
popm esi,ecx
inc esi
loop @@1
push esi
mov b[edi],0
mov bp,_DM_Handle
mov cl,0
mov ch,_DM_YPos
call LocateWindow
mov ebx,offset ABuffer
call PrintWindow
mov cl,_DM_APos
mov ch,_DM_YPos
call LocateWindow
call PointWindow
mov ax,WindowFlags[esi]
pushm eax,esi
and ax,65535-WindowTabs
or ax,WindowRaw
call ExtraWindow
mov ebx,offset BBuffer
call PrintWindow
popm eax,esi
mov WindowFlags[esi],ax
pop esi
popm ecx,ebp
inc _DM_YPos
dec ebp
jnz @@0
ret
DisplayMixed endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
DisasListVars proc near
call ListVars
jc @@None
mov DisplayEIP,edx
mov DisplayCS,cx
mov SourceForceCheck,1
mov bp,DisasHandle
call UpdateWindow
@@None: ret
DisasListVars endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
DataListVars proc near
mov _DLV_Handle,bp
call ListVars
jc @@None
pushm ecx,edx
mov bp,_DLV_Handle
call FindDataWatch
popm ecx,edx
mov WatchOffset[esi],edx
mov WatchOff[esi],Watch_Abs
mov WatchSelNum[esi],cx
mov WatchSeg[esi],Watch_Abs
mov WatchMoved[esi],0
call WatchCursorOFF
call TitleWatch
mov bp,_DLV_Handle
call UpdateWindow
@@None: ret
DataListVars endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
RegsListVars proc near
call ListVars
jc @@None
movzx esi,RegsYPos
mov esi,d[DebugDis2RegList+esi*4]
mov [esi],edx
cmp RegsYPos,8
jnz @@Show
mov DebugCS,cx
mov DisplayCS,cx
mov DisplayEIP,edx
call DisasFull
@@Show: call RegisterDisplay ;Display current register values.
@@None: ret
RegsListVars endp
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
;
;On Exit:-
;
;CX:EDX - Symbol value.
;
ListVars proc near
mov _LV_Handle,0
;
mov edi,SymbolList
cmp d[edi],-1
jnz @@GotSomeSyms
mov ebx,offset ErrorM5
call WindowPopup
jmp @@ExitNone
@@GotSomeSyms: ;
mov eax,offset HelpText0
call SetNewHelp
;
mov edi,SymbolList
xor eax,eax ;reset longest so far.
xor ebx,ebx
@@gl0: cmp d[edi],-1
jz @@gl2
movzx ecx,SymbolTLen[edi]
cmp ecx,eax
jc @@gl1
mov eax,ecx
@@gl1: inc ebx
add edi,SymbolNext[edi]
jmp @@gl0
@@gl2: cmp ebx,15
jc @@gl3
mov bx,15
@@gl3: mov _LV_Depth,bx
mov _LV_Longest,al
or al,al
jz @@None
add _LV_Longest,2
add _LV_Longest,(4+1+8+1)+(1+1)
cmp _LV_Longest,74
jc @@lok
mov _LV_Longest,74
@@lok: ;
mov cl,b[VideoColumns]
shr cl,1
mov al,_LV_Longest
add al,3
shr al,1
sub cl,al
mov bl,b[VideoRows]
shr bl,1
mov al,b[_LV_Depth]
add al,3
shr al,1
sub bl,al
mov ch,_LV_Longest
add ch,3
mov bh,b[_LV_Depth]
add bh,3
mov ax,WindowClear+WindowBox+WindowStatic+WindowShad
mov dl,1fh
mov dh,7fh
mov esi,0
mov ebp,esi
call OpenWindow ;open main display window.
mov _LV_Handle,bp
;
mov edi,offset _LV_SearchBuff+2
mov ecx,128-2
xor al,al
rep stosb
mov bp,_LV_Handle
mov ebx,offset _LV_SearchBuff
mov ax,WindowJCent+WindowBox
call BottomWindow
mov _LV_SearchPos,0
;
mov edi,SymbolList
mov _LV_ListStart,edi
mov _LV_BarLast,-1
mov _LV_BarPos,0
;
@@PrintList: call @@Off
;
mov cx,0
mov ebx,15
push ds
pop es
mov edi,_LV_ListStart
@@pl0: cmp d[edi],-1
jz @@pl9
pushm ebx,ecx,edi
call @@printit
popm ebx,ecx,edi
inc ch
add edi,SymbolNext[edi]
dec ebx
jnz @@pl0
@@pl9: ;
call @@On
;
@@WaitKey: mov ah,0
int 16h
;
cmp ah,1
jz @@ExitNone
cmp al,13
jz @@ExitYes
;
cmp al,8
jz @@Delete
;
cmp ah,80
jz @@Down
cmp ah,81
jz @@PDown
cmp ah,72
jz @@up
cmp ah,73
jz @@Pup
;
COMMENT !
cmp al,"?"
jz @@Find
cmp al,'_'
jz @@Find
cmp al,'@'
jz @@Find
cmp al,'0'
END COMMENT !
cmp al,'!'
jc @@WaitKey
; cmp al,'9'+1
cmp al,'A'
jc @@Find
call UpperChar
cmp al,'A'
jc @@WaitKey
; cmp al,'Z'+1
cmp al,128
jc @@Find
jmp @@waitkey
;
@@Delete: cmp _LV_SearchPos,0
jz @@WaitKey
dec _LV_SearchPos
movzx esi,_LV_SearchPos
add esi,offset _LV_SearchBuff+2
mov b[esi],0
cmp _LV_SearchPos,0
jnz @@Find2
mov bp,_LV_Handle
call BoxWindow
call ShowWinBottom
jmp @@WaitKey
;
@@Find: movzx esi,_LV_SearchPos
add esi,offset _LV_SearchBuff+2
call UpperChar
mov b[esi],al
inc _LV_SearchPos
;
@@Find2: mov ebx,_LV_ListStart
mov _LV_StartPos,ebx
mov edi,SymbolList
mov dx,0
@@f0: mov esi,offset _LV_SearchBuff+2
cmp d[edi],-1
jz @@f8
push edi
movzx ecx,SymbolTLen[edi]
add edi,SymbolText
@@f6: mov al,[edi]
call UpperChar
cmp al,[esi]
jz @@f1
@@f7: pop edi
add edi,SymbolNext[edi]
jmp @@f0
@@f1: inc esi
inc edi
cmp b[esi],0
jz @@f5
loop @@f6
jmp @@f7
;
@@f8: dec _LV_SearchPos
movzx esi,_LV_SearchPos
add esi,offset _LV_SearchBuff+2
mov b[esi],0
jmp @@waitkey
;
@@f5: pushad
mov bp,_LV_Handle
call BoxWindow
call ShowWinBottom
popad
;
pop edi
mov esi,edi
@@f10: movzx ecx,_LV_Depth
@@f2: cmp d[edi],-1
jz @@f3
add edi,SymbolNext[edi]
loop @@f2
mov _LV_ListStart,esi
push dx
call @@Off
pop dx
mov _LV_BarPos,dx
mov eax,_LV_StartPos
cmp eax,_LV_ListStart
jz @@pl9
mov bp,_LV_Handle
call ClearWindow
jmp @@PrintList
@@f3: mov ebx,esi
mov edi,SymbolList
cmp edi,ebx
jz @@waitkey
@@f4: mov esi,edi
add edi,SymbolNext[edi]
cmp edi,ebx
jnz @@f4
inc dx
mov edi,esi
jmp @@f10
;
@@Pup: mov edi,SymbolList
cmp edi,_LV_ListStart
jz @@waitkey
movzx ecx,_LV_Depth
@@psu1: cmp edi,_LV_ListStart
jz @@psu2
@@psu0: mov esi,edi
add edi,SymbolNext[edi]
cmp edi,_LV_ListStart
jnz @@psu0
mov _LV_ListStart,esi
mov edi,SymbolList
loop @@psu1
@@psu2: call @@off
mov bp,_LV_Handle
call ClearWindow
jmp @@PrintList
;
@@Up: cmp _LV_BarPos,0
jz @@SUp
call @@Off
dec _LV_BarPos
jmp @@pl9
@@SUp: mov edi,SymbolList
cmp edi,_LV_ListStart
jz @@waitkey
@@su0: mov esi,edi
add edi,SymbolNext[edi]
cmp edi,_LV_ListStart
jnz @@su0
mov _LV_ListStart,esi
call @@Off
mov bp,_LV_Handle
call ScrollWindowD ;scroll the window.
mov cx,_LV_BarPos
call @@PrintEntry
call @@On
jmp @@waitkey
;
@@PDown: movzx ecx,_LV_Depth
@@psd3: mov edx,ecx
mov edi,_LV_ListStart ;current position start.
@@psd0: cmp d[edi],-1
jz @@waitkey
add edi,SymbolNext[edi]
loop @@psd0 ;move to bottom of current display.
cmp d[edi],-1 ;end of the list?
jz @@waitkey
;
mov esi,edi
movzx ecx,_LV_Depth ;now check what new position would be like.
@@psd1: cmp d[edi],-1
jz @@psd2
add edi,SymbolNext[edi]
loop @@psd1 ;move to bottom of current display.
mov _LV_ListStart,esi
call @@off
mov bp,_LV_Handle
call ClearWindow
jmp @@PrintList
;
@@psd2: mov ecx,edx
dec ecx
jmp @@psd3
;
@@Down: mov ax,_LV_BarPos
inc ax
cmp ax,_LV_Depth
jnc @@SDown
call @@off
inc _LV_BarPos
jmp @@pl9
@@SDown: mov edi,_LV_ListStart
add edi,SymbolNext[edi]
mov esi,edi
movzx ecx,_LV_Depth
@@sd0: cmp d[edi],-1
jz @@waitkey
add edi,SymbolNext[edi]
loop @@sd0
mov _LV_ListStart,esi
call @@Off
mov bp,_LV_Handle
call ScrollWindowU ;scroll the window.
mov cx,_LV_BarPos
call @@PrintEntry
call @@On
jmp @@waitkey
;
@@Off: cmp _LV_BarLast,-1
jz @@off1
mov bp,_LV_Handle
call PointWindow
mov ah,WindowAttrib[esi]
mov al,1
mov cx,_LV_BarLast
mov ch,cl
call BarWindow
mov _LV_BarLast,-1
@@off1: ret
;
@@On: mov bp,_LV_Handle
call PointWindow
movzx ecx,[esi].WindowDepth2
mov cx,_LV_BarPos
mov bp,_LV_Handle
mov _LV_BarLast,cx
mov ch,cl
mov ah,WindowAttrib[esi]
rol ah,4
mov ah,02fh
mov al,1
cmp VideoMono,0
jz @@pl2
mov ax,07001h
@@pl2: call BarWindow
ret
;
@@PrintEntry: mov edi,_LV_ListStart
mov ebx,ecx
call @@PointEntry
jc @@pre9
mov ch,bl
mov cl,0
call @@PrintIt
@@pre9: ret
;
@@PointEntry: or cx,cx
jz @@pe1
cmp d[edi],-1
jz @@pe9
add edi,SymbolNext[edi]
dec ecx
jmp @@PointEntry
@@pe1: clc
ret
@@pe9: stc
ret
;
@@PrintIt: push edi
mov bp,_LV_Handle
call LocateWindow
mov edi,offset ABuffer
movzx ecx,_LV_Longest
mov al,' '
rep stosb
xor al,al
stosb
pop edi
push edi
mov esi,offset ABuffer
movzx ecx,SymbolTLen[edi]
xchg esi,edi
add esi,SymbolText
mov al,' '
stosb
rep movsb
pop edi
;
movzx esi,_LV_Longest
sub esi,4+1+6+2+1
add esi,offset ABuffer
mov ax,SymbolSeg[edi]
mov ecx,4
push edi
mov edi,esi
call Bin2Hex
mov esi,edi
pop edi
mov b[esi],':'
inc esi
push edi
mov eax,SymbolDWord[edi]
mov ecx,8
mov edi,esi
call Bin2Hex
xor al,al
stosb
pop edi
;
movzx esi,_LV_L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -