User Tag List

Показано с 1 по 10 из 300

Тема: DivMMC

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

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

    По умолчанию

    Пытаюсь понять как работает 'маппер' в DivIDE/DivMMC. Эскпериментирую в emu, а там, глядишь и в реале, на рассыпухе, есть желание его сделать.
    Если представить карту памяти, то получается 8 вариантов.
    Два бита из регистра управления Е3h, CONMEM-бит_7 и MAPRAM-бит_6 и бит, назову его trap - активация пеключения при попадании в определенные адреса.
    если судить из этого описания DivIDE:
    --------------------------------------------------------------------------------------------------------------------
    So, when CONMEM is set, there is:
    0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket), and this area is flash-writable if EPROM jumper is open.
    2000-3fffh - 8k bank, selected by BANK 0..1 bits, always writable.

    When MAPRAM is set, but CONMEM is zero, and entrypoint was reached:
    0000-1fffh - Bank No.3, read-only
    2000-3fffh - 8k bank, selected by BANK 0..1. If it's different from Bank No.3, it's writable.

    When MAPRAM is zero, CONMEM is zero, EPROM jumper is closed and entrypoint was reached:
    0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket, so open jumper in this case), read-only.
    2000-3fffh - 8k bank, selected by BANK 0..1, always writable.

    Otherwise, there's normal speccy memory layout. No modified ROM, no shit.
    --------------------------------------------------------------------------------------------------------------------
    вариант 1) получается, что при CONMEM==1 не имеет значение состояние бит MAPRAM и trap, всегда будет 'DivROM' и некая страница 'DivRAM'
    при CONMEM==0 получаем:
    вариант 2) MAPRAM==1, trap==1, когда первые 8КБ, это третья страница 'DivRAM' только чтение, а вторые 8КБ, это некая страница 'DivRAM'
    вариант 3) MAPRAM==0, trap==1, повторяем вариант 1)
    вариант 4-8) все остальные варианты, это обычное ПЗУ ZX48.

    итого:
    если CONMEM==0, MAPRAM==0, trap==0 карта=0, вариант 4)
    0000-3fffh 16k normal speccy EEPROM memory layout

    если CONMEM==0, MAPRAM==0, trap==1 карта=1, вариант 3)
    0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket, so open jumper in this case), read-only.
    2000-3fffh - 8k bank, selected by BANK 0..1, always writable.

    если CONMEM==0, MAPRAM==1, trap==0 карта=2, вариант 4)
    0000-3fffh 16k normal speccy EEPROM memory layout

    если CONMEM==0, MAPRAM==1, trap==1 карта=3, вариант 2)
    0000-1fffh - Bank No.3, read-only
    2000-3fffh - 8k bank, selected by BANK 0..1. If it's different from Bank No.3, it's writable.

    если CONMEM==1, MAPRAM==0, trap==0 карта=4, вариант 1)
    если CONMEM==1, MAPRAM==0, trap==1 карта=5
    если CONMEM==1, MAPRAM==1, trap==0 карта=6
    если CONMEM==1, MAPRAM==1, trap==1 карта=7
    0000-1fffh - EEPROM/EPROM/NOTHING(if empty socket), and this area is flash-writable if EPROM jumper is open.
    2000-3fffh - 8k bank, selected by BANK 0..1 bits, always writable.
    --------------------------------------------------------------------------------------------------------------------
    вот так я дополняю конфигурацию в emu ZX_Spectrum_48:

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

    cpu : z80 {
    debug=cas
    debug=trap
    mem=mm
    int[FF]=vid.irq
    port[a3]=hdd.data8[0]
    port[a7]=hdd.data8[1]
    port[ab]=hdd.data8[2]
    port[af]=hdd.data8[3]
    port[b3]=hdd.data8[4]
    port[b7]=hdd.data8[5]
    port[bb]=hdd.data8[6]
    port[bf]=hdd.data8[7]
    port[E3]=portE3
    port[E7]=sdcard.ss
    port[EB]=sdcard.data8
    port[FD]=portFD
    port[FE]=sys.data[0]
    }

    biosESX : Memory {
    rom="ZX\esxmmc.bin"
    }

    mem2 : Memory {
    size=20000
    frame[0].size=2000
    frame[0].page=portE3.portA[0-3]
    }

    mem2p : MemMap {
    page[3]=portE3.portA[3]
    page[2]=portE3.portA[2]
    page[1]=portE3.portA[1]
    page[0]=portE3.portA[0]

    map[15][0000-1FFF]=mem2[1e000]
    map[14][0000-1FFF]=mem2[1c000]
    map[13][0000-1FFF]=mem2[1a000]
    map[12][0000-1FFF]=mem2[18000]
    map[11][0000-1FFF]=mem2[16000]
    map[10][0000-1FFF]=mem2[14000]
    map[9][0000-1FFF]=mem2[12000]
    map[8][0000-1FFF]=mem2[10000]
    map[7][0000-1FFF]=mem2[e000]
    map[6][0000-1FFF]=mem2[c000]
    map[5][0000-1FFF]=mem2[a000]
    map[4][0000-1FFF]=mem2[8000]
    map[3][0000-1FFF].ro=mem2[6000]
    map[2][0000-1FFF]=mem2[4000]
    map[1][0000-1FFF]=mem2[2000]
    map[0][0000-1FFF]=mem2[0000]
    }

    mm : MemMap {
    page[2]=portE3.portA[7]
    page[1]=portE3.portA[6]
    page[0]=trap.output

    map[0][0000-3FFF]=bios[0000]
    map[0][4000-FFFF]=mem1[0000]

    map[1][0000-1FFF]=biosESX[0000]
    map[1][2000-3FFF]=mem2.frame[0]
    map[1][4000-FFFF]=mem1[0000]

    map[2][0000-3FFF]=bios[0000]
    map[2][4000-FFFF]=mem1[0000]

    map[4][0000-1FFF]=biosESX[0000]
    map[4][2000-3FFF]=mem2.frame[0]
    map[4][4000-FFFF]=mem1[0000]

    map[5][0000-1FFF]=biosESX[0000]
    map[5][2000-3FFF]=mem2.frame[0]
    map[5][4000-FFFF]=mem1[0000]

    map[3][0000-1FFF].ro=mem2[6000]
    map[3][2000-3FFF]=mem2p
    map[3][4000-FFFF]=mem1[0000]

    map[6][0000-1FFF]=biosESX[0000]
    map[6][2000-3FFF]=mem2.frame[0]
    map[6][4000-FFFF]=mem1[0000]

    map[7][0000-1FFF]=biosESX[0000]
    map[7][2000-3FFF]=mem2.frame[0]
    map[7][4000-FFFF]=mem1[0000]

    initpage=0
    }

    portE3 : K580ww55 {
    }

    trap : exec-sensor {
    range[0000-0001]=1
    range[0008-0009]=1
    range[0038-0039]=1
    range[0066-0067]=1
    range[04c6-04c7]=1
    range[0562-0563]=1
    range[3D00-3DFF]=1
    range[1FF8-1FFF]=0
    }

    sdcard : sd-mmc {
    image="zx\SanF2.raw"
    }

    hdd : cf-ide {
    drive[0].image="zx\SanF2.raw"
    drive[0].geometry=1024C16H63S
    ; ca a (cat a)
    }
    [свернуть]


    но ничего не работает.
    Переключение DivROM и страниц DivRAM в отладчике видно, но при попытке из DivROM вывести текст приглашения, идет вызов функции ПЗУ ZX48, там далее, вызов на rst 8, его перехват(trap) на DivROM, а вот обратно возврат происходит в пустую страницу DivRAM 0х2246...
    Получается, что то не так с распределением страниц, где ошибка, может кто подсказать?
    Последний раз редактировалось PVV; 03.10.2020 в 00:05. Причина: добавил секцию в trap 0038-0039 и порты IDE

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

    valerium(03.10.2020)

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

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

Эту тему просматривают: 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

Ваши права

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