Skip to content

Commit c1a6154

Browse files
author
r-lyeh
committed
v1.17-WIP
chg: improved UX while browsing local files chg: tweak luminance spectrum on pcw/amber palettes new: try to detect border color when loading .scr files chg: zxdb new downloads order: dsk > pzx > tzx > tap
1 parent 3c5084f commit c1a6154

7 files changed

Lines changed: 81 additions & 68 deletions

File tree

MAKE.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ ping -n 2 -w 1500 localhost > nul && rem wait 1s between 2 consecutive pings, so
251251
where /q rcedit-x64 || curl -LO https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe
252252
where /q rcedit-x64 && ^
253253
rcedit-x64 "Spectral.exe" --set-file-version "!year!.!month!.!today!.!today!!month!" && ^
254-
rcedit-x64 "Spectral.exe" --set-product-version "1.16" && ^
254+
rcedit-x64 "Spectral.exe" --set-product-version "1.17-WIP" && ^
255255
rcedit-x64 "Spectral.exe" --set-icon src\res\img\noto_1f47b.ico || goto error
256256

257257
if "%__DOTNET_PREFERRED_BITNESS%"=="32" (

src/app.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ int _getch();
77
#define fileno _fileno // fucking m$
88
*/
99

10-
/* planned for v1.16
10+
/* planned for v1.17
1111
12-
- [x] allow to mount custom roms
1312
- [ ] irc/lobby (mount server)
1413
- [ ] <3<3<3 rating system
1514
- [ ] standalone .ini options
@@ -20,7 +19,8 @@ int _getch();
2019
- [ ] multiplayer
2120
- [ ] 57 Documentation please!
2221
- [ ] ARM builds (Linux+Win)
23-
- [ ] invert tape polarity (ZX == 200)
22+
- [ ] invert tape polarity (if ZX == 200)
23+
- [ ] pzx: darkstar
2424
2525
*/
2626

@@ -327,7 +327,7 @@ void loggers(int m);
327327
// [ ] XL1 (Compilation)
328328
#endif
329329

330-
#define SPECTRAL "v1.16"
330+
#define SPECTRAL "v1.17-WIP"
331331

332332
#ifndef DEV
333333
#if NDEBUG >= 2
@@ -1915,7 +1915,7 @@ void draw_ui() {
19151915

19161916
char* game_browser(int version) { // returns true if loaded
19171917
// scan files
1918-
if( !numgames && !zxdb_loaded() ) {
1918+
if( !numgames && (!zxdb_loaded() || ZX_BROWSER == 0) ) {
19191919
do_once {
19201920
uint64_t then = time_ns();
19211921
const char *folder = ZX_FOLDER;

src/zx.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,18 @@ char *ZX_SHADER = 0; // path to the custom shader file
203203
X(ZX_FOLDER) X(ZX_TITLE) X(ZX_MEDIA) X(ZX_SHADER)
204204

205205
#define INI_OPTIONS_NUM(X) \
206+
X(ZX_GAMEPAD[0][0]) X(ZX_GAMEPAD[0][1]) X(ZX_GAMEPAD[0][2]) X(ZX_GAMEPAD[0][3]) X(ZX_GAMEPAD[0][4]) X(ZX_GAMEPAD[0][5]) X(ZX_GAMEPAD[0][6]) X(ZX_GAMEPAD[0][7]) X(ZX_GAMEPAD[0][8]) X(ZX_GAMEPAD[0][9]) X(ZX_GAMEPAD[0][10]) X(ZX_GAMEPAD[0][11]) X(ZX_GAMEPAD[0][12]) X(ZX_GAMEPAD[0][13]) X(ZX_GAMEPAD[0][14]) X(ZX_GAMEPAD[0][15]) \
207+
X(ZX_GAMEPAD[1][0]) X(ZX_GAMEPAD[1][1]) X(ZX_GAMEPAD[1][2]) X(ZX_GAMEPAD[1][3]) X(ZX_GAMEPAD[1][4]) X(ZX_GAMEPAD[1][5]) X(ZX_GAMEPAD[1][6]) X(ZX_GAMEPAD[1][7]) X(ZX_GAMEPAD[1][8]) X(ZX_GAMEPAD[1][9]) X(ZX_GAMEPAD[1][10]) X(ZX_GAMEPAD[1][11]) X(ZX_GAMEPAD[1][12]) X(ZX_GAMEPAD[1][13]) X(ZX_GAMEPAD[1][14]) X(ZX_GAMEPAD[1][15]) \
208+
X(ZX_GAMEPAD[2][0]) X(ZX_GAMEPAD[2][1]) X(ZX_GAMEPAD[2][2]) X(ZX_GAMEPAD[2][3]) X(ZX_GAMEPAD[2][4]) X(ZX_GAMEPAD[2][5]) X(ZX_GAMEPAD[2][6]) X(ZX_GAMEPAD[2][7]) X(ZX_GAMEPAD[2][8]) X(ZX_GAMEPAD[2][9]) X(ZX_GAMEPAD[2][10]) X(ZX_GAMEPAD[2][11]) X(ZX_GAMEPAD[2][12]) X(ZX_GAMEPAD[2][13]) X(ZX_GAMEPAD[2][14]) X(ZX_GAMEPAD[2][15]) \
209+
X(ZX_GAMEPAD[3][0]) X(ZX_GAMEPAD[3][1]) X(ZX_GAMEPAD[3][2]) X(ZX_GAMEPAD[3][3]) X(ZX_GAMEPAD[3][4]) X(ZX_GAMEPAD[3][5]) X(ZX_GAMEPAD[3][6]) X(ZX_GAMEPAD[3][7]) X(ZX_GAMEPAD[3][8]) X(ZX_GAMEPAD[3][9]) X(ZX_GAMEPAD[3][10]) X(ZX_GAMEPAD[3][11]) X(ZX_GAMEPAD[3][12]) X(ZX_GAMEPAD[3][13]) X(ZX_GAMEPAD[3][14]) X(ZX_GAMEPAD[3][15]) \
210+
X(ZX_GAMEPAD[4][0]) X(ZX_GAMEPAD[4][1]) X(ZX_GAMEPAD[4][2]) X(ZX_GAMEPAD[4][3]) X(ZX_GAMEPAD[4][4]) X(ZX_GAMEPAD[4][5]) X(ZX_GAMEPAD[4][6]) X(ZX_GAMEPAD[4][7]) X(ZX_GAMEPAD[4][8]) X(ZX_GAMEPAD[4][9]) X(ZX_GAMEPAD[4][10]) X(ZX_GAMEPAD[4][11]) X(ZX_GAMEPAD[4][12]) X(ZX_GAMEPAD[4][13]) X(ZX_GAMEPAD[4][14]) X(ZX_GAMEPAD[4][15]) \
211+
X(ZX_JOYSTICKS[0]) X(ZX_JOYSTICKS_AUTOFIRE[0]) X(ZX_JOYSTICKS_DEADZONE[0][0]) X(ZX_JOYSTICKS_DEADZONE[0][1]) \
212+
X(ZX_JOYSTICKS[1]) X(ZX_JOYSTICKS_AUTOFIRE[1]) X(ZX_JOYSTICKS_DEADZONE[1][0]) X(ZX_JOYSTICKS_DEADZONE[1][1]) \
213+
X(ZX_JOYSTICKS[2]) X(ZX_JOYSTICKS_AUTOFIRE[2]) X(ZX_JOYSTICKS_DEADZONE[2][0]) X(ZX_JOYSTICKS_DEADZONE[2][1]) \
214+
X(ZX_JOYSTICKS[3]) X(ZX_JOYSTICKS_AUTOFIRE[3]) X(ZX_JOYSTICKS_DEADZONE[3][0]) X(ZX_JOYSTICKS_DEADZONE[3][1]) \
215+
X(ZX_JOYSTICKS[4]) X(ZX_JOYSTICKS_AUTOFIRE[4]) X(ZX_JOYSTICKS_DEADZONE[4][0]) X(ZX_JOYSTICKS_DEADZONE[4][1]) \
216+
X(ZX_FN[0]) X(ZX_FN[1]) X(ZX_FN[2]) X(ZX_FN[3]) X(ZX_FN[4]) X(ZX_FN[5]) \
217+
X(ZX_FN[6]) X(ZX_FN[7]) X(ZX_FN[8]) X(ZX_FN[9]) X(ZX_FN[10]) X(ZX_FN[11]) X(ZX_FN[12]) \
206218
X(ZX) \
207219
X(ZX_RF) \
208220
X(ZX_CRT) \
@@ -219,18 +231,6 @@ char *ZX_SHADER = 0; // path to the custom shader file
219231
X(ZX_ALTROMS) \
220232
X(ZX_PALETTE) X(ZX_PALETTE_PREVIEW) \
221233
X(ZX_MULTIFACE) \
222-
X(ZX_FN[0]) X(ZX_FN[1]) X(ZX_FN[2]) X(ZX_FN[3]) X(ZX_FN[4]) X(ZX_FN[5]) \
223-
X(ZX_FN[6]) X(ZX_FN[7]) X(ZX_FN[8]) X(ZX_FN[9]) X(ZX_FN[10]) X(ZX_FN[11]) X(ZX_FN[12]) \
224-
X(ZX_JOYSTICKS[0]) X(ZX_JOYSTICKS_AUTOFIRE[0]) X(ZX_JOYSTICKS_DEADZONE[0][0]) X(ZX_JOYSTICKS_DEADZONE[0][1]) \
225-
X(ZX_JOYSTICKS[1]) X(ZX_JOYSTICKS_AUTOFIRE[1]) X(ZX_JOYSTICKS_DEADZONE[1][0]) X(ZX_JOYSTICKS_DEADZONE[1][1]) \
226-
X(ZX_JOYSTICKS[2]) X(ZX_JOYSTICKS_AUTOFIRE[2]) X(ZX_JOYSTICKS_DEADZONE[2][0]) X(ZX_JOYSTICKS_DEADZONE[2][1]) \
227-
X(ZX_JOYSTICKS[3]) X(ZX_JOYSTICKS_AUTOFIRE[3]) X(ZX_JOYSTICKS_DEADZONE[3][0]) X(ZX_JOYSTICKS_DEADZONE[3][1]) \
228-
X(ZX_JOYSTICKS[4]) X(ZX_JOYSTICKS_AUTOFIRE[4]) X(ZX_JOYSTICKS_DEADZONE[4][0]) X(ZX_JOYSTICKS_DEADZONE[4][1]) \
229-
X(ZX_GAMEPAD[0][0]) X(ZX_GAMEPAD[0][1]) X(ZX_GAMEPAD[0][2]) X(ZX_GAMEPAD[0][3]) X(ZX_GAMEPAD[0][4]) X(ZX_GAMEPAD[0][5]) X(ZX_GAMEPAD[0][6]) X(ZX_GAMEPAD[0][7]) X(ZX_GAMEPAD[0][8]) X(ZX_GAMEPAD[0][9]) X(ZX_GAMEPAD[0][10]) X(ZX_GAMEPAD[0][11]) X(ZX_GAMEPAD[0][12]) X(ZX_GAMEPAD[0][13]) X(ZX_GAMEPAD[0][14]) X(ZX_GAMEPAD[0][15]) \
230-
X(ZX_GAMEPAD[1][0]) X(ZX_GAMEPAD[1][1]) X(ZX_GAMEPAD[1][2]) X(ZX_GAMEPAD[1][3]) X(ZX_GAMEPAD[1][4]) X(ZX_GAMEPAD[1][5]) X(ZX_GAMEPAD[1][6]) X(ZX_GAMEPAD[1][7]) X(ZX_GAMEPAD[1][8]) X(ZX_GAMEPAD[1][9]) X(ZX_GAMEPAD[1][10]) X(ZX_GAMEPAD[1][11]) X(ZX_GAMEPAD[1][12]) X(ZX_GAMEPAD[1][13]) X(ZX_GAMEPAD[1][14]) X(ZX_GAMEPAD[1][15]) \
231-
X(ZX_GAMEPAD[2][0]) X(ZX_GAMEPAD[2][1]) X(ZX_GAMEPAD[2][2]) X(ZX_GAMEPAD[2][3]) X(ZX_GAMEPAD[2][4]) X(ZX_GAMEPAD[2][5]) X(ZX_GAMEPAD[2][6]) X(ZX_GAMEPAD[2][7]) X(ZX_GAMEPAD[2][8]) X(ZX_GAMEPAD[2][9]) X(ZX_GAMEPAD[2][10]) X(ZX_GAMEPAD[2][11]) X(ZX_GAMEPAD[2][12]) X(ZX_GAMEPAD[2][13]) X(ZX_GAMEPAD[2][14]) X(ZX_GAMEPAD[2][15]) \
232-
X(ZX_GAMEPAD[3][0]) X(ZX_GAMEPAD[3][1]) X(ZX_GAMEPAD[3][2]) X(ZX_GAMEPAD[3][3]) X(ZX_GAMEPAD[3][4]) X(ZX_GAMEPAD[3][5]) X(ZX_GAMEPAD[3][6]) X(ZX_GAMEPAD[3][7]) X(ZX_GAMEPAD[3][8]) X(ZX_GAMEPAD[3][9]) X(ZX_GAMEPAD[3][10]) X(ZX_GAMEPAD[3][11]) X(ZX_GAMEPAD[3][12]) X(ZX_GAMEPAD[3][13]) X(ZX_GAMEPAD[3][14]) X(ZX_GAMEPAD[3][15]) \
233-
X(ZX_GAMEPAD[4][0]) X(ZX_GAMEPAD[4][1]) X(ZX_GAMEPAD[4][2]) X(ZX_GAMEPAD[4][3]) X(ZX_GAMEPAD[4][4]) X(ZX_GAMEPAD[4][5]) X(ZX_GAMEPAD[4][6]) X(ZX_GAMEPAD[4][7]) X(ZX_GAMEPAD[4][8]) X(ZX_GAMEPAD[4][9]) X(ZX_GAMEPAD[4][10]) X(ZX_GAMEPAD[4][11]) X(ZX_GAMEPAD[4][12]) X(ZX_GAMEPAD[4][13]) X(ZX_GAMEPAD[4][14]) X(ZX_GAMEPAD[4][15]) \
234234
X(ZX_ZOOM) X(ZX_FULLSCREEN) X(ZX_WAVES) X(ZX_LENSLOK) X(ZX_SHADED) X(ZX_LOBBY) X(ZX_HORACE) \
235235
X(ZX_BLUR) X(ZX_BLOOM) X(ZX_TABS) X(ZX_STEREO) X(ZX_FLASHLOAD) X(ZX_PAUSE) X(ZX_CONSOLE) X(ZX_TURBOSOUND) \
236236
X(ZX_RESUME) X(ZX_AUTOLOAD) X(ZX_TAPECOUNTER) X(ZX_GRAIN)

src/zx_db.h

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -510,25 +510,25 @@ char* zxdb_url(const zxdb z, const char *hint) {
510510
return NULL;
511511
}
512512

513-
if( strstri(hint, "play") ) {
513+
if( strstri(hint, "play") ) { // order by: disk > bugfix > tape > rom > snap
514514
char *media = 0;
515+
if(!media) media = zxdb_url(z, "disk");
515516
if(!media) media = zxdb_url(z, "bugfix");
516517
if(!media) media = zxdb_url(z, "tape");
517-
if(!media) media = zxdb_url(z, "disk");
518518
if(!media) media = zxdb_url(z, "rom");
519519
if(!media) media = zxdb_url(z, "snap");
520520
return media;
521521
}
522522

523-
int check_media = 0;
523+
int check_media = 0, check_pzx = 0;
524524

525525
/**/ if( strstri(hint, "runn") ) hint = "|2|R"; // .scr, .gif, .png, .jpg, .mc/.mlt, .ifl (multicolor8x2 9216 = 6144+768*4)
526526
else if( strstri(hint, "screen") ) hint = "|1|L"; // .scr, .gif, .png, .jpg, .mc/.mlt (multicolor8x1 12288 = 6144+768*8)
527527
else if( strstri(hint, "inlay") && strstri(hint, "side")) hint = "|4|I";
528528
else if( strstri(hint, "inlay") && strstri(hint, "back")) hint = "|6|I";
529529
else if( strstri(hint, "inlay")) hint = "|5|I";
530530
else if( strstri(hint, "bugfix")) hint = "|22|B", check_media = 1;
531-
else if( strstri(hint, "tape")) hint = "|8|T", check_media = 1;
531+
else if( strstri(hint, "tape")) hint = "|8|T", check_media = 1, check_pzx = 1;
532532
else if( strstri(hint, "snap")) hint = "|10|S", check_media = 1;
533533
else if( strstri(hint, "disk")) hint = "|11|D", check_media = 1;
534534
else if( strstri(hint, "rom")) hint = "|17|C", check_media = 1;
@@ -543,6 +543,23 @@ char* zxdb_url(const zxdb z, const char *hint) {
543543
else if( strstri(hint, "rzx")) hint = "|63|R";
544544
else if( strstri(hint, "pok")) hint = "|74|P";
545545

546+
if( check_pzx ) { // order by: pzx > tzx > tap
547+
for( int i = 0; z.downloads[i]; ++i ) {
548+
if( strstri(z.downloads[i], ".pzx.zip|") )
549+
if( strstri(z.downloads[i], hint) ) {
550+
char slot[6]; snprintf(slot, 6-1, "%d", i);
551+
return zxdb_url(z, slot);
552+
}
553+
}
554+
for( int i = 0; z.downloads[i]; ++i ) {
555+
if( strstri(z.downloads[i], ".tzx.zip|") )
556+
if( strstri(z.downloads[i], hint) ) {
557+
char slot[6]; snprintf(slot, 6-1, "%d", i);
558+
return zxdb_url(z, slot);
559+
}
560+
}
561+
}
562+
546563
for( int i = 0; z.downloads[i]; ++i ) {
547564
if( strstri(z.downloads[i], hint) ) {
548565
char slot[6]; snprintf(slot, 6-1, "%d", i);

src/zx_pal.h

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -361,43 +361,43 @@ rgba ZXPalettes[][64] = {
361361
},
362362
{
363363
// pcw-ish. take pc emulators > b/w version > green. expanded to 8 lumas for better vis (should be 4!)
364-
rgb(0,luma(0x00,0x20,0x00),luma(0x00,0x20,0x00)*44/100), // there is no black in a pcw monitor afaik. use a dark green instead
365-
rgb(0,luma(0x00,0x20,0xEA),luma(0x00,0x20,0xEA)*44/100), // boost G+B
366-
rgb(0,luma(0xD0,0x00,0x00),luma(0xD0,0x00,0x00)*44/100),
367-
rgb(0,luma(0xD0,0x00,0xD0),luma(0xD0,0x00,0xD0)*44/100),
368-
rgb(0,luma(0x00,0xD0,0x00),luma(0x00,0xD0,0x00)*44/100),
369-
rgb(0,luma(0x00,0xD0,0xD0),luma(0x00,0xD0,0xD0)*44/100),
370-
rgb(0,luma(0xD0,0xD0,0x00),luma(0xD0,0xD0,0x00)*44/100),
371-
rgb(0,luma(0xD0,0xD0,0xD0),luma(0xD0,0xD0,0xD0)*44/100),
372-
373-
rgb(0,luma(0x00,0x20,0x00),luma(0x00,0x20,0x00)*44/100), // there is no black in a pcw monitor afaik. use a dark green instead
374-
rgb(0,luma(0x00,0x20,0xEA),luma(0x00,0x20,0xEA)*44/100), // boost G+B
375-
rgb(0,luma(0xD0,0x00,0x00),luma(0xD0,0x00,0x00)*44/100),
376-
rgb(0,luma(0xD0,0x00,0xD0),luma(0xD0,0x00,0xD0)*44/100),
377-
rgb(0,luma(0x00,0xD0,0x00),luma(0x00,0xD0,0x00)*44/100),
378-
rgb(0,luma(0x00,0xD0,0xD0),luma(0x00,0xD0,0xD0)*44/100),
379-
rgb(0,luma(0xD0,0xD0,0x00),luma(0xD0,0xD0,0x00)*44/100),
380-
rgb(0,luma(0xD0,0xD0,0xD0),luma(0xD0,0xD0,0xD0)*44/100),
364+
rgb(0,0x20,0x20*44/100), // there is no black in a pcw monitor afaik. use a dark green instead
365+
rgb(0,0x30,0x30*44/100), // boost G+B
366+
rgb(0,0x3E,0x3E*44/100),
367+
rgb(0,0x4C,0x4C*44/100),
368+
rgb(0,0x5A,0x5A*44/100),
369+
rgb(0,0x69,0x69*44/100),
370+
rgb(0,0x77,0x77*44/100),
371+
rgb(0,0x85,0x85*44/100),
372+
373+
rgb(0,0x20,0x20*44/100), // there is no black in a pcw monitor afaik. use a dark green instead
374+
rgb(0,0x30,0x30*44/100), // boost G+B
375+
rgb(0,0x3E,0x3E*44/100),
376+
rgb(0,0x4C,0x4C*44/100),
377+
rgb(0,0x5A,0x5A*44/100),
378+
rgb(0,0x69,0x69*44/100),
379+
rgb(0,0x77,0x77*44/100),
380+
rgb(0,0x85,0x85*44/100),
381381
},
382382
{
383383
// amber-ish. take pc emulators > b/w version > orange. expanded to 8 lumas for better vis
384-
rgb(luma(0x00,0x20,0x00),luma(0x00,0x20,0x00)*44/100,0), // there is no black in an amber monitor afaik. use a dark orange instead
385-
rgb(luma(0x00,0x20,0xEA),luma(0x00,0x20,0xEA)*44/100,0), // boost G+B
386-
rgb(luma(0xD0,0x00,0x00),luma(0xD0,0x00,0x00)*44/100,0),
387-
rgb(luma(0xD0,0x00,0xD0),luma(0xD0,0x00,0xD0)*44/100,0),
388-
rgb(luma(0x00,0xD0,0x00),luma(0x00,0xD0,0x00)*44/100,0),
389-
rgb(luma(0x00,0xD0,0xD0),luma(0x00,0xD0,0xD0)*44/100,0),
390-
rgb(luma(0xD0,0xD0,0x00),luma(0xD0,0xD0,0x00)*44/100,0),
391-
rgb(luma(0xD0,0xD0,0xD0),luma(0xD0,0xD0,0xD0)*44/100,0),
392-
393-
rgb(luma(0x00,0x20,0x00),luma(0x00,0x20,0x00)*44/100,0), // there is no black in an amber monitor afaik. use a dark orange instead
394-
rgb(luma(0x00,0x20,0xEA),luma(0x00,0x20,0xEA)*44/100,0), // boost G+B
395-
rgb(luma(0xD0,0x00,0x00),luma(0xD0,0x00,0x00)*44/100,0),
396-
rgb(luma(0xD0,0x00,0xD0),luma(0xD0,0x00,0xD0)*44/100,0),
397-
rgb(luma(0x00,0xD0,0x00),luma(0x00,0xD0,0x00)*44/100,0),
398-
rgb(luma(0x00,0xD0,0xD0),luma(0x00,0xD0,0xD0)*44/100,0),
399-
rgb(luma(0xD0,0xD0,0x00),luma(0xD0,0xD0,0x00)*44/100,0),
400-
rgb(luma(0xD0,0xD0,0xD0),luma(0xD0,0xD0,0xD0)*44/100,0),
384+
rgb(luma(0x00,0x30,0x00),luma(0x00,0x30,0x00)*44/100,0), // there is no black in an amber monitor afaik. use a dark orange instead
385+
rgb(luma(0x00,0x30,0x90),luma(0x00,0x30,0x90)*44/100,0), // boost G+B
386+
rgb(luma(0xD8,0x00,0x00),luma(0xD8,0x00,0x00)*44/100,0),
387+
rgb(luma(0xE0,0x00,0xE0),luma(0xE0,0x00,0xE0)*44/100,0),
388+
rgb(luma(0x00,0xE8,0x00),luma(0x00,0xE8,0x00)*44/100,0),
389+
rgb(luma(0x00,0xF0,0xF0),luma(0x00,0xF0,0xF0)*44/100,0),
390+
rgb(luma(0xF8,0xF8,0x00),luma(0xF8,0xF8,0x00)*44/100,0),
391+
rgb(luma(0xFF,0xFF,0xFF),luma(0xFF,0xFF,0xFF)*44/100,0),
392+
393+
rgb(luma(0x00,0x30,0x00),luma(0x00,0x30,0x00)*44/100,0), // there is no black in an amber monitor afaik. use a dark orange instead
394+
rgb(luma(0x00,0x30,0x90),luma(0x00,0x30,0x90)*44/100,0), // boost G+B
395+
rgb(luma(0xD8,0x00,0x00),luma(0xD8,0x00,0x00)*44/100,0),
396+
rgb(luma(0xE0,0x00,0xE0),luma(0xE0,0x00,0xE0)*44/100,0),
397+
rgb(luma(0x00,0xE8,0x00),luma(0x00,0xE8,0x00)*44/100,0),
398+
rgb(luma(0x00,0xF0,0xF0),luma(0x00,0xF0,0xF0)*44/100,0),
399+
rgb(luma(0xF8,0xF8,0x00),luma(0xF8,0xF8,0x00)*44/100,0),
400+
rgb(luma(0xFF,0xFF,0xFF),luma(0xFF,0xFF,0xFF)*44/100,0),
401401
},
402402
{
403403
// Ilford FP4 Push filter

src/zx_sna.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,16 @@ int scr_load(const byte *src, int len) { // screenshot
6161
// @todo: .mc/.mlt (multicolor8x1 12288 = 6144+768*8)
6262
// @todo: ulaplus+ screen$ (6912+64)
6363
if(len != 6912) return 0;
64-
#if 0
65-
//boot(48, 0);
66-
#else
67-
//boot(48, 0);
68-
/*
69-
page128 &= ~32;
70-
port_0x7ffd(32|16);
71-
*/
72-
ZXBorderColor = 0;
73-
PC(cpu) = 0;
74-
#endif
64+
7565
memcpy(rom, "\xF3\x00\x00\x76\x00\x00\x00", 7); // di, nop2, halt, nop3
7666
memcpy(VRAM, src, 6912);
7767

68+
// detect border color based on 4 corners. if they mismatch, likely 0 would just fit better
69+
byte *chr0 = &VRAM[6144+0], *chr1 = chr0 + 31, *chr2 = chr0 + 767, *chr3 = chr2 - 31;
70+
int paper0 = (*chr0 >> 3) & 7, paper1 = (*chr1 >> 3) & 7, paper2 = (*chr2 >> 3) & 7, paper3 = (*chr3 >> 3) & 7;
71+
ZXBorderColor = paper0 == paper1 && paper1 == paper2 && paper2 == paper3 ? paper0 : 0;
72+
73+
PC(cpu) = 0;
7874
pins = z80_prefetch(&cpu, cpu.pc);
7975
return 1;
8076
}

src/zx_tap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ byte mic_read(uint64_t tstates) {
295295
// printf("%c [%d / %d][%d / %d][%d / %d] += %d\n", voc[voc_pos].debug,voc_pos,voc_len, voc_count,q.count, voc_units,q.units, diff);
296296

297297
// fsm0, reset line
298-
enum { LEVEL = 64 }; // low(0), high(64)
298+
enum { LEVEL = 64 }; // low(0), high(64). high(+) by default; however, +2 models got tape polarity inverted(-) [see: LA6324 quad op-amp (IC302)]
299299
if( !q.units ) {
300300
mic = LEVEL ^ 64;
301301
q = mic_read_tapeblock(voc_pos);

0 commit comments

Comments
 (0)