]> git.sur5r.net Git - cc65/commitdiff
Added some 65C02 code.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Nov 2000 22:59:03 +0000 (22:59 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Nov 2000 22:59:03 +0000 (22:59 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@484 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/runtime/add.s
libsrc/runtime/and.s
libsrc/runtime/condes.s
libsrc/runtime/incax1.s
libsrc/runtime/ldau0sp.s
libsrc/runtime/linc.s
libsrc/runtime/pushax.s
libsrc/runtime/pushb.s
libsrc/runtime/staxspp.s
libsrc/runtime/tosint.s
libsrc/runtime/toslong.s

index 49c7eca96f796655e4ec8774c2273f01824b3e0d..b22e16ecc72b2f517d84473fa38d632e2a455cef 100644 (file)
 tosadda0:
        ldx     #0
 tosaddax:
-       ldy     #0
-       clc
-       adc     (sp),y          ; lo byte
+       clc
+.ifpc02
+       adc     (sp)            ; 65C02 version - saves 2 cycles
+       ldy     #1
+.else
+       ldy     #0
+       adc     (sp),y          ; lo byte
+       iny
+.endif
                pha                     ; save it
-       txa
-       iny
-       adc     (sp),y          ; hi byte
+       txa
+       adc     (sp),y          ; hi byte
        tax
        clc
        lda     sp
index cf1d10ead8004e3f4aebaabba98a8453380989d8..2b52c552ca9871577af5c990525461f96acead54 100644 (file)
 tosanda0:
        ldx     #$00
 tosandax:
-       ldy     #0
+.ifpc02
+       and     (sp)            ; 65C02 version, saves 2 cycles and 1 byte
+       ldy     #1
+.else
+       ldy     #0
                and     (sp),y
-       sta     ptr4
-       iny
-       txa
-       and     (sp),y
+       iny
+.endif
+               pha
+       txa
+       and     (sp),y
        tax
-       lda     ptr4
+       pla
        jmp     addysp1         ; drop TOS, set condition codes
 
index 51130f4041e7b0df65df66566ef656b94f2b1167..36940530c37fbaf154ed9756a0d38144d2b6e020 100644 (file)
@@ -11,6 +11,7 @@
 ; libinit and libdone call condes with the predefined module constructor and
 ; destructor tables, they must be called from the platform specific startup
 ; code.
+
 ;
 ; The function does also export jmpvec as general purpose jump vector that
 ; lies in the data segment so it's address may be patched at runtime.
@@ -73,7 +74,11 @@ loop:        ldy     index
        sta     jmpvec+1
        sty     index
        jsr     jmpvec
-       jmp     loop
+.ifpc02
+       bra     loop
+.else
+       jmp     loop
+.endif
 
 done:  rts
 
index c86cfb96b5c6cab99335539e2728243a482d21e5..8b8b1079aadb322ee3b964ebbdce87ba325d8f04 100644 (file)
 
 .proc  incax1
 
-       add     #1
-       bcc     @L9
+.ifpc02
+       ina                     ; 65C02 version
+       bne     @L9
+.else
+       add     #1
+       bcc     @L9
+.endif
        inx
 @L9:   rts
 
index e967f7a822b0a46597504777a74aed4b23f78355..ff91261c245c3d1abc57398b88b713481c1edb96 100644 (file)
@@ -16,6 +16,10 @@ ldau0ysp:
        lda     (sp),y
        sta     ptr1
        ldx     #0
-       lda     (ptr1,x)
+.ifpc02
+       lda     (ptr1)          ; Save one cycle for the C02
+.else
+       lda     (ptr1,x)
+.endif
        rts
 
index 1922a07097b44b090078a0a3c94d6a8d6f0759f9..aff3758ee7d9fe3584bbe54b1aa3ae5fdc653193 100644 (file)
@@ -7,16 +7,18 @@
                .export         inceaxy
        .importzp       ptr4, sreg
 
-inceaxy:
+.proc  inceaxy
+
                sty     ptr4
                clc
                adc     ptr4
-               bcc     inceax9
+               bcc     @L9
                inx
-               bne     inceax9
+               bne     @L9
                inc     sreg
-               bne     inceax9
+               bne     @L9
                inc     sreg+1
-inceax9:
-               rts
+@L9:   rts
+
+.endproc
 
index 077c52ca8c4e1f933287795c1a12a827e1c97fd1..24029fe6b21be45e5b914ec5ba0a069772956dd8 100644 (file)
@@ -21,11 +21,16 @@ pushax:     ldy     sp
                beq     @L2
                dey
 @L0:   sty     sp
-       ldy     #0              ; get index
-       sta     (sp),y          ; store lo byte
-       pha                     ; save it
-       txa                     ; get hi byte
-       iny                     ; bump idx
+.ifpc02
+       sta     (sp)            ; 65C02 version - saves 2 cycles and one byte
+       ldy     #1              ; get hi index
+.else
+       ldy     #0              ; get index
+       sta     (sp),y          ; store lo byte
+       iny                     ; bump idx
+.endif
+       pha                     ; save it
+       txa                     ; get hi byte
        sta     (sp),y          ; store hi byte
        pla                     ; get A back
        rts                     ; done
@@ -33,6 +38,10 @@ pushax:      ldy     sp
 @L1:   dey
 @L2:   dey
        dec     sp+1
+.ifpc02
+       bra     @L0
+.else
        jmp     @L0
+.endif
+
 
-                   
index a0b37faa21f917d94b91873a15e2242b1b35be3f..e5a44c777c37e05102c47d3f136501e4d20ffd13 100644 (file)
@@ -6,7 +6,7 @@
 
                .export         pushb, pushbidx
        .import         pushax
-       .importzp       ptr1                          
+       .importzp       ptr1
 
 pushbidx:
        sty     ptr1
@@ -17,7 +17,11 @@ pushbidx:
 pushb: sta     ptr1
        stx     ptr1+1
        ldx     #0              ; Load index/high byte
-       lda     (ptr1,x)
+.ifpc02
+       lda     (ptr1)          ; Save one cycle for the C02
+.else
+       lda     (ptr1,x)
+.endif
        bpl     L1
        dex                     ; Make high byte FF
 L1:    jmp     pushax
index 35926fd76c491aa545ffe89c9f4975280b269c57..26f19f7be9a61be475bf09863b251bc92f0273fc 100644 (file)
@@ -1,4 +1,4 @@
-;      
+;
 ; Ullrich von Bassewitz, 25.10.2000
 ;
 ; CC65 runtime: Store a/x indirect into address at top of stack
 
 .proc  staxspp
 
-       ldy     #0
+.ifpc02
        pha
-       lda     (sp),y
-       sta     ptr1
-       iny
-       lda     (sp),y
-       sta     ptr1+1
-       txa
-       sta     (ptr1),y
-       pla
-       dey
-       sta     (ptr1),y
+       lda     (sp)
+       sta     ptr1
+       ldy     #1
+       lda     (sp),y
+       sta     ptr1+1
+       txa
+       sta     (ptr1),y
+       pla
+       sta     (ptr1)
+.else
+       pha
+       ldy     #0
+       lda     (sp),y
+       sta     ptr1
+       iny
+       lda     (sp),y
+       sta     ptr1+1
+       txa
+       sta     (ptr1),y
+       pla
+       dey
+       sta     (ptr1),y
+.endif
        jmp     incsp2          ; Drop address
 
 .endproc
index aab0dded3ddf856363ff9884bd93b94c7ab84daa..7bbab986e57334861229fce05eb0421900724197 100644 (file)
 
 ; Convert TOS from long to int by cutting of the high 16bit
 
-tosint:        pha
-       ldy     #0
-       lda     (sp),y          ; sp+1
-       ldy     #2
-       sta     (sp),y
-       ldy     #1
-       lda     (sp),y
-       ldy     #3
-       sta     (sp),y
+.proc  tosint
+
+       pha
+.ifpc02
+       lda     (sp)
+.else
+       ldy     #0
+       lda     (sp),y          ; sp+1
+.endif
+       ldy     #2
+       sta     (sp),y
+       dey
+       lda     (sp),y
+       ldy     #3
+       sta     (sp),y
        pla
                jmp     incsp2          ; Drop 16 bit
 
+.endproc
index d14915fa5b9ddd2bcf055435309f377aded3aa26..f26cec121220b3ae3c4cf97a53a9088a994c4123 100644 (file)
 tosulong:
                pha
        jsr     decsp2          ; Make room
-       ldy     #2
-       lda     (sp),y
-       ldy     #0
+       ldy     #2
+       lda     (sp),y
+.ifpc02
+       sta     (sp)            ; 65C02 version
+       iny                     ; Y = 3
+.else
+       ldy     #0
                sta     (sp),y
-       ldy     #3
-       lda     (sp),y
-       ldy     #1
-       sta     (sp),y
-       lda     #0              ; Zero extend
+       ldy     #3
+.endif
+       lda     (sp),y
+       ldy     #1
+       sta     (sp),y
+       lda     #0              ; Zero extend
 toslong2:
-       iny
-       sta     (sp),y
-       iny
-       sta     (sp),y
-       pla
-       rts
+       iny
+       sta     (sp),y
+       iny
+       sta     (sp),y
+       pla
+       rts
 
 toslong:
                pha
-       jsr     decsp2          ; Make room
-       ldy     #2
-       lda     (sp),y
-       ldy     #0                 
+       jsr     decsp2          ; Make room
+       ldy     #2
+       lda     (sp),y
+.ifpc02
+       sta     (sp)            ; 65C02 version
+       iny                     ; Y = 3
+.else
+       ldy     #0
                sta     (sp),y
-       ldy     #3
-       lda     (sp),y
-       bmi     toslong1
-       ldy     #1
-       sta     (sp),y
-       lda     #$00            ; Positive, high word is zero
-       bne     toslong2
+       ldy     #3
+.endif
+       lda     (sp),y
+       bmi     toslong1
+       ldy     #1
+       sta     (sp),y
+       lda     #$00            ; Positive, high word is zero
+       bne     toslong2
 toslong1:
-       ldy     #1
-       sta     (sp),y
-       lda     #$FF
-       bne     toslong2
+       ldy     #1
+       sta     (sp),y
+       lda     #$FF
+       bne     toslong2