1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 19:29:37 +00:00

Split files

This commit is contained in:
Karri Kaksonen 2022-04-16 19:15:19 +03:00 committed by mrdudz
parent e0c7880e34
commit f0e16514e0
3 changed files with 181 additions and 197 deletions

View File

@ -6,31 +6,31 @@
;
.export _cputc
.export _textcolor
.import _gotoxy, _gotox, _gotoy, pusha0
.import pushax
.import _screen
.import CURS_X, CURS_Y
.export _textcolor
.import _gotoxy, gotox, gotoy, pusha0
.import pushax
.import _screen
.import CURS_X, CURS_Y
.include "atari7800.inc"
.include "extzp.inc"
.data
.data
;-----------------------------------------------------------------------------
; Holder of the text colour offset
; 0 = red, 42 = green, 84 = white
;
txtcolor:
.byte 0
.byte 0
.code
.code
;---------------------------------------------------------------------------
; 8x16 routine
umula0:
ldy #8 ; Number of bits
lda #0
lda #0
lsr ptr7800 ; Get first bit into carry
@L0: bcc @L1
@ -38,7 +38,7 @@ umula0:
adc ptrtmp
tax
lda ptrtmp+1 ; hi byte of left op
clc
clc
adc ptr7800+1
sta ptr7800+1
txa
@ -64,25 +64,25 @@ umula0:
;
.proc _textcolor
beq @L2
sec
sbc #1
beq @L1
lda #84
jmp @L2
@L1: lda #42
@L2: ldy txtcolor
sta txtcolor ; Store new textcolor
tya
bne @L3
rts ; Old colour was 0
@L3: sec
sbc #42
bne @L4
lda #1
rts ; Old colour was 1
@L4: lda #2
rts ; Old colour was 2
beq @L2
sec
sbc #1
beq @L1
lda #84
jmp @L2
@L1: lda #42
@L2: ldy txtcolor
sta txtcolor ; Store new textcolor
tya
bne @L3
rts ; Old colour was 0
@L3: sec
sbc #42
bne @L4
lda #1
rts ; Old colour was 1
@L4: lda #2
rts ; Old colour was 2
.endproc
;-----------------------------------------------------------------------------
@ -92,83 +92,83 @@ umula0:
;
.proc _cputc
cmp #$0A ; LF
cmp #$0A ; LF
bne @L4
@L1: lda CURS_Y ; newline
cmp #(screenrows-1)
@L1: lda CURS_Y ; newline
cmp #(screenrows-1)
bne @L2
lda #0
beq @L3
@L2: clc
adc #1
@L3: jsr _gotoy
lda #0
jmp _gotox
lda #0
beq @L3
@L2: clc
adc #1
@L3: jsr gotoy
lda #0
jmp gotox
@L4:
cmp #$20 ; ' '
bne @L5
lda #$00
jmp @L10
cmp #$20 ; ' '
bne @L5
lda #$00
jmp @L10
@L5:
cmp #$3F ; '?'
bne @L6
lda #$02
jmp @L9
cmp #$3F ; '?'
bne @L6
lda #$02
jmp @L9
@L6:
cmp #$7C ; '|'
bne @L7
lda #$06
jmp @L9
cmp #$7C ; '|'
bne @L7
lda #$06
jmp @L9
@L7:
cmp #$41 ; >= 'A'
bcc @L8
and #$5F ; make upper case
sec
sbc #($41 - 17)
jmp @L9
cmp #$41 ; >= 'A'
bcc @L8
and #$5F ; make upper case
sec
sbc #($41 - 17)
jmp @L9
@L8:
sec ; >= '*'
sbc #($2A - 1)
sec ; >= '*'
sbc #($2A - 1)
@L9:
clc
adc txtcolor
clc
adc txtcolor
@L10:
asl
pha
asl
pha
lda #0
sta ptr7800+1
sta ptrtmp+1
lda CURS_Y ; Find position on screen buffer
sta ptr7800
lda #charsperline
sta ptrtmp
jsr umula0
clc
adc CURS_X
bcc @L11
inx
@L11: clc
adc #<(_screen)
sta ptr7800
bcc @L12
inx
@L12: txa
clc
adc #>(_screen)
sta ptr7800+1
lda #0
sta ptr7800+1
sta ptrtmp+1
lda CURS_Y ; Find position on screen buffer
sta ptr7800
lda #charsperline
sta ptrtmp
jsr umula0
clc
adc CURS_X
bcc @L11
inx
@L11: clc
adc #<(_screen)
sta ptr7800
bcc @L12
inx
@L12: txa
clc
adc #>(_screen)
sta ptr7800+1
pla ; Print character on screen
ldy #0
sta (ptr7800),y
pla ; Print character on screen
ldy #0
sta (ptr7800),y
lda CURS_X ; Increment cursor
cmp #(charsperline-1)
beq @L1
clc
adc #1
jmp _gotox
lda CURS_X ; Increment cursor
cmp #(charsperline-1)
beq @L1
clc
adc #1
jmp gotox
.endproc

View File

@ -23,40 +23,40 @@
; definitely not allow direct access to the variables.
;
.export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey
.export CURS_X, CURS_Y
.export gotoxy, _gotoxy, gotox, gotoy
.export CURS_X, CURS_Y
.constructor init_cursor
.interruptor blink_cursor
.importzp sp
.import _zones
.import cursor
.import pusha, incsp1, pusha0, pushax, popa
.importzp sp
.import _zones
.import cursor
.import pusha, incsp1, pusha0, pushax, popa
.include "atari7800.inc"
.include "extzp.inc"
.macpack generic
.data
.data
;-----------------------------------------------------------------------------
; The variables used by cursor functions
;
CURS_X:
.byte 0
.byte 0
CURS_Y:
.byte 0
.byte 0
blink_time:
.byte 140
.byte 140
.code
.code
;---------------------------------------------------------------------------
; 8x16 routine
umula0:
ldy #8 ; Number of bits
lda #0
lda #0
lsr ptr7800 ; Get first bit into carry
@L0: bcc @L1
@ -86,24 +86,24 @@ umula0:
; A = CURS_Y
.proc calccursorzone
sta ptr7800
lda #11
sta ptrtmp
lda #0
sta ptr7800+1
sta ptrtmp+1
jsr umula0
clc
adc #5
bcc @L1
inx
@L1: clc
adc #<_zones
sta cursorzone ; calculate new cursorzone
txa
adc #>_zones
sta cursorzone+1
rts
sta ptr7800
lda #11
sta ptrtmp
lda #0
sta ptr7800+1
sta ptrtmp+1
jsr umula0
clc
adc #5
bcc @L1
inx
@L1: clc
adc #<_zones
sta cursorzone ; calculate new cursorzone
txa
adc #>_zones
sta cursorzone+1
rts
.endproc
@ -122,23 +122,23 @@ umula0:
; Enable cursor
; if showcursor cursorzone[1] = 30
;
.proc _gotoy
.proc gotoy
pha
lda CURS_Y
jsr calccursorzone
ldy #1
lda #0
sta (cursorzone),y ; disable cursor
pla
sta CURS_Y
jsr calccursorzone
lda cursor
beq @L1
lda #30 ; enable cursor
@L1: ldy #1
sta (cursorzone),y
rts
pha
lda CURS_Y
jsr calccursorzone
ldy #1
lda #0
sta (cursorzone),y ; disable cursor
pla
sta CURS_Y
jsr calccursorzone
lda cursor
beq @L1
lda #30 ; enable cursor
@L1: ldy #1
sta (cursorzone),y
rts
.endproc
@ -147,70 +147,53 @@ umula0:
; You also need to set the hpos offset to the correct value on this line
; cursorzone[3] = 8 * CURS_X
;
.proc _gotox
.proc gotox
sta CURS_X
ldy #3
clc
rol
rol
rol
sta (cursorzone),y
rts
sta CURS_X
ldy #3
clc
rol
rol
rol
sta (cursorzone),y
rts
.endproc
;-----------------------------------------------------------------------------
; Set cursor to desired position (X,Y)
;
.proc _gotoxy
.proc _gotoxy
jsr _gotoy
jsr popa
jsr _gotox
rts
.endproc
jsr gotoy
jsr popa
jsr gotox
rts
.endproc
.proc gotoxy
jsr popa
jmp _gotoxy
.endproc
;-----------------------------------------------------------------------------
; Get cursor X position
;
.proc _wherex
lda CURS_X
rts
.endproc
;-----------------------------------------------------------------------------
; Get cursor Y position
;
.proc _wherey
lda CURS_Y
rts
.endproc
.proc gotoxy
jsr popa
jmp _gotoxy
.endproc
;-----------------------------------------------------------------------------
; Initialize cursorzone at startup
; Offset to cursor zone 5.
;
.proc blink_cursor
inc blink_time
bne @L3
lda #140
sta blink_time
ldy #0
lda (cursorzone),y
bne @L1
lda #254
bne @L2
@L1: lda #0
@L2: sta (cursorzone),y
@L3: rts
.endproc
.proc blink_cursor
inc blink_time
bne @L3
lda #140
sta blink_time
ldy #0
lda (cursorzone),y
bne @L1
lda #254
bne @L2
@L1: lda #0
@L2: sta (cursorzone),y
@L3: rts
.endproc
;-----------------------------------------------------------------------------
; Initialize cursorzone at startup
@ -218,9 +201,9 @@ umula0:
;
.segment "ONCE"
init_cursor:
lda #0
jsr calccursorzone
rts
lda #0
jsr calccursorzone
rts
;-----------------------------------------------------------------------------
; force the init constructor to be imported

View File

@ -5,14 +5,15 @@
;
.export _wherex
.import CURS_X
.import CURS_X
;-----------------------------------------------------------------------------
; Get cursor X position
;
.proc _wherex
.proc _wherex
lda CURS_X
rts
.endproc
ldx #0
lda CURS_X
rts
.endproc