Микро ЭВМ "ZX Spectrum" 1969 г.

Демонстрационные программы на машинном языке - выполнение пользовательской программы, написанной на машинном языке.


ГЛАВА 6. ДЕМОНСТРАЦИОННЫЕ ПРОГРАММЫ НА МАШИННОМ ЯЗЫКЕ.

6.1 Введение.

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

Хотя в главе 5 перечислены все команды системы команд микропроцессора Z8 0, но при этом не указывалось, как эти команды можно использовать в конкретных программах, написанных на машинном языке микро-ЭВМ "СПЕКТР". В данной главе приведен набор демонстрационных программ , показывающих достаточно простое использование различных команд.

В главе 8 будут приведены дополнительные рекомендации по программированию на машинном языке, которые позволяют использовать преимущества цветного дисплея с высоким разрешением микро-ЭВМ "СПЕКТР".

Вначале рассмотрим следующие три вопроса.

1. Выбор области ЗУПВ.

Пользовательская программа, написанная на машинном

языке

должна распределять нужное количество ячеек памяти. В микро-ЭВМ "СПЕКТР" имеется несколько доступных для использования областей памяти, но в демонстрационных программах данной главы используется область "свободной памяти" с произвольной выборкой, которая начинается в ячейке с десятичным адресом 32000. При необходимости можно сохранить (команда SAVE) или загрузить (команда LOAD) программу, написанную на машинном языке из этой области на магнитную ленту или с магнитной ленты в эту область данных.

2. Ввод байтов машинного кода.

Единственный способ ввода машинного кода в микро-ЭВМ

"СПЕКТР" - использовать команду POKE. Операндами этой команды могут быть десятичные числа, двоичные числа или выражения.

Поэтому разрешена любая из следующих строк: 10 POKE 32000,201

или:

10 POKE 3 2 0 0 0,BIN 11001001

или:

10 LET A=2 01:POKE 32000,A

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

Рекомендуется описывать команды машинного языка с помощью шестнадцатиричных кодов. Везде в данной главе используется приведенная ниже программа шестнадцатиричного загрузчика:

10 LET D=3 20 0 0: REM Hex Loader (16-ричный загрузчик) 20 DEF FN A(A$,B)=CODE A$(B)-4 8-7*(CODE A$(B) > 57) 30 DEF FN C(A$)=16*FN A(A$,1)+FN A(A$,2) 40 READ A$: IF A$ <> " " THEN POKE D,FN C(A$): LET D=D+1: GO TO 40

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

Например, выполнение

50 DATA "00" , "01","02"," " RUN

приведет к тому, что в ячейку 32000 будет помещен 0, в ячейку 32001 - 1, и в ячейку 32002 - 2.

3. Выполнение пользовательской программы, написанной на машинном языке.

С помощью команды языка Бейсик "USR номер" можно остановить выполнение управляющей программы микро-ЭВМ "СПЕКТР" и начать выполнение пользовательской программы, написанной на машинном языке. Вначале следует убедиться , что операнд команды USR адресует нужную ячейку , что пользовательская программа завершается командой RETURN (если пользователь действительно хочет вернуться к интерпретатору языка Бейсик) и что значение , возвращаемое командой USR , обработано соответствующим образом.

Обычно используются следующие формы команды:

PRINT USR n

выводит на печать десятичное содержимое двойного регистра BC;

RANDOMIZE USR n использует генератор случайных чисел;

LET A=USR n использует указанную переменную;

Полезность каждой из этих форм зависит от конкретных условий.

Демонстрационные программы приводятся в формате ассемблера; при обработке списка DATA используется шестнадцатиричный загрузчик , приведенный на стр. 92.

Порядок рассмотрения команд - как в главе 5.

6.2 Программы.

Группа 1. Команда NO OPERATION

(НЕТ ОПЕРАЦИИ)

Это очень простая команда , и демонстрационная программа, написанная на машинном языке, сдержит всего одну или всего несколько строк NO OPERARIN с последующей командой RETURN.

На приведенной ниже распечатке ассемблера показана простейшая программа, написанная на машинном языке, в которой используется единственная команда NO OPERATION .

Адрес Машинный Мнемокод Комментарии

код

7D0 0 00 NOP единственн.

7D01 C9 RET команда

возврат к Бейсику

Программа 1. NOP

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр . 92 .

5 0 DATA "00","0 9"," "

6 0 LET A=USR 32000

70 PRINT "The NOP mashine code program has been execude succesafully"

(выполнение написанной на машинном языке программы NOP успешно завершилось).

Советуем читателям хорошо изучить программу 1, прежде чем перейти к следующим разделам.

Группа 2. Команды для загрузки в регистры констант

По команде "USR номер" возвращается в виде 16-ти разрядного положительного числа-содержимое двоичного регистра B^ и по команде PRINT это число преобразуется к десятичному виду (из интервала 0-65535) .

В приведенной ниже распечатке ассемблера с помощью команд этой группы константы загружаются в регистры B и C; рассматриваемой программе, написанной на машинном языке, соответствует приведенная дальше программа, написанная на языке Бейсик.

Адрес Машинный Мнемокод Комментарии код

7D0 0 0600 LD B,+00 обнулить регистр В

7D02 0E00 LD C,+XX пользователь вводит число

7D04 C9 RET "Возврат к Бейсику"

В программе 2 используются обе команды-"LD B,+dd" и "LD C,+dd"; пользователь должен ввести нужное число как операнд последней команды.

Программа 2 LD B+dd, LD C,+dd

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр . 92 .

50 DATA "06","00","0E","00"

51 DATA "09"," "

60 INPUT "Enter a value for the C register (0-255 only)",N

(введите число для регистра С (из интервала 0-255)) 70 CLS

80 POKE 32003,N

90 PRINT AT 10,0,-"The C rehister now holds", CHR$ 32;USR 32000

(теперь в регистре С содержится)

100 GO TO 60

следующей программе иллюстрируется использование команды "LD BC,+dddd".

Начнем с распечатки Ассемблера.

Адрес Машинный Мнемокод Комментарий

код

7D00 010000 LD BC,+xxxx Пользователь вводит

нужные значения 7D03 C9 RET "Возврат к Бейсику"

В программе 3 используется команда "LD BC,+dddd"; юльзователь должен ввести нужное число. Для его загрузки соответствующую ячейку памяти по команде POKE следует зыделить старшую и младшую части этого числа.

Программа 3. LD BC,+dddd

Строка 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 5 0 DATA "01","00","00" 51 DATA "09"," "

60 INPUT "Enter value far the BC register pair

(0-65535 only)";CHR$ 32;N 70 CLS

80 POKE 3 2 0 01,N-256* INT (N/256): POKE 32002,INT (N/256) 90 PRINT AT 10,0 "BC register pair now holds"; CNR$ 32;USR 32000 100 GO TO 60

Группа 3. Команды копирования и обмена содержимого

Действие команд копирования содержимого одного регистра з другой регистр можно показать, загрузив вначале константы

в регистры ,отличные от B и C, а затем скопировав эти константы в регистры B и C для возврата пользователю.

Ниже приводится программа, демонстрирующая применение команды "LD C,L".

Адрес Машинный Мнемокод Комментарии

код

7D0 0 06 00 LD B,+00 Обнулить регистр С

7D02 3E 00 LD L,+XX Ввести числа

7D04 4D LD C,L Копировать "L в C"

7D05 C9 RET "Возврат к Бейсику"

В программе 4 пользователь должен ввести в регистр L число, которое затем возвращается в регистр C.

Программа 4. LD C,L

Строки 10-40. Шестнадцатиричный загрузчик,приведенный на стр.92 .

50 DATA "06 ","00" ,"2E","00"

51 DATA "4D","C9"," "

60 INPUT "Enter a value for the L register

(0-255 only)";CHR$ 32;N 70 CLS

80 POKE 32003,N

90 PRINT AT 10,0;"The C register nopw holds";

CHR$3 2;USR 32000 100 GO TO 50

Советуем читателям попытаться использовать другие команды из этой группы. Например,допустимыми являются:

