241 lines
3 KiB
Text
241 lines
3 KiB
Text
;included to koe.asm
|
|
|
|
.386
|
|
|
|
STARS equ 4800
|
|
|
|
rows1 dw 100 dup(0)
|
|
dw 2*28 dup(64000)
|
|
dw 100 dup(0)
|
|
|
|
d1seg dw 0
|
|
d1segp dw 4
|
|
d2seg dw 0
|
|
d2segp dw 4
|
|
d3seg dw 0
|
|
d3segp dw 4
|
|
d4seg dw 0
|
|
d4segp dw 4
|
|
|
|
ALIGN 2
|
|
seed1 dw 1234
|
|
seed2 dw 1234h
|
|
random PROC NEAR
|
|
push bx
|
|
push cx
|
|
push dx
|
|
mov ax,ds:seed1
|
|
mov bx,ds:seed2
|
|
mov cx,ax
|
|
mov dx,bx
|
|
add cx,bx
|
|
add ax,bx
|
|
rol ax,cl
|
|
xor ax,dx
|
|
xchg cl,ch
|
|
add bx,cx
|
|
add dx,bx
|
|
add cx,ax
|
|
ror bx,1
|
|
sbb ax,dx
|
|
mov ds:seed2,dx
|
|
mov ds:seed1,ax
|
|
pop dx
|
|
pop cx
|
|
pop bx
|
|
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
|
|
|
|
brandom PROC NEAR
|
|
call random
|
|
mov bx,ax
|
|
call random
|
|
rol ax,4
|
|
xor ax,bx
|
|
ret
|
|
brandom ENDP
|
|
|
|
ALIGN 2
|
|
tmpx dw 0,0
|
|
tmpy dw 0,0
|
|
|
|
init_stars_2 PROC NEAR
|
|
@@6: call brandom
|
|
shr ax,6
|
|
sub ax,512
|
|
cwd
|
|
shld dx,ax,7
|
|
shl ax,7
|
|
mov ds:tmpx[0],ax
|
|
mov ds:tmpx[2],dx
|
|
|
|
call brandom
|
|
shr ax,6
|
|
sub ax,512
|
|
cwd
|
|
shld dx,ax,7
|
|
shl ax,7
|
|
mov ds:tmpy[0],ax
|
|
mov ds:tmpy[2],dx
|
|
|
|
mov cx,128
|
|
mov bp,64+1024
|
|
mov si,di
|
|
@@5: mov ax,ds:tmpx[0]
|
|
mov dx,ds:tmpx[2]
|
|
idiv bp
|
|
add ax,100
|
|
cmp ax,199
|
|
ja @@7
|
|
mov bx,ax
|
|
shl bx,1
|
|
mov bx,ds:rows1[bx]
|
|
mov ax,ds:tmpy[0]
|
|
mov dx,ds:tmpy[2]
|
|
idiv bp
|
|
add ax,160
|
|
cmp ax,319
|
|
ja @@7
|
|
add bx,ax
|
|
;mov byte ptr fs:[bx],2
|
|
mov es:[di],bx
|
|
add di,2
|
|
jz @@8
|
|
sub bp,8
|
|
loop @@5
|
|
@@7: jmp @@6
|
|
|
|
@@8: mov word ptr es:[si],64000
|
|
add si,2
|
|
jnz @@8
|
|
ret
|
|
init_stars_2 ENDP
|
|
|
|
init_stars PROC NEAR
|
|
mov ax,13h
|
|
int 10h
|
|
;set screen width to 320-8 pixs
|
|
mov dx,3d4h
|
|
mov al,11h
|
|
out dx,al
|
|
inc dx
|
|
in al,dx
|
|
and al,127
|
|
out dx,al
|
|
;
|
|
mov ah,48h
|
|
mov bx,4096
|
|
int 21h
|
|
mov cs:d1seg,ax
|
|
mov ah,48h
|
|
mov bx,4096
|
|
int 21h
|
|
mov cs:d2seg,ax
|
|
mov ah,48h
|
|
mov bx,4096
|
|
int 21h
|
|
mov cs:d3seg,ax
|
|
mov ah,48h
|
|
mov bx,4096
|
|
int 21h
|
|
mov cs:d4seg,ax
|
|
|
|
mov cx,200
|
|
mov ax,0
|
|
mov dx,320
|
|
mov bx,OFFSET rows1
|
|
@@4: mov cs:[bx],ax
|
|
add ax,dx
|
|
add bx,2
|
|
loop @@4
|
|
|
|
mov ax,cs
|
|
mov ds,ax
|
|
mov ax,0a000h
|
|
mov fs,ax
|
|
|
|
mov es,ds:d1seg
|
|
xor di,di
|
|
call init_stars_2
|
|
|
|
mov es,ds:d2seg
|
|
xor di,di
|
|
call init_stars_2
|
|
|
|
mov es,ds:d3seg
|
|
xor di,di
|
|
call init_stars_2
|
|
|
|
mov es,ds:d4seg
|
|
xor di,di
|
|
call init_stars_2
|
|
|
|
ret
|
|
init_stars ENDP
|
|
|
|
do_stars_2 PROC NEAR
|
|
mov ax,7
|
|
zzz=0
|
|
REPT 256*4
|
|
mov ebx,ds:[si+zzz+0]
|
|
mov es:[bx],ah
|
|
shr ebx,16
|
|
mov es:[bx],al
|
|
zzz=zzz+64
|
|
ENDM
|
|
ret
|
|
do_stars_2 ENDP
|
|
|
|
do_stars PROC NEAR
|
|
@@aga: mov al,0
|
|
call setborder
|
|
call waitb
|
|
mov al,1
|
|
call setborder
|
|
|
|
mov ax,0a000h
|
|
mov es,ax
|
|
|
|
mov ds,cs:d1seg
|
|
mov si,cs:d1segp
|
|
add si,2
|
|
mov cs:d1segp,si
|
|
; call do_stars_2
|
|
|
|
mov ds,cs:d2seg
|
|
mov si,cs:d2segp
|
|
add si,2
|
|
mov cs:d2segp,si
|
|
; call do_stars_2
|
|
|
|
mov ds,cs:d3seg
|
|
mov si,cs:d3segp
|
|
add si,2
|
|
mov cs:d3segp,si
|
|
; call do_stars_2
|
|
|
|
mov ds,cs:d4seg
|
|
mov si,cs:d4segp
|
|
add si,2
|
|
mov cs:d4segp,si
|
|
; call do_stars_2
|
|
|
|
mov bx,2
|
|
int 0fch
|
|
or ax,ax
|
|
jnz @@end
|
|
jmp @@aga
|
|
@@end: ret
|
|
do_stars ENDP
|