ZX Format #07: Кодинг для начинающих: Руководство по ассемблеру

О кодинге для начинающих.

music by COOPER (C) CREATOR product 1997
_______________________________

Итак, данная статья предназначена именно для тех, кто уже начал изучать ассемблер и хочет как-то продолжить, но не знает как именно. Возможно, я смогу Вам немного помочь.

Для начала обговорим некоторые технические термины: бит - это самая маленькая единица информации, может быть равна 0 или 1. Байт - это 8 бит, сложенных вместе, может принимать значение от 0... 255. Слово = 2 байта - может принимать значения от 0... 65535. Такт - это единица исчисления времени для процессора, например, как для нас секунды, только у процессора такты. Каждая команда выполняется за определенное количество тактов (самая быстрая за 4 такта). Вот, так сказать, к примеру, некоторые команды:

командакод такты

NOP #00 4
LD HL,NN #21 N N 10
LD A,N #3E N 7
LD A,(NN) #3A N N 13
SRL (IX+S) #DD #CB S #3E 23

Узнать количество тактов, за которое выполняется команда можно из некоторых книжек, например: "Как написать игру на ассемблере" или "Програмирование в машинных кодах на языке ассемблера" Инфорком 93 год. У меня на столе лежит вторая и надо сказать, что помогает довольно часто. Однако, почти во всех таблицах встречаются мелкие ошибки.

Вот, вроде бы мы и установили начальную базу и теперь можем продолжать углублять свои знания. Первое, что необходимо (естественно) - знать команды ассемблера.

Второе: надо бы знать Basic или какой иной язык программирования, иначе придётся совсем туго...

Регистры процессора

- используется только как рег. пара
+ можно использовать по одному
* можно использовать только по одному

AF + AF'+ IR * SP -
BC + BC'+ IX +
DE + DE'+ IY +
HL + HL'+ PC -

PC - как бы и регистром не является в смысле пользы для нас, он указывает на адрес работы процессора, то есть в каком адресе процессор исполняет команду. Он нужен самому процессору, например при исполнении команды CALL #nnnn процессор берёт регистр PC и скидывает на стек, чтобы знать куда вернуться. IR - Это не регистровая пара, а регистры одиночки, I - указывает на вектор прерывания (при IM 2, при IM 1 не используется), а регистр R нужен для регенерации ОЗУ, он увеличивается с исполнением каждой команды. A - Арифметический регистр, с ним можно делать всё, что угодно. Команды ADD, ADC SUB, OR, XOR, AND, CPL работают с ним и ещё одним данным (число или регистр). HL - регистр можно использовать как арифметический, но двухбайтовый. Также через него можно задавать адрес данных, например LD A,(HL), в регистр A будет помещено данное из ячейки памяти с адресом, содержащимся в HL. Или осуществлять косвенную адресацию, например JP (HL), будет осуществлён переход на адрес, содержащийся в регистровой паре HL. DE, BC - почти одинаковы, только регистр B используется как счётчик в операциях DJNZ #nnnn. А регистровая пара DE легко меняется с HL одной командой EX DE,HL. У этих регистров, в основном, общее назначение.

F - флаговый регистр. Содержит информацию о прошедших событиях в следующей форме:

бит имя содержание

0 C флаг переноса, он устанавливается в зависимости от того, было ли переполнение регистра. Например, если сложить 10 и 20, то мы получим 30, это не выходит за 0 или за 255, и бит 0 будет сброшен (находится в 0). Если мы из 10 вычтем 20 то получим 246 (так как у процессора нет отрицательных чисел) и бит 0 будет установлен в 1. То же случится если в сумме будет больше 255.

1 N флаг сложения/вычитания
2 P/V флаг четности/переполнения
3 не используется
4 H флаг полупереноса
5 не используется
6 Z флаг нуля, он устанавливается в зависимости от того, был ли получен результат, равный нулю. Например, если из 10 вычесть 10, то он установится в 1, если из 10 вычесть 20, то будет сброшен.
7 S флаг знака

На первых порах вам понадобятся только два флага - флаг переноса и флаг нуля. Остальные флаги используются редко даже очень опытными программистами.

IX, IY - индексные регистры. То есть с их помощью просто организовать доступ с таблице или массиву. Способ индексации следующий: например, в регистры A, B, C, D и E надо загрузить элементы массива (TAB) 0, 1, 2, 3 и 4.

LD IX,TAB ; устанавливаем ; регистр на начало таблицы. Также ;можно использовать и регистр IY, но ;осторожней, его использует Basic для ;своих нужд.
LD A,(IX+0)
LD B,(IX+1)
LD C,(IX+2)
LD D,(IX+3)
LD E,(IX+4)

SP - указатель стека. Он адресует некую часть памяти, отведённую под некий склад данных. В нём удобно хранить адреса/данные которые надо временно сохранить. Его же используют команды CALL, RET, EX (SP), HL... Если, например, не хватает регистров, и надо где-то сохранить промежуточный результат, то делаем, например, PUSH HL, и регистровая пара HL сохраняется на стеке, при этом регистр SP уменьшается на 2. Не стоит забывать, что если вы что-то сохранили на стеке, то надо эти данные снять до выхода из процедуры/программы, иначе команда RET получит вместо адреса возврата последнее положенное в стек значение.

В процессоре есть два набора регистров, альтернативный набор можно использовать когда надо обработать большое количество информации и не хватает основного набора. Так как одновременно ими пользоваться нельзя, существует команда для их быстрого обмена. Альтернативные HL' DE' BC' подменяются текущие HL DE BC, по команде EXX, регистр AF меняется на AF' отдельной командой EX AF, AF'. Эти два набора ничем друг от друга не отличаются и определить, какой из них альтернативный, невозможно.

Редакторы

Для написания программ на ассемблере нужен редактор (ассемблер) их сейчас великое множество TASM, ALASM, MASM, PASM ZXASM, XAS... Я пишу в XAS'e версии 7.446, собственно ничего лучше я пока не видел, но каждому своё, посмотрите по возможности всё и выберите себе свой. А для ознакомления с редактором желательно прочитать его описание. Каждый из них весьма своеобразен (чисто функционально, так что писать можно в любом из них, но с разными удобствами) так что, комментарии здесь излишни.

Как начать.

Я лично начал писать на ассемблере в тот же день, как стал изучать его. Дело было так: я уже хорошо разбирался в Basic'e и написал на нём командер и базу данных. Скорость работы (особенно у базы данных) была просто отвратительная. И я засел за ассемблер, постепенно изучая его, переводил строки Basic'a в команды машин. кода. В итоге получилась двойная выгода - сделал быстрым командер (по тем временам) и изучил основы работы ассемблера. Естественно, в начале я использовал ПЗУ Basic'a и его подпрограммы, в этом нет ничего страшного, это даже во многом вам поможет. Не стоит сразу же пытаться всё делать на ассемблере, вам же легче будет.

Начали...

Так, теперь пора приступать к переводу какой-либо программы на Basic'e в ассемблер, используя ПЗУ и его процедуры. Берите книжечку с их описанием (процедур Basic'a) и начинайте.

Если у вас нет ничего подходящего, то можно писать одновременно и на Basic'e, и на ассемблере. Нежелательно использовать в работе дробные числа, синусы и т.д., так как работа с ними в ассемблере несколько отличается от Basic'a и сложна для начинающих.

Приведу некоторые разъяснения по поводу перевода Basic'a в ассемблер. По сути, регистры процессора являются аналогами переменных в Basic'e. Циклы FOR... NEXT так же легко заменяются на использование регистров/ячеек памяти (косвенной адресацией), либо LD B, N... DJNZ LABEL. Вызовы подпрограмм GOSUB... RETURN эквивалентны CALL... RET, GOTO N = JP #NNNN, и так далее...

Начиная писать на ассемблере, мы избавляемся от ограничений Basic'a, от его "опеки" и получаем процессор в полное владение. Например, процессор понятия не имеет, что такое экран, для него это такой же кусок памяти, как и все остальные, так что работать с экраном придётся вам самим.

Продвигаемся...

Если вы уже умеете писать, используя ПЗУ Basic'a, то всё отлично. Надо двигаться дальше. Будем понемногу заменять ПЗУшные процедуры своими.

Вот, к примеру, печать символа на экране - одна из самых нужных процедур. Ниже приведен один из самых быстрых вариантов для печати символов 8x8. Сделать печать строк, используя эту процедуру, не составит никакого труда. Вызывать же процедуру надо следующим образом:

в регистре A - код символа для печати, в регистре DE - координаты в экране

координаты начинаются из верхнего левого угла)

;Процедура печати символа, код символа
;в регистре A, координаты в регистре DE

PRINT LD L,A ;Отсчитаем нужное
LD H,0 ;количество байт в
ADD HL,HL ;фонте, так как
ADD HL,HL ;один символ занимает
ADD HL,HL ;8 байт, просто умножаем
;код нужного символа на 8 и прибавляем адрес нахождения фонта
LD BC,15360
;Адрес фонта в ПЗУ, можете создать свой фонт и указать здесь
;его адрес !НО! Будьте внимательны, эта процедура начинает пе-
;чатать с кода символа #00, а стандартные фонты (768 байт) с
;кода символа 32. Так что, если будете использовать такой
;фонт, то поставьте первой строкой в процедуре PRINT SUB 32

