01 сентября 2000

                                         
   ВНУТРЕННЯЯ СТРУКТУРИЗАЦИЯ   
        ВАШИХ ПРОГРАММ         
                                         
(С) 2000 Макс/Compu-Studio Ltd           
-----------------------------------------
              Пути кодера неисповедимы...
                                         
   Привет всем! Сегодня продолжу "страда-
ния" на тему "КАК ДЕЛАТь ПРОГРАММЫ", что-
бы  было приемлемо и вам, господа молодые
программисты, и нам - пользователям. Тема
по-прежнему актуальна, т.к. отчасти из-за
глубокой лени, отчасти из-за незнания по-
являются программы, демки и пре-релизы на
игры в убогом внутреннем виде. Да и к уже
законченным проектам иногда остаются пре-
тензии.                                  
   Суть "проблемы" такова, что программа,
находящаяся  на диске, получается непере-
мещаемая. У некоторых товарищей.  Не буду
показывать  пальцем - обидятся, но в сле-
дующий раз, если он вообще когда-нибудь у
вас будет, просьба сделать так, как я вам
предлагаю. Здесь имеется ввиду перемещае-
мость на разные треки и сектора по диску.
Другими  словами - перенос с одного места
диска на  другое.  Согласитесь, что очень
часто встречаются ситуации, когда скинешь
с дискет друга, на которых всё читается и
запускается, себе на диск несколько прог-
рамм, а потом выясняется, что находясь не
"на своём месте", они отказываются загру-
жаться, чем сильно напрягают. Ладно, если
программа должна быть самой первой на ва-
шем диске - выполнил это условие и чёрт с
ней.  Но  мне попадались игры, которые по
замыслу их авторов должны находиться сов-
сем даже не с начала. И даже не на втором
треке, а чёрт знает где.  Вот и гадай по-
том - куда её надо записать,  чтобы зара-
ботала? Опытный или настойчивый пользова-
тель попытается это выяснить, разобрав на
запчасти загрузчик.  А  как же быть всем,
кто "не шарит" в ассемблере?  Стереть на-
хер эту хреновину или заново переписать у
друга программу трековым методом? Хорошо,
если друг живёт в  соседнем  подъезде, но
если по почте получил такой облом? Убедил
я вас в необходимости заниматься правиль-
ной  внутренней структуризацией программ,
дабы у конечного потребителя не возникало
подобных проблем?                        
   Самое  интересное, что и сам создатель
ПО лишится некоторых проблем, связанных с
загрузкой файлов программы. Я приведу для
примера алгоритм загрузки третьего номера
моего журнала.  Этот номер получился сво-
бодно перемещаемый по диску благодаря ал-
горитму, который я специально разработал.
   Итак, любая программа начинается с то-
го, что  её нужно загрузить в ОЗУ компью-
тера. Обычно несколько файлов надо считы-
вать с диска, а потом запускать на выпол-
нение основной алгоритм.  Я принял за ус-
ловие, что  все файлы запакованы програм-
мой HRUST любой версии. Без распаковщика.
Это  важный момент - короче программа бу-
дет, да и работать легче. Также принято в
условии, что все файлы начинаются с круг-
лого шестнадцатиричного адреса. Например,
с адресов #6000, #8000, #F000 и т.д. Тоже
принципиальный момент - проще работать. А
теперь смотрите, как я реализовал загруз-
ку журнала:                              
                                         
