Дисковая операционная система TR DOS 1993 г.

Раздел 8 - информация о TR-DOS.


1.15. ИНФОРМАЦИЯ О TR-DOS

1. TR-DOS занимает 112 байтов памяти с произвольным доступом.

2. Без присоединенной TR-DOS RAM пользователя начинается с адреса
23755, при присоединенной TR-DOS RAM:пользователя начинается с адреса
23867.

3. TR-DOS использует сектора дйска дйя^шзя&я данных и; программ
(см раздел 1), если количество байтов превышает256, используется другой
сектор. Это продолжается до тех пор, шжа.ие происходит запдоь:йй?го фай-
ла. Для записи 522 байтов потребуется 3 сектора. Третий. сектор!содержит
только 10 байтов. Только эти 10 байтов будут загружены <?;М^^;ОЬта^хпиеся
пустые 246 байтов не загружаются, чтобы не затереть другае данные, которые
могут находится в памяти SOS.

4. В дополнении к 112 байтам RAM ТКн{ЮЁ: Также использует буфер в
256 байтов при осуществлении доступа к диску. Этот буфер имеет динами-
ческое распределение. При выполнении больного количества команд TR-
DOS сначала сдвигает программу BASIC (если таковая существует) вверх с
целью создания буфера. После завершения команды, программа BASIC пе-
редвигается назад к своей исходной позиции. Эта операция происходит нез-
аметно.

5. Команда MOVE требует 4К (минимум):йз;SPECTRUM RAM в каче-
стве рабочего пространства. Если MOVE вьшолняётся^ a i программа еще в
памяти, необходимо перевести компьютер в исходное:с0стшние.и затем вы-
полнить MOVE. Перевод компьютера в исходное состояние Mo^tiSbni осу-
ществлен с помощью возврата к SOS и ввода RANDOMIZE USR! или с
помощью системного переключателя переводом ег&з положение "фброс".

6. На одном диске может находится до 128 файлов.

2. АДАПТАЦИЯ ПРОГРАММ ВЩЩ№
В СИСТЕМЕ TR-DOS

2.1. КАК БОРОТЬСЯ СгБЕИШКШр1

Загрузчики программы, с которыми вы .можете встретиться, можно раз-
делить на три категории: загрузчики на Бейсике (загрузка производится опе-
ратором LOAD), загрузчики в машинных кодах!и: смешагшые загрузчики.

Самое простое и приятное, с чем вы можетеcixS^^ это безусловно,
загрузчики на Бейсике. Их, в свою очередь можно рйдёлить на открытые и
закрытые.

Открытые загрузчики — это тагаё зщруэтики, когда нажимаешь BREAK
после загрузки первого файла (т.е.; Загрузчика)»: затем ENTER, и на приятном
голубом фоне сицим цветом появляется: :;

10 INK 1: PAPER 5: BORDER 5:25199||:

20 LOAD ""SCREE^hLQAD ""СОЙЁ Ч!=I i 11 ill I1

30 RANDOMIZE и§Й'^7бё;|или::что-то в'ёТбй роде.

Я надеюсь, что не ущемЛю'^ше самолюбие, если все-таки покажу, как
такую программу адаптировать на

10 INK 1: PAPER 5: BQ.RDER 5: CLEi#f5:199

20 RANDOMIZE USR 15ШГ REM:..LOAD ':j'namerC0DE 16384

25 RANDOMIZE USR|5619:::ЙЁМ;1!::ША0 "name2"C0DE

30 RANDOMIZE USR ШдШ^'

где camel и namel ^-1 названия, .которые вы присвоите последующим
файлам»::!:!::::.. ..........

В бшвшм случаев названия файлов можно оставить старыми, но
это по нескольким причинам.

Во-первых, названия файлов в. кассетной версии могут содержать симво-
лы или комбинации сиЖалов, которые будут восприниматься системой TR-
DOS неправильно (так, например, встретив оператор LOAD ИВ:SCREEN",
система будет загружать файл SCREEN с дисковода^В", а отнюдь не файл
"BtSCREEN", как вам этого хотелось).

Во-вторых, если на кассете файлов с названием SCREEN может находи-
тся ровно столько, сколько их туда влезет, то на диске такой файл может
содержаться только один; тагам образом, желательно, чтобы названия всех
файлов программы была связаны с названием самой программы (например
rambo sc, rambo cd и r^ljlli Кроме того, считается хорошим тоном называть
основной фавд:^^ужаемьш) заглавными буквами, а остальные файлы —

Полагая^:nto необходимые файлы пока еще на кассете, можно рекомен-
довать-изменить их названия на желаемые, воспользовавшись обыкновенным
копировщиком (TF COPY, COPY DE LUXE, COPY COPY и др.).

После этого вам останется скопировать файлы на диск при помощи спе-
циального котшр^йш^а. Лучше всего воспользоваться копировщиком Pro-
grammable : Copier::v2.0 (PCOPffiR) или AMCOPIER. В этом случае вам,
во-первых, не придется изменять названия файлов заранее (можно будет из-
менить названия оператором1 ;NEW системы TR-DOS после копирования
файлов на диск), .а вр^вторьк,' можно быть уверенным, чпго файл и диск не
будут испорчены можно добиться использованием копировщика Дере-
щука).

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

Записав всю инфорШЦШ^а^ можете смело нажимать

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

Пусть, например, копировщик сообщил вам следящее:
файл SCREEN — стартовый адрес 49152,.длина.69.12
файл CODE — стартовый адрес 2520&:ШШ 40335, тогда переделайте
первоначальный вариант загрузчика .слф^щим образом

10 INK 1: PAPER 5: B0RDEfil:6^!^lL^AR 25199

20 LOAD " "SCREENS %'

21 RANDOMIZE USR 15619: REM: SAVEj^shaky scJ!:

CODE 16384,6912

30 LOAD ""CODE

31 RANDOMIZE USR 15619: REM: SAVE:."shaky mn"

CODE 25300,40335
40 STOP т.е. после каждого оператора затрузвд Pi ДЗйфЙ • вставьте Опера-
тор записи на диск, указав длину, данную.: копи^вйдаом. Если загрузчик
специально не определяет стартовый адрес заг^кн; то воспользуйтесь адре-
сом, который вам любезно предоставил копировщик, в противном случае,
используйте адрес, по которому файл загружается с ленты. В данном примере
копировщик указал стартовый адрес первого файла равным 49152, а загрузка
производится оператором LOAD ""SCREENS, что является эквивалентом
оператора LOAD ""CODE 16384, 6912, поэтому файл необходимо записы-
вать с адреса 16384, а не 49152.

На этом, как правило, ваши мучения должны зжончиться. Единственной
серьезной проблемой при переделке программ с таю»* • ^йфузчиком может
стать то, что цвет фона и листинга будут совпадать, и; вам пр!йдйся:изменить
текущий цвет оператором INK либо PAPER, но даже этого можно :шбежать,
воспользовавшись оператором MERGE вместо оператора LOAD при загрузке
файла загрузчика. В этом случае программа не запустится, а появится сооб-
щение О ОК, 0:1. Единственное, чего не следует забывать;, *гш .таким методом
загрузки можно воспользоваться только на чистой машине (Шс бёгате за тря-
пкой, я имею ввиду, что вы только что отпуртйЩ кнопку сброса).

Другие проблемы, которые могут возникнуть; рассмотрены ниже.

Буду надеяться, что с этим вопросом уступила ЦйЩ^.^сность даже у
того, кто ничего не понял.

Теперь можно обсудить сложности, ксгёорые могут возникнуть при встре-
че с закрытым загрузчиком на БЕЙСИКе."

Ваше счастье, если просмотрев листинг протраммы; вы увидите то, что
было показано в предыдущем примере, но на практик гораздо чаще попа-
дается что-нибудь вроде:

О REM S.S Captain, why don'tjiyou gdJfMCkijyp.MijSelf?
0 DRAW USR VAL "24500", deBhUGi Ibeh'Mj-

0 REM FLASH DRAW???Aw COPY М:ййи ewp более страшное.
He хотелось бы.-делать из этой программу! философское эссе об интер-
претации операторов и строк; Бейсик-систеМЫ, йо некоторые теоретические
моменты придется разобрать/1;;:;;: !.; .

Защищать Бейсик-программу 6f Й р&мотра и редактирования можно не-
сколькими способами. Рассмотрим наиболее популярные из них.

Вы, вероятно, уже сталкивались с таким фокусом, как нулевая строка,
которую нельзя ни удалить, ни
;$Ш&ать для редактирования. Управиться с
такой защитой можно;двумя способши:

Первый способ заЛЦфч^сй в том,; <гто вы загружаете одну из многочис-
ленных сервисных программ, которая, позволяет перенумеровать строки, по-
сле вьщ&лйрия которой вы получите вполне доброкачественный листинг (в

плане ibrcyi^iwI hy^epbK строк и т.п.).

Второй способ: ;бшее интересен, но наиболее эффективен только в том

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

Для начала небольшое теоретическое вступление о хранении строк Бей-
сика в памяти, На следующей диаграмме показана строка Бейсика:

номер строки

длина строки

операторы

перевод

(2 байта)

(2 байта)

Бейсика

строки

Вас интересуют два первых байта строки, а именно байты, задающие
номер строки. Вы уже, вероятно, поняли, что изменить номер строки проще
простого непосредственным вводом числа оператором РОКЕ, но куда вво-
дить?! Вот этим вопросом мы сейчас и займемся.

Определить начало Бейсик-программы (т.е. начало самой первой строки
Бейсик-программы) можно, воспользовавшись системной переменной Бей-
сик-интерпретатора. Она находится по адресу 23635 и занимает 2 байта.
Таким образом, получить адрес первого байта первой строки Бейсик-про-
граммы можно, выполнив оператор:

PRINT РЕЕК 23635+256*РЕЕК 23636

Если к вашему агрегату не подключено никакой периферии, то на этане
вы увидите число 23/55. В том случае, когда вы имели контакт с TR-DOS,
адрес будет 23867.

Итак, адрес, по которому можно изменить номер начальной строки Бей-
сик-программы, обнаружен: это, к примеру, адрес 23755. Теперь надо уяс-
нить, что же все-таки нужно вводить по этому адресу. Номер строки можно
установить следующим образом:

РОКЕ 23755,NM-256*INT (NM/256): РОКЕ 23756, INT (NM/256) где
NM — номер строки, который вы хотите присвоить начальной строке Бей-
сик-программы.

Это идеальный способ переопределения строки, можно поэксперименти-
ровать с номерами строк более 9999 — вы получите весьма оригинальные
результаты.

Как показывает практика, необходимость задавать номер строки более
255 возникает редко. В этом случае можно воспользоваться более простым
оператором:

РОКЕ 23756,NM где NM — номер строки не более 255 (еще раз хочу
напомнить, что последние два примера приведены исходя из того, что Бей-
сик-программа начинается с адреса 23755). Этим оператором изменяется то-
лько младший байт номера строки.

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

Со строками разобрались, теперь попытаемся разобрать другое способы
защиты Бейсик-программ.

Другим, не менее распространенным способом является добавление в
строки Бейсика различных контрольных кодов. Такими контрольными ко-
дами могут являться коды управления INK, PAPER, AT, TAB и другие. Пол-
ную таблицу контрольных кодов вы сможете найти в любом приличном
описании SPECTRUM-Бейсика.

Большинство таких контрольных кодов можно удалить клавишей DE-
LETE, вызвав строку для редактирования. Поочередно нажимайте клавишу
передвижения курсора вправо и DELETE. Рано или! поздно вы увидите впо-
лне осмысленную информацию. .^iiliJIlii!::::;:..

Все это хорошо пройдет лишь тогда, когда авторами защита нспрльзо-

вались корректные контрольные коды. Но бывает фхуже. Когда БтейЬйк-ин-
терпретатор просит вывести листинг программы Ш-м цветом начиная с
координаты 240,86, он просто-напросто прекращаем : йывод на экр№, а при
попытке редактирования начинает орать истошным гшреом]; Bee; ёш попы-
тки кричать можно прекратить оператором ГОКЕ 23608,0. Теперь можно
действовать по старой схеме.

