DemoN/rez.asm
2024-08-08 14:52:38 +03:00

88 lines
6.2 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;[]=========================================================================[]
;[] Резидент отладчика []
;[] v0.03 - последние изменения 24.02.2006 []
;[] Принцип работы (два варианта): []
;[] 1. Резидент расположен не во втором окне памяти (0x8000...0xBFFF) []
;[] Из отладчика готовится резидент (настраиваются все адреса) и копируется []
;[] по адресу расположения, управление из отладчика передается на метку []
;[] Rezident.Start1, после чего происходит востановление банки памяти, рас- []
;[] положенной под отладчиком и выполнение отлаживаемой команды. Возврат []
;[] в резидент осуществляется на метку Rezident.RetIn1 и далее после вос- []
;[] тановления банки с отладчиком возврат в отладчик. []
;[] 2. Резидент расположен во втором окне памяти (0x8000...0xBFFF) []
;[] Поскольку в этом окне работает сам отладчик, то переход в резидент и []
;[] возврат в отладчик после трассировки команды выполняется при помощи []
;[] вспомогательной процедуры длиной 7 байт расположеной по адресу []
;[] AdrTmpBuf. После коррекции всех адресов в отладчике и сохранении акку- []
;[] мулятора отлаживаемой программы по адресу Rezident+1 и пары HL по адре- []
;[] ce Rezident+2 управление передается по адресу AdrTmpBuf, где расположен []
;[] следующий код отключающий банку с отладчиком: []
;[] ld a,НомерБанкиПодОтладчиком []
;[] out (НомерПорта2Окна),a []
;[] jp Rezident.Start []
;[] Далее резидент востанавливает 7 байт запорченых вышепреведенной проце- []
;[] дурой, а также пару HL и аккумулятор и переходит к трассировке. Возврат []
;[] происходит на метку Rezident.RetIn, где после сохранения аккумулятора и []
;[] пары HL сохраняется 7 байт памяти из адреса AdrTmpBuf и туда прописыва- []
;[] ется код востановления банки с отладчиком: []
;[] ld a,НомерБанкиСОтладчиком []
;[] out (НомерПорта2Окна),a []
;[] jp ВОтладчик []
;[] После возврата в отладчик востанавливается память запорченая резидентом []
;[] и временной процедурой []
;[]=========================================================================[]
AdrTmpBuf equ 0xFF00
Rezident:
ds 11
.Start ld hl,0 ;вост. памяти запорченной при
ld (AdrTmpBuf),hl ;размещении резидента
ld hl,0 ;во 2-м окне
ld (AdrTmpBuf+2),hl
ld hl,0
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
.K2 ld hl,(Rezident+2) ;востановили HL
jr .K3
;...востановить банку во 2-м окне
.Start1 ld a,0xFF ;банка под demon'ом
out (EmmWin.P2),a
.K3 ld a,(Rezident+1) ;востановим аккумулятор
.Step jp 0 ;переход на выполнение
.RetIn ld (Rezident+1),a ;сохраним аккумулятор
.K4 ld (Rezident+2),hl ;сохраним HL
ld hl,(AdrTmpBuf) ;сохранение памяти
.K5 ld (Rezident+4),hl
ld hl,(AdrTmpBuf+2)
ld (Rezident+6),hl
ld hl,(AdrTmpBuf+4)
ld (Rezident+8),hl
ld a,(AdrTmpBuf+6)
ld (Rezident+10),a
.BankD1 ld hl,0xFF3E ;ld a,0xFF - N банки с отладч
ld (AdrTmpBuf),hl
ld hl,EmmWin.P2*256+0xD3 ;out (EmmWin.P2),a
ld (AdrTmpBuf+2),hl
.Return1 ld hl,0xC3 ;jp в отладчик
ld (AdrTmpBuf+4),hl
ld a,0
ld (AdrTmpBuf+6),a
in a,(EmmWin.P2) ;номер банки под demon'ом
.K6 ld (Rezident),a ;сохранили
jp AdrTmpBuf
.RetIn1 ld (Rezident+1),a ;сохраним аккумулятор
;...сохранить банку из 2-го окна
in a,(EmmWin.P2) ;номер банки под demon'ом
.K1 ld (Rezident),a ;сохранили
.BankD ld a,0xFF ;банка с demon'ом
out (EmmWin.P2),a
.Return jp 0
.End