Порты памяти

Помощь новичкам в программировании процессора Z80. Обмен исходниками, идеями.

Модератор: Spectre

Ответить
darkSAM
junior
Сообщения: 5
Зарегистрирован: Вс июл 02, 2006 2:43

Сообщение darkSAM » Вс июл 02, 2006 14:27

Интересует архитектурное решение увеличения памяти на различных клонах ZX. На сколько знаю, общепринято испоьзовать порт 32765d для переключения страниц. Как там с теневым ОЗУ, адресуемом на 00000d..16383d, и на каких машинах. Какие еще порты используются?

У меня был Quorum 128+. Классня тачка. Жаль, сдохла.

Там 2 порта было. Первый 32765 как у всех. Другой 00000. С него можно было включать 0-ую траницу вместо ПЗУ. Использовалось для CP/M.

Аватара пользователя
Spectre
Добрый и отзывчивый
Сообщения: 253
Зарегистрирован: Пн июн 26, 2006 1:16

Сообщение Spectre » Вс июл 02, 2006 16:03

32765d = #7ffd

Порт 0 при спектрумской архитектуре использоваться не может, потому что при попытке в него что-нибудь записать число попадет во все существующие порты. Правда при этом это число попадет и в порт памяти :), но такая адресация будет глючить на других клонах, так что лучше обращаться только так:

LD BC,#7FFD
LD A,#10
OUT (C),A

Код: Выделить всё

 Вот описание всех получивших распространение стандартов: 
 
					 ----------------------------
					 ----- Стандарты памяти -----
					 ----------------------------
 
Для переключения памяти в Scorpion, KAY, Profi и ATM1 используется 2
порта - это #7ffd (0, 1 и 2-ой биты) + биты дополнительного порта.
 
Для Pentagon и ATM2 используется один порт (только #7ffd).
 
					 --------- Pentagon ---------
 
256K - используется 6-ой бит #7FFD
512K - используются 6 и 7 биты #7FFD
1024K - используются 5, 6 и 7 биты #7FFD
4096K - используются 5, 6, 7 биты #7FFD + 0,1 биты #AFF7
 
Примечание насчет последних двух: 5-ый бит в оригинальном спектруме
служит для отключения порта #7FFD, посему есть вероятность оказаться в
48-ом режиме.
 
				------------ Scorpion/KAY ------------
 
256К - используется 4-ый бит #1FFD (Scorpion и KAY)
512K - не бывает
1024K Scorpion - используются 4, 6 и 7-ой биты #1FFD
1024K KAY - используются 4 и 6 биты #1FFD + 6-ой бит #7FFD
 
						 ----- Profi -----
 
256К-1024К - используются 0, 1 и 2 биты #DFFD
 
Примечание: На Profi физически присутствует 4 линейки памяти (значения
0,1 2,3 4,5 и 6,7 в порту #DFFD). Линейки могут быть запаяны как РУ5
(64Кб), так и РУ7 (256Кб). Если памяти 1Мб, то все просто - стоит 4
линейки по 256Кб. Но большое количество Profi имеет 256К, 512К, 768К и
576К(!) памяти. Например, в Profi 576K используется 0,1,2,3 банки и четверть
7-ой банки памяти.
 
						 ----- ATM-1 -----
 
256К - не бывает
512K - используются 0 и 1 биты #FDFD
1024К - используются 0, 1 и 2-ой биты #FDFD
 
Насчет 1024K: на оригинальном ATM-1 всегда было только 512Кб. 2-ой бит
порта #FDFD использовался при подключении ПЗУ объемом не 64Кб (27512)
как обычно, а 128Кб (271000). Он выбирал дополнительные 4 странички.
Но этот наворот практически никогда и нигде не использовался, даже в
ATM-2 (хотя сейчас разрабатывается новое ПЗУ на все 128Кб для ATM-2,
но не для ATM-1). Так что этот бит практически являлся неиспользуемым,
что и позволило народным умельцам его задействовать. То есть стандарт
неофициальный.
 
						 ----- ATM-2 -----
 
256К и 512К - может и были, но я никогда не слышал
1024K: есть 2 способа адресации страниц: с использованием #7ffd+#fff7 и
только через #fff7. В #fff7 биты записываются инвертированные!
Раскладка битов порта #FFF7 такая:
0-5 - номер страницы (0-63).
6 - определяет, что это за страница: 0 - ROM, 1 - RAM
7 - Определяет сочетание #FFF7 и #7FFD. А именно: 0 - определяет
страницы только порт #FFF7, а 1 - инвертированные D0-D2 порта #FFF7
заменяются на неинвертированные D0-D2 из порта #7FFD. Биты старше них
продолжают браться из порта #FFF7.
 
Сам порт #FFF7 доступен только из TR-DOS ПЗУ. Биты в него записываются
инвертированные! Пример работы:
 
	 LD BC,#FFF7
	 LD A,n
	 CPL
	 CALL OUTC
	 ...
 
OUTC LD HL,#2A53 ;здесь OUT (C),A:RET
	 PUSH HL
	 JP #3D2F

darkSAM
junior
Сообщения: 5
Зарегистрирован: Вс июл 02, 2006 2:43

Сообщение darkSAM » Вс июл 02, 2006 17:11

Спасибо за инфу!

По поводу 0-го порта. В Quorum он работает именно так, как я и сказал. А еще там порты дисковода другие. В общем клон, не совсем совместимый со спекки. И клава там расширенная. В общем, проблемы я имел с запуском некоторых программ. Сдох и ладно.

У всех машин 2-ая и 5-ая страницы отображаются по адресам 32768..49151 и 16384..32767 соответственно? Имеется в виду постоянное отображение в указанные адреса. В то же время их можо включить в верхней области (49152..65535).

Аватара пользователя
Spectre
Добрый и отзывчивый
Сообщения: 253
Зарегистрирован: Пн июн 26, 2006 1:16

Сообщение Spectre » Вс июл 02, 2006 23:51

У всех машин 2-ая и 5-ая страницы отображаются по адресам 32768..49151 и 16384..32767 соответственно? Имеется в виду постоянное отображение в указанные адреса. В то же время их можо включить в верхней области (49152..65535).
Да, 128Кб на всех клонах реализованы одинаково, поскольку это стандарт Spectrum 128K. Фирменного спектрума с памятью больше 128К не было, поэтому каждый производитель придумал свой стандарт.

В оригинальном 128К спектруме:

#4000-7fff (16384-32767) - 5-я страница
#8000-#bfff (32768-49151) - 2-я страница
#c000-ffff (49152-65535) - 0-я страница (или любая 0-7)

Вместо ПЗУ на многих клонах можно включить 0-ю страницу ОЗУ, на каждом клоне способ разный. Это: Profi, KAY, Scorpion, ATM1, ATM2.

Также вместо ПЗУ можно включить теневое ОЗУ (или cache). Оно бывает 16Кб или 32Кб (тогда половинки переключаются так же как ПЗУ 48/128 через порт #7ffd). Теневое ОЗУ можно припаять к любому спектруму и много где это сделано. Особенно удобно завести обработку кнопки Magic в теневое ОЗУ, тогда если туда предварительно загрузить STS можно легко ломать программы. Включение: IN A,(#FB), выключение: IN A,(#7B).

Аватара пользователя
eXe.EG
activist
Сообщения: 140
Зарегистрирован: Пн июл 03, 2006 0:39

Сообщение eXe.EG » Ср июл 05, 2006 19:23

Spectre писал(а): ----- ATM-1 -----

256К - не бывает
512K - используются 0 и 1 биты #FDFD
1024К - используются 0, 1 и 2-ой биты #FDFD
Историческая справка ;)
Была такая шняга как Инфотон. По портам расширеной памяти совпадал с АТМ-1. Соответственно можно было там помимо дефолтных 128Кб заиметь 256, 384, 512Кб и по идее 1024Кб, но это уже не гарантирую, давно было - не помню. Но варианты с 256, 384 и 512 я у себя ставил. Так что в принципе могут быть и такие варианты. Хотя я думаю Инфотон широкого распространения не получил, да и вряд ли он у кого-то сейчас есть, так что можно все это не учитывать. Разве что, как я и сказал в качестве истории ;)
ужас :)

Аватара пользователя
Spectre
Добрый и отзывчивый
Сообщения: 253
Зарегистрирован: Пн июн 26, 2006 1:16

Сообщение Spectre » Ср июл 05, 2006 22:12

eXe.EG писал(а):Была такая шняга как Инфотон. По портам расширеной памяти совпадал с АТМ-1. Соответственно можно было там помимо дефолтных 128Кб заиметь 256, 384, 512Кб и по идее 1024Кб, но это уже не гарантирую, давно было - не помню. Но варианты с 256, 384 и 512 я у себя ставил. Так что в принципе могут быть и такие варианты. Хотя я думаю Инфотон широкого распространения не получил, да и вряд ли он у кого-то сейчас есть, так что можно все это не учитывать. Разве что, как я и сказал в качестве истории
Очень интересно. :idea:

Но мой драйвер памяти (который в QC) все равно проверяет все доступные банки и отбраковывает недоступные. Так что будет работать и на 144Кб по стандарту АТМ1. :)

Prusak
junior
Сообщения: 8
Зарегистрирован: Вт июн 27, 2006 11:57

Сообщение Prusak » Чт июл 06, 2006 9:52

Spectre писал(а):Порт 0 при спектрумской архитектуре использоваться не может, потому что при попытке в него что-нибудь записать число попадет во все существующие порты.
Это при условии, что порты сделаны в железе с "кривой" выборкой по битам, т.е. при их выборке используется нулевое значение одного или нескольких битов. Обычно совместно с нулевыми используют единичные значения определенных битов, тогда при адресации нулевого порта ничего страшного не произойдет.

В каком-то тесте была запись в нулевой порт, может это была проверка компа "на вшивость", но мой комп глюкал на этом тесте, пока не сделал нормальную адресацию портов расширения.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя