User Tag List

Страница 53 из 93 ПерваяПервая ... 495051525354555657 ... ПоследняяПоследняя
Показано с 521 по 530 из 1115

Тема: Эмулятор УКНЦ - UKNCBTL

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,472
    Поблагодарили
    524 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Patron, Vamos -- спасибо за критику и вклад в проект.
    Сейчас станции уже начинают пытаться переговариваться, но сбиваются.



    При этом на принимающей станции выпадает в СТОП.

    Загрузчик из сети в ПЗУ (спасибо Alex_K):
    Код:
    ; Загрузчик из сети
    164160$:MTPS	#340		; Запретить прерывания
    	MOVB	@#176561,R5	; Выделение в R5 номера сетевой станции
    	MOV	R5,R0
    	BIC	#177760,R5
    	ASR	R0
    	BIC	#177717,R0
    	BIS	R0,R5
    	MOVB	R5,164556$	; Сохранение номера сетевой станции
    	MOVB	164572$,R0	; R0 = 173(8)
    	XOR	R5,R0		; R0 = 173(8) XOR номер_сетевой_станции
    	MOVB	R0,164572$
    	MOV	#30,R0		; R0 = 30 (адрес вектора команды EMT)
    	MOV	#164500$-164160$+1000,(R0)+ ; Установка вектора прерывания EMT
    	CLR	(R0)+		; Установка ССП при вызове EMT
    	MOV	#164512$-164160$+1000,(R0)+ ; Установка вектора прерывания TRAP
    	CLR	(R0)+		; Установка ССП при вызове TRAP
    164244$:MOV	#10000,SP	; Установка указателя стека
    	MOV	#164526$-164160$+1000,@#100 ; Устан. вект. прер. сет. таймера
    	CLR	@#102
    	MTPS	#0		; Разрешить прерывания
    	CLR	164534$		; Очистка счетчика ожидания
    164272$:TRAP	0		; Чтение пришедшего байта
    	CMP	164534$,#5	; Счетчик ожидания больше пяти
    	BLO	164272$		; Нет
    164304$:EMT	0		; Посылка и чтение очередного байта
    	CMPB	#376,R0		; Пришедший байт равен 376(8)
    	BNE	164304$		; Нет
    	MOV	#164554$-164160$+1000,R1 ; R1 = адрес блока передачи
    164320$:MOVB	(R1)+,R0	; R0 = очередной байт из блока передачи
    	CMPB	#376,R0		; Он равен 376(8) ?
    	BEQ	164334$		; Да
    	EMT	0		; Посылка и чтение очередного байта
    	BR	164320$
    164334$:EMT	0		; Посылка и чтение очередного байта
    	CMPB	#377,R0		; Прочитанный байт равен 377(8) ?
    	BNE	164334$		; Нет
    	EMT	0		; Посылка и чтение очередного байта
    	CMPB	R5,R0		; Полученный байт равен номеру станции ?
    	BNE	164334$		; Нет
    	MOV	#377,R4		; R4 = 377(8) (контрольная сумма)
    	XOR	R0,R4		; R4 = 377(8) XOR номер_сетевой_станции
    	MOV	#50000,R1	; R1 = адрес расположения загрузчика
    	EMT	0		; Посылка и чтение очередного байта
    	MOV	R0,R3		; R3 = считанный байт
    	XOR	R0,R4		; Подсчет контрольной суммы
    164372$:EMT	0		; Посылка и чтение очередного байта
    	CMPB	#373,R0		; Считанный байт равен 373(8) ?
    	BLOS	164410$		; Выше или равен 373(8)
    	XOR	R0,R4		; Подсчет контрольной суммы
    	MOVB	R0,(R1)+	; Передача принятого байта в память
    	BR	164372$
    164410$:BNE	164426$		; Принятый байт равен не равен 373(8)
    	EMT	0		; Посылка и чтение очередного байта
    	COM	R0		; Инверсия принятого байта
    	XOR	R0,R4		; Подсчет контрольной суммы
    	MOVB	R0,(R1)+	; Передача принятого байта в память
    	COM	R0		; Инверсия для передачи
    	BR	164372$
    164426$:CMPB	#374,R0		; Принятый байт равен 374(8)
    	BNE	164244$		; Нет
    	EMT	0		; Посылка и передача байта
    	CMPB	R0,R4		; Он равен контрольной сумме ?
    	BNE	164244$		; Нет
    	EMT	0		; Посылка и передача байта
    	BISB	#10,R0		; R0 = R0 OR 10(8)
    	EMT	0		; Посылка и передача байта
    	CMPB	#377,R0		; Принятый байт равен 377(8)
    	BNE	164244$		; Нет
    	EMT	0		; Посылка и передача байта
    	MOV	#4,@#176560	; Включение кольцевой сети
    	MTPS	#340		; Запретить прерывания
    	JMP	@#50000		; Переход на исполнение загрузчика
    ; Подпрограмма передачи байта в локальную сеть (исполнение команды EMT)
    164500$:TSTB	@#176564	; Передатчик СА готов ?
    	BPL	164500$		; Нет
    	MOVB	R0,@#176566	; Передача байта в сеть
    ; Подпрограмма чтения байта, пришедшего по сети (исполнение команды TRAP)
    164512$:TSTB	@#176560	; Приемник СА готов ?
    	BPL	164512$		; Нет
    	MOVB	@#176562,R0	; Прием байта из сети
    	RTI
    ; Подпрограмма исполнения прерываний таймера
    164526$:CLR	@#176560	; Включение режима загрузки
    	INC	(PC)+		; Инкремент счетчика ожидания
    164534$:.WORD	0
    	CMP	164534$,#1000	; Счетчик ожидания превысил лимит времени ?
    	BHI	164550$		; Да
    	RTI
    164550$:JMP	164244$
    ; Блок передачи в сеть
    164554$:.BYTE	377,0,0,204,0,0,0,0,0,0,0,0,0,374,173,60,377,376,0,0

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Сейчас станции уже начинают пытаться переговариваться, но сбиваются.
    Это происходит из-за того, что в эмулируемом порту (почему-то) эмулируется overrun.
    Можно вставить в эмулятор слежение за битом 012 в регистре состояния приёмника и убедиться.

  4. #3

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так вот он какой 1801ВП-065, там оказывается есть бит 0 и бит 2 в регистре состояния приемника.
    Бит 2 это вывод ST, программное управление вкл./выкл. станции из кольцевой сети.
    Бит 0 ??? , разрыв линии

    Получается это те самые DTR/DSR которые и должны были быть 107, 108 на стыке С2

  5. #4

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Так вот он какой 1801ВП-065, там оказывается есть бит 0 и бит 2 в регистре состояния приемника.
    Бит 2 это вывод ST, программное управление вкл./выкл. станции из кольцевой сети.
    Бит 0 ??? , разрыв линии

    Получается это те самые DTR/DSR которые и должны были быть 107, 108 на стыке С2
    Уже писалось, что линии квитирования ни на какие биты не выводятся, квитирование делается полностью аппаратно самим 1801ВП1-065.
    Бит 0 - разрыв линии - это посылка BREAK.
    А вывод ST - это не бит 2, а сигнал "свой адрес". Благодаря этому можно на неиспользуемые биты 1801ВП1-065 вешать свою обвязку без необходимости дешифрации адреса. В этом случае достаточно запомнить только младшие биты (различать приемник, передатчик, регистры данных) и реагировать на сигналы DIN, DOUT. Сигнал RPLY выставит сама 1801ВП1-065. Вот в этой обвязке есть номер станции и управление электронным коммутатором сети.

  6. #5

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Это происходит из-за того, что в эмулируемом порту (почему-то) эмулируется overrun.
    А подскажите пожалуйста как в НХ сервере сделана работа с СОМ портом, что переполнения не происходит.

  7. #6

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    А подскажите пожалуйста как в НХ сервере сделана работа с СОМ портом, что переполнения не происходит.
    Так и там тоже были переполнения



    поэтому, проверить на счёт переполнений всегда есть смысл первым делом.

  8. #7

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Так и там тоже были переполнения
    НО переполнения возникали уже в загрузчике НХ сервера, а все остальные программы вызывают переполнение в загрузчике УКНЦ, почти сразу.
    Есть ли смысл рассматривать фукцию CreateFile() с параметром FILE_FLAG_OVERLAPPED или результат будет такой же?

  9. #8

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Есть ли смысл рассматривать фукцию CreateFile() с параметром FILE_FLAG_OVERLAPPED или результат будет такой же?
    Т.е. чтение виртуального порта в Windows возвращается с ошибкой?
    Но ведь в порту com0com включена бесконечная буферизация и переполнения быть не может..

  10. #9

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как я понял, запись в буфер происходит слишком быстро и код эмулятора не успевает.

  11. #10

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Как я понял, запись в буфер происходит слишком быстро и код эмулятора не успевает.
    Речь пока не о диагнозе, а об анамнезе - т.е. действительно ли какая-то из функций Windows ( чтение порта, запись порта ) возвращает ошибку или WaitCommEvent рапортует о EV_ERR ?

Страница 53 из 93 ПерваяПервая ... 495051525354555657 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Ответов: 247
    Последнее: 17.11.2024, 07:55
  3. Эмулятор УКНЦ на JavaScript
    от nzeemin в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 27.04.2021, 14:26
  4. УКНЦ и Gotec Flash Floppy эмулятор
    от Ynicky в разделе ДВК, УКНЦ
    Ответов: 10
    Последнее: 10.09.2019, 04:34
  5. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •