Jump to content
IGNORED

Regenerator Atari 8-bit support


Recommended Posts

Hi all.

 

I am the author of Regenerator - an interactive disasembler for 6502 binaries. Currently I am trying to add support for multiple systems. Which means you can select the system from the drop-down list and the configuration specific for this system would be loaded that includes the files that define which addresses to exclude from auto-labelling (excludes.txt) - normally you would exclude absolute addresses for I/O, etc. , then names of the labels to auto-label (kernel functions, variables, etc.) and comments.txt which auto-comments certain addresses (for jumps and references).

 

I would like to add those three files for Atari 8-bit (and any other system with 6502/6510 processor), if maybe you can point me to direction where I could get the content for those files I can generate them myself. If anyone would like to beta test the multi-system support please drop me an email ( tomcat AT sgn.net ) and I can send you the beta. Otherwise you can download the latest release 1.6 here:

 

http://csdb.dk/release/?id=148862

 

Best regards,
Tom-Cat

  • Like 5
Link to comment
Share on other sites

Hmm, these are mostly variables and hw registers which is good for labels (and some comments), what about kernel functions ?

Should I include all of these as labels (especially Zero Page stuff)?

Also - can you specifiy which addresses should be excluded from auto-label creation. I think $d000 - $d40f at least should be excluded.

Link to comment
Share on other sites

I've never been using much of kernel functions besides XITVBV and such, I am sure you will get a nice list here.

Not sure either about ZP stuff, but labels may be beneficial for disassembling, especially some utility software. Certainly a lot of programmes use RTCLOK from ZP,

I guess the address to be excluded from auto-label should be $d000 -- $d7ff. The rest is basically free to use when you turn off OS.

Link to comment
Share on other sites

Cheers - I saw this release probably on Lemon64 in recent times. Great that you've chosen to expand it's capability to cover other old 6502 systems.

 

One special note about Atari stuff. The hardware registers have different functions for read and write so you might want to include the ability to generate labels in context with what's being done.

This is applicable to GTIA, Pokey and Antic. With PIA ($D3xx) generally the reference is the same whether reading or writing.

  • Like 3
Link to comment
Share on other sites

Cheers - I saw this release probably on Lemon64 in recent times. Great that you've chosen to expand it's capability to cover other old 6502 systems.

 

One special note about Atari stuff. The hardware registers have different functions for read and write so you might want to include the ability to generate labels in context with what's being done.

This is applicable to GTIA, Pokey and Antic. With PIA ($D3xx) generally the reference is the same whether reading or writing.

Unfortunetly that is not doable with Regenerator... each address can have only one unique label, that's how it is coded. Currently I took the first label in the files I found, if needed they can be combined though, but not sure about that. Still searching for kernel function addresses though. For c64 this stuff is everywhere... for Atari 8bit it is very hard to find :( Also a file with one liners describing all those GTIA, Pokey and Antic addresses (for comments) would be nice.

Link to comment
Share on other sites

OS function addresses are fairly simple. There is a jump table at $E450 - $E48F and they are the only "legal" calls that programs should make to the OS by direct JSR instruction.

There are handler tables at 16 byte boundaries $E400 - $E440.

 

Generally, well written programs will make no other program calls to the OS. Much of the OS functionality is via CIO which is called by JSR $E456.

 

Compute! magazine published "Mapping the Atari", it can be found online http://www.atariarchives.org/mapping/

The memory map chapter http://www.atariarchives.org/mapping/memorymap.php

Actually, best to refer to the XL revised chapter http://www.atariarchives.org/mapping/appendix12.php

There is PDF version of this book though I can't find it online.

 

Note the memory map has some direct call addresses but they're best ignored as they aren't valid for all revisions of the OS.

 

Also note the Floating Point package residing at $D800 - $DFFF (2K) has various entry points for FP operations like add/subtract/multiply/convert FP to binary etc. These entry points aren't by jump table but spread around at various locations in the 2K area. There was only one official release of this part of the Rom but were 3rd party replacements available but all the call locations are the same.

 

There's also Basic @ $A000 - $BFFF but Basic on Atari is regarded as an option and it's pretty rare for machine code games to even require that Rom present, let alone call routines within it.

 

 

Re the hardware registers - if only one label is possible then it's probably best to use the ones that relate to write operations, though note that some register locations only have one or the other function.

Edited by Rybags
Link to comment
Share on other sites

Here's a list of OS entry points. First up the ones for the FP Rom present @ $D800 - $DFFF

 

D800 AFP
D8E6 FASC
D9AA IFP
D9D2 FPI
DA44 ZFR0
DA46 ZF1
DA60 FSUB
DA66 FADD
DADB FMUL
DB28 FDIV
DD40 PLYEVL
DD89 FLD0R
DD8D FLD0P
DD98 FLD1R
DD9C FLD1P
DDA7 FST0R
DDAB FST0P
DDB6 FMOVE
DDC0 EXP
DDCC EXP10
DECD LOG
DED1 LOG10

Next up, the OS jump vector table which lives @ $E450 - $E48F

 

DISKIV E450
DISKINV E453
CIOV E456
SIOV E459
SETBV E45C
SYSBV E45F
XITBV E462
SIOINV E465
SENDEV E468
INTINV E46B
CIOINV E46E
SELFSV E471
WARMSV E474
COLDSV E477
RBLOKV E47A
CSOPIV E47D

PUPDIV E480
SLFTSV E483
PENTV E486
PHUNLV E489
PHINIV E48C
Inconsistent ordering of locations/labels as I just did copy and edit operations from the relevant manuals. Edited by Rybags
Link to comment
Share on other sites

"Hmm, these are mostly variables and hw registers which is good for labels (and some comments), what about kernel functions ?

Should I include all of these as labels (especially Zero Page stuff)?"

 

Yes you should When coding on the Atari you don't make much OS calls besides OI, because the IO system is very powerful.

Yet you rely on the ZP and page 2/3 vectors and use them fin your own code.

Link to comment
Share on other sites

  • 4 weeks later...

Thanks Tom-Cat.
Tried it today, so here some feedback:

- I like the explicit comment feature. Added it to the list of cool things for DIS6502.
- The Open File selector only offers the C64/standard file extensions and not "*.* All", so standard Atari executables (".COM", ".EXE", ".XEX") cannot be selected. In my tools I use platform specific set of file extension filers. Al least having "*.*" as option would be good
- Would be cool, if the Atari Executable format (pendant to PRG on C64) would be recognized. It basically is a squence $FFFF, start, end, [$FFFF], start, end..... See https://youtu.be/sh26knEi0VM?t=282
- I tried to set the header as bytes/words manuallly but somehow:
- SET (Data) does not do anything if I mark several lines/bytes - works for single byes
- SET (Word) does not seem to work at all

post-17404-0-99927500-1468757481_thumb.png

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