Войти
ФлеймФорумЖелезо

Блеск и нищета 8/16-битных консолей и ПК (56 стр)

Страницы: 155 56 57 58 59 Следующая »
#825
16:49, 23 янв. 2020

Dmitry_Milk
> А вообще мне кажется нет смысла вырывать управление у программ 50 раз в
> секунду.

Это, кстати, довольно таки приближено к реалиям даже Windows, если верить Русссиновичу: http://thelib.ru/books/russinovich_mark/2_vnutrennee_ustroystvo_w… 7-read-7.html

По умолчанию в Windows 2000 Professional и Windows XP потоки выполняются в течение 2 интервалов таймера (clock intervals)
...
этот интервал на большинстве однопроцессорных х8б-систем составляет 10 мс

Выходят те же 50 раз в секунду. :)
> Какой многозадачности действительно не хватало на тех 8-битных компах - это возможности переключаться между задачами по желанию пользователя, без необходимости, чтоб программа работала в фоне - достаточно было, чтоб она в том фоне "спала".
Прежде всего для необходимости многопоточности нужна многопоточная ОС - без неё такое в принципе не нужно. На 8-битках это реально слабо актуально, но на 16-битках уже как мы несколькими страницами назад видели это юзалось на Unix-ах в хвост и в гриву.

gamedevfor
> На ZX48 это просто не эффективно потому что на 90% там будет работа по
> сохранению/восстановлению регистров и только 10% на выполнение задач
Нет, кстати, всё сильно наоборот. Переключение контекста как сделано у меня занимает считанные проценты от общего времени работы. Если в ассемблере Z80 шарить и реалиям программирования на ZX, то это и по листингу видно хорошо - переключатель контекстов занимает всего около 30 инструкций.


#826
16:51, 23 янв. 2020

=A=L=X=
EXX забыл сделать - альтернативный набор нужно также сохранять

#827
16:57, 23 янв. 2020

innuendo
> EXX забыл сделать - альтернативный набор нужно также сохранять

Да, конечно, но это лёгкая версия просто для самого факта. Я даже сперва хотел IY отнять под системный глобальный указатель на хранилище потоков, но потом придумал такую вот легковесную схему.
Более того - уже подумалось, что несложно сделать разные степени "серьёзности" потоков - т.е. можно заявить поток как лёгкий чтобы сохранять только необходимый минимум регистров, а какие то тяжёлые где идут в ход все. Но это уже детали.

#828
17:00, 23 янв. 2020

0iStalker
> DivMMC называется

#829
17:25, 23 янв. 2020

innuendo
> не пиши если не знаешь тему

Ну и что же ты знаешь, умник?

#830
18:33, 23 янв. 2020

gamedevfor
> Ну и что же ты знаешь, умник?

не хами, я хоть по тактам примерно помню сколько

#831
19:20, 23 янв. 2020

gamedevfor
> У тебя ж не общее решение, а какой то костыль - понятно что в таком случае
> будет весьма шустренько.

уйди

#832
(Правка: 8:16) 5:20, 25 янв. 2020

Эстетические чувства всё-таки страдали от того, что предыдущая реализация вытесняющей многозадачности на спектруме была ограничена стеками в ~252 байта, поэтому всё-таки переписал на более серьёзный манер.
Во первых - переместил обработчик прерываний из последней четверти памяти в третью, для совместимости с переключением страниц в моделях старше ZX 48.
Во вторых - немного уплотнил код и данные обработчика прерываний: таблица векторов прерываний из 257 одинаковых байт осталась на $8000, а сам обработчик на $8181 (т.е. таблица заполнена байтов $81 теперь) - таким образом между ними осталось пустое место около $80 байт и в нём я разместил таблицу контекстов, её длину и указатель на текущий контекст.
Контексты сейчас это просто 2 байта хранящие последнее значение стека потока когда переключатель контекстов сохранил в нём все его регистры. Пока без теневых. Вообще есть задумка, что после сохранённого SP еще может быть байт типа сложности потока - при нуле работает как сейчас, а при единице сохраняет еще и теневые регистры. Кроме того еще один байт можно добавить в контекст на ZX 128 - байт выбирающий какую страницу в последней четверти памяти надо активировать. Но это уже непринципиально, как делается понятно и мне лично незачем.
Таким образом переключатель контекстов по прерыванию просто запоминает все текущие регистры в стеке, сам указатель стека сохраняет в активный контекст, переходит к следующему по таблице и восстанавливает из него SP, а из стека потом все регистры прежде чем выйти.
Код переключателя стал всего раза в полтора больше чем предыдущий вариант с "мини-потоками", но почти все ограничения сняты.
Так же для красоты подсоединение основного потока к задачам и запуск переключателя ранее осуществляемое "вручную" сейчас вынесено в отдельную процедуру start_tasks.

+ КОД

#833
(Правка: 10:27) 10:26, 25 янв. 2020

Не ожидал такой подставы от DOSBox :(

На моем Core2Duo 3.16ГГц даже с выставленным cycles=max выполняет цикл

+ Тело цикла - поворот фазы син/косинусной пары и сохранение

чуть больше миллиона раз в секунду. То есть, если поделить на частоту семплирования 44100Гц, получается не больше 20-30 таких операций на один отсчет. И это еще храня состояние и коэффициенты поворота прямо в FPU и не расчитывая их налету из питча. И SSE не дает (ну то есть дает, если дать директиву ассемблеру, но DOSBox на такой команде виснет) :(

#834
(Правка: 10:42) 10:41, 25 янв. 2020

Dmitry_Milk

Странно, тут порядка 10 инструкций с плавающей, т.е. около 10 мегафлопсов получается. А беглый гугл говорит, что у Core 2 Duo на одно ядро 3ГГц порядка 10 гигафлопсов.
Понятно что пик, понятно что как раз в интенсивном SSE, но разница на три порядка действительно смущает.
Судя по той же вики на x86 DOSBox проводит не полную эмуляцию, а может делать динамическую трансляцию и на такие порядки не должно быть задержек.
Может всё-таки в что-то другое упирается?
Можешь еще попробовать конечно какую-нибудь VMWare - там плеер доступен бесплатно, а образ с DOS-ом я думаю найти можно будет.

#835
11:32, 25 янв. 2020

VMWare + DOS или другая вирт-машина:  всё не то. Будет лучше, но местами вообще тормоза. Особенно с графикой.

Практика показала, что для ДОС без ДОС лучше всего выходит в WinXP + VDMSound (для эмуляции SB и не только).

Если по-серьёзному: любой старенький 32-битник с местной барахолки + IDE HDD и будет у вас ДОС !!! )))  Причём образ ДОС можно развернуть в виртуальной машине (VHD) и прямиком записать его на реальный HDD.  У меня получилось так под XP поставить ДОС :)  Дискетами при этом не пользовался.

#836
11:33, 25 янв. 2020

Dmitry_Milk
> Не ожидал такой подставы от DOSBox :(

Это очень тормозной и неточный эмулятор.  ДОСом там и не пахнет.

#837
11:40, 25 янв. 2020

Gradius
> Если по-серьёзному: любой старенький 32-битник с местной барахолки + IDE HDD и
> будет у вас ДОС !!! )))

Ему надо:
а) высвободить всю мощь современных гигагерцовых CPU, желательно даже SSE, но это уже недостижимо наверное, сомневаюсь что 16-битному режиму делали поддержку таких вкусностей
б) распространять демку среди населения
Поэтому это конфликтует с истинными целями.

#838
12:27, 25 янв. 2020

=A=L=X=
> Поэтому это конфликтует с истинными целями.

В общем да, цель "получить Вау!-звук из миниатюрного файла под DOS" в нерасширенном режиме при использовании DOS-эмуляторов похоже обламывается, разве что отказаться от синтезатора и оставить только синтез голоса(одного) + музыка от стандартного MIDI-синтезатора, либо ооо-чень упрощенный синтезатор, но меня такое не устраивает. Буду смотреть путь попасть в расширенный режим из миниатюрного файла без DOS-экстендеров (когда депрессия пройдет).

#839
(Правка: 12:41) 12:41, 25 янв. 2020

Dmitry_Milk
> либо ооо-чень упрощенный синтезатор, но меня такое не устраивает

Странно что такие трудности. Еще на Pentium 200 MMX Unreal 1 костьми ложась на рендер графики тем не менее успевал без проблем довольно продвинутую трекерную музыку играть.
А тут вся мощь должна уйти в одну только музыку - у тебя там что, 1000 инструментов одновременно играет?

Страницы: 155 56 57 58 59 Следующая »
ФлеймФорумЖелезо