PDA

Просмотр полной версии : умножение/деление в алгоритмах ZX игр



bigral
11.10.2019, 10:33
В советское время было выпущенно ряд микросхем умножителей, например 1802вр2 (по идее может умножить 2 числа за 500нс, это менее 2х тактов z80 на 3.5mhz). Предположим эту микруху можно подключить к спектруму, но в каких алгоритмах она могла бы помочь? 3D?

jerri
11.10.2019, 12:33
3д конечно, а какие они числа перемножали? 16 битные или 32 битные?

CodeMaster
11.10.2019, 17:03
16 битные или 32 битные?
8-ми, но серия масштабируемая, можно было и 32 сделать.

Destr
11.10.2019, 18:10
3D?
В 3D самую прорву занимает вывод, а вычисления - уже давно насобачились по табличкам, так что особой погоды не сделает.
Разве что в демах всякие декрюнчеры будут шустрей...
Вот если-бы эта микруха умела float умножения/деления + целочисленные знаковые */ да чтоб с выбором разрядности - тогда да, подспорье было-бы очень даже.
А так - баловство, больше требуется микруха которая строила-бы в экранной памяти полигоны (ну типа указываешь адрес где хранятся данные и команда "рисуй"). Оно само там рисует в экран что-то а проц занимается дальше чем нужно...

Aber, meine Herren, das ist keine Spectrum...
(нем."Но, господа, это ведь не Спектрум..." (С) П. Эренфест (в оригинале фраза была про физику))

NEO SPECTRUMAN
16.10.2019, 07:22
(по идее может умножить 2 числа за 500нс, это менее 2х тактов z80 на 3.5mhz)
до
только это
24 такта как минимум на 2 OUT
+2 такта на само умножение
+11 тактов как минимум на чтение 8 битного результата
итого 37 тактов

если же у нас для операндов 2 регистра
то на OUT 28 тактов
2 такта умножение
и при чтении 16 битного результата из 2-х регистров
28 тактов на IN

58 тактов...



самое быстрое софтварное умножение
через логарифмы 8b*8b=8b
по моему дето 52-56 тактов
если не все 47 (давно не использовал забыл)



1802вр2
мало того хардварной умножение давно есть на спектруме
и реализовано оно в zxmc2
и считает там avr и по идеи явно быстрей чем 1802вр2

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


умела float умножения/деления
зачем оно на спектруме?
когда 16 бит integer хватает всем?

Lethargeek
16.10.2019, 08:13
в каких алгоритмах она могла бы помочь?
да любая выборка из двухмерного+ массива с "некруглыми" размерностями
.

ivagor
16.10.2019, 08:40
через логарифмы 8b*8b=8b
по моему дето 52-56 тактов
если не все 47 (давно не использовал забыл)
Знаю вариант на 51 такт, возможно есть и более быстрые. Только логарифмическое приближенное, не для всех задач годится.
А порты умножителя можно и на память отобразить, будет намного удобнее и быстрее. Тут надо, конечно, смотреть конкретные схемы спектрумов, но по крайней мере с записью проблем не должно быть, разве что с чтением. Можно гибридно - писать "в память", читать из портов.

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

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

bigral
16.10.2019, 09:49
А порты умножителя можно и на память отобразить, будет намного удобнее и быстрее. Тут надо, конечно, смотреть конкретные схемы спектрумов, но по крайней мере с записью проблем не должно быть, разве что с чтением. Можно гибридно - писать "в память", читать из портов.

Да порты это тормоз, да еще и проблемы со "стандартизацией", наверно имеет смысл врубить кудато в адреса SOS48 (типа 0x3900), там зашито 0xff потому при чтении будет работать схема "проводное И". Но видимо сам по себе умножитель слабо применим, надо еще к нему какой-то микропрограммный автомат прикручивать на РТ2 + РТ5 + SRAM тогда можно уже думаю намутить какието толковые "макросы" но заносить в экран данные или копировать с памяти в память наверно не выйдет (сильно схемы арбитров памяти видео и z80 разные бывают).

NEO SPECTRUMAN
16.10.2019, 11:38
Очевидно, что отдельный умножитель будет наиболее эффективен при перемножении чисел сравнительно большой разрядности, хотя в играх это вряд ли сильно востребовано.
да и нафик один умножитель
тогда ужо приручивать стм и пусть он делает все подряд

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

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

так понимаю умножалка zxmc2 нигде не эмулируется

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


Знаю вариант на 51 такт,
там где 2 обращение к таблице логарифма
и одно возведение числа (степени того логарифма) в сумму тех 2-х

тобешь
10^(logA+LogB)
можот и 51

но там не работает умножение на 0
хотя я думая при снижении точности ответа в 2 раза
можно это обойти не теряя скорости

ivagor
16.10.2019, 11:41
да и нафик один умножитель
тогда ужо приручивать стм и пусть он делает все подряд
Если не привязываться к 1802ВР2, то конечно еще круче делать "интеллектуальный" математический сопроцессор. Например для 3d вращения такому внешнему устройству передавать координаты и углы поворота, а внутри оно уже перемножает матрицы как может и на что хочет - хранит таблицы синусов/косинусов или быстро считает их (если умеет) на ходу. А спеку остается нарисовать. А можно всю картинку внутри "отрендерить" и передать в спектрум уже в виде копии экрана/части экрана.

NEO SPECTRUMAN
16.10.2019, 16:47
Если не привязываться к 1802ВР2, то конечно еще круче делать "интеллектуальный" математический сопроцессор. Например для 3d вращения такому внешнему устройству передавать координаты и углы поворота, а внутри оно уже перемножает матрицы как может и на что хочет - хранит таблицы синусов/косинусов или быстро считает их (если умеет) на ходу. А спеку остается нарисовать. А можно всю картинку внутри "отрендерить" и передать в спектрум уже в виде копии экрана/части экрана.

а чего просто не взять готовый ngs
который и так ужо использовали один раз как видео карту
и пакалупать ее набортный acex в направление повышения вычислительных возможностей спецтрума
железка уже готовая и распространена в некотором количестве
смысол изобретать велосипед?

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

так же на борту есть раскочегаренный z80
что ищо нужно для счастия?


ну допилять тамошнюю dma
чтоб можно было писать\читать из спека по определенным нужным адресам
а не тупо по всем подряд по кругу на сколько хватит памяти как щас

какието расчеты на себя сможет брать и z80

+карта хоть как то эмулирется уже сейчас
и можот новые порты кто нить да поддержит (не один так другой унриалописатель)

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


А спеку остается нарисовать. А можно всю картинку внутри "отрендерить" и передать в спектрум уже в виде копии экрана/части экрана.
да хоть щас
загружаем свой рендерер в ngs
там рендерим
и читаем спектрумом из ngs обратно

можно передавать только координаты объектов каждый кадр

...к сожалению ngs не может читать\писать в спектрум
только спектрум может читать\писать нгс
что в общем то не очень приятно\удобно

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

смысле через ДМА

если же делать все через Ж... порты
то это слоупочно как для спектрума так и для нгс одновременно...
...и скорость расчета помножится на 0
скоростью обратной передачи результата...

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


...и скорость расчета помножится на 0
скоростью обратной передачи результата...
хотя например gs \ngs
можно заюзать для физических расчетов
когда нужно передать обратно только координаты кучи объектов насыпанных друг на друга
вот тут скорости передачи классическим гс-ным способом может хватить

можно вообще запихнуть все в гс
а спектруму останеться только посылать нажатые клавиши и отрисовывать спрайты \ играть звуки

bigral
16.10.2019, 18:51
а чего просто не взять готовый ngs
который и так ужо использовали один раз как видео карту
и пакалупать ее набортный acex в направление повышения вычислительных возможностей спецтрума
железка уже готовая и распространена в некотором количестве
смысол изобретать велосипед?

ngs это уже не ретро тех а очень даже современный потому, тут скорее возникает вопрос про смысл изобретения самого ngs

zx_
16.10.2019, 19:25
NEO SPECTRUMAN, а где почитать про умножалку zxmc2 ?


bigral, gs вполне ретро
ngs под вопросом конечн

NEO SPECTRUMAN
16.10.2019, 19:45
так а смысол тада обсуждать изобретения умножателя который так же не ретро?
и чего он не ретро?

он такой жо не ретро как и пентева например

про прочие новоделы
пентагоны на одной альтере вообще молчу...

про эти ваши резиновые НЕксты тем более молчу
(пушо мало того что резиновая Зина так еще и "новый стандарт"...)


сам жо классический гс родом из мохнатых тех самых 90-х

да и нгс-у ужо 10+ лет...

ужо даже PS2 успели превратится в ретро...


а для меня не ретро ставить в спектрум ПЦ-шные планки памяти
ну вообще не ретро а ПИСЮКАНСТВА...

хотя начали такое городить тоже фиг знает когда еще

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


а где почитать про умножалку zxmc2 ?
https://zx-pk.ru/threads/609-zx_multi_card.html?p=118624#post118624

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

тоесть дооостаточно давно на спектруме умножалка :)

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

положив сверху +14 тактов и 256 байт таблицы (1/x)*256
можно умножалку легко превратить в делилку c повышением разрядности\дробной частью...

zx_
16.10.2019, 21:28
NEO SPECTRUMAN, caro не развил тему умножителя в прошивке 2.7
а ведь хотел , как только выпустил 2.6

bigral
17.10.2019, 10:35
bigral, gs вполне ретро, ngs под вопросом конечн

gs конечно ретро, его можно рассматривать как еще 1 паралельно работающий спектрум, по идее может добавить памяти и ускорить вычисления раза 1.5...1.8, ngs и zx evo ясно что никакое не ретро, они позволяют эмулировать ретро (т.е. gs и pentagon\atm\scorpion), но предложение было не про использование этой их возможности а совсем других свойств (которые явно не ретро)

чтоб не путаться далее в рассуждениях, более менее четко границы этого самого "ретро" можно очертить как: ">4000nm" (ну и как производные от этого "<25mhz" ">4.5V" "<4Mb" и т.д.)

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


а для меня не ретро ставить в спектрум ПЦ-шные планки памяти ну вообще не ретро а ПИСЮКАНСТВА..

обычный DRAM 80ns 5V может быть уже и по 1000nm технологии сделан, уже как бы не РУ6, но если использовать вместо РУ6 (в схеме требующей 150ns) то вполне себе еще ретро (во всяком случае эти же чипы стояли в atari st и amiga)

NEO SPECTRUMAN
17.10.2019, 12:21
ngs под вопросом конечн
единственное что не ретро в нгс
это мп3 декодер
который вощем то не ясно что забыл в нгс-е
но в принципе пусть будет

bigral
17.10.2019, 12:30
единственное что не ретро в нгс
это мп3 декодер
который вощем то не ясно что забыл в нгс-е
но в принципе пусть будет

а fpga? какие частоты она поддерживает? по какой технологии произведена?

NEO SPECTRUMAN
17.10.2019, 13:13
а fpga? какие частоты она поддерживает? по какой технологии произведена?
чета приверженцев некста эти вопросы не волнуют...
а так я хз
нужно открывать схему и гуглить

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


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

svinka
17.10.2019, 14:04
Один из первых математических сопроцессоров называется AMD am9511 Имеет 8 битшину данных и отлично работает в паре с z80

ivagor
17.10.2019, 14:32
Если не изменяет память, то на форуме была тема про am9511/9512. Сугбо имхо они больше подходят в качестве сопроцессора для поддержки математической библиотеки языка высокого уровня. Хотя и в играх можно использовать, но они все же не такие быстрые, как хотелось бы.

bigral
17.10.2019, 17:42
чета приверженцев некста эти вопросы не волнуют...
а так я хз нужно открывать схему и гуглить

Всякие бывают интересы, мне например не ясен смысл гремучей смеси новых технологий и ретро железа в готовых продуктах. Я допускаю смысл такого в рамках исследования и debug-a, ну или эмуляции внешних накопителей, или замены ЭЛТ телика на LCD. Но когда например лепят raspberry pi на шину оригинального zx-a в виде signal processor-a чтоб эмулировать ULA и выводить HDMI сигнал... это уже по-моему явный изврат (или сильная жажда баблища на пару с неадекватностью). Про ALTERA могу сказать что все что сейчас применяют давно уже не укладывается в рамки retro которые я ранее озвучил, вот дока: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwi9r7vst6PlAhXEZ1AKHdZdDKIQFjAAegQIARAC&url=http%3A%2F%2Fwww.kumikomi.net%2Ffpga%2Fsample% 2F0001%2FFPGA01_084_Altera.pdf&usg=AOvVaw3ZYpOeBHiBEu0SxqTgiVgm

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


Если не изменяет память, то на форуме была тема про am9511/9512. Сугбо имхо они больше подходят в качестве сопроцессора для поддержки математической библиотеки языка высокого уровня. Хотя и в играх можно использовать, но они все же не такие быстрые, как хотелось бы.

Это точно, на x86 давно были эти самые i8087, 287, 387... и стали их применять только в 3D играх типа QUAKE, до этого момента стоили эти чипы как современные видеоадаптеры и применялись токо в CAD-ах и в ЯВУ.

ivagor
17.10.2019, 18:17
Извините, оффтоп.
До пентиума FPU были медленные. А в пентиуме FPUшное умножение стало очень быстрым (даже быстрее целочисленного CPUшного) и появился смысл использовать его в 3d игрушках, вот quake и стал пионером.

Lethargeek
17.10.2019, 18:22
на x86 давно были эти самые i8087, 287, 387... и стали их применять только в 3D играх типа QUAKE,
в некоторых симуляторах применялись и даже для чего-то в SimCity - https://www.vogons.org/viewtopic.php?t=28177

CodeMaster
17.10.2019, 18:53
в некоторых симуляторах применялись и даже для чего-то в SimCity
Возможно ради спортивного интереса.

Lethargeek
17.10.2019, 19:56
Возможно ради спортивного интереса.
аж +50% интереса чувак натестил

NEO SPECTRUMAN
17.10.2019, 19:58
caro не развил тему умножителя в прошивке 2.7
а ведь хотел , как только выпустил 2.6

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


можно разве что
если есть лишние 256 байт под таблицы
запилить полухардварное деление
с достаточно большой скоростью


кстате zxmc2 вроде бы по дефолту впилен в феникс

zx_
18.10.2019, 13:20
NEO SPECTRUMAN, вот автору скажи пжлста!

https://zx-pk.ru/threads/609-zx_multi_card/page143.html

загрустил чтото caro

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

NEO SPECTRUMAN, вот автору скажи пжлста!

https://zx-pk.ru/threads/609-zx_multi_card/page143.html

загрустил чтото caro