Uknc ROM disasm - 1

From Felixl.com
Revision as of 08:23, 18 March 2007 by Nzeemin (talk | contribs)
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to navigationJump to search
	.TITLE	ROM

	.=100000		; Начальный адрес ПЗУ

; ********************************************************************
; *                                                                  *
; *        ПОДПРОГРАММЫ ОБСЛУЖИВАНИЯ МЕНЮ УСТАНОВКА И ЗАГРУЗКА       *
; *                                                                  *
; *                    Адреса 100000 - 103553                        *
; *                                                                  *
; ********************************************************************

; П/п установки начальных значений в меню УСТАНОВКА и ЗАГРУЗКА
100000$:JSR	R5,110712$	; П/п заносит данные из области
	.WORD	100012$,7152	; по адресу 100012 в 7152
	RETURN
100012$:.WORD	10.		; Количество слов
	.WORD	177701,0,0	; Пункт УСТ не выбран, VT-52, 80x24
	.WORD	7,1,1,7		; Цвета символа, знакоместа, экрана и курсора
	.WORD	0,0		; Рулон плавный, таймер включен
	.WORD	177701		; Пункт ЗАГРУЗКА не выбран

; П/п обслуживания главного меню УСТАНОВКА
100040$:TST	@#23170		; Ожидание завершения скроллинга
	BNE	100040$
	MOV	@#2476,-(SP)	; Сохранить адрес пользовательского экрана
	MOV	#4672,@#2476	; Включить экран установки
	MOV	#22754,R5	; Сделать текущей таблицу видеопараметров
	CALL	110210$		;  экрана установки
	JSR	R5,105346$	; Перевести клавиатуру в системный режим
	.WORD	107310$,11054	; Данные для системного режима
	CALL	104054$		; Очистить буфер клавиатуры
	CLR	@#7232		; Разрешение алфавитно-цифровой клавиатуры
	MOV	SP,@#7142
	EMT	52		; Вывод УСТ в верхней строке
	.WORD	107533$
100120$:EMT	44		; Вывод заголовка
	.WORD	102133$
100124$:MOV	#4,R0
	JSR	R4,101202$	; Вывод меню и запрос пункта
	.WORD	101644$		; Адрес списка для меню УСТАНОВКА
	BMI	100172$		; Нажата <Enter> или УПР-@ ?
	CALL	@100150$(R2)	; Обслуживание выбранного пункта
	BMI	100172$		; Нажата <Enter> или УПР-@ ?
	BR	100124$
; Адреса п/п обслуживания пунктов меню УСТАНОВКА
100150$:.WORD	100172$,100334$,100372$,100432$,100476$
	.WORD	100536$,100576$,100630$,100730$
; Если нажаты <Enter> или УПР-@
100172$:CMP	R0,#177772	; Нажата УПР-@ (выход в монитор ПП) ?
	BEQ	100302$
	MOV	@#7142,SP
	EMT	52		; Стирание в верхней строке надписи УСТ
	.WORD	107524$
	EMT	52
	.WORD	107542$
	TST	@#7146		; Предыдущий режим клавиатуры был системным ?
	BNE	100232$		; Да
	JSR	R5,105400$	; Восстановить пользовательский режим
	.WORD	107310$,11054	; Данные для пользовательского режима
100232$:CALL	110204$		; Включение пользовательского экрана
	MOV	(SP)+,@#2476
	CLR	@#7070		; Очистить признак вызова
	TST	@#7072		; Вызов происходил из меню ЗАГРУЗКА ?
	BNE	100300$		; Да
100254$:MOV	#2,@#7230	; Установить признак выполнения TRAP 2
	MOV	#2,@#22546	; Установить признак выполнения TRAP 4
	MOV	#2,@#7042	; Адресовать ASCII-коды клавиатуры каналу 0
	TRAP	4		; Прочесть символ с канала 0 (если есть)
100300$:RETURN
100302$:MOV	#14,R0		; Очистить экран
	EMT	42
	MOV	#100120$,-(SP)	; Адрес возврата в меню УСТАНОВКА
	MOV	SP,@#7144
	JMP	@#160576	; Переход к программе монитора ПП

; П/п обслуживания подменю СИСТЕМА КОМАНД
100324$:CALL	@100346(R2)	; Вызов п/п по текущему пункту меню
	MOV	#4,R0
100334$:JSR	R4,101202$	; Вывод подменю и запрос пункта
	.WORD	101672$		; Адрес списка подменю СИСТЕМА КОМАНД
	BEQ	100324$
	RETURN
