-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcursorutils.asm
More file actions
166 lines (137 loc) · 2.99 KB
/
cursorutils.asm
File metadata and controls
166 lines (137 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
;===============================================================================
; Position cursor at home on 8*8 editing grid
;===============================================================================
;
; Utility function : show editing cursor by inverting edit grid 'pixel' temporarily
;
showeditcursor
LDX #$00
LDA (editgridposlo,X)
PHA ; save actual 'pixel' value in 8*8 edit grid
CMP keyfullblock
BEQ clreditcrsr ; invert the pixel and pause to make cursor blink
LDA keyfullblock
STA (editgridposlo,X)
JMP waiteditcrsr
clreditcrsr
LDA keyspace
STA (editgridposlo,X)
waiteditcrsr
LDA #$10
TAY
loopeditcrsry
TAX
loopeditcrsrx
DEX
BNE loopeditcrsrx
DEY
BNE loopeditcrsry
PLA ; restore actual 'pixel' value in 8*8 edit grid
LDX #$00
STA (editgridposlo,X)
RTS
;
; Utility function : show character set cursor
;
showcharcursor
SEI
LDA #<irqcursor
STA irqsvcloaddr
LDA #>irqcursor
STA irqsvchiaddr
LDA #$01
STA irqstatusreg
STA irqctlreg
LDA #$00
STA timeractlreg
LDA defaultscrnctl
STA scrnctlreg
LDA #$00
STA rasterline
CLI
RTS
irqcursor
LDA #$00
waitraster1
CMP rasterline
BNE waitraster1
LDA #$15
STA memsetupreg
LDA #$82
waitraster2
CMP rasterline
BNE waitraster2
LDA #$1D
STA memsetupreg
LDA #$FF
waitraster3
CMP rasterline
BNE waitraster3
LDA #$01
STA irqstatusreg
JSR blinkcursor
JMP irqsvcroutine
;
; Utility function : blink character set cursor (under interrupt)
;
blinkcursor
DEC cursortimer
BEQ makecursor
RTS
makecursor
LDA #cursordelay
STA cursortimer
LDX #$00
LDA (charsetposlo,X)
CMP editingchar
BEQ hidechar
LDA editingchar
STA (charsetposlo,X)
RTS
hidechar
LDA keyspace
STA (charsetposlo,X)
RTS
;
; Utility function : show character grid cursor by inverting character grid 'pixel' temporarily
;
showgridcursor
CLC
LDA scrnlinepntlo
ADC scrncolpntr
STA savegridchar+1
STA setgridcrsr+1
STA setgridchar+1
LDA scrnlinepnthi
ADC #$00
STA savegridchar+2
STA setgridcrsr+2
STA setgridchar+2
savegridchar
LDA scrngridhome
PHA
LDA keyfullblock
setgridcrsr
STA scrngridhome
LDA #$0A
TAY
waitcrsrony
TAX
waitcrsronx
DEX
BNE waitcrsronx
DEY
BNE waitcrsrony
PLA
setgridchar
STA scrngridhome
LDA #$0A
TAY
waitcharony
TAX
waitcharonx
DEX
BNE waitcharonx
DEY
BNE waitcharony
RTS