Home
Name Modified Size InfoDownloads / Week
readme.md 2022-05-03 10.1 kB
Totals: 1 Item   10.1 kB 0

Readme for the creatiVision MegaSDCart

The MegaSDCart for the creatiVision allows loading of every known ROM for the creatiVision (Games, BASIC, Demos, Homebrews...) quick and easy from a MicroSD card.

Features / Usage

1.1) Plug and Play

Simply insert a MicroSD card containing ROM-images, plug the MegaSDCart into the cartridge port of your creatiVision console and switch the console on.

1.2) Menu driven ROM-selection

When the creatiVision is powered on with the MegaSDCart inserted, you will be greeted with a menu containing the (alphabetically sorted) directory of the MicroSD-card.

Select the desired ROM from the list using the left Joystick and start it by pressing the right FIRE-button => Now the creatiVision will behave exactly like with an original Cartridge inserted.

1.2.1) Sub-directories

The MegaSDCart allows for sub-directories on the MicroSD card. Selecting a sub-directory in the list and pressing FIRE simply enters the sub-directory. Selecting ".." in the list and pressing FIRE leaves the sub-directory.

1.2.2) Loading "linear" cart-images

All the commercial creatiVision cartridges use available cartridge memory space (32kb) following a set of memory usage rules. The MegaSDCart will take care of this for you and will load these images correctly.

Some Demos or Homebrews do not use the same memory usage scheme, instead they need to be loaded "linear" into the available 32k RAM space. You can simply achieve this by pressing the right FIRE button on the right joypad when you have selected the ROM from the list (This will highlight it in orange to show that it is set for linear loading. Then you can load it like all the other ROMs by pressing the right FIRE button on the left joypad.

1.3) Support for BASIC

When a version of the creatiVision BASIC ROM is loaded from the MegaSDCart you will be asked if you want to load it in its original form or if you want to apply a patch to enable BASIC to load and save from the MicroSD card.

If you choose to apply the BASIC patch, 4 additional BASIC commands are added also the output of LLIST and LPRINT will be redirected to a file on the MicroSD card instead of to the printer.

These are the new BASIC commands

1.3.1) SDSET

Sets the name of the BASIC file to access using SDLOAD or SDSAVE When you type SDSET (and hit RETURN) you will be asked for a filename, simply enter the full filepath and hit RETURN to set the File to use for SDLOAD or SDSAVE.

Filenames should be in unix syntax, using forward slash as path and name delimiter.

Example: /test.bas

If no other filename is set, the default filename is /BASIC.TXT

All filenames need to be in 8.3 format (8 chars followed by a "." and a 3 char extension)

1.3.2) SDLOAD

Loads a BASIC file from the SD-card (which one is set by the SDSET command) SDLOAD,N suppresses the display of the BASIC listing while loading

1.3.3) SDSAVE

Saves the current BASIC file to the SD-card (with the name set by the SDSET command) SDSAVE,N suppresses the display of the BASIC listing during saving

1.3.4) SDRUN

Loads and runs the file immediately. SDRUN,N is like SDLOAD,N with an additional RUN command after the file is loaded

The MegaSDCart also allows for multipart loading (CHAINING) from BASIC (like the creatiVision Demotape does). If the BASIC file contains a "**MEGA**" line - loading will stop and the next LOAD command will restart loading from the next line...

1.4) Integrated goodies

1.4.1) libLZG Uncompress

1.4.2) Song List Player

1.4.3) Routines for using the MegaSDCart for programmers

2) Theory of operation

2.1) Hardware

The MegaSDCart basically consists of: * EPROM containing a patched creatiVision BIOS and the Autostart SDMenu * 32kb SRAM to hold the loaded cartridge image, also used as a buffer for transferring data between the creatiVision and the Arduino. * Arduino Nano + MicroSD module * Some logic-ICs, buffers and latches for glueing it all together

2.1.1) Simple hardware explanation:

The creatiVision and the Arduino on the MegaSDCart "share" the 32kb SRAM on the MegaSDCart => The Arduino fills the RAM with a selected ROM-image from the MicroSD card and then the creatiVision can use this 32kb RAM like any standard ROM cartridge.

2.1.2) More in-depth hardware explanation:

2.1.2.1) BIOS and SDMenu EPROM

The 8kb EPROM contains the autostart "SDMenu" and a patched creatiVision BIOS which are mapped from $E000-$FFFF (The BIOS-part is mapped from $F800-$FFFF).

On "normal" cartridges PIN33 (/ROM0) is connected to PIN34 (/ROMR) which is the chip select signal for the 2kb BIOS ROM inside the creatiVision.

The MegaSDCart uses /ROM0 for its own purposes and gives nothing back to /ROMR => so the internal BIOS is deactivated and instead the BIOS on the MegaSDCart is used.

/ROM0 is the chip select signal for the 16kb area from $C000-$FFFF. To create the chip select signal for the 8kb EPROM (and additional 2 x 4kb blocks for communication purposes between the creatiVision and the Arduino) a 74LS139 (U3) is used to "split" /ROM0 (with the help of A12 and A13) into 4 x 4kb blocks (named AR_RDY_CS, CV_RDY, BIOS_L and BIOS_H in the schematic).

BIOS_L and BIOS_H are then combined using one gate of the 74LS08 (U13) to generate the EPROM chipselect /BIOS_CS

2.1.2.2) 32kb SRAM

the 32kb 62256 SRAM is the "bridge" between the creatiVision and the Arduino Nano

The 32kb are mapped to $4000-$BFFF.

On the creatiVision this area is split into 2 x 16kb chip select signals (/ROM1 and /ROM2) to generate a chip select signal for the whole 32kb, /ROM1 and /ROM2 are combined to /RAM_CS using one gate of the 74LS08 (U13)

If an SRAM is used instead of a ROM additional signals are needed (RAM_RW and RAM_OE) these signals are generated using a 74LS00 (U14) from CV_RW and CV_PHI2 (to make sure data is read/written with the right timing the RW signal needs to be combined with the cpu clock)

To make sure the creatiVision and the Arduino never access the SRAM at the same time both must be able to disconnect themself from the SRAM.

On the creatiVision side 4x 74LS541 and 1x 74LS245 are used to completely isolate the SRAM from the creatiVision signals.

On the Arduino side 2x 74LS573 and 2x 74LS245 are used to isolate the SRAM from the Arduino signals (additional Arduino signals are disconnected by putting the PINs on the Arduino into high impedance state at the right time.)

As the Arduino Nano only has a limited number of I/O pins so the 8 data lines from the arduino in combination with LATCH_H and LATCH_L are used to store the 15 address lines needed for the SRAM in 2x 74LS573 latches...

2.1.2.3) Arduino Nano

The Arduino communicates with the microSDmodule (reads and writes data, changes directories) and is responsible for switching SRAM access between creatiVision and Arduino.

2.1.2.4) Communication between Arduino and creatiVision

Every time either the creatiVision or the Arduino accesses the SRAM, one of them has to wait until the other one is finished...

At powerup the creatiVision is granted access to the SRAM and Arduino waits... In this state the Arduino goes into a loop and constantly reads his A0 PIN (CV_RDY). CV_RDY is generated by U3 (74ls139) and goes LOW if the creatiVision accesses $D000. So if the creatiVision needs the Arduino to do something (like read or write to SD...) it simply has to access this memory area ($D000) a few times (to be sure the arduino gets the signal...) and then wait for the Arduino to send its

If the Arduino is accessing the SRAM the creatiVision hast to wait for it to finish his job. In this state the creatiVision constantly reads from $C000. As there is no RAM (or ROM) at $C000, U1 acts like one byte of information for the creatiVision to read. 7 bits of this byte are pulled low, but the lowest bit is set by the Arduino A1 PIN according to its state (working or finished). The output of U1 is only enabled if the creatiVision trys to access $C000, so that the state of Arduinos A0 PIN does not affect the Databus for all other operations.

The "main" control signal to switch the access between creatiVision and Arduino is named "SWITCH" (PIN A3 on the Arduino). This signal sets the state (enable / disable) for all the 245, 541 and 573 latches and buffers (some need the inverted SWITCH signal "NOT SWITCH" generated by U7)

2.2) Firmware

3) Compatibility

3.1) Tested and working

The MegaSDCart is tested with the original creatiVision (also called Dick Smith Wizzard in Australia) and the creatiVision MKII.

3.2) Untested, but should work

The MegaSDCart is not tested with the (very rare) NTSC version of the creatiVision, but i see no reason, why it should not work.

Also untested are the Hanimex RAMESES and FUNVISION "versions" of the creatiVision - They are compatible, but physically have a slightly altered Cartridge dimension, if a "normal" creatiVision Cart fits into one of this game console beauties - the MegaSDCart will also fit and work!

3.3) Untested - big chance it will not work

The use of the MegaSDCart with a Laser 2001 or the Salora Manager is untested - my guess is: It will not work or at least encounter a few problems...

3.4) NOT working

The MegaSDCart will NOT work in combination with the "parallel expansion" or the "16K RAM Expansion" as they use the same memory area.

If you own one of the rare machines (NTSC creatiVision, Hanimex RAMESES, FUNVISION, Laser 2001 or Salora Manager) mentioned above and have the chance to test the MegaDCart please let me know your findings... :0)

The creatiVision MegaSDCart was created in 2022 by Kym Greenshields (Firmware/Software) and Thomas Gutmeier (Hardware)

Thanks go out to: All the guys at "Creativemu" and its Forum (www.madrigaldesign.it/creativemu) especially Luca Antignano for creating this unique platform for all things creatiVision related.

Guys, whos projects inspired us: Ralf Benzinger (FlashROM 99 and FinalGROM), Ruud Baltissen (EPROM emulator design), Wilco2009 (VIDEOPAC uSD CART)

Source: readme.md, updated 2022-05-03