#define TXTBASE 0x0400 #define TXTWIDTH 32 #define TXTLINES 16 #define TXTSIZE TXTWIDTH*TXTLINES #define TXTEND TXTBASE+TXTSIZE static unsigned char *_getpos(unsigned char x, unsigned char y) { unsigned char *pos; #if 0 /* Ummm...why does this act like TXTBASE == 0? */ pos = TXTBASE + ((y / 2) * TXTWIDTH) + (x / 2); #else /* But this works? */ pos = TXTBASE; pos += ((y / 2) * TXTWIDTH); pos += (x / 2); #endif if (pos > TXTEND) return NULL; return pos; } --- non-working assembly (#if clause) --- ?0_getpos LEAS -2,S LDB 5,S CLRA TFR D,X LDB #2 CLRA JSR ?div TFR D,X LDB #32 CLRA JSR ?mul ADDB #1024 ADCA #0 PSHS A,B LDB 9,S CLRA TFR D,X LDB #2 CLRA JSR ?div ADDD ,S++ STD 0,S LDD 0,S TFR D,X LDD #1536 JSR ?ugt LBEQ ?8 LDD #0 JMP ?9 ?8 EQU * LDD 0,S ?9 EQU * LEAS 2,S RTS --- working assembly (#else clause) --- ?0_getpos LEAS -2,S LDD #1024 STD 0,S LDB 5,S CLRA TFR D,X LDB #2 CLRA JSR ?div TFR D,X LDB #32 CLRA JSR ?mul ADDD 0,S STD 0,S LDB 7,S CLRA TFR D,X LDB #2 CLRA JSR ?div ADDD 0,S STD 0,S LDD 0,S TFR D,X LDD #1536 JSR ?ugt LBEQ ?8 LDD #0 JMP ?9 ?8 EQU * LDD 0,S ?9 EQU * LEAS 2,S RTS