Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RAM cartridges implementation #184

Merged
merged 7 commits into from May 28, 2023
Merged

RAM cartridges implementation #184

merged 7 commits into from May 28, 2023

Conversation

mono6502
Copy link
Contributor

@mono6502 mono6502 commented Apr 29, 2023

Many RAMCART and one SiDiCar battery backed static RAM cartridges.
Preliminary support for writeable cartridges (ought to be useful for #109).

I prepared Ram-Cart (Polish RAM cartridges released by Unerring Masters company and Zenon/Dial scene group) and SiDiCar (RAM cartridge described in Polish magazine "Tajemnice ATARI") support for Atari800.

Ram-Cart is a RAM cartridge using static RAM chips and battery power supply to persist the data written in cartridge.
Whole memory is partitioned to 16KB banks. Control register located at $D5xx page is responsible to current bank selection and enabling visibility of it's lower and higher part in $8000-$9FFF and $A000-$BFFF windows (similar to many standard ROM banking cartridges). Preferred location for such register is $D500 (and $D501 for bigger cartridges).

Ram-Cart was released in many variants:

  • 64K and 128K - original cartridge released by Unerring Masters company and available on market back in the days of '90 (L.K. Avalon company was distributor),
  • Double Ram-Cart 2x128/256K and 1M - released by Zenon/Dial back in the days too,
  • 1M, 2M and 4M - designed by Zenon/Dial, based on the original 1MB cartridge and released now in the days by Unerring Masters company and is available to buy on AtariOnline forum.
    Beside of amount of RAM, all cartridges differ with number and functions of switches placed on the top of cart case and bank switching ideas.

My implementation of emulation supports:

  • all sizes of memory (64K/128K/256K/1M/2M/4M/8M/16M/32M),
  • all variants of bank switching (using one and two control registers),
  • all switches and buttons present on the top of cartridge case functions,
  • writing to the RAM in runtime,
  • writing content of cartridge to the file on remove or on exit emulator,
  • monitor CART command to show detailed state of Ram-Cart cartridge (just DWORD state is showing for all the rest of carts),
  • cartridge management options in GUI,
  • creation of blank cartridge item in menu for specified Ram-Cart.

SiDiCar is a simple 32K RAM cartridge with a control register located on $D5xx ($D5FF is recommended by constructor) but it's using a $8000-$9FFF window only.

Changes made in the code of Atari800:

  • new MEMORY_CopyToCart macro was created to copy data to the cartridge memory,
  • MEMORY_CopyROM macro's name has changed to MEMORY_CopyFromCart,
  • cartridge creation routines (based on ROM image) and ROM extraction routine was externalised to separate function and moved from ui.c to cartridge.c
  • cartridge and image loading routine was externalized to separate function in cartridge.c

You can read about Ram-Cart (in Polish only, but I don't know if there are English version anywhere) at:

Back in the days Dial Group has released modified version of DOS II+/D supporting RAMCART as D7 and D8 ramdisks:
http://web.archive.org/web/20091210152852/http://www.serious-dial.atari.pl/pliki/softdial/DblRC.zip
Description in Polish is here:
http://web.archive.org/web/20090209232906/http://serious-dial.atari.pl/artykuly/dblrc.html

SiDiCAR was made by Jarosław Krysztopik (vel SEC2692) and is described in Polish at:

Additionally there is Czech cartridge "Raster/C.P.U. S/XEGS 128K RAM-CART" described in English at:

mono6502 and others added 2 commits April 29, 2023 14:36
…dges. CART monitor command. Make blank cartridge UI option.
Reserved CART file ids for additional cartridge types currently unemulated by Atari800, added also the description of the types.
@mikrosk
Copy link
Member

mikrosk commented May 17, 2023

Looks good, can you rebase on master?

@mono6502
Copy link
Contributor Author

mono6502 commented May 28, 2023

I've already made rebase with master on ramcart branch.
Could somebody check if FALCON build is correct?

@mikrosk mikrosk merged commit dc68c7f into atari800:master May 28, 2023
@mikrosk
Copy link
Member

mikrosk commented May 28, 2023

Thanks! Most likely it will be me who will check the the Falcon build. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants