Jump to content
Gazoo

Setting up a 512k cart

Recommended Posts

Ok, Got a request from acadiel regarding the 632k cart. So I'm starting on a 512k cart without the Grom.

This should be useable right away (as soon as I'm done, of course) on existing carts.

The existing Rom menu software doesn't quite fit the bill, so I'll be using the HSGPL Menu source as a starting point.

 

I've got the Menu screen set up. It's a start, anyway. :)

 

post-29515-0-29428100-1397949155_thumb.jpg

 

Gazoo

 

 

  • Like 2

Share this post


Link to post
Share on other sites

Yay!! Let me know when you have a test ROM; I'll burn it and try it out :)

 

It's getting there. So far the first 9 menu selections work.

 

I have a question regarding ROM cart headers. If a version number greater than >7F is used in a Grom cart, it makes it an Autostart cart. Is the same true for Rom headers?

I know that a powerup header like I used in the 632k cart won't work in a Rom cart, so this would be the second best choice if it works.

 

Gazoo

Share this post


Link to post
Share on other sites

I've honestly never tried a powerup header in a ROM cart... Let me know what you find out if you try. Will TI Intern tell us if it scans ROM for auto start as well as GROM?

Share this post


Link to post
Share on other sites

I've honestly never tried a powerup header in a ROM cart... Let me know what you find out if you try. Will TI Intern tell us if it scans ROM for auto start as well as GROM?

 

I haven't looked in TI INTERN for that info. If you want to try making a Rom cart Autostart, all you have to do is change the 2nd byte to >80.

So if the first two bytes are >AA01, you could try changing it to >AA80. When you press a key at the title screen, the inserted cart should start instead of going to the numbered menu with 1 as TI BASIC and 2 as the inserted cart. Many of the educational carts had this feature, but they were Grom carts. I'm curious as to whether this feature works with Rom carts, too.

 

Gazoo

Share this post


Link to post
Share on other sites

I wasn't able to make any kind of ROM-only autostart work last time I dove into it - would love to know if someone finds a loophole.

Share this post


Link to post
Share on other sites

I wasn't able to make any kind of ROM-only autostart work last time I dove into it - would love to know if someone finds a loophole.

 

That stinks. I guess it makes no sense to include TI Basic on the menu then. I'll take it out and add the Formatter.

 

Gazoo

Share this post


Link to post
Share on other sites

 

That stinks. I guess it makes no sense to include TI Basic on the menu then. I'll take it out and add the Formatter.

 

Gazoo

You could just add in the Auto Start header in TI Basic and you are good to go.

Share this post


Link to post
Share on other sites

You could just add in the Auto Start header in TI Basic and you are good to go.

 

???

Share this post


Link to post
Share on other sites

Ok, so here's the adjusted menu.

 

post-29515-0-56331600-1398304618_thumb.jpg

 

And here's the rom files, forwards and backwards.

 

[deleted attachment=338614:512kROM.zip]

 

Another question, does the ROM bank reset to the first bank on a reset (or Quit)?

Or do I have to reset it after doing the memory moves? (that's possible, but it will take some more work).

Or is there a reset switch header on the cart board to perform this function?

If it has to be reset in software prior to a Quit, then that precludes the use of Corcomp Diagnostics or Navarrone Disk Fixer as they run directly from their selected Rom bank.

 

Gazoo

 

 

 

 

Edited by Gazoo

Share this post


Link to post
Share on other sites

AFAIK, once the bank is written to to be selected, it usually stays put there even through Function Quit.

 

Two different ways of looking at this:

 

1) On my copy to RAM cart (DM2K, CF2K, DU2K), the program selected is copied, and then execution starts at >A000. When you reset, no matter which bank you land in, all the banks still have the same header, so you can select anything you want, and it's copied and run. Typically, from a cold start, the first bank to come up on the 512K cart is bank 0 (the first one). I have never see another bank come up, but anything's possible since the 74LS378 does not have a defined power up state. (Tursi has reminded me of this fact several times. <grin>)

 

