Acidmods
AcidMods Resources ----- ( These are helpful tools for modding ) => Open Source Code & AcidMods Free Code => Topic started by: Layman on February 05, 2012, 07:25:39 AM
-
hi, I'm new and I'm really into modding controllers and i play lots of games, and need more than just 4 modes, if you could help thank you. i was looking into hazers gameplay RF and looks like what i like, i don't like sleepers as i just there a bit clumsy and really like hazers and been trying to look around and find out for my self if this work, as my programmer hasn't come yet i just thought that if some one looked through this and could give me tips, thank you lots here is the code; (i want this for my own personal use BTW just to let you know and i don't mind switching trough modes that's why i want th
list p=12F683 ; list directive to define processor
#include <p12F683.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSCIO
;***** VARIABLE DEFINITIONS******************
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
FLAGS EQU 0x20 ;software state register
PULSER EQU 0x21 ;pulse on counter
DWELLTIMER EQU 0x22 ;pulse off counter
STATE EQU 0x23 ;programmed state
BUTTONHOLD EQU 0x24
FREQR EQU 0x25 ;frequency value
TEMP1 EQU 0x26
TEMP2 EQU 0x27
PULSEL EQU 0x28
DWELLTIMEL EQU 0x29
TEMP5 EQU 0x2A
LEDBLINK EQU 0x2B
TEMP3 EQU 0x2C
;*******bits in FLAGS register***********
PULSEONR equ 0
PULSEONL equ 1
TRIGOUT equ 2
LEDHI equ 3
STATECHANGE equ 4
;*******bits in STATE register***********
RIGHTACTIVE equ 0
LEFTACTIVE equ 1
;*********GPIO pin names*****************
LEDL equ 5
LEDR equ 4
BUTTONR equ 2
BUTTONL equ 3
TRIGGERR equ 0
TRIGGERL equ 1
;**********Speed settings: change these to change speed (0x05-0xFF)
FIRERATE1 equ 0x47 ;call of duty waw
FIRERATE2 equ 0x32 ; 10 sps
FIRERATE3 equ 0x21 ; 15.15 sps
FIRERATE4 equ 0x19 ; 20 sps
FIRERATE5 equ 0x77 ; 4.20 sps
FIRERATE6 equ 0x0 ;test
FIRERATE7 equ 0x0 ;test
FIRERATE8 equ 0x0 ;test
;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
;Take a good note here. OSC is left at default 4MHz.
; We are running at 1MHz instruction cycle, or 1 micro second
;Timer 2 is prescaled 1:4 and compared (PR2) to 250.
; we now have hardware interupt that falls every 1ms exactly
;within limitation of osctune. Main code is inconsequential.
;PULSE and DWELL values control the signals precisely.
;All pulse logic is switched within the few microseconds to
;service the interupt routine. DO NOT modify the ISR
;with any kind of 'wait' or 'loop'. If you want to trigger
; timed events do so by setting an open FLAG bit and have the
;event done in the main loop.
btfss PIR1, TMR2IF ;timer 2 int happened
retfie
;**************** LED blinking *********************************************
;Our main routine will turn the flag bit
;LEDON on or off. The 10ms pulse is a duty cycle
;for the code to work with both CG and
;matrix controllers.
BlinkLed
btfss FLAGS, LEDHI
goto LedLow
decfsz LEDBLINK, f ;if pulse is active, count down 10ms
goto RightLED
movlw 0x0A
movwf LEDBLINK
bcf FLAGS, LEDHI ;10ms done, turn off LEDHI bit
goto RightLED
LedLow
decfsz LEDBLINK, f ;LEDLO time, count down 10ms
goto RightLED
movlw 0x0A
movwf LEDBLINK
bsf FLAGS, LEDHI ;10ms done, turn LEDHI bit on
RightLED
btfsc STATE, RIGHTACTIVE ;is RF on?
goto OutputRightLED
bsf STATUS, RP0 ;bank 1
bsf TRISIO, LEDR ;tristate LED
bcf STATUS, RP0 ;bank 0
goto LeftLED
OutputRightLED
btfsc FLAGS, LEDHI ;if ledhi true,
bsf GPIO, LEDR ;turn output hi
btfss FLAGS, LEDHI ;if ledhi flase,
bcf GPIO, LEDR ;turn led output lo
bsf STATUS, RP0 ;bank 1
bcf TRISIO, LEDR ;turn output on
bcf STATUS, RP0 ;bank 0
LeftLED
btfsc STATE, LEFTACTIVE ;is RF on?
goto OutputleftLED
bsf STATUS, RP0 ;bank 1
bsf TRISIO, LEDL ;tristate LED
bcf STATUS, RP0 ;bank 0
goto RightTrigger
OutputleftLED
btfsc FLAGS, LEDHI ;if ledhi true,
bsf GPIO, LEDL ;turn output hi
btfss FLAGS, LEDHI ;if ledhi flase,
bcf GPIO, LEDL ;turn led output lo
bsf STATUS, RP0 ;bank 1
bcf TRISIO, LEDL ;turn output on
bcf STATUS, RP0 ;bank 0
;**************** Right trigger logic***************************************
RightTrigger
btfsc STATE, RIGHTACTIVE ;is RF on?
goto ActiveR
bsf STATUS, RP0 ;bank 1
bsf TRISIO, TRIGGERR ;output off
bcf STATUS, RP0 ;bank 0
goto LeftTrigger
ActiveR
btfss FLAGS, TRIGOUT ;controllertype
bcf GPIO, TRIGGERR ;determines
btfsc FLAGS, TRIGOUT ;output state
bsf GPIO, TRIGGERR
btfss FLAGS, PULSEONR ;is pulse active?
goto OffstateR
decfsz PULSER, f ;if pulse is active, count down 10ms
goto LeftTrigger
bcf FLAGS, PULSEONR ;10ms is over, clear flags and
bsf STATUS, RP0 ;bank 1
bsf TRISIO, TRIGGERR ;tristate output
bcf STATUS, RP0 ;bank 0
movf FREQR, w ;and reset pulse time.
movwf PULSER
goto LeftTrigger
OffstateR
decfsz DWELLTIMER, f ;count down dwell time to next pulse
goto LeftTrigger
bsf FLAGS, PULSEONR ;if dwell is done turn on outputs
bsf STATUS, RP0 ;bank 1
bcf TRISIO, TRIGGERR ;and reset pulse time
bcf STATUS, RP0 ;bank 0
movf FREQR, w ;from frequency value
movwf DWELLTIMER
LeftTrigger
btfsc STATE, LEFTACTIVE ;is RF on?
goto ActiveL
bsf STATUS, RP0 ;bank 1
bsf TRISIO, TRIGGERL ;output off
bcf STATUS, RP0 ;bank 0
goto EndInterupt
ActiveL
btfss FLAGS, TRIGOUT ;controllertype
bcf GPIO, TRIGGERL ;determines
btfsc FLAGS, TRIGOUT ;output state
bsf GPIO, TRIGGERL
btfss FLAGS, PULSEONL ;is pulse active?
goto OffstateL
decfsz PULSEL, f ;if pulse is active, count down 10ms
goto EndInterupt
bcf FLAGS, PULSEONL ;10ms is over, clear flags and
bsf STATUS, RP0 ;bank 1
bsf TRISIO, TRIGGERL ;tristate output
bcf STATUS, RP0 ;bank 0
movf FREQR, w ;and reset pulse time.
movwf PULSEL
goto EndInterupt
OffstateL
decfsz DWELLTIMEL, f ;count down dwell time to next pulse
goto EndInterupt
bsf FLAGS, PULSEONL ;if dwell is done turn on outputs
bsf STATUS, RP0 ;bank 1
bcf TRISIO, TRIGGERL ;and reset pulse time
bcf STATUS, RP0 ;bank 0
movf FREQR, w ;from frequency value
movwf DWELLTIMEL
EndInterupt
bcf PIR1, TMR2IF
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
;*************************************SUBROUTINES**********************************
Wait10ms
clrf TEMP2
movlw 0x0D
movwf TEMP1 ;rough 10ms timer for button debounce.
Loop1
decfsz TEMP2, f ;count down 256*3=768 cycles
goto Loop1
decfsz TEMP1, f ;count down 768*13=9986 cycles
goto Loop1
return
;*************************************************************
ReadEE
bsf STATUS , RP0 ;Bank1
movlw 0x02
movwf EEADR
bsf EECON1 , RD ;start read
movf EEDAT , W
bcf STATUS , RP0 ;Bank0
return
;*************************************************************
WriteEE
bsf STATUS , RP0
movwf EEDAT
movlw 0x02
movwf EEADR
bsf EECON1,WREN ;Enable write
bcf INTCON, GIE ;Disable INTs
btfsc INTCON, GIE ;See AN576
goto $-2
movlw 0x55 ;Unlock write
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1, WR ;Start the write
WaitForEEWrite
btfsc EECON1, WR ;wait for hardware to clear (done writing)
goto WaitForEEWrite
bcf STATUS , RP0 ;Bank0
bsf INTCON, GIE ;Enable INTS
return
;**********************************************************************************
;**********************************************************************************
;**********************************************************************************
main
clrf GPIO
clrf FLAGS ;clear outputs and code status register
movlw 0x07
movwf CMCON0 ;comparators off
bsf STATUS, RP0 ;bank 1
movlw 0x0F ;start with 0-3 inputs (ADC read)
movwf TRISIO ;pin 0 & 1 & 5 out, all other inputs
movlw 0x51 ;Fosc/16, pin 0 analog
movwf ANSEL ;Right trigger is analog input
movlw 0x04
movwf WPU ;enable week pullups
bcf OPTION_REG, 7 ;enable all week pullups
bcf STATUS, RP0 ;bank 0
movlw 0x01 ;Left just, Vdd, channel 0
movwf ADCON0 ;module on.
movlw 0x10
movwf TEMP1
Wait4ADC
decfsz TEMP1, f
goto Wait4ADC ;acquisition time
bsf ADCON0, 1 ;start ADC
btfsc ADCON0, 1
goto $-1 ;wait for conversion to be done
movlw 0x40 ;about 0.5V from 2V ref
subwf ADRESH, w ;if f > W, C=1
btfsc STATUS, C ;ie- if trigger > 0.5V, then matrix
bsf FLAGS, TRIGOUT ;matrix config sources (output high)
bsf STATUS, RP0 ;bank 1
movlw 0x0C ;restore pin IO
movwf TRISIO
clrf ANSEL ;all digital now
bcf STATUS, RP0 ;bank 0
movlw 0x0A ;start with 10ms pulse width
movwf LEDBLINK ;for the LEDs
movlw FIRERATE1 ;this will get overwritten,
movwf PULSER ; but start with a default value
movwf PULSEL
movwf DWELLTIMER
movwf DWELLTIMEL
call ReadEE ;get state value
movwf STATE
movlw 0x01
movwf T2CON ;timer 2, prescale 1:4, no postscale
bsf STATUS, RP0 ;bank 1
movlw 0xFA
movwf PR2 ;setup 1ms hardware interupt
bsf PIE1, TMR2IE ;enable timer2 interupt
bcf STATUS, RP0 ;bank 0
bsf T2CON, TMR2ON ;turn on timer2
movlw 0xC0
movwf INTCON ;turn on interupts globally
goto InitState ;get first firerate value
;******MAIN LOOP***************
Start
TestLeft
btfsc GPIO, BUTTONL
goto TestRight ;Test for left button press
call Wait10ms
btfsc GPIO, BUTTONL ;button is down for 10ms
goto TestRight
ReleaseLeft
btfss GPIO, BUTTONL ;wait for button release
goto ReleaseLeft
call Wait10ms
btfss GPIO, BUTTONL ;wait for button release
goto ReleaseLeft
movlw 0x02
xorwf STATE, f ;toggle left trigger
call WriteEE ;store state
TestRight
btfsc GPIO, BUTTONR
goto Start
; goto DisplayState ;Test for right button press
call Wait10ms
btfsc GPIO, BUTTONR ;button is down for min 10ms
goto Start
; goto DisplayState
movlw 0xC8
movwf BUTTONHOLD ;setup for 2 second hold
First2seconds
call Wait10ms
btfsc GPIO, BUTTONR ;button is down for more than 10ms
goto ReleaseRight
decfsz BUTTONHOLD, f
goto First2seconds
movlw 0xC8
movwf BUTTONHOLD ;setup for 2 second hold
Second2seconds
call Wait10ms
btfsc GPIO, BUTTONR
goto ReleaseRight
decfsz BUTTONHOLD, f
goto Second2seconds ;button down for 4 seconds, change firerate
NextState
movlw 0x40
addwf STATE, f ;change firerate state
InitState ;begin test for
btfsc STATE, 7 ;state 1 or 2
goto State3
btfsc STATE, 6
goto State2
State1
movlw FIRERATE1 ;state 1
movwf FREQR
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop01
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop01
bsf STATE, RIGHTACTIVE ;led on
bsf FLAGS, STATECHANGE ;notify a state change
goto ReleaseRight
State2
movlw FIRERATE2 ;state 2
movwf FREQR
bcf STATE, RIGHTACTIVE ;blink twice, led off
movlw 0x0A
movwf TEMP3
Loop02
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop02
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop03
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop03
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop04
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop04
bsf STATE, RIGHTACTIVE ;led on
bsf FLAGS, STATECHANGE ;notify a state change
goto ReleaseRight
State3
btfsc STATE, 6
goto State4
movlw FIRERATE3 ;state 3
movwf FREQR
bcf STATE, RIGHTACTIVE ;blink 3 times, led off
movlw 0x0A
movwf TEMP3
Loop05
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop05
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop06
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop06
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop07
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop07
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop08
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop08
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop09
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop09
bsf STATE, RIGHTACTIVE ;led on
bsf FLAGS, STATECHANGE ;notify a state change
goto ReleaseRight
State4
movlw FIRERATE4 ;state 4, 22ms cycle
movwf FREQR
bcf STATE, RIGHTACTIVE ;blink 4 times, led off
movlw 0x0A
movwf TEMP3
Loop10
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop10
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop11
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop11
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop12
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop12
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop13
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop13
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop14
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop14
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop15
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop15
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop16
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop16
bsf STATE, RIGHTACTIVE ;led on
bsf FLAGS, STATECHANGE ;notify a state change
state5
movlw FIRERATE4 ;state 4, 22ms cycle
movwf FREQR
bcf STATE, RIGHTACTIVE ;blink 5 times, led off
movlw 0x0A
movwf TEMP3
Loop17
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop17
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop18
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop18
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop19
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop19
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop20
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop20
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop21
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop21
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop22
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop22
bcf STATE, RIGHTACTIVE ;led off
movlw 0x0A
movwf TEMP3
Loop23
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop23
bsf STATE, RIGHTACTIVE ;led on
movlw 0x0A
movwf TEMP3
Loop24
call Wait10ms ;100 ms
decfsz TEMP3, f
goto Loop24
bsf STATE, RIGHTACTIVE ;led on
bsf FLAGS, STATECHANGE ;notify a state change
goto ReleaseRight
ReleaseRight
btfss GPIO, BUTTONR ;wait for button release
goto ReleaseRight
call Wait10ms
btfss GPIO, BUTTONL ;wait for button release
goto ReleaseRight
btfsc FLAGS, STATECHANGE ;test for button tap or state change
goto Continue01
movlw 0x01
xorwf STATE, f ;toggle left trigger if button tap
Continue01
bcf FLAGS, STATECHANGE
call WriteEE ;store state
goto Start
; initialize eeprom locations
ORG 0x2100
DE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
END ; directive 'end of program'
its the modes that i am most concerned about, thanks again
-
hi, i have a wired controller and i plan to modify the controller and make it rapid fire using hazers gameplay rf and was just wondering how do i wire it up, it looks like a matrix controller but i don't know what board i have please help. thank you,
i know the difference between the two controllers, its just because its a wired one im confused
-
just like the wireless controller. there are a few revisions. what would make you think the solder points would be any different? Look at the wireless set up, the connection points are the same, just the components and code are different.
get a multimeter and have at it. good luck
-
cheers matt i wired it up like the matrix one so should be ok thank you, youv been a big help :tup: