Важная информация

User Tag List

Страница 7 из 9 ПерваяПервая ... 3456789 ПоследняяПоследняя
Показано с 61 по 70 из 90

Тема: Портирование игры "Last Mission" на УКНЦ

  1. #61
    Veteran
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    1,400
    Благодарностей: 445
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не знаю, почему, но CLR, в отличие от MOV, делается посредством цикла шины "Ввод-пауза-вывод", который, естественно, длиннее обычного цикла "Вывод", на длительность фазы ввода. Непонятно зачем оно так сделано, но это идет еще от Э-60.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

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

  3. #62
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    10,381
    Благодарностей: 3622
    Mentioned
    5 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Наверное, имелось в виду что CLR (R1) выполняется медленней чем MOV R0,(R1) когда в R0 ноль. По крайней мере на процессоре ВМ1 это так, и кто-то писал, что на ВМ2 не исправили. Возможно, внутри процессора CLR делается как-то типа XOR dst,dst и это требует двух обращений к памяти, в отличии от MOV.
    Alex_K недавно же все обьяснил: CLR на ВМ2

  4. Этот пользователь поблагодарил Titus за это полезное сообщение:
    nzeemin (15.11.2018)

  5. #63
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    317
    Благодарностей: 50
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Почти разобрался с резидентами (диспетчером процессов).
    В принципе в ПК УКНЦ 1-94 правильно написано, но с ошибками и неполно..

    ; Подпрограмма для выполнения в памяти ПП;
    STARTPP:
    MOV PC,R1 ; Найти адрес
    ADD #PGM1-.,R1 ; программы-процесса
    MOV R1,AdrPgm ; Запомнить его
    MOV R1,@#7124 ; Записать в таблицу процессов
    MOV #1,@#7100 ; Записать в таблицу запуска

    RETURN ; Завершить эту программу
    AdrPgm: 0


    PGM1: ; Сама программа-процесс
    MOV R0,-(SP) ; Сохранение R0
    .......

    Наш процесс
    MOV #COMMW/2,@#177010 ; Управлять можно через ячейку в памяти ЦП
    MOV @#177014,R0 ;

    .........
    MOV AdrPgm,@#7124 ; Поставить в очередь процессов
    MOV #1,@#7100 ; Потребовать обслуживания
    MOV (SP)+,R0 ; Восстановить
    JMP @#174170 ; Перейти к диспетчеру процессов

    ENDPP:

    Доступных пар ячеек всего 2:
    007076 SCPP:: .WORD 0 ;- счетчик процесса пользователя
    007100 SCPTST:: .WORD 0 ;- счетчик процесса тестирования

    и то с "процесса пользователя" не получилось, так что фраза "вы можете использовать другую пару" только вводит в заблуждение.

    список ячеек диспетчера процессов:
    007060 SCPKL:: .WORD 0 ;- счетчик процесса клавиатуры

    007062 SCPKFO:: .WORD 0 ;- счетчик процесса канала файлового обмена

    007064 SCPD:: .WORD 0 ;- счетчик процесса дисплея

    007066 SCPK:: .WORD 0 ;- счетчик процесса курсора

    007070 SCPKR:: .WORD 0 ;- счетчик процесса режима установок

    007072 SCPMZ:: .WORD 0 ;- счетчик процесса меню загрузки ЦП

    007074 SCPPC:: .WORD 0 ;- счетчик процесса печати

    007076 SCPP:: .WORD 0 ;- счетчик процесса пользователя

    007100 SCPTST:: .WORD 0 ;- счетчик процесса тестирования

    007102 SCDPRC:: .WORD 0 ;- счетчик диспетчера процессов

    ....
    пока еще не разобрался как правильно освобождать память.. в случае с резидентом..
    Последний раз редактировалось S_V_B; 03.12.2018 в 14:56.

  6. Этот пользователь поблагодарил S_V_B за это полезное сообщение:
    hobot (05.12.2018)

  7. #64
    Guru Аватар для hobot
    Регистрация
    29.08.2011
    Адрес
    Зеленоград
    Сообщений
    4,960
    Благодарностей: 1151
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    S_V_B, предлагаю для усовершенствования вашего "движка" такие переменные для кнопок заиметь
    SHIFT$ - НАЖАТ ЛИ ШИФТ ПРОВЕРКА ПО TST
    И ДАЛЕЕ ПО ТОМУ ЖЕ ПРИНЦ.
    UP$
    DOWN$
    LEFT$
    и так по всем управляющим кнопкам )

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

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

  8. #65
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    317
    Благодарностей: 50
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделал переключение экранов при выводе спрайтов:
    https://yadi.sk/d/ZHVD8eUWDyIlmA

    Не нравится влияние прерываний на скорость вывода, придется отключать. В связи с этим вопрос, подскажите правильный опрос клавиатуры без прерываний и ЕМТов, и прочих TTYIn.

  9. Этот пользователь поблагодарил S_V_B за это полезное сообщение:
    hobot (06.12.2018)

  10. #66
    Guru Аватар для hobot
    Регистрация
    29.08.2011
    Адрес
    Зеленоград
    Сообщений
    4,960
    Благодарностей: 1151
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Не нравится влияние прерываний на скорость вывода, придется отключать. В связи с этим вопрос, подскажите правильный опрос клавиатуры без прерываний и ЕМТов, и прочих TTYIn.
    правильным считается как раз опрос через системный вызов )
    я всегда опрашивал раньше с регистры адреса и данных
    полистайте тему ПАСКАЛЬ\МАКРО-11 и программирование на УК-НЦ как?

    комок шпор


    Код:
    Вопрос:
    Подскажите, как правильно по системному запретить
    передачу кодов клавиш от клавиатуры на терминал,
    но при этом самому эти коды получать?
    Приведу пример: я вывожу какую-то информацию на экран,
    после чего спрашиваю "Continue?".
    Тут человек должен нажать любую клавишу, и программа
    продолжится. Если делать опрос клавиш через EMT 340,
    то коды клавиш отображаются на экране, а мне этого не надо.
    Если же делать через чтение данных напрямую из канала 0
    (канал клавиатуры), то символы все равно отправляются в
    монитор и потом печатаются. Т.е. какая-то должна быть
    системная функция, запрещающая выводить на терминал коды
    приходящих клавиш, но я ее не знаю.
    
    Ответ:
    
    Для этого надо установить бит TTSPC$ (12й) в $JSW (44).
    
    к примеру:
    
    Код:
    
            .MCALL  .TTYIN,.PRINT,.EXIT
    
    $JSW    =       44
    TTSPC$  =       10000
    
    TEST:   BIS     #TTSPC$,@#$JSW
            .PRINT  #PROMPT
            .TTYIN
            .EXIT
    
    PROMPT: .ASCII  /--->/<200>
    
    печатает подсказку, ждет нажатия клавиши, выходит
    
    
    Другой вариант - запретить прерывания от клавиатуры
    и работать напрямую с регистрами, но этот вариант
    несовместим с виртуальными программами и не будет
    работать в системах с поддержкой многотерминальности.
    
    ---------- Post added at 17:57 ---------- Previous post was at 17:46 ----------
    
    Еще дополнение - иногда полезен бит TCBIT$ (6й) - при его установке 
    TTINR (EMT 340) не останавливается в ожидании символа, а проходит 
    дальше с установленным битом C если ничего не нажато.
    
    -------------------------------------------------------------------------------
    
    .Print    #NextPage        ;Печатаем сообщение "Next page?"
    
            .Print    #KeyON            ;Включить клавиатуру
    
               BIS     #TTSPC$,@#$JSW        ;Запрет отображения символов на экране
               .TTYIN                ;Ожидание нажатия клавиши
               CMP    R0,#13            ;Если код = 13 (Возврат каретки),
               BNE    6$            ;то ожидаем еще один код = 10 (перевод строки)
               .TTYIN                ;     
    6$:             
            .Print    #KeyOFF            ;Отключить клавиатуру
            
            .Print    #NextLine        ;Переходим на следующую строку
    
    ...
    
    NextPage:    .ASCII    "Next page?"<128>
    NextLine:    .ASCII    <13><10><128>
    KeyOFF:        .ASCII    <27><91><50><104><128>
    KeyON:        .ASCII    <27><91><50><108><128>
    
    
    
    ++++++++++++++++++++++++++++++++
    К слову коды клавиш/символов вообще
    удобнее выносить в начало - к примеру так:
    
    Код:
    
    ESC     =       ^O33
    CR      =       ^O15
    LF      =       ^O12
    
    ================================
    ^B - Binary
    ^C - Complement
    ^D - Decimal
    ^F - Floating
    ^O - Octal
    ^R - Radix50 
    ^X - 16-ричные???
    ================================
    
        .TITLE    TXT -- ПЕЧАТЬ ТЕКСТОВЫХ СТРОК
        .MCALL    .PRINT
    
    TXT::    MOV    (R5)+,R1    ;ЧИСЛО АРГУМЕНТОВ
        BEQ    30$        ;EQ - НЕТ АРГУМЕНТОВ
    10$:    MOV    (R5)+,R0    ;АДРЕС ОЧЕРЕДНОГО АРГУМЕНТА
        CMP    #-1,R0        ;ЕСЛИ -1 - АРГУМЕНТ ПРОПУЩЕН
        BEQ    20$        ;...ПРОПУСКАЕМ
        .PRINT            ;ПЕЧАТАЕМ СТРОКУ
    20$:    SOB    R1,10$        ;ЦИКЛИМСЯ ПОКА ЕСТЬ АРГУМЕНТЫ
    30$:    RETURN            ;ВОЗВРАЩАЕМ УПРАВЛЕНИЕ
    
        .END
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Раз уж есть тема по программированию, предлагаю сюда же
    свалить всякие хитрости какие кто пользует
    
    Например такие:
    
    Код:
    
            JSR     Rx,@PC          ;СОХРАНИТЬ Rx В СТЕКЕ, НЕ ТРОГАЯ PSW
    
            MOV     #160000,SP      ;ПОЛНАЯ ОЧИСТКА ПАМЯТИ (56Kb)
            MOV     #4747,@#0       ;И ЧИСТЫЙ ОСТАНОВ БЕЗ ОШИБОК 
            CLR     PC              ;В КОНЦЕ
    
            CALL    @(SP)+          ;ВЫЗОВ СОПРОГРАММЫ
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    И я тоже добавлю - простой способ разворачивания цикла
    2x:
    
    1. Пусть есть цикл, выполняющийся N раз, типа:
    mov N,r0
    1$: cmd ! некая команда, например, clr(r1)+
    sob r0,1$
    
    2. Простой способ разворачивания того ж цикла в линейку:
    mov N,r0
    inc r0
    asr r0
    bcc 2$
    1$: cmd
    2$: cmd
    sob r0,1$
    Идея состоит в том, чтоб позаботиться о нечётном числе
    итераций до начала цикла, и войти внутрь цикла в обход
    стандартного начала. 
    ========================================================
    
    Устанавливает цвет курсора
    8 цветов от 60 до 67 (третий параметр)
    .TTYOUT #33
    .TTYOUT #247
    .TTYOUT #67
    
    Цвет экрана
    .TTYOUT #33
    .TTYOUT #242
    .TTYOUT #60
    
    Цвет символов
    .TTYOUT #33
    .TTYOUT #241
    .TTYOUT #67
    
    Цвет знакоместа
    .TTYOUT #33
    .TTYOUT #240
    .TTYOUT #60
    
    Установка формата экрана
    (61 - 80х24, 62 - 40х24, 63 - 20х24, 64 - 10х24)
    .TTYOUT #33
    .TTYOUT #246
    .TTYOUT #61
    
    Запускаем нужное приложение (на примере 'МЗ1:ДИГГЕР.САЖ')
    .MCALL  .CHAIN
    MOV  #^RMZ1,@#500
    MOV  #^RDIG,@#502
    MOV  #^RGER,@#504
    MOV  #^RSAV,@#506
    .CHAIN
    
    PROCEDURE WAITKEY;
    VAR KEY ORIGIN 177560B: INTEGER;
    BEGIN
    REPEAT KEY:=0 UNTIL KEY>0
    END;
    
    Если завести глобальную переменную
    INKEY ORIGIN 177562B: INTEGER;
    там будет код последней нажатой клавиши
    
    PROCEDURE gotoXY(X,Y: INTEGER);
    BEGIN
     WRITE(CHR(27),'Y',CHR(32+Y),CHR(32+X));
    END;
    
    ---------------------------------------------
    Ну да, если буфер переполнен, то устанавливается
    бит C в PSW. Поэтому код должен быть таким:
    Код:
    
            EMT     ^O341
            BCS     .-2
    
    ---------------------------------------------
    
    
    Код:
    
            .PRINT  #TEXT1          ;БЕЗ <CR><LF>
            .PRINT  #TEXT2          ;<CR><LF> В КОНЦЕ
    
    TEXT1:  .ASCII  /TEXT/<200>
    TEXT2:  .ASCIZ  /TEXT/
    
    
    _______________________________________________
    [свернуть]


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

    S_V_B, вам надо там свой драйвер загружать и подминать под свой контроль все упр. клавиши - только так )

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

    S_V_B, вот эта авторская игра ведёт себя так как будто написана на движке УК-НЦ который я разыскиваю
    https://www.old-games.ru/forum/threa...2#post-1238737

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

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

  11. Этот пользователь поблагодарил hobot за это полезное сообщение:
    troosh (06.12.2018)

  12. #67
    Member Аватар для randomizer
    Регистрация
    05.04.2016
    Адрес
    г. Мончегорск, Мурманская обл.
    Сообщений
    191
    Благодарностей: 59
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно посмотреть как это реализовал nzeemin в своем порте Highway Encounter
    Метка GETKEY:
    Последний раз редактировалось randomizer; 06.12.2018 в 21:54.

  13. Эти 3 пользователя(ей) поблагодарили randomizer за это полезное сообщение:
    hobot (06.12.2018), Oleg N. Cher (06.12.2018), S_V_B (07.12.2018)

  14. #68
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    317
    Благодарностей: 50
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    /* надо там свой драйвер загружать */
    Зачем такие сложности, в любом случае драйвер от прерываний не спасет (поскольку они не только от клавы).
    Игрушка не обязана интегрироваться в операционку главное чтобы корректно завершалась. Многозадачности нет и на время работы программы ты сам волен решать что делать. А драйверы и прочие навороты писались для программ на ЯВУ типа ВАСИК чтобы взаимодействовать с ПП.

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

    Нашел:
    ; Подпрограмма: Опрос клавиатуры; клавиша есть: Z=0, клавиши нет: R0=0 и Z=1
    Z34226:
    TSTB @#177660 ; Нажали клавишу?
    BPL 4$ ; нет символа => выходим
    MOV @#177662, R0 ; код нажатой клавиши
    2$: MOV R0, Z34224
    RETURN
    4$: CLR R0
    MOV R0, Z34224 ; Стираем признак нажатой клавиши
    SEZ ; Возвращаем признак Z=1 -- нажатия нет
    RETURN

  15. #69
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    317
    Благодарностей: 50
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть у кого-нибудь пример правильной работы с FIS (FDIV,FADD)?
    Эмулятор их не понимает (в режиме трассировки), а в слепую я не пойму что не так.

  16. #70
    Veteran
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    1,441
    Благодарностей: 204
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На примере FADD
    07500R FADD
    Регистр R - как указатель стека (если R6 - то стек и получаем)
    Код:
    R-> операнд B биты 16-31 ; (R+00)
        операнд B биты 0-15  ; (R+02)
        операнд A биты 16-31 ; (R+04)
        операнд A биты 0-15  ; (R+06)
    После сложения
    Код:
    R-> операнд B биты 16-31 ; (R+00)
        операнд B биты 0-15  ; (R+02)
        результат биты 16-31 ; (R+04)
        результат биты 0-15  ; (R+06)
    результат=A+B

Страница 7 из 9 ПерваяПервая ... 3456789 ПоследняяПоследняя

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

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

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

  1. AFZ

Похожие темы

  1. "Ресурсы УКНЦ" Влада Жигалова
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 45
    Последнее: 08.07.2018, 10:57
  2. Портирование Lode Runner БК->УКНЦ
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 100
    Последнее: 21.08.2017, 01:20
  3. Ответов: 17
    Последнее: 26.12.2015, 23:22
  4. Ответов: 0
    Последнее: 15.08.2010, 12:38
  5. Ответов: 4
    Последнее: 06.01.2009, 00:08

Ваши права

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