ZX Spectrum
Game

Clocking On

ZX Computing (Великобритания),

Автор:

Жанр: Программирование: Asm


Доступные версии

 Неофициальное издание
Играть!

Язык

  • Русский
  • English

Управление

  • Клавиатура(?)

Игроков

  • Один
  • Описание (авт.пер.)
  • Информация

Разгон На

         Кэрол Brooksbank отслеживает время          с этой полезной программы машинного кода.

Когда вы планируете игровую программу с ‘против

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

   Справочник Спектр имеет основной программы, которая, по Выглядывал три системных КАДРЫ переменные и вычисления время, прошедшее от значений, проведенных там, производит точные часы. Беда в том, что в то время как спектр является делать, что не делать что-либо еще. Кажется, что тебя может иметь часы или игру, но не оба. Но он может сделать, если вы знаете немного о режимах прерывания.

 Прерывания

В нормальном состоянии дел Spectrum, он останавливается, что это делает 50 раз в секунду и выполняет инструкции в ROM подпрограммы на 0038h – обновление КАДРЫ переменные и сканирования клавиатуры. Это прерывание Режим 1 (IM1). Но есть и другая прерывания Режим, ИМ2.

(На самом деле есть два, но это тот, который касается нам здесь.)    В IM2, вы можете направить Spectrum, на прерывание, чтобы самостоятельно подпрограмма в оперативной памяти, и дать ему другие задачи в выполнять. Это мощный инструкция, но должны быть обработаны с большой осторожностью, так как существует ряд условий, которые должны быть выполнены, если вы хотите, чтобы избежать все, что происходит ужасно неправильно.

   Во-первых, ваша подпрограмма прерывания должен быть коротким. Там 50 прерываний в секунду, так что если ваши указания принять больше, чем 1/50 сек. для выполнения, программа даст сбой. Спектр не вернется из подпрограммы прерывания перед его называют еще раз, и он ничего не будет делать, но повторить первую часть подпрограммы снова и снова.

Хотя Спектр может выполнять около 3000 инструкций В 1/50 сек., легко захватить время. Ты будешь еще нужно сканировать клавиатуру, и процедура сканирования само по себе является довольно долгим. При планировании этой программе я пытался использовать машинный код версию справочника BASIC Программа, с использованием стека калькулятора для расчетов, и рядовой RST10 печати процедуру для отображения Часы. Это разбился. Каждый калькулятор стек вызовов команд до различных подпрограмм ПЗУ, и общего количества Инструкция была слишком большой для имеющегося времени. Так будьте осторожны ROM подпрограмм. Инструкция один байт на бумага может вызвать очень сложную сеть инструкции в практика.

   Так, я не упростили подпрограмму, больше не обновлять КАДРЫ, но представляя из собственных счетчиков часов, программа Переменные в FF01-FF09 (7F01-7F09 для 16К). Это устранило стек калькулятор, но я все еще использовал серию Инструкции RST10 для дисплея, и, я нашел другой загвоздка. Использование RST10 изменяет некоторые системные переменные – ТВ FLAG, S POSN и т.д. Таким образом, хотя подпрограмма мог просто выполняться в то время, основная программа пошел непрочное из-за поврежденных переменных. Когда я пытался спасти все переменные, участвующие в начале суб- рутина, и восстановить их в конце, мы были в течение долгого времени снова. Так из пошел RST10 в пользу прямых тычет в Экран для отображения часов.

   Важно сохранить все регистры в начале из прерывания подпрограммы и восстановить их, прежде чем возврат- числе от него, чтобы избежать их коррупцией вызывая главным Программа к краху. Даже базовая программа рухнет, если вас пренебрегают этим. Хотя процедура часы, кажется, не заканчиваться ряда инструкций POP, они там. Это заканчивается, прыгнув в обычном прерывания подпрограммы в Точка, в которой он сканирует клавиатуру, и СОЗ Окончательные указания этой подпрограммы.

   Другой основной трудностью является хитрый маршрут Спектр берет его прерывания подпрограммы когда в IM2. На прерывание, он прыгает на адрес которого младший байт является FFh, и чей высокий байт он получает от I реестра (чтобы не быть путают с IX или IY регистров). В этот вектор Ad- платье, она ожидает найти фактический адрес подпрограммы. Так перед командой IM2, необходимо загрузить зарегистрироваться с высокой байте адреса вектора и вектора Адрес должен провести два байта адреса подпрограммы, в обычном формате младший байт первого. В этой программе, 48K подпрограмма в FEC5, а вектор адрес в FEFF, так я регистр содержит FE, и в FEFF и FF00 являются байты 5CFE. При возвращении в IM1, я регистр должен быть восстановлен в своем обычном значении 3F.

   Но, есть одна сложность. Если в I реестра имеет любое значение между 40h и 7Fh, противные вещи происходят с экран. Вам нужно, кто знает больше о что происходит под капотом спектра, чем я, чтобы экс- равнина, почему, но это так. Это не имеет значения для 48К Пользователь, который можно использовать 80FF или выше, но для 16К народа это означает, что нет нигде в оперативной памяти, где можно поставить вектор адрес. Таким образом, пользователь 16K желающих использовать IM2 сусла рыться в ПЗУ, поиске адреса, чей низкий байт FF, в которых есть два байта, которые указывают на адрес в ОЗУ 16К. Я придумал шесть. Я не предварительно сравнению не ругаться больше нет, но это достаточно, чтобы пойти с (рисунок 1).

    Рисунок 1. Доступные адреса для пользователя 16K

    ROM АДРЕС

    (Вектор) Bytes Проявляется RAM АДРЕС     06FF DD71 71DD     0FFF 186D 6D18     14FF 6964 6469     19FF 225D 5D22     1EFF CD67 67CD     28FF 5C7E 7E5C

Из них, некоторые из них настолько низок, в памяти, что они оставят

очень мало места для BASIC. Я перестал смотреть, когда я обнаружил, один на 28FF, который дает RAM адрес 7E5C, потому что подпрограмма вписывается там без перезаписи пользовательские графики.

 Преобразование

Для упрощения преобразования между машинами, я поместил

подпрограмма 48К на FE5C. Перечисление для 48К, но у меня есть подчеркнул байты, которые должны быть изменены для 16K, и включены 16K байт в скобках. [Естественно, TZX содержит обе версии кода.] По счастливой случайности, подпрограмма заканчивается в Fefe, так что вектор-адрес может следовать немедленно, между подпрограммой и программы переменные. Если адрес ‘FF’ падает в середине Подпрограмма, вектор-адрес должен beplaced есть, с Инструкция перехода непосредственно перед ней, так что под- рутинной работы может обойти подпрограмме адрес байта.    Время начала и окончания процедуры не должны находиться в памяти, где я поместил их. Если ваша основная программа находится в машинный код, первый байт должен быть стартовой программы, и окончательными обычные остановки. Если оставить их где они, когда ваша программа в BASIC, RANDOMIZE USR 65057 (32289) начнется часы и RANDOMIZE USR 65109 (32341) вернется в нормальное состояние прерывания.

Если вы хотите, чтобы приостановить часы во время вашей программы, например к позволяют читать инструкции, не теряя времени, просто остановить его с RANDOMIZE USR 65109 (32341). RANDOMIZE USR 65057 (32289) начнет его снова, откуда она была прервана.

Чтобы запустить его снова с нуля, лет должны POKE 0 в следующие переменные:

Спектр 48K Spectrum 16K

  FF02 65282 7F02 32514
  FF03 65283 7F03 32515
  FF05 65285 7F05 32517
  FF06 65286 7F06 32518
  FF08 65288 7F08 32520
  FF09 65289 7F09 32521
  FF01 65281 7F01 32513

Не переписывать “окно” часы с чем-нибудь во время

ваша программа, иначе вы потеряете слова “время, прошедшее” [но увидеть демонстрационную программу на TZX способ вокруг этого]. Часы irself снова появится, однако, даже после того, как CLS. Окно AT:

  0, 24-31

  1, 24-32   2, 24-31

Введите CLEAR, 65056 (32288) для защиты часы выше

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

