home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Equalizer BBS
/
equalizer-bbs-collection_2004.zip
/
equalizer-bbs-collection
/
DEMOSCENE-STUFF
/
TIMESRC.ZIP
/
GNBG.ASM
< prev
next >
Wrap
Assembly Source File
|
1994-02-26
|
7KB
|
299 lines
.386p
code32 segment para public use32
assume cs:code32, ds:code32
include pmode.inc
include argc.inc
include vrt.inc
include v.inc
public _vidptr, _pagehibyte
public _gnbg_setup, _gnbg_draw, _gnbg_flip
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; DATA
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
align 4
gnbgtbl label word
include gnbgtbl.m
gnbgtbltbl label dword
temp=offset gnbgtbl
rept 320
dd temp
temp=temp+2*100
endm
temp=offset gnbgtbl
rept 319
dd temp
temp=temp+2*100
endm
_vidptr dd ? ; ptr to work video page
ressubtbl dd 80*16-4,80*16-8,0
resbittbl db 11h,33h,0ffh
resshftbl db 1,2,1
vpdir dw 0 ; viewpoint direction (0-319)
vploc dw 8080h ; viewpoint loc, Y*256+X
skewptr dd gnbgtbl ; ptr to row to skew
skewcounter dw 10fh ; counter between skewing
skewmode db 0 ; 0=wait, 1=skewing
skewindex db 3
skewtbl db 1,-3,5,-3
mtblvpdir db 5,0,0e7h,0f0h,0, 5,-7,6,-5,9,-6,7,-9
mtblvpy db 3,0,0c0h,0c0h,0, 3,-1,5,-3,1,-5,1,-3
mtblvpx db 1,0,060h,0c0h,0, 1,-5,1,-3,3,-1,5,-3
_pagehibyte db 91h
ovrtcounter db ?
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; CODE
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Set up draw system
; Out:
; EAX,EBX,ECX,EDX,ESI,EDI,EBP - ?
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_gnbg_setup:
mov dx,3d4h ; set up CRTC regs needed
@outw 3213h
@outb 0ch
mov al,'3' ; chek for unlimited speed switch
call _cchekswitch
jc short setupf1
mov flipl0m0,9090h
setupf1:
xor ebx,ebx ; check forced switch resolution
mov al,'0'
setupl0:
call _cchekswitch
jnc short setupf0
inc ebx
inc eax
cmp al,'3'
jb setupl0
mov al,byte ptr _vrt_timer ; time draw and set resolution
mov ovrtcounter,al
push eax
setupl1:
cmp al,byte ptr _vrt_timer
je setupl1
call _gnbg_draw
pop eax
sub al,byte ptr _vrt_timer
xor ebx,ebx
cmp al,-3
adc bl,0
cmp al,-5
adc bl,0
setupf0:
mov al,resbittbl[ebx]
mov resbit[-1],al
mov eax,ressubtbl[ebx*4]
mov ressub[-4],eax
mov al,resshftbl[ebx]
mov resshf[-1],al
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Handle all grafix crap for drawing 256x256 buffer to screen
; Out:
; EAX,EBX,ECX,EDX,ESI,EDI,EBP - ?
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_gnbg_draw:
cmp skewmode,0 ; do skew
jne short drawf1
dec skewcounter
jnz short drawf2
mov skewcounter,175h
mov skewmode,1
mov al,skewindex
inc al
and al,3
mov skewindex,al
jmp short drawf2
drawf1:
mov ebx,skewptr
movzx eax,skewindex
movsx eax,skewtbl[eax]
mov cl,80
drawl3:
rept 4
add [ebx],ax
add ebx,200
endm
dec cl
jnz drawl3
sub ebx,320*200-2
cmp ebx,offset gnbgtbl+200
jb short drawf3
mov ebx,offset gnbgtbl
mov skewmode,0
drawf3:
mov skewptr,ebx
drawf2:
mov dx,vploc ; do movement on X and Y
mov edi,offset mtblvpy
call drawr0
add dh,al
mov edi,offset mtblvpx
call drawr0
add dl,al
mov vploc,dx
mov si,dx
mov edi,offset mtblvpdir ; do direction spin
call drawr0
movsx eax,al
add ax,vpdir
cmp ax,320
jb short drawf0
jl short drawf0a
sub ax,320
jmp short drawf0
drawf0a:
add ax,320
drawf0:
mov vpdir,ax
movzx eax,ax
lea ebx,[eax*4+offset gnbgtbltbl]
mov al,ovrtcounter ; wait for draw safe
drawl0:
cmp al,byte ptr _vrt_timer
je drawl0
movzx edi,_pagehibyte ; draw bottom of screen
shl edi,8
push edi
add di,100*199
mov es,_vidsel
mov ds,_bufsel
mov al,11h ; 2baddedh
resbit label byte
mov ecx,-101
drawl1:
mov dx,3c5h
out dx,al
mov ah,80
mov edx,2
drawl1a:
mov ebp,cs:[ebx]
push esi
rept 100
add si,[ebp]
add ebp,edx
movs byte ptr es:[di],byte ptr ds:[si]
add edi,ecx
endm
pop esi
add ebx,16
add edi,100*100+1
dec ah
jnz drawl1a
sub ebx,80*16-4 ; 2baddedh
ressub label dword
sub edi,80
db 0c0h,0e0h,1 ; shl al,1 ; 2baddedh
resshf label byte
jnc drawl1
mov ds,cs:_seldata
mov es,_seldata
mov dx,3c5h ; mirror to top of screen
@outb 0fh
mov dl,0ceh
@outw 4105h
pop edi
add edi,0a0000h
sub edi,_code32a
mov _vidptr,edi
add edi,100*99
lea esi,[edi+100]
xor ecx,ecx
mov bl,10
mov eax,-180
mov edx,20
drawl2:
rept 10
mov cl,80
rep movsb
add esi,edx
add edi,eax
endm
dec bl
jnz drawl2
mov dx,3ceh
@outw 4005h
ret
;-----------------------------------------------------------------------------
drawr0:
mov al,[edi]
cmp byte ptr [edi+1],0
jne short drawr0f0
mov bl,[edi+2]
dec bl
jnz short drawr0f1
mov bl,[edi+4]
inc bl
and bl,7
mov [edi+4],bl
mov byte ptr [edi+1],1
mov bl,[edi+3]
drawr0f1:
mov [edi+2],bl
ret
drawr0f0:
movzx ebx,byte ptr [edi+4]
cmp al,[edi+ebx+5]
je short drawr0f2
setl bl
setg bh
add al,bl
sub al,bh
mov [edi],al
ret
drawr0f2:
mov byte ptr [edi+1],0
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Flip video page
; Out:
; EAX,EBX,ECX,EDX,ESI,EDI,EBP - ?
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_gnbg_flip:
mov ah,ovrtcounter
flipl0:
mov al,byte ptr _vrt_timer
sub al,ah
cmp al,3
flipl0m0 label word
jb short flipl0
mov dx,3d5h
mov al,_pagehibyte
out dx,al
mov ah,byte ptr _vrt_timer
mov ovrtcounter,ah
xor al,0b0h
mov _pagehibyte,al
ret
code32 ends
end