Jump to content
IGNORED

PlusCart (an inexpensive DIY WiFi multicart)


Al_Nafuur

Recommended Posts

On 7/8/2020 at 2:28 PM, Al_Nafuur said:

New version v0.14.10 available in PlusStore and GIT with:

  • Add suport for SuperBanking (128Kb and 256kb) (e.g. Prince of Indiana by @gfvh)
  • Add support for 4KSC (and 2KSC) (e.g. Space Invaders Arcade by @Thomas Jentzsch )
  • Reworked and merged emulation functions (2K, 4K, FxSC, DF, DFSC, BF, BFSC)
  • Directories in menu now have a (slightly) different color

DPC+ support is still experimental in the PlusStore build but this branch is not yet in the GIT repository.

 

Unfortunately the binary in GIT was not updated, and the previous build in GIT (v0.14.6) does not download the updates from the PlusStore correct. I've pushed the new v0.14.10 binaries to the GIT repository (master branch). So all beta tester, having issues in updating their manually flashed firmware via the PlusStore, have to manually flash the new GIT binary.

Link to comment
Share on other sites

40 minutes ago, Prizrak said:

According to plusstore site mine has been updated for a while, I'll check. Must have been one of the ones that updated successfully.
 

There should be no problem, if you have updated to v0.14.6 via the PlusStore. Only the users that initially flashed their PlusCart with the firmware (v0.14.6) from the GIT repository will have an update issue.

I don't know why the binary in GIT was broken, it should be identical to the version the PlusStore distributes.

Link to comment
Share on other sites

28 minutes ago, bcombee said:

Before I make an order from JLCPCB, does anyone in the USA have an extra PlusCart board they'd be willing to sell?

 

I can send you a DIY-Kit, send me a PM if you like one.

Edited by Al_Nafuur
Link to comment
Share on other sites

The PlusCart API had been down yesterday (07-31-2020) for about 4 hours from 4pm to 8pm CET

 

Some PlusCart users might still have issues in connecting their PlusCart to the API, so please test and PM me if you're having an empty start menu.

Link to comment
Share on other sites

I am having issues where I'm connected to WiFi and even redo the wifi connection but my menu is blank and I have access to setup and offline Roms and that's it. I thought it was internet related but doesn't say retry for wifi.

Sent from my SM-N960U using Tapatalk

Link to comment
Share on other sites

3 hours ago, Al_Nafuur said:

New feature text-file reader:

Nice! :) The 32 character venetian blinds text display adds a lot of character to the font, awesome for reading text!

This opens up the possibility of having text manuals right next to the game.

 

Is the main menu still using the large VIC-20 sized font like the UnoCart? I find it easier for the game selection.

 

I hope that the manual reader gets backported to the UnoCart and possibly added to Harmony/Encore like the alpha-sort.

 

  • Like 1
Link to comment
Share on other sites

3 hours ago, Thomas Jentzsch said:

Being connected to a server opens a whole new universe of possibilities for the 2600. :) 

With the PlusROM functions the 2600 can connect to any server

 

The "cool" thing about the text-file reader is, that it is a PlusStore feature. For the PlusCart it's just a normal menu/directory with every entry being an "exit" entry that leads back to the last directory/menu.

With this trick we might even simulate a text-webbrowser where an entry is a link to an other webpage. But with html pages and links the PlusStore server has to do some more parsing to create fake directory lists than with a text file.

Edited by Al_Nafuur
  • Like 2
Link to comment
Share on other sites

47 minutes ago, Mr SQL said:

Nice! :) The 32 character venetian blinds text display adds a lot of character to the font, awesome for reading text!

This opens up the possibility of having text manuals right next to the game.

Thanks to @Thomas Jentzsch for his great work on the text display

 

49 minutes ago, Mr SQL said:

Is the main menu still using the large VIC-20 sized font like the UnoCart? I find it easier for the game selection.

No, the main menu is the same font

 

50 minutes ago, Mr SQL said:

I hope that the manual reader gets backported to the UnoCart and possibly added to Harmony/Encore like the alpha-sort.

This might be done, but first the 32 char display has to be ported to the UnoCart.