;Загрузчик журнала "Чёрная Ворона #3".   
;(С) 2000 Михаил Максименко.             
;Автоопределение размеров загружаемых    
;файлов. Паковать всё HRUST`ом без рас-  
;паковщика! Последовательность файлов:   
;В_CROW   .В    бейсик-загрузчик         
;ВС_loader.С    этот файл, что в asm`е   
;$ВС_SCR  .С    заставка                 
;ВСЗ_DB00 .С    осцилограф в page 7      
;ВСЗ_8000 .С    костяк журнала           
;$ВСЗ_FON .С    фоновая заставка в page 6
;ВСЗ_MUS  .С    музыка в page 6          
;ВСЗ_data .С    все данные для журнала   
;далее тексты журнала. Их начало опреде- 
;ляется здесь автоматически.             
;Всё, кроме фонового screen`а, распаковы-
;вать!                                   
;in: Н=адрес загрузки файла, L=номер page
;    файла, куда загружать.              
                                         
        ORG  #BD00                       
START   LD   HL,#8010;адр. #8000 page #10
        CALL LOADER  ;заставка           
        LD   HL,#8000                    
        LD   DE,#4000                    
        LD   ВС,6912                     
        LDIR         ;на экран           
        LD   HL,#DB17;music bank в #17   
        CALL LOADER                      
        LD   HL,#6010;костяк журнала     
        CALL LOADER                      
        LD   HL,#F016;титульный лист     
        CALL LOADER1 ;без распаковки     
        LD   HL,#С016;музыка             
        CALL LOADER                      
        LD   HL,#AA10;данные журнала     
        CALL LOADER                      
;ЧИТАТЕЛь! ОБРАТИ НА ЭТО ВНИМАНИЕ!       
        LD   HL,(#AAO2);адрес таблицы    
                       ;size/sect/track  
        LD   DE,(23796)                  
        INC  HL      ;пропуск "size"     
        LD   (HL),Е  ;первый сектор      
        INC  HL      ;залегания txt      
        LD   (HL),D  ;и трек             
        JP   #8000   ;старт журнала      
                                         
;точка входа с распаковкой после загрузки
                                         
LOADER  LD   DE,DEHRUST                  
        PUSH DE      ;start распаковки   
                                         
;загрузить, но не распаковывать файл.    
                                         
LOADER1 LD   ВС,#7FFD                    
        OUT  (С),L                       
        LD   L,0     ;целый адрес #xxOO  
        LD   В,1     ;считать с диска    
        CALL LOADER2 ;один сектор        
        PUSH HL      ;начало файла, запа-
        PUSH HL      ;кованного HRUST`ом!
        РОР  IX                          
        LD   A,(IX+4);длина упакован-    
        LD   В,(IX+5);ного файла         
        OR   A       ;кратен сектору?    
        JR   Z,LOADER3                   
        INC  В       ;размер файла,      
                     ;кратный сектору    
LOADER3 DEC  В       ;минус загруженный  
        INC  Н       ;сектор и next адрес
        CALL LOADER2                     
        РОР  HL      ;начало file        
        LD   Е,L     ;for deHrust        
        LD   D,Н     ;адрес загрузки сов-
        DI           ;падает с адресом   
        RET          ;распаковки         
                                         
;Обращение к tr-dos. Можно заменить на   
;свой loader, если это не критично.      
                                         
LOADER2 PUSH HL                          
        LD   DE,(23796)                  
        LD   С,5                         
        CALL 15635                       
        РОР  HL                          
        RET                              
                                         
;Это распаковщик, поставляемый с HRUST.  
                                         
DEHRUST INCBIN  "DEHRUST"                
SIZE    EQU     $-START ;определить раз- 
                        ;мер файла.      
                                         
   Теперь объясняю все тонкости.  С ввод-
ными, надеюсь, всё ясно. Сначала нам надо
считать с диска один сектор с загружаемо-
го файла, чтобы  определиться с размерами
этого файла.  Учтите,  что в примере я не
делал проверку на "размер 1 сектор", поэ-
тому, если надо - сами её поставьте.  Чем
прекрасен файл, упакованный HRUST`ом, так
это  тем, что все данные о файле зафикси-
рованы  в его  начале, включая маркировку
"HR", как  признак  файла из-под HRUST`а.
Так вот, берём данные о размере файла, не
забывая при этом отминусовать один сектор
от размера, который  уже считан, и загру-
жаем весь файл. Если надо - распаковываем
его.  Мне, например, фоновую заставку для
журнала нет смысла распаковывать, поэтому
предусмотрена загрузка файла без дальней-
шей распаковки.                          
   Теперь о том  месте в алгоритме, где я
