Spec256
Главной особенностью является возможность запуска специальным образом адаптированных игр, графика которых заменена на 256-цветную. Раскрашивание графики в 256 цветов реализовано следующим образом - одновременно работают восемь компьютеров ZX Spectrum 48K, синхронно исполняющих одинаковый код. Графические данные в программах для каждого из компьютеров отличаются. При построении растра цвет точки определяется не битом в экранной области и атрибутом знакоместа, а байтом, составленным из одноимённых битов экранных областей разных компьютеров. Преимуществом такого подхода является возможность адаптации (раскрашивания) игр без переписывания или изменения их оригинального кода.
Эмулятор SPEC256 (Авторы - Iñigo Ayo Blázquez (код эмулятора) и David Goti (256-цветный режим) emulatronia.com/emusdaqui/spec256/download-eng.htm
Эмулятор EmuZWin (Автор - Владимир Кладов) который очень удобно использовать для адаптации игр worldofspectrum.org/emulators.html#pcwin
Адаптированные игры emulatronia.com/emusdaqui/spec256/download-eng.htm
Решил попробовать реализовать этот эмулятор в железе на плате ReVerSE-U16
1) табличку преобразования 256(8бит) цветов в RGB(888) 24бит взял из палитры в EmuZWin:
R G B R G B R G B R G B R G B R G B R G B R G B
00: 000000 00009b 172fab 3763bb 5b93cb 83bfdb b3e3eb e7ffff
08: b70000 bf1717 cb3333 d35353 df7777 e79b9b f3c3c3 ffefef
10: 003723 07533b 176f53 2f8b73 4fa78f 73c3b3 9fdfd3 d3fff7
18: ff4b00 ff771f ff9f3f ffbf63 ffdb83 ffeba7 fff7c7 ffffeb
20: 672b00 7b3b0b 8f4f23 a7673b bb835b d39f7f e7bfa7 ffe7d7
28: 7f004b 8f135b a32b73 b34b8b c76fa3 d79bbf ebcbdf ffffff
30: 0b2373 1b3387 2f479b 4b63af 677fc3 8b9fd7 b3bfeb dfe7ff
38: 337f23 438f1f 53a31f 6bb31b 87c717 abd70f cfeb07 ffff00
40: c30000 af1700 bb3300 c75300 d77b00 e3a300 efcf00 ffff00
48: 4b4b33 636347 7b7b5b 979773 afaf8b cbcba3 e3e3bf ffffdb
50: 000000 434343 636363 7f7f7f 9f9f9f bbbbbb dbdbdb fbfbfb
58: a36f57 af7f63 bb8f6f c7a37b d7b78b e3c79b efdbab ffefbb
60: 00abcb 17b3cf 33bbd7 4fc7df 6bcfe3 8bdbeb afe7f3 d3f3fb
68: 00d300 17d717 2fdf2f 4be34b 67eb67 83ef83 a3f7a3 c3ffc3
70: 4f4f67 5f5f7b 73738f 8b8ba7 9f9fbb b7b7d3 cbcbe7 e7e7ff
78: 8b8300 9b930f aba323 bbb33b cbc353 dbd773 ebe793 fffbbb
80: 375757 3b6f6f 3b8787 3b9f9f 33b7b7 27cfcf 17e7e7 07ffff
88: 000000 00001b 000037 00004f 00006b 000087 0000a3 0000bf
90: 000000 1b0000 370000 4f0000 6b0000 870000 a30000 bf0000
98: 000000 1b001b 370037 4f004f 6b006b 870087 a300a3 bf00bf
A0: 000000 001b00 003700 004f00 006b00 008700 00a300 00bf00
A8: 000000 001b1b 003737 004f4f 006b6b 008787 00a3a3 00bfbf
B0: 000000 1b1b00 373700 4f4f00 6b6b00 878700 a3a300 bfbf00
B8: 000000 1b1b1b 373737 4f4f4f 6b6b6b 878787 a3a3a3 bfbfbf
C0: 000000 000000 000000 000000 000000 000000 000000 000000
C8: 00003f 000057 000073 00008f 0000ab 0000c7 0000e3 0000ff
D0: 3f0000 570000 730000 8f0000 ab0000 c70000 e30000 ff0000
D8: 3f003f 570057 730073 8f008f ab00ab c700c7 e300e3 ff00ff
E0: 003f00 005700 007300 008f00 00ab00 00c700 00e300 00ff00
E8: 000000 002323 004747 006b6b 008f8f 00b3b3 00dbdb 00ffff
F0: 3f3f00 575700 737300 8f8f00 abab00 c7c700 e3e300 ffff00
F8: 3f3f3f 575757 737373 8f8f8f ababab c7c7c7 e3e3e3 ffffff
2) Написал программку для теста палитры, для управления доступа к памяти используются порта в/в:
DEVICE ZXSPECTRUM48
; -----------------------------------------------------------------[18.06.2016]
; ReVerSE-U16 Spec256 Loader By MVV
; -----------------------------------------------------------------------------
; Port #xx00 - bit0=0:loader on, 1:loader off; bit1=0:LDR #0000-#03FF write disable, 1: write enable
; Port #xx01 - #0000-#FFFF loader exit address
; Port #xx02 - SPI data
; Port #xx03 - SPI status: bit7=1:bysy
; Port #xx04 - bit7..0=1:disable memory write for CPU7..0; 0:enable
org #0000
startprog:
di
; -----------------------------------------------------------------------------
; Palitte
; -----------------------------------------------------------------------------
ld hl,#4000
n1 ld a,%11111110
out (#04),a
ld (hl),%01010101
ld a,%11111101
out (#04),a
ld (hl),%00110011
ld a,%11111011
out (#04),a
ld (hl),%00001111
ld a,%11110111
out (#04),a
xor a
bit 0,l
jr z,n2
cpl
n2 ld (hl),a
ld a,%11101111
out (#04),a
xor a
bit 1,l
jr z,n3
cpl
n3 ld (hl),a
ld a,%11011111
out (#04),a
xor a
bit 2,l
jr z,n4
cpl
n4 ld (hl),a
ld a,%10111111
out (#04),a
xor a
bit 3,l
jr z,n5
cpl
n5 ld (hl),a
ld a,%01111111
out (#04),a
xor a
bit 4,l
jr z,n6
cpl
n6 ld (hl),a
inc hl
ld a,h
cp #64
jr c,n1
xor a
out (#04),a
halt
Результат работы программы:
3) Разобрался с *.GFX, подготовленный bitmap для всей памяти 48К накладываемый на *.SNA, в моём случае накладывается со сдвигом на память каждого из 8-ми процессоров
4) Записал без изменений на spiflash с адреса 0x000B4000 CYBERNOI.SNA, а с 0x000C001B CYBERNOI.GFX, игра
www.emulatronia.com/emusdaqui/spec256/juego-cybernoid.htm
Результат работы конфигурации компьютера Spec256 для платы ReVerSE-U16:
- - загрузка игры из SPIFLASH с адреса 0x000B4000 = CYBERNOI.SNA, 0x000C001B = CYBERNOI.GFX
- - 8 CPU T80@3,5MHz
- - ROM 16K
- - RAM 48K
- - Video HDMI 720x480@60Hz
- - SDRAM
- - USB Keyboard
- - F4 = Reset, F5 = NMI
- - Sound beeper порт #FE