SecondReality/VISU/A.INC
2017-09-24 01:45:36 +02:00

188 lines
4.4 KiB
PHP

;/****************************************************************************
;** MODULE: a.inc
;** AUTHOR: Sami Tammilehto / Fennosoftec OY
;** DOCUMENT: ?
;** VERSION: 1.0
;** REFERENCE: -
;** REVISED BY: -
;*****************************************************************************
;**
;** Assembler / Include
;** - variable definitions
;** - constant definitions
;**
;****************************************************************************/
.386
LOCALS
;######## macros ########
;note: C macros expect a LARGE memory model
LOADDS MACRO ;loads the ds segment to point to asm_data
mov ax,SEG _datanull
mov ds,ax
ENDM
LOADES MACRO ;loads the es segment to point to asm_data
mov ax,SEG _datanull
mov es,ax
ENDM
LOADGS MACRO ;loads the gs segment to point to asm_data
mov ax,SEG _datanull
mov gs,ax
ENDM
CBEG MACRO ;C/Assembler procedure begin
push bp
mov bp,sp
push si
push di
push ds
LOADDS ;since all routines expect to have DS pointed to the
;data segment, it's loaded at every public entrypoint
;(which should all be C procedures).
ENDM
CEND MACRO ;C/Assembler procedure end
pop ds
pop di
pop si
pop bp
ret
ENDM
CBEGR MACRO bytes ;C/Assembler procedure begin - with local variable reserve
push bp
mov bp,sp
sub sp,bytes
push si
push di
push ds
push bp ;just in case the asm routine changes bp
LOADDS ;since all routines expect to have DS pointed to the
;data segment, it's loaded at every public entrypoint
;(which should all be C procedures).
ENDM
CENDR MACRO ;C/Assembler procedure end
pop bp
pop ds
pop di
pop si
mov sp,bp
pop bp
ret
ENDM
movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg]
mov reg,[bp+(par)*2+6]
ENDM
ldspar MACRO reg,par ;loads pointer parameter [par(0..)] to register ds:[reg]
lds reg,[bp+(par)*2+6]
ENDM
lespar MACRO reg,par ;loads pointer parameter [par(0..)] to register es:[reg]
les reg,[bp+(par)*2+6]
ENDM
lfspar MACRO reg,par ;loads pointer parameter [par(0..)] to register fs:[reg]
lfs reg,[bp+(par)*2+6]
ENDM
lgspar MACRO reg,par ;loads pointer parameter [par(0..)] to register gs:[reg]
lgs reg,[bp+(par)*2+6]
ENDM
;######## public routines ########
global _vid_init:far
global _vid_window:far
global _vid_cameraangle:far
global _vid_deinit:far
global _vid_setpal:far
global _vid_dotdisplay_pvlist:far
global _vid_dotdisplay_zcolor:far
global _vid_clear:far
global _vid_clear255:far
global _vid_clearbg:far
global _vid_switch:far
global _vid_setswitch:far
global _vid_waitb:far
global _vid_poly:far
global _vid_pset:far
global _vid_skyclear:far
global _vid_drawpolylist:far
global _vid_inittimer:far
global _vid_deinittimer:far
global _vid_drawsight:far
global _vid_pic320200:far
;polygon fillers
global _vid_drawfill:far
global _vid_drawfill_nrm:far
global _vid_drawfill_grd:far
global _vid_drawdots:far
global _calc_project:far
global _calc_project16:far
global _calc_setrmatrix_rotyxz:far
global _calc_setrmatrix_rotxyz:far
global _calc_setrmatrix_rotzyx:far
global _calc_setrmatrix_ident:far
global _calc_applyrmatrix:far
global _calc_rotate:far
global _calc_rotate16:far
global _calc_sftranslate:far
global _calc_singlez:far
global _calc_nrotate:far
global _calc_mulrmatrix:far
global _calc_invrmatrix:far
global _draw_polylist:far
global _draw_setfillroutine:far
;######## constants ######## (these should be same as in CDATA.H)
MAXROWS = 480 ;maximum number of rows used in any mode
MAXCOLS = 640 ;maximum number of rows used in any mode (should be divisible with 4)
MAXPOLYSIDES = 16 ;maximum sides in a polygon
;######## variables ########
;for documentation on global variables, see adata.asm
global _datanull:dword
global _rows:word
global _rowlen:word
global _vramseg:word
global _cdataseg:word
CLIPMIN equ 0
CLIPMAX equ 4
global _projclipx:dword
global _projclipy:dword
global _projclipz:dword
global _projmulx:dword
global _projmuly:dword
global _projaddx:dword
global _projaddy:dword
global _projaspect:word
global _projoversampleshr:word
;equs are offsets of routine pointers inside vr for current video driver
PSET equ 0
CLEAR equ 2
SWITCH equ 4
WAITB equ 6
VRSIZE equ 8
global vr:word
global _sintable:word
global _avistan:word
global _afilldiv:word
global _polydrw:word
;####### data types ########
include ad.inc