]> git.sur5r.net Git - cc65/blobdiff - libsrc/pce/cputc.s
Fixed bugs; and, improved the efficiency of some pce library functions.
[cc65] / libsrc / pce / cputc.s
index e2e345ac2c5aeb5c47eb048fed018fb1bcfd7a8f..04d901423b98023a43fdfdeacd2dcb16928a9051 100644 (file)
@@ -3,96 +3,80 @@
 ; void cputc (char c);
 ;
 
-                .export _cputcxy, _cputc, cputdirect, putchar
-                .export newline, plot
-                .import popa, _gotoxy
-                .import PLOT
+        .export         _cputcxy, _cputc, cputdirect, putchar
+        .export         newline, plot
+        .forceimport    initconio       ; force conio initiation
 
-                .importzp tmp3,tmp4
+        .import         gotoxy
+        .import         PLOT
+        .import         xsize
+        .importzp       tmp3, tmp4
+
+        .include        "pce.inc"
+        .include        "extzp.inc"
 
-                .include        "pce.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     #$0D            ; CR?
+        bne     L1
+        stz     CURS_X
+        bra     plot            ; Recalculate pointer
 
-L1:             cmp     #$0a            ; LF?
-                beq     newline         ; Recalculate pointers
+L1:     cmp     #$0A            ; LF?
+        beq     newline         ; Recalculate pointer
 
 ; Printable char of some sort
 
 cputdirect:
-                jsr     putchar         ; Write the character to the screen
+        jsr     putchar         ; Write the character to the screen
 
-; Advance cursor position
+; Move the cursor (rightwards) to the next position.
 
 advance:
-                ldy     CURS_X
-                iny
-                cpy     #xsize
-                bne     L3
-                jsr     newline         ; new line
-                ldy     #0              ; + cr
-L3:             sty     CURS_X
-                jmp     plot
-
-newline:
-                inc     CURS_Y
+        ldy     CURS_X
+        iny
+        cpy     xsize
+        bne     L3
+        inc     CURS_Y          ; new line
+        cly                     ; + CR
+L3:     sty     CURS_X
 
-; Set cursor position, calculate RAM pointers
-
-plot:           ldy     CURS_X
-                ldx     CURS_Y
-                clc
-                jmp     PLOT            ; Set the new cursor
+; Set cursor position; calculate VRAM pointer.
 
+plot:   ldy     CURS_X
+        ldx     CURS_Y
+        clc
+        jmp     PLOT            ; Set the new cursor
 
+newline:
+        inc     CURS_Y
+        bra     plot
 
-; Write one character to the screen without doing anything else, return X
-; position in Y
+; Write one character to the screen without doing anything else.
 
 putchar:
-
-                ora     RVS             ; Set revers bit
-
-                tax
-
-                st0     #VDC_MAWR       ; Memory Adress Write
-
-                lda     SCREEN_PTR
-                sta     a:VDC_DATA_LO
-
-                lda     SCREEN_PTR+1
-                sta     a:VDC_DATA_HI
-
-                st0     #VDC_VWR        ; VWR
-
-                txa
-                sta     a:VDC_DATA_LO   ; character
-
-                lda     CHARCOLOR
-
-                asl     a
-                asl     a
-                asl     a
-                asl     a
-
-                ora     #$02
-                sta     a:VDC_DATA_HI
-
-                rts
-
-;-------------------------------------------------------------------------------
-; force the init constructor to be imported
-
-                .import initconio
-conio_init = initconio
+        ora     RVS             ; Set reverse bit
+
+        st0     #VDC_MAWR       ; Memory-Address Write
+        ldy     SCREEN_PTR
+        ldx     SCREEN_PTR+1
+        sty     VDC_DATA_LO
+        stx     VDC_DATA_HI
+
+        st0     #VDC_VWR
+        sta     VDC_DATA_LO     ; character
+
+        lda     CHARCOLOR       ; pallette number
+        asl     a
+        asl     a
+        asl     a
+        asl     a
+        ora     #>$0200         ; high nybble of char. index
+        sta     VDC_DATA_HI
+
+        rts