188 lines
4.4 KiB
PHP
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
|