А когда выходит что пишет?
Вид для печати
Ну запускается программа там в конце lda обычно прописанно стартовый адрес"G"
А в эмуляторе можно просто воспользоваться эмуляцией перфолент. Даже без переключения на консольный адрес. Прописываем в инишник выбранной конфигурации вот эту секцию (позаимствовано из патроновского default.ini) и вперед!Далее надо разобраться, как прицепить несколько файлов к эмулятору перфоленты - может где-то оно описано, а нет - так попробовать. Может быть, добавить строчку PC1 = <имя файла .LDA>, может еще как. В крайнем случае, вместо отдельного абс. загрузчика подложить файл, который содержит абс. загрузчик, потом несколько байтов нулей (имитация синхродорожки), чтобы общая длина этой части файла оказалась чётной, а затем нужный LDA-шник.Код:[PC.ini]
PC_BaseIO_Address=0177550
PC_BaseVectorsAddress=070
PC_ComponentDisabled=0
PP_BaseIO_Address=0177554
PP_BaseVectorsAddress=074
PP_ComponentDisabled=0
MinimumPanchedBytesToStore=12
InitialStateOf[AutoCut]=1
SaveChangesFor[AutoCut]=0
PC0 = Paper Tapes\LSI-11-AbsLoader.bin
А далее все просто: давим L, и оно полетело.
Попытался разобраться с эмулятором. Увы, прописать в конфиге несколько файлов нельзя, нужно или на ходу менять подключенный файл с образом перфоленты (.LDA-файл), стандартным средством манипуляции файлами хост-системы в эмуляторе, или сшить абс. загрузчик с LDA-файлом в один файл типа bin или lda и подключить в качестве образа ПЛ его.
Мне нужно не в эмулятор мне нужно отправлять в машину. Сейчас пользуюсь realterm.
А протокол HX, вроде-бы, открыт? Тогда никто не мешает сделать на его базе что-то мелкое своё, типа загрузки с HX0, вместо ОС, адаптированного абс. загрузчика с последующей загрузкой LDA-файла, смонтированного, допустим, как HX1.Тем более, исходник драйвера HX выложен...
Так оно не работает нужно добавлять в корень эмулятора ещё один модуль на подобии стандартного serial.dll но я не понимаю как к нему обращаться из эмулятора. Вообще я много чего не понимаю я только учусьпрограмировать.
К устройства HX можно цепануть что угодно - даже перфоленты. Но работа с ними всё равно выглядит (вроде) как работа с диском. Так что нужен аналог абсолютного загрузчика, но ориентированный на работу HX.
Пример кода работы с HX - каталог HX Sources в поставке VT52.
Просить меня написать код или помочь разобраться в коде не надо - у меня сейчас свободного времени только на свои "игрушки".
- - - Добавлено - - -
Теоретически, поскольку VT52 - этот тот же эмулятор ДВК, только настроенный специфическим образом - в его конфиг можно добавить и модули типа перфолент, только что то мне подсказывает, что работы с ним через терминальный (ака последовательный) канал как с HX не получится, так есть мультиплексор (в эмуляторе) для терминального канала под HX, но нет (ну или по крайне мере я не знаю про него) аналогичного мультиплексора под перфоленты.
Так что только через HX и свой (аналог абсолютного) загрузчик под это дело.
ИМХО, никто не мешает подсунуть вместо HX.DSK свой файл, который в нулевом блоке будет содержать копию стандартного HX-ного с поправкой адреса, куда надо читать блок 1 и счетчика слов для этого чтения, а в блоках 1-n расположить SAV-файл со своей программой. Если SAV-файл обычный (собранный с 1000), то и начальный адрес трогать не надо. Ну, и, при нужде, подправить адрес запуска. Все! И с ЛДА возиться не надо!
Только нужно прописать в конфиге "холодный" загрузчик TU58_Boot_(177560).odt - он не мудрит с установкой текущей даты для RT-11, а просто считывает в память нулевой блок образа и передаёт управление на адрес 000000.
Например, в файле HX_COM4.cfg секция загрузчика выглядит так:
А надо сделать так:Код:[ODT_Loader.ini]
;;ScriptFile = TU58_WarmBoot_(177560).odt
;;ScriptFile= "HX Boot.odt"
ScriptFile= "UKNC-style Loader.odt"
InitialStateOf[Load]=0
SaveChangesFor[Load]=0
Wait_at_Prompt_sec=1
PromptChar="@"
SendDelay_MS=0
Если изменить InitialStateOf[Load]=0 на InitialStateOf[Load]=1 - загрузка будет начинаться сразу после запуска эмулятора.Код:[ODT_Loader.ini]
ScriptFile= "TU58_Boot_(177560).odt"
InitialStateOf[Load]=0
SaveChangesFor[Load]=0
Wait_at_Prompt_sec=1
PromptChar="@"
SendDelay_MS=0
Patron, так вить хочется без odt loadera грузится чтобы просто набиралось 177560L и поехало все
Просто на 9600 скорости не особо хочется каждый раз запускать сначало рт-11 а следом софт
AFZ, а что делать если программа обитает в адресах 144000 и выше? Вот и остаётся только lda
Варианта всего 3:
1. Пересобрать программу с адреса 1000
2. Записать в блоки 1-ххх файла HXSYS.DSK содержимое блоков 100-yyy (0144-zzz) твоего SAV-файла, а начальный адрес загрузки указать 144000
3. Записать в блок 1 абс. загрузчик и маленькую программулю, которая перешлет его на место и отдаст ему управление.
Вариант 3, конечно, сложнее. придется еще изобретать процедуру передачи данных через порт терминала, но, наверное тоже можно. А вариант 2 делается в одно-два движения...
Все 3 варианта я пытался реализовать, но пока только голый абс лоадер + лда отправленные в порт через тера терм после 177560л, мозгов на большее не хватает по этому прошу патрона
Т.е. чтобы терминал анализировал, что вводится с клавиатуры, и если введено 177560L - начинал вместо ввода с клавиатуры отправлять в приёмный порт терминала байты с подключенной перфоленты. Это было бы круто, но вряд ли мы когда-то такое увидим.
Можно вместо odt loadera сделать собственный ODT файл, который будет вводить коды нужной программы напрямую в память, после чего останется только вручную ввести 144000G - и всё поехало.
Чтобы такое провернуть - нужно выполнить 4 шага:
1. Создать начальный ODT-файл с "заголовком" ввода кода:
2. Откомпилировать свою программу с такими опциями листинга, чтобы в листинг выводился только восьмеричный код программы.Код:100/102¬
2
144000/
3. Отредактировать полученный файл так, чтобы было по одному восьмеричному коду на строку. Добавить в конце каждой строки, кроме последней - символ '¬'.
4. Добавить получившийся текст в ODT-файл после заголовка:
Код:100/102¬
2
144000/12701¬
177560¬
12702¬
177564¬
10100¬
5003
Patron, слушай а можно отключить в odt loadere ожидание @ чтоб он просто отправлял фаил
Как отправлял файл?
Кто будет принимать файл со стороны ДВК, если всё, что там есть - пультовая программа с интерфейсом Micro-ODT.
ODT-лоадер работает с Micro-ODT, выдавая команды Micro-ODT в ответ на промпт ( по умолчанию - @).
Всё, что делает ODT-лоадер - можно сделать руками с клавиатуры. Как руками с клавиатуры "отправить файл" в пульте ДВК?
Patron, а есть ли возможность на основе программы открыть второй виртуальный порт к которому можно было бы подключать другую программу? (Про программы сплитеров знаю просто интересно вдруг такой функционал есть и уже встроен к примеру превращение физического сиреал в tcp ip при этом оставляя функции терминала)
Добрый день :)
Patron, а можно добавить в конфиг VT52 второй COM порт (с указанием скорости), что бы через него с HX сервером работать? Посмотрел HX_COM_(176560).cfg, сделал по аналогии, но как то не заработало и скорость не понятно как указать.
Пока обошёл проблему запуском второго экземпляра VT52 с нужными настройками.
Портов можно добавлять сколько угодно с полной индивидуальной настройкой каждого порта. В файле HX_COM_(176560).cfg - вполне рабочий пример (только без индивидуальной настройки портов).
Порты в конфиге открываются так:
Если оба порта работают на одинаковой скорости с одинаковыми характеристиками - то нужно только чтобы аргумент параметра PortName совпадал у каждого из портов с системным именем свободного порта в Windows.Код:[modules]
Ядро = Main_module.em
[objects]
ComPort = Ядро:Terminal_ComPort_Adapter
ComPort2 = Ядро:Terminal_ComPort_Adapter
[links]
ComPort <==> VT52
ComPort2 <==> HX
[ComPort.ini]
PortName = COM1
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
MinimalBreakTime_MKS=3000
[ComPort2.ini]
PortName = COM2
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
MinimalBreakTime_MKS=3000
Настройки портов по-умолчанию находятся в отдельном файле Terminal_ComPort_Adapter.ini - любой из параметров можно индивидуально переназначить в секции настроек порта в конфиге.
Для выбора скорости - изменяем параметр BaudRate.Код:BaudRate = CBR_9600
Parity = NOPARITY
StopBits = ONESTOPBIT
ByteSize = 8
fParity = FALSE
Например:
Код:[ComPort.ini]
PortName = COM1
BaudRate = CBR_9600
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
MinimalBreakTime_MKS=3000
[ComPort2.ini]
PortName = COM2
BaudRate = CBR_57600
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
MinimalBreakTime_MKS=3000
Patron, спасибо! С первой частью я сообразил - тут как раз помог HX_COM_(176560).cfg, а вот вторую часть - не догадался :)
А как насчёт скоростей - 230400, 460800, 921600?
Поддерживаются настройки скорости порта в Wndows, которые описаны в DCB structure (winbase.h)
Скорость в настройках можно указывать и просто числом, и строкой с префиксом CBR_.Код:Terminal_ComPort_Adapter::aValidBaudRates[] =
{ {110,"CBR_110"}, {300,"CBR_300"}, {600,"CBR_600"}, {1200,"CBR_1200"},
{2400,"CBR_2400"}, {4800,"CBR_4800"}, {9600,"CBR_9600"}, {14400,"CBR_14400"},
{19200,"CBR_19200"}, {38400,"CBR_38400"}, {57600,"CBR_57600"}, {115200,"CBR_115200"},
{128000,"CBR_128000"}, {256000,"CBR_256000"} };
Если просто числом - то будет просто попытка это число передать Windows как скорость порта?
- - - Добавлено - - -
Попробовал - выставляет 256000...
- - - Добавлено - - -
В смысле попробовал выставить 921600 - эмулятор VT52 показал 256000
У меня usb com порт - он показывает в настройках 230400, 460800, 921600
Может, в случае указания числа просто его и передавать в Windows? Всё равно определяются те же самые значения?
Если бы это делала какая-то подпрограмма, работающая только в этом месте - можно было бы её подправить. Но это делает объект, который используется для параметров вроде TRUE/FALSE, чтобы в конфиге можно было словом написать "TRUE" или числом задать 1. И если кто-то вместо 1 напишет 2 - объект сам исправит на 1, потому что у поименованных параметров есть только фиксированные значения.
А чтобы можно было на выбор использовать в параметре и поименованные значения, и "безымянные" (что само по себе идея весьма здравая) - нужен специальный объект, которого пока нет.
Ясно. Ну, пока получается, что максимум, что можно использовать - 115200. Так как варианты 128000 и 256000 - пока не встречал.. Хотя, как эксперимент, попробую (позже) поставить 128000 и 256000 и посмотреть, что получится... :)
Patron, а есть ли полноэкранный режим ?
Добрый вечер!
Вопрос не совсем в тему (да простит меня модератор) - в эмуляторе ДВК можно сделать отдельное окно для графического дисплея?
.
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_04.09.22_00-03
Изменения:
1. В модуль Main_module.em добавлен объект BinSender, позволяющий отправить двоичное содержимое любого файла размером до 128 Кб в байтовый канал (в терминальный порт эмулятора, в IP-порт или COM-порт). Если установить для состояния Load этого объекта начальное значение 1 - отправка файла будет начинаться сразу после выбора образа файла в меню кнопки подключения образов.
Это позволяет не использовать отдельную интерфейсную кнопку для отправки подключенного файла, хотя создать и использовать такую дополнительную кнопку при желании можно.Код:[BinSender.ini]
InitialStateOf[Load] = 1
2. В файлы конфигурации HX_COM.cfg и HX_IP.cfg добавлен объект BinSender, подключать к которому образы файлов можно той же кнопкой выбора образов, которая используется для объекта HX (нужно нажать слева на маленькую кнопку [>] и в появившемся меню выбрать для подключения образов устройство BIN).
3. Добавлен каталог Paper Tapes\ с образами перфолент для передачи с помощью BinSender.
Здравствуйте, а как добавить задержкау Бин сендеру просто не все версии эл.60 имели разрешение приема передачи и по этому приходится ставить задержку на примерное время обработки
Загрузка на реальных эл.60 двк-1,2 прошла успешно спасибо большое за обновления (размер софта прошедшего загрузку через binsender 1000-157600)
Единственный неочевидный момент, с которым я сам столкнулся, когда сейчас попробовал объединить эти два конфига, чтобы добавить кнопки сигналов COM-порта из конфига COM_4.cfg в конфиг HX_COM.cfg - нужно в настройках объекта VT52 в секции [VT52.ini] - включить отображение собственной полосы статуса окна вкладки терминала, на которую по умолчанию и прикрепляются кнопки, для чего найти в конфиге HX_COM.cfg в секции [VT52.ini] параметр InitialStateOf[StatusBar] и установить его в 1:Цитата:
Сообщение от mig_25
Код:[VT52.ini]
InitialStateOf[StatusBar] = 1
SaveChangesFor[StatusBar] = 0
Помимо этого, чтобы добавить кнопки сигналов COM-порта из конфига COM_4.cfg в конфиг HX_COM.cfg нужно (в конфиге HX_COM.cfg) сделать следующее:
1. Добавить создание кнопок в раздел [objects]:
Код:[objects]
In_CTS = Ядро:SB_StateFlashButton
In_DSR = Ядро:SB_StateFlashButton
In_BRK = Ядро:SB_StateFlashButton
In_DCD = Ядро:SB_StateFlashButton
In_RNG = Ядро:SB_StateFlashButton
Out_RTS = Ядро:SB_StateFlashButton
Out_DTR = Ядро:SB_StateFlashButton
Out_BRK = Ядро:SB_StateFlashButton
2. Подключить кнопки к COM-порту и окну вкладки терминала в разделе [links]
Код:[links]
VT52 + ( In_CTS + ComPort ) | ( In_DSR + ComPort ) | ( In_BRK + ComPort )
VT52 + ( In_DCD + ComPort ) | ( In_RNG + ComPort )
VT52 + ( Out_RTS + ComPort ) | ( Out_DTR + ComPort ) | ( Out_BRK + ComPort )
3. Добавить в конец файла конфига разделы с настройками для каждой кнопки:
Код:; === INI SECTIONS ===
[In_CTS.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=0
IsInverted=0
ButtonON_Text=CTS
ButtonOFF_Text=CTS
StateName=In_CTS
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=400
PushedButton_Text_X_Offset_Px=0
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=0
PoppedButton_Text_Y_Offset_Px=2
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=0
Is_PushedButton_Border_ButtonLike=0
DoCenterAlignButtonText=1
[In_DSR.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=0
IsInverted=0
ButtonON_Text=DSR
ButtonOFF_Text=DSR
StateName=In_DSR
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=400
PushedButton_Text_X_Offset_Px=0
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=0
PoppedButton_Text_Y_Offset_Px=2
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=0
Is_PushedButton_Border_ButtonLike=0
DoCenterAlignButtonText=1
[In_BRK.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=0
IsInverted=0
ButtonON_Text=BRK
ButtonOFF_Text=BRK
StateName=In_BRK
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=400
PushedButton_Text_X_Offset_Px=0
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=0
PoppedButton_Text_Y_Offset_Px=2
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=230,140,140
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=0
Is_PushedButton_Border_ButtonLike=0
DoCenterAlignButtonText=1
[In_DCD.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=0
IsInverted=0
ButtonON_Text=DCD
ButtonOFF_Text=DCD
StateName=In_DCD
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=400
PushedButton_Text_X_Offset_Px=0
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=0
PoppedButton_Text_Y_Offset_Px=2
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=0
Is_PushedButton_Border_ButtonLike=0
DoCenterAlignButtonText=1
[In_RNG.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=0
IsInverted=0
ButtonON_Text=RNG
ButtonOFF_Text=RNG
StateName=In_RNG
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=400
PushedButton_Text_X_Offset_Px=0
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=0
PoppedButton_Text_Y_Offset_Px=2
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=0
Is_PushedButton_Border_ButtonLike=0
DoCenterAlignButtonText=1
[Out_RTS.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=2
IsInverted=0
ButtonON_Text=RTS
ButtonOFF_Text=RTS
StateName=Out_RTS
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=600
PushedButton_Text_X_Offset_Px=4
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=3
PoppedButton_Text_Y_Offset_Px=1
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=1
Is_PushedButton_Border_ButtonLike=1
DoCenterAlignButtonText=0
[Out_DTR.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=2
IsInverted=0
ButtonON_Text=DTR
ButtonOFF_Text=DTR
StateName=Out_DTR
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=600
PushedButton_Text_X_Offset_Px=4
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=3
PoppedButton_Text_Y_Offset_Px=1
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=160,205,160
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=1
Is_PushedButton_Border_ButtonLike=1
DoCenterAlignButtonText=0
[Out_BRK.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=2
IsInverted=0
ButtonON_Text=BRK
ButtonOFF_Text=BRK
StateName=Out_BRK
LightsOFF_StateName=
ButtonWidth=34
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=600
PushedButton_Text_X_Offset_Px=4
PushedButton_Text_Y_Offset_Px=2
PoppedButton_Text_X_Offset_Px=3
PoppedButton_Text_Y_Offset_Px=1
ButtonON_TextColor=0,0,0
ButtonOFF_TextColor=0,0,0
ButtonON_Background=230,140,140
ButtonOFF_Background=1,0,0
Is_PoppedButton_Border_ButtonLike=1
Is_PushedButton_Border_ButtonLike=1
DoCenterAlignButtonText=0
Patron, огромное спасибо, будем пробовать!
https://pic.maxiol.com/thumbs2/17201...bmrksfilkn.png
.
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_14.10.24_16-45
Изменения:
1. Теперь объект Terminal_ComPort_Adapter следит за отключением/подключением соединения USB-serial, закрывая и снова открывая виртуальный COM-порт. Благодаря этому эмулятор терминала больше не надо перезапускать при перетыкании кабеля USB или при перезагрузке контроллера USB-serial.
2. Объекту Terminal_ComPort_Adapter добавлена настройка PortOpen_ANSI_STR, позволяющая адаптеру COM-порта отправлять в порт один или несколько байтов при каждом открытии (и переоткрытии) порта.
Например так:
Код:[ComPort.ini]
PortName="COM3"
BaudRate = CBR_256000
PortOpen_ANSI_STR="\005"
.
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_08.11.24_12-48
При подключении адаптера COM-порта к виртуальным COM-портам Windows обнаружилось, что если USB-устройство передаёт VID_0483, PID_5740 и поэтому обслуживается стандартным драйвером Windows USB-serial - объект адаптера COM-порта вместо загрузки процессора 0% создаёт загрузку 100%.
Изменения:
1. Теперь при подключении адаптера COM-порта к виртуальным COM-портам USB-serial, созданным стандартным драйвером Windows - загрузка процессора составляет 0%, а не 100%, как во всех предыдущих версиях эмулятора.
У терминала есть состояние Power, которое при обнулении очищает экран, поэтому в любой конфиг с терминалом можно добавить кнопку очистки экрана.
Для этого нужно следующее:
1. Создать объект кнопки (для кнопки без подсветки - SB_StatePushButton, а для кнопки с подсветкой - SB_StateFlashButton):
Код:[objects]
CLS_Button = Ядро:SB_StatePushButton
2. Задать параметры кнопки в секции конфига с именем объекта кнопки:
Главное здесь:Код:[CLS_Button.ini]
SB_Part_Data=nPosition[-1] | nPriority[7] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode=1
IsInverted=1
ButtonON_Text= CLS
ButtonOFF_Text=CLS
StateName=Power
ButtonWidth=40
ButtonHeight=18
ButtonFontSize=12
ButtonFontWeight=600
StateName=Power - кнопка управляет состоянием Power,
IsInverted=1 - при не нажатой кнопке состояние "включено".
ButtonPushMode=1 - кнопка без фиксации,
nPosition[-1] | nPriority[7] - позиция: крайняя справа, сдвигать из этой позиции кнопки с приоритетом ниже 7.
3. Подключить кнопку к состоянию Power объекта VT52 и посадить кнопку на интересующую полосу виджетов.
Код:[links]
Config + CLS_Button + VT52
Для моего конфига результат получился такой:
https://emulator.pdp-11.org.ru/pics/COM_12_1.png
Кнопка села на полосу [StatusBar] объекта Config. Если при размещении кнопки не указывается конкретная полоса виджетов - кнопка садится на полосу [StatusBar] заданного объекта.
Поэтому, если написать в конфиге так:
Кнопка сядет на полосу [StatusBar] объекта VT52.Код:[links]
VT52 + CLS_Button + VT52
[VT52.ini]
InitialStateOf[StatusBar] = 1
Скрытый текст
Другие варианты:
Полоса [ControlBar] объекта Config:
Код:[links]
Config[ControlBar] + CLS_Button + VT52
[Config.ini]
InitialStateOf[ControlBar] = 1
Скрытый текст
Полоса [ControlBar] объекта VT52:
Код:[links]
VT52[ControlBar] + CLS_Button + VT52
[VT52.ini]
InitialStateOf[ControlBar] = 1
Скрытый текст
Полоса [TerminalStatusBar] объекта VT52:
https://emulator.pdp-11.org.ru/pics/COM_12_5.pngКод:[links]
VT52[TerminalStatusBar] + CLS_Button + VT52
Можно отметить, что кнопке CLS не удалось вытеснить кнопку RUS/LAT из крайней правой позиции. Причина этого в том, что в файле Terminal.ini для кнопки RUS/LAT задан приоритет 8:
Код:TerminalStatusBar_Part[RUS/LAT] = nPosition[-1] | nPriority[8] | bHidden[0]
Архив со всеми вариантами использованных конфигов: COM_12_x.cfg.zip
Patron, Добрый день.
Интересно было бы добавление служебной строки как в 15ИЭ-00-013, правда туда придется приделать таймер. Или как в КСМ.
Спасибо.
Любопытный факт про табуляции (из DECscope User's Manual, стр. 20)
Если курсор находится в колонках 73-79 (из 1-80), он передвигается на 1 колонку вправо. 15ИЭ и КСМ так и делают. VT240, СМ7238 (в режиме VT52) -- нет.
Из колонки 80 курсор не двигается (нет automatic wrap), а в клонах -- есть:
15ИЭ: разряд 2 группы IV -- это "фиксация маркера в крайних положениях строки (только для системы команд N2) (0 - нет, 1 - есть)", но похоже, что это не работает (autowrap всегда включен).
КСМ -- настраивается разрядом 5 (по умолчанию 1 == выключен) и работает.