просил обратить ваше внимание на непонят-
ную  закладку данных в только что считан-
ный файл. Это тоже принципиальное место в
программе, так как определяется следующий
трек/сектор на диске за вашей программой.
Эти  данные  вам нужны в случае необходи-
мости  дальнейшего  чтения дополнительных
уровней игры, спрайтов, таблиц и т.д.    
   У меня в журнале для определения  мес-
тонахождения  файлов статей и музыки спе-
циальная таблица, в которой указаны: раз-
мер файла в секторах, а также первый сек-
тор и трек, где лежит файл.  Чтобы каждый
раз не определяться с началом этой табли-
цы  в памяти, я сделал привязку к опреде-
лённому адресу в одном из файлов - #AAO2,
где лежит адрес её начала.  Вот  по этому
адресу +1 я и закладываю следующие трек и
сектор, которые  идут за программой после
загрузки. Таблица имеет следующий вид:   
                                         
TABLES DEFB #1Е,0,0 ;файл номер 0        
       DEFB #0A,0,0 ;-----/-----1        
       DEFB #27,0,0 ;-----/-----2        
                                         
И так далее...  Конец таблицы можно обоз-
начить нулями, чтобы потом не потеряться.
Здесь первое значение равно размеру файла
в секторах, а последующие нули зарезерви-
рованы для значений сектор/трек на диске.
   А дальше всё просто - произвожу расчёт
следующих значений трек/сектор по размеру
файла, которые находятся в таблице. Таким
образом получается привязка к конкретному
месту на диске  всей программы, включая и
её дополнительные файлы.                 
   Итак, в  загрузчике сделана закладка в
таблицу значений для первого файла. Оста-
лось сделать для всех остальных:         
                                         
;расчёт следующих трека и сектора        
;по размеру файла в секторах.            
                                         
DATAS   LD   IX,TABLES                   
        INC  IX      ;пропустить размер  
        PUSH IX      ;файла              
        РОР  IY                          
        LD   Е,(IX)  ;начальные сектор   
        INC  IX                          
        LD   D,(IX)  ;и трек             
        INC  IX                          
DATAS1  LD   (IY),Е  ;sector             
        INC  IY                          
        LD   (IY),D  ;track              
        INC  IY                          
        INC  IY                          
        LD   A,(IX-3)                    
        OR   A       ;нули - конец табл. 
        RET  Z       ;exit               
        INC  IX                          
        INC  IX                          
        INC  IX                          
        LD   С,A                         
        LD   A,Е                         
        ADD  A,С                         
        LD   L,A                         
        RRA                              
        RRA                              
        RRA                              
        RRA                              
        AND  #1F                         
        ADD  A,D                         
        LD   D,A     ;track              
        LD   A,L                         
        AND  #0F                         
        LD   Е,A     ;sector             
        JR   DATAS1                      
                                         
   М-да, убогая процедура вышла, но рабо-
чая. Что ещё нужно? Если есть желание, то
перепишите её заново. Моё дело рассказать
теорию...                                
                                         
   Дальнейшая работа программы заключает-
ся в организации загрузки файлов по номе-
ру залегания в таблице. Например, надо из
трёхбайтовой таблицы извлечь данные о за-
гружаемом файле:                         
                                         
        LD   A,номер файла в таблице     
        LD   L,A                         
        ADD  A,A                         
        ADD  A,L     ;3-байтовая таблица 
        LD   HL,TABLES                   
        ADD  A,L                         
        LD   L,A                         
        JR   NC,LABEL1                   
        INC  Н                           
LABEL1  LD   В,(HL)  ;размер файла       
        INC  HL                          
        LD   Е,(HL)  ;сектор             
        INC  HL                          
        LD   D,(HL)  ;трек               
        RET                              
                                         
   И всё! Можно спокойно работать и боль-
ше не  отвлекаться на смену значений таб-
лицы  при перемещении группы файлов. Даже
если  какой-то файл будет вами переделан,
то  достаточно изменить (при необходимос-
ти) его размер, а всё остальное программа
сделает за вас при старте.               
                                         
   Есть много способов "привязки" к диску
программы или файлов, но этот самый прос-
той, на мой взгляд. Более изощрённый спо-
соб  реализовал у себя в игре Славик Мед-
ноногов - диск  разбит на логические сек-
тора. Файлы в этом случае располагаются в
виртуальном  пространстве  от нулевого до
2544-го сектора или,  если  нестандартный
формат диска, до последнего доступного из
общего  количества  секторов. Получается,
что файл, например,  десятый находится на
142 логическом секторе.  Таблица располо-
жения файлов в программе получается одно-
байтовой, но процедура получения реально-
го трека и сектора,  равно  как и размера
файла,  немного  больше  из-за проводимых
расчётов и преобразований. В таблице ука-
заны только номера логических секторов, с
которыми потом делается следующее: берёт-
ся  нужный номер логического сектора, за-
тем  по следующему номеру определяется их
разница. Это и будет размер файла.  После
производится  расчёт  физического трека и
сектора  из  данных, представляющих собой
объём диска вцелом, т.е. сколько секторов
на треке отформатировано.  Диск, по усло-
вию, должен  иметь одинаковый формат тре-
ков.  Кстати, для определения номера сек-
тора в пределах 0-2544 одним  байтом Сла-
вик сделал  контроль перехода с #FF на 0,
а значит учитывается переполнение.  Таким
образом этим методом доступно любое коли-
чество логических секторов в одном диско-
вом пространстве - хоть миллион! Не напо-
минает ли вам это ПиСишку?               
   Примеры реализации этого метода приво-
дить не буду, т.к. на тырдосе большое ко-
личество секторов не актуально. Хотя, ес-
ли писать  программу, широко использующую
винчестер, этот метод может пригодиться. 
                                         
                  -----                  
                                         
   Думал на этом закончить статью, но где
там... Кодеры продолжают кодить, а значит
и темы для разговоров не исчерпаны!      
   В последнее время стали плодиться вся-
кие программы и оболочки, в которых пред-
усматривается, что оверлеи могут делать и
пользователи, а не только их авторы. Даже
очень  хорошо, что такая возможность пре-
доставляется - захотел к графическому ре-
рактору типа GRAPHIC STATION сделать свой
оверлей, реализующий ЗD-эффект - пожалуй-
ста! Без проблем - сиди и кодируй.       
   Как правило, в комплекте с такой прог-
