6502.org Forum  Projects  Code  Documents  Tools  Forum
It is currently Fri Jun 28, 2024 6:18 am

All times are UTC




Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: Writing an assembler
PostPosted: Mon Jul 02, 2007 2:44 am 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
I spent some time recently looking at freeware 6502 assemblers on the net. There are plenty of them, but none that work the way I'd like to see (e.g., portable source, correct operation, high capacity, ease of use, macros, and scoping). So I'm writing my own. Hopefully I'll have it done before my MicroKIM shows up on my doorstep.

I've had the program produce a 6502 opcode decoding list as a test. The easily program readable list is available at:

http://homepage.mac.com/chessnotation/6502decode

The assembler will include a disassembly service, and I'm thinking of using it on the PROM contents from a few 6502 based dedicated chess machines. I guess that's okay as I don't recall signing a "no reverse engineering" End User License Agreement when I purchased any Fidelity, Novag, or Saitek machine.

Here's a snippet from my program's disassember output from scanning part of the KIM-1's ROMs:
Code:
1800 a9ad   lda #$ad
1802 8eec17 stx $17ec
1805 203219 jsr $1932
1808 a927   lda #$27
180a 8d4217 sta $1742
180d a9bf   lda #$bf
180f 8d4317 sta $1743
1812 a264   ldx #$64
1814 a916   lda #$16
1816 207a19 jsr $197a
1819 ca     dex
181a d0f8   bne $1814
181c a92a   lda #$2a
181e 207a19 jsr $197a
1821 adf917 lda $17f9
1824 206119 jsr $1961
1827 adf517 lda $17f5
182a 205e19 jsr $195e


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon Jul 02, 2007 9:49 am 
Offline

Joined: Tue Jul 05, 2005 7:08 pm
Posts: 1017
Location: near Heidelberg, Germany
Quote:
I spent some time recently looking at freeware 6502 assemblers on the net. There are plenty of them, but none that work the way I'd like to see (e.g., portable source, correct operation, high capacity, ease of use, macros, and scoping). So I'm writing my own.


Just wondering - do you mean 6502 native assembler? or cross- assember?

If the latter, what were your gaps with the ones you tried (ok, specifically with xa, because I did that one.... :-)

And what keeps you from modifying one of the open source variants?

Thanks
André


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon Jul 02, 2007 6:41 pm 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
I need a cross assembler. I also need an integrated disassembler and hooks for an emulator. I'm rather particular about syntax and pseudo op format issues, so the assembler should have flexibility here, or, even better, be able to modify the source file using one syntax style into my style.

Other than the occasional assembly language foray, I only use C++ and Lisp. I haven't done a major C only project in well over a decade.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Fri Jul 06, 2007 7:00 pm 
Offline

Joined: Tue May 29, 2007 1:29 pm
Posts: 25
Just what the world needs, another 6502 assembler. :-)

I'm not trying to spoil your fun, but there are so many already, it's hard to believe that none are suitable. Did you try ca65, for example?


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Jul 07, 2007 8:38 am 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
I looked at a whole bunch of them, and at this point I can't recall the specifics of (almost) any of them. Trust me, I would not write an assembler if I had located an already existing one that was suitable for my purposes.

My assembler is coming along nicely and should be ready after a couple more coding sessions. I've got it producing KIM-1 paper tape format object output as an option. (Complete with the six end of record NULs and the trailing X-Off byte; it all checks out.)

Oh, and the first assembler I wrote was for the IBM/370. Back in 1976.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Jul 07, 2007 1:47 pm 
Offline

Joined: Tue May 29, 2007 1:29 pm
Posts: 25
Are you writing a linker also or just going straight to executable?


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Jul 07, 2007 2:33 pm 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
The object output format will be selectable and will include relocatable output suitable for linking. I'll do a linker as well.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Jul 07, 2007 4:37 pm 
Offline

Joined: Sat Jan 04, 2003 10:03 pm
Posts: 1706
All this sure seems like reinventing the wheel. cc65 and the remainder of the toolchain (which includes ca65) is an outstanding product that is capable of producing a raw binary image as well as relocatable output modules. As I've not seen a specific list of grievances against this (or any other) assembler, I can only assume that the grievances are purely syntactical in nature.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Jul 07, 2007 5:16 pm 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
Your assumption is erroneous.

See my earlier post. I don't spend time on hacking old style C sources. I need named scopes, extensive programmable pseudo op capability, service routine hooks for a working emulator, and several other features. I'm not willing to compromise and neither am I willing to wait for someone else to supply the features I need. And quite honestly, I don't feel obligated to detail every insufficiency of every freeware assembler out there.

If you're happy with a particular product, well then, that's fine. Kindly extend the same right of evaluation to others.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon Jul 09, 2007 1:50 am 
Offline

Joined: Sat Jan 04, 2003 10:03 pm
Posts: 1706
Well, folks have asked you what the deficiencies you found were. You failed to answer in any significant detail. I made an assumption based on data which was not available.

No, you're not obligated to provide the information we asked for, out of courteous curiosity. But, by the same token, you ARE obligated to at least expect people to guess given insufficient data. And, you ARE also expected (but not obligated) to not give any lip about it if they do. A polite, emotionally uncharged correction would be nice, of course.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Tue Jul 10, 2007 7:39 pm 
Offline

Joined: Thu Jul 05, 2007 4:11 pm
Posts: 33
I am looking for a freeware native 6502 assembler to integrate into my homebrew computer. Does anyone know of one? I've searched, but have come up empty handed. Even a ML monitor would suffice.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Tue Jul 10, 2007 8:03 pm 
Offline
User avatar

Joined: Fri Aug 30, 2002 9:02 pm
Posts: 1696
Location: Sacramento, CA
My SBC-2 OS has a monitor based on the Apple 2e, including a mini-assembler (similar to the apple 2 mini-assembler). It supports 65c02 opcodes but does not use labels... you enter it one line at a time with hexidecimal values and addresses. branches are calculated for you, both forward and backward.

IO uses input and output character vectors, so you can taylor it to your IO devices.

Its not exactly what you want, but it is FREE.

EDIT: Additional comments:
If you are communicating through an RS-232 port, you can create files on your PC and do a text transfer and let the mini-assembler assemble your code on the fly. There are limitations and you'll have to work a little to get a finished program but the benefit is having your source in assembly stored on your PC. I can expand on this process if anyone is interested.
/EDIT


Daryl

http://sbc.rictor.org/software/sbcos.html


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Wed Jul 11, 2007 6:46 am 
Offline

Joined: Tue Jul 05, 2005 7:08 pm
Posts: 1017
Location: near Heidelberg, Germany
DonnaD wrote:
I am looking for a freeware native 6502 assembler to integrate into my homebrew computer. Does anyone know of one? I've searched, but have come up empty handed. Even a ML monitor would suffice.


On http://www.6502.org/users/andre/misc/index.html you find my C64 @ASS and @MON native assembler and monitor. You will have to adopt to other systems, but that should not be a problem. I've ported it to the PET as well as to my selfbuilt GeckOS (multi-platform) operating system http://www.6502.org/users/andre/osa/index.html

I have to admit the code is not very beautiful due to less experience on my side when I wrote it, space constraints, and not-so-advanced tools then.

Hope this helps
André

EDIT: I only ported @MON to the PET and GeckOS. @ASS somehow relies on the Commodore BASIC file layout, as you type the source in the BASIC editor.


Top
 Profile  
Reply with quote  
 Post subject: Some necessary features
PostPosted: Wed Jul 18, 2007 10:58 am 
Offline

Joined: Sun Jul 01, 2007 8:57 pm
Posts: 9
Work continues on my assembler project. As mentioned before, I need extensive pseudo op functionality, and this includes fairly general arithmetic expressions. These constant value expression may appear as the right hand side of a set or equ pseudo op, and also may appear as the displacement field when constructing an effective address. General expressions may also appear in other places.

The lexer, parser, and error manager has been done for the above. It uses C/C++ expression syntax and implements 23 different operators with 12 different precedence levels. Parentheses are used to override default precedence or for adding textual clarity. Also, tab and space characters can be used between tokens as desired although they are not needed.

Because parentheses are used for arithmetic operand grouping, square brackets are used to indicate indirection in address operands as needed.

A separate and simpler parser handles address operands; it calls the expression parser when required.

A constant expression value that changes from pass to pass is correctly flagged as a phase error.

--------

In general, the complexity of the user source program is limited only by the available virtual memory on the host. The symbol manager uses a list of scopes, and the symbols in each scope are organized using a self balancing (AVL) tree for speed.

--------

As with C/C++, user identifiers are unlimited in length and are case sensitive. Names for CPU opcodes, pseudo ops, and the three registers are not case sensitive on input. Collisions between user and reserved symbols are correctly detected.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Wed Jul 18, 2007 5:32 pm 
Offline
User avatar

Joined: Fri Aug 30, 2002 1:09 am
Posts: 8460
Location: Southern California
Is part of the idea to make a better free assembler available? I have not tried any of the free ones as my company bought me Universal Cross-Assembers' C32 15 years ago; but although that one is not free, it was only $200 and was good for scores of processors, not just the 6502, and gives you the tools to adapt it for new processors that may not have been designed yet when the assembler was sold. IOW, it should basically be the last assembler you'd ever need. I don't think I hear you telling of anything it can't do; but there is one thing I would like in a cross-assembler that I have not seen so far. Although they allow assembler variables, they do not give the tools to effectively make and use assembler variable arrays. What I would like the array for is to make stacks, so that with macros, I can make and nest program structures in assembly, and have more-structured assembly-language code without all the labels.


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 18 posts ]  Go to page 1, 2  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: