Jump to content
ralphb

xdt99: New TI 99 cross-development tools available

Recommended Posts

Hello,

 

I haven't been a regular reader of this forum in the past, but I think that people could be interested in a new project that I've just released.

 
The TI 99 Cross-Development Tools (xdt99) are planned as a suite of programs to facilitate the development of programs for the TI 99 family of home computers on modern computer systems.  Right now, the tools include
 
  • xas99, a TMS9900 cross-assembler,
  • xga99, a cross-assembler for GPL,
  • xbas99, a TI BASIC and TI Extended BASIC lister and encoder,
  • xdm99, a command-line disk manager,
  • xvm99, a command-line volume manager for nanoPEB/CF7A+ devices,
  • xhm99, a disk manager for HFE images,
  • xdt99-mode, a major mode for the GNU Emacs text editor, and
  • xdt99 IDEA, a plugin for the IntelliJ IDEA development environment.
xas99 generates object code and program images for the Editor/Assembler module.  There's also preliminary support for creating cartridge files for the MESS emulator.
 
xga99 translates GPL sources into image files containing GPL byte code.  The tool also generates cartridge files that are easily executed in emulators such as MESS.
 
xbas99 encodes TI BASIC and TI Extended BASIC programs into their internal format that can be loaded by the BASIC interpreter using the OLD command. Conversely, the tool also lists BASIC program files similarly to the LIST command.
 
xdm99 offers the usual management operations for sector-based TI disk images and also supports the TIFiles format.  There are, of course, already many capable disk managers out there, and they all have their unique selling points.
 
xdt99-mode and xdt99 IDEA provide editor support for writing assembly and TI Extended BASIC programs and include syntax highlighting, navigation, and semantic renaming, among others.
 
The xdt99 homepage is hosted on GitHub.  There you'll get the binary distribution as well as the source code.  All programs are written in Python and thus run on Linux, Windows, and Mac OS X.
 
I'm releasing xdt99 in the hope that other people may find them useful.  Please let me know if you have any feedback, in particular suggestions for improvement.
 
Ralph
 
[Post updated to include all currently available xdt99 programs.]
Edited by ralphb

Share this post


Link to post
Share on other sites

Thanks for the tools, Ralph. There are a couple of cross-assemblers out there, each with advantages/disadvantages when used. Another interesting tool would be something that takes the GPL source code as used in the original TI source code currently available and allows it to be compiled without modification (there are a couple of GPL assemblers out there, but they don't always adhere to the original notation on the source code side, from what I've seen--Rich Gilbertson could probably detail all of the differences there pretty quickly). Having a GPL cross-assembler would also be useful for anyone trying to write new GPL software using the UberGROM cartridges.

Share this post


Link to post
Share on other sites

Very nice. Do your assembler support any features beyond what the E/A assembler offers, like longer labels, brackets in expressions, conditional assembly (IF/THEN/ENDIF), or macros?

Share this post


Link to post
Share on other sites

Do your assembler support any features beyond what the E/A assembler offers, like longer labels, brackets in expressions, conditional assembly (IF/THEN/ENDIF), or macros?

 

Heh, it's funny that you should ask this ...  I actually went to great lengths to rebuild some of these limitations faithfully in xas99.   ;)

 

Currently the only relaxed constraint is the support of lower case sources.  The other items are very easy to implement, though; I'll add a "relaxed assembly mode" in the next release.

 

Thanks for the suggestion!

Share this post


Link to post
Share on other sites

I personally use the oldest original GPL Assembler the RYTE DATA GPL Assembler.

The only one that could assemble the entire XB Cart into all the Object files needed with out running out of space and crashing.

 

I have used the Swedish GPL Assembler, RAG GPL Assembler, Weigandasm GPL Assembler, and Thierry version of GPL Assembler.

 

The RAG Assembler package also can utilize the SAMS for creation of code. But I have never used the GPL version only the EA version.

Share this post


Link to post
Share on other sites

I personally use the oldest original GPL Assembler the RYTE DATA GPL Assembler. [...]

I have used the Swedish GPL Assembler, RAG GPL Assembler, Weigandasm GPL Assembler, and Thierry version of GPL Assembler.

 

Wow, I didn't know that there are so many GPL assemblers available.

 

In fact, I'm fairly ignorant as far as GPL is concerned, although I definitely want to look into this out of curiosity. For me so far, GPL has simply been the number two reason for why the TI 99 performed so poorly.

 

Are there any use cases for GPL, besides the fun factor, i.e., are there situations that would mandate GPL?  AFAIK the main purpose of GPL was saving space and locking out third-party cartridges, with dubious success ...

Share this post


Link to post
Share on other sites

The TI 99 Cross-Development Tools (xdt99) are planned as a suite of programs to facilitate the development of programs for the TI 99 family of home computers on modern computer systems.  Right now, the tools include

  • xas99, a TMS9900 cross-assembler, and
  • xdm99, a command-line disk manager

 

Minor update: I also added xvm99, an extension to xdm99 to handle multi-volume Compact Flash cards used by the nanoPEB/CF7A devices.  Please check the xdt99 homepage for details.

Share this post


Link to post
Share on other sites

 

Wow, I didn't know that there are so many GPL assemblers available.

 

In fact, I'm fairly ignorant as far as GPL is concerned, although I definitely want to look into this out of curiosity. For me so far, GPL has simply been the number two reason for why the TI 99 performed so poorly.

 

Are there any use cases for GPL, besides the fun factor, i.e., are there situations that would mandate GPL?  AFAIK the main purpose of GPL was saving space and locking out third-party cartridges, with dubious success ...

RXB, SXB, XB and 80% of carts from TI and third parties are written in GPL.

Examples are Disk Manager, EA, Mini Memory, MultiPlan, TI Writer, Speech Editor, Terminal Emulator II, TI Logo, and many others.

 

My GPLHOW2 Tutorials might interest you. 

 

http://atariage.com/forums/topic/153704-ti-994a-development-resources/

Share this post


Link to post
Share on other sites

GPL allows folks to write programs using the GROM space of the TI, adding 40K of useful programming space to the cartridge area (and available for use in the UberGROM cartridge and within any of the multitude of GRAM devices). Using the GRAM devices allows use of up to 24K of space in addition to that already noted. There is definitely a good use case for it.

Share this post


Link to post
Share on other sites

Great set of tools! Got this small example working using ubuntu.

 

As an assembly newbie, was able to take a short example of the Lottrup's Assembly Language on the TI book, write to a text file, compile an object file, load up classic99 (using wine) with the minimemory module (to keep it authentic to the book) , then load the object file.

 

Only thing I needed todo with the assembly  (different from the book) was add an 'AORG' at the start with the correct memory location for the mini memory module

    AORG >7D00
    LWPI >70B8
    LI R0,67
    LI R1,PQ
    LI R2,18
    BLWP @>6028
    LI R0,67
    LI R1,BF
    LI R2,18
    BLWP @>6030
    LI R0,330
    LI R1,BF
    LI R2,8
    BLWP @>6028
    B *R11
PQ  TEXT 'ASSEMBLY LANGUAGE'
BF  BSS 18
    END

Very cool, thanks heaps for the tools!

 

cheers

Daryn

Share this post


Link to post
Share on other sites

To bad it can not do a GPL Language version:

       GROM   >E000
       AORG   >0000
       FMT
       ROW    2
       COL    3
       HTEX   'GPL LANGUAGE'
       FEND
       MOVE   11,V@67,V@>03C0
       MOVE   3,V@>03C0,V@330
KEYSCN SCAN
       BR     KEYSCN
       EXIT

Share this post


Link to post
Share on other sites

 

Heh, it's funny that you should ask this ...  I actually went to great lengths to rebuild some of these limitations faithfully in xas99.   ;)

 

Currently the only relaxed constraint is the support of lower case sources.  The other items are very easy to implement, though; I'll add a "relaxed assembly mode" in the next release.

 

Thanks for the suggestion!

 

I think that would be great. One of the advantages of cross-assemblers is to allow easier functionality not available on the target computer.

Excellent work!

Share this post


Link to post
Share on other sites

 

Heh, it's funny that you should ask this ...  I actually went to great lengths to rebuild some of these limitations faithfully in xas99.   ;)

 

Currently the only relaxed constraint is the support of lower case sources.  The other items are very easy to implement, though; I'll add a "relaxed assembly mode" in the next release.

 

Thanks for the suggestion!

 

For reference, if you wat to see how far one can push an assembler you might want to take a look at the Z80 assembler sjasm.

 

Here's some examples that are kinda cool:

http://home.online.nl/smastijn/sjasmman6.html

http://home.online.nl/smastijn/sjasmman10.html

http://home.online.nl/smastijn/sjasmman11.html

Edited by retroclouds

Share this post


Link to post
Share on other sites

For reference, if you wat to see how far one can push an assembler you might want to take a look at the Z80 assembler sjasm.

 

Thanks for the links!

 

Coincidentally, I pushed a new version of xas99 earlier today which improves on labels, expressions, and whitespace handling and also adds conditional assembly.  I ran out of time before I could add macro support, though.

 

Your sjasm examples look interesting, and some of those features could be replicated through a clever use of macros.  But to be honest I'm not sure if it makes sense to cram as many features as possible into an assembler, because eventually you'll end up with another programming language.  If you need high level features you should probably use a high level language!

 

But then all of this is much more art than useful engineering anyway, so let's see what will be next ...  Right now RXB got me hooked on GPL.

Share this post


Link to post
Share on other sites

Wow.  Certainly one thing I would like in an assembler is longer labels.  In 6502 with TSDS I only ever used eight characters, and I made do but I still felt a little limited.  Six characters is just terrible but I get it for limited memory.

Share this post


Link to post
Share on other sites

Wow.  Certainly one thing I would like in an assembler is longer labels.  In 6502 with TSDS I only ever used eight characters, and I made do but I still felt a little limited.  Six characters is just terrible but I get it for limited memory.

 

I developed fbForth 1.0 and 2.0 (cartridge) with Cory Burr's WinAsm99 (Asm994a) Assembler, which allows longer labels.  I'm not sure how long you can go, but I tried 15 characters and the label was unique.  ‘LABEL1234567890’ was distinguished from ‘LABEL123456789’.

 

...lee

Share this post


Link to post
Share on other sites

 

I developed fbForth 1.0 and 2.0 (cartridge) with Cory Burr's WinAsm99 (Asm994a) Assembler, which allows longer labels.  I'm not sure how long you can go, but I tried 15 characters and the label was unique.  ‘LABEL1234567890’ was distinguished from ‘LABEL123456789’.

 

...lee

 

Good to know, thank you sir!

Share this post


Link to post
Share on other sites

Am really loving xdt99!

 

Been using it with the examples in the Lottrup assembly language book.

 

Every single example I've entered in using vim on my Linux box, have compiled, then Load and Run the object file with mini-memory in classic99 & now js99er has worked!

 

Attached is a hires draw asm example.

 

Here is a wee perl script wrapper I've written around xas99.py and xdm99.py to compile an object from an asm file, then add it to a DSK image (1 dir up).

 

name: xdt.pl

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

# ./xas99.py -OR sprites.asm
# ./xdm99.py work.dsk -a sprites.obj -n "SPRITES" -f DIS/FIX80

my $asm = $ARGV[0];
my $home = `pwd`;
chomp($home);
my $path = "$home";
my $disk = "../work.dsk";
my ($object) = $asm =~ m@(.*?)\..*@gi;
if (defined $object) {
    my $compiler = "$path/xas99.py -OR $asm";
    my $objectFile = "$path/$object.obj";
    print "$compiler\n";
    my $retVal = system($compiler);
    if ($retVal == 0) {
        if (-e $objectFile) {
            my $name = uc($object);
            my $createDisk = "$path/xdm99.py $disk -a $objectFile -n \"$name\" -f DIS/FIX80";
            print "$createDisk\n";
            $retVal = system($createDisk);
            if ($retVal == 0) {
                print "\n$objectFile added to $disk\n";
            } else {
                print "\ncould not add $objectFile to $disk\n";
            }
        } else {
            print "\n$objectFile not found\n";
        }
    } else {
        print "\n$asm did not compile\n";
    }
}

Usage: put scipt in your ~/bin. Run in dir with your xdt scripts & asm file

$ xdt.pl hidraw.asm

Really great set of tools!!

 

cheers

Daryn 

Share this post


Link to post
Share on other sites

Am really loving xdt99!

 

Been using it with the examples in the Lottrup assembly language book.

 

Every single example I've entered in using vim on my Linux box, have compiled, then Load and Run the object file with mini-memory in classic99 & now js99er has worked!

 

