Хотя бы у меня в эмуляторе - d14.bin
Каждый байт соответствует блоку в 2 Кб. Всего 16 конфигураций по 32 блока (да, есть недокументированные конфигурации!)
Биты описаны в конфиге:
0 romWindow
2 ramWindow
3 rom2
4 rom1
5 ram1
6 ram2
7 slot
Тип блока определяется по 0 в соответствующем разряде.
Последний раз редактировалось Pyk; 21.11.2018 в 15:54. Причина: typo
cy6(13.09.2023)
Раскрасил, вот:Скрытый текст
[свернуть]
- - - Добавлено - - -
И включая недокументированные, считанные из d14:
Скрытый текст
[свернуть]
Получается из 15-го маппера нельзя выйти, пространство портов недоступно, и ВТ57 недоступен, и вообще вся периферия недоступна. И если 11-13 это просто неиспользуемое место, то 15 выглядит по меньшей мере странно. Возможно результаты экспериментов разработчиков. Или например для отладки, настроил всю периферию, прыгнул в 15-й, и настройки уже не собьются как ни крути. Правда сидеть там без клавиатуры.
А WIN1 и WIN2 это области для слотов? Теперь понятно почему даже А15 заведён, в 10-м маппере он может быть равен 0.
А ещё можно делать аппаратную двойную буферизацию, меняя мапперы 2 и 7.
Последний раз редактировалось hitomi2500; 21.11.2018 в 22:37.
Да, увидел, что на смещении 6 и 7 должен быть вектор некоего стартового кода, но что там должно делаться, и что должно возвращаться? и, похоже, там до смещения 16 это все некие вектора... а нет более подробного описания, что там должно быть?
===========
15й маппер меня, тоже, смутил, выстрел в ногу? туда попали и возврата нет?
Кстати не нашёл в руководстве информации про блок устройств. Он делится ещё на 8 подблоков по 256 байт каждый, с такими адресами :
D800-D8FF ВГ75
D900-D9FF ВВ55 (клавиатура)
DA00-DAFF регистр маппера (хотя в моей версии схемы он через перемычку которая не установлена почему-то)
DB00-DBFF ВТ57
DС00-DСFF порты внешнего устройства
DD00-DDFF порты внешнего устройства
DE00-DEFF выбор активного слота
DF00-DFFF выбор активного источника прерываний
Последний раз редактировалось hitomi2500; 22.11.2018 в 12:25.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
hitomi2500,
DС00-DСFF, DD00-DDFF - порты внешнего устройства
DE00-DFFF схема выбора модуля. 0 в битах 0-3 указывает но номер активного модуля, в зависимости от этого на адреса DC00-DDFF, а также на блоки WIN1 и WIN2 отображаются устройства и память соответствующего модуля
- - - Добавлено - - -
PVV, описания нет, память меня может подводить, но кажется обязательны к реализации только 2 функции - 0 (инициализация) и 1 (директива E). Остальные - пользовательские, назначение определяется конкретным модулем для вызова через единый интерфейс Монитора (можно повесить на них процедуры чтения/записи/открытия файла и т.п. при желании). То есть возврата из функции 1 может и не быть. Хотя просто Ret скорее всего вернет управление в Монитор.
Если что-то напутал, посмотрю дополнительно.
Pyk, а последний кусок, который в DF00-DFFF, что выбирает? В схеме модуля КМД он замешивается с управляющими сигналами DMA, возможно это выбор модуля, который будет отвечать на DMA-запросы?
Вообщем, методом подбора получилось сделать правильный заголовок.
Если в начале файле dos_rk.asm из архива, дефайн сделать такой:
то инициализация проходит, и SDOS вызывается из монитора по Е1, а обратно в монитор можно выйти по 'X'.Код:#ifdef RK86 #ifdef SD_ROM .db 70h .db 72h .db 45h .db 0h .db 0Fh .db 0E0h .db 0Dh .db 0E0h .db 0FEh .db 0FFh .db 0FEh .db 0FFh .db 0FFh xchg ret #else jmp 0f800H nop #endif #endif
На схеме это называется SEL INT L. По аналогии с выбором слота SEL SLOT L, можно предположить, что это должно было отвечать за выбор источника прерываний (т.е. разрешение прерываний от соответствующего биту модуля).
Описания нет, судя по монитору там такой расклад:
0-1 сигнатура pr
2 идентификатор модуля (43h - МЦПГ, 44h - КНГМД)
3 неизвестно, обычно ноль
4-5 адрес запуска по директиве Е
6-7 адрес обработчика функций модуля (номер функции в регистре А: ноль - инициализация модуля, вызывается после сброса)
8-9 ещё какой-то вектор
10-11 ещё какой-то вектор
12 - байт FF, если не используется (для чего используется, пока не выяснил)
Если вектор не используется, стоит адрес 0FFFEh, по этому адресу в мониторе стоит RET.
Функции модуля можно вызывать из монитора директивой Va,b,c:
a - первый параметр, передаётся в DE, но обычно первой же командой обработчика переносится в HL
b - номер функции (старший байт) и идентификатор модуля (младший байт). Модуль может стоять в любом слоте, выбор происходит по уникальному идентификатору модуля.
с - второй параметр, передаётся в BC
Кое-что о функциях есть в описании МЦПГ.
cy6(24.06.2025)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)