Философский у меня вопрос товариши. Сейчас кодю эмулятор 6502 - прикольно, нравится. А на днях так задумался. Ведь мы видим и динамическую картинку и музыку слышим и ещё жмём на клавиши. И всё это в реальном времени. Так я подумал -процик то старый. Как это всё реалиется в нём, подскажите плиз. Заранее благодарен.
ajak Как и в любом другом -- программно. Чего сложного-то? А смысл в эмуляторе процессора? Если уж эмулировать, то ещё и периферию, т.е. всю машину целиком...
censored 8-разрядный микропроцессор, применявшийся в первых компах Aplle (до появления Макинтоша). Позднее лёг в основу процессоров приставок Денди.
Всё верно, пишу эмулятор денди. Основной проц там 6502 - т.е. его модификация без коррекции после опреациями над двоично десятичными числами. Но всё таки можете подробнее про много задачность как это всё реализуется. Подскажите что почитать.Ну вот к примеру я вспомнил великую игру Ларри, так она шла на 286 а там тоже и графа и и музон через бипер да ещё мыша и клава. Но для меня главнее понять как тама звук и видео одновремеено. Подскажите может создать такую тему в другой ветки форума или на другом ресурсе.
ajak Если конкретно многозадачность -- то сохраняются и восстанавливаются регистры процессора. Кроме того, в классическом 6502 ещё и стек пересылать приходилось (там указатель стека всего 8-разрядный, поэтому стек имеет размер 256 байт и размещается в фиксированной области памяти -- если склероз не изменяет, в адресах 0100-01FF). В более поздних версиях вроде как ввели регистр базы стека, что позволяет размещать стек в любом месте памяти -- но насчёт этого достоверно не знаю, не сталкивался. Ну а в Денди наверняка никакой многозадачности нет. И ничего "одновременно" не происходит, всё идёт строго последовательно, но быстро, поэтому человеку и кажется, что одновременно.
Так я не понял под многозадачностью это и понимается, когда идёт всё настолько быстро что не успевыем всё заметить или есть ещё какая-то другая многозадачность.
ajak Есть многозадачность, реализуемая операционными системами, например, Windows и Linux. В них одновременно выполняется несколько задач (программ), а операционная система быстро (десятки или сотни раз в секунду) переключает процессор с одной задачи на другую, из-за чего для человека создаётся иллюзия одновременного выполнения. Причём, следует заметить, все эти задачи понятия не имеют, что они выполняются не в гордом одиночестве: для них создаётся иллюзия, что они непрерывно владеют процессором. Ну а в традиционных игрушках, в том числе для Денди, никакой многозадачности нет: выполняется одна-единственная программа, которая и выполняет все требующиеся действия (чтение с клавиатуры и джойстиков, вывод на экран, проигрывание звука и т.п.).
ajak Найди файл ap_dendy.rar, внутри будет "Архитектура и программирование Денди.doc" Там много молезного найдёшь. В аттаче исходники плеера музыки из бомбермэна, может пригодится. Блин, ненавижу gprs, файл выложил в dump.ru/files/n/n1808217239/
Проснись и пой - эмулей для дендей с сорцами как собак навалом к примеру www.zophar.net/nes.html Собственно как и гамес
А знаеш есть такое понятие как интерес как разобраться в системе, или хобби? Не понимаю как это всё происходит он что по одной ноте играет потом рисует один пиксель или как? Всё ж должно быть синхронизировано. Подскажите что почитать. Ну вот к примеру вопрос.Есть у меня в паскале две процедуры Первая играет музыку Procedure Play_My_Sound(); Вторая рисует картинку -ну пусть изменяющиеся предметы Procedure Draw_My_Primitiv(); И тперь самый главный вопрос.Как сделать всё это в одно и тоже время ,ведь если пока не выполнится первая процедура вторая не начнётся выполняться.
Ну играть постоянно ноту ненадо =) Отдал или синтезатору или таймеру что делать и нота играется, а ты этим временем можешь, до момента начала проигрывания следующей ноты, заняться чемнибудь полезным, клавиатуру опросить или спрайт перерисовать или коллизии объектов посчитать .... ну вобщем стоит расматривать игровую приставку не как 1 процессор который может в 1 момент времени выполнять 1 инструкцию но и как всю "обвязку" вокруг CPU ( таймеры, синтезаторы, сопроцессоры, контролеры etc. ) да и за время пока ты сможешь досчитать до 1 процессор сделает это оч.много раз
Примерно так и есть. Ну так и получается идеальная синхронизация: всё происходит в определённые моменты времени, как задумано программистом. Несколько путей есть. Один указал dag -- пока соответствующая железяка исполняет одну ноту, можно заняться другой работой. Надо лишь "помнить" о том, что нужно вовремя вернуться и поменять воспроизводимую ноту.
ajak Dos Помнишь ? я имею ввиду классический, монозадачный. И Игрушки там эти работали. Если мнемного подумать, но можно вспомнить, что для работы со звуковыми устройствами использовались прерывания, сами устройства могли юзать DMA, и как правило, времени это съедало не так много. А резиденты? Вспомнил? вся эта каша варилась за счет прерываний. Которые отбирали управления у одной кучки кода и передавали другой. Так вот, могу тебя обрадовать, в современных ОС ничего в этом плане не изменилось) В том же порядке используются теже самые инты)) Вот тебе и многозадачность.
Ну канешна знаю... Кстати сам думал над подобным, когда собрал Sega эмуль Gens "невероятно, как это так! х86 эмулирует не тока два проца z80 и Motorola, а еще и микросхему синтезатора! и спрайтовый видеоускоритель... причем практически одновременно!"))))
Прикольно. Спасибо. Да я вспомнил чудесный и эротичный и просто классический квест Ларри с красивой графикой для того врмени и ведь тама и музон играл и мышака работала. И картинка рисовалась. А теперь товарищи приведети линки или кусок кода, или исходник на эту тему а то это всё на словах. Хочется вживую.