Code: Select all
<!-- Battle of Atlantis (set 1) -->
<mamecheat version="1">
<cheat desc="no hit">
<script state="on">
<action>maincpu.md@020F = CCA7013E</action> <!-- bullet -->
<action>maincpu.md@03D1 = C2A7003E</action> <!-- background -->
<action>maincpu.md@03E3 = C4A7003E</action> <!-- enemy -->
</script>
<script state="off">
<action>maincpu.md@020F = CC059ACD</action>
<action>maincpu.md@03D1 = C205BFCD</action>
<action>maincpu.md@03E3 = C40515CD</action>
</script>
</cheat>
<cheat desc="auto fire">
<script state="on">
<action>maincpu.mb@0B07 = 07</action> <!-- input -->
<action>maincpu.mb@0B0E = CC</action> <!-- missile -->
<action>maincpu.mb@0B14 = CC</action> <!-- shot -->
</script>
<script state="off">
<action>maincpu.mb@0B07 = 14</action>
<action>maincpu.mb@0B0E = C4</action>
<action>maincpu.mb@0B14 = C4</action>
</script>
</cheat>
<cheat desc="player speed">
<parameter min="0x01" max="0x05" step="0x01" />
<script state="on">
<action>maincpu.mw@0AEB = 3000 </action> <!-- up -->
<action>maincpu.mw@0AF2 = 3008 </action> <!-- down -->
<action>maincpu.mw@0AF9 = 3010 </action> <!-- right -->
<action>maincpu.mw@ B00 = 3018 </action> <!-- left -->
<action>maincpu.mq@3000 = C9FB100BA5CD0006</action>
<action>maincpu.mq@3008 = C9FB100B9ACD0006</action>
<action>maincpu.mq@3010 = C9FB100BB0CD0006</action>
<action>maincpu.mq@3018 = C9FB100BB6CD0006</action>
<!--
3000 | 06 xx : ld b,$xx // up
3002 | CD A5 0B : call $0BA5
3005 | 10 FB : djnz $3002
3007 | C9 : ret
3008 | 06 xx : ld b,$xx // down
300A | CD 9A 0B : call $0B9A
300D | 10 FB : djnz $300A
300F | C9 : ret
3010 | 06 xx : ld b,$xx // right
3012 | CD B0 0B : call $0BB0
3015 | 10 FB : djnz $3012
3017 | C9 : ret
3018 | 06 xx : ld b,$xx // left
301A | CD B6 0B : call $0BB6
301D | 10 FB : djnz $301A
301F | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@3001 = param</action>
<action>maincpu.mb@3009 = param</action>
<action>maincpu.mb@3011 = param</action>
<action>maincpu.mb@3019 = param</action>
</script>
<script state="off">
<action>maincpu.mw@0AEB = 0BA5 </action>
<action>maincpu.mw@0AF2 = 0B9A </action>
<action>maincpu.mw@0AF9 = 0BB0 </action>
<action>maincpu.mw@ B00 = 0BB6 </action>
<action>maincpu.mq@3000 = 0000000000000000</action>
<action>maincpu.mq@3008 = 0000000000000000</action>
<action>maincpu.mq@3010 = 0000000000000000</action>
<action>maincpu.mq@3018 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="bullet speed">
<parameter>
<item value="0x02">01 (slow)</item>
<item value="0x06">02 </item>
<item value="0x0c">03 </item>
<item value="0x12">04 </item>
<item value="0x18">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.md@01EA = DD3020CD </action>
<action>maincpu.mq@3020 = F10220A7027EDDF5</action>
<action>maincpu.mq@3028 = 00C9AFD010C6F1C9</action>
<!--
3020 | F5 : push af
3021 | DD 7E 02 : ld a,(ix+$02)
3024 | A7 : and a
3025 | 20 02 : jr nz,$3029
3027 | F1 : pop af // enemy bullet
3028 | C9 : ret
3029 | F1 : pop af
302A | C6 xx : add a,$xx // player bullet
302C | D0 : ret nc
302D | AF : xor a
302E | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@302B = param</action>
</script>
<script state="off">
<action>maincpu.md@01EA = DD0286DD </action>
<action>maincpu.mq@3020 = 0000000000000000</action>
<action>maincpu.mq@3028 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="missile speed">
<parameter>
<item value="0x01">01 (slow)</item>
<item value="0x02">02 </item>
<item value="0x04">03 </item>
<item value="0x06">04 </item>
<item value="0x08">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.mb@03B3 = 00</action>
</script>
<script state="change">
<action>maincpu.mb@03B7 = param</action>
</script>
<script state="off">
<action>maincpu.mb@03B3 = 04</action>
<action>maincpu.mb@03B7 = 02</action>
</script>
</cheat>
<cheat desc="short hit mark - missile">
<script state="on">
<action>maincpu.mw@0366 = 3030 </action>
<action>maincpu.mq@3030 = B7FE0828ADFE7DDD</action>
<action>maincpu.mq@3038 = 3B3EC90682CD0428</action>
<action>maincpu.mq@3040 = 000000C9AF0577DD</action>
<!--
3030 | DD 7D : ld a,ixl
3032 | FE AD : cp $AD // first missile
3034 | 28 08 : jr z,$303E
3036 | FE B7 : cp $B7 // second missile
3038 | 28 04 : jr z,$303E
303A | CD 82 06 : call $0682
303D | C9 : ret
303E | 3E 3B : ld a,$3B
3040 | DD 77 05 : ld (ix+$05),a
3043 | AF : xor a
3044 | C9 : ret
-->
</script>
<script state="off">
<action>maincpu.mw@0366 = 0682 </action>
<action>maincpu.mq@3030 = 0000000000000000</action>
<action>maincpu.mq@3038 = 0000000000000000</action>
<action>maincpu.mq@3040 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="skip in-game rom check">
<script state="on">
<action>maincpu.mq@0A2F = 0FFE071840183200</action>
</script>
<script state="off">
<action>maincpu.mq@0A2F = 0FFE7C2340183286</action>
</script>
</cheat>
<cheat desc="sound test mode">
<comment>reset the game (F3) to enter sound test mode</comment>
<script state="on">
<action>maincpu.mw@019C = 3050 </action>
<action>maincpu.mq@3050 = 023A400021007BCD</action>
<action>maincpu.mq@3058 = 3A4F070750E62F81</action>
<action>maincpu.mq@3060 = 47B8B13AE62F8100</action>
<action>maincpu.mq@3068 = FE35012020FEEC28</action>
<action>maincpu.mq@3070 = 042001FE34012010</action>
<action>maincpu.mq@3078 = 052040FE0618F03E</action>
<action>maincpu.mq@3080 = 2008FE787786103E</action>
<action>maincpu.mq@3088 = 042002FE05187E03</action>
<action>maincpu.mq@3090 = 0000C0180696CDAF</action>
<!--
3050 | CD 7B 00 : call $007B // erase sprites
3053 | 21 00 40 : ld hl,$4000 // sound code address
3056 | 3A 02 81 : ld a,($8102) // read up/down
3059 | 2F : cpl
305A | E6 50 : and $50
305C | 07 : rlca
305D | 07 : rlca
305E | 4F : ld c,a
305F | 3A 00 81 : ld a,($8100) // read other inputs
3062 | 2F : cpl
3063 | E6 3A : and $3A
3065 | B1 : or c
3066 | B8 : cp b
3067 | 47 : ld b,a
3068 | 28 EC : jr z,$3056
306A | FE 20 : cp $20
306C | 20 01 : jr nz,$306F
306E | 35 : dec (hl) // decrease code -01
306F | FE 10 : cp $10
3071 | 20 01 : jr nz,$3074
3073 | 34 : inc (hl) // increase code +01
3074 | FE 01 : cp $01
3076 | 20 04 : jr nz,$307C
3078 | 3E F0 : ld a,$F0 // decrease code -10
307A | 18 06 : jr $3082
307C | FE 40 : cp $40
307E | 20 05 : jr nz,$3085
3080 | 3E 10 : ld a,$10 // increase code +10
3082 | 86 : add a,(hl)
3083 | 77 : ld (hl),a
3084 | 78 : ld a,b
3085 | FE 08 : cp $08
3087 | 20 03 : jr nz,$308C
3089 | 7E : ld a,(hl) // play sound
308A | 18 05 : jr $3091
308C | FE 02 : cp $02
308E | 20 04 : jr nz,$3094
3090 | AF : xor a // stop sound
3091 | CD 96 06 : call $0696 // send sound code
3094 | 18 C0 : jr $3056
-->
</script>
<script state="run">
<output format="----- battle of atlantis sound test mode -----" line="10" align="center" />
<output format="left : decrease code -01" line="11" align="center" />
<output format="right : increase code +01" line="12" align="center" />
<output format="down : decrease code -10" line="13" align="center" />
<output format="up : increase code +10" line="14" align="center" />
<output format="button 1 : play sound" line="15" align="center" />
<output format="button 2 : stop sound" line="16" align="center" />
<output format="----------------------------" line="17" align="center" />
<output format="<< sound code %02X >>" line="19" align="center" >
<argument>maincpu.pb@4000</argument>
</output>
</script>
<script state="off">
<action>maincpu.mw@019C = 0AA5 </action>
<action>maincpu.mq@3050 = 0000000000000000</action>
<action>maincpu.mq@3058 = 0000000000000000</action>
<action>maincpu.mq@3060 = 0000000000000000</action>
<action>maincpu.mq@3068 = 0000000000000000</action>
<action>maincpu.mq@3070 = 0000000000000000</action>
<action>maincpu.mq@3078 = 0000000000000000</action>
<action>maincpu.mq@3080 = 0000000000000000</action>
<action>maincpu.mq@3088 = 0000000000000000</action>
<action>maincpu.mq@3090 = 0000000000000000</action>
</script>
</cheat>
</mamecheat>
Code: Select all
<!-- Battle of Atlantis (set 2) -->
<mamecheat version="1">
<cheat desc="no hit">
<script state="on">
<action>maincpu.md@0220 = CCA7013E</action> <!-- bullet -->
<action>maincpu.md@03E2 = C2A7003E</action> <!-- background -->
<action>maincpu.md@0402 = C4A7003E</action> <!-- enemy -->
</script>
<script state="off">
<action>maincpu.md@0220 = CC05B9CD</action>
<action>maincpu.md@03E2 = C205DECD</action>
<action>maincpu.md@0402 = C40534CD</action>
</script>
</cheat>
<cheat desc="auto fire">
<script state="on">
<action>maincpu.mb@0B4A = 07</action> <!-- P1 input -->
<action>maincpu.mb@0B4F = CC</action> <!-- P1 missile -->
<action>maincpu.mb@0B55 = CC</action> <!-- shot -->
<action>maincpu.mb@0B5A = 08</action> <!-- P2 input -->
<action>maincpu.mb@0B5F = CC</action> <!-- P2 missile -->
</script>
<script state="off">
<action>maincpu.mb@0B4A = 15</action>
<action>maincpu.mb@0B4F = C4</action>
<action>maincpu.mb@0B55 = C4</action>
<action>maincpu.mb@0B5A = 16</action>
<action>maincpu.mb@0B5F = C4</action>
</script>
</cheat>
<cheat desc="player speed">
<parameter min="0x01" max="0x05" step="0x01" />
<script state="on">
<action>maincpu.mw@0B23 = 3050 </action> <!-- up -->
<action>maincpu.mw@0B2A = 3058 </action> <!-- down -->
<action>maincpu.mw@0B31 = 3060 </action> <!-- right -->
<action>maincpu.mw@0B38 = 3068 </action> <!-- left -->
<action>maincpu.mq@3050 = C9FB100BF1CD0006</action>
<action>maincpu.mq@3058 = C9FB100BE6CD0006</action>
<action>maincpu.mq@3060 = C9FB100BFCCD0006</action>
<action>maincpu.mq@3068 = C9FB100C02CD0006</action>
<!--
3050 | 06 xx : ld b,$xx // up
3052 | CD F1 0B : call $0BF1
3055 | 10 FB : djnz $3052
3057 | C9 : ret
3058 | 06 xx : ld b,$xx // down
305A | CD E6 0B : call $0BE6
305D | 10 FB : djnz $305A
305F | C9 : ret
3060 | 06 xx : ld b,$xx // right
3062 | CD FC 0B : call $0BFC
3065 | 10 FB : djnz $3062
3067 | C9 : ret
3068 | 06 xx : ld b,$xx // left
306A | CD 02 0C : call $0C02
306D | 10 FB : djnz $306A
306F | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@3051 = param</action>
<action>maincpu.mb@3059 = param</action>
<action>maincpu.mb@3061 = param</action>
<action>maincpu.mb@3069 = param</action>
</script>
<script state="off">
<action>maincpu.mw@0B23 = 0BF1 </action>
<action>maincpu.mw@0B2A = 0BE6 </action>
<action>maincpu.mw@0B31 = 0BFC </action>
<action>maincpu.mw@0B38 = 0C02 </action>
<action>maincpu.mq@3050 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3058 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3060 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3068 = FFFFFFFFFFFFFFFF</action>
</script>
</cheat>
<cheat desc="bullet speed">
<parameter>
<item value="0x02">01 (slow)</item>
<item value="0x06">02 </item>
<item value="0x0c">03 </item>
<item value="0x12">04 </item>
<item value="0x18">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.md@01FB = DD3070CD </action>
<action>maincpu.mq@3070 = F10220A7027EDDF5</action>
<action>maincpu.mq@3078 = FFC9AFD010C6F1C9</action>
<!--
3070 | F5 : push af
3071 | DD 7E 02 : ld a,(ix+$02)
3074 | A7 : and a
3075 | 20 02 : jr nz,$3079
3077 | F1 : pop af // enemy bullet
3078 | C9 : ret
3079 | F1 : pop af
307A | C6 xx : add a,$xx // player bullet
307C | D0 : ret nc
307D | AF : xor a
307E | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@307B = param</action>
</script>
<script state="off">
<action>maincpu.md@01FB = DD0286DD </action>
<action>maincpu.mq@3070 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3078 = FFFFFFFFFFFFFFFF</action>
</script>
</cheat>
<cheat desc="missile speed">
<parameter>
<item value="0x01">01 (slow)</item>
<item value="0x02">02 </item>
<item value="0x04">03 </item>
<item value="0x06">04 </item>
<item value="0x08">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.mb@03C4 = 00</action>
</script>
<script state="change">
<action>maincpu.mb@03C8 = param</action>
</script>
<script state="off">
<action>maincpu.mb@03C4 = 04</action>
<action>maincpu.mb@03C8 = 02</action>
</script>
</cheat>
<cheat desc="short hit mark - missile">
<script state="on">
<action>maincpu.mw@0377 = 3080 </action>
<action>maincpu.mq@3080 = B9FE0828AFFE7DDD</action>
<action>maincpu.mq@3088 = 3B3EC906A1CD0428</action>
<action>maincpu.mq@3090 = FFFFFFC9AF0577DD</action>
<!--
3080 | DD 7D : ld a,ixl
3082 | FE AD : cp $AF // first missile
3084 | 28 08 : jr z,$308E
3086 | FE B7 : cp $B9 // second missile
3088 | 28 04 : jr z,$308E
308A | CD A1 06 : call $06A1
308D | C9 : ret
308E | 3E 3B : ld a,$3B
3090 | DD 77 05 : ld (ix+$05),a
3093 | AF : xor a
3094 | C9 : ret
-->
</script>
<script state="off">
<action>maincpu.mw@0377 = 06A1 </action>
<action>maincpu.mq@3080 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3088 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@3090 = FFFFFFFFFFFFFFFF</action>
</script>
</cheat>
<cheat desc="sound test mode">
<comment>reset the game (F3) to enter sound test mode</comment>
<script state="on">
<action>maincpu.mw@01AD = 30A0 </action>
<action>maincpu.mq@30A0 = 023A400021007BCD</action>
<action>maincpu.mq@30A8 = 3A4F070750E62F81</action>
<action>maincpu.mq@30B0 = 47B8B13AE62F8100</action>
<action>maincpu.mq@30B8 = FE35012020FEEC28</action>
<action>maincpu.mq@30C0 = 042001FE34012010</action>
<action>maincpu.mq@30C8 = 052040FE0618F03E</action>
<action>maincpu.mq@30D0 = 2008FE787786103E</action>
<action>maincpu.mq@30D8 = 042002FE05187E03</action>
<action>maincpu.mq@30E0 = FFFFC01806B5CDAF</action>
<!--
30A0 | CD 7B 00 : call $007B // erase sprites
30A3 | 21 00 40 : ld hl,$4000 // sound code address
30A6 | 3A 02 81 : ld a,($8102) // read up/down
30A9 | 2F : cpl
30AA | E6 50 : and $50
30AC | 07 : rlca
30AD | 07 : rlca
30AE | 4F : ld c,a
30AF | 3A 00 81 : ld a,($8100) // read other inputs
30B2 | 2F : cpl
30B3 | E6 3A : and $3A
30B5 | B1 : or c
30B6 | B8 : cp b
30B7 | 47 : ld b,a
30B8 | 28 EC : jr z,$30A6
30BA | FE 20 : cp $20
30BC | 20 01 : jr nz,$30BF
30BE | 35 : dec (hl) // decrease code -01
30BF | FE 10 : cp $10
30C1 | 20 01 : jr nz,$30C4
30C3 | 34 : inc (hl) // increase code +01
30C4 | FE 01 : cp $01
30C6 | 20 04 : jr nz,$30CC
30C8 | 3E F0 : ld a,$F0 // decrease code -10
30CA | 18 06 : jr $30D2
30CC | FE 40 : cp $40
30CE | 20 05 : jr nz,$30D5
30D0 | 3E 10 : ld a,$10 // increase code +10
30D2 | 86 : add a,(hl)
30D3 | 77 : ld (hl),a
30D4 | 78 : ld a,b
30D5 | FE 08 : cp $08
30D7 | 20 03 : jr nz,$30DC
30D9 | 7E : ld a,(hl) // play sound
30DA | 18 05 : jr $30E1
30DC | FE 02 : cp $02
30DE | 20 04 : jr nz,$30E4
30E0 | AF : xor a // stop sound
30E1 | CD B5 06 : call $06B5 // send sound code
30E4 | 18 C0 : jr $30A6
-->
</script>
<script state="run">
<output format="----- battle of atlantis sound test mode -----" line="10" align="center" />
<output format="left : decrease code -01" line="11" align="center" />
<output format="right : increase code +01" line="12" align="center" />
<output format="down : decrease code -10" line="13" align="center" />
<output format="up : increase code +10" line="14" align="center" />
<output format="button 1 : play sound" line="15" align="center" />
<output format="button 2 : stop sound" line="16" align="center" />
<output format="----------------------------" line="17" align="center" />
<output format="<< sound code %02X >>" line="19" align="center" >
<argument>maincpu.pb@4000</argument>
</output>
</script>
<script state="off">
<action>maincpu.mw@01AD = 0AC4 </action>
<action>maincpu.mq@30A0 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30A8 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30B0 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30B8 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30C0 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30C8 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30D0 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30D8 = FFFFFFFFFFFFFFFF</action>
<action>maincpu.mq@30E0 = FFFFFFFFFFFFFFFF</action>
</script>
</cheat>
<cheat desc="skip in-game rom check">
<script state="on">
<action>maincpu.mq@0A4E = 0FFE0718401A3200</action>
</script>
<script state="off">
<action>maincpu.mq@0A4E = 0FFE7C23401A3286</action>
</script>
</cheat>
</mamecheat>
Code: Select all
<!-- Battle of Atlantis (bootleg) -->
<mamecheat version="1">
<cheat desc="no hit">
<script state="on">
<action>maincpu.md@0231 = CCA7013E</action> <!-- bullet -->
<action>maincpu.md@03F3 = C2A7003E</action> <!-- background -->
<action>maincpu.md@0413 = C4A7003E</action> <!-- enemy -->
</script>
<script state="off">
<action>maincpu.md@0231 = CC05CACD</action>
<action>maincpu.md@03F3 = C205EFCD</action>
<action>maincpu.md@0413 = C40545CD</action>
</script>
</cheat>
<cheat desc="auto fire">
<script state="on">
<action>maincpu.mw@0B3D = 3800 </action>
<action>maincpu.mq@3800 = 47CB402F3A400721</action>
<action>maincpu.mq@3808 = C910E62F7E230128</action>
<!--
3800 | 21 07 40 : ld hl,$4007
3803 | 3A 2F 40 : ld a,($402F) // P1 or P2?
3806 | CB 47 : bit 0,a
3808 | 28 01 : jr z,$380B
380A | 23 : inc hl
380B | 7E : ld a,(hl)
380C | 2F : cpl
380D | E6 10 : and $10
380F | C9 : ret
-->
</script>
<script state="off">
<action>maincpu.mw@0B3D = 0B48 </action>
<action>maincpu.mq@3800 = 0000000000000000</action>
<action>maincpu.mq@3808 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="player speed">
<parameter min="0x01" max="0x05" step="0x01" />
<script state="on">
<action>maincpu.mw@0B24 = 3810 </action> <!-- up -->
<action>maincpu.mw@0B2A = 3818 </action> <!-- down -->
<action>maincpu.mw@0B30 = 3820 </action> <!-- right -->
<action>maincpu.mw@0B36 = 3828 </action> <!-- left -->
<action>maincpu.mq@3810 = C9FB100C06CD0006</action>
<action>maincpu.mq@3818 = C9FB100BFBCD0006</action>
<action>maincpu.mq@3820 = C9FB100C17CD0006</action>
<action>maincpu.mq@3828 = C9FB100C11CD0006</action>
<!--
3810 | 06 xx : ld b,$xx // up
3812 | CD 06 0C : call $0C06
3815 | 10 FB : djnz $3812
3817 | C9 : ret
3818 | 06 xx : ld b,$xx // down
381A | CD FB 0B : call $0BFB
381D | 10 FB : djnz $381A
381F | C9 : ret
3820 | 06 xx : ld b,$xx // right
3822 | CD 17 0C : call $0C17
3825 | 10 FB : djnz $3822
3827 | C9 : ret
3828 | 06 xx : ld b,$xx // left
382A | CD 11 0C : call $0C11
382D | 10 FB : djnz $382A
382F | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@3811 = param</action>
<action>maincpu.mb@3819 = param</action>
<action>maincpu.mb@3821 = param</action>
<action>maincpu.mb@3829 = param</action>
</script>
<script state="off">
<action>maincpu.mw@0B24 = 0C06 </action>
<action>maincpu.mw@0B2A = 0BFB </action>
<action>maincpu.mw@0B30 = 0C17 </action>
<action>maincpu.mw@0B36 = 0C11 </action>
<action>maincpu.mq@3810 = 0000000000000000</action>
<action>maincpu.mq@3818 = 0000000000000000</action>
<action>maincpu.mq@3820 = 0000000000000000</action>
<action>maincpu.mq@3828 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="bullet speed">
<parameter>
<item value="0x02">01 (slow)</item>
<item value="0x06">02 </item>
<item value="0x0c">03 </item>
<item value="0x12">04 </item>
<item value="0x18">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.md@020C = DD3830CD </action>
<action>maincpu.mq@3830 = F10220A7027EDDF5</action>
<action>maincpu.mq@3838 = 00C9AFD010C6F1C9</action>
<!--
3830 | F5 : push af
3831 | DD 7E 02 : ld a,(ix+$02)
3834 | A7 : and a
3835 | 20 02 : jr nz,$3839
3837 | F1 : pop af // enemy bullet
3838 | C9 : ret
3839 | F1 : pop af
383A | C6 xx : add a,$xx // player bullet
383C | D0 : ret nc
383D | AF : xor a
383E | C9 : ret
-->
</script>
<script state="change">
<action>maincpu.mb@383B = param</action>
</script>
<script state="off">
<action>maincpu.md@020C = DD0286DD </action>
<action>maincpu.mq@3830 = 0000000000000000</action>
<action>maincpu.mq@3838 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="missile speed">
<parameter>
<item value="0x01">01 (slow)</item>
<item value="0x02">02 </item>
<item value="0x04">03 </item>
<item value="0x06">04 </item>
<item value="0x08">05 (fast)</item>
</parameter>
<script state="on">
<action>maincpu.mb@03D5 = 00</action>
</script>
<script state="change">
<action>maincpu.mb@03D9 = param</action>
</script>
<script state="off">
<action>maincpu.mb@03D5 = 04</action>
<action>maincpu.mb@03D9 = 02</action>
</script>
</cheat>
<cheat desc="short hit mark - missile">
<script state="on">
<action>maincpu.mw@0388 = 3840 </action>
<action>maincpu.mq@3840 = 86FE08287CFE7DDD</action>
<action>maincpu.mq@3848 = 3B3EC9000ECD0428</action>
<action>maincpu.mq@3850 = 000000C9AF0577DD</action>
<!--
3840 | DD 7D : ld a,ixl
3842 | FE 7C : cp $7C // first missile
3844 | 28 08 : jr z,$384E
3846 | FE 86 : cp $86 // second missile
3848 | 28 04 : jr z,$384E
384A | CD 0E 00 : call $000E
384D | C9 : ret
384E | 3E 3B : ld a,$3B
3850 | DD 77 05 : ld (ix+$05),a
3853 | AF : xor a
3854 | C9 : ret
-->
</script>
<script state="off">
<action>maincpu.mw@0388 = 000E </action>
<action>maincpu.mq@3840 = 0000000000000000</action>
<action>maincpu.mq@3848 = 0000000000000000</action>
<action>maincpu.mq@3850 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="sound test mode (test)">
<comment>reset the game (F3) to enter sound test mode</comment>
<script state="on">
<action>maincpu.mw@07D5 = 3860 </action>
<action>maincpu.mq@3860 = 99CD400021007BCD</action>
<action>maincpu.mq@3868 = 3A4F01E660003A0E</action>
<action>maincpu.mq@3870 = 2847B8B1BCE66080</action>
<action>maincpu.mq@3878 = 08FE35012004FEF0</action>
<action>maincpu.mq@3880 = 3E042020FE340120</action>
<action>maincpu.mq@3888 = 3E052080FE0618F0</action>
<action>maincpu.mq@3890 = 032010FE78778610</action>
<action>maincpu.mq@3898 = AF042002FE05187E</action>
<action>maincpu.mq@38A0 = 000000C11806B2CD</action>
<!--
3860 | CD 7B 00 : call $007B // erase sprites
3863 | 21 00 40 : ld hl,$4000 // sound code address
3866 | CD 99 0E : call $0E99 // check sound?
3869 | 3A 00 60 : ld a,($6000) // read start button
386C | E6 01 : and $01
386E | 4F : ld c,a
386F | 3A 80 60 : ld a,($6080) // read other inputs
3872 | E6 BC : and $BC
3874 | B1 : or c
3875 | B8 : cp b
3876 | 47 : ld b,a
3877 | 28 F0 : jr z,$3869
3879 | FE 04 : cp $04
387B | 20 01 : jr nz,$387E
387D | 35 : dec (hl) // decrease code -01
387E | FE 08 : cp $08
3880 | 20 01 : jr nz,$3883
3882 | 34 : inc (hl) // increase code +01
3883 | FE 20 : cp $20
3885 | 20 04 : jr nz,$388B
3887 | 3E F0 : ld a,$F0 // decrease code -10
3889 | 18 06 : jr $3891
388B | FE 80 : cp $80
388D | 20 05 : jr nz,$3894
388F | 3E 10 : ld a,$10 // increase code +10
3891 | 86 : add a,(hl)
3892 | 77 : ld (hl),a
3893 | 78 : ld a,b
3894 | FE 10 : cp $10
3896 | 20 03 : jr nz,$389B
3898 | 7E : ld a,(hl) // play sound
3899 | 18 05 : jr $38A0
389B | FE 02 : cp $02
389D | 20 04 : jr nz,$38A3
389F | AF : xor a // stop sound
38A0 | CD B2 06 : call $06B2 // send sound code
38A3 | 18 C1 : jr $3866
-->
</script>
<script state="run">
<output format="----- battle of atlantis sound test mode -----" line="10" align="center" />
<output format="left : decrease code -01" line="11" align="center" />
<output format="right : increase code +01" line="12" align="center" />
<output format="down : decrease code -10" line="13" align="center" />
<output format="up : increase code +10" line="14" align="center" />
<output format="button 1 : play sound" line="15" align="center" />
<output format="button 2 : stop sound" line="16" align="center" />
<output format="----------------------------" line="17" align="center" />
<output format="<< sound code %02X >>" line="19" align="center" >
<argument>maincpu.pb@4000</argument>
</output>
</script>
<script state="off">
<action>maincpu.mw@07D5 = 01CA </action>
<action>maincpu.mq@3860 = 0000000000000000</action>
<action>maincpu.mq@3868 = 0000000000000000</action>
<action>maincpu.mq@3870 = 0000000000000000</action>
<action>maincpu.mq@3878 = 0000000000000000</action>
<action>maincpu.mq@3880 = 0000000000000000</action>
<action>maincpu.mq@3888 = 0000000000000000</action>
<action>maincpu.mq@3890 = 0000000000000000</action>
<action>maincpu.mq@3898 = 0000000000000000</action>
<action>maincpu.mq@38A0 = 0000000000000000</action>
</script>
</cheat>
<cheat desc="skip in-game rom check">
<script state="on">
<action>maincpu.mq@0A75 = 0FFE0718401A3200</action>
</script>
<script state="off">
<action>maincpu.mq@0A75 = 0FFE7C23401A3286</action>
</script>
</cheat>
</mamecheat>
- In atlantisb, I don't know how to handle discrete sound. So you can't play sound correctly in "sound test mode".
- Current "Invincibility" in the official database has problem (always fast scroll speed).
- This game checks ROM at the game start. You can play the game even if fails in ROM test though bad gfx is displayed.