Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > 64tass multiple inclusion guard
2016-03-28 17:46
Compyx

Registered: Jan 2005
Posts: 631
64tass multiple inclusion guard

I have recently decided to use 64tass for my next projects. It has all of the features I was implementing in my own assembler, and quite a few more. Even wrote a VIM syntax highlighting script, so I'm sticking with it.

One thing I'm missing though, is the ability to use multiple inclusion guards, as in C:
#ifndef KERNAL_CALLS_H
#define KERNAL_CALLS_H
    GETIN = $ffe4
    ...
#endif


Reading the manual, it clearly states that .ifdef and .ifndef will not be added, due to technical reasons.

I could get around this using the -D command line argument to initialize each inclusion guard to a false state and later update that label to a true state in the included file. But with a lot of header files, that's going to become messy quickly.

Any 64tass user out there who has tackled this? Or am I over-thinking this with a C coder mindset?
 
... 6 posts hidden. Click here to view all posts....
 
2016-03-28 19:21
soci

Registered: Sep 2003
Posts: 473
@Compyx:
Yes, possible to do but not recommended.

As for .ifdef/.ifndef. There's no preprocessor as such, so it'd end up in a non-solvable situation for that construct in the top post.
2016-03-28 19:25
Compyx

Registered: Jan 2005
Posts: 631
What I'm working on right now needs some structure. I'm writing a couple of editors for non-standard graphic modes.

To avoid code duplication, I'm working on a 'library' which basically provides a widget collection and 'window manager' to handle input and event handling. And some editing primitives for zooming/editing. Sounds like a Qt port for C64, hence the need for organizing my code.

And all this for, hopefully, a single-file demo for X2016.
2016-03-28 20:30
soci

Registered: Sep 2003
Posts: 473
Sounds like a lot of effort, unless the tool is planned to be released as well or it's for future projects. Writing a one off converter might be easier, but YMMV.

You may try to use ".proc/.pend" to try to limit the amount of "unused" code/data compiled in from the library as an alternative to the ".if/.fi" hell.

But beware that cyclic references between ".proc" blocks are not collected yet, so such .proc blocks will always be included. Will be fixed someday I hope...
2016-03-28 22:06
Compyx

Registered: Jan 2005
Posts: 631
I plan to release those tools, so the effort is worth it, I guess.

I could indeed use .proc stuff, which looks promising. But if that screws with the garbage collector, I'll avoid that, for now.
2016-03-29 00:37
chatGPZ

Registered: Dec 2001
Posts: 11111
its this kind of stuff where having a real linker, as in the cc65 toolchain, beats all other solutions by far :)
2016-03-29 04:45
soci

Registered: Sep 2003
Posts: 473
Compyx:
The garbage collector can collect cycles and is separate from the ".proc" dependency handling. You can use ".proc"-s without causing any problems, I just noted that in special cases more will be compiled in than expected.

Groepaz:
How does a linker help? It links object files, therefore you need tons of source files for fine granularity (possibly one per function), or else lot of unnecessary stuff gets in.
2016-03-29 06:32
JackAsser

Registered: Jun 2002
Posts: 1989
Quote: its this kind of stuff where having a real linker, as in the cc65 toolchain, beats all other solutions by far :)

Yep, and it's perfect for demo coding also once you have a template project setup with a Makefile and a linkfile. (ot.. Sorry)
2016-03-29 16:41
chatGPZ

Registered: Dec 2001
Posts: 11111
Quote:
how does a linker help? It links object files, therefore you need tons of source files for fine granularity (possibly one per function), or else lot of unnecessary stuff gets in.

sure you do - however i find that a lot less complicated and MUCH more "readable" than all those ugly hacks needed to achive the same in other assemblers. as soon as "library" is what you want to use doing it this way is superior and less hazzle.

for demo coding i still prefer acme (or 64tass) though :)
2016-03-29 21:56
soci

Registered: Sep 2003
Posts: 473
Well it might be superior in some ways but outside of my use cases then. I just wrap my functions (or even data) with .proc blocks to avoid dead code and call it a day.

In practice I don't bother building an asm libraries or even a symbol collection for the KERNAL. I just cherry pick stuff from my older sources as needed. Usually there's not too much to share between projects anyway.
2016-03-30 17:16
Compyx

Registered: Jan 2005
Posts: 631
Well, after getting my head around how .block and .binclude work together, I now have my code neatly organized into namespaces, as I would in Python code.

As for 'linking', the assembler takes care of that with .include or .binclude in my main.asm (or whatever), which simplifies my Makefile a lot.

I just had to adjust my approach a little, I've been writing way too much C, and not nearly enough good old assembly ;)
Previous - 1 | 2 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Sentinel/Excess/TREX
Didi/Laxity
Mojzesh/TGR🇬🇧
ϵʟʞ/ₐтₐ
Guests online: 63
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Bromance  (9.6)
10 Memento Mori  (9.6)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 Rainbow Connection  (9.5)
6 TRSAC, Gabber & Pebe..  (9.5)
7 Onscreen 5k  (9.5)
8 Wafer Demo  (9.5)
9 Dawnfall V1.1  (9.5)
10 Quadrants  (9.5)
Top Groups
1 Oxyron  (9.3)
2 Nostalgia  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top Organizers
1 Burglar  (9.9)
2 Sixx  (9.8)
3 hedning  (9.7)
4 Irata  (9.7)
5 MWS  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.048 sec.