mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-09 22:06:42 +03:00
88 lines
6.2 KiB
NASM
88 lines
6.2 KiB
NASM
;[]=========================================================================[]
|
||
;[] Резидент отладчика []
|
||
;[] 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
|
||
|