Deja Vu #0A
30 сентября 2000
  Пресса  

__________________________________________

(C) Cardinal/PGC/BDA
__________________________________________

     ТЕОРИЯ ЖУРНАЛОСТРОЕНИЯ

                  part 2

                    - Может хоть эти скалы
                      его остановят?
                    - Вряд ли...

                                (C) SPRITE

   Ну, для  начала привет, уважаемые чита-
тели! Меня побудили накорябать данную ста-
                  тью  несколько серьезных
                  обстоятельств.Во-первых,
                  хочется  изложить  мысли
                  Daniel'а в своей  интер-
                  претации, т.к. его  ста-
                  тья, помещенная  в  5-ом
                  номере, уже устарела, да
                  и информация,которая бы-
                  ла в  пункте "ze оптими-
                  зация" является, как бы,
                  не совсем "ZE" и не есть
рулез.Чем сразу ехидно воспользовался ува-
жаемый  ERASER/Delirium Tremens, дав в Fu-
neral 1.5 свой  подход к данному вопросу.
   Во-вторых,дабы не упасть в грязь лицом,
мне хочется полностью  опровергнуть  и  те
сведения, потому что они тоже не есть  ру-
лез.
   В-третьих, мной, не без помощи MAX/CBX/
BDA, весь код журнала Deja Vu был  полнос-
тью переписан с нуля еще с 9-ого номера, а
в этом номере я умудрился поддержать  ани-
мацию, и как енто дело стало выглядеть, вы
видите сами. В связи с этим  читайте далее
мою версию "ТЕОРИИ ЖУРНАЛОСТРОЕНИЯ". В хо-
де своего повествования я приоткрою  внут-
реннее содержание нашего журнала,чтобы вам
было понятнее. Итак, поехали...

         Бредовая идея.

   Допустим, вы  захотели  выпускать  свой
журнал. Что  для  этого  нужно. Для начала
очень сильно захотеть, потому что без  же-
лания и с сильной надеждой на получение  с
него финансовой прибыли  у  вас  ничего не
получится. Особенно, если вы и впрямь меч-
таете получить с него денежки:-) Хе-хе, не
те времена, братишка! Спектрум  уже  давно
андеграундная машина, и почти никто не же-
лает платить за софт бабки. Все  уже давно
привыкли получать софтинку в почтовом ящи-
ке и бесплатно. Ну, что ж, я  вижу  вы уже
наморщили носики, мол, нафига задарма нап-
рягаться лишний раз,а вдруг народу не пон-
равится, так сразу зафакают, нафиг (бывает
и такое, не все коту масленница, бывают  и
постные дни). Допустим, получение денег не
является целью, тогда все проще.
   Итак,вы все равно хотите делать журнал,
тогда необходимо подобрать команду,которая
будет непосредственно заниматься кодингом/
графингом / музингом / текстингом и просто
критингом новоявленного издания. Сразу даю
совет, если в вашей команде менее  полуде-
сятка человек, завязывайте  с потрясающими
проектами типа: Звездное Наследие 3; Белый
Удав; НЛО 3; Дети подземелья; ELITE 4; Лю-
ди как Боги, и  тому  подобное, потому что
у вас все равно не  будет  хватать времени
на их реализацию. Не правы те,кто говорит,
что журнал делать легко. Его  делать очень
легко, а  вот  сделать  достойный журнал -
- большой напряг.
   В вашей команде может не быть музыканта
или художника, главное, чтобы  был хороший
кодер  и  человек  с  отличием по русскому
языку в  роли главного редактора. А музыку
и графику вам сделают посторонние люди, не
бесплатно, конечно же... хотя, как догово-
ритесь:-)
   Самое время подумать над названием  ва-
шего творения. Нужно, чтобы оно было лако-
ничным, легко произносилось, не  нагружало
мозги, подходило по смыслу к самому содер-
жанию. Вы можете  возразить, что  название
Deja Vu не подходит по смыслу к содержанию
нашего журнала. Вы правы, но зато  оно ла-
конично и легко в произношении. Вообще,De-
ja Vu в переводе с  французского  означает
дословно "уже виденное", учебник по парап-
сихологии гласит, что "дежа вю" это  фено-
мен, когда человек, оказавшись в новой об-
становке осознает, что он уже там уже ког-
да-то побывал: астральное  или  ментальное
перемещение во времени и пространстве(зна-
комые предметы, запахи, ощущения). А с ва-
ми такого не бывало? Приходишь куда-нибудь
в новое место, или просто сидишь  дома  на
диване, и вдруг раз, и понимаешь, что где-
-то это видел (чувствовал), но  не помнишь
где, видимо во сне... Ну, я отвлекся. Наз-
вание вы придумали, приступайте к работе.
   В журнале важно все, даже мелочи. Опре-
делитесь сразу, как будет внешне выглядеть
ваше детище. Не стОит подражать другим из-
даниям, сделайте по-своему, оригинально  и
со вкусом, уверен, user не останется  рав-
нодушным. Далее информация будет по  пунк-
там, чтобы вы не запутались.

           Интерфейс.

   На пороге 21 век,поэтому избавьте поль-
зователя от необходимости выбирать  пункты
меню по цифровым клавишам, как в  Спектро-
фоне.Очень желателен стрелочный интерфейс.
Сделайте так,чтобы двигать стрелочкой мож-
но было как можно бОльшим количеством уст-
ройств: кнопки, синклер  и кемпстон джойс-
тики, кемпстон мышка, если  есть желание и
возможности, то можно попробывать  опраши-
вать AY-мышку, хотя это нестандартно. При-
чем, опрос всех устройств должен  происхо-
дить параллельно.Горячие клавиши тоже дол-
жны присутствовать, дабы  ускорить  доступ
пользователя к определенным функциям. Пре-
дусмотрите во  всех  действиях  отмену  по
клавише BREAK/EDIT: во  вьювере - выход  в
оболочку, в оболочке - откат на предыдущее
окно, во время загрузки данных - вынужден-
ный  останов (чтобы, например, при  плохом
чтении сектора, лоадер не "зависал", пыта-
ясь  его  считать).  В Deja Vu,  например,
можно прервать практически любую  операцию
с диском. Будет очень прикольно, если вы в
Set Up'е сделаете REDEFINE KEYS для  горя-
чих клавиш и даже для  клавиш  управления,
чтобы user мог их задать, как  ему удобно.
Между прочим,такое нигде не встречалось:-)

            Память.

   Забудьте про 48 килобайт,этот объем уже
давно умер. Сразу  ориентируйтесь  на  128
килобайт и  выше. Перед  запуском  журнала
обязательно тестируйте память  на  наличие
оной. Если в  машине, на  которой  запущен
журнал более 128 килобайт, постарайтесь ее
использовать, чтобы зря не пропадала. Нап-
ример, создайте RAM DISK, в котором держи-
те  дополнительные  сервисные  возможности
(различные шрифты, хранилки  экрана, наво-
роченный вьювер, движок анимации(???) и т.
д.) или даже частично  или  полностью  все
статьи, чтобы их потом не приходилось гру-
зить с диска.
   Как  быстро  и  легко сделать поддержку
RAM DISK'а для хранения там статей в  упа-
кованном виде? Очень  просто. Допустим, вы
протестировали память,и она оказалась объ-
емом 256/512/1024/...килобайта. Тогда соз-
даем  небольшую  табличку  с перечислением
доступных логических страничек памяти.Пос-
ле этого грузите в память  с  диска по по-
рядку те дорожки, в которых находятся ста-
тьи. Не важно, что в память все не  помес-
тилось, важно запомнить, на какой  дорожке
(на диске) процесс остановился. Далее,лоа-
дер должен быть такой: если на  входе трек
и сектор попадает в тот  диапазон, который
был уже загружен в память, значит  переки-
дываем информацию из  RAM DISK'а. Ваша пе-
рекидывалка данных из расширенной памяти в
обычную должна работать  с  блоками по 256
байт через буфер, говоря  простым  языком,
она должна эмулировать работу  с дискетой.
Программулька эта столь коротка  и  прими-
тивна, что приводить ее мне влом, да  вы и
сами без меня знаете, как все сделать.
   Очень важно правильно расположить  дан-