2) On Tursi's Multicart, which is just 8K games (none are 16K ones), the system powers up in the first bank (0) and gives you the PRESS 2 FOR MULTICART option. You press this, find your game, select it, and the console resets with that game's bank active. You have to physically power down the console and power it back up; the bank persists through Function Quits.

 

It really depends on the last bank you wind up in and what header is in that bank after you finish the copy to RAM and execute the >A000 to get the program to start if using Copy to 32K programs. If you copy a three-bank program (say banks >6002, >6004, and >6006), and you finish up in >6006, and it doesn't have a header, when you reset the console you will just get TI BASIC until you turn the console off and back on.

 

Does that help? :)

Share this post


Link to post
Share on other sites

 

???

A GPL GROM header exists for any GPL program so you can put a GPL Power Up header in any GROM ever made.

 

Byte 0 >AA is the valid ID byte

Byte 1 >?? is the version number

Byte 2 >?? is the number of programs in this GROM list

Byte 3 >00 is Reserved for future use.

Byte 4 >???? is POWER UP HEADER bytes 4 & 5 that point to the starting address for the power up to start in GPL. This would work in ANY GPL program.

Byte 6 >???? is USER Program Header pointer.

Byte 8 >???? is GPL DSR header pointer.

Byte A >???? is Subroutine Link header lists.

Byte C >???? is Interupt Header pointer.

Byte E >???? is BASIC ONLY pointer as it uses a different set up for headers then the other headers. BASIC has a reversed order.

 

So I do not understand why if you need a power up routine for the cart you do not use this?

ROMs can not do a power up so if you have ANY GPL AT ALL here is a EZ way to pull off what you need.

Share this post


Link to post
Share on other sites

AFAIK, once the bank is written to to be selected, it usually stays put there even through Function Quit.

 

Two different ways of looking at this:

 

1) On my copy to RAM cart (DM2K, CF2K, DU2K), the program selected is copied, and then execution starts at >A000. When you reset, no matter which bank you land in, all the banks still have the same header, so you can select anything you want, and it's copied and run. Typically, from a cold start, the first bank to come up on the 512K cart is bank 0 (the first one). I have never see another bank come up, but anything's possible since the 74LS378 does not have a defined power up state. (Tursi has reminded me of this fact several times. <grin>)

 

2) On Tursi's Multicart, which is just 8K games (none are 16K ones), the system powers up in the first bank (0) and gives you the PRESS 2 FOR MULTICART option. You press this, find your game, select it, and the console resets with that game's bank active. You have to physically power down the console and power it back up; the bank persists through Function Quits.

 

It really depends on the last bank you wind up in and what header is in that bank after you finish the copy to RAM and execute the >A000 to get the program to start if using Copy to 32K programs. If you copy a three-bank program (say banks >6002, >6004, and >6006), and you finish up in >6006, and it doesn't have a header, when you reset the console you will just get TI BASIC until you turn the console off and back on.

 

Does that help? :)

What are you doing to create this problem?

Are you guys using the BASIC headers?

They do not work like normal headers as the order is reversed from normal GPL headers.

I could be wrong but that would explain why only BASIC works. (It is the only header is sees.)

 

A Subroutine headers does not work the way a program header works. Like I said I could be mistaken as to the problem.

Edited by RXB

Share this post


Link to post
Share on other sites

What are you doing to create this problem?

Are you guys using the BASIC headers?

They do not work like normal headers as the order is reversed from normal GPL headers.

I could be wrong but that would explain why only BASIC works. (It is the only header is sees.)

Rich, I'm not sure how Gazoo is setting his up (with BASIC, etc). I was only sharing the two things Tursi and I have done so far which work for our use cases, which were an 8K multicart and a Fred Dm2k/du2k/cf2k cart.

Share this post


Link to post
Share on other sites

Rich, BASIC is showing up because it is part of the regular TI menu. The cartridge image doesn't have any GROM in it, so all of the useful GPL tricks won't work to get the menu up all the time. We are at the mercy of the 74LS378 here--and its initialization state. Usually, all of the chips from the same vendor initialize the same way, but there are no guarantees, as the initialization state is not specified in the specs. That was one reason we tried the GAL (which failed for reasons we haven't run to ground yet), as we could guarantee the initialization state with it--and switch it between inverted and non-inverted bank switching mode with a single jumper. If we ever do work out the GAL issue, I'll make some more boards designed to use it, but for now, it is a dead end.

Share this post


Link to post
Share on other sites

Does that help? :)

 

Y'er killin' me here. ;)

 

OK, I'm not going to put a header in each bank. I think that's asking too much and there should be a hardware solution if the banking chip doesn't put you in the first bank upon powerup. Can a pushbutton spst switch be added to pull the inputs of the chip low through a resistor network to set it to the first bank at the user's discretion? Seems like a logical course of action to make things easier.

 

That being said, I've adjusted everything to return to the first bank and the MENU program in the attached version. I've even reached all the way to the bottom of my bag of tricks to make the 2 programs that execute in the >6000 space return to the MENU program. (I don't do that for just anybody :) ).

As long as the cart powers up in the first bank, the attached ROM should work fine. Not on the MENU - Y or Z puts you in TI Basic and fctn9 resets to the title screen.

 

If you find that this cart actually works, I'd like to purchase one. I don't need a shell, got plenty of those. Just need a board and a programmed eprom.

 

 

Gazoo

 

 

[deleted attachment=338822:512kROM.zip]

Edited by Gazoo

Share this post


Link to post
Share on other sites

 

Y'er killin' me here. ;)

 

OK, I'm not going to put a header in each bank. I think that's asking too much and there should be a hardware solution if the banking chip doesn't put you in the first bank upon powerup. Can a pushbutton spst switch be added to pull the inputs of the chip low through a resistor network to set it to the first bank at the user's discretion? Seems like a logical course of action to make things easier.

 

That being said, I've adjusted everything to return to the first bank and the MENU program in the attached version. I've even reached all the way to the bottom of my bag of tricks to make the 2 programs that execute in the >6000 space return to the MENU program. (I don't do that for just anybody :) ).

As long as the cart powers up in the first bank, the attached ROM should work fine. Not on the MENU - Y or Z puts you in TI Basic and fctn9 resets to the title screen.

 

If you find that this cart actually works, I'd like to purchase one. I don't need a shell, got plenty of those. Just need a board and a programmed eprom.

 

 

Gazoo

 

 

attachicon.gif512kROM.zip

 

:-)

 

Actually, it does come up in the first bank from a cold start. Unless it's switched to another one and the system is reset. (i.e. power was not removed).

 

If the ATMega is on board, I see no reason why we can't have it flip the initial ROM bank to >6000 (1st bank). But without the circuitry, it's either

1) A cold start

2) Something writing back to >6000 to switch it back to the first bank after the program is copied, but before you do a B @>A000 to start it. (This might help instead of having to tweak every program. Could the loader just write to >6000 to go back before it branches?)

 

I'll try burning a copy this weekend and let you know how it works; thanks, Tony!

Share this post


Link to post
Share on other sites

 

:-)

 

Actually, it does come up in the first bank from a cold start. Unless it's switched to another one and the system is reset. (i.e. power was not removed).

 

If the ATMega is on board, I see no reason why we can't have it flip the initial ROM bank to >6000 (1st bank). But without the circuitry, it's either

1) A cold start

2) Something writing back to >6000 to switch it back to the first bank after the program is copied, but before you do a B @>A000 to start it. (This might help instead of having to tweak every program. Could the loader just write to >6000 to go back before it branches?)

 

I'll try burning a copy this weekend and let you know how it works; thanks, Tony!

 

#2 - Yes, that's what I did.

 

...amongst other things. ;)

 

But not all the programs start at >A000, they might start anywhere. :)

 

Corcomp Diagnostics and Navarrone Disk Fixer were the real challenges.

 

Gazoo

Share this post


Link to post
Share on other sites

 

#2 - Yes, that's what I did.

 

...amongst other things. ;)

 

But not all the programs start at >A000, they might start anywhere. :)

 

Corcomp Diagnostics and Navarrone Disk Fixer were the real challenges.

 

Gazoo

Most everything I've done has been >A000. I think it was in the actual PROGRAM file header. (It's been too long.)

 

Ah, the carts - yes, because they were expecting to be at >6000. What did you have to do special?

Share this post


Link to post
Share on other sites

Most everything I've done has been >A000. I think it was in the actual PROGRAM file header. (It's been too long.)

 

Ah, the carts - yes, because they were expecting to be at >6000. What did you have to do special?

 

Not telling, I'm sure some skillful hacker will figure it out. ;)

 

Gazoo

Edited by Gazoo

Share this post


Link to post
Share on other sites

Acadiel, if you can burn two copies of the chip and send them to me, I'll get one of them to Gazoo (assuming everything works and it doesn't need additional tweaking). Let me know what you need for the EPROMs. I'll just need a good mailing address for you, Gazoo. With all the help you've given on developing good ROM images for the cartridge, you deserve one. I'll make sure you get one of the UberGROM carts too, once the code you set up for that one is tested on real hardware. I've got a finished copy of each board type already assembled for you. Anybody else needing one of the current revision of the 512K ROM-only board, they are $15 each (shipped to a US address, anywhere else is $12 plus what it costs to send to your country). This does not include an EPROM, but you should be able to get those from Hummingbird EPROMs once he has his system set up to make them. His dev board is on the way to him now. Speaking of which, Bob, should I make you one of the 512K ROM boards with a ZIF socket? I think I have some 32-pin ZIFs in a box around here somewhere. . .it won't fit into a cartridge case, but it will work great to test chips without having to work too hard at it.

Share this post


Link to post
Share on other sites
<snip>

2) On Tursi's Multicart, which is just 8K games (none are 16K ones), the system powers up in the first bank (0) and gives you the PRESS 2 FOR MULTICART option. You press this, find your game, select it, and the console resets with that game's bank active. You have to physically power down the console and power it back up; the bank persists through Function Quits.

<snip>

 

 

I can probably fix the problem with having to power down to get back to the menu.

 

Got a copy of the .bin file?

 

 

Gazoo

Share this post


Link to post
Share on other sites

Jim,

 

I've got one of the 64K Guidry boards with a ZIF installed for EPROMs. If you want to put a ZIF in your board and send me one, that would be great. I can burn the EEproms for the 512K and verify that the contents match the file. As long as the original works in the 512K card, all of the subsequent copies should be good as long as the contents verify. Are we using the 512k file you sent me awhile back?

Share this post


Link to post
Share on other sites

The 512K file you had was a test file to verify that each of the banks was present and responding. I used to PLCC copy you sent me as the test file for the UberGROM board I prepared for you. Gazoo's 512K file will work with either of the boards (using a PLCC for the UberGROM or an EPROM for the 512K ROM board). It just won't access the GROM on the UberGROM board (although his 632K file will--but that one requires part of the data to be in the GROM side, and we still need the loader Tursi is developing for that). I'll dig out the ZIFs then. One other important note--when using 28-pin chips, the four socket pins closest to the 74LS378 are empty--and the notch is toward the 378. . .and make sure the jumpers are set properly for the size chip you're using, just like the 64K boards. Instructions are on the board.

Share this post


Link to post
Share on other sites

The 512K file you had was a test file to verify that each of the banks was present and responding. I used to PLCC copy you sent me as the test file for the UberGROM board I prepared for you. Gazoo's 512K file will work with either of the boards (using a PLCC for the UberGROM or an EPROM for the 512K ROM board). It just won't access the GROM on the UberGROM board (although his 632K file will--but that one requires part of the data to be in the GROM side, and we still need the loader Tursi is developing for that). I'll dig out the ZIFs then. One other important note--when using 28-pin chips, the four socket pins closest to the 74LS378 are empty--and the notch is toward the 378. . .and make sure the jumpers are set properly for the size chip you're using, just like the 64K boards. Instructions are on the board.

 

Can we just forceload my 632k Grom code into the correct places on the UberGROM chip without the loader to see if it works? Apparently the Grom emulation code in the chip works, so this should be possible.

 

Gazoo

Share this post


Link to post
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...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...