Псевдографический режим 128x62 компьютеров РК86

Материал из ZX-PK.ru
Перейти к: навигация, поиск

Стандартный видеорежим компьютеров РК86 64x25 символа. Благодаря псевдографическим символам, делящим знакоместо на 4 части, реализуется псведографический режим 128x50. Но из за отступа в 2 пикселя между стркоами символов изображение будет распадаться на строки.

Radio rk86 bug.png

Этот отступ можно программно отключить, используя следующую программу.

		; Ждем обратный ход

		ld hl, VG75_ADDR+1
		ld a, (hl)
wait1:		ld a, (hl)
		and 20h
		jp z, wait1

                ; Выключаем видео

		ld hl, VG75_ADDR+1
		ld (hl), 0

		; Устаналиваем видеорежим

		ld hl, VG75_ADDR
		ld (hl), 77     ; 78 символов
		ld (hl), 29	; 30 линий
		ld (hl), 77h	; Высота символа 8
		ld (hl), 053h

		; Включаем видео

		inc l
		ld (hl), 27h

Программно этот режим полностью совместим со стандартным. Но при этом частота частота кадров увеличивается с 50 до 60 Гц и изображение становится уже.

Если же при этом увеличить количество строк на экране с 25-и (видимых) до 31-ой, то стандартная частота кадров сохранится, а псевдографическое разрешние повысится до 128x62.

Такой видеорежим использует 78*37 = 2886 байт видеопамяти. А стандартно под видеопамять отводится 2340 байт расположенных в конце ОЗУ. Поэтому необходимо, либо перенести видеопамять в другие адреса, либо воспользоваться специальным значением F1 (стоп ПДП или конец строки). Если разместить F1 в видеопамяти, то следующий байт видеопамяти будет началом следующей строки.

В стандартном режиме РК86 750 байт памяти не используется, так как не отображается на мониторе. Если вместо пробелов заполняющих 3 верхние, 3 нижние строки и 4 правых колонки разместить значение F1, то видеорежим 128x62 поместится в стандартную видеопамять.

Это стандартная возможность всех РК86-компьютертов (использующих микросхему КР580ВГ75). Такой видеорежим не совместим с программой "Монитор", но является стандартным для видеоконтроллера и телевизора.

start:		; Ждем обратный ход

		ld hl, VG75_ADDR+1
		ld a, (hl)
wait1:		ld a, (hl)
		and 20h
		jp z, wait1

                ; Выключаем видео

		ld (hl), 0

                ; Записываем байт F1 (стоп ПДП, байт обозначающий конец строки) и очищаем видеопамять

		ld hl, VIDEOMEM_ADDR
		xor a
		ld bc, 1 +(3<<8)
		call writeF1
		ld bc, 73+(31<<8)
		call writeF1
		ld bc, 1 +(2<<8)
		call writeF1	
		ld bc, 35+(1<<8)
		call writeF1	

		; Устаналиваем видеорежим

		ld hl, VG75_ADDR
		ld (hl), 77     ; 78 символов
		ld (hl), 36	; 37 линий
		ld (hl), 77h	; Высота символа 8
		ld (hl), 053h

		; Включаем видео

		inc l
		ld (hl), 27h

;-----------------------------------

writeF1:	ld d, c	
writeF1_1:      ld (hl), a
		inc hl
		dec d
		jp nz,  writeF1_1		
		ld (hl), 0F1h
		inc hl
		dec b
		jp nz,  writeF1
		ret

Адрес символа в видеопамяти вычисляется по формуле VIDEOMEM_ADDR + 15 + строка*74 + столбец.