| |
Slammer
Registered: Feb 2004 Posts: 416 |
Kick Assembler Thread 2
The previous thread took a little long to load, so this is a new fresh one.. |
|
... 592 posts hidden. Click here to view all posts.... |
| |
Lead
Registered: Dec 2004 Posts: 20 |
Hi Slammer thanks for confirming, I understand and think you do the right thing with staying a bit in the background so others can share their thoughs aswell.
In this case though it seems that there are very little people the came across this iussue or had anything to say about it (other than Ruk). You're right on the fact that eventually stuff gets answered in this thread... I've been reading this one all the way. there's some good stuff hidden below ;) |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Lead: Its always cool to know how other people does things, and with discussions in the KickAss-facebook group and by mail together with doing a bit of demo stuff and some other projects its hard to get time to code new features for Kick Assembler. That why i really want to encourage people to help answering questions.
Btw. The official 'Kick Assembler Wish List' is in the facebook group. Feel free to drop by and enter your wishes. |
| |
Lead
Registered: Dec 2004 Posts: 20 |
I just got on the MickAss facebook and saw there is no need for me to add it to the feature request list as it allready is there :
- Auto naming of memory blocks after variables, so you can write: .pc = coolRoutine, and it shows up as coolRoutine in the memory map, instead of "unnamed".
At least, I assume this is the same as I requested. I'll keep an eye on that page and hope this will be implemented in a future update :)
If I come up with other idea's you;ll see them either here or there... |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
I gave it a look and found out that both the name and virtual parameters are optional which makes it impossible if we shall maintain backwards compatibility since the parser can see the difference between a string and a indentifer, but not between an expression and an identifer.
Technical talk, i know.. However the wish stays on the wish list. I might revice the .pc syntax in a later version. |
| |
Mace
Registered: May 2002 Posts: 1799 |
What about a .name directive with a more elaborate syntax, in addition to what is already possible?
.pc = $2000
.name fileNameOfMacro + " at " + * // result: myMacro.asm at $2000
|
| |
Fresh
Registered: Jan 2005 Posts: 101 |
Hi slammer,
first of all thanks for a great tool.
I have a little problem with "arrays of labels". This kind of problem is partially solvable (pantaloon already pointed out a working solution in this thread) but it can't be used in every contexts.
The sample code:
.var test=List()
.for(var i=0;i<10;i++)
.for(var j=0;j<random()*20;j++)
{
.eval test.add(*)
.byte i
}
main:
lda test.get(0)
rts
This works fine but using a List to store the addresses brings some problem if I need to swap code and data:
.var test=List()
main:
lda test.get(0)
rts
.for(var i=0;i<10;i++)
.for(var j=0;j<random()*20;j++)
{
.eval test.add(*)
.byte i
}
This clearly doesn't work because I'm trying to get values from a List which is still empty.
So, based on my example, what to do if the code needs to be located *before* the data? Maybe defining a List of ".label" which may be evaluated after some passes? |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Good question. I can tell you that I had the same problem as late as december where i had some cyclic references in the code, meaning no matter which code you place first you will always get an error. Currently, I got no solution ready yet, but I am thinking about some approches.
If you need a solution now, you might try to have two versions of you code. A virtual (.pc = $1000 virtual), and a non virtual (.pc = $1000), and place them in this order:
1. Virtual version of code, that calculates the label array
2. Dependant code that uses the label array
3. Real (nonvirtual) version of code
If you place the code inside a macro with the label list as argument you only have to define it once. I havn't tried that approch yet though. |
| |
Agemixer
Registered: Dec 2002 Posts: 39 |
Hi,
I'm still new to kickassembler and found this thread - in need to continue with the question about conditional assembly.. But it's not exactly the same. I needed something like this to remove some debug code from the final product (simplified example):
.label DEBUG_MODE=1
.if (DEBUG_MODE==1) // debug mode
{
lda #$00
sta $d020
MODIFY_THIS:
lda #$00
sta $d020
}
lda #$00 // normal or debug mode
sta $d020
.if (DEBUG_MODE==1) // debug mode
{
inc MODIFY_THIS+1
}
rts
..which gives "Error: Unknown symbol 'MODIFY_THIS'"
So i needed to pull all labels like MODIFY_THIS out of .if, to get it compiled:
.if (DEBUG_MODE==1) // debug mode
{
lda #$00
sta $d020
}
MODIFY_THIS:
.if (DEBUG_MODE==1) // debug mode
{
lda #$00
sta $d020
}
lda #$00 // normal or debug mode
sta $d020
.if (DEBUG_MODE==1) // debug mode
{
inc MODIFY_THIS+1
}
rts
Are there any better way of doing similiar conditional assembly such like this? I don't even know which order kickass parses the asmfile, but this is just strange. Is that the same scope issue in question? I got a plenty of SMC labels like Something=*-1 so my code looks like ANYTHING else but CLEAN because of this :)
How you would create that kind of label touching code? I spent just several hours just because of this... |
| |
Pantaloon
Registered: Aug 2003 Posts: 124 |
To my knowledge the labels are limited to it's scope.
One way of doing the thing you want could be this.
.label DEBUG_MODE=1
.var MODIFY_PTR = 0
.if (DEBUG_MODE==1) // debug mode
{
lda #$00
sta $d020
.eval MODIFY_PTR = *
lda #$00
sta $d020
}
lda #$00 // normal or debug mode
sta $d020
.if (DEBUG_MODE==1) // debug mode
{
inc MODIFY_PTR+1
}
rts |
| |
Oswald
Registered: Apr 2002 Posts: 5076 |
seems overcomplicated.. how about:
lda #debug_mode
sta $d020
or:
if debug_mode
inc $d020
else
sta $d020
etc. |
Previous - 1 | ... | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | ... | 61 - Next |