Автор Тема: Проект "Феникс"  (Прочитано 401519 раз)

0 Пользователей и 12 Гостей просматривают эту тему.

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Проект "Феникс"
« : 17 Декабрь 2010, 23:27:14 »
Первый открытый релиз состоялся 20.12.14, все подробности тут: http://www.arts-union.ru/node/23
« Последнее редактирование: 17 Май 2016, 17:47:13 от Altmer »
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Re: Проект "Феникс"
« Ответ #525 : 03 Сентябрь 2013, 08:25:52 »
Как-то так получилось, что пока вместо аппаратного рендера сварганил дизассемблер DSP инструментов, вот примерчик mixer8x2:
//000: 5C80 8000 801D                Y <= ((M2*M1)>>11) { M1<=[LeftGain0], M2<=[Input0], BS<=0x10 }
//003: 5C27 8000 8020                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain1], M2<=[Input1], BS<=0x7 }
//006: 5C27 8000 8023                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain2], M2<=[Input2], BS<=0x7 }
//009: 5C27 8000 8026                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain3], M2<=[Input3], BS<=0x7 }
//00C: 5C27 8000 8029                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain4], M2<=[Input4], BS<=0x7 }
//00F: 5C27 8000 802C                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain5], M2<=[Input5], BS<=0x7 }
//012: 5C27 8000 802F                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain6], M2<=[Input6], BS<=0x7 }
//015: 5C27 8000 8032                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[LeftGain7], M2<=[Input7], BS<=0x7 }
//018: 8000                          NOP
//019: 2427 8906                     [0x106] <= Y <= (A1<<4)+Y CLIP { A1<=[0x106], BS<=0x7 }
//01B: 5C80 8000 8000                Y <= ((M2*M1)>>11) { M1<=[RightGain0], M2<=[Input0], BS<=0x10 }
//01E: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain1], M2<=[Input1], BS<=0x7 }
//021: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain2], M2<=[Input2], BS<=0x7 }
//024: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain3], M2<=[Input3], BS<=0x7 }
//027: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain4], M2<=[Input4], BS<=0x7 }
//02A: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain5], M2<=[Input5], BS<=0x7 }
//02D: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain6], M2<=[Input6], BS<=0x7 }
//030: 5C27 8000 8000                Y <= ((M2*M1)>>11)+Y CLIP { M1<=[RightGain7], M2<=[Input7], BS<=0x7 }
//033: 8000                          NOP
//034: 2427 8907                     [0x107] <= Y <= (A1<<4)+Y CLIP { A1<=[0x107], BS<=0x7 }
//036: 8380                          Sleep
//037: 8000                          NOP

Так что скоро системные требования эмулятора резко снизятся за счет статической рекомпиляции инструментов, в среднем думаю на 20-40% :)
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Evgen-san

  • REALьный 3DOшник
  • Ветеран
  • *
  • Сообщений: 1378
Re: Проект "Феникс"
« Ответ #526 : 04 Сентябрь 2013, 05:20:55 »
твой эмулятор наверно будет без проблем работать даже на AMD E2-1800, не очень производительный гибридный процессор, Винь7 подтормаживает, зато встроенный видеопроцессор достаточно мощный :)
R. E. A. L. 3DO Interactive Multiplayer

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Re: Проект "Феникс"
« Ответ #527 : 05 Сентябрь 2013, 09:08:54 »
На каком-то видео Яранги видел пачку биосов в эмуляторе. Там вроде анвиловская американка была.
Мне интересно про Road Rash, он на эмуляторе тоже будет говорить, что ему памяти для музыки не хватает?

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Re: Проект "Феникс"
« Ответ #528 : 05 Сентябрь 2013, 12:02:00 »
Да нет, работает с обоими биосами.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Yaranga

  • Гость
Re: Проект "Феникс"
« Ответ #529 : 06 Сентябрь 2013, 09:19:50 »
ПАУК, сообщение не выдаётся, но с обычным анвиловским биосом не играют мидюшки во время заездов. А вот с девелоперским (Altmer, ничего, что я его здесь упомянул?) всё работает как с обычным Мадам/Клио. Ещё один закрытый ролик не для всех:
http://youtu.be/L_eioI2T-hk

Оффлайн Evgen-san

  • REALьный 3DOшник
  • Ветеран
  • *
  • Сообщений: 1378
Re: Проект "Феникс"
« Ответ #530 : 06 Сентябрь 2013, 15:28:00 »
Yaranga
ты жесток, взял женщину задавил ;D
R. E. A. L. 3DO Interactive Multiplayer

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Re: Проект "Феникс"
« Ответ #531 : 06 Сентябрь 2013, 18:36:23 »
Altmer, ничего, что я его здесь упомянул?
http://youtu.be/L_eioI2T-hk

Ничего, я думаю :)
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Re: Проект "Феникс"
« Ответ #532 : 06 Сентябрь 2013, 19:06:33 »
ПАУК, сообщение не выдаётся, но с обычным анвиловским биосом не играют мидюшки во время заездов.
А ты в меню проверял? Точно не помню, но вроде в меню эта надпись была, здесь что ли:

(Единственная фотка была на 3допленете, сожрал радикал)
Просто интересно, неужели от биоса это зависит? Я думал, они все на панасах одинаковы.

Yaranga

  • Гость
Re: Проект "Феникс"
« Ответ #533 : 06 Сентябрь 2013, 20:30:51 »
Нет, там не столько от биоса, там железо разное - более новый чип Анвил совмещает в себе возможности чипов Мадам и Клио. А вот и в меню проверил - с анвиловским биосом просто нет пункта "музыка в гонке". Как и на реальном железе.
http://youtu.be/Lts5hzo8jjs

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Re: Проект "Феникс"
« Ответ #534 : 06 Сентябрь 2013, 21:35:22 »
Нашёл, где видел сдохшое фото с надписью нехватки памяти: http://forum.3doplanet.ru/viewtopic.php?p=9613#p9613 Там же подальше твоё видео с кучей биосов.
А если анвиловский биос затолкать в эмулятор ФриДО?

Yaranga

  • Гость
Re: Проект "Феникс"
« Ответ #535 : 06 Сентябрь 2013, 22:31:16 »
А, ну может на каких-то версиях игры будет и сообщение, все не проверял.
Кроме Феникса с этим биосом ни один эмулятор 3DO не работает.

Оффлайн ПАУК

  • Постоялец
  • ***
  • Сообщений: 151
Re: Проект "Феникс"
« Ответ #536 : 06 Сентябрь 2013, 22:36:45 »
Понятно, спасибо :)
А что за девелоперский биос?

Yaranga

  • Гость
Re: Проект "Феникс"
« Ответ #537 : 06 Сентябрь 2013, 23:08:44 »
А что за девелоперский биос?
Просто заставка другая и при загрузке выводит лог. Внутри практически не отличается от FZ10-mc, а вот анвиловский весьма заметно отличается.
Впрочем, пересмотрел. Вру. Отличается довольно существенно, но ядро то же самое, что в обычном. А в анвиловском больше файлов в System/Audio/dsp/ - может потому и памяти для мидей в Род Рэше не хватает?
« Последнее редактирование: 06 Сентябрь 2013, 23:23:12 от Yaranga »

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Re: Проект "Феникс"
« Ответ #538 : 09 Сентябрь 2013, 19:25:10 »
Впрочем, пересмотрел. Вру. Отличается довольно существенно, но ядро то же самое, что в обычном. А в анвиловском больше файлов в System/Audio/dsp/ - может потому и памяти для мидей в Род Рэше не хватает?

Инструменты никогда не грузятся все сразу, только нужные, объем памяти DSP стабилен во всех вариантах железа - 1024 команды. Кроме того - из биоса инструменты играми вряд ли используются, это возможно, но мало вероятно.

ПС. Буквально сейчас доделал анализатор инструментов, который на лету определяет что загружено в ДСП, теперь остается переписывать инструменты и подменять их готовыми функциями на С++ :) На первом уровне гекса к примеру такой набор инструментов:
("head", "tail", "oscupdownfp", "mixer8x2", "varmono8", "varmono8", "varmono8", "varmono8", "varmono8", "varmono8", "halfmono8")
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Re: Проект "Феникс"
« Ответ #539 : 10 Сентябрь 2013, 18:29:16 »
Переписал на скорую руку один инструмент для гекса:

//000: 4620 8814 8000                [Phase] <= Y <= (A1<<4)+(A2<<4) { A1<=[Phase], A2<=[Frequency], BS<=0x0 }
//003: A813                          BranchIf(N) 0x13
//004: D826                          BranchIf(!C) 0x26
//005: 2400 8019                     Y <= @(A1<<4) { A1<=[Toggle], BS<=0x0 }
//007: A80C                          BranchIf(N) 0xC
//008: 4486 800E 8011                [OldVal] <= Y <= (A1<<4) LSL 8 { A1<=[SampleHold], BS<=0x16 }
//00B: 841C                          Jump 0x1C
//00C: 4480 801D 801E                [SampleHold] <= Y <= (A1<<4) { A1<=[InFIFO], BS<=0x10 }
//00F: 41A0 DF00 8016                [OldVal] <= Y <= Y&(A1<<4) { A1<=0xFF00, BS<=0x10 }
//012: 8423                          Jump 0x23
//013: 4640 8827 F000                [Phase] <= Y <= (A1<<4)-(A2<<4) { A1<=[Phase], A2<=0x8000, BS<=0x0 }
//016: 9828 8021                     MOV [OldVal], [NewVal]
//018: 4620 8800 F000                [Toggle] <= Y <= (A1<<4)+(A2<<4) { A1<=[Toggle], A2<=0x8000, BS<=0x0 }
//01B: A823                          BranchIf(N) 0x23
//01C: 4480 8000 8024                [SampleHold] <= Y <= (A1<<4) { A1<=[InFIFO], BS<=0x10 }
//01F: 41A0 DF00 8025                [NewVal] <= Y <= Y&(A1<<4) { A1<=0xFF00, BS<=0x10 }
//022: 8426                          Jump 0x26
//023: 4486 8000 802B                [NewVal] <= Y <= (A1<<4) LSL 8 { A1<=[SampleHold], BS<=0x16 }
//026: 7D40 802C 8029 8000           Y <= ((M2*M1)>>11)-(A1<<4) { M1<=[Phase], M2<=[OldVal], A1<=[OldVal], BS<=0x0 }
//02A: 5C40 8000 8000                Y <= ((M2*M1)>>11)-Y { M1<=[NewVal], M2<=[Phase], BS<=0x0 }
//02D: 4C80 8000 8000                [Output] <= Y <= (((Y>>4)*M1)>>11) { M1<=[Amplitude], BS<=0x10 }
//030: 8380                          Sleep
//031: 8000                          NOP


int dsp3DO::varmono8_50_R8KT23()
{
    uint16 NewVal=NMem[PC+0x17]&(~0xFC00);
    uint16 OldVal=NMem[PC+0xA]&(~0xFC00);
    uint16 Phase=NMem[PC+0x1]&(~0xFC00);
    uint16 SampleHold=NMem[PC+0x9]&(~0xFC00);
    uint16 Toggle=NMem[PC+0x6]&(~0xFC00);
    uint16 Output=NMem[PC+0x2F]&(~0xFC00);
    uint16 InFIFO=NMem[PC+0xd]&(~0xFC00);
    uint16 Frequency=NMem[PC+0x2]&(~0xFC00);
    uint16 Amplitude=NMem[PC+0x2E]&(~0xFC00);

    int32 _A1=((int32)((int16)ireadh(Frequency)))<<16;
    int32 _A2=((int32)((int16)ireadh(Phase)))<<16;
    int32 _M;

    acc=(_A1)+(_A2);
    iwriteh(Phase,acc>>16);

    bool _c=ADDCFLAG(_A1,_A2,acc);

    if(acc<0)goto label_0x13;
    if(!_c)goto label_0x26;

    _A1=((int32)((int16)ireadh(Toggle)))<<16;
    if(_A1<0)goto label_0xC;

    _A1=((int32)((int16)ireadh(SampleHold)))<<24;
    iwriteh(OldVal,_A1>>16);
    goto label_0x1C;

label_0xC:

    _A1=((int32)((int16)ireadh(InFIFO)))<<16;
    iwriteh(SampleHold,_A1>>16);
    _A1&=0xff00<<16;
    iwriteh(OldVal,_A1>>16);
    goto label_0x23;

label_0x13:

    _A1=((int32)((int16)ireadh(Phase)))<<16;
    acc=_A1-0x80000000;
    iwriteh(Phase,acc>>16);
    iwriteh(OldVal,ireadh(NewVal));
    _A1=(((int32)((int16)ireadh(Toggle)))<<16)+0x80000000;
    iwriteh(Toggle,(_A1)>>16);
    if(_A1<0)goto label_0x23;

label_0x1C:

    _A1=((int32)((int16)ireadh(InFIFO)))<<16;
    iwriteh(SampleHold,_A1>>16);
    _A1&=0xff00<<16;
    iwriteh(NewVal,_A1>>16);
    goto label_0x26;

label_0x23:

    _A1=((int32)((int16)ireadh(SampleHold)))<<24;
    iwriteh(NewVal,_A1>>16);

label_0x26:

    _A1=((int32)((int16)ireadh(OldVal)));
    _M=((int32)((int16)ireadh(Phase)));
    acc=(((_A1*_M)<<1)&0xfffff000)-(_A1<<16);
    _A1=((int32)((int16)ireadh(NewVal)));
    acc=(((_A1*_M)<<1)&0xfffff000)-acc;
    _M=((int32)((int16)ireadh(Amplitude)));
    acc=((((acc>>16)*_M)<<1)&0xfffff000);
    iwriteh(Output,acc>>16);

    PC+=0x30;

    return 0x26;

}

Получил прирост производительности в 6%, что уже неплохо, ближайшее время буду писать декомпилятор, ибо лень каждый инструмент руками делать, я их лучше потом пооптимизирую :)

- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"