-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserialterm.asm
More file actions
81 lines (62 loc) · 1.48 KB
/
serialterm.asm
File metadata and controls
81 lines (62 loc) · 1.48 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
;
; Simple ANSI serial terminal 'program'
;
#local
#data _RAM
LAST_SCAN: DS 1 ; Last pressed key
DEBOUNCE: DS 1 ;
#code _ROM
SERIALTERM::
LD HL, STR_SERTERM
CALL PRINT
;CALL SERIAL_INIT ; Initialize serial port
; For now the above will setup port 1 as 9600 8N1
XOR A ; 0
LD (LAST_SCAN), A ; Reset scancode to blank
LD A, 1
LD (DEBOUNCE), A ; Reset debounce counter
TERMLOOP:
CALL SERIAL_READ
CALL SERIAL_WRITE
JP TERMLOOP
;CALL SERIAL_POLL ; Check if we have any serial data waiting
;JR Z, NOCHAR ;
;; Parse character
;CALL SERIAL_READ ; Read in character
CALL PRINTBYTE
;CALL DISP_WRITE ; Simply write to display for now
NOCHAR:
LD A, 0x41
CALL SERIAL_WRITE
JP TERMLOOP
LD HL, LAST_SCAN
CP (HL) ; Check if keypress has changed since last poll
JR Z, NOKBD ; If same, then ignore
LD B, A ; Save scancode
LD A, (DEBOUNCE) ;
AND B ; Check if zero
JP TERMLOOP
JR Z, NEWKEY
; Update debounce count
DEC A ; Decrement
LD (DEBOUNCE), A
JP NOKBD
NEWKEY:
LD A, 1 ; Debounce count
LD (DEBOUNCE), A ; Update counter
LD A, B ; Restore scancode
LD (HL), A ; Save as LAST_SCAN
AND A ; Check if zero
JR Z, NOKBD ; If no press then ignore
CALL SCAN2KEY ; Convert scancode to ASCII
CP 0x0A ; Newline
JR NZ, NORETFIX
LD A, 0x0D ; CR
NORETFIX:
CALL SERIAL_WRITE ; Write to serial port
NOKBD:
JP TERMLOOP ; Keep going
STR_SERTERM:
.ascii "Serial Terminal Started. 9600 8N1",13,10
.ascii "=================================",13,10,0
#endlocal