User Tag List

Страница 10 из 30 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 300

Тема: DivMMC

  1. #91

    Регистрация
    27.02.2006
    Адрес
    MOSCOW
    Сообщений
    158
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    тестовую прошивку TESTROM3 в исполнении для ПЗУ DivIDE, размер 8К
    Файл testrom3_8kb_for_divide.rom

    Я только только изучаю, но пришла мысль
    заменить в прошивке второй (00 01 02 .. или 1,2,3 третий) байт с #F9 на #FA
    00.C3.F9.1F.FF.FF
    00.C3.FA.1F.FF.FF.....
    Возможно я вообще ничего не понимаю, но мысль пришла такая (возможно я дико ошибаюсь)

    - - - Добавлено - - -

    Цитата Сообщение от valerium Посмотреть сообщение
    0743 01ffbf ld bc,0bfffh
    0746 75 ld (hl),l
    0747 edb0 ldir ;выполняем-таки зачистку всех 48к ОЗУ
    Вот этот момент не очень понятен
    где же храниться , на какой адрес он указывает рег. SP ?
    * ну это просто мысли вслух
    Последний раз редактировалось USERHOME; 14.11.2020 в 23:50.

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

    kox(02.03.2022)

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

  3. #92

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

    По умолчанию

    Цитата Сообщение от USERHOME Посмотреть сообщение
    Файл testrom3_8kb_for_divide.rom
    байт с #F9 на #FA
    В смысле сменить точку перехода в exit area на 1FFA, про это речь ?
    Код:
    074a 210100    ld      hl,0001h     ;подготавливаем в HL адрес перехода = 0001h
    074d c3f91f    jp      1ff9h        ;переходим в exit area
    ...
    1ff8 c9        ret     
    1ff9 e9        jp      (hl)      ;вот сюда мы переходим, отсюда читается 1-байтный опкод и сразу должен отключиться маппинг ПЗУ DivMMC
    >> 1ffa c7        rst     00h      ;а поскольку переход выполняется не в адрес автоматического маппирования 0000, а в 0001, то это не ловится DivMMC
    1ffb c7        rst     00h      ;и должен выполняться штатный ROM48k
    1ffc c7        rst     00h
    1ffd c7        rst     00h
    1ffe c7        rst     00h
    1fff c7        rst     00h
    Тогда при переходе по этому адресу по идее отключится ПЗУ DivMMC, но там выполнится RST 0 и это приведет к переходу по адресу 0000, на который опять сработает ловушка для automap и внешнее ПЗУ тут же включится обратно.
    Суть хитрости, сделанной здесь - в том, чтоб зайти в штатное ПЗУ не с 0000, а с 0001.
    Собственно, переход-то в этой тестовой прошивке написан правильно (иначе б не был выпущен релиз), вопрос в том, где у меня железо не соответствует ))

    Цитата Сообщение от USERHOME
    Вот этот момент не очень понятен
    где же храниться , на какой адрес он указывает рег. SP ?
    0743 01ffbf ld bc,0bfffh
    0746 75 ld (hl),l
    0747 edb0 ldir ;выполняем-таки зачистку всех 48к ОЗУ
    А здесь нам SP уже не важен. К этому моменту нет ни одного незавершенного вызова, из которого надо RET-ом вернуться по адресу в стеке. Дальше выполняется LDIR (и ему не нужен стек), а потом просто JP. Поэтому ни стек, ни указатель стека уже не будут использоваться до инициализации штатного ROM.
    Последний раз редактировалось valerium; 14.11.2020 в 23:54.

  4. #93

    Регистрация
    27.02.2006
    Адрес
    MOSCOW
    Сообщений
    158
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    но там выполнится RST 0
    Попробуйте туда записать
    NOP
    JP 0001 (вместо RST)

    - - - Добавлено - - -

    Цитата Сообщение от valerium Посмотреть сообщение
    074a 210100 ld hl,0001h ;подготавливаем в HL адрес перехода = 0001h
    074d c3f91f jp 1ff9h ;переходим в exit area
    ...
    1ff8 c9 ret
    Либо PUSH HL
    и RET (но это испортит ячейки памяти, но для теста можно)

    - - - Добавлено - - -

    Цитата Сообщение от valerium Посмотреть сообщение
    где у меня железо не соответствует
    Какой нибудь сигнал WAIT для Z80 ....
    Последний раз редактировалось USERHOME; 15.11.2020 в 00:06.

  5. #94

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

    По умолчанию

    Цитата Сообщение от USERHOME Посмотреть сообщение
    Попробуйте туда записать
    NOP
    JP 0001 (вместо RST)
    Это не пройдет. Суть этого перехода в выполнении однобайтной команды из области выхода (exit area).
    jp (hl) - однобайтный, операндов у опкода нету, поэтому как только он считывается, ПЗУ переключается и процессор независимо от содержимого памяти отрабатывает jp - ставит IP равным HL, где у нас заготовлен адрес перехода 0001.

    Если так сделать, то как только будет из памяти по адресу 1ffa выбран NOP, должна смениться страница ПЗУ и следующая команда будет выбираться по адресу 1ffb уже из штатного ПЗУ. Да, интересно проверить, произойдет ли это, но мы это вряд ли успеем увидеть, т к непонтно, куда нас там в штатном ROM48 занесет

    Какой нибудь сигнал WAIT для Z80 ....
    В Ленине WAIT-ом удлиняются обращения к ОЗУ выше адреса 4000h, а при работе с памятью DivMMC в нижних адресах и всеми адресами перехвата триггер D9.1 не будет защелкиваться (A14=A15=0). Так что по идее тоже не должно никак влиять.
    Но вот тоже подозреваю, что мешает побочный эффект в схемотехнических решениях Ленина (задержка распространения какого-то промежуточного сигнала, например). Периодически и возвращаюсь к этому поиску.
    Последний раз редактировалось valerium; 15.11.2020 в 00:46.

  6. #95

    Регистрация
    27.02.2006
    Адрес
    MOSCOW
    Сообщений
    158
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    В Ленине WAIT-ом удлиняются обращения к ОЗУ выше адреса 4000h
    Попробуйте установить принудительно SP меньше #4000 и проверить

  7. #96

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

    По умолчанию

    Цитата Сообщение от USERHOME Посмотреть сообщение
    Попробуйте установить принудительно SP меньше #4000 и проверить
    Не доходит до меня никак.
    Перенести стек ниже 4000h (и выше 1fff, там в это время страница озу DivMMC), засунуть на вершину стека адрес возврата 0001, потом выполнить переход на 1ff8, где у нас ret ? Так сразу после выборки из памяти этого ret должна переключиться страница ОЗУ divmmc на штатное ПЗУ. И если все отработает правильно, то sp будет смотреть куда-то в ПЗУ rom48, а что вынется из стека, как адрес перехода - неизвестно (какие-то 2 байта штатного ПЗУ). Ну только если оно зависнет или сбросится с другими спецэффектами.. допустим, а какой из этого вывод?

  8. #97

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

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    Несколько раз прочитал и тоже не пойму, почему это one instruction delay. Может это плохой перевод с испанского/польского/еще какого-то неведомого языка ?
    действительно похоже на перевод.
    вот ещё один вариант

    "Memory mapping could be invoked manually (by setting CONMEM), or automatically
    (CPU has fetched opcode form an entry-point). Automatic mapping is active
    only if EPROM/EEPROM is present (jumper EPROM is closed) or bit MAPRAM is set.
    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.

    The one-instruction delay could be used to distinguish between nested calls to
    the same place. For such trick you will place different instruction at the
    entrypoint address, than is in original ZX ROM. So the first call wil execute
    original instruction, but subsequent one will jump to another code, because
    divIDE memory was already mapped, with its changed opcode. It's great for 100%
    avoidance of nested NMI, which cannot be implemented using pure combinatorial
    hardware workaround. It allows divIDE to use INT for timing, when divIDE code is
    performed (external calls will map later divIDE off and continue in #38h
    original service, but nested INTs can jump to another work, and mapping off is
    of course undesirable there)."

    небольшие отличия от текста в посту№68 есть

  9. #98

    Регистрация
    27.02.2006
    Адрес
    MOSCOW
    Сообщений
    158
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    то sp будет смотреть куда-то в ПЗУ rom48
    ROM48 установит стек в нужное положение, если запретить прерывание (как раз DI в 0000 адресе) и переход будет на адрес 0001

  10. #99

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

    По умолчанию

    Цитата Сообщение от USERHOME Посмотреть сообщение
    ROM48 установит стек в нужное положение, если запретить прерывание (как раз DI в 0000 адресе) и переход будет на адрес 0001
    DI никакого отношения к стеку не имеет.
    ROM48 заведет стек в нужном ему положении ПОСЛЕ того, как начнет исполняться с адреса 0001. А чтобы он вообще начал это делать, надо ДО этого осуществить переход по этому адресу, если это делать через стек в адресах 2000-4000, то в том месте, куда мы записали адрес перехода 0001 сразу после выборки из памяти опкода ret (но еще до собственно перехода) окажется совсем другая память, это будет само ПЗУ48. И вместо адреса 0001 у нас ддя перехода из стека вынется какой-то мусор и по нему произойдет переход вместо 0001. Короче, сломается все.

  11. #100

    Регистрация
    27.02.2006
    Адрес
    MOSCOW
    Сообщений
    158
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    10 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valerium Посмотреть сообщение
    DI никакого отношения к стеку не имеет.
    Я про это не говорил
    Есть DI , есть HL,1, есть переход на 0001
    (DI находится по 0000 в ROM48, 2 раза DI не надо конечно же)
    Если Вы сделали ранее (а в ROM IDE есть) DI то смело можно переходить на 0001, вот о чём речь
    и попробовать изменить пару байт в ROM IDE тоже никто не мешает, а заодно и проверить результат
    1. SP (где-то вместо LDIR)
    2. NOP (дополнительный холостой цикл) и JP (HL)
    3. SP на RAM и PUSH HL (без зануления памяти LDIR) и RET

    4. censored Я бы ещё и LD A,1 и OUT (254), A (Шину адреса "пошевелить" для теста, перед JP (HL) ...)
    Последний раз редактировалось USERHOME; 16.11.2020 в 02:08.

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

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

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

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

Похожие темы

  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

Ваши права

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