-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathSCALE.ASM
156 lines (127 loc) · 2.76 KB
/
SCALE.ASM
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
.386C
IDEAL
MODEL MEDIUM,C
SCREENWIDTH = 80
DATASEG
EXTRN dc_length:WORD
EXTRN dc_iscale:DWORD
EXTRN dc_frac:DWORD
EXTRN dc_source:WORD
EXTRN dc_dest:WORD
EXTRN dc_seg:WORD
EXTRN shadingtable:DWORD
codeseg
;================
;
; R_DrawColumn
;
;================
PROC R_DrawColumn
PUBLIC R_DrawColumn
push ebp
push esi
push edi
mov ax,[dc_seg]
mov fs,ax
mov ax,0a000h
mov es,ax
mov cx,[dc_length]
mov si,[dc_source]
mov di,[dc_dest]
mov eax,[dc_iscale]
mov [DWORD PTR cs:patch1+3],eax
mov ebp,[dc_frac]
pixelloop:
mov ebx,ebp ; begin calculating first pixel
shr ebx,16
patch1:
add ebp,12345678h ; advance frac pointer
mov al,[fs:si+bx]
mov [es:di],al
add di,SCREENWIDTH
dec cx
jnz pixelloop
done:
pop edi
pop esi
pop ebp
ret
ENDP R_DrawColumn
;================
;
; R_DrawSLSColumn
;
;================
PROC R_DrawSLSColumn
PUBLIC R_DrawSLSColumn
push ebp
push esi
push edi
mov ax,[WORD shadingtable + 2]
mov gs,ax
mov ax,0a000h
mov es,ax
mov cx,[dc_length]
mov di,[dc_dest]
spixelloopls:
mov al,[es:di]
mov bx,[WORD shadingtable]
mov bl,al
add bh,10
cmp bh,62
jle okshade
mov bh,62
okshade:
mov al,[gs:bx]
mov [es:di],al
add di,SCREENWIDTH
dec cx
jnz spixelloopls
sdonels:
pop edi
pop esi
pop ebp
ret
ENDP R_DrawSLSColumn
;================
;
; R_DrawLSColumn
;
;================
PROC R_DrawLSColumn
PUBLIC R_DrawLSColumn
push ebp
push esi
push edi
mov ax,[dc_seg]
mov fs,ax
mov ax,[WORD shadingtable + 2]
mov gs,ax
mov ax,0a000h
mov es,ax
mov cx,[dc_length]
mov si,[dc_source]
mov di,[dc_dest]
mov eax,[dc_iscale]
mov [DWORD PTR cs:patch1ls+3],eax
mov ebp,[dc_frac]
pixelloopls:
mov ebx,ebp ; begin calculating first pixel
shr ebx,16
patch1ls:
add ebp,12345678h ; advance frac pointer
mov al,[fs:si+bx]
mov bx,[WORD shadingtable]
mov bl,al
mov al,[gs:bx]
mov [es:di],al
add di,SCREENWIDTH
dec cx
jnz pixelloopls
donels:
pop edi
pop esi
pop ebp
ret
ENDP R_DrawLSColumn
END