Index of /ukdwk_archive/ukncbtlwebcomplekt/Other/titus_paltestUKNC

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory   -  
[   ]PALITRA.rar 2014-01-19 17:32 341K 
[   ]disketa009.dsk 2013-01-23 01:34 800K 
[IMG]uknc_pal.png 2013-01-23 18:32 4.2K 


Titus:
"Много цветов на УКНЦ!
Благодаря наводке Alex_K удалось выяснить,
что на УКНЦ гораздо больше цветов, нежели
всегда считалось. Не 8 цветов с двумя оттенками на каждый,
а целых 8 палитр по 8 цветов плюс 2 яркости на каждый.
Итого - 128 цветов, уникальных из них... пока не сосчитал.
И это не гигаскрин, не фликеринг, а самый обычный штатный режим работы."

На дискете программа TSPAL.SAV содержит
Тест палитры УКНЦ v0.1a (c) by dr.Titus
- запускается сразу из командного файла.


Image  :   disketa009.dsk

Format :   DSK 
Size   :   800 Kb

Volume ID: RT11A
Owner    : 

File       Blocks    Date       Bytes
---------- ------ ----------- ----------
SWAP  .SYS    27  19-Dec-1988     13'824
RT11SJ.SYS    78  16-Dec-2012     39'936
TT    .SYS     2  23-Jan-1980      1'024
MZ    .SYS     4  12-Jan-1990      2'048
TSPAL .SAV     5  22-Jan-2013      2'560
GRDEMO.SAV    36  13-Jul-1980     18'432
RDWR  .SAV     3  20-Dec-1991      1'536
BANK  .FNT    68  31-Jan-1994     34'816
MENFNT.SAV    54  31-Jan-1994     27'648
AC    .SYS     5  12-Sep-1994      2'560
RESORC.SAV    25  01-Mar-2012     12'800
DUP   .SAV    45  27-Dec-1983     23'040
PIP   .SAV    30  31-Oct-1998     15'360
DIR   .SAV    20  31-Oct-1998     10'240
STARTS.COM     1  22-Jan-2013        512
< UNUSED >  1183                 605'696
---------- ------ ----------- ----------
 15 Files, 403 Blocks
 1183 Free blocks



;===================================================================================
;
;		     	       Тест палитры УКНЦ
;
;				  Версия 0.1b
;
;			      (c) dr.Titus 2013
;
;===================================================================================

		.MCall	.TTYIN, .TTYOUT, .Print, .Exit
	
		.RADIX	10
	
		.CSect

CSR2STATE	=	^O176674
CSR2DATA	=	^O176676

PPLADR		=	^O177010
PPL0DATA	=	^O177012
PPL12DATA	=	^O177014

KBSTAT		=	^O177700
KBDATA		=	^O177702


SCRMEM		=	^O154540



;===============================================
Start:


;----------------------------------------------- Копировать код в память PPU

		MOV	#,MPA2	;Аргумент 2 - длина программы в PPU
		MOVB	#1,MPType		;Комана запроса памяти PPU
		CALL	PPUOut			;=> Передача параметров
		BNE	PPUErr			;Если ошибка, то --> PPUErr
		
		MOV	MPA1,R0			;PPUDisp = PPUMBeg - PPUTBeg
		SUB	#PPUTBeg,R0		;(смещение между программой в CPU и ее копией в PPU)
		MOV	R0,PPUDisp		;
		
		MOV	MPA1,PPUMBeg		;Сохранить адрес начала выделенной памяти в PPUMBeg
						;Аргумент 1 - адрес начала программы в PPU
		MOV	#PPUTBeg,MPA2		;Аргумент 2 - адрес начала программы в CPU
		MOV	#,MPA3	;Аргумент 3 - длина программы
		MOVB	#16,MPType		;Комана копирования из памяти CPU в память PPU
		CALL	PPUOut			;=> Передача параметров
		BNE	PPUErr			;Если ошибка, то --> PPUErr
				
;-----------------------------------------------
	
		.Print	#KeyOFF			;Отключить клавиатуру
		
