(C)1997 Cardinal/PLAYGEAR Co.
Описание программы ANTIRST8.
──────────────────────────────────────────
* * *
Информация, о которой пойдет речь далее,
наверняка, заинтересует владельцев компью-
тера Scorpion. Все владельцы SCORP'а час-
тенько сталкиваются с такой проблемой, что
некоторые программы блокируют теневой мо-
нитор по RST #08: DEFB #85 и этим самым
препятствуют просмотр их изнутри. Но это
было раньше, а теперь все изменится! Прог-
рамма, которую я вам предлагаю, решит ваши
проблемы. Сразу скажу, что она есть в при-
ложении этого журнала под именем
ANTIRST8.B длиной всего в один сектор.
Позже я расскажу о ней подробно, а сейчас
объясню, как она работает. Запустите файл
ANTIRST8.B из приложения журнала DEJA VU и
смотрите на экран. Спустя секунду будет
произведена инициализация TR DOS, и если
бордюр будет черный, то все в порядке, ес-
ли же он стал синим, то произошла одна из
ошибок: 1) у вас не Scorpion. 2) у вас
Scorpion, но ПЗУ-шка скорее всего очень
старой версии.(?...) 3) у вас Scorpion, но
перед запуском этой программки вы случайно
(или спецом) отключили порт #1FFD. 4) ???!
Если у вас все прошло хорошо, тогда сме-
ло запускайте программу, которая блокирует
Monitor по RST 8. Потом как бы случайно
жмите на Magic и тащитесь, монитор больше
не заблокирован! Надо сказать, что
ANTIRST8 не спасет теневик от полной
очистки восьмой страницы ОЗУ. Программа
ANTIRST8 резидентно находится в памяти и
не уничтожается даже по кнопке RESET.
А теперь я расскажу подробнее о том, как
работает ANTIRST8. Говоря простым языком
моя программа перехватыватывает Magic или
RST #08, подправляет переменную монитора
по адресу #C063, (в этой переменной нахо-
дится 0, если монитор не заблокирован или
любое другое значение, если он заблокиро-
ван) и делается возврат в монитор. Вот ее
листинг.
------------------------------------------
ORG 25000
RESID EQU #C008
DI
LD SP,#7FFF
LD DE,#1210
CALL BANKS
;подключаем ПЗУ теневого монитора и уста-
;навливаем восьмую страницу памяти
;------------------
LD HL,PROGA
LD DE,RESID
LD BC,7
LDIR
;перекидываем резидент в восьмую страницу
;памяти по адресу указанному в метке RESID
;------------------
LD IX,#0000
LD BC,#4000
LOOP_1 LD A,#ED
CP (IX+0)
JR NZ,LOOP_2
CP (IX+4)
JR NZ,LOOP_2
LD A,#73
CP (IX+1)
JR NZ,LOOP_2
CP (IX+5)
JR NZ,LOOP_2
LD A,#31
CP (IX+8)
JR NZ,LOOP_2
LD A,#4B
CP (IX+12)
JR Z,INSTALL
LOOP_2 INC IX
DEC BC
LD A,B
OR C
JR NZ,LOOP_1
;эта подпрограммка ищет в ПЗУ монитора
;примерно такой кусок программы:
;LD (#NNNN),SP
;LD (#MMMM),SP
;LD SP,#YYYY
;LD BC,(#XXXX)
;LD A,C
;OR B
;JR NZ,#LLLL
;CALL .....
;это нужно для того, чтобы узнать адрес,
;который находится в ячейке #XXXX, и на
;который переходит теневик, если он не ра-
;вен 0. кстати, по адресу #LLLL находится
;примерно такая подпрограмма:
;PUSH BC
;DEC BC
;LD A,B
;OR C
;JR NZ,$-3
;RET
;отсюда мы видим, что на стек кладется ад-
;рес взятый из ячейки #XXXX, затем закру-
;чивается цикл пока BC не обнулится и вы-
;ход по адресу на стеке
;------------------
INC A
OUT (#FE),A
JR EXIT
;ошибка, кусок не найден
;------------------
INSTALL LD IY,RESID
PUSH IX
POP HL
LD BC,19
ADD HL,BC
LD (IY+#05),L
LD (IY+#06),H
PUSH IY
POP BC
LD L,(IX+13)
LD H,(IX+14)
LD (HL),C
INC HL
LD (HL),B
;инсталлируем резидент и устанавливаем ад-
;рес перехода при нажатии на Magic на ад-
;рес, где будет находиться резидент
;------------------
EXIT LD DE,#0010
CALL BANKS
LD IY,#5C3A
LD HL,#2758
EXX
LD SP,65000
LD HL,0
PUSH HL
JP #3D2F
;выход в TR DOS
;------------------
BANKS LD BC,#1FFD
OUT (C),D
LD B,#7F
OUT (C),E
RET
;RAMDRIVE
;------------------
PROGA XOR A
LD (#C063),A
JP 0
;резидент, который запускается после нажа-
;тия на Magic, вместо адреса 0 инсталлятор
;занесет адрес возврата в монитор
;-----------------------------------------
Вот я в двух словах и объяснил принцип
работы ANTIRST8. Добавлю только, что полу-
чить ПЗУ монитора можно такой программкой.
;------------------
DI
LD A,2
OUT (#FD),A
LD HL,0
LD DE,#8000
LD BC,#4000
LDIR
XOR A
OUT (#FD),A
EI
RET
;по адресу #8000 будет находиться ПЗУ мо-
;нитора
;-----------------------------------------
Если вы хотите узнать больше информации
по Скорпиону, пишите, спрашивайте. Так же
буду рад принять от вас любую информацию.
Мой адрес: 650056 г.Кемерово пр.Ленина
д.117Б, кв.37 Латышеву Денису Ивановичу.
Просьба вкладывать чистый конверт.
END...