ralphb Posted January 11, 2015 Share Posted January 11, 2015 (edited) 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, xda99, a TMS9900 disassembler, xga99, a cross-assembler for GPL, xdg99, a disassembler 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 Edited December 23, 2019 by ralphb 12 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted January 11, 2015 Share Posted January 11, 2015 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. 2 Quote Link to comment Share on other sites More sharing options...
Asmusr Posted January 11, 2015 Share Posted January 11, 2015 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? 1 Quote Link to comment Share on other sites More sharing options...
ralphb Posted January 11, 2015 Author Share Posted January 11, 2015 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! 1 Quote Link to comment Share on other sites More sharing options...
TheMole Posted January 15, 2015 Share Posted January 15, 2015 Looks good! And thanks for making this cross-platform for us Mac snobs and Linux geeks !! 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted January 16, 2015 Share Posted January 16, 2015 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. Quote Link to comment Share on other sites More sharing options...
ralphb Posted January 18, 2015 Author Share Posted January 18, 2015 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 ... Quote Link to comment Share on other sites More sharing options...
ralphb Posted January 18, 2015 Author Share Posted January 18, 2015 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. Quote Link to comment Share on other sites More sharing options...
RXB Posted January 18, 2015 Share Posted January 18, 2015 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/ Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted January 18, 2015 Share Posted January 18, 2015 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. 1 Quote Link to comment Share on other sites More sharing options...
palmheads Posted January 19, 2015 Share Posted January 19, 2015 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 Quote Link to comment Share on other sites More sharing options...
RXB Posted January 19, 2015 Share Posted January 19, 2015 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 Quote Link to comment Share on other sites More sharing options...
kl99 Posted January 19, 2015 Share Posted January 19, 2015 thx for these tools, very appreciated. I like your blinking avatar. Quote Link to comment Share on other sites More sharing options...
+Vorticon Posted January 19, 2015 Share Posted January 19, 2015 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! Quote Link to comment Share on other sites More sharing options...
+retroclouds Posted January 25, 2015 Share Posted January 25, 2015 (edited) 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 January 25, 2015 by retroclouds Quote Link to comment Share on other sites More sharing options...
ralphb Posted January 25, 2015 Author Share Posted January 25, 2015 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. Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted January 25, 2015 Share Posted January 25, 2015 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. Quote Link to comment Share on other sites More sharing options...
+Lee Stewart Posted January 26, 2015 Share Posted January 26, 2015 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 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted January 26, 2015 Share Posted January 26, 2015 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! Quote Link to comment Share on other sites More sharing options...
palmheads Posted February 1, 2015 Share Posted February 1, 2015 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 1 Quote Link to comment Share on other sites More sharing options...
palmheads Posted February 1, 2015 Share Posted February 1, 2015 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 hidraw.asm Quote Link to comment Share on other sites More sharing options...
ralphb Posted February 1, 2015 Author Share Posted February 1, 2015 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. 1 Quote Link to comment Share on other sites More sharing options...
palmheads Posted February 8, 2015 Share Posted February 8, 2015 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 Quote Link to comment Share on other sites More sharing options...
ralphb Posted February 23, 2015 Author Share Posted February 23, 2015 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! 3 Quote Link to comment Share on other sites More sharing options...
lucien2 Posted February 25, 2015 Share Posted February 25, 2015 (edited) ...(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): 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 February 25, 2015 by lucien2 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.