; Адреса п/п для обслуживания подменю СИСТЕМА КОМАНД
100346$:.WORD	162572$,113670$,113712$

; П/п обслуживания подменю ФОРМАТ ЭКРАНА
100354$:MOV	R2,R0		; Получение номера формата
	ASR	R0		; 0 - 80x24, 1 - 40x24, 2 - 20x24, 3 - 10x24
	DEC	R0
	CALL	116502$		; Обращение к п/п установки формата экрана
	MOV	#2,R0
100372$:JSR	R4,101202$	; Вывод меню и запрос пункта
	.WORD	101704$		; Адрес списка подменю ФОРМАТ ЭКРАНА
	BEQ	100354$
	RETURN

; П/п для обслуживания подменю ЦВЕТ СИМВОЛА
100404$:MOV	R2,R0		; Получение номера цвета
	ASR	R0
	DEC	R0
	MOV	R5,-(SP)	; Сохранить адрес текущей таблицы видеопар.
	MOV	#22656,R5	; Загрузить адрес таблицы экрана пользователя
	CALL	116052$		; Обращение к п/п установки цвета символа
	MOV	(SP)+,R5
	MOV	#2,R0
100432$:JSR	R4,101202$	; Вывод меню и запрос пункта
	.WORD	101722$		; Адрес списка подменю ЦВЕТ СИМВОЛА
	BEQ	100404$
	RETURN

; П/п для обслуживания подменю ЦВЕТ ЗНАКОМЕСТА
100444$:MOV	R2,R0		; Получение номера цвета
	SUB	#2,R0
	MOV	113512$(R0),R0
	MOV	R5,-(SP)
	MOV	#22656,R5
	CALL	116130$		; Обращение к п/п установки цвета знакоместа
	MOV	(SP)+,R5
	MOV	#2,R0
100476$:JSR	R4,101202$
	.WORD	101750$		; Адрес списка подменю ЦВЕТ ЗНАКОМЕСТА
	BEQ	100444$
	RETURN

; П/п для обслуживания подменю ЦВЕТ ЭКРАНА
100510$:MOV	R2,R0		; Получение номера цвета
	ASR	R0
	DEC	R0
	MOV	R5,-(SP)
	MOV	#22656,R5
	CALL	116170$		; Обращение к п/п установки цвета экрана
	MOV	(SP)+,R5
	MOV	#2,R0
100536$:JSR	R4,101202$
	.WORD	101776$		; Адрес списка подменю ЦВЕТ ЭКРАНА
	BEQ	100510$
	RETURN

; П/п для обслуживания подменю ЦВЕТ КУРСОРА
100550$:MOV	R2,R0		; Получение номера цвета
	ASR	R0
	DEC	R0
	MOV	R5,-(SP)
	MOV	#22656,R5
	CALL	116226$		; Обращение к п/п установки цвета курсора
	MOV	(SP)+,R5
	MOV	#2,R0
100576$:JSR	R4,101202$
	.WORD	102024$		; Адрес списка подменю ЦВЕТ КУРСОРА
	BEQ	100550$
	RETURN

; П/п для обслуживания подменю РУЛОН
100610$:MOV	R5,-(SP)
	MOV	#22656,R5
	CALL	@<100642$-2>(R2); Обращение к п/п-ам установки рулона
	MOV	(SP)+,R5
	MOV	#2,R0
100630$:JSR	R4,101202$
	.WORD	102052$		; Адрес списка подменю РУЛОН
	BEQ	100610$
	RETURN
; Адреса п/п-ам для установки рулона
100642$:.WORD	100650$,100656$,100674$
100650$:CLR	@#7136		; Установить плавный рулон
	BR	100664$
100656$:MOV	#2,@#7136	; Установить дискретный рулон
100664$:MOV	#2,74(R5)	; Установить присутствие рулона
	RETURN			; 74 - смещение в таблице видеопараметров
100674$:CLR	74(R5)		; Установить отсутствие рулона
	RETURN

; П/п для обслуживания подменю ТАЙМЕР
100702$:BIS	#1000,@#177054	; Выключить таймер в канале ЦП
	SUB	#2,R2		; Текущий пункт - включен ?
	BNE	100724$		; Нет
	BIC	#1000,@#177054	; Включить таймер в канале ЦП
100724$:MOV	#2,R0
100730$:JSR	R4,101202$
	.WORD	102066$		; Адреса списка подменю ТАЙМЕР
	BEQ	100702$
	RETURN

; П/п обслуживания главного меню ЗАГРУЗКА
100742$:CLR	@#7042		; Направлять ASCII-коды запросам EMT 22
	CLR	-(SP)		; Номер устройства = 0
100750$:MOV	#14,R0		; Очистить экран
	EMT	42
100756$:CLR	@SP
	JSR	R4,101616$	; Позиционирование курсора
	.BYTE	2,5		; Y=2, X=5
	MOV	#-6,@#7150	; Запрет вывода в верхнюю инф. строку
	CLR	@#23164		; Разрешение использования курсора
	EMT	44		; Вывод заголовка
	.WORD	103114$
101004$:MOV	#4,R0
	JSR	R4,101202$	; Вывод меню и запрос пункта
	.WORD	102100$		; Адрес списка меню ЗАГРУЗКА
	BEQ	100756$
	BMI	101146$		; Нажаты <Enter>,<ИСП> или <0> ?
	ADD	R2,PC		; Переход по номеру пункта (нажата вправо)
	BR	100756$
	BR	101044$		; Диск
	BR	101102$		; Кассета ПЗУ
	BR	101004$		; Сеть
	BR	101004$		; Стык С2
	BR	101004$		; Магнитофон
	BR	101004$		; Отладка
	BR	101004$		; Тестирование
; Запрос номера диска
101044$:JSR	R4,101616$	; Позиционирование курсора
	.BYTE	4,34
	EMT	22		; Ввод символа с ожиданием
	CMP	R0,#33		; Код Escape ?
	BEQ	101142$		; Да
	EMT	42		; Вывод символа
	SUB	#60,R0		; Проверка нажатия <0> - <3>
	BMI	100756$
	CMP	R0,#3
	BHI	100756$
	BR	101136$
; Запрос номера кассеты ПЗУ
101102$:JSR	R4,101616$	; Позиционирование курсора
	.BYTE	5,34
	EMT	22		; Ввод символа с ожиданием
	CMP	R0,#33		; Код Escape ?
	BEQ	101142$		; Да
	EMT	42		; Вывод символа
	SUB	#61,R0		; Проверка нажатия <1>,<2>
	BMI	100756$
	CMP	R0,#1
	BHI	100756$
101136$:MOV	R0,@SP		; Сохранение номера устройства
	BR	101004$
101142$:EMT	22
	BR	100750$
101146$:MOV	#14,R0		; Очистка экрана
	EMT	42
	CALL	100254$		; Восстановить пользовательский режим
	MOV	R2,R0		; Занести номер пункта в буфер клавиатуры
	CALL	104160$
	MOVB	(SP)+,R0	; Занести номер устройства в буфер клавиатуры
	CALL	104160$
	CLR	@#7072		; Очистить признак вызова
	RETURN

; П/п вывода пунктов меню и запроса номера пункта
101202$:MOV	#-6,@#7150	; Запрет вывода в верхнюю инф. строку
	MOV	R0,-(SP)
	CALL	101446$		; Вывод пунктов меню
	ADD	(SP)+,PC
	BR	101432$
	BR	101224$
101224$:MOV	@R4,R0		; Позиционирование курсора
	MOV	2(R0),R3	; R3 = координаты
	DEC	R3
	CALL	101564$
	MOV	@R4,R3		; R3 = адрес списка
101242$:EMT	22		; Ввод символа с ожиданием
	TST	R0		; Нажата УПР-@ ?
	BEQ	101436$
	CMP	R0,#33		; Символ Escape ?
	BEQ	101306$
	SUB	#60,R0		; Символы <0> - <9> ?
	BMI	101276$
	BEQ	101442$		; Символ <0> ?
	CMP	R0,@R3		; Не превышает номер последнего пункта ?
	BHI	101242$
	MOV	R0,R2		; R2 = номер выбранного пункта
	BR	101404$
101276$:ADD	#43,R0		; Нажата <Enter> (15(8)-60(8)+43(8)=0) ?
	BEQ	101442$
	BR	101404$
101306$:EMT	22
	SUB	#176,R0		; Нажаты <ПОМ>,<ИСП> или стрелки
	BMI	101242$
	CMP	R0,#6
	BHIS	101242$
	ASL	R0
	ADD	R0,PC
	BR	101344$		; <ПОМ>
	BR	101436$		; <ИСП>
	BR	101362$		; <Вверх>
	BR	101372$		; <Вниз>
	BR	101436$		; <Влево>
	BR	101436$		; <Вправо>
101344$:MOV	#20,R3		; Позиционирование курсора
	CALL	101564$
	EMT	44		; Вывод краткого хелпинга
	.WORD	103406$		; Адрес начала хелпинга
	BR	101224$
