SecondReality/COMAN/ASM1.ASM
2017-09-24 01:45:36 +02:00

207 lines
No EOL
2.6 KiB
NASM

EXTRN theloop:far
code SEGMENT para public 'CODE'
ASSUME cs:code
.386
LOCALS
PUBLIC _wave1,_wave2,_vbuf,_cameralevel
_wave1 dw 0,0
_wave2 dw 0,0
_vbuf dw 0,0
_cameralevel dw 0
PUBLIC _sin1024
include sin1024.inc
PUBLIC _setborder
_setborder PROC FAR
push bp
mov bp,sp
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,11h+32
out dx,al
mov al,[bp+6]
out dx,al
pop bp
ret
_setborder ENDP
PUBLIC _inittwk
_inittwk PROC FAR
push bp
mov bp,sp
push si
push di
push ds
;clear palette
mov dx,3c8h
xor al,al
out dx,al
inc dx
mov cx,768
@@1: out dx,al
loop @@1
mov dx,3d4h
;400 rows
;mov ax,00009h
;out dx,ax
;tweak
mov ax,00014h
out dx,ax
mov ax,0e317h
out dx,ax
mov dx,3c4h
mov ax,0604h
out dx,ax
;
mov dx,3c4h
mov ax,0f02h
out dx,ax
mov ax,0a000h
mov es,ax
xor di,di
mov cx,32768
xor ax,ax
rep stosw
;
pop ds
pop di
pop si
pop bp
ret
_inittwk ENDP
PUBLIC _setpalarea
_setpalarea PROC FAR
push bp
mov bp,sp
push si
push di
push ds
lds si,[bp+6]
mov ax,[bp+10]
mov dx,3c8h
out dx,al
mov cx,[bp+12]
mov ax,cx
shl cx,1
add cx,ax
inc dx
rep outsb
sti
pop ds
pop di
pop si
pop bp
ret
_setpalarea ENDP
PUBLIC _docol
_docol PROC FAR
push bp
mov bp,sp
push si
push di
push ds
mov es,cs:_vbuf[2]
mov fs,cs:_wave1[2]
mov gs,cs:_wave2[2]
mov si,[bp+6]
mov di,[bp+8]
mov cx,[bp+10]
add cx,cx
mov dx,[bp+12]
add dx,dx
mov bp,[bp+14]
mov ax,cs:_cameralevel
int 3
call theloop
pop ds
pop di
pop si
pop bp
ret
_docol ENDP
PUBLIC _docopy
_docopy PROC FAR
push bp
mov bp,sp
push si
push di
push ds
mov es,[bp+6]
mov ds,cs:_vbuf[2]
mov si,50*160
mov di,50*80
mov cx,150
mov bl,255
mov bh,bl
mov ax,bx
shl ebx,16
mov bx,ax
@@1: cmp cx,100
jge @@2
mov dx,3c4h
mov ax,0302h
out dx,ax
zzz=0
REPT 20
mov eax,ds:[si+zzz]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
mov dx,3c4h
mov ax,0C02h
out dx,ax
zzz=0
REPT 20
mov eax,ds:[si+zzz+80]
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
add si,160
add di,80
dec cx
jnz @@1
pop ds
pop di
pop si
pop bp
ret
@@2: ;this loop also clears
mov dx,3c4h
mov ax,0302h
out dx,ax
zzz=0
REPT 20
mov eax,ds:[si+zzz]
mov ds:[si+zzz],ebx
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
mov dx,3c4h
mov ax,0C02h
out dx,ax
zzz=0
REPT 20
mov eax,ds:[si+zzz+80]
mov ds:[si+zzz+80],ebx
mov es:[di+zzz],eax
zzz=zzz+4
ENDM
sub ebx,01010101h
cmp bl,192
jge @@3
mov ebx,0c0c0c0c0h
@@3: add si,160
add di,80
dec cx
jmp @@1
_docopy ENDP
code ENDS
END