;
; Слой 1 - продолжение загрузчиков
;_______________________________________________________________________
;
		.ASECT
		.	= 173000
		.if	ne, 1
BGSL1:		br	.
;_______________________________________________________________________
;
; Продолжение загручика DX
;
PDX:		bic	#4, R3			;
		bic	R2, R2			;
1$:		mov	PC, SP			;
		bne	TRB			; ожидание сигнала TPБ [7]
		mov	#1, 2(R1)		; номер дорожки установим 1
		bne	2$			;
		.word	173000			; адрес старта (+ перемычки)
		.word	341			;
2$:		add	#1, R2			;
		cmp	#2, R2			; номер дорожки и номер 
		bne	1$			; сектора посланы? нет
3$:		mov	(R1), R2		;
		bic	#77737, R2		; есть КОП?
		beq	3$			;
		bic	#40, R2			;
		bne	ER1.2			; ошибка
		mov	R3, (R1)		; команда разгрузка буфера
		bic	R3, R3			; адрес памяти для чтения
4$:		mov	PC, SP			; 
		bne	TRB			; на ожидание сигнала TPБ
		mov	2(R1), R2		; чтение байта с четным адресом
		mov	PC, SP			;
		bne	TRB			; ожидание сигнала TPБ
		mov	2(R1), R4		; чтение байта с нечетным адресом
		add	R4, R4			; сдвиг в старший байт
		add	R4, R4			;
		add	R4, R4			;
		add	R4, R4			;
		add	R4, R4			;
		add	R4, R4			;
		add	R4, R4			;
		add	R4, R4			;
		bic	#177400, R2		;
		add	R2, R4			; формирование слова из двух байт
		mov	R4, (R3)+		; сохранение слова в памяти
		mov	R3, R2			;
		bic	#177577, R2		; конец буфера?
		beq	4$			; пока нет
		bic	PC, PC			; передача управления загрузчику
;_______________________________________________________________________
;
; Подпрограмма ожидания ТРБ
;
TRB:		mov	(R1),R4			;
		bic	#177577, R4		;
		beq	TRB			;
		add	#2, SP			;
		mov	SP, PC			;
;_______________________________________________________________________
;
; Продолжение загрузчика MT
;
PMT:		add	#2, R1			; адрес РКС в R1
		mov	R3, (R1)		; номер устройства
5$:		mov	-2(R1), R4		; есть готовность или ошибка?
		bic	#177776, R4		;
		beq	5$			;
		mov	(R1), R4		;
		mov	(R1), R3		;
		add	#60011, R3		;
		add	#60017, R4		;
		mov	R4, (R1)		; выдача команды
7$:		mov	(R1), R4		; есть готовность?
		bic	#177577, R4		;
		beq	7$			;
		mov	#-1, 2(R1)		; одна зона для пропуска
		mov	R3, (R1)		;
11$:		mov	(R1), R4		; есть готовность?
		bic	#177577, R4		;
		beq	11$			;
		mov	#60003, R2		;
CMN3:		mov	(R1), R4		;
		bic	#77777, R4		; есть ошибка?
ER1.2:		bne	ER1.1			; да. есть ошибка
;_______________________________________________________________________
;
; Общая часть загрузчиков DK, DP, DR, DM, MT, MM
;
CMN1:		mov	#ER1, SP		; SP - адрес выхода по ошибке
CMN2:		mov	#-512., 2(R1)		; счетчик слов
		mov	(R1), R3		;
		bic	#377, R3		;
		add	R2, R3			; подготовка команды
CMN4:		mov	R3, (R1)		; команда чтения в РКС
13$:		mov	(R1), R4		; есть готовность?
		bic	#177577, R4		;
		beq	13$			;
		mov	(R1), R4		;
		bic	#77777, R4		; есть ошибка?
		bne	14$			;
		bic	PC, PC			; запуск загрузчика
14$:		mov	SP, PC			; выход из общей части по ошибке
;_______________________________________________________________________
;
; Продолжение загрузчика MM
;
PMM:		mov	R4, R3			; номер устройства
		add	#1300, R3		;
		mov	R3, 32(R1)		; плотность
15$:		mov	12(R1), R4		; есть ошибка?
		bic	#167777, R4		;
		beq	15$			;
		mov	#7,( R1)		; команда перемотки
16$:		mov	12(R1), R4		;
		bic	#177577, R4 		; есть готовность?
		beq	16$			;
		mov	#11, (R1)		; команда пропуска зоны
17$:		mov	12(R1), R4		;
		bic	#177577, R4 		; есть готовность?
		beq	17$			;
		mov	#-1, 6(R1)		;
		mov	#31, (R1)		;
20$:		mov	12(R1), R4		;
		bic	#177577, R4		;
		beq	20$			;
		mov	16(R1), 16(R1)		; внимание
		mov	#71, R2			; команда чтения
		mov	#21$, SP		;
		bne	CMN2			; выход на общую часть
21$:		mov	14(R1), R4		; есть ошибка?
		cmp	#1000, R4     		; счетчика байтов?
ER1.1:		bne	ER1		        ; нет, другая ошибка
		bic	PC,PC			; запуск загрузчика
;_______________________________________________________________________
;
; Продолжение загрузчика DM
;
PDM:		mov	R0, 10(R1)		; номер диска
		mov	#2003, (R1)		; подтверждение тома, тип накопителя 1
22$:		mov	(R1), R4		; есть готовность?
		bic	#177577, R4		;
		beq	22$			;
		mov	#2021, R2		; команда чтения, типа накопителя 1
		bne	CMN3			;
;_______________________________________________________________________
;
; Загрузчик диска SM
;
		SMCSR	= 176300		;
PSM:		mov	#SMCSR, R0		; базовый адрес SMC11
		mov	#13, 6(R0)		; команда загрузки
LOOP:		tst	2(R0)			; готов?
		bpl	LOOP			; переход, если нет
		bit	#40000,2(R0)		; ошибка?
		bne	ER1			; выход при ошибке
		clr	PC			; старт с нулевого адреса
;_______________________________________________________________________
;
; Продолжение загрузчика DR
;
PDR:		movb	R4, 10(R1)		; номер диска
		mov	#-512., 2(R1)		; счетчик слов
		mov	#23, (R1)		; команда подтверждения пакета
30$:		mov	12(R1), R3		; содержимое РКС2 в R3
		bic	#177577,R3		; есть готовность?
		beq	30$			; нет
		mov	#71, R3			; код команды чтения
		mov	#CMN4, PC		; на общую часть загрузчиков
		.word	-1,-1,-1,-1,-1		;
		.word	-1,-1,-1,-1,-1		;
		.word	-1,-1,-1		;
;_______________________________________________________________________
;
; Выход по ошибке в нулевой слой
;
 		.	= BGSL1+650		;
ER1:		reset				;
;_______________________________________________________________________
;
START1:		mov	#0, @#173024		; на продолжение старта
						; в нулевом слое
		mov	R0, R4			;
		bic	#177770, R4  		; в R4 номер устройства
		mov	R0, R1			;
		bic	R4, R1			;
		beq	START2			; переход если адрес контроллера стандартный
		add	#4, R5			; адрес контроллера задан в R0[03/15]
		bne	START2			;
;_______________________________________________________________________
;
; Переход в первый слой для проолжения по адресу в К5
;
		.	= BGSL1+702		;
		mov	SP, PC			;
		.word	-1, -1, -1, -1		;
						;
START2:		mov	R4, R3			;
		add	R3, R3			;
		add	R3, R3			;
		add	R3, R3			;
		mov	#START1, PC		;
		.word	-1, -1, -1, -1		;
		.word	-1, -1, -1, -1		;
;_______________________________________________________________________
;
; Продолжение программы плдключения переходника общей шины
;
PBS:		add	R4, R1			;
		add	R4, R1 			; формирование адреса BS0..BS7
		mov	#1, (R1)		; запрос на пдключение
40$:		bit	#100200, (R1)		;
		beq	40$			;
		bmi	ER1			; переход по ошибке тайм-аута
		mov	#300, @#173024		; возврат на эмулятор
		.word	-1			;
;_______________________________________________________________________
;
; Дамп, прочитанный из реальной машины, совпадает с результатом компиляции (кроме 173024)
;
	.iff
		.word	000777, 042703, 000004, 040202, 010706, 001055, 012761, 000001
		.word	000002, 001002, 173000, 000341, 062702, 000001, 022702, 000002
		.word	001363, 011102, 042702, 077737, 001774, 042702, 000040, 001102
		.word	010311, 040303, 010706, 001027, 016102, 000002, 010706, 001023
		.word	016104, 000002, 060404, 060404, 060404, 060404, 060404, 060404
		.word	060404, 060404, 042702, 177400, 060204, 010423, 010302, 042702
		.word	177577, 001750, 040707, 011104, 042704, 177577, 001774, 062706
		.word	000002, 010607, 062701, 000002, 010311, 016104, 177776, 042704
		.word	177776, 001773, 011104, 011103, 062703, 060011, 062704, 060017
		.word	010411, 011104, 042704, 177577, 001774, 012761, 177777, 000002
		.word	010311, 011104, 042704, 177577, 001774, 012702, 060003, 011104
		.word	042704, 077777, 001102, 012706, 173650, 012761, 177000, 000002
		.word	011103, 042703, 000377, 060203, 010311, 011104, 042704, 177577
		.word	001774, 011104, 042704, 077777, 001001, 040707, 010607, 010403
		.word	062703, 001300, 010361, 000032, 016104, 000012, 042704, 167777
		.word	001773, 012711, 000007, 016104, 000012, 042704, 177577, 001773
		.word	012711, 000011, 016104, 000012, 042704, 177577, 001773, 012761
		.word	177777, 000006, 012711, 000031, 016104, 000012, 042704, 177577
		.word	001773, 016161, 000016, 000016, 012702, 000071, 012706, 173462
		.word	001304, 016104, 000014, 022704, 001000, 001066, 040707, 010061
		.word	000010, 012711, 002003, 011104, 042704, 177577, 001774, 012702
		.word	002021, 001255, 012700, 176300, 012760, 000013, 000006, 005760
		.word	000002, 100375, 032760, 040000, 000002, 001036, 005007, 110461
		.word	000010, 012761, 177000, 000002, 012711, 000023, 016103, 000012
		.word	042703, 177577, 001773, 012703, 000071, 012707, 173310, 177777
		.word	177777, 177777, 177777, 177777, 177777, 177777, 177777, 177777
		.word	177777, 177777, 177777, 177777, 000005, 012737, 000000, 173024
		.word	010004, 042704, 177770, 010001, 040401, 001410, 062705, 000004
		.word	001005, 010607, 177777, 177777, 177777, 177777, 010403, 060303
		.word	060303, 060303, 012707, 173652, 177777, 177777, 177777, 177777
		.word	177777, 177777, 177777, 177777, 060401, 060401, 012711, 000001
		.word	032711, 100200, 001775, 100730, 012737, 000300, 173024, 177777
	.endc
;_______________________________________________________________________
;
		.end
