User Tag List

Страница 15 из 23 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 225

Тема: Игры аля Doom и Wolf3D для Спектрума...

  1. #141

    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Абсолютно нерешабельная проблема. Подумать только, 8 раз одно и то-же писать... Все, сворачиваем тему...

  2. #142

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ничего никуда не сворачиваем. разберёмся, какие там 8 раз и почему...

    ---------- Post added at 10:57 ---------- Previous post was at 09:24 ----------

    вот кусок оригинального макроса:
    Код:
    cur\\\\6=$+1
            LD DE,0
            LD A,E ;основное направление
          ;IFN mainplus ;основное направление положительно
          ; CPL ;1-основное направление
          ; LD E,A
          ;ENDIF
            LD LX,A ;IX=dist*cos
            MULPOS
           IFN secplus ;побочное направление положительно
            ADD A,D ;побочное направление
            LD B,A
           ;LD HL,(curYX)
    ray\\\\_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\\\\_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort\\\\6
            INC \5 ;e/d
            LD A,(DE)
            RLA 
            JC raysec\\\\6
            INC \3 ;l/h
    raynshort\\\\6
           IFN "\6\6"-"yy"
            SET mapdifbit,L
           ENDIF 
           ELSE 
            LD L,A
            LD A,D ;побочное направление
            SUB L
            LD B,A
           ;LD HL,(curYX)
    ray\\\\_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\\\\_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF
    начнём с того, что метки
    cur\\\\6=$+1
    ray\\\\_YX=$+1
    ray\\\\_YX2=$+1
    и ещё несколько других в макросе не используются (по ним нет переходов). их можно закоментить. Условия компиляции IFN меняются на ifdef. Метки по которым есть переходы в макросе можно заменить на подобные конструкции:
    было - JNC raynshort\\\\6
    стало - jr nc, $+n, где n размер пропускаемого кода до нужного места.
    В этом случае все метки просто комментятся или удаляются.
    Остались под вопросом конструкции типа:
    IFN "\6\6"-"yy" - пока не понял как это понимать вообще. точнее я понимаю, что "\6" это номер аргумента макроса. мне не ясна сама конструкция "\6\6"-"xx". Аргумент 6 - это координата "y". Я могу понять эту запись только как (y+y)-(x+x). Если результат положительный, тогда условие выполняется так, иначе (отрицательный результат или 0) будет выполняться так.
    и конструкции типа INC \2 - это вообще не понял как работает.
    ах да, ещё одни способ обойти эти чудесные макросы - сделать их обычными процедурами. передавать параметры или через стэк или регистры. как угодно. Да, немного тактов потеряем, зато много памяти выигрываем.
    Последний раз редактировалось Sayman; 01.11.2015 в 08:08.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  3. #143

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    ничего никуда не сворачиваем. разберёмся, какие там 8 раз и почему...

    ---------- Post added at 10:57 ---------- Previous post was at 09:24 ----------

    вот кусок оригинального макроса:
    Код:
    cur\\\\6=$+1
            LD DE,0
            LD A,E ;основное направление
          ;IFN mainplus ;основное направление положительно
          ; CPL ;1-основное направление
          ; LD E,A
          ;ENDIF
            LD LX,A ;IX=dist*cos
            MULPOS
           IFN secplus ;побочное направление положительно
            ADD A,D ;побочное направление
            LD B,A
           ;LD HL,(curYX)
    ray\\\\_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\\\\_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort\\\\6
            INC \5 ;e/d
            LD A,(DE)
            RLA 
            JC raysec\\\\6
            INC \3 ;l/h
    raynshort\\\\6
           IFN "\6\6"-"yy"
            SET mapdifbit,L
           ENDIF 
           ELSE 
            LD L,A
            LD A,D ;побочное направление
            SUB L
            LD B,A
           ;LD HL,(curYX)
    ray\\\\_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\\\\_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF
    начнём с того, что метки
    cur\\\\6=$+1
    ray\\\\_YX=$+1
    ray\\\\_YX2=$+1
    и ещё несколько других в макросе не используются (по ним нет переходов). их можно закоментить. Условия компиляции IFN меняются на ifdef. Метки по которым есть переходы в макросе можно заменить на подобные конструкции:
    было - JNC raynshort\\\\6
    стало - jr nc, $+n, где n размер пропускаемого кода до нужного места.
    В этом случае все метки просто комментятся или удаляются.
    Остались под вопросом конструкции типа:
    IFN "\6\6"-"yy" - пока не понял как это понимать вообще. точнее я понимаю, что "\6" это номер аргумента макроса. мне не ясна сама конструкция "\6\6"-"xx". Аргумент 6 - это координата "y". Я могу понять эту запись только как (y+y)-(x+x). Если результат положительный, тогда условие выполняется так, иначе (отрицательный результат или 0) будет выполняться так.
    и конструкции типа INC \2 - это вообще не понял как работает.
    ах да, ещё одни способ обойти эти чудесные макросы - сделать их обычными процедурами. передавать параметры или через стэк или регистры. как угодно. Да, немного тактов потеряем, зато много памяти выигрываем.
    ты кстати зря сократил так имена меток
    дело в том что упоминавшиеся Алоне параметрически метки выглядят весьма хитро.

    то что тебе непонятны указанные пункты означает что ты вообще не понял как работают Макросы в АлАсме

    попробую обьяснить.


    вот оригинальный макрос

    Код:
    ;RAY 1,1,H,L,D,E,y,x
           MACRO RAY
    mainplus=\0 ;основное направление положительно
    secplus=\1 ;побочное направление положительно
    ;\2=основное направление для hl
    ;\3=побочное направление для hl
    ;\4=основное направление для de
    ;\5=побочное направление для de
    ;\6=основное направление
    ;\7=побочное направление
           ;LD DE,(cur\7\6)
    cur\0\1\7\6=$+1
            LD DE,0
            LD A,E ;основное направление
          ;IFN mainplus ;основное направление положительно
          ; CPL ;1-основное направление
          ; LD E,A
          ;ENDIF
            LD LX,A ;IX=dist*cos
            MULPOS
           IFN secplus ;побочное направление положительно
            ADD A,D ;побочное направление
            LD B,A
           ;LD HL,(curYX)
    ray\0\1\7\6_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\0\1\7\6_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort\0\1\7\6
            INC \5 ;e/d
            LD A,(DE)
            RLA 
            JC raysec\0\1\7\6
            INC \3 ;l/h
    raynshort\0\1\7\6
           IFN "\6\6"-"yy"
            SET mapdifbit,L
           ENDIF 
           ELSE 
            LD L,A
            LD A,D ;побочное направление
            SUB L
            LD B,A
           ;LD HL,(curYX)
    ray\0\1\7\6_YX=$+1
            LD HL,0
           IFN "\6\6"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray\0\1\7\6_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort\0\1\7\6
            LD A,(DE)
            RLA 
            JC raysec\0\1\7\6
            DEC \3,\5 ;l/h,e/d
    raynshort\0\1\7\6
           IFN "\6\6"-"yy"
            SET mapdifbit,L
           ENDIF 
           ENDIF 
    
    raynsec\0\1\7\6
            INC HX
           IFN mainplus ;основное направление положительно
            INC \2 ;h/l
           ENDIF 
            LD A,(HL)
            RLA 
            JP C,rayhlq ;b=texx
           IFN mainplus ;основное направление положительно
            INC \4 ;d/e
           ELSE 
            DEC \2,\4 ;h/l,d/e
           ENDIF 
            LD A,B
           IFN secplus ;побочное направление положительно
            ADD A,C
           ELSE 
            SUB C
           ENDIF 
            LD B,A
            JNC raynsec\0\1\7\6
           IFN secplus ;побочное направление положительно
            INC \5 ;e/d
           ENDIF 
            LD A,(DE)
            RLA 
            JC raysec\0\1\7\6
           IFN secplus ;побочное направление положительно
            INC \3 ;l/h
           ELSE        ;побочное направление отрицательно
            DEC \3,\5 ;l/h,e/d
           ENDIF 
            JP raynsec\0\1\7\6
    
    raysec\0\1\7\6
            EXD 
            LD A,B
           IFN secplus ;побочное направление положительно
            SUB C
            DIVPOS
           ELSE 
            ADD A,C
            DIVNEG
           ENDIF 
           IFN mainplus ;основное направление положительно
            CPL 
            LD B,A ;b=texx
           ELSE 
            LD B,A ;b=texx
            CPL 
           ENDIF 
            JP raydeq
           ENDM
    вот процедура рейкаста

    Код:
    ;mainplus=\0 ;основное направление положительно
    ;secplus=\1 ;побочное направление положительно
    ;\2=основное направление для hl
    ;\3=побочное направление для hl
    ;\4=основное направление для de
    ;\5=побочное направление для de
    ;\6=основное направление
    ;\7=побочное направление
    ray1
            BIT 7,L
            JP NZ,ray1b
            RAY 1,1,L,H,E,D,x,y ;1a
    ray1b
            RAY 1,1,H,L,D,E,y,x ;1b
    ray2
            BIT 7,L
            JP NZ,ray2b
            RAY 1,0,H,L,D,E,y,x ;2a
    ray2b
            RAY 0,1,L,H,E,D,x,y ;2b
    ray3
            BIT 7,L
            JP NZ,ray3b
            RAY 0,0,L,H,E,D,x,y ;3a
    ray3b
            RAY 0,0,H,L,D,E,y,x ;3b
    ray4
            BIT 7,L
            JP NZ,ray4b
            RAY 0,1,H,L,D,E,y,x ;4a
    ray4b
            RAY 1,0,L,H,E,D,x,y ;4b
    
    rayhlq
            XOR A
    raydeq
    
    ;теперь раскрываем один из макросов
    вот этот
            RAY 1,1,L,H,E,D,x,y ;1a
    {
    ;RAY 1,1,H,L,D,E,y,x
           MACRO RAY
    mainplus=1 \0 ;основное направление положительно
    secplus=1 \1 ;побочное направление положительно
    ;L \2=основное направление для hl
    ;H \3=побочное направление для hl
    ;E \4=основное направление для de
    ;D \5=побочное направление для de
    ;x \6=основное направление
    ;y \7=побочное направление
           ;LD DE,(curyx)
    cur11yx=$+1
            LD DE,0
            LD A,E ;основное направление
          ;IFN mainplus ;основное направление положительно
          ; CPL ;1-основное направление
          ; LD E,A
          ;ENDIF
            LD LX,A ;IX=dist*cos
            MULPOS
           IFN secplus ;побочное направление положительно
            ADD A,D ;побочное направление
            LD B,A
           ;LD HL,(curYX)
    ray11yx_YX=$+1
            LD HL,0
           IFN "xx"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray11yx_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort11yx
            INC D ;e/d
            LD A,(DE)
            RLA 
            JC raysec11yx
            INC H ;l/h
    raynshort11yx
           IFN "xx"-"yy"
            SET mapdifbit,L
           ENDIF 
           ELSE 
            LD L,A
            LD A,D ;побочное направление
            SUB L
            LD B,A
           ;LD HL,(curYX)
    ray11yx_YX=$+1
            LD HL,0
           IFN "xx"-"xx"
           ;LD D,H,E,L
           ;SET mapdifbit,E
    ray11yx_YX2=$+1
            LD DE,0
           ELSE 
            LD D,H,E,L
           ENDIF 
            JNC raynshort11yx
            LD A,(DE)
            RLA 
            JC raysec11yx
            DEC h,d ;l/h,e/d
    raynshort11yx
           IFN "xx"-"yy"
            SET mapdifbit,L
           ENDIF 
           ENDIF 
    
    raynsec11yx
            INC HX
           IFN mainplus ;основное направление положительно
            INC l ;h/l
           ENDIF 
            LD A,(HL)
            RLA 
            JP C,rayhlq ;b=texx
           IFN mainplus ;основное направление положительно
            INC E ;d/e
           ELSE 
            DEC L,E ;h/l,d/e
           ENDIF 
            LD A,B
           IFN secplus ;побочное направление положительно
            ADD A,C
           ELSE 
            SUB C
           ENDIF 
            LD B,A
            JNC raynsec11yx
           IFN secplus ;побочное направление положительно
            INC D ;e/d
           ENDIF 
            LD A,(DE)
            RLA 
            JC raysec11yx
    
           IFN secplus ;побочное направление положительно
            INC H ;l/h
           ELSE        ;побочное направление отрицательно
            DEC H,D ;l/h,e/d
           ENDIF 
            JP raynsec11yx
    
    raysec11yx
            EXD 
            LD A,B
           IFN secplus ;побочное направление положительно
            SUB C
            DIVPOS
           ELSE 
            ADD A,C
            DIVNEG
           ENDIF 
           IFN mainplus ;основное направление положительно
            CPL 
            LD B,A ;b=texx
           ELSE 
            LD B,A ;b=texx
            CPL 
           ENDIF 
            JP raydeq
           ENDM
    
    
    }
    а если учесть наличие ссылок на эти места из других мест программы и отказ работы в сжасм связок вида.

    dup
    if
    endif
    edup

    то да - беда может быть
    С уважением,
    Jerri / Red Triangle.

  4. #144

    Регистрация
    27.10.2011
    Адрес
    Самара
    Сообщений
    1,248
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    перепишите алласм под виндовс, это проще будет чем с движком разбираться. почему алоне решил что математический процессор ничего не ускорит? в коде игры нет деления, умножения, вычитания и сложения? аппаратные тригонометрические функции позволят вообще другой движок самим неплохо написать, чем связываться с особо хитрым и непонятным движком, у которого ещё и с текстурами серьёзные проблеммы похоже будут вылазить.

  5. #145

    Регистрация
    14.09.2014
    Адрес
    г. Гусь-Хрустальный
    Сообщений
    603
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    GS может выступать в роли математического сопроцессора?

    Скрытый текст

    ZX Spectrum +2 +divIDE + BDI
    Profi 1024k plus
    Scorpion ZS-256 Turbo+
    ZX Evolution rev.C2+NeoGS+SDCard HxC Floppy Emulator
    ZX Evolution rev.C2+ZXM-SoundCard Extreme+ZXM-MoonSound
    AVR ZX Spectrum V2.0
    Орион 128
    [свернуть]

  6. #146

    Регистрация
    27.10.2011
    Адрес
    Самара
    Сообщений
    1,248
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MVV Посмотреть сообщение
    а вот uGFX может.
    это я так понял допплатка с ещё одной fpga, в довесок к reverseU16? этот uGFX уже в прошивке есть или только планируется когда то?

  7. #147

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    перепишите алласм под виндовс
    лучше доработать сжасм. исходники есть.
    при этом, сжасм из аргументов макроса вытягивает в метку содержимое параметров...вроде...но всё ровно ошибки прут.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  8. #148

    Регистрация
    27.10.2011
    Адрес
    Самара
    Сообщений
    1,248
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  9. #149

    Регистрация
    27.10.2011
    Адрес
    Самара
    Сообщений
    1,248
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. #150

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    ничего никуда не сворачиваем. разберёмся, какие там 8 раз и почему...
    Для разбора настоятельно рекомендую написать автомат, который будет собирать модифицированный тобой исходник, сравнивать побайтно с результатами сборки алоновского исходника и вразумительно показывать разницу. Это сэкономит 100500 времени на отладку.
    Цитата Сообщение от Sayman Посмотреть сообщение
    лучше доработать сжасм. исходники есть.
    при этом, сжасм из аргументов макроса вытягивает в метку содержимое параметров...вроде...но всё ровно ошибки прут.
    Сжасм не умеет динамические метки и много чего еще. Он прост как валенок. Проще переписать его с нуля тогда. Но есть один нюанс: это не поможет. Менять движок и делать на его основе игру можно только после полного просветления. А, когда наступит просветление, движок можно легко переписать и на ужасм.
    Цитата Сообщение от Eagle Посмотреть сообщение
    GS может выступать в роли математического сопроцессора?
    Нет. Во-первых, в GS тот же Z80, только побыстрее, он будет считать по тем же алгоритмам, что и ЦП, а ЦП будет его ждать. А еще в GS нельзя загрузить число каким-нибудь OTIR, поэтому циклы обмена с ним будут с лихвой компенсировать разницу в скорости расчета.
    [offtop]Вообще, сопроцессор в идеале должен сам уметь брать данные из памяти ЦП и возвращать в нее результат. А лучше сразу и данные, и команды. Как чуть более медленный вариант - уметь INIR/OTIR для обмена данными. [/offtop]
    В GS можно засунуть не просто примитивную математику, а целиковые алгоритмы, которые можно просчитывать параллельно с отрисовкой. При условии, что эти алгоритмы возвращают единицы байт, а не экран целиком.
    Последний раз редактировалось Alex Rider; 01.11.2015 в 15:09.
    ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.

Страница 15 из 23 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 29
    Последнее: 07.04.2020, 08:56
  2. Игры для Спектрума в mp3 или wav?
    от eugene7730 в разделе Игры
    Ответов: 16
    Последнее: 20.04.2013, 07:36
  3. ZX DOOM
    от Deniz в разделе Игры
    Ответов: 24
    Последнее: 08.10.2012, 09:23
  4. Ответов: 6
    Последнее: 21.06.2011, 09:49
  5. ray casting в стиле wolf3d
    от Виктор в разделе Разный софт
    Ответов: 3
    Последнее: 21.10.2010, 00:56

Ваши права

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