• Automatically determining the A2 slot of a specific card.

    From Lukazi@21:1/5 to All on Sat Oct 2 22:26:15 2021
    Cards which contain memory (ROM) are easy to be made auto detectable because the memory can be programmed to output a specific identifier to the peripheral slot memory locations ie $C0XX. However it is much more difficult to detect cards that do not
    contain any memory chips.

    The 4Play card is detectable because of luck. The unique pattern it generates by default produces $20, $20, $20, $20 for locations $C0X0 to $C0X3. So this is also easily read by the A2 to determine the slot.

    However cards such as the SNES MAX do not produce any output until they are asked to do so ie poking addresses to determine what you get back. Therefore my questions are:-
    Is is ok to poke each peripheral slot in an attempt to determine a cards identity?
    Does this have the potential to screw up the setup on other slotted cards (I'm thinking about I/O cards because poking will be driving physical external devices)?
    Was there a best practise guide between developers for doing this?
    Is there consolidated information anywhere on how A2 auto slot detection of cards was performed?

    Thank-you for your help.

    Cheers,
    Alex.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From qkumba@21:1/5 to the user is on Sun Oct 3 09:02:19 2021
    Is is ok to poke each peripheral slot in an attempt to determine a cards identity?

    No.

    Does this have the potential to screw up the setup on other slotted cards (I'm thinking about I/O cards because poking will be driving physical external devices)?

    Yes.

    Was there a best practise guide between developers for doing this?

    Kind of. Either the card maker offers a way to identify it, or, failing that, the user is asked in which slot the card lives.
    No writing to slot space.

    Is there consolidated information anywhere on how A2 auto slot detection of cards was performed?

    I don't know of any. Not the same as "no". :-)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Oliver Schmidt@21:1/5 to All on Sun Oct 3 19:56:16 2021
    Hi Alex,

    Is is ok to poke each peripheral slot in an attempt to determine a cards id= >entity?
    Does this have the potential to screw up the setup on other slotted cards (= >I'm thinking about I/O cards because poking will be driving physical extern= >al devices)?

    The only thing I know for sure is that there are opposite opinions on
    this topic.

    My personal opinion:

    The Cx?? space is supposed to contain ROM. So you are supposed to be
    allowed to read from that area without fearing to cause unwanted side
    effects. In contrast the C0x? space is supposed to contain I/O ports.
    So even just reading from any of those 16 addresses can potentially
    cause any side effect including e.g. destroying the content of an
    attached mass storage device.

    An example:

    None of the three known Ethernet cards (LANceGS, Uthernet, Uthernet
    II) supported by IP65 has ROM allowing to cleanly identify it. So my
    strong opinion is that a program needs to ask the user for the slot of
    the Ethernet card to use - and then IP65 can differentiate between the
    three Ethernet cards by accessing their C0x? space - because all three
    Ethernet cards are well known to tolerate those accesses.

    Anyhow, in contrast ADTPro runs those IP65 accesses to the C0x? space
    "blindly" on all slots. In a discussion on the topic David Schmidt
    told me that he has never heard of those C0x? space accesses causing
    any issue.

    Regards,
    Oliver

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Charlie@21:1/5 to Lukazi on Sun Oct 3 20:44:26 2021
    On 10/3/2021 1:26 AM, Lukazi wrote:
    Cards which contain memory (ROM) are easy to be made auto detectable because the memory can be programmed to output a specific identifier to the peripheral slot memory locations ie $C0XX. However it is much more difficult to detect cards that do not
    contain any memory chips.

    The 4Play card is detectable because of luck. The unique pattern it generates by default produces $20, $20, $20, $20 for locations $C0X0 to $C0X3. So this is also easily read by the A2 to determine the slot.

    However cards such as the SNES MAX do not produce any output until they are asked to do so ie poking addresses to determine what you get back. Therefore my questions are:-
    Is is ok to poke each peripheral slot in an attempt to determine a cards identity?
    Does this have the potential to screw up the setup on other slotted cards (I'm thinking about I/O cards because poking will be driving physical external devices)?

    Yes, I would not do that.
    I can't speak for other cards but I have used the $C0xx locations for
    I/O on Carte Blanche projects. Some of the locations are used to send
    commands to the card. Randomly poking these locations could
    theoretically cause something unwanted to happen.
    In my projects, I like to put the value $CB in $C0xF to make it easy to
    locate the card.

    Charlie

    Was there a best practise guide between developers for doing this?
    Is there consolidated information anywhere on how A2 auto slot detection of cards was performed?

    Thank-you for your help.

    Cheers,
    Alex.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Michael J. Mahon@21:1/5 to Charlie on Mon Oct 4 19:15:02 2021
    Charlie <charlieDOTd@verEYEzon.net> wrote:
    On 10/3/2021 1:26 AM, Lukazi wrote:
    Cards which contain memory (ROM) are easy to be made auto detectable
    because the memory can be programmed to output a specific identifier to
    the peripheral slot memory locations ie $C0XX. However it is much more
    difficult to detect cards that do not contain any memory chips.

    The 4Play card is detectable because of luck. The unique pattern it
    generates by default produces $20, $20, $20, $20 for locations $C0X0 to
    $C0X3. So this is also easily read by the A2 to determine the slot.

    However cards such as the SNES MAX do not produce any output until they
    are asked to do so ie poking addresses to determine what you get back.
    Therefore my questions are:-
    Is is ok to poke each peripheral slot in an attempt to determine a cards identity?
    Does this have the potential to screw up the setup on other slotted
    cards (I'm thinking about I/O cards because poking will be driving
    physical external devices)?

    Yes, I would not do that.
    I can't speak for other cards but I have used the $C0xx locations for
    I/O on Carte Blanche projects. Some of the locations are used to send commands to the card. Randomly poking these locations could
    theoretically cause something unwanted to happen.
    In my projects, I like to put the value $CB in $C0xF to make it easy to locate the card.

    Charlie

    Was there a best practise guide between developers for doing this?
    Is there consolidated information anywhere on how A2 auto slot detection
    of cards was performed?

    Thank-you for your help.

    Cheers,
    Alex.




    In fact, the Mockingboard (and its clones) is a pretty prevalent example of
    a ROMless card that uses the Csxx space for 6522 control.

    --
    -michael - NadaNet 3.1 and AppleCrate II: http://michaeljmahon.com

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ralf Kiefer@21:1/5 to Lukazi on Tue Oct 5 14:54:06 2021
    Lukazi wrote:

    Cards which contain memory (ROM) are easy to be made auto detectable
    because the memory can be programmed to output a specific identifier to
    the peripheral slot memory locations ie $C0XX. However it is much more difficult to detect cards that do not contain any memory chips.

    It's difficult to detect a M$ Z80 Softcard: there is no ROM, there is no register at $C0Nx, but if you write to $CNxx you will switch off the
    6502 and switch on the Z80. If there is no suitable code for the Z80
    you've lost control.

    Microsoft could have used a register or $C0Nx to toggle between the two
    CPUs, but they did not.

    Regards
    Ralf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)