Oberon #04: Обо всём: размышления и техники

М.М.A/SPEED СО. 

Был на свете такой хороший полиграфический журнал "ZX-РЕВЮ" ..... Был, да как это ни прискорбно, но весь вышел! И на пепелище последнего его тиража осталась неопубликованной статья, написанная мной и Максом Васильевым специально для этого издания.

И хотя нижеследующий текст был набит ещё в первых числах 1997-го года, он не потерял той актуальности и остроты. Вот я и решил включить этот материал в свежий номер ОБЕРОН'а. Не пропадать же добру!

Правда была одна маленькая проблемка....... Текст статьи написан языком "ZX-РЕВЮ" и для читателей "ZX-РЕВЮ". Естественно, всё нужно было переделывать. Однако, поскольку перспектива полного переписывания статьи меня нисколько не прельщала, я решил оставить всё как есть.

Итак, давайте "поскорбим" по безвременно ушедшему от нас НАСТОЯЩЕМУ спектрумовскому журналу - "ZX-РЕВЮ"!

(C) MAXSOFT / SPEED СО.
(C) М.М.A / SPEED СО.
г.Самара 1997 а.d.

ВООТ-программа в один сектор.

Со времён первых компьютеров с системой TR-DOS, появившихся в нашей стране, хаккеры и програмисты не перестают решать величайшую проблему современности: зачем, как и какой boot-загрузчик написать??? Тех, кто интересуется вопросом современного boot-остроения, я позволю себе отослать к статье, посвящённой именно этой теме, которая была опубликована в третьем номере Самарского электронного журнала "ОБЕРОН". В настоящей же статье, на примере написания boot-программы, мы рассмотрим вопросы реализации сверхкоротких программ на ассемблере, а также возможность рационального использования процедур стандартного ПЗУ и TR-DOS'а в подобных программах.

Стоит отметить, что попытки создания сверхкоротких boot-загрузчиков уже были, и достаточно успешные. Например, boot, написанный Shi-soft'ом в 1992-ом году, занимал два сектора и вполне неплохо работал. Я принципиально не говорю о длине в байтах, так как в связи с использованием не кассетных носителей информации (дискеты и как следствие, дисковые ОС, например TR-DOS), понятие длины программы в байтах однозначно заменяется на понятие длины в секторах. И в случае, если ваша процедура имеет размер 260 байтов, а также если она будет занимать 460 байтов, всё равно при записи на диск будет организован файл объёмом в два сектора. Таким образом, если ваша программа близко связана с DOS, имеет смысл выбрать предельный её размер, кратный размеру стандартного TR-DOS'овского сектора и впоследствии стараться использовать каждый байт (бит) этого объёма памяти.

Мы несколько отступили от темы, вернёмся к нашим boot'ам! Другой пример boot-загрузчика в два сектора - это программа Д.Пьянкова SMALL ВООТ, распространяемая ИНФОРКОМ'ом. Как пишется в описании на эту программу: "Основная особенность - малый объём (2 сектора), благодаря чему обеспечивается быстрая загрузка". Вполне очевидно, что при размере в один сектор загрузка будет ещё быстрее, а места на диске такой boot вообще практически не занимает. Воплощением именно этой, абсолютно казалось бы безумной идеи и занялись сразу два самарских программиста.

Со времени возникновения этой идеи в моей (М.М.A) голове прошло уже около полутора лет. Так как в то время я был недостаточно опытен в программировании, то просто поделился мыслью о написании подобного шедевра с другими самарскими программистами. В результате, в жесткой конкурентной борьбе, односекторный boot был не просто написан, а написан настолько оптимально, что боюсь, читателям "ZX-РЕВЮ" уже не удастся что-либо оптимизировать. Хотя, если не смотреть листинг, приведённый ниже, а попробовать реализовать эту идею, что называется с "чистого листа", то, возможно, вам, дорогие читатели, удастся найти какие-либо новые, нестандартные решения. Другое дело изменение функциональных особенностей...

Полный дизассемблер boot'а с комментариями практически по каждой команде вы найдёте в конце статьи. Там же находится дамп boot'а и примечания по объединению кодового блока и BASIC'а. Мы же продолжим тему изменений и посмотрим, что и как можно поменять в этой (базовой) версии boot'а.

В данной версии управление программой осуществляется с помощью SINCLAIR JOYSTICK'а и клавиш "Q","A","О","Р". Выбор файла - "0","ENTER", чтение нового каталога - "SPACE". Как видно, управление от SINCLAIR джойстика несколько излишне и при желании вы можете его выкинуть и вставить что-либо другое.

Например, неплохой эффект даст утолщённый шрифт!

Хранить дополнительный символьный набор в памяти - это уже три сектора (768 байт), да и воспользоваться методиками создания шрифтов с использованием стандартного ПЗУ шрифта, не раз описанными в ZX-РЕВЮ, тоже нельзя - слишком много байтов! Решение должно быть нестандартным и одновременно простым. А что, если сначала напечатать на экране всё обычным шрифтом, а потом проделать над экраном следующую операцию:

ORG 30000

LD HL,#4000
В HL - начальный адрес экрана
LOOP1 LD A,(HL)
Открываем цикл, грузим в A содержимое (HL)
SRL A
Сдвигаем A вправо (или SLA A - влево)
OR (HL)
Накладываем A на исходный байт в экране
LD (HL),A
Помещаем результат на экран
INC HL
Увеличиваем адрес в экране на единицу
LD A,Н
Загружаем в A значение Н,
СР #58
и смотрим, не дошло ли оно до старшего разряда области атрибутов (#5800)
JR NZ,LOOP1
Повторяем цикл, если HL < #5800
RET

В принципе, процедура на листинге 1 работоспособна, и занимает всего 14 байт. Но для сверхкороткого boot'а и этого много! Дальнейшее совершенствование процедуры может осуществляться путём изменения принципа определения конца экранной области. Сам же алгоритм утолщения и так оптимален.

ORG 30000

LD HL,#57FF
В HL - самый последний байт экрана
LOOP1 LD A,(HL)
В A грузим содержимое (HL)
RRCA
Сдвигаем через RRCA (короче на один байт!)
OR (HL)
Накладываем на оригинал
LD (HL),A
Копируем обратно в экран
DEC HL
Уменьшаем HL
LD A,Н
Проверяем содержимое Н на 0
OR A
JR NZ,LOOP1
Если HL > #OOFF, то повторяем цикл

RET

В данном случае отсчёт байтов идёт "снизу вверх", и не заканчивается на #4000, а проходит через всё ПЗУ (там, естественно, ничего не изменяется) и доходит до адреса #0100. Используя такой способ, мы экономим ещё два победных байта и получаем процедуру в 12 байт длиной.

Некоторое неудобство заключается в том, что пока программа "идёт" через ПЗУ, тратится достаточно большое количество тактов процессора и пользователь начинает замечать, как вы утолщаете символы. С одной стороны это даже неплохо - получается очень интересный эффект, но если он вам кардинально не нравится, то попробуйте следующее:

Сразу после команды DEC HL, помеченной в предыдущем листинге, наберите:

BIT 6,Н
Проверяем, установлен ли шестой бит в адресе, записанном в HL. Если установлен, то продолжаем цикл, иначе - выходим.

JR NZ,LOOP1
RET

Для понимания работы этого условия поясню, что все те адреса, которые могут находиться в регистре HL при работе с экраном, имеют выставленный шестой бит (#40 = %01000000), а начиная с адреса #ЗFFF (#3F = %00111111) этот бит сброшен. По этому принципу и работает определение конца экранной области. Байтов на этом мы не выиграли, но зато работает побыстрее, чем версия с проверкой Н на 0. Но можно ли вообще сэкономить ещё? Естественно, можно! Посмотрите в комментарии к листингу boot'а. Там всё построено на том, что последующая процедура использует данные предыдущей.

Если перед вызовом процедуры утолщения в регистре L будет находиться число #FF, то нам достаточно просто загрузить оставшуюся половинку регистра - Н.

Поставьте в листинге 2 вместо LD HL,#57FF команду LD Н,#57 и не забудьте, что в регистре L должно быть число #FF, оставленное от предыдущей процедуры. Вот мы и получили процедурку в 11 байтов - вполне нормально для нашего односекторного детища. Вот только ситуация с регистром L непонятная. Нужно ли вообще его загружать? Если представить, что в регистре L к моменту старта процедуры находится абсолютно случайное число, то по окончании работы мы просто получим неутолщёнными от одного до #FF байтов в нижней трети экрана в нижней части каждого знакоместа! Но в ПЗУ-шном шрифте, насколько я помню, лишь запятая и некоторые символы используют нижнюю строку знакоместа. А так как эти символы в названии файла вообще редко встречаются, то смело оставляем точно загруженным только регистр Н.

ORG 30000
LD Н,#57
LOOP1 LD A,(HL)
RRCA
OR (HL)
LD (HL),A
DEC HL
BIT 6,Н
JR NZ,LOOP1
RET

Вот она - оптимизированная версия утолщения всего экрана, которую вы, дорогие читатели, можете вставлять в наш односекторный boot вместо дополнительного управления от SINCLAIR - джойстика.

Основной нашей целью было показать вам, как нужно размышлять при написании сверхкомпактного кода. К тому же мы хотим выбросить идею односекторного boot'а на мозговой штурм всей страны. В наших головах эта идея дошла уже до полного оптимума. Но мы будем очень рады, если кто-либо из читателей предложит что-то новое, интересное, от чего захочется, как в известной рекламе, сказать: "СВЕЖО...."!

А вот и сам boot-загрузчик длиною в один сектор:

ORG #5D3B

AUTHOR EQU #5D52
FILE_Р EQU #5D52

;BASIC СТРОКА ДЛЯ ЗАПУСКА

DEFB #00,#01,#F8,#00,#Е7,#C3,#A7,#3A

DEFB #F9,#C0,#В0,#22,#32,#33,#39,#30

DEFB #35,#22,#3A,#ЕА,#3A,#F7,#22

;ИНФОРМАЦИЯ ОБ АВТОРЕ(НЕ МЕНЕЕ 8 СИМВОЛОВ)

DEFB 23,11,32,"MAXSOFT'96"

DEFB #22 ;КОНЕЦ BASIC-СТРОКИ
DEFB #D ;"СВОБОДНЫЙ" БАЙТ

;1 SECTOR ВООТ
;IDEA ВУ М.М.A SOFT/SPEED СО.
;CODED ВУ MAXSOFT/SPEED СО.
LD (IY+#53),#5
;УСТАНОВКА ЦВЕТА PAPER В ЯЧЕЙКУ (#SC8D)
;BORDER УЖЕ УСТАНОВЛЕН ИЗ BASIC'A
NEW_DISK ;ЗАЧИТЫВАНИЕ ДИСКА
CALL #D6B ;ОЧИСТКА ЭКРАНА
;НА ВЫХОДЕ DE=#0000,HL=#50E0,ВС=#1721
;ЗАГРУЖАЕМ КАТАЛОГ ДИСКА С АДРЕСА #6801
ADD HL,ВС
LD ВС,#905
PUSH HL
CALL #3D13
;ПЕЧАТАЕМ ИНФОРМАЦИЮ ОБ АВТОРЕ
LD DE,AUTHOR
LD C,#D
CALL #203C
LD A,2
;ОТКРЫВАЕМ ПОТОК ПЕЧАТИ НА ЭКРАН
CALL #1601
РОР HL
LD D,Н
LD Е,L
SORT ;СОРТИРОВКА КАТАЛОГА
LD ВС,8
DEC (HL)
JR Z,NEXT_F ;СTЁРTЫЙ ФАЙЛ
INC (HL)
JR Z,END_SORT ;КОНЕЦ КАТАЛОГА
PUSH HL
ADD HL,ВС
LD A,(HL)
РОР HL
СР "В" ;ТИП ФАЙЛА
JR NZ,NEXT_F
PUSH HL
LD A,#20 ;ПЕЧАТЬ "ПРОБЕЛа"
RST #10
МАКЕ_FILE
LD A,(HL) ;ПЕЧАТЬ
RST #10 ;БУКВЫ
LDI ;И ЕЁ ПЕРЕНОС
JP РЕ,МАКЕ_FILE
;(ДЛЯ УПЛОТНЕНИЯ КАТАЛОГА)
LD HL,#70D1 ;СЧЁТЧИК ФАЙЛОВ
INC (HL)
LD A,(HL)
FILE_C
SUB 3
;ВЫЧИСЛЯЕМ, НАПЕЧАТАНО-ЛИ
;ТРИ ИМЕНИ ФАЙЛОВ В ОДНОЙ СТРОКЕ
JR Z,FILE_C1
JR NC,FILE_C
LD A,#20 ;НЕТ,НЕ НАПЕЧАТАНО
RST #10 ;-ПЕЧАТЬ "ПРОБЕЛа"
FILE_C1 ;ДА,НАПЕЧАТАНО
LD A,#20
RST #10
РОР HL
NEXT_F
LD C,#10 ;ПЕРЕХОДИМ
ADD HL,ВС ;К СЛЕДУЮЩЕМУ ФАЙЛУ
JR SORT
END_SORT ;КОНЕЦ СОРТИРОВКИ
NEW_CUR ;РЕГИСТР В=0
LD C,В
;РЕГИСТР С-СЧЁТЧИК ФАЙЛОВ
MOVE_CUR
LD HL,#57F5
LD DE,#В
XOR A
;РЕГИСТР A-ВРЕМЕННЫЙ СЧЁТЧИК
MOVE_C1
LD В,3
MOVE_C2
ADD HL,DE
;ВЫЧИСЛЯЕМ ПОЗИЦИЮ КУРСОРА
СР C
JR Z,CURSOR
INC A
DJNZ MOVE_C2
DEC HL
JR MOVE_C1
CURSOR ;РИСУЕМ КУРСОР
LD В,#A
LD DE,(#70D3)
LD (#70D3),HL
LD A,5
CURSOR1
LD (DE),A
;СТИРАЕМ СТАРЫЙ КУРСОР
INC DE
LD (HL),#16
;РИСУЕМ НОВЫЙ КУРСОР
INC HL
DJNZ CURSOR1
LD HL,#5C08
;ОБНУЛЯЕМ СИСТЕМНУЮ ПЕРЕМЕННУЮ (LAST-KEY)
LD (HL),В
KEYS ;ОПРОС КЛАВИШ
LD A,(HL)
СР " "
;ПРОБЕЛ-ПЕРЕЗАЧИВАНИЕ ДИСКА
JR Z,NEW_DISK
СР #D
;ENTER-ЗАПУСК ПРОГРАММЫ
JR Z,START_F
СР "0"
;0-ЗАПУСК ПРОГРАММЫ
JR Z,START_F
СР "7"
JR Z,L_RIGHT
СР "6"
JR Z,L__LEFT
СР "8"
JR Z,L__DOWN
СР "9"
JR Z,L____UP
OR #20
;ВКЛЮЧЕНИЕ ВЕРХНЕГО РЕГИСТРА ДЛЯ БУКВ
;ОПРОС БУКВЕННЫХ КЛАВИШ НЕЗАВИСИМО ОТ
;РЕЖИМА "CAPS"
СР "р"
JR Z,L_RIGHT
СР "о"
JR Z,L__LEFT
СР "а"
JR Z,L__DOWN
СР "q"
JR NZ,KEYS
L____UP ;КУРСОР ВВЕРХ
DEC C
DEC C
L__LEFT ;КУРСОР ВЛЕВО
DEC C
JP Р,MOVE_CUR
;КУРСОР НЕ ДОШЁЛ ДО НАЧАЛА КАТАЛОГА
LD ВС,(#70D1)
;КУРСОР - НА КОНЕЦ КАТАЛОГА
DEC C
JR MOVE_CUR
L__DOWN ;КУРСОР ВНИЗ
INC C
INC C
L_RIGHT ;КУРСОР ВПРАВО
INC C
LD A,(#70D1)
DEC A
СР C
JR NC,MOVE_CUR
;КУРСОР НЕ ДОШЁЛ ДО КОНЦА КАТАЛОГА
JR NEW_CUR
;КУРСОР - НА НАЧАЛО КАТАЛОГА
START_F ;ЗАПУСК ФАЙЛА
LD A,C
INC A
LD C,L ;РЕГИСТР L=8
LD HL,#67F9
;АДРЕС НАЧАЛА КАТАЛОГА МИНУС 8
ST_F1
ADD HL,ВС
;ВЫЧИСЛЯЕМ ПОЗИЦИЮ ИМЕНИ ФАЙЛА В КАТАЛОГЕ
DEC A
JR NZ,ST_F1
LD DE,FILE_Р
;ПЕРЕНОСИМ ИМЯ ФАЙЛА В BASIC
LDIR
JP #3D03
;ВЫХОДИМ В BASIC С ЗАПУСКОМ ФАЙЛА
Листинг 4
l. НАБРАТь ТЕКСТ ВООТ'A В АССЕМБЛЕРЕ.
2. ВЫЙТИ В BASIC. СТЕРЕТь ВСЕ BASIC-СТРОКИ, ОТНОСЯЩИЕСЯ К АССЕМБЛЕРУ И СОЗДАТь
СВОЮ СТРОЧКУ ДЛИНОЙ 248 БАЙТ, Т.Е. КОМАНДА PRINT РЕЕК 23869 ДОЛЖНА ПОКАЗАТь
248. ПРИ ЭТОМ НЕЖЕЛАТЕЛЬНО ИСПОЛЬЗОВАТЬ РЕДАКТОР BASIC 128.
3. ВЕРНУТЬСЯ В АССЕМБЛЕР И ПРОИЗВЕСТИ
АССЕМБЛИРОВАНИЕ.
4. ВЫЙТИ В BASIC И СОХРАНИТЬ BASIC-ПРОГ-
РАММУ :

По поводу доработок и изменений.
В базовой версии boot'а, приведённой в листинге 4, имеется 1 свободный байт. Его использование для дополнительных сервисных
возможностей практически нереально. Зато
реально попробовать сделать печать файлов
не в три колонки, а в две, и тогда новые и
новые освободившиеся байты откроют вам
возможность ко всему новому и новому навороту
в пределах всё того же одного сектора дискового пространства.
Вообще, если всё же окажется, что мы достаточно оптимизировали идею односекторных
boot'ов, и читателям не удастся выкроить
даже лишнего байта, то предлагаем устроить
конкурс на самый удобный и мощный семисекторный загрузчик. Такой boot очень удобен
тем, что может быть расположен в неиспользуемых секторах нулевого трека. В этом
случае получается, что boot не занимает
ни одного сектора на диске.
К тому же, если в одно/двух-секторных
boot-загрузчиках речь идёт только об обеспечении минимального сервиса, то в boot'ах
длиной в семь секторов можно использовать
и автозачитывание дисков, и красивые эффекты на заднем плане (звезды, снег) и многое
другое.
Р.S. И главное, помните: "Любую процедуру
можно дооптимизировать до такой степени,
что она будет состоять из одной команды
NOP и при этом выполнять всё, что от неё
требуется".
Вот такая хорошая была статья..... Однако,
поскольку мы публикуем её в электронном, а
не бумажном журнале, есть возможность
немного облегчить вам жизнь!
В приложении к журналу вы найдёте две готовых к употреблению версии "односекторного" boot'а:
1SBOOT_М (версия by MAXSOFT)
и
1SBOOT_Р (версия by POLTERGEIST)
Версия от MAXSOFT'а была подробно описана
в прочитанной вами статье, а версия от
POLTERGEISTA примерно тоже самое, но с
другими функциональными особенностями. К
тому же эта версия появилась несколько
раньше и поэтому запрограммирована немного иначе. Как? Разберётесь сами, когда
дизассемблируете!
Ну а для самых пытливых умов, на диске
записано два файла в формате редактора
ZX-WORD:
1S_boot+.<c> </c>(листинг с комментариями)
и
1S_boot-.<c> </c>(листинг без комментариев)
Первый файл удобен для конвертирования в
ассемблеры с редактором на 64 символа в
строке и с поддержкой русского шрифта по
альтернативной кодировке. Примером такого ассемблера является версия ALASM4X8,
в то время как TASM х.хх хотя и поддерживает 64 символа в строку, но "обламывается" на русских комментариях.
Для всех тех, кто пользуется не ALASM'ом,
предназначен второй листинг. В нём отсутствуют комментарии на русском языке и длина строки не превышает 42 символов.
Этот файл можно непосредственно грузить в
TASM 2.0, а с помощью опции Import
TASM 2.0 и в ассемблеры TASM 3.XX, TASM
4.0 (XLD), TASM 4.XX (RST#7).
Как конвертировать текст в другие типы
ассемблеров, я надеюсь, вы разберётесь
сами.
Удачи!
-════════════════════════════════════════ * * * * *
MUSIC ВУ: VISUAL/MS/XTM

Оглавление издания: Oberon #04

  • От редакции
    Редакционная статья обсуждает 'обвинения' против создателей Оберон #4 в шутливой форме, подчеркивает трудности, связанные с выпуском этого номера, и объявляет о возможной паузе в издании журнала.
  • Свиток
    Анализ игры 'Chaos' Джулиана Голлопа. Упрощенные механики игры и стратегические элементы. Описание существ, заклинаний и тактики.
  • Свиток - Unbeliever
    Описание математической игры для ZX Spectrum, где игроки собирают символы формул, перемещаясь по шестерёнкам.
  • Свиток - M.M.A
    Обсуждение 'Doc the Destroyer', уникальной игры в жанре драки и приключений для ZX Spectrum. Статья охватывает управление, настройку персонажа и механику игры. Также рассматриваются проблемы совместимости на разных моделях ZX Spectrum.
  • Обзор - M.M.A
    Статья предлагает обзор игр для ZX Spectrum, включая KOMANDO 2, WRESTLING SUPERSTARS, TAG TEAM WRESTLING и CAPTAIN PLANET. Подчеркиваются особенности, графика и геймплей каждой игры, отмечаются как сильные, так и слабые стороны. Обзор завершается рекомендациями и сравнениями с другими платформами и играми.
  • Обзор
    Обзор различных игр для ZX Spectrum, с акцентом на их уникальные особенности, механики геймплея и элементы дизайна. Включает критику звуковых эффектов, графики и технических проблем. Рассматриваются такие игры, как 'Stryker in the Crypts of Trogan', 'Phileas Fogg's Balloon Battles' и 'Survival'.
  • Обзор - Alex Noman
    Обзор игр для ZX Spectrum, включая BOOVIE, MOTOR MASSACRE, SOCCER PINBALL и HUXLEY PIG 1 и 2. Описываются особенности игрового процесса, графики и уникальные черты каждой игры. Статья включает сравнения с другими играми и выделяет специфические технические аспекты.
  • Обзор
    Обзор различных игр, включая Little Computer People и Lost Caves, с акцентом на их особенности и версии. Обсуждается также 75Occ Grand Prix от Codemasters и его ограничения. Статья предоставляет инсайты о механике и версиях игр.
  • Обзор - Alex Noman
    Подробный обзор различных ассемблеров, таких как Alasm 3.8, TASM 4.12 и другие, с описанием их особенностей и недостатков.
  • Обо всем - SPIDER, POWer
    Анонс создания сети SamZxNet в Самаре и трудностей настройки с модемами HAYES. Объяснение требований питания модемов и возможных сложностей. Приглашение опытных читателей для предоставления технических советов.
  • Обо всем
    Описание путешествия на ENLIGHT'97 и встреч с различными участниками демосцены. Наблюдения за организацией события и проблемами. Мнения о переживаниях участников и обсуждениях сцены.
  • Обо всем
    Отчет о втором дне ENLIGHT'97: события, проблемы и размышления. Описание результатов голосования и организационных трудностей. Подчеркиваются перспективы будущих демо-пати для Spectrum.
  • Обо всем
    В статье приводится отзыв читателя на Oberon #04, критикуются дизайн и выбор контента, обсуждаются проблемы защиты ПО и улучшений игр.
  • Обо всем - Gyn
    Обсуждение приключенческой игры KAYLETH с советами и рекомендациями. Включает словарь игры и предложения от автора и его команды. Поиск местного художника для будущей разработки RPG.
  • Обо всём - Maxsoft, M.M.A
    Размышление о закрытии журнала 'ZX-РЕВЮ' и адаптации его статьи для 'Оберон'. Обсуждение разработки сверхкоротких бутлоадеров. Техники оптимизации для написания односекторных загрузчиков на ZX Spectrum.
  • Обо всём
    Исследование вклада дилетантов в историю электроники, музыки и вычислительной техники, с акцентом на таких фигурах, как Фарадей и Бэббидж. Эволюция от самодельных инструментов к персональным компьютерам. Обсуждение неформальных истоков джаза, блюза и рок-н-ролла.
  • Обо всём
    История лейтенанта Эдварда Робертса, который прошел путь от радиоконструкторов до создания первого ПК, Альтаира 8800, преодолевая скептицизм и трудности.
  • Обо всём
    Статья исследует подъём и эволюцию компьютерной индустрии, подчеркивая трансформацию от увлечённых энтузиастов к корпоративному доминированию гигантов, таких как IBM и Microsoft.
  • Обо всём - M.M.A
    Исследование проекта сэра Клайва Синклера после продажи бренда Sinclair, с описанием характеристик ноутбука Z88 от Cambridge Computers.
  • Обо всём - Alex Noman
    Обсуждение проблем рынка ПО в 1997 году для ZX Spectrum, с акцентом на отсутствие нового софта и нежелание пользователей платить.
  • Анонс - M.M.A
    Анонс игры 'Чёрный Ворон' от В. Медноногова, с акцентом на геймплей, технические сложности и будущие особенности.
  • Анонс - POWer, UnBEL!EVER, Alex Noman, Unbeliever
    Обсуждение упадка в разработке для ZX Spectrum, обзоры новых игр и утилит, анонсы будущих проектов.
  • Ликбез
    Обзор FidoNet, некоммерческой компьютерной сети, часто называемой предшественником Интернета, с подробностями о её происхождении, росте и уникальных культурных аспектах.
  • Железо - Paul Atrides
    Инструкции по подключению модема 'АЛЕГРО' к компьютерам с нормальным портом #FF, включая аппаратные изменения для корректной обработки сигналов.
  • Железо - Paul Atrides
    Подключение Hayes-совместимых модемов к ZX Spectrum, с акцентом на модели Scorpion и Pentagon, подробности модификаций оборудования. Приведены инструкции по блокировке внутренних портов и согласованию сигналов. Пошаговый процесс и технические тонкости объяснены.
  • Железо - Игорь Юдин, M.M.A
    Обсуждение перехода с дисков 5.25' на 3.5' для ZX Spectrum, включая проблемы установки и решения для совместимости с существующим ПО.
  • Погурмим
    Сатирическая история о Зайце, который потерял свой дом из-за хитрой Лисы, и о том, как Петух помог ему его вернуть.
  • Погурмим
    Юмористический рассказ о приключениях Малыша и Карлсона с технологиями, проводящий параллели между компьютерами и повседневной жизнью, заканчивающийся комическим недоразумением с компьютером AMIGA.
  • Реклама
    Обсуждение политики бесплатной рекламы Oberon, каталога программ и оборудования для ZX Spectrum, и вовлеченности в игры жанра ADVENTURE.
  • Реклама - Kano
    Рекламная кампания Magic Soft и RPSG в России для мультимедийных компьютеров Amiga, предлагающая выставки, продажи и консультации. Они подчеркивают преимущества Amiga над другими системами, описывают различные модели и предоставляют прайс-листы. Сотрудничество с «Компьютеры для населения» для дистрибуции и услуг.