Если есть PC с COM-портом ( или есть адаптер COM-USB ) - достаточно спаять шнурок, после чего можно грузиться по этому шнурку из пункта меню "Загрузка через стык С2".
Подробнее ЗДЕСЬ.
Последние версии ПО - ЗДЕСЬ.
Вид для печати
У меня тут снова затык (такой уж я программист:wink:) с опросом
клавиатуры под RT-11.
Скрытый текст
form, давненько подсказал мне более грамотную конструкцию для Паскаля, чем ту, что я прежде использовал - и всё равно не спасает от проскакивания как самого нажатия, так и значения нажатой клавиши.
Проблема такая. Программа должна выводить в непрерывном цикле
последовательно три экрана с различной информацией. Т.о. алгоритм такой примерно (это в исходнике у меня!) :
И вот подстава!Код:/* в шапке, в разделе VAR описаны глобальные переменные */
PROGRAM KLAVAPODSTAVA;
VAR
INKEY ORIGIN 177560B: INTEGER; /* RA-КЛАВ. */
KEY ORIGIN 177562B: INTEGER; /* RD-КЛАВ. */
FUNCTION KEYPRESS: BOOLEAN; /* ПИШУ ТАКУЮ ФУН-Ю */
BEGIN
KEYPRESS:=FALSE;
INKEY:=0;
IF(INKEY AND 128)<>0 THEN KEYPRESS:=TRUE;
END;
BEGIN
REPEAT
WRITELN(' ТЕКСТОВЫЙ БЛОК №1 - ПРИВЕТСТВИЕ');
WHILE NOT KEYPRESS DO;
WRITELN(' ТЕКСТОВЫЙ БЛОК №2');
WHILE NOT KEYPRESS DO;
WRITELN(' ТЕКСТОВЫЙ БЛОК №3');
WHILE NOT KEYPRESS DO;
UNTIL KEY=3;
END.
Первое привествие вроде бы норм выводится и ожидается нажатие
клавиши. Но после блока 2 сразу выводится блок 3 и только тогда
срабатывает ожидание нажатия. Более того сохраняется значение нажатой кнопки (что не допустимо), поскольку если в третьем блоке
какая-то функция на какую-то клавишу назначена и именно она была нажата в предыдущем опросе клавиатуры - то она автоматом выполняется. Как же это всё победить и что я не так делаю?
Иногда почему то срабатывает даже <ВК> который жмётся при запуске .SAV файла ???
:confused_std:
Буду рад любому ответу и комментариям.
У меня просто рушится вся система общения с игроком в предполагаемой ASCII игрушке, то есть "остро-необходимо" что бы
каждый раз опрос клавиатуры был гарантировано уникальным, ждал нажатия кнопки и дальше (в зависимости от значения регистра
данных - то есть "клавиши") будет что-то там ветвиться\вызываться.
Спасибо.
[свернуть]
:confused_std:
Надо доверить опрос клавиатуры операционной системе, а в программе для проверки готовности символа использовать ассемблерную вставку с вызовом .TTINR
А чтобы этот вызов не подвешивал программу в старших релизах RT-11 - добавить ассемблерную вставку, которая будет устанавливать нужные биты JSW.
---------- Post added at 22:13 ---------- Previous post was at 21:58 ----------
Код:VAR SIMB :INTEGER;
PROCEDURE READSIM;
BEGIN
(*$C
EMT ^O340
BCS SKIP
MOV %0,SIMB(%5)
SKIP:
*)
END;
Код:PROCEDURE TTSPEC;
BEGIN
(*$C
BIS #^O10000,@#^O44
*)
END;
Вариант OMSI-PASCAL, отличие от предыдущего в размере .OBJ библиотеки
- она больше на 6 блоков и файл получаемый после линковки на 3 блока
вырастает как минимум.
Вложение 45693
Я давно это всё подозревал, а сегодня всё таки раскидал по нужным местам и просто запустил и вся теория разом подтвердилась, FAST-PASCAL и в том числе модуль GRAPH были впервые реализованы для ДВК-2М.
Скрытый текст
Затем и на БК-11М
Скрытый текст
О том что турбо среда и модуль граф начиная с самой первой версии имели УК-НЦ воплощение было известно и так. Ура! Всем кто знали и молчали троекратное! ) Учитывая, что модуль GRAPH двухцветный - сильно упрощает адаптацию под конкретное видео устройство каждой из отечественных PDP-шек.
:redface:
осталось ещё найти мифический GAS.SAV...:wink:
На закусочку к предыдущему сообщению, я до конца так и не доглядел,
вернулся к компу оно вылетело в систему, но первый кадр сделал сразу )
http://s6.hostingkartinok.com/upload...bf7256589d.png
Да! Теперь и на спектруме? http://zx.oberon2.ru/forum/viewtopic.php?f=10&t=85
Это издание просто очень интересно - хотя и посвящено не только
и не столько Паскалю и Ассемблеру, но основы программирования
там изложенные очень даже полезны ( я вот как триллер читаю сейчас)
для понимания местного ассемблера, у меня такого учебника не было,
я даже не знал, что такая чудесная книжка есть (узнал недавно).
http://s7.hostingkartinok.com/upload...708c17c02a.jpg
http://publ.lib.ru/ARCHIVES/E/ERSHOV...shov_A.P..html
По ссылке обе части издания. Книга написана простым и понятным
языком и интересна помимо прочего очень информативными иллюстрациями.
:confused_std:
предложеный Patronom вариант
не работает и даже не пытается, процедура просто проскакивает как пустая при выполнении программы (что я не так делаю?)!!!Код:VAR SIMB :INTEGER;
PROCEDURE READSIM;
BEGIN
(*$C
EMT ^O340
BCS SKIP
MOV %0,SIMB(%5)
SKIP:
*)
END;
Да и почему вместо (SP) %5, a вместо R0 %0 ???
.TTINR так же просто игнорируется при выполнении программыЦитата:
Сообщение от Patron
И вот этот вариант сбоит - то есть пропускает ожидание через раз,
может реагирует и на отжатие???
Я в шоке!!!Код:var
INKEY ORIGIN 177560B: INTEGER;
KEY ORIGIN 177562B: INTEGER;
<...>
repeat
INKEY:=0;
until (INKEY AND 128)<>0;
Ребята подскажите как
1 - мне получить 100% гарантию ожидания нажатия клавиатуры в любом месте программы и в регистре данных клавиатуры или какой-нибудь переменной сохранить нажатую кнопку в виде кода или символа
2 - мне считать нажатие с клавиатуры без ожидания нажатия внутри
цикла например и опять таки иметь этот код или в регистре или в переменной (но тут обычно хватает тупо обнулить РА и потом уже
в цикле проверять что нажато было последний раз)
Буфер - про буфер и как его почистить я вообще не буду спрашивать, мне бы просто выяснить 1 и 2 пункты )
В чём моя ошибка? Что я не так делаю? Должен же быть человеческий и рабочий способ !!! Печаль! А главное последний
вариант работает, но хитро!!! Манипулировать с регистрами клавиатуры получается, но непредсказуемо как-то. Печаль два раза.
:frown:
Легко заметить, что содержимое глобальной переменной SIMB изменяется только тогда, когда была нажата клавиша. Иначе процедура просто "проскакивает", не изменяя вообще ничего.
Использовать надо так:
Код:VAR SIM,SIMB :INTEGER;
PROCEDURE READSIM;
BEGIN
(*$C
EMT ^O340
BCS EXIT
MOV %0,SIMB(%5)
EXIT:
*)
END;
PROCEDURE MOVEORM1;
LABEL 9;
VAR PW :^REC;
BEGIN
IF SIMB<>SIM THEN BEGIN
9: CASE SIMB OF
70B: BEGIN DX:=0; DY:=-1 ;DD:=3 END;
65B: BEGIN DX:=0; DY:=1 ;DD:=3 END;
64B: BEGIN DX:=-1; DY:=0 ;DD:=1 END;
66B: BEGIN DX:=1; DY:=0 ;DD:=1 END;
67B: BEGIN SIM:=SIM+1; IF SIM=67B THEN SIM:=70B;
IF SIM>70B THEN SIM:=64B;
SIMB:=SIM; GOTO 9
END;
105B: STOP;
ELSE BEGIN SIM:=SIM-1;IF SIM=67B THEN SIM:=66B;
IF SIM<64B THEN SIM:=70B;
SIMB:=SIM; GOTO 9
END
END; (* CASE *)
SIM:=SIMB;
END;
NEW(PW);
PW^.X:=P^.X+DX;
PW^.Y:=P^.Y+DY;
IF DIRECTION>0 THEN BEGIN
PW^.PRED:=P;
PW^.SLED:=NIL;
P^.SLED:=PW
END
ELSE BEGIN
PW^.SLED:=P;
PW^.PRED:=NIL;
P^.PRED:=PW
END;
P:=PW;
END;
(*************************************************************)
(* M A I N P R O G R A M *)
(*************************************************************)
BEGIN
REPEAT
READSIM;
MOVEORM1;
UNTIL ( LEN>1000 );
END.
Но мне надо что бы она ждала нажатия !!! А она не ждёт !!! )
Я завтра поизучаю новую шпору, спасибо! )
---------- Post added at 23:36 ---------- Previous post was at 23:35 ----------
Спорно! ))) В моём случае особенно ! )))
http://s16.rimg.info/7509a8dd88b6e1a...452ca7b933.gif
---------- Post added at 23:37 ---------- Previous post was at 23:36 ----------
но в целом это единственный затык - весёлая (по своему) программа получается (типа анонс)
---------- Post added at 23:40 ---------- Previous post was at 23:37 ----------
что то там какой то сложный огород, координаты какие-то )))
Ага!
И ещё вопрос можно всё таки пояснить спец. для меня
почему вы используете процентно-цифровые обозначения,
вместо символьных указателей R0 и (SP), с чем это связано?
И в таком случае зачем использовать метку, можно ли прописать
проверку нажатия так : BCS .-4 ?
:confused_std:
Спасибо за шпору и пояснения! )
Тогда перед экспериментами очередными последний пока вопросКод:(*$C
BIS #^O10000,@#^O44
*)
Вот этот BIS нужно каждый раз перед опросом клавы вешать или единожды
в основном теле программы достаточно?
Документация на английском:
RT-11 V5.6: System Subroutine Library Manual
RT-11 V5.6: System Macro Library Manual
RT-11 V5.6: System Internals Manual
PDP-11 MACRO-11 Language Reference Manual (MACRO-11 Version 5)
PDP-11 FORTRAN IV Language Reference Manual (FORTRAN IV Version 2.6)
PDP-11 FORTRAN 77 Language Reference Manual (FORTRAN 77 Version 5.0)
на русском:
РАФОС-ПЛЮС: Системные таблицы и библиотеки. Руководство программиста.
ФОДОС-2: Программирование периферийных устройств.
ФОДОС-2: Ассемблер. Руководство программиста.
ФОДОС-2: Системная макробиблиотека. Руководство программиста.
ФОДОС-2:Монитор системы. Руководство программиста.
Откопалось вот тут http://zx.pk.ru/showpost.php?p=377816&postcount=35
и там же (в той же теме) сейчас читаю советы\вопросы\ответы по "правильному" опросу клавиатуры. И тут странное поведение одного и
того же алгоритма в случае http://zx.pk.ru/showthread.php?p=639...MAN#post639059 - см. исходник SHKEYS.PAS которую я написал как раз с целью опрос клавиатуры проверить - там всегда работает ожидание и никогда не проскакивает !!! Но почему то в другой программе такой алгоритм не срабатывает??? :mad_std:
в общем читаю старую тему, но если будут доп.комментарии\советы буду очень рад любому ответу.
Спасибо.
---------- Post added at 19:34 ---------- Previous post was at 17:54 ----------
2 form, а можно вот этот код как-то (не для фортрана), а более
универсально переписать (что бы получить честный обработчик клавиатуры = процедуру\функцию в программе на паскале?)
Для меня сложность в том, что проверенный способ в одном случаеКод:.TITLE KEYB
.MCALL .GTJB,.INTEN,.MTPS,.SYNCH
.GLOBL ATTACH,DETACH
; ПРИМЕР РАБОТЫ С ПРЕРЫВАНИЯМИ ИЗ ФОРТРАНА. ИСПОЛЬЗОВАНИЕ:
;
; EXTERNAL SUBR
; CALL ATTACH(SUBR)
; - УСТАНАВЛИВАЕТ ОБРАБОТЧИК ПРЕРЫВАНИЙ ОТ КЛАВИАТУРЫ
; ПРИ НАЖАТИИ КЛАВИШИ ВЫЗЫВАЕТСЯ CALL SUBR(KEY)
;
; CALL DETACH
; - ВОССТАНАВЛИВАЕТ ВЕКТОР ПРЕРЫВАНИЯ ОТ КЛАВИАТУРЫ
;
; КОНТРОЛЬ ПАРАМЕТРОВ НЕ ВЫПОЛНЯЕТСЯ, ТАКЖЕ НЕ ПРОВЕРЯЕТСЯ БЫЛ ЛИ
; РАНЕЕ ВЫЗВАН ATTACH/DETACH.
SAVKBV: .BLKW 2 ;МЕСТО ПОД ISR ВЕКТОРА КЛАВИАТУРЫ
FORSUB: .BLKW ;МЕСТО ПОД АДРЕС ФОРТРАНОВСКОЙ ПП
FORARG: .WORD 1,KBCODE ;ВЕКТОР АРГУМЕНТОВ ДЛЯ ПП
KBCODE: .BLKW ;АРГУМЕНТ ПП
SYNBLK: .WORD 0,0,0,0 ;БЛОК SYNCH
.WORD FORARG ;...ЗАПИШЕТСЯ В R0 ПОСЛЕ .SYNCH
.WORD -1,0 ;...ДОЛЖНЫ БЫТЬ -1,0
AREA: .BLKW 2 ;ПРОСТРАНСТВО ДЛЯ ВЫЗОВА .GTJB
JOBBLK: .BLKW 8. ;БЛОК ДЛЯ ПОЛУЧЕНИЯ ИНФОРМАЦИИ О
;ЗАДАЧЕ
ATTACH: .GTJB #AREA,#JOBBLK ;ПОЛУЧАЕМ ИНФОРМАЦИЮ О ЗАДАНИИ
MOV JOBBLK,SYNBLK+2 ;ПРОПИСЫВАЕМ НОМЕР ЗАДАНИЯ В БЛОК SYNCH
.MTPS #340 ;ЗАПРЕЩАЕМ ПРЕРЫВАНИЯ
MOV @#60,SAVKBV ;СОХРАНЯЕМ ВЕКТОР КЛАВИАТУРЫ
MOV @#62,SAVKBV+2 ;...
MOV #KBDISR,@#60 ;УСТАНАВЛИВАЕМ ОБРАБОТЧИК ПРЕРЫВАНИЙ
MOV #340,@#62 ;...КЛАВИАТУРЫ
MOV 2(R5),FORSUB ;СОХРАНЯЕМ АДРЕС ФОРТРАНОВСКОЙ ПП
.MTPS #0 ;РАЗРЕШАЕМ ПРЕРЫВАНИЯ
RETURN ;ВОЗВРАЩАЕМСЯ В ФОРТРАН
DETACH: .MTPS #340 ;ЗАПРЕЩАЕМ ПРЕРЫВАНИЯ
MOV SAVKBV,@#60 ;ВОССТАНАВЛИВАЕМ ВЕКТОР КЛАВИАТУРЫ
MOV SAVKBV+2,@#62 ;...
.MTPS #0 ;РАЗРЕШАЕМ ПРЕРЫВАНИЯ
RETURN ;ВОЗВРАЩАЕМСЯ В ФОРТРАН
; СЮДА МЫ ПОПАДАЕМ ПРИ НАЖАТИИ КЛАВИШИ НА КЛАВИАТУРЕ
; ПРИОРИТЕТ ПРОЦЕССОРА УСТАНОВЛЕН НА 7 (ВСЕ ПРЕРЫВАНИЯ ЗАПРЕЩЕНЫ).
; В ЭТОТ МОМЕНТ МЫ НЕ МОЖЕМ ВЫЗЫВАТЬ КАКИЕ-ЛИБО СИСТЕМНЫЕ ВЫЗОВЫ
; ТАК КАК ПРЕРЫВАНИЕ ВОЗНИКАЕТ АСИНХРОННО ПРИ ЗАРАНЕЕ НЕИЗВЕСТНОМ
; ИСХОДНОМ СОСТОЯНИИ.
;
; СНАЧАЛА МАКРОВЫЗОВОМ .INTEN МЫ ПОНИЖАЕМ ПРИОРИТЕТ ПРОЦЕССОРА ДО 5
; И СОХРАНЯЕМ РЕГИСТРЫ R4/R5 (В НАШЕМ СЛУЧАЕ ЭТО НЕ ИСПОЛЬЗУЕТСЯ).
;
; ЗАТЕМ МАКРОВЫЗОВОМ .SYNCH МЫ ПОНИЖАЕМ ПРИОРИТЕТ ПРОЦЕССОРА ДО 0
; И ПЕРЕКЛЮЧАЕМСЯ В КОНТЕКСТ ЗАДАЧИ. ЕСЛИ ПРЕРЫВАНИЕ ВОЗНИКЛО РАНЬШЕ
; ЧЕМ ОТРАБОТАНО СЛЕДУЮЩЕЕ (SYNCH БЛОК ИСПОЛЬЗУЕТСЯ), ПРОСТО ВОЗВРАЩАЕМ
; УПРАВЛЕНИЕ (ОБРАЩАЕМ ВНИМАНИЕ, ЧТО ПОСЛЕ INTEN/SYNCH ВОЗВРАТ ИЗ
; ПРЕРЫВАНИЯ ВЫПОЛНЯЕТСЯ КОМАНДОЙ RETURN (RTS PC), А НЕ RTI).
; ПОСЛЕ УСПЕШНОГО ВЫПОЛНЕНИЯ .SYNCH МЫ НАХОДИМСЯ В КОНТЕКСТЕ НАШЕЙ
; ПРОГРАММЫ И МОЖЕМ ВЫПОЛНЯТЬ СИСТЕМНЫЕ ВЫЗОВЫ.
;
; МЕЖДУ .INTEN И .SYNCH В СТЕК НИЧЕГО НЕ ПИСАТЬ!
;
; ЗАМЕЧАНИЕ: ТАК КАК МЫ ИСПОЛЬЗУЕМ KBCODE ЗДЕСЬ В ТЕОРИИ ПОЗВОЛЯЕТ
; ВОЗНИКНУТЬ СИТУАЦИИ КОГДА СТАРОЕ ЗНАЧЕНИЕ ЕЩЕ НЕ ОБРАБОТАНО, А НОВОЕ
; БУДЕТ ЗАПИСАНО ПОВЕРХ СТАРОГО.
;
KBDISR: MOVB @#177562,KBCODE ;;;СОХРАНЯЕМ КОД КЛАВИШИ
.INTEN 5 ;;;ПЕРЕХОДИМ В КОНТЕКСТ СИСТЕМЫ
.SYNCH #SYNBLK ;;ПЕРЕХОДИМ В КОНТЕКСТ ЗАДАЧИ
BR 10$ ;;ЕСЛИ SYNCH БЛОК ЗАНЯТ - ВОЗВРАТ
MOV R0,R5 ;ВЫЗЫВАЕМ ФОРТРАНОВСКУЮ ПП
CALL @FORSUB ;...С АРГУМЕНТОМ
10$: RETURN ;ВОЗВРАЩАЕМСЯ ИЗ ПРЕРЫВАНИЯ
.END
работает, и при совершенно идентичном коде (речь не о программе,
а о опросе клавиатуры) в другом сбоит !!! и как я не ковыряюсь - нет 100% решения вопроса - прямо беда же !!! (мне уже не смешно даже). В данном же исходнике - некоторые ингредиенты просто не знакомы мне - например
Нашёл из старых шпор "драйвер клавиатуры" для УК-НЦКод:SAVKBV: .BLKW 2 ;МЕСТО ПОД ISR ВЕКТОРА КЛАВИАТУРЫ
Может быть из него что то выдернуть ? Мне трудно ассемблер
читать\понимать картину в целом (беда огорчения)
к блоку KEYS есть отдельные пометки для системных клавишь в распечатке с которой набивалось (типа вот это "СТОП", а вот это "УСТ"). Последний листинг прилепил к сообщению.Код:PROGRAM TEST;
PROCEDURE PER;
BEGIN
/*$C .RADIX 8
MOV #OUTPOS, R2
; BIS #10000, @#44
MOV #4, R1
1$: TSTB @#176674
BPL .-4
MOVB (R2)+, @#176676
SOB R1, 1$
MOV #OK, R0
EMT 351
MOV WYDEL+4, STAPP
MOV WYDEL+4, STAPP1
MOV #8., R1
2$: TSTB @#176674
BPL .-4
MOVB (R2)+, @#176676
SOB R1, 2$
JMP KPER
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
PROG: MOV @#300, OLD300
MOV PC, R0
ADD #PRERK-., R0
MOV R0, @#300 ; - ВКЛЮЧЕНИЕ ДРАЙВЕРА КЛАВИАТУРЫ
MOV @#320, OLD320
MOV PC, R0
ADD #PRERT-., R0
MOV R0, @#320 ; - МУЗЫКА ВКЛ.ОТКЛ.
MOV PC, R0
ADD #TIM-., R0
MOV R0, @#100 ; - МИГАНИЕ КУРСОРА
RETURN
TIM: RTI
PRERT: MFPS -(SP)
MTPS #340
MOV R0,-(SP)
MOV R1,-(SP)
MOV R2,-(SP)
BIC #17600, @#177716
CLR R0
MOVB @#177060, R0
CMPB R0, #'9
BGT 5$
CMPB R0, #'0
BLT CANCEL
SUB #'/, R0
MOV #1, R1
1$: ASL R1
SOB R0, 1$
MOV R1, LENGTH
BR CANCEL
5$: MOV PC, R1
ADD #TAB-., R1
2$: CMPB (R1), R0
BEQ 3$
TSTB (R1)+
BEQ CANCEL
BR 2$
3$: MOV LENGTH, R2
4$: BIS #200, @#177716
MOVB 1(R1), R0
SOB R0,.
BIC #200, @#177716
SOB R0,.
SOB R0, 4$
CANCEL: MOV (SP)+, R2
MOV (SP)+, R1
MOV (SP)+, R0
MTPS (SP)+
RTI
LENGTH: 0
PRERK: MOV R0, OLDR0
MOVB @#177702, R0
BIT #200, R0
BNE 2$
BIC #200, R0
ADD PC, R0
ADD #KEYS-., R0
TSTB (R0)
BEQ 1$
MOVB (R0), @#177070
CMPB (R0), #'+
BNE 11$
INC PRESS4
11$: CMPB (R0), #',
BNE 1$
INC PRESS6
1$: MOV OLDR0, R0
RTI
2$: BIC #260, R0
CMPB R0, #11
BNE 3$
TSTB PRESS4
BEQ 1$
MOVB #173, @#177070
CLR PRESS4
BR 1$
3$: CMPB R0, #5
BNE 1$
TSTB PRESS6
BEQ 1$
MOVB #175, @#177070
CLR PRESS6
BR 1$
TAB: .BYTE 'F,177
.BYTE 'Y,161
.BYTE 'W,145
.BYTE 101,137
.BYTE 'P, 125
.BYTE 'R, 113
.BYTE 'O, 103
.BYTE 114, 77
.BYTE 'D, 70
.BYTE 'V, 62
.BYTE '\,57
.BYTE '.,52
.BYTE ' ,47
TABDIE: .BYTE 'C,170
.BYTE 'U,153
.BYTE 113,132
.BYTE 'E,120
.BYTE 'N,107
.BYTE 'G,74
.BYTE '[,65
.BYTE '],55
.BYTE 'Z,50
.BYTE ' ,47
.WORD 0
KEYS: .BYTE 2,2,2,2,2, ,,33,';,0,0,0,'$,0,0,'','(,0,0,0,0,0
.BYTE '-,11,112,'!,'",'#,'E,'%,'&,'[,'],0,0,0,0,0,0
.BYTE 0,'F,'C,'U,113,'P,'N,'G,114,'D,0,0,0,0,0,0,0
.BYTE 'Q,'Y,'W,101,111,'R,'O,'B,'@,0,0,0,0,0,0,0,0
.BYTE '^,'S,'M,' ,'T,'X,'D,'<,0,0,0,0,0,'7,'0,'1,'4,'+
.BYTE 177,'C,'B,'>,'\,'V,0,0,0,0,0,'8,'.,'2,'5,12,15,15,101
.BYTE '_,'H,'Z,0,0,0,0,0,'9,12,'3,'6,14,12,'/,':,'=,'0,'),33
.EVEN
PRESS4: 0
PRESS6: 0
OLDR0: 0
OLD300: 0
OLD320: 0
SIZE= 3000
KPER: .RADIX 10
*/
END;
BEGIN
PER;
END.
Раз тут о программировании идет речь, тогда вам ссылку на имитатор.
Скрытый текст
Может кому пригодится.
P.S Всю тему не читал.
больше подходит для этой темы http://zx.pk.ru/showthread.php?t=18079
или для этой http://zx.pk.ru/showthread.php?t=18069 ! Там кстати то же
много интересного ) Просто они уже уплыли чуть ли не в архив. )
В приложении: KEYS.PAS - тест ввода кодов нажатых клавиш с ожиданием и без.
...
Patron, я расковырял свои исходники с турбо-паскаля от "Зеленоградской гостинницы-2" которая под DOS и вот увидел там то же что и в вашем последнем примере - ожидание привязать не к факту нажатия, а к значению - через дополнительную переменную ! ) Видимо я там то же намучился с проскоками ) Должно сработать ТАМ ) KEYS.PAS понятное дело работает, но и SHKEYS.PAS работает, буду пробовать в той проге где нужен опрос с ожиданием. Спасибо!
В любом случае у меня уже целая копилка алгоритмов по опросу клавиатуры).
Может быть кто то предложит "супер" вариант работать с кнопками в обход RT-11 вообще! ) Насколько это сложно и главное хотя бы словесное (понятное) описание необходимых действий, исходник Alex_K работает, но малоинформативен в моём случае (это тот который на sysimage - скан-коды выдаёт).
Как обработать нажатие клавиш SHIFT (НР - они правильно зовуться), а повесить функцию ПАУЗА на красную кнопку? в теме по программированию form предлагал (когда-то) всякие хитрости выкладывать - я только ещё раз присоединяюсь к призыву - в этой или другой теме не важно )
Пойду я выкручиваться и экспериментировать - без опроса клавиш никак. (казалось бы очевидная вещь клавиатура, как делать общение
с пользователем без удобного инструмента для работы с клавой?)
:redface:
При нажатии на клавишу происходит прерывание и управление передаётся в монитор. Чтобы работать напрямую с регистрами клавиатуры - нужно запретить у неё прерывания.
Но программа, работающая с регистрами клавиатуры напрямую - не будет запускаться в продвинутых мониторах. Гораздо лучше использовать системные вызовы, тем более, что они прекрасно работают.
Да но в моём случае речь идёт о стандартных конфигурациях УК-НЦ и ДВК,
я бы (если честно) не хотел бы даже вникать в "низкий" уровень, иметь инструментарий типа "бац" - процедура - после её вызова клавиатура уже
целиком моя (программная), где есть опознавалка для шифтов, УСТ, СТОП и
СБРоса ! Удобно же! На УК-НЦ особенно. Проверка на нажатие этих кнопок. Мечты ) Сам я такое не напишу в ближ. время конечно. поскольку сам механизм - необходимый для этого не знаю\ не понимаю. А системные вызовы - несмотря на прекрасную работу - всё таки работают криво ! или я такой программист ) Просто я не понимаю почему в одном случае срабатывает, а в другом нет один и тот же алгоритм??? ) Вот честно - (больше не буду этот вопрос писать\задавать всем уже надоело наверное - но это так!). Ещё раз спасибо за подсказки и шпоры. Всех желающих по прежнему призываю делиться своими методами и не только касательно клавиш, а вообще по теме программирования.
Уважаемый господин hobot, нет ли у Вас мнения, что клава недостоверно работает именно в Вашей М-ЭВМ ?
Я бы порекомендовал изучить процесс работы с клавой именно на самом низком программном уровне - т.к., возможно, не все ИС в Вашей М-ЭВМ исправны. Например, написать тест клавы на машкодах - самый примитивный, с последовательным опросом нажатий всей клавы.
Могу поверхносно предположить, что могут быть виноваты :
1. Некоррекное выставление признака внутри ВМ2 - главного или переферийного.
2. Некорректная обработка флагов в ПЛМ, в т.ч. спонтанная.
3. Некорректная работа собственно контроллера клавы - в т.ч. от пробоя статикой.
( Или полупробоя ).
4. Более конкретно можно ответить на эти предположения при запуске Вашего софта на др. экз. М-ЭВМ.
Продвинутости не нужно. Достаточно самого обыкновенного монитора с многотерминальной поддержкой. Даже если в конфигурации всего один монитор (такая конфигурация может использоваться для возможности полного управления терминалом и работы с 8битными символами без перелопачивания монитора).
В многотерминальном мониторе система автоматически восстанавливает состояние регистров и потому попытка запретить прерывания от клавиатуры не будет иметь успеха если только не отобрать у системы таймер. Я приводил пример как обойти это (а заодно и правильно выводить на терминал за которым работаешь, а не на консоль) не трогая таймер. Но все-равно там где для прямого обращения к регистрам нет никаких разумных причин, проще обойтись системными вызовами. Заодно программа, работающая через системные вызовы, будет нормально работать в RTEM и TSX :)
Да! Нужен удобный инструментарий для работы с клавиатурой напрямую в ассемблере\паскале УК-НЦ и ДВК! ) Пример UKLOAD только без необходимости предварительно загружать UKLOAD в память, а иметь некую процедуру ИНИЦИАЛИЗАЦИИ - после вызова которой сразу происходят все нужные установки и появляется доступ к глобальным показателям в виде функций
которые можно в паскале оформить или проверять их состоянии макро-вставками - например : Нажат ли шифт? - тогда бип ! Нажат ли СТОП? - тогда пауза ! В таком духе. Я просто описываю движок который был в Зеленограде однажды написан, но UKLOAD - выжил вон сколько копий, а правильный движок существует теперь только для БК11М ) Печалька. Но может ещё обнаружиться. К нему же
кстати шли и редактор+процедурки для вывода спрайтов !!!
Проще говоря - DEСовский ПАСКАЛЬ на УК-НЦ превращался в
реально удобную среду написания программ для УК-НЦ!!! ) Этот пакет висит в объявлении розыскивается с самого
начала, вместе со "СТРАНОЙ МОНСТРОВ" под RT-11 )
Я полностью согласен что изучить все эти подводные камни самое правильное решение. По поводу написания теста:Цитата:
Сообщение от MM
Я не на машкодах, я просто взял функцию под редакцией (после критических замечаний form'а ) и написал совсем коротенькую и простую SHKEYS.PAS исходник и протокол работы её тут
http://zx.pk.ru/showpost.php?p=639059&postcount=71 -
см. вторую половину сообщения по ссылке.
И могу вам сказать что она везде работает и всегда ожидает нажатия и даже в случае когда жмёшь кнопки с "двойным" показателем (ВК, стрелки курсора), не проскакивает следующего ожидания до тех пор пока пользователь не нажмёт УПР+Ц, затем она выдаст код клавиши 3, свою версию и выходит в монитор.
Она работает так как надо.
Вот где начинается издевательство над моим разумом:
- это немного коварный момент\вопрос ) Тут дело в том, что
1 - я пока ещё не использовал метод ориентированный на доп.переменную значения, я только убедился что вариант из SHKEYS.PAS и вот этот (не дословно!!!)
- (там не совсем так конечно, но что бы просто понятно было -> первично вами предложенный ) там работают только первый тик цикла (а всего их допустим восемь). В концеКод:/*$C
EMT ^O340
BCS .-2
*/
каждого тика нужно ждать кнопку, но после нажатия в конце первого тика - остальные семь просто пролетают, словно 340-го
емта там и в помине нет , вариант из SHKEYS просто пролетает
как будто я клавишу зажал и не отпускаю. От варианта нажатой клавишу (алфавитная, стрелка курсора, ВК) - не зависит, проскок!
Patron - уже подсказал (если верите мне - напомнил) решение,
я сам же в своих старых исходниках с ДОСовского паскаля к нему пришёл (см. KEYS.PAS) - но это только означает что штатные варианты работы с клавиатурой убоги по определению. Конечно я выкручусь и программа работать будет так как задумывалось )
Они напротив очень удобны и функциональны. Да, в однотерминальном RT-11 нельзя перехватить например код CTRL/O (CTRL/D в некоторых советских вариантах). Но это все. Других ограничений нет.
Надо только правильно выставлять настройки ввода которые по сути управляются всего двумя битами (плюс еще одним если надо вводить специфические символы вроде CTRL/S, CTRL/Q). Плюс макровызов .SCCA если надо CTRL/C самостоятельно вводить/обрабатывать.
Умение использовать все это позволяет писать полноценные программы, работающие везде, а не убожества которые напишут свою заставку и на том сдохнут ибо пытаются "правильно" работать ;)
Замечу также, что это на порядок проще физической работы, правильных примеров которой на моей памяти не продемонстрировал ни один программист в советские времена :)
Я согласен, но form, ты всё время рассуждаешь с вершины системщика, а мне нужно конкретно для УК-НЦ решение под неё заточенное. Когда ты говоришь"правильные" - ты подразумеваешь стандарты DEC. В большинстве случаев я с тобой согласен на 100%. Но "иногда" я говорю "правильные" в
рамках УК-НЦ (и только УК-НЦ) и если бы я сам Зеленоградским инструментарием в своё время не пользовался и его удобств не оценил - я бы и не вспоминал и не писал об этом.
Прошу ещё раз обратить внимание - что эти явные для тебя моменты для меня
совсем не явные !!! То есть - предполагается что бы сделать простой опрос клавиатуры работающий так как требуется по сценарию программы мне нужно
вникнуть в кучу низкоуровневной \ регистровой косвенно-непосредственной математики ? Логически и "педагогически"
это правильный подход, но в моём случае грусть и печалька.
Вот тут твой исходник для фортрана http://zx.pk.ru/showpost.php?p=693329&postcount=97 (кстати очень понравилось решение Титуса - в его шпоргалке в теме по программированию - вот он просто взял и обхитрил все эти штуки,
избежал всех проскоков и даже победил вывод символов на экран терминала - принято на вооружение однозначно!), так вот возвращаясь к твоему исходнику - даже наличие подробного комментария не делает его информативным для меня.
На данном этапе я думаю всё будет работать (я же сказал что путём
экспериментов "сразу в теле исходника") как нужно и на УК-НЦ, и на ДВК, а если всё будет совсем хорошо, для проверки можно будет
залить к прочим программам на твоём железе (там где символьных игр подборка) и протестить на рабочесть там.
Критерии оценки грамотности сильно зависят от точек зрения.
Я не профессиональный программер, но я сейчас ещё раз хочу
сказать, что ТЗ которое ставили перед разработчиками пакета
Magnifier они очень чётко и правильно выполнили - чему
я сам был свидетелем. Возможно этот софт ещё найдётся.
Какой прок школьнику за УК-НЦ от того будет ли программа работать на DEC-мифических системах где-то в DEC-мифической среде? Программа должна использовать текущего железа тонкости и
особенности - и для этого (посмотри архив на самом деле!),
и разрабатывался инструментарий отдельно по каждой из
отечественных видео-карт и М-ЭВМ ). Наличие такого инструментария ни в каком случае не препятствовало(ует) обучению алгоритмам и основам, но позволяет использовать
некоторые объекты без лишней.Цитата:
физической работы
- да к сожалению один из неплохих вариантовЦитата:
не убожества которые напишут свою заставку и на том сдохнут
тетриса на твоей машинке не завёлся дальше заставки. Но его писал школьник, на и для ДВКашки ) Чего же тут удивительного?
Извиняюсь за сумбур и кол-во букв.
Неудобство форума состоит в том что ссылки нужные размазываются
среди сообщений и мало кто делает себе труд читать темы.
Хобот не сдаётся, а идёт дальше паскалить )
---------- Post added at 18:14 ---------- Previous post was at 18:13 ----------
вот этот момент раскрой подробней пожалуйста если будет настроение! )
Ведь не только мне полезно будет.
протоколКод:
.TY FTT.PAS
PROGRAM FTT;
PROCEDURE EMT340;
BEGIN
/*$C
EMT ^O340
BCS .-2
*/
END;
BEGIN
WRITELN(CHR(27),'H',CHR(27),'J');
WRITELN('B1');
EMT340;
WRITELN('B2');
EMT340;
WRITELN('B3');
EMT340;
WRITELN('BYE!');
END.
.
В этом же случае - функция с регистровыми переменными работает.Код:B1
- тут ждёт
B2 > проскок!
B3
- тут ждёт
BYE!
.
В "больной-большой" программе проскок в цикле как я писал выше
в случае использования и емт340 и регистровых без разницы.
(но я конечно не втыкал пока вот то что с доп. переменной и проверять её значение - как в вашем KEYS.PAS - эта штука будет
работать поскольку - понятно что будет)
Проскакивает, если стрелки нажимать. Стрелки вводят по два кода.
Для общего развития пример на родном паскале без использования MACRO-11 и особых хитростей конкретного варианта паскаля ;)
В примере вызываются фортрановские подпрограммы которые уже есть в системной библиотеке (SYSLIB.OBJ). В принципе если почитать руководство по системной библиотеке, можно обнаружить, что там найдутся подпрограммы почти на все случаи жизни...
Маленькое замечание по использованию фортрановских подпрограмм...
Первое правило фортрана гласит: GOD is REAL, unless declared INTEGER... Шутка. Хотя для фортрана справедливо ;)
А если серьезно, нужно просто учитывать некоторые особенности фортрана. Даже те кто долго работал с фортраном часто не знают одной простой вещи:Что делает данная строчка? Неправильный ответ - вызывает подпрограмму SUBR и передает ей в качестве аргумента 1. Правильный ответ - вызывает подпрограмму SUBR и первый раз передает ей в качестве аргумента 1. Все аргументы в фортране - ссылки. Отсюда правило - все аргументы таких подпрограмм, подключаемых из паскаля должны быть объявлены как VAR (и подпрограмма соответственно может их менять).Код:CALL SUBR(1)
Пример программы которая ждет нажатия клавиши и печатает ее код (коды для клавиш которые генерят несколько кодов в RT-11 [стрелки, <CR>, цифровые клавиши в режиме alternative keypad])... Описание подпрограмм не привожу - оно есть в описании системной библиотеки, в том числе на русском (для рафоса). Программа завершается нажатием CTRL/C. В силу особенностей RT-11, программы не могут получить код CTRL/O в однотерминальном мониторе, а в данном случае также коды CTRL/S и CTRL/Q - для этого требуется установить кое-какие битики в настройках терминала, но это уже другая история :)
Код:PROGRAM TEST(INPUT, OUTPUT);
VAR CTRLC : INTEGER;
KEY : CHAR;
FUNCTION IPEEK(VAR ADDR: INTEGER): INTEGER; FORTRAN;
PROCEDURE POKE(VAR ADDR, VALUE: INTEGER); FORTRAN;
FUNCTION ITTINR: INTEGER; FORTRAN;
PROCEDURE SCCA(VAR FLAG: INTEGER); FORTRAN;
FUNCTION TTYIN: CHAR;
VAR I : INTEGER;
BEGIN
REPEAT
I:= ITTINR;
UNTIL I >= 0;
TTYIN:= CHR(I)
END;
PROCEDURE INIT;
VAR ADDR : INTEGER;
VALUE : INTEGER;
BEGIN
ADDR:= 36;
VALUE:= IPEEK(ADDR) OR 4160;
POKE(ADDR, VALUE);
SCCA(CTRLC);
END;
BEGIN
INIT;
WRITELN('TYPE A KEY...');
REPEAT
KEY:= TTYIN;
WRITELN('CODE: ', ORD(KEY))
UNTIL ORD(KEY) = 3
END.
Код:.PASCAL TEST TEST
Errors detected: 0
Free memory: 15192 words
.MAC TEST
.LIN TEST/LINK:SY:PASCAL
.RU TEST
TYPE A KEY...
CODE: 68
CODE: 74
CODE: 76
CODE: 75
CODE: 3
.
Да содержание SYSLIB.OBJ тайна покрытая мраком ) А весит кстати порядочно )
[не актуально уже ;-)
B]Вот вопрос - как же всё таки "продвинутый драйвер клавиатуры" встроить и использовать в своих программах для УК-НЦ?[/B]
Имеется в виду - как опросить и проверить нажатие таких кнопок как НР(шифты), ПОМ, СБР, СТОП ?
Я по старой памяти помню просто глобальные переменные в Зеленоградском инструментарии они обозначались так :
S$PRESS:: - кнопки шифт (УК-НЦ не различает лев и прав)
ALF$PRESS:: - кнопка алф
и так далее по тому же принципу,
их достаточно было сравнить с нулём TST или TSTB (не помню), но предварительно загружался весьма внушительный код в виде двух процедур PPINI и CPINI из двух библиотек PP.obj и CP.obj - то есть отдельно для каждого
процессора УК-НЦ. После этого программа уже работала не зависимо от RT-11, визуально это выглядело переходом в режим 40Х24, изменением палитры, на все (абсолютно) системные кнопки программист мог повесить свои функции (!), менять на лету палитру и переключаться между двумя страницами 0 и 1 (это было удобно,
отрисовав игровой экран в странице 1 её как лампочку можно зажечь мгновенно - пример игра Conan)...
до вызова некоего EXIT - который полностью отменял все настройки по кнопкам, палитре и возвращал изображение системное на экран и системное приглашение CSI, то есть воскрешал мон в памяти и можно было спокойно дальше редактировать и отлаживать исходник !!! Представьте ещё, что к этому прилагалось удобное использование мелодий (из местного редактора (есть на многих дискетах в архиве) и 4-х цветный редактор спрайтов Magnifier со своей библиотекой процедур. Круто было очень! И в отличие от UKLOAD - не требовалось ничего предварительно загружать\запускать, конечно (и надо это понимать), что размер исполняемого модуля был увесист (но соразмеримо для запуска на РМУ и загрузки по сети УК-НЦ), поскольку включал в себя всё содержимое указанных
выше OBJ + SPROUT.OBJ (библиотеку фун.и проц. для спрайтов) + имя.OBJ (прогнанные через МАКРО файл со спрайтами в виде sprite_name:: внутри) +
SPRTAB.OBJ - таблица используемых спрайтов, где все названия спрайтов из предыдущей библиотеки просто указывались сверху вниз внутри SPRTAB::
первый спрайт имел номер 0 и так далее.
Спрайты записывались в таком примерно виде (редактор их сразу сохранял в ассемблере) ИМЯ_СПРАЙТА:: 8,8 - сначала размер по Х и У, а потом сам спрайт где обозначался цвет 1 из 4.
Сейчас похожий инструментарий обнаружен только для БК11М, авторов я не знаю, а УК-НЦ аналог с исходниками (у меня стоявший когда-то на машинке) к сожалению утерян (сильно подозреваю, что и у автора их нет).[свернуть]
form, спасибо за пример и шпоргалку! Принято на вооружение! )
Никакой тайны. Как уже говорил, есть описание как в рамках документации на RT-11 так и на русском для рафоса. Иногда в эту библиотеку добавляли также фортрановские или паскалевские - просто чтобы не писать их в командной строке
Это требует подгрузки своего кода в область ПП. Как подгружать можно посмотреть в исходниках PRUN и многих других. Как вклиниваться в обработку клавиатуры можно посмотреть в исходниках KBFIX. А реализацию проще всего сделать такую, чтобы эти специальные клавиши транслировались в какой-то обычный ASCII код, а в программе читать их штатным образом. К примеру так поступала библиотека VIDI - принимала <ESC> последовательности и транслировала их в определенные CTRL-коды, в результате программе пофигу было какой терминал - она получала одинаковые коды.
Остальное пропустил как не несущее никакой конкретной информации - подразумевало, что я все эти программы видел и у меня в верхнем ящике стола лежат их исходники ;)
Нет я просто воспоминаниями делюсь - вкратце описав как это было организовано, то есть можно было одинаково успешно использовать
и в программах на ассемблере и в программах на паскале )
Вот прикольная иллюстрация в старой тетрадке обнаружил недавно !!!
Процедура ЧЕРЕП !!!:redface:Очень сильно подозреваю что это черепушка из КЦГД-шного LODE - видимо сначало должен был быть и для УК-НЦ (!), и возможно даже был (просто затерялся среди игровых пакетов, что в F-BIT продовались), а потом уже был перенесён на новенькие с КЦГД ДВКашки (хотя это только мои домыслы).
Картинки.
form, возвращаясь к твоей шпоре, можно вот этуКод:PROCEDURE INIT;
VAR ADDR : INTEGER;
VALUE : INTEGER;
BEGIN
ADDR:= 36;
VALUE:= IPEEK(ADDR) OR 4160;
POKE(ADDR, VALUE);
SCCA(CTRLC);
END;
процедуру подробнее описать для танкистов-паскалистов )))
Меня конструкции типа ПЕРЕМЕННАЯ:=ЗНАЧЕНИЕ OR КОНСТАНТА
всегда в ступор приводят (я видимо мыслью иначе устроен иначе
был бы системщиком однозначно!) ADDR:= 36; и 4160 это ведь не от балды цифры, а про вызов SCCA(CTRLC); - я так понял надо
описание SCCA читать, но вот CTRLC переменная - что то я не понимаю её судьбу и значение? PEEK,POKE - это же бейсик !!! )))
---------- Post added at 21:48 ---------- Previous post was at 21:47 ----------
если это записать на ассемблере или как то развернуть как это выглядит для прямой как рельсы логики ?
Логическая операция. 36 (44 восьм) и 4160 (10100 восьм).
Берется значение адреса 44 (JSW), в нем устанавливаются 6й и 12й биты (10100), остальные биты не меняются. Эти биты устанавлвают посимвольный режим ввода без ожидния и обработки спецсимволов.
Здесь CTRLC не используется, система в этой переменной устанавливает флаг двойного нажатия CTRLC, что можно использовать для проверки этого условия (после проверки переменную нужно вручную обнулить). В программе не используется - мы просто вводом проверяем нажатие CTRL/C.
На ассемблере будет попроще конечно.
с объявлением в паскале какКод:.MCALL .SCCA,.TTINR,.TTYIN
INIT::
BIS #10100,@#44
.SCCA #AREA,#AREA
RETURN
TTINR::
.TTINR
RETURN
TTYIN::
.TTYIN
RETURN
AREA: .BLKW 2
можно конечно обойтись без фортранизма, но я просто не знаю как в паскале возвращаются параметры :)Код:PROCEDURE INIT; FORTRAN;
FUNCTION TTINR: CHAR; FORTRAN;
FUNCTION TTYIN: CHAR; FORTRAN
насколько я понимаю как ты сам оформишь так и возвратятся ) Из ассемблера в смысле?
Ну как то так
А если тебе допустим из примера выше надо присвоить или записать что то в N:integer то соответственноКод:10.1. ИСПОЛЬЗОВАНИЕ МАКРОАССЕМБЛЕРА
ПАСКАЛЬ,РЕАЛИЗОВАННЫЙ ДЛЯ ДВК, ДАЕТ ВОЗМОЖНОСТЬ ВКЛЮЧАТЬ В
ЛЮБОЕ МЕСТО ПРОГРАММЫ ОТДЕЛЬНЫЕ ФРАГМЕНТЫ НА ЯЗЫКЕ
МАКРОАССЕМБЛЕР. ЧАСТИ ПРОГРАММЫ, НАПИСАННЫЕ НА МАКРОАССЕМБЛЕРЕ,
МОГУТ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННЫЕ ИЗ ПРОГРАММЫ НА ЯЗЫКЕ ПАСКАЛЬ, ХОТЯ
ДЛЯ ЭТОГО ТРЕБУЕТСЯ НЕКОТОРОЕ ПОНИМАНИЕ ПРОЦЕССА ОРГАНИЗАЦИИ
ВЫПОЛНЕНИЯ. ДЛЯ ВКЛЮЧЕНИЯ ФРАГМЕНТА НА АССЕМБЛЕРЕ ИСПОЛЬЗУЕТСЯ
СПЕЦИАЛЬНЫЙ ВИД КОММЕНТАРИЕВ, НАПРИМЕР:
CTP. 47
ЩИ1.700.016 ПО.04-01 35
PROCEDURE EMTTRAP (N:INTEGER);
BEGIN
(*$C ;НАЧАЛО ФРАГМЕНТА НА МАКРО
MOV N(SP),-(SP) ;ПАРАМЕТР "N" -> В СТЕК
EMT 53 ;ВЫЗВАТЬ ДИСПЕТЧЕР EMT
*)
END (* EMTTRAP*)
ПРИ ИСПОЛЬЗОВАНИИ МАКРОАССЕМБЛЕРА СЛЕДУЕТ ПОМНИТЬ, ЧТО
ОСНОВАНИЕМ СЧИСЛЕНИЯ ЧИСЛОВЫХ КОНСТАНТ ПО УМОЛЧАНИЮ ЯВЛЯЕТСЯ 10,
А НЕ 8.
Это же должно работать и для глобальных подпрограмм.Код:MOV ЧТО-ТО, N(SP)
Если глобальная метка несёт в себе значение значит её
оформляем функцией нужного типа, если содержит кучу
операций то процедурой.
(но скорее всего я неправильно понял фразу про параметры.)
Можно, но с ним ПКМ интереснее и заставляет всё таки начинкойЦитата:
можно конечно обойтись без фортранизма
SYSLIB.OBJ обеспокоиться, раз там столько всего полезного.
В теме программирования (не в этой,а в старой по УК-НЦ) AlecV и
ты вскользь упоминаете, что Фортран вроде как системный язык DEC и RT-11, а я всю дорогу считал что MACRO-11 - ведь вроде весь монитор и PIP DUP всякие на макро написаны?
Я всегда был уверен что все вызовы .MCALL в исходниках макро
относятся к SYSMAC.SML ? И уточнение SYSLIB.OBJ при линковке
надо указывать ?
Ух! Все шпоры и разъяснения из последних сообщений взяты на вооружение! Надо бы мне кое что осмыслить и почитать прежде
чем ещё вопрос задать. Логические операции - моя встроенная логика пасует как и моя встроенная математика ) (*хобот собирает
все шпаргалки и идёт учить мат.часть :wink:)
---------- Post added at 05:22 ---------- Previous post was at 05:18 ----------
А есть ведь ещё GLIB - библиотека с линиями кружочками и прочей графикой аля бейсик - и даже вроде с исходниками (надо уточнять) - только я могу путать фортрановская она или Си-шная ? Надо уточнять.