Page 2 of 4

Re: Эмулятор ZX Spectrum

Posted: Mon Feb 11, 2008 7:33 pm
by Ghost
mike.dld - толково придумал )))

andrew_programmer - например это работает так:
t = time_stamp();
z80_run(100);
t = time_stamp() - t;
sleep(CT - t); // пусть параметр в миллесекундах

где CT - сремя в мс выполнения 100 тактов на целевой машине (Z80)

только тут надо определится с камнем - зилоги выпускали все кому не лень и с разыми частотами.

и еще не надо забывать что выполнение (эмуляция) целевого кода, ввод данных (клавиатура/джойстик/etc) и отображение вирт. экрана должно обрабатыватся в разных потокам (хотя в отображение и ввод можно объединить) иначе это будет не эмулятор а пошаговая головная боль.

Re: Эмулятор ZX Spectrum

Posted: Tue Feb 12, 2008 7:40 am
by Albom
частоту Z80 думаю взять стандартную - 3,5 МГц (хотя можно сделать в виде переменной и изменять, например, разгонять до 7 МГц, как это делали радиолюбители на настоящих спектрумах, или вообще не осуществлять задержки, тем самым можно быстрее прогонять некоторые циклы с вычислениями)

Re: Эмулятор ZX Spectrum

Posted: Wed Jun 25, 2008 5:42 pm
by Albom
Проект жив!!!

После 2 переписываний с нуля ядра эмулятора проца Z80 решил взять готовое. Выбор остановился на ядре, которое написал Santiago Romero Iglesias.
За день напрограммировал эмулятор, который в принципе запускается и даже грузит файлы SNA. Но сделать ещё нужно очень много.

Кто-нибудь знает, какая клавиша (в матрице спектрума) соответствует BackSpace?

Re: Эмулятор ZX Spectrum

Posted: Thu Jun 26, 2008 10:11 am
by Alver
Клавиша BackSpace (или по спектрумовски DELETE) набирается комбинацией CAPS/0 а значит соответственно по портам #FEFE и #EFFE выдает значение ???11110b, где ??? - биты остающиеся от состояния шины данных ( как правило 111 но если шина не стабильна то могут прыгать).
Вопрос на засыпку: твой эмуль проца обрабатывает регистр регенерации?

Re: Эмулятор ZX Spectrum

Posted: Thu Jun 26, 2008 6:56 pm
by Albom
Alver
Спасибо за подсказку по клавиатуре. Сделал BackSpace, но он стирает всю строку, а не последний символ. Почему?
Вопрос на засыпку: твой эмуль проца обрабатывает регистр регенерации?

Точно на засыпку! :) Ядро вроде поддерживает обработку этого регистра, но если честно я не пока не разбирался и сам его не обрабатывал.

P.S. Я живого спектрума не видел, пользовался только эмуляторами. Из инфы только 1 книга и немного факов, в основном на инглише.

Re: Эмулятор ZX Spectrum

Posted: Thu Jun 26, 2008 8:18 pm
by Alver
Сделал BackSpace, но он стирает всю строку, а не последний символ. Почему?
Гдето глюк. А стирает где, в командной строке?
Я живого спектрума не видел, пользовался только эмуляторами. Из инфы только 1 книга и немного факов, в основном на инглише.
А у меня вся не слишком большая инфа по тетрадкам, да на шкафу еще Profi+ с 512 kb RAM валяется, а диски поразмагнитились давно(жалко) :( .
Вот тут есть много книжек, не знаю может чего пригодится. http://trd.speccy.cz.

Re: Эмулятор ZX Spectrum

Posted: Thu Jun 26, 2008 10:19 pm
by Gargo
Хочется задать вопрос немножко не по теме. А какой платформы эмулятор написать проще: Денди или Спектрум?

Re: Эмулятор ZX Spectrum

Posted: Thu Jun 26, 2008 10:34 pm
by Alver
Той, о которой больше знаешь.

Re: Эмулятор ZX Spectrum

Posted: Fri Jun 27, 2008 8:43 am
by Ghost
Alver прав. Но из опыта замечу что под NES видюха (PPU) сложнее Спектрумовского, и форматов образов на порядок больше.

Re: Эмулятор ZX Spectrum

Posted: Fri Jun 27, 2008 5:49 pm
by Alver
Зы, а если прилично эмулировать Спектрум, то (ну расширения памяти не проблема) добавь минимум AY-3-8910(12) и BetaDiskInterface с TR-DOS . Ну а если очень хорошо эмулировать то еще там всякие Kempston Mouse, GeneralSound, COVOX, примочки с графическими расширениями ... :mrgreen:

Re: Эмулятор ZX Spectrum

Posted: Fri Jun 27, 2008 6:40 pm
by Albom
Зы, а если прилично эмулировать Спектрум, то (ну расширения памяти не проблема) добавь минимум AY-3-8910(12) и BetaDiskInterface с TR-DOS . Ну а если очень хорошо эмулировать то еще там всякие Kempston Mouse, GeneralSound, COVOX, примочки с графическими расширениями ...
ну это ты уже загнул! многие эмуляторы под винду такого не могут! не то что под Колибри. например, как я буду эмулировать AY-3-8910 без дров на звуковуху?!!! :)

Re: Эмулятор ZX Spectrum

Posted: Fri Jun 27, 2008 7:31 pm
by Leency
Я так и не разобрался с управлением...

Re: Эмулятор ZX Spectrum

Posted: Fri Jun 27, 2008 8:16 pm
by Albom
Я так и не разобрался с управлением...
Если запустить e80 без параметров, то стартует BASIC. После появления информации о прошивке нужно нажать Enter. Появляется командная строка. Здесь имеется 3 режима ввода (режимы в эмуляторе вручную пока не переключаются), особенностью 2-х из которых является то, что для ввода команды требуется нажатие всего одной клавиши. Например, клавише P соответстует оператор PRINT, I - INPUT, K - LIST, A - NEW, R - RUN. Простой пример:

10 PRINT "HELLO"
20 INPUT A
30 PRINT A

Для ввода кавычек используется комбинация Ctrl+P. Кстати, в процедуре обработки нажатия клавиш многие клавиши (знаки препинания и математические операции, например) ещё не прописаны .
После нажатия R и Enter запускается программа - выводится на экран HELLO, ожидается ввод переменной A и производится вывод этой переменной.
Команды S (SAVE) и J (LOAD) пока не реализованы.

Re: Эмулятор ZX Spectrum

Posted: Sat Jun 28, 2008 12:02 am
by Alver
Albom
В обработке клавиш надо как то обрабатывать одновременные нажатия (ну хотябы с шифтами), чтобы биты одновременно нажимаемых клавиш одновременно обнулялись по соответствующимдля них портам. Тогда хотя бы основная клава спектрума будет работать как надо. А потом уже комбинации на отдельные клавиши вешать.
Блин а емуль всетаки смотрится!
Успехов!

Re: Эмулятор ZX Spectrum

Posted: Sat Jun 28, 2008 6:45 am
by Albom
В обработке клавиш надо как то обрабатывать одновременные нажатия (ну хотябы с шифтами)
так и сейчас уже есть обработка клавиш с шифтом и контроллом! :)
Блин а емуль всетаки смотрится!
значит не зря над ним работаю!