Инструменты пользователя

Инструменты сайта


msx:unimapper:unimapper

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:unimapper:unimapper [2022-11-13 15:14]
GreyWolf [Необходимые доработки]
msx:unimapper:unimapper [2023-08-06 10:20] (текущий)
GreyWolf [Версия 2.0]
Строка 6: Строка 6:
   * [[#Konami]]   * [[#Konami]]
   * [[#Konami SCC]]   * [[#Konami SCC]]
-  * [[#ASC8]] +  * [[#ASCII8]] 
-  * [[#ASC16]]+  * [[#ASCII16]]
  
 (C) Pyhesty 2021–2022,​ 2022 RBSC (C) Pyhesty 2021–2022,​ 2022 RBSC
Строка 20: Строка 20:
  
 Необходимость разработки универсального маппера для наиболее распространённых мапперов компьютера MSX возникла по причине того, что имеющиеся схемы мапперов имели следующие недостатки:​ Необходимость разработки универсального маппера для наиболее распространённых мапперов компьютера MSX возникла по причине того, что имеющиеся схемы мапперов имели следующие недостатки:​
-  - не обеспечивали сброса состояния маппера по сигналу Reset. +  - не обеспечивали сброса состояния маппера по сигналу Reset; 
-  - не обеспечивали универсальности и были не взаимозаменяемые. +  - не обеспечивали универсальности и были не взаимозаменяемые; 
-  - содержали достаточно большое количество корпусов,​ сложный или дорогой монтаж.+  - содержали достаточно большое количество корпусов,​ сложный или дорогой монтаж;
   - содержали откровенные ошибки в схемах,​ что усложняло бы их использование любителями.   - содержали откровенные ошибки в схемах,​ что усложняло бы их использование любителями.
  
-С целью устранения данных недостатков было принято решение разработать маппер на PLD микросхемах малой степени интеграции типа [[programmable_logic_device:​programmable_logic_device#​GAL22V10D|GAL22V10D]],​ которые достаточно хорошо распространены,​ недорогие и обладают нужным функционалом. В частности: ​   +С целью устранения данных недостатков было принято решение разработать маппер на PLD-микросхемах малой степени интеграции типа [[programmable_logic_device:​programmable_logic_device#​GAL22V10D|GAL22V10D]],​ которые достаточно хорошо распространены,​ недорогие и обладают нужным функционалом. В частности: ​   
-  - 11 входов. +  - 11 входов; 
-  - 10 выходов. +  - 10 выходов; 
-  - Позволяют реализовать любую функцию входных сигналов. +  - позволяют реализовать любую функцию входных сигналов; 
-  - Позволяют использовать данные для функции выходных сигналов. +  - позволяют использовать данные для функции выходных сигналов; 
-  - Содержат 10 регистров,​ что позволяет хранить до 10 бит данных.+  - содержат 10 регистров,​ что позволяет хранить до 10 бит данных.
  
-Функция маппера в картриджах MSX состоит в том, чтобы обеспечить адресацию относительно большой ПЗУ микросхемы объёмом 128кБ и более в ограниченное адресное пространство шины (все адресное пространство которой 64кБ). В стандарте MSX адресное пространство в 64кБ может быть поделено по 16кБ между разными устройствами находящимися в так называемых слотах (подробнее [[msx:​ram:​ram#​mapper|здесь]]). Картриджу по умолчанию выдаётся слот в 32кБ начиная с адреса 0x4000 по адрес 0xBFFF. Далее картридж должен сам определять использование данного пространства. Если картридж небольшой и его ПЗУ до 64кБ он может не применять маппер,​ но в случае,​ когда требуется больший объем, то он вынужден в какомто из адресных пространств меня страницы ПЗУ. Как именно будет происходить смена сегментов ПЗУ — определяет на аппаратном уровне разработчик картриджа. Наиболее распространено разделение 32кБ на четыре страницы по 8кБ, это очень удобно для игр, так как для разных сцен можно хранить разные наборы данных сцены и переключать их по необходимости. При обращении по определённому адресному пространству (в общем случае одному из четырёх) должен подставляться адрес нужной страницы. Для объёма картриджа в 128кБ требуется 16 сегментов по 8кБ. Для адресации 8кБ требуется 13 бит адреса (2^13), эти адреса подключаются к микросхеме памяти напрямую,​ а старшие четыре бита адреса (16 страниц требуют 4 бита адресации) подключаются через схему маппера. ​+Функция маппера в картриджах MSX состоит в том, чтобы обеспечить адресацию относительно большой ПЗУ микросхемы объёмом 128кБ и более в ограниченное адресное пространство шины (все адресное пространство которой 64кБ). В стандарте MSX адресное пространство в 64кБ может быть поделено по 16кБ между разными устройстваминаходящимися в так называемых слотах (подробнее [[msx:​ram:​ram#​mapper|здесь]]). Картриджу по умолчанию выдаётся слот в 32кБ начиная с адреса 0x4000 по адрес 0xBFFF. Далее картридж должен сам определять использование данного пространства. Если картридж небольшой и его ПЗУ до 64кБон может не применять маппер,​ но в случае,​ когда требуется больший объем, то он вынужден в каком-то из адресных пространств менять страницы ПЗУ. Как именно будет происходить смена сегментов ПЗУ — определяет на аппаратном уровне разработчик картриджа. Наиболее распространено разделение 32кБ на четыре страницы по 8кБ, это очень удобно для игр, так как для разных сцен можно хранить разные наборы данных сцены и переключать их по необходимости. При обращении по определённому адресному пространству (в общем случае одному из четырёх) должен подставляться адрес нужной страницы. Для объёма картриджа в 128кБ требуется 16 сегментов по 8кБ. Для адресации 8кБ требуется 13 бит адреса (2¹³), эти адреса подключаются к микросхеме памяти напрямую,​ а старшие четыре бита адреса (16 страниц требуют 4 бита адресации) подключаются через схему маппера. ​
  
 ====== Теория ====== ====== Теория ======
  
 Маппер должен обеспечивать:​ Маппер должен обеспечивать:​
-  - Дешифрацию адреса переключения номера страницы. +  - дешифрацию адреса переключения номера страницы; 
-  - Сохранение нового номера сегменты соответствующей страницы. +  - сохранение нового номера сегменты соответствующей страницы; 
-  - Дешифрацию адреса страницы и выдачу номера установленного сегмента. +  - дешифрацию адреса страницы и выдачу номера установленного сегмента. 
-Классически сохранением адресов сегментов занимаются микросхемы файловых регистров,​ такие как 74LS670 или 555ИР26. Которые на самом деле представляют собой оперативное запоминающее устройство (память) на 16 бита с организацией 4 бита данных на 2 бита адреса. ​Что позволяет одной микросхеме хранить данные о шестнадцати сегментах для каждой из четырёх страниц. Специальная схема упрощённой дешифрации адреса устанавливает адрес на чтение и команду на запись. К сожалению,​ недостатком схемы собранной на файловом регистре будет невозможность изначальной инициализации регистров файлового регистра,​ что не позволит запускать некоторые ROM.+Классически сохранением адресов сегментов занимаются микросхемы файловых регистров,​ такие как 74LS670 или 555ИР26, которые на самом деле представляют собой оперативное запоминающее устройство (память) на 16 бит с организацией 4 бита данных на 2 бита адреса. ​Это позволяет одной микросхеме хранить данные о шестнадцати сегментах для каждой из четырёх страниц. Специальная схема упрощённой дешифрации адреса устанавливает адрес на чтение и команду на запись. К сожалению,​ недостатком схемысобранной на файловом регистребудет невозможность изначальной инициализации регистров файлового регистра,​ что не позволит запускать некоторые ROM.
  
 Условное графическое обозначение К555ИР26,​ KM555ИP26 Условное графическое обозначение К555ИР26,​ KM555ИP26
Строка 98: Строка 98:
 ===== Konami ===== ===== Konami =====
  
-64 страницы × 8 Кбайт, объём до 512 Кбайт+64 страницы × 8 кБайт, объём до 512 кБайт
  
-Маппер является наиболее простым. Нулевая страница всегда содержит нулевой сегмент. Дополнительным является требование,​ что первая страница должна содержать первый сегмент. Это невозможно реализовать на простом маппере с файловым регистромбез применения сложный схемы инициализации страниц по сигналу Reset. К счастью большинство игр самостоятельно выполняют инициализацию первой страницы.  +Маппер является наиболее простым. Нулевая страница всегда содержит нулевой сегмент. Дополнительным является требование,​ что первая страница должна содержать первый сегмент. Это невозможно реализовать на простом маппере с файловым регистром без применения сложный схемы инициализации страниц по сигналу Reset. К счастью большинство игр самостоятельно выполняют инициализацию первой страницы.  
-Количество бит для реализации маппера:​ 3 * log2(количество сегментов). В частности,​ для 128кБ требуется 3*4 = 12бит, для 256кБ = 16бит и для 512кБ = 20бит. ​+Количество бит для реализации маппера:​ 3 * log₂(количество сегментов). В частности,​ для 128кБ требуется 3*4 = 12 бит, для 256кБ = 16 бит и для 512кБ = 20 бит. ​
  
 ^  Страница (8кБ) ​ ^  Адрес переключения ​ ^  Начальный сегмент ​ ^ ^  Страница (8кБ) ​ ^  Адрес переключения ​ ^  Начальный сегмент ​ ^
Строка 113: Строка 113:
 [[msxorg>​wiki/​MegaROM_Mappers#​Konami.27s_MegaROMs_without_SCC|Konami'​s MegaROMs without SCC ]] [[msxorg>​wiki/​MegaROM_Mappers#​Konami.27s_MegaROMs_without_SCC|Konami'​s MegaROMs without SCC ]]
  
-===== ASC8 =====+===== ASCII8 ​=====
  
-32 страницы × 8 Кбайт, объём до 256 Кбайт+32 страницы × 8 кБайт, объём до 256 кБайт
  
 Маппер аналогичен [[#​Konami]],​ но,  Маппер аналогичен [[#​Konami]],​ но, 
-  * вопервых,​ значительно упрощена инициализация сегментов — они все должны быть равны нулю (к сожалению,​ некоторые ROM требуют уникальную инициализацию сегментов) +  * во-первых,​ значительно упрощена инициализация сегментов — они все должны быть равны нулю (к сожалению,​ некоторые ROM требуют уникальную инициализацию сегментов), 
-  * вовторых,​ возможно переключение нулевого сегмента +  * во-вторых,​ возможно переключение нулевого сегмента, 
-  * втретьих,​ отличные адреса переключения от [[#​Konami]] +  * в-третьих,​ отличные адреса переключения от [[#​Konami]] 
-Количество требуемых бит для хранения:​ 4 * log2(количество сегментов). В частности,​ для 128кБ требуется 4*4 = 16бит, для 256кБ = 20бит и для 512кБ = 24бита.+Количество требуемых бит для хранения:​ 4 * log₂(количество сегментов). В частности,​ для 128кБ требуется 4*4 = 16 бит, для 256кБ = 20 бит и для 512кБ = 24 бита.
 К счастью,​ большинство ROM не требует переключение сегментов нулевой страницы. К счастью,​ большинство ROM не требует переключение сегментов нулевой страницы.
  
Строка 133: Строка 133:
 ---- ----
  
-[[msxorg>​wiki/​MegaROM_Mappers#​ASC8_.28ASCII.29|ASC8 (ASCII)]]+[[msxorg>​wiki/​MegaROM_Mappers#​ASC8_.28ASCII.29|ASCII8]]
  
  
-===== ASC16 =====+===== ASCII16 ​=====
  
-ASC16 (ASCII)  +32 страницы × 16 кБайт, объём до 512 кБайт
- +
-32 страницы × 16 Кбайт, объём до 512 Кбайт+
  
 Маппер имеет следующие отличия: ​ Маппер имеет следующие отличия: ​
-  - Размер страницы:​ 16кБ +  - размер страницы:​ 16кБ, 
-  - Количество страниц:​ две ​+  - количество страниц:​ две.
  
-Количество требуемых бит для хранения:​ 2 * log2(количество сегментов). В частности,​ для 128кБ требуется 2*4 = 8бит, для 256кБ = 10бит и для 512кБ = 12бит.+Количество требуемых бит для хранения:​ 2 * log₂(количество сегментов). В частности,​ для 128кБ требуется 2*4 = 8 бит, для 256кБ = 10 бит и для 512кБ = 12 бит.
 К счастью,​ большинство ROM не требует переключение сегментов нулевой страницы. К счастью,​ большинство ROM не требует переключение сегментов нулевой страницы.
  
Строка 158: Строка 156:
 ---- ----
  
-[[msxorg>​wiki/​MegaROM_Mappers#​ASC16_.28ASCII.29|ASC16 (ASCII)]]+[[msxorg>​wiki/​MegaROM_Mappers#​ASC16_.28ASCII.29|ASCII16]]
  
  
Строка 176: Строка 174:
  
 {{:​msx:​unimapper:​unimapper_20_top.jpg|}} {{:​msx:​unimapper:​unimapper_20_bottom.jpg|}} {{:​msx:​unimapper:​unimapper_20_top.jpg|}} {{:​msx:​unimapper:​unimapper_20_bottom.jpg|}}
 +
 +[[github>​RBSC/​Unimapper/​tree/​master/​_OldVersions/​Firmware/​v2.0|Firmware v2.0]]
 +
  
 Версия 1.0 была максимально гибкой,​ и содержала излишнее количество элементов,​ в данном описании не упоминается,​ хотя присутствует в репозитории. Версия 1.0 была максимально гибкой,​ и содержала излишнее количество элементов,​ в данном описании не упоминается,​ хотя присутствует в репозитории.
  
-Схема 2.0 максимально упрощена,​ предполагается,​ что 0я страница всегда содержит нулевой сегмент. Это условие выполняется для большинства известных ROM и всегда выполняется для стандарта [[#​Konami]]. +Схема 2.0 максимально упрощена,​ предполагается,​ что 0-я страница всегда содержит нулевой сегмент. Это условие выполняется для большинства известных ROM и всегда выполняется для стандарта [[#​Konami]]. 
-Адреса A0 — A12 заведены непосредственно на ПЗУ.+Адреса A0 – A12 заведены непосредственно на ПЗУ.
  
-Адреса A13-A18 поступают с маппера,​ которые реализован на GAL22V10+Адреса A13 – A18 поступают с маппера,​ которые реализован на GAL22V10
  
 Сигнал выбора слота /SLTSL, записи /WR и сброса /RESET заведены на комбинационные входы PLD (GAL22V10), так же заведена тактовая частота,​ которая требуется для синхронной работы внутренних регистров. ​ Сигнал выбора слота /SLTSL, записи /WR и сброса /RESET заведены на комбинационные входы PLD (GAL22V10), так же заведена тактовая частота,​ которая требуется для синхронной работы внутренних регистров. ​
  
-Объединение выводов PLD 14-16, 17-19, 20-22 обеспечивают монтажное ИЛИ выходных регистров PLD. Резисторы R1-R6 — обеспечивают подтяжку выводов к «0», когда выходы PLD выключены и неактивны,​ что обеспечивает ещё одно (четвертое) состояние выхода,​ при выборе нулевой страницы.  ​+Объединение выводов PLD 14 – 16, 17 – 19, 20 – 22 обеспечивают монтажное ИЛИ выходных регистров PLD. Резисторы R1 – R6 — обеспечивают подтяжку выводов к «0», когда выходы PLD выключены и неактивны,​ что обеспечивает ещё одно (четвертое) состояние выхода,​ при выборе нулевой страницы.  ​
  
 {{sch_v2.0.jpg|}} {{sch_v2.0.jpg|}}
Строка 196: Строка 197:
 Описание работы маппера в режиме [[#​Konami|Konami без SCC]] Описание работы маппера в режиме [[#​Konami|Konami без SCC]]
  
-PLD содержит 10 регистров (или бит памяти) и позволяет реализовать до 10ти комбинационных схем. Каждая схема каждого бита содержит:​ предустановку бита, установку бита и сохранение это бита во всех остальных случаях. ​+PLD содержит 10 регистров (или бит памяти) и позволяет реализовать до 10 комбинационных схем. Каждая схема каждого бита содержит:​ предустановку бита, установку бита и сохранение этого бита во всех остальных случаях. ​
  
-Вот пример описания всех четырёх состояний одного бита. Условно первое число отвечает за номер бита, второй за номер страницы (которых как раз четыре,​ как и количество состояний бита). В зависимости от установленного адреса активируется ответственный за текущее состояние регистр.+Вот пример описания всех четырёх состояний одного бита. Условно первое число отвечает за номер бита, второе за номер страницы (которых как раз четыре,​ как и количество состояний бита). В зависимости от установленного адреса активируется ответственный за текущее состояние регистр.
  
 <​code>​ <​code>​
Строка 212: Строка 213:
 </​code>​ </​code>​
  
-  * <​code>​!nReset#</​code>​ отвечает за предустановку регистра при сигнале сброс в "​1"​, таком образом нулевой бит для первой страницы будет равен ​"​1"​, что соответствует стандарту.+  * <​code>​!nReset#</​code>​ отвечает за предустановку регистра при сигнале сброс в «1», таком образом нулевой бит для первой страницы будет равен ​«1», что соответствует стандарту.
   * <​code>​(!nWE&​!nSTSL)</​code>​ дешифратор сигнала записи,​ когда выбран слот ''/​STSL''​ и поступает сигнал ''/​WE'',​ значит происходит запись в адресное пространство слота.   * <​code>​(!nWE&​!nSTSL)</​code>​ дешифратор сигнала записи,​ когда выбран слот ''/​STSL''​ и поступает сигнал ''/​WE'',​ значит происходит запись в адресное пространство слота.
-  * <​code>​A13&​!A15</​code>​ дешифратор адреса первой страницы,​ для дешифрации достаточного адресных бит A15 и A13 +  * <​code>​A13&​!A15</​code>​ дешифратор адреса первой страницы,​ для дешифрации достаточно адресных битов A15 и A13 
-  * <​code>​((!nWE&​!nSTSL)&​A13&​!A15&​di0)</​code>​ в случае если дешифрован адрес и пришёл сигнал записи,​ то бит устанавливается в соответствии с битом установленным на шине данных,​ ''​di0''​+  * <​code>​((!nWE&​!nSTSL)&​A13&​!A15&​di0)</​code>​ в случае если дешифрован адрес и пришёл сигнал записи,​ то бит устанавливается в соответствии с битомустановленным на шине данных,​ ''​di0''​
   * <​code>​((nWE#​nSTSL)&​d01)</​code>​ в случае,​ если не пришёл сигнал записи,​ то состоянии бита сохраняется тем, что хранится в регистре ''​d01''​   * <​code>​((nWE#​nSTSL)&​d01)</​code>​ в случае,​ если не пришёл сигнал записи,​ то состоянии бита сохраняется тем, что хранится в регистре ''​d01''​
   * <​code>​((!nWE&​!nSTSL)&​(!A13#​A15)&​d01))</​code>​ и наконец,​ последний возможный вариант,​ поступили сигналы записи по адресу слота, но указан адрес другой страницы,​ то состояние бита сохраняется (''​d01''​).   * <​code>​((!nWE&​!nSTSL)&​(!A13#​A15)&​d01))</​code>​ и наконец,​ последний возможный вариант,​ поступили сигналы записи по адресу слота, но указан адрес другой страницы,​ то состояние бита сохраняется (''​d01''​).
  
-Аналогичная логика применена и для всех остальных бит.  +Аналогичная логика применена и для всех остальных битов.  
-Для чтения данных состояния бит задающих сегменты для каждой из страниц применено монтажное ИЛИ, то есть вне микросхемы PLD сигналы объединены и допускается активность только одного из выхода/​регистра состояния для каждого из бит.+Для чтения данных состояния битов, задающих сегменты для каждой из страницприменено монтажное ИЛИ, то есть вне микросхемы PLD сигналы объединены и допускается активность только одного из выходов/​регистров состояния для каждого из битов.
  
-Их мультиплицирование производится включением и выключением выходов регистров. Когда выход выключен,​ он находится в Zсостоянии и не влияет на состояние выходов. Когда все выходы выключены,​ то работает подтяжка (тот самым монтажный d00) и состояние бита равно 0, что соответствует нулевому сегменту первой страницы.+Их мультиплицирование производится включением и выключением выходов регистров. Когда выход выключен,​ он находится в Z-состоянии и не влияет на состояние выходов. Когда все выходы выключены,​ то работает подтяжка (тот самым монтажный d00) и состояние бита равно 0, что соответствует нулевому сегменту первой страницы.
  
-Вот так происходит включение регистров в зависимости от адреса страниц (сигналы адреса A13 и A15 – задают номер страницы)+Вот так происходит включение регистров в зависимости от адреса страниц (сигналы адреса A13 и A15 задают номер страницы)
 <​code>​ <​code>​
 d01.oe = A13&​!A15;​ – выбор первой страницы d01.oe = A13&​!A15;​ – выбор первой страницы
 d02.oe = !A13&​A15;​ – выбор второй страницы d02.oe = !A13&​A15;​ – выбор второй страницы
 d03.oe = A13&​A15; ​ – выбор третьей страницы d03.oe = A13&​A15; ​ – выбор третьей страницы
-d11.oe = A13&​!A15;​ – и тд+d11.oe = A13&​!A15;​ – и тд.
 d12.oe = !A13&​A15;​ d12.oe = !A13&​A15;​
 d13.oe = A13&​A15;​ d13.oe = A13&​A15;​
Строка 236: Строка 237:
 d23.oe = A13&​A15;​ d23.oe = A13&​A15;​
 </​code>​ </​code>​
-Таким образом 9 бит PLD сохраняют состояние ​3бит адреса сегмента для всех четырёх страниц.+Таким образом 9 битов PLD сохраняют состояние ​битов адреса сегмента для всех четырёх страниц.
  
-Что бы подключить ещё 3 бита адреса сегмента (что бы расширить количество сегментов до  2^6 = 64х), требуется ещё одна PLD.+Чтобы подключить ещё 3 бита адреса сегмента (чтобы расширить количество сегментов до  2⁶ = 64), требуется ещё одна PLD.
  
  
-{{anchor:impl_asc8}} +{{anchor:impl_ascii8}} 
-===== ASC8 =====+===== ASCII8 ​=====
 Описание работы маппера в режиме ​ Описание работы маппера в режиме ​
  
-Маппер для [[#ASC8]] аналогичен мапперу для [[#​impl_Konami|Konami]],​ но требуется большее количество бит для дешивровки адреса устанавливаемого сегмента (так как отличается адресация). Так же часть функции отвечающая за сброс по сигналу Reset, одинаковая для всех бит и сбрасывает их в ноль.+Маппер для [[#ASCII8]] аналогичен мапперу для [[#​impl_Konami|Konami]],​ но требуется большее количество бит для дешифровки адреса устанавливаемого сегмента (так как отличается адресация). Также часть функцииотвечающая за сброс по сигналу Reset, одинаковая для всех бити сбрасывает их в ноль.
 <​code>​ <​code>​
 /* 1 - page bit 0 */ /* 1 - page bit 0 */
Строка 261: Строка 262:
 </​code>​ </​code>​
  
-{{anchor:impl_asc16}} +{{anchor:impl_ascii16}} 
-===== ASC16 =====+===== ASCII16 ​=====
  
-Описание работы маппера в режиме ​ASC16+Описание работы маппера в режиме ​ASCII16
  
-Маппер для ​ASC16 отличается,​ для хранения состояния бита сегмента требуется ​ не четыре бита, а только два, поэтому часть бит просто не используется. Нулевой бит адреса сегмента пробрасывает адрес А13. Аналогично [[#​impl_Konami|Konami]] и [[#impl_asc8|ASC8]] реализован сброс, установка и чтение.+Маппер для ​ASCII16 ​отличается,​ для хранения состояния бита сегмента требуется ​ не четыре бита, а только два, поэтому часть битов просто не используется. Нулевой бит адреса сегмента пробрасывает адрес А13. Аналогично [[#​impl_Konami|Konami]] и [[#impl_ascii8|ASCII8]] реализован сброс, установка и чтение.
  
 <​code>​ <​code>​
Строка 301: Строка 302:
  
  
-Версия 3.0 позволяет за счёт добавления ещё одной PLD реализовать [[#Konami SCC]]  маппер,​ а так же полностью совместимый маппер [[#ASC8]] и аналогичные,​ объёмом до 512кБ, а также без применений дополнительной ​PLD микросхемы (без D3) маппер объёмом до 256кБ. Это может быть особенно важным при использовании ROM генерированной с применением программы [[msx:​dsk2rom:​dsk2rom|DSK2ROM]],​ которая преобразует образ диска в образ ПЗУ.+Версия 3.0 позволяет за счёт добавления ещё одной PLD реализовать [[#Konami SCC]]-маппер,​ а также полностью совместимый маппер [[#ASCII8]] и аналогичные,​ объёмом до 512кБ, а также без применений дополнительной ​PLD-микросхемы (без D3) маппер объёмом до 256кБ. Это может быть особенно важно при использовании ROMгенерированной с применением программы [[msx:​dsk2rom:​dsk2rom|DSK2ROM]],​ которая преобразует образ диска в образ ПЗУ.
  
-Теперь каждая GAL на выходе реализует монтажное ИЛИ для ​2.5 бит адреса сегмента. Для каждой из страниц реализуются все возможные состояния адресов сегмента. GAL1 и GAL2 выполнены фактически симметрично,​ GAL3 (D3) использует только четыре регистра.+Теперь каждая GAL на выходе реализует монтажное ИЛИ для ​2½ бит адреса сегмента. Для каждой из страниц реализуются все возможные состояния адресов сегмента. GAL1 и GAL2 выполнены фактически симметрично,​ GAL3 (D3) использует только четыре регистра.
  
-Количество пассивных элементов уменьшено,​ фактически резисторы R2–R6 не требуются,​ так как теперь состояния всех выходов адреса сегмента полностью определены в каждый момент времени.+Количество пассивных элементов уменьшено,​ фактически резисторы R2 – R6 не требуются,​ так как теперь состояния всех выходов адреса сегмента полностью определены в каждый момент времени.
  
 {{:​msx:​unimapper:​sch_v3.0.jpg|}} {{:​msx:​unimapper:​sch_v3.0.jpg|}}
Строка 323: Строка 324:
 Описание маппера [[#Konami SCC]] Описание маппера [[#Konami SCC]]
  
-Структура регистра аналогичная,​ только вместо монтажного 0 задающего адрес нулевого сегмента (подтягивающего резистора) используется явный регистр d00 (и аналогичные d10, d20 и тд). Это необходимо,​ что бы обеспечить адресацию в нулевой странице всех сегментов ПЗУ.+Структура регистра аналогичная,​ только вместо монтажного 0задающего адрес нулевого сегмента (подтягивающего резистора) используется явный регистр d00 (и аналогичные d10, d20 и тд). Это необходимо,​ чтобы обеспечить адресацию в нулевой странице всех сегментов ПЗУ.
  
 <​code>​ <​code>​
Строка 367: Строка 368:
 </​code>​ </​code>​
  
-Аналогично,​ для всех регистров определены всех их состояния выходов в зависимости от адреса страницы.+Аналогично,​ для всех регистров определены все их состояния выходов в зависимости от адреса страницы.
  
 <​code>​ <​code>​
Строка 394: Строка 395:
 <WRAP center round important>​ <WRAP center round important>​
 Ограничения текущей версии платы и программы:​ Ограничения текущей версии платы и программы:​
-  - Поддерживается только тип микросхемы памятиSST39SF040 +  - поддерживается только тип микросхемы памяти SST39SF040; 
-  - Программа записи работает только с слотом B (2), поэтому для работы в режиме записи нужно устанавливать картридж в этот слот.+  - программа записи работает только со слотом B (2), поэтому для работы в режиме записи нужно устанавливать картридж в этот слот.
 </​WRAP>​ </​WRAP>​
  
Строка 408: Строка 409:
 </​WRAP>​ </​WRAP>​
   - Выполнить подключение переключателя по схеме:<​WRAP>​   - Выполнить подключение переключателя по схеме:<​WRAP>​
-^  Контакт ​ ^  Описание ​ +^  Контакт ​       ^  Описание ​                                    ​
-|Управление|К контакту 6 любой микросхемы GAL| +| Управление ​     Подключить к контакту 6 любой микросхемы GAL  
-|Режим "​чтение"​|Минус питания ​земле через резистор 1–10кОм| +| Режим "​чтение" ​ Подключить к "земле" ​через резистор 1–10кОм ​  ​
-|Режим "​запись"​|Питание (+5В)|+| Режим "​запись" ​ | Подключить к питанию (+5В) ​                   |
  
-:!: Высокий уровень (5В) на контакте 6 микросхемы GAL меняет режим работы схемы ​и "чтение" ​на "запись". В режиме ​"запись" ​невозможна загрузка с картриджа!+:!: Высокий уровень (5В) на контакте 6 микросхемы GAL меняет режим работы схемы ​с «чтения» на «запись». В режиме ​«запись» невозможна загрузка с картриджа!
  
 В качестве переключателя можно использовать:​ В качестве переключателя можно использовать:​
 \\ [[https://​radioremont.com/​product/​knopka_pb22e08_s_fiksaciey_8x8x13_mm/​|PB22E08 — кнопка с фиксацией 8×8×13]] + [[https://​radioremont.com/​product/​kolpachok-dlya-knopok-a28-red/​|Колпачок для кнопок A28 Red, K243-25]] \\ [[https://​radioremont.com/​product/​knopka_pb22e08_s_fiksaciey_8x8x13_mm/​|PB22E08 — кнопка с фиксацией 8×8×13]] + [[https://​radioremont.com/​product/​kolpachok-dlya-knopok-a28-red/​|Колпачок для кнопок A28 Red, K243-25]]
 </​WRAP>​ </​WRAP>​
-  - Соединить контакт 9 микросхемы GAL (D3) с контактом 18 микросхемы ППЗУ (D4) +  - Соединить контакт 9 микросхемы GAL (D3) с контактом 18 микросхемы ППЗУ (D4): \\  
 +{{:​msx:​unimapper:​30_back-fix_2.jpg?​600|}}
 ==== Использование ==== ==== Использование ====
  
-{{:​msx:​unimapper:​umapperprog_221002.zip|Архив с необходимыми файлами}} +{{:​msx:​unimapper:​unimapper35.zip|Архив с необходимыми файлами}}
  
 **Порядок подготовки маппера и ПО** **Порядок подготовки маппера и ПО**
-  - Запрограммировать GAL микросхемы соответствующим маппером +  - Запрограммировать GAL микросхемы соответствующим маппером. 
-  - Записать нужные для программирования ROM на диск. Расширение файлов ROM должны быть ''​.rom''​ +  - Записать нужные для программирования ROM на диск. Расширение файлов ROM должны быть ''​.rom''​. 
-  - Записать программу ''​um.com''​+  - Записать программу ''​um.com''​.
  
-**Порядок работы:** +**Порядок работы** 
-  - Установить переключатель в "режим запись" +  - Установить переключатель в режим ​«запись». 
-  - Запустить MSX и загрузить [[msx:dos:dos|]] +  - Запустить MSX и загрузить [[msx:dos2:dos2|]] или [[msx:​nextor:​nextor|]]. 
-  - Запустить программу ''​um.com''​ +  - Запустить программу ''​um.com''​. 
-    - Выбрать тип маппера +    - Выбрать тип маппера. 
-    - Вести имя ROM файла без расширения +    - Вести имя ROM-файла без расширения. 
-    - Дождаться результатов записи+    - Дождаться результатов записи.
  
-**Что можно проконтролировать в программе записи:** +**Что можно проконтролировать в программе записи** 
-  - После ввода имени файла происходит поиск ПЗУ. Код ​ПЗУ ​SST39SF040 ​— BF B7 +  - После ввода имени файла происходит поиск ПЗУ. ​\\ Код SST39SF040BF B7. 
-  - Выводится отладочная информация по текущим сегментам в страницах памяти (первые четыре байта) +  - Выводится отладочная информация по текущим сегментам в страницах памяти (первые четыре байта). 
-  - После стирания ПЗУ во всех ячейках памяти всех сегментов код FF+  - После стирания ПЗУ во всех ячейках памяти всех сегментов код FF.
  
 ====== Ссылки ====== ====== Ссылки ======
msx/unimapper/unimapper.1668341681.txt.gz · Последние изменения: 2022-11-13 15:14 — GreyWolf