Opry99er Posted March 11, 2017 Share Posted March 11, 2017 (edited) I have done some searching and looked on the Thierry pages and have not come up with an answer to this question. May be inadequate searching on my part, but here goes anyway: What is the maximum size of a program that can be loaded into XB WITH 32k attached? I know the max for a BASIC program is the limit of space in VDP for code (since BASIC cannot access the 32k) but tests have shown me that when the 32k is attached, the XB program loaded from CS1 loads into the 32k and not VDP. (Thanks seniorfalcon for your suggestions!) I have not had time to max out the program size and attempt to save and load to/from tape, but assuming it loads into and runs from the 32k space, do the same size limitations apply to XB that apply to BASIC? In other words, can I load an 18k program from tape into XB WITH 32k attached? Edited March 11, 2017 by Opry99er Quote Link to comment Share on other sites More sharing options...
RXB Posted March 11, 2017 Share Posted March 11, 2017 This depends on the saved file on Tape. If saved in Program Image format the limit is 12K as that is all the space you normally have, but you can increase to almost 14K with CALL FILES(1) Now if saved in Internal Variable 254 format it can load the max memory of 24488 bytes of RAM and will load into Upper 24K RAM of the 32K. (8K of Lower RAM is for Assembly only) "In other words, can I load an 18k program from tape into XB WITH 32k attached?" So yea no problem you can. But as noted it depends how it is saved onto tape as that determines how it loads. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 11, 2017 Author Share Posted March 11, 2017 Ahh, interesting. So the process for saving the program in IV254 format... Does that happen automatically if the size of the program is larger than PROGRAM can store? Or is there something like "SAVE CS1.IV254" that needs to be done in XB to save this program to tape? Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 11, 2017 Author Share Posted March 11, 2017 Some interesting info here. http://atariage.com/forums/topic/176935-cs1er-tape994a-help/page-3 Quote Link to comment Share on other sites More sharing options...
Tursi Posted March 11, 2017 Share Posted March 11, 2017 Ahh, interesting. So the process for saving the program in IV254 format... Does that happen automatically if the size of the program is larger than PROGRAM can store? Or is there something like "SAVE CS1.IV254" that needs to be done in XB to save this program to tape? Rich will have a better answer than me, but I found during the early days of Classic99 disk emulation that it actually depends on how much VRAM is free. When Classic99 didn't reserve any VDP for disk, XB would save larger program images than if the VDP was reserved (even though 32k was attached). I think Rich's choice a few years ago to make RXB /always/ save in IV254 was really smart, since it does away with that potential variation and also makes it very easy on the surface to detect BASIC vs XB (at the cost of not being able to load it in BASIC anymore. But seriously, how many XB programs were compatible with BASIC anyway? ) Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 11, 2017 Author Share Posted March 11, 2017 Very cool. I do not have an RXB cartridge to try the SAVE on my physical system, but I can try it as is to see if it will work. I am hoping that the program being larger than VDP will force the system to SAVE it in IV254 and not kick out an error. Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted March 12, 2017 Share Posted March 12, 2017 I tried this in Win994a which supports saving to and loading fromcassette. (Standard XB cartridge) It works fine with shorter programs and when loaded will put the program into memory expansion just like the disk system does. Large programs that would be saved to disk as IV254 will throw this error: "I/O ERROR 03". Perhaps RXB can save these longer programs to cassette. I believe that a short A/L program could be written that would save and load long XB programs to/from cassette in two sections, something like the way EA5 programs are handled. It would be a bit cumbersome - first you'd have to load the loader from cassette and then the two sections of the program but it should be possible. 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted March 12, 2017 Share Posted March 12, 2017 Ahh, interesting. So the process for saving the program in IV254 format... Does that happen automatically if the size of the program is larger than PROGRAM can store? Or is there something like "SAVE CS1.IV254" that needs to be done in XB to save this program to tape? Yea if the program is larger then VDP size it coverts to IV254 automatically same as disk or hard drive. Quote Link to comment Share on other sites More sharing options...
RXB Posted March 12, 2017 Share Posted March 12, 2017 Rich will have a better answer than me, but I found during the early days of Classic99 disk emulation that it actually depends on how much VRAM is free. When Classic99 didn't reserve any VDP for disk, XB would save larger program images than if the VDP was reserved (even though 32k was attached). I think Rich's choice a few years ago to make RXB /always/ save in IV254 was really smart, since it does away with that potential variation and also makes it very easy on the surface to detect BASIC vs XB (at the cost of not being able to load it in BASIC anymore. But seriously, how many XB programs were compatible with BASIC anyway? ) Thanks Tursi, but that only partially true. RXB saves just like XB does but I added a feature: Normal XB: SAVE CS1 ! Will save in Program Image format it it fits in 12K space of VDP, otherwise it converts anything larger into IV254 automatically. RXB: SAVE CS1 ! Same as Normal XB above or RXB: SAVE CS1,IV254 ! The comma after the name allows the same as say MERGE but I added IV254 (Note the smallest size limit is 2K for IV254) BONUS: Anything saved by RXB will load into normal XB fine no matter what format. Quote Link to comment Share on other sites More sharing options...
RXB Posted March 12, 2017 Share Posted March 12, 2017 (edited) Just to show the issue here is the GPL Source of both RXB and XB, I never took out anything from normal XB but added notes of where RXB has patched the code. GSAVE is the IV254 routine. SAVE is the normal Program Image routine. MERGE option is also listed. GMOV moves the Program from RAM to VDP after loading or saving. [2174] *********************************************************** [2175] * SAVE STATEMENT [2176] * SAVE "NAME", MERGE : Save in crunched form in program [2177] * into a file one line at at time with the line number. [2178] * File opened with sequential accessed, variable-length [2179] * records (161 max), display type & output mode, move one [2180] * line number and one in text to the crunch buffer then [2181] * write to the file one line at a time. [2182] * A normal SAVE : When ERAM not exist or the size of the [2183] * program and line number table in ERAM can fit in VDP [2184] * (can be moved into VDP from ERAM once), then the save [2185] * statement saves a program image to an external device, [2186] * including all the information the system needs for [2187] * rebuilding the program image on a machine with a [2188] * different memory size, also included is a checksum for [2189] * rudimentary error checking and for PROTECTION VIOLATION [2190] * A sequential SAVE : Maximum-length records are performed [2191] * to write the file and each record is copied into the VDP [2192] * from ERAM before it is written. [2193] *********************************************************** [2194] 8DB8 DA,45,80 SAVE CLOG >80,@FLAG * PROTECTION VIOLATION [2195] 8DBB 57,DB BR ERRPV [2196] 8DBD 06,92,35 CALL GPNAME This will also close all file [2197] * Check SAVE "NAME", MERGE or SAVE "NAME", PROTECTED first [2198] 8DC0 86,A3,B9 CLR V@SAPROT Clear "PROTECTED" flag [2199] 8DC3 0F,79 XML PGMCHR [2200] 8DC5 8E,42 CZ @CHAT EOL? [2201] 8DC7 6E,2B BS SAZ1 Yes, no need to check any opt [2202] 8DC9 D6,42,B3 CEQ COMMAZ,@CHAT Has to be a comma here [2203] 8DCC 41,09 BR ERRSYN [2204] 8DCE D7,B0,2C DCEQ >C805,V*PGMPTR Unquoted string with length 5 8DD1 C8,05 [2205] * has to be MERGE at this time [2206] 8DD3 4D,F4 BR G8DF4 [2207] 8DD5 D7,E0,02 DCEQ >4D45,V@2(@PGMPTR) "ME" of MErge 8DD8 2C,4D,45 [2208] * RXB PATCH CODE OPTION ADDED IV254 FOR SAVE 2015 ********* [2209] * SAVE "DSK#.FILENAME",MERGE ! SAVE MERGE FORMAT [2210] * SAVE "DSK#.FILENAME",IV254 ! SAVE IV254 PROGRAM FORMAT [2211] * SAVE "DSK#.FILENAME" ! NORMAL PROGRAM FORMAT OR IV254 [2212] * BR ERRSYN If not : SYNTAX ERROR [2213] 8DDB 5F,7C BR CIV254 CHECK FOR IV254 OPTION [2214] 8DDD D7,E0,04 DCEQ >5247,V@4(@PGMPTR) "RG" of meRGe 8DE0 2C,52,47 [2215] 8DE3 41,09 BR ERRSYN If not : SYNTAX ERROR [2216] 8DE5 D6,E0,06 CEQ >45,V@6(@PGMPTR) "E" of mergE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0039 FLMGR-359 8DE8 2C,45 [2217] 8DEA 41,09 BR ERRSYN If not : SYNTAX ERROR [2218] 8DEC 8E,E0,07 CZ V@7(@PGMPTR) Check for EOL 8DEF 2C [2219] 8DF0 41,09 BR ERRSYN Not EOL : SYNTAX ERROR [2220] 8DF2 4F,76 BR SAVMG Go to handle this option [2221] * Has to be PROTECTED option here, crunched as unquoted str [2222] 8DF4 D7,B0,2C G8DF4 DCEQ >C809,V*PGMPTR Unquoted string with length 9 8DF7 C8,09 [2223] * has to be PROTECTED [2224] 8DF9 41,09 BR ERRSYN [2225] 8DFB D7,E0,02 DCEQ >5052,V@2(@PGMPTR) "PR" of PRotected 8DFE 2C,50,52 [2226] 8E01 41,09 BR ERRSYN If not : SYNTAX ERROR [2227] 8E03 D7,E0,04 DCEQ >4F54,V@4(@PGMPTR) "OT" of prOTected 8E06 2C,4F,54 [2228] 8E09 41,09 BR ERRSYN If not : SYNTAX ERROR [2229] 8E0B D7,E0,06 DCEQ >4543,V@6(@PGMPTR) "EC" of protECted 8E0E 2C,45,43 [2230] 8E11 41,09 BR ERRSYN If not : SYNTAX ERROR [2231] 8E13 D7,E0,08 DCEQ >5445,V@8(@PGMPTR) "TE",of protecTEd 8E16 2C,54,45 [2232] 8E19 41,09 BR ERRSYN If not : SYNTAX ERROR [2233] 8E1B D6,E0,0A CEQ >44,V@10(@PGMPTR) "D" of protecteD 8E1E 2C,44 [2234] 8E20 41,09 BR ERRSYN If not : SYNTAX ERROR [2235] 8E22 8E,E0,0B CZ V@11(@PGMPTR) Check EOL 8E25 2C [2236] 8E26 41,09 BR ERRSYN [2237] 8E28 90,A3,B9 INC V@SAPROT [2238] *********************************************************** [2239] 8E2B 8E,80,84 SAZ1 CZ @RAMTOP If ERAM NOT present then [2240] 8E2E 4E,42 BR G8E42 [2241] ***** CLEAR THE BREAKPOINT IN VDP ALONE TO SPEED UP ******* [2242] 8E30 BD,52,30 DST @STLN,@FAC8 End of line # buffer [2243] 8E33 B2,B0,52 G8E33 AND >7F,V*FAC8 Clear the breakpoint 8E36 7F [2244] 8E37 A3,52,00 DADD 4,@FAC8 Move to the next one 8E3A 04 [2245] 8E3B C5,52,32 DCH @ENLN,@FAC8 Until done [2246] 8E3E 4E,33 BR G8E33 [2247] 8E40 4E,69 BR VSAVZ [2248] 8E42 06,A0,20 G8E42 CALL UBSUB Clear the breakpoint in ERAM [2249] 8E45 BD,02,80 DST @RAMTOP,@MNUM Top of memory in ERAM 8E48 84 [2250] 8E49 A5,02,30 DSUB @STLN,@MNUM [2251] 8E4C 91,02 DINC @MNUM # of bytes total in ERAM [2252] 8E4E BD,00,70 DST @HIVDP,@VAR0 Top of memory in VDP [2253] 8E51 A5,00,02 DSUB @MNUM,@VAR0 [2254] 8E54 91,00 DINC @VAR0 [2255] * Check is there enough memory in VDP to move the program [2256] * text and line number table from ERAM to VDP [2257] 8E56 0A GT Not enough memory in VDP for sur [2258] 8E57 4E,B7 BR GSAVE [2259] 8E59 BF,10,0A DST VRAMVS+64+256,@VAR5 * 64 bytes are for safety b 8E5C 98 [2260] [2261] * DSR routine give file error when loading a program which [2262] * VDP maximum size and was saved from VDP to be a program [2263] * on disk when ERAM not exist. In order to fix this proble [2264] * restrict the program memory to be 256 bytes less then th [2265] * real space in VDP when ERAM not exist. [2266] 8E5D C9,00,10 DCHE @VAR5,@VAR0 Not enough memory in VDP, do [2267] * sequential file save 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0040 FLMGR-359 [2268] 8E60 4E,B7 BR GSAVE [2269] 8E62 A7,10,00 DSUB 10,@VAR5 * 10 bytes for control informat 8E65 0A [2270] 8E66 06,8F,4A CALL GVMOV Enough memory in VDP, move it [2271] * over and do the normal save l [2272] **************** Without ERAM, or after GVMOV ************* [2273] **************** do the normal save ************* [2274] 8E69 BD,0A,40 VSAVZ DST @FREPTR,@STADDR Store additional control info [2275] 8E6C 93,0A DDEC @STADDR Back up some more for 2 byte [2276] 8E6E BD,B0,0A DST @>8370,V*STADDR First current top of memory 8E71 70 [2277] 8E72 97,0A DDECT @STADDR [2278] 8E74 BD,B0,0A DST @STLN,V*STADDR Then STLN 8E77 30 [2279] 8E78 97,0A DDECT @STADDR [2280] 8E7A BD,B0,0A DST @ENLN,V*STADDR Then ENLN 8E7D 32 [2281] 8E7E 97,0A DDECT @STADDR Then [2282] 8E80 BD,B0,0A DST @STLN,V*STADDR 8E83 30 [2283] 8E84 B9,B0,0A DXOR @ENLN,V*STADDR STLN XORed with ENLN 8E87 32 [2284] 8E88 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8E8B 01 [2285] 8E8C 4E,91 BR G8E91 [2286] 8E8E 83,B0,0A DNEG V*STADDR Negate the CHECKSUM to indica [2287] * LIST/EDIT protection [2288] 8E91 BD,E0,06 G8E91 DST @STADDR,V@BUF(@PABPTR) Save start address in P 8E94 04,0A [2289] 8E96 93,0A DDEC @STADDR [2290] 8E98 BD,E0,0A DST @>8370,V@RNM(@PABPTR) Compute # of bytes used 8E9B 04,70 [2291] 8E9D A5,E0,0A DSUB @STADDR,V@RNM(@PABPTR) and store that in PAB 8EA0 04,0A [2292] 8EA2 8E,80,84 CZ @RAMTOP If ERAM exists then [2293] 8EA5 6E,AD BS G8EAD [2294] 8EA7 BD,30,0C DST @BBB1,@STLN Restore the original STLN, EN [2295] 8EAA BD,32,08 DST @CCC1,@ENLN which points to ERAM [2296] 8EAD 06,97,5E G8EAD CALL IOCALL Call Device Service Routine f [2297] 8EB0 06 BYTE CZSAVE * SAVE operation [2298] 8EB1 06,60,22 LRTOPL CALL KILSYM Release string space/symbol t [2299] 8EB4 05,60,12 B TOPL15 Go back to toplevel [2300] *********************************************************** [2301] * Open the sequential file, set the PAB [2302] * File type : sequential file [2303] * Mode of operation : output [2304] * Data type : internal [2305] * Record type : variable length records [2306] * Logical record length : 254 maximum [2307] 8EB7 31,00,09 GSAVE MOVE 9,G@PAB3,V@4(@PABPTR) Build the PAB 8EBA E0,04,04 8EBD 8D,24 [2308] 8EBF 96,E0,05 DECT V@FLG(@PABPTR) Put in the correct I/O mode : 8EC2 04 [2309] * Compute the data buffer address [2310] 8EC3 BD,4A,70 DST @>8370,@FAC [2311] 8EC6 A7,4A,00 DSUB 253,@FAC 8EC9 FD [2312] 8ECA BD,E0,06 DST @FAC,V@BUF(@PABPTR) 8ECD 04,4A [2313] 8ECF BD,58,4A DST @FAC,@EEE1 Save it for later use in GVWITE [2314] 8ED2 06,97,6B CALL CDSR Call device service routine to o [2315] 8ED5 57,94 BR ERRZ2B Return with ERROR indication in [2316] * Put 8 bytes control info at the 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0041 FLMGR-359 [2317] * beginning of the data buffer [2318] 8ED7 BF,B0,4A DST >ABCD,V*FAC >ABCD indentifies a program f 8EDA AB,CD [2319] 8EDC 95,4A DINCT @FAC when doing LOAD later [2320] 8EDE BD,B0,4A DST @STLN,V*FAC Save STLN in control info 8EE1 30 [2321] 8EE2 95,4A DINCT @FAC [2322] 8EE4 BD,B0,4A DST @ENLN,V*FAC ENLN too 8EE7 32 [2323] 8EE8 95,4A DINCT @FAC [2324] 8EEA BD,B0,4A DST @STLN,V*FAC 8EED 30 [2325] 8EEE B9,B0,4A DXOR @ENLN,V*FAC Save the checksum 8EF1 32 [2326] 8EF2 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8EF5 01 [2327] 8EF6 4E,FB BR G8EFB [2328] 8EF8 83,B0,4A DNEG V*FAC Negate the CHECKSUM to indica [2329] * the LIST/EDIT protection [2330] 8EFB 95,4A G8EFB DINCT @FAC [2331] 8EFD BD,B0,4A DST @RAMTOP,V*FAC Save the top of memory info 8F00 80,84 [2332] 8F02 BE,E0,09 ST 10,V@CNT(@PABPTR) Set the caracter count in PAB 8F05 04,0A [2333] 8F07 06,97,5E CALL IOCALL Call device service routine [2334] 8F0A 03 BYTE CZWRIT * With I/O opcode : write, to s [2335] * the control info for the first reco [2336] * Now start to use maximum-length record to write the file [2337] * and each record is copied into the VDP from ERAM bofore i [2338] * is written [2339] 8F0B BD,54,30 DST @STLN,@DDD1 Starting address on ERAM [2340] * DST @>8370,@EEE1 @EEE1 has been set up before [2341] * DST 253,@EEE1 Starting address of the data [2342] * buffer on VDP [2343] 8F0E BD,08,80 DST @RAMTOP,@CCC1 8F11 84 [2344] 8F12 A5,08,30 DSUB @STLN,@CCC1 [2345] 8F15 91,08 DINC @CCC1 [2346] 8F17 BE,E0,09 ST 254,V@CNT(@PABPTR) Set the character count of P 8F1A 04,FE [2347] 8F1C BF,56,00 G8F1C DST 254,@FFF1 @FFF1 byte count 8F1F FE [2348] 8F20 0F,8B XML GVWITE Move data from ERAM to VDP [2349] 8F22 06,97,5E CALL IOCALL Call device service routine [2350] 8F25 03 BYTE CZWRIT [2351] 8F26 A3,54,00 DADD 254,@DDD1 Update the source addr on ERA 8F29 FE [2352] 8F2A A7,08,00 DSUB 254,@CCC1 # of bytes left to move 8F2D FE [2353] 8F2E 6F,44 BS GSAV1 No more bytes to save [2354] 8F30 CB,08,00 DCHE 254,@CCC1 Leave the last record alone 8F33 FE [2355] 8F34 6F,1C BS G8F1C [2356] * Move the last @CCC1 bytes from ERAM to VDP [2357] 8F36 BD,56,08 DST @CCC1,@FFF1 @FFF1 : Byte count [2358] 8F39 0F,8B XML GVWITE Write data from ERAM to VDP [2359] 8F3B BC,E0,09 ST @CCC1+1,V@CNT(@PABPTR) Update the character cou 8F3E 04,09 [2360] * in PAB [2361] 8F40 06,97,5E CALL IOCALL Call device service routine [2362] 8F43 03 BYTE CZWRIT [2363] 8F44 06,97,5E GSAV1 CALL IOCALL [2364] 8F47 01 BYTE CZCLOS * Close the file [2365] 8F48 4E,B1 BR LRTOPL Continue 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0042 FLMGR-359 [2366] *********************************************************** [2367] * Move the program text & line # table to VDP, and relocate [2368] 8F4A BD,0C,30 GVMOV DST @STLN,@BBB1 Save STLN, ENLN for later use [2369] 8F4D BD,08,32 DST @ENLN,@CCC1 [2370] 8F50 BD,54,30 DST @STLN,@DDD1 Source addr on ERAM [2371] 8F53 BD,58,10 DST @VAR5,@EEE1 Destination addr on VDP [2372] 8F56 BD,0A,58 DST @EEE1,@STADDR Use later for RELOCA [2373] 8F59 BD,56,80 DST @RAMTOP,@FFF1 8F5C 84 [2374] 8F5D A5,56,30 DSUB @STLN,@FFF1 # of bytes to move [2375] 8F60 91,56 DINC @FFF1 @FFF1 : byte count for GVWITE [2376] 8F62 0F,8B XML GVWITE Move from ERAM to VDP [2377] 8F64 BD,A3,BC DST @RAMTOP,V@OLDTOP Set up @RAMTOP for old top 8F67 80,84 [2378] * of memory [2379] 8F69 BD,A3,BE DST @>8370,V@NEWTOP Set up @>8370 for new top 8F6C 70 [2380] * of memory [2381] 8F6D 06,8D,36 CALL RELOCA Relocate the program [2382] 8F70 BD,40,30 DST @STLN,@FREPTR Set up @FREPTR [2383] 8F73 93,40 DDEC @FREPTR [2384] 8F75 00 RTN [2385] *********************************************************** [2386] * Save the crunched form of a program into a file. [2387] * Move the line number and text to the crunch buffer, then [2388] * write to the file one line at a time. [2389] *********************************************************** [2390] * Open the file with: [2391] * I/O opcode : OPEN [2392] * File type : SEQUENTIAL file [2393] * Mode of operation : OUTPUT [2394] * Data type : DISPLAY type data [2395] * Record type : VARIABLE LENGTH records [2396] * Data buffer address : Crunch buffer address [2397] * Logical record length : 163 (length of curnch buffer + 2 [2398] * bytes for line #) maximum [2399] 8F76 31,00,09 SAVMG MOVE 9,G@PAB1,V@4(@PABPTR) Build PAB 8F79 E0,04,04 8F7C 8F,F9 [2400] 8F7E 06,97,65 CALL IOCLZ1 Call the DSR routine to open fil [2401] 8F81 BD,50,32 DST @ENLN,@FAC6 Start from the first line # [2402] 8F84 A7,50,00 DSUB 3,@FAC6 @FAC6 now points to the 1st line 8F87 03 [2403] * Write to the file from crunch bu [2404] * one line at a time [2405] 8F88 86,00 G8F88 CLR @VAR0 Make it a two byte later [2406] 8F8A 8E,80,84 CZ @RAMTOP If ERAM exists then [2407] 8F8D 6F,B6 BS G8FB6 [2408] 8F8F BD,54,50 DST @FAC6,@DDD1 Write the 4 bytes (line # and [2409] * line pointer) from ERAM to [2410] * crunch buffer [2411] * @DDD1 : Source address on ERA [2412] 8F92 BF,58,08 DST CRNBUF,@EEE1 @EEE1 : Destination address 8F95 20 [2413] * on VDP [2414] 8F96 BF,56,00 DST 4,@FFF1 @FFF1 : byte count 8F99 04 [2415] 8F9A 0F,8B XML GVWITE Write data from ERAM to VDP [2416] 8F9C BD,54,A8 DST V@CRNBUF+2,@DDD1 Line pointer now points to 8F9F 22 [2417] * length byte [2418] 8FA0 93,54 DDEC @DDD1 Get the length of this line [2419] * @DDD1 : Source address on ERA [2420] 8FA2 91,56 DINC @FFF1 @FFF1 : Byte count, coming ba 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0043 FLMGR-359 [2421] * from GVWITE above, =0 [2422] 8FA4 0F,8C XML GREAD1 Read the length byte from ERA [2423] 8FA6 BC,01,58 ST @EEE1,@VAR0+1 @EEE1 : Destination addr on C [2424] 8FA9 BF,58,08 DST CRNBUF+2,@EEE1 Write the text from ERAM to 3 8FAC 22 [2425] * byte of crunch buffer [2426] * @EEE1 : Destination addr on V [2427] * @DDD1 : Source addr on ERAM [2428] 8FAD 91,54 DINC @DDD1 Back to point to the text [2429] 8FAF BD,56,00 DST @VAR0,@FFF1 @FFF1 : Byte count [2430] 8FB2 0F,8B XML GVWITE Write data from ERAM to VDP [2431] 8FB4 4F,CD BR G8FCD ERAM not exist : line # table [2432] * and text in VDP [2433] 8FB6 BD,A8,20 G8FB6 DST V*FAC6,V@CRNBUF PUT THE LINE # IN 8FB9 B0,50 [2434] 8FBB BD,4C,E0 DST V@2(@FAC6),@FAC2 Get the line pointer out 8FBE 02,50 [2435] 8FC0 93,4C DDEC @FAC2 Line pointer now points to th [2436] * length byte [2437] 8FC2 BC,01,B0 ST V*FAC2,@VAR0+1 Get the length out 8FC5 4C [2438] * Move the text into the crunch buffer [2439] 8FC6 34,00,A8 MOVE @VAR0,V@1(@FAC2),V@CRNBUF+2 8FC9 22,E0,01 8FCC 4C [2440] 8FCD B2,A8,20 G8FCD AND >7F,V@CRNBUF Reset possible breakpoint 8FD0 7F [2441] 8FD1 95,00 DINCT @VAR0 * Total length=text length+line # len [2442] 8FD3 BC,E0,09 ST @VAR0+1,V@CNT(@PABPTR) Store in the cahracter c 8FD6 04,01 [2443] 8FD8 06,97,5E CALL IOCALL Call the device service routi [2444] 8FDB 03 BYTE CZWRIT * Write [2445] 8FDC A7,50,00 DSUB 4,@FAC6 Go to the next line # 8FDF 04 [2446] 8FE0 C9,50,30 DCHE @STLN,@FAC6 Finish moving all [2447] 8FE3 6F,88 BS G8F88 [2448] 8FE5 BF,A8,20 DST >FFFF,V@CRNBUF Set up a EOF for the last rec 8FE8 FF,FF [2449] 8FEA BE,E0,09 ST 2,V@CNT(@PABPTR) Only write this 2 bytes 8FED 04,02 [2450] 8FEF 06,97,5E CALL IOCALL Call the device service routi [2451] 8FF2 03 BYTE CZWRIT * Write [2452] 8FF3 06,97,5E CALL IOCALL Call the device service routi [2453] 8FF6 01 BYTE CZCLOS * Close the file [2454] 8FF7 4E,B1 BR LRTOPL Go back to top level [2455] 8FF9 00,12,08 PAB1 BYTE >00,>12,>08,>20,>A3,>00,>00,>00,>60 8FFC 20,A3,00 8FFF 00,00,60 [2456] * >0820 = CRNBUF [2457] * >A3 = 163 [2458] * >60 = OFFSET [2459] *********************************************************** [2460] * MERGE ROUTINE [2461] * MERGE load a file which is in crunched program form into [2462] * the CRNBUF one record (one in) at a time then take the [2463] * line # out in FAC, text length into @CHAT, and edit it [2464] * into the program. Identify EOF by the last record which [2465] * is set up at SAVE time. [2466] *********************************************************** [2467] 9002 06,92,35 MERGE CALL GPNAME Close all file, set up PAB [2468] 9005 DA,45,80 CLOG >80,@FLAG Check PROTECTION VIOLATION [2469] 9008 57,DB BR ERRPV [2470] * To fix the bug #06 in MERGE [2471] 900A 0F,79 XML PGMCHR Check EOL 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0044 FLMGR-359 [2472] 900C 8E,42 CZ @CHAT [2473] 900E 41,09 BR ERRSYN Not EOL : SYNTAX ERROR [2474] * Open the file with [2475] * I/O opcode : OPEN [2476] * File type : SEQUENTIAL file [2477] * Mode of operation : INPUT [2478] * Data type : DISPLAY type data [2479] * Record type : VARIABLE LENGTH records [2480] * Data buffer address : crunch address [2481] * Logical record length : 163 maximum [2482] 9010 31,00,09 MOVE 9,G@PAB1,V@4(@PABPTR) Set up PAB 9013 E0,04,04 9016 8F,F9 [2483] 9018 94,E0,05 INCT V@FLG(@PABPTR) Put in correct I/O mode : >14 901B 04 [2484] 901C 06,97,65 CALL IOCLZ1 Call the device service routi [2485] * to open the file [2486] 901F 06,97,5E CALL IOCALL Call the device service routi [2487] 9022 02 BYTE CZREAD * to read [2488] 9023 D7,A8,20 DCEQ >FFFF,V@CRNBUF If 1st rec is EOF 9026 FF,FF [2489] 9028 77,94 BS ERRZ2B [2490] 902A 87,80,D6 G902A DCLR @>83D6 Read in one line and edit it [2491] * program [2492] 902D BC,42,E0 ST V@CNT(@PABPTR),@CHAT Length of this record 9030 09,04 [2493] 9032 96,42 DECT @CHAT Text length = total length-2 [2494] * (line # length) [2495] * Put it in @CHAT for EDITLN [2496] 9034 BD,4A,A8 DST V@CRNBUF,@FAC Put the line # in @FAC for ED 9037 20 [2497] 9038 86,56 CLR @FAC12 Make it a double byte [2498] 903A BC,57,42 ST @CHAT,@FAC13 [2499] * Move the text up 2 bytes [2500] 903D 34,56,A8 MOVE @FAC12,V@CRNBUF+2,V@CRNBUF 9040 20,A8,22 [2501] 9043 BD,A3,9E DST @PABPTR,V@MRGPAB SAVE PAB POINTER 9046 04 [2502] 9047 06,60,32 CALL EDITLN EDIT IT TO THE PROGRAM [2503] 904A 87,04 DCLR @PABPTR Clear temporary PAB pointer [2504] 904C C1,04,A3 DEX V@MRGPAB,@PABPTR Restore old PAB pointer 904F 9E [2505] 9050 06,97,5E CALL IOCALL CALL THE DEVICE SERVICE ROUTI [2506] 9053 02 BYTE CZREAD * read another record or anoth [2507] * line [2508] 9054 D7,A8,20 DCEQ >FFFF,V@CRNBUF End of EOF 9057 FF,FF [2509] 9059 50,2A BR G902A [2510] * Double check EOF record [2511] 905B D6,E0,09 MERGZ1 CEQ 2,V@CNT(@PABPTR) I/O ERROR 905E 04,02 [2512] 9060 57,94 BR ERRZ2B [2513] 9062 06,97,5E CALL IOCALL Call the device service routi [2514] 9065 01 BYTE CZCLOS * close the file [2515] 9066 4E,B1 BR LRTOPL Go back to top level [2516] *********************************************************** [3697] *********************************************************** [3698] 9F7C D7,E0,02 CIV254 DCEQ >4956,V@2(@PGMPTR) * IV? 9F7F 2C,49,56 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0073 FLMGR-359 [3699] 9F82 41,09 BR ERRSYN [3700] 9F84 D7,E0,04 DCEQ >3235,V@4(@PGMPTR) * 25? 9F87 2C,32,35 [3701] 9F8A 41,09 BR ERRSYN [3702] 9F8C D6,E0,06 CEQ >34,V@6(@PGMPTR) * 4? 9F8F 2C,34 [3703] 9F91 41,09 BR ERRSYN [3704] 9F93 8E,80,84 CZ @RAMTOP [3705] 9F96 6E,2B BS SAZ1 [3706] 9F98 CB,80,86 DCHE >FEE7,@RAMFRE * MINIMUM SIZE TO SAVE IV254 9F9B FE,E7 [3707] 9F9D 6E,2B BS SAZ1 * PROGRAM FORMAT [3708] 9F9F 4E,B7 BR GSAVE * IV254 FORMAT [3709] *********************************************************** Edited March 12, 2017 by RXB 1 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted March 14, 2017 Share Posted March 14, 2017 Normal XB: SAVE CS1 ! Will save in Program Image format it it fits in 12K space of VDP, otherwise it converts anything larger into IV254 automatically. RXB: SAVE CS1 ! Same as Normal XB above or RXB: SAVE CS1,IV254 ! The comma after the name allows the same as say MERGE but I added IV254 (Note the smallest size limit is 2K for IV254) BONUS: Anything saved by RXB will load into normal XB fine no matter what format. Have you actually been able to save a large program to CS1? I have tried saving a 17K program to cassette using both Win994a and Classic99 and both of them give this message: "I/O ERROR 03". It is true that Classic99 does not support the cassette and trying to save a short program locks up the emulator just as described in the manual. But saving the 17K program does not even get that far, it just gives the error message and exits to the flashing cursor on the command line. Maybe the presence of the disk drive is causing this failure? Or maybe it will only work with RXB? I think the results will be the same with real iron, but have not tried this yet. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 14, 2017 Author Share Posted March 14, 2017 I will try this tonight and report back here with results. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 14, 2017 Author Share Posted March 14, 2017 TIXB: I/O Error 03 XB2.7: I/O Error 03 Guess that answers that. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 14, 2017 Author Share Posted March 14, 2017 BTW, 16,896 bytes. We shall see if I can get it down a couple K and we will try again. Quote Link to comment Share on other sites More sharing options...
RXB Posted March 14, 2017 Share Posted March 14, 2017 TIXB: I/O Error 03 XB2.7: I/O Error 03 Guess that answers that. I do not have a cassette so have you tried RXB 2015E? SAVE CS1,IV254 If you get a IO error I think I know the part of the code causing this problem. Also in RXB you could use a few commands built in to do this. 1. CALL MOVES ("RV",8192,RAM address,VDP address) ! This moves the RAM program to a vdp address 2. CALL IO(4,8192,VDP address) ! This would save to CS1 the data in Program Image format to Cassette tape 3. Loop 1 & 2 until entire upper 24K is moved and saved to Cassette tape 4. To reload use the save method in reverse. [2260] [2261] * DSR routine give file error when loading a program which [2262] * VDP maximum size and was saved from VDP to be a program [2263] * on disk when ERAM not exist. In order to fix this problem [2264] * restrict the program memory to be 256 bytes less then th [2265] * real space in VDP when ERAM not exist. [2266] 8E5D C9,00,10 DCHE @VAR5,@VAR0 Not enough memory in VDP, do [2267] * sequential file save 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0040 FLMGR-359 [2268] 8E60 4E,B7 BR GSAVE [2269] 8E62 A7,10,00 DSUB 10,@VAR5 * 10 bytes for control informat 8E65 0A [2270] 8E66 06,8F,4A CALL GVMOV Enough memory in VDP, move it [2271] * over and do the normal save l [2272] **************** Without ERAM, or after GVMOV ************* [2273] **************** do the normal save ************* [2274] 8E69 BD,0A,40 VSAVZ DST @FREPTR,@STADDR Store additional control info [2275] 8E6C 93,0A DDEC @STADDR Back up some more for 2 byte [2276] 8E6E BD,B0,0A DST @>8370,V*STADDR First current top of memory 8E71 70 [2277] 8E72 97,0A DDECT @STADDR [2278] 8E74 BD,B0,0A DST @STLN,V*STADDR Then STLN 8E77 30 [2279] 8E78 97,0A DDECT @STADDR [2280] 8E7A BD,B0,0A DST @ENLN,V*STADDR Then ENLN 8E7D 32 [2281] 8E7E 97,0A DDECT @STADDR Then [2282] 8E80 BD,B0,0A DST @STLN,V*STADDR 8E83 30 [2283] 8E84 B9,B0,0A DXOR @ENLN,V*STADDR STLN XORed with ENLN 8E87 32 [2284] 8E88 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8E8B 01 [2285] 8E8C 4E,91 BR G8E91 [2286] 8E8E 83,B0,0A DNEG V*STADDR Negate the CHECKSUM to indica [2287] * LIST/EDIT protection [2288] 8E91 BD,E0,06 G8E91 DST @STADDR,V@BUF(@PABPTR) Save start address in P 8E94 04,0A [2289] 8E96 93,0A DDEC @STADDR [2290] 8E98 BD,E0,0A DST @>8370,V@RNM(@PABPTR) Compute # of bytes used 8E9B 04,70 [2291] 8E9D A5,E0,0A DSUB @STADDR,V@RNM(@PABPTR) and store that in PAB 8EA0 04,0A [2292] 8EA2 8E,80,84 CZ @RAMTOP If ERAM exists then [2293] 8EA5 6E,AD BS G8EAD [2294] 8EA7 BD,30,0C DST @BBB1,@STLN Restore the original STLN, EN [2295] 8EAA BD,32,08 DST @CCC1,@ENLN which points to ERAM [2296] 8EAD 06,97,5E G8EAD CALL IOCALL Call Device Service Routine f [2297] 8EB0 06 BYTE CZSAVE * SAVE operation [2298] 8EB1 06,60,22 LRTOPL CALL KILSYM Release string space/symbol t [2299] 8EB4 05,60,12 B TOPL15 Go back to toplevel [2300] *********************************************************** [2301] * Open the sequential file, set the PAB [2302] * File type : sequential file [2303] * Mode of operation : output [2304] * Data type : internal [2305] * Record type : variable length records [2306] * Logical record length : 254 maximum [2307] 8EB7 31,00,09 GSAVE MOVE 9,G@PAB3,V@4(@PABPTR) Build the PAB 8EBA E0,04,04 8EBD 8D,24 [2308] 8EBF 96,E0,05 DECT V@FLG(@PABPTR) Put in the correct I/O mode : 8EC2 04 [2309] * Compute the data buffer address [2310] 8EC3 BD,4A,70 DST @>8370,@FAC [2311] 8EC6 A7,4A,00 DSUB 253,@FAC 8EC9 FD [2312] 8ECA BD,E0,06 DST @FAC,V@BUF(@PABPTR) 8ECD 04,4A [2313] 8ECF BD,58,4A DST @FAC,@EEE1 Save it for later use in GVWITE [2314] 8ED2 06,97,6B CALL CDSR Call device service routine to o [2315] 8ED5 57,94 BR ERRZ2B Return with ERROR indication in [2316] * Put 8 bytes control info at the 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0041 FLMGR-359 [2317] * beginning of the data buffer [2318] 8ED7 BF,B0,4A DST >ABCD,V*FAC >ABCD indentifies a program f 8EDA AB,CD [2319] 8EDC 95,4A DINCT @FAC when doing LOAD later [2320] 8EDE BD,B0,4A DST @STLN,V*FAC Save STLN in control info 8EE1 30 [2321] 8EE2 95,4A DINCT @FAC [2322] 8EE4 BD,B0,4A DST @ENLN,V*FAC ENLN too 8EE7 32 [2323] 8EE8 95,4A DINCT @FAC [2324] 8EEA BD,B0,4A DST @STLN,V*FAC 8EED 30 [2325] 8EEE B9,B0,4A DXOR @ENLN,V*FAC Save the checksum 8EF1 32 [2326] 8EF2 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8EF5 01 [2327] 8EF6 4E,FB BR G8EFB [2328] 8EF8 83,B0,4A DNEG V*FAC Negate the CHECKSUM to indica [2329] * the LIST/EDIT protection [2330] 8EFB 95,4A G8EFB DINCT @FAC [2331] 8EFD BD,B0,4A DST @RAMTOP,V*FAC Save the top of memory info 8F00 80,84 [2332] 8F02 BE,E0,09 ST 10,V@CNT(@PABPTR) Set the caracter count in PAB 8F05 04,0A [2333] 8F07 06,97,5E CALL IOCALL Call device service routine [2334] 8F0A 03 BYTE CZWRIT * With I/O opcode : write, to s [2335] * the control info for the first reco [2336] * Now start to use maximum-length record to write the file [2337] * and each record is copied into the VDP from ERAM bofore i [2338] * is written [2339] 8F0B BD,54,30 DST @STLN,@DDD1 Starting address on ERAM [2340] * DST @>8370,@EEE1 @EEE1 has been set up before [2341] * DST 253,@EEE1 Starting address of the data [2342] * buffer on VDP [2343] 8F0E BD,08,80 DST @RAMTOP,@CCC1 8F11 84 [2344] 8F12 A5,08,30 DSUB @STLN,@CCC1 [2345] 8F15 91,08 DINC @CCC1 [2346] 8F17 BE,E0,09 ST 254,V@CNT(@PABPTR) Set the character count of P 8F1A 04,FE [2347] 8F1C BF,56,00 G8F1C DST 254,@FFF1 @FFF1 byte count 8F1F FE [2348] 8F20 0F,8B XML GVWITE Move data from ERAM to VDP [2349] 8F22 06,97,5E CALL IOCALL Call device service routine [2350] 8F25 03 BYTE CZWRIT [2351] 8F26 A3,54,00 DADD 254,@DDD1 Update the source addr on ERA 8F29 FE [2352] 8F2A A7,08,00 DSUB 254,@CCC1 # of bytes left to move 8F2D FE [2353] 8F2E 6F,44 BS GSAV1 No more bytes to save [2354] 8F30 CB,08,00 DCHE 254,@CCC1 Leave the last record alone 8F33 FE [2355] 8F34 6F,1C BS G8F1C [2356] * Move the last @CCC1 bytes from ERAM to VDP [2357] 8F36 BD,56,08 DST @CCC1,@FFF1 @FFF1 : Byte count [2358] 8F39 0F,8B XML GVWITE Write data from ERAM to VDP [2359] 8F3B BC,E0,09 ST @CCC1+1,V@CNT(@PABPTR) Update the character cou 8F3E 04,09 [2360] * in PAB [2361] 8F40 06,97,5E CALL IOCALL Call device service routine [2362] 8F43 03 BYTE CZWRIT [2363] 8F44 06,97,5E GSAV1 CALL IOCALL [2364] 8F47 01 BYTE CZCLOS * Close the file [2365] 8F48 4E,B1 BR LRTOPL Continue 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0042 FLMGR-359 [2366] *********************************************************** [2367] * Move the program text & line # table to VDP, and relocate [2368] 8F4A BD,0C,30 GVMOV DST @STLN,@BBB1 Save STLN, ENLN for later use [2369] 8F4D BD,08,32 DST @ENLN,@CCC1 [2370] 8F50 BD,54,30 DST @STLN,@DDD1 Source addr on ERAM [2371] 8F53 BD,58,10 DST @VAR5,@EEE1 Destination addr on VDP [2372] 8F56 BD,0A,58 DST @EEE1,@STADDR Use later for RELOCA [2373] 8F59 BD,56,80 DST @RAMTOP,@FFF1 8F5C 84 [2374] 8F5D A5,56,30 DSUB @STLN,@FFF1 # of bytes to move [2375] 8F60 91,56 DINC @FFF1 @FFF1 : byte count for GVWITE [2376] 8F62 0F,8B XML GVWITE Move from ERAM to VDP [2377] 8F64 BD,A3,BC DST @RAMTOP,V@OLDTOP Set up @RAMTOP for old top 8F67 80,84 [2378] * of memory [2379] 8F69 BD,A3,BE DST @>8370,V@NEWTOP Set up @>8370 for new top 8F6C 70 [2380] * of memory [2381] 8F6D 06,8D,36 CALL RELOCA Relocate the program [2382] 8F70 BD,40,30 DST @STLN,@FREPTR Set up @FREPTR [2383] 8F73 93,40 DDEC @FREPTR [2384] 8F75 00 RTN As you can see CS1 only works from VDP and as such can not access for RAM as Cassette does not have the same buffer access method as DSK. CS1 or CS2 do not check for RAM so it restricted to VDP size only. RXB does allow you to completely bypass this with CALL IO that give the user Write/Read/Verify routines. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 17, 2017 Author Share Posted March 17, 2017 That is very cool... I don't have a physical copy to try it. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted March 19, 2017 Author Share Posted March 19, 2017 Still about 2k away from some good news. Updates hopefully forthcoming next week. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted January 4, 2018 Author Share Posted January 4, 2018 **Back to this. Interestingly enough, my testing of this code on real hardware saved me from data loss when my hard drive crashed. It's sort of backwards... we always want to back up our floppies to PC so they don't get lost or destroyed. In my case, I transferred my test files to a floppy diskette for testing on hardware, then my hard drive crashed. I was able to recover the modified XB program from that diskette. In any case, I am still well above acceptable levels for this test. I need to shrink this program down far enough to load from CS1, but thus far I have been unable to reach the necessary size to do so. I'm still a shade over 17K on this program, and so I need to shave another 3K or so off the top in order to do even the most simple of tests. In order to load it straight off tape in XB (using OLD CS1) without any CALL FILES(x) prior to loading, I need to dump 5K. This will be virtually impossible with the current program, but I'm going to try anyway by chopping variable names down to 2 letters, move display data into strings, etc. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted January 4, 2018 Share Posted January 4, 2018 Not forgetting the old trick of splitting the program into two. The first runs the second. The first sets character patterns, which won't reset when the first program runs the second program. RUN Format RUN ["device.program-name"] RUN [line-number] Description The RUN command, which can also be used as a statement, starts program execution. The program to be run is first loaded into memory from device.program-name if that option is specified. The program, is then checked for certain errors, such as FOR-NEXT loops that are missing the NEXT statement, and errors in syntax in statements. The values of all numeric variables are set to zero and the values of all string variables are set to null (a string of zero characters). The program is then executed. 1 Quote Link to comment Share on other sites More sharing options...
Casey Posted January 4, 2018 Share Posted January 4, 2018 I’d be interested to see how this works with RXB and real casssette. I have both available with my real iron 99/4A if you wanted to see if the 17K program can save from RXB in IV254 format and then load back into regular Extended BASIC. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted January 4, 2018 Author Share Posted January 4, 2018 I may take you up on that Casey, thank you!!! Quote Link to comment Share on other sites More sharing options...
Opry99er Posted January 4, 2018 Author Share Posted January 4, 2018 Not forgetting the old trick of splitting the program into two. The first runs the second. The first sets character patterns, which won't reset when the first program runs the second program. RUN Format RUN ["device.program-name"] RUN [line-number] Description The RUN command, which can also be used as a statement, starts program execution. The program to be run is first loaded into memory from device.program-name if that option is specified. The program, is then checked for certain errors, such as FOR-NEXT loops that are missing the NEXT statement, and errors in syntax in statements. The values of all numeric variables are set to zero and the values of all string variables are set to null (a string of zero characters). The program is then executed. This will not work with CS1, as the program must be OLDed prior to being RUN with tape. With DSK, absolutely ... At least Im fairly sure this is the case. Due to the nature of cassette media, RUNning from cold would be an impossibility, as the access is completely different than from DSK. I genuinely hope I am wrong, because what you suggest would be pretty cool if possible. Quote Link to comment Share on other sites More sharing options...
sparkdrummer Posted January 4, 2018 Share Posted January 4, 2018 If you check out Yesterday's News Volume 2, Number 12 - It's got some pretty good info on transferring files from CS1 to disk and vice versa. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted January 4, 2018 Share Posted January 4, 2018 This will not work with CS1, as the program must be OLDed prior to being RUN with tape. With DSK, absolutely ... At least Im fairly sure this is the case. Due to the nature of cassette media, RUNning from cold would be an impossibility, as the access is completely different than from DSK. I genuinely hope I am wrong, because what you suggest would be pretty cool if possible. Well, I thought a few cassette games did just that. An alternative is to have a program that reads from a datafile. Could be character patterns etc. In other words, the main program would be smaller. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted January 4, 2018 Author Share Posted January 4, 2018 You may be right, but RUN CS1 only causes heartache. There may be a multi-stage loading process that requires some user interaction with rewinding, pressing play, etc., prompted onscreen... but direct RUNning from CS1 without user interaction is (I believe) an impossibility. I would love to be wrong though. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.