Уже давно не ново использование диспетчера памяти с подключением любой 16 кб страницы в любое окно адресного пространства. Когда то на ZX128 о таком диспетчере только мечтали, но АТМ2, Cпринтер, PentEvo сделали такие режимы адресации обыденными. Однако кто пробовал их использовать в реальных программах, осознавали? что использовать все преимущество от них все время что то мешает. То стэк, то малый размер одной страницы для кода. То обработчики прерываний. А ведь если задуматься, то все упиралось в объем адресуемой памяти z80 - все те же 64к.
В свое время, осваивая ассемблер 8086 я замечал, как много общего у него с z80. И вроде z80 может почти все тоже самое. Я даже назвал бы z80 не 8-битным а полу 16-битным процессором, так как он вполне спокойно справляется с 16 битными арифметическими командами. И тут напрашивается мысль, которая давно веяла. но её всегда отгоняли, думая что это невозможно в принципе, потому что не может быть. Чего не хватает для адресации более чем 64к ? Сегментных регистров. Но их то мы в реальный z80 ни как не впихнем, а переходить на другой тип процессора - это уже сильный шаг в сторону от концепции Спектрума.
И вот у меня такие вопросы для программистов конфигураций на Альтере. Возможно ли то что я предлагаю? и на сколько вам эта идей кажется интересной?
Вопрос. Может ли Альтера отловить коды команд (например опросить шину данных при М1)? Я думаю что по этому принципу сделан ускоритель в Спринтере.
Если это возможно, то есть такая идея, - ввести в конфигурацию режим сегментации. 2 сегмента данных для IX IY и сегмент стэка для SP.
Это сделало бы удобным и быстрым программирование при обработке больших объемов данных. А если возможно отловить работу со стэком, то и упростило бы написание многозадачных ОС.
Понадобится 12 портов (при жесткой 16 бит дешифрации, думаю не проблема)
4 порта - карта памяти для IX
4 порта - карта памяти для IY
4 порта - карта памяти для SP
можно не порты, а разместить ячейки их в диспетчере памяти.
При обработке команд чтения/записи памяти (с косвенной адресацией) через сегментные регистры IX, IY обращаться не к основной карте памяти, а к страницам,указанным в этих портах.
Ну и если это возможно, то вообще было бы супер отследить работу со стэком и подставлять тоже свою карту памяти.
Прошу не пинать за столь изощренную идею.
Просто представьте, что в этом режиме z80 адресует сразу 256 кб адресного пространства.
64 основные, 64 через IX, 64 через IY, 64 через SP. И это все сразу одновременно без щелканья страниц.
1. Нужно будет отловить все команды работы со стэком (pop push), команды вызова подпрограмм call, rst и возвратов из прерываний, ну и циклы обработки прерывания.
2. отловить команды ld a/r,(ix/iy+n), ld (ix/iy+n),a/r , и арифметические add/adc/sub/sbc a,(ix/iy+n) , inc/dec работы с битам.
В общем тут, думаю надо плясать от префиксов при M1 , и кода операции, что бы отловить только косвенную адресацию, а не загрузку в сами регистры ix, iy.
Думаю памяти альтеры должно хватить, И при выявлении закономерности в отлавливаемых командах (по маске) проверок будет не так уж и много.
На акслератор спринтера ушло не меньше проверок.
Ну и естественно этот режим расширенной адресации должен программно включаться и отключаться.
Ну что ? Как вам идея? Возможно все это реализовать?
А иначе смысл всяких супер видеорежимов, аппаратных спрайтов и тд, если процессор не видит сразу все адресное пространство видеопамяти?
З.Ы. Ну и буду совсем наглым, раз уж пошла такая пьянка, то можно ещё до кучи и обработать команды LDI и LDIR - сделать перед ними префекс из неиспользуемых команд, что бы чтение шло их сегмента IX а запись в сегмент IY