source: branches/UltimatOS/Graphics.asm

Last change on this file was 32, checked in by chronos, 23 months ago
  • Added: Interrupt handling.
File size: 2.2 KB
Line 
1ColorText: .dd $ffffff
2ColorBackground: .dd 0
3
4Rectangle: ; R0 - Color, R1 - X, R2 - Y, R3 - Width, R4 - Height
5 PUSH R5 ; loop X
6 PUSH R6 ; loop Y
7 PUSH R7 ; color
8 PUSH R8 ; X
9 PUSH R9 ; Y
10 COPY R7, R0
11 COPY R8, R1
12 COPY R9, R2
13 COPY R6, R4
14 PUSH R0
15 PUSH R1
16RectangleStart:
17 COPY R0, R8
18 COPY R1, R9
19 CALL SetPixelAddr
20 COPY R5, R3
21RectangleLine:
22 OUT (ScreenWriteData), R7
23 DEC R5
24 JPNZ R5, RectangleLine
25 DEC R6
26 INC R9
27 JPNZ R6, RectangleStart
28 POP R1
29 POP R0
30 POP R9
31 POP R8
32 POP R7
33 POP R6
34 POP R3
35 RET
36
37SetPixelAddr: ; R0 - X, R1 - Y
38 PUSH R2
39 IN R2, (ScreenGetWidth)
40 SHL R2, 2 ; multiply by 4
41 SHL R0, 2 ; multiply by 4
42 MUL R1, R2
43 ADD R0, R1
44 OUT (ScreenSetAddr), R0
45 POP R2
46 RET
47
48 .const CharWidth 8
49 .const CharHeight 8
50
51WriteChar: ; R0 - Character, R1 - X, R2 - Y
52 PUSH R3 ; Address of character
53 PUSH R4 ; Loop register Y
54 PUSH R5 ; X
55 PUSH R6 ; Y
56 PUSH R7 ; value
57 PUSH R8 ; screen width
58 PUSH R9 ; Loop register X
59 PUSH R10 ; Foreground color
60 PUSH R11 ; Background color
61 PUSH R12 ; temp value
62 COPY R5, R1
63 COPY R6, R2
64 SET R3, Font8x8
65 SHL R0, 3
66 ADD R3, R0
67 IN R8, (ScreenGetWidth)
68 SET R4, CharHeight
69 LDI R10, (ColorText)
70 LDI R11, (ColorBackground)
71WriteCharLoopY:
72 COPY R0, R5
73 COPY R1, R6
74 CALL SetPixelAddr
75 LD R7, (R3)
76 SET R9, CharWidth
77WriteCharLoopX:
78 COPY R12, R7
79 ANDI R12, 1
80 JPZ R12, WriteCharNext
81 OUT (ScreenWriteData), R10
82 JP WriteCharNext2
83WriteCharNext:
84 OUT (ScreenWriteData), R11
85WriteCharNext2:
86 DEC R9
87 SHR R7, 1
88 JPNZ R9, WriteCharLoopX
89 DEC R4
90 INC R6
91 INC R3
92 JPNZ R4, WriteCharLoopY
93 POP R12
94 POP R11
95 POP R10
96 POP R9
97 POP R8
98 POP R7
99 POP R6
100 POP R5
101 POP R4
102 POP R3
103 RET
104
105TextOut: ; R0 - Text address, R1 - X, R2 - Y
106 PUSH R3 ; loop variable
107 PUSH R4 ; character width
108 PUSH R6 ; X
109 PUSH R7 ; Y
110 PUSH R1
111 PUSH R2
112 PUSH R0
113 COPY R6, R1
114 COPY R7, R2
115 COPY R3, R0
116 SET R4, CharWidth
117TextOutLoop:
118 LD R0, (R3)
119 ANDI R0, $ff
120 JPZ R0, TextOutLoop2
121 COPY R1, R6
122 COPY R2, R7
123 CALL WriteChar
124 ADD R6, R4
125 INC R3
126 JP TextOutLoop
127TextOutLoop2:
128 POP R0
129 POP R2
130 POP R1
131 POP R7
132 POP R6
133 POP R4
134 POP R3
135 RET
136
137 .include Font.asm
Note: See TracBrowser for help on using the repository browser.