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

User Tag List

Страница 2 из 11 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 102

Тема: Разработка игры Dash

  1. #11
    Activist
    Регистрация
    18.04.2015
    Адрес
    г. Люберцы
    Сообщений
    342
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    26 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    Post

    Если не ошибаюсь, единственный раз, когда мне приходила в голову идея вернуться в IM 1 была программка "System Information V1.01", написанная давным давно забавы ради. Там измерялось число тактов между прерываниями, может кому будет интересно в учебных целях:

    Код:
            ORG     40000
            ENT     $
            DI
            LD      (STACK),SP
            LD      A,#FE
            LD      I,A
    
            LD      H,A
            LD      L,0
            LD      B,L
            INC     A
    L_SAV   LD      (HL),A
            INC     L
            DJNZ    L_SAV
            INC     H
            LD      (HL),A
    
            LD      A,24
            LD      (#FFFF),A
            LD      A,#C3
            LD      (#FFF4),A
            LD      HL,INTER
            LD      (#FFF5),HL
            IM      2
            LD      DE,INTER2
            LD      HL,0
            EI
            HALT
    
    INTER
            LD      (#FFF5),DE
            EI
    L_INC   INC     HL
            JP      L_INC
    
    
    INTER2  LD      DE,-5
            LD      BC,-1
    L_DIV   ADD     HL,DE
            INC     BC
            JR      C,L_DIV
    
            SLA     C
            RL      B
            SLA     C
            RL      B
    
            IM      1
            LD      A,#3F
            LD      I,A
            EI
    STACK   EQU     $+1
            LD      SP,0
    
            PUSH    BC
            LD      HL,TEXT
            CALL    PRINT
            POP     HL
            LD      DE,-1000
            CALL    DIVOUT
            LD      A,"."
            CALL    PR_CHR
            LD      DE,-100
            CALL    DIVOUT
            LD      DE,-10
            CALL    DIVOUT
            LD      DE,-1
            CALL    DIVOUT
    
            LD      HL,_MHZ
            CALL    PRINT
    
            LD      HL,_ROMN
            CALL    PRINT
            LD      HL,5433
            CALL    PRINT
            LD      HL,_D_LF
            CALL    PRINT
    
            LD      HL,#3D00
            XOR     A
    L_SUM   ADC     A,(HL)
            INC     HL
            BIT     6,H
            JR      Z,L_SUM
            CP      237
            LD      HL,_NFONT
            JR      NZ,M_FONT
            LD      HL,_SFONT
    M_FONT
            CALL    PRINT
    
            LD      HL,14446
            LD      A,#FF
    L_AND   AND     (HL)
            INC     HL
            LD      E,A
            LD      A,H
            CP      #3D
            LD      A,E
            JR      NZ,L_AND
            LD      HL,_NUSE
            INC     A
            JR      Z,M_NUSE
            LD      HL,_USE
    M_NUSE  CALL    PRINT
    
            LD      HL,_RAM
            CALL    PRINT
    
            LD      HL,#C000
            LD      BC,#7FFD
    
            LD      A,#10
            OUT     (C),A
    
            LD      D,(HL)
            LD      A,#17
            OUT     (C),A
            LD      A,D
            CPL
            LD      (HL),A
            LD      A,#10
            OUT     (C),A
            LD      A,(HL)
            LD      (HL),D
            CP      D
            LD      HL,_128K
            JR      Z,M128
            LD      HL,_48K
    M128    JR      PRINT
    
    
    
    PR_CHR  PUSH    HL
            RST     #10
            POP     HL
            RET
    
    PRINT   LD      A,(HL)
            AND     #7F
            CALL    PR_CHR
            BIT     7,(HL)
            RET     NZ
            INC     HL
            JR      PRINT
    
    DIVOUT  LD      A,"0"-1
    DIV_L1  ADD     HL,DE
            INC     A
            JR      C,DIV_L1
            SBC     HL,DE
            JR      PR_CHR
    
    TEXT    DEFB    22,0,0,127
            DEFM    '1992 WRITTEN BY ALEXANDER TRUSH'
            DEFB    13
            DEFM    '  Odessa OPI AT903  28-VIII-92'
            DEFB    13,13
            DEFM    'System Information V1.01'
            DEFB    13,13,13
            DEFM    ' CPU FREQ:'
            DEFB    " "+128
    
    _MHZ    DEFM    ' MHz.'
    _D_LF   DEFB    13,13+128
    
    _ROMN   DEFM    ' ROM:'
            DEFB    13,13
            DEFM    ' -Name:'
            DEFB    13," "," "," "+128
    
    _SFONT  DEFM    ' -Standard font.'
            DEFB    13,13+128
    _NFONT  DEFM    ' -Non standard font.'
            DEFB    13,13+128
    
    _NUSE   DEFM    ' -Free zone not used.'
            DEFB    13,13+128
    _USE    DEFM    ' -Free zone used.'
            DEFB    13,13+128
    
    _RAM    DEFM    ' RAM:'
            DEFB    " "+128
    
    _128K   DEFM    '128K'
            DEFB    13,13+128
    _48K    DEFM    '48K'
            DEFB    13,13+128
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	02_SI.png 
Просмотров:	117 
Размер:	5.3 Кб 
ID:	53698  
    Вложения Вложения

  2. #12
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Вопрос №1: игра работает в режиме IM 2, для опроса клавиатуры переходит в IM 0, потом опять возвращается в IM 2. Можно ли оптимизировать вот такой рабочий код? (за счёт отказа от лишних DI/EI)
    1. На время переключения режима прерываний их запрещать не нужно. Классический способ включения прерываний импользует DI/EI для окружения инструкций ld i,a: im n чтобы прерывание не пришло в тот момент, когда режим еще не выставлен, а I уже обновлен.
    2. Не надо врубать IM 0. Надо IM 1. Они не равнозначны.
    3. Я бы на стал щелкать режим имненно на момент опроса. В меню выставляется IM 1 для простого опроса кнопок (для ввода имени, выбора пунктов), а при запуске игры ставится IM 2.
    Последний раз редактировалось Alex Rider; 09.10.2015 в 15:01.
    ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.

  3. #13
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    troosh, помню твой упаковщик, сильно спасал в своё время. Кучу игр им пожал

  4. #14
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от troosh Посмотреть сообщение
    Только если по какой-то причине включаешь IM 2, когда таблица с адресами для него ещё не готова. Кроме того, нужно запрешать прерывания (но режим при этом меня не нужно), если зачем-то решил изменить адреса в этой таблице, - есть риск что прерывание придёт и один из байтов адреса будет иметь уже новое значение, а другой старое.
    Да, это важное замечание. Я формирую таблицу до перехода в режим IM 2 и после этого её уже никогда не трогаю.

    Но если я из IM 2 перейду в IM 0, а потом назад в IM 2, всё будет ок? Не нужно устанавливать регистр I или делать что-то подобное?

    jerri, благодарю за советы как сделать спектрумную игру лучше. Но цель другая - кроссплатформенность. Покажи мне хотя бы один исходник игры для ZX, который ты, а ещё лучше - кто-то ещё, смог бы за вечерок-два осмыслить и переписать для другой платформы, желательно не-Z80-based. Можешь гнать хоть с мегабасика на пуребасик, хоть на чём хочешь. Притом хорошо если переписать понадобится ну 30% кода, ну ладно, 40%. Но не 100%. Ага, нету такого? То-то же. Самый кроссплатформенный язык Си в этом тебе тоже плохой помощник, потому что на нём пишут для ZX как на асме.

    Моя конверсия Dash делается совсем по другим соображениям, это, скорее, исследовательский проект, чем игровой. Оригинальный его исходник на Си, я вам доложу, ещё та песня. Он настолько укоренён в DOS, что там ничего человеческого нет, ну почти

    Затык №1. Не связанный с Обероном, jerri. Сегодня оптимизировал вывод тайла 16x12 точек и опять нашёл баг в SDCC. Подождём-с фикса. Эх, и вот так всё время.

  5. #15
    Master
    Регистрация
    17.05.2005
    Адрес
    г. Абакан
    Сообщений
    694
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне вот лично больше интересно, есть ли смысл использовать два вида прерывания?

  6. #16
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Исходник на языке высокого уровня вообще ничего не знает про прерывания. Это не *****код, Шурик. Это инкапсуляция. Говнокод - это логика вперемешку с низкоуровневыми реализациями. Вам непривычно, я понимаю. Это не базовый опрос клавы для игры, его я делаю по-другому. Это для набирания имени в таблицу рекордов. Всё, вопрос №1 закрыт.

    Вопрос №2: у меня был такой код для "возвращения" на родину (скажем, корректного возврата в Бейсик после выхода из игры). Уже не помню откуда, скорее всего, с какой-то книги:

    Код:
    ; ************************************************
    ; *              Set IM1 mode back               *
    ; ************************************************
        DI
        LD   A,#63
        LD   I,A
        IM   1
        EI
        RET
    Поясните, пожалуйста, не избыточен ли он, и зачем здесь нужно устанавливать регистр I ?

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

  8. #17
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если для какой-то встроенной функции требуется только один какой-то режим прерывания - это значит только одно что функцию надо переписать.
    Кстати что это за функция такая, которой вдруг понадобилось только IM0 - просто интересно.
    Либо вообще нет понимания как ведёт себя процессор в каждом из режимов.

  9. #18
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хорошо что у вас есть понимание режимов, Шурик, я рад. А понимания логики моей игры у вас нет.

  10. #19
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А понимания логики моей игры у вас нет.
    конечно - вы же не говорите какая функция требует IM0 only.
    просто пытаюсь объяснить что то что вы пытаетесь сделать это выглядит как костыль.

  11. #20
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я не только говорю, я даже привёл полностью её исходник. В первом посте темы. Вы невнимательно читали, а с выводами торопитесь.

Страница 2 из 11 ПерваяПервая 123456 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ищу неломанный Boulder Dash 5
    от transman в разделе Игры
    Ответов: 17
    Последнее: 01.07.2021, 23:28
  2. Boulder Dash
    от Cat_Alex/QRP в разделе Игры
    Ответов: 6
    Последнее: 04.03.2013, 21:43
  3. О чем думал автор? Boulder Dash IV
    от JeRrS в разделе Игры
    Ответов: 7
    Последнее: 08.07.2010, 12:52
  4. Slalom demo by Dr.Dash
    от cardin в разделе Демо
    Ответов: 2
    Последнее: 06.02.2010, 06:28

Ваши права

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