-
Notifications
You must be signed in to change notification settings - Fork 0
/
NewOS.asm
283 lines (186 loc) · 3.3 KB
/
NewOS.asm
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
;;Program start at 0000h
org 0800h
jp cold_start
;;
;;Memory Definitions
;;
monitor: equ 0xdbff
;;
;;Routine to print a character
;;
print_char: ld c,a
print_char_loop: in a,(3)
and 001h
jp z,print_char_loop
ld a,c
out (2),a
ret
;;
;;Routine to print a string
;;
print_string: in a,(3)
and 001h
jp z,print_string
ld a,(hl)
and a
ret z
out (2),a
inc hl
jp print_string
;;
;;Press any key routine
;;
press_enter: in a,(3)
and 002h
jp z,press_enter
in a,(2)
cp 00dh
ret z
;;
;;Clear routines
;;
clear_display: ld b,019h
clear_display_loop:
call newline
djnz clear_display_loop
ret
;;
;;Routines to print multiple spaces NOTE: load a value into the b register prior to calling
;;
jump_spaces: ld a,020h
jump_spaces_loop:
call print_char
djnz jump_spaces_loop
ret
;;
;;Write Newline
;;
newline: ld a,00ah
call print_char
ld a,00dh
call print_char
ret
;;
;;All the startup message routines
;;
startup_messages: ld hl,Top_Bar_Color
call print_string
ld b,050h
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,050h
call jump_spaces
ld b,07h
loop1:
ld d,b
ld b,050h
call jump_spaces
ld b,d
djnz loop1
ld b,02h
loop2:
ld d,b
ld b,014h
call jump_spaces
ld hl,Window_Color
call print_string
ld b,028h
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,014h
call jump_spaces
ld b,d
djnz loop2
ld b,014h
call jump_spaces
ld hl,Window_Color
call print_string
ld b,00ah
call jump_spaces
ld hl,Welcome_Message
call print_string
ld b,00ah
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,014h
call jump_spaces
ld b,02h
loop3:
ld d,b
ld b,014h
call jump_spaces
ld hl,Window_Color
call print_string
ld b,028h
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,014h
call jump_spaces
ld b,d
djnz loop3
ld b,014h
call jump_spaces
ld hl,Window_Color
call print_string
ld b,00ah
call jump_spaces
ld hl,Please_Enter
call print_string
ld b,00ah
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,014h
call jump_spaces
ld b,02h
loop4:
ld d,b
ld b,014h
call jump_spaces
ld hl,Window_Color
call print_string
ld b,028h
call jump_spaces
ld hl,Main_Panel_Color
call print_string
ld b,014h
call jump_spaces
ld b,d
djnz loop4
ld b,07h
loop5:
ld d,b
ld b,050h
call jump_spaces
ld b,d
djnz loop5
ret
;;
;; Colors
;;
Top_Bar_Color: defm "\033[48;5;17m",0
Main_Panel_Color: defm "\033[48;5;6m",0
Window_Color: defm "\033[48;5;21m",0
Text: defm "\033[38;5;0m",0
;;
;;Messages
;;
Welcome_Message: defm "Welcome to my new OS",0
Please_Enter: defm "[PLEASE PRESS ENTER]",0
Tada: defm "Tada",0
;;
;; Stuff to execute
;;
cold_start: ld sp,monitor
ld hl,Text
call print_string
call clear_display
call startup_messages
call press_enter
call clear_display
ld hl,Tada
call print_string