trunk/src/mame/drivers/exprraid.c
| r18853 | r18854 | |
| 17 | 17 | 1803-1803 DSW 1 |
| 18 | 18 | 2100-2100 Sound latch write |
| 19 | 19 | 2800-2801 Protection |
| 20 | | 3800-3800 VBlank ( bootleg 1 only ) |
| 20 | 3800-3800 VBlank ( bootleg 2 only ) |
| 21 | 21 | 4000-ffff ROM |
| 22 | | ffc0-ffc0 VBlank ( bootleg 2 only ) |
| 22 | ffc0-ffc0 VBlank ( bootleg 3 only ) |
| 23 | 23 | |
| 24 | 24 | Sound Cpu: ( 6809 ) |
| 25 | 25 | 0000-1fff RAM |
| r18853 | r18854 | |
| 57 | 57 | |
| 58 | 58 | Stephh's notes (based on the games M6502 code and some tests) : |
| 59 | 59 | |
| 60 | | 1) 'exprraid' |
| 60 | 1) 'exprrada' |
| 61 | 61 | |
| 62 | | - "@ 1986 DATA EAST USA, INC." (US) |
| 63 | | - Number of enemies on "shoot" stages is determined by the level |
| 64 | | (see code at 0x5d21 where location 0x0e is level number-1). |
| 65 | | Note that time tables are coded backwards (locomotive first, |
| 66 | | then 5th wagon, then 4th wagon ... up to 1st wagon). |
| 67 | | This number of enemies is also supposed to be determined |
| 68 | | by "Difficulty" settings (DSW1 bits 3 and 4). |
| 69 | | There is however an ingame bug that reads DSW1 bits 4 and 5 : |
| 70 | | |
| 71 | | 5D2F: AD 03 18 lda $1803 |
| 72 | | 5D32: 49 FF eor #$FF |
| 73 | | 5D34: 4A lsr a |
| 74 | | 5D35: 4A lsr a |
| 75 | | 5D36: 4A lsr a |
| 76 | | 5D37: 29 06 and #$06 |
| 77 | | |
| 78 | | So number of enemies is also determined by "Demo Sound" setting ! |
| 79 | | Correct code shall be : |
| 80 | | |
| 81 | | 5D37: 29 03 and #$03 |
| 82 | | |
| 83 | | - Time for each wagon on "shoot" stage is determined by the level |
| 84 | | (see code at 0x6873 where location 0x0e is level number-1). |
| 85 | | Note that time tables are coded backwards (locomotive first, |
| 86 | | then 5th wagon, then 4th wagon ... up to 1st wagon). |
| 87 | | - In the US manual, "bonus lives" settings are told be either |
| 88 | | "Every 50000" or "50000/80000". |
| 89 | | However, when you look at code at 0xe4a1, you'll notice that |
| 90 | | settings shall be "50000 only" and "50000/80000". |
| 91 | | - "Coin Mode" as well "Mode 2 Coinage" settings (DSW0 bits 0 to 4) |
| 92 | | are undocumented in the US manual. |
| 93 | | "Coin Mode" is tested though via code at 0xe7c5. |
| 94 | | Coinage tables : |
| 95 | | * 0xe7e2 : COIN1 - 0xe7ea : COIN2 (Mode 1) |
| 96 | | * 0xe7f2 : COIN1 - 0xe7fa : COIN2 (Mode 2) |
| 97 | | - "Force Coinage" (DSW1 bit 6) setting is undocumented in the US manual. |
| 98 | | It is tested though via code at 0xe794. |
| 99 | | When this Dip Switch is set to "On", pressing COIN1 or COIN2 always |
| 100 | | adds 1 credit regardless of the "Coinage" and "Coin Mode" settings. |
| 101 | | - At the beginning of each level, you have text in upper case |
| 102 | | which gives you some hints to pass the level or some advice. |
| 103 | | - In this version, due to extra code at 0xfd80, you only have 4 wagons |
| 104 | | for the "shoot" stages instead of 5. |
| 105 | | - Continue play is always available and score is NOT reset to 0. |
| 106 | | |
| 107 | | 2) 'exprrada' |
| 108 | | |
| 109 | 62 | - "@ 1986 DATA EAST CORPORATION" + no code to display the Warning screen (World) |
| 110 | | - Same way to code number of enemies in "shoot" stages as in 'exprraid' |
| 63 | - Same way to code number of enemies in "shoot" stages as in 'exprraidu' |
| 111 | 64 | (code at 5ce4) and same ingame bug : |
| 112 | 65 | |
| 113 | 66 | 5CF4: AD 03 18 lda $1803 |
| r18853 | r18854 | |
| 122 | 75 | 5CFC: 29 03 and #$03 |
| 123 | 76 | |
| 124 | 77 | You'll notice by looking at the tables that there are sometimes |
| 125 | | more enemies than in 'exprraid'. |
| 78 | more enemies than in 'exprraidu'. |
| 126 | 79 | - Time for each wagon on "shoot" stage is determined by the level |
| 127 | 80 | (see code at 0x6834 where location 0x0e is level number-1). |
| 128 | 81 | This time is also supposed to be determined by "Difficulty" |
| r18853 | r18854 | |
| 158 | 111 | - In this version, you always have 5 wagons for the "shoot" stages. |
| 159 | 112 | - Continue play is always available but score is reset to 0. |
| 160 | 113 | |
| 161 | | 3) 'wexpressb' |
| 114 | 2) 'exprraidu' |
| 162 | 115 | |
| 116 | - "@ 1986 DATA EAST USA, INC." (US) |
| 117 | - Number of enemies on "shoot" stages is determined by the level |
| 118 | (see code at 0x5d21 where location 0x0e is level number-1). |
| 119 | Note that time tables are coded backwards (locomotive first, |
| 120 | then 5th wagon, then 4th wagon ... up to 1st wagon). |
| 121 | This number of enemies is also supposed to be determined |
| 122 | by "Difficulty" settings (DSW1 bits 3 and 4). |
| 123 | There is however an ingame bug that reads DSW1 bits 4 and 5 : |
| 124 | |
| 125 | 5D2F: AD 03 18 lda $1803 |
| 126 | 5D32: 49 FF eor #$FF |
| 127 | 5D34: 4A lsr a |
| 128 | 5D35: 4A lsr a |
| 129 | 5D36: 4A lsr a |
| 130 | 5D37: 29 06 and #$06 |
| 131 | |
| 132 | So number of enemies is also determined by "Demo Sound" setting ! |
| 133 | Correct code shall be : |
| 134 | |
| 135 | 5D37: 29 03 and #$03 |
| 136 | |
| 137 | - Time for each wagon on "shoot" stage is determined by the level |
| 138 | (see code at 0x6873 where location 0x0e is level number-1). |
| 139 | Note that time tables are coded backwards (locomotive first, |
| 140 | then 5th wagon, then 4th wagon ... up to 1st wagon). |
| 141 | - In the US manual, "bonus lives" settings are told be either |
| 142 | "Every 50000" or "50000/80000". |
| 143 | However, when you look at code at 0xe4a1, you'll notice that |
| 144 | settings shall be "50000 only" and "50000/80000". |
| 145 | - "Coin Mode" as well "Mode 2 Coinage" settings (DSW0 bits 0 to 4) |
| 146 | are undocumented in the US manual. |
| 147 | "Coin Mode" is tested though via code at 0xe7c5. |
| 148 | Coinage tables : |
| 149 | * 0xe7e2 : COIN1 - 0xe7ea : COIN2 (Mode 1) |
| 150 | * 0xe7f2 : COIN1 - 0xe7fa : COIN2 (Mode 2) |
| 151 | - "Force Coinage" (DSW1 bit 6) setting is undocumented in the US manual. |
| 152 | It is tested though via code at 0xe794. |
| 153 | When this Dip Switch is set to "On", pressing COIN1 or COIN2 always |
| 154 | adds 1 credit regardless of the "Coinage" and "Coin Mode" settings. |
| 155 | - At the beginning of each level, you have text in upper case |
| 156 | which gives you some hints to pass the level or some advice. |
| 157 | - In this version, due to extra code at 0xfd80, you only have 4 wagons |
| 158 | for the "shoot" stages instead of 5. |
| 159 | - Continue play is always available and score is NOT reset to 0. |
| 160 | |
| 161 | 3) 'wexpressb1' |
| 162 | |
| 163 | 163 | - "@ 1986 DATA EAST CORPORATION" + no code to display the Warning screen (World) |
| 164 | 164 | - This version is based on 'exprrada' so all comments also fit |
| 165 | 165 | for this set. The main difference is that reads from 0x2800 |
| r18853 | r18854 | |
| 172 | 172 | |
| 173 | 173 | - "@ 1986 DATA EAST CORPORATION" + extra code to display the Warning screen (Japan) |
| 174 | 174 | - Modified Warning screen |
| 175 | | - This version is heavily based on 'exprrada' (even if I think |
| 175 | - This version is heavily based on 'exprrad' (even if I think |
| 176 | 176 | that there shall exist a "better" Japan undumped version) |
| 177 | 177 | so all comments also fit for this set. The main difference is |
| 178 | | the way protection is bypassed (in a different way than 'wexpress' |
| 178 | the way protection is bypassed (in a different way than 'wexpressb1' |
| 179 | 179 | as reads from 0x2801 only occur when a life is lost). |
| 180 | 180 | The other difference is that you can NOT continue a game. |
| 181 | 181 | - "Bonus lives" routine starts at 0xe4e5. |
| r18853 | r18854 | |
| 189 | 189 | - "@ 1986 DATA EAST CORPORATION" + extra code to display the Warning screen (Japan) |
| 190 | 190 | - Original Warning screen |
| 191 | 191 | - "CREDIT" misspelled to "CRDDIT". |
| 192 | | - This version is heavily based on 'exprrada' (even if I think |
| 192 | - This version is heavily based on 'exprrad' (even if I think |
| 193 | 193 | that there shall exist a "better" Japan undumped version) |
| 194 | 194 | so all comments also fit for this set. The main difference is |
| 195 | | the way protection is bypassed (in a different way than 'wexpress' |
| 196 | | but also in a different way than 'wexpressb' as reads from 0x2801 |
| 195 | the way protection is bypassed (in a different way than 'wexpressb1' |
| 196 | but also in a different way than 'wexpressb2' as reads from 0x2801 |
| 197 | 197 | occur when you lose a life but also on "shoot" stages). |
| 198 | | The other difference is that you can NOT continue a game as in 'wexpressb'. |
| 199 | | - "Bonus lives" routine starts at 0xe4e5 (same as 'wexpressb') |
| 200 | | - Coinage related stuff starts at 0xe7d8 (same as 'wexpressb'). |
| 198 | The other difference is that you can NOT continue a game as in 'wexpressb2'. |
| 199 | - "Bonus lives" routine starts at 0xe4e5 (same as 'wexpressb2') |
| 200 | - Coinage related stuff starts at 0xe7d8 (same as 'wexpressb2'). |
| 201 | 201 | - Coinage tables (same as 'wexpressb') : |
| 202 | 202 | * 0xe826 : COIN1 - 0xe82e : COIN2 (Mode 1) |
| 203 | 203 | * 0xe836 : COIN1 - 0xe83e : COIN2 (Mode 2) |
| r18853 | r18854 | |
| 535 | 535 | |
| 536 | 536 | ROM_START( exprraid ) |
| 537 | 537 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 538 | | ROM_LOAD( "cz01-5a.16b", 0x4000, 0x4000, CRC(dc8f9fba) SHA1(cae6af54fc0081d606b6884e8873aed356a37ba9) ) |
| 539 | | ROM_LOAD( "cz00-5.15a", 0x8000, 0x8000, CRC(a81290bc) SHA1(ddb0acda6124427bee691f9926c41fda27ed816e) ) |
| 538 | ROM_LOAD( "cz01-2e.16b", 0x4000, 0x4000, CRC(a0ae6756) SHA1(7f7ec1efddbb62e9d201c6013bca8ab72c3f75f6) ) |
| 539 | ROM_LOAD( "cz00-4e.15a", 0x8000, 0x8000, CRC(910f6ccc) SHA1(1dbf164a7add9335d90ee07b6db9a162a28e407b) ) |
| 540 | 540 | |
| 541 | 541 | ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */ |
| 542 | 542 | ROM_LOAD( "cz02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) ) |
| r18853 | r18854 | |
| 572 | 572 | ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) ) |
| 573 | 573 | ROM_END |
| 574 | 574 | |
| 575 | | ROM_START( exprraida ) |
| 575 | ROM_START( exprraidu ) |
| 576 | 576 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 577 | | ROM_LOAD( "cz01-2e.16b", 0x4000, 0x4000, CRC(a0ae6756) SHA1(7f7ec1efddbb62e9d201c6013bca8ab72c3f75f6) ) |
| 578 | | ROM_LOAD( "cz00-4e.15a", 0x8000, 0x8000, CRC(910f6ccc) SHA1(1dbf164a7add9335d90ee07b6db9a162a28e407b) ) |
| 577 | ROM_LOAD( "cz01-5a.16b", 0x4000, 0x4000, CRC(dc8f9fba) SHA1(cae6af54fc0081d606b6884e8873aed356a37ba9) ) |
| 578 | ROM_LOAD( "cz00-5.15a", 0x8000, 0x8000, CRC(a81290bc) SHA1(ddb0acda6124427bee691f9926c41fda27ed816e) ) |
| 579 | 579 | |
| 580 | 580 | ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */ |
| 581 | 581 | ROM_LOAD( "cz02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) ) |
| r18853 | r18854 | |
| 855 | 855 | } |
| 856 | 856 | |
| 857 | 857 | |
| 858 | | GAME( 1986, exprraid, 0, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East USA", "Express Raider (US, rev 5)", GAME_SUPPORTS_SAVE ) |
| 859 | | GAME( 1986, exprraida, exprraid, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East USA", "Express Raider (US, rev 4)", GAME_SUPPORTS_SAVE ) |
| 858 | GAME( 1986, exprraid, 0, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East Corporation", "Express Raider (World, Rev 4)", GAME_SUPPORTS_SAVE ) |
| 859 | GAME( 1986, exprraidu, exprraid, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East USA", "Express Raider (US, rev 5)", GAME_SUPPORTS_SAVE ) |
| 860 | 860 | GAME( 1986, exprraidi, exprraid, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East Corporation", "Express Raider (Italy)", GAME_SUPPORTS_SAVE ) |
| 861 | 861 | GAME( 1986, wexpress, exprraid, exprraid, exprraid, exprraid_state, exprraid, ROT0, "Data East Corporation", "Western Express (Japan, rev 4)", GAME_SUPPORTS_SAVE ) |
| 862 | 862 | GAME( 1986, wexpressb1,exprraid, exprraid, exprraid, exprraid_state, wexpressb, ROT0, "bootleg", "Western Express (bootleg set 1)", GAME_SUPPORTS_SAVE ) |