Могу только сказать, как это выглядит с программной стороны.
При задании номера блока (0-7F) он дублируется в порты 5 и 7, старший бит при этом=0.
При задании адреса внутри блока (8000-FFFF) порты 5 и 7 образуют как бы регистровую пару, порт 5 - старший байт, порт 7 - младший. Старший бит порта 5=1 (поэтому вместо 0000-7FFF получается 8000-FFFF).
Упаковщик MegaLZ, вряд ли его можно назвать апогеевским, он был разработан для спека. Возможно vinxru/alemorf еще выкладывал утилиту для сборки образа пзу, но я такой утилиты не видел.
Особенности сборки (по крайней мере для вектора). В каждом 32 Кб блоке первые 256 байт - загрузчик/распаковщик. Он грузит "оболочку" (блок 0, начальный адрес 8100h (если сбросить старший бит, то 100h) ). Последние 2 байта каждого 32 Кб блока - 55 AA, по ним начальный загрузчик (в пзу вектора) определяет границу внешнего пзу. Распаковщик обходит эти блоки из 256 и 2 байт в каждом блоке. В оболочке, насколько помню, для каждой программы из списка указаны блок и начальный адрес.





Ответить с цитированием