User Tag List

Страница 8 из 30 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 300

Тема: DivMMC

  1. #71

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Инструкция может быть разной длины и выполняться за разное количество тактов. В железе такого умного контродя точно не реализовано (заглядывая в прошивку cpld), так что вряд ли речь про одну инструкцию. Если б речь была про однотактовую инструкцию или обязательный nop в начале обработчика, об этом бы написали отдельно.

  2. #72

    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    352
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    88
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если я правильно понимаю этот абзац:
    Automatic mapping occurs at the begining of refresh cycle after fetching
    opcodes (M1 cycle) from 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h. It's
    also mapped instantly (100ns after /MREQ of that fetch is falling down) after
    executing opcode from area 3d00..3dffh. Memory is automatically disconnected in
    refresh cycle of the instruction fetch from so called off-area, which is
    1ff8-1fffh.
    то получается, что есть разница в логике автомаппера при обработке областей 0000h, 0008h, 0038h, 0066h, 04c6h and 0562h и 3d00..3dffh. Для первой группы выполнится опкод основной ROM, и только после произойдет переключение на DivROM, а для второй группы (это наш TrDos) подмена произойдет сразу же. Отключение же произойдет с задержкой...

  3. #73

    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    352
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    88
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Залез я в исходники эмулятора spediv, который поддерживает DivIDE, и вот что увидел в функции обработчика шага опкода:
    #ifdef HAVE_DIVIDE
    divide_premap(PC);
    #endif
    nextop = *PCP;
    #ifdef HAVE_DIVIDE
    divide_postmap(PC);
    #endif
    PC++;
    переключение карт памяти может быть как перед извлечением опкода, так и после извлечения опкода.
    Соответственно вот так выглядят обработчики попадания в адреса:
    void divide_premap(int addr) {
    // "fetch state"
    // mapper logic, see divIDE documentation for more info

    // check for divide memory connecting betadisk entry points
    if ((addr & 0xff00) == 0x3d00)
    divide_automap = 1;
    divide_mapper();
    }

    void divide_postmap(int addr) {
    // "M1 state"
    // mapper logic, see divIDE documentation for more info

    // check for divide memory connecting entry points
    if ((addr == 0x0000) ||
    (addr == 0x0008) ||
    (addr == 0x0038) ||
    (addr == 0x0066) ||
    (addr == 0x04C6) ||
    (addr == 0x0562)) divide_automap = 1;

    // check for original memory connecting entry points
    if ((addr & 0xfff8) == 0x1ff8) {
    divide_automap = 0;
    }
    divide_mapper();
    }
    и здесь же видно, что автомаппер снимается только после извлечения опкода.
    а это уже остальная обработка распределения памяти, в соответствии с битами CONMEM и MAPRAM (текста много):

    Скрытый текст

    void divide_mapper() {
    // if CONMEM is set, connect EEPROM (read only if JP2 is closed) and selected RAM bank (read/write)
    if (DIVIDE_CONMEM(divide_int_port)) { // map eeprom+ram
    if ((divide_memstate != 1) || divide_bank_changed) {
    memcpy(PRNM(proc).mem, divide_eeprom, 0x2000);
    memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
    }
    divide_memstate = 1;
    divide_bank_changed = 0;
    return;
    }

    // if CONMEM isn't set and MAPRAM is set and:
    // 1) if we reached "connecting" entry point, connect RAM #3 bank (read only) and selected RAM bank (if it is 3 it is too read only, else it is writable)
    // 2) if we reached "disconnecting" entry point, connect original ZX Speccy ROM
    if (DIVIDE_MAPRAM(divide_int_port)) {

    // check for mb02 layout
    if (!divide_jp2 && (DIVIDE_BANK(divide_int_port) > 1 || divide_memstate == 3)) {

    if ((divide_memstate != 3) || divide_bank_changed) {
    memcpy(PRNM(proc).mem, divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2], 0x2000);
    memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2+1], 0x2000);
    }
    divide_memstate = 3;
    divide_bank_changed = 0;
    return;
    }
    if (divide_automap) { // map ram3+ram
    if ((divide_memstate != 2) || divide_bank_changed) {
    memcpy(PRNM(proc).mem, divide_ram[3], 0x2000);
    memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
    }
    divide_memstate = 2;
    divide_bank_changed = 0;
    } else { // map original_rom
    if (divide_memstate) {
    memcpy(PRNM(proc).mem, orig_rom, 0x4000);
    }
    divide_memstate = 0;
    divide_bank_changed = 0;
    }
    return;
    }

    // if JP2 is closed and:
    // 1) if we reached "connecting" entry point, connect EEPROM (read only) and selected RAM bank (read/write)
    // 2) if we reached "disconnecting" entry point, connect original ZX Speccy ROM
    if (divide_jp2) {
    if (divide_automap) { // map eeprom+ram
    if ((divide_memstate != 1) || divide_bank_changed) {
    memcpy(PRNM(proc).mem, divide_eeprom, 0x2000);
    memcpy(PRNM(proc).mem + 0x2000, divide_ram[DIVIDE_BANK(divide_int_port)], 0x2000);
    }
    divide_memstate = 1;
    divide_bank_changed = 0;
    } else { // map original_rom
    if (divide_memstate) {
    memcpy(PRNM(proc).mem, orig_rom, 0x4000);
    }
    divide_memstate = 0;
    divide_bank_changed = 0;
    }
    return;
    }

    // else connect original ZX Speccy ROM
    if (divide_memstate) { // map original_rom
    memcpy(PRNM(proc).mem, orig_rom, 0x4000);
    }
    divide_memstate = 0;
    divide_bank_changed = 0;
    }

    void divide_put_mem(int addr, byte *ptr, byte val) {
    switch (divide_memstate) {
    case 0:
    // original ZX Speccy ROM - no update memory
    break;
    case 1:
    // EEPROM + selected RAM bank
    if (addr<0x2000) {
    // is EEPROM writable?
    if (divide_jp2) break;
    *ptr=val;
    // we have to make this change in divide memory too (not really mapped, only copied)
    divide_eeprom[addr]=val;
    divide_image_changed=1;
    break;
    }
    *ptr=val;
    // we have to make this change in divide memory too (not really mapped, only copied)
    divide_ram[DIVIDE_BANK(divide_int_port)][addr-0x2000]=val;
    break;
    case 2:
    // RAM #3 bank + selected RAM bank
    // if it is 0k-8k page, write is disabled
    // if it is 8k-16k page, write is disabled if is selected RAM #3 bank
    if (addr<0x2000 || DIVIDE_BANK(divide_int_port)==3) break;
    *ptr=val;
    // we have to make this change in divide memory too (not really mapped, only copied)
    divide_ram[DIVIDE_BANK(divide_int_port)][addr-0x2000]=val;
    break;
    case 3:
    if (!divide_mb02_write_enable) break;
    *ptr=val;
    if (addr<0x2000)
    divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2][addr]=val;
    else
    divide_ram[DIVIDE_MB02_BANK(divide_int_port)*2+1][addr-0x2000]=val;
    break;
    default:
    // printf("unknown divide state %d\n", divide_memstate);
    ;
    }
    }
    [свернуть]

  4. #74

    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,811
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    386
    Спасибо Благодарностей получено 
    339
    Поблагодарили
    244 сообщений
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    Залез я в исходники эмулятора spediv
    Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
    Profi v3.2 -=- Speccy2010,r2

  5. #75

    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    352
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    88
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
    Не знаю что такое ни первое, ни второе. Но идея с переключением уже понятна. Не понятно другое, а для чего использовать вариант с 'пост' переключением? при наличии варианта 'пред' переключения сразу же при попадании на адрес? ну ловить не 0008, а 0009, не 0038, а 0039 и тд. Вариант 'пост' в аппаратной реализации требует поймать попадания в адрес, защелкнуть признак попадания и в момент рефреша этот признак активировать, после чего все сбросить. К чему эти движения?

  6. #76

    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,811
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    386
    Спасибо Благодарностей получено 
    339
    Поблагодарили
    244 сообщений
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    https://zx-pk.ru/threads/32145-zesarux-9-0.html
    Первое.
    А второе - это альтернатива DivMMC, но в отличие от сабжа - с исходниками. Но если разобрался - то конечно не нужно.
    Profi v3.2 -=- Speccy2010,r2

    Этот пользователь поблагодарил zebest за это полезное сообщение:

    PVV(11.10.2020)

  7. #76
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #77

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Делаю очередной подход с целью прикрутить divmmc к русским клонам, в частности, к Ленину.
    Неудобно дебажить плату на xc9572xl при неясной ее работоспособности. Поэтому все воссоздал в теплых 5 вольтах на альтере epm7128slc84, ОЗУ
    KM681000BLP-7L (128к*8), ПЗУ SST39SF020 (256к*8, но разумеется, из нее работает только нижних 8К) - у нее вход /WR кинул на +5в и к CPLD не подключал, т.к это не то ПЗУ, которое можно прошивать внутри платы.
    Плюс ардуиновский модуль microSD-карты с 5-вольтовым питанием и буферами на *hc125 - но его пока даже не подключил, т к не могу разобраться со страницами памяти и запуском esxdos.
    Исходники от Mario Prato пересобрались под мою CPLD без вопросов, распределил ноги в соответствии с монтажом и прошил.

    В Ленине линия /RDROM, идущая к /OE штатного ПЗУ разорвана резистором 680 ом, вход /OE микросхемы вынесен на ZXBUS для подключения сигнала /romoe1 с divmmc (отключает внутреннее ПЗУ). /NMI отделен от всех прочих неиспользуемых, подтянут к +5в и выведен на разъем ZXBUS. Остальные линии вроде как не требуют внимания.

    Прошил esxdos 0.8.5, включил. Но не тут-то было - стартуем с красивыми цветными узорами и на этом все.
    Ожидалось увидеть хотя бы старт esxdos и ошибку поиска карт памяти, а дальше бы я занимался уже дебагом чтения SD. Но не тут-то было.
    Вот варианты цветных узоров при старте - а вдруг будет информативным ? )
    Нажмите на изображение для увеличения. 

