]> git.sur5r.net Git - cc65/commitdiff
few 6502 and some 65SC02 optimizations
authorIrgendwerA8 <c.krueger.b@web.de>
Sun, 12 Mar 2017 22:21:43 +0000 (23:21 +0100)
committerIrgendwerA8 <c.krueger.b@web.de>
Sun, 12 Mar 2017 22:21:43 +0000 (23:21 +0100)
23 files changed:
libsrc/runtime/add.s
libsrc/runtime/along.s
libsrc/runtime/laddeq.s
libsrc/runtime/land.s
libsrc/runtime/leave.s
libsrc/runtime/lmod.s
libsrc/runtime/lmul.s
libsrc/runtime/lor.s
libsrc/runtime/lpop.s
libsrc/runtime/lpush.s
libsrc/runtime/lrsub.s
libsrc/runtime/lsave.s
libsrc/runtime/lsub.s
libsrc/runtime/lsubeq.s
libsrc/runtime/ludiv.s
libsrc/runtime/lumod.s
libsrc/runtime/lxor.s
libsrc/runtime/makebool.s
libsrc/runtime/or.s
libsrc/runtime/rsub.s
libsrc/runtime/staxspi.s
libsrc/runtime/swap.s
libsrc/runtime/xor.s

index 6fb2dacf7ee48b70d49453e410476ac63a0b61f1..e644671c0eb23a8acf93f44b508ede46141243eb 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, spend two bytes for one cycle, improved 65SC02 optimization
 ;
 ; CC65 runtime: add ints
 ;
@@ -8,32 +9,46 @@
 ; called a lot!
 
         .export         tosadda0, tosaddax
-        .importzp       sp
+        .importzp       sp, tmp1
 
         .macpack        cpu
 
 tosadda0:
         ldx     #0
 tosaddax:
-        clc
-.if (.cpu .bitand CPU_ISET_65SC02)
-        adc     (sp)            ; 65SC02 version - saves 2 cycles
-        ldy     #1
-.else
-        ldy     #0
-        adc     (sp),y          ; lo byte
-        iny
-.endif
-        pha                     ; save it
-        txa
-        adc     (sp),y          ; hi byte
-        tax
-        clc
-        lda     sp
-        adc     #2
-        sta     sp
-        bcc     L1
-        inc     sp+1
-L1:     pla                     ; Restore low byte
-        rts
+        clc                     ; (2)
+
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+
+        adc     (sp)            ; (7)
+        tay                     ; (9)
+        inc     sp              ; (14)
+        bne     hiadd           ; (17)
+        inc     sp+1            ; (-1+5)
+hiadd:  txa                     ; (19)
+        adc     (sp)            ; (24)
+        tax                     ; (26)
+        inc     sp              ; (31)
+        bne     done            ; (34)
+        inc     sp+1            ; (-1+5)
+done:   tya                     ; (36)
 
+.else        
+
+        ldy     #0              ; (4)
+        adc     (sp),y          ; (9) lo byte
+        iny                     ; (11)
+        sta     tmp1            ; (14) save it
+        txa                     ; (16) 
+        adc     (sp),y          ; (21) hi byte
+        tax                     ; (23)
+        clc                     ; (25)
+        lda     sp              ; (28)
+        adc     #2              ; (30)
+        sta     sp              ; (33)
+        bcc     L1              ; (36)
+        inc     sp+1            ; (-1+5)
+L1:     lda     tmp1            ; (39) restore low byte
+
+.endif
+        rts                     ; (6502: 45 cycles, 26 bytes <-> 65SC02: 42 cycles, 22 bytes )
index 661b3124a871f807dd85caac0f5120f041d53efa..25eb78c45d007341fc598c34accecadb2faa5187 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 23.11.2002
+; Christian Krueger, 11-Mar-2017, saved 5 bytes
 ;
 ; CC65 runtime: Convert char in ax into a long
 ;
 
 ; Convert A from char to long in EAX
 
-aulong: ldx     #0
-        stx     sreg
-        stx     sreg+1
-        rts
+along:  ldx     #$ff
+        cmp     #$80            ; Positive?
+        bcs     store           ; no, apply $FF
 
-along:  cmp     #$80            ; Positive?
-        bcc     aulong          ; Yes, handle like unsigned type
-        ldx     #$ff
-        stx     sreg
+aulong: ldx     #0
+store:  stx     sreg
         stx     sreg+1
         rts
-
-
+        
\ No newline at end of file
index 2632ec90940ea932742401718d0f3139fc99ce0f..57bec0629827c1b6b89bc62d2926cd0768ce679d 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 07.04.2000
+; Christian Krueger, 12-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: += operator
 ;
@@ -10,6 +11,7 @@
         .export         laddeq1, laddeqa, laddeq
         .importzp       sreg, ptr1, tmp1
 
+        .macpack        cpu
 
 laddeq1:
         lda     #$01
@@ -20,14 +22,20 @@ laddeqa:
         stx     sreg+1
 
 laddeq: sty     ptr1+1                  ; Store high byte of address
-        ldy     #$00                    ; Address low byte
         clc
 
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        adc     (ptr1)
+        sta     (ptr1)
+        ldy     #$01                    ; Address byte 1
+.else
+        ldy     #$00                    ; Address low byte
         adc     (ptr1),y
         sta     (ptr1),y
+        iny                             ; Address byte 1
+.endif
         pha                             ; Save byte 0 of result for later
 
-        iny                             ; Address byte 1
         txa
         adc     (ptr1),y                ; Load byte 1
         sta     (ptr1),y
index 506c071a4f18e98db034054b5763675accf73614..6ea4e5bcb29fda011f072ace64778ac03b0b90bb 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: and on longs
 ;
@@ -8,17 +9,28 @@
         .import         addysp1
         .importzp       sp, sreg, tmp1
 
+        .macpack        cpu
                                    
 tosand0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif  
 
 tosandeax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        and     (sp)            ; byte 0
+        ldy     #1
+.else
         ldy     #0
         and     (sp),y          ; byte 0
-        sta     tmp1
         iny
+.endif        
+        sta     tmp1
         txa
         and     (sp),y          ; byte 1
         tax
index 8f4e055f563a5b301b4d9ca05fd993581bc1c97a..4a9ff799493d70c1e37ca722ee7fbd679e60190c 100644 (file)
@@ -1,5 +1,6 @@
 ;  
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: function epilogue
 ;
@@ -13,6 +14,8 @@
         .import         addysp
         .importzp       sp
 
+        .macpack        cpu
+
 leave00:
         lda     #0
 leave0: ldx     #0
@@ -24,6 +27,20 @@ leavey0:
         ldx     #0              ; return < 256
 leavey:
         jsr     addysp          ; drop stack frame
+
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+
+leave:  tay                     ; save A a sec
+        lda     (sp)            ; that's the pushed arg size
+        sec                     ; Count the byte, the count's stored in
+        adc     sp
+        sta     sp
+        bcc     L1
+        inc     sp+1
+L1:     tya                     ; Get return value back
+
+.else
+
 leave:  pha                     ; save A a sec
         ldy     #0
         lda     (sp),y          ; that's the pushed arg size
@@ -33,5 +50,7 @@ leave:  pha                     ; save A a sec
         bcc     L1
         inc     sp+1
 L1:     pla                     ; Get return value back
+
+.endif
         rts
 
index 74deb23f08343920c2de9cb1c15f208ccd591cb8..caeb0c4f64b856d9b9a1b29cbe9f3821a526dbe0 100644 (file)
@@ -1,6 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 07.08.1998
-;
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ; CC65 runtime: modulo operation for long signed ints
 ;
 
         .import         poplsargs, udiv32, negeax
         .importzp       sreg, ptr1, ptr2, tmp1, tmp3, tmp4
 
+        .macpack        cpu
+
 tosmod0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 
 tosmodeax:                         
         jsr     poplsargs       ; Get arguments from stack, adjust sign
index 7ad2b2aa4266f39eb2df17241656f2c457685b16..860d58cba4b2161d92c2b24828a684676ddf01f1 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 13.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: multiplication for long (unsigned) ints
 ;
@@ -8,20 +9,32 @@
         .import         addysp1
         .importzp       sp, sreg, tmp1, tmp2, tmp3, tmp4, ptr1, ptr3, ptr4
 
+        .macpack        cpu
+
 tosmul0ax:
 tosumul0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00    
         sty     sreg
         sty     sreg+1
+.endif        
 
 tosmuleax:
 tosumuleax:
 mul32:  sta     ptr1
         stx     ptr1+1          ; op2 now in ptr1/sreg
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        lda     (sp)
+        ldy     #1
+.else        
         ldy     #0
         lda     (sp),y
-        sta     ptr3
         iny
+.endif
+        sta     ptr3
         lda     (sp),y
         sta     ptr3+1
         iny
index a74b3305950acb1b55d3e55e06dc3af98baeedaa..94ab3c890178beb24efe2ba6f564a9da0d4a94bc 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: or on longs
 ;
@@ -8,17 +9,28 @@
         .import         addysp1
         .importzp       sp, sreg, tmp1
                                   
+        .macpack        cpu
 
 tosor0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
-        sty     sreg+1 
+        sty     sreg+1
+.endif  
 
 tosoreax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        ora     (sp)
+        ldy     #1
+.else
         ldy     #0
         ora     (sp),y          ; byte 0
-        sta     tmp1
         iny
+.endif        
+        sta     tmp1
         txa
         ora     (sp),y          ; byte 1
         tax
index 7d281db52e1b581c240ba0d13e52f4812a1146c9..ffff5ffc10f8fe6802ba93d2d2c12c7ef6937458 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 29.12.1999
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: long pop
 ;
@@ -8,6 +9,7 @@
         .import         incsp4
         .importzp       sp, sreg
 
+        .macpack        cpu
 
 popeax: ldy     #3
         lda     (sp),y
@@ -18,8 +20,12 @@ popeax: ldy     #3
         dey
         lda     (sp),y
         tax
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        lda     (sp)
+.else        
         dey
         lda     (sp),y
+.endif
         jmp     incsp4
 
 
index 074b4320aee1a5bbeee5924e9eef25043c207584..4fed77f05bf590047b15ee27c71231c1e67d6b7a 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: long push
 ;
         .import         decsp4
         .importzp       sp, sreg
 
+        .macpack        cpu
+
 pushl0:
         lda     #0
         tax
 push0ax:
-        ldy     #0
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
+        ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 pusheax:
         pha                     ; decsp will destroy A (but not X)
         jsr     decsp4
@@ -30,8 +38,12 @@ pusheax:
         dey
         txa
         sta     (sp),y
-        dey
         pla
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        sta     (sp)
+.else        
+        dey
         sta     (sp),y
+.endif        
         rts
 
index fd519ca4f742f7cdd61b8312ffec6d69ef9a5dc8..928164f4061c3da0babbf1f32578f1f315d924aa 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: long sub reversed
 ;
         .import         addysp1
         .importzp       sp, sreg, tmp1
 
+        .macpack        cpu
+
 tosrsub0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 
-tosrsubeax:                         
-        ldy     #0
+tosrsubeax:
         sec
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        sbc     (sp)
+        ldy     #1
+.else                         
+        ldy     #0
         sbc     (sp),y          ; byte 0
+        iny
+.endif
         sta     tmp1            ; use as temp storage
         txa
-        iny
         sbc     (sp),y          ; byte 1
         tax
         iny
index fa21e463ec0ee3805081583248dd5eb7a255d8fe..82703073ac74eee1eb948137c41e24b081b1d7f4 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 08.08.1998
+; Christian Krueger, 11-Mar-2017, optimization
 ;
 ; CC65 runtime: save ax into temp storage/restore ax from temp storage
 ;
 saveeax:
         sta     regsave
         stx     regsave+1
-        lda     sreg
-        sta     regsave+2
-        lda     sreg+1
-        sta     regsave+3
-        lda     regsave
+        ldy     sreg
+        sty     regsave+2
+        ldy     sreg+1
+        sty     regsave+3
         rts
 
 resteax:
index 926d52e510f0babfe9695025e303524c75853c5b..6f80491cacaa491d3daa68adc4978d20e19bd74c 100644 (file)
@@ -1,6 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
-;
+; Christian Krueger, 11-Mar-2017, ímproved  65SC02 optimization
 ; CC65 runtime: long sub
 ;
 
         .macpack        cpu
 
 tossub0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif  
 
 tossubeax:
         sec
         eor     #$FF
-.if (.cpu .bitand CPU_ISET_65SC02)
+.if (.cpu .bitand ::CPU_ISET_65SC02)
         adc     (sp)            ; 65SC02 version - saves 2 cycles
         ldy     #1
 .else
index 9f5853d29f4e66be62627dbfc401823ee02194eb..5e3d25783375329749b6c6d415600b750398a4d0 100644 (file)
@@ -1,5 +1,6 @@
 ;                                 
 ; Ullrich von Bassewitz, 07.04.2000
+; Christian Krueger, 12-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: -= operator
 ;
@@ -10,6 +11,7 @@
         .export         lsubeq1, lsubeqa, lsubeq
         .importzp       sreg, ptr1
 
+        .macpack        cpu
 
 lsubeq1:
         lda     #$01
@@ -20,15 +22,20 @@ lsubeqa:
         stx     sreg+1
 
 lsubeq: sty     ptr1+1                  ; Store high byte of address
-        ldy     #$00                    ; Address low byte
+    
         sec
-
         eor     #$FF
+ .if (.cpu .bitand ::CPU_ISET_65SC02)
+        adc     (ptr1)                  ; Subtract byte 0
+        sta     (ptr1)
+        ldy     #$01                    ; Address byte 1               
+ .else
+        ldy     #$00                    ; Address low byte
         adc     (ptr1),y                ; Subtract byte 0
         sta     (ptr1),y
+        iny                             ; Address byte 1       
+ .endif  
         pha                             ; Save byte 0 of result for later
-
-        iny                             ; Address byte 1
         txa
         eor     #$FF
         adc     (ptr1),y                ; Subtract byte 1
index 149c98a7875e62ce790da91deee6df3389381c09..54af4780e4407b74bf0e464fe366dfc1e1a4e06c 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 17.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: division for long unsigned ints
 ;
@@ -8,10 +9,17 @@
         .import         addysp1
         .importzp       sp, sreg, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
 
+        .macpack        cpu
+
 tosudiv0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 
 tosudiveax:                         
         jsr     getlop          ; Get the paramameters
@@ -30,10 +38,15 @@ getlop: sta     ptr3            ; Put right operand in place
         lda     sreg+1
         sta     ptr4+1
 
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        lda     (sp)
+        ldy     #1
+.else
         ldy     #0              ; Put left operand in place
         lda     (sp),y
-        sta     ptr1
         iny
+.endif
+        sta     ptr1
         lda     (sp),y
         sta     ptr1+1
         iny
index e290e11677e9a0a2e9a2e862a773ad59d93e11bb..241801a90bf15d51a53f0f13340ced5ccd947ee5 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 27.09.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: modulo operation for long unsigned ints
 ;
@@ -8,10 +9,17 @@
         .import         getlop, udiv32
         .importzp       sreg, tmp3, tmp4, ptr2
 
+        .macpack        cpu
+
 tosumod0ax:                          
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 
 tosumodeax:
         jsr     getlop          ; Get the paramameters
index ce21ef35bd7dfcfdbcb3091e1755442f17c91743..4ec9a41297db8343fe45fefbc120742d895f3570 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: xor on longs
 ;
@@ -8,16 +9,28 @@
         .import         addysp1
         .importzp       sp, sreg, tmp1
 
+        .macpack        cpu
+
 tosxor0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif
 
-tosxoreax:                         
+tosxoreax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        eor     (sp)            ; byte 0
+        ldy     #1
+.else                         
         ldy     #0
         eor     (sp),y          ; byte 0
-        sta     tmp1
         iny
+.endif
+        sta     tmp1
         txa
         eor     (sp),y          ; byte 1
         tax
index a15b24b9335dee4acc1a1aedc5de7ba1c440e38f..643f418aa6cbc03fd39e28b160c802d6a58ca5e9 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.10.1998
+; Christian Krueger, 11-Mar-2017, optimization
 ;
 ; CC65 runtime: Make boolean according to flags
 ;
 
 
 boolne: bne     ret1
-        ldx     #$00
+ret0:   ldx     #$00
         txa
         rts
 
 
-booleq: beq     ret1
-        ldx     #$00
-        txa
+booleq: bne     ret0
+ret1:   ldx     #$00
+        lda     #$01
         rts
 
 
@@ -44,17 +45,9 @@ boolult:
 
 
 boolugt:
-        beq     L1
+        beq     ret0
 booluge:
-        bcs     ret1
-L1:     ldx     #$00
+        ldx     #$00
         txa
+        rol     a
         rts
-
-
-ret1:   ldx     #$00
-        lda     #$01
-        rts
-
-
-
index 8570c0cd7adb378da9cfcc301c83b717b8739632..1c2c4125e61acc3dbcd1784e334c2c18e635a3ae 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: or on ints
 ;
@@ -8,13 +9,20 @@
         .import         addysp1
         .importzp       sp, tmp1
 
+        .macpack        cpu
+
 tosora0:
         ldx     #$00
 tosorax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        ora     (sp)
+        ldy     #1
+.else
         ldy     #0
         ora     (sp),y
-        sta     tmp1
         iny
+.endif        
+        sta     tmp1
         txa
         ora     (sp),y
         tax
index 475a69e767e0f196ba4d8dc6fe3aeb47e29b9286..69ee6da2232323dec26bc5edb61ba142ebcfb437 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: sub ints reversed
 ;
@@ -8,6 +9,8 @@
         .import         addysp1
         .importzp       sp, tmp1
 
+        .macpack        cpu
+
 ;
 ; AX = AX - TOS
 ;
 tosrsuba0:
         ldx     #0
 tosrsubax:
-        ldy     #0
         sec
+.if (.cpu .bitand CPU_ISET_65SC02)
+        sbc     (sp)
+        ldy     #1
+.else
+        ldy     #0
         sbc     (sp),y          ; lo byte
+        iny
+.endif
         sta     tmp1            ; save lo byte
         txa
-        iny
         sbc     (sp),y          ; hi byte
         tax
         lda     tmp1
index 90738e0d2d44c67b2c8c8ca0616c0b56cd298272..3114f449c8955e9e9e3dfc108e212249a850ad98 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 26.10.2000
+; Christian Krueger, 12-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: Store a/x indirect into address at top of stack with index
 ;
@@ -8,6 +9,8 @@
         .import         incsp2
         .importzp       sp, tmp1, ptr1
 
+        .macpack        cpu
+
 .proc   staxspidx
 
         sty     tmp1            ; Save Y
         ldy     #1
         lda     (sp),y
         sta     ptr1+1
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        lda     (sp)
+.else
         dey
         lda     (sp),y
+.endif
         sta     ptr1            ; Address now in ptr1
         ldy     tmp1            ; Restore Y
         iny                     ; Address high byte
index e91eeca31dd2aaf11a5a4928a901bd995f66d5a8..d4a74df5ff2f52b5bba790f309dc2bb0819a9dab 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: swap ax with TOS
 ;
@@ -7,6 +8,8 @@
         .export         swapstk
         .importzp       sp, ptr4
 
+        .macpack        cpu
+
 swapstk:
         sta     ptr4
         stx     ptr4+1
@@ -15,11 +18,18 @@ swapstk:
         tax
         lda     ptr4+1
         sta     (sp),y
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        lda     (sp)
+        tay
+        lda     ptr4
+        sta     (sp)
+        tya    
+.else        
         dey
         lda     (sp),y
         pha
         lda     ptr4
         sta     (sp),y
         pla
+.endif        
         rts                     ; whew!
-
index 825c576d16d5356fba5599df881c3f9546b68aa9..e0392292694de9ea6c81aa3857920688c9cff164 100644 (file)
@@ -1,5 +1,6 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: xor on ints
 ;
@@ -8,13 +9,20 @@
         .import         addysp1
         .importzp       sp, tmp1
 
+        .macpack        cpu
+
 tosxora0:
         ldx     #$00
 tosxorax:
+.if (.cpu .bitand CPU_ISET_65SC02)
+        eor     (sp)
+        ldy     #1
+.else
         ldy     #0
         eor     (sp),y
-        sta     tmp1
         iny
+.endif
+        sta     tmp1
         txa
         eor     (sp),y
         tax