ZX Review #7-8-9-10
08 ноября 1997

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

<b>Форум</b> - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita
(c) Кашников В., Самарская обл.,
г.Кинель

  Начну с немного забытой игры -
ELITE.

   1)   Что   касается   двойных
звезд, то у меня есть  некоторые
сомнения насчет их "двоичности".
Как  известно, двойная  звезда -
это два солнца, которые вращают-
ся вокруг общего центра масс.  А
на деле: лечу к планете, и вмес-
то двух солнц имеется только два
кориолиса или додекаэдра - в об-
щем, две станции. Я на 99%  уве-
рен, что у планеты две  станции,
если компас сбивается, и на  нем
появляется  еще  один  круг  или
квадрат (чаще всего в левой час-
ти компаса). При подлете  к  од-
ной из станций все как обычно, а
при подлете  к  другой  начинают
проявляться  разные  странности:
отсутствует  сигнал  S,  станция
может находиться далеко от  пла-
неты, или почти  над  ее  повер-
хностью, были  и  другие  мелкие
детали (например, входное отвер-
стие  направлено  от   планеты).
Правда, я не понял  систему, ка-
ким образом найти  ту  или  иную
станцию.
   2) После того, как  я  прочел
книгу  Э.Кауфмана   "Космические
рубежи  теории  относительности"
1981 года, у меня появилась своя
теория о планете RAXXLA.  Черная
дыра?! - новая идея, или на  са-
мом деле не новая? Судя по напи-
санному в книге, из черной  дыры
можно попасть от  (-)  бесконеч-
ности до  (+)  бесконечности  во
времени. А может, из  нее  можно
попасть и  к  RAXXLA?  Главное -
только найти ее. Но  далеко  бе-
гать  не  надо - ведь  в  первой
миссии солнце взрывается, и  не-
известно, что  с  ним  будет  по
прошествии времени - белый  кар-
лик, или  черная  дыра, или  еще
чего-нибудь. Итак, по сути: ста-
ли вы ELITE - мотайте к той пла-
нете, где выполняли первую  мис-
сию, и займитесь  исследованием.
Вот.
   3) Когда на экране идут  кру-
ги при перелете к другой  плане-
те, нажмите одновременно  Q+O+C+
A. Попробуйте  предсказать,  что
будет! А теперь загрузите игру и
проверьте, а потом читайте даль-
ше. Ну как? Правильно, ничего не
произошло. Ха-ха! А  дальше  все
честно. Загрузите игру. Настрой-
тесь на перелет к другой  плане-
те. Вылетайте и на  полной  ско-
рости летите  к  планете.  Когда
высота  станет   минимальной   и
красный индикатор будет  мигать,
жмите C, дальше  поэксперименти-
руйте и читайте дальше. Я  нажи-
мал H и "делал  ноги"  к  другой
планете. После этого не  работа-
ло  управление  кораблем  вверх,
вниз, влево, вправо, а остальное
работало нормально. Летал  таким
образом я в версии "M1 loading",
хотя сам перешел на "M128".
   А теперь  просто  дополнения.
Первую миссию в M128 дают намно-
го позже, чем в M1. Чистого вре-
мени играл я уже не меньше  пяти
суток, а задания так и не  полу-
чил.  Время  в  этой  версии  на
станции не идет, а в  версии  M1
loading  время  идет  везде.  По
моим прикидкам  за  время  отве-
чают байты 94-102,  а  для  чего
нужны  103 и  104  -  неясно, но
есть  подозрения, что  это  тоже
время.  Дисковода  у  меня  нет,
поэтому  приходится  довольство-
ваться старыми  версиями  ELITE,
а  так  хочется  "рубануться"  в
ELITE-2!

   Следующий   вопрос   посвящен
эмулятору  ZX-Spectrum  на  IBM.
Хотел я попробовать отредактиро-
вать шрифт в игре ACADEMY с  по-
мощью программы FONTEDIT, но она
шрифт не нашла. Ручной поиск то-
же ничего не дал. Возможно, эму-
лятор  компрессирует  данные,  а
потом  записывает?  Если  да, то
можно это отключить или нет?
   С предыдущим письмом  я  пос-
лал вам свою программу ZX-STARS,
теперь посылаю ее же, но  немно-
го  оптимизированную.  Галочками
отмечены различия между  версия-
ми. Отсюда и вопрос - это  прог-
раммы разных версий  или  разных
редакций? Если можно, то подска-
жите, в каких случаях  изменяет-
ся  номер  версии, в каких - ре-
дакции (желательно  на  конкрет-
ных примерах).  И вообще, вправе
ли я ставить (c) в этой програм-
ме? Ведь почти половина програм-
мы написана не  мной, а  другими
авторами (процедуры RND и PLOT).

   Решил я попробовать "сбацать"
программу  Life,  о  которой  вы
неоднократно писали. Прикинул  и
решил, что основными  процедура-
ми будут процедуры  выживания  и
гибели одновременно, и  процеду-
ра  рождения.  Получилось   все,
кроме рождения - никак не  сооб-
ражу, как ее сделать.  Может, вы
поможете?

   Что касается  шестнадцатерич-
