On Wed, 2004-06-09 at 21:48, Shawn Jefferson wrote: > I don't know if this would be a bug or not, but if I > have the following code: > > #define disable_irq(n) \ > asm("lda #$80"); \ > asm("trb $fd01+"#n"*4") It isn't a bug: this is the way C works and hasn't got anything to do with the fact that the macro contains in-line assembler. The macro will be expanded and the resulting code will look like this: if(JOYSTICK == BUTTON) asm("lda #$80"); asm("trb $fd01+"#n"*4"); Note that the last asm() statement will be executed regardless of the value of JOYSTICK. Define the macro like this instead: #define disable_irq(n) do { \ asm("lda #$80"); \ asm("trb $fd01 + "#n"*4"); \ } while(0) Then the macro will behave just like a one-line C statement and the if() statement will work. The do{}while(0) code will be optimized away so it will not produce any larger code. Regards, /adam -- Adam Dunkels <adam@sics.se> http://www.sics.se/~adam/ ---------------------------------------------------------------------- To unsubscribe from the list send mail to majordomo@musoftware.de with the string "unsubscribe cc65" in the body(!) of the mail.Received on Wed Jun 9 23:29:11 2004
This archive was generated by hypermail 2.1.8 : 2004-06-09 23:29:19 CEST