Description |
About 90 seconds of inactivity will, regardless of where in the game is it, cause the "GAME OVER" to appear. Here's verification by stephh - 0.118u3
The game seems to call on some undetermined reasons the "Game Over" screen, ending current game ...
This is in fact NOT a bug as the main routine checks an ingame counter which value is based on the status of joysticks and buttons of the 2 players ... Here is what the main routine does with some comments for those who aren't familiar with the M68000 assembly language and/or the taito_h.c driver :
1) Reading inputs
[code]
0015BC: 1B79 0020 0005 0528 move.b 0005.l, (8,A5) joysticks
0015C4: 1B79 0020 0009 0529 move.b 0009.l, (9,A5)
0015CC: 1B79 0020 0007 052C move.b 0007.l, (c,A5) buttons
0015D4: 1B79 0020 000F 052A move.b 000f.l, (a,A5)
0015DC: 4E75 rts
[/code]
2) Filling memory with status of each controls
[code]
Buttons :
0015F0: 4240 clr.w D0
0015F2: 102D 052A move.b (a,A5), D0
0015F6: 322D 052E move.w (e,A5), D1
0015FA: 3B40 052E move.w D0, (e,A5)
0015FE: 4640 not.w D0
001600: 4641 not.w D1
001602: 163C 0000 move.b #The game seems to call on some undetermined reasons the "Game Over" screen, ending current game ...
This is in fact NOT a bug as the main routine checks an ingame counter which value is based on the status of joysticks and buttons of the 2 players ... Here is what the main routine does with some comments for those who aren't familiar with the M68000 assembly language and/or the taito_h.c driver :
1) Reading inputs
[code]
0015BC: 1B79 0020 0005 0528 move.b $200005.l, ($528,A5) joysticks
0015C4: 1B79 0020 0009 0529 move.b $200009.l, ($529,A5)
0015CC: 1B79 0020 0007 052C move.b $200007.l, ($52c,A5) buttons
0015D4: 1B79 0020 000F 052A move.b $20000f.l, ($52a,A5)
0015DC: 4E75 rts
[/code]
2) Filling memory with status of each controls
[code]
Buttons :
0015F0: 4240 clr.w D0
0015F2: 102D 052A move.b ($52a,A5), D0
0015F6: 322D 052E move.w ($52e,A5), D1
0015FA: 3B40 052E move.w D0, ($52e,A5)
0015FE: 4640 not.w D0
001600: 4641 not.w D1
001602: 163C 0000 move.b #$0, D3 bit 0 = player 1 button 1
001606: 41ED 0534 lea ($534,A5), A0
00160A: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001610: 163C 0001 move.b #$1, D3 bit 1 = player 1 button 2
001614: 41ED 0536 lea ($536,A5), A0
001618: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00161E: 163C 0002 move.b #$2, D3 bit 2 = player 2 button 1
001622: 41ED 0538 lea ($538,A5), A0
001626: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00162C: 163C 0003 move.b #$3, D3 bit 3 = player 2 button 2
001630: 41ED 053A lea ($53a,A5), A0
001634: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
Joysticks :
00163A: 4240 clr.w D0
00163C: 102D 052C move.b ($52c,A5), D0
001640: 322D 0532 move.w ($532,A5), D1
001644: 3B40 0532 move.w D0, ($532,A5)
001648: 4640 not.w D0
00164A: 4641 not.w D1
00164C: 163C 0000 move.b #$0, D3 bit 0 = player 1 up
001650: 41ED 053C lea ($53c,A5), A0
001654: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00165A: 163C 0001 move.b #$1, D3 bit 1 = player 1 down
00165E: 41ED 053E lea ($53e,A5), A0
001662: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001668: 163C 0002 move.b #$2, D3 bit 2 = player 1 left
00166C: 41ED 0540 lea ($540,A5), A0
001670: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001676: 163C 0003 move.b #$3, D3 bit 3 = player 1 right
00167A: 41ED 0542 lea ($542,A5), A0
00167E: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001684: 163C 0004 move.b #$4, D3 bit 4 = player 2 up
001688: 41ED 0544 lea ($544,A5), A0
00168C: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001692: 163C 0005 move.b #$5, D3 bit 5 = player 2 down
001696: 41ED 0546 lea ($546,A5), A0
00169A: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
0016A0: 163C 0006 move.b #$6, D3 bit 6 = player 2 left
0016A4: 41ED 0548 lea ($548,A5), A0
0016A8: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
0016AE: 163C 0007 move.b #$7, D3 bit 7 = player 2 right
0016B2: 41ED 054A lea ($54a,A5), A0
0016B6: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
[/code]
"Fill" sub-routine :
[code]
001AF0: 48E7 C000 movem.l D0-D1, -(A7)
001AF4: 4242 clr.w D2 reset value
001AF6: 0701 btst D3, D1
001AF8: 6704 beq $1afe
001AFA: 0642 0001 addi.w #$1, D2 activated -> value += 1
001AFE: 0700 btst D3, D0
001B00: 6604 bne $1b06
001B02: 0642 0002 addi.w #$2, D2 not activated -> value += 2
001B06: 3082 move.w D2, (A0) store value
001B08: 4CDF 0003 movem.l (A7)+, D0-D1
001B0C: 4E75 rts
[/code]
This means that when a control is activated, you'll have 0x0001 in memory, and when it isn't activated, you'll have 0x0002 in memory ...
3) Checking status of each controls
[code]
0013A8: 4A2D 1207 tst.b ($1207,A5) 0x00 in "demo mode" else number of players
0013AC: 6700 0092 beq $1440 if "demo mode" go to Reset_Counter
0013B0: 4A2D 1899 tst.b ($1899,A5)
0013B4: 6600 008A bne $1440
0013B8: 4A2D 0523 tst.b ($523,A5)
0013BC: 6600 0082 bne $1440
0013C0: 0C6D 0002 0534 cmpi.w #$2, ($534,A5) check status of player 1 button 1
0013C6: 6600 0078 bne $1440 if activated go to Reset_Counter
0013CA: 0C6D 0002 0538 cmpi.w #$2, ($538,A5) check status of player 1 button 2
0013D0: 6600 006E bne $1440 if activated go to Reset_Counter
0013D4: 0C6D 0002 0536 cmpi.w #$2, ($536,A5) check status of player 2 button 1
0013DA: 6600 0064 bne $1440 if activated go to Reset_Counter
0013DE: 0C6D 0002 053A cmpi.w #$2, ($53a,A5) check status of player 2 button 2
0013E4: 6600 005A bne $1440 if activated go to Reset_Counter
0013E8: 0C6D 0002 0540 cmpi.w #$2, ($540,A5) check status of player 1 up
0013EE: 6600 0050 bne $1440 if activated go to Reset_Counter
0013F2: 0C6D 0002 0542 cmpi.w #$2, ($542,A5) check status of player 1 down
0013F8: 6600 0046 bne $1440 if activated go to Reset_Counter
0013FC: 0C6D 0002 053C cmpi.w #$2, ($53c,A5) check status of player 1 left
001402: 6600 003C bne $1440 if activated go to Reset_Counter
001406: 0C6D 0002 053E cmpi.w #$2, ($53e,A5) check status of player 1 right
00140C: 6600 0032 bne $1440 if activated go to Reset_Counter
001410: 0C6D 0002 0548 cmpi.w #$2, ($548,A5) check status of player 2 up
001416: 6600 0028 bne $1440 if activated go to Reset_Counter
00141A: 0C6D 0002 054A cmpi.w #$2, ($54a,A5) check status of player 2 down
001420: 6600 001E bne $1440 if activated go to Reset_Counter
001424: 0C6D 0002 0544 cmpi.w #$2, ($544,A5) check status of player 2 left
00142A: 6600 0014 bne $1440 if activated go to Reset_Counter
00142E: 0C6D 0002 0546 cmpi.w #$2, ($546,A5) check status of player 2 right
001434: 6600 000A bne $1440 if activated go to Reset_Counter
001438: 066D 0001 0524 addi.w #$1, ($524,A5) no controls activated, so increase counter
00143E: 4E75 rts
Reset_Counter:
001440: 426D 0524 clr.w ($524,A5) counter = 0
001444: 4E75 rts
[/code]
4) Checking counter
[code]
0012F6: 0C6D 1518 0524 cmpi.w #$1518, ($524,A5) check counter value
0012FC: 6214 bhi $1312 if > 0x1518, go to Game_Over
0012FE: 4A2D 0522 tst.b ($522,A5)
001302: 67E4 beq $12e8
001304: 4EB9 0000 1326 jsr $1326.l
00130A: 422D 0522 clr.b ($522,A5)
00130E: 6000 FF44 bra $1254 loop main routine
Game_Over :
001312: 4EB9 0000 1326 jsr $1326.l
001318: 422D 0522 clr.b ($522,A5)
00131C: 4EB9 0000 7598 jsr $7598.l call "Game Over" sub-routine
001322: 6000 FF30 bra $1254 loop main routine
[/code]
0x1518 = 5400 frames ... And as there are 60 frames per second, the game will call the "Game Over" routine after 5400 / 60 = 90 seconds of "inactivity" ... , D3 bit 0 = player 1 button 1
001606: 41ED 0534 lea (4,A5), A0
00160A: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
001610: 163C 0001 move.b #, D3 bit 1 = player 1 button 2
001614: 41ED 0536 lea (6,A5), A0
001618: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
00161E: 163C 0002 move.b #, D3 bit 2 = player 2 button 1
001622: 41ED 0538 lea (8,A5), A0
001626: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
00162C: 163C 0003 move.b #, D3 bit 3 = player 2 button 2
001630: 41ED 053A lea (a,A5), A0
001634: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
Joysticks :
00163A: 4240 clr.w D0
00163C: 102D 052C move.b (c,A5), D0
001640: 322D 0532 move.w (2,A5), D1
001644: 3B40 0532 move.w D0, (2,A5)
001648: 4640 not.w D0
00164A: 4641 not.w D1
00164C: 163C 0000 move.b #The game seems to call on some undetermined reasons the "Game Over" screen, ending current game ...
This is in fact NOT a bug as the main routine checks an ingame counter which value is based on the status of joysticks and buttons of the 2 players ... Here is what the main routine does with some comments for those who aren't familiar with the M68000 assembly language and/or the taito_h.c driver :
1) Reading inputs
[code]
0015BC: 1B79 0020 0005 0528 move.b $200005.l, ($528,A5) joysticks
0015C4: 1B79 0020 0009 0529 move.b $200009.l, ($529,A5)
0015CC: 1B79 0020 0007 052C move.b $200007.l, ($52c,A5) buttons
0015D4: 1B79 0020 000F 052A move.b $20000f.l, ($52a,A5)
0015DC: 4E75 rts
[/code]
2) Filling memory with status of each controls
[code]
Buttons :
0015F0: 4240 clr.w D0
0015F2: 102D 052A move.b ($52a,A5), D0
0015F6: 322D 052E move.w ($52e,A5), D1
0015FA: 3B40 052E move.w D0, ($52e,A5)
0015FE: 4640 not.w D0
001600: 4641 not.w D1
001602: 163C 0000 move.b #$0, D3 bit 0 = player 1 button 1
001606: 41ED 0534 lea ($534,A5), A0
00160A: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001610: 163C 0001 move.b #$1, D3 bit 1 = player 1 button 2
001614: 41ED 0536 lea ($536,A5), A0
001618: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00161E: 163C 0002 move.b #$2, D3 bit 2 = player 2 button 1
001622: 41ED 0538 lea ($538,A5), A0
001626: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00162C: 163C 0003 move.b #$3, D3 bit 3 = player 2 button 2
001630: 41ED 053A lea ($53a,A5), A0
001634: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
Joysticks :
00163A: 4240 clr.w D0
00163C: 102D 052C move.b ($52c,A5), D0
001640: 322D 0532 move.w ($532,A5), D1
001644: 3B40 0532 move.w D0, ($532,A5)
001648: 4640 not.w D0
00164A: 4641 not.w D1
00164C: 163C 0000 move.b #$0, D3 bit 0 = player 1 up
001650: 41ED 053C lea ($53c,A5), A0
001654: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
00165A: 163C 0001 move.b #$1, D3 bit 1 = player 1 down
00165E: 41ED 053E lea ($53e,A5), A0
001662: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001668: 163C 0002 move.b #$2, D3 bit 2 = player 1 left
00166C: 41ED 0540 lea ($540,A5), A0
001670: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001676: 163C 0003 move.b #$3, D3 bit 3 = player 1 right
00167A: 41ED 0542 lea ($542,A5), A0
00167E: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001684: 163C 0004 move.b #$4, D3 bit 4 = player 2 up
001688: 41ED 0544 lea ($544,A5), A0
00168C: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
001692: 163C 0005 move.b #$5, D3 bit 5 = player 2 down
001696: 41ED 0546 lea ($546,A5), A0
00169A: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
0016A0: 163C 0006 move.b #$6, D3 bit 6 = player 2 left
0016A4: 41ED 0548 lea ($548,A5), A0
0016A8: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
0016AE: 163C 0007 move.b #$7, D3 bit 7 = player 2 right
0016B2: 41ED 054A lea ($54a,A5), A0
0016B6: 4EB9 0000 1AF0 jsr $1af0.l call "fill" sub-routine
[/code]
"Fill" sub-routine :
[code]
001AF0: 48E7 C000 movem.l D0-D1, -(A7)
001AF4: 4242 clr.w D2 reset value
001AF6: 0701 btst D3, D1
001AF8: 6704 beq $1afe
001AFA: 0642 0001 addi.w #$1, D2 activated -> value += 1
001AFE: 0700 btst D3, D0
001B00: 6604 bne $1b06
001B02: 0642 0002 addi.w #$2, D2 not activated -> value += 2
001B06: 3082 move.w D2, (A0) store value
001B08: 4CDF 0003 movem.l (A7)+, D0-D1
001B0C: 4E75 rts
[/code]
This means that when a control is activated, you'll have 0x0001 in memory, and when it isn't activated, you'll have 0x0002 in memory ...
3) Checking status of each controls
[code]
0013A8: 4A2D 1207 tst.b ($1207,A5) 0x00 in "demo mode" else number of players
0013AC: 6700 0092 beq $1440 if "demo mode" go to Reset_Counter
0013B0: 4A2D 1899 tst.b ($1899,A5)
0013B4: 6600 008A bne $1440
0013B8: 4A2D 0523 tst.b ($523,A5)
0013BC: 6600 0082 bne $1440
0013C0: 0C6D 0002 0534 cmpi.w #$2, ($534,A5) check status of player 1 button 1
0013C6: 6600 0078 bne $1440 if activated go to Reset_Counter
0013CA: 0C6D 0002 0538 cmpi.w #$2, ($538,A5) check status of player 1 button 2
0013D0: 6600 006E bne $1440 if activated go to Reset_Counter
0013D4: 0C6D 0002 0536 cmpi.w #$2, ($536,A5) check status of player 2 button 1
0013DA: 6600 0064 bne $1440 if activated go to Reset_Counter
0013DE: 0C6D 0002 053A cmpi.w #$2, ($53a,A5) check status of player 2 button 2
0013E4: 6600 005A bne $1440 if activated go to Reset_Counter
0013E8: 0C6D 0002 0540 cmpi.w #$2, ($540,A5) check status of player 1 up
0013EE: 6600 0050 bne $1440 if activated go to Reset_Counter
0013F2: 0C6D 0002 0542 cmpi.w #$2, ($542,A5) check status of player 1 down
0013F8: 6600 0046 bne $1440 if activated go to Reset_Counter
0013FC: 0C6D 0002 053C cmpi.w #$2, ($53c,A5) check status of player 1 left
001402: 6600 003C bne $1440 if activated go to Reset_Counter
001406: 0C6D 0002 053E cmpi.w #$2, ($53e,A5) check status of player 1 right
00140C: 6600 0032 bne $1440 if activated go to Reset_Counter
001410: 0C6D 0002 0548 cmpi.w #$2, ($548,A5) check status of player 2 up
001416: 6600 0028 bne $1440 if activated go to Reset_Counter
00141A: 0C6D 0002 054A cmpi.w #$2, ($54a,A5) check status of player 2 down
001420: 6600 001E bne $1440 if activated go to Reset_Counter
001424: 0C6D 0002 0544 cmpi.w #$2, ($544,A5) check status of player 2 left
00142A: 6600 0014 bne $1440 if activated go to Reset_Counter
00142E: 0C6D 0002 0546 cmpi.w #$2, ($546,A5) check status of player 2 right
001434: 6600 000A bne $1440 if activated go to Reset_Counter
001438: 066D 0001 0524 addi.w #$1, ($524,A5) no controls activated, so increase counter
00143E: 4E75 rts
Reset_Counter:
001440: 426D 0524 clr.w ($524,A5) counter = 0
001444: 4E75 rts
[/code]
4) Checking counter
[code]
0012F6: 0C6D 1518 0524 cmpi.w #$1518, ($524,A5) check counter value
0012FC: 6214 bhi $1312 if > 0x1518, go to Game_Over
0012FE: 4A2D 0522 tst.b ($522,A5)
001302: 67E4 beq $12e8
001304: 4EB9 0000 1326 jsr $1326.l
00130A: 422D 0522 clr.b ($522,A5)
00130E: 6000 FF44 bra $1254 loop main routine
Game_Over :
001312: 4EB9 0000 1326 jsr $1326.l
001318: 422D 0522 clr.b ($522,A5)
00131C: 4EB9 0000 7598 jsr $7598.l call "Game Over" sub-routine
001322: 6000 FF30 bra $1254 loop main routine
[/code]
0x1518 = 5400 frames ... And as there are 60 frames per second, the game will call the "Game Over" routine after 5400 / 60 = 90 seconds of "inactivity" ... , D3 bit 0 = player 1 up
001650: 41ED 053C lea (c,A5), A0
001654: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
00165A: 163C 0001 move.b #, D3 bit 1 = player 1 down
00165E: 41ED 053E lea (e,A5), A0
001662: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
001668: 163C 0002 move.b #, D3 bit 2 = player 1 left
00166C: 41ED 0540 lea (0,A5), A0
001670: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
001676: 163C 0003 move.b #, D3 bit 3 = player 1 right
00167A: 41ED 0542 lea (2,A5), A0
00167E: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
001684: 163C 0004 move.b #, D3 bit 4 = player 2 up
001688: 41ED 0544 lea (4,A5), A0
00168C: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
001692: 163C 0005 move.b #, D3 bit 5 = player 2 down
001696: 41ED 0546 lea (6,A5), A0
00169A: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
0016A0: 163C 0006 move.b #, D3 bit 6 = player 2 left
0016A4: 41ED 0548 lea (8,A5), A0
0016A8: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
0016AE: 163C 0007 move.b #, D3 bit 7 = player 2 right
0016B2: 41ED 054A lea (a,A5), A0
0016B6: 4EB9 0000 1AF0 jsr af0.l call "fill" sub-routine
[/code]
"Fill" sub-routine :
[code]
001AF0: 48E7 C000 movem.l D0-D1, -(A7)
001AF4: 4242 clr.w D2 reset value
001AF6: 0701 btst D3, D1
001AF8: 6704 beq afe
001AFA: 0642 0001 addi.w #, D2 activated -> value += 1
001AFE: 0700 btst D3, D0
001B00: 6604 bne b06
001B02: 0642 0002 addi.w #, D2 not activated -> value += 2
001B06: 3082 move.w D2, (A0) store value
001B08: 4CDF 0003 movem.l (A7)+, D0-D1
001B0C: 4E75 rts
[/code]
This means that when a control is activated, you'll have 0x0001 in memory, and when it isn't activated, you'll have 0x0002 in memory ...
3) Checking status of each controls
[code]
0013A8: 4A2D 1207 tst.b (07,A5) 0x00 in "demo mode" else number of players
0013AC: 6700 0092 beq 40 if "demo mode" go to Reset_Counter
0013B0: 4A2D 1899 tst.b (99,A5)
0013B4: 6600 008A bne 40
0013B8: 4A2D 0523 tst.b (3,A5)
0013BC: 6600 0082 bne 40
0013C0: 0C6D 0002 0534 cmpi.w #, (4,A5) check status of player 1 button 1
0013C6: 6600 0078 bne 40 if activated go to Reset_Counter
0013CA: 0C6D 0002 0538 cmpi.w #, (8,A5) check status of player 1 button 2
0013D0: 6600 006E bne 40 if activated go to Reset_Counter
0013D4: 0C6D 0002 0536 cmpi.w #, (6,A5) check status of player 2 button 1
0013DA: 6600 0064 bne 40 if activated go to Reset_Counter
0013DE: 0C6D 0002 053A cmpi.w #, (a,A5) check status of player 2 button 2
0013E4: 6600 005A bne 40 if activated go to Reset_Counter
0013E8: 0C6D 0002 0540 cmpi.w #, (0,A5) check status of player 1 up
0013EE: 6600 0050 bne 40 if activated go to Reset_Counter
0013F2: 0C6D 0002 0542 cmpi.w #, (2,A5) check status of player 1 down
0013F8: 6600 0046 bne 40 if activated go to Reset_Counter
0013FC: 0C6D 0002 053C cmpi.w #, (c,A5) check status of player 1 left
001402: 6600 003C bne 40 if activated go to Reset_Counter
001406: 0C6D 0002 053E cmpi.w #, (e,A5) check status of player 1 right
00140C: 6600 0032 bne 40 if activated go to Reset_Counter
001410: 0C6D 0002 0548 cmpi.w #, (8,A5) check status of player 2 up
001416: 6600 0028 bne 40 if activated go to Reset_Counter
00141A: 0C6D 0002 054A cmpi.w #, (a,A5) check status of player 2 down
001420: 6600 001E bne 40 if activated go to Reset_Counter
001424: 0C6D 0002 0544 cmpi.w #, (4,A5) check status of player 2 left
00142A: 6600 0014 bne 40 if activated go to Reset_Counter
00142E: 0C6D 0002 0546 cmpi.w #, (6,A5) check status of player 2 right
001434: 6600 000A bne 40 if activated go to Reset_Counter
001438: 066D 0001 0524 addi.w #, (4,A5) no controls activated, so increase counter
00143E: 4E75 rts
Reset_Counter:
001440: 426D 0524 clr.w (4,A5) counter = 0
001444: 4E75 rts
[/code]
4) Checking counter
[code]
0012F6: 0C6D 1518 0524 cmpi.w #18, (4,A5) check counter value
0012FC: 6214 bhi 12 if > 0x1518, go to Game_Over
0012FE: 4A2D 0522 tst.b (2,A5)
001302: 67E4 beq e8
001304: 4EB9 0000 1326 jsr 26.l
00130A: 422D 0522 clr.b (2,A5)
00130E: 6000 FF44 bra 54 loop main routine
Game_Over :
001312: 4EB9 0000 1326 jsr 26.l
001318: 422D 0522 clr.b (2,A5)
00131C: 4EB9 0000 7598 jsr 98.l call "Game Over" sub-routine
001322: 6000 FF30 bra 54 loop main routine
[/code]
0x1518 = 5400 frames ... And as there are 60 frames per second, the game will call the "Game Over" routine after 5400 / 60 = 90 seconds of "inactivity" ... |