Отображение памяти в микропроцессоре 8085

В микропроцессоре 8085 доступно 64 КБ памяти, часть из которых назначена ПЗУ, а часть — ОЗУ. Мой вопрос: почему ПЗУ всегда сопоставляется с более низкой областью карты памяти в микропроцессоре 8085?

Ответы (4)

Процессору 8085 требуется ПЗУ с наименьшим адресом памяти, потому что после сброса он пытается получить инструкцию из ячейки 0. Если бы по этому адресу была ОЗУ, процессор извлекал бы случайные данные и не запускал бы программу.

Когда 8085 запускается, он начинает получать инструкции с нулевого адреса. Таким образом, необходимо, чтобы находящаяся там память содержала определенное содержимое. Однако это не означает, что нулевой адрес должен постоянно отображаться в ПЗУ. Можно построить систему, например, с 2 КБ ПЗУ, 64 КБ ОЗУ и дисководом для гибких дисков, и использовать бит ввода-вывода для управления тем, откуда считывается память: из ПЗУ или из ОЗУ. При запуске все операции чтения происходят из ПЗУ (записи идут в ОЗУ независимо от управляющего бита), а программа ПЗУ копирует себя в ОЗУ. Затем включите чтение из ОЗУ и загрузите программное обеспечение с дискеты. Поскольку нижняя часть адресного пространства будет ОЗУ, программное обеспечение, загруженное с дискеты, сможет настроить векторы прерываний для своих собственных целей, что было бы невозможно, если бы ПЗУ по-прежнему отображалось там.

LDIRявляется инструкцией Z80 и не существует на 8085.
@DaveTweed: исправлено. Если адрес источника и получателя могут быть одинаковыми, интересно, будет ли быстрее использовать MOV A,M / MOV M,A / INC L / JNZ / DEC H / JPили лучше использовать цикл POP / PUSH / POPинструкций (я не знаю о таймингах 8085, но на Z80 прежняя последовательность была бы 10 байт и занимает около 28 циклов на байт копирования или 13 байтов и 23 цикла на байт, если развернуто 2 раза; последнее займет 11 байт и займет около 22 циклов на байт, скопировано, если не развернуто, или 14 байт и 18,5 циклов на байт, если развернуто 2 раза)
@DaveTweed: я полагаю, с небольшой аппаратной настройкой можно было бы сделать вещи еще быстрее, включив ОЗУ для всех обращений к памяти, но сделав так, чтобы при включении ПЗУ утверждалась линия R/W ОЗУ, а не то, что скорость действительно имеет значение для такая инициализация. Кстати, мне любопытно, сколько машин с «креативной адресацией» включено. С аппаратной адресацией, эквивалентной небольшому CPLD (несколько 8-битных защелок, 16-битное ALU и несколько мультиплексоров), можно превратить 8085 в достойный 16-битный объектно-ориентированный ЦП с доступом к 256 КБ ОЗУ.
Одним из примеров «творческого оборудования для адресации» может быть Hitachi HD64180 (надстройка Z80). У него был способ разделить логическое адресное пространство размером 64 КБ на три области, каждая из которых могла быть сопоставлена ​​с физическим адресным пространством размером 1 МБ. Это довольно хорошо сочеталось с расширенными функциями более поздних версий CP/M, делая возможным своего рода многозадачность, наряду с RAM-диском, кэш-памятью гибкого диска и т. д. Но к этому времени IBM PC и другие 16- битовые процессоры становились обычным явлением, поэтому на 8-битных процессорах ничего особенного не делалось.
Если вам интересно, есть причина, по которой я сказал 1 МБ, а в статье Википедии указано 512 КБ. HD64180 был доступен в двух корпусах: 68-контактный PLCC и 64-контактный (!) DIP. Старший адресный бит (A19) был одним из контактов, которые им пришлось убрать в корпусе DIP, ограничив его до 512 КБ.
@DaveTweed: Это кажется довольно «обычным». Моя идея заключалась в том, чтобы иметь диапазон адресного пространства, доступного для использования прерываниями, и пару диапазонов адресного пространства, которые можно было бы перемещать по 4-байтовым границам. MMU будет постоянно фиксировать последний байт, выбранный с четного или нечетного адреса в ОЗУ, в области без прерываний, а или MOV B,Bбудет MOV C,Cустанавливать верхнюю или нижнюю перемещаемую базу базы на последнее выбранное слово, сдвинутое на два; MOV A,Aустановит перемещаемую базу по умолчанию. Таким образом, если кто-то хочет получить доступ к байту 4 объекта...
... можно сказать, что 160-й и 161-й байты базы по умолчанию mov A,A / lda 80A0h / mov B,B / lda 8004h. Таким образом, доступ к объектам в 256-килобайтном адресном пространстве будет быстрее, чем обычный доступ даже в 64-килобайтном адресном пространстве. Я проделал несколько похожие (хотя и более простые) трюки с игровым картриджем Atari 2600 (который получает 13 адресных проводов, 8 проводов данных, питание, землю и НИЧЕГО БОЛЬШЕ от ЦП), поэтому я мог построить пиксель HIRES в координате X. ,Y соответствующим образом расположенного растрового изображения через LDA $7F00,X / ORA $7E00,Y / STA $7E00,Y.

Я знаю, что это старо, но здесь, по памяти. Насколько я помню, 8080 и 8085 обычно имели аппаратную схему, которую использовали разработчики, которая состояла из одного вентиля, который переназначал память после трех тактовых сигналов — этого было достаточно для выполнения инструкции JMP. Таким образом, первые ячейки памяти в 0:0 были получены из СППЗУ, и гейт поменял местами СППЗУ с ОЗУ на 4-м такте в 0:0. Это из моей памяти 30-летней давности. Я бы искал аппаратные схемы запуска для домашних компьютеров 8085 - я предполагаю, что они там.

ПЗУ всегда отображается в нижней области карты памяти в микропроцессоре 8085, потому что после сброса он пытается получить инструкцию из местоположения o. Если бы в это время была оперативная память, то процессор выбирал бы случайные данные и не ставил бы программу. Так что ПЗУ не переместилось в другой регион.