summaryrefslogtreecommitdiff
path: root/kroete.inc
blob: 8f2d9399d4fb70c5f995d9a4528dc1836cfe0681 (plain)
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
;	es:si	pointer to data
;	bx	== 0 forward  != 0 backward
kroete:
	mov	fs,[window_seg_w]
	mov	ax,[window_seg_r]
	or	ax,ax
	jnz	sul1
	mov	ax,[window_seg_w]
sul1:	mov	gs,ax
	mov	di,[cs:screen_width]
	shr	di,1
	imul	di,[cs:pixel_bytes]
	mov	ax,[cs:screen_height]
	shr	ax,1
	mul	word [cs:screen_line_len]
	add	di,ax
	adc	dx,byte 0
	mov	ax,dx
	call	set_win
	call	kr_getpixel
	or	bx,bx
	jnz	sul3
	lea	bp,[si+16384]
sul:	mov	bl,[es:si]
	rol	bl,2
	call	doit
	rol	bl,2
	call	doit
	rol	bl,2
	call	doit
	rol	bl,2
	call	doit
	inc	si
	cmp	si,bp
	jnz	sul
	call	kr_putpixel
      	ret
sul3:	lea	bp,[si-1]
	add	si,16383
sul4:	mov	bl,[es:si]
	xor	bl,0xaa
	call	doit
	ror	bl,2
	call	doit
	ror	bl,2
	call	doit
	ror	bl,2
	call	doit
	dec	si
	cmp	si,bp
	jnz	sul4
	call	kr_putpixel
	ret
doit:
	push	ecx
	call	kr_getpixel
	mov	edx,ecx
	pop	ecx
	call	kr_putpixel
	mov	ecx,edx
	mov	dl,bl
	and	dl,3
	jnz	doit1
	sub	di,[cs:pixel_bytes]
	jnc	doit4
doit5:	sbb	al,0
	jmp	set_win
doit1:	dec	dl
	jnz	doit2
	sub	di,[cs:screen_line_len]
	jc	doit5
doit4:	ret
doit2:	dec	dl
	jnz	doit3
	add	di,[cs:pixel_bytes]
	jnc	doit4
doit6:	adc	al,0
	jmp	set_win
doit3:  add	di,[cs:screen_line_len]
	jc	doit6
	ret

kr_getpixel:
	cmp byte [cs:pixel_bytes],1
	ja kr_getpixel_10
	mov cl,[fs:di]
	ret
kr_getpixel_10:
	mov cx,[fs:di]
	ret

kr_putpixel:
	cmp byte [cs:pixel_bytes],1
	ja kr_putpixel_10
	mov [gs:di],cl
	ret
kr_putpixel_10:
	mov [gs:di],cx
	ret