- ; only changes with V1.3 are tested here, the basic test is savenexSyntax.asm 
-   
-     DEVICE ZXSPECTRUMNEXT 
-   
- ;; OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]] 
-     ; errors - [un]expected arguments 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex", $8000, $FFE0,15,  2, 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex", $8000, $FFE0,15,  2, 2 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex", $7170, $F1F0, 0,  1 ; error fileVersion 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex", $7170, $F1F0, 0,  4 ; error fileVersion 
-   
-     ; one correct NEX file to verify simple case (but induce all sorts of warnings) 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex", $18180, $1F1F0, 'B', 2   ; force V1.2 version 
-   
-     ; error = NEX file is already open 
-     SAVENEX     OPEN    "savenexSyntaxV_1_3.nex", $8180, $F1F0, 'B', 3 
-   
-     ; few correct commands which didn't change with V1.3 support 
-     SAVENEX     CORE    3,0,6 
-     SAVENEX     CFG     5,  0,  1,  1 
-   
- ;; CFG3 <DoCRC 0/1>[,<PreserveExpansionBus 0/1>[,<CLIbufferAdr>,<CLIbufferSize>]] 
-     ; error because V1.2 file is enforced 
-     SAVENEX     CFG3    0,  1,  $DF00, 2048 
-   
- ;; BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]] 
-     ; errors - [un]expected arguments 
-     SAVENEX     BAR     1,  'L',    'D',    'd', 0, 
-     SAVENEX     BAR     1,  'L',    'D',    'd', 0, 0 
-   
-     ; correct ones with value warnings, and omitting optional arguments 
-     SAVENEX     BAR     1,  255, 255, 255, 256 
-     SAVENEX     BAR     1,  'L',    'D',    'd', 123 ; one fully valid (no warning) 
-   
- ;; PALETTE NONE 
- ;; PALETTE DEFAULT 
- ;; PALETTE MEM <palPage8kNum 0..223>,<palOffset> 
- ;; PALETTE BMP <filename> 
-     ; errors - [un]expected arguments 
-     SAVENEX     PALETTE ETTELAP 
-     SAVENEX     PALETTE MEM 
-     SAVENEX     PALETTE MEM 100 
-     SAVENEX     PALETTE MEM 100, 
-     SAVENEX     PALETTE MEM 100, 0, 
-     SAVENEX     PALETTE MEM 100, 0, 0 
-     SAVENEX     PALETTE BMP 
-     SAVENEX     PALETTE BMP "pal.bmp", 
-   
-     ; errors - wrong values 
-     SAVENEX     PALETTE MEM -1, 0 
-     SAVENEX     PALETTE MEM 224, 0 
-     SAVENEX     PALETTE MEM 10, -1 
-     SAVENEX     PALETTE MEM 0, 1792*1024-511 
-     SAVENEX     PALETTE BMP "" 
-     SAVENEX     PALETTE BMP "pal.bmp" 
-     SAVENEX     PALETTE BMP "savenexSyntaxV_1_3.asm" 
-   
-     ; one correct (setting up DEFAULT palette type) 
-     SAVENEX     PALETTE DEFAULT 
-   
-     ; verify that any one-more reports error 
-     SAVENEX     PALETTE NONE 
-     SAVENEX     PALETTE DEFAULT 
-     SAVENEX     PALETTE MEM 10, 0 
-     SAVENEX     PALETTE BMP "pal.bmp" 
-   
- ;; SCREEN L2_320 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]] 
- ;; SCREEN L2_640 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]] 
- ;; SCREEN TILE <NextReg $6B>,<NextReg $6C>,<NextReg $6E>,<NextReg $6F>[,<AlsoStoreBank5 0/1 = 1>] 
-     ; errors - because V1.2 is enforced 
-     SAVENEX     SCREEN  L2_320 
-     SAVENEX     SCREEN  L2_640 
-     SAVENEX     SCREEN  TILE 0, 1, 2, 3, 0 
-   
-     ; errors - [un]expected arguments - possible to test for TILE screen (ahead V1.2 check) 
-     SAVENEX     SCREEN  TILE 
-     SAVENEX     SCREEN  TILE    0 
-     SAVENEX     SCREEN  TILE    0, 
-     SAVENEX     SCREEN  TILE    0,  1 
-     SAVENEX     SCREEN  TILE    0,  1, 
-     SAVENEX     SCREEN  TILE    0,  1,  2  
-     SAVENEX     SCREEN  TILE    0,  1,  2, 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  3, 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  3, 0, 
-   
-     ; errors - wrong values 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  3, -1 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  3, 2 
-     SAVENEX     SCREEN  TILE    256,  1,  2,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  256,  2,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  1,  256,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  256, 0 
-     SAVENEX     SCREEN  TILE    -1,  1,  2,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  -1,  2,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  1,  -1,  3, 0 
-     SAVENEX     SCREEN  TILE    0,  1,  2,  -1, 0 
-   
- ;; SCREEN BMP <filename>[,<savePalette 0/1>[,<paletteOffset 0..15>]] 
-     ; errors - [un]expected arguments 
-     SAVENEX     SCREEN  BMP 
-     SAVENEX     SCREEN  BMP     "" 
-     SAVENEX     SCREEN  BMP     "", 
-     SAVENEX     SCREEN  BMP     "",     1, 
-     SAVENEX     SCREEN  BMP     "",     1,  0, 
-   
-     ; errors - wrong values 
-     SAVENEX     SCREEN  BMP     "",     2 
-     SAVENEX     SCREEN  BMP     "",     0,  -2  ; -1 is internal value for "missing" palOfs => legal 
-     SAVENEX     SCREEN  BMP     "",     0,  16 
-   
-     ; not testing correct variants, because it would make impossible to test other types 
-   
- ;; COPPER <Page8kNum 0..223>,<offset> 
-     ; errors - because V1.2 is enforced 
-     SAVENEX     COPPER 0, 0 
-   
-     SAVENEX     CLOSE       ; warning about palette defined, but no screen 
-   
- ;; further syntax tests, this time with V1.3 enabled in OPEN 
-   
- ;; OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]] 
-     ; one correct NEX file to verify simple case 
-     SAVENEX OPEN "savenexSyntaxV_1_3.nex"   ; start with V1.2, enable V1.3 
-   
- ;; CFG3 <DoCRC 0/1>[,<PreserveExpansionBus 0/1>[,<CLIbufferAdr>,<CLIbufferSize>]] 
-     ; errors - [un]expected arguments 
-     SAVENEX     CFG3 
-     SAVENEX     CFG3    0, 
-     SAVENEX     CFG3    0,  1, 
-     SAVENEX     CFG3    0,  1,  $DF00 
-     SAVENEX     CFG3    0,  1,  $DF00, 
-     SAVENEX     CFG3    0,  1,  $DF00, 2048, 
-   
-     ; correct ones with value warnings, and omitting optional arguments 
-     SAVENEX     CFG3    2 
-     SAVENEX     CFG3    1,  2 
-     SAVENEX     CFG3    1,  0,  $3FFF, 1 
-     SAVENEX     CFG3    1,  0,  $FFFF, 2 
-     SAVENEX     CFG3    1,  0,  $FF00, 0 
-     SAVENEX     CFG3    1,  0,  $E000, 2049 
-     SAVENEX     CFG3    1,  1,  0,  0    ; one completely correct (no warning) (+CRC) 
-   
- ;; SCREEN L2_320 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]] 
- ;; SCREEN L2_640 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]] 
-     ; errors - [un]expected arguments - possible to test for TILE screen (ahead V1.2 check) 
-     SAVENEX     SCREEN  L2_320  0 
-     SAVENEX     SCREEN  L2_320  0, 
-     SAVENEX     SCREEN  L2_320  0,  0, 
-     SAVENEX     SCREEN  L2_320  0,  0,  0 
-     SAVENEX     SCREEN  L2_320  0,  0,  0, 
-     SAVENEX     SCREEN  L2_320  0,  0,  0,  0, 
-   
-     SAVENEX     SCREEN  L2_640  0 
-     SAVENEX     SCREEN  L2_640  0, 
-     SAVENEX     SCREEN  L2_640  0,  0, 
-     SAVENEX     SCREEN  L2_640  0,  0,  0 
-     SAVENEX     SCREEN  L2_640  0,  0,  0, 
-     SAVENEX     SCREEN  L2_640  0,  0,  0,  0, 
-   
-     ; errors - wrong values 
-     SAVENEX     SCREEN  L2_320  224,    0,      0,      0 
-     SAVENEX     SCREEN  L2_320    0,    0,    224,      0 
-     SAVENEX     SCREEN  L2_320    0, 1792*1024 - 80*1024 + 1,  0,  0 
-     SAVENEX     SCREEN  L2_320    0,    0,  0,  1792*1024 - 512 + 1 
-     SAVENEX     SCREEN  L2_320  223,    0 
-     SAVENEX     SCREEN  L2_320    0, 1792*1024 - 80*1024 + 1 
-   
-     SAVENEX     SCREEN  L2_640  224,    0,      0,      0 
-     SAVENEX     SCREEN  L2_640    0,    0,    224,      0 
-     SAVENEX     SCREEN  L2_640    0, 1792*1024 - 80*1024 + 1,  0,  0 
-     SAVENEX     SCREEN  L2_640    0,    0,  0,  1792*1024 - 512 + 1 
-     SAVENEX     SCREEN  L2_640  223,    0 
-     SAVENEX     SCREEN  L2_640    0, 1792*1024 - 80*1024 + 1 
-   
- ;; COPPER <Page8kNum 0..223>,<offset> 
-     ; errors - [un]expected arguments 
-     SAVENEX     COPPER 
-     SAVENEX     COPPER 0 
-     SAVENEX     COPPER 0, 
-     SAVENEX     COPPER 0, 0, 
-   
-     ; errors - wrong values 
-     SAVENEX     COPPER 224, 0 
-     SAVENEX     COPPER 0, 1792*1024 - 2048 + 1 
-   
-     ; valid copper commands 
-     SAVENEX     COPPER 0, 0 
-     SAVENEX     COPPER 0, 0     ; can be used multiple times, it will simple overwrite old code (silently) 
-   
- ;; SCREEN TILE <NextReg $6B>,<NextReg $6C>,<NextReg $6E>,<NextReg $6F>[,<AlsoStoreBank5 0/1 = 1>] 
-     ; testing single correct variant (will block all other screens and palette) 
-     SAVENEX     SCREEN  TILE    0, 1, 2, 3, 1      ; will also store Bank 5 
-   
-     SAVENEX     PALETTE DEFAULT     ; fails because after screen 
-   
-     SAVENEX     COPPER 0, 0         ; fails because bank is already saved 
-   
-     ;; sjasmplus should calculate also CRC-32C value here 
-     SAVENEX     CLOSE 
-   
-   
- ;; create small NEX for BIN comparison, if the thing at least somewhat works 
- ;; also verify it works twice per source (in sequential order) 
-     SAVENEX OPEN "savenexSyntaxV_1_3.bin", $5000, $FE00, 0, 3 
-     SAVENEX CORE 3,0,6 : SAVENEX CFG 4,0,0,0 
-     SAVENEX CFG3 1,0,$E000,1234 : SAVENEX BAR 1,100,99,13,222 
-     ORG $4800 : DB $45, $5F, $F5, $44 
-     ORG $5000 
-     nextreg $69,0               ; hide Layer 2, ULA screen 
-     jr $                        ; infinite JR loop 
-     MMU 7, 18 
-     org $E000 : DS $2000, %000'111'00   ; green top 32px strip 
-     SAVENEX PALETTE DEFAULT 
-     SAVENEX SCREEN L2_320 
-     SAVENEX AUTO 5, 5                       ; should store bank5 
-     ; let it close automatically by ending source 
-   
-     END $7170       ; invoke warning about different start address 
-