; void __fastcall__ cputc (char c);
;
- .ifdef __APPLE2ENH__
- .constructor initconio
+ .ifdef __APPLE2ENH__
+ .constructor initconio, 17
.endif
- .export _cputcxy, _cputc
- .export _gotoxy, cputdirect
- .export newline, putchar
+ .export _cputcxy, _cputc
+ .export cputdirect, newline, putchar
+ .import popa, _gotoxy, VTABZ
- .import popa, VTABZ
+ .include "apple2.inc"
- .include "apple2.inc"
+ .segment "INIT"
- .segment "INIT"
-
- .ifdef __APPLE2ENH__
+ .ifdef __APPLE2ENH__
initconio:
- sta SETALTCHAR ; Switch in alternate charset
+ sta SETALTCHAR ; Switch in alternate charset
+ bit LORES ; Limit SET80COL-HISCR to text
rts
.endif
; 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
- 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
+ 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 WNDWDTH
- bcc :+
-left: lda #$00 ; Goto left edge of screen
- sta CH
+ 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:
- inc CV ; Bump to next line
- lda CV
- cmp WNDBTM
- bcc :+
- lda WNDTOP ; Goto top of screen
- sta CV
-: jmp VTABZ
+ 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
+ .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
+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
+ lsr ; Div by 2
tay
pla
- bcs col40 ; Odd cols go in 40 col memory
- bit HISCR
- sta (BASL),Y
- bit LOWSCR
+ 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
-
-_gotoxy:
- clc
- adc WNDTOP
- sta CV ; Store Y
- jsr VTABZ
- jsr popa ; Get X
- sta CH ; Store X
+col40: sta (BASL),Y
rts