Расширение памяти без использования портов
|
|
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 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата (Hazar) А что будет с портами если делать расширение до 32 мБ Когда-то давным-давно, когда деревья ещё были молодыми нечто подобное уже существовало, и никто не видел в этом никакой трагедии . У PC существует такой стандарт на расширенную память как EMS . Дык вот, если не изменяет склероз, стандарт EMS позволял открывать несколько окон по 16k, практически один в один как на Спектруме, и доступная страничная память как раз ограничивалась 32Mb . Всё довольно живенько бегало под EMS дисками, и никто не жаловался на портовую систему переключения страниц . Это я к тому, что собсно портовое управление никогда трагедией не было .
Что касательно юзания для управления страницами неких команд, то выгода по быстроте переключения страниц сомнительна, а вот большая ресурсоёмкость ловушек команд по сравнению с обычными портами бесспорна.. К тому же от базовых портов типа #7FFD всё равно никуда не денешься, ибо если это Спектрум - то обязаны быть, а нахрена их дублировать?
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "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 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: 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 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: 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 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: 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 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: 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) --------------------------------------------- Цитата 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 без использования портов Общая упрощенная модель памяти представлена на рис.
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 |
|
| |
|