;----------------------------------------------- Тестирование палитры
TestBegin:
		.Print	#Text0			;Печатать название теста

		CALL	PALTest			;Тестирование палитры

;-----------------------------------------------
ExitTest:
			
						;Освободить память PPU
		MOV	PPUMBeg,MPA1		;Аргумент 1 - адрес начала выделенной памяти
		MOV	#,MPA2	;Аргумент 2 - длина выделенной памяти
		MOVB	#2,MPType		;Комана освобождения памяти PPU
		CALL	PPUOut			;=> Передача параметров
		BNE	PPUErr			;Если ошибка, то --> PPUErr

		.Print	#KeyON			;Включить клавиатуру
	
		.Exit
		
		
		
		
		
;----------------------------------------------- Ошибка обмена с PPU
PPUErr:						
     		.PRINT     #tPPUErr		;Печатаем сообщение об ошибке
    		.EXIT				;Выход в систему
					
		
		


;===================================================================================
;
;	     		 Тестирование палитры
;
;===================================================================================
PALTest:
		MOV	#PALPPU,R0		;Аргумент 1 - PALPPU + PPUDisp (адрес запуска программы в PPU)
		ADD	PPUDisp,R0		;
		MOV	R0,MPA1			;
		CLR	FlgEnd			;Очищаем флаг завершения программы PPU
		MOVB	#24,MPType		;Команда запуска программы PPU
		CALL	PPUOut			;=> Передача параметров
		BNE	PPUErr			;Если ошибка, то --> PPUErr

1$:		TST	FlgEnd			;Ожидаем окончания выполнения программы PPU
		BEQ	1$			;
		
		RETURN				;Выход




;===================================================================================
;
;			Функция обмена информацией с PPU
;
;===================================================================================
PPUOut:
		MOV	#AMP,R0			;R0 - Указатель на массив инициализации
		MOV	#8,R1			;R1 - счетчик на 9 байт
1$:		
		MOVB	(R0)+,@#CSR2DATA	;(R0) -> Канал-2
2$:		TSTB	@#CSR2STATE		;Ждать готовности
		BPL	2$			;
		
		SOB	R1,1$			;Цикл на R1 байт

		TSTB	MP			;Тестировать байт ответа PPU
		RETURN				;Выход

AMP:		.BYTE	0, 0, 0, 255		;Массив инициализации из неопределенного состояния
		.WORD	MP, 65535		;Адрес массива параметров, и два терминатора 255, 255

MP:		.BYTE	0			;Байт ответа
MPType:		.BYTE	1, 26, 0		;Команда, тип устройства (ОЗУ ПП), номер устройства
MPA1:		.WORD	0			;Аргумент 1
MPA2:		.WORD	0			;Аргумент 2
MPA3:		.WORD	0			;Аргумент 3

FlgEnd:		.WORD	0			;Флаг завершения работы программы 
	
	

;===================================================================================
		


;===================================================================================
;
;			  Начало перемещаемой области
;
;===================================================================================
PPUTBeg:

;===================================================================================
;
;		          Функция тестирования палитры
;
;=================================================================================== 
PAlPPU:						
		MTPS	#^O340			;Запретить прерывания
		
;		MOV	SP,SP			;Остановка для отладчика
		
;----------------------------------------------- Инициализация пустой строки

		MOV	#SCRMEM,@#PPLADR	;Адрес начала пустой строки
		
		CLR	R0			;R0 = 0
		MOV	#40,R1			;R1 - счетчик на 40 байт
10$:		
		MOVB	R0,@#PPL0DATA		;Записать в план 0
		MOV	R0,@#PPL12DATA		;Записать в планы 1 и 2
		INC	@#PPLADR		
		SOB	R1,10$			;Цикл

;----------------------------------------------- Инициализация шаблона

		MOV	#SCRMEM+40,@#PPLADR	;Адрес начала шаблона
		
		CLR	R2			;R2 - цвет (0)
		MOV	#8,R0			;R0 - счетчик на 8 цветов
9$:			
		CLR	R3			;Подготовить план 0
		BIT	#1,R2			;
		BEQ	5$			;
		DECB	R3			;
