SecondReality/DDSTARS/STARS.OK
2017-09-24 01:45:36 +02:00

650 lines
8.3 KiB
Text

;included to koe.asm
.386
include polyega.asm
STARS equ 512
starvram dw 0a000h
emmhandle dw 0
emmseg dw 0
emmpage4 dw 0
starlimit dw 0
startxtopen dw 0
startxtclose dw 0
startxtp0 dw 0
starframe dw 0
starpalfade db 0,0
_nostar1 dw 200
_nostar2 dw 199
rows1 dw 200 dup(0)
rows dw 400 dup(0)
star dw STARS dup(0,0,0,0)
muldivx dw 256 dup(0)
muldivy dw 256 dup(0)
ALIGN 2
seed1 dw 1234
seed2 dw 1234
random PROC NEAR
push dx
mov dx,cs:seed2
mov ax,cs:seed1
shl ax,1
jnc @@1
xor ax,0f7ffh
@@1: mov cs:seed1,ax
sub dx,ax
xor ax,dx
rol dx,1
mov cs:seed2,dx
pop dx
ret
random ENDP
setborder PROC NEAR
push ax
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,11h+20h
out dx,al
pop ax
out dx,al
ret
setborder ENDP
init_stars PROC NEAR
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,20h
out dx,al
mov dx,3d4h
mov al,9
out dx,al
inc dx
in al,dx
and al,127
out dx,al
mov ax,0a000h
mov es,ax
xor di,di
mov cx,32768
xor ax,ax
rep stosw
mov ah,43h
mov bx,32
int 67h
mov cs:emmhandle,dx
mov ah,41h
int 67h
mov cs:emmseg,bx
call clearsbu
mov cx,200
mov ax,0
mov dx,320/8
mov bx,OFFSET rows1
@@4: mov cs:[bx],ax
add ax,dx
add bx,2
loop @@4
mov cx,400
mov ax,0
mov dx,320/8
mov bx,OFFSET rows
@@4b: mov cs:[bx],ax
add ax,dx
add bx,2
loop @@4b
mov ax,cs
mov es,ax
mov di,OFFSET star
mov cx,STARS
@@3: mov al,cl
dec al
xor ah,ah
stosw
call random
and ax,1023
sub ax,512
stosw
call random
and ax,1023
sub ax,512
stosw
xor ax,ax
stosw
loop @@3
mov di,OFFSET muldivy
mov cx,256
mov bp,130
@@2b: mov dx,64
xor ax,ax
div bp
shr ax,1
stosw
add bp,4
loop @@2b
mov di,OFFSET muldivx
mov cx,256
mov bp,130
@@2c: mov dx,80 ;64
xor ax,ax
div bp
shr ax,1
stosw
add bp,4
loop @@2c
mov cs:starlimit,STARS
mov cs:starpalfade,0
mov cs:startxtopen,-256
mov cs:startxtclose,800
mov cx,100
@@sa: push cx
call staradd
pop cx
loop @@sa
ret
init_stars ENDP
deinit_stars PROC NEAR
mov ah,45h
mov dx,cs:emmhandle
int 67h
ret
deinit_stars ENDP
fetch4ax PROC NEAR
mov bx,ax
push ax
mov ax,4400h
shr bx,2
mov dx,cs:emmhandle
int 67h
pop ax
and ax,3
shl ax,12-4
add ax,cs:emmseg
ret
fetch4ax ENDP
clearsbu PROC NEAR
mov cx,128
mov ax,0
@@1: push cx
push ax
call fetch4ax
mov es,ax
mov cx,4096/4
xor eax,eax
xor di,di
rep stosd
pop ax
pop cx
inc ax
loop @@1
ret
clearsbu ENDP
staradd PROC NEAR
mov ax,cs:emmpage4
inc ax
and ax,127
mov cs:emmpage4,ax
call fetch4ax
mov es,ax
mov ax,cs
mov ds,ax
mov ax,ds:starlimit
or ax,ax
jz @@11
dec ax
mov ds:starlimit,ax
@@11: mov bp,STARS
mov si,OFFSET star
@@1: movzx bx,ds:[si]
sub bl,2
mov ds:[si],bl
jc @@4
cmp bp,cs:starlimit
jb @@2
shl bx,1
mov ax,ds:[si+4]
imul ds:muldivy[bx]
shld dx,ax,2
add dx,100
cmp dx,99
ja @@2
mov cx,dx
mov ax,ds:[si+2]
imul ds:muldivx[bx]
mov bx,cx
shld dx,ax,2
add dx,160
cmp dx,319
ja @@2
mov cl,dl
and cl,7
shr dx,3
shl bx,1
mov bx,ds:rows1[bx]
add bx,dx
mov ch,80h
shr ch,cl
or byte ptr es:[bx],ch
@@2: add si,8
dec bp
jnz @@1
ret
@@4: call random
and ax,1023
sub ax,512
mov cs:[si+2],ax
call random
and ax,1023
sub ax,512
mov cs:[si+4],ax
jmp @@2
staradd ENDP
risetext PROC NEAR
mov ax,cs:startxtopen
cmp ax,100
jge @@12
inc ax
mov cs:startxtopen,ax
@@12: mov dx,cs:startxtclose
cmp dx,0
jle @@21
dec dx
mov cs:startxtclose,dx
@@21: cmp dx,ax
jge @@22
mov ax,dx
@@22: ;ax=startxtuse
cmp ax,0
jg @@tcc
jmp @@tc0
@@tcc: cmp ax,1
jg @@tnz
mov ax,2
@@tnz: push ax
mov di,250
sub di,ax
mov cs:_nostar2,ax
mov ax,40
mul di
mov di,ax
inc di
mov cs:_nostar1,di
dec di
mov ax,SEG _textpic
mov ds,ax
mov si,040h
add si,cs:startxtp0
pop cx
dec cx
sub di,80
mov dx,3c4h
mov ax,0f02h
out dx,ax
xor eax,eax
zzz=0
REPT 80/4
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add di,80
dec cx
jz @@tc0c
mov dx,3c4h
mov ax,0f02h
out dx,ax
mov eax,-1
zzz=0
REPT 40/4
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add di,40
dec cx
jz @@tc0
dec cx
jz @@tc0b
mov dx,3ceh
mov ax,0400h
out dx,ax
mov ax,01h+400h+800h
out dx,ax
@@tc1: mov dx,3c4h
mov ax,0102h+400h+800h
out dx,ax
zzz=0
REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add si,40
mov dx,3c4h
mov ax,0202h+400h+800h
out dx,ax
zzz=0
REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add si,40
add di,40
dec cx
jz @@tc0b
jmp @@tc1
@@tc0b: mov dx,3ceh
mov ax,0001h
out dx,ax
mov dx,3c4h
mov ax,0f02h
out dx,ax
mov eax,-1
zzz=0
REPT 40/4
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add di,40
dec di
mov cs:_nostar2,di
@@tc0: ret
@@tc0c: mov dx,3c4h
mov ax,0f02h
out dx,ax
xor eax,eax
zzz=0
REPT 80/4
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
ret
risetext ENDP
do_stars PROC NEAR
@@aga: mov al,0
;call setborder
mov dx,3d4h
mov ax,cs:starvram
cmp ax,0a000h
je @@sw1
mov cs:starvram,0a000h
mov ax,400ch
jmp @@sw0
@@sw1: mov cs:starvram,0a400h
mov ax,000ch
@@sw0: out dx,ax
call waitb
mov al,5
;call setborder
cmp cs:starpalfade,32
ja @@p1
mov bl,cs:starpalfade
inc bl
mov cs:starpalfade,bl
shl bl,3
jnc @@p2
mov bl,255
@@p2:
mov dx,3c8h
xor al,al
out dx,al
inc dx
mov al,0
out dx,al
mov al,0
out dx,al
mov al,0
out dx,al
mov al,5
mul bl
mov al,ah
out dx,al
mov al,35
mul bl
mov al,ah
out dx,al
mov al,35
mul bl
mov al,ah
out dx,al
mov al,30
mul bl
mov al,ah
out dx,al
mov al,50
mul bl
mov al,ah
out dx,al
mov al,50
mul bl
mov al,ah
out dx,al
mov al,61
mul bl
mov al,ah
out dx,al
mov al,61
mul bl
mov al,ah
out dx,al
mov al,61
mul bl
mov al,ah
out dx,al
;-----
mov al,0
out dx,al
mov al,0
out dx,al
mov al,0
out dx,al
mov al,10
out dx,al
mov al,20
out dx,al
mov al,35
out dx,al
mov al,20
out dx,al
mov al,30
out dx,al
mov al,45
out dx,al
mov al,30
out dx,al
mov al,40
out dx,al
mov al,60
out dx,al
@@p1:
mov ax,cs:starframe
inc ax
mov cs:starframe,ax
cmp ax,4
jne @@st1
mov cs:startxtp0,80
mov cs:startxtopen,-256-100
mov cs:startxtclose,800+100
@@st1: cmp ax,1200
jne @@st2
mov cs:startxtp0,101*80
mov cs:startxtopen,-256
mov cs:startxtclose,800
@@st2:
call risetext
call staradd
mov ax,es
mov ds,ax
xor si,si
mov dx,3c4h
mov ax,0102h
out dx,ax
mov ax,cs:starvram
mov es,ax
xor di,di
mov cx,100
@@3: zzz=0
cmp di,cs:_nostar1
jl @@3g
cmp di,cs:_nostar2
jg @@3g
jmp @@3s
@@3g: REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
@@3s: add si,40
add di,80
loop @@3
mov ax,cs:emmpage4
add ax,32
and ax,127
call fetch4ax
mov ds,ax
mov si,99*40
mov cx,100
@@5: zzz=0
cmp di,cs:_nostar1
jl @@5g
cmp di,cs:_nostar2
jg @@5g
jmp @@5s
@@5g: REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
@@5s: sub si,40
add di,80
loop @@5
mov dx,3c4h
mov ax,0202h
out dx,ax
mov di,40
mov ax,cs:emmpage4
add ax,64
and ax,127
call fetch4ax
mov ds,ax
xor si,si
mov cx,100
@@7: zzz=0
cmp di,cs:_nostar1
jl @@7g
cmp di,cs:_nostar2
jg @@7g
jmp @@7s
@@7g: REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
@@7s: add si,40
add di,80
loop @@7
mov ax,cs:emmpage4
add ax,96
and ax,127
call fetch4ax
mov ds,ax
mov si,99*40
mov cx,100
@@8: zzz=0
cmp di,cs:_nostar1
jl @@8g
cmp di,cs:_nostar2
jg @@8g
jmp @@8s
@@8g: REPT 40/4
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
@@8s: sub si,40
add di,80
loop @@8
; mov dx,3c4h
; mov ax,0f02h
; out dx,ax
; mov cs:polysides,4
; mov dword ptr cs:polyxy[0], 10000h*10+10+01000000h
; mov dword ptr cs:polyxy[4], 10000h*310+10+01000000h
; mov dword ptr cs:polyxy[8], 10000h*310+390+01000000h
; mov dword ptr cs:polyxy[12],10000h*10+390+01000000h
; int 3
; call poly
mov bx,2
int 0fch
or ax,ax
jz @@aga
ret
do_stars ENDP