{ ---------------------------------------------------------------------	}
{ Функции для работы с вводом данных с цифровых линий							}
{ ---------------------------------------------------------------------	}

{ *********************************************************************	}
{ получение данных с входных цифровых линий										}
{ *********************************************************************	}
GetTtlData:
{ перейдем на второй банк регистров													}
	ENA SEC_REG;

{ зачитаем состояния всех входных цифровых линий								}
	AR = IO(TTL_IN);
{ положим в буфер																			}
	DM(I3, M3) = AR;

{ спокойно выходим из прерывания														}
	RTI;

{ *********************************************************************	}
{ запуск ввода данных с ТТЛ															}
{ *********************************************************************	}
TtlInputTypeStart:
{ проинициализируем необходимые указатели и переменные ввода данных		}
	CALL InitTtlInputPointers;

{ проверим тип синхронизации при вводе данных									}
	GetPm(AR, SynchroTypeAddr); NONE= PASS AR;
	IF NE JUMP Synchronization;	{ если есть синхр., то прыгаем на нее	}

{ установим флаг разрешения ввода данных											}
	PutValPm(AR, 0x1, InputEnableAddr);

{ сбросим все запросы на прерывания кроме SPORT0 Transmit (вывод)			}
	IFC = 0xBF; NOP;

{ запустим требуемый режим сбора данных											}
	CALL StartRead;

{ завершим выполнение текущей команды												}
	JUMP EndOfCommand;

{ *********************************************************************	}
{	Установка указателей	для ввода данных с ТТЛ									}
{ *********************************************************************	}
InitTtlInputPointers:
{ установим требуемые размеры FIFO буфера ввода									}
	CALL CheckInputFifoLimits;

{ половина длины FIFO буфера ввода													}
	GetPm(AR, CurInputFifoLengthAddr);
	SR = LSHIFT AR BY -1 (LO);
	PutPm(SR0, InputFifoLengthOver2Addr);

{ Set Input Fifo Parameters (указатель на 'голову' FIFO ввода)				}
	GetPm(AR, InputFifoBaseAddressAddr);
	I3 = AR;
	M3 = 0x1;
	GetPm(AR, CurInputFifoLengthAddr);
	L3 = AR;

{ указатель на 'хвост' FIFO буфера ввода											}
	I2 = I3;
{ в M2 должна быть половина длины FIFO буфера ввода							}
	GetPm(AR, InputFifoLengthOver2Addr);
	M2 = AR;
	L2 = L3;

{ Set pointer to ControlTable															}
	I5 = ^ControlTable;
	M5 = 0x1;
	GetPm(AR, ControlTableLenghtAddr); 	{ длина управляющей таблицы		}
	L5 = AR;

{ установим обработчик прерываний IRQE для ввода данных с ТТЛ				}
	I7 = ^GetTtlData;

{ спокойно выходим из функции															}
	RTS;