5$:	
		CLR	R4			;Подготовить план 2
		BIT	#4,R2			;
		BEQ	6$			;
		DEC	R4			;
6$:
		CLRB	R4			;Подготовить план 1
		BIT	#2,R2			;
		BEQ	7$			;
		DECB	R4			;
7$:			
		MOV	#5,R1			;R1 - счетчик на 5 байт на цвет
8$:						
		MOVB	R3,@#PPL0DATA		;Записать в план 0
		MOV	R4,@#PPL12DATA		;Записать в планы 1 и 2
		INC	@#PPLADR		
		SOB	R1,8$			;Цикл
		
		INC	R2			;Перейти к следующему цвету
		SOB	R0,9$			;цикл

;=============================================== Инициализация списка строк		
	
		MOV	PC,R1			;R1 - таблица строк
		ADD	#Buffer-.,R1		;
		ADD	#7,R1			;Выровнять на границу 8-ми байт
		BIC	#7,R1			;
			
		MOV	R1,-(SP)		;Сохранить на стеке
		
		MOV	#SCRMEM+40,R0		;R0 - экрананя память шаблона
		MOV	#34952,R2		;R2 - 0x8888 (маска яркости)
		MOV	#16,R4			;R4 - палитра (0) и масштаб (320)

;----------------------------------------------- Регистр отображения и цвета для пустых строк

		MOV	#0,(R1)+		;Нет курсора
		MOV	#16,(R1)+		;Палитра 0
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 4-х словный регистр цвета
		ADD	#6+2,R3			;
		MOV	R3,(R1)+		;			
		
		MOV	#0,(R1)+		;Нулевые цвета
		MOV	#0,(R1)+		;
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 2-х словный
		ADD	#2,R3			;
		MOV	R3,(R1)+		;

;----------------------------------------------- 30 пустых строки

		MOV	#30,R5			;Цикл на 30 строк
12$:
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент двухсловный
		ADD	#2,R3			;
		MOV	R3,(R1)+		;	

		SOB	R5,12$			;Цикл

;----------------------------------------------- 1 пустая строка

		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 4-х словный регистр цвета
		ADD	#6+6+1,R3		;Включить курсор
		MOV	R3,(R1)+		;
		ADD	#4,R1			;Выравниваем на границу 4-х слов
		
;----------------------------------------------- Инициализируем цвета
2$:
		MOV	#12816,R3		;R3 = 0x3210 (цвета с 0 по 3)
		BIS	R2,R3			;Добавить маску яркости
		MOV	R3,(R1)+		;Записать первое слово регистра управления цветом
		
		MOV	#30292,R3		;R3 = 0x7654 (цвета с 4 по 7)
		BIS	R2,R3			;Добавить маску яркости
		MOV	R3,(R1)+		;Записать первое слово регистра управления цветом
		
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 4-х словный регистр отображения
		ADD	#2+2,R3			;
		MOV	R3,(R1)+		;
		
;------------------------------------------------ 0-я строка, задающая палитру
11$:
		MOV	R2,R3			;R3 = (R2 & 0xFFF7) + 7
		BIC	#65527,R3		;
		ADD	#7,R3			;
		MOV	R3,(R1)+		;Цвет курсора 7, яркость R2, позиция 0, тип - текстовый

		MOV	R4,(R1)+		;Палитра
		MOV	R0,(R1)+		;Экранная память шаблона
		
		MOV	R1,R3			;Следующий элемент - 2-х словный
		ADD	#2,R3			;
		MOV	R3,(R1)+		;			
		
;----------------------------------------------- 14 обычных строк
		
		MOV	#14,R5			;Цикл на 14 строк
1$:
		MOV	R0,(R1)+		;Экранная память шаблона
		
		MOV	R1,R3			;Следующий элемент - 2-х словный
		ADD	#2,R3			;
		MOV	R3,(R1)+		;

		SOB	R5,1$			;Цикл
		