50 DATA "06","00","0E","00"

51 DATA "65","7C","57","5F"

52 DATA "4B","C9"," "

Посмотрели ли Вы, что здесь делается? В программу 4 можно также включить команду "EX DE,HL"; например, это можно сделать следующим образом.

Адрес Машинный Мнемокод Комментарии

код

7D0 0 2600 LD H,100 Обнулить регистр H

7D02 2E0 0 LD L,+XX Ввод числа

7D04 EB EX DE,HL Пересыл. числа в DE

7D0 5 42 LD B,D Пересыл. сод-D в B

7D0 6 4B LD C,E и E в C

7D07 C9 RET "Возврат к Бейсику"

Для этого можно определить следующий список.

50 DATA "26 ","00","2E","00"

51 DATA "EB","42","4B"

52 DATA "C9"," "

который следует использовать в программе 4.

Последние две команды этой группы -"EX AF,A'F'" и"EXX". В микро-ЭВМ "СПЕКТР" пользователь может без каких-либо ограничений использовать альтернативный набор регистров, кроме регистров H' и L', в которых сохраняется адрес возврата к Бейсику. Читатель может попытаться включить эти команды в программу 4.

Например:

50 DATA "06 ","00","2E","00"

51 DATA "08","D9","D9","08"

52 DATA "4D","C9"," " или что-либо более сложное.

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

Группа 4. Команды загрузки в регистры данных, скопированных из ячейки памяти

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

В первой программе раздела показан случай прямой адресации. Ячейке 31999 присваивается название STORE; для извлечения содержимого ячейки STORE используется команда "LD A,(addr)". В первой строке распечатки ассемблера название STORE присваивается ячейке с шестнадцатиричным адресом 7CFF (десятичный эквивалент 31999) .

STORE равно 7CFF

Адрес Машинный Мнемокод Комментарии код

7D0 0 0600 LD B,+00 Обнулить регистр B

7D02 3AFF7C LD A,(STORE) Извлечь текущ.знач.

7D0 5 4F LD C,A Переслать сод-A в C

7D0 6 C9 RET "Возврат к Бейсику"

В программе 5 пользователь должен ввести число для загрузки в ячейку STORE . Затем программа использует приведенны] выше блок для возврата этого числа пользователю.

Программа 5. LD ,A(addr)

^роки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92.

5 0 DATA "06", "00"

51 DATA "3A","FF","7C"

52 DATA "4F","C9"," "

60 INPUT "Enter a value for location STORE (0-255 only)";

CHR$ 3 2;N 70 CLS

8 0 POKE 31999,N

9 0 PRINT AT 10,0,"The location STORE now hjlds";

CHR$ 32;USR 32000 100 GO TO 60

Во второй программе раздела показан случай косвенной адресации. В ней до использования команды "LD 0,(HL) адрес ячейки STORE загружается в двойной регистр HL.

STORE равно 7CFF

Адрес Машинный Мнемокод Комментарии

код

7D0 0 06 00 LD B,+00 Обнулить регистр B

7D02 21 FF 7F LD HL,+STORE Занести в двойной

регистр НL адрес ячейки STORE

7D0 5 4E LD C,(HL) Извлечь текущее

значение

7D06 C9 RET Возврат к Бейсику

В программе 6 пользователь, как и ранее, должен ввести число для занесения в ячейку STORE.

Программа 6. LD C,(HL)

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 . 5 0 DATA "06","00"

51 DATA "21","FF","7C"

52 DATA "4E","C9"," "

Строки 60-100. Как в программе 5.

В третьей программе раздела показан случай индексной адресации. Ячейке с десятичным адресом 31936 (шестнадцатиричный эквивалент 7СС0) присваивается имя BASE, а ячейке STORE-десятичный адрес 31999 (шестнадцатиричный эквивалент 7CFF) рассматривается как ячейка BASE+3F.Затем для получения текущего содержимого STORE используется команда "LD C,(IX+d)".

BASE равно 7CC0

STORE равно BASE+3F

Адрес Машинный код Мнемокод Комментарии

