Здесь показаны логические биты, которые должны стать физическими (фактическими) по задумке авторов и спецификации на KAY1024. В IS-DOS (например) это, согласно автору, соблюдено. На картинке тоже самое, согласно спецификации. В драйвере по другому используется эта таблица (старшинство логических битов изменено, походу). С эмулятором unreal не совпадает в половине случаев и с реальностью тоже. Драйвер для KAY1024 уже переписал, осталось всё проверить.Код:; #1FFD #7FFD ;Physical D7 D4 D7 D6 D5 D4 D3 D2 D1 D0 ;Logical D4 D3 D5 D2 D1 D0 ; 16 8 32 4 2 1
Что за спецификация увеличения памяти для каждого клона?
Ну как я понял, это какой бит по старшинству, по задумке авторов железа, идёт по очереди в банке для расширения памяти. Можно и в другой комбинации их использовать. Про соблюдение спецификации, здесь смысл такой. ОС (любая, наверно) работает с физическими банками, делает их логическими (в примитивной теории), согласно спецификациям. И, чтобы дешифрация совпадала у драйвера и ОС, нужно одинаковый алгоритм, при котором, у всех одна и та же логическая страница, одинаково дешифруется.
Вот так совпало, с спецификацией.
Поиск пары физических адресов, с вызовом вот такой:Код:rKAY1024 ; KAY 1024 ld e,a ; копия логической страницы and %00011000 ; выделяем биты для порта #1FFD sla a ;8 ; двигаем бит с D4 на D5, с D3 на D4 ld d,a ; копия sla d ;8 ; двигаем бит с D5 на D6 sla d ;8 ; на D7 or d ; соединяем D7 и D4 and %10010000 ; оставляем D7 и D4, мусор убираем ld h,a ; копия физ.адреса для порта #1FFD ld bc,#1FFD ; порт страниц out (c),a ; данные в порт ld a,e ; логической страницы, оригинал and %00100000 ; бит D5 логической страницы оставляем ld d,a ; копия sla d ;8 ; двигаем бит с D5 sla d ;8 ; на D7 ld a,e ; логической страницы, оригинал and %00000111 ; оставляем D2, D1, D0 or d ; соединяем бит D7 и D2, D1, D0 or %00010000 ; + BASIC48 ;#10 ld l,a ; копия физ.адрес для порта #7FFD ld b,#7F ; порт страниц out (c),a ; данные в порт ;?nop ret lKAY1024 EQU $-rKAY1024
Код:;С - порядковый номер в массиве логических страниц (где они соответствуют физическим адресам) ;Проще, для нас страницы от 1 до 256 [0..255], ; в массиве свободные логические по спецификации клона, без исключённых bKAY1024 ;ld c,a ; можно в регистре С страницу передать ld b,0 sla c ; умножение на два ld hl,TBL_Physical_RAM ; находим в таблице начало add hl,bc ; физической пары страниц ld a,(hl) ;7 ld bc,#1FFD out (c),a inc hl ; inc h, если выровнено по сегментам в 256Б ld d,(hl) ld a,(vVideoBankD3) or d ld b,#7F out (c),a ;?nop ret eKAY1024 EQU $-bKAY1024




Ответить с цитированием