[stella] Newbie/Starpath Bankswitching!

Subject: [stella] Newbie/Starpath Bankswitching!
From: Chrissalo@xxxxxxx
Date: Mon, 10 Mar 1997 22:36:41 -0500 (EST)
Hi!

I'm new to the mailing list, so forgive me some stupidness...

Actually I'm a bit into emulators, so I looked at the 'Stella' emulator and
found
that it doesn't have Starpath support. I would like to fix that, though I
must confess
the developers section of the Stella-CD is a bit short on information about
that subject
(at least for me).
Here is what I extracted so far.
---------------------------------------------------
// CartridgeSTAR
//
//   StarPath 6K cartridge, 4 banks possible, 3 banks (RAM-Module) used,
//   1 bank Starpath ROM (4th bank), 2 K each bank!
//   It seems like all of the 6K can be accessed as RAM
//   dunno for sure, since some documents try to tell us otherwise
//
//   Suicide Mission must not have
//   -DM6507_FAST_ACCESS
//   declared, since bank switching is not done via 'poke' or 'peek',
//   instead code is run at $fff2 to $fff8
//
//   it seems that supercharger bankswitches like wrotten food!
//   have any sources?
//   bank switch schemes:
//
//   D7-D5 . . . WRITE PULSE DELAY (doesn't matter here, this byte appears in
//                                  the tape header block...)
//
//   D4-D2 . . . RAM/ROM CONFIGURATION
//                VALUE  $F000  $F800
//                 000XX   3     ROM
//                 001XX   1     ROM
//                 010XX   3      1        used in Frogger, Suicide Mission
//                 011XX   1      3
//                 100XX   3     ROM
//                 101XX   2     ROM
//                 110XX   3      2        used in Killer Satellites
//                 111XX   2      3
//
//   D1   . . . . WRITE ENABLED (=1)
//
//   D0   . . . . ROM POWER (OFF=1)
//
//
//
//   just an example:
//
//   ldx $80     (load value at $80, for example $0b is stored there
(Frogger) )
//   cmp $1010,x
//   cmp $fff8
//
//   the above code is an example for bankswitching
//   what it does:
//                   -it combines on the second line $1010 with the value of
x
//                    that is $101b
//                   -this selects banswitch scheme $1b
//                    (only the lower byte of the resuling address counts):
//                            11011   3      2
//
//   don't worry about the compares, they are just a way to combine to an
//   address, and/or to 'call' a visit to location $fff8
//
//
//
//   ram write enable with bit 1 set
//   ram disable with bit 1 unset
//
//   ram seems to be accessed in the same manner as above, you can
//   'poke' into memory via the same scheme as above, example:
//
//   ldx $80     (load value at $80, for example $0b is stored there)
//   cmp $1010,x
//   lda $ff7b
//
//   the above code is an example for poking to location 0xff7b a value of
$1b
//   what it does:
//                   -it combines on the second line $1010 with the value of
x
//                    that is $101b
//                   -this selects poke value $1b
//                    (only the lower byte of the resuling address counts)
//                   - with an absolut memory access the value is written to
//                     that location (when write bit is set)
//                     that might be a lda, cmp, and...
//
//  lastoperand address is kept over a NOP instruction
//
// C.S.
// March ,1997
---------------------------------------------------


Oh well, I pretty much implemented the above. But well ... it is far from
perfect.
Most games start correctly, Music is played and the like, but there are many
graphical glitches.
The game which runs sort of best is Rabbit.
The only thing with Rabbit is, that right in the first level there are snakes
and the like, and the animals
which are not supposed to be there yet are all running backwards... kind of
weird.


Anyway, I would appreciate any corrections and/or addition to what I said
above.
Especially Bankswitching and RAM access. But I guess there are some other
things I don't know
about yet...

Bye

Chris

--
To unsubscribe, send the word UNSUBSCRIBE in the body of a message to
stella-request@xxxxxxxxxxx

Current Thread