acme/examples/me/cursor.a
marcobaye 721a2d7bbc fixed dir tree structure
git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@3 4df02467-bbd4-4a76-a152-e7ce94205b78
2012-02-27 21:25:04 +00:00

112 lines
2.0 KiB
Plaintext

;ACME 0.91
; ab hier liegt die Cursorsteuerung
; A = screenx, Y = screeny
!zone
crsrset sta .m ; buffer x
iny ; adjust height
iny
iny
sty .n ; buffer y
jsr crsroff
lda #0 ; clear Hi
sta vtemp+1
.n=*+1: lda #MODIFIED8 ; y
asl ; *2
asl ; *4
rol vtemp+1
asl ; *8
rol vtemp+1
asl ; *16
rol vtemp+1
sta vtemp ; stash Lo
ldy vtemp+1 ; copy Hi
sty vtemp+2
asl ; *32
rol vtemp+2
asl ; *64
rol vtemp+2
adc vtemp ; + 16er-Lo
sta vtemp ; 80er-Lo in vtemp
bcc + ; page
inc vtemp+1
clc
+
.m=*+1: adc #MODIFIED8 ; x
sta vtemp ; store Lo
lda vtemp+1 ; get 16er-Hi
adc vtemp+2 ; add 64er-Hi
adc #attrhi ; add base
sta vtemp+1 ; store Hi
!zone
crsron lda conreg ; buffert CR
sta .m
+bank15
jsr vpntcrsr ; set address
- bit vdc ; get ready
bpl -
lda reg ; get attribute
sta tcolor ; buffer it
jsr vpntcrsr ; set address
lda clrcrsr ; get crsr
- bit vdc ; get ready
bpl -
sta reg ; set crsr
.m=*+1: lda #MODIFIED8 ; bank
sta conreg ; restore CR
rts
!zone
crsroff lda conreg ; buffer CR
sta .m
+bank15
jsr vpntcrsr ; set address
lda tcolor ; get attribute
- bit vdc ; get ready
bpl -
sta reg ; set attribute
.m=*+1: lda #MODIFIED8 ; bank
sta conreg ; restore CR
rts
; push data
!zone
crsrnew ldx crsrheap ; get stackpointer
lda vtemp ; get low
sta crsrheap,x ; push
lda vtemp+1 ; get high
sta crsrheap+1,x; push
inx ; inc stackpointer
inx
stx crsrheap ; set stackpointer
jsr crsroff
!zone
crsrhide ldx #$3f ; place cursor
stx vtemp+1 ; outside visible
ldx #$ff ; area
stx vtemp
rts
!zone
crsrold ldx crsrheap ; get stackpointer
dex ; previous entry !
dex
lda crsrheap,x ; get lo
sta vtemp ; set lo
lda crsrheap+1,x; get hi
sta vtemp+1 ; set hi
stx crsrheap ; set stackpointer
jmp crsron
!zone
crsrinit ldx #1 ; init cursorstack
stx crsrheap
jmp crsrhide ; and hide cursor
crsrheap !fill 33, 33
vpntcrsr +ldax vtemp
jmp ramaccess ; set vdc