Как только код будет загружен, RANDOMIZE USR 65057 (32289) будет запустить часы, и вы можете использовать Spectrum вполне нор Малли. NEW удалит “Время, прошедшее”, но так долго, как вы вспомнил CLEAR, 65056 (32288) инструкции, часы будет продолжаться. Сохранять, загружать, проверить и с помощью принтера приостановит его кратко, и свиток снимет “ВРЕМЯ ПРОШЛО “и дать вам копию время прокрутки OC- понесены над бегущим часы, но в противном случае он будет работать точно на 99 часов., 59 мин., 59 сек., после чего печать будет поврежден. (Тот, кто хочет потратить больше чем четыре дня и ночи в клавиатуре можно написать их собственный рутина!)    Следующие основные позволит вам вставить любой COM- MandS вам нужно для вашего собственного программы.

    10 RANDOMIZE USR 65057 (32289)

  9899 GO TO 9999   9900 CLEAR, 65056 (32288)   9910 LOAD “” CODE   9999 RANDOMIZE USR 65109 (32341)

Сохраните программу на ленте / до / работает часы, так

что он всегда начинается с нуля, когда загружен.

  SAVE “Программа” LINE 9900

  SAVE “часы” КОД 65057 (32289), 235

Часы идут в режиме реального времени, но вы можете это изменить,

POKEing другие ценности в FE69, 65129 (7E69, 32361). Ценности ниже, чем 32h, 50d, ускорит часы до, более высокие значения будет замедлять его, что позволяет изменять уровень трудностей ти в вашей программе. Если вы хотите, чтобы сделать какую-то операцию в Ваша программа условно на определенное время, пройдя, Вы можете PEEK переменные. Например, выглядывая M10, FF05, 65285 (7F05, 32517) скажет вам, что в 10 минутах езды есть Прошло каждый раз значение проводимые изменения.

 Источники

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

следующие книги:

LOGAN

Понимание Spectrum (Технический объяснение инструкции прерываний.) [Ваш покорный машинистка секунд эта рекомендация.]

LOGAN и O’HARA

Полный спектр ROM разборка (Подробная информация о целях и структуре всей ROM Подпрограммы.) (Оба выше опубликованные Melbourne House.)

ROSS-LANGLEY

Код справочник Спектр машина (Полный перечень всех ROM адресов и байтов провел там.) (Опубликовано Интерфейс.)

[Следующее примечание сопровождается ассемблерный код листинга

рутины.] ** За исключением FF04 и FF07, местонахождения FF01 – FF0B являются переменными, которые будут изменены, как программа переходит. КОД из цифр 30h – 39h, и Кодекса “:” это 3Ah. Как со значением, хранящимся в переменной для каждой цифры не КОД, но истинное значение, Значение хранится является (КОД-30h). Чтобы сохранить “:” в том же со- Конвенция, поэтому необходимо хранить 0A везде, где его Требуется, чтобы печатать “.”.

[И, наконец, несколько слов о TZX, что идет с этим

  Текст. Должно быть очевидно, что Я при условии, загружаемый   Файлы код для 48K и 16k спектров. У меня также   добавлено программ, которые я использовал, чтобы загрузить те в памяти,   должны те, быть кому-то полезным.

  TZX начинается с демонстрационной программы, определяющей   шахты выполняется она на 16k или 48k Spectrum   (Если вы не возиться с RAMTOP перед загрузкой, в   этом случае, служит вам право), загружает соответствующий код   Файл, устанавливает несколько адресов переменных, и продолжает показывать   как использовать процедуру. Обратите внимание, как, кроме погрузки   и установку адресов, можно было сохранить код

  одинаковы для обоих типов Spectrum. РЛБ, 01/2012]

Запустите Clocking On и играйте. Эта утилита для программинга на ASM, опубликованная в Великобритании в 1985 году творческой группой ZX Computing, которую написал Carol Brooksbank.

Не запускается или глючит игра, или не можете пройти? Спросите в комментариях.

Subscribe
Уведомлять об
guest
0 Comments
Inline Feedbacks
View all comments
 

Сохранённые игры[X]

  

Справка[X]

Помощь уже в пути!

Не забывайте периодически сохранять игровой прогресс на сервере (клавишей F8), чтобы уверенно продвигаться вперёд!

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

Для загрузки сохранённой игры жмите F3 или откройте меню "Диск" кнопкой на правой панели.

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

Помощь

Размер

  • x1 [256x192]
  • x2 [512x384]
  • x3 [768x576]
  • Полный

Диск

Кликни в окно эмулятора, чтобы управлять!
<<<<
Close
0
Would love your thoughts, please comment.x
()
x