ные в памяти. В Deja Vu с адреса 39800  по
#FFFF (банк 0) располагается текст  в  не-
прерывном  виде. До  текста с адреса #6000
сидит  сам  код  с табличкой прерываний. В
1-ом банке  плейер музыки и сама музыка, а
также пара фонтов. В 3, 4 и 6 банке  нахо-
дится графика в виде спрайтов, которую  вы
видите в статьях. Остается только 7-я бан-
ка, в ней сидит еще один фонт, background,
спрайты стрелочек и, конечно, дополнитель-
ный экран. В 256-ой  оболочке  все  также,
только в банках  с 8 по 15  располагаются:
раскрученный фреймовый скроллер с  раскру-
ченными шрифтами, хранилка экрана, различ-
ные буферы и прочая гадость, не  поместив-
шаяся в основную  память. Заглянув  в  код
других электронных изданий, я окончательно
убедился, что только в Deja Vu под  статьи
с графикой выделяется такой  большой объем
памяти: полностью  4 банки + 9352 байта, а
в сумме 74888 байтов памяти! И это не счи-
тая еще одного  банка  с  музыкой. Поэтому
просто замечательно  смотрятся  такие ста-
тьи, как "Демосцена" от Daniel'а  и обзоры
игрушек от Ze Pagan'а с огромным количест-
вом графики.

         Упаковка данных.

   В вопросе о необходимости паковать дан-
ные солидарны все, поэтому  нет  необходи-
мости разъяснять столь банальную  вещь, но
на некоторых нюансах я остановлюсь. То что
депакер должен быть один на все файлы- это
понятно. А вот загрузку данных в память не
следует производить по  принципу "загрузил
один блок - распаковал", т.к. это  тормоз,
лишние  прокруты  диска  никому  не нужны.
Лучше делать так: "загрузил турбо-лоадером
все  сразу - распаковал", потому  что  так
быстрее. У  этого  метода есть недостаток:
необходимо  закручивать  два   независимых
цикла:цикл загрузки и цикл распаковки. НО!
Не важно сколько циклов,важно удобство для
пользователя!

       Оптимизация данных.

   Важную вещь вы должны уяснить,чтобы су-
меть сделать рулезный журнал:эффективность
и оптимальность алгоритмов  прямо  зависит
от оргаизации расположения данных в памя-
ти. А теперь по порядку.
   Чтобы сделать оконный  интерфейс, необ-
ходимо  разработать  формат   расположения
данных  в  памяти. Т.е. эффективно описать
все  менюшки, кнопочки  и функции, которые
за ними закреплены (открыть  подменю, заг-
рузить что-либо, запустить что-либо),чтобы
выполнять все действия  одной  процедурой.
Daniel/PGC/BDA предлагал за каждой кнопоч-
кой размещать отдельную  подпрограмму, ко-
торая бы делала что надо,т.е. сколько все-
го кнопок во всех менюшках, столько и под-
программ. Хммм... Я может быть  тоже  стал
так делать, если бы  сейчас  не  учился на
программиста и не изучал Базы данных.Пред-
ставьте себе, что кнопочек не 40(примерно,
как в Deja Vu), а 400. Представляете  себе
масштабы программы, состоящей из кучи  не-
зависимых  программулек:-) ERASER/Delirium
Tremens предложил использовать одну корот-
кую процедуру для обработки всех кнопочек,
важно только эти  кнопочки  правильно  за-
дать. По  моему  мнению  лучше это сделать
так:

;---------------------------------------------------------------
;описание адресов расположения в памяти менюшек

TABLE    DW MENU0                ;адрес меню номер 0
         DW MENU1                ;адрес меню номер 1
         ...                     ;и так далее
;---------------------------------------------------------------
;описание каркаса менюшек

TABLEX   DB X0,Y0,VAL0,LENМАХ0   ;x и y - координаты меню
         DB X1,Y1,VAL1,LENМАХ1   ;val - кол. кнопок
         ...                     ;lenmax - макс. длина кнопок
                                 ;в данном меню
;---------------------------------------------------------------
;просто для удобства восприятия

LDTXT    EQU #FF
LDGFX    EQU #FE
RUNBASIC EQU #FD
RUNCODE  EQU #C3  ;JP ADDR
;---------------------------------------------------------------
;сектор и трек самого первого файла-статьи на диске

FIRSTRSE EQU #XXYY
;---------------------------------------------------------------
;длины файлов-статей по порядку, координаты их расположения на
;диске вычисляется, маркер конца - 7_бит=1

LENFILES DB LEN0,LEN1+#80
         DB LEN2,LEN3,LEN4,LEN5+#80
         DB LEN6+#80
         ....
;---------------------------------------------------------------
;табличка банков, чтобы лоадер знал порядок загрузки данных в
;нужные банки

BANKS    DB #10,#13,#14,#16
;---------------------------------------------------------------
;описание кнопочек каждого меню

MENU0    DB "ТЕКСТ КНОПКИ1",LDTXT,0   ;грузим статью
         DB "ТЕКСТ КНОПКИ2",LDGFX,1   ;грузим слайд-шоу
         DB "ТЕКСТ КНОПКИ3",RUNCODE
                            DW ADDR  ;запускаем произвольный код
         DB "ТЕКСТ КНОПКИ4",1        ;вложенность на menu1

MENU1    DB "TEКСТ КНОПКИ1",LDTXT,2   ;грузим статью
         DB "ТЕКСТ КНОПКИ2",RUNBASIC,"GAME    ";запуск бейсика
...
;---------------------------------------------------------------

   А сейчас небольшие пояснения. Обработка
всего  этого происходит следующим образом.
Допустим, первоначальное меню мы нарисова-
ли, далее расскажу как. Определяем в какую
кнопку попал пользователь: делается  это с
помощью 768 байтного буфера,в котором точ-
ная копия атрибутов  экрана, только вместо
атрибутов управляющие коды (номера кнопок,
код рамки - для  перемещения  менюшки, код
background'а - для  отката  на  предыдущее
меню и т.д.).Вычислить координаты стрелки,
где был нажат "огонь", и сопоставить с бу-
фером, чтобы вычислить  зону  попадания не
сложно. Можно обойтись и 384-х байтным бу-
фером, но тогда коды будут лежать  в поло-
винках байтов. Затем  по  таблице  TABLE и
TABLEX ищем адрес  описания данной менюшки
и ее параметры. Далее  идет самое интерес-
ное!
   Моя  программа  написана таким образом,
что ей не надо  на  входе  никаких  лишних
данных. Например, хоть в TABLEX и задается
максимальная  ширина текстового сообщения,
длина текста в кнопке может быть и намного
меньше.Текст в кнопке печатается до встре-
чи какого-нибудь управляющего кода, а len-
max необходим лишь для быстрого вычисления
габаритов всего окна.
   Управляющий код LDTXT, стоящий сразу за
текстом  в кнопке, служит для определения,
что за этой  кнопкой закреплена какая-либо
статья,LDGFX - слайд-шоу. После этих кодов
идет байт - номер группы файлов  в  списке
длин файлов, которые  нужно  грузить, т.к.
статьи в основном  состоят  из  нескольких
файлов, первый из которых сам текст,а пос-
ледующие содержат графику. Лоадер  сам вы-
числяет  координаты  расположения  нужного
файла на диске, если  известны  координаты
самого первого файла и  длины  в  секторах
всех файлов-статей, поэтому  нет необходи-
мости знать в каких  дорожках  и  секторах
находятся статьи. А  грузит лоадер в банки
в соответствии с табличкой  BANKS, причем,
первый  файл  грузится  всегда  под  адрес
39800 банка 0, остальные под адрес #C000.
   Управляющий код RUNBASIC и следующие за
ним 8 байтов дает  знать программе, что за
данной кнопкой  закреплена функция запуска
бейсик-файла,используется для запуска при-
ложения.
   Самым  интересным  является управляющий
код RUNCODE и  следующие  за ним два байта
адреса. Когда я писал  новую  оболочку, то
изначально заложил  возможность навешивать
на кнопки  произвольный код, который можно
запустить с корректным возвратом в оболоч-
ку. Удобным является в качестве  управляю-
щего кода  RUNCODE  использовать  байт #C3
(команда JP), чтобы можно было без проблем
сделать JP (HL). Но  данный  наворот  пока
нашел себя лишь в кнопках Set Up'а.
   Если после текста кнопки находятся бай-
ты от 0 до #C2, и от #C4 до #FC, то счита-
ется, что идет вложенность на меню с  дан-
ным номером. Вложенность может быть  абсо-
лютно любой (в пределах памяти). Здесь нет
проблем. Есть еще специальный стек, по два
байта на каждую вложенность, первый байт -
- номер  предыдущего  меню, второй - номер
нажатой кнопки в предыдущем меню.

            Музыка.

   Для проигрывания музыки лучше всего ис-
пользовать один плейер из ProTracker v3.xx
на всю музыку, так как он умеет играть му-
зыку и от некоторых других редакторов. Од-
нако, чтобы использовать  данный  плейер в
журнале, необходимо его подправить. В  из-
начальном варианте в нем сидит только  ка-
кая-то одна специальная  табличка  огибаю-
щих, а всего их должно быть 4. Если  этого
не сделать, то некоторые мелодии будут иг-
рать не так, как  задумывал  автор, за что
получите большую оплеуху:-).
   Также, дайте  возможность  пользователю
самому включать, отключать, сменять  музы-
ку. Музыку можно привязывать к  статьям, а
можно  и  нет. Например, в  MIRACLE 3 есть
выбор, что несомненно рулез. Если не буде-
те привязывать музыку к статьям,то сделай-
те это оптимально. Забудьте  про дорожки и
сектора, где  находятся музыкальные блоки.
Храните в памяти  лишь  первую  дорожку  и
сектор, где располагается самый первый му-
зон,а также длины в секторах всех музонов.
Отсюда несложно вычислить координаты любо-
го музона в списке, зная длины  предыдущих
и координаты первого. Это облегчит вам ре-
дактирование исходников, сие относится и к
алгоритму загрузки статей.

             Текст.

   Формат текста может быть любым, на ваше
усмотрение,но лучше всего использовать 866
кодировку - стандартная альтернативная, но
со специальными  управляющими  кодами. Это
облегчит вам жизнь при редактировании ста-
тей.
   Лучше  всего  текст  в памяти хранить в
непрерывном виде,и уделить как можно боль-
ше места под него, ведь это как никак жур-
нал, а не дема, поэтому  освободите  место
от ненужных наворотов и займите его  текс-
том!
   Если у вас текст будет  цветным, много-
фонтовым, содержать спрайты, анимацию  или
даже гипер-текстовые ссылки, то  позаботь-
тесь о разработке специального  софта  для
этого случая, так сказать  home using. По-
тому что  вставлять  эту шнягу в текст из-
-под STS'а не очень удобно.Мы с MAX'ом еще
давно написали такую софтину, чем облегчи-
ли жизнь нашему главному  редактору, да  и
себе тоже.

   Драйвер дисковых операций.

   Подпрограмма  загрузки  статей   должна
быть одна, делать максимум полезных дейст-
вий и требовать  минимум  входных  данных.
Лучше всего использовать  TURBO LOADER, но
с небольшими оговорками. Дело в том, что в
последнее  время  много  людей  обзавелись
винтами,и эти турбо-лоадеры не хотят с ни-
ми работать. Поэтому придется как-то  вык-
ручиваться. Можно  использовать лоадеры по
#3D13 и тем самым  дать  возможность легко
жить человеку с винтом, и страдать челове-
ку без винта,коих подавляющее большинство.
Но лучше  дать возможность выбирать #3D13/
TURBO. У нас это пока  не  сделано, потому
что не вставала такая проблема, а в следу-
ющем номере я подумаю над этим.Это сделать
не сложно, просто влом напрягаться.
   Сделайте обработку ошибок в вашем  лоа-
дере, чтобы при нажатии на BREAK  не  было
BASIC RULEZ или цветных квадратиков.

        Листалка текста.

   Это  самое главное, потому что читатель
в ней проводит больше всего  времени. Сде-
лайте ее как можно быстрее и по возможнос-
ти без сильных мерцаний и подергиваний.Ни-
кто вас ругать не будет, если  сделаете in
one frame. Но сделайте это  так, чтобы  на
тормозных машинах это дело  не  зависало и
не  сбрасывалось.  Поддержите  многофонто-
вость: 32, 42, 64 символа в строке. О том,
что шрифты должны быть читабельными, и ежу
понятно.

                             Ну, за глюки!
                               (C) Михалыч

   Глюки - это самые отвратительные сущес-
тва, мочить их надо сразу, иначе  они  это
сделают с вами. Получите  нервный  срыв  и
отбросите копыта! Ну, а если  серьезно, то
чтобы выловить глюки  в  программе, одного
STS'а мало. Желательно иметь под рукой Те-
невик, и тогда вы не получите  смертельную
дозу нервного истощения. Учитывая  большие
габариты программы и ее сложность, то глю-
ки всегда будут вас  преследовать. Полнос-
тью избавиться от них можно лишь  формати-
рованием всех дисков  с  исходниками:-) Но
сократить число глюков реально. Для  этого
нужно чаще  запускать  ваши  исходники  на
компьтере другой конфигурации. Тогда  есть
надежда, что глюк  всплывет  раньше, а  не
укоренится в  программе окончательно. Если
глюк не выколупывается, то можно его доку-
ментировать,и тогда на все выкрики со сто-
роны отвечать, что так и должно быть,и все
претензии направлять в ООН по правам чело-
века!

           RELEASE!

   Тут я хочу полностью  процетировать Da-
niel'а, потому  что  лучше сказать не смо-
гу:-)
   "Это, конечно, самое приятное в  журна-
ломейкерстве! Когда  журнал  готов, и  все
глюки  выловлены,  самое  время  собраться
всем, кто принимал участие (в любом смысле
этого слова). Если зимой, то  на квартире;
летом - на природе. Хорошенько  затариться
всем необходимым,и осуществить самым диким
образом RELEASE! Если это первый номер, то
сие называется презентация! При этом  про-
цессе нужно произносить  приятные  слова в
свой адрес, т.к. это благотворно влияет на
пищеварение. И  только  после  RELEASE  вы
ощутите  великую  пользу журналостроения и
будете себя чувствовать прекрасно,по край-
ней мере до утра...;-)". Конец цитаты.

                Cardinal/PGC/BDA
------------------------------------------



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Gfx scene - overview charts with a virtual party of Antique Toy 2007.
IzhNews - about a group of Brutal Creators: for the good of the group are only two people - NoViS and RTD.
Advertising - Advertising and announcements.

В этот день...   23 November