]> git.sur5r.net Git - cc65/blobdiff - libsrc/c64/cputc.s
Merge pull request #740 from laubzega/master
[cc65] / libsrc / c64 / cputc.s
index bb7384a6a1a6bf0dc7b844edcd93d3dcdeb8a4a3..d6b49607aa650912a1041063de81906d7762872a 100644 (file)
@@ -1,95 +1,94 @@
 ;
-; Ullrich von Bassewitz, 06.08.1998
+; Ullrich von Bassewitz, 1998-08-06, 2009-09-26
 ;
-; void cputcxy (unsigned char x, unsigned char y, char c);
-; void cputc (char c);
+; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
+; void __fastcall__ cputc (char c);
 ;
 
-       .export         _cputcxy, _cputc, cputdirect, putchar
-       .export         advance, newline, plot
-       .import         popa, _gotoxy
-       .import         xsize, revers
+        .export         _cputcxy, _cputc, cputdirect, putchar
+        .export         newline, plot
+        .import         gotoxy
+        .import         PLOT
+
+        .include        "c64.inc"
 
-       .include        "c64.inc"
-       .include        "../cbm/cbm.inc"
 
 _cputcxy:
-       pha                     ; Save C
-       jsr     popa            ; Get Y
-       jsr     _gotoxy         ; Set cursor, drop x
-       pla                     ; Restore C
+        pha                     ; Save C
+        jsr     gotoxy          ; Set cursor, drop x and y
+        pla                     ; Restore C
 
 ; Plot a character - also used as internal function
 
-_cputc: cmp    #$0D            ; CR?
-       bne     L1
-       lda     #0
-       sta     CURS_X
-               beq     plot            ; Recalculate pointers
+_cputc: cmp     #$0A            ; CR?
+        bne     L1
+        lda     #0
+        sta     CURS_X
+        beq     plot            ; Recalculate pointers
 
-L1:    cmp     #$0A            ; LF?
-               bne     L2
-       ldy     CURS_Y
-       iny
-       bne     newline         ; Recalculate pointers
+L1:     cmp     #$0D            ; LF?
+        beq     newline         ; Recalculate pointers
 
 ; Printable char of some sort
 
-L2:            cmp     #' '
-       bcc     cputdirect      ; Other control char
-       tay
-       bmi     L10
-       cmp     #$60
-       bcc     L3
-       and     #$DF
-       bne     cputdirect      ; Branch always
-L3:    and     #$3F
+        cmp     #' '
+        bcc     cputdirect      ; Other control char
+        tay
+        bmi     L10
+        cmp     #$60
+        bcc     L2
+        and     #$DF
+        bne     cputdirect      ; Branch always
+L2:     and     #$3F
 
 cputdirect:
-       jsr     putchar         ; Write the character to the screen
+        jsr     putchar         ; Write the character to the screen
 
 ; Advance cursor position
 
 advance:
-       iny
-       cpy     xsize
-       bne     L9
-       ldy     #0              ; new line
+        iny
+        cpy     #XSIZE
+        bne     L3
+        jsr     newline         ; new line
+        ldy     #0              ; + cr
+L3:     sty     CURS_X
+        rts
+
 newline:
-       clc
-       lda     xsize
-       adc     SCREEN_PTR
-       sta     SCREEN_PTR
-       bcc     L4
-       inc     SCREEN_PTR+1
-L4:    clc
-       lda     xsize
-       adc     CRAM_PTR
-       sta     CRAM_PTR
-       bcc     L5
-       inc     CRAM_PTR+1
-L5:    inc     CURS_Y
-L9:            sty     CURS_X
-       rts
+        clc
+        lda     #XSIZE
+        adc     SCREEN_PTR
+        sta     SCREEN_PTR
+        bcc     L4
+        inc     SCREEN_PTR+1
+        clc
+L4:     lda     #XSIZE
+        adc     CRAM_PTR
+        sta     CRAM_PTR
+        bcc     L5
+        inc     CRAM_PTR+1
+L5:     inc     CURS_Y
+        rts
 
 ; Handle character if high bit set
 
-L10:   and     #$7F
-               cmp     #$7E            ; PI?
-       bne     L11
-       lda     #$5E            ; Load screen code for PI
-       bne     cputdirect
-L11:   ora     #$40
-       bne     cputdirect
+L10:    and     #$7F
+        cmp     #$7E            ; PI?
+        bne     L11
+        lda     #$5E            ; Load screen code for PI
+        bne     cputdirect
+L11:    ora     #$40
+        bne     cputdirect
 
 
 
-; Set cursor position, calculate RAM pointers
+; Set cursor position, calculate RAM pointers.
 
-plot:  ldy     CURS_X
-       ldx     CURS_Y
-       clc
-       jmp     PLOT            ; Set the new cursor
+plot:   ldy     CURS_X
+        ldx     CURS_Y
+        clc
+        jmp     PLOT            ; Set the new cursor
 
 
 
@@ -97,9 +96,9 @@ plot: ldy     CURS_X
 ; position in Y
 
 putchar:
-       ora     revers          ; Set revers bit
-               ldy     CURS_X
-       sta     (SCREEN_PTR),y  ; Set char
-       lda     CHARCOLOR
-       sta     (CRAM_PTR),y    ; Set color
-       rts
+        ora     RVS             ; Set revers bit
+        ldy     CURS_X
+        sta     (SCREEN_PTR),y  ; Set char
+        lda     CHARCOLOR
+        sta     (CRAM_PTR),y    ; Set color
+        rts