
Microsoft Z-80 SoftCard — это плата расширения для Apple II, добавлявшая возможность запуска ПО компьютера CP/M. Согласно Википедии, это был первый аппаратный продукт Microsoft, и в 1980 году он стал самым крупным источником дохода для компании.
В CP/M установлен процессор 8080, а Apple II имеет процессор 6502. Так как же запустить CP/M на Apple II? На плате был смонтирован отдельный процессор Zilog Z80, совместимый с 8080; по множеству причин, перечисленных в Википедии¹, он превосходил 8080.
Отлично, у нас есть процессор. Но что будет происходить со старым процессором 6502? В идеале нужно бы его просто отключить, но это невозможно, потому что некоторые задачи всё равно должны выполняться 6502². Николь Брэнаган подробнее изучила историю о том, как сосуществовали эти два процессора. Принцип заключался в следующем: SoftCard сообщала 6502, что выполняет DMA, поэтому 6502 приостанавливал работу и ожидал завершения DMA. Однако нельзя оставлять 6502 на паузе слишком долго: его внутренние регистры могут деградировать и утерять свои значения.
Для решения этой проблемы можно воспользоваться линией REFRESH процессора Z80, которую он использует, чтобы сообщать, что пока не выполняет доступ к памяти (потому что декодирует команду). Это даёт понять цепи обновления внешней памяти, что она может работать и обновлять ОЗУ, чтобы оно не деградировало и не теряло свои значения.
Обновление памяти в Apple II выполняется видеосхемой, поэтому отдельный сигнал REFRESH не требуется. SoftCard использует этот сигнал, чтобы разрешить 6502 выполнить небольшую часть его задач. (Предположительно, он находится в цикле, ожидая, пока его разбудят.) Благодаря этому регистры 6502 обновляются.
Когда SoftCard нужно, чтобы 6502 выполнял работу, то она может обновить часть памяти, чтобы отдать 6502 приказ: «Выйди из своего цикла ожидания и выполни для меня работу, а затем сообщи ответ и вернись в цикл ожидания». Далее Z80 уходит в сон, пока не получит ответ от 6502.
Ещё одно препятствие для общего использования памяти процессорами 6502 и Z80 заключается в структуре памяти. И Z80, и 6502 считают первые 256 байт памяти особой областью и хотят использовать её для выполнения разных задач. Кроме того, ожидается, что программы CP/M будут загружаться по адресу $0100, но у 6502 жёстко прописано, что его стек CPU должен находиться в диапазоне $0100–$01FF. В нижней части структуры памяти Apple II есть и другие препятствия: системный монитор Apple II использует $0200–$02FF в качестве буфера клавиатурного ввода, байты в диапазоне $03F0–$03FF хранят векторы прерываний, а в $0400–$07FF находится текстовый буфер видеокадров. (В диапазоне $0800–$0BFF есть второй второй текстовый буфер видеокадров, но его почти никто не использует.) Другие серьёзные препятствия: диапазон памяти $C000–$CFFF, используемый периферийными устройствами, и диапазон $D000–$FFFF, содержащий ROM монитора Apple II, нельзя заменить ОЗУ при наличии Language Card (карты расширения памяти на 16 КБ), если только последние несколько байтов $FFFA–$FFFF не используются процессором в качестве векторов прерываний.
Решить все эти проблемы можно изменением структуры памяти, поместив в SoftCard цепь трансляции адресов, чтобы когда Z80, например, запрашивает адрес $0000, он получал физическую память $1000. Изменение структуры аккуратно проделано так, чтобы особые зарезервированные адреса Apple II были перенесены в конец структуры памяти Z80 и вся обычная ОЗУ Apple II занимала в структуре памяти Z80 сплошное адресное пространство, начинающееся с $0000³.

В руководстве по плате SoftCard есть множество подробностей о том, как писать для неё код. Например, там есть инструкции о том, как выполнять вызов подпрограммы 6502 из Z80, и есть таблица перераспределения памяти для Z80. В ней даже есть справочное руководство по процессору Z80 с перечнем всех команд. Это пригодится мне для будущего поста.
¹ Я не знаю, откуда взялся дефис в Z-80.
² Во многих случаях ввод-вывод обрабатывается циклами таймингов, поэтому если нужно получить доступ, допустим, к игровым контроллерам, то необходимо позволить 6502 выполнять ввод-вывод с его точными программными циклами таймингов.
³ Также имелись два буфера кадров графики высокого разрешения, один в диапазоне $2000–$3FFF, другой — в $4000–$5FFF. Они находятся прямо посередине структуры памяти Z80, но на практике это не представляет проблемы, потому что CP/M была операционной системой текстового режима, поэтому запускаемые при помощи платы расширения программы всё равно не пытались работать с графикой.
Комментарии (2)

hira
12.11.2025 06:06В CP/M установлен процессор 8080
Вспоминаю, что CP/M - это ОС. Как в ОС может быть установлен процессор?
NutsUnderline
вот здесь корявенько. можно сказать что в начале памяти находиться неперемещеаемая таблица векторов прерываний и начинается исполнение кода. но в том же zx spectrum от нее используются считанные байты,