|
14.10.2009, 00:55
|
#1
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Эмулятор приставки Chip-8
2:WaReZ_MEN - just for fun
После того, как написал интерпретатор Brainfuck возникло желание написать что-то посложнее. Сначала хотел взяться за эмулятор GameBoy'я, но понял, что пока не осилю. В итоге выбор пал на платформу chip8. Точнее это не совсем платформа, а интерпретируемый ассемблер, применявшийся во многих приставках в середине 70-хх. Интересен тем, что здесь наличествуют память, регистры, стек, таймеры, ну и ввод-вывод разумеется. (кому интересно: http://en.wikipedia.org/wiki/CHIP-8 )
На данном этапе полностью реализована эмуляция CPU, дисплея. Осталось сделать обработку клавиш (пока даже не знаю как, сложности там у меня) и таймеры. Возможно с клавиатурой обращусь к вам с вопросами, а то я в программинге с winapi - ноль. Дельфи-то первый раз за 9 лет поставил ))
Ну и сорцов пока не прилагаю, потому что еще все очень сыро. А пока вот рабочий скрин с запущенной игрой типа PacMan:
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Tronix за это полезное сообщение:
|
|
14.10.2009, 14:11
|
#2
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Cделал клавиатуру. Вынес весь процесс эмуляции в отдельный поток. Сейчас дорабатываю видео-вывод, ибо пока есть глюк - если часть спрайта вылезает за границы экрана, то она должна отобразится с другой стороны, а пока не отображается ) Также пока не реализованы таймеры и игра идет просто с засыпанием потока на 1 и временем на перерисовку спрайтов.
Так как в оригинальной приставке было всего 16 клавиш, управление нумпад клавой с включенным NumLock (-,+,*,/,Enter на нумпад клаве тоже учавствуют). Причем во всех играх управление разное. Например в PONG левая палка ездит вверх/вниз клавишами 7,4 а правая палка вверх - плюс, вниз - минус. В игре BRAKEOUT все сделано нормально - влево клавиша 4, вправо - 6. Ну и тд.
Можно пока просто посмотреть простые игры типа BRAKEOUT, TICTAC (крестики-нолики), MAZE (просто рендерит рандомный лабиринт) и тд.
|
(Offline)
|
|
14.10.2009, 18:31
|
#3
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Прикольно, может когда нибудь напишешь нормальный эмулятор для пс2?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Hurrit за это полезное сообщение:
|
|
15.10.2009, 15:46
|
#4
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Сообщение от hgang
Прикольно, может когда нибудь напишешь нормальный эмулятор для пс2?
|
Думаю что вряд-ли
Исправил баг в отрисовке спрайтов за границами экранов, теперь все оке.Теперь не могу синхронизировать поток нормально, бился весь день вчера, в итоге забил. Короче функционально, но иногда нужно лишний раз нажимать reset чтоб вновь открытый файл нормально запустился.
Так же в архиве много новых игр.
|
(Offline)
|
|
17.10.2009, 01:40
|
#5
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Вообщем замучился я с этим потоком блин. То останавливается, то не останавливается =\ Уж сил никаких нет. Выкладываю исходники как есть, дорабатывать наверное уже не буду. Мало комментировано, много временных отладочных вставок, но если вдруг кто-то заинтересуется и будут вопросы - отвечу.
|
(Offline)
|
|
17.10.2009, 03:45
|
#6
|
AnyKey`щик
Регистрация: 07.10.2009
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Эмулятор приставки 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;
все вроде работает также.
|
(Offline)
|
|
17.10.2009, 11:25
|
#7
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Честно говоря не знаю Все это ООП не для меня. Привык я к линейному программированию.
Идея была в том, чтобы вынести всю эмуляцию в отдельный поток. Когда открывается файл, поток нужно остановить, очистить память,стек,регистры, загрузить файл в память и опять запустить поток.
|
(Offline)
|
|
18.10.2009, 04:10
|
#8
|
AnyKey`щик
Регистрация: 07.10.2009
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Понятно, просто вроде приставка то 8битная, как я понял, и вычисления там идут очень быстро, поэтому и подумал что можно все в одном потоке делать Хотя я в эмуляции еще не спец, может чето не то говорю
|
(Offline)
|
|
18.10.2009, 11:07
|
#9
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Сообщение от VasyaTerkin
Понятно, просто вроде приставка то 8битная, как я понял, и вычисления там идут очень быстро, поэтому и подумал что можно все в одном потоке делать Хотя я в эмуляции еще не спец, может чето не то говорю
|
Можно все делать в одном потоке. Если бы я еще знал как в этом дельфи сделать бесконечный цикл, было бы вообще здорово )))
|
(Offline)
|
|
18.10.2009, 13:45
|
#10
|
|
Ответ: Эмулятор приставки Chip-8
Tronix
очевидно :
while true do
begin
...
end;
|
|
|
18.10.2009, 15:02
|
#11
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Сообщение от jimon
Tronix
очевидно :
while true do
begin
...
end;
|
Где? В каком методе или как он там называется. OnActivate, OnShow, OnClick или где? Вообще где основной цикл программы? Если я зафигарю вышеуказанный цикл в методе OnActivate на форме например будут ли работать меенюшки там всякие и тд. Или залипнет программа?
PS: Не очевидно.
|
(Offline)
|
|
18.10.2009, 15:13
|
#12
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Эмулятор приставки Chip-8
OnIdle?
|
(Offline)
|
|
18.10.2009, 15:14
|
#13
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Эмулятор приставки Chip-8
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
18.10.2009, 15:19
|
#14
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Эмулятор приставки Chip-8
Сообщение от ABTOMAT
|
|
(Offline)
|
|
28.10.2009, 11:34
|
#15
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Эмулятор приставки Chip-8
смотри не на Unit1.pas, а на Project1.dpr.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Тут идёт чисто паскаль.
между begin и end вставляй всё что хочешь.
Ненавижу делфи за её припарки мол тут пиши там не пиши
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:04.
|