- if (val < 0x100) {
- AddCodeLine ("ldx #$00");
- AddCodeLine ("stx sreg+1");
- AddCodeLine ("stx sreg");
- AddCodeLine ("lda #$%02X", (unsigned char) val);
- } else if ((val & 0xFFFF00FF) == 0) {
- AddCodeLine ("lda #$00");
- AddCodeLine ("sta sreg+1");
- AddCodeLine ("sta sreg");
- AddCodeLine ("ldx #$%02X", (unsigned char) (val >> 8));
- } else if ((val & 0xFFFF0000) == 0 && CodeSizeFactor > 140) {
- AddCodeLine ("lda #$00");
- AddCodeLine ("sta sreg+1");
- AddCodeLine ("sta sreg");
- AddCodeLine ("lda #$%02X", (unsigned char) val);
- AddCodeLine ("ldx #$%02X", (unsigned char) (val >> 8));
- } else if ((val & 0xFFFFFF00) == 0xFFFFFF00) {
- AddCodeLine ("ldx #$FF");
- AddCodeLine ("stx sreg+1");
- AddCodeLine ("stx sreg");
- if ((val & 0xFF) == 0xFF) {
- AddCodeLine ("txa");
- } else {
- AddCodeLine ("lda #$%02X", (unsigned char) val);
- }
- } else if ((val & 0xFFFF00FF) == 0xFFFF00FF) {
- AddCodeLine ("lda #$FF");
- AddCodeLine ("sta sreg+1");
- AddCodeLine ("sta sreg");
- AddCodeLine ("ldx #$%02X", (unsigned char) (val >> 8));
- } else {
- /* Call a subroutine that will load following value */
- AddCodeLine ("jsr ldeax");
- AddCodeLine (".dword $%08lX", val & 0xFFFFFFFF);
- }
+ /* Split the value into 4 bytes */
+ B1 = (unsigned char) (Val >> 0);
+ B2 = (unsigned char) (Val >> 8);
+ B3 = (unsigned char) (Val >> 16);
+ B4 = (unsigned char) (Val >> 24);
+
+ /* Remember which bytes are done */
+ Done = 0;
+
+ /* Load the value */
+ AddCodeLine ("ldx #$%02X", B2);
+ Done |= 0x02;
+ if (B2 == B3) {
+ AddCodeLine ("stx sreg");
+ Done |= 0x04;
+ }
+ if (B2 == B4) {
+ AddCodeLine ("stx sreg+1");
+ Done |= 0x08;
+ }
+ if ((Done & 0x04) == 0 && B1 != B3) {
+ AddCodeLine ("lda #$%02X", B3);
+ AddCodeLine ("sta sreg");
+ Done |= 0x04;
+ }
+ if ((Done & 0x08) == 0 && B1 != B4) {
+ AddCodeLine ("lda #$%02X", B4);
+ AddCodeLine ("sta sreg+1");
+ Done |= 0x08;
+ }
+ AddCodeLine ("lda #$%02X", B1);
+ Done |= 0x01;
+ if ((Done & 0x04) == 0) {
+ CHECK (B1 == B3);
+ AddCodeLine ("sta sreg");
+ }
+ if ((Done & 0x08) == 0) {
+ CHECK (B1 == B4);
+ AddCodeLine ("sta sreg+1");
+ }