Нет, MMU у ней нет, просто этот адрес используется для обращения к дополнительной памяти)
Не знаю, разрешены и все)
Вид для печати
Капаюсь в старых исходниках и шпаргалках.
Нашёл вот такой кусок кода
Оформлен он был как часть процедуры на ПАСКАЛЕ.Код:командная строка из программы: !!!
.RADIX 8
MOV #ENDC-STARTC, R1
MOV #STARTC, R1
MOV #ENDC-STARTC, R2
MOV #512, R3
PUK: MOVB (R1)+, (R3)+
SOB R2, PUK
BIS #4000, @#44
CLR R0
EMT 350
STARTC: .ASCIZ "DIR/FU/VOL/BL DK:"
ENDC: .EVEN
Зачем то R0 чиститься?
В целом не понятно мне (что не удивительно), а главное не работает!
Просто выдаёт CSI молчком и всё. Один раз выдал "ДВОЙНОЕ ЗАВИСАНИЕ".
Я вот смотрю в R1 вроде бы заносится строка команды, так?
Но потом сразу затирается ? Бредятина?
В целом ТЗ такое - возможно ли команду монитора из программы выполнить? Конечно сама программа будет прервана (да и фиг бы с ней!)
Просто ищу замену вызову .CHAIN - хотя в моём случае можно обойтись
и ей - мне нужно запустить с диска SAV файл !
:confused_std:
Тут как бы логика. Очистка R0 - документированный способ выполнить .HRESET по выходу (то есть запретить CLOSE, REENTER, START), что и требуется для запуска внешних команд.
---------- Post added at 18:03 ---------- Previous post was at 18:01 ----------
А в программе выше недоделка - в 510 должна записываться длина команды.
The .EXIT request enables a user program to pass command lines to KMON in the chain information area (locations 500-777) for execution after the job exits. This is performed under the following conditions:
- The word (not byte) location 510 must contain the total number of bytes of command lines to be passed to KMON.
- The command lines are stored, beginning at location 512. The lines must be .ASCIZ strings with no embedded carriage return or line feed. For example:
The user program must set SPXIT$ or CHNIF$ in the Job Status Word beforeКод:.TITLE EEXIT1.MAC
XIT.NU =: 510 ;(.XITDF) char count
XIT.AS =: 512 ;(.XITDF) .Asciz command(s)
.=XIT.NU
.WORD B-A
.=XIT.AS
A: .ASCIZ /COPY A.MAC B.MAC/
.ASCIZ /DELETE A.MAC/
B:
doing an .EXIT, which must be issued with R0 = 0.
Действительно, пишут, что ТАК НАДО! )))
первоисточник (откуда у меня эта шпора и кто её писал история умалчивает)
вариант патрона - рабочий (!)Код:командная строка из программы: !!!
.RADIX 8
MOV #ENDC-STARTC, R1 - вот та самая попытка положить длину???
MOV #STARTC, R1 - а вот эта строка тогда зачем ???
MOV #ENDC-STARTC, R2
MOV #512, R3 - остальное это надо уже систему знать
PUK: MOVB (R1)+, (R3)+
SOB R2, PUK
BIS #4000, @#44
CLR R0
EMT 350
STARTC: .ASCIZ "DIR/FU/VOL/BL DK:"
ENDC: .EVEN
Код:Рабочий вариант выглядит так:
Код:
;
.MCall .Exit
START:
Mov #CMD, R3
Mov #512, R1
1$:
MovB (R3)+,(R1)+
BNE 1$
Sub #512, R1
Mov R1, @#510
BiS #4000, @#44
Clr R0
.Exit
CMD: .ASCIZ \$Dir/Fu/Bl/Vol\
.End START
Легко заметить, что в рабочем варианте в ячейку 510 заносится длина строки.
В нерабочем варианте нужно строку
заменить наКод:MOV #ENDC-STARTC, R1
Код:MOV #ENDC-STARTC, @#510
---------- Post added at 16:00 ---------- Previous post was at 15:33 ----------
Продвинутый вариант - выполняет введённую с клавиатуры команду и снова запускает сам себя ( файл CMD2.MAC ):
Код:;
.MCall .Exit, .TTYIN, .Print
START:
.Print #Prompt
Mov #512, R1
1$:
.TTYIN
CmpB R0, #15
BEq 2$
CmpB R0, #40
BLt 1$
CmpB R0, #177
BEq 1$
MovB R0, (R1)+
Br 1$
2$:
Cmp R1, #512
BNE 3$
.Print #Help
Br START
3$:
ClrB (R1)+
Mov #CMD, R3
MovB (R3)+,(R1)+
BNE .-2.
Sub #512, R1
Mov R1, @#510
.Print #CrLf
BiS #4000, @#44
Clr R0
.Exit
;===========================================================
Prompt: .ASCII <015><012><016>\Введите команду >\<017><200>
Help: .ASCII <015><012><016>\Исполнитель команд \<017>\v1.0\
CrLf: .Byte 0
CMD: .ASCIZ \$RU CMD2\
.End START
;
Вариант с .GTLIN ( файл CMD3.MAC )
Код:;
.MCall .Exit, .GtLin, .Print
START:
.Print #CrLf
Mov #512, R1
Mov #CmdBuf, R3
.GtLin R3, #Prompt
TstB (R3)
BNE 1$
.Print #Help
Br START
1$:
MovB (R3)+,(R1)+
BNE .-2.
Mov #CMD, R3
MovB (R3)+,(R1)+
BNE .-2.
Sub #512, R1
Mov R1, @#510
.Print #CrLf
BiS #4000, @#44
Clr R0
.Exit
;===========================================================
Prompt: .ASCII <015><016>\Введите команду >\<017><200>
Help: .ASCII <015><012><016>\Исполнитель команд \<017>\v2.0\
CrLf: .Byte 0
CMD: .ASCIZ \$RU CMD3\
CmdBuf:
.End START
;
Вот мне что изучить бы давно пора ))) Мечта - но есть хороший пример - раскопал школьный диск, там длиннющий исполняемый файл по сути программа целая - обучалка, можно просто свои (нужные) параметры подставлять. Буду осваивать !
Супер! Спасибо!
Я всегда ворчал на тему, что нет тупых учеников, есть не очень правильные учебники !!! Вот зачем мне знать кучу всяких вещей, мне нужно быстро на практике
применить ту или иную функцию, офигенно было бы такой справочник по МАКРО-11
иметь (штука в том что стандартное описание SYSMAC.SML - соглашусь сверх нужная книга, но некоторые примеры написаны явно для программистов уже понимающих всё, а для любителей оставляющая ещё больше вопросов чем было!)
Я помню справочник офи... очень хороший по скриптам для Винды ( там всё было как для меня http://savepic.ru/3703500.jpg )))
типа - заводим пользователя с правами администратора > бац скрипт готовый
функция РАНДОМ - бац скрипт готовый )))
командная строка - бац скрипт !!! )))
готовая игра ГАД - бац скрипт )))
Это я так - спасибо за приведённые примеры и готовые программы, я очень много полезного узнал ! Нашёл на одной из дискет такое вот творение:
Правильно ли я понимаю, что вызовом .CHAIN нет шансов передать управление COM файлы или проскочит ? (я конечно попробую, но спросить то можно да?)Цитата:
компьютер греется 3 раза в своей жизни:
1-й - когда его забыли выключить на ночь;
2-й - когда на нем играют в DOOM-2;
3-й и последний - когда он слышит слово 'системный программист'.
Мне было проще, я RT-11 осваивал после RSX, а там в принципе IND без вариантов :)
Ну если не считать BATCH в M+.
RTшный вариант урезан в силу функционала системы, но основное примерно одинаково.
Есть очень хорошее описание (настоящий PDF, не скан) :)
До сих пор считаю, что лучше М. Сингера для изучения MACRO-11 c нуля не придумали. Книга есть на сайте у Арсения. Да и в описании макробиблиотеки как DECовском так и русских есть много примеров.
Я собственно изучал функционал по РАФОСовской еще доке, а RT-11 по сути стал читать уже в 2000ых годах :)
.CHAIN передает управление программе. COM файл программой не является. Управление в ком файл нужно передавать как описано выше, используя в качестве команды
илиКод:$@file
в зависимости от типа COM файла.Код:IND file
form, спасибо за новодочку про книгу, кажется я её как минимум листал когда-то ))) Я вот к сожалению не помню автора - может это она и окажется - у меня в школе была книга (случайно взял в читальном зале),
МАКРОАСССЕМБЛЕР ДЛЯ PDP-11, с такой бело-голубенькой или бело-синей обложкой, если это она, то да - это великий учебник, пытался найти бумажный вариант недавно, в Зеленограде их уже нет, вся литература времён УК-НЦ - ДВК по сопровождению и языкам списана в макулатуру.
Вот зато откопал (и чуть дописал) шедевр (не мой, но автор сам "если захочет" свой исходник узнает, по кодовой фразе !). Свою версию UCL я уже тут выкладывал и в том числе на дискетах ))) А это почти как ELITE-UCL выдает фразы из списка.
Код :
http://savepic.ru/3694113.pngКод:.Title UCL
.ENABL LC, MCL
Num: .WORD 0
St: MOV Num, R1
MOV TX(R1), R0
EMT 351
ADD #2, Num
CMP Num, #12.
BLT 1$
CLR NUM
1$: NOP
.LOOKU #AR, #1, #DBLK
.WRITW #AR, #1, #NUM, #256., #1
.CLOSE #1
CLR R0
EMT 350
TX: .WORD S1,S2,S3,S4,S5,S6
DBLK: .RAD50 "SY UCL SAV"
AR: .BLKW 5
S1: .ASCIZ <16>\oPERATOR INWALID!\<17>
S2: .ASCIZ <16>\pREKRATITE LOMATX KLAWIATURU\<17>
S3: .ASCIZ <16>\bORMAN BYL LYS, TOLST I ZLOPAMQTEN.\<17>
S4: .ASCIZ <16>\uHODIM OGORODAMI...\<17>
S5: .ASCIZ <16>\nU-nU!\<17>
S6: .ASCIZ <16>\sEKRETAR[I BYLI WTOROJ STRASTX@ bORMANA.\<17>
.EVEN
.END St
Ещё раз всех с наступающими праздниками!
:redface:
http://i.piccy_.info/i7/09d724e266a9...213085/ERR.png
Удачный скрин, в верхней части экрана видно тот самый участок программы
на одну из строчек получается "нечётность" ? Подозревая так случилось из за нечетного количества констант по метке OK - в набиваемом исходнике ребята забили на это, вот как бы красиво поправить?
Или код ошибки B что то другое означает?Код:OK: .ASCIZ <1><2><3><4><5>
OUTPOS: .WORD WYDEL,-1,POSLAT,-1,ZAPUSK,-1
WYDEL: .BYTE ,1,32,0,-1
POSLAT: .BYTE ,20,32,
STAPP: .WORD ,PROG,SIZE
ZAPUSK: .BYTE ,30,32,
STAPP1: 0
В любом случае набивать буду дальше и разбираться буду позже, но быстрая подсказка просто сэкономила бы время очевидно ! )
:redface:
Код:OK: .ASCIZ <1><2><3><4><5>
OUTPOS: .WORD WYDEL,-1,POSLAT,-1,ZAPUSK,-1
WYDEL: .BYTE ,1,32,0,-1
POSLAT: .BYTE ,20,32,
.EVEN
STAPP: .WORD ,PROG,SIZE
ZAPUSK: .BYTE ,30,32,
STAPP1: 0
Я понял, почему у УКНЦ байтовая запись в память работает только в цикле RMW (чтение-модификация-запись)!
Наверное это потому, что у ВМ2 вообще нет ни байтового чтения из памяти, ни байтовой записи (доки специально в этом смысле не смотрел, но чисто теоретически если подумать).
Поэтому при чтения байта все равно читается слово, но берется именно нужный байт.
А вот при записи байта, сперва читается слово, потом модифицируется нужный байт, и слово записывается заново. Тогда все логически сходится.
Отсюда мораль: по возможности не пользоваться байтовой записью в память, если не хочется лишних тормозов.
На шине Q-BUS (наша МПИ) байтового чтения не существует, а вот байтовая запись есть. При байтовом чтении процессор всегда читает слово по заданному адресу, при этом адрес всегда выставляется в таком виде, как задан в команде, т.е. младший бит не очищается. Затем в зависимости от младшего бита процессор из считанного слова берет нужный байт. При байтовой записи процессор 1801ВМ2 в неиспользуемом байте выставляет ноль, электрически единицы, с учетом инверсной шины. А вот почему при байтовой записи 1801ВМ2 читает слово по этому адресу, это действительно большой вопрос, и в официальной документации это не отражено.
Странно. Авторы 1801ВМ2 (если не ошибаюсь) утверждали, что расширили применение цикла DATO на команду CLR и DATOB на CLRB.
У 1801ВМ1 MOV и MOVB выполняют DATO и DATOB, а CLR и CLRB - DATIO.
Получается, что MOV у ВМ2 выполняется быстрее чем CLR, а MOVB - за то же время, что и CLRB, и INCB.
И это в обычной памяти ЦП ?
Может ещё разок проверить..
Все уже давно замерено, и было тут опубликовано:
Код:Сравнение времени выполнения байтовых и словных команд на CPU и PPU:
Мнемоника-1 CPU PPU Циклы Мнемоника-2 CPU PPU Циклы
------------------------------------------------------------------------------
MOV Rn,(Rn) 33.13 36 W MOVB Rn,(Rn) 40.62 52 RMW
CMP Rn,(Rn) 27.90 40 R CMPB Rn,(Rn) 27.90 40 R
BIT Rn,(Rn) 27.90 40 R BITB Rn,(Rn) 27.90 40 R
BIC Rn,(Rn) 40.62 56 RMW BICB Rn,(Rn) 40.62 52 RMW
BIS Rn,(Rn) 40.62 56 RMW BISB Rn,(Rn) 40.62 52 RMW
XOR Rn,(Rn) 40.62 56 RMW
ADD Rn,(Rn) 40.62 56 RMW
SUB Rn,(Rn) 40.62 56 RMW
CLR (Rn) 33.13 36 W CLRB (Rn) 40.62 52 RMW
COM (Rn) 40.62 56 RMW COMB (Rn) 40.62 52 RMW
INC (Rn) 40.62 56 RMW INCB (Rn) 40.62 52 RMW
DEC (Rn) 40.62 56 RMW DECB (Rn) 40.62 52 RMW
NEG (Rn) 40.62 56 RMW NEGB (Rn) 40.62 52 RMW
TST (Rn) 27.90 40 R TSTB (Rn) 27.90 40 R
ROL (Rn) 40.62 56 RMW ROLB (Rn) 40.62 52 RMW
ROR (Rn) 40.62 56 RMW RORB (Rn) 40.62 52 RMW
ASR (Rn) 40.62 56 RMW ASRB (Rn) 40.62 52 RMW
ASL (Rn) 40.62 56 RMW ASLB (Rn) 40.62 52 RMW
ADC (Rn) 40.62 56 RMW ADCB (Rn) 40.62 52 RMW
MFPS (Rn) 40.62 52 RMW
SWAB (Rn) 40.62 56 RMW
SXT (Rn) 33.13 36 W
Получилось только на CLR.
А почему MOV быстрее CLR, вроде используется один цикл DATO.
А при чем тут память? Дело в процессоре. Да и чего перепроверять? Titus доказал своими тестами по измерению числа тактов команд. Я проверял на регистрах внешних устройств, которые реагируют на чтение. Если появилась готовность в регистре клавиатуры 177560, то по команде CLR @#177562 или MOV R0,@#177562 ничего не происходит, а по командам CLRB @#177562 или MOVB R0,@#177562 готовность сбрасывается. И это с учетом того, что БМК 1801ВП1-120 сигнал WTBT не обрабатывает (он туда не заводится). Аналогичная ситуация и с 1801ВП1-065 и с регистрами на шине ПП. Так что диагноз ясен.
Проще всего компилить ассемблерные файлы в "эмуляторе ДВК" ( компоновка, линковка и запуск на выполнение осуществляется в RT-11 одной командой EX ).
Эмулятор ДВК не блокирует DSK-образ, поэтому можно одновременно редактировать исходник в любом редакоре Windows и тут же компилировать его в эмуляторе. Кроме того - эмулятор ДВК можно настроить на любую скорость процессора - тогда компиляция под эмулятором происходит почти мгновенно.
Поредактировать я могу и у себя на PDP-11 (причем редактор будет на порядок удобнее любого виндового) и также запустить командой EX. Просто так было бы быстрее, а код ни на байт не длиннее :)
---------- Post added at 18:24 ---------- Previous post was at 18:23 ----------
Ну или на слово длиннее если именно в начале помещать.