;
; 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);
;
- .constructor initconio
- .export _cputcxy, _cputc
- .export _gotoxy, cputdirect
- .export newline, putchar
+ .ifdef __APPLE2ENH__
+ .constructor initconio, 17
+ .endif
+ .export _cputcxy, _cputc
+ .export cputdirect, newline, putchar
+ .import popa, _gotoxy, VTABZ
- .import popa, SETWND, BASCALC
+ .include "apple2.inc"
- .include "apple2.inc"
+ .segment "INIT"
+ .ifdef __APPLE2ENH__
initconio:
- lda #$FF ; Normal character display mode
- sta INVFLG
- lda #$00
- jsr SETWND ; Reset text window to full screen
- rts
+ 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 popa ; Get Y
+ jsr _gotoxy
+ pla ; Restore C
_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
- ora #$80 ; Turn on high bit
- cmp #$E0 ; Test for lowercase
- bmi cputdirect
- and #$DF ; Convert to uppercase
+ cmp #$0D ; Test for \r = carrage return
+ beq left
+ cmp #$0A ; Test for \n = line feed
+ beq newline
+ ora #$80 ; Turn on high bit
+ .ifndef __APPLE2ENH__
+ cmp #$E0 ; Test for lowercase
+ bcc cputdirect
+ and #$DF ; Convert to uppercase
+ .endif
cputdirect:
- jsr putchar
- inc CH ; Bump to next column
- lda CH
- cmp #40
- bne return
- lda #$00
- sta CH
-return:
- rts
-
-putchar:
- and INVFLG ; Apply normal, inverse, flash
- ldy CH
- sta (BASL),Y
- rts
+ jsr putchar
+ inc CH ; Bump to next column
+ lda CH
+ cmp WNDWDTH
+ bcc :+
+left: lda #$00 ; Goto left edge of screen
+ sta CH
+: rts
newline:
- lda CH
- pha
- inc CV
- lda CV
- cmp #24
- bne L2
- lda #$00
- sta CV
-L2:
- jsr BASCALC
- pla
- sta CH
- rts
-
-_gotoxy:
- sta CV ; Store Y
- jsr BASCALC
- 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 put
+ cmp #$E0 ; Lowercase?
+ bcc mask
+ and #$7F ; Inverse lowercase
+ bra put
+ .endif
+mask: and INVFLG ; Apply normal, inverse, flash
+put: ldy CH
+ .ifdef __APPLE2ENH__
+ bit RD80VID ; 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
+ bit HISCR ; Assume SET80COL
+ sta (BASL),Y
+ bit LOWSCR ; Assume SET80COL
+ rts
+ .endif
+col40: sta (BASL),Y
+ rts