Rev 539 | Blame | Compare with Previous | Last modification | View Log | Download
# file opened: savenexSyntax.asm1 0000 ;;; docs design (missing the changes after V1.3 introduction, added directly in docs.xml)2 0000 ; SAVENEX <command> <command arguments>3 0000 ; Works only in ZXSPECTRUMNEXT device emulation mode. See DEVICE.4 0000 ;5 0000 ; For file format details, check https://specnext.dev/wiki/NEX_file_format6 0000 ;7 0000 ; As the file is designed for self-contained distribution of whole applications/games,8 0000 ; its configuration and assembling is a bit too complex for single directive, and the9 0000 ; configuration is instead divided into multiple commands, and the assembling goes10 0000 ; through multiple stages, so some commands must be used in correct sequence.11 0000 ;12 0000 ; While the format technically allows to include multiple screen types data, they are13 0000 ; all loaded at the beginning over each other, so it makes sense to provide only single14 0000 ; loading screen (sjasmplus enforces that).15 0000 ;16 0000 ; More detailed description of each command follows:17 0000 ;18 0000 ; SAVENEX OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>]]]19 0000 ; Opens a NEX file, defines start address and stack address (if omitted, start address is20 0000 ; zero = no start, stack address is 0xFFFE, entryBank is zero), and 16k bank to be mapped21 0000 ; at 0xC000 before code is started.22 0000 ;23 0000 ; Only single NEX file can be open at the same time, and to finalize the header content24 0000 ; the command CLOSE has to be used (does auto-close if source ends).25 0000 ;26 0000 ; Entry bank is number of 16k bank (0..111), not native 8k page, default is zero, i.e.27 0000 ; the default memory map is identical to ZX 128 (ROM, RAM banks 5, 2 and 0).28 0000 ;29 0000 ; Make sure your new stack has at least tens of bytes available as those will be used30 0000 ; already by the NEX loader before executing your entry point (although released back).31 0000 ;32 0000 ; SAVENEX CORE <major 0..15>,<minor 0..15>,<subminor 0..255>33 0000 ; Set minimum required Next core version, can be set any time before CLOSE.34 0000 ;35 0000 ; SAVENEX CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]36 0000 ; Set border colour (during loading), whether the machine should be set to default state37 0000 ; (PreserveNextRegs = 0 = default), if the app requires extended RAM (224 8k pages) and38 0000 ; how the file handle of the NEX file should be treated: 0 = default = close, 1 = keep39 0000 ; open and pass in BC, $4000..$FFFE = keep open, and write into memory at provided address40 0000 ; (after entry bank is paged in). This can be set any time before CLOSE.41 0000 ;42 0000 ; SAVENEX BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>]]43 0000 ; Loading-bar related setup ("colour" usage depends on screen mode), can be set any time44 0000 ; before CLOSE.45 0000 ;46 0000 ; SAVENEX SCREEN L2 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]47 0000 ; Layer 2 loading screen, can be used between OPEN and first AUTO/BANK command.48 0000 ;49 0000 ; Palette consists of 512 bytes (256 palette items from index 0), in 9b colour format:50 0000 ; first byte is %RRRGGGBB, second byte is %P000000B (P is priority flag for Layer 2 colours).51 0000 ;52 0000 ; Image data are 48kiB block of memory, the loader will use always banks 9..11 to display53 0000 ; it (8k pages 18..23), but if you will prepare the data there, it will be also re-saved54 0000 ; by AUTO command, so either use other banks, and overwrite them with valid data/code55 0000 ; after using the SCREEN command, or reset pages 18..23 to zero after SCREEN.56 0000 ;57 0000 ; If no memory address is specified, the pages 18..23 are stored in file, and if no58 0000 ; palette address is specified, no-palette flag is set in NEX file.59 0000 ;60 0000 ; SAVENEX SCREEN LR [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]61 0000 ; LoRes (128x96) loading screen, can be used between OPEN and first AUTO/BANK command.62 0000 ;63 0000 ; Palette is similar to Layer 2 mode, just LoRes mode doesn't have priority bit.64 0000 ;65 0000 ; Image data are 12288 bytes memory block - either consecutive block if specific address66 0000 ; is provided, or without address the actual bank 5 memory is stored (taking 6144 bytes67 0000 ; from address 0x4000 and 6144 bytes from address 0x6000).68 0000 ;69 0000 ; SAVENEX SCREEN (SCR|SHC|SHR) [<hiResColour 0..7>]70 0000 ; ULA/Timex modes loading screen, can be used between OPEN and first AUTO/BANK command.71 0000 ;72 0000 ; The actual bank 5 memory (pages 10..11) is stored as if the image is displayed, in73 0000 ; these modes the palette can't be specified.74 0000 ;75 0000 ; SCR is classic ZX 6912 bytes long screen from address 0x4000 (page 10 is used, even76 0000 ; if the slot 1 is modified to other page, so you must prepare the image "in place").77 0000 ;78 0000 ; SHC and SHR are Timex HiColor (8x1 attribute) and HiRes (512x192 bitmap) modes, prepare79 0000 ; data "in place", i.e. 6144 bytes into page 10 and 6144 bytes into page 11 (0x4000 and80 0000 ; 0x6000 addresses in default memory setup). For HiRes mode you should specify ink colour81 0000 ; (the paper is complement of ink).82 0000 ;83 0000 ; SAVENEX BANK <bank 0..111>[,...]84 0000 ; Can be used after OPEN or SCREEN and before CLOSE, but the 16ki banks must be saved in85 0000 ; correct order: 5, 2, 0, 1, 3, 4, 6, 7, ..., 11186 0000 ;87 0000 ; SAVENEX AUTO [<fromBank 0..111>[,<toBank 0..111>]]88 0000 ; Can be used after OPEN or SCREEN and before CLOSE. The sjasmplus will save every89 0000 ; 16k bank containing at least one non-zero byte; detected in the correct order90 0000 ; (automatically starting from first possible bank after previous BANK/AUTO commands,91 0000 ; or from provided "fromBank").92 0000 ;93 0000 ; For "fromBank" value use the specified order above in BANK command, i.e. 5, 2, 0, ...94 0000 ;95 0000 ; SAVENEX CLOSE [<fileToAppend>]96 0000 ; Can be used after OPEN. The currently open NEX file will be finalized (header adjusted),97 0000 ; and optional extra file just appended to the end of NEX file.98 000099 0000 DEVICE NONE ; correct commands, but outside of NEXT devicesavenexSyntax.asm(100): error: [SAVENEX] is allowed only in ZXSPECTRUMNEXT device mode100 0000 SAVENEX OPEN "savenexSyntax.nex", $8000,$FFE0, 15 ; not in NEXT mode101 0000102 0000 DEVICE ZXSPECTRUMNEXTsavenexSyntax.asm(103): error: [SAVENEX] unknown command (commands: OPEN, CORE, CFG, BAR, SCREEN, BANK, AUTO, CLOSE): NEPO103 0000 SAVENEX NEPO ; wrong command104 0000105 0000 ;; OPEN <filename>[,<startAddress>,<stackAddress>[,<entryBank 0..111>]]106 0000 ; errors - [un]expected argumentssavenexSyntax.asm(107): error: [SAVENEX] unknown command (commands: OPEN, CORE, CFG, BAR, SCREEN, BANK, AUTO, CLOSE):107 0000 SAVENEXsavenexSyntax.asm(108): error: [SAVENEX] unknown command (commands: OPEN, CORE, CFG, BAR, SCREEN, BANK, AUTO, CLOSE):108 0000 SAVENEX ; no command, but with commentsavenexSyntax.asm(109): error: [SAVENEX] Error opening file for write:109 0000 SAVENEX OPENsavenexSyntax.asm(110): error: [SAVENEX] expected syntax is OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]]: SAVENEX OPEN "savenexSyntax.nex",110 0000 SAVENEX OPEN "savenexSyntax.nex",savenexSyntax.asm(111): error: [SAVENEX] expected syntax is OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]]: SAVENEX OPEN "savenexSyntax.nex", $8000,111 0000 SAVENEX OPEN "savenexSyntax.nex", $8000,savenexSyntax.asm(112): error: [SAVENEX] expected syntax is OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]]: SAVENEX OPEN "savenexSyntax.nex", $8000,$FFE0,112 0000 SAVENEX OPEN "savenexSyntax.nex", $8000,$FFE0,savenexSyntax.asm(113): error: [SAVENEX] expected syntax is OPEN <filename>[,<startAddress>[,<stackAddress>[,<entryBank 0..111>[,<fileVersion 2..3>]]]]: SAVENEX OPEN "savenexSyntax.nex", $8000,$FFE0, 15,113 0000 SAVENEX OPEN "savenexSyntax.nex", $8000,$FFE0, 15,savenexSyntax.asm(114): error: [SAVENEX] entry bank can be 0..111 value only: 112114 0000 SAVENEX OPEN "savenexSyntax.nex", $7170, $F1F0, 112 ; error entryBank115 0000116 0000 ; one correct NEX file to verify simple case (but induce all sorts of warnings)savenexSyntax.asm(117): warning: [SAVENEX] Start address was also defined by END, OPEN argument used insteadsavenexSyntax.asm(117): warning: value 0x18180 is truncated to 16bit value: 0x8180savenexSyntax.asm(117): warning: value 0x1F1F0 is truncated to 16bit value: 0xF1F0117 0000 SAVENEX OPEN "savenexSyntax.nex", $18180,$1F1F0, 'B'118 0000119 0000 ; error = NEX file is already opensavenexSyntax.asm(120): error: [SAVENEX] NEX file is already open: SAVENEX OPEN "savenexSyntax.nex", $8180, $F1F0, 'B'120 0000 SAVENEX OPEN "savenexSyntax.nex", $8180, $F1F0, 'B'121 0000122 0000 ;; CORE <major 0..15>,<minor 0..15>,<subminor 0..255>123 0000 ; errors - [un]expected argumentssavenexSyntax.asm(124): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE124 0000 SAVENEX COREsavenexSyntax.asm(125): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE 0125 0000 SAVENEX CORE 0savenexSyntax.asm(126): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE 0,126 0000 SAVENEX CORE 0,savenexSyntax.asm(127): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE 0,0127 0000 SAVENEX CORE 0,0savenexSyntax.asm(128): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE 0,0,128 0000 SAVENEX CORE 0,0,savenexSyntax.asm(129): error: [SAVENEX] expected syntax is CORE <major 0..15>,<minor 0..15>,<subminor 0..255>: SAVENEX CORE 0,0,0,129 0000 SAVENEX CORE 0,0,0,130 0000131 0000 ; one correct + one with warnings132 0000 SAVENEX CORE 15,15,255savenexSyntax.asm(133): warning: [SAVENEX] values are not within 0..15,0..15,0..255 ranges133 0000 SAVENEX CORE 'a','b',$100+'c' ; warn about values134 0000135 0000 ;; CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]136 0000 ; errors - [un]expected argumentssavenexSyntax.asm(137): error: [SAVENEX] expected syntax is CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]: SAVENEX CFG137 0000 SAVENEX CFGsavenexSyntax.asm(138): error: [SAVENEX] expected syntax is CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]: SAVENEX CFG 5,138 0000 SAVENEX CFG 5,savenexSyntax.asm(139): error: [SAVENEX] expected syntax is CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]: SAVENEX CFG 5, 1,139 0000 SAVENEX CFG 5, 1,savenexSyntax.asm(140): error: [SAVENEX] expected syntax is CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]: SAVENEX CFG 5, 1, 1,140 0000 SAVENEX CFG 5, 1, 1,savenexSyntax.asm(141): error: [SAVENEX] expected syntax is CFG <border 0..7>[,<fileHandle 0/1/$4000+>[,<PreserveNextRegs 0/1>[,<2MbRamReq 0/1>]]]: SAVENEX CFG 5, 1, 1, 1,141 0000 SAVENEX CFG 5, 1, 1, 1,142 0000143 0000 ; correct ones with value warnings, and omitting optional argumentssavenexSyntax.asm(144): warning: [SAVENEX] values are not within 0..7,0..65534,0/1,0/1 ranges144 0000 SAVENEX CFG 9savenexSyntax.asm(145): warning: [SAVENEX] values are not within 0..7,0..65534,0/1,0/1 ranges145 0000 SAVENEX CFG 5, -1savenexSyntax.asm(146): warning: [SAVENEX] values are not within 0..7,0..65534,0/1,0/1 ranges146 0000 SAVENEX CFG 5, 1, 2147 0000 SAVENEX CFG 5, "hf", 1, 1 ; one completely correct (no warning)savenexSyntax.asm(148): warning: [SAVENEX] values are not within 0..7,0..65534,0/1,0/1 ranges148 0000 SAVENEX CFG 5, "hf", 1, 'R'149 0000150 0000 ;; BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>]]151 0000 ; errors - [un]expected argumentssavenexSyntax.asm(152): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR152 0000 SAVENEX BARsavenexSyntax.asm(153): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR 1153 0000 SAVENEX BAR 1savenexSyntax.asm(154): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR 1,154 0000 SAVENEX BAR 1,savenexSyntax.asm(155): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR 1, 'L',155 0000 SAVENEX BAR 1, 'L',savenexSyntax.asm(156): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR 1, 'L', 'D',156 0000 SAVENEX BAR 1, 'L', 'D',savenexSyntax.asm(157): error: [SAVENEX] expected syntax is BAR <loadBar 0/1>,<barColour 0..255>[,<startDelay 0..255>[,<bankDelay 0..255>[,<posY 0..255>]]]: SAVENEX BAR 1, 'L', 'D', 'd',157 0000 SAVENEX BAR 1, 'L', 'D', 'd',158 0000159 0000 ; correct ones with value warnings, and omitting optional argumentssavenexSyntax.asm(160): warning: [SAVENEX] values are not within 0/1 or 0..255 ranges160 0000 SAVENEX BAR 2, 255savenexSyntax.asm(161): warning: [SAVENEX] values are not within 0/1 or 0..255 ranges161 0000 SAVENEX BAR 1, 256savenexSyntax.asm(162): warning: [SAVENEX] values are not within 0/1 or 0..255 ranges162 0000 SAVENEX BAR 1, 255, 256savenexSyntax.asm(163): warning: [SAVENEX] values are not within 0/1 or 0..255 ranges163 0000 SAVENEX BAR 1, 255, 255, 256164 0000 SAVENEX BAR 1, 'L', 'D', 'd' ; one fully valid (no warning)165 0000166 0000 ;; SCREEN L2 [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]167 0000 ; errors - [un]expected argumentssavenexSyntax.asm(168): error: [SAVENEX] unknown screen type (types: BMP, L2, L2_320, L2_640, LR, SCR, SHC, SHR, TILE):168 0000 SAVENEX SCREENsavenexSyntax.asm(169): error: [SAVENEX] unknown screen type (types: BMP, L2, L2_320, L2_640, LR, SCR, SHC, SHR, TILE): NEERCS169 0000 SAVENEX SCREEN NEERCSsavenexSyntax.asm(170): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9170 0000 SAVENEX SCREEN L2 9savenexSyntax.asm(171): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9 ,171 0000 SAVENEX SCREEN L2 9 ,savenexSyntax.asm(172): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9 , $1FFF ,172 0000 SAVENEX SCREEN L2 9 , $1FFF ,savenexSyntax.asm(173): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9 , $1FFF , 10173 0000 SAVENEX SCREEN L2 9 , $1FFF , 10savenexSyntax.asm(174): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9 , $1FFF , 10 ,174 0000 SAVENEX SCREEN L2 9 , $1FFF , 10 ,savenexSyntax.asm(175): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 9 , $1FFF , 10 , $1800,175 0000 SAVENEX SCREEN L2 9 , $1FFF , 10 , $1800,176 0000177 0000 ; errors - wrong valuessavenexSyntax.asm(178): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 224, 0, 0, 0178 0000 SAVENEX SCREEN L2 224, 0, 0, 0 ; pagenum outside of rangesavenexSyntax.asm(179): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN L2 0, 0, 224, 0179 0000 SAVENEX SCREEN L2 0, 0, 224, 0 ; pagenum outside of rangesavenexSyntax.asm(180): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN L2 218, 1, 0, 0180 0000 SAVENEX SCREEN L2 218, 1, 0, 0 ; values in range, but leaks out of memorysavenexSyntax.asm(181): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN L2 0, $1B4001, 0, 0181 0000 SAVENEX SCREEN L2 0, $1B4001, 0, 0 ; values in range, but leaks out of memorysavenexSyntax.asm(182): error: [SAVENEX] palette data address range is outside of Next memory: SAVENEX SCREEN L2 0, 0, 223, 7681182 0000 SAVENEX SCREEN L2 0, 0, 223, 7681 ; values in range, but leaks out of memorysavenexSyntax.asm(183): error: [SAVENEX] palette data address range is outside of Next memory: SAVENEX SCREEN L2 0, 0, 0, $1BFE01183 0000 SAVENEX SCREEN L2 0, 0, 0, $1BFE01 ; values in range, but leaks out of memorysavenexSyntax.asm(184): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN L2 218, 1184 0000 SAVENEX SCREEN L2 218, 1 ; values in range, but leaks out of memorysavenexSyntax.asm(185): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN L2 0, $1B4001185 0000 SAVENEX SCREEN L2 0, $1B4001 ; values in range, but leaks out of memory186 0000 ; not testing correct variants, because it would make impossible to test other types187 0000188 0000 ;; SCREEN LR [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]189 0000 ; errors - [un]expected argumentssavenexSyntax.asm(190): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5190 0000 SAVENEX SCREEN LR 5savenexSyntax.asm(191): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5 ,191 0000 SAVENEX SCREEN LR 5 ,savenexSyntax.asm(192): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5 , $1FFF ,192 0000 SAVENEX SCREEN LR 5 , $1FFF ,savenexSyntax.asm(193): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5 , $1FFF , 10193 0000 SAVENEX SCREEN LR 5 , $1FFF , 10savenexSyntax.asm(194): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5 , $1FFF , 10 ,194 0000 SAVENEX SCREEN LR 5 , $1FFF , 10 ,savenexSyntax.asm(195): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 5 , $1FFF , 10 , $1800,195 0000 SAVENEX SCREEN LR 5 , $1FFF , 10 , $1800,196 0000197 0000 ; errors - wrong valuessavenexSyntax.asm(198): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 224, 0, 0, 0198 0000 SAVENEX SCREEN LR 224, 0, 0, 0 ; pagenum outside of rangesavenexSyntax.asm(199): error: [SAVENEX] expected syntax is ... [<Page8kNum 0..223>,<offset>[,<palPage8kNum 0..223>,<palOffset>]]: SAVENEX SCREEN LR 0, 0, 224, 0199 0000 SAVENEX SCREEN LR 0, 0, 224, 0 ; pagenum outside of rangesavenexSyntax.asm(200): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN LR 222, $1001, 0, 0200 0000 SAVENEX SCREEN LR 222, $1001, 0, 0 ; values in range, but leaks out of memorysavenexSyntax.asm(201): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN LR 0, $1BD001, 0, 0201 0000 SAVENEX SCREEN LR 0, $1BD001, 0, 0 ; values in range, but leaks out of memorysavenexSyntax.asm(202): error: [SAVENEX] palette data address range is outside of Next memory: SAVENEX SCREEN LR 0, 0, 223, 7681202 0000 SAVENEX SCREEN LR 0, 0, 223, 7681 ; values in range, but leaks out of memorysavenexSyntax.asm(203): error: [SAVENEX] palette data address range is outside of Next memory: SAVENEX SCREEN LR 0, 0, 0, $1BFE01203 0000 SAVENEX SCREEN LR 0, 0, 0, $1BFE01 ; values in range, but leaks out of memorysavenexSyntax.asm(204): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN LR 222, $1001204 0000 SAVENEX SCREEN LR 222, $1001 ; values in range, but leaks out of memorysavenexSyntax.asm(205): error: [SAVENEX] pixel data address range is outside of Next memory: SAVENEX SCREEN LR 0, $1BD001205 0000 SAVENEX SCREEN LR 0, $1BD001 ; values in range, but leaks out of memory206 0000 ; not testing correct variants, because it would make impossible to test other types207 0000208 0000 ;; SCREEN (SCR|SHC|SHR) [<hiResColour 0..7>]209 0000 ; there's basically no syntax error possible with these210 0000211 0000 ;; BANK <bank 0..111>[,...]212 0000 ; errors - invalid/missing arguments (will eventually also save some banks correctly)savenexSyntax.asm(213): error: [SAVENEX] expected bank number 0..111: ()213 0000 SAVENEX BANK ()savenexSyntax.asm(214): error: [SAVENEX] expected bank number 0..111: -1214 0000 SAVENEX BANK -1savenexSyntax.asm(215): error: [SAVENEX] expected bank number 0..111: 112215 0000 SAVENEX BANK 112savenexSyntax.asm(216): error: [SAVENEX] expected bank number 0..111:216 0000 SAVENEX BANK 5, ; bank 5 will be storedsavenexSyntax.asm(217): error: [SAVENEX] it's too late to save this bank (correct order: 5, 2, 0, 1, 3, 4, 6, ...): 2217 0000 SAVENEX BANK 0, 2, 3 ; bank 0 will be stored, 2 = wrong order218 0000219 0000 ; revisit screen errors - here no screen should work because bank was written alreadysavenexSyntax.asm(220): error: [SAVENEX] some bank was already stored (store screen ahead)220 0000 SAVENEX SCREEN L2savenexSyntax.asm(221): error: [SAVENEX] some bank was already stored (store screen ahead)221 0000 SAVENEX SCREEN LRsavenexSyntax.asm(222): error: [SAVENEX] some bank was already stored (store screen ahead)222 0000 SAVENEX SCREEN SCRsavenexSyntax.asm(223): error: [SAVENEX] some bank was already stored (store screen ahead)223 0000 SAVENEX SCREEN SHCsavenexSyntax.asm(224): error: [SAVENEX] some bank was already stored (store screen ahead)224 0000 SAVENEX SCREEN SHR 10225 0000226 0000 ;; AUTO [<fromBank 0..111>[,<toBank 0..111>]]savenexSyntax.asm(227): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO 21,227 0000 SAVENEX AUTO 21,savenexSyntax.asm(228): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO 21, 25,228 0000 SAVENEX AUTO 21, 25,savenexSyntax.asm(229): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO -1, 20229 0000 SAVENEX AUTO -1, 20savenexSyntax.asm(230): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO 112, 20230 0000 SAVENEX AUTO 112, 20savenexSyntax.asm(231): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO 21, -1231 0000 SAVENEX AUTO 21, -1savenexSyntax.asm(232): error: [SAVENEX] expected syntax is AUTO [<fromBank 0..111>[,<toBank 0..111>]]: SAVENEX AUTO 21, 112232 0000 SAVENEX AUTO 21, 112savenexSyntax.asm(233): error: [SAVENEX] 'toBank' is less than 'fromBank': SAVENEX AUTO 21, 20233 0000 SAVENEX AUTO 21, 20savenexSyntax.asm(234): error: [SAVENEX] it's too late to save this bank (correct order: 5, 2, 0, 1, 3, 4, 6, ...): 5234 0000 SAVENEX AUTO 5, 1 ; already stored by BANK abovesavenexSyntax.asm(235): error: [SAVENEX] it's too late to save this bank (correct order: 5, 2, 0, 1, 3, 4, 6, ...): 0235 0000 SAVENEX AUTO 0, 1236 0000 SAVENEX AUTO 1, 1 ; correct one (but bank is zeroed = no output)savenexSyntax.asm(237): error: [SAVENEX] it's too late to save this bank (correct order: 5, 2, 0, 1, 3, 4, 6, ...): 1237 0000 SAVENEX AUTO 1, 1 ; but disabled for second try238 0000 SAVENEX AUTO ; correct (but all zeroes = no output)savenexSyntax.asm(239): error: [SAVENEX] all banks are already stored239 0000 SAVENEX AUTO ; but all are disabled now240 0000241 0000 ;; CLOSE [<fileToAppend>]242 0000 SAVENEX CLOSE "savenexSyntax.asm" ; correct one (there's not much to do wrongsavenexSyntax.asm(243): error: [SAVENEX] NEX file is not open243 0000 SAVENEX CLOSE ; should be error (no NEX is open)244 0000245 0000 ;; create small NEX for BIN comparison, if the thing at least somewhat works246 0000 ;; also verify it works twice per source (in sequential order)savenexSyntax.asm(247): warning: [SAVENEX] Start address was also defined by END, OPEN argument used instead247 0000 SAVENEX OPEN "savenexSyntax.bin", $5000248 0000 SAVENEX CORE 2,0,28248 0000 SAVENEX CFG 4,0,0,1248 0000 SAVENEX BAR 0,0,100,0249 0000 ORG $4800249 4800 45 5F F5 44 DB $45, $5F, $F5, $44250 4804 ORG $5000250 5000 18 FE jr $ ; infinite JR loop251 5002 SAVENEX AUTO 5, 5 ; should store bank5252 5002 ; let it close automatically by ending source253 5002254 5002 END $7170 ; invoke warning about different start address# file closed: savenexSyntax.asmValue Label------ - -----------------------------------------------------------