PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
в том то и дело что нужно CR нажимать по условию задачки
если добавить два TTYIN для CR LF и буфер+ 2 байта то вроде как и работает
по идее мне нужна подпрограмма ввода команд и переходов по ним к другим подпрограммам
Последний раз редактировалось gfd71; 01.10.2017 в 21:04.
Тогда надо учесть, что CR такой же символ как и любой другой и его надо считать, а в RT-11 кроме того автоматически генерится LF который тоже надо выбрать. Так что программу нужно переделать чтобы символы вводились не в фиксированные места буфера, а вычитывались по одному, анализировались и уже потом записывались если нужно. Ну или (если задача не состоит в том, чтобы разобраться с .TTYIN) можно просто воспользоваться макровызовом ввода строки .GTLIN![]()
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Идея. Приблизительно. Могу быть ошибки, поскольку по памяти, проверить под рукой не на чем
- - - Добавлено - - -Код:mov #buf, r5 loop: .ttyin movb r0, (r5)+ cmpb r0, #15 beq eloop cmp r5, #buf3 blo loop eloop: clrb (r5) .print #buf mov #buf, r5 br loop buf: .blkb 3 buf3: .blkb 3
Да, и если действительно LF генерится (не помню) - надо добавить его получение
Вот такой расширенный вариант программы с демонстрацией разного функционала. Посимвольный ввод, эхо печатаем сами, пищим при ошибках, стираем по DEL, работаем в TSX, отрабатываем CTRL/C.
Код:.TITLE TTYIN -- ВВОД ЧЕРЕЗ .TTYIN .MCALL .EXIT,.GVAL,.HERR,.PRINT ;СИСТЕМНЫЕ МАКРОСЫ .MCALL .SCCA,.SERR,.TTYIN,.TTYOUT ;... ;+ ;СЛОВО СОСТОЯНИЯ ЗАДАНИЯ И ЕГО БИТЫ ;- $JSW =: 44 ;СЛОВО СОСТОЯНИЯ ЗАДАНИЯ TTSPC$ =: 10000 ;БИТ СПЕЦИАЛЬНОГО РЕЖИМА TCBIT$ =: 100 ;БИТ ЗАПРЕТА ОЖИДАНИЯ ;+ ;ФИКСИРОВАННЫЕ СМЕЩЕНИЯ RMON ;- $TSXLC =: -4 ;СМЕЩЕНИЕ ДО СПЕЦСИМВОЛА (TSX) ;+ ;СИМВОЛЫ ;- ETX =: 3 ;CTRL/C BEL =: 7 ;BELL BS =: 10 ;BACKSPACE CR =: 15 ;CR DEL =: 177 ;DEL .ASECT .=$JSW .WORD TTSPC$!TCBIT$ ;ИНИЦИАЛИЗАЦИЯ JSW .PSECT START:: .SERR ;ЗАПРЕТ ОСТАНОВА ПО ОШИБКАМ ;В ДАННОМ СЛУЧАЕ ВОЗМОЖНА ОШИБКА ;НЕВЕРНЫЙ EMT ;+ ;В TSX-PLUS И РАФОС/TS ПО УМОЛЧАНИЮ ЗАПРЕЩЕН ПОСИМВОЛЬНЫЙ ВВОД, ;И ПРОГРАММА ОСТАНОВИТСЯ ДО НАЖАТИЯ КЛАВИШИ АКТИВАЦИИ (НАПРИМЕР CR). ;СЛЕДУЮЩИЙ КОД ВКЛЮЧИТ ПОСИМВОЛЬНЫЙ РЕЖИМ И ЗАПРЕТИТ ОСТАНОВ. ; ;ВЫЗЫВАЕМЫЙ НИЖЕ EMT ЗАПРАШИВАЕТ НОМЕР ЛИНИИ В TSX-PLUS И РАФОС/TS. ;В RT-11 БУДЕТ ОШИБКА. ТАКИМ СПОСОБОМ СИСТЕМЫ МОЖНО РАЗЛИЧАТЬ. ;- MOV #AREA,R0 ;R0->БУФЕР С КОДОМ ФУНКЦИИ EMT 375 ;ВЫЗОВ ФУНКЦИИ BCS 10$ ;ЕСЛИ C УСТАНОВЛЕН - ЭТО НЕ TSX .GVAL #AREA,#$TSXLC ;ПОЛУЧАЕМ КОД СПЕЦСИМВОЛА MOVB R0,TSSET ;ОБНОВЛЯЕМ ФУНКЦИОНАЛЬНУЮ СТРОКУ MOVB R0,TSSET+2 ;... .PRINT #TSSET ;ПЕЧАТАЕМ 10$: .HERR ;РАЗРЕШАЕМ ОСТАНОВ ПО ОШИБКАМ .SCCA #AREA,#FLAG ;РАЗРЕШАЕМ ПЕРЕХВАТ CTRL/C 15$: MOV #BUF,R1 ;R1->АДРЕС БУФЕРА MOV #BUFLEN,R2 ;R2->РАЗМЕР БУФЕРА 20$: .TTYIN ;ВВОД СИМВОЛА CMPB #CR,R0 ;CR? BEQ 60$ ;ДА CMPB #ETX,R0 ;CTRL/C? BEQ 70$ ;ДА CMPB #DEL,R0 ;DEL? BEQ 80$ ;ДА CMPB #<' >,R0 ;ПЕЧАТНЫЙ СИМВОЛ? BLOS 40$ ;ДА ;+ ;ПРИ НЕПРАВИЛЬНОМ ВВОДЕ ПИЩИМ. ;- 30$: .TTYOUT #BEL ;ЗВЯК BR 20$ ;И ОБРАТНО 40$: TST R2 ;БУФЕР ЗАПОЛНЕН? BEQ 30$ ;ДА MOVB R0,(R1)+ ;СОХРАНЯЕМ СИМВОЛ DEC R2 ;R2->ОСТАТОК МЕСТА В БУФЕРЕ 50$: .TTYOUT ;ЭХО BR 20$ ;И ОБРАТНО 60$: .TTYIN ;ВЫБИРАЕМ LF CLRB @R1 ;ЗАВЕРШАЕМ СТРОКУ .PRINT #CRLF ;ПЕРЕВОДИМ СТРОКУ НА ЭКРАНЕ .PRINT #STR ;ПЕЧАТАЕМ РЕЗУЛЬТАТ BR 15$ ;РЕСТАРТ 70$: .PRINT #CRLF ;ПЕРЕВОДИМ СТРОКУ НА ЭКРАНЕ .EXIT ;ВЫХОДИМ 80$: CMP #BUFLEN,R2 ;ЕСТЬ ЧТО УДАЛЯТЬ? BEQ 30$ ;НЕТ INC R2 ;R2->ОСТАТОК В БУФЕРЕ DEC R1 ;R1->УКАЗАТЕЛЬ НА БУФЕР .PRINT #BACK ;СТИРАЕМ СИМВОЛ НА ЭКРАНЕ BR 20$ ;И ОБРАТНО AREA: .BYTE 0,110 ;БУФЕР ФУНКЦИЙ RT-11 FLAG: .BLKW ;ФЛАГ CTRL/C (ПЕРЕСЕКАЕТСЯ С AREA!) STR: .ASCII /CTPOKA: / ;ЗАГОЛОВОК СТРОКИ ДЛЯ ПЕЧАТИ BUF: .BLKB 3 ;БУФЕР BUFLEN =: .-BUF ;РАЗМЕР БУФЕРА CRLF: .BYTE 0 ;ЗАВЕРШАЮЩИЙ БАЙТ И CRLF BACK: .ASCII <BS>/ /<BS><200> ;СТРОКА СТИРАНИЯ СИМВОЛА TSSET: .ASCII <DEL>/S/<DEL>/U/<200> ;СТРОКА НАСТРОЕК TSX .END START ;КОНЕЦ
Последний раз редактировалось form; 02.10.2017 в 09:33.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
добрый вечер.
заинтересовала подпрограмма форматирования данных $EDMSG http://zx-pk.ru/threads/10718-soft-d...l=1#post583948
где нибудь в природе существует пример как её использовать?
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)