| 
	
		
		
			| Расширение памяти без использования портов |  | 
				
			 |  | 
					| Hazar | Дата: Вторник, 05.02.2013, 14:59 | Сообщение # 1 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Пытаясь осмыслить и обобщить портовую структуру устройств ввода вывода ZX Spectrum я пришел к выводу что разработчики выбрали не самый лучший вариант
 расширения памяти.  Зачем так много  портов?
 
 Возможно в то старое время идея страничной организации (с помощью портов) казалась неким
 бонусом позволяющим без особых переделок платы компьютера получить значительное
 по тем временам расширение памяти.
 
 Но одно дело когда нужно листать и переключать 6 -7 страниц (128 -160 кб памяти),
 а другое дело когда вдруг захотелось сделать 1024 страниц по 16 кб (2 097 152 Байт)
 
 и это еще как говорится начало ,  2 мБ не так уж и много для приличной работы с графикой.
 
 А что будет с портами если делать расширение до 32 мБ . Вся это конструкция мне представляется
 в виде большой бутылки, но к сожалению несмотря на то-что бутыль то большая, а вот доступ
 как говорится к ее объему слишком узкий и неповоротливый .
 (система управления и мультиплексирования банков памяти по 16кб сложная и по всей видимости
 потребуется специальный драйвер для управления всей этой неповоротливой конструкцией)
 
 Теперь попробуем представить работу программиста в этой среде допустим надо сделать
 переход на другую  страницу памяти, то есть он должен каждый раз запоминать и вводить
 префиксы страниц естественно сами префиксы (приставки к адресу) то-же где то надо
 хранить и все это придется отслеживать в ручную.  Конечно для этой цели можно использовать
 менеджер памяти, но с тех пор прошло много времени а рабочих решений я так и не видел.
 ************************************************************************************
 
 Идея без-портового расширения памяти базируется на использовании какой-нибудь команды CPU
 
 которая с помощью несложного схемотехнического решения управляет реверсивным двоичным счетчиком,
 а счетчик в свою очередь листает сегменты памяти при этом сегментов может быть сколько угодно.
 
 Можно также предусмотреть возможность установки конкретного сегмента памяти (производится
 записью двоичного числа в счетчик) при этом управление памятью значительно упрощается.
 
 Старая страничная модель ZX Spectrum128 сохраняется (свыше 128 кб используется расширение
 памяти за счет сегментов которые адресует счетчик)
 
 ---------------------------------------------
 При использовании данной идеи с точки зрения программного кода такое переключение страниц
 похоже на линейную организацию памяти, где в качестве старших адресных разрядов шины адреса
 выступает двоичный счетчик
 Добавлено (05.02.2013, 14:59)---------------------------------------------
 Вот эти команды бесполезны
 LD B, B
 LD C, C
 LD D, D
 LD E, E
 
 если их использовать для других целей кто что думает
 
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Вторник, 05.02.2013, 12:58 |  |  |  |  |  | 
					| Black_Cat | Дата: Среда, 06.02.2013, 03:12 | Сообщение # 2 |  |  Координатор Группа: Координаторы Сообщений: 737 Статус: Offline | Цитата (Hazar) А что будет с портами если делать расширение до 32 мБ 
  Когда-то давным-давно, когда деревья ещё были молодыми нечто подобное уже существовало, и никто не видел в этом никакой трагедии  . У PC существует такой стандарт на расширенную память как EMS  . Дык вот, если не изменяет склероз, стандарт EMS позволял открывать несколько окон по 16k, практически один в один как на Спектруме, и доступная страничная память как раз ограничивалась 32Mb  . Всё довольно живенько бегало под EMS дисками, и никто не жаловался на портовую систему переключения страниц  . Это я к тому, что собсно портовое управление никогда трагедией не было  . 
 Что касательно юзания для управления страницами неких команд, то выгода по быстроте переключения страниц сомнительна, а вот большая ресурсоёмкость ловушек команд по сравнению с обычными портами бесспорна..
 К тому же от базовых портов типа #7FFD всё равно никуда не денешься, ибо если это Спектрум - то обязаны быть, а нахрена их дублировать?
   
 "Трудно найти чёрную кошку в тёмной комнате..  ...особенно, если её там нет", "Forever!".
 "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
 Гарри Трумэн
 |  |  |  |  |  | 
					| Hazar | Дата: Среда, 06.02.2013, 08:00 | Сообщение # 3 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Да я помню был такой файлик в DOS  EMM386Цитата (Black_Cat) стандарт EMS позволял открывать несколько окон по 16k, практически один в один как на Спектруме, и доступная страничная память как раз ограничивалась 32Mb
 —  Расширенная память адресуется странично через «окно», находящееся в верхней зарезервированной области памяти (UMA). Спецификация расширенной памяти (англ. Expanded Memory Specification, EMS) была разработана в 1984 году совместно Lotus Software, Intel и Microsoft, поэтому часто встречается сокращение LIM EMS. С конца 1980-х до
 середины 1990-х EMS активно использовалась в играх и коммерческих
 приложениях, однако с приходом спецификаций дополнительной памяти (XMS) стала использоваться реже.
 
 IBM PC/XT доступно адресное пространство 1 Мбайт. IBM решила использовать 640 Кбайт для основной памяти, а оставшиеся 384 Кбайт зарезервировала для ПЗУ и дополнительных устройств (см.: UMA).Однако, как правило, не вся UMA оказывается задействована, поэтому в ней можно выделить окно для организации страничного доступа к памяти,
 находящейся вне пределов доступного адресного пространства. Электронная
 схема под управлением программы-драйвера переключает страницы этой
 памяти таким образом, что в любой момент времени в окне отображается
 только одна страница, а остальные недоступны.Изначально было выделено окно в 64 Кбайт, позднее схема управления
 была модифицирована: размер окна мог быть изменён в зависимости от
 конкретной системы и в нём могло отображаться одновременно несколько
 страниц
 
 
 Цитата (Black_Cat) Всё довольно живенько бегало под EMS дисками, и никто не жаловался на портовую систему переключения страницРаботало быстро за счет повышенной тактовой частоты процессора и расширенной шины данных, сейчас страничную организацию памяти  не используют
 
 На ZX Spectrum несмотря на его большую популярность никто  серьезно не занимался  расширением памяти и видимо было не актуально с
 появлением PC/XT
 
 
 Цитата (Black_Cat) Что касательно юзания для управления страницами неких команд, то выгода по быстроте переключения страниц сомнительна, а вот большая ресурсоёмкость ловушек команд по сравнению с обычными портами бесспорна.по скорости выгода есть смотрим процедуру установки банка через порт
 SETPORT
 PUSH BC
 LD   BC,#7FFD
 LD  (BANK),A
 OUT ©,A
 POP BC
 RET
 
 A - выводимое в порт #7FFD значение, в переменной  BANK   ;Хранится текущее состояние порта #7FFD.
 При вызове этой процедуры в аккумуляторе должносодержаться уже подготовленное для вывода в порт значение,
 
 в битах 0—2 должен быть номер требуемого банка памяти
 
 Такую процедуру или подобную приходится выполнять каждый раз когда надо переключить страничку
 
 Теперь уже с этим нечего не сделаешь  это Spectrum 128,  но расширить сверх 128к можно по другому
 только переключаем не странички а сегменты (64 кб или 128 кб на выбор)  внутри сегмента может быть
 доступна страничная организация Spectrum 128.  Если выбран режим 48 к  То сегменты идут по 64 кб
 
 Что-бы переключать сегменты требуется всего 2 команды  ( LD A,A   и  LD B,B) первая команда увеличивает
 значение счетчика сегментов, вторая вычитает
 Схема простая похожая на дешифрацию портового устройства сигнал CPU IORQ при этом не используется.
 Вместо него на дешифратор заводится M1 и еще можно MREQ.
 
 Команды подобные LD A,A  не производят ни каких изменений (регистры процессора не изменяются стек не используется
 в отличии от команд  IN OUT , на выполнение тратится всего 4 такта . И далее все работу проводит электроника)
 
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Среда, 06.02.2013, 08:14 |  |  |  |  |  | 
					| Black_Cat | Дата: Среда, 06.02.2013, 20:22 | Сообщение # 4 |  |  Координатор Группа: Координаторы Сообщений: 737 Статус: Offline | Цитата (Hazar) на выполнение тратится всего 4 такта . И далее все работу проводит электроника) 
  по 4 такта на каждое увеличение или уменьшение счётчика. А если нужна страница на 128 вперёд?  ..уж лучше IN/OUT   
 Не, счётчики - это ущербная идея..
   
 "Трудно найти чёрную кошку в тёмной комнате..  ...особенно, если её там нет", "Forever!".
 "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
 Гарри Трумэн
 |  |  |  |  |  | 
					| Hazar | Дата: Четверг, 07.02.2013, 06:27 | Сообщение # 5 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Цитата (Black_Cat) А если нужна страница на 128 вперёд?Сразу прыжком на 128 страниц вперед?  Есть много разрядные счетчики со сбросом и записью числа.
 
 в принципе счетчик это тот-же регистр только с возможностью счета .
 
 Если не ставить счетчик то все-равно текущий сегмент надо где-то запоминать
 
 Ну а какие еще варианты можно рассмотреть по расширению памяти без портов?
 
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Четверг, 07.02.2013, 08:23 |  |  |  |  |  | 
					| Black_Cat | Дата: Четверг, 07.02.2013, 15:52 | Сообщение # 6 |  |  Координатор Группа: Координаторы Сообщений: 737 Статус: Offline | Цитата (Hazar) Ну а какие еще варианты можно рассмотреть по расширению памяти без портов? А смысл в таком управлении? Ни по скорости управления, ни по ресурсоёмкости схемотехники выгоды нет. Если очень уж хочется (не понимаю зачем) бери eZ80, он непосредственно адресует 16Мб.
 
 "Трудно найти чёрную кошку в тёмной комнате..  ...особенно, если её там нет", "Forever!".
 "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
 Гарри Трумэн
 |  |  |  |  |  | 
					| Hazar | Дата: Пятница, 08.02.2013, 06:16 | Сообщение # 7 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Все равно для совместимости надо делать страничную организацию памяти, В этой проблеме процессор дело второстепенноеЦитата (Black_Cat) бери eZ80, он непосредственно адресует 16Мб
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Пятница, 08.02.2013, 06:18 |  |  |  |  |  | 
					| Black_Cat | Дата: Суббота, 09.02.2013, 14:55 | Сообщение # 8 |  |  Координатор Группа: Координаторы Сообщений: 737 Статус: Offline | Цитата (Hazar) В этой проблеме процессор дело второстепенноеНет, правильнее сказать, что такой проблемы насамделе не существует
  . 
 "Трудно найти чёрную кошку в тёмной комнате..  ...особенно, если её там нет", "Forever!".
 "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
 Гарри Трумэн
 |  |  |  |  |  | 
					| Hazar | Дата: Суббота, 09.02.2013, 19:36 | Сообщение # 9 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Цитата (Black_Cat) Нет, правильнее сказать, что такой проблемы насамделе не существуетТочно а еще более правильнее сказать что так как программ для линейной адресации нет,
 то и особо нужды ставить такой процессор нет (если конечно не принимать во внимание его частоту)
 
 а может потому и программ нет. что никто активно не использует ???
 
 Тут нужны свежие идеи как сохранить старое и в то-же время получить развитие в будущем
 Может можно каким либо способом представить (преобразовать в смысле) страничную
 память как линейную, только что-бы конечно программы "ничего не заметили"
 
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Суббота, 09.02.2013, 19:42 |  |  |  |  |  | 
					| Black_Cat | Дата: Четверг, 28.03.2013, 13:53 | Сообщение # 10 |  |  Координатор Группа: Координаторы Сообщений: 737 Статус: Offline | Цитата (Hazar) а может потому и программ нет. что никто активно не использует ???
 На Спектруме софта под 128к в несколько раз меньше чем под 16/48к, софта под 256к - ещё в несколько раз меньше, а под 512к - вообще на пальцах пересчитать.. Это обусловлено использованием в основном ассемблера, а на нём и 16к кода - это грандиозная по объёму работа.
 Использование ассемлера обусловлено низкой производительностью компьютера вцелом (т.е. не токо процессора, но и отсутствием видео акселераторов, ПДП, и т.д.).
 Необходимость в больших, непрерывно адресуемых блоках ОЗУ, возникает при использовании низкоквалифицированных программистов, компенсирующих квалификацию использованием языков высокого уровня, которые в свою очередь требуют более высокой производительности компьютера. Таким образом одна проблема - низкая производительность Спектрума, автоматически устраняет другую проблему - потребность в большой непрерывно адресуемой памяти.
 Это очень созвучно русскому менталитету, где две беды - дураки и дороги, взаимно балансируют друг друга - дураки способствуют тому, что дороги плохие, а плохие дороги ограничивают использование их дураками, т.к. каждый дурак, разогоняющийся на российских дорогах - прекращает своё существование
  . 
 Отсюда так же можно сделать другой вывод - разработка новых клонов Спектрума, использующих более быстрые процессоры типа eZ80 или Z80180, позволит повсеместно применять высокоуровневое программирование. Но тут у Спектрума есть ещё одно балансирующее препятствие со всеми вытекающими - отсутствие нормальной, удовлетворяющей современным требованиям ОС..
   
 "Трудно найти чёрную кошку в тёмной комнате..  ...особенно, если её там нет", "Forever!".
 "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
 Гарри Трумэн
 |  |  |  |  |  | 
					| Hazar | Дата: Среда, 11.12.2013, 06:42 | Сообщение # 11 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Цитата Black_Cat (  ) Необходимость в больших, непрерывно адресуемых блоках ОЗУ, возникает при использовании низкоквалифицированных программистов, компенсирующих квалификацию использованием языков высокого уровня, которые в свою очередь требуют более высокой производительности компьютера. Таким образом одна проблема - низкая производительность Спектрума, автоматически устраняет другую проблему - потребность в большой непрерывно адресуемой памяти.Ну в этой цитате конечно есть доля правды  однако большой объем памяти можно использовать не только для машинного программирования,
 но и для обработки массивов данных  например графика или звук  в цифровом представлении занимает много места .
 
 Ну а насчет дураков один создает проблему а другой ее решает  это двигатель прогресса
  в итоге все дураки Цитата Black_Cat (  ) Но тут у Спектрума есть ещё одно балансирующее препятствие со всеми вытекающими - отсутствие нормальной, удовлетворяющей современным требованиям ОС
 ОС она на пустом месте конечно не появится сначала решают проблемы схемотехники . И доступность быстрой расширенной  памяти  для программирования и обработки данных  это одна из первостепенных задач развития любой платформы.
 
 Добавлено (11.12.2013, 06:07)
 ---------------------------------------------
 В продолжение темы еще одна "дурацкая идея"  без портового расширения памяти
 *********************************************************************
 
 Суть идеи заключается в модификации оригинального VHDL  ядра процессора T80  (аналог Z80  Zilog)
 такие идеи уже всплывали на разных ресурсах посвященных ретро компьютерам обычно люди
 предлагали добавить адресные линии процессору что в общем то смотрится не плохо  решает все проблемы,  но требует
 хорошего знания  языка аппаратного программирования   VHDL .  У меня же на этот счет появилась другая идея
 связанная с модификацией программного ядра расширить не адресную шину процессору а шину данных до 32 бита
 
 такая модификация выглядит вполне логично так как у Z80 полно 3, и 4 байтовых  команд которые последовательно через узкую
 
 8 битную шину данных загружаются в процессор что выглядит как-то неестественно .
 
 В итоге память расширяется в 4 раза автоматом и для стандартного Spectrum 128 получаем 512 кБ.
 Других каких-либо модификаций ядра не требуется.
 
 Добавлено (11.12.2013, 06:42)
 ---------------------------------------------
 
 Ошибочка 1024 стр по 16 кб это получится 16 384 кБ (16 мБ)Цитата Hazar (  ) а другое дело когда вдруг захотелось сделать 1024 страниц по 16 кб (2 097 152 Байт)
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Среда, 11.12.2013, 10:03 |  |  |  |  |  | 
					| Hazar | Дата: Пятница, 14.08.2015, 04:33 | Сообщение # 12 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Линейное расширение памяти до 16 mB без использования портов Общая упрощенная модель памяти представлена на рис.
 
   
 Spectrum жив в нашей душе навсегда
 |  |  |  |  |  | 
					| Hazar | Дата: Понедельник, 17.08.2015, 18:14 | Сообщение # 13 |  |  80h Группа: Пользователи Сообщений: 231 Статус: Offline | Общая идея линейного расширения памяти (с помощью сегментов по 64 kB) базируется на нестандартном применении команд загрузки регистров процессора например (LD ,HL #4).
 Обычно в машинном коде программ очень часто встречаются одиночные команды загрузки числовых констант в регистры процессора,
 но как правило две одинаковые команды расположенные друг за другом никогда не используется, например выполнение последовательности
 Команд ld,hl 0004 --->> ld,hl 8232 загрузит в регистр HL последнее значение (8232) , при этом первая константа будет потеряна если конечно
 не сделать “теневой” перехват этой команды при этом константу первой команды можно сохранить во внешнем регистре и в дальнейшем
 использовать сохраненное значение для адресации дополнительной памяти.
 
 Сама по себе дополнительная адресация практически бесполезна без механизма
 Переходов на сегменты дополнительной памяти поэтому в предлагаемой реализации схемы добавлен участок схемы который
 также перехватывает код операции JP (HL) которую обычно используют для безусловных переходов. В итоге всех манипуляций
 получаем программный переход на новый сегмент только в случаи выполнения всех 3 команд.
 
 Листинг процедуры установки нового сегмента:
 #8195 LD, HL 0004 // установка нового сегмента (hex- 04)
 #8198 LD, HL 8232 //загрузка адреса перехода в регистр HL
 #819B JP(HL) //переход на адрес # 8232 в четвертом сегменте
 
 Предлагаемый вариант схемы не производит ни каких переключений (отключений) стандартного ПЗУ Spectrum 48,128 поэтому
 после перехода в адресное пространство (допустим сегмента №4). Пользователю доступны все стандартные программы,
 процедуры которые входят в состав текущей подключенной прошивки.
 
 
   
 ---------------------------------------------
 Несколько заметок по поводу применения стека совместно с дополнительными
 сегментами памяти . К сожалению пока не нашел простого метода применения
 стека для всего дополнительного адресного пространства. Проблема состоит в сл.
 При исполнении команд использующих стек (CALL , RET, PUSH, POP, RST ) процессор автоматически сохраняет (либо восстанавливает) необходимые адреса в 16 битном представлении , а при использовании “виртуального” адресного пространства .
 Адрес должен быть представлен уже в (24 битном) варианте с явным указанием номера сегмента только в этом случаи появляется возможность полноценного использования всего адресного пространства, другими словами задача сводится к реализации “теневого механизма” который должен выполнять перехват всех стековых команд и в момент
 Выполнения команды сохранять код текущего сегмента в отдельном участке памяти
 Специально назначенным для этой цели. Ну а пока эта задача не решена при программировании с использованием дополнительных сегментов следует помнить
 Что все переходы (стековые возвраты) будут работать только в пределах текущего сегмента.
 
 Добавлено (17.08.2015, 18:14)
 ---------------------------------------------
 
 Цитата Black_Cat (  ) Отсюда так же можно сделать другой вывод - разработка новых клонов Спектрума, использующих более быстрые процессоры типа eZ80 или Z80180, позволит повсеместно применять высокоуровневое программирование. Но тут у Спектрума есть ещё одно балансирующее препятствие со всеми вытекающими - отсутствие нормальной, удовлетворяющей современным требованиям ОС.. smile 
 Не понимаю чем вас не устраивает T80 вместо eZ80, частоту можно сейчас варьировать в большем диапазоне, быстродействие современных plis позволяет
 Есть весь системный софт (ассемблеры- дизассемблеры ,теневые отладчики)
 
 А разработка нового клона для eZ80 это довольно серьезное дело требующая существенных средств и вложений .Ну и для использования всех возможностей
 этого процессора потребуется разработка системного П.О. так как система команд у него расширена то и весь софт использующий линейный режим >128 kB
 должен быть адаптирован со всеми вытекающими .
 
 Spectrum жив в нашей душе навсегда
 
 
 Сообщение отредактировал Hazar - Вторник, 18.08.2015, 03:33 |  |  |  |  |  
 |