Added assembler code files that were left out of the code import
This commit is contained in:
parent
710b372a2d
commit
3552d70176
16
platform/c64/apps/vnc-draw-asm.S
Normal file
16
platform/c64/apps/vnc-draw-asm.S
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.importzp ptr1, ptr2, ptr3, ptr4, sreg
|
||||||
|
.importzp sp
|
||||||
|
|
||||||
|
.import _vnc_draw_datalen
|
||||||
|
.import _vnc_draw_dataptr
|
||||||
|
.import _vnc_draw_bitmapptr
|
||||||
|
.import _vnc_draw_x
|
||||||
|
.import _vnc_draw_y
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.bss
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.data
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
986
platform/c64/ctk/ctk-80col-asm.S
Normal file
986
platform/c64/ctk/ctk-80col-asm.S
Normal file
|
@ -0,0 +1,986 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.importzp ptr1, ptr2, ptr3, ptr4, sreg
|
||||||
|
.importzp sp
|
||||||
|
|
||||||
|
.import pushax
|
||||||
|
.import incsp2
|
||||||
|
|
||||||
|
.import _ctk_80col_screencolors
|
||||||
|
.import _ctk_80col_screenpattern
|
||||||
|
|
||||||
|
.import _ctk_80col_lefttab
|
||||||
|
.import _ctk_80col_righttab
|
||||||
|
|
||||||
|
.import _ctk_80col_cursx
|
||||||
|
.import _ctk_80col_cursy
|
||||||
|
.import _ctk_80col_color
|
||||||
|
.import _ctk_80col_underline
|
||||||
|
.import _ctk_80col_reversed
|
||||||
|
|
||||||
|
.import _ctk_80col_yscreenaddr
|
||||||
|
.import _ctk_80col_yhiresaddr
|
||||||
|
|
||||||
|
.import _ctk_80col_windowparams
|
||||||
|
|
||||||
|
.import _ctk_80col_bitmapptr
|
||||||
|
|
||||||
|
.import _ctk_80col_versionstring
|
||||||
|
.import _ctk_80col_versionstring_len
|
||||||
|
|
||||||
|
.import _ctk_80col_theme
|
||||||
|
|
||||||
|
.export _ctk_80col_cclear
|
||||||
|
.export _ctk_80col_chline
|
||||||
|
.export _ctk_80col_cputc
|
||||||
|
.export _ctk_80col_cputsn
|
||||||
|
|
||||||
|
.export _ctk_80col_clear_line
|
||||||
|
.export _ctk_80col_draw_bitmapline
|
||||||
|
|
||||||
|
.export _ctk_80col_draw_windowborders
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
ptr5 = sreg
|
||||||
|
|
||||||
|
;; Offsets in the theme struct
|
||||||
|
|
||||||
|
ulcornerpattern = 8
|
||||||
|
titlebarpattern = ulcornerpattern+8
|
||||||
|
urcornerpattern = titlebarpattern+8
|
||||||
|
rborderpattern = urcornerpattern+8
|
||||||
|
lrcornerpattern = rborderpattern+8
|
||||||
|
lowerborderpattern = lrcornerpattern+8
|
||||||
|
llcornerpattern = lowerborderpattern+8
|
||||||
|
lborderpattern = llcornerpattern+8
|
||||||
|
|
||||||
|
|
||||||
|
buttonleftpattern = lborderpattern+8
|
||||||
|
buttonrightpattern = buttonleftpattern+8
|
||||||
|
|
||||||
|
|
||||||
|
.bss
|
||||||
|
tmp01: .res 1
|
||||||
|
tmpl: .res 1
|
||||||
|
tmpf: .res 1
|
||||||
|
tmpc: .res 1
|
||||||
|
tmpw: .res 1
|
||||||
|
tmpptr: .res 2
|
||||||
|
|
||||||
|
tmpy: .res 1
|
||||||
|
tmph: .res 1
|
||||||
|
|
||||||
|
;; Window border parameters
|
||||||
|
w: .res 1
|
||||||
|
wpw = 0
|
||||||
|
h: .res 1
|
||||||
|
wph = 1
|
||||||
|
clipy1: .res 1
|
||||||
|
wpclipy1 = 2
|
||||||
|
clipy2: .res 1
|
||||||
|
wpclipy2 = 3
|
||||||
|
color1: .res 1
|
||||||
|
wpcolor1 = 4
|
||||||
|
color2: .res 1
|
||||||
|
wpcolor2 = 5
|
||||||
|
titlecolor: .res 1
|
||||||
|
wptitlecolor = 6
|
||||||
|
titlelen: .res 1
|
||||||
|
wptitlelen = 7
|
||||||
|
title: .res 2
|
||||||
|
wptitle = 8
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.data
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
setupptrs:
|
||||||
|
;; Find hires address.
|
||||||
|
lda _ctk_80col_cursy
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda _ctk_80col_yhiresaddr,x
|
||||||
|
sta ptr2
|
||||||
|
lda _ctk_80col_yhiresaddr+1,x
|
||||||
|
sta ptr2+1
|
||||||
|
|
||||||
|
;; Add X coordinate to the hires address.
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
lda _ctk_80col_cursx
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
; asl
|
||||||
|
; rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
clc
|
||||||
|
adc ptr2
|
||||||
|
and #$f8
|
||||||
|
sta ptr2
|
||||||
|
lda ptr2+1
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr2+1
|
||||||
|
|
||||||
|
;; Find screen address.
|
||||||
|
lda _ctk_80col_cursy
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda _ctk_80col_cursx
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc _ctk_80col_yscreenaddr,x
|
||||||
|
sta ptr1
|
||||||
|
lda _ctk_80col_yscreenaddr+1,x
|
||||||
|
adc #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Turn off interrupts, prepare $01 to store color data in RAM
|
||||||
|
;; under I/O area.
|
||||||
|
sei
|
||||||
|
lda $01
|
||||||
|
sta tmp01
|
||||||
|
and #$f8
|
||||||
|
sta $01
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
restore01:
|
||||||
|
lda tmp01
|
||||||
|
sta $01
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_cclear:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne @norts
|
||||||
|
rts
|
||||||
|
@norts:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy tmpl
|
||||||
|
lda _ctk_80col_color
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
;; Store either $00 or $ff in hires memory, depending on the
|
||||||
|
;; reversed flag
|
||||||
|
|
||||||
|
ldx tmpl
|
||||||
|
lda _ctk_80col_reversed
|
||||||
|
beq @noff
|
||||||
|
lda #$ff
|
||||||
|
@noff:
|
||||||
|
sta tmpf
|
||||||
|
|
||||||
|
|
||||||
|
@loop1:
|
||||||
|
ldy #7
|
||||||
|
lda tmpf
|
||||||
|
@loop2:
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop2
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc @noinc
|
||||||
|
inc ptr2+1
|
||||||
|
@noinc:
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl @loop1
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_chline:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne @norts
|
||||||
|
rts
|
||||||
|
@norts:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
;; Store horizontal line pattern in hires memory
|
||||||
|
ldx tmpl
|
||||||
|
@loop1:
|
||||||
|
ldy #0
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$ff
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$ff
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc @noinc
|
||||||
|
inc ptr2+1
|
||||||
|
@noinc:
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne @loop1
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_cputc:
|
||||||
|
sta tmpc
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
;; Turn on font ROM
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Convert from PETSCII to screen encoding
|
||||||
|
lda tmpc
|
||||||
|
eor #$e0
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
bpl @cont
|
||||||
|
adc #$40
|
||||||
|
bpl @cont
|
||||||
|
eor #$a0
|
||||||
|
@cont:
|
||||||
|
ldx _ctk_80col_reversed
|
||||||
|
beq :+
|
||||||
|
eor #$80
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Convert to address in character ROM
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
sta ptr1
|
||||||
|
lda #$d8
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
lda _ctk_80col_cursx
|
||||||
|
and #1
|
||||||
|
beq @left
|
||||||
|
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_80col_underline
|
||||||
|
beq @rightnounderline
|
||||||
|
eor #$ff
|
||||||
|
@rightnounderline:
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$f0
|
||||||
|
ora _ctk_80col_righttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@rightloop:
|
||||||
|
lda (ptr1),y
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$f0
|
||||||
|
ora _ctk_80col_righttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @rightloop
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
|
||||||
|
@left:
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_80col_underline
|
||||||
|
beq @nounderline
|
||||||
|
eor #$ff
|
||||||
|
@nounderline:
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$0f
|
||||||
|
ora _ctk_80col_lefttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@loop:
|
||||||
|
lda (ptr1),y
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$0f
|
||||||
|
ora _ctk_80col_lefttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_cputsn:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne :+
|
||||||
|
jmp incsp2
|
||||||
|
:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
;; Turn on font ROM
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
;; Output each character from the string
|
||||||
|
lda #0
|
||||||
|
sta tmpc
|
||||||
|
ldy #0
|
||||||
|
lda (sp),y
|
||||||
|
sta ptr3
|
||||||
|
iny
|
||||||
|
lda (sp),y
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
@loop1:
|
||||||
|
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy tmpc
|
||||||
|
lda (ptr3),y
|
||||||
|
bne :+
|
||||||
|
jmp @end
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Convert from PETSCII to screen encoding
|
||||||
|
eor #$e0
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
bpl @cont
|
||||||
|
adc #$40
|
||||||
|
bpl @cont
|
||||||
|
eor #$a0
|
||||||
|
@cont:
|
||||||
|
ldx _ctk_80col_reversed
|
||||||
|
beq :+
|
||||||
|
eor #$80
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Convert to address in character ROM
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
sta ptr1
|
||||||
|
lda #$d8
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
lda _ctk_80col_cursx
|
||||||
|
and #1
|
||||||
|
beq @left
|
||||||
|
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_80col_underline
|
||||||
|
beq @rightnounderline
|
||||||
|
eor #$ff
|
||||||
|
@rightnounderline:
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$f0
|
||||||
|
ora _ctk_80col_righttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@rightloop:
|
||||||
|
lda (ptr1),y
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$f0
|
||||||
|
ora _ctk_80col_righttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @rightloop
|
||||||
|
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc :+
|
||||||
|
inc ptr2+1
|
||||||
|
:
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
|
||||||
|
jmp @loopend
|
||||||
|
|
||||||
|
@left:
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_80col_underline
|
||||||
|
beq @nounderline
|
||||||
|
eor #$ff
|
||||||
|
@nounderline:
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$0f
|
||||||
|
ora _ctk_80col_lefttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@loop:
|
||||||
|
lda (ptr1),y
|
||||||
|
tax
|
||||||
|
lda (ptr2),y
|
||||||
|
and #$0f
|
||||||
|
ora _ctk_80col_lefttab,x
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop
|
||||||
|
|
||||||
|
inc _ctk_80col_cursx
|
||||||
|
@loopend:
|
||||||
|
inc tmpc
|
||||||
|
lda tmpc
|
||||||
|
cmp tmpl
|
||||||
|
beq :+
|
||||||
|
jmp @loop1
|
||||||
|
:
|
||||||
|
|
||||||
|
@end:
|
||||||
|
jsr restore01
|
||||||
|
|
||||||
|
jmp incsp2
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_clear_line:
|
||||||
|
sta tmpl
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda _ctk_80col_yscreenaddr,x
|
||||||
|
sta ptr1
|
||||||
|
lda _ctk_80col_yscreenaddr+1,x
|
||||||
|
sta ptr1+1
|
||||||
|
lda _ctk_80col_yhiresaddr,x
|
||||||
|
sta ptr2
|
||||||
|
lda _ctk_80col_yhiresaddr+1,x
|
||||||
|
sta ptr2+1
|
||||||
|
|
||||||
|
sei
|
||||||
|
lda $01
|
||||||
|
sta tmp01
|
||||||
|
and #$f8
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
ldy #39
|
||||||
|
ldx tmpl
|
||||||
|
lda _ctk_80col_screencolors,x
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda tmpl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
ldy #0
|
||||||
|
:
|
||||||
|
lda _ctk_80col_screenpattern,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+1,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+2,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+3,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+4,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+5,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+6,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+7,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
inc ptr2+1
|
||||||
|
|
||||||
|
:
|
||||||
|
lda _ctk_80col_screenpattern,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+1,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+2,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+3,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+4,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+5,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+6,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda _ctk_80col_screenpattern+7,x
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
cpy #$40
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda tmpl
|
||||||
|
cmp #24
|
||||||
|
bne :+
|
||||||
|
|
||||||
|
sta _ctk_80col_cursy
|
||||||
|
lda #2
|
||||||
|
sta _ctk_80col_cursx
|
||||||
|
|
||||||
|
jsr restore01
|
||||||
|
|
||||||
|
lda #<_ctk_80col_versionstring
|
||||||
|
ldx #>_ctk_80col_versionstring
|
||||||
|
jsr pushax
|
||||||
|
lda _ctk_80col_versionstring_len
|
||||||
|
jmp _ctk_80col_cputsn
|
||||||
|
:
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_draw_bitmapline:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne :+
|
||||||
|
rts
|
||||||
|
:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_80col_color
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy tmpl
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda _ctk_80col_bitmapptr
|
||||||
|
sta ptr1
|
||||||
|
lda _ctk_80col_bitmapptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda (ptr1),y
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
cpx #8
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
dec tmpl
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_80col_draw_windowborders:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
lda _ctk_80col_windowparams + wpclipy1
|
||||||
|
beq :+
|
||||||
|
jmp @nofirstline
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Draw first line of the border, including the window title
|
||||||
|
|
||||||
|
;; Start with filling color memory
|
||||||
|
lda _ctk_80col_windowparams + wpw
|
||||||
|
sta tmpw
|
||||||
|
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_80col_windowparams + wptitlecolor
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy tmpw
|
||||||
|
bcc :-
|
||||||
|
|
||||||
|
dec tmpw
|
||||||
|
|
||||||
|
;; Set color for upper right corner
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
|
||||||
|
;; Turn on font ROM for drawing the title
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
;; Use a temporary pointer (ptr3) rather than ptr2 so we can
|
||||||
|
;; reuse it later.
|
||||||
|
lda ptr2
|
||||||
|
sta ptr3
|
||||||
|
lda ptr2+1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
;; Draw upper left corner
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+ulcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
|
||||||
|
|
||||||
|
;; Draw window title bar pattern
|
||||||
|
@titlebarloop:
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+titlebarpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
;; Loop until we are three characters away from right border
|
||||||
|
;; to avoid flickering since we would be overwriting the close
|
||||||
|
;; button.
|
||||||
|
dec tmpw
|
||||||
|
bpl @titlebarloop
|
||||||
|
|
||||||
|
;; Draw upper right corner piece
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+urcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
|
||||||
|
@nofirstline:
|
||||||
|
|
||||||
|
|
||||||
|
ldx _ctk_80col_windowparams + wph
|
||||||
|
inx
|
||||||
|
stx tmph
|
||||||
|
|
||||||
|
;; Draw left and right borders
|
||||||
|
|
||||||
|
;; Fill color memory (pointer in ptr1, setup by setupptrs)
|
||||||
|
|
||||||
|
;; First check how much we actually should draw by inspecting
|
||||||
|
;; the clipy1 and clipy2 fields in the _ctk_80col_windowparams
|
||||||
|
;; structure
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
sta tmpy
|
||||||
|
|
||||||
|
ldx _ctk_80col_windowparams + wpclipy1
|
||||||
|
@clipy1loop:
|
||||||
|
cpx #0
|
||||||
|
beq @clipy1loopend
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
inc tmpy
|
||||||
|
|
||||||
|
dex
|
||||||
|
jmp @clipy1loop
|
||||||
|
@clipy1loopend:
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
ldx tmpy
|
||||||
|
ldy _ctk_80col_windowparams + wpw
|
||||||
|
iny
|
||||||
|
sty tmpw
|
||||||
|
@bordercloop:
|
||||||
|
cpx _ctk_80col_windowparams + wpclipy2
|
||||||
|
beq @bordercloopend
|
||||||
|
|
||||||
|
ldy tmpw
|
||||||
|
lda _ctk_80col_windowparams + wpcolor2
|
||||||
|
sta (ptr1),y
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_80col_windowparams + wpcolor1
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx tmph
|
||||||
|
bcc @bordercloop
|
||||||
|
beq @bordercloop
|
||||||
|
@bordercloopend:
|
||||||
|
|
||||||
|
|
||||||
|
;; Fill color memory for lower border, if clipy2 allows
|
||||||
|
cpx _ctk_80col_windowparams + wpclipy2
|
||||||
|
beq @noclowerborder
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
sec
|
||||||
|
sbc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcs :+
|
||||||
|
dec ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
ldy _ctk_80col_windowparams + wpw
|
||||||
|
lda _ctk_80col_windowparams + wpcolor2
|
||||||
|
@lbordercloop:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bne @lbordercloop
|
||||||
|
|
||||||
|
@noclowerborder:
|
||||||
|
|
||||||
|
;; Draw right border
|
||||||
|
ldx tmpy
|
||||||
|
@rborderloop:
|
||||||
|
cpx _ctk_80col_windowparams + wpclipy2
|
||||||
|
beq @rborderloopend
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+rborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx tmph
|
||||||
|
bne @rborderloop
|
||||||
|
@rborderloopend:
|
||||||
|
|
||||||
|
cpx _ctk_80col_windowparams + wpclipy2
|
||||||
|
beq @norbordercorner
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
;; Draw lower right corner, if clipy2 allows it
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+lrcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
@norbordercorner:
|
||||||
|
|
||||||
|
stx tmpy
|
||||||
|
|
||||||
|
;; Draw lower border
|
||||||
|
ldx _ctk_80col_windowparams + wpw
|
||||||
|
|
||||||
|
@lowerborderloop:
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcs :+
|
||||||
|
dec ptr3+1
|
||||||
|
:
|
||||||
|
|
||||||
|
lda tmpy
|
||||||
|
cmp _ctk_80col_windowparams + wpclipy2
|
||||||
|
beq @nolowerborder
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+lowerborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
@nolowerborder:
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne @lowerborderloop
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcs :+
|
||||||
|
dec ptr3+1
|
||||||
|
:
|
||||||
|
|
||||||
|
|
||||||
|
ldx tmpy
|
||||||
|
cpx tmph
|
||||||
|
bne @nolbordercorner
|
||||||
|
|
||||||
|
;; Draw lower left corner, if clipy2 allows it
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+llcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
sbc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
@nolbordercorner:
|
||||||
|
|
||||||
|
;; Draw left border
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@lborderloop:
|
||||||
|
cpx #1
|
||||||
|
beq @lborderloopend
|
||||||
|
cpx _ctk_80col_windowparams + wpclipy1
|
||||||
|
bcc @lborderloopend
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_80col_theme+lborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
sbc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
dex
|
||||||
|
jmp @lborderloop
|
||||||
|
|
||||||
|
@lborderloopend:
|
||||||
|
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
934
platform/c64/ctk/ctk-hires-asm.S
Normal file
934
platform/c64/ctk/ctk-hires-asm.S
Normal file
|
@ -0,0 +1,934 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.importzp ptr1, ptr2, ptr3, ptr4, sreg
|
||||||
|
.importzp sp
|
||||||
|
|
||||||
|
.import incsp2
|
||||||
|
|
||||||
|
|
||||||
|
.import _ctk_hires_cursx
|
||||||
|
.import _ctk_hires_cursy
|
||||||
|
.import _ctk_hires_color
|
||||||
|
.import _ctk_hires_underline
|
||||||
|
.import _ctk_hires_reversed
|
||||||
|
|
||||||
|
.import _ctk_hires_yscreenaddr
|
||||||
|
.import _ctk_hires_yhiresaddr
|
||||||
|
|
||||||
|
.import _ctk_hires_windowparams
|
||||||
|
|
||||||
|
.import _ctk_hires_bitmapptr
|
||||||
|
|
||||||
|
.import _ctk_hires_theme
|
||||||
|
|
||||||
|
.export _ctk_hires_cclear
|
||||||
|
.export _ctk_hires_chline
|
||||||
|
.export _ctk_hires_cputc
|
||||||
|
.export _ctk_hires_cputsn
|
||||||
|
|
||||||
|
.export _ctk_hires_draw_buttonleft
|
||||||
|
.export _ctk_hires_draw_buttonright
|
||||||
|
|
||||||
|
.export _ctk_hires_draw_windowborders
|
||||||
|
|
||||||
|
.export _ctk_hires_draw_bitmapline
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
ptr5 = sreg
|
||||||
|
|
||||||
|
;; Offsets in the theme struct
|
||||||
|
|
||||||
|
ulcornerpattern = 8
|
||||||
|
titlebarpattern = ulcornerpattern+8
|
||||||
|
urcornerpattern = titlebarpattern+8
|
||||||
|
rborderpattern = urcornerpattern+8
|
||||||
|
lrcornerpattern = rborderpattern+8
|
||||||
|
lowerborderpattern = lrcornerpattern+8
|
||||||
|
llcornerpattern = lowerborderpattern+8
|
||||||
|
lborderpattern = llcornerpattern+8
|
||||||
|
|
||||||
|
|
||||||
|
buttonleftpattern = lborderpattern+8
|
||||||
|
buttonrightpattern = buttonleftpattern+8
|
||||||
|
|
||||||
|
|
||||||
|
.bss
|
||||||
|
tmp01: .res 1
|
||||||
|
tmpl: .res 1
|
||||||
|
tmpf: .res 1
|
||||||
|
tmpc: .res 1
|
||||||
|
tmpw: .res 1
|
||||||
|
tmpptr: .res 2
|
||||||
|
|
||||||
|
tmpy: .res 1
|
||||||
|
tmph: .res 1
|
||||||
|
|
||||||
|
;; Window border parameters
|
||||||
|
w: .res 1
|
||||||
|
wpw = 0
|
||||||
|
h: .res 1
|
||||||
|
wph = 1
|
||||||
|
clipy1: .res 1
|
||||||
|
wpclipy1 = 2
|
||||||
|
clipy2: .res 1
|
||||||
|
wpclipy2 = 3
|
||||||
|
color1: .res 1
|
||||||
|
wpcolor1 = 4
|
||||||
|
color2: .res 1
|
||||||
|
wpcolor2 = 5
|
||||||
|
titlelen: .res 1
|
||||||
|
wptitlelen = 6
|
||||||
|
title: .res 2
|
||||||
|
wptitle = 7
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.data
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
setupptrs:
|
||||||
|
;; Find hires address.
|
||||||
|
lda _ctk_hires_cursy
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda _ctk_hires_yhiresaddr,x
|
||||||
|
sta ptr2
|
||||||
|
lda _ctk_hires_yhiresaddr+1,x
|
||||||
|
sta ptr2+1
|
||||||
|
|
||||||
|
;; Add X coordinate to the hires address.
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
lda _ctk_hires_cursx
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
clc
|
||||||
|
adc ptr2
|
||||||
|
sta ptr2
|
||||||
|
lda ptr2+1
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr2+1
|
||||||
|
|
||||||
|
|
||||||
|
;; Find screen address.
|
||||||
|
lda _ctk_hires_cursy
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda _ctk_hires_yscreenaddr,x
|
||||||
|
clc
|
||||||
|
adc _ctk_hires_cursx
|
||||||
|
sta ptr1
|
||||||
|
lda _ctk_hires_yscreenaddr+1,x
|
||||||
|
adc #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Turn off interrupts, prepare $01 to store color data in RAM
|
||||||
|
;; under I/O area.
|
||||||
|
sei
|
||||||
|
lda $01
|
||||||
|
sta tmp01
|
||||||
|
and #$f8
|
||||||
|
sta $01
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
restore01:
|
||||||
|
lda tmp01
|
||||||
|
sta $01
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_cclear:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne @norts
|
||||||
|
rts
|
||||||
|
@norts:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
;; Store color value in color memory
|
||||||
|
|
||||||
|
ldy tmpl
|
||||||
|
dey
|
||||||
|
lda _ctk_hires_color
|
||||||
|
@loop0:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bpl @loop0
|
||||||
|
|
||||||
|
;; Store either $00 or $ff in hires memory, depending on the
|
||||||
|
;; reversed flag
|
||||||
|
|
||||||
|
ldx tmpl
|
||||||
|
lda _ctk_hires_reversed
|
||||||
|
beq @noff
|
||||||
|
lda #$ff
|
||||||
|
@noff:
|
||||||
|
sta tmpf
|
||||||
|
@loop1:
|
||||||
|
ldy #7
|
||||||
|
lda tmpf
|
||||||
|
@loop2:
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop2
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc @noinc
|
||||||
|
inc ptr2+1
|
||||||
|
@noinc:
|
||||||
|
|
||||||
|
inc _ctk_hires_cursx
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne @loop1
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_chline:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne @norts
|
||||||
|
rts
|
||||||
|
@norts:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
;; Store color value in color memory
|
||||||
|
|
||||||
|
ldy tmpl
|
||||||
|
dey
|
||||||
|
lda _ctk_hires_color
|
||||||
|
@loop0:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bpl @loop0
|
||||||
|
|
||||||
|
;; Store horizontal line pattern in hires memory
|
||||||
|
ldx tmpl
|
||||||
|
@loop1:
|
||||||
|
ldy #0
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$ff
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$ff
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
lda #$00
|
||||||
|
sta (ptr2),y
|
||||||
|
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc @noinc
|
||||||
|
inc ptr2+1
|
||||||
|
@noinc:
|
||||||
|
|
||||||
|
inc _ctk_hires_cursx
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne @loop1
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_cputc:
|
||||||
|
sta tmpc
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_color
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
;; Turn on font ROM
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Convert from PETSCII to screen encoding
|
||||||
|
lda tmpc
|
||||||
|
eor #$e0
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
bpl @cont
|
||||||
|
adc #$40
|
||||||
|
bpl @cont
|
||||||
|
eor #$a0
|
||||||
|
@cont:
|
||||||
|
ldx _ctk_hires_reversed
|
||||||
|
beq :+
|
||||||
|
eor #$80
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Convert to address in character ROM
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
sta ptr1
|
||||||
|
lda #$d8
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_hires_underline
|
||||||
|
beq @nounderline
|
||||||
|
eor #$ff
|
||||||
|
@nounderline:
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@loop:
|
||||||
|
lda (ptr1),y
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop
|
||||||
|
|
||||||
|
inc _ctk_hires_cursx
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_cputsn:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne :+
|
||||||
|
rts
|
||||||
|
:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy tmpl
|
||||||
|
dey
|
||||||
|
lda _ctk_hires_color
|
||||||
|
@loop0:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bpl @loop0
|
||||||
|
|
||||||
|
;; Turn on font ROM
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
|
||||||
|
;; Output each character from the string
|
||||||
|
lda #0
|
||||||
|
sta tmpc
|
||||||
|
ldy #0
|
||||||
|
lda (sp),y
|
||||||
|
sta ptr3
|
||||||
|
iny
|
||||||
|
lda (sp),y
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
@loop1:
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy tmpc
|
||||||
|
lda (ptr3),y
|
||||||
|
beq @end
|
||||||
|
|
||||||
|
;; Convert from PETSCII to screen encoding
|
||||||
|
eor #$e0
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
bpl @cont
|
||||||
|
adc #$40
|
||||||
|
bpl @cont
|
||||||
|
eor #$a0
|
||||||
|
@cont:
|
||||||
|
ldx _ctk_hires_reversed
|
||||||
|
beq :+
|
||||||
|
eor #$80
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Convert to address in character ROM
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
asl
|
||||||
|
rol ptr1+1
|
||||||
|
sta ptr1
|
||||||
|
lda #$d8
|
||||||
|
adc ptr1+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
;; Print on hires screen, bottom-up. If we should underline,
|
||||||
|
;; we do this by eor:ing the bottom line with #$ff
|
||||||
|
ldy #7
|
||||||
|
lda (ptr1),y
|
||||||
|
ldx _ctk_hires_underline
|
||||||
|
beq @nounderline
|
||||||
|
eor #$ff
|
||||||
|
@nounderline:
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
@loop:
|
||||||
|
lda (ptr1),y
|
||||||
|
sta (ptr2),y
|
||||||
|
dey
|
||||||
|
bpl @loop
|
||||||
|
|
||||||
|
inc _ctk_hires_cursx
|
||||||
|
|
||||||
|
lda ptr2
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr2
|
||||||
|
bcc :+
|
||||||
|
inc ptr2+1
|
||||||
|
:
|
||||||
|
inc tmpc
|
||||||
|
lda tmpc
|
||||||
|
cmp tmpl
|
||||||
|
bne @loop1
|
||||||
|
|
||||||
|
@end:
|
||||||
|
jsr restore01
|
||||||
|
|
||||||
|
jmp incsp2
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_draw_windowborders:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
lda _ctk_hires_windowparams + wpclipy1
|
||||||
|
beq :+
|
||||||
|
jmp @nofirstline
|
||||||
|
:
|
||||||
|
|
||||||
|
;; Draw first line of the border, including the window title
|
||||||
|
|
||||||
|
;; Start with filling color memory
|
||||||
|
ldy _ctk_hires_windowparams + wpw
|
||||||
|
iny
|
||||||
|
lda _ctk_hires_windowparams + wpcolor1
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
dey
|
||||||
|
dey
|
||||||
|
sty tmpw
|
||||||
|
|
||||||
|
ldy _ctk_hires_windowparams + wptitlelen
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy tmpw
|
||||||
|
bcc :-
|
||||||
|
|
||||||
|
inc tmpw
|
||||||
|
|
||||||
|
;; Set color for upper left corner
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_windowparams + wpcolor1
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
|
||||||
|
;; Turn on font ROM for drawing the title
|
||||||
|
lda tmp01
|
||||||
|
and #$f8
|
||||||
|
ora #$01
|
||||||
|
sta $01
|
||||||
|
|
||||||
|
;; Use a temporary pointer (ptr3) rather than ptr2 so we can
|
||||||
|
;; reuse it later.
|
||||||
|
lda ptr2
|
||||||
|
sta ptr3
|
||||||
|
lda ptr2+1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
;; Draw upper left corner
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+ulcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
;; Draw first empty char left of the title
|
||||||
|
ldy #8
|
||||||
|
lda #0
|
||||||
|
:
|
||||||
|
; sta (ptr3),y
|
||||||
|
iny
|
||||||
|
cpy #$10
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$10
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
dec tmpw
|
||||||
|
|
||||||
|
;; Draw the title
|
||||||
|
lda _ctk_hires_windowparams + wptitle
|
||||||
|
sta ptr4
|
||||||
|
lda _ctk_hires_windowparams + wptitle+1
|
||||||
|
sta ptr4+1
|
||||||
|
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta tmpc
|
||||||
|
@titleloop:
|
||||||
|
lda #0
|
||||||
|
sta ptr5+1
|
||||||
|
|
||||||
|
ldy tmpc
|
||||||
|
lda (ptr4),y
|
||||||
|
|
||||||
|
|
||||||
|
;; Convert from PETSCII to screen encoding
|
||||||
|
eor #$e0
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
bpl @cont
|
||||||
|
adc #$40
|
||||||
|
bpl @cont
|
||||||
|
eor #$a0
|
||||||
|
@cont:
|
||||||
|
;; Convert to address in character ROM
|
||||||
|
asl
|
||||||
|
rol ptr5+1
|
||||||
|
asl
|
||||||
|
rol ptr5+1
|
||||||
|
asl
|
||||||
|
rol ptr5+1
|
||||||
|
sta ptr5
|
||||||
|
lda #$d8
|
||||||
|
adc ptr5+1
|
||||||
|
sta ptr5+1
|
||||||
|
|
||||||
|
;; Print on hires screen, character by character, bottom-up.
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda (ptr5),y
|
||||||
|
; sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
dec tmpw
|
||||||
|
|
||||||
|
inc tmpc
|
||||||
|
lda tmpc
|
||||||
|
cmp _ctk_hires_windowparams + wptitlelen
|
||||||
|
bne @titleloop
|
||||||
|
|
||||||
|
;; Draw empty char after the title
|
||||||
|
ldy #7
|
||||||
|
lda #0
|
||||||
|
:
|
||||||
|
; sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
dec tmpw
|
||||||
|
|
||||||
|
;; Draw window title bar pattern
|
||||||
|
@titlebarloop:
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+titlebarpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
;; Loop until we are three characters away from right border
|
||||||
|
;; to avoid flickering since we would be overwriting the close
|
||||||
|
;; button.
|
||||||
|
dec tmpw
|
||||||
|
lda tmpw
|
||||||
|
cmp #3
|
||||||
|
bcs @titlebarloop
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$18
|
||||||
|
sta ptr3
|
||||||
|
bcc :+
|
||||||
|
inc ptr3+1
|
||||||
|
:
|
||||||
|
;; Draw upper right corner piece
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+urcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
|
||||||
|
@nofirstline:
|
||||||
|
|
||||||
|
|
||||||
|
ldx _ctk_hires_windowparams + wph
|
||||||
|
inx
|
||||||
|
stx tmph
|
||||||
|
|
||||||
|
;; Draw left and right borders
|
||||||
|
|
||||||
|
;; Fill color memory (pointer in ptr1, setup by setupptrs)
|
||||||
|
|
||||||
|
;; First check how much we actually should draw by inspecting
|
||||||
|
;; the clipy1 and clipy2 fields in the _ctk_hires_windowparams
|
||||||
|
;; structure
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
sta tmpy
|
||||||
|
|
||||||
|
ldx _ctk_hires_windowparams + wpclipy1
|
||||||
|
@clipy1loop:
|
||||||
|
cpx #0
|
||||||
|
beq @clipy1loopend
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
inc tmpy
|
||||||
|
|
||||||
|
dex
|
||||||
|
jmp @clipy1loop
|
||||||
|
@clipy1loopend:
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
ldx tmpy
|
||||||
|
ldy _ctk_hires_windowparams + wpw
|
||||||
|
iny
|
||||||
|
sty tmpw
|
||||||
|
@bordercloop:
|
||||||
|
cpx _ctk_hires_windowparams + wpclipy2
|
||||||
|
beq @bordercloopend
|
||||||
|
|
||||||
|
ldy tmpw
|
||||||
|
lda _ctk_hires_windowparams + wpcolor2
|
||||||
|
sta (ptr1),y
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_windowparams + wpcolor1
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcc :+
|
||||||
|
inc ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx tmph
|
||||||
|
bcc @bordercloop
|
||||||
|
beq @bordercloop
|
||||||
|
@bordercloopend:
|
||||||
|
|
||||||
|
|
||||||
|
;; Fill color memory for lower border, if clipy2 allows
|
||||||
|
cpx _ctk_hires_windowparams + wpclipy2
|
||||||
|
beq @noclowerborder
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
sec
|
||||||
|
sbc #$28
|
||||||
|
sta ptr1
|
||||||
|
bcs :+
|
||||||
|
dec ptr1+1
|
||||||
|
:
|
||||||
|
|
||||||
|
ldy _ctk_hires_windowparams + wpw
|
||||||
|
lda _ctk_hires_windowparams + wpcolor2
|
||||||
|
@lbordercloop:
|
||||||
|
sta (ptr1),y
|
||||||
|
dey
|
||||||
|
bne @lbordercloop
|
||||||
|
|
||||||
|
@noclowerborder:
|
||||||
|
|
||||||
|
;; Draw right border
|
||||||
|
ldx tmpy
|
||||||
|
@rborderloop:
|
||||||
|
cpx _ctk_hires_windowparams + wpclipy2
|
||||||
|
beq @rborderloopend
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+rborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx tmph
|
||||||
|
bne @rborderloop
|
||||||
|
@rborderloopend:
|
||||||
|
|
||||||
|
cpx _ctk_hires_windowparams + wpclipy2
|
||||||
|
beq @norbordercorner
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
clc
|
||||||
|
adc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
adc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
;; Draw lower right corner, if clipy2 allows it
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+lrcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
@norbordercorner:
|
||||||
|
|
||||||
|
stx tmpy
|
||||||
|
|
||||||
|
;; Draw lower border
|
||||||
|
ldx _ctk_hires_windowparams + wpw
|
||||||
|
|
||||||
|
@lowerborderloop:
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcs :+
|
||||||
|
dec ptr3+1
|
||||||
|
:
|
||||||
|
|
||||||
|
lda tmpy
|
||||||
|
cmp _ctk_hires_windowparams + wpclipy2
|
||||||
|
beq @nolowerborder
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+lowerborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
@nolowerborder:
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne @lowerborderloop
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$8
|
||||||
|
sta ptr3
|
||||||
|
bcs :+
|
||||||
|
dec ptr3+1
|
||||||
|
:
|
||||||
|
|
||||||
|
|
||||||
|
ldx tmpy
|
||||||
|
cpx tmph
|
||||||
|
bne @nolbordercorner
|
||||||
|
|
||||||
|
;; Draw lower left corner, if clipy2 allows it
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+llcornerpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
sbc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
@nolbordercorner:
|
||||||
|
|
||||||
|
;; Draw left border
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@lborderloop:
|
||||||
|
cpx #1
|
||||||
|
beq @lborderloopend
|
||||||
|
cpx _ctk_hires_windowparams + wpclipy1
|
||||||
|
bcc @lborderloopend
|
||||||
|
|
||||||
|
ldy #7
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+lborderpattern,y
|
||||||
|
sta (ptr3),y
|
||||||
|
dey
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
lda ptr3
|
||||||
|
sec
|
||||||
|
sbc #$40
|
||||||
|
sta ptr3
|
||||||
|
lda ptr3+1
|
||||||
|
sbc #1
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
dex
|
||||||
|
jmp @lborderloop
|
||||||
|
|
||||||
|
@lborderloopend:
|
||||||
|
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_draw_buttonleft:
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_color
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+buttonleftpattern,y
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
cpy #8
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_draw_buttonright:
|
||||||
|
jsr setupptrs
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_color
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
:
|
||||||
|
lda _ctk_hires_theme+buttonrightpattern,y
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
cpy #8
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_hires_draw_bitmapline:
|
||||||
|
sta tmpl
|
||||||
|
cmp #0
|
||||||
|
bne :+
|
||||||
|
rts
|
||||||
|
:
|
||||||
|
|
||||||
|
jsr setupptrs
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda _ctk_hires_color
|
||||||
|
:
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy tmpl
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda _ctk_hires_bitmapptr
|
||||||
|
sta ptr1
|
||||||
|
lda _ctk_hires_bitmapptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda (ptr1),y
|
||||||
|
sta (ptr2),y
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
cpx #8
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
dec tmpl
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
jmp restore01
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
149
platform/c64/ctk/ctk-mouse-1351.S
Normal file
149
platform/c64/ctk/ctk-mouse-1351.S
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; The 1351 mouse code was taken from the CC65 libraries,
|
||||||
|
;; written by Ullrich von Bassewitz
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
.macpack generic
|
||||||
|
|
||||||
|
.import _ctk_mouse_joyx, _ctk_mouse_joyy
|
||||||
|
.import _ctk_mouse_firebutton
|
||||||
|
.export _ctk_mouse_1351
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.bss
|
||||||
|
OldValue: .res 1 ; Temp for MoveCheck routine
|
||||||
|
NewValue: .res 1 ; Temp for MoveCheck routine
|
||||||
|
YCorr: .res 1 ; Correction for Y coordinate
|
||||||
|
|
||||||
|
OldPotX: .res 1 ; Old hw counter values
|
||||||
|
OldPotY: .res 1
|
||||||
|
|
||||||
|
SID_ADConv1 = $D419
|
||||||
|
SID_ADConv2 = $D41A
|
||||||
|
CIA1_PRA = $DC00
|
||||||
|
CIA1_PRB = $DC01
|
||||||
|
CIA1_DDRB = $DC03
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.data
|
||||||
|
XMin: .word 0 ; X1 value of bounding box
|
||||||
|
YMin: .word 0 ; Y1 value of bounding box
|
||||||
|
XMax: .word 319 ; X2 value of bounding box
|
||||||
|
YMax: .word 199 ; Y2 value of bounding box
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; Most of the mouse code is taken from the CC65 libraries written by
|
||||||
|
;; Ullrich von Bassewitz
|
||||||
|
MoveCheck:
|
||||||
|
sty OldValue
|
||||||
|
sta NewValue
|
||||||
|
ldx #$00
|
||||||
|
|
||||||
|
sub OldValue ; a = mod64 (new - old)
|
||||||
|
and #%01111111
|
||||||
|
cmp #%01000000 ; if (a > 0)
|
||||||
|
bcs @L1 ;
|
||||||
|
lsr a ; a /= 2;
|
||||||
|
beq @L2 ; if (a != 0)
|
||||||
|
ldy NewValue ; y = NewValue
|
||||||
|
rts ; return
|
||||||
|
|
||||||
|
@L1: ora #%11000000 ; else or in high order bits
|
||||||
|
cmp #$FF ; if (a != -1)
|
||||||
|
beq @L2
|
||||||
|
sec
|
||||||
|
ror a ; a /= 2
|
||||||
|
dex ; high byte = -1 (X = $FF)
|
||||||
|
ldy NewValue
|
||||||
|
rts
|
||||||
|
|
||||||
|
@L2: txa ; A = $00
|
||||||
|
rts
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_mouse_1351:
|
||||||
|
lda SID_ADConv1 ; Get mouse X movement
|
||||||
|
ldy OldPotX
|
||||||
|
jsr MoveCheck ; Calculate movement vector
|
||||||
|
sty OldPotX
|
||||||
|
|
||||||
|
; Calculate the new X coordinate (--> a/y)
|
||||||
|
|
||||||
|
add _ctk_mouse_joyx
|
||||||
|
tay ; Remember low byte
|
||||||
|
txa
|
||||||
|
adc _ctk_mouse_joyx+1
|
||||||
|
tax
|
||||||
|
|
||||||
|
; Limit the X coordinate to the bounding box
|
||||||
|
|
||||||
|
cpy XMin
|
||||||
|
sbc XMin+1
|
||||||
|
bpl @L1
|
||||||
|
ldy XMin
|
||||||
|
ldx XMin+1
|
||||||
|
jmp @L2
|
||||||
|
@L1: txa
|
||||||
|
|
||||||
|
cpy XMax
|
||||||
|
sbc XMax+1
|
||||||
|
bmi @L2
|
||||||
|
ldy XMax
|
||||||
|
ldx XMax+1
|
||||||
|
@L2: sty _ctk_mouse_joyx
|
||||||
|
stx _ctk_mouse_joyx+1
|
||||||
|
; Calculate the Y movement vector
|
||||||
|
|
||||||
|
lda SID_ADConv2 ; Get mouse Y movement
|
||||||
|
ldy OldPotY
|
||||||
|
jsr MoveCheck ; Calculate movement
|
||||||
|
sty OldPotY
|
||||||
|
|
||||||
|
; Calculate the new Y coordinate (--> a/y)
|
||||||
|
|
||||||
|
sta OldValue
|
||||||
|
lda _ctk_mouse_joyy
|
||||||
|
sub OldValue
|
||||||
|
tay
|
||||||
|
stx OldValue
|
||||||
|
lda _ctk_mouse_joyy+1
|
||||||
|
sbc OldValue
|
||||||
|
tax
|
||||||
|
|
||||||
|
cpy YMin
|
||||||
|
sbc YMin+1
|
||||||
|
bpl @L3
|
||||||
|
ldy YMin
|
||||||
|
ldx YMin+1
|
||||||
|
jmp @L4
|
||||||
|
@L3: txa
|
||||||
|
|
||||||
|
cpy YMax
|
||||||
|
sbc YMax+1
|
||||||
|
bmi @L4
|
||||||
|
ldy YMax
|
||||||
|
ldx YMax+1
|
||||||
|
@L4: sty _ctk_mouse_joyy
|
||||||
|
stx _ctk_mouse_joyy+1
|
||||||
|
|
||||||
|
;; Get mouse button
|
||||||
|
lda #$7F
|
||||||
|
sta CIA1_PRA
|
||||||
|
lda CIA1_PRB ; Read joystick #0
|
||||||
|
ldx #0
|
||||||
|
and #$1F
|
||||||
|
eor #$1F
|
||||||
|
|
||||||
|
ora _ctk_mouse_firebutton
|
||||||
|
sta _ctk_mouse_firebutton
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta CIA1_PRA
|
||||||
|
sta CIA1_DDRB
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
48
platform/c64/ctk/ctk-mouse-asm.S
Normal file
48
platform/c64/ctk/ctk-mouse-asm.S
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; The 1351 mouse code was taken from the CC65 libraries,
|
||||||
|
;; written by Ullrich von Bassewitz
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
.macpack generic
|
||||||
|
|
||||||
|
.import _ctk_mouse_joyx, _ctk_mouse_joyy
|
||||||
|
.import _ctk_mouse_firebutton
|
||||||
|
.export _ctk_mouse_asm_irq
|
||||||
|
.import _ctk_mouse_joy, _ctk_mouse_1351
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_mouse_asm_irq:
|
||||||
|
lda #0
|
||||||
|
sta _ctk_mouse_firebutton
|
||||||
|
|
||||||
|
jsr _ctk_mouse_joy
|
||||||
|
;; jsr_ctk_mouse_1351
|
||||||
|
|
||||||
|
; lda _ctk_mouse_joybutton
|
||||||
|
; ora _ctk_mouse_1351button
|
||||||
|
; sta _ctk_mouse_firebutton
|
||||||
|
|
||||||
|
lda _ctk_mouse_joyy
|
||||||
|
clc
|
||||||
|
adc #$32
|
||||||
|
sta $d001
|
||||||
|
sta $d003
|
||||||
|
|
||||||
|
lda _ctk_mouse_joyx
|
||||||
|
clc
|
||||||
|
adc #$18
|
||||||
|
sta $d000
|
||||||
|
sta $d002
|
||||||
|
lda #0
|
||||||
|
adc _ctk_mouse_joyx+1
|
||||||
|
and #1
|
||||||
|
beq :+
|
||||||
|
lda #3
|
||||||
|
:
|
||||||
|
sta $d010
|
||||||
|
jmp $ea31
|
135
platform/c64/ctk/ctk-mouse-joy.S
Normal file
135
platform/c64/ctk/ctk-mouse-joy.S
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
.macpack generic
|
||||||
|
|
||||||
|
.import _ctk_mouse_joyx, _ctk_mouse_joyy
|
||||||
|
.import _ctk_mouse_firebutton
|
||||||
|
.export _ctk_mouse_joy
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.bss
|
||||||
|
lastjoydy: .res 1
|
||||||
|
lastjoydx: .res 1
|
||||||
|
joydycnt: .res 1
|
||||||
|
joydxcnt: .res 1
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.code
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_ctk_mouse_joy:
|
||||||
|
ldy $dc02
|
||||||
|
lda #0
|
||||||
|
sta $dc02
|
||||||
|
lda $dc00
|
||||||
|
sty $dc02
|
||||||
|
ldy #0
|
||||||
|
ldx #0
|
||||||
|
lsr
|
||||||
|
bcs nodey
|
||||||
|
dey
|
||||||
|
nodey:
|
||||||
|
lsr
|
||||||
|
bcs noiny
|
||||||
|
iny
|
||||||
|
noiny:
|
||||||
|
lsr
|
||||||
|
bcs nodex
|
||||||
|
dex
|
||||||
|
nodex:
|
||||||
|
lsr
|
||||||
|
bcs noinx
|
||||||
|
inx
|
||||||
|
noinx:
|
||||||
|
and #1
|
||||||
|
eor #1
|
||||||
|
ora _ctk_mouse_firebutton
|
||||||
|
sta _ctk_mouse_firebutton
|
||||||
|
|
||||||
|
cpy lastjoydy
|
||||||
|
sty lastjoydy
|
||||||
|
bne noydy
|
||||||
|
tya
|
||||||
|
pha
|
||||||
|
inc joydycnt
|
||||||
|
lda joydycnt
|
||||||
|
cmp #$1f
|
||||||
|
bmi nostajoydycnt
|
||||||
|
lda #$20
|
||||||
|
sta joydycnt
|
||||||
|
nostajoydycnt:
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
asldeyloop:
|
||||||
|
asl
|
||||||
|
dey
|
||||||
|
bpl asldeyloop
|
||||||
|
tay
|
||||||
|
jmp ydy
|
||||||
|
noydy:
|
||||||
|
lda #0
|
||||||
|
sta joydycnt
|
||||||
|
ydy:
|
||||||
|
|
||||||
|
tya
|
||||||
|
clc
|
||||||
|
adc _ctk_mouse_joyy
|
||||||
|
|
||||||
|
cmp #240
|
||||||
|
bcc :+
|
||||||
|
lda #0
|
||||||
|
:
|
||||||
|
|
||||||
|
cmp #200
|
||||||
|
bcc :+
|
||||||
|
lda #199
|
||||||
|
:
|
||||||
|
sta _ctk_mouse_joyy
|
||||||
|
|
||||||
|
cpx lastjoydx
|
||||||
|
stx lastjoydx
|
||||||
|
bne noxdx
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
inc joydxcnt
|
||||||
|
lda joydxcnt
|
||||||
|
cmp #$1f
|
||||||
|
bmi nostajoydxcnt
|
||||||
|
lda #$20
|
||||||
|
sta joydxcnt
|
||||||
|
nostajoydxcnt:
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
asldexloop:
|
||||||
|
asl
|
||||||
|
dex
|
||||||
|
bpl asldexloop
|
||||||
|
tax
|
||||||
|
jmp xdx
|
||||||
|
noxdx:
|
||||||
|
lda #0
|
||||||
|
sta joydxcnt
|
||||||
|
xdx:
|
||||||
|
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
adc _ctk_mouse_joyx
|
||||||
|
sta _ctk_mouse_joyx
|
||||||
|
php
|
||||||
|
lda #$ff
|
||||||
|
cpx #0
|
||||||
|
bmi nolda02
|
||||||
|
lda #0
|
||||||
|
nolda02:
|
||||||
|
plp
|
||||||
|
adc _ctk_mouse_joyx+1
|
||||||
|
sta _ctk_mouse_joyx+1
|
||||||
|
rts
|
245
platform/c64/lib/mtarch-asm.S
Normal file
245
platform/c64/lib/mtarch-asm.S
Normal file
|
@ -0,0 +1,245 @@
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.importzp ptr1
|
||||||
|
.importzp sp
|
||||||
|
.import __ZP_START__
|
||||||
|
|
||||||
|
|
||||||
|
.import _mtarch_asm_threadstack
|
||||||
|
.import _mtarch_asm_threadsp
|
||||||
|
.import _mtarch_asm_threadspreg
|
||||||
|
.import _mtarch_asm_threadzp
|
||||||
|
|
||||||
|
.export _mtarch_asm_exec
|
||||||
|
.export _mtarch_yield
|
||||||
|
.export _mtarch_asm_start
|
||||||
|
.export _mtarch_pstart, _mtarch_pstop
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.bss
|
||||||
|
kernelsp: .res 2
|
||||||
|
kernelspreg: .res 1
|
||||||
|
|
||||||
|
oldirq: .res 2
|
||||||
|
|
||||||
|
zpsize = 32
|
||||||
|
.code
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; Switch to thread defined by threadsp, threadstack and threadspreg.
|
||||||
|
;; The kernel stack is swapped onto the threadstack, and the
|
||||||
|
;; sp and spreg are saved to the local variables "kernelsp" and
|
||||||
|
;; "kernelspreg". Also, the zeropage variables are saved.
|
||||||
|
|
||||||
|
_mtarch_asm_exec:
|
||||||
|
sei
|
||||||
|
;; Save current stack pointer
|
||||||
|
lda sp
|
||||||
|
sta kernelsp
|
||||||
|
lda sp+1
|
||||||
|
sta kernelsp+1
|
||||||
|
|
||||||
|
tsx
|
||||||
|
stx kernelspreg
|
||||||
|
|
||||||
|
lda _mtarch_asm_threadzp
|
||||||
|
sta ptr1
|
||||||
|
lda _mtarch_asm_threadzp+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
:
|
||||||
|
lda <__ZP_START__,y
|
||||||
|
tax
|
||||||
|
lda (ptr1),y
|
||||||
|
sta <__ZP_START__,y
|
||||||
|
txa
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy #zpsize
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda _mtarch_asm_threadstack
|
||||||
|
sta ptr1
|
||||||
|
lda _mtarch_asm_threadstack+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy kernelspreg ; determine the smallest of the two stack pointers,
|
||||||
|
cpy _mtarch_asm_threadspreg ; as we only need to swap the used part of the stack
|
||||||
|
bcc :+
|
||||||
|
ldy _mtarch_asm_threadspreg
|
||||||
|
|
||||||
|
:
|
||||||
|
lda $0100,y
|
||||||
|
tax
|
||||||
|
lda (ptr1),y
|
||||||
|
sta $0100,y
|
||||||
|
txa
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda _mtarch_asm_threadsp
|
||||||
|
sta sp
|
||||||
|
lda _mtarch_asm_threadsp+1
|
||||||
|
sta sp+1
|
||||||
|
|
||||||
|
ldx _mtarch_asm_threadspreg
|
||||||
|
txs
|
||||||
|
|
||||||
|
; jsr _mtarch_pstart
|
||||||
|
|
||||||
|
lda $0314
|
||||||
|
sta oldirq
|
||||||
|
lda $0315
|
||||||
|
sta oldirq+1
|
||||||
|
|
||||||
|
lda #<irq
|
||||||
|
sta $0314
|
||||||
|
lda #>irq
|
||||||
|
sta $0315
|
||||||
|
|
||||||
|
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
|
||||||
|
rti
|
||||||
|
|
||||||
|
;; Switch from thread defined by threadsp, threadstack and threadspreg.
|
||||||
|
;; The kernel stack is swapped back from the threadstack, and the
|
||||||
|
;; sp and spreg are restored from the local variables "kernelsp" and
|
||||||
|
;; "kernelspreg".
|
||||||
|
yield:
|
||||||
|
sei
|
||||||
|
lda sp
|
||||||
|
sta _mtarch_asm_threadsp
|
||||||
|
lda sp+1
|
||||||
|
sta _mtarch_asm_threadsp+1
|
||||||
|
|
||||||
|
tsx
|
||||||
|
stx _mtarch_asm_threadspreg
|
||||||
|
|
||||||
|
lda _mtarch_asm_threadzp
|
||||||
|
sta ptr1
|
||||||
|
lda _mtarch_asm_threadzp+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy kernelspreg ; determine the smallest of the two stack pointers,
|
||||||
|
cpy _mtarch_asm_threadspreg ; as we only need to swap the used part of the stack
|
||||||
|
bcc :+
|
||||||
|
ldy _mtarch_asm_threadspreg
|
||||||
|
|
||||||
|
:
|
||||||
|
lda <__ZP_START__,y
|
||||||
|
tax
|
||||||
|
lda (ptr1),y
|
||||||
|
sta <__ZP_START__,y
|
||||||
|
txa
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy #zpsize
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda _mtarch_asm_threadstack
|
||||||
|
sta ptr1
|
||||||
|
lda _mtarch_asm_threadstack+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
:
|
||||||
|
lda $0100,y
|
||||||
|
tax
|
||||||
|
lda (ptr1),y
|
||||||
|
sta $0100,y
|
||||||
|
txa
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda kernelsp
|
||||||
|
sta sp
|
||||||
|
lda kernelsp+1
|
||||||
|
sta sp+1
|
||||||
|
|
||||||
|
ldx kernelspreg
|
||||||
|
txs
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; Simulate an IRQ by pushing CPU status and CPu registers
|
||||||
|
;; onto the stack. Then call the yield function to yield the
|
||||||
|
;; process.
|
||||||
|
_mtarch_yield:
|
||||||
|
php
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
tya
|
||||||
|
pha
|
||||||
|
|
||||||
|
tsx
|
||||||
|
|
||||||
|
; the rts adds 1 to the PC
|
||||||
|
; saved on the stack. We want
|
||||||
|
lda $0105,x ; the stack to look like is would
|
||||||
|
clc ; do inside of an interrupt.
|
||||||
|
adc #1 ; (this is what the 'rts' does,
|
||||||
|
sta $0105,x ; but not the 'rti')
|
||||||
|
lda $0106,x
|
||||||
|
adc #0
|
||||||
|
sta $0106,x
|
||||||
|
|
||||||
|
|
||||||
|
jmp yield
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_mtarch_asm_start:
|
||||||
|
lda _mtarch_asm_threadzp
|
||||||
|
sta ptr1
|
||||||
|
lda _mtarch_asm_threadzp+1
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
:
|
||||||
|
lda <__ZP_START__,y
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy #zpsize
|
||||||
|
bne :-
|
||||||
|
rts
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
irq:
|
||||||
|
lda oldirq
|
||||||
|
sta $0314
|
||||||
|
lda oldirq+1
|
||||||
|
sta $0315
|
||||||
|
jmp yield
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;; Setup preemption IRQ
|
||||||
|
_mtarch_pstart:
|
||||||
|
sei
|
||||||
|
lda $0314
|
||||||
|
sta oldirq
|
||||||
|
lda $0315
|
||||||
|
sta oldirq+1
|
||||||
|
|
||||||
|
lda #<irq
|
||||||
|
sta $0314
|
||||||
|
lda #>irq
|
||||||
|
sta $0315
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
_mtarch_pstop:
|
||||||
|
sei
|
||||||
|
lda oldirq
|
||||||
|
sta $0314
|
||||||
|
lda oldirq+1
|
||||||
|
sta $0315
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
7
platform/c64/lib/save-driveunit.S
Normal file
7
platform/c64/lib/save-driveunit.S
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.import __curunit
|
||||||
|
.constructor saveunit, 32
|
||||||
|
.code
|
||||||
|
saveunit:
|
||||||
|
lda $ba
|
||||||
|
sta __curunit
|
||||||
|
rts
|
505
platform/c64/loader/c64-dio-asm.S
Normal file
505
platform/c64/loader/c64-dio-asm.S
Normal file
|
@ -0,0 +1,505 @@
|
||||||
|
|
||||||
|
|
||||||
|
.export _c64_dio_asm_init
|
||||||
|
.export _c64_dio_asm_read_block
|
||||||
|
.export _c64_dio_asm_write_block
|
||||||
|
|
||||||
|
.export _c64_dio_asm_track, _c64_dio_asm_sector
|
||||||
|
|
||||||
|
.export _c64_dio_asm_ptr
|
||||||
|
|
||||||
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
|
;; job code $80 read, $90 write
|
||||||
|
|
||||||
|
|
||||||
|
ciout = $ffa8
|
||||||
|
listen = $ffb1
|
||||||
|
second = $ff93
|
||||||
|
unlsn = $ffae
|
||||||
|
|
||||||
|
nbytes = 34
|
||||||
|
esc = $42
|
||||||
|
|
||||||
|
blockread = 1
|
||||||
|
blockwrite = 2
|
||||||
|
|
||||||
|
errok = 0
|
||||||
|
errerr = 1
|
||||||
|
|
||||||
|
.data
|
||||||
|
_c64_dio_asm_track: .byte 0
|
||||||
|
_c64_dio_asm_sector: .byte 0
|
||||||
|
_c64_dio_asm_ptr: .byte 0,0
|
||||||
|
|
||||||
|
.code
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_read_block:
|
||||||
|
|
||||||
|
lda #blockread
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
lda _c64_dio_asm_track
|
||||||
|
jsr send
|
||||||
|
lda _c64_dio_asm_sector
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
|
||||||
|
jsr recv
|
||||||
|
cmp #errok
|
||||||
|
bne readerr
|
||||||
|
|
||||||
|
lda _c64_dio_asm_ptr
|
||||||
|
sta ptr1
|
||||||
|
lda _c64_dio_asm_ptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
ldy #0
|
||||||
|
readl:
|
||||||
|
jsr recv
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bne readl
|
||||||
|
clc
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
readerr:
|
||||||
|
; sta $07c0
|
||||||
|
jsr recv
|
||||||
|
; sta $07c1
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_write_block:
|
||||||
|
|
||||||
|
lda #blockwrite
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
lda _c64_dio_asm_track
|
||||||
|
jsr send
|
||||||
|
lda _c64_dio_asm_sector
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
|
||||||
|
lda _c64_dio_asm_ptr
|
||||||
|
sta ptr1
|
||||||
|
lda _c64_dio_asm_ptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
ldy #0
|
||||||
|
writel:
|
||||||
|
lda (ptr1),y
|
||||||
|
jsr send
|
||||||
|
iny
|
||||||
|
bne writel
|
||||||
|
|
||||||
|
jsr recv
|
||||||
|
cmp #errok
|
||||||
|
bne writeerr
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
writeerr:
|
||||||
|
; sta $07c0
|
||||||
|
jsr recv
|
||||||
|
; sta $07c1
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_init:
|
||||||
|
sta devnr
|
||||||
|
lda #$00
|
||||||
|
sta drvmem
|
||||||
|
lda #$05
|
||||||
|
sta drvmem+1
|
||||||
|
|
||||||
|
lda #<drive
|
||||||
|
sta ptr1
|
||||||
|
lda #>drive
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
; lda devnr
|
||||||
|
; ldx #<icmd
|
||||||
|
; ldy #>icmd
|
||||||
|
; jsr drvcmd
|
||||||
|
; jsr unlsn
|
||||||
|
|
||||||
|
mwl:
|
||||||
|
lda devnr
|
||||||
|
ldx #<mwcmd
|
||||||
|
ldy #>mwcmd
|
||||||
|
jsr drvcmd
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr1),y
|
||||||
|
jsr ciout
|
||||||
|
iny
|
||||||
|
cpy #nbytes
|
||||||
|
bne *-8
|
||||||
|
|
||||||
|
jsr unlsn
|
||||||
|
|
||||||
|
lda drvmem
|
||||||
|
clc
|
||||||
|
adc #nbytes
|
||||||
|
sta drvmem
|
||||||
|
lda drvmem+1
|
||||||
|
adc #0
|
||||||
|
sta drvmem+1
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #nbytes
|
||||||
|
sta ptr1
|
||||||
|
tax
|
||||||
|
lda ptr1+1
|
||||||
|
adc #0
|
||||||
|
sta ptr1+1
|
||||||
|
cpx #<driveend
|
||||||
|
sbc #>driveend
|
||||||
|
bcc mwl
|
||||||
|
|
||||||
|
lda devnr
|
||||||
|
ldx #<mecmd
|
||||||
|
ldy #>mecmd
|
||||||
|
jsr drvcmd
|
||||||
|
jsr unlsn
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
drvcmd:
|
||||||
|
stx ptr2
|
||||||
|
sty ptr2+1
|
||||||
|
jsr listen
|
||||||
|
lda #$6f
|
||||||
|
jsr second
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr2),y
|
||||||
|
sta drvcmdcmp+1
|
||||||
|
inc ptr2
|
||||||
|
bne *+4
|
||||||
|
inc ptr2+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr2),y
|
||||||
|
jsr ciout
|
||||||
|
iny
|
||||||
|
drvcmdcmp: cpy #0
|
||||||
|
bne *-8
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
devnr: .byte 8
|
||||||
|
mwcmd: .byte 6
|
||||||
|
.byte $4d, $2d, $57
|
||||||
|
drvmem: .word $0500
|
||||||
|
.byte nbytes
|
||||||
|
.byte 0
|
||||||
|
mecmd: .byte 2
|
||||||
|
.byte $55, $33
|
||||||
|
.byte 0
|
||||||
|
;---------------------------------------
|
||||||
|
send:
|
||||||
|
|
||||||
|
sta ptr2
|
||||||
|
ldx #7
|
||||||
|
sendl:
|
||||||
|
lsr ptr2
|
||||||
|
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$df
|
||||||
|
ora #$10
|
||||||
|
bcc *+4
|
||||||
|
eor #$30
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
lda #$c0
|
||||||
|
bit $dd00
|
||||||
|
bne *-3
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$cf
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$c0
|
||||||
|
eor #$c0
|
||||||
|
bne *-7
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl sendl
|
||||||
|
|
||||||
|
ldx $d020
|
||||||
|
lda #1
|
||||||
|
sta $d020
|
||||||
|
stx $d020
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
recv:
|
||||||
|
ldx $d020
|
||||||
|
lda #0
|
||||||
|
sta $d020
|
||||||
|
stx $d020
|
||||||
|
|
||||||
|
ldx #7
|
||||||
|
recvl:
|
||||||
|
lda $dd00
|
||||||
|
and #$c0
|
||||||
|
eor #$c0
|
||||||
|
beq *-7
|
||||||
|
asl a
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$df
|
||||||
|
ora #$10
|
||||||
|
bcs *+4
|
||||||
|
eor #$30
|
||||||
|
sta $dd00
|
||||||
|
ror ptr2
|
||||||
|
|
||||||
|
lda #$c0
|
||||||
|
bit $dd00
|
||||||
|
beq *-3
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$cf
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl recvl
|
||||||
|
lda ptr2
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
|
||||||
|
;---------------------------------------
|
||||||
|
;the code residing in the drive:
|
||||||
|
;---------------------------------------
|
||||||
|
dtmp = $46
|
||||||
|
dtmp2 = $97
|
||||||
|
dbuf = $0300
|
||||||
|
dbufcmd = $00
|
||||||
|
dbuftrack = $06
|
||||||
|
dbufsect = $07
|
||||||
|
|
||||||
|
retries = 4
|
||||||
|
bretries = 2
|
||||||
|
;---------------------------------------
|
||||||
|
drive :
|
||||||
|
.org $0500
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cld
|
||||||
|
tsx
|
||||||
|
stx dstack
|
||||||
|
sei
|
||||||
|
jsr ledoff
|
||||||
|
|
||||||
|
drivel:
|
||||||
|
jsr dload
|
||||||
|
jsr ledoff
|
||||||
|
cli
|
||||||
|
jmp drivel
|
||||||
|
;---------------------------------------
|
||||||
|
ledon:
|
||||||
|
lda $1c00
|
||||||
|
ora #$08
|
||||||
|
sta $1c00
|
||||||
|
rts
|
||||||
|
ledoff:
|
||||||
|
lda $1c00
|
||||||
|
and #$f7
|
||||||
|
sta $1c00
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
drecv:
|
||||||
|
ldx #7
|
||||||
|
drecvl:
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
beq *-7
|
||||||
|
lsr a
|
||||||
|
lda #2
|
||||||
|
bcc *+4
|
||||||
|
lda #8
|
||||||
|
sta $1800
|
||||||
|
ror dtmp
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
eor #5
|
||||||
|
beq *-9
|
||||||
|
lda #0
|
||||||
|
sta $1800
|
||||||
|
dex
|
||||||
|
bpl drecvl
|
||||||
|
lda dtmp
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
atn:
|
||||||
|
ldx dstack
|
||||||
|
txs
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dsend:
|
||||||
|
sta dtmp
|
||||||
|
ldx #7
|
||||||
|
dsendl:
|
||||||
|
lsr dtmp
|
||||||
|
lda #2
|
||||||
|
bcs *+4
|
||||||
|
lda #8
|
||||||
|
sta $1800
|
||||||
|
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
eor #5
|
||||||
|
bne *-9
|
||||||
|
|
||||||
|
sta $1800
|
||||||
|
|
||||||
|
lda #5
|
||||||
|
bit $1800
|
||||||
|
bne *-3
|
||||||
|
dex
|
||||||
|
bpl dsendl
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dload:
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dcmd
|
||||||
|
|
||||||
|
jsr ledon
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dbuftrack
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dbufsect
|
||||||
|
|
||||||
|
lda dcmd
|
||||||
|
cmp #blockwrite
|
||||||
|
bne dblockread
|
||||||
|
dblockwrite:
|
||||||
|
ldy #0
|
||||||
|
drecvpl:
|
||||||
|
jsr drecv
|
||||||
|
sta dbuf,y
|
||||||
|
iny
|
||||||
|
bne drecvpl
|
||||||
|
|
||||||
|
jmp dputsect
|
||||||
|
|
||||||
|
dblockread:
|
||||||
|
jsr dgetsect
|
||||||
|
|
||||||
|
dsendpage:
|
||||||
|
ldy #0
|
||||||
|
dsendpl:
|
||||||
|
lda dbuf,y
|
||||||
|
jsr dsend
|
||||||
|
iny
|
||||||
|
bne dsendpl
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dgetsect:
|
||||||
|
; stx dbuftrack
|
||||||
|
; sty dbufsect
|
||||||
|
ldx #retries
|
||||||
|
dgetsectl:
|
||||||
|
lda #$80
|
||||||
|
sta dbufcmd
|
||||||
|
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
sei
|
||||||
|
cmp #1
|
||||||
|
beq dgsnoerr
|
||||||
|
|
||||||
|
cpx #0
|
||||||
|
beq dgsserr
|
||||||
|
dex
|
||||||
|
cpx #bretries
|
||||||
|
bcs dgetsectl
|
||||||
|
pha
|
||||||
|
lda #$c0
|
||||||
|
sta dbufcmd
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
pla
|
||||||
|
cpx #0
|
||||||
|
bne dgetsectl
|
||||||
|
|
||||||
|
dgsserr:
|
||||||
|
pha
|
||||||
|
lda #errerr
|
||||||
|
jsr dsend
|
||||||
|
pla
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
dgsnoerr:
|
||||||
|
lda #errok
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dputsect:
|
||||||
|
; stx dbuftrack
|
||||||
|
; sty dbufsect
|
||||||
|
ldx #retries
|
||||||
|
dputsectl:
|
||||||
|
lda #$90
|
||||||
|
sta dbufcmd
|
||||||
|
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
sei
|
||||||
|
cmp #1
|
||||||
|
beq dpsnoerr
|
||||||
|
|
||||||
|
cpx #0
|
||||||
|
beq dpsserr
|
||||||
|
dex
|
||||||
|
cpx #bretries
|
||||||
|
bcs dputsectl
|
||||||
|
pha
|
||||||
|
lda #$c0
|
||||||
|
sta dbufcmd
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
pla
|
||||||
|
cpx #0
|
||||||
|
bne dputsectl
|
||||||
|
|
||||||
|
dpsserr:
|
||||||
|
pha
|
||||||
|
lda #errerr
|
||||||
|
jsr dsend
|
||||||
|
pla
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
dpsnoerr:
|
||||||
|
lda #errok
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
led: .byte 0,0
|
||||||
|
dstack: .byte 0
|
||||||
|
dcmd: .byte 0
|
||||||
|
.RELOC
|
||||||
|
driveend:
|
||||||
|
|
571
platform/c64/loader/cfs-1541-asm.S
Normal file
571
platform/c64/loader/cfs-1541-asm.S
Normal file
|
@ -0,0 +1,571 @@
|
||||||
|
;;
|
||||||
|
;;
|
||||||
|
;; 1541 CFS implementation
|
||||||
|
;;
|
||||||
|
;; Architecture:
|
||||||
|
;;
|
||||||
|
;; Functionality split between C64 and 1541: 1541 performs
|
||||||
|
;; directory lookup and finding files. 1541 communicates track/sector
|
||||||
|
;; address of file, C64 requests data to be read from track/sector.
|
||||||
|
;;
|
||||||
|
;; Example: reading directory
|
||||||
|
;;
|
||||||
|
;; C64: DIR
|
||||||
|
;; 1541: directory entries in CFS format
|
||||||
|
;;
|
||||||
|
;; Example: opening file
|
||||||
|
;;
|
||||||
|
;; C64: FILE filename
|
||||||
|
;; 1541: track/sector
|
||||||
|
;;
|
||||||
|
;; Example: reading file
|
||||||
|
;;
|
||||||
|
;; C64: track/sector, length
|
||||||
|
;; 1541: length, data, track/sector
|
||||||
|
|
||||||
|
|
||||||
|
.export _c64_dio_asm_init
|
||||||
|
.export _c64_dio_asm_read_block
|
||||||
|
.export _c64_dio_asm_write_block
|
||||||
|
|
||||||
|
.export _c64_dio_asm_track, _c64_dio_asm_sector
|
||||||
|
|
||||||
|
.export _c64_dio_asm_ptr
|
||||||
|
|
||||||
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
|
;; job code $80 read, $90 write
|
||||||
|
|
||||||
|
|
||||||
|
ciout = $ffa8
|
||||||
|
listen = $ffb1
|
||||||
|
second = $ff93
|
||||||
|
unlsn = $ffae
|
||||||
|
|
||||||
|
nbytes = 34
|
||||||
|
esc = $42
|
||||||
|
|
||||||
|
blockread = 1
|
||||||
|
blockwrite = 2
|
||||||
|
|
||||||
|
errok = 0
|
||||||
|
errerr = 1
|
||||||
|
|
||||||
|
.data
|
||||||
|
_c64_dio_asm_track: .byte 0
|
||||||
|
_c64_dio_asm_sector: .byte 0
|
||||||
|
_c64_dio_asm_ptr: .byte 0,0
|
||||||
|
|
||||||
|
.code
|
||||||
|
;---------------------------------------
|
||||||
|
_cfs_1541_read:
|
||||||
|
;; First send READ command to drive
|
||||||
|
|
||||||
|
lda #READ_CMD
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
;; If drive do not respond we must download drive code
|
||||||
|
cmp #ERR_NOT_RESPONDING
|
||||||
|
bne notload
|
||||||
|
|
||||||
|
jsr download
|
||||||
|
lda #read
|
||||||
|
jsr send
|
||||||
|
notload:
|
||||||
|
;; Send file descriptor and number of bytes to read
|
||||||
|
lda _cfs_1541_fd
|
||||||
|
jsr send
|
||||||
|
lda _cfs_1541_bytes
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
lda _cfs_1541_ptr
|
||||||
|
sta ptr1
|
||||||
|
lda _cfs_1541_ptr + 1
|
||||||
|
sta ptr1 + 1
|
||||||
|
|
||||||
|
;; Read bytes from drive
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
:
|
||||||
|
jsr recv
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
cpy _cfs_1541_bytes
|
||||||
|
bne -
|
||||||
|
|
||||||
|
;; Read the number of bytes that were actually read from the file
|
||||||
|
jsr recv
|
||||||
|
|
||||||
|
;; Return the number of bytes read
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_read_block:
|
||||||
|
|
||||||
|
lda #BLOCKREAD_CMD
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
lda _c64_dio_asm_track
|
||||||
|
jsr send
|
||||||
|
lda _c64_dio_asm_sector
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
|
||||||
|
jsr recv
|
||||||
|
cmp #errok
|
||||||
|
bne readerr
|
||||||
|
|
||||||
|
lda _c64_dio_asm_ptr
|
||||||
|
sta ptr1
|
||||||
|
lda _c64_dio_asm_ptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
ldy #0
|
||||||
|
readl:
|
||||||
|
jsr recv
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bne readl
|
||||||
|
clc
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
readerr:
|
||||||
|
; sta $07c0
|
||||||
|
jsr recv
|
||||||
|
; sta $07c1
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_write_block:
|
||||||
|
|
||||||
|
lda #blockwrite
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
lda _c64_dio_asm_track
|
||||||
|
jsr send
|
||||||
|
lda _c64_dio_asm_sector
|
||||||
|
jsr send
|
||||||
|
|
||||||
|
|
||||||
|
lda _c64_dio_asm_ptr
|
||||||
|
sta ptr1
|
||||||
|
lda _c64_dio_asm_ptr+1
|
||||||
|
sta ptr1+1
|
||||||
|
ldy #0
|
||||||
|
writel:
|
||||||
|
lda (ptr1),y
|
||||||
|
jsr send
|
||||||
|
iny
|
||||||
|
bne writel
|
||||||
|
|
||||||
|
jsr recv
|
||||||
|
cmp #errok
|
||||||
|
bne writeerr
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
writeerr:
|
||||||
|
; sta $07c0
|
||||||
|
jsr recv
|
||||||
|
; sta $07c1
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
_c64_dio_asm_init:
|
||||||
|
sta devnr
|
||||||
|
lda #$00
|
||||||
|
sta drvmem
|
||||||
|
lda #$05
|
||||||
|
sta drvmem+1
|
||||||
|
|
||||||
|
lda #<drive
|
||||||
|
sta ptr1
|
||||||
|
lda #>drive
|
||||||
|
sta ptr1+1
|
||||||
|
|
||||||
|
; lda devnr
|
||||||
|
; ldx #<icmd
|
||||||
|
; ldy #>icmd
|
||||||
|
; jsr drvcmd
|
||||||
|
; jsr unlsn
|
||||||
|
|
||||||
|
mwl:
|
||||||
|
lda devnr
|
||||||
|
ldx #<mwcmd
|
||||||
|
ldy #>mwcmd
|
||||||
|
jsr drvcmd
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr1),y
|
||||||
|
jsr ciout
|
||||||
|
iny
|
||||||
|
cpy #nbytes
|
||||||
|
bne *-8
|
||||||
|
|
||||||
|
jsr unlsn
|
||||||
|
|
||||||
|
lda drvmem
|
||||||
|
clc
|
||||||
|
adc #nbytes
|
||||||
|
sta drvmem
|
||||||
|
lda drvmem+1
|
||||||
|
adc #0
|
||||||
|
sta drvmem+1
|
||||||
|
|
||||||
|
lda ptr1
|
||||||
|
clc
|
||||||
|
adc #nbytes
|
||||||
|
sta ptr1
|
||||||
|
tax
|
||||||
|
lda ptr1+1
|
||||||
|
adc #0
|
||||||
|
sta ptr1+1
|
||||||
|
cpx #<driveend
|
||||||
|
sbc #>driveend
|
||||||
|
bcc mwl
|
||||||
|
|
||||||
|
lda devnr
|
||||||
|
ldx #<mecmd
|
||||||
|
ldy #>mecmd
|
||||||
|
jsr drvcmd
|
||||||
|
jsr unlsn
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
drvcmd:
|
||||||
|
stx ptr2
|
||||||
|
sty ptr2+1
|
||||||
|
jsr listen
|
||||||
|
lda #$6f
|
||||||
|
jsr second
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr2),y
|
||||||
|
sta drvcmdcmp+1
|
||||||
|
inc ptr2
|
||||||
|
bne *+4
|
||||||
|
inc ptr2+1
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (ptr2),y
|
||||||
|
jsr ciout
|
||||||
|
iny
|
||||||
|
drvcmdcmp: cpy #0
|
||||||
|
bne *-8
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
devnr: .byte 8
|
||||||
|
mwcmd: .byte 6
|
||||||
|
.byte $4d, $2d, $57
|
||||||
|
drvmem: .word $0500
|
||||||
|
.byte nbytes
|
||||||
|
.byte 0
|
||||||
|
mecmd: .byte 2
|
||||||
|
.byte $55, $33
|
||||||
|
.byte 0
|
||||||
|
;---------------------------------------
|
||||||
|
send:
|
||||||
|
|
||||||
|
sta ptr2
|
||||||
|
ldx #7
|
||||||
|
sendl:
|
||||||
|
lsr ptr2
|
||||||
|
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$df
|
||||||
|
ora #$10
|
||||||
|
bcc *+4
|
||||||
|
eor #$30
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
lda #$c0
|
||||||
|
bit $dd00
|
||||||
|
bne *-3
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$cf
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$c0
|
||||||
|
eor #$c0
|
||||||
|
bne *-7
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl sendl
|
||||||
|
|
||||||
|
ldx $d020
|
||||||
|
lda #1
|
||||||
|
sta $d020
|
||||||
|
stx $d020
|
||||||
|
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
recv:
|
||||||
|
ldx $d020
|
||||||
|
lda #0
|
||||||
|
sta $d020
|
||||||
|
stx $d020
|
||||||
|
|
||||||
|
ldx #7
|
||||||
|
recvl:
|
||||||
|
lda $dd00
|
||||||
|
and #$c0
|
||||||
|
eor #$c0
|
||||||
|
beq *-7
|
||||||
|
asl a
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$df
|
||||||
|
ora #$10
|
||||||
|
bcs *+4
|
||||||
|
eor #$30
|
||||||
|
sta $dd00
|
||||||
|
ror ptr2
|
||||||
|
|
||||||
|
lda #$c0
|
||||||
|
bit $dd00
|
||||||
|
beq *-3
|
||||||
|
|
||||||
|
lda $dd00
|
||||||
|
and #$cf
|
||||||
|
sta $dd00
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl recvl
|
||||||
|
lda ptr2
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
|
||||||
|
;---------------------------------------
|
||||||
|
;the code residing in the drive:
|
||||||
|
;---------------------------------------
|
||||||
|
dtmp = $46
|
||||||
|
dtmp2 = $97
|
||||||
|
dbuf = $0300
|
||||||
|
dbufcmd = $00
|
||||||
|
dbuftrack = $06
|
||||||
|
dbufsect = $07
|
||||||
|
|
||||||
|
retries = 10
|
||||||
|
bretries = 2
|
||||||
|
;---------------------------------------
|
||||||
|
drive :
|
||||||
|
.org $0500
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cld
|
||||||
|
tsx
|
||||||
|
stx dstack
|
||||||
|
sei
|
||||||
|
jsr ledoff
|
||||||
|
|
||||||
|
drivel:
|
||||||
|
jsr dload
|
||||||
|
jsr ledoff
|
||||||
|
cli
|
||||||
|
jmp drivel
|
||||||
|
;---------------------------------------
|
||||||
|
ledon:
|
||||||
|
lda $1c00
|
||||||
|
ora #$08
|
||||||
|
sta $1c00
|
||||||
|
rts
|
||||||
|
ledoff:
|
||||||
|
lda $1c00
|
||||||
|
and #$f7
|
||||||
|
sta $1c00
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
drecv:
|
||||||
|
ldx #7
|
||||||
|
drecvl:
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
beq *-7
|
||||||
|
lsr a
|
||||||
|
lda #2
|
||||||
|
bcc *+4
|
||||||
|
lda #8
|
||||||
|
sta $1800
|
||||||
|
ror dtmp
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
eor #5
|
||||||
|
beq *-9
|
||||||
|
lda #0
|
||||||
|
sta $1800
|
||||||
|
dex
|
||||||
|
bpl drecvl
|
||||||
|
lda dtmp
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
atn:
|
||||||
|
ldx dstack
|
||||||
|
txs
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dsend:
|
||||||
|
sta dtmp
|
||||||
|
ldx #7
|
||||||
|
dsendl:
|
||||||
|
lsr dtmp
|
||||||
|
lda #2
|
||||||
|
bcs *+4
|
||||||
|
lda #8
|
||||||
|
sta $1800
|
||||||
|
|
||||||
|
lda $1800
|
||||||
|
bmi atn
|
||||||
|
and #5
|
||||||
|
eor #5
|
||||||
|
bne *-9
|
||||||
|
|
||||||
|
sta $1800
|
||||||
|
|
||||||
|
lda #5
|
||||||
|
bit $1800
|
||||||
|
bne *-3
|
||||||
|
dex
|
||||||
|
bpl dsendl
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dload:
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dcmd
|
||||||
|
|
||||||
|
jsr ledon
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dbuftrack
|
||||||
|
|
||||||
|
jsr drecv
|
||||||
|
sta dbufsect
|
||||||
|
|
||||||
|
lda dcmd
|
||||||
|
cmp #blockwrite
|
||||||
|
bne dblockread
|
||||||
|
dblockwrite:
|
||||||
|
ldy #0
|
||||||
|
drecvpl:
|
||||||
|
jsr drecv
|
||||||
|
sta dbuf,y
|
||||||
|
iny
|
||||||
|
bne drecvpl
|
||||||
|
|
||||||
|
jmp dputsect
|
||||||
|
|
||||||
|
dblockread:
|
||||||
|
jsr dgetsect
|
||||||
|
|
||||||
|
dsendpage:
|
||||||
|
ldy #0
|
||||||
|
dsendpl:
|
||||||
|
lda dbuf,y
|
||||||
|
jsr dsend
|
||||||
|
iny
|
||||||
|
bne dsendpl
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dgetsect:
|
||||||
|
; stx dbuftrack
|
||||||
|
; sty dbufsect
|
||||||
|
ldx #retries
|
||||||
|
dgetsectl:
|
||||||
|
lda #$80
|
||||||
|
sta dbufcmd
|
||||||
|
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
sei
|
||||||
|
cmp #1
|
||||||
|
beq dgsnoerr
|
||||||
|
|
||||||
|
cpx #0
|
||||||
|
beq dgsserr
|
||||||
|
dex
|
||||||
|
cpx #bretries
|
||||||
|
bcs dgetsectl
|
||||||
|
pha
|
||||||
|
lda #$c0
|
||||||
|
sta dbufcmd
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
pla
|
||||||
|
cpx #0
|
||||||
|
bne dgetsectl
|
||||||
|
|
||||||
|
dgsserr:
|
||||||
|
pha
|
||||||
|
lda #errerr
|
||||||
|
jsr dsend
|
||||||
|
pla
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
dgsnoerr:
|
||||||
|
lda #errok
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
dputsect:
|
||||||
|
; stx dbuftrack
|
||||||
|
; sty dbufsect
|
||||||
|
ldx #retries
|
||||||
|
dputsectl:
|
||||||
|
lda #$90
|
||||||
|
sta dbufcmd
|
||||||
|
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
sei
|
||||||
|
cmp #1
|
||||||
|
beq dpsnoerr
|
||||||
|
|
||||||
|
cpx #0
|
||||||
|
beq dpsserr
|
||||||
|
dex
|
||||||
|
cpx #bretries
|
||||||
|
bcs dputsectl
|
||||||
|
pha
|
||||||
|
lda #$c0
|
||||||
|
sta dbufcmd
|
||||||
|
cli
|
||||||
|
:
|
||||||
|
lda dbufcmd
|
||||||
|
bmi :-
|
||||||
|
pla
|
||||||
|
cpx #0
|
||||||
|
bne dputsectl
|
||||||
|
|
||||||
|
dpsserr:
|
||||||
|
pha
|
||||||
|
lda #errerr
|
||||||
|
jsr dsend
|
||||||
|
pla
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
dpsnoerr:
|
||||||
|
lda #errok
|
||||||
|
jsr dsend
|
||||||
|
rts
|
||||||
|
;---------------------------------------
|
||||||
|
led: .byte 0,0
|
||||||
|
dstack: .byte 0
|
||||||
|
dcmd: .byte 0
|
||||||
|
.RELOC
|
||||||
|
driveend:
|
||||||
|
|
17
platform/c64/net/rrnet-drv-asm.S
Normal file
17
platform/c64/net/rrnet-drv-asm.S
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.export _cs8900a_rxtxreg
|
||||||
|
.export _cs8900a_txcmd
|
||||||
|
.export _cs8900a_txlen
|
||||||
|
.export _cs8900a_packetpp
|
||||||
|
.export _cs8900a_ppdata
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
_cs8900a_rxtxreg = $de08
|
||||||
|
_cs8900a_txcmd = $de0c
|
||||||
|
_cs8900a_txlen = $de0e
|
||||||
|
_cs8900a_packetpp = $de02
|
||||||
|
_cs8900a_ppdata = $de04
|
||||||
|
|
329
platform/c64/net/rs232silversurfer.S
Normal file
329
platform/c64/net/rs232silversurfer.S
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
;; The following code is written and is copyrighted by
|
||||||
|
;; Groepaz/Hitmen
|
||||||
|
|
||||||
|
;; Small changes by Adam Dunkels (renamed ss232 -> rs232)
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
; silver surfer polling mode driver for cc65
|
||||||
|
; - work from here to create a full featured driver with interupts.
|
||||||
|
; gpz fixed 20020828: fatal bug fixed in _rs232_params
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rs16550base = $de08
|
||||||
|
|
||||||
|
fifo_rxd = rs16550base+$00 ;8 (r)
|
||||||
|
fifo_txd = rs16550base+$00 ;8 (w)
|
||||||
|
|
||||||
|
fifo_dll = rs16550base+$00 ;8 (r/w)
|
||||||
|
fifo_dlm = rs16550base+$01 ;9 (r/w)
|
||||||
|
|
||||||
|
fifo_ier = rs16550base+$01 ;9
|
||||||
|
|
||||||
|
fifo_fcr = rs16550base+$02 ;a (w)
|
||||||
|
fifo_iir = rs16550base+$02 ;a (r)
|
||||||
|
fifo_lcr = rs16550base+$03 ;b
|
||||||
|
fifo_mcr = rs16550base+$04 ;c
|
||||||
|
fifo_lsr = rs16550base+$05 ;d
|
||||||
|
fifo_msr = rs16550base+$06 ;e (r)
|
||||||
|
fifo_scratch = rs16550base+$07 ;f (r/w)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.export _rs232_init
|
||||||
|
.export _rs232_done
|
||||||
|
.export _rs232_params
|
||||||
|
.export _rs232_put
|
||||||
|
.export _rs232_get
|
||||||
|
|
||||||
|
.importzp ptr1, ptr2
|
||||||
|
.import popa, popax
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
; Error codes. Beware: The codes must match the codes in the C header file
|
||||||
|
|
||||||
|
ErrNotInitialized = $01
|
||||||
|
ErrBaudTooFast = $02
|
||||||
|
ErrBaudNotAvail = $03
|
||||||
|
ErrNoData = $04
|
||||||
|
ErrOverflow = $05
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_init (char hacked);
|
||||||
|
;/* Initialize the serial port, install the interrupt handler. The parameter
|
||||||
|
; * has no effect for now and should be set to 0.
|
||||||
|
; */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
_rs232_init:
|
||||||
|
; enable ssurfer-port
|
||||||
|
lda $de01
|
||||||
|
ora #$01
|
||||||
|
sta $de01
|
||||||
|
|
||||||
|
; disable nmi's from ssurfer
|
||||||
|
lda #%00000000
|
||||||
|
sta fifo_ier
|
||||||
|
|
||||||
|
; activate dtr
|
||||||
|
lda #%00000001
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_done (void);
|
||||||
|
;/* Close the port, deinstall the interrupt hander. You MUST call this function
|
||||||
|
; * before terminating the program, otherwise the machine may crash later. If
|
||||||
|
; * in doubt, install an exit handler using atexit(). The function will do
|
||||||
|
; * nothing, if it was already called.
|
||||||
|
; */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rs232_done:
|
||||||
|
; disable nmi's from ssurfer
|
||||||
|
lda #%00000000
|
||||||
|
sta fifo_ier
|
||||||
|
|
||||||
|
; deactivate dtr
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
; disable ssurfer-port
|
||||||
|
lda $de01
|
||||||
|
and #$fe
|
||||||
|
sta $de01
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_params (unsigned char params, unsigned char parity);
|
||||||
|
;/* Set the port parameters. Use a combination of the #defined values above. */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
_rs232_baudrates:
|
||||||
|
|
||||||
|
.word (7372800 / ( 50 * 16))
|
||||||
|
.word (7372800 / ( 110 * 16))
|
||||||
|
.word (7372800 / ( 269 * 8))
|
||||||
|
.word (7372800 / ( 300 * 16))
|
||||||
|
.word (7372800 / ( 600 * 16))
|
||||||
|
.word (7372800 / ( 1200 * 16))
|
||||||
|
.word (7372800 / ( 2400 * 16))
|
||||||
|
.word (7372800 / ( 4800 * 16))
|
||||||
|
.word (7372800 / ( 9600 * 16))
|
||||||
|
.word (7372800 / ( 19200 * 16))
|
||||||
|
.word (7372800 / ( 38400 * 16))
|
||||||
|
.word (7372800 / ( 57600 * 16))
|
||||||
|
.word (7372800 / ( 115200 * 16))
|
||||||
|
.word (7372800 / ( 230400 * 16))
|
||||||
|
|
||||||
|
.bss
|
||||||
|
|
||||||
|
_rs232_tmp1:
|
||||||
|
.res 1
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
_rs232_params:
|
||||||
|
|
||||||
|
sta _rs232_tmp1 ; save parity
|
||||||
|
|
||||||
|
; reset fifo
|
||||||
|
lda #%10000111
|
||||||
|
sta fifo_fcr
|
||||||
|
|
||||||
|
; that delay thing really needed ?!
|
||||||
|
; (original datasheet mentions a delay here)
|
||||||
|
; ldy #$00
|
||||||
|
; dey
|
||||||
|
; bny *-1
|
||||||
|
|
||||||
|
; set dlab
|
||||||
|
lda #%10000011 ; we assmume 8n1
|
||||||
|
sta fifo_lcr
|
||||||
|
|
||||||
|
jsr popa
|
||||||
|
tay ; save param
|
||||||
|
|
||||||
|
; set baudrate
|
||||||
|
clc
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
lsr a
|
||||||
|
asl a
|
||||||
|
tax
|
||||||
|
lda _rs232_baudrates,x
|
||||||
|
sta fifo_dll
|
||||||
|
lda _rs232_baudrates+1,x
|
||||||
|
sta fifo_dlm
|
||||||
|
|
||||||
|
tya ; param
|
||||||
|
and #$0f
|
||||||
|
ora _rs232_tmp1 ; parity
|
||||||
|
|
||||||
|
; reset dlab
|
||||||
|
sta fifo_lcr
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
; check if byte available, returns AKKU=0 if none
|
||||||
|
|
||||||
|
ss_getlsr:
|
||||||
|
lda fifo_lsr
|
||||||
|
and #$01
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_get (char* b);
|
||||||
|
;/* Get a character from the serial port. If no characters are available, the
|
||||||
|
; * function will return RS_ERR_NO_DATA, so this is not a fatal error.
|
||||||
|
; */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
; get byte (non blocking, returns byte in A or CARRY=1 - error)
|
||||||
|
|
||||||
|
_rs232_get:
|
||||||
|
sta ptr1
|
||||||
|
stx ptr1+1
|
||||||
|
|
||||||
|
jsr ss_getlsr ; check if byte available
|
||||||
|
; bne sk32 ; yes
|
||||||
|
bne sk33 ; yes
|
||||||
|
|
||||||
|
; activate rts
|
||||||
|
lda #%00000011
|
||||||
|
sta fifo_mcr
|
||||||
|
sk32:
|
||||||
|
|
||||||
|
; deactivate rts
|
||||||
|
; lda #%00000001
|
||||||
|
; sta fifo_mcr
|
||||||
|
|
||||||
|
jsr ss_getlsr ; check if byte available
|
||||||
|
bne sk33 ; yes
|
||||||
|
|
||||||
|
; deactivate rts
|
||||||
|
lda #%00000001
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
lda #ErrNoData ; no data
|
||||||
|
ldx #0
|
||||||
|
rts
|
||||||
|
sk33:
|
||||||
|
; deactivate rts
|
||||||
|
lda #%00000001
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
; get byte
|
||||||
|
ldy #$00
|
||||||
|
lda fifo_rxd
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
lda #0 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_put (char b);
|
||||||
|
;/* Send a character via the serial port. There is a transmit buffer, but
|
||||||
|
; * transmitting is not done via interrupt. The function returns
|
||||||
|
; * RS_ERR_OVERFLOW if there is no space left in the transmit buffer.
|
||||||
|
; */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rs232_put:
|
||||||
|
tax
|
||||||
|
; transmit buf ready?
|
||||||
|
lda fifo_lsr
|
||||||
|
and #%00100000
|
||||||
|
bne @sk1
|
||||||
|
@sk2:
|
||||||
|
lda #ErrOverflow ; overflow
|
||||||
|
ldx #$00
|
||||||
|
rts
|
||||||
|
@sk1:
|
||||||
|
; reciever ready?
|
||||||
|
lda fifo_msr
|
||||||
|
and #%00010000
|
||||||
|
beq @sk2
|
||||||
|
|
||||||
|
stx fifo_txd
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_pause (void);
|
||||||
|
;/* Assert flow control and disable interrupts. */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rs232_pause:
|
||||||
|
; activate rts
|
||||||
|
lda #%00000011
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_unpause (void);
|
||||||
|
;/* Re-enable interrupts and release flow control */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rs232_unpause:
|
||||||
|
; deactivate rts
|
||||||
|
lda #%00000001
|
||||||
|
sta fifo_mcr
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
;unsigned char __fastcall__ rs232_status (unsigned char* status,
|
||||||
|
; unsigned char* errors);
|
||||||
|
;/* Return the serial port status. */
|
||||||
|
;----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rs232_status:
|
||||||
|
sta ptr2
|
||||||
|
stx ptr2+1
|
||||||
|
jsr popax
|
||||||
|
sta ptr1
|
||||||
|
stx ptr1+1
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
|
||||||
|
; Get status
|
||||||
|
lda fifo_iir
|
||||||
|
and #%00000001
|
||||||
|
sta _rs232_tmp1
|
||||||
|
lda fifo_msr
|
||||||
|
lsr a
|
||||||
|
and #%01010000
|
||||||
|
ora _rs232_tmp1
|
||||||
|
sta _rs232_tmp1
|
||||||
|
lda fifo_lsr
|
||||||
|
and #%00101110
|
||||||
|
ora _rs232_tmp1
|
||||||
|
sta (ptr1),y
|
||||||
|
|
||||||
|
; Get errors
|
||||||
|
lda #$00 ; ok
|
||||||
|
sta (ptr2),y
|
||||||
|
|
||||||
|
lda #$00 ; ok
|
||||||
|
tax
|
||||||
|
rts
|
17
platform/c64/net/tfe-drv-asm.S
Normal file
17
platform/c64/net/tfe-drv-asm.S
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
.export _cs8900a_rxtxreg
|
||||||
|
.export _cs8900a_txcmd
|
||||||
|
.export _cs8900a_txlen
|
||||||
|
.export _cs8900a_packetpp
|
||||||
|
.export _cs8900a_ppdata
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
_cs8900a_rxtxreg = $de00
|
||||||
|
_cs8900a_txcmd = $de04
|
||||||
|
_cs8900a_txlen = $de06
|
||||||
|
_cs8900a_packetpp = $de0a
|
||||||
|
_cs8900a_ppdata = $de0c
|
||||||
|
|
Loading…
Reference in a new issue