-
Content Count
2,694 -
Joined
-
Last visited
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by Mr SQL
-
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
OK I think I narrowed it down to latency from this test build which is now very close to working on PlusCart - This build now works fine in Stella and Harmony as well as UnoCart (which doesn't have the latency bug) and every corner works easily on the PlusCart except the upper right going into the TitleScreen for KC - this can freeze for 15 seconds (old SC bug triggered?) and reload the 1st load when it doesn't work. The wrong supercharger ID appears to be cached at first? Maybe there is a delay for PlusCart functions before grabbing the ID from the "header" at the end of the load, if so storing it first would resolve. Stella and Harmony (since there is no loading bar delay) can now be used to hold the button down, and you can see my delays between the transitions - plenty of time to see them even if you keep the button pressed the whole time so I think on the PlusCart the ID update needs to happen faster (or first before any PlusCart calls are made) once the load is running; it can't wait 2 seconds to update it or the transition usually breaks and hits the 15 second timeout and grabs the wrong load. BREAKOUT_GUI_OS_hotfix5.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Made some progress on this bug - this version works on the PlusCart, in Stella and on the Harmony too if you are extremely light fingered and only hold the button for one frame. And the bug never happens in the lower left, where you need to beat the game in order to return to breakout - I'm thinking the button press is being cached between loads? It is falling through and getting triggered in the next frame, possibly sometimes before the index from the header has been seeded yet. It surprised me to see the difference in PlusCart and Uno because they both have the delay from the bars built in - maybe without the delay there is a race condition where the button press goes through right away before the index is retrieved and set from the end of the file; the configuration headers with the programs directory index are really footers. There would be more time to seed this with the loading bars delay. Also I think the Harmony and Stella with no loading bars give the best performance for this Demo, if we want to keep them for more authenticity maybe they could be set to the SuperChargers maximum load speed (x4) to speed the up the loading transitions? I will create a version with a larger delay that I think will fully resolve this loading bug like the load in the lower left does that always works regardless of weather it is an init delay - you have to beat the game to return from there instead of being instantly accessible via the button. BREAKOUT_GUI_OS_hotfix.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Here are two test files that are exhibiting inconsistent behavior in Stella and on the Harmony cart - not sure why: This is the map of what BREAKOUT GUI OS demo is doing - if joy0fire=0 then goto dontloadsuperchargergames if x=0 and y=1 then SUPERCHARGERINDEX=1:goto loadAnotherSuperChargerGame: rem KC II PAL upper left if x=0 and y=19 then SUPERCHARGERINDEX=2:goto loadAnotherSuperChargerGame: rem FLUIDCITY lower left if x=91 and y=1 then SUPERCHARGERINDEX=3:goto loadAnotherSuperChargerGame: REM KC II TITLE SCREEN upper right if x=91 and y=19 then SUPERCHARGERINDEX=0:goto loadAnotherSuperChargerGame:rem load the same game!!! lower right The other demo is simpler and should just go back and forth between KC II PAL and the title screen whenever the button is pressed (have to hold it down for a bit in KC) This may flush the bug better because it sometimes just reloads the current load @DirtyHairy I think you fixed this SuperCharger bug in your UnoCart implementation, I am using Stella 5.0 so it is possible the bug is already fixed in a new release. BREAKOUT_GUI_OS.bin KCPALTTL_occasional_Stella_bug.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Yes all the corners load on the Uno, maybe something changed from working on SI? Also one of the four corners has the same index as the current games ID and should reload itself, could this duplicate index be causing an issue? -
Disk Extended SuperCharger BASIC ----------------------------------------- Adding DOS commands to BASIC on the Atari 2600! How it works: ---------------- Disk Extended SuperCharger BASIC turns an ordinary cassette deck into an indexed filesystem with a directory structure for the Atari 2600 much like the ADAM Home Computers indexed Tape Drive advanced design. For full support, an auto-flipping Tape deck or an endless loop tape like this one can be used to make a regular cassette player function as a slow disk drive like the Commodore 1541. Or the player can manually rewind an ordinary tape to the beginning and keep pressing play, which can also be fun Ultra fast SuperCharger DOS - Fast Loader options ----------------------------------------------------------- The SuperCharger cart features built-in fast loading technology similar to Epyx fast loader and the ADAM high speed Tape drive in functionality, the buad rate can be increased to make SuperCharger DOS load faster. With Flashcarts and Emulators the SuperCharger Indexed File System can run lightning fast - many times faster than even the fastest Apple II disk drive! SuperCharger Disk Extended BASIC Backward Compatibility: ----------------------------------------------------------------------- 100% Backward compatible with SuperCharger vwBASIC, and cross compatible with Flashback BASIC (CBS RAM). Atari 2600 platform compatibility --------------------------------------- SuperCharger Disk Extended BASIC runs on classic Atari 2600 hardware with a SuperCharger and via any multicart that supports the SuperCharger format (such as the Harmony/Encore UnoCart and PlusCart) and all emulators. Performance: --------------------- Performance can vary depending upon the emulator or flashcart being used because some also emulate wait time via the loading bars. For best performance loading bars should be avoided by flashcarts or minimized to eliminate the wait time allowing the SuperCharger FS to load faster (this will emulate the Epyx Fast Loader effect like Harmony is currently doing). Variable Sharing: --------------------- BASIC variables are shared between programs. Capacity (Floppy Disk size): ------------------------------- The PlusCart and UnoCart support a very large capacity - large supercharger Disk Extended BASIC games can have 256 directory entries, for a 2 MB Atari 2600 game! Harmony currently is limited to four directory entries but I will send batari my samples and beta so we can increase the number of entries - Even older edition Harmony carts like mine from 2011 may be able to support 30 directory entries in the SuperCharger FS, and the newer Harmonies and Encores can support even more. A good analogy is that the 2011 Harmony is expandable to have a bit more capacity than an original C64 5 1/4 inch floppy. The newer models have the Capacity of a 720K 3.5 " floppy disk and the later models and the Uno and Plus have SuperCharger disk capacity of a 1.44 MB floppy. Programmers may wish to take into account the varying SuperCharger "disk size" capacities of the multicarts when creating large SuperCharger Disk BASIC games so that the games can run on them all. Availability: -------------- SuperCharger_Disk_BASIC.zip Disk Extended SuperCharger BASIC is currently in Beta will be available free for download soon on the SuperCharger BASIC site
- 10 replies
-
- supercharger
- dos
-
(and 2 more)
Tagged with:
-
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Here is a test program with four loads to help the supercharger BIOS compatibility - First load: BREAKOUT 2002 LASERBEAMS PAL my 4th place 2019 demo entry for SillyVenture is the first program that loads (load 0) and will load four games if you go into the four corners and press the button. Here's the uniqueID of each of the programs it loads and the logic: rem 20200901 load 4 games in the corners if the button is pressed! if joy0fire=0 then goto dontloadsuperchargergames if x=0 and y=1 then SUPERCHARGERINDEX=1:goto loadAnotherSuperChargerGame: if x=0 and y=19 then SUPERCHARGERINDEX=2:goto loadAnotherSuperChargerGame if x=91 and y=1 then SUPERCHARGERINDEX=3:goto loadAnotherSuperChargerGame if x=91 and y=19 then SUPERCHARGERINDEX=0:goto loadAnotherSuperChargerGame:rem load the same game back in!!! rem ---------------------------------------------------------------------------- dontloadsuperchargergames In the upper left it loads KC II PAL which has a unique SuperCharger ID of 1 - this game loads the breakout game back in when KC dies, sometimes. In the upper right it loads the KC TitleScreen which uses a unique ID of 2 - this game loads KC II PAL which in turn can load the BREAKOUT game back in. In the lower left it loads my Fluid City my 2019 Game entry for SillyVenture, if you beat the game it returns to the BREAKOUT game. Only the upper left and lower left work on plus cart - they happen pretty quick, the other two loads freeze up or timeout for a while and get the wrong load. program0.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Awesome I will check it out! ... I just tested the SuperCharger BASIC ROM load command after the update, it went from the TitleScreen to KCII, then took a long time to go back to the menu, then froze. On subsequent runs it goes from the TitleScreen to KCII, but freezes instead of going back. The unique identifier is can be used to seek bidirectionally anywhere within the file or anywhere on the Tape (a looping tape would work the same) to find any of the SuperCharger files looking for the one with the specified index. In my examples I used SUPERCHARGERINDEX to pass the target index to the load command for SuperCharger BASIC, and SUPERCHARGERID to specify the calling programs own unique SuperChargerID (index) for the other programs to call it back up. Also I wonder if you are hitting the SuperCharger security? There is a thing in the BIOS that keeps programs from executing unless their index is zero, or it matches the passed index (the security feature). -
Were Pac-man and Pole Position fads of their time?
Mr SQL replied to Leeroy ST's topic in Classic Console Discussion
Pole Position and Pacman are timeless classic games, there was a merchandizing fad to market everything around the game characters. -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Great question! I like CBS RAM because it has 256 bytes of extra RAM which is just enough to make it cross compatible with SuperCharger BASIC games scrolling virtual worlds, most games will compile with no changes. The similarity between the classic Atari games Tunnel Runner (CBS RAM) and Escape from the Mind Master (SuperCharger) is pretty illustrative as well, both are 3D Pacman games. This capability for close interoperability makes them my two favorite memory and banking schemes for classic Atari development with enhanced graphics. I think the 128 byte SuperChip and 8K, or vanilla 4K may be the most popular classic development schemes. One very interesting case is SuperCharger Space Invaders where while under development the program grew to large to run on the SuperCharger though it would otherwise compile for it, but could still compile successfully with the CBS RAM cross compiler for having extra ROM space in the scheme. I've been trying to shrink it down enough to get it to compile it for the SuperCharger. -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Very cool! If you can add support for the FA CBS RAM format too (it's the one used by Tunnel Runner) I will add networking commands to Flashback BASIC as well. -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
I've been having a lot of fun adding the indexed load command to BASIC - here's what I came up with so far: new command: load There is a new constant SUPERCHARGERID that defaults to 0, this identifies the supercharger program and must be unique There is a new temp variable SUPERCHARGERINDEX that should be set prior to calling load, it defaults to 1 and identifies the other programs unique supercharger id. The load command is effectively a simple DOS filesystem for SuperCharger BASIC using the indexed tape drive functionality to combine the files together into an ISAM for emus and flashcarts (or use a looping continuous tape with the SuperCharger to provide equivalent functionality). I have not finished implementing or testing the new temp variable PARTIALLOAD to allow loading just bank1 or just bank1 and 2 instead of all 3 banks. I've attached the KC II Title Screen program using the BASIC load command, and the unreleased compiler update. Network access for BASIC? It would be really cool to add network access to BASIC next, the PlusCart has some interesting API's I am reading about right now... Disk_Extended_SuperCharger_BASIC.ps1 KCTitleScreenTestingload.txt -
Thank you! The update from the menu is really fast - that is a fantastic feature! I was able to open the BASIC text manual from the other thread and it had no problem rendering 86 pages, the text and the BASIC examples are really clear on the Atari screen. Terminal program idea - Since the PlusCart has an online API for Atari 2600 programs (I've been reading ) I wonder if it would be possible to create a terminal program for BBS's that are online and connect to them using the 32 character display? That would be really interesting to see, maybe the user could either use the keypads or cycle through characters with the joystick to type.
-
Text file compatibility - I was using the text file viewer utility to view BASIC program listings, and it appears to truncate the file early when the program encounters certain characters - is it possible to have it ignore those characters or use a placeholder character like an asterisk? Here are two short text file examples with BASIC programs containing some embedded Assembly, one displays many pages of text and the other truncates. KCTitleScreen.txt READ_AUDF1.txt
-
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
I have to do some experiments to confirm, I think I can change the number of blocks and the starting fill address - the Assembly in the title page listing that calls the SC BIOS is passing it a 24 in the heading telling it to retrieve 24 256k=6k. I am planning on leaving the start address alone and passing it 6K like in the example, or 2K or 4K to just reload the 1st bank (gameloop1) or banks 1 & 2. This will preserve the calling bank (gameloop 2 lives in bank3) while reloading the other program in bank1 - there are two BASIC programs running by design: One notable difference with batari BASIC and SuperCharger BASIC is that there are two BASIC gameloops and they are seperate BASIC programs that run separately and interact with each other - in this case the design lends itself really well to reloading one BASIC program while the other remains running. The chiptunes for the tracker sequencer is stored in bank2 along with the BASIC Runtime, so being able to reload that bank can load new music. I want to keep it simple so I think the options for the BASIC command should be something like "load" without an argument defaulting to "load 3" for 6K, "load 1" for just reload bank1, "load 2" for reload banks 1 & 2. I'm pretty sure "load 1" for grabbing just the 1st 2K will work weather I format a 2K,4K or 6K image to link in the file because it's contiguous and I'm not changing start. If this is too difficult for me to get it working I will keep the load command limited to reloading the whole 6K but partial loads would be pretty cool! -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Ran the Flashback BASIC Manual on my PlusCart Today! The text display looks fantastic on my CRT and reminds me of the TRS-80 Color Computer! Circular reference multi-load file test I've attached a new build of KC II PAL with a title screen program and a game program that both call each other, and also the BASIC listing for the title screen which is pretty short and has the SuperCharger callback shown in inline Assembly. The circular reference worked after I downloaded the new BIOS but not consistently. Sometimes it will freeze going back to the menu and sometimes the screen is black for a few seconds. It should load the title screen and when the button is pressed the game loads. When KC dies, it will usually reload the title screen after a few seconds but it is possible to miss the event unintentionally via timing sometimes or intentionally by parking KC in orbit in his home right quickly (right above the binary score). More Ideas on adding the Load Command - what should it do? The SuperCharger loading capability is really impressive, just one bank or part of a bank can also be selectively loaded. SuperCharger BASIC has two gameloops that each live in a vertical blank in a 2K bank each, so I'm thinking to implement the load command so that it can load either a whole new 6K of ROM like this example, or just the other vertical blank's 2K gameloop. KCII_PALTTL.bin KCTitleScreen.txt -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Got it! I had a bug where I was switched out the active bank when switching in the ROM, comments from the fix: L_232;_232 " ldx #%00000100 ;(ram1-rom, write dis, power ON)" ;ldx #%00000100 ;(ram1-rom, write dis, power ON) ;My routine is in bank3, so it needs to be [email protected]#$!#[email protected]#[email protected] ldx #%00000000 ; Thank you @Al_Nafuur for your help! Thanks @alex_79 for that awesome tutorial in the sc_loader.asm file and your threads! Multifile.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Found a SuperCharger header analyzer @alex_79 created and it appears the header information is correct and that the checksums can be off and are ignored. Everything looks good in this file, it seems to not be passing the load number correctly though - it crashes on Harmony and Stella instead of grabbing the next load and Uno reloads multiload 0 instead of load 1. I thought LDA #1 and STA $FA before the loading routine would pass the argument. Here's the output from the analyzer and the latest test file: FILE: ..\AMtest4.bin [LOAD 1] GAME HEADER (2000-2007): 00 START ADDRESS LOW BYTE ---> 1000 10 START ADDRESS HIGH BYTE 09 RAM CONFIG BYTE - Write pulse delay = 0 - Bank scheme: VCS(x000-x7ff) -> RAM3(000-7ff) VCS(x800-xfff) -> RAM1(000-7ff) - Write disabled - ROM power off 18 NUMBER OF PAGES TO LOAD (24 pages, 6144 bytes) 00!(fffffffe) GAME HEADER CHECKSUM 00 MULTILOAD INDEX NUMBER 24 PROGRESS COUNTER LOW BYTE ---> 0224 02 PROGRESS COUNTER HIGH BYTE PAGE NUMBER TABLE (2010-2027) - PAGE CHECKSUM TABLE (2040-2057): PAGE CHECKSUM MEMORY MAP rom image -> supercharger 00 00!(cc) 0000-00ff -> RAM1(000-0ff) 04 00!(de) 0100-01ff -> RAM1(100-1ff) 08 00!(c6) 0200-02ff -> RAM1(200-2ff) 0c 00!(cc) 0300-03ff -> RAM1(300-3ff) 10 00!(9a) 0400-04ff -> RAM1(400-4ff) 14 00!(b5) 0500-05ff -> RAM1(500-5ff) 18 00!(1b) 0600-06ff -> RAM1(600-6ff) 1c 00!(ee) 0700-07ff -> RAM1(700-7ff) 01 00!(a5) 0800-08ff -> RAM2(000-0ff) 05 00!(97) 0900-09ff -> RAM2(100-1ff) 09 00!(7a) 0a00-0aff -> RAM2(200-2ff) 0d 00!(ec) 0b00-0bff -> RAM2(300-3ff) 11 00!(15) 0c00-0cff -> RAM2(400-4ff) 15 00!(dd) 0d00-0dff -> RAM2(500-5ff) 19 00!(72) 0e00-0eff -> RAM2(600-6ff) 1d 00!(38) 0f00-0fff -> RAM2(700-7ff) 02 00!(1d) 1000-10ff -> RAM3(000-0ff) 06 00!(64) 1100-11ff -> RAM3(100-1ff) 0a 00!(b3) 1200-12ff -> RAM3(200-2ff) 0e 00!(a3) 1300-13ff -> RAM3(300-3ff) 12 00!(43) 1400-14ff -> RAM3(400-4ff) 16 00!(2e) 1500-15ff -> RAM3(500-5ff) 1a 00!(ac) 1600-16ff -> RAM3(600-6ff) 1e 00!(37) 1700-17ff -> RAM3(700-7ff) -------------------------------------------------------------------------------- FILE: ..\AMtest4.bin [LOAD 2] GAME HEADER (2000-2007): 00 START ADDRESS LOW BYTE ---> 1000 10 START ADDRESS HIGH BYTE 09 RAM CONFIG BYTE - Write pulse delay = 0 - Bank scheme: VCS(x000-x7ff) -> RAM3(000-7ff) VCS(x800-xfff) -> RAM1(000-7ff) - Write disabled - ROM power off 18 NUMBER OF PAGES TO LOAD (24 pages, 6144 bytes) 00!(fffffffd) GAME HEADER CHECKSUM 01 MULTILOAD INDEX NUMBER 24 PROGRESS COUNTER LOW BYTE ---> 0224 02 PROGRESS COUNTER HIGH BYTE PAGE NUMBER TABLE (2010-2027) - PAGE CHECKSUM TABLE (2040-2057): PAGE CHECKSUM MEMORY MAP rom image -> supercharger 00 00!(9b) 0000-00ff -> RAM1(000-0ff) 04 00!(8f) 0100-01ff -> RAM1(100-1ff) 08 00!(03) 0200-02ff -> RAM1(200-2ff) 0c 00!(cf) 0300-03ff -> RAM1(300-3ff) 10 00!(c5) 0400-04ff -> RAM1(400-4ff) 14 00!(b7) 0500-05ff -> RAM1(500-5ff) 18 00!(d0) 0600-06ff -> RAM1(600-6ff) 1c 00!(2d) 0700-07ff -> RAM1(700-7ff) 01 00!(97) 0800-08ff -> RAM2(000-0ff) 05 00!(dc) 0900-09ff -> RAM2(100-1ff) 09 00!(dc) 0a00-0aff -> RAM2(200-2ff) 0d 00!(0f) 0b00-0bff -> RAM2(300-3ff) 11 00!(12) 0c00-0cff -> RAM2(400-4ff) 15 00!(84) 0d00-0dff -> RAM2(500-5ff) 19 00!(ec) 0e00-0eff -> RAM2(600-6ff) 1d 00!(50) 0f00-0fff -> RAM2(700-7ff) 02 00!(10) 1000-10ff -> RAM3(000-0ff) 06 00!(07) 1100-11ff -> RAM3(100-1ff) 0a 00!(42) 1200-12ff -> RAM3(200-2ff) 0e 00!(ef) 1300-13ff -> RAM3(300-3ff) 12 00!(47) 1400-14ff -> RAM3(400-4ff) 16 00!(31) 1500-15ff -> RAM3(500-5ff) 1a 00!(6d) 1600-16ff -> RAM3(600-6ff) 1e 00!(c3) 1700-17ff -> RAM3(700-7ff) -------------------------------------------------------------------------------- AMtest4.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Thanks, I didn't realize the header was already present at the bottom of the asm template, it's really a footer - I have a ROM example now with a header "footer" that has the multiload ID of 0, and a second game with an ID of 1, but it freezes or reloads when I transfer to it: ;----------------------------------------------- ;-----------------------------------End Bank III ;----------------------------------------------- ; Supercharger Header (8448 Bin Format) SEG HEADER ORG $3000,0 ; rorg $1800 ; Start Address DC.W Start ; Bank Select Configuration ; Bits 7-5 Write Pulse Delay ; Bits 4-2 Bank Config ; 000 3 ROM ; 001 1 ROM ; 010 3 1 ; 011 1 3 ; 100 3 ROM ; 101 2 ROM ; 110 3 2 ; 111 2 3 ; Bit 1 Write Enable (1=enable) ; Bit 0 ROM power (1=on) DC.B %00001001 ; %00001010 ; Bank 3+1 ; Page Count, Checksum, and Multi-Load Index DC.B $18, $00, 1 ; Progress Indicator (6K) DC.W $0224 ; Bank Offsets ORG ($3010),0 DC.B $00,$04,$08,$0C,$10,$14,$18,$1C ; Bank 1 DC.B $01,$05,$09,$0D,$11,$15,$19,$1D ; Bank 2 DC.B $02,$06,$0A,$0E,$12,$16,$1A,$1E ; Bank 3 ; Bank Checksums ORG ($3030),0 DC.B $00,$00,$00,$00,$00,$00,$00,$00 ; Bank 1 DC.B $00,$00,$00,$00,$00,$00,$00,$00 ; Bank 2 DC.B $00,$00,$00,$00,$00,$00,$00,$00 ; Bank 3 ; Padding To 8448 Bytes DS.B 184,0 I didn't change the checksum, just the multiload index from 0 to 1. If I load the multiload in Stella the first load ARKANOID starts and when the laser powerup is used it crashes. On the Uno it will reload the 1st load instead of loading the second. Multifile.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Thanks, I didn't have any header information in the files! I've added 8 byte headers but the multifile crashes in Stella now - I used this reference on the 8 byte headers: https://www.prismnet.com/~nickb/atari/doc/sctech.txt And wrote this simple PowerShell script to create them in binary format, they are 8 bytes but I think I likely got the checksum wrong, not sure how it should sum to $55 Here is what I plugged into the script to create the headers and the multifile output. Also attached the asm for the first load that is just crashing within the multiload so far, not sure why. #create 8 byte binary SuperCharger header with checksum, assume start is $1000, BS is 3/1 (starting bank) $myblock2 = @(0)*8 #declare 8 element byte array $myblock2[0]=[char]0 #hex 0= decimal 0 $myblock2[1]=[char]16# hex 18 = decimal 24 #hex 10 = decimal 16 $myblock2[2]=[char]5 # initial banking starts with 3/1 like CMFS "... ;started at %00001001 ; bank 3 and 1" $myblock2[3]=[char]24 #24 256 byte blocks= 6K $myblock2[4]=[char]47 #checksum ??? not sure if correct to sum these? Not summing to $55.... $myblock2[5]=[char]0 #multiload 0, 1st unique value $MYBLOCK2[6]=[char]2#224 hex hi $myblock2[7]=[char]36#224 hex low [io.file]::WriteAllBytes('c:\vwbasic\Header1.bin',$myblock2) #generate 2nd header file: $myblock2[5]=[char]1 #multiload 1, unique value [io.file]::WriteAllBytes('c:\vwbasic\Header2',$myblock2) #gen 3rd header: $myblock2[5]=[char]2 #multiload 2 unique value [io.file]::WriteAllBytes('c:\vwbasic\Header3',$myblock2) #concatenate them: echo c:\vwbasic\multifile.bat C:\vwBASIC>copy /b header1.bin+program.bin+header2+kcII_ntsc.bin+header3+zeropage_low128_explorer.bin c:\vwbasic\multifile.bat ls header1.bin Directory: C:\vwBASIC Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 8/28/2020 5:15 PM 25368 header1.bin Program.asm header1.bin -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral
Mr SQL replied to Mr SQL's topic in PlusCart User's Discussion
Made some progress adding the load command to SuperCharger BASIC, and found a discrepancy between Stella and UnoCart to share. Note: I have not tested this on PlusCart yet and we are finding some issues which may only be specific to the UnoCart so please post if there is different behavior as well as any ideas on errors I may have in the source (maybe missing headers or RAM autostart code?) Here is a screenshot of the Alpha using just asm pasted into the BASIC (SuperCharger BASIC allows asm to be mixed in in quotes): And here is the file: Program.bin ARKANOID airhead starts it out and when the button is pressed after catching the Laser power-up it will load one of the ROM's in the multiload, #2 is passed to select load #2. Issues so far are that on the UnoCart it is loading the concatenated ROM's in reverse - it starts with ROM #2 (0,1,2 so LIFO order) and in Stella it starts FIFO order. This is what I used to concatenate them from the shell, the program in the IDE in the screenshot always gets compiled as "program.bin" so I stacked two more supercharger binaries onto it from the CMD shell: c:\vwBASIC>copy /b program.bin+kcII_ntsc.bin+zeropage_low128_explorer.bin Program.bin KCII_NTSC.bin ZeroPage_low128_explorer.bin 1 file(s) copied. to create a 25K 3 file SuperCharger multiload. I created another 33k 4 file concatenation adding ARKANOID to the beginning and the end as well, and then Arkanoid started in UnoCart from the end, but it reloads itself instead of another of the SuperCharger files in the multiload once the laser powerup is caught and the button pressed: program2.bin I wanted this to be the first ROM to test the loading, possibly I am also missing something in the code? appreciate any ideas or feedback! ARKANOID_AIRHEAD_FINDS_AIRHEAD_LOADER_TEST.txt -
Virtual ADAM high speed indexed Tape-Drive Computer Peripheral The PlusCart and UnoCart support 256 SuperCharger loads in a 1.5 MB file with an index on it, like the ADAM high speed Tape drive. The SuperCharger BASIC load command I am working on will make it easy for programs in a multiload to run one another and share data. This thread is also for SuperCharger Assembly development, which has the same low level functionality I am adding to SuperCharger BASIC. What data will be shareable to BASIC? All 30 tiny basic variables will be shareable between programs because they live in low RAM (RIOT). The second direct uncompressed screen buffer (60 bytes) will also be shareable and can be reused to pass data because it is also RIOT RAM. Data structures that are NOT shareable: SuperCharger BASIC allows unlimited RAM arrays to be declared and has built in RAM arrays (sprite buffers, color arrays and the virtual world binary array) in common with Flashback BASIC. These cannot be shared because they are overwritten whenever a new SuperCharger program is loaded. The ADAM Indexed Tape Drive Computer Peripheral is only compatible with the SuperCharger and SuperCharger BASIC. Here's a description of the physical implementation of this awesome peripheral from the 80's: https://www.nytimes.com/1983/09/07/business/coleco-s-new-memory-device.html Examples of new types of games (for the Atari 2600) the virtual ADAM Drive makes possible: This could enable large "choose your own adventure" Dragons Lair style graphics adventure games in a 1.5 MB SuperCharger ROM! Games with a sprawling indexed hierarchy could also be created - I had a tough time fitting The Astro Fortune Teller on a 160K disk in the 80's under Microsoft Disk Extended Color BASIC. This kind of game would be easy to implement in SuperCharger BASIC using the virtual ADAM Drive peripheral. Other possible testing uses of SuperCharger BASIC and Flashback BASIC: SuperCharger BASIC and Flashback BASIC can cross-compile games using different memory schemes, one uses the SuperCharger format [obviously] and the other users CBS RAM, the 256 byte RAM chip that is double the superchip in capacity. There are some differences emulating CBS RAM across emulators and flash carts that are very interesting, playing Arkanoid Airhead you will see the game change from black to white on the Flashback Portable and then to Rainbow colored on the Retron77 which is fun because it's three different flavors for the same ROM and there was a really cool Arkanoid fat binary that would transform like that bitd for the Color Computer written by Steve Bjork but it contained two codebases. In this case the glitch creates the three game variations. Most testers probably have all of these Atari systems and flashcarts so here is that interesting ROM to check out and the BASIC listing which is no different than the SuperCharger version, I simply ran it through the "CBS RAM" compiler (Flashback BASIC) to create the different binaries. "Quick mode" is useful for QA testing in BASIC: Both BASIC's support a "quick mode" more like classic BASIC from the 80's where you can do tests with just a few lines of BASIC code, 10 Line BLITZ is an example of a functional game written in classic BASIC without the ASCII art Designers and chiptunes. The mode also allows the Atari 2600 to compete with the 800, Sinclair, Apple and C64 in vintage BASIC contests! This enhancement will be a lot of fun to work on and I will share builds and info here, please share any ideas or inspiration !!! IDE present on Windows If you have Windows, the BASIC compilers repurpose the Powershell ISE as a simple IDE with a play button to compile and launch immediately Stella. The compilers should work on Linux if you install any version of powershell or the clone but need to be run from the command line against a BASIC text file (no IDE). ARKANOID_AIRHEAD_FLASHBACK_EMU_ANOMALY_20200627.bin ARKANOID_AIRHEAD.bin ARKANOID_AIRHEAD_FINDS_AIRHEAD_20200627.txt
-
I had a similar error in my iterate readonly registers program, so my consistent results are due to programming error, that very same error actually! I've attached a corrected iteration program that goes through the first 99 addresses and shows the values, they are mostly zero but when the cap is charged by the paddle or the sega pad register 24 (AUDF1) goes high and a few others may change as well I haven't finished comparing. Charging the cap changes the environment the program sees from by plugging in a paddle or a sega-pad as we see, and you are able to somehow discharge the cap with the harmony menu (maybe when you read the paddle to see if it is being used??) and the supercharger GUI also discharges the cap similarly. In the instance with KC breaking, we can get the cap to discharge with another program and then KC runs again - my program with the error was discharging it as well, but for best compatibility the capacitor discharge init in the menu like you are doing grants closer emulation to the SuperCharger because it is doing it too. The closer we can get to making the environment a 100% match, the closer we get to running all of the SuperCharger classics and homebrews - Harmony is doing that and Uno is very close, so any differences where Harmony and Stella are matching the SuperCharger environment and Uno is not are important to tune to match. FIXED_iterate_writeonly_regs.bin
-
We ran across what looks like a stable hardware initialization for register 24 ($18) that appears to be part of the SuperCharger BIOS and your Harmony BIOS, but not present in the PlusCart. Looping through the write only regs prior to 24, performs a hardware init (discharges a cap likely) and register 24 comes up correctly initialized to 24 when read. If the hardware init isn't done it can stay floated so the readAUDF1.bin test will continue to yellow screen when run on the pluscart after a paddle is inserted into the left joystick port with the power on (charges a cap) and it stays high even if the Atari is unplugged and the cart is unplugged. It will stay high until a SuperCharger or a Harmony is inserted and their startup BIOS reinitializes it like the second test program is doing to trigger a hardware init - imo there is a part of your Harmony menu routine startup routine that touches the low registers, I just have to insert the Harmony same as the SuperCharger to trigger the init - they both loop through the low regs and set them to zero as part of the init routine, either that or they are touching at least one of the low regs somewhere that discharges the cap like we see happening in the test examples above?
-
Well when I run the test program on my Jr and my Vader using the Harmony, Uno or the SuperCharger, or on the emu I'm getting consistent results except for the paddle/bad breaking $18. I'm very curious why reading any increments of 10 from the write registers will freeze the Atari - but if the programmer makes that mistake they know right away. I'm also curious what others systems look like because so far it looks like a consistent design; I agree temperature can change $18 too but it takes hours with the Harmony cart and many hours with the SuperCharger - two unanswered questions we have so far related to this interesting design are related to the edge case $18: Why does the UnoCart need to be unplugged to stop from floating $18 (AUDV1) after a paddle/Pad is inserted into the left port to trigger it during the attached AUDF1 read demo and the Harmony only needs to have the Atari powered off and back on to return register $18 to read $18 again? And what else is my KCMM ROM doing that it needs either the Harmony inserted in the interim or the demo program to be run to restore it? Seems perhaps another value is being floated? I have to leave KC running for hours to trigger a temperature change to the register $18 read on the Harmony and it's even more stable with the SuperCharger. Folks are playing a game not running a mission critical app so it looks good enough from what I've seen so far. You say you don't need the test program, I'm skeptical anyone with just a joystick plugged into the left port is not going to see the iteration test program in my last post counting up evenly from 2 until it freezes at 60 (skipping the other 10's). Anyone get a different result?? Please try the test and share info on your Atari model, this is pretty interesting. READAUDF1.bin
-
I don't think this is a coincidence, this has been observed before with another write only register by @vdub_bobby : Here is another test ROM to illustrate with GRP0 but it is more stable because a paddle or sega-pad does not change the read value ReadGRP0.bin Are there any write only registers that don't follow this rule when reading them? It is a fairly common bug so there could be multiple titles to support by emulating the clever design. EDIT: Added a test ROM that iterates through all the low write-only registers - multiples of 10 crash the Atari and the emu, all other numbers seem to follow the design, at least on my Atari's. I let it crash on 60 ITERATE_WRITEONLY_REGS.bin ITERATE_WRITEONLY_REGS.wav
