From 9542deeb483a00b6fabed7574720926ce97d7511 Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Tue, 16 Aug 2022 11:54:23 +0800 Subject: Projects, 01-06 completed --- projects/04/misc/rect.asm | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 projects/04/misc/rect.asm (limited to 'projects/04/misc/rect.asm') diff --git a/projects/04/misc/rect.asm b/projects/04/misc/rect.asm new file mode 100644 index 0000000..3106f04 --- /dev/null +++ b/projects/04/misc/rect.asm @@ -0,0 +1,95 @@ +@R0 +D=M +@width +M=D // width (max 32) = RAM[0] words = 16 * RAM[0] px + +@32 +D=A +@width +D=D-M // D = 32 - width +@WIDTH_PASS +D;JGE // if (D >= 0, i.e. width <= 32) goto WIDTH_PASS + +@32 +D=A +@width +M=D // width = 32 + +(WIDTH_PASS) + +@R1 +D=M +@height +M=D // height (max 256) = RAM[1] px + +@256 +D=A +@height +D=D-M // D = 256 - height +@HEIGHT_PASS +D;JGE // if (D >= 0, i.e. height <= 256) goto HEIGHT_PASS + +@256 +D=A +@height +M=D + +(HEIGHT_PASS) + +@32 +D=A +@offset +M=D // offset = 32 +@width +D=M +@offset +M=M-D // offset -= width + +@x +M=0 // x = 0 + +@y +M=0 // y = 0 + +@SCREEN +D=A +@pos +M=D // pos = &SCREEN + +(DRAW_Y) + (DRAW_X) + @pos + A=M + M=-1 // *pos = 0xffff + @pos + M=M+1 // pos++ + @x + M=M+1 // x++ + D=M // D = x + @width + D=D-M // D = x - width + @EXIT_X + D;JEQ // if (x - width == 0) break + @DRAW_X + 0;JMP + (EXIT_X) + @x + M=0; + @offset + D=M + @pos + M=M+D // pos += offset + @y + M=M+1 // y++ + D=M // D = y + @height + D=D-M // D = y - height + @END + D;JEQ // if (y - height == 0) break + @DRAW_Y + 0;JMP + +(END) + @END + 0;JMP + -- cgit v1.2.3