такая мысль проскакивала.....:) но не задержалась.....
Вид для печати
Что то типа
Код:START:: MOV #DATA,R5
MOV #100500, R4 ; это типа стописоттыщ раз :)
10$: CALL PRDAT
DEC R4 ; или вместо этой и следующей инструкций SOB R4, 10$
BNE 10$
.EXIT
попробованы все варианты-работают
спасибо
добрый вечер
есть очень маленькая программка и ведёт она себя непонятно
ввод 3 символов, запись их в буфер, печать буфера, возврат на ожидание ввода.
так выглядит запущенной, 000-111-222-444-введённые символы, остальное печать их, первая и четвёртая печать правильная.Код HTML:.MCALL .TTYIN,.PRINT,.EXIT
TEST: .TTYIN BUFF1
.TTYIN BUFF1+1
.TTYIN BUFF1+2
.PRINT #BUFF1
BR TEST
.EXIT
BUFF1: .BLKB 3
.END TEST
Скрытый текст
Код HTML:.SET EDIT K52
.SET SL ON
.DAY
Время Дата
18:13:44 01-Окт-2017, Воскресенье
.R TST3
000
000
111
1
11
222
22
2
444
444
[свернуть]
окно дизассемблера, 1042 1043 1044-байты буфера. видно что в 1042 пишется 15 вместо 60 первый символ второго ввода, а вот почему непонятно.
Скрытый текст
Код:
Код HTML:
001000 [000004] EMT 340
; 000032:000000 -> PSW
; PSW :000004 -> 000776:001000
; PC :001002 -> 000774:136530
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 060 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 060 -> 001043
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; R0 : 060 -> 001044
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 015 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; [B]R0 : 012 -> 001043[/B]
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; [B]R0 : 061 -> 001044[/B]
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 061 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 061 -> 001043
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; R0 : 015 -> 001044
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 012 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 062 -> 001043
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; R0 : 062 -> 001044
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 062 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 015 -> 001043
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; R0 : 012 -> 001044
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 064 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 064 -> 001043
001020 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001022 -> 000774:001012
; 000030:143446 -> PC
001022 [000000] BCS 001020
001024 [000000] MOVB R0, 001044 ; R0 : 064 -> 001044
001030 [000000] MOV #546., R0 ; 001032:001042 -> R0
001034 [000000] EMT 351
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001036 -> 000774:001022
; 000030:143446 -> PC
001036 [000000] BR 001000
001000 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001002 -> 000774:001036
; 000030:143446 -> PC
001002 [000000] BCS 001000
001004 [000000] MOVB R0, 001042 ; R0 : 015 -> 001042
001010 [000000] EMT 340
; 000032:000000 -> PSW
; PSW :000000 -> 000776:000000
; PC :001012 -> 000774:001002
; 000030:143446 -> PC
001012 [000000] BCS 001010
001014 [000000] MOVB R0, 001043 ; R0 : 012 -> 001043
001020 [000000] EMT 340
[свернуть]
По умолчанию посимвольный ввод отключен, а эхо символов включено. Чтобы получить то, что хочется нужно установить биты TTSPC$ (10000) и TCBIT$ (100) в слове $JSW (44), например так:- - - Добавлено - - -Код:.ASECT
.=44
.WORD 10100
.PSECT
TEST: ...
Непонятно зачем .EXIT если до него дело не дойдет никогда, а так же буфер не годится для .PRINT - не зарезервировано место для завершающего нуля, и в теории строка может оказаться очень длинной (хотя в данном конкретном случае выравнивание автоматически зарезервирует этот байт) :)
спасибо
эхо появилось и ошибки вывода тоже.
Лучшая книга (на мой взгляд - может потому что первая была) по ассемблеру PDP-11, там в том числе вроде нюансы .TTYIN/.TTYOUT разбираются.
- - - Добавлено - - -
Ну так в программе получается и эхо символов работает и потом вывод символов делается еще раз :)
спасибо. видел ваше упоминание о книге раньше:)
скачал, листаю, книга написана в повествовательной форме поэтому человеком понимается лучше(начинающим) чем сухие справочники
- - - Добавлено - - -
в общем понятно, а вот в частности.....
эхо печатается чтоб видно было что печатаем, логично? а буфер куда я сложил напечатанное портится-непонятно:)(может буфер кривой??? по другому нужно делать наверно) печать я использовал для проверки буфера на предмет правильности заноса туда символов, а так по задумке буфер с символами будет использоваться для перехода к подпрограммам
в том то и дело что нужно CR нажимать по условию задачки
если добавить два TTYIN для CR LF и буфер+ 2 байта то вроде как и работает:)
по идее мне нужна подпрограмма ввода команд и переходов по ним к другим подпрограммам
Тогда надо учесть, что CR такой же символ как и любой другой и его надо считать, а в RT-11 кроме того автоматически генерится LF который тоже надо выбрать. Так что программу нужно переделать чтобы символы вводились не в фиксированные места буфера, а вычитывались по одному, анализировались и уже потом записывались если нужно. Ну или (если задача не состоит в том, чтобы разобраться с .TTYIN) можно просто воспользоваться макровызовом ввода строки .GTLIN :)
Идея. Приблизительно. Могу быть ошибки, поскольку по памяти, проверить под рукой не на чем :)
- - - Добавлено - - -Код: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 ;КОНЕЦ
добрый вечер.
заинтересовала подпрограмма форматирования данных $EDMSG http://zx-pk.ru/threads/10718-soft-d...l=1#post583948
где нибудь в природе существует пример как её использовать?
Я использовал в разных программах, в разделе софта выкладывал. Можно в RSXовском руководстве по библиотеке еще посмотреть.
- - - Добавлено - - -
Или на CTAKAH зайти, навскидку куча примеров находится:Код:>GRE EDMSG LB:[12,10]*.MAC
File DU:[12,10]AS3OV.MAC;1:
ARGBLK: .BLKW 10. ; DATA BLOCK FOR $EDMSG
CALL $EDMSG ; FORMAT THE TEXT
CALL $EDMSG ; FORMAT THE TEXT INTO OUTPUT STRING
CALL $EDMSG ; MOVE IT TO OUTPUT
CALL $EDMSG ; FORMAT TEXT INTO OUTPUT
MOV HDRTAB(R0),R1 ; POINT TO INPUT STRING FOR $EDMSG
CALL $EDMSG ; FORMAT THE HEADER
File DU:[12,10]DEVOV.MAC;2:
CALL $EDMSG ; edit part I of the message ;DC419
560$: CALL $EDMSG ; and do $EDMSG ;DC419
MCR>ABO GRE
>
23:40:42 Task "GRET51" terminated
Aborted via directive or CLI
>
зашёл:)
и заблудился:)
Там HELP есть. Многие DCL команды похожи на RT-11, в частности, всякие DIR, TYPE. Можно печатать постранично с ожиданием (TY/PA) нечто вроде unix'ового more, можно более навороченно смотреть постранично (VTL) - нечто вроде unixового less, ну и GRE - нечто вроде UNIXового GREP. Вполне достаточно чтобы примеры смотреть :)
http://pdp-11.org.ru/files.pl -----здесь нашлось:)
плагин не видит образы
подключился через http://zx-pk.ru/threads/20092-emulya...tipa-vt52.html
на rsx.pdp-11.org.ru IP постоянный?
Ну, логично, наверно :)
Да.
Если подключиться эмулятором ДВК вместо эмулятора терминала (вторым терминальным портом), то можно выходить в RSX через VTCOM и копировать файлы с помощью команды TRA:Код:>TRA /HE
Abstract TRANSFER - native file transfer utility, copies files between a
RSX-11M/M-PLUS system and a RT-11 system linked by a hard-wired
connection or by a modem and a telephone line.
Command TRANSFER input-filespec[/qualifier...]
Syntax [output-filespec[/qualifier...]]
Semantics Following file types default to "ascii":
.ANS .BAK .BAS .BAT .BLI .B16 .B2S .B32 .C .CBL
.CMD .COM .COR .CTL .DAT .DBL .DDF .DIF .DIR .DMP
.DOC .FOR .FTN .H .LIS .LOG .LST .MAC .MAP .MAR
.MEM .ODL .PAS .REQ .RNO .R16 .R32 .S .SLP .SRC
.TEC .TES .TXT
Following file types default to "binary":
.BIN .LDA .OBJ .STB
All other file types default to "image".
Qualifiers TRANSFER utility qualifiers are:
/ASCII[:n] Copies files in "ascii" mode, regardless of file type. If n is
specified, fixed length records of length n are generated.
/BINARY[:n] Copies files in "binary" mode, regardless of file type. If n is
specified, fixed length records of length n are generated.
/FORTRAN[:n] Copies files in "ascii" mode, regardless of file type and sets
Fortran carriage control. Used when outputting to Files-11
volumes.
/HELP Provides limited information in use of TRANSFER utility
/IMAGE[:n] Copies all files in "image" mode. If n is specified, fixed
length records of length n are generated. The default value
for n is 512.
/LOG Creates a log of names and sizes of all files copied.
/PROGRESS[:n] Causes TRANSFER to show file transfer progress every n records
or blocks while copying a file. The default value for n is 10.
/PROMPT Causes TRANSFER to explicitly prompt for command parameters.
/REMOTE Indicates direction of file transfer (identifies REMOTE file).
/STATISTICS Causes TRANSFER to show file transfer statistics.
/TERMINAL Indicates direction of file transfer (identifies REMOTE file).
/VERSION Causes TRANSFER to display utility version.
>
Выложил здесь образ диска и конфиги для подключения к CTAKAHу через VTCOM. В логе пример скачивания файла.
Выход в командный режим VTCOM - CTRL/P.Скорость эмуляции (CPU MIPS Limit) должна стоять 2000. Если будет меньше - будут теряться символы, посылаемые RSX (есть вариант драйвера XL, поправленный Patron'ом, который не теряет), если больше - VTCOM не сумеет определить наличие таймера (патч есть для VTCOM, но лень вытаскивать).Код:HD V2.0 CSR=177720, 22-bit controller
RT-11XM (S) V05.07
.TTSET /SL
.R DATE
?DATE-I-Time source: RT-11
?DATE-I-Date & time: 6-OCT-2017 18:26:59
.VTCOM
>HEL GUEST/
RSX-11M-PLUS V4.6 BL87 [1,54] System CTAKAH
6-OCT-17 18:27 Logged on Terminal TT53: as GST21
Good Evening
,;,
O(o o)O
+---ooO-----------Ooo------------------------------------------------+
| # # # W E L C O M E T O |
| # ## ## |
| #### #### #### # # ### # ### #### # # ### # # |
| # # # # # # ### # # # # # # # # # # # # |
| # # # # # # # # # # # # # # # # |
| #### #### #### ### ### # ### # ##### # # ### |
| # # # |
| # # CTAKAH:: RSX-11M-PLUS V4.6 #### |
+--------------------------------------------------------------------+
Last interactive login on Friday, October 6, 2017 18:23:25 (TT53:)
Last batch login on Friday, August 4, 2017 08:12:49
$ @LB:[1,2]SYSLOGIN.CMD
Last batch login on Friday, August 4, 2017 08:12:49
See http://pdp-11.org.ru/~form/ctakah.html for more information.
$ TRA LB:[12,10]SAVSIZ.MAC/AS SAVSIZ.MAC/TER
$ LO
$ @LB:[1,2]SYSLOGOUT.CMD
$ @ <EOF>
$
Connect time: 0 hrs 1 mins 26 secs
CPU time used: 0 hrs 0 mins 4 secs
Task total: 24
Have a Good Evening
06-OCT-17 18:28 TT53: logged off CTAKAH
$
TT::VTCOM> EX
.DIR SAVSIZ
06-Oct-2017
SAVSIZ.MAC 50 06-Oct-2017
1 Files, 50 Blocks
4370 Free blocks
.