ZX Spectrum
Game

Machine Code Trace

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

Автор:

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


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

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

Язык

  • Русский
  • English

Управление

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

Игроков

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

Машинный код TRACE

Кэрол Brooksbank от ZX Computing февраля / Mar.1986

Ковентри Кэрол Brooksbank писал Утилита для поиска ошибок в ее программах и она думала, что бы поделиться им с нами.

Я не знаю, как вы, но я не думаю, что я когда-либо

написал программу машинного кода, который работал отлично первый Время. Вы знаете, ощущение. С нетерпением, вводе в ваш последний шедевр, введите RANDOMIZE USR-то-или-друга – и CRASH! Там вы сидите, с застывшей клавиатуре и только пустой экран или довольно психоделический шаблон, чтобы посмотреть на. Ты понятия не имею, есть ли вина в логике вашего Программа, как вы сделали опечатку или просчитались смещение, и вы не знаете, с чего начать ищет неприятностей, потому что вы не знаете, как далеко в программу произошла катастрофа. Ну, помощь под рукой.

Эта программа машинного кода даст вам шестигранный след в

правой части экрана, как работает ваша программа. Это только частичная след, как он не показывает адрес каждый Инструкция, как это выполняется – если это так, на дисплее будет изменить так быстро, что вы никогда не сможете его прочитать – но каждый 1/50 секунды он дает вам адрес, что программа достиг. Этого достаточно, чтобы позволить вам держать глаза на прогресс вашей программы, и, чтобы увидеть, где вещи начинают пойти не так. Например, если авария вызвана Программа попасть в бесконечный цикл, вы увидите то же самое последовательность байтов повторяются снова и снова после того, как авария случается. Если вы не учел инструкцию возврата, так что Программа запускается через пустые байт выше ваша программа, что тоже будет очевидным. Но помните, что беда не всегда в точке, где аварии происходит. Неправильно инструкция смещение может быть каким-то образом от точки к которому он направляет программу. Ты все равно придется думать для себя, чтобы решить, почему Программа работает как это делает.

Почему дисплей в шестнадцатеричном? По двум причинам. Во-первых, чисто

личный. Я написал программу для себя, в первую очередь, и я всегда работаю в шестнадцатеричном, так десятичной дисплей не будет очень полезно. (На днях я спрашиваю себя овощной для “0A фунтов картофеля, пожалуйста”.) Вторая причина заключается в гораздо более важными. Существует прямая Отношения между двоичной форме числа – немного картина провела в регистрах – и шестигранной формы, которая делает преобразование между двумя очень проста.

Преобразование адреса в десятичной предполагает умножение старший байт на 256, добавляя младший байт, затем изолировать один 5 цифр по одному для печати, все из которых были бы сделать подпрограмма намного сложнее. Поскольку след рутина в виде подпрограммы прерываний, оно Желательно, чтобы она должна быть максимально коротким и простым, насколько это возможно.

Подпрограмма использует тот факт, что, когда

Спектр выполняет подпрограмму, адрес возврата выталкивается в стек. На прерывания подпрограммы, возврат Адрес программный счетчик, точка достигнута в Основная программа. Если мы можем получить этот адрес из стека и отображать его, у нас есть след. Очевидно, есть много инструкций осуществляется в между прерываний, которые не отображается, но этого достаточно, как правило, чтобы пользователь мог видеть где программа берет неправильный поворот. Так что, если вашей машине Код сбой программы, нагрузки в этой рутины с самостоятельно Программа – Я предполагаю, что вы всегда принимать меры предосторожности из лентой ваших программ перед их запуском, на всякий случай – введите RANDOMIZE USR 65271 (48К), 32503 (16К (запустите ваш программировать снова, и все должно быть выявлено.

Подробности

Программа объясняется нот в перечислении, а

Есть одна или две детали, которые нуждаются в более подробного объяснения. Подпрограмма прерывания начинается с сохранения текущей стоимости из HL в двух запасных байт в области системных переменных в 5C80. Это необходимо потому, что существующих значений регистры всегда должен быть сохранен в начале прерывания подпрограмма, и если мы нажимаем ее в стек, он будет охватывать до адреса, мы пытаемся извлечь. Адрес Затем из стека в HL, толкнул обратно, так что он находится в своем правильном месте, когда возвращение изготовлен из подпрограмма, а другой регистр значения могут быть сохранены в стеке. Другой запасной байт среди системы Переменные, 5C81, используется в качестве счетчика прерываний. Если этот достигло 22d, положение печати установлен в верхней части экран и счетчик сбрасывается на 0. В противном случае, рутинные скачки вперед, чтобы напечатать адрес.

Печать подпрограмма начинается с инструкцией, и 0F,

которая имеет к переустановке бит 4-7 А зарегистрируйтесь, оставляя биты 0-3 неизменным, изолируя число мы хотим, чтобы распечатать. Печати, должен быть вызван, следовательно, с Количество печатаемых в битах 0-3 А. Если число будет печатается является “левым” цифра два в А зарегистрируйтесь, инструкция АСР выполняется 4 раза, чтобы перейти это в положение “правой”, но печать подпрограмма называется прямо, когда “правая” цифра должна быть распечатать. Когда PRINT называется, регистр DE держит Первый байт положение экрана для цифры, и в конец PRINT подпрограммы, DE восстанавливается, что Положение.

Поскольку есть только 16 цифр, которые нам понадобятся для печати,

0-9 и AF, таблица создана, начиная с FED7 (7ED7 16K), который проводит начальные адреса битовых паттернов тех Цифры, приведенные в таблице ПЗУ символов. Удвоение значение Число печатать и добавлять его в адрес нашего стола, указывает на правильное место в таблице, чтобы получить диск решения для этого персонажа. Цифра может быть напечатан.

После того, как 4 цифры были напечатаны, переменная программа SCRP в FF13 (7F13) указывается на следующей строке экрана вниз, и программа выходит через обычный подпрограмму прерывания.

Перечисление для машины 48К. 16K фолк должны изменить

начальная “F” в адресах с “7”, каждый вызов PRINT Инструкция должна читать CDB97E и байты на 7EBD, который точка HL начала таблицы должны быть 21D77E. На START, старший байт векторов прерываний адрес должен быть 28, давая байт 3E28. Вектор прерывания адрес не требуется при 7EFF, так четырех байтов между 7EFD и 7F01 может быть изменен на NOP, если вы хотите, хотя, если они оставить как есть программа просто проигнорирует их.

Экономия

Чтобы сохранить рутину на ленте:

SAVE “м / с и следа” КОД 65116,184 (48K)

SAVE “М / с след” КОД 32348,184 (16K)

[Примечание: Есть на самом деле 185 байт в списке, хотя в прошлом]

[Два используются только как временное хранение. JimG]

Чтобы запустить трассировку:

RANDOMIZE USR 65271 (48K)

RANDOMIZE USR 32503 (16K)

Чтобы остановить трассировку:

RANDOMIZE USR 65292 (48K)

RANDOMIZE USR 32524 (16K)

Наконец, следует помнить, что след не будет работать, если

прерывания отключены. Вы должны изменить свой DI и EI Инструкция к NOP, используя свой след, и восстановить их когда вы исправили свои проблемы.

– Конец файла –

Играйте в Machine Code Trace без эмуляторов прямо на сайте. Среда разработки на ASM, которую подарил миру Carol Brooksbank, была издана творческой группой ZX Computing в 1986 году в Великобритании.

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

Отправить ответ

Уведомлять об
avatar
wpDiscuz
 

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

  

Справка[X]

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

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

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

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

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

Помощь

Размер

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

Диск

Кликни в окно эмулятора, чтобы управлять!
<<<<
Close