раммой  идёт листинг с адресами и точками
входа для того, чтобы программист мог сам
ориентироваться в кодах. Хорошо организо-
вана и продумана  работа с ZX-ASM`ом, где
идёт обращение к ядру редактора через RST
#10 плюс номер функции. Помните мою винду
во втором номере "Вороны"? Там тоже прин-
цип  работы с оболочкой точно такой же. И
в знаменитом IS-DOS`е именно так реализо-
ван интерфейс с программистом.  Многое из
того, что делалось  серьёзными  группами,
использует этот метод. Он является наибо-
лее простым по реализации. Хотя в процес-
се отладки программы при помощи STS`а бу-
дут  наблюдаться  неудобства, связанные с
невозможностью трассировки команды RST 16
плюс номер функции в пошаговом режиме. Но
это не страшно - зачем  тебе трассировать
оболочку? Как правило она обезглючена.   
   Ещё немаловажным фактором является са-
мая полная свобода действий как для авто-
ров  оболочек и программ, так и для прог-
раммистов, делающих свои оверлеи, с точки
зрения  совместимости последующих версий,
т.к. отпадает  самое  неприятное - адреса
подпрограмм больше не имеют значения! Они
заменены на  "сухой" номер функции, кото-
рой  наплевать на всё: указал номер - по-
лучи результат...                        
   Вот здесь, на этом месте, на разработ-
чиков программ  и  оболочек ложится самая
большая ответственность - надо ВСЁ проду-
мать  так, чтобы в последующих версиях не
пришлось менять ВВОДНЫЕ на функции!!! Ес-
ли  ваше воображение не позволяет вообра-
зить  невообразимое, то хотя бы проведите
опрос среди пользователей или (что лучше)
программистов и поинтересуйтесь - что они
хотели бы видеть в будущих версиях вашего
программного чуда? Результаты этого опро-
са вовсе не следует воспринимать, как зе-
лёный свет к действию по немедленной реа-
лизации. Они и сами это сделают, если за-
хотят. Но о способах решения этих задач в
вашей оболочке надо хорошенько задуматься
и предусмотреть пути их реализации. Тогда
и вам будет легче - не  будут  упрекать в
недальновидности, ламерстве и т.д.  И для
программистов со стороны чем больше будет
свободы действий - тем лучше! И совмести-
мость  старых и новых версий останется на
должном уровне.  Короче, продумай всё ос-
новательно, а  потом только садись за ас-
семблер!                                 
   А я тебе помогу. Немного. Для наиболее
детальной и полной информации прочитай во
втором номере "Вороны" мою статью-Help на
WindoWs.                                 
   Здесь же я расскажу о способе работы с
функциями через RST #10.                 
   Итак, все и так уже это знают,  но на-
помнить считаю не лишним:  для привязки к
RST #10 надо  занести в системную бейсика
#5С51 адрес своей системной, где находит-
ся  адрес программы, отвечающей за работу
с функциями и вызываемой через RST #10. В
этом замысловатом действии есть необходи-
мость  из-за особенностей работы ПЗУ-шной
процедуры.  Сама процедура имеет примерно
следующий вид:                           
                                         
;Запуск функции через RST #10.           
;Вводные любые, ничего не нарушает, кроме
;альтернативной пары DE.                 
                                         
RST_16  РОР  HL     ;RET из ПЗУ          
        РОР  HL     ;HL` альтернативный  
        ЕХ   (SP),HL;next адрес после RST
        LD   Е,(HL) ;номер функции с #40!
        RES  6,Е    ;Почему - читай ниже!
        RLC  Е      ;разделить на 2      
        LD   D,#00                       
        INC  HL     ;адр. после номера ф.
        ЕХ   (SP),HL;выход после функции 
        PUSH HL     ;HL`                 
        LD   HL,таблица адресов функций  
        ADD  HL,DE                       
        LD   Е,(HL) ;взять адрес функции 
        INC  HL                          
        LD   D,(HL)                      
        РОР  HL     ;HL`                 
        PUSH DE     ;для запуска функции 
        EXX         ;это нагадила RST #10
        RET         ;запуск функции.     
                                         
   И вновь об особенностях работы ПЗУшной
подпрограммы обработки команды RST #10. И
какой  дурень написал так, что в процессе
работы грохается значение альтернативного
регистра DE? Вернее: регистровой пары DE.
Приходится с этим мириться...  Но это де-
лать вовсе не обязательно! Можно написать
другую процедурку, которая ничего не гро-
хает! Вот она:                           
                                         
NO_RST  LD   (REG_A),A                   
        ЕХ   (SP),HL                     
        LD   A,(HL)                      
        INC  HL                          
        ЕХ   (SP),HL                     
        PUSH HL                          
        PUSH DE                          
        LD   HL,таблица адресов функций  
        SUB  #40                         
        ADD  A,A                         
        LD   Е,A                         
        LD   D,#00                       
        ADD  HL,DE                       
        LD   A,(HL)                      
        INC  HL                          
        LD   Н,(HL)                      
        LD   L,A                         
        РОР  DE                          
        LD   A,#00                       
REG_A   EQU  $-1                         
        ЕХ   (SP),HL                     
        RET                              
                                         
   Принцип  работы аналогичен предидущему
алгоритму, поэтому комментарии излишни. Я
только хочу отметить, что данный алгоритм
следует  вызывать  через CALL NO_RST плюс
номер функции:                           
                                         
        CALL NO_RST                      
        DEFB номер функции.              
                                         
   Теперь расскажу о том, почему я приме-
нил нумерацию функций с #40, а не с нуля.
Дело в том, что можно любой номер ставить
для  функции, вот только откомпилируйте и
посмотрите на результат.  Всё, что разме-
щается  после номера - слилось в едуную с
ним кашу. Не всегда, правда, но настолько
часто, чтобы сделать просмотр STS`ом уто-
мительным делом.  Трудно будет отлаживать
творимую программу! А вот номер с #40  до
#С0  можно свободно применять из-за того,
что это коды однобайтовых команд и значит
визуального  слияния со следующими коман-
дами не произойдёт.                      
   Таблица функций представляет собой са-
мый что ни есть заурядный список подпрог-
рамм, набранных под DEFW. Всё, кодируйте!
   Оп, нет!  Ещё забыл пару слов сказать.
Все перечисленные алгоритмы, естественно,
для внутреннего использования в оболочке,
а для  пользователей и программистов надо
сделать  две точки входа: через RST #10 и
какой-нибудь  адрес, где будет находиться
подобие резидента. Можно сделать так, как
я сделал в своём WindoWs`е - начало кодо-
вого блока и есть точка входа в оболочку.
Самым же приемлемым решением, на мой при-
страстный  взгляд, является организация в
теле оболочки специальной инсталляционной
функции, которая  помимо теста устройств,
доступной памяти и т.д., будет заниматься
подключением  канала  для  RST`шки. Тогда
нужна только одна единственная точка вхо-
да. Естественно, что желательно иметь так
называемую "заключительную" функцию,  ко-
торая  будет "тушить" AY8910/12, устанав-
ливать IM 1, реставрировать все системные
переменные, включая каналы и потоки после
работы  твоей оболочки через RST #10. Од-
ним словом - приводить в порядок всё, что
не совсем соответствует состоянию компью-
тера после его инициализации.            
   А  как быть с системными оболочки, ко-
торые используются из вне и как к ним по-
лучить доступ? Не такое сложное это дело,
как  может  показаться в первый момент. Я
предлагаю сделать функции многоуровневые.
Такое  решение,  например, реализовано во
всеми любимом журнале ZX-FORMAT.  Там всё
сделано примерно так, хотя в деталях могу
ошибаться:                               
                                         
        RST  #10                         
        DEFB номер функции               
        DEFB тип функции                 
        DEFB данные, данные...           
                                         
   Получается так, что попав в определён-
ную функцию, происходит изъятие из памяти
следующих  байт, которые могут быть ввод-
ными для функции. Да чем угодно!  Всё за-
висит от установленых вами правил. Теперь
применительно к системным переменным, ко-
торые надо изменять. Рекомендую всем сис-
темным в оболочке, к которым  предполага-
ется  иметь доступ из вне, присвоить свои
порядковые номера. Также, как и функциям.
Реализовать на практике это можно так:   
                                         
        RST  #10                         
        DEFB функция установки системных 
        DEFB номер корректируемой систем-
             ной переменной              
        DEFW двухбайтовое значение       
                                         
   Можно немного усложнить операцию и оп-
ределять  размерность системной на 1-бай-
товость или 2-байтовость. Или сделать це-
почку  вводных, если это, например, обра-
щение к дисковой функции. Только не забы-
вайте, что в моих примерах на стеке лежит
адрес  возврата из функции! Этим же адре-
сом  можно  пользоваться  для дальнейшего
изъятия вводных. Аналогично можно органи-
зовать изъятие любой системной переменной
из списка.                               
                                         
   Теперь следует немного поагитировать к
освоению аппаратных возможностей, которые
широко  используются в последнее время на
Спектруме. Речь идёт о поддержке кэша. Из
всех многочисленных  схем этого потрясаю-
щего устройства рекомендую для начала де-
лать программы под стандартный кэш на 16К
с  расчётом на то, что это наиболее легко
реализуемая схема, к тому же является ро-
дителем  дальнейших разработок в этой об-
ласти:  кэш на 32К, эмуляция 128-го ПЗУ и
так далее. Рекомендую всем создателям бу-
тов, оболочек, редакторов и другого софта
поддержать эту схему!  Ну посуди сам, до-
рогой автор некоего виндовса - практичес-
ки вся память компьютера, вне зависимости
от её объёма, отдана пользователю и прог-
раммисту, что несомненно поднимет рейтинг
твоей ОС, а также  упростит до минимума в
будущем адаптировать уже существующие или
разрабатываемые программы.  Решать, в ко-
нечном  счёте, тебе и возможностям твоего
компьютера. Если проблема в последнем, то
может стоить её решить и тогда твоя прог-
рамма не будет выглядеть так убого...    
                                         
    Ну-с, пока всё. Желаю удачи! Надеюсь,
что эта статья поможет вам в работе.     
                                         
                                         
     ДИЗАЙН НАШИХ ПРОГРАММ     
     =====================     
                                         
(С) 2000 Мг.Beeper/Last Masters          
-----------------------------------------
 Глава I                       
                                         
   Жаль мне тех людей, которым слово "ди-
зайн"  - пустой звук. Ведь написать прог-
рамму  - это одно, а красиво её оформить,
придумать оригинальный дизайн к ней - со-
вершенно  другое.  Вот  почему  некоторые
личности,  пытаясь внедрить  на Спектруме
свои  идеи, сталкиваются с этой проблемой
и,  к  сожалению, не найдя выхода из неё,
часто  бросают свои работы не доведёнными
до  конца.  Некоторые  делают без какого-
либо дизайна... Конкретные примеры приво-
дить я небуду, хотя почему бы и нет?  Вот
один из них.                             
   Помните демоверсию игры под названием,
если  я  не ошибаюсь - "ROBO". Смысл игры
таков:  управляя  неким  персонажем  (вид
сверху),  вы блуждаете среди всяких лову-
шек  и  неожиданностей.  Демоверсия  была
просто потрясная. В игре были замечатель-
ные оцифрованные звуки, и это было, я вам
скажу - круто.                           
    Прошёл некоторый промежуток времени и
появилась полная версия игры... На рынках
родного  города она продавалась в больших
количествах, и как были разочарованны те,
кто  приобрёл  сей  продукт. Вся загрузка
производилась через бейсик, меню, как та-
кового, небыло. Была выборка только уров-
ня  - и только. Я лично опросил некоторых
таких обиженных юзеров и мои ожидания оп-
равдались.  99%  опрошенных забросили эту
игру на самую верхнюю полку после увиден-
ного. А где же те оцифрованные звуки, из-
за  которых  возвысился  рейтинг этой иг-
ры?                                      
    Да  их просто заменили на AY`ковские.
