User Tag List

Страница 113 из 157 ПерваяПервая ... 109110111112113114115116117 ... ПоследняяПоследняя
Показано с 1,121 по 1,130 из 1564

Тема: Программирование на УКНЦ как?

  1. #1121

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

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    тогда можно переписать так
    Код:
    Не ясна логика проверки
    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

  2. #1122

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

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Не ясна логика проверки
    сверяем с нулём
    - если адрес существует получаем ноль и выполняем дальше по склону холма,
    иначе при любом раскладе "нету памяти или несуществующий адрес или как грамотнее?" и выход. примерно это я подразумевал,
    Архив программ для УК-НЦ, ДВК и БК.

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

  3. #1123

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тогда что есть CMP (R0)+,(R0)+
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  4. #1124

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

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Тогда что есть CMP (R0)+,(R0)+
    константа )
    Архив программ для УК-НЦ, ДВК и БК.

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

  5. #1125

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Тогда что есть CMP (R0)+,(R0)+
    Не знание предмета

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

    Что можно творить на MACRO-11

    Код:
      PROCEDURE READ1
        ;
        ; R0 - sector num
        ; R1 - word count		- zeroed
        ; R2 - memory address	- updated
        ;
        ; in work
        ; R3 - sector count
        ;
      BEGIN
        LET  R4   := BTCSR2
        LET  (R4) := #DC.STA!DC.NIE
    
        LET  R3   := R1 OFF.BY #377
        SWAB R3
        IF #377 SET.IN R1 THEN
          LET R3 := R3 + #1
        END
    					; R3 sector count
        LET R4 := R4 + #P$STAT-P$CSR2
        REPEAT
          LET R5 :B= (R4)
    							.ASSUME CS.BSY EQ <^O200>
        UNTIL RESULT IS PL AND #CS.DRD SET.IN R5
    
        LET R4 := R4 + #P$SCNT-P$STAT
    
        LET (R4)+ := R3		; 24
    							.ASSUME P$SNUM EQ <P$SCNT+2>
        LET (R4)+ := R0		; 26
    							.ASSUME P$CYLL EQ <P$SNUM+2>
        SWAB R0
        LET (R4)+ := R0		; 30
    							.ASSUME P$CYLH EQ <P$CYLL+2>
        LET (R4)+ := @#B$DEVU	; 32
    							.ASSUME P$DH   EQ <P$CYLH+2>
        LET (R4)+ := BTDH 		; 34
    							.ASSUME P$CMD  EQ <P$DH+2>
        LET (R4)  := #CS.RD 	; 36
    
        REPEAT
          REPEAT
            LET R5 :B= (R4)
    							.ASSUME CS.BSY EQ <^O200>
          UNTIL RESULT IS PL AND #CS.DRQ SET.IN R5
    
          IF #CS.ERR SET.IN (R4) GOTO 80$
    
          LET R4 := R4 + #P$DBUF-P$STAT
    
            THRU R3 := #256.
              IF R1 NE #0 THEN
                LET (R2)+ := (R4)
                LET R1    := R1 - #1
              ELSE
                TST (R4)
              END
            END
    
          LET R4 := R4 + #P$STAT-P$DBUF
    
        UNTIL R1 EQ #0
    
        LET CARRY := OFF
        RETURN
    
    80$:
    
        RESET
        JMP BIOERR
      END READ1

  6. #1126

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

    По умолчанию

    ок, попробую по другому спросить, вы видите ошибку явно там,
    где у меня "мёртвая зона" и так
    [CODE]


    Цитата Сообщение от form Посмотреть сообщение
    Плюс два, а не минус
    TST (R0)+
    1. сойдёт я получил за вариант с ADD #2,R1
    на замену этой команды form посоветовал оптимизацию TST (R1)+
    я конечно как честный Паскале-Любитель синтаксис ассембл. не совсем
    чётко понимаю, но я забыл о чотности и что арифметика "словесная",
    то есть смещение ()+ всегда на 2 и только байтовая может быть нечётной
    получив такую рекомендацию я пишу код в моём понимании означающий
    MOV @#50,R1 ; КЛАДЁМ СОДЕРЖИМОЕ ЯЧЕЙКИ 50 В R1
    TST (R1)+ ; form ПОЯСНИЛ, ЧТО ЭТО ПРОВЕРКА НА СУЩЕСТВ. АДРЕСА
    ; НУЖНОГО, ДАЛЕЕ Я ПИШУ
    BEQ GOGOGO ; ЕСЛИ РЕЗУЛЬТАТ ПРЕД.-ЕЙ КОМАНДЫ 0 ЗНАЧИТ ВСЁ ОК И
    ; МЫ ИДЁМ ФЭТЧИТЬ ДРАЙВЕР, И СЛЕДУЩИЕ ДВЕ СТРОКИ ПЕРЕД
    МЕТКОЙ GOGOGO - ЭТО сообщение об ошибке и екзит
    за что сразу учебником по макушке%
    Цитата Сообщение от form Посмотреть сообщение
    Не ясна логика проверки
    Цитата Сообщение от S_V_B Посмотреть сообщение
    Тогда что есть CMP (R0)+,(R0)+
    Цитата Сообщение от Hunta Посмотреть сообщение
    Не знание предмета
    господа не лишайте стипендии в чём ошибка,
    помните вы смотрите на бублик изнутри, я же снаружи да ещё через упаковку ) две разницы !
    Последний раз редактировалось hobot; 01.06.2019 в 05:57.
    Архив программ для УК-НЦ, ДВК и БК.

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

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

  8. #1127

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    господа не лишайте степендии в чём ошибка,
    Если присмотреться все очень просто:
    Команда TST как и CMP не изменяет операнд, но поскольку стоит автоинкремент то R0 увеличивается на 2, в случае с CMP на 4. Получаем TST(R0)+ ~ R0+=2; CMP(R0)+,(R0)+ ~ R0+=4;
    При этом экономим память
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  9. #1128

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

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Если присмотреться
    то ты запутал меня окончательно )
    где вы там CMP видите - вот я чего не понимаю (раз)
    и чем вам переход по нулю не понравился
    а как ещё TST проверить и сделать ветвление?

    (уже начал занимать, без стипендии кушать нетуть)
    Архив программ для УК-НЦ, ДВК и БК.

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

  10. #1129

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,505
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    713
    Поблагодарили
    595 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В ячейке 50 - последний используемый (в данный момент) программой адрес. Нуля там не будет в принципе. Первый свободный - последний используемый + 2. В .FETCH надо указать - с какого адреса грузить. Поскольку первый свободный - это последний используемый + 2 - берём содержимое ячейки 50, добавляем два и этот адрес указываем в вызове .FETCH.
    Код:
    	MOV	@#50, R1
    	ADD	#2, R1
    	.FETCH	R1, #CL
    Знающие систему команд и способы адресации PDP-11 вместо ADD #2 используют TST (R1)+, которая сделает следующее - возьмёт содержимое R1, извлечёт содержимое ячейку по адресу, извлечённому из R1 (попутно устанавливая или сбрасывая флаги), увеличит извлечённое из R1 значение на 2 (поскольку команда словная) и запишет обратно в R1. Нас интересует только воздействие на R1, поэтому дальше никаких проверок флагов не делается (хотя обычно после TST они проверяются тем или иным способом). Возможная проблема - R1 указывает на несуществующую память и мы словим прерывание по V4 - в данном случае неактуальна, потому что @#50 всегда (ну, точнее, если мы работает под RT11) указывает на существующую память (последняя ячейка программы).

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

    Вдогонку

    Возможные проблемы в коде в сообщении

    - после программы не достаточно памяти для загрузки выбранного драйвера (не сильно страшно, подозреваю, что монитор откажется грузить, если памяти не хватает)
    - насколько я понял из описания, .FETCH не корректирует значение в @#50, в R0 он возвращает адрес следующей ячейки памяти после загруженного драйвера (а это уже серьёзней, код из другого места может взять содержимое из ячейки @#50 и затереть драйвер)
    - даже если за .RELEASE идёт .EXIT - отсутствие .RELEASE - это неряшливый стиль, в результате чего могут появиться вопросы и который потенциально может привести к ошибкам в программе - человек просто забудет написать .RELEASE там, где он точно нужен и потенциально получить нехватку памяти

    Правильный подход

    - получить информацию (включая размер) о драйвере
    - сохранить текущую верхнюю границу + 2
    - используя текущую верхнюю границу программы и размер драйвера - посчитать новую и установить её, используя .SETTOP (попутно установится и новое значение в @#50
    - загрузить драйвер, используя сохранённое значение из 2-ого пункта

    плюс в каждом пункте проверять корректность выполнения действий в пункте
    Последний раз редактировалось Hunta; 01.06.2019 в 09:44.

  11. #1130

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

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    подозреваю, что монитор откажется грузить, если памяти не хватает
    Да, границы проверяются. Даже в старых SJ где много чего без всяких проверок делается.

    Цитата Сообщение от Hunta Посмотреть сообщение
    установить её, используя .SETTOP
    Добавлю: предварительно сохранить старое значение и восстановить его перед переходом в точку следующего цикла программы (если программа циклическая [например просит ввода команды]) или просто обнулить @#50 перед выходом - это позволит предотвратить лишнюю дисковую активность после .EXIT.
    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

Страница 113 из 157 ПерваяПервая ... 109110111112113114115116117 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Программирование на Эмуляторе. Возможно ли это?
    от Toxic в разделе Программирование
    Ответов: 10
    Последнее: 20.01.2008, 19:20
  2. Программирование Altera и JTAG
    от Mikka_A в разделе Несортированное железо
    Ответов: 7
    Последнее: 18.01.2008, 09:07
  3. Программирование и софтмейк на NES
    от Splinter в разделе Nintendo
    Ответов: 7
    Последнее: 30.06.2006, 04:31

Ваши права

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