MSX в proteus
Moderator: Shaos
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Re: MSX в proteus
И ещё интересно. Софт ожидает, что после старта во втором окне страница номер 1. И это сразу после сброса. Что-то я нигде не встречал упоминания о том, что в KonamiSCC так должно быть.
А нет, нашёл: http://bifi.msxnet.org/msxnet/tech/megaroms, оказывается это для всех мапперов так должно быть. Надо эмуль подправить.
P.S. Подправил.
А нет, нашёл: http://bifi.msxnet.org/msxnet/tech/megaroms, оказывается это для всех мапперов так должно быть. Надо эмуль подправить.
P.S. Подправил.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Что бы уйти от вариантов под какой вариант схемы какое ПО, берем вот этот архив, там файл MMCDISK1.ROM, он на 512КБ. Судя по описанию в текстовом файле это прошивка для схемы версии 1. Схемы в этом архиве, то же, есть.
По составу этот файл содержит помимо прошивки некий образ 'дискеты' с системным ПО.
Далее, в тексте есть указание, что все это работает на основном слоте, а не расширенном.
соотв. я делаю такую вставку в конфиге:
отключаю ром для msxdos2 и в таком варианте после трех перезагрузок заставки MSX проскакивает текст от SD и вылетает в Disk BASIC
собственно теперь вопрос как сам SD интерфейс прицепить по адресу 6FF0 и 6FF1?
видимо нужно SlotB разбить как MemMap?
только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки 
и еще
По составу этот файл содержит помимо прошивки некий образ 'дискеты' с системным ПО.
Далее, в тексте есть указание, что все это работает на основном слоте, а не расширенном.
соотв. я делаю такую вставку в конфиге:
Code: Select all
slotB : rom-mapper {
rom="MSX\mmcdisk1.rom"
default=1FFF,F,4000,D,3
default.ctl=5000,D,3,9800
}
mm : MSX-MemMap {
slot[0]=bios
slot[1]=slotA
slot[2]=slotB
slot[3]=slot3
}
видимо нужно SlotB разбить как MemMap?
Code: Select all
mm2 : MemMap2 {
map[00]=sdcard.ss
map[01]=sdcard.data
}
MMslotB : rom-mapper {
rom="MSX\mmcdisk1.rom"
default=1FFF,F,4000,D,3
default.ctl=5000,D,3,9800
}
slotB : MemMap {
map[0][0-6fef]=MMslotB
map[1][6ff0-6fff]=mm2
}

и еще
откуда схема выборки 6FEx-6FFx ? А4 в 1, а это только 6FFx (AFFx)!b2m wrote: ...По адресу AFEx-AFFx там регистр, включающий запись во флеш.
В-третьих, по схеме выборка SD/MMC вроде как 6FEx-6FFx...
You do not have the required permissions to view the files attached to this post.
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Вот это оперативность! Спасибо!b2m wrote: А нет, нашёл: http://bifi.msxnet.org/msxnet/tech/megaroms, оказывается это для всех мапперов так должно быть. Надо эмуль подправить.
P.S. Подправил.