Название:	IMG_20201108_033729.jpg 
Просмотров:	208 
Размер:	66.9 Кб 
ID:	73863Нажмите на изображение для увеличения. 

Название:	IMG_20201108_033646.jpg 
Просмотров:	219 
Размер:	59.2 Кб 
ID:	73862Нажмите на изображение для увеличения. 

Название:	IMG_20201108_041251.jpg 
Просмотров:	219 
Размер:	71.0 Кб 
ID:	73864


    Пытался прошить Fatware - тоже при старте не увидел ничего здравого.
    Если прошиваю в ПЗУ тест памяти (например Хахонова) - он стартует и прекрасно отрабатывает весь. То есть ПЗУ мапится при включении правильно.
    Без ПЗУ в DivMMC отображается матрас - тоже все правильно.

    Если снять перемычку EPROM на DIVMMC (режим перепрошивки для обновления), то стартует бейсик48 (или меню128 - у меня управление страницей ПЗУ128 отключаемое), откуда можно запустить загрузку с ленты и загрузить тестер ОЗУ DIVRAMKA.TAP (взял у VELESOFTа). Так вот тест 16 страниц ОЗУ (в сумме 128К) проходит успешно. То есть ОЗУ тоже мапится правильно.
    Нажмите на изображение для увеличения. 

Название:	IMG_20201108_031909.jpg 
Просмотров:	260 
Размер:	53.2 Кб 
ID:	73865

    Вопрос к тем, кто встраивал DivMMC в свои проекты на CPLD/FPGA - были ли какие-то особенности с запуском ESXDOS ? Что-то приходилось допиливать относительно версии 1.0 у Prato ?
    Дешифрация портов и возможные конфликты на ленине уже обсуждались выше, у меня все подозреваемые (вроде бы) были устранены.
    Что еще может мешать запуску ESXDOS ?

  9. #78

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Залезь еще в исходники эмулятора Тцезаря. Там по идее еще и UnoDOS3 должен быть как бы.
    Покопался я тут в дизассмеблированном esxdos 0.8.5 и 0.8.8 с целью изучить набор используемых там портов, чтоб понять, где в русской железке может быть конфликт.
    Потом скачал исходники этого самого "UnoDosTres". И первое время пытался найти отличия... А ощущения такие, что сорсы UnoDOS3 - это и есть дизассемблированный ESXDOS с автонумерованными метками, расписанными константами [системные вызовы, порты в/в] и вяло расписанными комментариями по тем кускам кода, которые оказались понятны - то есть комменты не от авторов кода.
    https://github.com/cheveron/unodos-wolf
    Сборка UNODOS3 выполняется кусками в разные бинарники, головной из которых длиной 8192 шьется в ПЗУ, а хвосты с адресов $2000 и $3000 склеиваются в один файл .SYS, который потом кладется на карту и грузится при старте системы в какую-то из страниц ОЗУ.

    И поэтому вопрос про ESXDOS (да, я до сих пор его живьем не видел !) - может и он грузится так же ?
    Если да, то у него не утилиты на карте лежат, а часть его тела ? Он вообще что-либо без карты отображать должен ?

    И известно ли кому-нибудь, что было сделано с пентагоном, чтобы заставить вот это работать ?
    Последний раз редактировалось valerium; 09.11.2020 в 17:55.

  10. #79

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,293
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,457
    Поблагодарили
    947 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    Он вообще что-либо без карты отображать должен ?
    да, без карты есть вывод какой-то информации.
    Цитата Сообщение от valerium Посмотреть сообщение
    что было сделано с пентагоном, чтобы заставить вот это работать ?
    кажется демонтирован один диод (для отключения перехвата trdos BetaDisck`ом)

  11. #80

    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    796
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    274
    Поблагодарили
    145 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    кажется демонтирован один диод (для отключения перехвата trdos BetaDisck`ом)
    Ну то есть просто отключена дешифрация адресного диапазона и триггер трдоса не работает.
    В остальном у пентагона2014 выбор всех устройств ввода-вывода аналогичен все русским спекам (т е ни о какой дешифрации по всей шине адреса речи не идет).
    В чем тогда заключается сложность запустить это на наших клонах вроде ленина ? Чего им не хватает ?

Страница 8 из 30 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. basic128 и DIVMMC EsxDos
    от azx987sa в разделе Внешние накопители
    Ответов: 6
    Последнее: 08.05.2020, 00:18
  2. Ленинград 1 (48К) и Brand new DivMMC EnJOY
    от FSound в разделе Ленинград
    Ответов: 1
    Последнее: 16.12.2016, 15:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •