Acidmods
Console Modding------ ( Here you can talk about your favorite Consoles ) => XBOX 360 => 360 Controllers / 360 Rapid Fire Controllers => Topic started by: OxEpicOwnagexO on August 28, 2009, 06:20:21 PM
-
say i wanted to take hazers free opensource code and add a mode or two? surely this is possible. does anyone have a tutorial? Not for any game in specific but wanted to do different fire rates for each additional mode.... any and all help will be much appreciated!
-
hey mate im not sure if this is correct but you can add mor modes to the 3 mode stealth and 4mode on button by copying the code twice into 1 file well kind of its not that simple you may wana check wit hazer.
so the 3 mode will end up being 7 mode as 1 mode is off and with the 4 mode you could end up with 8modes
not to fond of the idea of scrolling through7modes on the sync button.
wot would be better is if you could ad a burst mode onto either code or replace 1 of the modes with a burst setting but hey i dont know bout coding so yeah its all just guess work from me.
-
thanks for the help and good info, the doubling the code up does make since... hazer.......whats ur opinion u da man lol
Post Merge: August 29, 2009, 07:22:50 PM
tried that and it had an error in the build, maybe i should change the speeds to different on each one ima try that real quick and pop it in my controller if it works :D
Post Merge: August 29, 2009, 07:40:22 PM
update, got it to program to the pic BUT when i hit the sync it flashes led once, then hit it again and it flashes 4 times..... then back to off
-
Switching modes in the open-source is done by adding 0x40 to the STATER register. Its the same as adding the binary byte '01000000'. By adding this binary value to the STATER register, you end up with the following values:
'00000000'
'01000000'
'10000000'
'11000000'
So what the code then does is check the 6th and 7th bit in STATER to determine which mode you are in to change the value of FREQR (the firerate in the ISR). If you want to add modes, the easiest is to add 0x20 (or '00100000') and double the number of modes. You would have to create another set of tests (test the 5th bit of STATER as well as the 6th and 7th) to load even more firerates.
Another thing you could do is change the main routine to start in the first mode (off for most) and then call the button test as a routine. If the button is not pressed, keep looping until it is pressed. Once it is pressed, move the new value of FREQR and wait for another button test looping until the button is pressed. Keep doing this for however modes you want.
-
hazer, thanks for your response, i added 0X40 to stater under variable definitions, is that the right spot? you are talking to a total noob to this, this is something im trying to learn, thats why i ask none other but the man that made the code, you. after i added 0X40 to stater under variable definitions, how do i add firerate for mode 4, 5, 6, etc.
-
This is from Burnmeup:
;******MAIN LOOP***************
Start
btfsc GPIO, PROGSTATE
goto Start ;wait for the fun to begin
call Wait10ms
btfsc GPIO, PROGSTATE ;button is down for 10ms
goto Start
Release
btfss GPIO, PROGSTATE ;wait for button release
goto Release
call Wait10ms
btfss GPIO, PROGSTATE ;wait for button release
goto Release
The above is the button test code.
movlw 0x40
addwf STATER, f ;cyclic change in state manipulates
;last 2 bits in STATER.
The next line adds 0x40 to STATER when the button is pressed.
btfsc STATER, 7 ;state 1 or 2
goto Continue01
btfsc STATER, 6
goto State2
Now we check the 6th and 7th bits.
movlw FIRERATE1 ;state 1, off
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State2
movlw FIRERATE1 ;state 2, 42ms cycle
movwf FREQR
bsf FLAGS, LEDON ;turn on LED
goto Start
Continue01
btfsc STATER, 6
goto State4
movlw FIRERATE2 ;state 3, 30 ms cycle
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State4
movlw FIRERATE3 ;state 4, 22ms cycle
movwf FREQR
bsf FLAGS, LEDON ;turn on LED
goto Start
and the last part is to load the FIRERATE# into FREQR depending on the states of bit 6 and bit 7.
The easiest way to change this code is to add 0x20 after a succesful button test. But then you will need to create tests for bit 5 in STATER and have 4 more branches and 4 more FIRERATES.
Or you could get rid of the main loop and cycle through modes with the brute force method that most usually do.
EDIT: I opened burnemup1 for this example, but its the same thing. Burnmeup2 has extra code to flahs the LED for the modes, but the button and bit tests are the same.
-
maybe i should upload burnmeup1, i think all the extras in burnmeup 2 is throwing me off so bad, i found the main loop in burnmeup2
;******MAIN LOOP***************
Start
btfsc GPIO, PROGSTATE
goto Start ;wait for the fun to begin
call Wait10ms
btfsc GPIO, PROGSTATE ;button is down for 10ms
goto Start
Release
btfss GPIO, PROGSTATE ;wait for button release
goto Release
call Wait10ms
btfss GPIO, PROGSTATE ;wait for button release
goto Release
movlw 0x20
addwf STATER, f ;cyclic change in state manipulates
;last 2 bits in STATER.
movf STATER, w
call WriteEE ;store state
btfsc STATER, 7 ;state 1 or 2
goto Continue01
btfsc STATER, 6
goto State2
movlw FIRERATE1 ;state 1, off
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
^^^ am i actually changing anything here? notice how i changed 0X40 to 0X20, if im reading you correctly i did that right. i cant seem to figure out exacty where to add the fireates to, i know you said FREQR but :dntknw: where thats at, i see it alot. this is disheartening and very complicated..... :cry2:
-
Your part way there. What you need to do now is add another test for bit 5:
btfsc STATER, 7 ;state 1 or 2
goto Continue01
btfsc STATER, 6
goto Continue02
btfsc STATER, 5 ;
goto State2
movlw FIRERATE1 ;STATER = '00000000' off mode
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State2
movlw FIRERATE1 ;STATER = '00100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
Continue02
btfsc STATER, 5 ;
goto State4
movlw FIRERATE2 ;STATER = '0100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State4
movlw FIRERATE3 ;STATER = '0110000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
Continue01
btfsc STATER, 6
goto Continue03
btfsc STATER, 5 ;
goto State6
movlw FIRERATE4 ;STATER = '10000000' off mode
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State6
movlw FIRERATE5 ;STATER = '10100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
Continue03
btfsc STATER, 5 ;
goto State8
movlw FIRERATE6 ;STATER = '1100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State8
movlw FIRERATE7 ;STATER = '1110000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
That pretty much is all the work, not including the LED blinking in BMU2. The first mode where STATER = '00000000' is handled inside the Interupt Service Routine to shut off the rapidfire for mode 1. What value is placed in FREQR does not matter for that mode.
-
i basically took out some and pasted yours in there and didnt know how to add the fire rates. soooo when i went to build it this is what happens
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F683 "Rapid Fire\Hex Codes\BurnMeUp2.asm" /l"BurnMeUp2.lst" /e"BurnMeUp2.err" /o"BurnMeUp2.o" /d__DEBUG=1
Error[116] RAPID FIRE\HEX CODES\BURNMEUP2.ASM 362 : Address label duplicated or different in second pass (Continue02)
Error[113] RAPID FIRE\HEX CODES\BURNMEUP2.ASM 380 : Symbol not previously defined (FIRERATE4)
Error[113] RAPID FIRE\HEX CODES\BURNMEUP2.ASM 385 : Symbol not previously defined (FIRERATE5)
Error[113] RAPID FIRE\HEX CODES\BURNMEUP2.ASM 393 : Symbol not previously defined (FIRERATE6)
Error[113] RAPID FIRE\HEX CODES\BURNMEUP2.ASM 398 : Symbol not previously defined (FIRERATE7)
Halting build on first failure as requested.
-
hi guys yeah ive bin avin a go at this aswell, again a complete noob. ive changed firerates before but not added modes.
ok so ive followed what bin said so far gave it a try.
this is wot ive edited so far (using burn me up 2)
;******MAIN LOOP***************
Start
btfsc GPIO, PROGSTATE
goto Start ;wait for the fun to begin
call Wait10ms
btfsc GPIO, PROGSTATE ;button is down for 10ms
goto Start
Release
btfss GPIO, PROGSTATE ;wait for button release
goto Release
call Wait10ms
btfss GPIO, PROGSTATE ;wait for button release
goto Release
movlw 0x20
addwf STATER, f ;cyclic change in state manipulates
;last 2 bits in STATER.
movf STATER, w
call WriteEE ;store state
btfsc STATER, 7 ;state 1 or 2
goto Continue01
btfsc STATER, 6
goto State2
movlw FIRERATE1 ;state 1, off
movwf FREQR
bcf FLAGS, LEDON ;turn off LED
goto Start
State2
movlw FIRERATE2 ;state 2, 42ms cycle
movwf FREQR
bsf FLAGS, LEDON ;turn on LED
goto Start
Continue02
btfsc STATER, 5 ;
goto State4
movlw FIRERATE3 ;STATER = '0100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED 1/2 sec
goto Start
State4
movlw FIRERATE4 ;STATER = '0110000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED 1/2 sec
goto Start
Continue01
btfsc STATER, 6
goto State5
movlw FIRERATE5 ;state 3, 30 ms cycle
movwf FREQR
bcf FLAGS, LEDON ;turn off LED 1/2 sec
movlw 0x0A
movwf TEMP3
Continue03
btfsc STATER, 5 ;
goto State8
movlw FIRERATE6 ;STATER = '1100000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED 1/2 sec
goto Start
State8
movlw FIRERATE7 ;STATER = '1110000'
movwf FREQR
bcf FLAGS, LEDON ;turn off LED 1/2 sec
goto Start
i also added firerates
;**********Speed settings: change these to change speed (0x05-0xFF)
FIRERATE1 equ 0x2f
FIRERATE2 equ 0x32
FIRERATE3 equ 0x37
FIRERATE4 equ 0x41
FIRERATE5 equ 0x53
FIRERATE6 equ 0x21
FIRERATE7 equ 0x19
but it is coming up build fail
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\hex codes\7mode.mcs".
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F683 "Copy of BurnMeUp2.asm" /l"Copy of BurnMeUp2.lst" /e"Copy of BurnMeUp2.err" /o"Copy of BurnMeUp2.o" /d__DEBUG=1
Error[116] C:\HEX CODES\COPY OF BURNMEUP2.ASM 362 : Address label duplicated or different in second pass (Continue02)
Error[113] C:\HEX CODES\COPY OF BURNMEUP2.ASM 376 : Symbol not previously defined (State5)
Error[116] C:\HEX CODES\COPY OF BURNMEUP2.ASM 416 : Address label duplicated or different in second pass (State4)
Halting build on first failure as requested.
not quite sure wot to do now hmmm maybe just a hint please hazer
dont realy mind if i can get this workin its not for any particular mod i just want to play around n learn something about the mods. thanks for all ya jelp so far.
-
OxEpicOwnagexO : You forgot to define what the new FIRERATEs are. You do this at the negining of the file.
spurgurgle: a GOTO instruction is a jump in the program. You have to label the program of where to jump to. You have a GOTO State5 without anywhere to go to. To be honest, if you copy the example I gave 2 posts before, it will do exactly what you need it to do. The difference between your code and mine is that First I test bit 7, then test bit 6 and then finally test bit 5 before assigning a FIRERATE. In yours, you test bit 7, then bit 6, but depending on that test you assign a FIRERATE. Immediately after that, you have a Continue02 (that does not have a GOTO instruction to jump to it) that then tests bit 5, but you can never get there.
-
This thread is full of so much win for me.
Hey, Hazer, what language is this in?
-
Its in asm. There is a complete walkthrough of the code in the opensource threads.
-
ok change of plans, due to the new cod4 patch, i would like to change ur opensource code to striclty cod5 make my fast mode, and a 3 shot burst mode and a 5 shot burst mode....how hard you think that is?
-
Cool thank you.
-
I understand this is a extremely old topic but I think the info above fits in with my question...
I've been able to turn the BMU2 code to a 7, even 16 mode(Yes too many modes but I've enjoyed messing around with the asm and trying new things) But I don't get how people can get a 6 mode, 10, 12, 13 etc.
As from my understanding, you need a variable of 256
56/16(0x10)=16 (Hopefully you get what I'm saying)
I do not expect to be "spoon fed" this info but I'm just curious and I would like to attempt to code this myself!
Hazer mentions: Or you could get rid of the main loop and cycle through modes with the brute force method that most usually do.
and
Another thing you could do is change the main routine to start in the first mode (off for most) and then call the button test as a routine. If the button is not pressed, keep looping until it is pressed. Once it is pressed, move the new value of FREQR and wait for another button test looping until the button is pressed. Keep doing this for however modes you want.
Is this how people achieve the 10 mode's etc?
If anyone can elaborate on this, that'd be great :tup:
-
People do it different ways but for example if you wanted change BMU from 4 mode to 3, including the off state as a mode, you could add some code to the state 3 section that sets the two last bits in stater to 1, this means that the next time 0x40 the last 2 bits will roll over back to 0.
-
I've been toying with that the last week or so...
Finally learned how to control button presses though :tup:
I still don't see how people can get 12 mode controllers...atleast not threw ASM..
Are we talking about something like this?
(Just some copy/paste, not intended to be "actual idea" but is this what were talking about when Hazer mentions Another thing you could do is change the main routine to start in the first mode (off for most) and then call the button test as a routine. If the button is not pressed, keep looping until it is pressed. Once it is pressed, move the new value of FREQR and wait for another button test looping until the button is pressed. Keep doing this for however modes you want.
movlw FIRERATE1 ;state 2 movwf FREQR
bcf FLAGS, COD5MODE
bsf FLAGS, LEDON ;turn on LED
bcf FLAGS, BURSTACTIVE
; bsf FLAGS, BURSTACTIVE ;uncomment to activate burstfire for state 2
; movlw 0X04
; movwf BURSTRATE
Start
btfss FLAGS, TRIGOUT
call BursttestCG
btfsc FLAGS, TRIGOUT
call BursttestMX
btfsc GPIO, PROGSTATE
goto Start ;wait for the fun to begin
call Wait10ms
btfsc GPIO, PROGSTATE ;button is down for 10ms
goto Start
Release
btfss GPIO, PROGSTATE ;wait for button release
goto Release
call Wait10ms
btfss GPIO, PROGSTATE ;wait for button release
goto Release
movlw FIRERATE2 ;state 3
movwf FREQR
bcf FLAGS, COD5MODE ;uncomment to turn COD5 mode off/comment to turn COD5 mode on
bsf FLAGS, COD5MODE ;uncomment to turn COD5 mode on/comment to turn COD5 mode OFF
bcf FLAGS, BURSTACTIVE
;bsf FLAGS, BURSTACTIVE ;uncomment to turn burstfire on/comment to turn burstfire OFF
movlw 0X04 ;burst count 0x02 = 3 shot burst/0x03 = 4 shot burst/0x04 = 5 shot burst
bcf FLAGS, LEDON ;turn off LED 1/2 sec
movlw 0x0A
movwf TEMP3
..I've been looking at a PIC Basic Pro Source that Robbo used and thats the only way I found that I see a possiblity in 12 mode, 9 mode etc.
Just throwing stuff out there, I just normally mess with the asm and see what happens! haha It keeps me busy!