Вот вам и весь дизайн! Ну, может быть ещё
один  вариант:  Автор  игры скоропостижно
скончался,  а в предсмертном сказании за-
вещал  эту  игру  своим предкам, а предки
эти  пропили эту программульку людишкам в
чёрном,  а людишки эти были ламерами, и в
лом им стало что-то делать над этим недо-
деланным  творением исскуства и стали они
кодить  на  Бейсике, и разразился гром, и
пустился проливной дождь. А лохи в чёрном
кодили  под старым дубом, на ветвях кото-
рого небыло ни единого листочка. И залило
комп ихний, но на последних секундах один
из этих, что в чёрном, успел сделать save
и тем самым подарил миру ЭТО.  Хоть верь-
те, хоть нет, а дело было именно так.    
                                         
 Глава II                      
                                         
    Давайте теперь по маленькой, ой, вер-
нее  по меленькому рассмотрим demomaking.
С  этим у нас всегда был порядок и лишний
раз писать неохота. Очень интересная ста-
тья по этому поводу была напечатана в Fa-
ultless`е  #9, хотя, по-моему, она скорее
всего  была  выдрана  с платформы РС. А я
хотел бы лишь напомнить вам, товарищи де-
момакеры, что:                           
                                         
1). Ваши творения смотрят не только прог-
раммисты, но и обычные юзеры, которые ни-
чего  не понимают в эффектах, и судят они
ваши демки не по быстроте выполнения того
или иного эффекта, а по его красоте и со-
четании с музыкой.                       
                                         
2).  Помните также, что некоторые из этих
юзеров  на своём телевизоре развертку эк-
рана  делают  так,  что  бордера как бы и
нет. Поэтому надо предупреждать приблизи-
тельно  так "Warning! NoW следует сделать
на your TV little изменения" (далее долж-
на  приводится схема развертки экрана как
аппаратно, так и при помощи  медитации на
все  виды TV). Вот тогда все увидят - что
надо сделать. А то как было у меня с дев-
кой или демкой - уже не помню - Rage, ко-
торую  я ни то снял, ни то списал с Е`97,
в которой, оказывается, был  скроллер  на
бордюре и узнал я об этом в декабре меся-
це.  Сразу же полез в свой мини TV set, а
там ни сказом сказать, ни пером написать.
Столько всяких крутящихся штучек. К концу
дня  я всё-таки сделал развертку нормаль-
ной. После этого случая развертку я боль-
ше не трогаю.                            
                                         
