Что такое неиспользуемый адрес памяти?

Читая эту HTML-страницу о распределении памяти Commodore 64, потому что меня интересует старое компьютерное оборудование, я наткнулся на ячейку таблицы, которая утверждает, что адрес памяти не используется. Что именно это влечет за собой? Означает ли это, что если вы хотите поместить что-то в этот адрес, вы можете поместить все, что хотите? Смущен, и был бы признателен за все ответы. Благодарю.

2 ответа

Решение

Карты памяти обычно должны указывать, какие программы используют эту память. Если они говорят "не используется", это означает, что указанные программы не используют этот адрес. Здесь вы можете увидеть это лучше: https://www.c64-wiki.com/wiki/Zeropage:

Эти адреса ZEROPAGE полезны и важны при программировании C64 - настолько полезны, что внутренние ПЗУ системы KERNAL и BASIC используют большинство из них, оставляя лишь несколько из них, которые полностью "безопасны" для программистов на машинном языке для их собственных целей, без риска сбоя системы.

Таким образом, карта памяти действительна только для KERNAL и BASIC.

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

BASIC и KERNAL используют большую часть нулевых страниц (адреса $0000 через $00FF), оставляя вам мало для использования в собственных программах. Неиспользуемые адреса$0002 а также $00FB через $00FE.

Zero-page - это особенность 6502 и связанных с ним процессоров. Считайте инструкцию:

LDA $1234

Это загружает аккумулятор (один из регистров) с содержимым адреса $1234. Для адресов нулевой страницы есть более быстрая версия этой инструкции:

LDA $02

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

LDA ($FB),y

читает содержание $FB а также $FC, рассматривая их как 16-битные адреса с прямым порядком байтов, добавляет значениеYрегистр по этому 16-битному адресу, а затем загружает аккумулятор с этого адреса. Обратите внимание, что это использует два соседних байта в нулевой странице. Это делает четыре неиспользуемых байта в конце нулевой страницы намного более полезными, чем один неиспользованный байт в$02.

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

Если вы программируете на BASIC, все это не имеет значения. Вы, вероятно, будете использовать толькоPEEK а также POKEдля управления видео, аудио и вводом / выводом. Вы можете использовать переменные и массивы BASIC для хранения данных вашей программы.

LT; DR.

Он относится к рабочему адресу оперативной памяти, который не используется подпрограммами BASIC или KERNAL и является бесплатным для общего использования при программировании.

Длинное объяснение:

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

Ниже приведена общая карта памяти, взятая из COMPUTE! номер журнала 32

Карта памяти C64 легко настраивается. Вы можете видеть области ввода-вывода и ПЗУ, расположенные в верхней части области ОЗУ. В архитектуре C64 всегда есть скрытая RAM под областями ROM. Вы можете отключить области ПЗУ, которые вам не нужны, чтобы получить доступ к ОЗУ внизу и переключиться обратно на ПЗУ (или ввод / вывод), когда это необходимо. Вы также можете переместить экранную область в любое место.

Только область между $0000-$0400, которая называется рабочей памятью, является фиксированной, поскольку эта область используется операционной системой (интерпретатор BASIC и процедуры KERNAL). Если вы хотите использовать память в рабочей памяти без каких-либо странных побочных эффектов, вы должны закрыть BASIC или KERNAL ROM.

Например: если вы закроете BASIC, вы можете безопасно использовать адреса нулевой страницы от $2 до $90.

Есть и умные решения. Подобно утилитам, при условии, что вы не будете использовать набор данных, он находится в буфере набора данных ($033C-$03FB) или использует экранную память в качестве временного буфера и эффективно заполняет экран искаженными символами.

Я также должен напомнить, что первая страница памяти (от $ 0000 до $00FF) чрезвычайно важна для CPUS семейства 6502. Эта область называется нулевой страницей. Инструкции, работающие на нулевой странице, занимают на один байт меньше памяти и выполняются на один цикл быстрее. Кроме того, режимы индексированной косвенной и косвенной индексированной памяти доступны только на нулевой странице.

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

Обратите также внимание: пользовательские ML-программы обычно размещаются в $C000-$D000, который не затрагивается интерпретатором BASIC и называется "Free Ram".

Другие вопросы по тегам