7D0 0 06 00 LD B,+00 Обнулить рег-B

7D02 DD 21 C0 7C LD IX,+BASE Установить сод-IX

7D0 6 DD 4E 3F LD C, (BASE+3F) Извлечь тек.знач.

7D0 9 C9 RET Возврат к БЕЙСИКУ

В программе 7 пользователь , как и ранее, должен ввести число для загрузки в ячейку STORE .

Программа 7. LD C,(IX+d)

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр.92 .

5 0 DATA "06","00"

51 DATA "DD","21","C0","7C"

52 DATA "DD","4E","3F"

53 DATA "C9"," "

Строки 60-100 как в программе 5.

В программе 7 используется двойной регистр IX,однако легко ввести изменения для использования двойного регистра IY. Для этого в распечатке ассемблера следует вместо IX поставить IY и вместо D0-FD.Заметим, что пока в регистре IY содержится новое значение, маскируемое прерывание невозможно.

Группа 5. Команды загрузки в ячейки памяти данных, скопированных с регистров или констант.

Команды этой группы позволяют пользователю загружать в ячейки с заданными адресами данные, скопированные с регистров или константы. Как и ранее, возможны 3 случая - прямая адресация и индексная адресация.

В первой программе раздела показан случай прямой адресации. В команде "LD (addr),A" используется прямой адрес ячей-ки-31999 (шестнадцатиричный эквивалент 7CFF), которой присвоено название STORE.

STORE равно 7CFF Адрес Машинный код Мнемокод Комментарии

7D0 0 3E 00 LD A,+xx Введите число

7D02 32 FF 7C LD (STORE),A Введите текущее значение

в ячейку STORE 7D0 5 C9 RET "Возврат к Бейсику"

В программе 8 пользователь,как и ранее, должен ввести число для пересылки в ячейку STORE. При выполнении программы

написанной на машинном языке , используются RANDOMIZE USR 32000, и содержимое STORE возвращается пользователем по команде PEEK 31999.

Программа 8. LD (addr),A

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр.92 .

5 0 DATA "3E", "00"

51 DATA "32","FF","7C"

52 DATA "C9"," "

60 INPUT "Enter a value for location STORE (0-255 only)";CHR$3 2;N

70 CLS

80 POKE 3 2 031,N: RANDOMIZE USR 32000

9 0 PRINT AT 10,0; "The location STORE now holds";CHR$3 2;

PEEK 3999

100 GO TO 60

Во второй программе раздела показан случай косвенной адресации. двойной регистр HL адресует ячейку STORE, и для пересылки содержимого этой ячейки используется команда "LD (HL),E"

STORE равно 7CFF

Адрес Машинный Мнемокод Комментарии код

7D0 0 1F 00 LD A,+xx Введите число

7D02 21 FF 7C LD HL,STORE Установить в двойном регистре HL адрес STORE

7D05 73 LD (HL),E Произвести пересылку

7D0 5 C9 RET Возврат к Бейсику

Программа 9.LD (HL),E

Строки 10-4 0.Шестнадцатиричный загрузчик, приведенный на стр . 92 .

5 0 DATA "1E","00"

51 DATA "21","FF","7C"

52 DATA "73","C9"," "

Строки 60-100 - как в программе 8.

В третьей программе раздела используется индексная адресация . Ячейке 32061 (шестнадцатиричный эквивалент 7D3D) присваивается имя BASE , в силу чего ячейка STORE рассматривается как "BASE-3E".

BASE равно 7D3D STORE равно BASE-3E

Адрес Машинный код Мнемокод Комментарии

7D0 0 3E 00 LD A,+xx Введите число

7D02 DD 21 3D 7D LD IX,+BASE Установить в двойном

регистре IX адрес BASE 7D0 6 DD 77 C2 LD (IX-3E),A "IX-3E" берется как

"IX+C2"

7D0 9 C9 RET "Возврат к Бейсику"

В программе 10 пользователь, как и ранее, должен ввести число для пересылки в ячейку STORE и считывания обратно по команде PEEK 31999.

Программа 10. LD (IX+d),A

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 . 5 0 DATA "3E","00"

51 DATA "DD","21","3D","7D"

52 DATA "DD","77","C2"

53 DATA "C9"," "

В программах 5-10 используются однобайтовые номера, но читатель легко может изменить эти программы для работы с двухбайтовыми номерами и соответствующими командами для двойных регистров

Группа 6. Команды сложения. Команды этой группы позволяют пользователю складывать числа (ADD), увеличивать имеющееся значение на единицу (INC) и складывать числа с переносом (ADC).

В первой программе раздела показан случай использования команды "ADD A,B".

Адрес Машинный Мнемокод Комментарии

код

7D0 0 0 0 NOP Для последующего использования

7D01 3E 00 LD A,+xx ввести в указанные регистры

7D03 06 00 LD B,+xx числа 7D05 80 ADD A,B Выполнить сложение

7D0 6 06 00 LD B,+00 Обнулить регистр В

7D08 4F LD C,A Пересылка результата

7D0 9 C9 RET Возврат к Бейсику

В программе 11 пользователь должен ввести два числа.Эти числа пересылаются в регистры А и В и складываются по правилам абсолютной двоичной арифметики.Результат возвращается с помощью функции USR.

Программа 11. ADD A,B

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр. 92 .

5 0 DATA "00","3 E","00"

51 DATA "06","0 0","80"

52 DATA "06","00","4F"

53 DATA "0C"," "

60 INPUT "Enter a first value (0-255)";CHR$32;F 70 INPUT "Enter a second value (0-255)";CHR$32;S 80 CLS

90 POKE 3 2 0 02,F: POKE 32004,S

100 PRINT AT 10,5;F;CHR$32;"ADD";CHR$32;S;CHR$32;

"=";CHR$3 2;USR 32000 110 GO TO 60

Во второй программе раздела используется команда "INC

BC" .

Адрес Машинный Мнемокод Комментарии

код

7D0 0 01 0 0 0 0 LD BC,+xxxx Ввести в регистр BC

нужное значение 7D03 03 INC BC Увеличить его на 1

7D04 C9 RET "Возврат к Бейсику"

В программе 12 пользователь должен ввести число из интервала 0-65535. Это число разбивается на старшую и младшую части и по команде POKE пересылается в ячейки с шестнадцатиричными адресами 7D01 и 7D02. Затем содержимое двойного регистра BC увеличивается на 1, и полученное значение возвращается с помощью функции USR.

Следует отметить своеобразие ввода числа 65535.

Программа 12.

Строки 10-40. Шестнадцатиричный загрузчик, приведенный на стр.92 . 5 0 DATA "01 ","00","00" 51 DATA "03","C9"," "

60 INPUT "Enter a value (0-65535)";CHR$32;N 70 POKE 3 2 0 02,INT(N/256) 80 POKE 32001,N-256*INT(N/2 56) 90 CLS

100 PRINT AT 10,0;N;"Increments to give";

CHR$3 2;USR 32000 110 GO TO 60

В третьей программе раздела показано использование команды "ADC A,B". (Это такая же программа , как и 11* единственное изменение- вместо "ADD A,B" включено "ADD A,B").

Адрес Машинный мнемокод Комментарии код

7D00 37 SCF Установить флаг ПЕРЕНОС

7D01 3E 00 LD A,+xx Ввести заданное число

7D03 06 00 LD B,+xx в регистры.

7D05 88 ADC A,B Сложение с переносом

7D06 06 00 LD B,+00 Обнуление регистра B

7D08 4F LD C,A Переслать результат

7D09 C9 RET "Возврат к Бейсику"

Этой программе соответствует написанная на Бейсике программа 13 , в которой пользователь должен вести два числа для сложения с переносом. Флажок ПЕРЕНОС при этом всегда установлен .

Посмотрите, что произойдет в результате замены команды SCF на AND A (шестнадцатиричный код A7), которая сбрасывает флажок ПЕРЕНОС.

Программа 13. ADS A,B

Строки 10-40. Шестнадцатиричный загрузчик, приведенный

на стр.92 . 5 0 DATA "37","3E","00"

