]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/cputc.s
Fixed gcc compiler warning (#867)
[cc65] / libsrc / apple2 / cputc.s
index f8ea39dff165851c7a41b8938b72e70236e1f345..30383fcfe0d3b803de6e561470a2e0f22ba3292b 100644 (file)
@@ -1,85 +1,98 @@
 ;
 ; Ullrich von Bassewitz, 06.08.1998
 ;
-; 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
-       .export         _gotoxy, cputdirect
-       .export         newline, putchar
+        .ifdef  __APPLE2ENH__
+        .constructor    initconio
+        .endif
+        .export         _cputcxy, _cputc
+        .export         cputdirect, newline, putchar, putchardirect
+        .import         gotoxy, VTABZ
 
-       .import         popa
+        .include        "apple2.inc"
 
-       .include        "apple2.inc"
+        .segment        "ONCE"
+
+        .ifdef  __APPLE2ENH__
+initconio:
+        sta     SETALTCHAR      ; Switch in alternate charset
+        bit     LORES           ; Limit SET80COL-HISCR to text
+        rts
+        .endif
+
+        .code
 
 ; Plot a character - also used as internal function
 
 _cputcxy:
-       pha                     ; Save C
-       jsr     popa            ; Get Y
-       jsr     _gotoxy
-       pla                     ; Restore C
+        pha                     ; Save C
+        jsr     gotoxy          ; Call this one, will pop params
+        pla                     ; Restore C and run into _cputc
 
 _cputc:
-       cmp     #$0D            ; Test for \r = carrage return
-       bne     L1
-       lda     #$00            ; Goto left edge of screen
-       sta     CH
-       rts                     ; That's all we do
-L1:
-       cmp     #$0A            ; Test for \n = line feed
-       beq     newline
+        cmp     #$0D            ; Test for \r = carrage return
+        beq     left
+        cmp     #$0A            ; Test for \n = line feed
+        beq     newline
+        eor     #$80            ; Invert high bit
+        .ifndef __APPLE2ENH__
+        cmp     #$E0            ; Test for lowercase
+        bcc     cputdirect
+        and     #$DF            ; Convert to uppercase
+        .endif
 
 cputdirect:
-       jsr     putchar
-       ;; Bump to next column
-       inc     CH
-       lda     CH
-       cmp     MAX_X
-       bne     return
-       lda     #$00
-       sta     CH
-return:        
-       rts
-
-putchar:       
-       ora     #$80            ; Turn on high bit
-       and     TEXTTYP         ; Apply normal, inverse, flash
-       ldy     CH
-       ldx     RD80COL         ; In 80 column mode?
-       bpl     col40           ; No, in 40 cols
-       pha
-       tya
-       lsr                     ; Div by 2
-       tay
-       pla
-       bcs     col40           ; odd cols go in 40 col memory
-       sta     PG2ON
-col40: sta     (BASL),Y
-       sta     PG2OFF
-       rts
+        jsr     putchar
+        inc     CH              ; Bump to next column
+        lda     CH
+        cmp     WNDWDTH
+        bcc     :+
+        jsr     newline
+left:   lda     #$00            ; Goto left edge of screen
+        sta     CH
+:       rts
 
 newline:
-       lda     CH
-       pha
-       inc     CV
-       lda     CV
-       cmp     MAX_Y
-       bne     L2
-       lda     #$00
-       sta     CV
-L2:
-       jsr     VTABZ
-       pla
-       sta     CH
-       rts
-               
-_gotoxy:
-       sta     CV              ; Store Y
-       jsr     VTABZ
-       jsr     popa            ; Get X
-       sta     CH              ; Store X
-       rts
+        inc     CV              ; Bump to next line
+        lda     CV
+        cmp     WNDBTM
+        bcc     :+
+        lda     WNDTOP          ; Goto top of screen
+        sta     CV
+:       jmp     VTABZ
 
+putchar:
+        .ifdef  __APPLE2ENH__
+        ldy     INVFLG
+        cpy     #$FF            ; Normal character display mode?
+        beq     putchardirect
+        cmp     #$E0            ; Lowercase?
+        bcc     mask
+        and     #$7F            ; Inverse lowercase
+        bra     putchardirect
+        .endif
+mask:   and     INVFLG          ; Apply normal, inverse, flash
 
+putchardirect:
+        pha
+        ldy     CH
+        .ifdef  __APPLE2ENH__
+        bit     RD80VID         ; In 80 column mode?
+        bpl     put             ; No, just go ahead
+        tya
+        lsr                     ; Div by 2
+        tay
+        bcs     put             ; Odd cols go in main memory
+        bit     HISCR           ; Assume SET80COL
+        .endif
+put:    lda     (BASL),Y        ; Get current character
+        tax                     ; Return old character for _cgetc
+        pla
+        sta     (BASL),Y
+        .ifdef  __APPLE2ENH__
+        bit     LOWSCR          ; Doesn't hurt in 40 column mode
+        .endif
+        rts