cruisin-usa/WHEEL.ASM

176 lines
2.8 KiB
NASM
Executable File

.FILE "WHEEL.ASM"
*----------------------------------------------------------------------------
*FORCE FEEDBACK WHEEL CODE
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
.include MACS.EQU
.include SYS.EQU
.include GLOBALS.EQU
.globl lpot0
WHEEL_KILL .set 0
WHEEL .set 0995000h
.bss POSE,1
pbss lpot0,1 ;LAST POT
pbss WHEELPWR,1 ;FL
.bss WHEELPOS,1
.bss WHEELOUT,1
.bss WHEELMAX,1
pbss WHEELVEL,1
.bss DAMPPWR,1
*----------------------------------------------------------------------------
*WHEEL HANDLER
*
*PARAMETERS
* WHEELPWR FORCE
* WHEELPOS POSITION DESIRED
*
NUWHEEL:
LDI @_MODE,R0
AND MMODE,R0
LDF 0,R1 ;DEFAULT POSITION POWER MULTIPLIER
LDF 126,R2 ;DEFAULT MAX POWER
LDF 2.5,R3 ;DEFAULT DAMP POWER MULTIPLIER
; LDF 0,R1 ;DEFAULT POSITION POWER MULTIPLIER
; LDF 126,R2 ;DEFAULT MAX POWER
; LDF 2.5,R3 ;DEFAULT DAMP POWER MULTIPLIER
CMPI MGAME,R0 ;GAME
BNE NUWHL1
LDF @WHEELPWR,R1
LDF @WHEELPWR,R3
LDF 126,R2
B NUWHL
NUWHL1
CMPI MBONUS,R0
BNE NBON
LDF 2,R1
; LDF 64,R2
; LDF 2,R3
B NUWHL
NBON
CMPI MINSERT_COINS,R0
BNE NIC
LDF 0,R1 ;2
; LDF 64,R2
; LDF 2,R3
B NUWHL
NIC
CMPI MINTRO,R0 ;INTRO
BNE NUWHL2
LDF 0.5,R1
; LDF 64,R2
; LDF 0.5,R3
B NUWHL
NUWHL2
CMPI MINIT,R0 ;INITIAL ENTRY
BNE NUWHL3
LDF 0.75,R1
; LDF 64,R2
; LDF 0.75,R3
BU NUWHL
NUWHL3
CMPI MDIAG,R0
BNE NUWHL
CLRF R3
; BU NUWHL
NUWHL
STF R1,@WHEELPWR
STF R2,@WHEELMAX
STF R3,@DAMPPWR
LDF @WHEELPOS,R0
FLOAT @_pot0,R1
SUBF R1,R0
LDF @lpot0,R2
STF R1,@lpot0
SUBF R2,R1,R2 ;curr - prev (velocity)
CMPF -22,R2 ;LIMIT VELOCITY
LDFLT -22,R2
CMPF 22,R2
LDFGT 22,R2
LDF @WHEELVEL,R1
MPYF 0.55,R1
MPYF 0.45,R2
ADDF R1,R2
STF R2,@WHEELVEL ;SAVE VELOCITY AVERAGE
MPYF 2.2,R2
MPYF @DAMPPWR,R2
MPYF @WHEELPWR,R0
SUBF R2,R0 ;ADD TO POSITION
LDF @WHEELMAX,R1 ;MAX OUTPUT LEVEL
CMPF R1,R0
LDFGT R1,R0
NEGF R1
CMPF R1,R0
LDFLT R1,R0
STF R0,@WHEELOUT ;SAVE OUTPUT NUMBER
FIX R0
AND 0FFH,R0
CALL TOWHEEL
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*THIS IS THE ONLY ROUTINE WHICH WRITES TO THE WHEEL
*
*
*PARAMETERS
* R0 BYTE TO SEND TO WHEEL
*
*
TOWHEEL:
PUSH DP
PUSHM R0,R1
PUSH R0
LDP @WHEEL
LDI 0FF04h,R0 ;SET ADDRESS TO 4
LDI 0F704h,R1
STI R0,@WHEEL
STI R1,@WHEEL
STI R0,@WHEEL
POP R0
LDI R0,R1
OR 0FF00h,R0
STI R0,@WHEEL
OR 0FB00h,R1
NOP
NOP
STI R1,@WHEEL
POP R1
NOP
NOP
STI R0,@WHEEL
POP R0
POP DP
RETS
*----------------------------------------------------------------------------
.END