Then the code for parsing the text file to menu entries has to be ported from the PlusStore (3 lines of PHP) to the UnoCart firmware:

$lines = file($path_str, FILE_IGNORE_NEW_LINES);
foreach ($lines as $line) {
	$responseData .= "0 000000 ".wordwrap($line, 32,"\n0 000000 ", true)."\n";
}

 

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

New experimental features (autostart and exit):

In this video I start a modified version of River Raid. If the select switch is pressed the exit hotspot (currently $0f7f) is touched by the ROM to signal the multicart that it is now save to start the exit routine.

In the second part of the video is downloading the offline ROMs from my nextcloud account to the STM32 flash memory. The downloaded file is the modified River Raid just renamed to "Autostart.RiverRaid.bin". After restarting the PlusCart autostarts this ROM and by pushing the select switch the PlusCart exits and continues it's boot process to the main menu:

 

 

 

 

The PlusCart don't needs to be online, to start a ROM from the offline flash (Although an online autostart function would also be possible).

 

Exiting or restarting a ROM might be an interesting feature for other Multicarts (UnoCart , Harmony ) aswell.

 

I am using $0F7F (TIA mirror below $1000) as hotspot for exit emulation. As a write hotspot there can be communicated 256 different states (0 for exit, 1 for restart/reload).

 

The exit feature can easily be added to existing ROMs, just by writing to the hotspot (e.g. if the reset switch is pressed while the joystick button is pressed).

 

If someone has some proposal for changes or additions, feel free to suggest.

 

  • Like 2
Link to comment
Share on other sites

On 8/5/2020 at 7:52 AM, Mr SQL said:

Nice! :) The 32 character venetian blinds text display adds a lot of character to the font, awesome for reading text!

This opens up the possibility of having text manuals right next to the game.

 

Is the main menu still using the large VIC-20 sized font like the UnoCart? I find it easier for the game selection.

 

I hope that the manual reader gets backported to the UnoCart and possibly added to Harmony/Encore like the alpha-sort.

 

A textfile reader is one of the first features being added to the newest Harmony firmware. It will likely be an Encore-only feature, though.

Link to comment
Share on other sites

12 hours ago, Al_Nafuur said:

New experimental features (autostart and exit):

In this video I start a modified version of River Raid. If the select switch is pressed the exit hotspot (currently $0f7f) is touched by the ROM to signal the multicart that it is now save to start the exit routine.

In the second part of the video is downloading the offline ROMs from my nextcloud account to the STM32 flash memory. The downloaded file is the modified River Raid just renamed to "Autostart.RiverRaid.bin". After restarting the PlusCart autostarts this ROM and by pushing the select switch the PlusCart exits and continues it's boot process to the main menu:

 

 

 

 

 

The PlusCart don't needs to be online, to start a ROM from the offline flash (Although an online autostart function would also be possible).

 

Exiting or restarting a ROM might be an interesting feature for other Multicarts (UnoCart , Harmony ) aswell.

 

I am using $0F7F (TIA mirror below $1000) as hotspot for exit emulation. As a write hotspot there can be communicated 256 different states (0 for exit, 1 for restart/reload).

 

The exit feature can easily be added to existing ROMs, just by writing to the hotspot (e.g. if the reset switch is pressed while the joystick button is pressed).

 

If someone has some proposal for changes or additions, feel free to suggest.

 

This feature has been suggested to me a number of times over the years. Changing all of those ROMs would work, but there are so many of them, the task is a bit arduous. The solution I have come up with is to basically monitor the running program. For instance, you could monitor for reads from INPT4 and SWCHB and then monitor the values put on the bus, as most games will test each of these once per frame, and with the values you get off of the data bus, you can see the joystick button is pushed and select pressed at the same time. If you do, then you can throw a BRK on the bus at an appropriate time, and make sure the menu appears in ROM instead of the game.

 

It wouldn't work with *every* game but likely the vast majority would? Then you only have to worry about the few games that don't behave.

  • Like 3
Link to comment
Share on other sites

7 hours ago, batari said:

A textfile reader is one of the first features being added to the newest Harmony firmware. It will likely be an Encore-only feature, though.

Very cool! Fantastic if you are able to get it running on the Harmony too.

 