-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Re: MSX в proteus
Мыслишь правильно. Только нужно учитывать, что MemMap не умеет с точностью до байта, границы должны быть кратны 100h. Для более мелкого деления я сделал MemMap2.PVV wrote:видимо нужно SlotB разбить как MemMap?
Без паники! rom-mapper поддерживает смещение, т.е. можно писать MMslotB[7000]PVV wrote:только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки
А я версию 2.2 смотрел. А ты оказывается первую прикручиваешь. Тады ой.PVV wrote:откуда схема выборки 6FEx-6FFx ? А4 в 1, а это только 6FFx (AFFx)!
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
тогда так:b2m wrote:Мыслишь правильно. Только нужно учитывать, что MemMap не умеет с точностью до байта, границы должны быть кратны 100h. Для более мелкого деления я сделал MemMap2.PVV wrote:видимо нужно SlotB разбить как MemMap?
Без паники! rom-mapper поддерживает смещение, т.е. можно писать MMslotB[7000]PVV wrote:только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки
Code: Select all
MMslotB : rom-mapper {
rom="MSX\mmcdisk1.rom"
default=1FFF,F,4000,D,3
default.ctl=5000,D,3,9800
}
mm2 : MemMap2 {
map[00-ef]=MMslotB[6f00]
map[f0]=sdcard.ss
map[f1]=sdcard.data
map[f2]=sdcard.ss
map[f3]=sdcard.data
map[f4]=sdcard.ss
map[f5]=sdcard.data
map[f6]=sdcard.ss
map[f7]=sdcard.data
map[f8]=sdcard.ss
map[f9]=sdcard.data
map[fa]=sdcard.ss
map[fb]=sdcard.data
map[fc]=sdcard.ss
map[fd]=sdcard.data
map[fe]=sdcard.ss
map[ff]=sdcard.data
}
slotB : MemMap {
map[0][0-6eff]=MMslotB
map[0][6f00-6fff]=mm2
map[0][7000-ffff]=MMslotB[7000]
}
мне вот только непонятно, а как реальный чип исключает из своего адресного пространства эту область для SD? , или если выбрать страницу за пределами 512КБ, те записать число больше 0х3F, то /OE ROM не сработает?... видимо так...
точно, а я А4 и не заметил во второй версии...b2m wrote:А я версию 2.2 смотрел. А ты оказывается первую прикручиваешь. Тады ой.PVV wrote:откуда схема выборки 6FEx-6FFx ? А4 в 1, а это только 6FFx (AFFx)!
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Если здесь
записать так
то запускается РОМ диск зашитый в прошивке, у нас страниц то много и маску надо расширить, ПЗУ 512КБ...
а mm.page , будет то, что пишется по адресу 7000. И не надо ли где то писать .wo , иначе при записи по адресам переключения страниц память будет портится?
Code: Select all
MMslotB : rom-mapper {
rom="MSX\mmcdisk1.rom"
default=1FFF,F,4000,D,3
default.ctl=5000,D,3,9800
}
Code: Select all
default=1FFF,3F,4000,D,3
а если это так, тогда не надо ли сделать что то типаPVV wrote: мне вот только непонятно, а как реальный чип исключает из своего адресного пространства эту область для SD? , или если выбрать страницу за пределами 512КБ, те записать число больше 0х3F, то /OE ROM не сработает?... видимо так...
Code: Select all
slotB : MemMap {
map[0-3f][0-ffff]=MMslotB
map[40-77][6f00-6fff]=mm2
}
-
- Doomed
- Posts: 665
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: MSX в proteus
Действительно не понятно. Как я понял кодом 3Fh мы включаем звуковой чип в окне 9800...9FFFh. Все остальное по прежнему доступно как ПЗУ. Надо видимо эмулятор или FPGA курить.PVV wrote:мне вот только непонятно, а как реальный чип исключает из своего адресного пространства эту область для SD? , или если выбрать страницу за пределами 512КБ, те записать число больше 0х3F, то /OE ROM не сработает?... видимо так...
Существующие схемы на рассыпухе не раскрываю полностью тему.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
3F это маска страниц в окне, те 0x3F=63, при счете страниц от 0 делаем +1, таким образом 8КБ*64=512КБ.Alekcandr wrote:Действительно не понятно. Как я понял кодом 3Fh мы включаем звуковой чип в окне 9800...9FFFh. Все остальное по прежнему доступно как ПЗУ. Надо видимо эмулятор или FPGA курить.
Как вот здесь http://bifi.msxnet.org/msxnet/tech/megaroms сказано:
и учитывая, что с чипа konamiSCC идет на ПЗУ сигнал /OE, получается, что при выборе страниц выше 3F сигнал /OE остается в 1, и ПЗУ не активирует свой выход, вот и получили возможность работать со своим устройством, в нашем случае SD.Unlike the Konami without SCC (konami4/8Kb) one this mapper does repeat the ROM just after the last ROM page.
и не то, что не раскрывают, а получается, что ни одна из существующих и мною увиденных схем не реализует ни один из РОМ мапперов! Все схемы на 74ls670 не поддерживают такой момент как при включении питания инициализация в каждом банке своим кодом:Alekcandr wrote: Существующие схемы на рассыпухе не раскрываю полностью тему.
те то, что b2m вчера добавил в эмулятор... и вариант на 155РУ2, который я встречал, аналогично, не поддерживает этот момент.By default, bank 1 has the value 0 and bank 2 the value 1, etc, etc. In this way the first 32Kb of the ROM is selected into 4000h - BFFFh.
Получается, что самый правильный вариант можно сделать, фактически, только на рассыпухе с тм2 с предуcтановкой ее по сбросу /set_ом и /reset_ом(ну или инверторы по входу и выходу на определенных ножках к защелкам). А если еще добавить проверку на превышение страниц 3F, для деактивации /OE, то вообще тот еще огород получится.
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Сделал конфиг, который 'почти' работает, хотя карты и не видит. На первый взгляд аппаратное не соответствие схемы SD интерфейса в эмуляторе и том, что ожидает программа. В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff. (Если поставить точку останова на 61Е2, то к этому моменту карта уже ответила 01 по адресу 6FFD, это начало. ) Я в паре мест за NOP_ил передачу этого завершающего FF, и карта стала видится, но проблема в том, как написан этот код, там нет единой функции передачи или приема, равно как нет единой функции передачи cmd или вычитки ответа, все просто линейно в коде идет
, похоже, что и вычитка 512 байт из карты сделана вызовом 4 раза одной функции в которой 128 раз повторяется 11и байтный код чтения одного байта из карты... и все это править в HEX, просто жесть.

You do not have the required permissions to view the files attached to this post.
-
- Doomed
- Posts: 665
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: MSX в proteus
Я вот тоже сунулся в код. Есть лоадер для IDA. Проблема в том, что этот лоадер хорош для простых игровых картриджей, где исполняемый код и данные, как правило, строго разделены и нет бешеных переключений маппера SCC. Да еще маппер SCC за уши притянут для msx-dos2. В общем, под уныл и подумал да ну этого корейца
Ждем b2m.

Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Каким образом вообще пишутся программы, работающие с мапперами? Контролируется размер кода кратно выбранной странице и программно переключаются страницы или просто пишется большой код, а затем прогоняется через некий упаковщик-маппер, который уже распределяет код по страницам?
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Re: MSX в proteus
Вполне возможно, что моя реализация эмуляции SD-карты далека от реальности. До сих пор всё работало, но это не означает, что работало как надо. Можно попробовать добавить "лишние" FF после принятия команды. Лишь бы всё остальное, что работало до сих пор, не сломалось. А такое может быть запросто.PVV wrote:В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка, и только после того, как она подумает, она выдает ответ. Вот здесь, на этой картинке, есть такое описаниеb2m wrote:Вполне возможно, что моя реализация эмуляции SD-карты далека от реальности. До сих пор всё работало, но это не означает, что работало как надо. Можно попробовать добавить "лишние" FF после принятия команды. Лишь бы всё остальное, что работало до сих пор, не сломалось. А такое может быть запросто.PVV wrote:В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff.
те карта на первый пакет clk выдает FF, а на второй уже ответ. Да и во всех боевых программах стоит цикл ожидания ответа с таймаутом, после любого cmd и лишний ff там повредить не должен. Я могу проверить работу SDOS с msx SD интерфейсом на любой из поддерживаемых платформ с этим дополнительным FF, а это тот же код, что и в исходном Вашем (b2m's) варианте xsd.как видно ответ SD карты приходит на втором пакете, увеличим развертку на этом фрагменте….
Однако я в коде увидел, что используется cmd18, а это групповая вычитка секторов, а не только cmd17, возможно и запись есть такая, я это не встретил еще. Так вот, cmd18 поддерживается? Сейчас эмулятор ответ на нее выдает 04, те не поддерживает- это после моих правок в hex коде, возможно я сделал что то не так...
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Re: MSX в proteus
Я тоже это знаю, но я не знал, что это может быть обязательным.PVV wrote:Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка
Ну, это-то понятно.PVV wrote:Да и во всех боевых программах стоит цикл ожидания ответа с таймаутом
Отлично. Как найду время, поправлю эмулятор.PVV wrote:Я могу проверить работу SDOS с msx SD интерфейсом на любой из поддерживаемых платформ с этим дополнительным FF
К сожалению - нет. Надо будет почитать, как это работает, видимо придётся добавлять.PVV wrote:Однако я в коде увидел, что используется cmd18, а это групповая вычитка секторов, а не только cmd17, возможно и запись есть такая, я это не встретил еще. Так вот, cmd18 поддерживается?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: MSX в proteus
Вот документ, весьма неплохо описывающий работу протокола SD и во второй его половине побитовая растактовка для разных cmd, и там есть параметры Ncr, Nwr и тд, так вот они должны быть минимально от 2х тактов CLK (стр. 59), те практически 8 бит это обязательный минимум.b2m wrote:Я тоже это знаю, но я не знал, что это может быть обязательным.PVV wrote:Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка
Возможно, что бы не менять уже прижившийся код, можно добавить еще один тип SD интерфейса к имеющимся sdcard.data и sdcard.data8, какой нибудь - sdcard.data2, в котором будет этот дополнительный FF...
В этом же документе сказано, что два байта CRC вычитывать надо обязательно после чтения данных.