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 > Kick Assembler Thread 2
2009-07-21 17:20
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....
 
2013-03-18 08:57
Carlos
Account closed

Registered: Mar 2009
Posts: 15
Maybe this is a bit silly question but i'm starting with KickAss (and with asm in general...)

I have made a small macro library (change vic bank, change vic mode and things like that...) i have, for instance, a macro like:

.macro setBackground(color)
{
lda #color
sta $d021
}

nothing fancy, works ok if i use it.

Now i want use it from my mainloop to change the background color when i move the joystick up:

.var color = 0

read_joy:
lda $dc00
lsr
bcc joy_up
jmp read_joy

joy_up:
.eval color++
:setBackground(color)
jmp read_joy

i tought that the .var directive was the answer to my problem but seems that's only evaluated while assembling not during execution (so this code only works once).

Any idea how to set some kind of 'variable' in my main loop and use it as a parameter to a macro?
2013-03-18 09:16
Cruzer

Registered: Dec 2001
Posts: 1048
Yes, variables and other fancy stuff is only evaluated during assembly. Nothing but the machine code is compiled to the executable, so it's not like a normal programming language where you can do color++ in "realtime". In your case you need a memory location to hold your color value, and a machine code way of incrementing it:
read_joy:
	lda $dc00
	lsr
	bcc joy_up
	jmp read_joy

joy_up:
	inc color
	lda color
	sta $d021
	jmp read_joy

color:	.byte 0
2013-03-18 09:45
Carlos
Account closed

Registered: Mar 2009
Posts: 15
Yeah.. this was my second approach but, as far as i know, i can't use a memory location as the parameter of a KickAss macro. I have tested it and the assembler gives no error but nothing happens:

read_joy:
lda $dc00
lsr
bcc joy_up
jmp read_joy

joy_up:
inc color
:setBackground(color)
jmp read_joy

color: .byte 0



2013-03-18 10:11
Cruzer

Registered: Dec 2001
Posts: 1048
Change the macro to this, to avoid immediate addressing mode:
.macro setBackground(color) {
	lda color
	sta $d021
}
2013-03-18 10:34
Carlos
Account closed

Registered: Mar 2009
Posts: 15
Great! didn't notice that.. thks Cruzer.
2013-03-18 18:19
Slammer

Registered: Feb 2004
Posts: 416
Once you get more comfortable with the basic stuff, you can start using pseudocommands, which support both things at once.
.pseudocommand setBackground(color) {
	lda color
	sta $d021
}

:setBackground #color     // Use predetermined value (immediate mode)   
:setBackground color      // Use value from memory (absolute mode) 
Btw. The background color macro is just an example of how to create and use a macro. I guess you cant benefit much by using this particular macro..
2013-03-22 12:00
Carlos
Account closed

Registered: Mar 2009
Posts: 15
Interesting Slammer, i will try it.

Another question: User defined structures. Can the fields of the structure be of any size or each field is always a byte?

.struct foo {x , y) (i want x be a word and y a byte)
2013-03-22 17:02
Slammer

Registered: Feb 2004
Posts: 416
The struct directive is just a collection of fields with no particular type. The fields can be anything: Numbers, lists, strings, etc. For example:
  .stuct MyStruct {a, b}

  .var myVar = MyStruct(27, "Hello World")
  .byte myVar.a    // is the same as .byte 27
  .print myVar.b   // is the same as .print "Hello world"

In the above example only the '.byte myVar.a' directive will produce output to the assembled .prg file. It will be a byte because a .byte directive is used, but if you had written .word myVar.a it would have been a word.

hope it helped..
2013-03-22 17:04
chatGPZ

Registered: Dec 2001
Posts: 11116
mmmmh. whats the difference between a struct and a namespace then? *shrug*
2013-03-22 20:32
Pantaloon

Registered: Aug 2003
Posts: 124
groepaz, you dont know the difference between namespace & structs ? i hope you are trolling :)
Previous - 1 | ... | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ... | 61 - 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
MAT64
cba
ΛΛdZ
Scrapper
St0rmfr0nt/Quantum
icon/The Silents, Sp..
Guests online: 101
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 Memento Mori  (9.6)
10 Bromance  (9.5)
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 TRSAC, Gabber & Pebe..  (9.5)
6 Rainbow Connection  (9.5)
7 Wafer Demo  (9.5)
8 Dawnfall V1.1  (9.5)
9 Quadrants  (9.5)
10 Daah, Those Acid Pil..  (9.5)
Top Groups
1 Nostalgia  (9.3)
2 Oxyron  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top Swappers
1 Derbyshire Ram  (10)
2 Jerry  (9.8)
3 Violator  (9.8)
4 Acidchild  (9.7)
5 Starlight  (9.6)

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