Jump to content
IGNORED

Are there any alternatives to WinAsm99.exe Assembler on PC?


4Andy

Recommended Posts

Hi guys, does anyone know of any other TMS9900 assemblers for the PC similar to WinAsm99.exe that I can use with Classic99, and that can also output Uncompressed Object Code and Compressed Object Code? WinAsm99.exe has a couple of bugs that I've found, once of which is a deal breaker for the projects I am working on, with the way it handles Relocatable Addresses.

Link to comment
Share on other sites

Hi guys, does anyone know of any other TMS9900 assemblers for the PC similar to WinAsm99.exe that I can use with Classic99, and that can also output Uncompressed Object Code and Compressed Object Code? WinAsm99.exe has a couple of bugs that I've found, once of which is a deal breaker for the projects I am working on, with the way it handles Relocatable Addresses.

 

What version are you using? You should be using v3.010, which fixed a serious bug (I forget what it was, but will get back to you). I use it all of the time for the development of my fbForth 2.0. So far, I have found only a couple of irritations with it, viz., a limitation in the number of labels (~2800 or so) and needing to avoid labels with the same names as its undocumented macros.

 

If you are using v3.010, What bugs are you finding?

 

...lee

Link to comment
Share on other sites

Hi guys, thanks for your replies and I'm sorry for the delay, I was getting some 'easy to communicate' examples together. The version I am using is V3.010. The first bug is only a small one, and that is that the "-" prefix on TEXT opcodes, which negates the last character is not supported. I was using that in my TI code to detect the end of string, but I can deal with that issue. The one that is causing me a major issue is that some addresses become Absolute when they should be Relative.


I'm a firm believer in one version of the source code and executable that'll run anywhere, so I am working on code that is in a Relocatable Program Image format, for want of a better term. The code detects where it's running from (nothing new there) and all BL's and BLWP's use an offset register that contains the LOAD address of the program segment and this is used to access a bunch of core routines and all program segments can be paged into / from VDP when required (especially on 9938/58) to maximise the 32K or 4K (if running from MM). That's all working, but just to be awkward, I also want to be able to use exactly the same source code contained in my standard routine libraries without modification in a more traditional way for other programs that don't need the dynamically relocatable shenanigans. When I started this I thought I would just use labels and use their offset from the beginning of the program and when I wanted to use them in a more traditional way I would just make sure the value used to calculate the offset from the beginning would be zero. I discovered that this worked on the original TI Assembler, but didn't work in WinAsm99. I'm using Classic99 for most of the development, so I need to assemble on the PC.


The following code shows basic examples of the approach and the second exhibits the problem.



Example 1) When used as Relocatable.

(BASE is defined at the beginning of the source code of the program segment. Each segment is assembled as an individual program (which cuts assembly time on the TI). ME is obviously just a register that contains the LOAD address of the program segment and the code can be moved around in memory, as long as ME is adjusted)



** main program
BASE
... ** Get LOAD address here and place in ME register
BL @STARTP(ME)
...


** routine contained in source file library
STARTP EQU $-BASE
...
RT



Example 2) When used in the more traditional way of TI Assembler coding.

(BASE is set to zero and as long as STARTP is a Relative address will be adjusted when it is loaded by the Object Loader.)



** main program
BASE EQU 0
...
BL @STARTP
...


** routine contained in source file library
STARTP EQU $-BASE
...
RT



In example 2, STARTP is flagged as a Relative address in the original TI assembler (correctly, in my mind) but flagged as an Absolute address in WinAsm99, so when the program loads, the machine code copy of BL @STARTP contains a destination that just consists of the offset, and so is not being correctly resolved by the Object Loader by adjusting it to the location it is loaded into, i.e. it becomes BL @>00FE, instead of BL @>A0FE.
Link to comment
Share on other sites

I use A99EXE myself, although I had to ask for a 64-bit version to be compiled for me to use on my modern PC. It doesn't create memory image files (E/A #5) but I can load it up into Classic99 and use the built-in tool for that.

 

I've even added AORG so I can compile my CRPG and have it locate code and data in the CPU cartridge memory. No complaints. :)

 

It's an old cross-assembler, the original files date back to 1988 and an Alan Beard... the version I had I got from someone here on AtariAge, regrettably I have lost his name and contact info. :/

Link to comment
Share on other sites

A99EXE, seems like a no-go, then, if it's difficult to obtain.

 

Tursi - from your video, gcc looks like a hassle, but I'll bear it in mind if I ever want to develop on the TI in C.

 

I'm going to give xas99 a try as I'd forgotten I already have Python installed for Reaper.

 

Thanks again all.

Link to comment
Share on other sites

I use A99EXE myself, although I had to ask for a 64-bit version to be compiled for me to use on my modern PC. It doesn't create memory image files (E/A #5) but I can load it up into Classic99 and use the built-in tool for that.

 

I've even added AORG so I can compile my CRPG and have it locate code and data in the CPU cartridge memory. No complaints. :)

 

It's an old cross-assembler, the original files date back to 1988 and an Alan Beard... the version I had I got from someone here on AtariAge, regrettably I have lost his name and contact info. :/

If you wouldn't mind I would like a copy too. 32 and/or 64 bit versions. thanks

Link to comment
Share on other sites

 

Tursi - from your video, gcc looks like a hassle, but I'll bear it in mind if I ever want to develop on the TI in C.

 

 

GCC is much easier than my video these days, there's a download/patch/build/install script included with it. :)

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