ZXNet эхоконференция «code.zx»
тема: навоpоты
от: 812/17.09
кому: Aleksandr Majorov
дата: 12 Jan 1998
11-01-98 в 03:18 Aleksandr Majorov писал(а) к Sergej Pou-
gachev на тему "навоpоты".
Привет, Aleksandr!
AM> усе элементарно!
AM> по команде CAT/LIST Тыр-дос считывает 8-й сектор
AM> в буфер для анализа. перед эти оно сохраняет
AM> адрес возврата в стеке, который "совершенно случайно"
AM> нахонится недалеко от буфера...
Глупости. Стек здесь непричем. Запуск происходит при прак-
тически любои значении стека. Дабы не заниматься словоблудием
привожу выписку содержащую разъяснение данного способа запуска
диска.
"... 1. Любая операция по просмотру, или изменению инфор-
мации диска влечет собой предварительное считывание 8-го сек-
тора.
2. Если 8-ой сектор отформатирован, скажем, на 512
байт, то эти 512 байт исправно считаются в память независимо
от того, что освобожден буфер размером всего в 256 байт.
3. Буфер резервируется с адреса #5d25. Hа 257 байт
сдвигается не только область Бейсика, а еще и область информа-
ции о каналах, расположенная перед областью Бейсика. ..."
[ по моему на 256 ]
Hу соответственно, данные 8-го сектора формируются так, что
бы адреса процедур печати содержащиеся в области каналов изме-
нились на адрес запуска нашей программы из 8-го сектора. После
считывания тыр-дос попытается что-нибудь напечатать и тем са-
мым запустит программу.
Я когда то сам этим занимался, так что это проверено на
практике.
AM> Усе остальное просто...
Как видишь, не так...
P.S. перечитал перед отправкой и решил добавить:
Hапример нам надо что бы проц прыгнул на адрес ADDR, то
8-ой сектор надо сформировать так...
Структура 8-го сектора:
DS 256 ;Что запихать сюда это ваше дело.
DW ADDR ;адрес по которому надо перейти
DW ADDR ;повторить 10-15 раз для надежности
DW ADDR ;кто его знает, какую именно процедуру
DW ADDR ;ему приспичит вызвать
.....
DS XXX ;XXX зависит от длины сектора и может
;содержать любую информацию.
С уважением, Aleksandr
With best wishes, Ruiner.
-+- Кыш-Edit v6.06
от: 812/00.00
кому: Oleg Grigoriev
дата: 12 Jan 1998
12-01-98 в 03:34 Oleg Grigoriev писал(а) к Aleksandr Majorov
на тему "навоpоты".
Привет, Oleg!
[...]
AM>> по команде CAT/LIST Тыр-дос считывает 8-й сектор
AM>> в буфер для анализа. перед эти оно сохраняет
AM>> адрес возврата в стеке, который "совершенно случайно"
AM>> нахонится недалеко от буфера...
OG> Глупости. Стек здесь непричем. Запуск происходит при прак-
[..]
OG> бы адреса процедур печати содержащиеся в области каналов изме-
OG> нились на адрес запуска нашей программы из 8-го сектора. После
OG> считывания тыр-дос попытается что-нибудь напечатать и тем са-
[...]
Печать говоришь?
А как ты объяснишь что перехватываются команды
LOAD, RUN, SAVE, которые вроде ничего не печатают?
[....]
OG> Структура 8-го сектора:
OG> DS 256 ;Что запихать сюда это ваше дело.
OG> DW ADDR ;адрес по которому надо перейти
OG> DW ADDR ;повторить 10-15 раз для надежности
OG> DW ADDR ;кто его знает, какую именно процедуру
OG> DW ADDR ;ему приспичит вызвать
скажи, ты всегда так пишешь проги?
знает кудв пойдет проц...
ваще-то программирование - ... хм... точная наука ;-)))
проц работает одинаково, и адрес перехвата один и тот-же...
OG> With best wishes, Ruiner.
С уважением, Aleksandr
PS. данная инфа давно кидалась кем-то в .zx,
тама усе разъяснялось...
-+- ручки [левая и правая]
от: 812/17.09
кому: Aleksandr Majorov
дата: 13 Jan 1998
12-01-98 в 18:47:46 Aleksandr Majorov писал(а) к Oleg Gri-
goriev на тему "навоpоты".
Здравствуй, Aleksandr!
AM> Печать говоришь?
Стек говоришь? Войди в Бейсик, установи стек 60000 и дай в
тыр-досе какую-нибудь команду. Hа стек не наедет и, исходя из
твоих слов, ничего не запустится. _У тебя_.
AM> А как ты объяснишь что перехватываются команды
AM> LOAD, RUN, SAVE, которые вроде ничего не печатают?
А "Disk error" на что?
Вот только не помню как тыр-доска отреагирует если 231 байт
(количество секторов на дорожке) будет равен #10. С другой
стороны, я не разу не видел что бы эту ситуацию специально
обыгрывали. А самому проверять влом.
[ skipped ]
AM> скажи, ты всегда так пишешь проги?
Hет, я сначала думаю, а потом пишу.
AM> ...напишем LD HL,12345, повторим 10...15 раз, кто его
Я повторял ровно 10 (было это года полтора назад, так что
может и не 10;) ) раз и все прекрасно работало, у Медноногова
в ЧВ повторено 14 раз, так что это количество не критично.
AM> знает куда пойдет проц...
Конечно, именно так и надо писать.
Я, например, стек в своих программах выставляю следующим
образом:
LD A,R
LD L,A
HALT
LD A,R
AND #3F
ADD A,#40
LD H,A
LD SP,HL
Это, знаешь, очень способствует выработке адреналина в ор-
ганизме.
AM> ваще-то программирование - ... хм... точная наука ;-)))
Вот именно, что хм...;-) Точная наука это физика, а прог-
раммирование даже не наука;)
AM> проц работает одинаково, и адрес перехвата один и тот-же...
Теоретически да, а на практике лучше подстраховаться.:)
AM> С уважением, Aleksandr
AM>
AM> PS. данная инфа давно кидалась кем-то в .zx,
AM> тама усе разъяснялось...
В сети я с середины октября, а .zx читаю не регулярно. Ты
лучше бы сам попробовал.;)
With best wishes, Ruiner.
-+- Кыш-Edit v6.06
от: 812/17.09
кому: Ivan Mak
дата: 16 Jan 1998
14-01-98 в 08:38:08 Ivan Mak писал(а) к Aleksandr Majorov
на тему "навоpоты".
Привет, Ivan!
AM>> Печать говоришь?
AM>> А как ты объяснишь что перехватываются команды
AM>> LOAD, RUN, SAVE, которые вроде ничего не печатают?
IM> В инфоpмации о каналах есть адpеса подпpогpамм ввода. Мое пpедположение,
Мас меня поддел и я решил досканально прояснить для себя
эту ситуацию. Как выяснилось, все очень просто. Адрес начала
области каналов при активном буфере tr-dos #5e27 а не #5e25.
Соответственно по этому адресу и должен располагаться адрес
(слышала бы меня моя учительница литературы:) ) перехода. Са-
мым первым в области каналов хранится адрес подпрограммы выво-
да в служебный экран. А именно туда tr-dos пытается напечатать
"Disk error". Все-таки Мас был кое в чем прав - достаточно од-
ного адреса перехода.
IM> могут использоваться и они. TR-DOS ведь пpовеpят нажатия клавиш в этих
Сама tr-dos проверяет нажатие клавиш очень редко, имхо
только в случае с "Retry,Abort,Ignore?".
IM> командах что бы поймать BREAK, напpимеp.
Бряк тыр-дос ловит напрямую, не через каналы, а вызывая
процедуру #1f54 основного ПЗУ.
IM> Хотя, быть может, я и не пpав.
Всяко бывает... Может и я в чем-то не прав...
IM> ░▒▓██ С уважением, Ivan. ██▓▒░
With best wishes, Ruiner.
-+- Брысь-Edit v6.06
|