This commit is contained in:
Frater 2017-09-24 01:45:36 +02:00
commit 43352ff262
1291 changed files with 220976 additions and 0 deletions

632
TECHNO/KOEB.ASM Normal file
View file

@ -0,0 +1,632 @@
extrn _circle:byte
extrn _circle2:byte
code2 SEGMENT para public 'CODE'
ASSUME cs:code2
.386
LOCALS
include sin1024.inc
;################################################################
sizefade dw 0
rotspeed dw 0
palfader dw 0
palfader2 db 255
zumplane db 11h
ALIGN 16
flip8 LABEL BYTE
db 0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200
db 40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100
db 228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156
db 92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178
db 114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6
db 134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206
db 46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225
db 17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217
db 57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245
db 13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195
db 35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235
db 27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215
db 55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255
circles dw 8 dup(0)
pal db 32*3 dup(0)
pal0 LABEL WORD
db 0,30,40
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,30,40
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
db 0,0 ,0
pal1 LABEL WORD
db 0, 0*7/9, 0
db 10,10*7/9,10
db 20,20*7/9,20
db 30,30*7/9,30
db 40,40*7/9,40
db 50,50*7/9,50
db 60,60*7/9,60
db 30,30*7/9,30
db 0, 0*7/9, 0
db 10,10*7/9,10
db 20,20*7/9,20
db 30,30*7/9,30
db 40,40*7/9,40
db 50,50*7/9,50
db 60,60*7/9,60
db 30,30*7/9,30
pal2 LABEL WORD
db 50,50*6/9,50
db 60,60*6/9,60
db 30,30*6/9,30
db 0, 0*6/9, 0
db 10,10*6/9,10
db 20,20*6/9,20
db 30,30*6/9,30
db 40,40*6/9,40
db 50,50*6/9,50
db 60,60*6/9,60
db 30,30*6/9,30
db 0, 0*6/9, 0
db 10,10*6/9,10
db 20,20*6/9,20
db 30,30*6/9,30
db 40,40*6/9,40
sinuspower db 0
powercnt db 0
PUBLIC _power1
_power1 LABEL WORD
power0 db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
db 256 dup(0)
PLANE MACRO pl
mov dx,3c4h
mov ax,0002h+pl*100h
out dx,ax
ENDM
bltline PROC NEAR
push si
mov dx,3c4h
mov al,2
out dx,al
inc dx
@@1: mov al,ch
out dx,al
zzz=0
REPT 10
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add si,40
shl ch,1
dec cl
jnz @@1
pop si
ret
bltline ENDP
bltlinerev PROC NEAR
push si
mov dx,3c4h
mov al,2
out dx,al
inc dx
xor bx,bx
@@1: mov al,ch
out dx,al
zzz=0
REPT 10
mov bl,ds:[si+36-zzz]
mov al,cs:flip8[bx]
rol eax,8
mov bl,ds:[si+37-zzz]
mov al,cs:flip8[bx]
rol eax,8
mov bl,ds:[si+38-zzz]
mov al,cs:flip8[bx]
rol eax,8
mov bl,ds:[si+39-zzz]
mov al,cs:flip8[bx]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add si,40
shl ch,1
dec cl
jnz @@1
pop si
ret
bltlinerev ENDP
resetmode13 PROC NEAR
mov bx,1
int 0fch
mov dx,3c8h
mov al,0
out dx,al
inc dx
mov cx,768
@@ccc: out dx,al
loop @@ccc
mov bx,1
int 0fch
mov ax,13
int 10h
mov dx,3dah
in al,dx
mov dx,3c0h
xor al,al
REPT 16
out dx,al
out dx,al
inc al
ENDM
mov al,11h
out dx,al
mov al,255
out dx,al
mov al,32
out dx,al
;clear pal
mov dx,3c8h
xor al,al
out dx,al
inc dx
mov cx,768
@@clp: out dx,al
loop @@clp
ret
resetmode13 ENDP
mixpal PROC NEAR
;cs:si=>cs:di, for cx
push dx
cmp dx,256
jg @@2
mov bx,dx
@@1: mov al,cs:[si]
xor ah,ah
inc si
mul bx
shr ax,8
mov cs:[di],al
inc di
loop @@1
pop dx
ret
@@2: mov bx,dx
sub bx,256
@@4: mov al,cs:[si]
xor ah,ah
inc si
add ax,bx
cmp ax,64
jb @@3
mov al,63
@@3: mov cs:[di],al
inc di
loop @@4
pop dx
ret
mixpal ENDP
outpal PROC NEAR
mov dx,3c8h
out dx,al
mov ax,cs
mov ds,ax
inc dx
rep outsb
ret
outpal ENDP
waitb PROC NEAR
mov bx,1
int 0fch
ret
waitb ENDP
rotate1 PROC NEAR
xor si,si
mov cx,32000/32-2
cld
jmp @@2
;edx.eax
@@1: popf
zzz=0
REPT 16
mov ax,ds:[si+zzz]
rcr al,1
rcr ah,1
mov es:[si+zzz],ax
zzz=zzz+2
ENDM
@@2: pushf
add si,zzz
dec cx
jz @@0
jmp @@1
@@0: popf
ret
rotate1 ENDP
ALIGN 2
framecount dw 0
palanimc dw 0
palanimc2 dw 0
scrnpos dw 0
scrnposl dw 0
scrnx dw 0
scrny dw 0
scrnrot dw 0
sinurot dw 0
overrot dw 0
overx dw 0
overya dw 0
patdir dw -3
memseg dw 0
init_interference PROC NEAR
mov dx,3d4h
mov ax,2813h
out dx,ax
mov bx,20+100*80
;get mem for circles
mov ah,48h
mov bx,16384
int 21h
mov cs:memseg,ax
zzz=0
REPT 8
mov cs:circles[zzz],ax
add ax,2048
zzz=zzz+2
ENDM
mov ax,SEG _circle2
mov ds,ax
xor si,si
mov ax,0a000h
mov es,ax
mov cx,200
xor di,di
mov bp,80*399
@@1: push cx
push di
mov cx,0401h
call bltline
add di,40
mov cx,0401h
call bltlinerev
add di,40
mov di,bp
mov cx,0401h
call bltline
add di,40
mov cx,0401h
call bltlinerev
add di,40
pop di
add di,80
sub bp,80
add si,40
pop cx
loop @@1
mov dx,3ceh
mov ax,0204h
out dx,ax
mov cx,400
mov es,cs:circles[0]
mov ax,0a000h
mov ds,ax
mov cx,32000/4
xor si,si
xor di,di
rep movsd
zzz=0
REPT 7
mov ds,cs:circles[zzz]
mov es,cs:circles[zzz+2]
call rotate1
zzz=zzz+2
ENDM
mov ax,SEG _circle
mov ds,ax
xor si,si
mov ax,0a000h
mov es,ax
mov cx,200
xor di,di
mov bp,80*399
@@10: push cx
push di
mov cx,0103h ;start at plane 1, copy 3 planes
call bltline
add di,40
mov cx,0103h ;start at plane 1, copy 3 planes
call bltlinerev
add di,40
mov di,bp
mov cx,0103h ;start at plane 1, copy 3 planes
call bltline
add di,40
mov cx,0103h ;start at plane 1, copy 3 planes
call bltlinerev
add di,40
pop di
add di,80
sub bp,80
add si,40*3
pop cx
loop @@10
mov cs:framecount,0
ret
init_interference ENDP
do_interference PROC NEAR
@@aga: call waitb
mov dx,3c0h
mov al,13h
out dx,al
mov al,byte ptr cs:scrnposl
out dx,al
mov al,32
out dx,al
xor al,al
mov si,OFFSET pal
mov cx,16*3
call outpal
mov si,cs:palanimc
add si,cs:patdir
cmp si,0
jge @@a11
mov si,8*3-3
@@a11: cmp si,8*3
jb @@a1
xor si,si
@@a1: mov cs:palanimc,si
mov cs:palanimc2,si
mov dx,cs:palfader
add dx,2
cmp dx,512
jb @@pf1
mov dx,512
@@pf1: mov cs:palfader,dx
;
mov si,cs:palanimc
add si,OFFSET pal0
mov di,OFFSET pal
mov cx,8*3
call mixpal
mov si,cs:palanimc
add si,OFFSET pal0
mov di,OFFSET pal+8*3
mov cx,8*3
call mixpal
mov si,OFFSET pal
mov al,0
mov cx,16*3
call outpal
jmp @@OVER3
mov dx,3c4h
mov al,2
mov ah,cs:zumplane
rol ah,1
mov cs:zumplane,ah
out dx,ax
mov ax,0a000h
mov es,ax
xor si,si
mov di,cs:scrnpos
mov bp,cs:sinurot
add bp,7*2
and bp,2047
mov cs:sinurot,bp
mov cx,200
@@cp1: zzz=0
push si
add bp,9*2
and bp,2047
mov bx,cs:_sin1024[bp]
sar bx,3
mov bh,cs:sinuspower
movsx ax,byte ptr cs:power0[bx]
sub ax,cs:scrnposl
add ax,cs:overx
mov bx,ax
and bx,7
shl bx,1
neg bx
mov ds,cs:circles[bx+7*2]
sar ax,3
add si,ax
add si,cs:overya
REPT 40/4+1
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
pop si
add di,80
add si,80
dec cx
jz @@cp0
jmp @@cp1
@@cp0:
@@OVER3:
;MOVE
mov bx,6
int 0fch
;bx=row
and bx,7
cmp bx,0
jne @@m1
mov cs:patdir,-3
@@m1: cmp bx,4
jne @@m2
mov cs:patdir,-3 ;-3
@@m2:
mov bx,cs:scrnrot
add bx,5
and bx,1023
mov cs:scrnrot,bx
cmp cs:framecount,64
jb @@szf1
inc cs:rotspeed
mov ax,cs:sizefade
cmp ax,16834
jge @@1
;add ax,256
@@1: mov cs:sizefade,ax
@@szf1:
shl bx,1
mov ax,cs:_sin1024[bx]
imul cs:sizefade
mov ax,dx
add ax,160
mov cs:scrnx,ax
add bx,256*2
and bx,1024*2-1
mov ax,cs:_sin1024[bx]
imul cs:sizefade
mov ax,dx
add ax,100
mov cs:scrny,ax
mov bx,cs:overrot
add bx,cs:rotspeed
and bx,1023
mov cs:overrot,bx
shl bx,1
mov ax,cs:_sin1024[bx]
sar ax,2
imul cs:sizefade
mov ax,dx
add ax,160
mov cs:overx,ax
add bx,256*2
and bx,1024*2-1
mov ax,cs:_sin1024[bx]
sar ax,2
imul cs:sizefade
mov ax,dx
add ax,100
mov bx,80
mul bx
mov cs:overya,ax
mov ax,cs:scrnx
mov bx,ax
and ax,7
mov cs:scrnposl,ax
mov ax,80
mul cs:scrny
sar bx,3
add ax,bx
mov cs:scrnpos,ax
mov bx,cs:scrnpos
mov dx,3d4h
mov al,0ch
mov ah,bh
out dx,ax
inc al
mov ah,bl
out dx,ax
cmp cs:framecount,192
jb @@asd2
test cs:framecount,3
jnz @@asd2
@@asd2:
; cmp cs:framecount,256
; jb @@p1
; inc cs:powercnt
; cmp cs:powercnt,16
; jb @@p1
; mov cs:powercnt,0
; cmp cs:sinuspower,15
; jae @@p1
; inc cs:sinuspower
@@p1:
inc cs:framecount
cmp cs:framecount,256
je @@xx
mov bx,2
int 0fch
or ax,ax
jz @@aga
@@xx: ret
do_interference ENDP
PUBLIC _dointerference2
_dointerference2 PROC FAR
push bp
mov bp,sp
push si
push di
push ds
call resetmode13
call init_interference
call do_interference
mov es,cs:memseg
mov ah,49h
int 21h
pop ds
pop di
pop si
pop bp
ret
_dointerference2 ENDP
code2 ENDS
END