101362$:DEC	R2		; Уменьшить номер пункта
	BGT	101404$
	MOV	@R3,R2		; R2 = номер последнего пункта
	BR	101404$
101372$:INC	R2		; Увеличить номер пункта
	CMP	R2,@R3		; Превысил номер последнего пункта ?
	BLOS	101404$
	MOV	#1,R2
101404$:MOV	R2,@4(R3)	; Запомнить номер текущего пункта
	DEC	@4(R3)
	CLR	R0
101416$:TST	(R4)+
	CLR	@#7150		; Разрешение вывода в верхнюю инф. строку
	ASL	R2
	TST	R0
	RTS	R4
101432$:MOV	#10,R0
101436$:SUB	#5,R0
101442$:DEC	R0
	BR	101416$

; П/п вывода пунктов меню
101446$:CLR	@#23164		; Запрет использования курсора
	MOV	@R4,R2
	MOV	(R2)+,-(SP)	; Число пунктов меню
	MOV	(R2)+,R3	; Координаты курсора
	ADD	R3,@SP
	MOV	@(R2)+,-(SP)	; Номер текущего пункта меню
	ADD	R3,@SP
	TST	R0
	BNE	101502$
	CALL	101564$		; Курсор в начало экрана
	EMT	44		; Стирание правой части экрана
	.WORD	103364$
101502$:CALL	101564$
	CMP	R3,@SP		; Номер выводимого пункта совпадает с текущим ?
	BNE	101516$
	EMT	44		; Включить режим инверсии
	.WORD	102124$
101516$:MOV	(R2)+,R1	; Вывод очередного пункта
	EMT	46
	CMP	R3,@SP		; Номер выводимого пункта совпадает с текущим ?
	BNE	101532$
	EMT	44		; Выключить режим инверсии
	.WORD	102127$
101532$:INC	R3		; Переход к очередному пункту
	CMP	R3,2(SP)	; Вывод завершен ?
	BLO	101502$		; Нет
	CMP	(SP)+,(SP)+
	MOV	@R4,R0
	MOV	@4(R0),R2	; R2 = номер текущего пункта
	INC	R2
	MOV	#2,@#23164	; Разрешить использование курсора
	RETURN

; Следующие две п/п осуществляют позиционирование курсора
; В первой п/п координаты задаются в R3, во второй - в слове,
; которое следует за командой вызова п/п (JSR R4,101616$).
101564$:MOV	@#23150,R5	; R5 = адрес таблицы видеопараметров
	MOVB	R3,R0		; R0 = Y (строка)
	CALL	115720$		; Позиционирование по строке
	SWAB	R3
	MOVB	R3,R0		; R0 = X (столбец)
	CALL	115672$		; Позиционирование по столбцу
	SWAB	R3
	INC	@#7066		; Установить признак перемещения курсора
	RETURN
101616$:MOV	@#23150,R5	; R5 = адрес таблицы видеопараметров
	MOVB	(R4)+,R0	; R0 = Y (строка)
	CALL	115720$		; Позиционирование по строке
	MOVB	(R4)+,R0	; R0 = X (столбец)
	CALL	115672$		; Позиционирование по столбцу
	INC	@#7066		; Установить признак перемещения курсора
	RTS	R4

;       СПИСКИ  ПУНКТОВ  МЕНЮ
; Структура списка:
;    первое слово - число пунктов меню
;    второе слово - координаты курсора
;    третье слово - адрес ячейки, в которой сохраняется номер тек. пункта
;    далее        - адреса надписей пунктов меню

; Список главного меню УСТАНОВКА
101644$:.WORD	10
	.BYTE	4,0
	.WORD	7152,102165$,102211$,102235$,102261$
	.WORD	102305$,102331$,102355$,102401$

; Список меню СИСТЕМА КОМАНД
101672$:.WORD	2
	.BYTE	4,30
	.WORD	7154,102425$,102445$

; Список меню ФОРМАТ ЭКРАНА
101704$:.WORD	4
	.BYTE	4,30
	.WORD	7156,102465$,102477$,102511$,102523$

; Список меню ЦВЕТ СИМВОЛА
101722$:.WORD	10
	.BYTE	4,30
	.WORD	7160,102535$,102562$,102607$,102634$
	.WORD	102661$,102706$,102733$,102760$

; Список меню ЦВЕТ ЗНАКОМЕСТА
101750$:.WORD	10
	.BYTE	4,30
	.WORD	7162,102535$,102562$,102607$,102634$
	.WORD	102661$,102706$,102733$,102760$

