3Bit
#01
03 января 2005 |
|
Программинг - обзор особенностей моделей оттечественного и фирменного спектрума от Rob F.
Истинный 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, но в любом случае это уникально. Встретимся в следующем номере... ──────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября