5 SEGMENT lerssicode para PUBLIC 'CODE'
\r
9 IRP ccc, <0,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>
\r
13 LABEL start_mask BYTE
\r
15 db 1111b, 1110b, 1100b, 1000b
\r
19 db 0001b, 0011b, 0111b, 1111b
\r
23 PUBLIC C yy1, C xx1, C yy2, C xx2
\r
24 PUBLIC C ay1, C ay2, C ax1, C ax2
\r
25 PUBLIC C txx1, C txx2, C txy1, C txy2
\r
26 PUBLIC C tax1, C tax2, C tay1, C tay2
\r
27 PUBLIC C to, C from, C dseg, C ctau
\r
55 ASSUME cs:lerssicode, ds:nothing, es:nothing
\r
80 mov ax, [Word xx2+2]
\r
83 mov [gs:bp], ax ; x1..
\r
86 mov si, [Word xx1+2]
\r
89 mov [gs:bp+2], si ; x2..
\r
91 sub si, ax ; si = bytes to copy
\r
102 mov ebx, [txy1-2] ; xlo
\r
103 mov ecx, [txx1-2] ; ylo
\r
116 mov edx, ecx ; look reg table
\r
117 rol edx, 16d ; y_add
\r
119 rol eax, 16d ; x_add
\r
125 mov bh, [Byte txy1+2] ; txt y
\r
126 mov bl, [Byte txx1+2] ; txt x
\r
130 movzx si, [fs:bx] ; out odd byte
\r
135 mov [es:bp+di-1],al
\r
136 jmp [cs:jmp_tau+bp-2]
\r
138 @@l1: jmp [cs:jmp_tau+si] ; and jump to rept
\r
141 ; ax x_add data data
\r
149 IRP ccc, <200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1>
\r
163 adc bh, 0 ; immediate = y_hi
\r
165 mov [es:di+ccc*2-1], ax ; output byte
\r
170 mov bh, [Byte txy2+2] ; txt y
\r
171 mov bl, [Byte txx2+2] ; txt x
\r
174 mov bh, [Byte txy1+2] ; txt y
\r
175 mov bl, [Byte txx1+2] ; txt x
\r
179 mov bx, [Word xx2+2]
\r
181 mov ah, [start_mask+bx]
\r
187 mov bx, [Word xx1+2]
\r
189 mov ah, [end_mask+bx]
\r
194 add [Word to], 160d ; next line
\r
197 add [word ctau], 4d
\r
210 add [txx2], eax ; increment txt and line indexes
\r
221 mov bh, [Byte txy2+2] ; txt y
\r
222 mov bl, [Byte txx2+2] ; txt x
\r
228 mov bx, [Word xx2+2]
\r
230 mov ah, [start_mask+bx]
\r
231 mov bx, [Word xx1+2]
\r
233 and ah, [end_mask+bx]
\r
237 add [Word to], 160d ; next line
\r
240 add [word ctau], 4d
\r
253 add [txx2], eax ; increment txt and line indexes
\r
266 ARG fpal:dword, ppal:dword, shd:word
\r
295 ARG vmem:dword, otau:dword, ntau:dword
\r
297 push si di ds es bp
\r
304 lds bx, [otau] ; dx:bx-> otau
\r
306 sub si, bx ; dx:bx+si-> ntau
\r
307 mov dl, [es:0] ; fill latches
\r
312 cmp [Word ds:bx], 640d
\r
315 mov di, [Word ds:bx]
\r
317 mov cx, [word ds:bx+si]
\r
324 mov di, [Word ds:bx+si+2]
\r
326 mov cx, [word ds:bx+2]
\r
335 mov [Word ds:bx], 640d
\r
336 mov [Word ds:bx+2], 0d
\r
343 ; Maskaa p
\84\84t...
\r
346 lds si, [ntau] ; dx:bx-> ntau
\r
353 mov ah, [end_mask+bx]
\r
360 mov ah, [start_mask+bx]
\r