Истинный Coder #001
(c) Rob F./Entire Group
──────────────────────────────────────────
Низкий поклон, уважаемые читатели. Эта
рубрика посвящается некоему Духу, который
зародился в мире Speccy.
Думаю, для каждого это слово "Speccy", -
ассоциируется с чем-то сладким и трепещу-
щим сердце. Ну конечно, где вы ещё можете
поиграть в игру MYTH? Только не на PC, и
да же не на Ammy, ни таланта в графике, ни
великолепного Coding'а. Так вот, о коде-
рах... Этот ранг получить не так просто,
как кажется. Вообщем, лоадером на БАСИКЕ
не отделаешься. Однако, истинный Coder мо-
жет написать на ВАСИКЕ Scroll, хоть и с
матами в душе, но напишет. За долгое время
общения с другими ребятами, я вывел прос-
тую формулу кодера - ВЕЧНОСТЬ. С каждым
днём, истинный кодер, будет придумывать
что-то новое и новое. И, вероятнее всего,
одну и ту же задачу он будет решать тысячу
способами. В отличии от других, он будет
тысячу раз изобретать велосипед, именно
поэтому Spectrum'исты знают тысячу спосо-
бов высветить на экране точку, и именно
поэтому они нашли самый оптимальный способ
для её появления. И вроде бы кажется, что
быстрее уже не возможно, но всё равно кто-
то придумывает ещё быстрее.
Иногда мне кажется, что на Speccy приду-
мают какой-нибудь пакер, ужимающий инфор-
мацию в один BIT или в три BIT'а ;) Смеш-
но, конечно же, но чем чёрт не шутит? Хо-
тя, вроде бы, это уже не возможно. Не...
Я тут подумал, можно, только декомпрессор
будет большой! =) Шучу, конечно...
А иногда на Speccy встречаются ребята,
которые, добившись успеха, начинают в нём
тонуть. Тогда они становятся смешными, на-
чиная утверждать глупости, типа того, что
у Z80 есть глюки, тоесть команды, которые
он не исполняет. Есть, конечно, но совсем
не те, что описывают. Вот в этой рубрике я
и хотел поделиться с вами истинной.
Фирменный Speccy...
Вообще-то, Speccy уникальный тем, что
зарубежные, то есть оригинальные, варианты
на сто процентов совместимы друг с другом.
Но нам сложно это понять, ведь мы заполо-
нили себя детками Speccy - Scorpion'ы, Pe-
ntagon'ы, Profi, Leningrad'ы и другие ва-
рианты. Я не могу утверждать, что перепро-
бовал все, но двадцать версий я перебрал и
изучил досконально. И так же изучал ориги-
нальные версии с "плюсами" и без оных.
Поэтому сообщаю вам, что на фирменном
Speccy в одном прерывании 224*312=69888
тактов, если мы умножим 69888 на 50, то
получим 3494400 тактов в секунду. Получае-
тся, что кварц не 3. 5 а 3. 494400MHz,а из
этого можно сделать вывод, что каждое пре-
рывание куда-то теряется 112 тактов. Куда
же? Да никуда, просто частота кадров не 50
Hz, а 50.0801282051282051 Hz, вот и все
премудрости. Но, программным методом мы
можем подсчитать только 69868 тактов, пос-
кольку 4-ре такта сигнал INT выставляет
прерывание, и 16-ть тактов на исполнение
самого прерывания. Прерывание не может
прервать исполнение одной команды, поэтому
исполнение прерывания будет после заверше-
ния команды.
Совковые детишки Speccy...
Видать только мы догадались разобрать на
части и превратить в пол сотни логики то,
что буржуи лепили в одну микросхему. Таким
образом, сигнал INT'а на наших вариантах
Speccy превратился в кучку резисторов и
конденсаторов. Теперь его длина начала из-
меряться не в тактах, а в микросекундах.
Поэтому только на наших Speccy, нужно для
уверенности лепить кучу NOP'ов перед выхо-
дом из прерывания. Есть такие экземпляры,
у которых прерывание начинается по середи-
не развёртки монитора, я лично наблюдал
такое в Leningrad'ах. Я, конечно, понимаю,
что есть следующие версии этого монстра, и
там это убрано. Но я думаю, что если бы
электронщики поменьше ругались с кодерами,
а кодеры с электронщиками, то вместе они
бы могли сделать очень хороший вариант
Speccy. Пока, что я нашёл только один Spe-
ccy, который почти на 100% повторяет фир-
менный Speccy, это Львов.
Тормозящая область памяти...
Как это не прискорбно, но фирменный Spe-
ccy тормозит, однако не всегда. В этом фа-
кте есть и плюсы и, конечно же, минусы.
Очень хороший плюс, которым я всегда
пользовался, пока все не помешались на
Pentagon'ах, это команда HALT, которая
исполняется в тормозящей области прерыва-
ния. Последний такт, исполняемый в этой
команде, всегда совпадёт с последним так-
том окончания развёртки экрана, и первый
такт в новом прерывании будет точно на лу-
че монитора в первом пикселе. Так можно
делать горизонтальные мультиколоры, что и
использовали буржуи в своих программах.
Например: Mask 3 или Dark Star или... Воб-
щем, есть ещё шедевры в этом плане, прос-
тите, не помню, давно это было. Кстати,
свой первый мультиколор я сделал ещё в
1992-ом году, на GENS'е, где-то до сих пор
валяется на кассетах. Это был мультиколор-
ный Scroll на бордюре, как сейчас помню,
решил подломать Khampton'а, и сказал ему,
что нарисую что-то на бордюре, так родился
Border-Scroll.
Тормозим дальше...
Если кто-то сталкивался с фирменным Spe-
ccy, или его детками, в которых так же
тормозит память, то вы замечали, что не
дай боже оставить вектор прерывания (I) в
диапазоне от 64 до 127 или (от 192 до 255,
при условии, что включена тормозящая стра-
ничка), и при всём этом попытаться что-то
записать на диск, то вам гарантированы
ошибки на диске. Вообщем, нулевой трек за-
портите, а точнее запишете туда всякую бе-
либерду. Тут происходит простая петрушка,
даже если запрещены прерывания, сигнал
WAIT, по-прежнему устанавливается, поско-
льку процессор пытается считать значение
из адреса вектора прерывания, а он указы-
вает на тормозящую область памяти. Вобщем,
все друг друга ждут. Ну, и при этом OUTI
начинает занимать не 16 тактов, а то 20,
то 24, всё зависит от того на какую часть
OUTI попадёт сигнал INT'а. А если вы попы-
таетесь исполнить программу в тормозящей
области памяти, да ещё и с вектором в тор-
мозящую область, то ваши команды станут
утраиваться в тактах. Самое весёлое проис-
ходит, когда процессор сам себе выставляет
WAIT, и не может считать код команды. На-
пример, начните переносить всю память
LDIR'ом сам на себя, и делайте это множе-
ство раз.
M1 LD HL,0
LD DE,0
LD BC,256
LDIR
JMP M1
Ну и на прерываниях повесьте музыку, а
исполняемый LDIR в область тормозящей па-
мяти. Так процессор в один из моментов бу-
дет сам себе выставлять ожидание и в итоге
или не исполнится INT, или LDIR. Кстати,
тормозит это всё лишь тогда, когда отобра-
жается что-то на экране, а точнее наша
область экрана. Поэтому если вы будете ис-
полнять свою прогу до начала отображения
Screen'а, то никто тормозить не будет.
Но мы ведь Coder'ы...
Конечно, нас это не пугает, мы-то разме-
стим свою прогу там, где она не будет тор-
мозить. Вот поэтому я всегда ценил поль-
ских и словацких программистов. Одна лишь
демка SHOCK, чего стоит, где каждый такт
вымерян, где учтено всё, да же то, что
учесть не возможно. Безусловно, каждый сам
выбирает свой путь, и многие могут напле-
вать на то, что у кого-то не такой Speccy,
как у вас. Но это совсем не приукрасит ва-
ши программы.
Попробуем кончить...
Вот такое получилось маленькое введение
в эту рубрику. С нетерпением ждём ваших
писем и предложений. Может, вы хотите что-
то узнать, я с удовольствием с вами поде-
люсь. Если ничего не поменяется, то в сле-
дующем номере я расскажу вам о секретах
процессора Z-80. Поверьте, там есть очень
уникальные вещи, и то, что в фирменных
описаниях называют недокументированными
командами, далеко не недокументированно.
Просто кто-то не хотел этим делиться, и
как мне удалось выяснить, это были воен-
ные.
А вы, например, знаете что в Z-80 есть
Serial Interface? Правда, эту функцию в
процессоры интегрировали только Zilog, но
в любом случае это уникально.
Встретимся в следующем номере...
──────────────────────────────────────────