cruisin-usa/MAP.ASM

1594 lines
23 KiB
NASM
Executable File

.FILE "MAP.ASM"
*----------------------------------------------------------------------------
*OVERHEAD MAP
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
.include MACS.EQU
.include OBJ.EQU
.include MPROC.EQU
.include VUNIT.EQU
.include SYSID.EQU
.include SYS.EQU
.include GLOBALS.EQU
.include SNDTAB.EQU
.include PALL.EQU
.include OBJECTS.EQU
.include TEXT.EQU
.include H2HOBJ.EQU
*----------------------------------------------------------------------------
*
*
*
*
*
*
MAP_ITERATIONS .set 30
;INITIAL THETAs
M1ST .set -HALFPI
M2ST .set HALFPI
M3ST .set -HALFPI
M4ST .set HALFPI
;THETA DELTAs
M1STD .set 0.052359877 ;HALFPI/30
M2STD .set -0.052359877 ;-HALFPI/30
M3STD .set 0.052359877 ;HALFPI/30
M4STD .set -0.052359877 ;-HALFPI/30
M1STDI
M3STDI .float M1STD
M2STDI
M4STDI .float M2STD
;PROCESS DATA DEFINEs
MAP1OBJ .set PDATA+0
MAP2OBJ .set PDATA+1
MAP3OBJ .set PDATA+2
MAP4OBJ .set PDATA+3
MAPLPX .set PDATA+4 ;MAP LEAD POSITION X
MAPLPY .set PDATA+5 ;MAP LEAD POSITION Y
MAPLPZ .set PDATA+6 ;MAP LEAD POSITION Z
MAP1T .set PDATA+7 ;MAP 1 THETA
MAP2T .set PDATA+8 ;MAP 2 THETA
MAP3T .set PDATA+9 ;MAP 3 THETA
MAP4T .set PDATA+10;MAP 4 THETA
MAPLTX .set PDATA+11 ;MAP LEAD THETA
MAPLMAT .set PDATA+12 ;MAP LEAD MATRIX
MAPLMATEND .set PDATA+20
MAPXD .set PDATA+21
MAPYD .set PDATA+22
*
*
*
*
*
*
UNFOLDMAP:
CALL MAPPAL_ILLUM_INIT
UNFOLDMAP_NOPAL:
LDIL O_3DROT,R6
OR O_NOUROT|O_NOUNIV,R6
LDI @EPALL,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
LDI R0,AR3
LDI @EPALR,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
LDI R0,AR4
LDL map1,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP1OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR3,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map2,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP2OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR4,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map3,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP3OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR3,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map4,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP4OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR4,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDF M1ST,R0
STF R0,*+AR7(MAP1T)
LDF M2ST,R0
STF R0,*+AR7(MAP2T)
LDF M3ST,R0
STF R0,*+AR7(MAP3T)
LDF M4ST,R0
STF R0,*+AR7(MAP4T)
CLRF R0
STF R0,*+AR7(MAPLPX)
STF R0,*+AR7(MAPLPY)
FLOAT 3368,R0 ;368
STF R0,*+AR7(MAPLPZ)
LDF HALFPI,R2
STF R2,*+AR7(MAPLTX)
LDI AR7,AR2
ADDI MAPLMAT,AR2
CALL FIND_XMATRIX
LDF 0.2,R0
STF R0,@MAPPAL24
LDF 0.6,R0
STF R0,@MAPPAL13
LDI MAP_ITERATIONS-1,AR5
UNFOLD_LP
; CALL MAP_ILLUM_COMPUTE
LDF @MAPPAL24,R0
ADDF 0.0266,R0
STF R0,@MAPPAL24
LDF @MAPPAL13,R0
ADDF 0.0133,R0
STF R0,@MAPPAL13
CALL MAPPAL_ILLUM
LDF *+AR7(MAPLPZ),R0
FLOAT 368,R1
SUBF R0,R1
MPYF 0.25,R1
ADDF R1,R0
FLOAT 368,R1
CMPI 0,AR5
LDFEQ R1,R0
STF R0,*+AR7(MAPLPZ)
LDF *+AR7(MAPLTX),R2
MPYF 0.9,R2
CLRF R1
CMPI 0,AR5
LDFEQ R1,R2
STF R2,*+AR7(MAPLTX)
LDI AR7,AR2
ADDI MAPLMAT,AR2
CALL FIND_XMATRIX
LDI *+AR7(MAP2OBJ),AR4
LDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP2T),R2
ADDF @M2STDI,R2
STF R2,*+AR7(MAP2T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDI *+AR7(MAP3OBJ),AR4
LDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP3T),R2
ADDF @M3STDI,R2
STF R2,*+AR7(MAP3T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDF *+AR7(MAP2T),R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDI *+AR7(MAP1OBJ),AR4
CALL CLR_VECTORA
FLOAT -127,R0
STF R0,*+AR2(X)
LDI @MATRIXAI,R2
LDI AR4,R3
ADDI OPOSX,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
ADDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
ADDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSZ),R0
ADDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP1T),R2
ADDF @M1STDI,R2
STF R2,*+AR7(MAP1T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDF *+AR7(MAP3T),R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDI *+AR7(MAP4OBJ),AR4
CALL CLR_VECTORA
FLOAT 128,R0
STF R0,*+AR2(X)
LDI @MATRIXAI,R2
LDI AR4,R3
ADDI OPOSX,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
ADDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
ADDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSZ),R0
ADDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP4T),R2
ADDF @M4STDI,R2
STF R2,*+AR7(MAP4T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
SLEEP 1
DBU AR5,UNFOLD_LP
;
; LDF 1.0,R0
; STF R0,@MAPPAL24
; STF R0,@MAPPAL13
; CALL MAPPAL_ILLUM
;
;
; LDI 15,AR5
;LU76 LDF @MAPPAL13,R0
; SUBRF 1.0,R0
; MPYF 0.1,R0
; ADDF @MAPPAL13,R0
; STF R0,@MAPPAL13
;
; LDF @MAPPAL24,R0
; SUBRF 1.0,R0
; MPYF 0.1,R0
; ADDF @MAPPAL24,R0
; STF R0,@MAPPAL24
;
; CALL MAPPAL_ILLUM
;
; SLEEP 1
; DBU AR5,LU76
;
LDI map1_p,R0 ;ONE TO OVERWRITE
LDI map1_p,R1 ;WHAT TO OVERWRITE IT WITH
CALL PAL_OVERWRITE
LDI *+AR7(MAP1OBJ),AR0
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
LDI *+AR7(MAP2OBJ),AR0
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
LDI *+AR7(MAP3OBJ),AR0
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
LDI *+AR7(MAP4OBJ),AR0
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
STI R0,*+AR0(OFLAGS)
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
FOLDMAP:
SONDFX WIPE4
*ELP CHANGE
CALL MAPPAL_ILLUM_INIT
*ELP END CHANGE
LDIL O_3DROT,R6
OR O_NOUROT|O_NOUNIV,R6
LDI @EPALL,AR2
CALL PAL_FIND_RAW
LDI R0,AR3
LDI @EPALR,AR2
CALL PAL_FIND_RAW
LDI R0,AR4
LDL map1,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP1OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR3,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map2,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP2OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR4,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map3,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP3OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR3,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
LDL map4,AR2
CALL OBJ_GETE
STI AR0,*+AR7(MAP4OBJ)
LDI R6,R0
OR *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI AR4,*+AR0(OPAL)
STI R0,*+AR0(OFLAGS)
LDI AR0,AR2
CALL OBJ_INSERTP
CLRF R0
STF R0,*+AR7(MAP1T)
STF R0,*+AR7(MAP2T)
STF R0,*+AR7(MAP3T)
STF R0,*+AR7(MAP4T)
CLRF R0
STF R0,*+AR7(MAPLPX)
STF R0,*+AR7(MAPLPY)
FLOAT 368,R0 ;368
STF R0,*+AR7(MAPLPZ)
CLRF R2
STF R2,*+AR7(MAPLTX)
LDI AR7,AR2
ADDI MAPLMAT,AR2
CALL FIND_XMATRIX
LDF 1,R0
STF R0,*+AR7(MAPXD)
STF R0,*+AR7(MAPYD)
LDI MAP_ITERATIONS-1,AR5
FOLD_LP
CALL MAP_ILLUM_COMPUTE
LDI @EPALL,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
LDI @EPALR,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
LDF *+AR7(MAPXD),R1
MPYF 1.20,R1
STF R1,*+AR7(MAPXD)
LDF *+AR7(MAPLPX),R0
ADDF R1,R0
STF R0,*+AR7(MAPLPX)
LDF *+AR7(MAPYD),R1
MPYF 1.2,R1
STF R1,*+AR7(MAPYD)
LDF *+AR7(MAPLPY),R0
SUBF R1,R0
STF R0,*+AR7(MAPLPY)
LDF *+AR7(MAPLPZ),R0
FLOAT 3368,R1
SUBF R0,R1
MPYF 0.05,R1
ADDF R1,R0
FLOAT 3368,R1
CMPI 0,AR5
LDFEQ R1,R0
STF R0,*+AR7(MAPLPZ)
LDF *+AR7(MAPLTX),R2
LDF HALFPI,R0
SUBF R2,R0
MPYF 0.1,R0
ADDF R0,R2
LDF HALFPI,R1
CMPI 0,AR5
LDFEQ R1,R2
STF R2,*+AR7(MAPLTX)
LDI AR7,AR2
ADDI MAPLMAT,AR2
CALL FIND_XMATRIX
LDI *+AR7(MAP2OBJ),AR4
LDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP2T),R2
SUBF @M2STDI,R2
STF R2,*+AR7(MAP2T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
; OBJECT 2
;----------------------------------------------------------------------
LDI *+AR7(MAP3OBJ),AR4
LDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP3T),R2
SUBF @M3STDI,R2
STF R2,*+AR7(MAP3T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
; OBJECT 3
;----------------------------------------------------------------------
LDF *+AR7(MAP2T),R2 ;MATRIX FOR TRANSLATION
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDI *+AR7(MAP1OBJ),AR4
CALL CLR_VECTORA
FLOAT -127,R0
STF R0,*+AR2(X)
LDI @MATRIXAI,R2
LDI AR4,R3
ADDI OPOSX,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
ADDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
ADDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSZ),R0
ADDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP1T),R2
SUBF @M1STDI,R2
STF R2,*+AR7(MAP1T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
; OBJECT 1
;----------------------------------------------------------------------
LDF *+AR7(MAP3T),R2 ;MATRIX FOR TRANSLATION
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
LDI *+AR7(MAP4OBJ),AR4
CALL CLR_VECTORA
FLOAT 128,R0
STF R0,*+AR2(X)
LDI @MATRIXAI,R2
LDI AR4,R3
ADDI OPOSX,R3
CALL MATRIX_MUL
LDF *+AR4(OPOSX),R0
ADDF *+AR7(MAPLPX),R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
ADDF *+AR7(MAPLPY),R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSZ),R0
ADDF *+AR7(MAPLPZ),R0
STF R0,*+AR4(OPOSZ)
LDF *+AR7(MAP4T),R2
SUBF @M4STDI,R2
STF R2,*+AR7(MAP4T)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_YMATRIX
LDI AR7,R2
ADDI MAPLMAT,R2
LDI AR2,R3
CALL CONCATMAT
; OBJECT 4
;--------------------------------------------------------------------
SLEEP 1
DBU AR5,FOLD_LP
LDI *+AR7(MAP1OBJ),AR2
CALL OBJ_DELETE
LDI *+AR7(MAP2OBJ),AR2
CALL OBJ_DELETE
LDI *+AR7(MAP3OBJ),AR2
CALL OBJ_DELETE
LDI *+AR7(MAP4OBJ),AR2
CALL OBJ_DELETE
CALL CLEAR_MAP_PALS
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.globl CLEAR_MAP_PALS
CLEAR_MAP_PALS:
LDI @EPALL,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
BNC IBOIBO
LDI R0,AR2
CALL PAL_DELETE_RAW
IBOIBO
LDI @EPALR,AR2
CALL PAL_FIND_RAW
.if DEBUG
BNC $
.endif
RETSNC
LDI R0,AR2
CALL PAL_DELETE_RAW
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
MAPPAL_ILLUM_INIT:
LDI @EPALR,AR0 ;LOAD PALETTES AT
LDI @EPALL,AR1 ;THE SAME TIME
LDI map1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDI *AR3++,R0
STI R0,*AR0++
STI R0,*AR1++
LDI R0,AR2
AND 0FFFh,AR2
RS 1,AR2
SUBI 1,AR2
L342 LDI *AR3++,R0
STI R0,*AR0++
STI R0,*AR1++
DBU AR2,L342
LDI @EPALR,AR2
CALL PAL_ALLOC_RAW
LDI @EPALL,AR2
CALL PAL_ALLOC_RAW
RETS
*----------------------------------------------------------------------------
;*----------------------------------------------------------------------------
;MAPPAL_ILLUM_CLEANUP:
; PUSH R0
; PUSH AR2
; LDI @EPALR,AR2
; CALL PAL_FIND_RAW
; LDI R0,AR2
; CALL PAL_DELETE_RAW
;
; LDI @EPALL,AR2
; CALL PAL_FIND_RAW
; LDI R0,AR2
; CALL PAL_DELETE_RAW
; POP AR2
; POP R0
; RETS
;*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
FORMULA1 .float 0.318309886
MAP_ILLUM_COMPUTE:
LDF *+AR7(MAP1T),R0
ADDF HALFPI,R0
MPYF @FORMULA1,R0
SUBRF 1.0,R0
MPYF 0.7,R0
ADDF 0.3,R0
STF R0,@MAPPAL13
LDF *+AR7(MAP2T),R0
ADDF HALFPI,R0
MPYF @FORMULA1,R0
SUBRF 1.0,R0
MPYF 0.7,R0
ADDF 0.3,R0
STF R0,@MAPPAL24
CALL MAPPAL_ILLUM
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
.bss MAPPAL13,1 ;FL multiplier
.bss MAPPAL24,1 ;FL multiplier
MAPPAL_ILLUM:
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH R0
PUSH R1
PUSH R2
PUSH R3
PUSH R4
PUSH R5
PUSHFL R6
LDF @MAPPAL13,R6 ;1st multiplier
LDI @EPALL,AR0
LDI map1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDI *AR3++,R0
STI R0,*AR0++
LDI R0,AR5
LS 1,AR5
RS 2,AR5
L894
LDI *AR3++,R4 ;get src2 (TRUE)
LDI R4,R0
AND 01Fh,R0
LS 3,R0
FLOAT R0
MPYF R6,R0
FIX R0
RS 3,R0
AND 01Fh,R0
LDI R4,R1
RS 5,R1
AND 01Fh,R1
LS 3,R1
FLOAT R1
MPYF R6,R1
FIX R1
RS 3,R1
AND 01Fh,R1
LS 5,R1
OR R1,R0
LDI R4,R1
RS 10,R1
AND 01Fh,R1
LS 3,R1
FLOAT R1
MPYF R6,R1
FIX R1
RS 3,R1
AND 01Fh,R1
LS 10,R1
OR R1,R0
;second word
;
RS 16,R4
LDI R4,R2
AND 01Fh,R2
LS 3,R2
FLOAT R2
MPYF R6,R2
FIX R2
RS 3,R2
AND 01Fh,R2
LDI R4,R3
RS 5,R3
AND 01Fh,R3
LS 3,R3
FLOAT R3
MPYF R6,R3
FIX R3
RS 3,R3
AND 01Fh,R3
LS 5,R3
OR R3,R2
LDI R4,R3
RS 10,R3
AND 01Fh,R3
LS 3,R3
FLOAT R3
MPYF R6,R3
FIX R3
RS 3,R3
AND 01Fh,R3
LS 10,R3
OR R3,R2
LS 16,R2
OR R2,R0
STI R0,*AR0++
DBU AR5,L894
LDI @EPALL,AR2
CALL PAL_FIND_RAW
CMPI -1,R0
BEQ JAJA4
LDI *AR2++,R3
LDI R0,R2
CALL PAL_SET
JAJA4
*
*
*
*
*
LDF @MAPPAL24,R6 ;2nd multiplier
LDI @EPALR,AR0
LDI map1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDI *AR3++,R0
STI R0,*AR0++
LDI R0,AR5
LS 1,AR5
RS 2,AR5
L894D
LDI *AR3++,R4 ;get src2 (TRUE)
LDI R4,R0
AND 01Fh,R0
LS 3,R0
FLOAT R0
MPYF R6,R0
FIX R0
RS 3,R0
AND 01Fh,R0
LDI R4,R1
RS 5,R1
AND 01Fh,R1
LS 3,R1
FLOAT R1
MPYF R6,R1
FIX R1
RS 3,R1
AND 01Fh,R1
LS 5,R1
OR R1,R0
LDI R4,R1
RS 10,R1
AND 01Fh,R1
LS 3,R1
FLOAT R1
MPYF R6,R1
FIX R1
RS 3,R1
AND 01Fh,R1
LS 10,R1
OR R1,R0
;second word
;
RS 16,R4
LDI R4,R2
AND 01Fh,R2
LS 3,R2
FLOAT R2
MPYF R6,R2
FIX R2
RS 3,R2
AND 01Fh,R2
LDI R4,R3
RS 5,R3
AND 01Fh,R3
LS 3,R3
FLOAT R3
MPYF R6,R3
FIX R3
RS 3,R3
AND 01Fh,R3
LS 5,R3
OR R3,R2
LDI R4,R3
RS 10,R3
AND 01Fh,R3
LS 3,R3
FLOAT R3
MPYF R6,R3
FIX R3
RS 3,R3
AND 01Fh,R3
LS 10,R3
OR R3,R2
LS 16,R2
OR R2,R0
STI R0,*AR0++
DBU AR5,L894D
LDI @EPALR,AR2
CALL PAL_FIND_RAW
CMPI -1,R0
BEQ JAJA5
LDI *AR2++,R3
LDI R0,R2
CALL PAL_SET
JAJA5
POPFL R6
POP R5
POP R4
POP R3
POP R2
POP R1
POP R0
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
RETS
*----------------------------------------------------------------------------
.bss STOPWATCH,1 ;the counter
.bss STOPWATCH_CNTL,1 ;the controller 0 = stop, 1 = go
COLONI .word COLON
COLON .string ":",0
*----------------------------------------------------------------------------
*RETURNS
* AR2 POINTING TO LAP BUFFER
*
lap_bufferI .word lap_buffer
tmp_bufferI .word tmp_buffer
.bss lap_buffer,4
.bss tmp_buffer,2
*----------------------------------------------------------------------------
*TIME2STR CONVERT TIME CODE TO STRING
*
*
*PARAMETERS
* R0 TIME (IN 1/60 SECONDS)
* AR2 STRING SPACE
*
TIME2STR:
PUSH R0
PUSH R1
PUSH R2
PUSH AR0
PUSH AR1
PUSH AR2
CALL CVTTIME
PUSH R0
PUSH R1
CALL _itoa
LDI AR2,AR0
LDI @COLONI,AR1
CALL STRCAT
POP R2
LDI @tmp_bufferI,AR2
CALL _itoaLZ
LDI AR2,AR1
CALL STRCAT
LDI @COLONI,AR1
CALL STRCAT
POP R2
LDI @tmp_bufferI,AR2
CALL _itoaLZ
LDI AR2,AR1
CALL STRCAT
LDI AR0,AR2
POP AR2
POP AR1
POP AR0
POP R2
POP R1
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*CVTTIME CVT TIMECODE TO COMPONENTS
*
*PARAMETERS
* R0
*
*RETURNS
* R0 (INT) HUNDERTHS
* R1 (INT) SECONDS
* R2 (INT) MINUTES
*
MINFACT .FLOAT 0.000303030303 ;1/(55*60)
SECFACT .FLOAT 0.018181818 ;1/55
HUNFACT .FLOAT 1.818181818 ;100/55
CVTTIME:
PUSH R3
PUSHF R3
FLOAT R0,R3
MPYF @MINFACT,R3
FIX R3,R3
CEILI 99,R3
FLOORI 0,R3
LDI R3,R2 ;MINUTES
MPYI 3300,R3
SUBI R3,R0
LDILT 0,R0
FLOAT R0,R3
MPYF @SECFACT,R3
FIX R3,R3
CEILI 59,R3
FLOORI 0,R3
LDI R3,R1 ;SECONDS
MPYI 55,R3
SUBI R3,R0
LDILT 0,R0
FLOAT R0,R3
MPYF @HUNFACT,R3
FIX R3,R0 ;HUNDRETHS
CEILI 99,R0
FLOORI 0,R0
POPF R3
POP R3
RETS
;*THIS CHECKS CVTTIME FOR MONOTONICITY
;CHEK
; LDI 0,R5
; LDI -1,R4
;CKLP
; LDI R5,R0
; CALL CVTTIME
; MPYI 100,R1
; MPYI 6000,R2
; ADDI R0,R1
; ADDI R1,R2
; CMPI R2,R4
; BGE $
; LDI R2,R4
; ADDI 1,R5
; CMPI 32000,R5
; BLT CKLP
; B $
*----------------------------------------------------------------------------
RADAR_XMIN .set 460
RADAR_XMAX .set 500
RADAR_XCNTR .set ((RADAR_XMAX-RADAR_XMIN)/2)+RADAR_XMIN
RADAR_YMIN .set 100
RADAR_YMAX .set 200
RADAR_YCNTR .set ((RADAR_YMAX-RADAR_YMIN)/2)+RADAR_YMIN
BLIPSIZE_X .set 4
BLIPSIZE_Y .set 4
BLIPSIZE_XH .set 2
BLIPSIZE_YH .set 2
.bss THIS_MACHINE_AHEAD,1
*----------------------------------------------------------------------------
RADAR_PLOT:
PUSH AR4
LDI @PLYCAR,AR4
;background
LDI CC|DITHER|8,R0
STI R0,@_ACNTL
LDI RADAR_XMIN,R0
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(0*3))
STI R0,@(_ARPS+(3*3))
LDI RADAR_XMAX,R0
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(1*3))
STI R0,@(_ARPS+(2*3))
LDI RADAR_YMIN,R0
STI R0,@(_ARPS+(0*3)+1)
STI R0,@(_ARPS+(1*3)+1)
LDI RADAR_YMAX,R0
STI R0,@(_ARPS+(3*3)+1)
STI R0,@(_ARPS+(2*3)+1)
CLRI R0
STI R0,@_ADDRL
CLRI R0
STI R0,@_ACMAP
CALL _stuff_fpga
LDP @(_CAMERARAD+Y)
LDF @(_CAMERARAD+Y),R2
SETDP
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
LDI @CAR_LISTI,AR0
SUBI OLINK3,AR0
RADAR_LP
LDI *+AR0(OLINK3),R0
BEQ RADAR_X
LDI R0,AR0
LDI CC|3,R0 ;red (RACER)
LDI *+AR0(OID),R1
CMPI DRONE_C|VEHICLE_T|DRNE_RACER,R1
LDINE CC|0Ch,R0 ;light gray (general racer)
STI R0,@_ACNTL
CALL CLR_VECTORA
LDF *+AR0(OPOSX),R0
SUBF *+AR4(OPOSX),R0
LDLF 0.003,R1
MPYF R1,R0
STF R0,*+AR2(X)
LDF *+AR0(OPOSZ),R0
SUBF *+AR4(OPOSZ),R0
LDLF 0.003,R1
MPYF R1,R0
STF R0,*+AR2(Z)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R0
FIX R0
ADDI RADAR_XCNTR-2,R0
;
;
;
;
;
LDI @HEAD2HEAD_ON,R2 ;are we playing HEAD2HEAD?
BZ NOTTHEOPLYR
CMPI @PLY2CAR,AR0 ;is this the other PLAYER?
BNE NOTTHEOPLYR
CLRI R6
CMPI RADAR_XMIN,R0
LDILT RADAR_XMIN,R0
LDILT 1,R6
CMPI RADAR_XMAX,R0
LDIGT RADAR_XMAX,R0
LDIGT 1,R6
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(0*3))
STI R0,@(_ARPS+(3*3))
ADDI 3,R0
STI R0,@(_ARPS+(1*3))
STI R0,@(_ARPS+(2*3))
LDF *+AR2(Z),R0
MPYF 0.3,R0
FIX R0
NEGI R0
ADDI RADAR_YCNTR-2,R0
CMPI RADAR_YMIN,R0
LDILT RADAR_YMIN,R0
LDILT 1,R6
CMPI RADAR_YMAX,R0
LDIGT RADAR_YMAX,R0
LDIGT 1,R6
STI R0,@(_ARPS+(0*3)+1)
STI R0,@(_ARPS+(1*3)+1)
ADDI 3,R0
STI R0,@(_ARPS+(3*3)+1)
STI R0,@(_ARPS+(2*3)+1)
LDL H2HPAL1,AR2
CALL PAL_FIND_RAW
STI R0,@_ACMAP
LDI TM|ZS,R0 ;red (RACER)
STI R0,@_ACNTL
LDI @DIPRAM,R0
TSTB CMDP_MASTER,R0
BZ GL14
LDL h2p1a_I,R0
STI R0,@_ADDRL
LDI @_ARPS+(0*3)+1,R0
SUBI 16,R0
STI R0,@_ARPS+(0*3)+1
LDI @_ARPS+(1*3)+1,R0
SUBI 16,R0
STI R0,@_ARPS+(1*3)+1
LDI @_ARPS+(0*3),R0
SUBI 13,R0
STI R0,@_ARPS+(0*3)
LDI @_ARPS+(3*3),R0
SUBI 13,R0
STI R0,@_ARPS+(3*3)
LDI 00038h,R0
STI R0,@_AIVI
LDI 00041h,R0
STI R0,@_AIVI+1
LDI 00D41h,R0
STI R0,@_AIVI+2
LDI 00D38h,R0
STI R0,@_AIVI+3
BU GL15
GL14 LDL h2p2b_I,R0
STI R0,@_ADDRL
LDI @_ARPS+(0*3)+1,R0
SUBI 16,R0
STI R0,@_ARPS+(0*3)+1
LDI @_ARPS+(1*3)+1,R0
SUBI 16,R0
STI R0,@_ARPS+(1*3)+1
LDI @_ARPS+(0*3),R0
SUBI 13,R0
STI R0,@_ARPS+(0*3)
LDI @_ARPS+(3*3),R0
SUBI 13,R0
STI R0,@_ARPS+(3*3)
LDI 00041h,R0
STI R0,@_AIVI
LDI 0004Bh,R0
STI R0,@_AIVI+1
LDI 00D4Bh,R0
STI R0,@_AIVI+2
LDI 00D41h,R0
STI R0,@_AIVI+3
GL15
CMPI 0,R6
BEQ DADA4
;we have a case where the other player is either behind us
;or in front of us
;
LDI *+AR0(OCARBLK),AR1
LDI *+AR1(CAR_OM),R0
.if DEBUG
BZ $ ;debugging please remove
.endif
LDI *+AR1(CARTRACK_ID),R0
LDI @PLYCBLK,AR2
LDI *+AR2(CARTRAK),AR2
LDI *+AR2(OUSR1),R1
CMPI R1,R0
BLT ISBEHIND
; BLE ISBEHIND
; LDI RADAR_XCNTR,R0
; ADDI 9,R0
; STI R0,@_ARPS+(1*3)
; STI R0,@_ARPS+(2*3)
; SUBI 18,R0
; STI R0,@_ARPS+(0*3)
; STI R0,@_ARPS+(3*3)
LDI RADAR_YMIN,R0
ADDI 10,R0
STI R0,@_ARPS+(2*3)+1
STI R0,@_ARPS+(3*3)+1
SUBI 20,R0
STI R0,@_ARPS+(0*3)+1
STI R0,@_ARPS+(1*3)+1
BU DADA4
ISBEHIND
; LDI RADAR_XCNTR,R0
; ADDI 9,R0
; STI R0,@_ARPS+(1*3)
; STI R0,@_ARPS+(2*3)
; SUBI 18,R0
; STI R0,@_ARPS+(0*3)
; STI R0,@_ARPS+(3*3)
LDI RADAR_YMAX,R0
ADDI 10,R0
STI R0,@_ARPS+(2*3)+1
STI R0,@_ARPS+(3*3)+1
SUBI 20,R0
STI R0,@_ARPS+(0*3)+1
STI R0,@_ARPS+(1*3)+1
DADA4
CALL _stuff_fpga
CLRI R0
STI R0,@_ACMAP
BU RADAR_LP
NOTTHEOPLYR
CMPI RADAR_XMIN,R0
BLT RADAR_LP
CMPI RADAR_XMAX,R0
BGT RADAR_LP
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(0*3))
STI R0,@(_ARPS+(3*3))
ADDI 3,R0
STI R0,@(_ARPS+(1*3))
STI R0,@(_ARPS+(2*3))
LDF *+AR2(Z),R0
MPYF 0.3,R0
FIX R0
NEGI R0
ADDI RADAR_YCNTR-2,R0
CMPI RADAR_YMIN,R0
BLT RADAR_LP
CMPI RADAR_YMAX,R0
BGT RADAR_LP
STI R0,@(_ARPS+(0*3)+1)
STI R0,@(_ARPS+(1*3)+1)
ADDI 3,R0
STI R0,@(_ARPS+(3*3)+1)
STI R0,@(_ARPS+(2*3)+1)
CALL _stuff_fpga
BU RADAR_LP
RADAR_X
LDI CC|1,R0
STI R0,@_ACNTL
LDI RADAR_XCNTR-2,R0
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(0*3))
STI R0,@(_ARPS+(3*3))
LDI RADAR_XCNTR+1,R0
ADDI @MOVEIN_OFFSET,R0
STI R0,@(_ARPS+(1*3))
STI R0,@(_ARPS+(2*3))
LDI RADAR_YCNTR-2,R0
STI R0,@(_ARPS+(0*3)+1)
STI R0,@(_ARPS+(1*3)+1)
LDI RADAR_YCNTR+1,R0
STI R0,@(_ARPS+(3*3)+1)
STI R0,@(_ARPS+(2*3)+1)
CALL _stuff_fpga
POP AR4
LDI @HEAD2HEAD_ON,R0
BZ NODOAP
LDI @PLY2CAR,AR0
LDI *+AR0(OCARBLK),AR0
LDI @PLYCBLK,AR1
LDI *+AR0(CARTRACK_ID),R0
LDI *+AR1(CARTRACK_ID),R1
CMPI R0,R1
LDIGT 1,R0
LDILE 0,R0
STI R0,@THIS_MACHINE_AHEAD
NODOAP
RETS
*----------------------------------------------------------------------------
.END