| |
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.. |
|
... 590 posts hidden. Click here to view all posts.... |
| |
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: 38 |
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: 5017 |
seems overcomplicated.. how about:
lda #debug_mode
sta $d020
or:
if debug_mode
inc $d020
else
sta $d020
etc. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11108 |
Quote:Are there any better way of doing similiar conditional assembly such like this?
use an assembler that properly supports scoping. |
| |
Pantaloon
Registered: Aug 2003 Posts: 124 |
i was waiting for that comment from Groepaz :) |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
I guess Groepaz is the kind of person who goes down to the store to buy a tool so he can cook an egg. The clerk sells him a frying pan and the next day he comes back complaining that the pan is a terrible pot and that he can't get the egg hard-boild!
Groepaz: I think you mean an assembler that does not support scoping, not an assembler that supports scoping properly. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11108 |
i mean exactly what i said. and no, "not the right tool for the job" does not apply here at all. hardly any other assembler is broken like this. |
Previous - 1 | ... | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | ... | 61 - Next |