176 lines
2.8 KiB
NASM
Executable File
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
|