PDA

Просмотр полной версии : Распределение памяти под CP/M



Арнольд
10.05.2012, 15:42
Доброго времени всем. Вот набросал распределение адресного пространства Z80, с учетом, что контроллер на нем будет работать под управлением cp/m-80. Выглядит это так:
35435
Все линейное адресное пространство разбито на две условные области - свободно сменяемую и несменяемую. В несменяемой области, RAM, объемом около 16 килобайт, будет находиться все ср/м хозяйство. Ну, кроме разве что области SYS VAR, которая размещается в самых нижних адресах памяти. Свободно сменяемая память физически состоит из 4 страниц, примерно по 48 килобайт каждая. Страница PAGE 1 содержит RAM, объемом 32 килобайта, смещенную в адресном пространстве на область SYS VAR, и ROM объемом 16 килобайт, с программой начального пуска и сетевой загрузки cp/m в несменяемую область RAM. Страницы PAGE 2 - PAGE 4 являются RAM с объемом 48 килобайт каждая. Оперировать ими будет cp/m.
Я конечно не программер, и может чего не совсем корректно представляю, но логически выглядит работоспособно.
P.S. Чего то картинки тут жутко сжимает :)

SfS
16.05.2012, 07:17
А о чём речь вообще?
Что ты хочешь сделать?

Vadim
16.05.2012, 08:11
Что ты хочешь сделать?
Видимо машинку которая позволит запустить banked CP/M 3 и banked MP/M. Только вот проще делать не так, а сделать 4 окна, в которые можно подключить любую страницу ОЗУ. Переключать банки просто - менять в первых трех окнах страницы, а для того что бы в первых 100h байтах ОЗУ (0000-00FF) байты не менялись - просто скопировать их по страницам. Код CP/M подобных систем вовсе не обязан лежать только в верхних адресах. Давным давно уже используется технология при которой в верхних адресах находится т.н. common block - который вызывает BDOS и передает ему параметры (а также возвращает параметры в программу), а сам код BDOS лежит в странице, которая на момент вызова ОСи из программы не подключена в адресное пространство, т.е. лежит в "скрытом" сегменте (странице).

krotan
31.08.2012, 09:33
Можно еще проще сделать. Всю cp/m 2.2 со всей ботвой самым стандартным образом разместить в трёх нижних банках. А верхний банк сделать переключаемым на всю память и доступным из программ.

Дмитрий
31.08.2012, 10:07
еще проще сделать
увы не проще... все программы, ориентированные на СП/М считают, что запускаются с адреса 100h, все компиляторы (C, Pascal) компилят именно в этот адрес, в общем переадресация потянет за собой переписывание всего софта...

krotan
31.08.2012, 12:11
увы не проще... все программы, ориентированные на СП/М считают, что запускаются с адреса 100h, все компиляторы (C, Pascal) компилят именно в этот адрес, в общем переадресация потянет за собой переписывание всего софта... я всё это знаю, ничего переписывать и переадресовывать не надо, просто верхняя планка памяти опускается под верхний банк памяти, он делается переключаемым и отдаётся прикладным программам (а возможно, и под ddos и экран). Спецификация cp/m такое допускает, верхняя граница памяти в cp/m не фиксирована. Нижняя остаётся где должна быть, программы запускаются с 100h. Извините, но читайте, пожалуйста, внимательно, что я написал:)