1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 ;; based on the sources from AberSoft
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 defb 172,127 ;; AT->(c)
11 defb 226,126 ;; STOP->~
12 defb 195,124 ;; NOT->|
13 defb 205,92 ;; STEP->\
15 defb 203,125 ;; THEN->}
18 $FORTH_CONST (KEY-SHOW-CURSOR) key_show_cursor
19 key_show_cursor: defb 1,0
22 ;; show cursor, wait for key
35 ld a,(f_key6dontclear)
45 ;; change cursor shape according to FRAMES
47 ld a,(key_show_cursor)
55 jr nz,key_draw_emit6_cursor
59 or a,0x80 ;; set flash
61 ;; check CAPS & change cursor shape
65 jr nz,key_draw_emit6_cursor_caps
67 key_draw_emit6_cursor_caps:
76 key_draw_emit6_cursor:
78 ;ld a,(#5C78) ;; frames
80 $IF USE_EMIT6_DRIVER_FONT_TYPE == 0
81 ;; full font, have full char range
83 and #2F ;; each 24th frame (~0.5 sec)
89 ;; check CAPS & change cursor shape
104 jr nz,.key6cursor_invok
108 and #20 ;; each 24th frame (~0.5 sec)
109 jr z,.key6cursor_maskok
115 ld a,(#5C6A) ;; flags
118 jr nz,.key6cursor_capsok
132 ;;;call #02BF ;; keyboard
133 ;ld a,(#5C08) ;; last_k
138 ;; something's pressed
143 ld a,#08 ;; CAPS flag
171 push hl ;; save keycode
174 ld a,(key_show_cursor)
176 jr z,key_skip_erase_cursor
182 jr nz,key_erase_emit6_cursor
183 ;; erase emit8 cursor
187 jr key_skip_erase_cursor
190 key_erase_emit6_cursor:
191 ;; erase emit6 cursor
200 key_skip_erase_cursor:
204 $FORTH_END_CODE_WORD KEY
207 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
208 ;; universal routine to get last pressed key
214 ;; z flag is set if no key was pressed
215 ;; returns 2 for SS+ENTER
226 ; SS+ENTER produces #10
229 ; check for SS pressed
242 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
243 ;; clear keyboard buffer and last pressed key
255 ;; wait a key without a cursor
260 (KEY-SHOW-CURSOR) 0C!
262 SWAP (KEY-SHOW-CURSOR) C!
264 $FORTH_END_WORD KEYNC