ВНУТРЕННЯЯ СТРУКТУРИЗАЦИЯ
ВАШИХ ПРОГРАММ
(С) 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: