Jump to content



0

Superchip roms


3 replies to this topic

#1 Mord OFFLINE  

Mord

    Stargunner

  • 1,407 posts
  • Location:Canada

Posted Mon Jul 16, 2007 12:18 AM

For the game I'm working slowly on, I'm writing it on the assumption the superchip is on the cartridge for the extra 128 bytes of ram. Is there anything special you need to do for the rom beyond ORGing the start at $F100 instead of the usual $F000? And if that's all that's needed for the rom, how do I make sure Stella is recognizing it as something that is suppose to have the superchip setup?

#2 batari OFFLINE  

batari

    )66]U('=I;B$*

  • 6,236 posts
  • begin 644 contest

Posted Mon Jul 16, 2007 1:01 AM

View PostMord, on Mon Jul 16, 2007 1:18 AM, said:

For the game I'm working slowly on, I'm writing it on the assumption the superchip is on the cartridge for the extra 128 bytes of ram. Is there anything special you need to do for the rom beyond ORGing the start at $F100 instead of the usual $F000? And if that's all that's needed for the rom, how do I make sure Stella is recognizing it as something that is suppose to have the superchip setup?
You need to fill $F000-$F0FF with $FF for it to be automatically detected. If you don't do this, it will still work in emulators but you'll need to specify the cartridge type manually.

#3 SeaGtGruff OFFLINE  

SeaGtGruff

    River Patroller

  • 4,543 posts
  • Location:Georgia, USA

Posted Mon Jul 16, 2007 1:24 AM

View PostMord, on Mon Jul 16, 2007 2:18 AM, said:

For the game I'm working slowly on, I'm writing it on the assumption the superchip is on the cartridge for the extra 128 bytes of ram. Is there anything special you need to do for the rom beyond ORGing the start at $F100 instead of the usual $F000? And if that's all that's needed for the rom, how do I make sure Stella is recognizing it as something that is suppose to have the superchip setup?
Program each bank as if you're doing normal Atari 8K, 16K, or 32K bankswitching (F8, F6, or F4), but reserve the first 256 bytes of each bank for the Superchip-- that is, don't put any executable code or data there. If you fill those 256 bytes with $FF, then Stella and Z26 should be able to autodetect the format. Then, to access the Superchip, you write to the 128 bytes at $F000 through $F07F, and read from the 128 bytes at $F080 through $F0FF. For example:

; 8K Superchip, or F8SC bankswitching

; bank 1
   ORG $E000
   RORG $D000

; reserve 256 bytes for Superchip (128 write, 128 read)
   repeat 256
   HEX FF
   repend

   ORG $E100
   RORG $D100
; remainder of bank 1 is for your ROM

   ORG $EFF8
   RORG $DFF8
; bankswitching hotspots (2 bytes)
   repeat 2
   HEX FF
   repend

   ORG $EFFA
   RORG $DFFA
; vectors
   WORD start
   WORD start
   WORD start

; bank 2
   ORG $F000
   RORG $F000
; reserve 256 bytes for Superchip (128 write, 128 read)
   repeat 256
   HEX FF
   repend

   ORG $F100
   RORG $F100
; remainder of bank 2 is for your ROM

   ORG $FFF8
   RORG $FFF8
; bankswitching hotspots (2 bytes)
   repeat 2
   HEX FF
   repend

   ORG $FFFA
   RORG $FFFA
; vectors
   WORD start
   WORD start
   WORD start
Obviously, this is just the most bare-bones skeleton. As with any bankswitching method, the first thing your "start" code should do is switch to the desired bank where your program begins.

Keep in mind that although you're reserving 256 from each bank for the Superchip, the RAM bytes will always be present regardless of which bank you switch to. That is, the ROM will switch banks but the RAM will stay the same, if you see what I mean.

Michael

#4 Mord OFFLINE  

Mord

    Stargunner

  • 1,407 posts
  • Location:Canada

Posted Mon Jul 16, 2007 11:18 AM

View PostSeaGtGruff, on Mon Jul 16, 2007 2:24 AM, said:

Program each bank as if you're doing normal Atari 8K, 16K, or 32K bankswitching (F8, F6, or F4), but reserve the first 256 bytes of each bank for the Superchip-- that is, don't put any executable code or data there. If you fill those 256 bytes with $FF, then Stella and Z26 should be able to autodetect the format. Then, to access the Superchip, you write to the 128 bytes at $F000 through $F07F, and read from the 128 bytes at $F080 through $F0FF. For example:

Now done.


Quote

; 8K Superchip, or F8SC bankswitching

; bank 1
   ORG $E000
   RORG $D000

Now, given that I have my banks in separate .asm files and link them in dos after compiling them, is it necessary to be ORG/RORGing to these ranges instead of just using $F000 for each file?



Quote

Obviously, this is just the most bare-bones skeleton. As with any bankswitching method, the first thing your "start" code should do is switch to the desired bank where your program begins.

That part I have done properly at least. :)

Quote

Keep in mind that although you're reserving 256 from each bank for the Superchip, the RAM bytes will always be present regardless of which bank you switch to. That is, the ROM will switch banks but the RAM will stay the same, if you see what I mean.

nodnod. Which enables me to easily define the variables in my constants.asm file once, or so it should. I know I have an oversight somewhere still in the code. It's displaying again, but it seems to be reading data from the zero page for some of the sprite data as I can see the joystick registers of the TIA being displayed on the screen - it changes as I try to move around. Likely a missing # somewhere. Plus various other data is being initialized randomly by Stella. Essentially when I start the emulator, load the game I'll see a particular result on the sprites and player. (Sometimes the player size will be tiny, other times there will be multiple copies, color etc would all be randomly set.) And if I shut off the game, but not close the emulator, then restart it the visual effects will be the same. But if I shut down Stella, turn it back on, reload the game, I'll get a different set of colors, copies, sprite data, etc. Which will remain constant until I shut Stella down again. :ponder:

I'll check over the code during the day, it's likely just a wrong declaration somewhere. I get those often enough. ;)

At any rate, thanks for the help! :)




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users