Changed license to CC0
[fifth.git] / emulator / vidput.inc
1 ; part of virtual processor, emulator for FIFTH\r
2 \r
3 \r
4 xvidput:\r
5 mov     ebx, edi      ; read data from stack, and save it to variables\r
6 mov     eax, [es:ebx]\r
7 mov     [cory], eax\r
8 add     ebx, 4\r
9 mov     eax, [es:ebx]\r
10 mov     [corx], eax\r
11 \r
12 add     ebx, 4\r
13 mov     eax, [es:ebx]\r
14 add     eax, [xms_addr]\r
15 mov     ecx, [es:eax]\r
16 mov     [img2x], ecx\r
17 add     eax, 4\r
18 mov     ecx, [es:eax]\r
19 mov     [img2y], ecx\r
20 add     eax, 4\r
21 mov     [img2a], eax\r
22 \r
23 add     ebx, 4\r
24 mov     eax, [es:ebx]\r
25 add     eax, [xms_addr]\r
26 mov     ecx, [es:eax]\r
27 mov     [img1x], ecx\r
28 add     eax, 4\r
29 mov     ecx, [es:eax]\r
30 mov     [img1y], ecx\r
31 add     eax, 4\r
32 mov     [img1a], eax\r
33 \r
34 add     ebx, 4\r
35 mov     edi, ebx\r
36 \r
37 cmp     dword [cory] , 0        ; calculate Y start\r
38 jl      vidl1\r
39 mov     dword [starty], 0\r
40 jmp     vidl2\r
41 vidl1:\r
42 mov     eax, [cory]\r
43 neg     eax\r
44 mov     [starty], eax\r
45 vidl2:\r
46 \r
47 cmp     dword [corx] , 0        ; calculate X start\r
48 jl      vidl3\r
49 mov     dword [startx], 0\r
50 jmp     vidl4\r
51 vidl3:\r
52 mov     eax, [corx]\r
53 neg     eax\r
54 mov     [startx], eax\r
55 vidl4:\r
56 \r
57 mov     eax, [cory]             ; calculate Y end\r
58 add     eax, [img1y]\r
59 cmp     eax, [img2y]\r
60 jg      vidl5\r
61 mov     eax, [img1y]\r
62 mov     [endy], eax\r
63 jmp     vidl6\r
64 vidl5:\r
65 mov     eax, [img2y]\r
66 sub     eax, [cory]\r
67 mov     [endy], eax\r
68 vidl6:\r
69 \r
70 mov     eax, [corx]             ; calculate X end\r
71 add     eax, [img1x]\r
72 cmp     eax, [img2x]\r
73 jg      vidl7\r
74 mov     eax, [img1x]\r
75 mov     [endx], eax\r
76 jmp     vidl8\r
77 vidl7:\r
78 mov     eax, [img2x]\r
79 sub     eax, [corx]\r
80 mov     [endx], eax\r
81 vidl8:\r
82 \r
83 mov     eax, [endy]             ; calculate Y length\r
84 sub     eax, [starty]\r
85 cmp     eax, 0\r
86 jle     emu\r
87 mov     [lengthy], eax\r
88 \r
89 mov     eax, [endx]             ; calculate X length\r
90 sub     eax, [startx]\r
91 cmp     eax, 0\r
92 jle     emu\r
93 mov     [lengthx], eax\r
94 \r
95 mov     eax, [starty]           ; calculate img1 start address\r
96 mov     ebx, [img1x]\r
97 sub     edx, edx\r
98 mul     ebx\r
99 add     eax, [img1a]\r
100 add     eax, [startx]\r
101 mov     [img1start], eax\r
102 \r
103 mov     eax, [cory]             ; calculate img2 start address\r
104 add     eax, [starty]\r
105 mov     ebx, [img2x]\r
106 sub     edx, edx\r
107 mul     ebx\r
108 add     eax, [img2a]\r
109 add     eax, [corx]\r
110 add     eax, [startx]\r
111 mov     [img2start], eax\r
112 \r
113 vidl9:\r
114 mov     ebx, [img1start]\r
115 mov     ecx, [lengthx]\r
116 mov     edx, [img2start]\r
117 call    memmove\r
118 \r
119 mov     eax, [img1x]\r
120 add     [img1start], eax\r
121 mov     eax, [img2x]\r
122 add     [img2start], eax\r
123 dec     dword [lengthy]\r
124 cmp     [lengthy], 0\r
125 jg      vidl9\r
126 \r
127 jmp     emu\r
128 \r
129 cory    dd 0\r
130 corx    dd 0\r
131 img2x   dd 0\r
132 img2y   dd 0\r
133 img2a   dd 0\r
134 img1x   dd 0\r
135 img1y   dd 0\r
136 img1a   dd 0\r
137 \r
138 starty  dd 0\r
139 startx  dd 0\r
140 endy    dd 0\r
141 endx    dd 0\r
142 lengthx dd 0\r
143 lengthy dd 0\r
144 \r
145 img1start dd 0\r
146 img2start dd 0\r