Loading ...
Sorry, an error occurred while loading the content.
 

Re: [TI-99/4A] 64K Cartridge board

Expand Messages
  • Tursi
    The bank selected on powerup is RANDOM, your code must be prepared to expect any bank there on powerup. The bank ordering otherwise is reversed - ie: 6000
    Message 1 of 13 , Dec 1, 2009
      The bank selected on powerup is RANDOM, your code must be prepared to expect
      any bank there on powerup.

      The bank ordering otherwise is reversed - ie: >6000 selects the HIGHEST bank
      in the EPROM, what number that is depends on the size of the EPROM. So in
      your 64k example, B8H is selected by >6000, for 32k B8D is selected by
      >6000, and for 16k B8B is selected by >6000.

      > What should the ordering of ROM banks be in a custom "filename.bin" to
      > correspond to the proper ROM selection write addresses.
      > B8A + B8B + B8C + B8D + B8E + B8F + B8G + B8H = MY64K.bin
      > B8A + B8B + B8C + B8D = MY32K.bin
      > B8A + B8B = MY16K.bin
      > Does B8A default to the >6000 address that is seen on power up. Which
      > would make the following ROM write addresses be:
    • Tyler Van Tighem
      ... Hmm -- is this random effect caused by the GROM powerup routine or in the System ROM? If it s in the System ROM can someone patch them along with the
      Message 2 of 13 , Dec 2, 2009
        Tursi wrote:
        > The bank selected on powerup is RANDOM, your code must be prepared to expect any bank there on powerup.

        Hmm -- is this random effect caused by the GROM powerup routine or in
        the System ROM? If it's in the System ROM can someone patch them along
        with the interrupt bug fix. Classic99 seems to default to B8A from
        MY64K.bin example.

        > The bank ordering otherwise is reversed - ie: >6000 selects the HIGHEST bank in the EPROM, what number that is depends on the size of the EPROM. So in your 64k example, B8H is selected by >6000, for 32k B8D is selected by >6000, and for 16k B8B is selected by >6000.

        B8A + B8B + B8C + B8D + B8E + B8F + B8G + B8H = GAMES64K.bin

        B8H - >6000 Bank 0 B8D - >6008 Bank 4
        B8G - >6002 Bank 1 B8C - >600A Bank 5
        B8F - >6004 Bank 2 B8B - >600C Bank 6
        B8E - >6006 Bank 3 B8A - >600E Bank 7

        And the rest relative to the smaller sizes right??

        So both Classic99 and MESS should behave the same for testing purposes,
        as I don't have an EPROM burner. A local electronic store will do this
        for me for a small fee ($2-$3).

        I'm working on a soft-switch controlled MultiCart similar to Jon's
        hw-switched MultiCart(s). There's usually enough unused code at the end
        of most 8K carts.


        Tyler
      • Tursi
        ... The random effect is caused by the fact that the 74LS379 doesn t have a pre-determined power-up state or a reset line. If you wanted to eliminate it, there
        Message 3 of 13 , Dec 2, 2009
          >> The bank selected on powerup is RANDOM, your code must be prepared to
          >> expect any bank there on powerup.
          > Hmm -- is this random effect caused by the GROM powerup routine or in
          > the System ROM? If it's in the System ROM can someone patch them along
          > with the interrupt bug fix. Classic99 seems to default to B8A from
          > MY64K.bin example.

          The random effect is caused by the fact that the 74LS379 doesn't have a
          pre-determined power-up state or a reset line. If you wanted to eliminate
          it, there are similar gates that trade one of the other control lines for a
          reset (I don't have the number handy, but I've posted it a couple of times).
          :)

          Classic99 does always select the same bank on powerup, yes.

          > B8E - >6006 Bank 3 B8A - >600E Bank 7
          > And the rest relative to the smaller sizes right??

          Looks right!

          > So both Classic99 and MESS should behave the same for testing purposes,
          > as I don't have an EPROM burner. A local electronic store will do this
          > for me for a small fee ($2-$3).

          One would hope they do, at least for switching! (They don't have to for
          powerup). Existing software wouldn't work right if they differed.
        • hexbus
          Don t ask me why, but on my /4A, it usually powers up in the highest 8K bank. Filip just gave me an EPROM with only one header - in the lowest bank. Since the
          Message 4 of 13 , Dec 2, 2009
            Don't ask me why, but on my /4A, it usually powers up in the highest 8K bank.

            Filip just gave me an EPROM with only one header - in the lowest bank. Since the 74LS379 is inverted, and seemed to be powering up in the highest 8K bank, it didn't see the cartridge header. I reversed the four banks, and every time, the highest bank with the cart header had the menu item show up.

            I know it's supposed to be random, but I sure haven't had it power up in anything but the highest bank for some reason.

            Jon

            --- In ti99-4a@yahoogroups.com, Tyler Van Tighem <tvantigh@...> wrote:
            >
            > Tursi wrote:
            > > The bank selected on powerup is RANDOM, your code must be prepared to expect any bank there on powerup.
            >
            > Hmm -- is this random effect caused by the GROM powerup routine or in
            > the System ROM? If it's in the System ROM can someone patch them along
            > with the interrupt bug fix. Classic99 seems to default to B8A from
            > MY64K.bin example.
            >
            > > The bank ordering otherwise is reversed - ie: >6000 selects the HIGHEST bank in the EPROM, what number that is depends on the size of the EPROM. So in your 64k example, B8H is selected by >6000, for 32k B8D is selected by >6000, and for 16k B8B is selected by >6000.
            >
            > B8A + B8B + B8C + B8D + B8E + B8F + B8G + B8H = GAMES64K.bin
            >
            > B8H - >6000 Bank 0 B8D - >6008 Bank 4
            > B8G - >6002 Bank 1 B8C - >600A Bank 5
            > B8F - >6004 Bank 2 B8B - >600C Bank 6
            > B8E - >6006 Bank 3 B8A - >600E Bank 7
            >
            > And the rest relative to the smaller sizes right??
            >
            > So both Classic99 and MESS should behave the same for testing purposes,
            > as I don't have an EPROM burner. A local electronic store will do this
            > for me for a small fee ($2-$3).
            >
            > I'm working on a soft-switch controlled MultiCart similar to Jon's
            > hw-switched MultiCart(s). There's usually enough unused code at the end
            > of most 8K carts.
            >
            >
            > Tyler
            >
          • mark wills
            It might come down to the particular chip. If you built another board, you could find it behaves differently. Or, a different manufacturer chip might wake up
            Message 5 of 13 , Dec 2, 2009
              It might come down to the particular chip. If you built another board, you could find it behaves differently.

              Or, a different manufacturer chip might wake up differently. I believe the issue is to do with how the chip behaves in those first few nanoseconds while it is powering up. This could vary by manufacturer, or manufacturing process.

              Mark

              From: hexbus <jon@...>
              To: ti99-4a@yahoogroups.com
              Sent: Thu, 3 December, 2009 5:50:58
              Subject: Re: [TI-99/4A] 64K Cartridge board

               

              Don't ask me why, but on my /4A, it usually powers up in the highest 8K bank.

              Filip just gave me an EPROM with only one header - in the lowest bank. Since the 74LS379 is inverted, and seemed to be powering up in the highest 8K bank, it didn't see the cartridge header. I reversed the four banks, and every time, the highest bank with the cart header had the menu item show up.

              I know it's supposed to be random, but I sure haven't had it power up in anything but the highest bank for some reason.

              Jon

              --- In ti99-4a@yahoogroups .com, Tyler Van Tighem <tvantigh@.. .> wrote:
              >
              > Tursi wrote:
              > > The bank selected on powerup is RANDOM, your code must be prepared to expect any bank there on powerup.
              >
              > Hmm -- is this random effect caused by the GROM powerup routine or in
              > the System ROM? If it's in the System ROM can someone patch them along
              > with the interrupt bug fix. Classic99 seems to default to B8A from
              > MY64K.bin example.
              >
              > > The bank ordering otherwise is reversed - ie: >6000 selects the HIGHEST bank in the EPROM, what number that is depends on the size of the EPROM. So in your 64k example, B8H is selected by >6000, for 32k B8D is selected by >6000, and for 16k B8B is selected by >6000.
              >
              > B8A + B8B + B8C + B8D + B8E + B8F + B8G + B8H = GAMES64K.bin
              >
              > B8H - >6000 Bank 0 B8D - >6008 Bank 4
              > B8G - >6002 Bank 1 B8C - >600A Bank 5
              > B8F - >6004 Bank 2 B8B - >600C Bank 6
              > B8E - >6006 Bank 3 B8A - >600E Bank 7
              >
              > And the rest relative to the smaller sizes right??
              >
              > So both Classic99 and MESS should behave the same for testing purposes,
              > as I don't have an EPROM burner. A local electronic store will do this
              > for me for a small fee ($2-$3).
              >
              > I'm working on a soft-switch controlled MultiCart similar to Jon's
              > hw-switched MultiCart(s) . There's usually enough unused code at the end
              > of most 8K carts.
              >
              >
              > Tyler
              >

            • Tursi
              ... I don t quite understand this line of thought. What bank it will power up in is not defined in the datasheet. That means it is legal for the chip to come
              Message 6 of 13 , Dec 2, 2009
                > Filip just gave me an EPROM with only one header - in the lowest bank.
                > Since the 74LS379 is inverted, and seemed to be powering up in the
                > highest 8K bank, it didn't see the cartridge header. I reversed the four
                > banks, and every time, the highest bank with the cart header had the menu
                > item show up.
                > I know it's supposed to be random, but I sure haven't had it power up in
                > anything but the highest bank for some reason.

                I don't quite understand this line of thought.

                What bank it will power up in is not defined in the datasheet. That means it
                is legal for the chip to come up in any state.

                It does not mean a particular chip will come up in a different bank every
                time. But if you build code and carts assuming a particular bank, it may
                work 99% of the time. It may even work 100% of the time on a particular
                batch of chips. But if a new batch changes something in the chip, or the
                powerup is slightly noisier, or any of a dozen other reasons, it may stop
                working, and it will be much harder to figure out why at that point -
                because you are working on an assumption that is not true.

                For designs that /require/ a known startup state, there is a part designed
                for that, it has a reset line. This chip is not defined with a known
                startup. (Unless I missed it in the datasheet??) So, treating it as random
                is just careful design, but it's not surprising that you haven't seen any
                differences in a small sample set.

                Even if the bank is static, and even if you switch to the part with a reset
                line, you may still experience issues if you assume that only one bank needs
                a header. Here's a simple test for you:

                -Create a cart with the header ONLY in the last bank, so that it powers up
                active in your test console
                -Write a program that changes to any other bank, then sits in a wait loop
                with interrupts enabled
                -Press FCTN-= to reset the console
                -Does your cart appear in the program menu?
              • Gregg Eshelman
                To pick the brains of the electronics gurus here... I have a Microsoft Office keyboard. It s very nice, have many extra buttons that re actually useful plus a
                Message 7 of 13 , Dec 3, 2009
                  To pick the brains of the electronics gurus here...

                  I have a Microsoft Office keyboard. It's very nice, have many extra buttons that're actually useful plus a scroll wheel.

                  Microsoft has disowned it and has next to zero mention of it on the website now, not supported by InteliType after version 5.5. (To get it working in Vista one must use IT 5.02, extract the installer then run Setup in XP compatibility mode.)

                  Aside from that, the one big problem with it is how the function keys work. To use them as function keys instead of their alternate modes, a Function Lock key has to be pressed to toggle their state.

                  The nasty bit is the default state is OFF so this keyboard cannot be used to get into BIOS setup. Like an old style caps-lock key, the function lock system is entirely contained in the keyboard and cannot be program controlled.

                  What I'm wondering is if it might be possible to hack in some type of one shot trigger that turns on the function lock as soon as power is available to the keyboard, then after that will only respond to pressing the function lock key. It's a USB keyboard with an optional PS/2 adapter plug.
                • killroy732000
                  The bank selected on powerup is RANDOM, your code must be prepared to expect any bank there on powerup. Yeah, had to learn that the hard way :-)
                  Message 8 of 13 , Dec 3, 2009
                    <snip>
                    The bank selected on powerup is RANDOM, your code must be prepared to
                    expect any bank there on powerup.
                    </snip>

                    Yeah, had to learn that the hard way :-)
                    Somehow I forgot we just discussed this in the yahoo group a while ago.

                    Question: Can classic99 be enhanced in such way that it automatically picks a random bank on startup.
                    That way it will behave more as the real deal.

                    Filip


                    --- In ti99-4a@yahoogroups.com, "Tursi" <yahoogroup@...> wrote:
                    >
                    > The bank selected on powerup is RANDOM, your code must be prepared to expect
                    > any bank there on powerup.
                    >
                    > The bank ordering otherwise is reversed - ie: >6000 selects the HIGHEST bank
                    > in the EPROM, what number that is depends on the size of the EPROM. So in
                    > your 64k example, B8H is selected by >6000, for 32k B8D is selected by
                    > >6000, and for 16k B8B is selected by >6000.
                    >
                    > > What should the ordering of ROM banks be in a custom "filename.bin" to
                    > > correspond to the proper ROM selection write addresses.
                    > > B8A + B8B + B8C + B8D + B8E + B8F + B8G + B8H = MY64K.bin
                    > > B8A + B8B + B8C + B8D = MY32K.bin
                    > > B8A + B8B = MY16K.bin
                    > > Does B8A default to the >6000 address that is seen on power up. Which
                    > > would make the following ROM write addresses be:
                    >
                  • hexbus
                    It s just an observation - I understand that it s always good practice to select the bank to make sure you re in the correct one. I ve always followed the
                    Message 9 of 13 , Dec 3, 2009
                      It's just an observation - I understand that it's always good practice to select the bank to make sure you're in the correct one. I've always followed the practice of putting the same header code in all banks, including a write to >6000 to select the "first" bank.

                      However, the different batches of NTE and TI 74LS379 chips that I've used all seemed to behave the same way. Maybe it was just one of those flukes that happen when the planets are aligned just so, and there's a full moon out... :)

                      There's a few of the 16K games that flat out don't even test for a startup bank, and assume that they will power up in the low 8K segment (for the non-inverted 74LS379) or the high 8K bank (inverted 74LS379.) Bad programming? Yeah, but they're out there.

                      I'm just wondering why that assumption was made on their behalf. Maybe they got lazy and assumed that the high bank (for inverted) would come up in their particular batch of chips?

                      Jon

                      --- In ti99-4a@yahoogroups.com, "Tursi" <yahoogroup@...> wrote:
                      >
                      > > Filip just gave me an EPROM with only one header - in the lowest bank.
                      > > Since the 74LS379 is inverted, and seemed to be powering up in the
                      > > highest 8K bank, it didn't see the cartridge header. I reversed the four
                      > > banks, and every time, the highest bank with the cart header had the menu
                      > > item show up.
                      > > I know it's supposed to be random, but I sure haven't had it power up in
                      > > anything but the highest bank for some reason.
                      >
                      > I don't quite understand this line of thought.
                      >
                      > What bank it will power up in is not defined in the datasheet. That means it
                      > is legal for the chip to come up in any state.
                      >
                      > It does not mean a particular chip will come up in a different bank every
                      > time. But if you build code and carts assuming a particular bank, it may
                      > work 99% of the time. It may even work 100% of the time on a particular
                      > batch of chips. But if a new batch changes something in the chip, or the
                      > powerup is slightly noisier, or any of a dozen other reasons, it may stop
                      > working, and it will be much harder to figure out why at that point -
                      > because you are working on an assumption that is not true.
                      >
                      > For designs that /require/ a known startup state, there is a part designed
                      > for that, it has a reset line. This chip is not defined with a known
                      > startup. (Unless I missed it in the datasheet??) So, treating it as random
                      > is just careful design, but it's not surprising that you haven't seen any
                      > differences in a small sample set.
                      >
                      > Even if the bank is static, and even if you switch to the part with a reset
                      > line, you may still experience issues if you assume that only one bank needs
                      > a header. Here's a simple test for you:
                      >
                      > -Create a cart with the header ONLY in the last bank, so that it powers up
                      > active in your test console
                      > -Write a program that changes to any other bank, then sits in a wait loop
                      > with interrupts enabled
                      > -Press FCTN-= to reset the console
                      > -Does your cart appear in the program menu?
                      >
                    • Tursi
                      ... No, I m sure they do. The point is that it s bad design to count on it. Manufacturers are allowed to build their chips so that startup is anything they
                      Message 10 of 13 , Dec 3, 2009
                        > However, the different batches of NTE and TI 74LS379 chips that I've used
                        > all seemed to behave the same way. Maybe it was just one of those flukes
                        > that happen when the planets are aligned just so, and there's a full moon
                        > out... :)
                        >

                        No, I'm sure they do. The point is that it's bad design to count on it.
                        Manufacturers are allowed to build their chips so that startup is anything
                        they like.

                        > There's a few of the 16K games that flat out don't even test for a startup
                        > bank, and assume that they will power up in the low 8K segment (for the
                        > non-inverted 74LS379) or the high 8K bank (inverted 74LS379.) Bad
                        > programming? Yeah, but they're out there.
                        >

                        Are you sure those titles used a 379, and not one of the devices with a
                        reset? The Atarisoft ones run on a custom IC with everything embedded (or at
                        least, Defender does), so I can't tell you what they use, others I haven't
                        looked at. There are a lot of ways you can wire this circuit.
                      Your message has been successfully submitted and would be delivered to recipients shortly.