PDA

Просмотр полной версии : ReVerSE-U16 [ZX-Poly]



MVV
10.03.2015, 19:41
Предистория

ZX-Poly (http://www.igormaznitsa.com/zxpoly/zxpoly.html), ранее ZM-Polyhedron — проект многопроцессорного ZX Spectrum-совместимого компьютера. Придуман и развивался Raydac (http://speccy.info/Raydac) с 1994 года. Не был реализован на практике, в виде устройства.

Идея возникла у автора в 1994 году. Она заключалась в использовании четырёх процессоров Z80, синхронно выполняющих одну и ту же программу (игру). Однобитные экранные плоскости складывались в одну 4-битную, позволяя использовать 16 цветов для каждой точки, при этом не модифицируя код программ, изменяя только графические данные.

В 1999 году для проверки идеи был написан эмулятор и сделана пробная раскраска фрагмента графики игры After The War.


https://zxpoly.googlecode.com/hg/docs/screenshots/atw_standard.png https://zxpoly.googlecode.com/hg/docs/screenshots/atw_zxpoly.png

В 2007 году был написан новый эмулятор на Java, а проект получил текущее название.


http://www.igormaznitsa.com/zxpoly/polyemulscr_shot.jpg https://zxpoly.googlecode.com/hg/docs/screenshots/tapeloading.png

Эмулируемая платформа имела стандартный видеорежим, видеорежим с 16 цветами на точку, режим 512x384 с атрибутами 8x8, четыре Z80 на частоте 3.5 МГц, 512 килобайт ОЗУ и 32 килобайта ПЗУ.

Ссылки
ZX-Poly™ platform (http://zx-pk.ru/showthread.php?t=4564)
Emulator of ZX-POLY, the Multi-CPU ZX-Spectrum 128 concept platform (https://code.google.com/p/zxpoly/)


Планирую создание конфигурации этого проекта на ReVerSE-U16. Как сказать... попробую реализовать и пройти весь путь создания. Кому по пути, прошу сюда :)

CodeMaster
10.03.2015, 20:07
при этом не модифицируя код программ, изменяя только графические данные.

Какой примерно % игр пригоден для подобной модификации, т.е. спрайты доступны для редактирования в "ZX-Poly sprite correcting utility"?

piroxilin
10.03.2015, 21:27
То есть это как-бы параллельно работающие 4 спека, но каждый отрисовывает только свой цвет , а в итоге они суммируются ?

Raydac
03.04.2015, 18:08
в свое время петерсы думали сделать на спринтере эмуляцию, но zx-poly юзающий несколько z80 был чуть ли не единственной платформой которую спринтер не мог заэмулировать, фактически это и есть основная трудность что должны быть четыре z80

---------- Post added at 18:08 ---------- Previous post was at 18:05 ----------

а так в принципе можно заюзать исходники эмуля как источник инфы (https://github.com/raydac/zxpoly) и тестовый пзу с опубликованными образами дисков что бы протестить что работает

Raydac
03.04.2015, 18:14
смотрится круто

Raydac
05.04.2015, 20:54
так же про zxpoly эмулятор есть ветка http://zx-pk.ru/showthread.php?t=24671

Raydac
06.04.2015, 09:13
Какой примерно % игр пригоден для подобной модификации, т.е. спрайты доступны для редактирования в "ZX-Poly sprite correcting utility"?
получается в принципе доступны практически все игры которые юзают маску и не юзают паковку, я пробовал помимо atw еще robocop и freddy hardest

Raydac
06.04.2015, 09:48
собранный эмуль и утилиты лучше качать не с igormaznitsa.com где они старые, а с папки https://drive.google.com/open?id=0BxHnNp97IgMRSHUzREtwbUQtT28&authuser=0

работают процессора обычно - все доступно всем, но если в R0 модуля выставлен bit 4 то проц отрезается от записи, будет писать в никуда без реального влияния на устройства, так что если загрузить все в модули и стартовать параллельно с выставлением этого бита для CPU1-CPU3 то только CPU0 будет производить реальную запись, в то время как читать будут все

русскоязычная была изначально но там была куча опечаток и я её потом перестал поддерживать

в новом spriteeditor и эмуле добавлены поддержка снапшотов zxp что бы не париться с всякими загрузчиками, формат простой и без паковки с параллельными блоками данных для всех процов, скажем ATW занимает около 200 кбт, правда в него спрайт редактор поддерживает экспорт только из Z80 снапшотов

Raydac
06.04.2015, 10:03
Т.е. как-бы нужно иметь 4-ре дисковода с 4-мя дискетами на которых записана программа для каждого из процессоров? Или только CPU0 загружает и распределяет блоки в памяти CPU1-CPU3?
загрузчик на демо TRD запускается только на CPU0 (это нормальная работа системы, сразу после старта все остальные CPU спят), он грузит, заливает по адресным пространствам, выставляет порты у остальных модулей, а потом производит одновременный старт всех модулей (и себя) с одного общего адреса

Raydac
06.04.2015, 10:35
все CPU имеют по 128 кБт, сразу после старта активен только модуль CPU0 остальные в WAIT, доступ к портам у них одинаковый (если не считать локальных портов модуля для записи в которые важен приоритет модуля)
так как активен один модуль то он и работает с клавой, дисководом и прочими, фактически обычный ZX128, он запускает программу с загрузчиком, загрузчик маппирует последовательно адресное пространство других модулей на IO порты CPU0 и тот последовательно считывая блоки с диска записывает их содержимое в память других модулей, после чего записывает в их регистры локального сброса JMP c адресом подпрограммы которая зальет все регистры процов одинаковым кодом и делает "мягкий ресет" для всех модулей и для себя тоже, после чего все процы стартуют с одного участка
код загрузчика доступен тут https://github.com/raydac/zxpoly/tree/master/AsmLoader
приаттачил ATW1 в этом формате

Raydac
06.04.2015, 11:50
типлементить всю архитектуру это нетривиальное дело всеж, ты по началу мог бы просто сделать поддержку ZXP снэпшотов их загрузку и старт на процах, а так эе поддержку 256 и 512 режимов, без реализации аццких связей через прерывания и маппирование, формат снапшота тривиальный

JBBPParser.prepare("int magic; int flags; ubyte port3D00; ubyte portFE;"
+ "byte [5] cpu0ports; byte [5] cpu1ports; byte [5] cpu2ports; byte [5] cpu3ports;"
+ "short [4] reg_af; short [4] reg_af_alt; short [4] reg_bc; short [4] reg_bc_alt; short [4] reg_de; short [4] reg_de_alt; short [4] reg_hl; short [4] reg_hl_alt; short [4] reg_ix; short [4] reg_iy; short [4] reg_ir;"
+ "byte [4] reg_im; bool [4] iff; bool [4] iff2;"
+ "short [4] reg_pc; short [4] reg_sp;"
+ "pages [4]{ubyte number; page[number]{ubyte index; byte [16384] data;}}");
где все массивы в 4 значения это CPU0,CPU1,CPU2,CPU3 а где 5 это порты 7FFD,R0,R1,R2,R3
типы данных как в Java, page имеет значение 0-7 и в памяти модуля смещение страницы идет как index*0x4000

Raydac
06.04.2015, 12:00
вот новая раскраска ATW и ZXP файл
https://github.com/raydac/zxpoly/raw/master/docs/screenshots/atw_zxpoly_zxpz80.png