User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 276

Тема: Практическое программирование в среде RT-11 на ассемблере.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    374
    Поблагодарили
    311 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    form, кстати говоря - я только сейчас обратил внимание!!!
    Смотри - классический JS.SYS какая хитрая скотинка.

    Во первых прервать его таки можно, но это его не убивает (если только не выгрузить),
    после запуска любой программы он снова ищет свою прогу (значит он что то в памяти в делает с монитором, но не на диске - ибо "не навреди") и сам в себе он строку об ошибке не содержит!
    Это KMON вместо него орёт что файла нету !!! (см. скрин выше).
    Сейчас правлю исходник SH - переименовал его в SSH - типа Старт Шелл )))
    Попробую что получиться, но
    1. я понятия не имею что такое ХУК
    2. мне то можно .PRINT использовать или нет?

    - - - Добавлено - - -

    form, НЕТ у меня не блинчик и даже не ком получился.
    1. LINK ругнулся на три глобальных метки которые я не трогал !!!
    2. теперь по LO SSH MON пишет что команда-инвалид )))

    Листинг SSH.MAC
    Код:
    .MCALL    .MODULE
    .MODULE    SSH,VERSION=1,COMMENT=<RT-11 Shell Driver>,AUDIT=YES
    
    $SYPTR    =:    54            ;POINTER TO RMON
    $E16LS    =:    316            ;EMT 340-357 DISPATCH TABLE OFFSET
    $KMONI    =:    450            ;KMON INDICATOR OFFSET
    
    E6.PRI    =:    <351-340>*2        ;OFFSET TO .PRINT ROUTINE
    
        .MCALL    .ADDR,.CHAIN,.DRDEF    ;SYSTEM MACRO CALLS
        .MCALL    .DSTAT,.EXIT,.LOOKUP    ;
        .MCALL    .LOOKUP,.PURGE,.PRINT    ;
    
        .DRDEF    SSH,340,0,0,0,0        ;DEFINE DRIVER PARAMETERS
        .DRPTR    LOAD=SHLOA,FETCH=*NO*,UNLOAD=SHUNL ;DEFINE SERVICE ENTRIES
    
        .DRBEG    SSH            ;START OF DRIVER CODE
        MOV    SHCQE,R4        ;GET ADDRESS OF QUEUE ELEMENT
        BIS    #HDERR$,@-(R4)        ;SET HARD ERROR STATUS
        .DRFIN    SSH            ;FINISH I/O
    
    SHINT::    TST    @(PC)+            ;RUNNING KMON?
    SHKMI::    .BLKW                ;
        BEQ    20$            ;IF EQ NO
    .IF    EQ    MMG$T
        CMP    @14(SP),(PC)+        ;CHECK IF PROMPT IS PRINTED
    .IFF
        CMP    @16(SP),(PC)+        ;CHECK IF PROMPT IS PRINTED
    .ENDC
        MOV    R5,R5            ;
        BNE    20$            ;IF NE NO
        MOV    R0,-(SP)        ;SAVE REGISTERS
        MOV    R1,-(SP)        ;
    5$:    .ADDR    #SHARE,R0        ;POINT TO EMT AREA
        .ADDR    #SHPGM,R1        ;POINT TO PROGRAM NAME
        .LOOKUP    R0,#0,R1        ;LOOKUP THE FILE
        ROL    -(SP)            ;SAVE ERROR STATUS
        .PURGE    #0            ;PURGE CHANNEL
        ROR    (SP)+            ;RESTORE ERROR STATUS
        BCS    10$            ;IF CS FILE NOT FOUND
        MOV    #500,R0            ;POINT TO CHAIN AREA
        MOV    (R1)+,(R0)+        ;COPY PROGRAM NAME
        MOV    (R1)+,(R0)+        ;
        MOV    (R1)+,(R0)+        ;
        MOV    (R1)+,(R0)+        ;
        .CHAIN                ;CHAIN TO PROGRAM
    10$:    .PRINT    #NSHF            ;RESTORE REGISTERS
    ;    MOV    (SP)+,R0        ;
    ;    JMP    @(PC)+            ;JUMP TO SYSTEM ROUTINE
    20$:    BR    5$
    SHPRI::    .BLKW                ;ADDRESS OF SYSTEM .PRINT ROUTINE
    
    SHARE::    .BLKW    3            ;EMT AREA
    SHPGM::    .RAD50    /SY SHELL SAV/        ;PROGRAM TO CHAIN TO
        .DREND    SSH
    
        .PSECT    SETOVR
    SHLOA::    MOV    @R5,R5            ;R5=SHLQE
        MOV    @#$SYPTR,R4        ;R4=RMON
        MOV    R4,R2            ;COPY
        ADD    $E16LS(R4),R4        ;R4=EMT 340-357 DISPATCH TABLE
        MOV    E6.PRI(R4),R3        ;R3=ADDRESS OF .EXIT ROUTINE
        ADD    R4,R3            ;
        MOV    R3,SHPRI-SHLQE(R5)    ;STORE IN DRIVER
        MOV    R5,R3            ;R3=SHINT
        ADD    #SHINT-SHLQE,R3        ;
        SUB    R4,R3            ;R3=OFFSET TO SHINT
        MOV    R3,E6.PRI(R4)        ;POINT TO OUR ROUTINE
        ADD    #$KMONI,R2        ;R2=KMON INDICATOR
        MOV    R2,SHKMI-SHLQE(R5)    ;STORE IN DRIVER
    SHXIT::    CLC                ;FLAG NO ERROR
        RETURN                ;RETURN
    
    SHUNL::    MOV    @R5,R5            ;R5=SHLQE
        MOV    @#$SYPTR,R4        ;R4=RMON
        ADD    $E16LS(R4),R4        ;R4=EMT 340-357 DISPATCH TABLE
        MOV    E6.PRI(R4),R3        ;R3=ADDRESS OF .EXIT ROUTINE
        ADD    R4,R3            ;
        MOV    #SHINT-SHLQE,R2        ;R2=SHINT
        ADD    R5,R2            ;
        CMP    R3,R2            ;OUR HOOK SET?
        BEQ    20$            ;IF EQ YES
        JSR    R0,10$            ;NO, SET ERROR MESSAGE
        .ASCIZ    /?SH-F-Other driver hooks .PRINT - can't unload/
        .EVEN
    10$:    COM    (SP)+            ;CLEAN STACK, SET CARRY
        RETURN                ;RETURN
    20$:    MOV    SHPRI-SHLQE(R5),R5    ;R5=ADDRESS OF SYSTEM .PRINT ROUTINE
        SUB    R4,R5            ;CONVERT TO OFFSET FROM EMTLST
        MOV    R5,E6.PRI(R4)        ;UNHOOK .PRINT
        BR    SHXIT            ;EXIT
    
    NSHF:    .ASCIZ    /?SH-F-File not found SY:SHELL.SAV/
    
        .END
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    1. LINK ругнулся на три глобальных метки которые я не трогал !!!
    Добавь в начало строчку
    Код:
    .DSABL GBL
    Если какая-то метка является глобальной, хорошим тоном считается указать ее в списке команды .GLOBL, а не разрешать Макро считать любую неопределенную в тексте метку глобальной.

    Цитата Сообщение от hobot Посмотреть сообщение
    2. теперь по LO SSH MON пишет что команда-инвалид )))
    Естественно, SSH.SAV надо переименовать в SH.SYS (SHX.SYS для XM/ZM-монитора)

    - - - Добавлено - - -

    И еще, перед командой переименования .SAV в .SYS надо подать команду REM SH, а после переименования - команду INS SH
    И вообще, собери все (включая компиляцию с линковкой) в один .COM-файл.
    Последний раз редактировалось AFZ; 13.12.2016 в 08:00.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  4. #3

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    хорошим тоном считается указать ее в списке команды .GLOBL
    Это скорее дань уважения RT-11V4 и более старым - там по умолчанию запрещено было смотреть за пределы исходника. В RSX же к примеру даже самых старых наоборот всегда было разрешено - там это необходимость чтобы распознать основные системные переменные и коды ошибок/функций I.O итд (хотя с помощью кучи макросов можно и вручную поопределять все это [в программах для RTEM так и делаю поскольку RTшный SYSLIB ничего не знает про RSXные символы ]).
    Последний раз редактировалось form; 13.12.2016 в 08:39.
    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

  5. #4

    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Это скорее дань уважения RT-11V4 и более старым - там по умолчанию запрещено было смотреть за пределы исходника.
    И правильно. Согласись, неприятно узнавать только от линкера о том, что ты, набирая метку, попал не в ту пимпочку!..

    Цитата Сообщение от form Посмотреть сообщение
    В RSX же к примеру даже самых старых наоборот всегда было разрешено - там это необходимость чтобы распознать основные системные переменные и коды ошибок/функций I.O итд
    Эта необходимость является следствием недоработки. По-хорошему надо было определить все эти дела в какой-то системной макрокоманде (или в нескольких). .MCALL-то ты пишешь? И это бы написал.

    - - - Добавлено - - -

    (Хотя сравнительно свежие макро понимают .MCALL AUTO, или как там он пишется? Ни разу не пользовался, опять же из околоструктурных соображений. Ну, или следуя правилам хорошего тона.)
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  6. #5

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    Эта необходимость является следствием недоработки.
    Цитата Сообщение от AFZ Посмотреть сообщение
    Согласись, неприятно узнавать только от линкера о том, что ты, набирая метку, попал не в ту пимпочку!..
    Это уже вопрос вкуса. Те кто начинал с RSX с этим не согласятся
    Следуя той же логике про возможность написать, никто не мешает написать .DSABL GBL
    .MACLLов и потом вызовов в начале программы может набраться штук 10 только ради того, чтобы определить то, что используется по сути во всех без исключения программах - я бы сказал, что именно это - излишества
    Последний раз редактировалось form; 13.12.2016 в 09:07.
    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

  7. #6

    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Следуя той же логике про возможность написать, никто не мешает написать .DSABL GBL
    Что я и посоветовал Хоботу

    Цитата Сообщение от form Посмотреть сообщение
    .MACLLов и потом вызовов в начале программы может набраться штук 10 только ради того, чтобы определить то, что используется по сути во всех без исключения программах
    Так я и сказал, что DEC'овцам надо было объявить эти метки глобальными в нескольких системных макрокомандах. Одна - для ввода-вывода, одна для обработки ошибок и т.д., так, чтобы их набралось с десяток, не больше. Или даже одну, в конце, которая проверит все системные макровызовы, встреченные во всём исходнике и сгенерит все необходимые .GLOBL для тех меток, которые положено использовать тем макровызовам, которые есть в тексте. (И не генерить те, что не положены, если где накосячишь, то линкер пошлёт!..)
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  8. #7

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    .GLOBL
    Тут исходники TSX радуют глаз - там только что регистры не определяют вручную (а может и определяют в старых версиях еще)
    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

  9. #8

    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А, вспомнил. .ENABL MCL
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  10. #9

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    А, вспомнил. .ENABL MCL
    Это позволяет не использовать .MCALL, но это как раз очень вредная фича - на каждый чих будут просматриваться все макробиблиотеки которые используются.
    И кстати не всегда сработает. Например с .PRINT в RT-11 такой номер не пройдет - он не подцепится

    - - - Добавлено - - -

    А если еще вспомнить старые компиляторы MACRO-11 в которых символы R0-R5, SP, PC не были определены... Вроде в моей любимой книге Сингера советуют явно определять регистры
    Последний раз редактировалось form; 13.12.2016 в 09:17.
    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

  11. #10

    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    2,321
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    177 сообщений
    Mentioned
    17 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    А если еще вспомнить старые компиляторы MACRO-11 в которых символы R0-R5, SP, PC не были определены... Вроде в моей любимой книге Сингера советуют явно определять регистры
    Угу. Например ПЛОСовский асм (не макро, макрокоманд он не понимает). Все мои программы тех вреиен начинались: R0=%0 <CR><LF> ... R5=%5<CR><LF> R6=%6 <CR><LF> R7=%7

    С переходом на RT-11 этот список сократился до двух последних строчек - про R6 и R7. Поскольку при вызове подпрограммы я на автопилоте писал JSR R7,SUB, при выходе из П/П - RTS R7 и MOV Rn,-(R6) при сохранении регистра. А SP, PC, команды CALL и RETURN я так и не выучил.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Арифметические процедуры на ассемблере
    от spensor в разделе Программирование
    Ответов: 27
    Последнее: 13.05.2017, 20:56
  2. Пишем на ассемблере под эмулятором
    от GM BIT в разделе Для начинающих
    Ответов: 76
    Последнее: 15.07.2016, 20:04
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Продам книгу- AMIGA: программирование на ассемблере
    от Doctor Max в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 01.03.2012, 00:35
  5. Подпрограмма на ассемблере в памяти?
    от jimled в разделе Программирование
    Ответов: 1
    Последнее: 29.11.2009, 06:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •