Jump to content

Photo

xdt99: New TI 99 cross-development tools available


210 replies to this topic

#1 ralphb OFFLINE  

ralphb

    Moonsweeper

  • 418 posts
  • Location:Germany

Posted Sun Jan 11, 2015 8:24 AM

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, Sun Feb 26, 2017 3:42 AM.


#2 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,003 posts

Posted Sun Jan 11, 2015 9:00 AM

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.



#3 Asmusr OFFLINE  

Asmusr

    River Patroller

  • 2,308 posts
  • Location:Denmark

Posted Sun Jan 11, 2015 10:47 AM

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?



#4 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Sun Jan 11, 2015 1:22 PM

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!



#5 TheMole OFFLINE  

TheMole

    Dragonstomper

  • 721 posts
  • Location:Belgium

Posted Thu Jan 15, 2015 3:05 AM

Looks good! And thanks for making this cross-platform for us Mac snobs and Linux geeks :)!!



#6 RXB OFFLINE  

RXB

    River Patroller

  • 2,586 posts
  • Location:Vancouver, Washington, USA

Posted Thu Jan 15, 2015 11:59 PM

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.



#7 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Sun Jan 18, 2015 5:02 AM

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



#8 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Sun Jan 18, 2015 5:06 AM

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.



#9 RXB OFFLINE  

RXB

    River Patroller

  • 2,586 posts
  • Location:Vancouver, Washington, USA

Posted Sun Jan 18, 2015 8:36 AM

 

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/...ment-resources/



#10 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,003 posts

Posted Sun Jan 18, 2015 11:29 AM

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.


  • RXB likes this

#11 palmheads OFFLINE  

palmheads

    Chopper Commander

  • 170 posts
  • Location:Christchurch, New Zealand

Posted Sun Jan 18, 2015 8:12 PM

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



#12 RXB OFFLINE  

RXB

    River Patroller

  • 2,586 posts
  • Location:Vancouver, Washington, USA

Posted Sun Jan 18, 2015 9:49 PM

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


#13 kl99 OFFLINE  

kl99

    Dragonstomper

  • 631 posts
  • Location:Vienna, Austria

Posted Mon Jan 19, 2015 12:55 AM

thx for these tools, very appreciated. I like your blinking avatar.



#14 Vorticon OFFLINE  

Vorticon

    River Patroller

  • 2,620 posts
  • Location:Eagan, MN, USA

Posted Mon Jan 19, 2015 8:10 AM

 

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!



#15 retroclouds OFFLINE  

retroclouds

    Stargunner

  • 1,521 posts
  • Location:Germany

Posted Sun Jan 25, 2015 9:21 AM

 

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.n.../sjasmman6.html

http://home.online.n...sjasmman10.html

http://home.online.n...sjasmman11.html


Edited by retroclouds, Sun Jan 25, 2015 9:24 AM.


#16 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Sun Jan 25, 2015 11:51 AM

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.



#17 OLD CS1 OFFLINE  

OLD CS1

    River Patroller

  • 3,822 posts
  • Technology Samurai
  • Location:Tallahassee, FL

Posted Sun Jan 25, 2015 1:28 PM

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.



#18 Lee Stewart ONLINE  

Lee Stewart

    River Patroller

  • 3,181 posts
  • Location:Silver Run, Maryland

Posted Sun Jan 25, 2015 8:09 PM

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



#19 OLD CS1 OFFLINE  

OLD CS1

    River Patroller

  • 3,822 posts
  • Technology Samurai
  • Location:Tallahassee, FL

Posted Sun Jan 25, 2015 9:10 PM

 

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!



#20 palmheads OFFLINE  

palmheads

    Chopper Commander

  • 170 posts
  • Location:Christchurch, New Zealand

Posted Sat Jan 31, 2015 8:31 PM

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 



#21 palmheads OFFLINE  

palmheads

    Chopper Commander

  • 170 posts
  • Location:Christchurch, New Zealand

Posted Sat Jan 31, 2015 8:33 PM

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 

Attached Files



#22 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Sun Feb 1, 2015 4:54 AM

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.



#23 palmheads OFFLINE  

palmheads

    Chopper Commander

  • 170 posts
  • Location:Christchurch, New Zealand

Posted Sun Feb 8, 2015 3:10 PM

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



#24 ralphb OFFLINE  

ralphb

    Moonsweeper

  • Topic Starter
  • 418 posts
  • Location:Germany

Posted Mon Feb 23, 2015 12:25 PM

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!


#25 lucien2 OFFLINE  

lucien2

    Moonsweeper

  • 282 posts
  • Location:Switzerland

Posted Wed Feb 25, 2015 5:33 PM

...(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): Attached File  2048-XDT.zip   13.34KB   19 downloads

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, Wed Feb 25, 2015 5:34 PM.





0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users