I had to choose between an upgrade to the Encore or the Uno recently to play BitChess and found the Uno is not as compatible with SuperCharger games, can you share your SC BIOS emulation code to help with compatibility?

 

7 hours ago, batari said:

you could monitor for reads from INPT4 and SWCHB...

This solution sounds ideal but I don't want to get up to press select - what about monitoring only the button being pressed and held for 7 seconds to restart? This might be a problem for games where you hold the button down though....

 

Link to comment
Share on other sites

1 hour ago, Mr SQL said:

Very cool! Fantastic if you are able to get it running on the Harmony too.

 

I had to choose between an upgrade to the Encore or the Uno recently to play BitChess and found the Uno is not as compatible with SuperCharger games, can you share your SC BIOS emulation code to help with compatibility?

 

This solution sounds ideal but I don't want to get up to press select - what about monitoring only the button being pressed and held for 7 seconds to restart? This might be a problem for games where you hold the button down though....

 

There isn't a perfect way to do something like this as we are so limited by the controllers. But, I had thought of some alternatives like having all 4 joystick directions pushed at once, but that would require extra hardware. Since you'd need the console to power-cycle anyway to get back to the menu, using the console switches for a quicker way didn't seem to much of a compromise.

 

As for SC code, honestly all I think needs to be done on UNO is for it to respond to BIOS triggers as a normal Supercharger would, and put in stubs where needed in the BIOS, and fill the rest of the 2k with something. Harmony swaps in 2k of data that contains a very short 2600 BIOS stub, starting at $f800, to assist in starting a game or fetching a new load. The rest of the 2k overlaps into the game data itself. Something like this could pretty easily be done in UNO.

 

My SC BIOS is short and simple, and looks like this:

 


F800:

 LDX $F84E

 STX $80

 JMP $F818

 .byte 0,0,0,0

 .byte 0,0,0,0

 .byte 0,0,0,0

 .byte 0,0,0,0

; $F818: supposed to clear page 7 then load

 JMP $F834

 .byte 0

; f81c: start

 lda #0

 ldy #0

 sei

 cld

 ldx #$ff

 txs

.1

 sta $00,x

 dex

 bne .1

 ldx $F84E

 stx $80

; $f834

 ldx #0

 lda $f006,x

 lda $fff8

.2

 lda $f000

 nop

 lda $F700,x

 dex

 bne .2

 beq .3

; $f848

 nop $fff8

 .byte $4c ; JMP opcode

 ; we are at $f84c

 ; hardware will store:

 ; bank start byte @ F84E
 ; lo start vector byte @ F84C
 ; hi start vector byte @ F84D
; @ $F850 ; copy startup stuff to RIOT RAM

.3

 ldx $fa

 nop

 nop

 ldx #5

.4

 lda $f848,x

 sta $fa,x

 dex

 bpl .4

 ldx $80

 cmp $f000,x

 lda #0

 sta HMP0

 sta WSYNC

 sta HMOVE

 jmp $00fa

 

Upon boot, bytes at $fffc and $fffd are visible, pointing to $f818, but after boot they are never seen again.

 

I don't remember all of the rationale for the above but I think it responds to some normal SC BIOS locations, or at least enough of them...?

 

Also for an SC BIOS, some games rely on the startup state to work properly. this is the purpose of the lda #0, sta HMP0, sta wsync, sta hmove near the end of BIOS code.

  • Like 1
Link to comment
Share on other sites

2 hours ago, batari said:

There isn't a perfect way to do something like this as we are so limited by the controllers. But, I had thought of some alternatives like having all 4 joystick directions pushed at once, but that would require extra hardware. Since you'd need the console to power-cycle anyway to get back to the menu, using the console switches for a quicker way didn't seem to much of a compromise.

 

As for SC code, honestly all I think needs to be done on UNO is for it to respond to BIOS triggers as a normal Supercharger would, and put in stubs where needed in the BIOS, and fill the rest of the 2k with something. Harmony swaps in 2k of data that contains a very short 2600 BIOS stub, starting at $f800, to assist in starting a game or fetching a new load. The rest of the 2k overlaps into the game data itself. Something like this could pretty easily be done in UNO.

 

My SC BIOS is short and simple, and looks like this:

Thanks this is interesting to see, I've never looked at the actual BIOS from the SuperCharger just used it like a black box but I can see what part is missing from the UnoCart implementation.  @Dirty HarryI hope this helps:

 

 cld

 ldx #$ff

 txs

.1

 sta $00,x

 dex

 bne .1
Link to comment
Share on other sites

1 hour ago, Mr SQL said:

Thanks this is interesting to see, I've never looked at the actual BIOS from the SuperCharger just used it like a black box but I can see what part is missing from the UnoCart implementation.  @Dirty HarryI hope this helps:

 


 cld

 ldx #$ff

 txs

.1

 sta $00,x

 dex

 bne .1

Could be, yeah, if a game expects cleared ram and TIA then I can see how that could cause problems. If this is all it is, it’s a really easy fix. Oh, in the above I think I meant to say that “start” is $f81c. 

Link to comment
Share on other sites

On 8/14/2020 at 9:20 AM, batari said:

This feature has been suggested to me a number of times over the years. Changing all of those ROMs would work, but there are so many of them, the task is a bit arduous. The solution I have come up with is to basically monitor the running program. For instance, you could monitor for reads from INPT4 and SWCHB and then monitor the values put on the bus, as most games will test each of these once per frame, and with the values you get off of the data bus, you can see the joystick button is pushed and select pressed at the same time. If you do, then you can throw a BRK on the bus at an appropriate time, and make sure the menu appears in ROM instead of the game.

 

It wouldn't work with *every* game but likely the vast majority would? Then you only have to worry about the few games that don't behave.

Did you used INPT4 on your implementation?

I have tried to, but $0C is also the write port of REFP1 (Reflection Player 1) and sorting out the writes without the r/w line is difficult. So i decided to use SWCHA bit 7 (Joystick0 right or Paddle0 button), because SWCHA is much easier to monitor.

This works with every game, that is reading SWCHA and SWCHB in a kernel loop. Some games don't read SWCHA at the title screen, so you have to start the game before you can use the exit function.

Also this solution will not work with paddle games that don't use the buttons.

  • Like 1
Link to comment
Share on other sites

I am currently test-printing a prototype cartridge for the PlusCart.
It's a self-sealing snap-fit design, with the option to include access ports to take it apart.

Just a prototype, but here's the design shown top/bottom and then assembled (access ports not shown)...

 

 

 

Edited by Andrew Davie
  • Like 1
Link to comment
Share on other sites

3 hours ago, Al_Nafuur said:

Did you used INPT4 on your implementation?

I have tried to, but $0C is also the write port of REFP1 (Reflection Player 1) and sorting out the writes without the r/w line is difficult. So i decided to use SWCHA bit 7 (Joystick0 right or Paddle0 button), because SWCHA is much easier to monitor.

This works with every game, that is reading SWCHA and SWCHB in a kernel loop. Some games don't read SWCHA at the title screen, so you have to start the game before you can use the exit function.

Also this solution will not work with paddle games that don't use the buttons.

INPT4 reads could be done by reading the opcode before the operand that accessed INPT4. Check it for a LDA, LDX, LDY, BIT. Also would need to check for LDA INPT4,x. Not easy, but might work in the majority of cases. I agree, though, that SWCHA is a lot easier to monitor and can handle paddle buttons too.

Link to comment
Share on other sites

Prototype case came out mostly OK.  Size is good, fits '2600 perfectly. Cart case holds PlusCart firmly, and positions correctly for '2600.

The only issue is the idea of the snap-fit wasn't quite rigged right, and I glued this one together instead.

PlusCart works first time every time -- which due to the thin prototype board I have is better than when it was before... so... happy about that.

Will do a revised version fixing the minor issue and test with newer PlusCarts - arriving soon - and if all OK then release the STL files.

 

IMG_20200816_162222.thumb.jpg.f70b82cd82442a8bbc76ff5150dfce6f.jpg

 

IMG_20200816_153209.thumb.jpg.1fbc811d824708014301200d0fc1d214.jpg

 

IMG_20200816_153200.thumb.jpg.5251dc5397a863bed3118bdc29ce0a9c.jpg

 

  • Like 3
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...