| |
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.... |
| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
I apologize in advance for discussing non-C64 related stuff on CSDB, but since this is the defacto thread for everything KickAssembler related, I'll take my chances here.
I'm using kickass for my Atari 2600 coding, and I have some minor issues when doing bankswitching stuff.
For example, say I have two 4k banks, each should be assembled with $1000-$1fff addressing. Then I can do like this:
// Bank 1
.pc=$1000
lda foo
sta bar
..
.pc=$1400 "Some routine"
lda this
sta that
...
// Bank 2
.pc=$2000
.pseudopc $1000
{
lda foo
sta bar
..
}
And it works fine. However, say I want to place a routine at $1400 in the second bank. Then I have to break the pseudpc block, set the pc to $2400, and then start a new pseudopc block, like this:
// Bank 2
.pc=$2000
.pseudopc $1000
{
lda foo
sta bar
..
}
.pc=$2400
.pseudopc $1400
{
lda foo
sta bar
..
}
While it works, it gets a bit cumbersome to keep track of all the pc's and pseudopc blocks when you get more than a few.
Anyone have a good idea on how to work around this?
|
| |
andym00
Registered: Jun 2009 Posts: 44 |
In a really tenuous connection to Shadow's question above, but I figure now's the time to ask :) Is there ever likely to be support of the .pc directive for addresses >64K ?
It would make life assembling cartridge based stuff that's destined for >64K cartridge images a lot easier without a link stage to bolt all the banks together afterwards, and that's the simple case where there isn't code spanning these other banks and you want to share symbols etc..
I don't imagine it's a small change though, but had too ask :)
|
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Shadow: I don't know Atari coding so you will have to be a little more specific of what solution you had in mind.
Are you looking for something like this:
// Bank 2
.pc=$2000
.pseudopc $1000
{
lda foo
sta bar
..
.align $400
lda foo
sta bar
..
}
Or perhaps some kind of macro that makes it easier to set up the blocks? |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Andym: I guess making support for files larger than 64k is not that big a problem. But since I'm not doing cartridge development i'll need someone to test it and see that the concept i really useful (eg. is this a good way to do it and what else would you need to do cartridge development).
|
| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
Slammer: What I'm trying to accomplish I guess is setting the PC without having to break the pseudopc block.
Ideally I'd want something like this:
.pc=$2000
.pseudopc $1000
{
lda blabla
...
.pc=$1400
bla (code that ends up on $2400 here)
.pc=$1f3c
blabla (code that ends up on $2f3c here)
}
But maybe the solution you posted will solve that!
Would replacing the
.pc=$1f3c
with
.align $0f3c
in my example work?
Eh, I guess I can just test that myself! :D
|
| |
Slammer
Registered: Feb 2004 Posts: 416 |
I don't think .align $0f3c is what you are looking for. The align directive is made so you can easily can align source code to page boundaries, så typically you would do:
.align $100
table: .byte 1,2,3,4,5,..
The align command reads the current memory position and inserts zeros until the next boundary is reached. Eg the pc=$107f and you write .align $100, then $81 zeros is inserted so the pc is now $1100.
In your first example it seemed like you wanted $400 block alignment :-)
Currently you cant set the pc freely inside an pseudocommand statement. You can make somekind of macro that advances the pc (and pseudope). Something like :
.macro setPos(pos) {
.var length = pos-*
.fill length, 0
}
but this will not work if pos is less that the current pc.
|
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Hi, I got a mail from Alex who made a Kick Assembler plugin for Kate editor.
http://redlumf.blogspot.com/2011/12/kickass-plugin-for-kate.html
He would post it himself but had troubles signing up on CSDb. |
| |
Conjuror
Registered: Aug 2004 Posts: 168 |
Slammer,
I have a couple suggestions for features:
1. Allow the ability to access variables from user-defined structures by index.
That way we can pass in a List or HashTable containing UDS's to a function and apply an action based on the variable's index rather than the name, which could be different for each UDS.
Great for library building.
2. Call an external JAVA program, passing in Strings, Floats, Integers, Lists & HashTables with UDS's and return the same back into KickAssembler variables.
I could get the functionality by having my JAVA code generate KickAssembler script but this could get quite large for Collections.
Would be nice to have this inline.
Steve
|
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Quote: Slammer,
I have a couple suggestions for features:
1. Allow the ability to access variables from user-defined structures by index.
That way we can pass in a List or HashTable containing UDS's to a function and apply an action based on the variable's index rather than the name, which could be different for each UDS.
Great for library building.
2. Call an external JAVA program, passing in Strings, Floats, Integers, Lists & HashTables with UDS's and return the same back into KickAssembler variables.
I could get the functionality by having my JAVA code generate KickAssembler script but this could get quite large for Collections.
Would be nice to have this inline.
Steve
1. Yep, I guess it's easily done. Im not sure i understand how to benefit from this in libraries. (Looking forward too see en example of use!)
2. Yep, can be done. Is in fact on the todo list, but it's will take a bit of work so i have postphoned it a bit. One of the reasons for restructuring the assemble mekanism so it could handle a flexible number of passes and to cache script results, was to be able to call external programs - Both with script parameters and assembled code (if you want to do crunching or encrypting etc.) |
| |
Conjuror
Registered: Aug 2004 Posts: 168 |
Say I had a multi-field sorting routine this time for point{x,y} I could pass in a List of points.
Another time the names could be different or sort by even more fields.
I recently did a 2 field sort with a Hashtable and Lists. The Keys been the Y values which I called sort on, then called sort on Lists (Hashtable values).
That got me the result I wanted but I'd rather have a more generic solution.
But if suggestion #2 comes soon this will be irrelevant as I will just use full blown JAVA Collections and its interfaces (hmm still indexed fields would still be useful there saves
calling invoke on named methods).
And great to hear that it is on your list. That will make any other 'missing' functionality just go away. Cant wait! |
Previous - 1 | ... | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ... | 61 - Next |