; Список меню ЦВЕТ ЭКРАНА
101776$:.WORD	10
	.BYTE	4,30
	.WORD	7164,102535$,102562$,102607$,102634$
	.WORD	102661$,102706$,102733$,102760$

; Список меню ЦВЕТ КУРСОРА
102024$:.WORD	10
	.BYTE	4,30
	.WORD	7166,102535$,102562$,102607$,102634$
	.WORD	102661$,102706$,102733$,102760$

; Список меню РУЛОН
102052$:.WORD	3
	.BYTE	4,30
	.WORD	7170,103005$,103024$,103043$

; Список меню ТАЙМЕР
102066$:.WORD	2
	.BYTE	4,30
	.WORD	7172,103062$,103077$

; Список меню ЗАГРУЗКА
102100$:.WORD	7
	.BYTE	4,2
	.WORD	7174,103175$,103216$,103237$,103260$
	.WORD	103301$,103322$,103343$

; Esc-последовательность включения инверсии
102124$:.BYTE	33,243,0
; Esc-последовательность выключения инверсии
102127$:.BYTE	33,277,243,0
; Заголовок меню УСТАНОВКА
102133$:.BYTE	14,12,40,33,244
	.ASCII	/УСТАНОВКА РЕЖИМОВ/
	.BYTE	33,277,244,0

; Надписи меню УСТАНОВКА
102165$:.ASCIZ	/1 - система команд /
102211$:.ASCIZ	/2 - формат экрана  /
102235$:.ASCIZ	/3 - цвет символа   /
102261$:.ASCIZ	/4 - цвет знакоместа/
102305$:.ASCIZ	/5 - цвет экрана    /
102331$:.ASCIZ	/6 - цвет курсора   /
102355$:.ASCIZ	/7 - рулон          /
102401$:.ASCIZ	/8 - таймер         /

; Надписи меню СИСТЕМА КОМАНД
102425$:.ASCIZ	/1 - VT-52      /
102445$:.ASCIZ	/2 - 15ИЭ-00-013/

; Надписи меню ФОРМАТ ЭКРАНА
102465$:.ASCIZ	/1 - 80/<220>/24/
102477$:.ASCIZ	/2 - 40/<220>/24/
102511$:.ASCIZ	/3 - 20/<220>/24/
102523$:.ASCIZ	/4 - 10/<220>/24/

; Надписи меню ЦВЕТ СИМВОЛА, ЦВЕТ ЗНАКОМЕСТА, ЦВЕТ ЭКРАНА, ЦВЕТ КУРСОРА
102535$:.IRP	X,<60,61,62,63,64,65,66,67>
	.BYTE	X+1,40,55,40,33,240,X,33,241,X
	.BYTE	237,237,237,237,33,277,240,33,277,241,0
	.ENDR

; Надписи меню РУЛОН
103005$:.ASCIZ	/1 - плавный   /
103024$:.ASCIZ	/2 - дискретный/
103043$:.ASCIZ	/3 - выключен  /

; Надписи меню ТАЙМЕР
103062$:.ASCIZ	/1 - включен /
103077$:.ASCIZ	/2 - выключен/

; Заголовок меню ЗАГРУЗКА
103114$:.ASCII	<33><244>/ЗАГРУЗКА/<33><277><244>
	.BYTE	12,12
	.REPT	10
	.BYTE	31
	.ENDR
	.ASCII	/(0/<221>/3): 0/<12>
	.REPT	10
	.BYTE	32
	.ENDR
	.ASCIZ	/(1,2): 1/

; Надписи меню ЗАГРУЗКА
103175$:.ASCIZ	/1 - диск        /
103216$:.ASCIZ	/2 - кассета ПЗУ /
103237$:.ASCIZ	/3 - сеть        /
103260$:.ASCIZ	/4 - стык С2     /
103301$:.ASCIZ	/5 - магнитофон  /
103322$:.ASCIZ	/6 - отладка     /
103343$:.ASCIZ	/7 - тестирование/

; Стирание правой части экрана
103364$:.REPT	10
	.BYTE	37,35
	.ENDR
	.BYTE	37,0

; Краткий хелпинг
103406$:.BYTE	61,221,71,54,200,54,201
	.ASCII	/ - выбор элемента/<15><12>
	.BYTE	40,40,203
	.ASCII	/     - следующий уровень/<15><12>
	.BYTE	40,40,202
	.ASCII	/     - предыдущий уровень/<15><12>
	.ASCIZ	/0,/<224>/,ИСП - выход/
	.EVEN
	.ENDT