MSX в proteus

MSX-совместимые компьютеры

Moderator: Shaos

b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: MSX в proteus

Post by b2m »

И ещё интересно. Софт ожидает, что после старта во втором окне страница номер 1. И это сразу после сброса. Что-то я нигде не встречал упоминания о том, что в KonamiSCC так должно быть.

А нет, нашёл: http://bifi.msxnet.org/msxnet/tech/megaroms, оказывается это для всех мапперов так должно быть. Надо эмуль подправить.

P.S. Подправил.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

Что бы уйти от вариантов под какой вариант схемы какое ПО, берем вот этот архив, там файл MMCDISK1.ROM, он на 512КБ. Судя по описанию в текстовом файле это прошивка для схемы версии 1. Схемы в этом архиве, то же, есть.
По составу этот файл содержит помимо прошивки некий образ 'дискеты' с системным ПО.
Далее, в тексте есть указание, что все это работает на основном слоте, а не расширенном.
соотв. я делаю такую вставку в конфиге:

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
}
отключаю ром для msxdos2 и в таком варианте после трех перезагрузок заставки MSX проскакивает текст от SD и вылетает в Disk BASIC
SD.png
собственно теперь вопрос как сам SD интерфейс прицепить по адресу 6FF0 и 6FF1?
видимо нужно 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
}
только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки :(

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

Re: MSX в proteus

Post by PVV »

b2m wrote: А нет, нашёл: http://bifi.msxnet.org/msxnet/tech/megaroms, оказывается это для всех мапперов так должно быть. Надо эмуль подправить.
P.S. Подправил.
Вот это оперативность! Спасибо! :esurprised: Теперь этот ром запускается с первой попытки и по включению и по сбросу. Теперь бы понять как карту прикрутить...
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: MSX в proteus

Post by b2m »

PVV wrote:видимо нужно SlotB разбить как MemMap?
Мыслишь правильно. Только нужно учитывать, что MemMap не умеет с точностью до байта, границы должны быть кратны 100h. Для более мелкого деления я сделал MemMap2.
PVV wrote:только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки :(
Без паники! rom-mapper поддерживает смещение, т.е. можно писать MMslotB[7000]
PVV wrote:откуда схема выборки 6FEx-6FFx ? А4 в 1, а это только 6FFx (AFFx)!
А я версию 2.2 смотрел. А ты оказывается первую прикручиваешь. Тады ой.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

b2m wrote:
PVV wrote:видимо нужно SlotB разбить как MemMap?
Мыслишь правильно. Только нужно учитывать, что MemMap не умеет с точностью до байта, границы должны быть кратны 100h. Для более мелкого деления я сделал MemMap2.
PVV wrote:только как так? а как быть с памятью 7000-bfff ? это же 3я и 4я банки? да и карта в середине второй банки :(
Без паники! rom-mapper поддерживает смещение, т.е. можно писать MMslotB[7000]
тогда так:

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 не сработает?... видимо так...
b2m wrote:
PVV wrote:откуда схема выборки 6FEx-6FFx ? А4 в 1, а это только 6FFx (AFFx)!
А я версию 2.2 смотрел. А ты оказывается первую прикручиваешь. Тады ой.
точно, а я А4 и не заметил во второй версии...
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

Если здесь

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
то запускается РОМ диск зашитый в прошивке, у нас страниц то много и маску надо расширить, ПЗУ 512КБ...
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
}
а mm.page , будет то, что пишется по адресу 7000. И не надо ли где то писать .wo , иначе при записи по адресам переключения страниц память будет портится?
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: MSX в proteus

Post by Alekcandr »

PVV wrote:мне вот только непонятно, а как реальный чип исключает из своего адресного пространства эту область для SD? , или если выбрать страницу за пределами 512КБ, те записать число больше 0х3F, то /OE ROM не сработает?... видимо так...
Действительно не понятно. Как я понял кодом 3Fh мы включаем звуковой чип в окне 9800...9FFFh. Все остальное по прежнему доступно как ПЗУ. Надо видимо эмулятор или FPGA курить.

Существующие схемы на рассыпухе не раскрываю полностью тему.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

Alekcandr wrote:Действительно не понятно. Как я понял кодом 3Fh мы включаем звуковой чип в окне 9800...9FFFh. Все остальное по прежнему доступно как ПЗУ. Надо видимо эмулятор или FPGA курить.
3F это маска страниц в окне, те 0x3F=63, при счете страниц от 0 делаем +1, таким образом 8КБ*64=512КБ.
Как вот здесь http://bifi.msxnet.org/msxnet/tech/megaroms сказано:
Unlike the Konami without SCC (konami4/8Kb) one this mapper does repeat the ROM just after the last ROM page.
и учитывая, что с чипа konamiSCC идет на ПЗУ сигнал /OE, получается, что при выборе страниц выше 3F сигнал /OE остается в 1, и ПЗУ не активирует свой выход, вот и получили возможность работать со своим устройством, в нашем случае SD.
Alekcandr wrote: Существующие схемы на рассыпухе не раскрываю полностью тему.
и не то, что не раскрывают, а получается, что ни одна из существующих и мною увиденных схем не реализует ни один из РОМ мапперов! Все схемы на 74ls670 не поддерживают такой момент как при включении питания инициализация в каждом банке своим кодом:
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.
те то, что b2m вчера добавил в эмулятор... и вариант на 155РУ2, который я встречал, аналогично, не поддерживает этот момент.
Получается, что самый правильный вариант можно сделать, фактически, только на рассыпухе с тм2 с предуcтановкой ее по сбросу /set_ом и /reset_ом(ну или инверторы по входу и выходу на определенных ножках к защелкам). А если еще добавить проверку на превышение страниц 3F, для деактивации /OE, то вообще тот еще огород получится.
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

Сделал конфиг, который 'почти' работает, хотя карты и не видит. На первый взгляд аппаратное не соответствие схемы SD интерфейса в эмуляторе и том, что ожидает программа. В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff. (Если поставить точку останова на 61Е2, то к этому моменту карта уже ответила 01 по адресу 6FFD, это начало. ) Я в паре мест за NOP_ил передачу этого завершающего FF, и карта стала видится, но проблема в том, как написан этот код, там нет единой функции передачи или приема, равно как нет единой функции передачи cmd или вычитки ответа, все просто линейно в коде идет :evil: , похоже, что и вычитка 512 байт из карты сделана вызовом 4 раза одной функции в которой 128 раз повторяется 11и байтный код чтения одного байта из карты... и все это править в HEX, просто жесть.
You do not have the required permissions to view the files attached to this post.
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: MSX в proteus

Post by Alekcandr »

Я вот тоже сунулся в код. Есть лоадер для IDA. Проблема в том, что этот лоадер хорош для простых игровых картриджей, где исполняемый код и данные, как правило, строго разделены и нет бешеных переключений маппера SCC. Да еще маппер SCC за уши притянут для msx-dos2. В общем, под уныл и подумал да ну этого корейца :) Ждем b2m.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

Каким образом вообще пишутся программы, работающие с мапперами? Контролируется размер кода кратно выбранной странице и программно переключаются страницы или просто пишется большой код, а затем прогоняется через некий упаковщик-маппер, который уже распределяет код по страницам?
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: MSX в proteus

Post by b2m »

PVV wrote:В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff.
Вполне возможно, что моя реализация эмуляции SD-карты далека от реальности. До сих пор всё работало, но это не означает, что работало как надо. Можно попробовать добавить "лишние" FF после принятия команды. Лишь бы всё остальное, что работало до сих пор, не сломалось. А такое может быть запросто.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

b2m wrote:
PVV wrote:В программе после любой посылки cmd идет завершающий FF, а только потом вычитка, что ответила карты, и получается, что этот 'лишний' FF выбирает из карты ее ответ, и когда программа читает сам ответ, то ответ уже был вычитан на предыдущем шаге и читается только ff.
Вполне возможно, что моя реализация эмуляции SD-карты далека от реальности. До сих пор всё работало, но это не означает, что работало как надо. Можно попробовать добавить "лишние" FF после принятия команды. Лишь бы всё остальное, что работало до сих пор, не сломалось. А такое может быть запросто.
Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка, и только после того, как она подумает, она выдает ответ. Вот здесь, на этой картинке, есть такое описание
как видно ответ SD карты приходит на втором пакете, увеличим развертку на этом фрагменте….
те карта на первый пакет clk выдает FF, а на второй уже ответ. Да и во всех боевых программах стоит цикл ожидания ответа с таймаутом, после любого cmd и лишний ff там повредить не должен. Я могу проверить работу SDOS с msx SD интерфейсом на любой из поддерживаемых платформ с этим дополнительным FF, а это тот же код, что и в исходном Вашем (b2m's) варианте xsd.

Однако я в коде увидел, что используется cmd18, а это групповая вычитка секторов, а не только cmd17, возможно и запись есть такая, я это не встретил еще. Так вот, cmd18 поддерживается? Сейчас эмулятор ответ на нее выдает 04, те не поддерживает- это после моих правок в hex коде, возможно я сделал что то не так...
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: MSX в proteus

Post by b2m »

PVV wrote:Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка
Я тоже это знаю, но я не знал, что это может быть обязательным.
PVV wrote:Да и во всех боевых программах стоит цикл ожидания ответа с таймаутом
Ну, это-то понятно.
PVV wrote:Я могу проверить работу SDOS с msx SD интерфейсом на любой из поддерживаемых платформ с этим дополнительным FF
Отлично. Как найду время, поправлю эмулятор.
PVV wrote:Однако я в коде увидел, что используется cmd18, а это групповая вычитка секторов, а не только cmd17, возможно и запись есть такая, я это не встретил еще. Так вот, cmd18 поддерживается?
К сожалению - нет. Надо будет почитать, как это работает, видимо придётся добавлять.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: MSX в proteus

Post by PVV »

b2m wrote:
PVV wrote:Я уже не первый раз сталкиваюсь с описанием, что после того как SD карта получила cmd, она должна этот cmd обработать, выдавая FF пока идет эта обработка
Я тоже это знаю, но я не знал, что это может быть обязательным.
Вот документ, весьма неплохо описывающий работу протокола SD и во второй его половине побитовая растактовка для разных cmd, и там есть параметры Ncr, Nwr и тд, так вот они должны быть минимально от 2х тактов CLK (стр. 59), те практически 8 бит это обязательный минимум.
Возможно, что бы не менять уже прижившийся код, можно добавить еще один тип SD интерфейса к имеющимся sdcard.data и sdcard.data8, какой нибудь - sdcard.data2, в котором будет этот дополнительный FF...
В этом же документе сказано, что два байта CRC вычитывать надо обязательно после чтения данных.