Немного помучавшись с таблицей строк возникла не то чтобы проблема, а вопрос такой.
Зачем в УКНЦ первые 18 элементов в таблице строк?
Обычно у них прописываются адреса видеопамяти типа 0, мол не используется. Но туда можно ставить палитру/разрешение экрана/яркость.
Второй момент - почему установка палитры слетает для каждого кадра, а установка разрешения и яркости не слетает? То-есть не получается один раз сделать палитру, а потом закольцевать без палитры таблицу строк только на видеопамять? Необходимо хоть раз установить палитру (разрешение все-ж не нужно устанавливать, достаточно один раз и потом переделать таблицу строк на 2-word'a на строку
(фраза из фильма - "хотел бы я тому изобретателю взглянуть в глаза")
Установка таблицы строк (в периферийном процессоре):
(я ставлю адреса таблицы строк с адреса 2000, но это не суть важно)
Код:
; set lines table
; idea here is to make plain ppu vram -> device projection
; WARNING! lines table starts with 18 lines (i don't know the reason)
; first 2 lines to set palette and resolution
; to set palette as soon as possible is ... important I think
mov #2000, R0
mov #152140, R1 ; bottom 18th line vaddr
mov #^B1111101011111000, (R0)+ ; YGRB for 011 010 001 000
mov #^B1111101111111110, (R0)+ ; YRGB for 111 110 101 100
mov #0, (R0)+ ; vaddr
mov R0, (R0)
add #2, (R0)
bis #2, (R0)+ ; next 4-word to set resolution
mov #^B0000000000010000, (R0)+ ; no cursor
mov #^B0000000000000111, (R0)+ ; 640x288, max luminance (..010111 - 320, ..100111 - 160, ..110111 - 80)
add #80., R1 ; advance to next line
mov #0, (R0)+ ; vaddr
mov R0, (R0)
add #2, (R0)+ ; next are 2-word elements
; second 16 bottom lines
mov #16., R5
10$: add #80., R1
mov #0, (R0)+
mov R0, (R0)
add #2, (R0)+
sob R5, 10$
; next 288 'main' lines from top, vaddr = 100000
mov #100000, R1
mov #288., R5
20$: mov R1, (R0)+
mov R0, (R0)
add #2, (R0)+
add #80., R1
sob R5, 20$
; cycle to 'first' element
dec R0
dec R0
mov #2120, (R0)+
; all lines are set - put them to work
clr @#270
mov #2006, @#272
Первые 18 (почему 18, что за магическое число?) можно установить на нижние адреса и потом закольцевать, то-есть последнюю часть не делать с 288 строками, а делать только с 270-ю и закольцевать на первую.
(проще говоря - УКНЦ это какая-то жуть)