51 DATA "06","00","88"

52 DATA "06","00","4F"

53 DATA "C9"," "

60 INPUT "Enter a first value (0-255)";CHR$32;F 70 INPUT "Enter a second value (0-255)";CHR$32;S 80 CLS

90 POKE 32 0 02,F:POKE 32004,S

100 PRINT AT 10,0;"With carry set ";CHR$32;F;

CHR$3 2;"ADC";CHR$3 2;S;CHR$3 2;"=";CHR$3 2;USR 32000

Группа 7.Команды вычитания

Команды этой группы позволяют пользователю производить обычное вычитание (SUR), уменьшение на 1 (DEC) и вычитание с переносом (SBC).

В первой программе раздела приведен пример использования команды "SUB B". Определяемое после вычитания значение флажка ПЕРЕНОС (0 или 1) сохраняется в ячейке STORE.

STORE равно 7CFF Адрес Машинный Мнемокод Комментарии

код

7D0 0 0 0 NOP Для последующего

использования

7D01 3E C0 LD A,+xx Ввести в регистры

7D03 06 00 LD B,+xx два числа

7D05 90 SUB B Вычитание

7D0 6 06 00 LD B,+00 Обнулить регистр В

7D08 4F LD C,A Пересылка результата

7D0 9 3E 00 LD A,+00 Обнуление регистра А

7D0B CE 00 ADC A,+00 Сложение с переносом

7D0D 32 FF 7C LD (STORE),A Пересылка в STORE

значения флажка ПЕРЕНОС

7D10 C9 RET "Возврат к БЕЙСИКУ"

Этой программе соответствует написанная на Бейсике программа 14, в которой пользователь должен ввести значения для регистров А и В.Значение флажка ПЕРЕНОС возвращается по команде PEEK 31999.

Программа 14. SUB B

Строки 10-4 0.Шестнадцатиричный загрузчик, приведенный на стр.92 .

5 0 DATA "00 ","3E","00"

51 DATA "06 ","00","90"

52 DATA "06","00","4F"

52 DATA "3E","00","CE","00"

54 DATA "32","FF","7C"

55 DATA "C9"," "

60 INPUT "Enter a first value (0-255)";CHR$32;F

70 INPUT "Enter a second value (0-255)";CHR$32;S

80 CLS

90 POKE 32 0 02,F:POKE 32004,S

10 0 PRINT AT 10,0;F;CHR$32;"SUB";CHR$32;S;CHR$32;"=";

CHR$3 2;USR 3 2 0 0 0;CHR$32;"With carry";CHR$32;"set";

AND PEEK 319 9 9;"reset";AND NOT PEEK 31999

110 GO TO 60

Используйте эту программу с числами, которые "больше", "меньше" и "равны".

Во вторую подгруппу входят команды DEC.

Действие команды "DEC BC" можно показать, внеся соответствующие изменения в программу 12. Для этого нужно изменить строки 51 и 10 0 следующим образом.

51 DATA "CB","C9"," "

10 0 PRINT AT 10,0;N;CHR$32;"Decrement to give";

CHR$3 2;USR 32000

В третью группу входят команды SBC.

Действие команды "SBC A,B" можно показать, внеся соответствующие изменения в программу 14. Для этого нужно изменить строки 50,51 и 100 следующим образом.

5 0 DATA "37","3E","00" - для установки флажка ПЕРЕНОС или

5 0 DATA "A7","3E","00" - для сброса флажка ПЕРЕНОС

51 DATA "06","00","98" - шестнадцатиричный код команды

"SBC A,B"-98.

В строке 100 следует изменить SUB на SBC.

Испробуйте эту программу с числами, которые "больше", "меньше" и "равны".

Заметим, что результаты выполнения команды SUB и команды SBC при сброшенном флажке ПЕРЕНОС не отличаются.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
TOP TEN - Лучшая десятка игр.
Авторы - об авторах журнала.
Статьи - "FAQ "ZX-Traders"
Enlight'97 - Неофициальные итоги Enlight'a.
Реклама - Реклама и объявления ...

В этот день...   21 ноября