Вот кстати, вопрос по эмулятору, существенный. Как в режиме эмуляции Вектора 06Ц с квазидиском - сохранить квазидиск в файл, и потом из файла его монтировать с определенными параметрами ? Есть ли такая опция ?
Вид для печати
Вот кстати, вопрос по эмулятору, существенный. Как в режиме эмуляции Вектора 06Ц с квазидиском - сохранить квазидиск в файл, и потом из файла его монтировать с определенными параметрами ? Есть ли такая опция ?
Здравствуй, b2m, есть вопрос по эмуляции ПК-6128ц, в честности по эмуляции памяти. Изучая схему и документацию, можно понять, что переключение банков памяти на ПК-6128ц должно выполнятся так, вот все возможные комбинации:
Параметр в OUT 0Eh (4-1 биты и/или 8-5 биты)
Адреса 0000-7FFFh Адреса 8000-FFFFh 0 (0000)
Банк 0
Банк 1
1 (0001) Банк 0 Банк 0 2 (0010) Банк 0
Банк 3
3 (0011) Банк 0
Банк 2
4 (0100) Банк 1 Банк 1 5 (0101) Банк 1 Банк 0 6 (0110) Банк 1 Банк 3 7 (0111) Банк 1 Банк 2 8 (1000) Банк 2
Банк 1
9 (1001) Банк 2 Банк 0 A (1010) Банк 2 Банк 3 B (1011) Банк 2 Банк 2 C (1100) Банк 3
Банк 1
D (1101) Банк 3 Банк 0 E (1110) Банк 3 Банк 3 F (1111) Банк 3 Банк 2
Выделенное красным явно указано в документации, как "наиболее рациональные значения", остальное можно понять из схемы. Биты 4-1 определяют подключённый для чтения банк, биты 8-5 -- банк для записи.
"Банк 0" = 0000h-7FFFh, "Банк 1" = 8000h-FFFFh, "Банк 2" = 10000h-17FFFh, "Банк 3" = 18000h-1FFFFh.
В ходе экспериментов оказалось, что в эмуляторе не совсем правильно переключается память, например, при отправке кода 011h память распределяется точно также, как и при отправке 000h, т.е. "Банк 0, Банк 1" вместо ожидаемого подключения "Банк 0, Банк 0".
Пример кода для теста
Код:ORG 0000h
L_START: DI
MVI A, 033h ; загр. конфигурацию памяти
L_BM: OUT 00Eh ; отправляем...
; 33h (Банк 0 - Банк 2) чтение и запись
; 22h (Банк 0 - Банк 3)
; 11h (Банк 0 - Банк 0)
; 00h (Банк 0 - Банк 1)
SUI 011h ; следующее значение -- тут можно поставить точку останова и проверить память.
JP L_BM ; если < 80h
JMP L_START
END
[свернуть]
Если что, монитор тестов для 6128 в emu нормально отрабатывал тест озу, а в VV спотыкался.
Полного списка вариантов я не сохранил, но я там написал, что в тесте используются еще как минимум 55h и 66h.
Какие значения пишет в порт 0Eh тест озу:
Преамбула до банок (убрал повторы и отсортировал) - 00, 02 ,03, 20h, 22h, 23h, 30h, 32h, 33h
Сам тест когда банки:
00
Банк1 - чередует 22/00h
02, 33h
Банк2 - чередует 00h/33h
22h
Банк3 - чередует 00h/22h
20h, 0, 55h
Банк0 - чередует 66h/55h
22h
Я бы тут немного уточнил:
-----
00
Банк1 - чередует 22/00h -- экран в Банке 3 (обновляется при конфигурации 22h), программа в Банке 0
02, 33h
Банк2 - чередует 00h/33h -- экран в Банке 1, программа в Банке 0
22h
Банк3 - чередует 00h/22h -- экран в Банке 1, программа в Банке 0
20h, 0, 55h -- тут заметна небольшая задержка, т.к. переливаются данные
Банк0 - чередует 66h/55h -- экран снова в Банке 3, программа в Банке 1
22h
-----
Вот на последнем этапе в эмуляторе на самом деле тестируется Банк 1 вместо нулевого, как я понял. По крайней мере, короткий тест выше показывает, что это так -- это легко заметить, если занести метки в память, по которым можно отследить подключённый банк.
В emu можно посмотреть куда реально пишет/откуда читает тест в адресном пространстве mem1
Банк1 - mem1 8E00-FFFF
Банк2 - mem1 10700-17FFF
Банк3 - mem1 18100-1FFFF
Банк0 - mem1 8100-FFFF
Действительно похоже с банком 0 ошибка, насколько понимаю должен писать/читать mem1 0100-7FFF