Soviet Union ZX Spectrum CommunityЧетверг, 28.11.2024, 14:13
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Расширение памяти без использования портов
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
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
Цитата (Hazar)
А что будет с портами если делать расширение до 32 мБ

smile Когда-то давным-давно, когда деревья ещё были молодыми нечто подобное уже существовало, и никто не видел в этом никакой трагедии smile . У PC существует такой стандарт на расширенную память как EMS smile . Дык вот, если не изменяет склероз, стандарт EMS позволял открывать несколько окон по 16k, практически один в один как на Спектруме, и доступная страничная память как раз ограничивалась 32Mb smile . Всё довольно живенько бегало под EMS дисками, и никто не жаловался на портовую систему переключения страниц smile . Это я к тому, что собсно портовое управление никогда трагедией не было smile .

Что касательно юзания для управления страницами неких команд, то выгода по быстроте переключения страниц сомнительна, а вот большая ресурсоёмкость ловушек команд по сравнению с обычными портами бесспорна..
К тому же от базовых портов типа #7FFD всё равно никуда не денешься, ибо если это Спектрум - то обязаны быть, а нахрена их дублировать? smile


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Среда, 06.02.2013, 08:00 | Сообщение # 3
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Цитата (Black_Cat)
стандарт EMS позволял открывать несколько окон по 16k, практически один в один как на Спектруме, и доступная страничная память как раз ограничивалась 32Mb
Да я помню был такой файлик в DOS  EMM386

—  Расширенная память адресуется странично через «окно», находящееся в верхней зарезервированной области памяти (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
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
Цитата (Hazar)
на выполнение тратится всего 4 такта . И далее все работу проводит электроника)

smile по 4 такта на каждое увеличение или уменьшение счётчика. А если нужна страница на 128 вперёд? smile ..уж лучше IN/OUT smile

Не, счётчики - это ущербная идея.. smile


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "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
Координатор
Группа: Координаторы
Сообщений: 731
Статус: 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
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
Цитата (Hazar)
В этой проблеме процессор дело второстепенное

Нет, правильнее сказать, что такой проблемы насамделе не существует smile .


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "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
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
Цитата (Hazar)
а может потому и программ нет. что никто активно не использует ???


На Спектруме софта под 128к в несколько раз меньше чем под 16/48к, софта под 256к - ещё в несколько раз меньше, а под 512к - вообще на пальцах пересчитать.. Это обусловлено использованием в основном ассемблера, а на нём и 16к кода - это грандиозная по объёму работа.
Использование ассемлера обусловлено низкой производительностью компьютера вцелом (т.е. не токо процессора, но и отсутствием видео акселераторов, ПДП, и т.д.).
Необходимость в больших, непрерывно адресуемых блоках ОЗУ, возникает при использовании низкоквалифицированных программистов, компенсирующих квалификацию использованием языков высокого уровня, которые в свою очередь требуют более высокой производительности компьютера. Таким образом одна проблема - низкая производительность Спектрума, автоматически устраняет другую проблему - потребность в большой непрерывно адресуемой памяти.
Это очень созвучно русскому менталитету, где две беды - дураки и дороги, взаимно балансируют друг друга - дураки способствуют тому, что дороги плохие, а плохие дороги ограничивают использование их дураками, т.к. каждый дурак, разогоняющийся на российских дорогах - прекращает своё существование smile .

Отсюда так же можно сделать другой вывод - разработка новых клонов Спектрума, использующих более быстрые процессоры типа eZ80 или Z80180, позволит повсеместно применять высокоуровневое программирование. Но тут у Спектрума есть ещё одно балансирующее препятствие со всеми вытекающими - отсутствие нормальной, удовлетворяющей современным требованиям ОС.. smile


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Среда, 11.12.2013, 06:42 | Сообщение # 11
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Цитата Black_Cat ()
Необходимость в больших, непрерывно адресуемых блоках ОЗУ, возникает при использовании низкоквалифицированных программистов, компенсирующих квалификацию использованием языков высокого уровня, которые в свою очередь требуют более высокой производительности компьютера. Таким образом одна проблема - низкая производительность Спектрума, автоматически устраняет другую проблему - потребность в большой непрерывно адресуемой памяти.

Ну в этой цитате конечно есть доля правды  однако большой объем памяти можно использовать не только для машинного программирования,
но и для обработки массивов данных  например графика или звук  в цифровом представлении занимает много места .

Ну а насчет дураков один создает проблему а другой ее решает  это двигатель прогресса smile в итоге все дураки
Цитата 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)
---------------------------------------------
Цитата Hazar ()
а другое дело когда вдруг захотелось сделать 1024 страниц по 16 кб (2 097 152 Байт)
Ошибочка 1024 стр по 16 кб это получится 16 384 кБ (16 мБ)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Среда, 11.12.2013, 10:03
 
HazarДата: Пятница, 14.08.2015, 04:33 | Сообщение # 12
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Линейное расширение памяти до 16 mB без использования портов
Общая упрощенная модель памяти представлена на рис.
Прикрепления: 2560876.gif (30.0 Kb)


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
должен быть адаптирован со всеми вытекающими .
Прикрепления: 1156829.gif (40.2 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Вторник, 18.08.2015, 03:33
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz