Эмулятор приставки Chip-8
Вложений: 1
2:WaReZ_MEN - just for fun
После того, как написал интерпретатор Brainfuck возникло желание написать что-то посложнее. Сначала хотел взяться за эмулятор GameBoy'я, но понял, что пока не осилю. В итоге выбор пал на платформу chip8. Точнее это не совсем платформа, а интерпретируемый ассемблер, применявшийся во многих приставках в середине 70-хх. Интересен тем, что здесь наличествуют память, регистры, стек, таймеры, ну и ввод-вывод разумеется. (кому интересно: http://en.wikipedia.org/wiki/CHIP-8 ) На данном этапе полностью реализована эмуляция CPU, дисплея. Осталось сделать обработку клавиш (пока даже не знаю как, сложности там у меня) и таймеры. Возможно с клавиатурой обращусь к вам с вопросами, а то я в программинге с winapi - ноль. Дельфи-то первый раз за 9 лет поставил )) Ну и сорцов пока не прилагаю, потому что еще все очень сыро. А пока вот рабочий скрин с запущенной игрой типа PacMan: |
Ответ: Эмулятор приставки Chip-8
Вложений: 6
Cделал клавиатуру. Вынес весь процесс эмуляции в отдельный поток. Сейчас дорабатываю видео-вывод, ибо пока есть глюк - если часть спрайта вылезает за границы экрана, то она должна отобразится с другой стороны, а пока не отображается ) Также пока не реализованы таймеры и игра идет просто с засыпанием потока на 1 и временем на перерисовку спрайтов.
Так как в оригинальной приставке было всего 16 клавиш, управление нумпад клавой с включенным NumLock (-,+,*,/,Enter на нумпад клаве тоже учавствуют). Причем во всех играх управление разное. Например в PONG левая палка ездит вверх/вниз клавишами 7,4 а правая палка вверх - плюс, вниз - минус. В игре BRAKEOUT все сделано нормально - влево клавиша 4, вправо - 6. Ну и тд. Можно пока просто посмотреть простые игры типа BRAKEOUT, TICTAC (крестики-нолики), MAZE (просто рендерит рандомный лабиринт) и тд. |
Ответ: Эмулятор приставки Chip-8
Прикольно, может когда нибудь напишешь нормальный эмулятор для пс2?
|
Ответ: Эмулятор приставки Chip-8
Вложений: 1
Цитата:
Исправил баг в отрисовке спрайтов за границами экранов, теперь все оке.Теперь не могу синхронизировать поток нормально, бился весь день вчера, в итоге забил. Короче функционально, но иногда нужно лишний раз нажимать reset чтоб вновь открытый файл нормально запустился. Так же в архиве много новых игр. |
Ответ: Эмулятор приставки Chip-8
Вложений: 1
Вообщем замучился я с этим потоком блин. То останавливается, то не останавливается =\ Уж сил никаких нет. Выкладываю исходники как есть, дорабатывать наверное уже не буду. Мало комментировано, много временных отладочных вставок, но если вдруг кто-то заинтересуется и будут вопросы - отвечу.
|
Ответ: Эмулятор приставки Chip-8
Хорошая программка! Всегда хотел взглянуть на какой-нибудь эмулятор!
Я только не понял зачем там нужен отдельный поток, попробовал его убрать - сделал TNewThread = class; //не class(TThread) Procedure TNewThread.Execute; Begin while canrun do begin GetOpcode; if delay_timer > 0 then Dec(delay_timer); if sound_timer > 0 then Dec(sound_timer); ExecuteOpcode; Application.ProcessMessages; sleep(1); end; end; все вроде работает также. |
Ответ: Эмулятор приставки Chip-8
Честно говоря не знаю :) Все это ООП не для меня. Привык я к линейному программированию.
Идея была в том, чтобы вынести всю эмуляцию в отдельный поток. Когда открывается файл, поток нужно остановить, очистить память,стек,регистры, загрузить файл в память и опять запустить поток. |
Ответ: Эмулятор приставки Chip-8
Понятно, просто вроде приставка то 8битная, как я понял, и вычисления там идут очень быстро, поэтому и подумал что можно все в одном потоке делать :-) Хотя я в эмуляции еще не спец, может чето не то говорю
|
Ответ: Эмулятор приставки Chip-8
Цитата:
|
Ответ: Эмулятор приставки Chip-8
Tronix
очевидно : Код:
while true do |
Ответ: Эмулятор приставки Chip-8
Цитата:
PS: Не очевидно. |
Ответ: Эмулятор приставки Chip-8
OnIdle? :-)
|
Ответ: Эмулятор приставки Chip-8
|
Ответ: Эмулятор приставки Chip-8
Цитата:
|
Ответ: Эмулятор приставки Chip-8
смотри не на Unit1.pas, а на Project1.dpr.
Код:
program Project1; между begin и end вставляй всё что хочешь. |
Часовой пояс GMT +4, время: 13:21. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot