]> git.sur5r.net Git - cc65/blobdiff - libsrc/cbm610/cputc.s
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / cbm610 / cputc.s
index aa94b8aa42e32867946d10553b7a83c9fdb88215..831ead6d63df864df7670ca10cd04c47b0e8e433 100644 (file)
@@ -5,53 +5,57 @@
 ; void cputc (char c);
 ;
 
-       .export         _cputcxy, _cputc, cputdirect, putchar
-       .export         newline, plot
-       .exportzp       CURS_X, CURS_Y
-       .import         _gotoxy
-       .import         popa
-       .import         xsize, revers
+        .export         _cputcxy, _cputc, cputdirect, putchar
+        .export         newline, plot
+        .destructor     setsyscursor
+
+        .import         _gotoxy
+        .import         popa
+        .import         PLOT
+
+        .import         ktmp: zp, crtc: zp, CURS_X: zp, CURS_Y: zp, RVS: zp
+        .import         CharPtr: zp
+
+        .include        "cbm610.inc"
 
-       .include        "cbm610.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     popa            ; Get Y
+        jsr     _gotoxy         ; Set cursor, drop x
+        pla                     ; Restore C
 
 ; Plot a character - also used as internal function
 
-_cputc: cmp            #$0A            ; 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     #$0D            ; LF?
-               beq     newline         ; Recalculate pointers
+L1:     cmp     #$0D            ; LF?
+        beq     newline         ; Recalculate pointers
 
 ; Printable char of some sort
 
-       cmp     #' '
-       bcc     cputdirect      ; Other control char
-       tay
-       bmi     L10
-       cmp     #$60
-       bcc     L2
-       and     #$DF
-       bne     cputdirect      ; Branch always
-L2:    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
+        cpy     #XSIZE
         bne     L3
         jsr     newline         ; new line
         ldy     #0              ; + cr
@@ -59,43 +63,104 @@ L3:     sty     CURS_X
         rts
 
 newline:
-       clc
-       lda     xsize
-       adc     CharPtr
-       sta     CharPtr
-       bcc     L4
-       inc     CharPtr+1
-L4:    inc     CURS_Y
-       rts
+        clc
+        lda     #XSIZE
+        adc     CharPtr
+        sta     CharPtr
+        bcc     L4
+        inc     CharPtr+1
+L4:     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      ; Branch always
-
-; Set cursor position, calculate RAM pointers
-
-plot:  ldy     CURS_X
-       ldx     CURS_Y
-       clc
-       jmp     PLOT
+L10:    and     #$7F
+        cmp     #$7E            ; PI?
+        bne     L11
+        lda     #$5E            ; Load screen code for PI
+        bne     cputdirect
+L11:    ora     #$40
+        bne     cputdirect      ; Branch always
 
 ; Write one character to the screen without doing anything else, return X
 ; position in Y
 
 putchar:
-       ldx     IndReg
-       ldy     #$0F
-       sty     IndReg
-       ora     revers          ; Set revers bit
-               ldy     CURS_X
-       sta     (CharPtr),y     ; Set char
-       stx     IndReg
-       rts
+        ldx     IndReg
+        ldy     #$0F
+        sty     IndReg
+        ora     RVS             ; Set revers bit
+        ldy     CURS_X
+        sta     (CharPtr),y     ; Set char
+        stx     IndReg
+        rts
+
+; Set cursor position, calculate RAM pointers
+
+plot:   ldx     CURS_Y
+        lda     LineLSBTab,x
+        sta     CharPtr
+        lda     LineMSBTab,x
+        sta     CharPtr+1
+
+        lda     IndReg
+        pha
+        lda     #$0F
+        sta     IndReg
+
+        ldy     #$00
+        clc
+        sei
+        sta     (crtc),y
+        lda     CharPtr
+        adc     CURS_X
+        iny
+        sta     (crtc),y
+        dey
+        lda     #$0E
+        sta     (crtc),y
+        iny
+        lda     (crtc),y
+        and     #$F8
+        sta     ktmp
+        lda     CharPtr+1
+        adc     #$00
+        and     #$07
+        ora     ktmp
+        sta     (crtc),y
+        cli
+
+        pla
+        sta     IndReg
+        rts
+
+; -------------------------------------------------------------------------
+; Cleanup routine that sets the kernal cursor position to ours
+
+.segment        "PAGE2"
+
+setsyscursor:
+        ldy     CURS_X
+        ldx     CURS_Y
+        clc
+        jmp     PLOT            ; Set the new cursor
+
+; -------------------------------------------------------------------------
+; Low bytes of the start address of the screen lines
+
+.rodata
+
+LineLSBTab:
+        .byte   $00,$50,$A0,$F0,$40,$90,$E0,$30
+        .byte   $80,$D0,$20,$70,$C0,$10,$60,$B0
+        .byte   $00,$50,$A0,$F0,$40,$90,$E0,$30
+        .byte   $80
+; -------------------------------------------------------------------------
+; High bytes of the start address of the screen lines
 
+LineMSBTab:
+        .byte   $D0,$D0,$D0,$D0,$D1,$D1,$D1,$D2
+        .byte   $D2,$D2,$D3,$D3,$D3,$D4,$D4,$D4
+        .byte   $D5,$D5,$D5,$D5,$D6,$D6,$D6,$D7
+        .byte   $D7