Снова немного теории.

ДХлся: начала надо объяснить разницу между контройьЁШ кодом INK и
оператором INK. Когда при вьюоде листинг^ на экран Бейсйк-система встре-
чает оператор INK, она честно выводит: & j же встречается контро-
льньгй код INK, то следующий за ним байт оп^дшшефадет "чернил" и вывод
продолжается другим цветом. Контрольный код ШК:й оператор INK разли-
чаются своими кодами в таблице АЗСЗЬ и их нельзя путать. Все выше ска-
занное справедливо для PAPER, Ж Необходимо учесть
только то, что координаты вывода[на экр^Ь (койтрйьньш код AT) устанав-
ливают двумя последующими байтами, а не одним.

Еще одна крайне неприятная вещь, которая С может вам помешать спра-
вится с Бейсик-профаШой;ярн адаптации н^кйС^ — это недостаток памяти.

Такая ситуация может возникнуть.. во-первых из-за того, что TR-DOS
резервирует 112 байт для своих систешпж- переменных, а во-вторых, опера-
торы загрузки с диска могут занимать в пкмяти значительно больше места,
чем с ленты (ну, если Ьы привыкли исчислять память мегабайтами, слово
"значительно" беру назад), в-тршьи*г:jсистеме TR-DOS необходим буфер не
менее 256 байт для запит/чтёния файлов, вывода каталога и т.п.

Так йди иначе, этого бывает достаточно для того, чтобы компьютер уди-
вил вас-шо^цением:
Outi'Of

No room for"n'^;!;!;!;;:;;.::...

или чем-либо поДбёйЫй»;!!::;;Р

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

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

10 CLEAR 24250

20 LOAD " "SCREEN&nijiiiHIillli

30 LOAD ""Mjip11"™'

40:LpABjlpiji::^296,256

50 SbSM IZE USR Hm

60 L#D ""CODE j!

70 RANDOMIZE US#;24576
Без вы написали загрузчик для этой программы с диска:

10 CLEAR Ш^ёб

20 RANDOMIZE USIUffll&EM: LOAD "bomb sc"C0DE 16384

30 RANDOM LOAD "bomb mn"C0DE

40 RANDOM I a|pR 15619: R|k;: LOAD "bomb pb"C0DE 23296

50 RANDOM IZ^ USR 23296::::{j!!

60 RANDOMIZE USR:;lg:iiP№M:;-LOAD "bomb is"C0DE

70 RANDOMIZE иЩЩгб
и, запустив программу, вместо жрм получили сообщение:

Out of memory 20:1.» ...^нШрР^""4!:.
Христа ради, не тя!JMep #: фбезьянеУ попробуйте разбить загрузчик на
две части. '!

Это можно сделать следующем образом. Первая здсть будет выглядеть

Так: „::::!1::!ШН:

10 CLEAR 24250 ..a&iif Р^"4'

20 RANDOMIZE USR 15619: ВЕМ:.Ш1ршЬ sc"C0DE 16384

30 RANDOMIZE USR 15619: ШрШ'"bomb mn"C0DE

40 RANDOMIZE USR 15619: RBi: LOAD "bombififtV
Вторая часть, которая брег иметЬ: Лазвание на!: диске "bomb bs", будет
выглядеть так:

10 RANDOMIZE USR 23296
20 RANDOMIZE USR 15619: REM: ОД0 "bomb ls"C0DE

30 RANDOMIZE USR 24576 ..««ISlllillb.

Выполняя загрузку таким образом, компьютер заэдуЗМ! ; :fSak*iitoa Первый
загрузчик, которому места в памяти вполне досг$Т:0*Ш;;:?йём, после выпол-
нения заданных операций, он загрузит втсЩйрзЩрЧЙк, которому, в свою
очередь, места в памяти также достаточно. Второй загрузчик закончит эпо-
пею с загрузкой и запустит вашу программу.

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

В предыдущей части было подробно описзано как обращаться с загруз-
чиком на Бейсике уже после того, как вы получили лиЩёг :5^1рузчика (даже
в том случае, коща полученное нечто слабо напок^ает МЬтйот)л; Вполне
законно у вас могли возникнуть вопросы о том, как получить этот-листинг
(нечто), ведь далеко не всегда, нажав на BREAK:;после загрузки;первого
файла, вы получаете листинг (нечто). Результата пробного вмешательства
в нормальный ход событий могут быть совершенно нёпрйз^азуемы; Начиная
с того, что программа сбросится, и кончая тем, что она повесятся шш обзовет
вас неприличным словом.

Попробуем разобраться, как с этим боройсяШ|::::|::::::.....

Нажатие клавиши BREAK довольно невкусный:Шфёоб раскрутки про-
грамм. Значительно приятнее подготовить версию загрузчика без автозапус-
ка, тогда вы получите полную свободу в Шехвиях.

Самое простое, что можно сделатё:!^:;это: запустить копировщик
COPY86/M или Out Сору (что, в общем-то, Щ®; &; ТР&е) и скопировать
загрузчик, не забыв нажать на клавишу R перед как его скидывать.

Таким образом вы получите про1рэд*ЙУ: Sfca. автозапуск^.

Подобные вещи позволяют; сделат:Б;;жопировщики, написанные
Tadeusz
'eM Wilczek'oM (COPY NEW, COPY, COPY COPY,

COPY COPY COPY, COPY COPYiCOPY ;C0PV:i;;fc0PY й т.п.).

Но получилось так, что вы побрёЬгалй: держать у себя копировщик, по-
зволяющий корректй^ЙЬать программы т^кш||йбразом. Попробую помочь
вам даже в таком беЗнадёЩЩ Положении. Шбёрите следующую программу:

10 FOR А=23296 ТО 23334
20 READ S* POKE A,
S.::;;;:;::: ' W

30 NEXT А ,:::;::;:::::,

40 RANDOMIZE USR |з2Ш!р" "ijl
50 STQ? ^IjjlF" р:

60 DA|k:221,33,0,128,17,0,55,205,86,5,33,0,200,34,

254,203,71,32,

-8,221,ЗЗ/б^Щ^!»., 0,62; 0,195,194,4
Когда вы ее : | ^НЩЙна войдет в режим загрузки, но загрузит

только заголовок, затем, п£й Мкатии на SPACE, программа скинет на кас-
сету, новый заголовок.

Для тех, кто слышал слово Ассемблер и на вопрос "Сколько времени"
отвечает "два эф девятого" привожу исходный текст с комментариями

ORG 23296 (5B00h)

L0 IX,32768 (8000b;):ji;iaifflpec загрузки заголовка
LD DE, 17 Ш^ШрЙна заголовка

БС^ражок "загрузка"
CALLj||366 (0556Ь)<;;1загрузка файла
LD Ни||33024 (81Q0B); установка строки
; автоЩрйй;^5:::'

LD (32779), HL WAITL00P.LD А, 127 (7Fh); ожидание нажатия
клавиши
; BREAK "%Ш
IN А,(254) W
RRA

JR С,WAITL00P:
LD IX,32768; см!
LD DE, 17Ч
LD А, О

CALL 1218 (04C2h); ;;Шись йа ленту

RET iij: ji Ш

Теперь отвлекусь и ошЩг эффекты, возможш^епрг останове профаммы
клавишей BREAK, и способу Которыми они ^ЬЙтгаю^я.

Эта информация может быть полезна скорее не для того, чтобы вскрыть
чужую профамму, а для того, чтрбы защй1ГБть свою (имейте, однако, ввиду
вражескую сущность подобных. скисаний; не забывайте, что воспользовав-
шись данными ниже указаниями ftbi не защитите, дрофамму от того, кто, как
и вы, соблаговолил ее прочесть).::

1. После нажатия на клавишу BRE AIC Загрузчик ^продолжает исправно
Перекреститесь и откажитесь от:ШШк: фкрыта: эту профамму, Вы к

этому еще не готовы, т.к. гарантированно можяф:заявить, что зафузчик на-
писан в машинных кодах (я не имею ввиду профессионалов, которые читают
это произведение только для того, чтобы посмеяться над авторрм)^;

2. После нажатия BREAK машина обнуляется.
Если зафузчик на RANDOMIZEe, то наиболее вщЩЁО ii

следующей операции: .....i:!!:!:::!::!::111""'

РОКЕ (РЕЕК 23613+256*РЕЕК 23614),

РОКЕ (РЕЕК 23613+256*РЕЕК 23614)+1 ,'Ши аналогичной.
Выполнив подобный оператор, мы (или нё;мы) изменяем адрес "возврата
по ошибке" на 0. Таким образом, вместо того, чтобы перейти на подпрофам-
му ПЗУ, которая выводит сообщение об ошибке, профамма переходит на

выше

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

нулевой адрес. К чему это приводит, я полагаю, известно всем. Для тех,, кому
неизвестно — поясню: машина обнуляется (мо&'ете попробовать RANDOM-
IZE USR 0). j;!:!!!l:!|lj:::::.

3. После нажатия BREAK экран стал черный й• йшшна ни на что не
реагирует (кроме сброса, надо полагать).

Вполне вероятно использование оператора РОКВ 23659Д зй&Шшего ко-
личество строк в окне для вьюода сообщения равным 0. Попытка БЙасик-ин-
терпретатора уложить свое обращение в 0 строк;приводит к тому^ что у
машины происходит "заскок" и она виснет.

4. После нажатия BREAK, цвет экрана не изменЩ% дцжние. рЬ строки
экрана имеют цвет бордюра (цвет экрана также может иметь цвет бордюра,
в том числе и черный. Не путайте с предыдущим). При на^айш на клавиши
вы сльшште нежное пощелкивание, но на экране, ничего не изменяется.

Если вы еще не успели пощелкать, Ha^ptir^ BtORDER 7 (или любое
другое значение) и нажмите ENTER невзирая на т6, ^;на экране ничего не
появляется. Как правило, вы увидите надпйСь:

О 0К, 0: 1 iiijj'i::. ¥

Теперь можете работать как обычно.1 :; (Щяи вы успели пощелкать, то
предварительно пощелкайте клавишей DELETE);Mj|;h::::::.:|-

В этом случае использовался оператор

РОКЕ 23624Д1 ще п — цвет атрибута нижнего окна.

Это вкратце. Теперь retrons a i$s;maatpns.

Получив живой загрузчик, попь1тайтесь :еш классифицировать в рамках
того, что вам уже известно.

Как говорилось в начале часта 2.1., загрузчики бывают на Бейсике, в
машинных кодах и смешанные. Пр^аригёльную классификацию загрузчи-
ка можно произвести-изучив файлы программы;! Бейсик позволяет загружать
только файлы с заголовком. Загрузчик в машинных кодах может загружать
что угодно и как угодно, но*, как .правило, загружает файлы без заголовков
(в оригинальных версиях игровых яроздамм загрузчики загружают такое, что
ни один копировщик на себя ответственности не берет и файлы этих про-
грамм не копирует). Таким образом, если: файлы без заголовка, то опреде-
ленно можно сказать, чш загрузчик, с которым вы имеете дело, написан в
машинных кодах. Если файлы.;с;;заголовком, то можно предполагать, что
загрузчики на RANDOMIZEeii^o:^Определенно этого сказать пока нельзя.
Если файлы попадаются как с заголовком, так и без него, то можно предпо-
лагать чт£ угодно, кройётого, что загрузчик на Бейсике.

Нередки случаи, когда загрузчик ;На Бейсике загружает и запускает за-
грузчик;8!к6дах.

Ддрг 'бшанмф&ной классификации необходимо изучить содержимое за-
грузчика. Если зсефайлы программы — с заголовком, и количество опера-
торов LOAD совпадает; С количеством файлов, то можете бьпъ спокойны,

загрузчик на Бейсике.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Rectime - реклама и обьявления.
Новости - новости от Йошкар-Олинской группы Brainwave.
От авторов - Вкусного вам чтения!
Введение - UNCLE SAM присоединился к нам.
Сказание Барда - Мини help к BARDS TALE. Magic Book - о заклинаниях.

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