ной системы счисления, то  я  ее
еле-еле  перевариваю.  Но  стало
намного проще, когда у меня  по-
явился    научный    калькулятор
Citizen, который  может  перево-
дить числа в  HEX, DEC, BIN, OCT
системы, а также  имеет ряд  до-
полнительных  функций.  Наверня-
ка, вы в курсе, где  применяется
восьмеричнаяВ(OCT)Всистема - я
не  знаю.  HEX-система, на   мой
взгляд, неудобна из-за неясности
с адресом #A528, и оттого  непо-
нятно, где находится  программа.
Если бы была команда SAVE "name"
CODE #A528,nn, то  все  было  бы
получше. Хотя у HEX-системы есть
и свои  преимущества.  Например,
сразу видно, какие числа будут в
регистровой паре (LD HL,16384  и
LD HL,#4000). Для себя я  решил,
что применение какой-либо систе-
мы - дело практики.

   Листинг программы ZX-STARS:
140.
;ZX-STARS Version 1.2
;3(C) Кашников Владимир 20.07.96

        ORG  58210
SEED    EQU  23672
        LD   HL,#4000
        LD   DE,58622
        LD   BC,6912
        LDIR
        XOR  A
        OUT  (#FE),A
        LD   HL,#4000
        LD   (HL),A
        LD   DE,#4001
        LD   BC,6143
        LDIR
        LD   A,7
        LD   HL,22528
        LD   (HL),A
        LD   DE,22529
        LD   BC,767
        LDIR
        RES  5,(IY+1)
        LD   HL,58420
        LD   B,101
P0      PUSH BC
        LD   C,(HL)
        INC  HL
        LD   B,(HL)
        INC  HL
        PUSH HL
        CALL PLOT
        POP  HL
        POP  BC
        DJNZ P0
BEG     LD   HL,58420
        PUSH HL
        CALL RND
        LD   A,D
P1      CP   101
        JR   C,CON1
        SUB  100
        JR   P1
CON1    ADD  A,A
        POP  HL
        ADD  A,L
        LD   L,A
        PUSH HL
        LD   C,(HL)
        INC  HL
        LD   B,(HL)
        CALL PLOT
        CALL RND
        LD   A,E
        CP   192
        JR   C,CON2
        AND  192
CON2    POP  HL
        LD   (HL),D
        INC  HL
        LD   (HL),A
        LD   B,A
        LD   C,D
        CALL PLOT
        BIT  5,(IY+1)
        JR   Z,BEG
        LD   A,(23624)
        SRL  A
        SRL  A
        SRL  A
        OUT  (#FE),A
        LD   HL,58622
        LD   DE,#4000
        LD   BC,6912
        LDIR
        RET
RND     LD   HL,(SEED)
        LD   A,H
        OR   L
        JR   NZ,NOZERO
        INC  L
NOZERO  LD   A,L
        RLCA
        XOR  H
        RLCA
        RLCA
        XOR  H
        RLCA
        XOR  H
        RLCA
        ADC  HL,HL
        LD   (SEED),HL
        EX   DE,HL
        RET
PLOT    LD   A,191
        SUB  B
        LD   B,A
        AND  A
        RRA
        SCF
        RRA
        AND  A
        RRA
        XOR  B
        AND  #F8
        XOR  B
        LD   H,A
        LD   A,C
        RRCA
        RRCA
        RRCA
        XOR  B
        AND  #C7
        XOR  B
        RLCA
        RRCA
        LD   L,A
        LD   A,C
        AND  #07
        LD   B,A
        INC  B
        LD   A,#FE
LOOP    RRCA
        DJNZ LOOP
        LD   D,#FF
        XOR  D
        LD   B,A
        LD   A,(HL)
        XOR  B
        LD   (HL),A
        RET


;ZX-STARS Version 2.1
;3(C) Кашников Владимир 9.09.96

        ORG  58210
SEED    EQU  23672
        LD   HL,#4000
        LD   DE,58622
        LD   BC,#1B00
        LDIR
        XOR  A
        OUT  (#FE),A
        LD   HL,#4000
        LD   (HL),A
        LD   DE,#4001
        LD   BC,#17FF
        LDIR
        LD   A,%111
        INC  HL       √
        LD   (HL),A
        LD   DE,#5801
        LD   BC,#02FF
        LDIR
        RES  5,(IY+1)
        LD   HL,58420
        LD   B,101
P0      PUSH BC
        LD   C,(HL)
        INC  L        √
        LD   B,(HL)
        INC  L        √
        PUSH HL
        CALL PLOT
        POP  HL
        POP  BC
        DJNZ P0
BEG     LD   HL,58420
        PUSH HL
        CALL RND
        LD   A,D
P1      CP   101
        JR   C,CON1
        SUB  100
        JR   P1
CON1    ADD  A,A
        POP  HL
        ADD  A,L
        LD   L,A
        PUSH HL
        LD   C,(HL)
        INC   L       √
        LD   B,(HL)
        CALL PLOT
        CALL RND
        LD   A,E
        CP   192
        JR   C,CON2
        AND  192
CON2    POP  HL
        LD   (HL),D
        INC  L        √
        LD   (HL),A
        LD   B,A
        LD   C,D
        CALL PLOT
        BIT  5,(IY+1)
        JR   Z,BEG
        LD   A,(23624)
        SRL  A
        SRL  A
        SRL  A
        OUT  (#FE),A
        LD   HL,58622
        LD   DE,#4000
        LD   BC,6912
        LDIR
        RET
RND     LD   HL,(SEED)
        LD   A,H
        OR   L
        JR   NZ,NOZERO
        INC  L
NOZERO  LD   A,L
        RLCA
        XOR  H
        RLCA
        RLCA
        XOR  H
        RLCA
        XOR  H
        RLCA
        ADC  HL,HL
        LD   (SEED),HL
        EX   DE,HL
        RET
PLOT    LD   A,191
        SUB  B
        LD   B,A
        AND  A
        RRA
        SCF
        RRA
        AND  A
        RRA
        XOR  B
        AND  #F8
        XOR  B
        LD   H,A
        LD   A,C
        RRCA
        RRCA
        RRCA
        XOR  B
        AND  #C7
        XOR  B
        RLCA
        RRCA
        LD   L,A
        LD   A,C
        AND  #07
        LD   B,A
        INC  B
        LD   A,#FE
LOOP    RRCA
        DJNZ LOOP
        LD   D,#FF
        XOR  D
        LD   B,A
        LD   A,(HL)
        XOR  B ;инверсия пиксела
        LD   (HL),A
        RET
2
   Прим.ред.: Насчет систем счисления.  Мы
тоже считаем, что применение той или  иной
системы счисления  -  сугубо  личное  дело
программиста. Ведь он пишет исходники  для
себя, а не для кого-то, поэтому  нужно  их
писать так, как удобно ему.
   Естественно, исходники, которые идут на
всеобщее  рассмотрение  (например,  в  наш
журнал), должны быть легко читаемыми и по-
нимаемыми, но  тут  тоже  не  следует  го-
ворить, что десятичная  система  счисления
только помеха.ВНапример, еслиВциклВнадо
повторять  2000 раз, то  LD BC,2000  будет
выглядеть понятнее, нежели LD BC,#07D0.  А
если мы  загружаем в B число 3, а в C - 6,
то  в  этом  случае  понятнее   будет   LD
BC,#0306. Так что всяческие  перепалки  на
эту темы мы считаем столь же бессмысленны-
ми, как и перепалки на тему  "что  лучше -
ЙЦУКЕН или  ЯВЕРТЫ".  К  сожалению, такого
рода перебранки стали очень распространен-
ным явлением, хотя тут по  нашему  мнению,
стоит вспомнить пословицу "на вкус и  цвет
товарищей нет". Неужели программистам  так
сложно сделать сменную таблицу клавиш, как
в ZX-WORD?
   Теперь по  поводу  странных  станций  в
ELITE. Я, редактор этой  статьи, тоже  од-
нажды столкнулся с таким явлением.  Я  ви-
дел станцию, которая была  практически  на
поверхности планеты с входом, направленным
от нее. Залететь мне в нее не удалось -  я
столкнулся с планетой. Мы считаем, что яв-
ления такого  рода - это  глюк  программы.
Можно даже попытаться  объяснить  механизм
его образования. Итак, когда  мы  летим  к
планете в правильном  направлении, мы  ви-
дим планету и станцию  на  некотором  рас-
стоянии от нее. А теперь представим  себе,
что мы подлетели к планете в  диаметрально
противоположной точке. Советуем также об-
ратить внимание на один важный  факт - все
объекты в игре прозрачные, сквозь них  все
видно.  И, подлетев  достаточно  близко  к
планете, мы можем увидеть станцию, находя-
щуюся на противоположной стороне  планеты.
Естественно, мы увидим ее входом  к  себе,
т.е. как бы направленным от планеты. Можно
даже поймать сигнал S (что и было тогда со
мной). А теперь представим себе, что из-за
некоторой  особенности  программы   повер-
хность планеты  как  бы  смещается, в  ре-
зультате чего на эту  станцию  можно  даже
сесть. Вот вам, пожалуйста, еще одна стан-
ция на поверхности планеты с  входом, нап-
равленным от нее. Эта догадка даже однажды
была проверена  экспериментально.  Разбив-
шись таким образом, я загрузил старое сос-
тояние и повторил полет. Как и  ожидалось,
при подлете к планете был  получен  сигнал
S, который шел прямо из ее центра. Я  стал
облетать планету, ориентируясь таким обра-
зом, чтобы сигнал шел все время слева. Че-
рез некоторое время  я  увидел  нормальную
станцию, в которую без всяких  странностей
удалось залететь.

           *   *   *




Другие статьи номера:

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

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

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

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

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


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

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

В этот день...   16 апреля