-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshell.s
143 lines (118 loc) · 1.67 KB
/
shell.s
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
ld sp, 0x1400
jp start
ds 0x66 - $
nmi:
retn
ds 0x100 - $
start:
call vcls
ld ix, msg
call vprint_str
cmdloop:
call getcmd
ld de, 0x400
ld hl, cmd_print
call strcmp
cp 7
call z, cmd_print_handler
ld de, 0x400
ld hl, cmd_clear
call strcmp
cp 0
call z, vcls
ld de, 0x400
ld hl, cmd_regs
call strcmp
cp 0
call z, cmd_regs_handler
ld de, 0x400
ld hl, cmd_reset
call strcmp
cp 0
jp z, start
ld de, 0x400
ld hl, cmd_stack
call strcmp
cp 0
call z, cmd_stack_handler
jp cmdloop
cmd_stack_handler:
call vnewline
ld [0x400], sp
ld a, [0x401]
call vprint_bin
ld a, ':'
out [0x76], a
ld a, [0x400]
call vprint_bin
ret
cmd_regs_handler:
call vnewline
ex af, af'
exx
ld a, 'A'
out [0x76], a
ex af, af'
call vprint_bin
call vnewline
ld a, 'B'
out [0x76], a
exx
ld a, b
exx
call vprint_bin
call vnewline
ld a, 'C'
out [0x76], a
exx
ld a, c
exx
call vprint_bin
call vnewline
ld a, 'D'
out [0x76], a
exx
ld a, d
exx
call vprint_bin
call vnewline
ld a, 'E'
out [0x76], a
exx
ld a, e
exx
call vprint_bin
call vnewline
ld a, 'H'
out [0x76], a
exx
ld a, h
exx
call vprint_bin
call vnewline
ret
cmd_print_handler:
call vnewline
ld ix, 0x406
call vprint_str
ret
getcmd:
ld ix, prompt
call vprint_str
halt
ld ix, 0x400
call read_str
ld ix, 0x400
call vprint_str
call newline
ret
include 'io.s'
include 'vga.s'
include 'string.s'
msg: db 'sensik corp. sz80 (c) 2021', 10, 0
prompt: db 10, '$ ', 0
cmd_print: db 'print ', 0
cmd_clear: db 'clear', 0
cmd_regs: db 'regs', 0
cmd_reset: db 'reset', 0
cmd_stack: db 'stack', 0