- if (val < 0x100) {
- AddCodeSegLine (CS, "ldx #$00");
- AddCodeSegLine (CS, "stx sreg+1");
- AddCodeSegLine (CS, "stx sreg");
- AddCodeSegLine (CS, "lda #$%02X", (unsigned char) val);
- } else if ((val & 0xFFFF00FF) == 0) {
- AddCodeSegLine (CS, "lda #$00");
- AddCodeSegLine (CS, "sta sreg+1");
- AddCodeSegLine (CS, "sta sreg");
- AddCodeSegLine (CS, "ldx #$%02X", (unsigned char) (val >> 8));
- } else if ((val & 0xFFFF0000) == 0 && CodeSizeFactor > 140) {
- AddCodeSegLine (CS, "lda #$00");
- AddCodeSegLine (CS, "sta sreg+1");
- AddCodeSegLine (CS, "sta sreg");
- AddCodeSegLine (CS, "lda #$%02X", (unsigned char) val);
- AddCodeSegLine (CS, "ldx #$%02X", (unsigned char) (val >> 8));
- } else if ((val & 0xFFFFFF00) == 0xFFFFFF00) {
- AddCodeSegLine (CS, "ldx #$FF");
- AddCodeSegLine (CS, "stx sreg+1");
- AddCodeSegLine (CS, "stx sreg");
- if ((val & 0xFF) == 0xFF) {
- AddCodeSegLine (CS, "txa");
- } else {
- AddCodeSegLine (CS, "lda #$%02X", (unsigned char) val);
- }
- } else if ((val & 0xFFFF00FF) == 0xFFFF00FF) {
- AddCodeSegLine (CS, "lda #$FF");
- AddCodeSegLine (CS, "sta sreg+1");
- AddCodeSegLine (CS, "sta sreg");
- AddCodeSegLine (CS, "ldx #$%02X", (unsigned char) (val >> 8));
- } else {
- /* Call a subroutine that will load following value */
- AddCodeSegLine (CS, "jsr ldeax");
- AddCodeSegLine (CS, ".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;