ADD HL,BC
CALL POSIT
;Вычисляем реальный адрес в экране по координатам
LD B,8
PRINT1 LD A,(HL)
LD (DE),A
INC HL
INC D
DJNZ PRINT1
RET

;Процедура перевода координат знакоместа на экране в реальный
;адрес, координаты содержатся в регистре DE. D - строка Е - стол-
;бец, на выходе в DE - адрес

POSIT LD A,D
AND 7
RRCA
RRCA
RRCA
OR E
LD E,A
LD A,D
AND #18
OR #40
LD D,A
RET

Если надо, то можно печатать и с цветами. Для этого надо после вызова процедуры POSIT поставить: CALL COLOR и процедура печати с цветом готова.

COLOR LD A,D
AND %00011000
RRCA
RRCA
RRCA
OR #58
LD B,A
LD C,E
LD A,(color) ; ячейка памяти,
LD (BC),A ; где хранится
RET ; байт цвета

Печать строки. Для этой процедуры надо указать следующие данные: в регистре HL - адрес текста, который будет печататься, в конце текста должен обязательно стоять байт 0, для нахождения конца (можно заменить на любой другой). В регистре DE - координаты в экране.

PR_LINE LD A,(HL)
AND A
RET Z
PUSH DE
CALL PRINT
POP DE
INC E ; приращение координаты
; для печати слева направо
JR PR_LINE

Печать чисел, тоже не редко встречающаяся задача. Ее работа заключается в переводе реального числа в символьную строку.

К примеру, возьмем байт для перевода его в символьный вид. Для этого надо выделить три переменные, так как он может принимать значения от 0 до 255. Мы возьмём регистры B, C, A. B - сотни, C - десятки, A - единицы. Итак, помещаем нужный байт для перевода в регистр A. После выхода из процедуры, будем иметь символьное представление числа в регистрах B, C и A, а способ их вывода на экран выбирайте сами.

NUM_LINE
LD B,48
LD C,B
CP 200 ; сотни есть
JR C,SM_200
LD B,"2"
SUB 200
SM_200 CP 100
JR C,SM_100
INC B
SM_100 CP 10 ; десятки есть
JR C,SM_10
INC C
SUB 10
JR SM_100
SM_10 ADD A,48 ; единицы
RET

Вот и всё, для перевода больших чисел ничего кардинально не изменится, просто увеличится количество циклов внутри. Естественно, это не самый быстрый способ, но один из самый доступных для понимания.

Далее, Вы можете взять какой-либо отладчик и посмотреть, как сделаны процедуры в ПЗУ. Попробуйте их переписать.

Теперь я думаю, что надо бы пройтись по самым узким местам программы (по быстродействию):
1. циклы - они, безусловно, едят много времени, и в них очень не рекомендуется что-либо сохранять на стеке, надо по мере возможности, использовать другие регистры. Кстати о регистрах, очень удобно использовать в качестве оных LX, HX, LY, HY, если все остальные уже заняты. Но и тут не без трудностей, некоторые ассемблеры не могут этого пережить (изменения регистров IX, IY), да и регистр IY лучше не изменять, потом пригодится, если можно, то лучше обойтись IX. Кстати, говоря о регистрах, если вы ещё не в курсе, то регистр IX можно использовать как два регистра HX - старший байт, LX - младший. В основном, книжки об этом умалчивают. Одни команды с применением половинок IX и IY, образуются довольно легко - достаточно к команде, работающей с регистром H или L добавить префикс #DD для HX и LX, #FD для HY и LY.

Итак, для примера возьмем такой цикл, в котором заняты все регистры, кроме IX и приходится пользоваться стеком: (преимущества регистров A, C, D, E, L, H даже не стоит доказывать)

LD B,100 ; 7
LOOP PUSH BC;11
...
POP BC;10
DJNZ LOOP ; 13

Итак, работа цикла будет занимать: (99*13)+7+(100*(11+10))+7= 3401 такта.

Заменяем регистр В на LX...

LD LX,100 ; 8
LOOP
...
DEC LX ; 8
JP NZ,LOOP; 10

Теперь получается: 100*(8+10)+8=1808 тактов! разница очевидна примерно 1.88 раз.

Также в циклах следует избегать команд JR x, nnnn поскольку они занимают 12 тактов, если условие выполняется и 7, если нет. В циклах это не целесообразно.

2. разветвление программы: допустим, у вас есть число и в зависимости от него надо перейти к соответствующей процедуре, это можно реализовать так:

LD A,(NUMBER) ; 13
CP 0 ; 7
JR Z,NUMBER0 ; 12/7
CP 1 ; 7
JR Z,NUMBER1 ; 12/7
CP 2 ; 7
JR Z,NUMBER2 ; 12/7
...

а можно так:
LD A,(NUMBER) ; 13
AND A ; 4
JR Z,NUMBER0 ; 12/7
DEC A ; 4
JR Z,NUMBER1 ; 12/7
DEC A ; 4
JR Z,NUMBER2 ; 12/7
...

Так же заметно, что второе быстрее. Тут я заменил CP 0 на AND A, потому что они одинаково влияют на флаги, а AND A быстрее выполняется (также для проверки на 0 можно использовать OR A). В этой процедуре лучше использовать команду JR, чем JP, так как вероятность того, что сработает конкретная ветвь, гораздо меньше чем 50%, а именно так следует подбирать данные команды (не забудьте, что JR может 'прыгать' только до 128 байт, больше никак и если процедуры находятся на большом расстоянии, то от JP никуда не деться)

3. опрос клавиатуры: Если надо опросить 1... 10 клавиш, то можно прибегнуть к прямому чтению из портов клавиатуры:

LD A,#7F
IN A,(#FE)
;сейчас младшие пять бит регистра A будут иметь значения клавиш : 0 - бит space, symb shift, m, n, b если бит равен 0, то клавиша нажата, если 1, то нет. Ни в коем случае не сравнивайте данные с числом! Старшие 3 бита могут быть какими угодно и к тому же если будет нажата не одна клавиша ?... теперь проверим, например, кнопку space, её значение в нулевом бите рег. A
BIT 0,A
JP Z,PRESS_SPACE
;а можно и так, использовав команду ротации RRCA, она работает так: флаг C>76543210>C, то есть наш результат будет во флаге CARRY
RRCA
JP NC,PRESS_SPACE

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

биты с 0.4 порт

caps shift, z, x, c, v #fe 254
a, s, d, f, g #fd 253
q, w, e, r, t #fb 251
1, 2, 3, 4, 5 #f7 247
0, 9, 8, 7, 6 #ef 239
p, o, i, u, y #df 223
enter, l, k, j, h #bf 191
space, symb shift, m, n, b #7f 127

4. Если возможно, то заменяйте сохранения на стеке использованием альтернативного набора регистров.

Теперь мы рассмотрим процедуру построения точки на экране, она уже будет посложнее. Она может быть медленной - 130-150 тактов на точку, или быстрой, но более сложной, с таблицей.

Кстати, а что такое таблица, и с чем её едят?

Таблица - это куча байтов (или слов), которые содержат нужную информацию с быстрым доступом. Это я, конечно, сказал не специально, просто по другому мне не сказать. Вот посмотрите на 'быструю точку'. Ей нужна маленькая инсталляция, т.е. перед использованием требуется запустить процедуру INSTALL (один раз), после чего можно пользоваться процедурой построения точки сколько угодно. Процедура INSTALL как раз создаёт таблицу. С использованием таблицы отпадает необходимость что-то считать, а ведь именно подсчет и занимает большую часть времени.

INSTALL ; процедура инсталяции
LD HL,PLOTT ; адрес таблицы
; в 1024 байта для точки, младший байт адреса должен быть равен #00! например #F0 или #BC00
LD DE,#40 ; адрес экрана
LD B,E
LD C,#80 ;*
LD HX,4
LOOP3 LD LX,8
LOOP2 LD A,8
LOOP1 LD (HL),E
INC H
LD (HL),D
INC H
LD (HL),B
INC H
LD (HL),C
RRC C
DEC H
DEC H
DEC H
INC HL
INC D
DEC A
JR NZ,LOOP1
INC B
LD A,B
AND 31
LD B,A
LD A,D
SUB 8
LD D,A
LD A,E
ADD A,#20
LD E,A
DEC LX
JR NZ,LOOP2
LD A,D
ADD A,8
LD D,A
DEC HX
JR NZ,LOOP3
RET

PLOT ; процедура построения точки
LD L,C
LD H,PLOTT/256
LD A,(HL)
INC H
LD D,(HL)
INC H
LD L,C
ADD A,(HL)
LD E,A
INC H
LD A,(DE)
OR (HL)
; OR (HL) можно заменить на XOR (HL) для наложения по принципу XOR, или на AND (HL) для стирания точек, но тогда уже надо заменить регистр C на входе процедуры INSTALL с #80 на #7F
LD (DE),A
RET

Как видно из процедуры PLOT, она почти ничего не считает, на входе у неё координаты точки (в B 0.191 в C 0.255) и процедура в зависимости от входных данных берёт нужные байты из таблицы. Попробуйте сами разобраться из чего состоит таблица, это, несомненно, пойдёт на пользу.

Список таких или подобных процедур можно вести довольно долго, начинайте сами разбираться. Что вам нужно от процедуры, как её сделать быстрее и т.д. А я приведу вам математическую библиотечку нашей группы. Несомненно, она во многом вам поможет. Так что дерзайте. А если вам надо узнать что-то по-подробней, то пишите, а я постараюсь ответить на все ваши вопросы.

(C) Copyright by Angel 2 MAIN CODE

Список процедур:

1. DIV - деление

INPUT : HL <-- что
DE <-- на что
OUTPUT: HL = HL/DE

портятся DE, HL, A

2. KARE - возведение в квадрат

INPUT : DE <-- что
OUTPUT: HL = DE*DE

портятся DE, HL, BC, A

3. MUL16 - умножение

INPUT : DE <-- что
BC <-- на что
OUTPUT: HL = DE*BC

портятся DE, HL, BC, A

4. RAS - квадратный корень

INPUT : HL <-- из чего
OUTPUT: HL = SQR (HL)

портятся DE, HL, BC, A

5. MHLA - умножение

INPUT : HL <-- что
A <-- на что
OUTPUT: HL = HL*A

портятся DE, HL, A

6. FACT - факториал

INPUT : A <-- факторал чего
OUTPUT: HL = A!

портятся DE, HL, A

7. MULT_N - возведение в степень

INPUT : BC <-- что
A <-- степень
OUTPUT: HL = BC^A

портятся DE, HL, BC, A

8. PER - радианы -> градусы

INPUT : DE <-- радианы
OUTPUT: HL = (DE*PI)/180

портятся DE, HL, BC, A

9. PER_INV - градусы -> радианы

INPUT : DE <-- градусы
OUTPUT: HL = (DE*180)/PI

портятся DE, HL, BC, A

10. SIN - f - функция синуса

INPUT : C <-- угол, C = (0,180)
OUTPUT: A = SIN (C)

портятся DE, HL, BC, A

11. COS - f - функция косинуса

INPUT : C <-- угол, C = (0,180)
OUTPUT: A = COS (C)

портятся DE, HL, BC, A

+ таблица TABLESC - для расчета f-ций SIN и COS

;+(C)-+
;| HL = HL/DE |
;+(C)-+

DIV LD A,D
OR E
RET Z
PUSH DE,BC
LD A,1
DIV_0 PUSH HL
SBC HL,DE
JP C,HL0
SBC HL,DE
JP C,DIV_1
DIV_01 INC A
SLA E
RL D
POP HL
JP DIV_0
DIV_1 POP HL
LD BC,0
DIV_2 AND A
JP NZ,DIV_3
LD H,B
LD L,C
POP BC,DE
RET
DIV_3 SBC HL,DE
JP NC,DIV_4
ADD HL,DE
DIV_4 CCF
RL C
RL B
SRL D
RR E
DEC A
JP DIV_2
HL0 CP 1
JP NZ,DIV_01
POP HL
POP BC,DE
LD HL,0
RET

;+(C)-+
;| HL = DE*DE |
;+(C)-+

KARE LD B,D
LD C,E

;+(C)-+
;| HL = DE*BC |
;+(C)-+

MUL16 LD HL,0
MUL16_2 LD A,B
OR C
RET Z
SRL B
RR C
JP NC,MUL16_0
ADD HL,DE
MUL16_0 SLA E
RL D
JP MUL16_2
RET

;+(C)-+
;|HL = SQR (HL) |
;+(C)-+

RAS LD A,H
OR L
JR Z,RAS4
RAS1
LD A,H
AND A
JP NZ,RAS11
LD A,L
CP 1
JP NZ,RAS11
LD HL,1
RET
RAS11 LD B,H
LD C,L
SRL B
RR C
RAS_1 PUSH HL
LD D,B
LD E,C
CALL DIV
ADD HL,BC
SRL H
RR L
PUSH HL
LD D,B
LD E,C
SBC HL,DE
JP NC,RES_10
ADD HL,DE
EX DE,HL
SBC HL,DE
RES_10 LD A,H
AND A
JP NZ,RAS_0
LD A,L
CP 2
JP NC,RAS_0
POP HL,BC
RET
RAS_0 POP BC,HL
JP RAS_1
RAS_4 LD HL,0
RET

;+(C)-+
;| HL = HL*A |
;+(C)-+

MHLA AND A
JR Z,M1H ;FASTED bY CREATOR
EX DE,HL
LD HL,0
M2H SRL A
JP NC,M3H
ADD HL,DE
M3H SLA E
RL D
AND A
JP NZ,M2H
RET
MH1 LD H,A
LD L,A
RET

;+(C)-+
;| HL = A! |
;+(C)-+

FACT LD HL,1
EX DE,HL
FACT_ AND A
RET Z
PUSH AF
CALL MULT
EX DE,HL
POP AF
DEC A
JP FACT_

;+(C)-+
;| HL = BC^A |
;+(C)-+

MULT_N LD D,B
LD E,C
MULT_N0 DEC A
AND A
JP Z,MULT_N1
PUSH AF
CALL MUL16
POP AF
EX DE,HL
JP MULT_N0
MULT_N1 EX DE,HL
RET

;+(C)-+
;| HL = (DE*PI)/180|
;+(C)-+

PER LD BC,314
CALL MUL16
LD DE,180
CALL DIV
RET

;+(C)-+
;| HL = (DE*180)/PI|
;+(C)-+

PER_INV LD BC,180
CALL MUL16
LD DE,314
CALL DIV
RET

;+(C)-+
;| A = SIN (C) |
;+(C)-+

SIN LD A,90
CP C
JP NC,SIN0
RLA
SUB C
LD C,A
SIN0 LD E,C
LD D,0
LD HL,TABLESC
ADD HL,DE
LD A,(HL)
RET

;+(C)-+
;| A = COS (C) |
;+(C)-+

COS LD A,90
CP C
JP NC,COS0
RLA
SUB C
LD C,A
COS0 LD E,C
LD D,0
LD HL,TABLESC+90
SBC HL,DE
LD A,(HL)
RET

TABLESC DEFB 0, 1, 3, 5, 7, 9, 10, 12, 14
DEFB 16, 17, 19, 21, 23, 24
DEFB 26, 28, 29, 31, 33, 34, 36
DEFB 37, 39, 41, 42, 44, 45, 47
DEFB 48, 50, 52, 53, 54, 56, 57
DEFB 59, 60, 62, 63, 64, 66, 67, 68
DEFB 69, 71, 72, 73, 74, 75, 77, 78
DEFB 79, 80, 81, 82, 83, 84, 85
DEFB 86, 87, 87, 88, 89, 90, 91, 91
DEFB 92, 93, 93, 94, 95, 95, 96
DEFB 96, 97, 97, 97, 98, 98, 98, 99
DEFB 99, 99, 99, 100, 100, 100
DEFB 100, 100, 100

Оглавление издания: ZX Format #07

  • От авторов
    Обновление информации о SMUC, проблемы с дистрибуцией и планы на будущие выпуски ZX Format. Авторы затрагивают устаревшие данные о SMUC и проблемы распространения ZF-6. В предстоящем выпуске будут описания игр и новые проекты.
  • Аторы журнала
    Контактная информация и данные об редакционной команде для ZX-Format No.7. Предоставляются почтовые и электронные адреса, а также контактные телефоны. Информация о доступности их веб-сайта и конкретные инструкции по контактам.
  • Содержание номера
    Обзор значимых программных новинок на петербургском рынке этой осенью. Детальное описание игр, советы по программированию и проекты оборудования. Интервью, философские притчи и письма читателей дополняют выпуск.
  • Игрушки - Welcome
    Обзор новинок ПО для ZX Spectrum, включая игры как 'Los Angeles Drugs Bust' и 'Jungle Warfare'. Каждое описание игры предоставляет информацию о графике, геймплее и функциях. Охватываются различные жанры от экшена до стратегии, демонстрируя разнообразие программного обеспечения.
  • Игрушки - Алешкин А.В.
    Статья описывает игру 'TAI-PAN' как аркадно-экономическую игру, действие которой происходит на Востоке XIX века, с акцентом на торговле и выживании среди пиратов и опасностей. В ней рассматриваются игровые механики, такие как торговля товарами, управление финансами и навигация по морям на разных судах. Несмотря на занимательный сюжет и интерфейс, игра не получила широкой известности в России.
  • Игрушки - Soft
    Капризный рассказ в фантастическом мире, где цвета беседуют с Последним, персонажем, рассказывающим истории о древних людях, кодерах и загадочном прошлом. История исследует темы языка, перевода и создания 'Последнего' среди фантастических существ, таких как летающие бегемоты и морские жирафы. Она представляет собой художественный нарратив с юмористическими элементами, сочетая научную фантастику с сатирой.
  • Игрушки - Alex ASP
    Исследуется пародия на «Властелин колец» Толкина под названием «Тошнит от колец» от Delta 4. Текст ссылается на адаптации, юмористические приключения персонажей, таких как Фордо и Бимбо, и различающиеся версии Delta 4 за годы. Упоминаются ожидаемые приквелы и выдержки из переписки с Фергусом МакНейлом из Delta 4.
  • Игрушки - Гил-Гелад
    Статья представляет собой подробное руководство по работе с интерфейсом 3D Construction Kit для ZX Spectrum. Объясняются параметры меню для управления файлами, настройки игры и условий в игре. Также рассматривается создание объектов, их редактирование и реализация логики в программе.
  • Программистам - Дмитрий Рудовский
    Завершение описания команд ББ и советы по их использованию. Подробно описывается использование команды CLOCK для управления временем и будильником на ZX Spectrum. Также объясняется команда SORT для сортировки массивов и вводятся новые логические и математические функции.
  • Программистам - Angel
    Введение в программирование на ассемблере для начинающих с освещением базовых концепций и команд. Подробное объяснение регистров и флагов процессора с примерами. Предоставлены практические советы по переходу с Basic на ассемблер.
  • Программистам - GreenFort
    Обсуждение быстрых вычислений на ассемблере для задач, таких как векторная графика и астрономия. Описываются процедуры двоичного деления и умножения с примерами для разных размеров байтов. Подчеркивается адаптивность этих методов для повышения точности.
  • Программистам - TP, Stinger
    Подробное техническое описание формата файла Mod для музыкальной композиции на ZX Spectrum, с акцентом на структуру и смещения данных для названия, инструментов и паттернов.
  • Программистам - Research
    Статья описывает возможности и ограничения программы Convert, сосредотачиваясь на ее использовании для конвертации изображений в формат BMC. Включены технические детали о функциях программы, таких как методы дитеринга, вывод в формате спрайтов и экрана, и удаление лишних точек. Также кратко обсуждается исходный код X-Color и его возможные применения.
  • Обзор
    Статья обсуждает демо-пати ENLiGHT'97, состоявшуюся в Санкт-Петербурге 24 августа 1997 года, с участием платформ Spectrum, Amiga и ПК. Мероприятие собрало около 1100 делегатов, что привело к переполненности и техническим проблемам, из-за чего второй день был отменен. Несмотря на эти проблемы, мероприятие в целом было приятным, и есть надежда на его повторение в 1998 году.
  • Обзор
    Обзор выставки VideoFAIR в Манеже с акцентом на видео- и аудиооборудование. Amiga-service и различные компании представили свои технологические достижения в системах видеомонтажа и вещания. Примечательные инновации включают 3D дисплеи с лазерным сканированием и профессиональные аудио решения.
  • Железо - Nemo
    Обсуждение экспорта технологий KAY для децентрализации производства Spectrum. Выделяются потенциальные выгоды и проблемы местного производства. Акцентируется внимание на гарантии качества и системах поддержки.
  • Железо
    Статья описывает разработку новой материнской платы Scorpion, нацеленной на улучшение графики, скорости и совместимости с современными периферийными устройствами, такими как клавиатуры и мыши IBM. Представлена плата GMX (Graphic Memory Extension), предназначенная для модернизации существующих моделей Scorpion до возможностей новой материнской платы. Плата GMX предлагает значительные улучшения в объеме памяти, графике и скорости обработки, при этом сохраняя совместимость со стандартами ZX Spectrum и Pentagon.
  • Железо
    Статья предлагает детальный обзор двух популярных у пользователей ZX Spectrum в Санкт-Петербурге аудиоусилителей. В ней подчеркиваются преимущества и характеристики низковольтного усилителя 2 X 2W и автомобильного усилителя 2 X 22W. Также в статье представлен прайс-лист и инструкции по заказу через фирму 'Nemo'.
  • Примьера
    Статья описывает улучшения и особенности версии 1.1 Turbo Assembler для ZX Spectrum. Подчеркиваются отличия от версии 1.0, такие как исправления ошибок, изменения размера экрана и добавленные функции, например, редактор строк и проверка синтаксиса. Также подробно рассматривается распределение памяти и дается руководство по использованию функций редактора и компилятора.
  • Примьера - STS
    Описание Riff Tracker MOD-редактора для General Sound, его возможностей и функциональности. Подробные инструкции по редактированию и управлению сэмплами. Указаны ограничения текущей версии и ожидаемые улучшения.
  • Примьера - Paul Atrides, Alex Noman
    Презентация Oberon Creative Pack, состоящего из ZX-WinWord и Sprite Cutter. ZX-WinWord — текстовый редактор, совмещающий текст и графику с расширенными функциями. Sprite Cutter позволяет создавать и обрабатывать спрайты в различных форматах.
  • Примьера
    Презентация второй демоверсии игры Headball от ZX-Masters, обсуждение ее особенностей и улучшений с момента первой демки. Игра предлагает режим для двух игроков, четыре уровня, три типа снарядов, различные опции и настройки сложности компьютера. Наличие Turbo режима и улучшенная синхронизация и анимация делают ее уникальной среди других игр для Spectrum.
  • Интервью - Ruster
    Интервью с Digital Reality о текущих проектах, таких как DOOM и Paradise Lost. Обсуждение проблем и прогресса в разработке игр. Предварительный просмотр их представлений на мероприятии ENLiGHT.
  • Интервью - Ruster
    Интервью с участниками недавно сформированной группы EXTREME. Они работают над демо для платформ Spectrum и Amiga и обсуждают своих участников и деятельность. Интервью также касается состояния сцены Amiga в Москве.
  • Интервью - Борис Прытков
    Интервью с самарскими энтузиастами Spectrum о достижениях и вызовах. Акцент на развитие сообщества и выпуск журнала Oberon. Усилия по созданию сети Spectrum и конвертации игры WALKER.
  • Интервью - Борис Прытков
    Статья представляет собой интервью с членами группы Flash inc., обсуждающими свои проекты для ZX Spectrum и PC, включая музыкальный редактор с инновационным интерфейсом и новый мультиколорный графический редактор.
  • Интервью - Михаил Акимов
    Интервью с московской группой Progress, обсуждение их текущей работы над демо для Spectrum, планов на будущее на Amiga и мнения о российской демосцене.
  • Интервью - Михаил Акимов
    Интервью с Феликсом об изменениях в технологическом ландшафте, о стойкой привлекательности Amiga несмотря на доминирование PC и его работе над 'Винни Пух - 2' для Spectrum.
  • Интервью - Ruster
    Интервью со Slash о мероприятии ENLiGHT, включая вопросы спонсорства, поведение участников и качество музыки и демо. Обсуждение текущего состояния рынков Spectrum и Amiga. Комментарии о музыкальных трекерах и будущем аппаратного развития.
  • Интервью - Ruster
    Интервью с В. Медноноговым после ENLiGHT'97, обсуждение впечатлений от события, будущее Spectrum и его текущий проект 'Чёрный Ворон'. Медноногов делится своим мнением о новом оборудовании и разработке ПО, а также о важности авторских прав. Он также обсуждает свои планы на будущие проекты и проблемы, с которыми сталкивается в разработке игр.
  • Здесь был ты
    Сатирическое руководство по обретению власти и невидимости с помощью магических ритуалов и жевательной резинки Orbit.
  • Здесь был ты - Saggitarius
    Созерцательная новелла о существующем пути человека после встречи с загадочным человеком, предлагающим устройство, называемое Стоп-Краном. Через воспоминания главный герой размышляет о своей жизни, уникальности и желании вырваться из общественных ограничений. В конечном итоге он сталкивается с моральной дилеммой использования Стоп-Крана для преодоления времени и существования.
  • Почта - Eagle Soft
    Критика программного обеспечения ZX-Spectrum, выделение ограничений текущих программ и рекомендация удаления устаревших инструментов. Обсуждение ограничений ассемблерных программ и необходимость более эффективных ассемблеров, таких как M80. Оценка текущих музыкальных и графических редакторов, с акцентом на избыточность некоторых приложений.
  • Почта
    Обсуждение вопросов читателей о распространении и содержании ZX Format. Ответы включают информацию о приобретении номеров и технические сведения о компьютере KAY-256. Журнал также отвечает на критику статьи о рынке.
  • Почта
    Реклама освещает кампанию по распространению программного обеспечения XL Design Inc., предлагая игры, такие как 'Плутония', и готовящиеся к выпуску, например, 'Mortal Kombat'. Контроллеры мыши рекламируются с юмористическими акцентами и деталями цен. Студия ЛОГРОС предлагает широкий ассортимент программного обеспечения и периферии с возможностью локальных и удаленных покупок.
  • Разное - Александр Сысоев
    Обсуждается создание RPG-игры группой OBERON, вдохновленной 'Eye of Beholder'. Описан юмористический сюжет игры, действие которого происходит в далекой галактике, и борьба с захватчиками на планете Агима. Группа приглашает музыкантов, художников, кодеров и сценаристов для совместной работы.
  • Разное - Viator
    Описание разработки нового графического редактора под названием STATE OF THE ART для ZX Spectrum, направленной на улучшение существующих редакторов, таких как ART-STUDIO и ARTIST-2. Команда AVALON, вдохновленная отзывами сообщества художников SPECCY, включает функции редакторов на Amiga и PC, а также учитывает специфические запросы пользователей. Основные особенности включают удобный интерфейс, улучшенный режим увеличения, расширенные функции работы с фигурами и окнами, а также оптимизированную производительность.
  • Разное
    Обсуждение повышения потребительского качества компьютеров Spectrum без изменения их технических характеристик. Предлагаются улучшение существующей поддержки, разработка идеологии платформы и структурные изменения. Статья также затрагивает потенциал электронных книг и их коммерческую жизнеспособность.
  • Amiga Club - Максим Петров
    Статья описывает восхищение автора компьютером Amiga, подчеркивая его эстетические и технические достоинства по сравнению с другими платформами. Описываются программные опыты автора на Amiga, выделяя её эффективность и впечатляющие возможности новых аппаратных обновлений. В заключение статья размышляет об уникальном сообществе и увлеченности энтузиастов Amiga.