forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Эмулятор приставки Chip-8 (http://forum.boolean.name/showthread.php?t=9493)

Tronix 14.10.2009 00:55

Эмулятор приставки Chip-8
 
Вложений: 1
2:WaReZ_MEN - just for fun

После того, как написал интерпретатор Brainfuck возникло желание написать что-то посложнее. Сначала хотел взяться за эмулятор GameBoy'я, но понял, что пока не осилю. В итоге выбор пал на платформу chip8. Точнее это не совсем платформа, а интерпретируемый ассемблер, применявшийся во многих приставках в середине 70-хх. Интересен тем, что здесь наличествуют память, регистры, стек, таймеры, ну и ввод-вывод разумеется. (кому интересно: http://en.wikipedia.org/wiki/CHIP-8 )

На данном этапе полностью реализована эмуляция CPU, дисплея. Осталось сделать обработку клавиш (пока даже не знаю как, сложности там у меня) и таймеры. Возможно с клавиатурой обращусь к вам с вопросами, а то я в программинге с winapi - ноль. Дельфи-то первый раз за 9 лет поставил ))

Ну и сорцов пока не прилагаю, потому что еще все очень сыро. А пока вот рабочий скрин с запущенной игрой типа PacMan:

Tronix 14.10.2009 14:11

Ответ: Эмулятор приставки Chip-8
 
Вложений: 6
Cделал клавиатуру. Вынес весь процесс эмуляции в отдельный поток. Сейчас дорабатываю видео-вывод, ибо пока есть глюк - если часть спрайта вылезает за границы экрана, то она должна отобразится с другой стороны, а пока не отображается ) Также пока не реализованы таймеры и игра идет просто с засыпанием потока на 1 и временем на перерисовку спрайтов.

Так как в оригинальной приставке было всего 16 клавиш, управление нумпад клавой с включенным NumLock (-,+,*,/,Enter на нумпад клаве тоже учавствуют). Причем во всех играх управление разное. Например в PONG левая палка ездит вверх/вниз клавишами 7,4 а правая палка вверх - плюс, вниз - минус. В игре BRAKEOUT все сделано нормально - влево клавиша 4, вправо - 6. Ну и тд.

Можно пока просто посмотреть простые игры типа BRAKEOUT, TICTAC (крестики-нолики), MAZE (просто рендерит рандомный лабиринт) и тд.

Hurrit 14.10.2009 18:31

Ответ: Эмулятор приставки Chip-8
 
Прикольно, может когда нибудь напишешь нормальный эмулятор для пс2?

Tronix 15.10.2009 15:46

Ответ: Эмулятор приставки Chip-8
 
Вложений: 1
Цитата:

Сообщение от hgang (Сообщение 121572)
Прикольно, может когда нибудь напишешь нормальный эмулятор для пс2?

Думаю что вряд-ли ;)

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

Tronix 17.10.2009 01:40

Ответ: Эмулятор приставки Chip-8
 
Вложений: 1
Вообщем замучился я с этим потоком блин. То останавливается, то не останавливается =\ Уж сил никаких нет. Выкладываю исходники как есть, дорабатывать наверное уже не буду. Мало комментировано, много временных отладочных вставок, но если вдруг кто-то заинтересуется и будут вопросы - отвечу.

VasyaTerkin 17.10.2009 03:45

Ответ: Эмулятор приставки 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;

все вроде работает также.

Tronix 17.10.2009 11:25

Ответ: Эмулятор приставки Chip-8
 
Честно говоря не знаю :) Все это ООП не для меня. Привык я к линейному программированию.
Идея была в том, чтобы вынести всю эмуляцию в отдельный поток. Когда открывается файл, поток нужно остановить, очистить память,стек,регистры, загрузить файл в память и опять запустить поток.

VasyaTerkin 18.10.2009 04:10

Ответ: Эмулятор приставки Chip-8
 
Понятно, просто вроде приставка то 8битная, как я понял, и вычисления там идут очень быстро, поэтому и подумал что можно все в одном потоке делать :-) Хотя я в эмуляции еще не спец, может чето не то говорю

Tronix 18.10.2009 11:07

Ответ: Эмулятор приставки Chip-8
 
Цитата:

Сообщение от VasyaTerkin (Сообщение 121855)
Понятно, просто вроде приставка то 8битная, как я понял, и вычисления там идут очень быстро, поэтому и подумал что можно все в одном потоке делать :-) Хотя я в эмуляции еще не спец, может чето не то говорю

Можно все делать в одном потоке. Если бы я еще знал как в этом дельфи сделать бесконечный цикл, было бы вообще здорово )))

jimon 18.10.2009 13:45

Ответ: Эмулятор приставки Chip-8
 
Tronix
очевидно :
Код:

while true do
begin
...
end;


Tronix 18.10.2009 15:02

Ответ: Эмулятор приставки Chip-8
 
Цитата:

Сообщение от jimon (Сообщение 121866)
Tronix
очевидно :
Код:

while true do
begin
...
end;


Где? В каком методе или как он там называется. OnActivate, OnShow, OnClick или где? Вообще где основной цикл программы? Если я зафигарю вышеуказанный цикл в методе OnActivate на форме например будут ли работать меенюшки там всякие и тд. Или залипнет программа?
PS: Не очевидно.

johnk 18.10.2009 15:13

Ответ: Эмулятор приставки Chip-8
 
OnIdle? :-)

ABTOMAT 18.10.2009 15:14

Ответ: Эмулятор приставки Chip-8
 
Дельфы - зло. Очевидно.

Tronix 18.10.2009 15:19

Ответ: Эмулятор приставки Chip-8
 
Цитата:

Сообщение от ABTOMAT (Сообщение 121874)
Дельфы - зло. Очевидно.

Согласен )))

Randomize 28.10.2009 11:34

Ответ: Эмулятор приставки 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 вставляй всё что хочешь.


Ненавижу делфи за её припарки мол тут пиши там не пиши


Часовой пояс GMT +4, время: 11:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot