Skip to content

Commit 6af6de5

Browse files
committed
04/fill/Fill.asm
1 parent f3eee90 commit 6af6de5

File tree

1 file changed

+71
-1
lines changed

1 file changed

+71
-1
lines changed

04/fill/Fill.asm

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,74 @@
88
// i.e. writes "black" in every pixel. When no key is pressed,
99
// the screen should be cleared.
1010

11-
//// Replace this comment with your code.
11+
(HANDLE_KEYBOARD)
12+
// 画面サイズは横512*256
13+
// == 32ワード*16ワード
14+
@i
15+
M=0
16+
17+
@KBD
18+
D=M
19+
@MAKE_SCREEN_BLACK
20+
D;JGT
21+
@MAKE_SCREEN_WHITE
22+
0;JMP
23+
24+
(MAKE_SCREEN_BLACK)
25+
// i == 8192ならば画面を塗りつぶす処理が最後まで完了しているはずなので
26+
// 内側のループを抜ける
27+
28+
// NOTE: 本来は@8192にすべきだが、動作が遅すぎて検証できないので@5にしている
29+
@5
30+
// @8192
31+
D=A
32+
@i
33+
D=D-M
34+
@HANDLE_KEYBOARD
35+
D;JEQ
36+
37+
// SCREEN + i番目のワードを111...111に設定する
38+
@i
39+
D=M
40+
41+
@SCREEN
42+
A=A+D
43+
M=-1
44+
45+
// i++
46+
@i
47+
M=M+1
48+
49+
@MAKE_SCREEN_BLACK
50+
0;JMP
51+
52+
(MAKE_SCREEN_WHITE)
53+
// i == 8192ならば画面を塗りつぶす処理が最後まで完了しているはずなので
54+
// 内側のループを抜ける
55+
56+
@5
57+
// @8192
58+
D=A
59+
@i
60+
D=D-M
61+
@HANDLE_KEYBOARD
62+
D;JEQ
63+
64+
// SCREEN + i番目のワードを111...111に設定する
65+
66+
@i
67+
D=M
68+
69+
@SCREEN
70+
A=A+D
71+
M=0
72+
73+
// i++
74+
@i
75+
M=M+1
76+
77+
@MAKE_SCREEN_WHITE
78+
0;JMP
79+
80+
@HANDLE_KEYBOARD
81+
0;JMP

0 commit comments

Comments
 (0)