;----------------------------------------------- 15-я строка

		MOV	R0,(R1)+		;Экранная память шаблона
		
		MOV	R1,R3			;Следующий элемент - 4-х словный регистр отображения
		ADD	#4+4,R3			;
		MOV	R3,(R1)+		;
		ADD	#4,R1			;Выравниваем на границу 4-х слов

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

		INC	R4			;Следующая палитра
		BIT	#8,R4			;Если не достигли 8-й палитры, 
		BEQ	11$			;то цикл --> 11$
		
		BIS	#4,-6(R1)		;Поменять элемент с регистра отображения на регистр палитры
		
		MOV	#34952,R3		;
		XOR	R3,R2			;Иначе инвертировать маску яркости
		MOV	#16,R4			;R4 - палитра (0) и масштаб (320)
	
		TST	R2			;Если яркость нулевая,
		BEQ	2$			;то еще один цикл

;----------------------------------------------- Регистр отображения и цвета для пустых строк

		BIC	#4,-6(R1)		;Поменять элемент с регистра палитры на регистр отображения

		MOV	#0,(R1)+		;Нет курсора
		MOV	#16,(R1)+		;Палитра 0
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 4-х словный регистр цвета
		ADD	#6+2+1,R3		;Выключить курсор
		MOV	R3,(R1)+		;			
		
		MOV	#0,(R1)+		;Нулевые цвета
		MOV	#0,(R1)+		;
		MOV	#SCRMEM,(R1)+		;Пустая строка
		
		MOV	R1,R3			;Следующий элемент - 2-х словный
		ADD	#2,R3			;
		MOV	R3,(R1)+		;

;----------------------------------------------- Конец списка

		MOV	#SCRMEM,(R1)+		;Пустая строка
	
		MOV	R1,R3			;Следующий элемент - 2-х словный,
		ADD	#-2,R3			;зацикленный сам на себя
		MOV	R3,(R1)			;
		
;----------------------------------------------- Инициализируем корневой указатель

		MOV	PC,R1			;Сохранить указатель
		ADD	#STOR270-.,R1		;на первую запись таблицы строк
		MOV	@#^O270,(R1)+		;
		MOV	@#^O272,(R1)		;

		MOV	#SCRMEM,@#^O270		;Пустая строка
		MOV	(SP)+,R3		;
		ADD	#2,R3			;Указатель на нашу таблицу строк
		MOV	R3,@#^O272		;(4-х словный список)
		
;----------------------------------------------- Ожидание нажатия на клавишу		
		
4$:		TSTB	@#KBSTAT		;Ожидаем нажатия или отжатия
		BPL	4$			;клавиши
		
		TSTB	@#KBDATA		;Если клавиша отжата, то цикл
		BMI	4$			;


		MOV	PC,R1			;Восстановить указатель
		ADD	#STOR270-.,R1		;на первую запись таблицы строк
		MOV	(R1)+,@#^O270		;
		MOV	(R1),@#^O272		;

;=============================================== Завершение работы резидента PPU
						
		MOV	#FlgEnd/2,@#PPLADR	;-1 -> (FlgEnd)
		MOV	#-1,@#PPL12DATA		;(конец работы подпрограммы PPU)

		MTPS	#0			;Разрешить прерывания
				
		RETURN				;Выход
		


;===================================================================================

TEMP:		.WORD	0			;Слово для временного использования

PPUDisp:	.WORD	0			;Смещение программы в PPU относительно той же программы в CPU

STOR270:	.WORD	0			;Сохраненная первая запись в таблице строк
		.WORD	0			;

;----------------------------------------------- Буфер находится в памяти PPU и CPU по разным адресам
Buffer:						
		.BLKW	600			;Буфер для таблицы строк (таблица строк около 534 слов)



PPUTEnd:
;===================================================================================
;
;			  Конец перемещаемой области
;
;===================================================================================






;===================================================================================

Text0:		.ASCIZ	<14>"tEST PALITRY uknc"<15>" v0.1b (c) by dr.Titus"

tPPUErr:	.ASCIZ	<13><10><14>"o[IBKA INICIALIZACII "<15>"PPU!"

KeyOFF:		.ASCII	<27><91><50><104><128>
KeyON:		.ASCII	<27><91><50><108><128>

		.Even

;===============================================

PPUMBeg:	.WORD	0			;Адрес начала выделенной памяти в PPU


























;===================================================================================

		.End	Start
;