;from caker137 ;Discs of Tron 2-Player Environmental + Freeplay Hack ;This hack is designed to work on the latest UPRIGHT romset ;released for DOT dated 10/83. They will work equally well ;in an Upright or Environmental cabinet. DESIGN SECTIONS (FOR REFERENCE): Z0 - Hack to add 2p to ENV mode for either cab. A1 - Insert our code in unused portion or eprom A2 - Jump to our code instead of "credit" display A3 - If not set to freeplay mode, jump to credit display A4 - If 2 player pressed, credits = 2 A5 - If 1 player pressed with aim down, credits = 2 A6 - If 1 player pressed alone, credits = 1 B1 - In start waiting screen, if in freeplay mode, and credits = 2, start 2 player game B2 - In start waiting screen, if in freeplay mode, and credits = 1, start 1 player game C1 - In attract screen with "Insert coin", if freeplay change to "Press Start" C2 - In same screen change "Insert coin" to display "Freeplay" D1 - On BOOT, if freeplay mode, credits = 0 E1 - On Game Over, if freeplay mode, credits = 0 HOW TO CHOOSE FREEPLAY: In the machine setup screen, change the pricing to be 9 coins for 1 credit on the coin chute 1 setup. This enables freeplay. Any other setting will cause the machine to behave as it did before the hack was added. USEFUL ADDRESSES: 0x5c8 - Get start press 1 or 2 player 0x5d7 - Start 1 player game 0x5eb - Start 2 player game 0x9647 - check for coin 1 input 0x96BC - check for coin 2 input 0x9762 - Text Line Print 0x9870 - Print Credits 0x03dd - Scroll "Insert Coin" 0xdd84 - Freeplay Label 0x0445 - Press Start Label 0XF132 - Credits Print Location in Attract NVRAM 0xE545 - Credits 0xE532 - Coins per Credit slot 1 CHANGES DESIGN SECTION Z0 (SEE MY OTHER HACK FOR MORE DETAILS) ;some things will get modified by the freeplay portion of the hack. ;this is a list of the 2 player ENV changes that otherwise need to be made. ;make jumper check routine always report ENV ;Address ROM:RELATIVE From To Checksum Change *0x0023 loc-pg0.1c:0x0023 0xCB 0xE6 0x1B *0x0024 loc-pg0.1c:0x0024 0x7F 0x00 0x81 ;make 2 player routines think its always UPR ;(some removed from 2player hack, hacked by other freeplay hack stuff below) ;Address ROM:RELATIVE From To Checksum Change *0x04F5 loc-pg0.1c:0x04F5 0x28 0x20 0xF8 ;Checksum Fix (you could combine with other checksum fix if you like) ;Address ROM:RELATIVE From To *0x0005 loc-pg0.1c:0x0005 0xFF 0x6B ;(0xFF-0x94 = 0x6B) DESIGN SECTION A2 94EF: CD 70 98 call $9870 to 94EF: CD 8e 00 call $008E DESIGN SECTION A1,A3-A6 008E: 3A 32 E5 ld a,($E532) 0091: FE 09 cp $09 ;did they set coin input to 9? 0093: C2 70 98 jp nz,$9870 ;if not, jump to credit call 0096: DB 00 in a,($00) ;read port 0098: CB 5F bit 3,a ;was 2 Player Pressed? 009A: 28 0F jr z,$00AB ;if so, run 2 player game 009C: CB 57 bit 2,a ;was 1 Player Pressed? 009E: C0 ret nz ;leave if none pressed 009F: DB 02 in a,($02) ;check for input on aim down 00A1: CB 67 bit 4,a ;was aim down held? 00A3: 28 06 jr z,$00AB ;if so, run 2 player game 00A5: 3E 01 ld a,$01 ;otherwise, 1 player game, here 00A7: 32 45 E5 ld ($E545),a ;place credits into NVRAM 00AA: C9 ret 00AB: 3E 02 ld a,$02 ;place credits into NVRAM 00AD: 32 45 E5 ld ($E545),a 00B0: C9 ret DESIGN SECTION B1-B2 05C8: C3 B1 00 jp $00B1 ;Our modified start select code (incorporates my other 2p env hack) 00B1: 3A 32 E5 ld a,($E532) 00B4: FE 09 cp $09 ;did they set coin input to 9? 00B6: 20 0C jr nz,$00C4 ;if not, check start buttons 00B8: 3A 45 E5 ld a,($E545) ;load credits variable 00BB: FE 02 cp $01 00BD: D2 EB 05 jp c,$05EB ;if greater than 1 credit, run 2p game 00C0: C2 D7 05 jp nz,$05D7 ;if 1 credit, run 1p game 00C3: C9 ret 00C4: DB 00 in a,($00) ;read port 00C6: CB 5F bit 3,a ;was 2 Player Pressed? 00C8: CA EB 05 jp z,$05EB ;if so, run 2 player game 00CB: CB 57 bit 2,a ;was 1 Player Pressed? 00CD: C0 ret nz ;leave if none pressed 00CE: DB 02 in a,($02) ;check for input on aim down 00D0: CB 67 bit 4,a ;was aim down held? 00D2: CA EB 05 jp z,$05EB ;if so, run 2 player game 00D5: C3 D7 05 jp $05D7 ;otherwise, 1 player game, here DESIGN SECTION D1 945D: CD 9B BD call $BD9B to 945D: C3 ED 00 jp $00ED 00ED: 3A 32 E5 ld a,($E532) 00F0: FE 09 cp $09 ;did they set coin input to 9? 00F2: 20 04 jr nz,$00F8 ;if not, jump to jumpback code 00F4: AF xor a ;clear a 00F5: 32 45 E5 ld ($E545),a ;clear credits 00F8: CD 9B BD call $BD9B 00FB: C3 60 94 jp $9460 DESIGN SECTION E1 02EE: E7 rst $20 02EF: C8 ret z 02F0: 21 09 E5 ld hl,$E509 to 02EE: C3 D8 00 jp $00DA 02F1: 00 nop 02F2: 00 nop 00DA: 3A 32 E5 ld a,($E532) 00DD: FE 09 cp $09 ;did they set coin input to 9? 00DF: 20 04 jr nz,$00E5 ;if not, jump to jumpback code 00E1: AF xor a ;clear a 00E2: 32 45 E5 ld ($E545),a ;clear credits 00E5: 21 09 E5 ld hl,$E509 00E8: C3 F3 02 jp $02F3 DESIGN SECTION C2 ;change sting pointer for display routine if 9 credits per. ;The string was already in ROM somewhere (how handy! and Strange?) 03DD: 11 94 05 ld de,$0594 to 03DD: C3 3D 00 jp $003D 003D: 11 94 05 ld de,$0594 0040: 3A 32 E5 ld a,($E532) 0043: FE 09 cp $09 0045: 20 03 jr nz,$004A 0047: 11 84 DD ld de,$DD84 004A: C3 E0 03 jp $03E0 DESIGN SECTION C1 ;change sting pointer for display routine if 9 credits per. ;The string was already in ROM somewhere (how handy!) 07DC: 01 2E F1 ld bc,$F12E to 07DC: C3 4D 00 jp $004D 004D: 01 2E F1 ld bc,$F12E 0050: 3A 32 E5 ld a,($E532) 0053: FE 09 cp $09 0055: 20 06 jr nz,$005D 0057: 11 45 04 ld de,$0445 005A: 01 32 F1 ld bc,$F132 005D: C3 DF 07 jp $07DF BYTE-FOR-BYTE CHANGES (SEE ABOVE FOR DETAILS) Address Rom-Relative From To Change 0x94F0 loc-pg2.3c:0x14F0 0X70 0X8E 0x1E 0x94F1 loc-pg2.3c:0x14F1 0X98 0X00 0x68 0x945D loc-pg2.3c:0x145D 0XCD 0XC3 0xF6 0x945E loc-pg2.3c:0x145E 0X9B 0XED 0x52 0x945F loc-pg2.3c:0x145F 0XBD 0X00 0x43 ----- TOTAL: 0X11 Checksum Cancellation: 0xA1FF loc-pg2.3c:0x21FF 0X43 0X32 (0x43-0x11=0x32) Address Rom-Relative From To Change 0x008E loc-pg0.1c:0x008E 0xFF 0X3A 0X3B 0x008F loc-pg0.1c:0x008F 0xFF 0X32 0X33 0x0090 loc-pg0.1c:0x0090 0xFF 0XE5 0XE6 0x0091 loc-pg0.1c:0x0091 0xFF 0XFE 0XFF 0x0092 loc-pg0.1c:0x0092 0xFF 0X09 0X0A 0x0093 loc-pg0.1c:0x0093 0xFF 0XC2 0XC3 0x0094 loc-pg0.1c:0x0094 0xFF 0X70 0X71 0x0095 loc-pg0.1c:0x0095 0xFF 0X98 0X99 0x0096 loc-pg0.1c:0x0096 0xFF 0xDB 0xDC 0x0097 loc-pg0.1c:0x0097 0xFF 0x00 0x01 0x0098 loc-pg0.1c:0x0098 0xFF 0xCB 0xCC 0x0099 loc-pg0.1c:0x0099 0xFF 0x5F 0x60 0x009A loc-pg0.1c:0x009A 0xFF 0x28 0x29 0x009B loc-pg0.1c:0x009B 0xFF 0x0F 0x10 0x009C loc-pg0.1c:0x009C 0xFF 0xCB 0xCC 0x009D loc-pg0.1c:0x009D 0xFF 0x57 0x58 0x009E loc-pg0.1c:0x009E 0xFF 0xC0 0xC1 0x009F loc-pg0.1c:0x009F 0xFF 0xDB 0xDC 0x00A0 loc-pg0.1c:0x00A0 0xFF 0x02 0x03 0x00A1 loc-pg0.1c:0x00A1 0xFF 0xCB 0xCC 0x00A2 loc-pg0.1c:0x00A2 0xFF 0x67 0x68 0x00A3 loc-pg0.1c:0x00A3 0xFF 0x28 0x29 0x00A4 loc-pg0.1c:0x00A4 0xFF 0x06 0x07 0x00A5 loc-pg0.1c:0x00A5 0xFF 0x3E 0x3F 0x00A6 loc-pg0.1c:0x00A6 0xFF 0x01 0x02 0x00A7 loc-pg0.1c:0x00A7 0xFF 0x32 0x33 0x00A8 loc-pg0.1c:0x00A8 0xFF 0x45 0x46 0x00A9 loc-pg0.1c:0x00A9 0xFF 0xE5 0xE6 0x00AA loc-pg0.1c:0x00AA 0xFF 0xC9 0xCA 0x00AB loc-pg0.1c:0x00AB 0xFF 0x3E 0x3F 0x00AC loc-pg0.1c:0x00AC 0xFF 0x02 0x03 0x00AD loc-pg0.1c:0x00AD 0xFF 0x32 0x33 0x00AE loc-pg0.1c:0x00AE 0xFF 0x45 0x46 0x00AF loc-pg0.1c:0x00AF 0xFF 0xE5 0xE6 0x00B0 loc-pg0.1c:0x00B0 0xFF 0xC9 0xCA 0x05C8 loc-pg0.1c:0x05C8 0xDB 0xC3 0xE8 0x05C9 loc-pg0.1c:0x05C9 0x00 0xB1 0xB1 0x05CA loc-pg0.1c:0x05CA 0x2F 0x00 0xD1 0x00B1 loc-pg0.1c:0x00B1 0xFF 0x3A 0x3B 0x00B2 loc-pg0.1c:0x00B2 0xFF 0x32 0x33 0x00B3 loc-pg0.1c:0x00B3 0xFF 0xE5 0xE6 0x00B4 loc-pg0.1c:0x00B4 0xFF 0xFE 0xFF 0x00B5 loc-pg0.1c:0x00B5 0xFF 0x09 0x0A 0x00B6 loc-pg0.1c:0x00B6 0xFF 0x20 0x21 0x00B7 loc-pg0.1c:0x00B7 0xFF 0x0C 0x0D 0x00B8 loc-pg0.1c:0x00B8 0xFF 0x3A 0x3B 0x00B9 loc-pg0.1c:0x00B9 0xFF 0x45 0x46 0x00BA loc-pg0.1c:0x00BA 0xFF 0xE5 0xE6 0x00BB loc-pg0.1c:0x00BB 0xFF 0xFE 0xFF 0x00BC loc-pg0.1c:0x00BC 0xFF 0x02 0x03 0x00BD loc-pg0.1c:0x00BD 0xFF 0xD2 0xD3 0x00BE loc-pg0.1c:0x00BE 0xFF 0xEB 0xEC 0x00BF loc-pg0.1c:0x00BF 0xFF 0x05 0x06 0x00C0 loc-pg0.1c:0x00C0 0xFF 0xC2 0xC3 0x00C1 loc-pg0.1c:0x00C1 0xFF 0xD7 0xD8 0x00C2 loc-pg0.1c:0x00C2 0xFF 0x05 0x06 0x00C3 loc-pg0.1c:0x00C3 0xFF 0xC9 0xCA 0x00C4 loc-pg0.1c:0x00C4 0xFF 0xDB 0xDC 0x00C5 loc-pg0.1c:0x00C5 0xFF 0x00 0x01 0x00C6 loc-pg0.1c:0x00C6 0xFF 0xCB 0xCC 0x00C7 loc-pg0.1c:0x00C7 0xFF 0x5F 0x60 0x00C8 loc-pg0.1c:0x00C8 0xFF 0xCA 0xCB 0x00C9 loc-pg0.1c:0x00C9 0xFF 0xEB 0xEC 0x00CA loc-pg0.1c:0x00CA 0xFF 0x05 0x06 0x00CB loc-pg0.1c:0x00CB 0xFF 0xCB 0xCC 0x00CC loc-pg0.1c:0x00CC 0xFF 0x57 0x58 0x00CD loc-pg0.1c:0x00CD 0xFF 0xC0 0xC1 0x00CE loc-pg0.1c:0x00CE 0xFF 0xDB 0xDC 0x00CF loc-pg0.1c:0x00CF 0xFF 0x02 0x03 0x00D0 loc-pg0.1c:0x00D0 0xFF 0xCB 0xCC 0x00D1 loc-pg0.1c:0x00D1 0xFF 0x67 0x68 0x00D2 loc-pg0.1c:0x00D2 0xFF 0xCA 0xCB 0x00D3 loc-pg0.1c:0x00D3 0xFF 0xEB 0xEC 0x00D4 loc-pg0.1c:0x00D4 0xFF 0x05 0x06 0x00D5 loc-pg0.1c:0x00D5 0xFF 0xC3 0xC4 0x00D6 loc-pg0.1c:0x00D6 0xFF 0xD7 0xD8 0x00D7 loc-pg0.1c:0x00D7 0xFF 0x05 0x06 TOTAL SOFAR 0X14 0x02EE loc-pg0.1c:0x02EE 0xE7 0xC3 0xDC 0x02EF loc-pg0.1c:0x02EF 0xC8 0xDB 0x13 0x02F0 loc-pg0.1c:0x02F0 0x21 0x00 0xDF 0x02F1 loc-pg0.1c:0x02F1 0x09 0x00 0xF7 0x02F2 loc-pg0.1c:0x02F2 0xE5 0x00 0x1B 0x00DA loc-pg0.1c:0x00DA 0xFF 0x3A 0x3B 0x00DB loc-pg0.1c:0x00DB 0xFF 0x32 0x33 0x00DC loc-pg0.1c:0x00DC 0xFF 0xE5 0xE6 0x00DD loc-pg0.1c:0x00DD 0xFF 0xFE 0xFF 0x00DE loc-pg0.1c:0x00DE 0xFF 0x09 0x0A 0x00DF loc-pg0.1c:0x00DF 0xFF 0x20 0x21 0x00E0 loc-pg0.1c:0x00E0 0xFF 0x04 0x05 0x00E1 loc-pg0.1c:0x00E1 0xFF 0xAF 0xB0 0x00E2 loc-pg0.1c:0x00E2 0xFF 0x32 0x33 0x00E3 loc-pg0.1c:0x00E3 0xFF 0x45 0x46 0x00E4 loc-pg0.1c:0x00E4 0xFF 0xE5 0xE6 0x00E5 loc-pg0.1c:0x00E5 0xFF 0x21 0x22 0x00E6 loc-pg0.1c:0x00E6 0xFF 0x09 0x0A 0x00E7 loc-pg0.1c:0x00E7 0xFF 0xE5 0xE6 0x00E8 loc-pg0.1c:0x00E8 0xFF 0xC3 0xC4 0x00E9 loc-pg0.1c:0x00E9 0xFF 0xF3 0xF4 0x00EA loc-pg0.1c:0x00EA 0xFF 0x02 0x03 total sofar: 0x53 0x00ED loc-pg0.1c:0x00ED 0xFF 0x3A 0x3B 0x00EE loc-pg0.1c:0x00EE 0xFF 0x32 0x33 0x00EF loc-pg0.1c:0x00EF 0xFF 0xE5 0xE6 0x00F0 loc-pg0.1c:0x00F0 0xFF 0xFE 0xFF 0x00F1 loc-pg0.1c:0x00F1 0xFF 0x09 0x0A 0x00F2 loc-pg0.1c:0x00F2 0xFF 0x20 0x21 0x00F3 loc-pg0.1c:0x00F3 0xFF 0x04 0x05 0x00F4 loc-pg0.1c:0x00F4 0xFF 0xAF 0xB0 0x00F5 loc-pg0.1c:0x00F5 0xFF 0x32 0x33 0x00F6 loc-pg0.1c:0x00F6 0xFF 0x45 0x46 0x00F7 loc-pg0.1c:0x00F7 0xFF 0xE5 0xE6 0x00F8 loc-pg0.1c:0x00F8 0xFF 0xCD 0xCE 0x00F9 loc-pg0.1c:0x00F9 0xFF 0x9B 0x9C 0x00FA loc-pg0.1c:0x00FA 0xFF 0xBD 0xBE 0x00FB loc-pg0.1c:0x00FB 0xFF 0xC3 0xC4 0x00FC loc-pg0.1c:0x00FC 0xFF 0x60 0x61 0x00FD loc-pg0.1c:0x00FD 0xFF 0x94 0x95 TOTAL SOFAR: 0XC7 0x03DD loc-pg0.1c:0x03DD 0x11 0xC3 0xB2 0x03DE loc-pg0.1c:0x03DE 0x94 0x3D 0xA9 0x03DF loc-pg0.1c:0x03DF 0x05 0x00 0xFB 0x003D loc-pg0.1c:0x003D 0xFF 0x11 0x12 0x003E loc-pg0.1c:0x003E 0xFF 0x94 0x95 0x003F loc-pg0.1c:0x003F 0xFF 0x05 0x06 0x0040 loc-pg0.1c:0x0040 0xFF 0x3A 0x3B 0x0041 loc-pg0.1c:0x0041 0xFF 0x32 0x33 0x0042 loc-pg0.1c:0x0042 0xFF 0xE5 0xE6 0x0043 loc-pg0.1c:0x0043 0xFF 0xFE 0xFF 0x0044 loc-pg0.1c:0x0044 0xFF 0x09 0x0A 0x0045 loc-pg0.1c:0x0045 0xFF 0x20 0x21 0x0046 loc-pg0.1c:0x0046 0xFF 0x03 0x04 0x0047 loc-pg0.1c:0x0047 0xFF 0x11 0x12 0x0048 loc-pg0.1c:0x0048 0xFF 0x84 0x85 0x0049 loc-pg0.1c:0x0049 0xFF 0xDD 0xDE 0x004A loc-pg0.1c:0x004A 0xFF 0xC3 0xC4 0x004B loc-pg0.1c:0x004B 0xFF 0xE0 0xE1 0x004C loc-pg0.1c:0x004C 0xFF 0x03 0x04 TOTAL SOFAR: 0X6A 0x07DC loc-pg0.1c:0x07DC 0x01 0xC3 0xC2 0x07DD loc-pg0.1c:0x07DD 0x2E 0x4D 0x1F 0x07DE loc-pg0.1c:0x07DE 0xF1 0x00 0x0F 0x004D loc-pg0.1c:0x004D 0xFF 0x01 0x02 0x004E loc-pg0.1c:0x004E 0xFF 0x2E 0x2F 0x004F loc-pg0.1c:0x004F 0xFF 0xF1 0xF2 0x0050 loc-pg0.1c:0x0050 0xFF 0x3A 0x3B 0x0051 loc-pg0.1c:0x0051 0xFF 0x32 0x33 0x0052 loc-pg0.1c:0x0052 0xFF 0xE5 0xE6 0x0053 loc-pg0.1c:0x0053 0xFF 0xFE 0xFF 0x0054 loc-pg0.1c:0x0054 0xFF 0x09 0x0A 0x0055 loc-pg0.1c:0x0055 0xFF 0x20 0x21 0x0056 loc-pg0.1c:0x0056 0xFF 0x06 0x07 0x0057 loc-pg0.1c:0x0057 0xFF 0x11 0x12 0x0058 loc-pg0.1c:0x0058 0xFF 0x45 0x46 0x0059 loc-pg0.1c:0x0059 0xFF 0x04 0x05 0x005A loc-pg0.1c:0x005A 0xFF 0x01 0x02 0x005B loc-pg0.1c:0x005B 0xFF 0x32 0x33 0x005C loc-pg0.1c:0x005C 0xFF 0xF1 0xF2 0x005D loc-pg0.1c:0x005D 0xFF 0xC3 0xC4 0x005E loc-pg0.1c:0x005E 0xFF 0xDF 0xE0 0x005F loc-pg0.1c:0x005F 0xFF 0x07 0x08 ---- TOTAL: 0X32 Checksum Cancellation: 0x0004 loc-pg0.1c:0x0004 0xFF 0XCD (0xFF-0x32=0xCD)