ZX Spectrum
Game

Trace

Sinclair User (Великобритания),

Автор:

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


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

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

Язык

  • Русский
  • English

Управление

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

Игроков

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

Спектр прерывания

Добавление команд в Spectrum Basic (Sinclair User, ноябрь 1984 г.)

Кит Уильямс представляет подробное объяснение о том, как

использовать прерывания на Spectrum и обеспечивает полезное Функция трассировки для номеров программ печать линии

[Название статьи и преамбула вводят в заблуждение, так как код не добавить]

[какие-либо новые основные команды; он добавляет функции трассировки инициализируется через ЕГР] [Позвонить и активируется путем установки переменной ‘след’ в рамках программы. JimG]

Одна из проблем, добавления новых команд и подпрограммы в

Спектр Basic является то, что он проводится в ПЗУ. Это означает, что все компьютерные операции под контролем непреложного программы который не может быть остановлен.

Хотя это легко написать новые подпрограммы, их можно назвать только

средства очень пользовательским недружелюбно RAND USR вызова. Прохождение информации в и из этих процедур также трудно без всей цепочке из тычет. Даже тогда это может быть невозможно получить процедуру, чтобы работать в качестве это может быть необходимо при выполнении каждой линии.

Существует, однако, один очень простой способ бить ROM и это

использовать прерывания. Изучая это, мы можем также разработать новый Команда для Спектрума. Если вы не заинтересованы в Подробное объяснение вы можете следовать инструкциям и загрузите окончательная программа, которая дает очень полезную функцию трассировки, важным инструментом при отладке наряду программ.

Функция трассировки является рутинной машинный код, который печатает на экране,

в то время как программа работает, номер линии, которая в настоящее время выполняется.

Спектр основан на популярной Z-80A микропроцессором. На что

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

Есть три прерывания режимы, доступные на микропроцессоре. IM0

предназначен для использования с периферийными устройствами, такими как принтеры и тому подобное. Когда периферийные нуждается в обслуживании, например, требуя более Информация, тогда он посылает прерывания сообщение, а затем адрес. Компьютер, в IM0, будет работать рутинную запуск по этому адресу до возвращения из прерывания. IM1 является режим, обычно используемый Спектр. Когда происходит прерывание будет проводить процедуру по адресу 56. Это рутина в ПЗУ делает различные задачи по ведению домашнего хозяйства такие как чтение клавиатуры. Спектр подключен таким образом, что прерывание приходит с каждым колебанием напряжения сети, в Британия, которая происходит 50 раз в секунду.

ИМ2 гораздо полезнее. В этом режиме процессор переходит к службе

подпрограмма адрес которого необходимо вычислить из двух чисел. Первый из этих цифр приходит от того, что вызывает прерывание. В Спектр этот номер 255 – или FF в Hex – поставляется аппаратно. Другой номер, запрограммированный в. Это сохранено в специальный магазин известен как зарегистрироваться. Процессор переходит к адресу 256 * I + 255. Просто, чтобы сделать вещи более сложными в этом компьютерная адрес не начальный адрес, но адрес магазина холдинг начальный адрес.

Чтобы получить нашу программу на том, как мы должны сначала совать свой начальный адрес

в другой адрес – чья Hex значение xxFF. Тогда мы должны поставить его вектор адрес – хх от до – в I. Это звучит сложно но на самом деле это просто. Существует, однако, одна проблема. Экран Чип в Spectrum работает таким образом, что, поставив вектор в первый 16K ОЗУ вызывает трудности для машины. Если ты хочешь использовать прерываний на машине 16K вы должны быть очень хитрым.

Если поставить 40 в I реестра, то процессор будет смотреть на 40 * 256 + 255 = 10495 для начального адреса. То есть в ПЗУ, и она содержит начальный адрес 32348 или 7E5C в Hex. На 48К Spectrum у вас есть больше свободы и может использовать либо 16K трюк или использовать номер 128 (80 Hex) в I.

И так, чтобы подпрограмм. Слово первое о получении их в памяти.

Если у вас есть ассемблер то легко. Если вы этого не сделаете, то вы будете нужна программа Hexloader. Один представлен в листинге 1. [В стоимость не входит здесь. См TRACE.ASM для прокомментировал список ассемблера. JimG] Вы должны Первый введите его в, а затем сохранить его. Это позволяет ввести в машинный код, а затем сохранить это.

При вводе подпрограммы машина Код в листинге 2 типа в только

Цифры и буквы в столбце “hexcode”. Введите в целую линию в Время и адрес и код появится на экране. Если вы делаете ошибка, то, набрав в “R” позволит Вам перепечатывать предыдущий линия. Когда вы набрали последнюю строку шестнадцатеричной то ‘S’ приведет к экономии рутины, чтобы шестигранник на ленте.

Чтобы свести к минимуму ошибки и сделать ее проще объяснить программу как

Весь, она была разделена на его различных подпрограмм. Введите тех В одной за раз; позже они могут быть объединены, используя Collator Программа в листинге 3.

Первая пара подпрограмм, TRON и TROFF, являются те, которые переключаются

векторы прерываний вокруг. TRON загружает регистр I с 0FEH, то есть, 254. Это означает, что вектор проведение начального адреса наша подпрограмма должны быть размещены по адресу 0FEFFH, то есть 65279. зарегистрируйтесь я не может быть загружен. непосредственно и поэтому мы должны сначала загрузить Значение в регистре A. ИМ2 выбран по причинам, уже заявил, а остальные инструкции DI и EI выключатель прерывает от и на. Строго говоря, они не являются существенными здесь, но это могло бы привести к путанице для машины, если она была прервана во время этого Короткая процедура в неправильном месте.

TRON действительно совершенно отдельно от остальной части программы. Его работа заключается в

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

TROFF выполняет обратную функцию в том, что он сбрасывает машину, чтобы

нормальные прерывания. Вы заметите, что я загружен 3FH или 63.

То есть адрес (3FFF), что ПЗУ устанавливает в качестве вектора прерываний при включении питания. В прерываний режиме 2, что приведет к прыжок обратиться 60 который является частью путь через обычный обработчика прерываний. Здесь важно, поэтому, при сбросе поставить машину в IM1.

только USR вызов, который необходимо где-нибудь в этой программе является Начальная один для TRON. TROFF называется с помощью обычной Basic Переменная.

Введите в машинный код и сохранить его. Начало адрес FE7E.

Пара процедур могут быть сохранены вместе под названием «тронной».

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

переключить след и выключается. Это может быть сделано с Basic, вставив Линия Давайте проследить = х, где х может быть одно из трех значений: ‘-1’ будет вызвать вызов TROFF тем самым выключение трассировки; ‘0’ переключится след прочь, но оставлять его активным. ‘1’ переключится след на. Так что если в вашей Программа вы хотите проследить по линиям 300 до 700, скажем, вставить в Ваша программа на линии 299 LET следа = 1. Линия 701 LET след = 0 – останавливается проследить. Затем запустите программу.

На следующий распорядок TRQ поиск область переменных, чтобы увидеть, если

Переменная след существует. Если это не то принимает значение 0. Если она существует, то значение взял. Способ определения переменная искать через область переменных для кода 0B4H которая является код “Т” отрегулировать, чтобы показать, что это первая буква переменной длиной имен (см 167 ручного, письма кода 96 + 160). Когда код находится каждый из кодов, в свою очередь проверяется против буквы “Г”, “в” и “с”, наконец, против 0E5H который Код для ‘е’ + 128, показывая, что это последняя буква в имени.

Значение числа хранятся в пяти байтов. Во-первых, 0,

Второй знак байт проведения 0 для положительного числа и -1 для отрицательное. Рутинные первые выборы, которые байт и прибавляет к нему. Если Ответ 0, то регистр загружается с FF (-1) и возвращение к подпрограмма основной контроль осуществляется. Если это не так, то отрицательный Следующий байт посмотрел на. То есть младший байт Значение, т.е. X-256 * INT (х / 256). Байт взял и уменьшился на один. Если ответ 0, то это, должно быть проведено 1 и так загружена с 1 и возвращение сделал. Возможно только оставаясь значение равно 0, и так 0 помещается в А, а затем программа возвращается к главной панели управления.

Есть, наверное, легче методы делать это, например, используя

подпрограмма ВЗГЛЯД-VARS в ПЗУ на адрес 28B2H, но важно не изменить какой-либо из системных переменных или альтернативного набора регистров потому что процессор находится в процессе запуска основной программы. Следовательно нет ROM подпрограммы вообще не были использованы, но только моделирование них.

Теперь наберите в Trq и сохранить его под этим именем. Начало адрес FE90.

Процедура печати является тот, который печатает номер строки. Снова

было бы легче способы сделать это, используя RST 10H например, но снова моделирование было произведено. Процедура вводится с ‘C’ удерживая значения цифры и ‘A’ его позиция – 1 для тысяч, 2 для сотни и т.д.

Каждый символ выводится на экран состоит из восьми рядов восемь

пикселей. Каждая строка может быть представлена ​​в виде одного байта. Как экран 32 байтов широкий казалось бы, что простой способ напечатать символ является совать первый байт в, а затем следующий байт 32 байт дальше на и так далее. Проблема в том, что экран не выложил в памяти в что простой и очевидный способ. На самом деле, каждая строка пикселей составляет 256 байт от последнего. Алгоритм, следовательно, требует, чтобы каждый байт ткнул в адрес 256 байт на от предыдущего.

байт пикселей хранятся по адресу, на который указывает CHARS + 256 и номера начинаются 128 байт дальше. Как есть восемь байт для каждого характер, то значение в C необходимо умножить на восемь, а затем добавил к этому базовому адресу.

Процедура может теперь быть напечатаны и спас, используя имя “печати”.

стартовый адрес FED3.

Следующие две процедуры участвуют в сортировке номер текущей строки.

Граф делит число в HL по количеству в DE и возвращает привести к С и остатка в HL. Линия поднимает номер строки и использует граф манипулировать это цифра за цифрой, а затем печатает те из призывы к печати. Текущий номер строки проводится в КПП, так что это впервые взял в руки в HL. DE загружен 1000, а затем граф называется чтобы увидеть, сколько тысяч есть. Номер напечатан с использованием в говорят позицию печати т.е. колонну тысяч. Тогда, что является повторяется для сотен и так далее. Граф перекрывает прерывание вектор на FEFFH и должен быть скачок как раз перед его таким образом, чтобы процессор не интерпретировать вектор как инструкции.

Начальный адрес для этой пары процедур является FeF3. Они могут быть введены и спас.

Окончательный процедура текущий контроль называют ГЛАВНАЯ и он контролирует

все остальные, и выполняет необходимые служебные задачи.

начать Адрес FF2D; один состоялся в векторов прерываний FEFF. Это является обычной называется, когда происходит прерывание.

Первая задача вызов ROM адресу 56. Это нормально

прерываний и обновляет КАДРЫ, читает клавиатуру и так далее.

Далее регистр A и регистра флагов сохраняются, так что нормально Услуги могут быть возобновлены по возвращении. Если программа не запущена она будет провести FF (-1), а затем происходит возврат после восстановления и флаги зарегистрируйтесь. Если программа запущена, то регистры сохраняются и позвоните сделаны Trq чтобы увидеть, если след должен быть включен, выключен или отключен. TRQ возвращает эту информацию в регистр. В зависимости от значение в том, что регистрация на вызов производится в строке или TROFF или ни один из тех. Наконец, все регистры будут восстановлены и управление возвращается на диске. Все, что остается, чтобы собирать все эти процедуры. Введите в Вторая Базовая программа в листинге 3, перемотать ленту, а затем запустить это, не забывая при этом сохранить ГЛАВНАЯ первый.

Третий Базовая программа – список 4 – будет загрузить утилиту трассировки

выше RAMTOP. Это, или что-то вроде этого, должны быть использованы на включение и, прежде чем загрузить или введите в программу в процессе тестирования. Чтобы включить следы, то есть называть TRON, вы должны дать команду RAND USR 65150 после любой начала или новый.

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

главного которые будет легче следовать след.

[Я не потрудился со следующим, так как все процедуры находятся в]

[Непрерывной памяти, так что я только что спас их как один блок, чтобы начать с.] [Кроме того, листинг ассемблера был длиной всего 210 байт, не 214. JimG]

Листинг 3. Collator   10 CLEAR, 65149   20 при п = 0 до 4: LOAD “” CODE: СЛЕДУЮЩИЙ н   30 CLS: PRINT “Подготовьте ленту для сохранения Нажмите кнопку ENTER”   40 PAUSE 4E4   50 SAVE “след” КОД 65150.214   60 СТОП

Листинг 4: Трейс

  10 CLEAR, 65149   20 LOAD “след” КОД

  30 NEW

Сыграйте в Trace прямо сейчас! Это программа для разработки на BASIC, которую создал Keith Williams, была опубликована командой Sinclair User в 1984 году в Великобритании.

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

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