3).  В  общем, вывод таков - когда будете
делать демку, перед написанием её очеред-
ной части, не поленитесь пригласить своих
друзей,  знакомых или просто "отфонарных"
людей. Покажите им свои наброски, спроси-
те - как будет лучше или хуже. Думаю, что
после  этой маленькой показухи у вас поя-
вятся новые идеи, да и старые приведёте в
порядок.                                 
                                         
 Глава III                     
                                         
    О  электронных  изданиях  долгую речь
вести не стоит, так как каждый гл. редак-
тор  думает,  что его журнал самый ориги-
нальный  и самый лучший. И всем остальным
журналам надо подстраиваться под его тво-
рение.  Вот  поэтому я и не стал затраги-
вать эту тему более серьезно. Хотелось бы
просто дать парочку советов начинающим,но
не более того.                           
                                         
 Совет 1.                      
    Никогда  не  начинайте делать журнал,
если у вас нет хорошего кодера. Не следу-
ет надеяться, что он потом сам прийдет. И
музыканта надо найти хорошего.           
                                         
 Совет 2.                      
    Не бойтесь повторяться с дизайном ва-
шего журнала, ведь самое главное заключа-
ется не в оригинальности, а красоте офор-
мления. И пусть, к примеру, тот же интер-
фейс с окнами уже в каждом журнале имеет-
ся,  но посмотрите - это практически всем
нравится,  да и удобно очень. Многие жур-
налы  стремились сделать оригинальную ме-
нюху, листалку, а посмотрите, что из это-
го вышло...                              
                                         
 Совет 3.                      
    Пытайтесь  раздобыть интересные мате-
риалы, найдите себе партнеров по изданию.
Делайте всё  вместе. Время от времени же-
лательно производить опрос юзеров на тему
популярности вашего журнала, о его оформ-
лении и т.д. Это очень может помочь.     
                                         
 Совет 4.                      
    Никогда  не задирайте вверх свой нос!
Это  может негативно повлиять на вашу ре-
путацию и в конце-концов вас просто заки-
дают камнями. Или яйцами ;)              
                                         
 Совет 5.                      
    В приложение включайте не только свои
собственные разработки, но и других авто-
ров.  Найдите себе партнеров, которые мо-
гут раздобыть прекрасное приложение, ведь
приложение - это  лицо вашего журнала, не
забывайте об этом!                       
                                         
      И на последок, хочу пожелать       
   всем редакциям электронных изданий    
       успешной работы над своими        
    изданиями, чтобы читатели уважали    
      и читали ваши издания, чтобы       
          никогда у вас небыло           
         информационного голода,         
             а в приложении              
        были отличные программы!         
                                         
От редакции: аминь...                    



Other articles:


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

Similar articles:
Spectrum Game room - Answers to questions: "What is the most popular hero?" What game was the first conversion on the Spectrum? "," What games were the first in its genre? "" What game is the first time was with the music? "," Kakaya game was first released for the Spectrum ZX? " etc.

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