User Tag List

Страница 6 из 50 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 666

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

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

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

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

    По умолчанию

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

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

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

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

  3. #2

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

    По умолчанию

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

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

  4. #3

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    373
    Поблагодарили
    310 сообщений
    Mentioned
    13 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] для ДВК.

  5. #4

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 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

  6. #5

    Регистрация
    05.04.2016
    Адрес
    г. Мончегорск, Мурманская обл.
    Сообщений
    414
    Спасибо Благодарностей отдано 
    98
    Спасибо Благодарностей получено 
    68
    Поблагодарили
    45 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #6

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

    По умолчанию

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

  8. #7

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,504
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    712
    Поблагодарили
    594 сообщений
    Mentioned
    13 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

  9. #8

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

    По умолчанию

    Так и делал, вылетает исключение.., я подумал, что в доках перепутали старший и младший байты.. т.к. делю 23. на 24.

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

    хотя пробовал только в эмуляторе т.к. хотел в дебаге посмотреть

  10. #9

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

    По умолчанию

    старший и младший байты или СЛОВА?

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

    По идее - в эмуляторе simh должно быть правильно

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

    Кстати, посмотреть правильное представление и положение слов в памяти можно директивами .FLT2 и FLT4 (хотя вторая - это уже под FPP, FIS только с .FLT2 работает)

  11. #10

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

    По умолчанию

    /* старший и младший байты или СЛОВА? */
    слова конечно

Страница 6 из 50 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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