Finally working. Not thoroughly tested yet, but playable.
Thanks everybody.
@admin: How do we proceed? Do you think, Dragon-modified Tandy-roms should be uploaded and stored anywhere (i. e. download/roms/dragon or download/roms/TandytoDragonTest)? There are just a few bytes to change, but there is no point in everybody doing it all over again and again. Ok, for xroar-users it's not a problem, but for cartridge-burners it is.
CoCo cartridge Atom (1983) (26-3149) (Tandy)
CoCo cartridges
Perfect. Can you please mkdir that folder?
I made a little perl script, that disassembles all tandy roms with the help of 6809dasm.pl and greps for JMPs and JSRs into BASIC and KERNAL-Rom. The results are listed in a big textfile, which I would like to attach. That should make it easier to see which Tandy roms work with the Dragon and reveal "bad" rom calls that make them "misbehave". I still want to modify a few Tandy roms for usage with my multi cartridge.
It may be useful for somebody else.
I cannot upload:"The extension txt is not allowed."
I made a little perl script, that disassembles all tandy roms with the help of 6809dasm.pl and greps for JMPs and JSRs into BASIC and KERNAL-Rom. The results are listed in a big textfile, which I would like to attach. That should make it easier to see which Tandy roms work with the Dragon and reveal "bad" rom calls that make them "misbehave". I still want to modify a few Tandy roms for usage with my multi cartridge.
It may be useful for somebody else.
I cannot upload:"The extension txt is not allowed."
Last edited by Rolo on Mon Oct 07, 2013 7:07 pm, edited 1 time in total.
CoCo cartridge Atom (1983) (26-3149) (Tandy)
Here is a modified version of "Atom" for the Dragon Computer.
Re: CoCo cartridges
Cool! Your script could also match the calls against the list at http://sourceforge.net/p/toolshed/code/ ... equivs.asmRolo wrote:I made a little perl script, that disassembles all tandy roms with the help of 6809dasm.pl and greps for JMPs and JSRs into BASIC and KERNAL-Rom. The results are listed in a big textile, which I would like to attach. That should make it easier to see which Tandy roms work with the Dragon and reveal "bad" rom calls that make them "misbehave". I still want to modify a few Tandy roms for usage with my multi cartridge.
It may be useful for somebody else.
and to some degree fix it up automatically.
By the way, a good while after I made that list (many hours of work) for porting HDB-DOS, I discovered that Phill Harvey-Smith had made a similar list for porting superdos to Dragon (also in Toolshed!) with at least half of my entries already found... Well, well, at least I could do some cross-checking of the two lists, and I think I even found something that can be fixed up in superdos. I guess we ought to come up with a good machine- and human readable format and make one master list we can maintain and reuse for all these projects. My list is tab-separated but the comments and "classic" names like CHROUT and CkComa are not all consistent. Phill used more structured names, but having a column for the "classic" names could also be nice. See superdos/romdefs.asm, it doesn't list equivalents one by one, but such formats can be generated from it.
A retro forum that doesn't accept plain text... Maybe you can just zip if for now.I cannot upload:"The extension txt is not allowed."
Re: CoCo cartridge Atom (1983) (26-3149) (Tandy)
Hi tormod,
please don't be disappointed. It's just a dumb script (maybe 25 lines) making a dumb list at the moment. I did not print the many JMP/JSR within cartridge space above $C000. The jumps within the program should be ok, shouldn't they? I filtered the jumps from $8000 to $BFFF. And those are amazingly few Maybe I'm doing something wrong!? If you notice an error, please tell me, so that I can change my script.
Here is the zipped txt-file:
please don't be disappointed. It's just a dumb script (maybe 25 lines) making a dumb list at the moment. I did not print the many JMP/JSR within cartridge space above $C000. The jumps within the program should be ok, shouldn't they? I filtered the jumps from $8000 to $BFFF. And those are amazingly few Maybe I'm doing something wrong!? If you notice an error, please tell me, so that I can change my script.
Here is the zipped txt-file:
Re: CoCo cartridge Atom (1983) (26-3149) (Tandy)
You're right, calls within the cartridge above $C000 are no problem. Also, most (all?) indirect ROM calls at $A0xx are portable.
Note that the disassembler easily gets out of sync with the code when it encounters data fields without knowing, and tries to interpret data as code. I guess this is the reason for some rather strange addresses seen in your list. So in some cases you'll have to inspect the disassembly around a detected JMP/JSR to see if the code makes somewhat sense. Somewhere down my TODO list I have some ideas for a superdisassembler that tracks possible code flow to find all code correctly on basis of well-known entry points, initially for ARM code but it should be architecture independent so that 6809 code could be analysed too...
Alternatively, XRoar could be of help here: It could collect all ROM calls cleanly while you run the program in CoCo emulation. We would just need volunteers to play the sh** out of those games
Note that the disassembler easily gets out of sync with the code when it encounters data fields without knowing, and tries to interpret data as code. I guess this is the reason for some rather strange addresses seen in your list. So in some cases you'll have to inspect the disassembly around a detected JMP/JSR to see if the code makes somewhat sense. Somewhere down my TODO list I have some ideas for a superdisassembler that tracks possible code flow to find all code correctly on basis of well-known entry points, initially for ARM code but it should be architecture independent so that 6809 code could be analysed too...
Alternatively, XRoar could be of help here: It could collect all ROM calls cleanly while you run the program in CoCo emulation. We would just need volunteers to play the sh** out of those games
CoCo Basic interpreter: documented source code
I finally found a very good source of information concerning Color Basic and Extended Color Basic, which already has been of great use to me, patching CoCo-cartridges for the Dragon. Very well documented source code! I think more people might be interested in that:
"Color Basic Unravelled II" - For the Tandy TRS-80 Color Computer (dealing with $A000 ... $BFFF) and
"Extended Color Basic Unravelled II" - For the Tandy TRS-80 Color Computer (dealing with $8000 ... $9FFF)
both revised by Walter K Zydhek
Original by Spectral Associates
I don't put a link in here. You'll find a couple of links for pdf-files in Google.
It's not exactly the same Basic, of course, but it is very similar. It is easy to find and recognize corresponding parts in both versions. Check it out.
"Color Basic Unravelled II" - For the Tandy TRS-80 Color Computer (dealing with $A000 ... $BFFF) and
"Extended Color Basic Unravelled II" - For the Tandy TRS-80 Color Computer (dealing with $8000 ... $9FFF)
both revised by Walter K Zydhek
Original by Spectral Associates
I don't put a link in here. You'll find a couple of links for pdf-files in Google.
It's not exactly the same Basic, of course, but it is very similar. It is easy to find and recognize corresponding parts in both versions. Check it out.
Last edited by Rolo on Mon Oct 07, 2013 9:00 pm, edited 1 time in total.
Re: CoCo cartridge Atom (1983) (26-3149) (Tandy)
There is also a good reference of the Dragon rom with cross reference to CoCo addresses here:
http://dragon32.info/info/romref
http://dragon32.info/info/romref
Re: CoCo cartridge Atom (1983) (26-3149) (Tandy)
Yes, I know that and it's helpful, but sometimes it is not enough. There also are jumps into routines not mentioned in this list and there also are jumps into the middle of routines. Some routines are slightly different between the two computers (i.e. Dragon pushing addresses on stack, CoCo not; => jumping into the routine causes stack error and crash). Comparing the documented CoCo source with the disassembled Dragon rom reveals this kind of information.