Attached is a hires draw asm example.

 

Here is a wee perl script wrapper I've written around xas99.py and xdm99.py to compile an object from an asm file, then add it to a DSK image (1 dir up).

 

name: xdt.pl

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

# ./xas99.py -OR sprites.asm
# ./xdm99.py work.dsk -a sprites.obj -n "SPRITES" -f DIS/FIX80

my $asm = $ARGV[0];
my $home = `pwd`;
chomp($home);
my $path = "$home";
my $disk = "../work.dsk";
my ($object) = $asm =~ m@(.*?)\..*@gi;
if (defined $object) {
    my $compiler = "$path/xas99.py -OR $asm";
    my $objectFile = "$path/$object.obj";
    print "$compiler\n";
    my $retVal = system($compiler);
    if ($retVal == 0) {
        if (-e $objectFile) {
            my $name = uc($object);
            my $createDisk = "$path/xdm99.py $disk -a $objectFile -n \"$name\" -f DIS/FIX80";
            print "$createDisk\n";
            $retVal = system($createDisk);
            if ($retVal == 0) {
                print "\n$objectFile added to $disk\n";
            } else {
                print "\ncould not add $objectFile to $disk\n";
            }
        } else {
            print "\n$objectFile not found\n";
        }
    } else {
        print "\n$asm did not compile\n";
    }
}

Usage: put scipt in your ~/bin. Run in dir with your xdt scripts & asm file

$ xdt.pl hidraw.asm

Really great set of tools!!

 

cheers

Daryn 

Share this post


Link to post
Share on other sites

Daryn,

 

I'm glad you like it -- and I like the script you created for simplifying the edit-assemble-run cycle.  I think that's one of the big advantages of command-line based tools: you can easily combine and tweak them so that they meet exactly your needs.

 

Note that I'll keep updating the tools without explicit announcements here in the forum, so check the GitHub release page once in a while for new features available.

Share this post


Link to post
Share on other sites

Daryn,

 

I'm glad you like it -- and I like the script you created for simplifying the edit-assemble-run cycle.  I think that's one of the big advantages of command-line based tools: you can easily combine and tweak them so that they meet exactly your needs.

 

Note that I'll keep updating the tools without explicit announcements here in the forum, so check the GitHub release page once in a while for new features available.

 

Will keep on eye out on your github page ralphb

 

I think these tools have sped up my learning process. Can write my assembly using vim, add to disk, upload to js99'er and see results really quickly. Makes a huge difference, especially when examples you see elsewhere in books/code examples etc that you plug into your code assemble & just work. 

 

So many times the learning process stops because the tools/examples etc just don't work (or at least not in an intuitive way).

 

Again, thanks so much for xdt99

 

cheers

Daryn

Share this post


Link to post
Share on other sites

Hello,

 

I'm happy to announce that I added xga99, a GPL cross-assembler, to the set of xdt99 cross-development tools.  xga99 assembles GPL source code into GROM files that are easily executed by MESS and other emulators.

$ xga99.py -c hello.gpl
$ mess64 ti99_4ae -cart hello.rpk

This is my first foray into the world of GPL, so I'm particularly interested in feedback and bug reports (due to the scarcity of available GPL sources xga99 hasn't been tested as extensively as xas99 yet).

 
Since there is no single established syntax style for GPL programs I opted to support the most common ones, i.e., Ryte Data style, RAG style, and TI Image Tool style.  Still, each assembler uses its own set of predefined symbols, so assembling existing GPL programs may require some (minor) work.
 
Personally I'm really looking forward to play around with GPL in the future.  A big thanks to Rich for his GPLHOW2 tutorials on how to get started with GPL!

Share this post


Link to post
Share on other sites

...(due to the scarcity of available GPL sources xga99 hasn't been tested as extensively as xas99 yet).


Nice work!
I just assembled my biggest GPL program (2000 lines of code): [attachment=380891:2048-XDT.zip]

I could not use your cartridge generator, because I have 2 objects to load, one at >6000 and one at >8000.

The 2 gbc files can be loaded with classic99, using the following declaration:
[usercart0]
name="2048 XDT"
rom0=G|6000|2000|mods\2048.gbc
rom1=G|8000|4000|mods\lib.gbc

Runs perfectly! Edited by lucien2

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.

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...