The Cutting Room Floor now has a Patreon page. Thanks for all your support!

If you've blocked our ad, please consider unblocking it.
We promise it isn't annoying. No flash, no sound, ever.

Ads by Project Wonderful! Your ad here, right now: $0

Rise of the Robots (SNES)

From The Cutting Room Floor
Jump to: navigation, search

Title Screen

Rise of the Robots

Developer: Mirage
Publisher: Time Warner Interactive
Platform: SNES
Released in US: November 1994
Released in EU: November 1994


SourceIcon.png This game has uncompiled source code.


ProtoIcon.png This game has a prototype article

Hmmm...
To do:
There might be something hidden in the RNC-compressed data here.

Rise of the Robots was perhaps one of the most over-hyped titles of the 16-bit era, which is saying something. The game itself had excellent prerendered graphics and this version contains a nice soundtrack, but the gameplay was considered bad, if not downright awful, by almost everyone who played at the time. However, it still got loads of praise from magazines who rushed their reviews so they could come out before the game did, causing several readers to highly distrust printed sources. Not even a brief guitar riff from Queen's Brian May could save this game.

Source Code Fragments

In the European version, there are fragments of code hidden throughout the ROM

1FFB5:

lda	#$00

		ldx	#16
!0
		jsr	wait_frame
		sta	|w_inidisp
		inc	a

25C667:

(sh)ow_text
		lda	>win_msg_table+2,x
		sta	results_win+window_text+2
		
!loop2:		jsr	wait_frame

		ldy	#results_win
		jsr	window_process

		lda	results_win+window_text
		ora	results_win+window_text+2
		bne	!loop2
		
		rts

print_gmess:	jsr	gfx_mess
		jsr	check_gfx_mess
		jsr	wait_frame

		rts

		if	cine
cine_list:	dl	wn_cb_mc

		dl	fly_mc

		dl	cn_ld_mc
		dl	ds_ld_mc

		dl	wn_cb_mc
		dl	cn_ap_mc
		dl	ds_ap_mc

		dl	wn_cb_mc
		dl	cn_cr_mc
		dl	ds_cr_mc

		dl	wn_cb_mc
		dl	cn_ml_mc
		dl	ds_ml_mc

		dl	wn_cb_mc
		dl	cn_jp_mc
		dl	ds_jp_mc

		dl	wn_cb_mc
		dl	cn_sp_mc
		dl	ds_sp_mc
		dl	0
		endif


end_sequence:
		if	en_sound!rom
		jsr	play_brian
		endif

		jsr	clr_palette_2
		lda	#0
		ldx	#256
		jsr	fade_it
		stz	flash_palette
		stz	flash_colour
		jsr	clr_pal_buff
		jsr	death_hdma_on

		jsr	clear_screen

		ldx	#10
		jsr	delay
		jsr	wait_frame


		jsr	screen_off
		stz	nrg_dsp_flg
		stz	split_mode

		lda	#29
		a08
		sta	w_bg1hofs
		xba
		sta	w_bg1hofs
		lda	#$03
		sta	|w_tm
		lda	#(sc_1b_scrn/2)>>8
		sta	w_bg1sc
		lda	#(sc_2c_scrn/2)>>8
		sta	w_bg2sc
		a16
		jsr	screen_on

		lea	window2_table,<a0
		jsr	init_windows

		lea	font_dat,<a0
		jsr	init_window_text

		lea	wind_mission,<a0
		ldy	#window_1
		jsr	create_window

		lea	mission_info,window_1+window_nexttext

		jsr	wait_log_finish

		stz	play_time

		if	en_which_logo<>1
		jsr	replay_up
		endif

		if	cine


win_cine_r:	lea	cine_list,cine_list_ptr
		
win_cine:	lda	cine_list_ptr
		ldx	cine_list_ptr+2
		sta	a0
		stx	a0+2
		ldy	#2
		lda	[a0]
		ora	[a0],y
		beq	win_cine_r

		lda	[a0]
		sta	cine_add
		lda	[a0],y
		sta	cine_add+2

		lda	cine_list_ptr
		clc
		adc	#4
		sta	cine_list_ptr

		lda	[cine_add]
		sta	cine_size

		inc	cine_add
		inc	cine_add

		ldx	#$200
		stx	charc_set
		stz	cine_count
		
		lda	#112
		sta	cine_pal_size

		lea	unpack_b1,<a1

win_loop:
		lda	cine_count
		cmp	cine_size
		bcs	end_win

		lda	[cine_add]
		tax
		inc	cine_add
		inc	cine_add
		lda	[cine_add]
		inc	cine_add
		inc	cine_add

		stx	a0
		sta	a0+2

		lda	#sc_1b_scrn/2+7*32+8+3
		sta	d0

		jsr	cine_frame

		jsr	wait_frame

		ldy	#window_1
		jsr	window_process
    
		inc	play_time

		inc	cine_count
		jmp	win_loop

end_win:

		jsr	clr_palette_2
		lda	#16
		ldx	#112
		jsr	fade_it

		lda	#sc_1b_scrn/2+6*32
		sta	blit_dest
		lda	#12*32
		sta	blit_lenth
		jsr	clear_ppu

		jmp	win_cine

		endif

!wloop:		jsr	wait_frame
		bra	!wloop

;************************************************************************************
;*
;* Game Message Process
;*
game_mess_process:
		lda	bouts_total
		cmp	bouts_selected
		beq	!no_final
		cmp	bout_number
		bne	!no_final
		lda	#0
		bra	!final
!no_final:	lda	bout_number
!final:		asl
		tax
		lda	>round_table,x
		ldx	#$40
		jsr	gfx_mess
		jsr	check_gfx_mess
		jsr	wait_frame

		jsr	game_mess
		lda	>rest_after_mess
		sta	rest

		jmp	game_loop_end


;************************************************************************************************
;*
;* Bout over process
;*

bout_over_process:
;		jsr	clear_top

		jsr	print_results

		jsr	bout_over_mess
no_game_mess:
		jsr	fade_screen_off
		jsr	screen_off
		jsr	hdma_off

		jsr	clear_sprites

		jsr	clear_screen

;****************************************************************************
;** Check here for replay
;**

		ldx	winner_amp
		bne	!player_won
;Last game was a draw
		lda	bout_number
		cmp	bouts_total
		bra	!not_next_opponent
!player_won:		
		lda	robot_won,x
		cmp	bouts_toplay
		bcc	!not_next_opponent

		ldx	mission
		dex
		bne	!new_select
		lda	dead_type
		beq	!dead
		ldx	players
		dex
		bne	!dead
		lda	#robot_sup
		cmp	robot_opponent
		bne	!next_robot
		jmp	!new_robot
!next_robot:
		inc	robot_opponent
		jmp	!new_robot
!not_next_opponent:
		jmp	!new_bout
!dead:
		jmp	!new_game

!new_robot:	lda	#gs_new_robot
		sta	game_state
		jmp	game_loop_end

!new_bout:	lda	#gs_new_bout
		sta	game_state
		jmp	game_loop_end

!new_game:	lda	#gs_new_game
		sta	game_state
		jmp	game_loop_end

!new_select:	lda	#gs_new_select
		sta	game_state
		jmp	game_loop_end


;************************************************************************************
;*
;* Game over process
;*

;****************************************************
;* Print results

;RESULT (overall)=0 for 
game_over_process:

		stz	result			;default to draw

		jsr	print_results		;print the result of last bout

		teletype results_win,finalr_msg

		lda	robot_2+robot_won	;see who won overall
		cmp	robot_1+robot_won	;If there is a winner bypass draw
		bne	!not_draw

;******************************** OVERALL DRAW **********************************

		teletype results_win,draw_msg

		jsr	game_end_mess		;fade to red etc.

		lda	#gs_new_game		;go play new game
		sta	game_state
		jmp	game_loop_end

;********************************************************************************

!not_draw:	ldy	robot_2+robot_type		;decide who is the winner
		lda	#0
		ldx	robot_1+robot_won
		cpx	robot_2+robot_won
		bcs	!r0_win				;bypass if it is cyborg

		ldy	#0
		lda	robot_2+robot_type		;else get type of oppponent
		bra	!opp_win
!r0_win:
		ldx	#1				;cyborg win result
		stx	result
		bra	!cont_win
!opp_win:
		ldx	#2				;opponent win
		stx	result
!cont_win:
		sty	dead_type			;who is dead

		asl
		asl
		tax
		lda	>winv_msg_table,x
		sta	results_win+window_text
		lda	>winv_msg_table+2,x
		sta	results_win+window_text+2
!loop3:		jsr	wait_frame
		ldy	#results_win
		jsr	window_process
		lda	results_win+window_text+2
		ora	results_win+window_text
		bne	!loop3

		

		ldx	mission				;decide on conditions to display GAME OVER
		dex
		bne	!no_game_over			;Not if TRAINING

		ldx	players				;Not if 2 Player
		dex
		bne	!no_game_over

		lda	result				;Not if Cyborg win
		cmp	#1
		beq	!no_game_over

		teletype results_win,gameover_msg		;print GAME OVER

!no_game_over:
		jsr	game_end_mess			;Fade to red print message
		jsr	dead_frame			;Death cinematic

		lda	result
		cmp	#1				;Cyborg victory
		beq	victory
;
;************************ Overall result draw or lose ***********************************
;

		ldx	mission			;if die on mission go back to intro screen
		dex				;else go back to select screen
		bne	!ns

		ldx	players
		dex
		bne	!ns

!ng:		lda	#gs_new_game
		sta	game_state
		jmp	game_loop_end
!ns:
		lda	#gs_new_select
		sta	game_state
		jmp	game_loop_end

;************************ Cyborg Victory *************************************************
victory:

		ldx	players			;2 Players - so select
		dex
		bne	!new_select

		ldx	mission			;Training - so new game
		dex
		bne	!new_select

		lda	robot_2+robot_type
		cmp	#robot_sup
		bne	!new_robot

;************************************************************************************
;
; M I S S I O N   C O M P L E T E   hurray , the end of the game
;
		jsr	end_sequence		;Victory

		lda	#gs_complete
		sta	game_state
		jmp	game_loop_end

!new_robot:
		inc	robot_opponent
		lda	#gs_new_robot
		sta	game_state
		jmp	game_loop_end

!new_game:
		lda	#gs_new_game
		sta	game_state
		jmp	game_loop_end

!new_select:
		lda	#gs_new_select
		sta	game_state
		jmp	game_loop_end

;************************************************************************************



set_scroll:	jsr	wait_frame
		lda	scroll_pos
		a08
		sta	|w_bg2vofs
		xba
		sta	|w_bg2vofs
		a16
		rts

init_new_robot:
		jsr	hdma_off
		lda	#1
		sta	tele_flag

		lda	#1
		sta	split_mode

		jsr	wait_frame
		jsr	clear_screen

		jsr	screen_off

		lda	#$0000
		sta	robot_2+robot_score

		stz	robot_1+robot_won
		stz	robot_2+robot_won

		lda	#1
		sta	bout_number
		lda	demo_mode
		bne	no_select
!sel_again:	jsr	select_screen
		lda	cancel_sel
		bne	!sel_again

no_select:	jsr	hdma_off
		jsr	wait_frame

		lda	players
		sta	players_g
		lda	bouts
		sta	bouts_g	
		lda	timer
		sta	timer_g

		lda	difficulty
		sta	difficulty_g

		lda	demo_mode
		beq	!no_demo


		lda	#0
		sta	players_g
		lda	#1
		sta	bouts_g
		lda	#4
		sta	timer_g
		lda	#2
		sta	difficulty_g
!no_demo:

		lda	bouts_g
		dec	a
		asl
		tax
		lda	>bouts_table,x
		sta	bouts_total
		sta	bouts_selected
		lsr
		inc	a
		sta	bouts_toplay
		rts
init_bout:
		jsr	hdma_off

		jsr	clear_screen
		jsr	clear_sprites
		jsr	init_sprites
		jsr	init_robots
		jsr	init_background
		jsr	init_vars

		jsr	inipix

		jsr	init_energy

		jsr	init_schedule



		jsr	wait_frame
		jsr	wait_frame
		jsr	wait_frame

		lda	#sc_2n_scrn/2
		sta	wind_screen

		lea	window_table,<a0
		jsr	init_windows
		lea	font_dat,<a0
		jsr	init_window_text

		lea	robot1_window,<a0
		ldy	#window_1
		jsr	create_window

		lea	robot2_window,<a0
		ldy	#window_2
		jsr	create_window

;		jsr	players_won

		jsr	hdma_off
		jsr	para_init

		jsr	hdma_on

		jsr	fade_screen_on
		jsr	screen_on

		jsr	setup_collisions

		lda	#%01010010
		sta	m_cgadsub
		lda	#%10000010
		sta	m_cgswsel

		a08
		lda	timer_value
		sta	timer_count
		ldx	timer_g
		dex
		lda	>timer_table,x
		sta	timer_count+1
		a16
		lda	>timer_table,x
		and	#$ff
		sta	timer_mode
		lda	#2
		sta	game_mode
		lda	#10
		sta	num_frames

		if	en_sound!rom
		lda	robot_opponent
		asl
		asl
		tax
		lda	>robot_table,x
		sta	a2
		lda	>robot_table+2,x
		sta	a2+2
		ldy	#ri_music
		lda	[a2],y
		jsr	play_tune
		endif

		jsr	wait_frame
		a08
		lda	#%01010000
		sta	|w_cgadsub
		lda	#%10000010
		sta	|w_cgswsel
		a16

		lda	#2
		sta	spr_blit_flag
		stz	shake
		lda	#4
		sta	sprite_blit_count

		stz	result

		lda	>rest_before_mess
		sta	rest


		stz	time_over_flag
		rts


init_sprite_blit:
		stz	blit_oam
		lda	#0
		ldx	#4*8/2
		ldy	#0

!lp:		sta	blit_tables,y
		iny
		iny
		dex
		bne	!lp

		rts

;***************************************************************************************
;*
;* Pause
Pause_It:
		lda	game_mode
		bne	!exit

		lda	#but_start
		bit	|joy_0
		bne	!start_it
		ldx	players
		dex
		beq	!exit
		bit	|joy_1
		bne	!start_it
		bra	!exit
!start_it:
		jsr	sprite_log_blit

		lda	#Pause_table&$ffff
		ldx	#$2
		jsr	gfx_mess
		jsr	check_gfx_mess

		lda	#but_start
		jsr	wait_button_down_up

		lda	#but_start
		jsr	wait_button_down_up

!exit:
		rts



wait_button_down_up:
		tax
!s0		jsr	wait_frame
		txa
		ldy	players
		dey
		beq	!p11
		bit	|joy_1
		bne	!s1
!p11:		bit	|joy_0
		beq	!s0

!s1:		jsr	wait_frame
		txa
		ldy	players
		dey
		beq	!p12
		bit	|joy_1
		bne	!s1
!p12:		bit	|joy_0
		bne	!s1

		rts


wbdu:
		tax
!s0
		lda	|frame_count
!s0a:		cmp	|frame_count
		beq	!s0a
		txa
		bit	|joy_0
		bne	!s1
		bit	|joy_1
		beq	!s0

!s1:
		lda	|frame_count
!s1a:		cmp	|frame_count
		beq	!s1a
		txa
		bit	|joy_0
		bne	!s1
		bit	|joy_1
		bne	!s1

		rts

make_joystick_config
		ldx	#j_config_1
		ldy	#0

!loop:		lda	0,x
		sta	j_config,y
		inx
		inx
		iny
		iny
		cpy	#12
		bcc	!loop

		rts

delay:
!wl:		jsr	wait_frame
		dex
		bne	!wl

		rts


gfx_mess_delay:
!wl:		phx
		jsr	wait_frame
		jsr	clear_sprite_buf
		jsr	csp
		jsr	check_gfx_mess
		jsr	sprite_log_blit
		plx
		dex
		bne	!wl

		rts

sect_2_exit:
		jsr	fade_screen_off
		jsr	vbl_vect_off

		jsr	screen_off
		jsr	hdma_off

		jsr	clear_sprites


!loop		jmp	!loop



which_logo:
		if	en_which_logo!rom
		jml	(logo_vect)
		endif
		rtl


check_timer_out:
		lda	timer_mode
		beq	cto_exit
		lda	game_mode
		bne	cto_exit
		lda	timer_count
		cmp	#2
		bcs	cto_exit
		stz	timer_count
		ldy	#robot_1
		lda	robot_1+robot_energylost
		cmp	robot_2+robot_energylost
		bcs	kill_game
		ldy	#robot_2
kill_game:
		lda	#1
		sta	time_over_flag
		jsr	end_bout
cto_exit:
		rts


game_end_mess:
		if	en_sound!rom
		jsr	fade_tune
		endif

		lda	#2000
		sta	|spr_blit_flag
		stz	nrg_dsp_flg
		jsr	wait_frame
		jsr	wait_frame

		lea	palette_str,<a0
		lda	#0
		ldx	#256
		jsr	copy_palette_2
		
		ldx	#256-16
		ldy	#16*2
!lp:		lda	palette_str2,y
		and	#%0000000000011111
		sta	palette_str2,y
		iny
		iny
		dex
		bne	!lp

		lda	#16
		ldx	#256-16-16-16
		jsr	fade_it

		jsr	wait_frame
		ldy	#window_1
		jsr	create_window_matrix
		jsr	wait_frame
		ldy	#window_2
		jsr	create_window_matrix
		stz	nrg_dsp_flg

!loop1:		jsr	wait_frame

		ldy	#window_1
		jsr	window_process

		ldy	#window_2
		jsr	window_process

		lda	window_1+window_text
		ora	window_1+window_text+2
		ora	window_2+window_text
		ora	window_2+window_text+2

		bne	!loop1

		stz	game_mode

		lda	#4
		sta	game_mode
		lda	#1
		sta	num_frames

		rts


bout_over_mess:

		ldy	#window_1
		jsr	create_window_matrix
		jsr	wait_frame
		ldy	#window_2
		jsr	create_window_matrix
		stz	nrg_dsp_flg

!loop1:		jsr	wait_frame

		ldy	#window_1
		jsr	window_process

		ldy	#window_2
		jsr	window_process

		lda	window_1+window_text
		ora	window_1+window_text+2
		ora	window_2+window_text
		ora	window_2+window_text+2

		bne	!loop1

		lda	#100
		lda	#end_time
		sta	num_frames

		rts



game_mess:

!loop1:		jsr	wait_frame

		ldy	#window_1
		jsr	window_process

		ldy	#window_2
		jsr	window_process

		lda	window_1+window_text
		ora	window_1+window_text+2
		ora	window_2+window_text
		ora	window_2+window_text+2

		bne	!loop1

		lda	#r0a&$ffff
		sta	window_1+window_text
		lda	#r0a>>16
		sta	window_1+window_text+2
		lda	robot_opponent
		inc	a
		asl
		asl
		tax
		lda	>plrtab,x
		sta	window_2+window_text
		lda	>plrtab+2,x
		sta	window_2+window_text+2

		jsr	print_windows

		lda	#scr_1_mess&$ffff
		sta	window_1+window_text
		lda	#scr_1_mess>>16
		sta	window_1+window_text+2

		lda	#scr_2_mess&$ffff
		sta	window_2+window_text
		lda	#scr_2_mess>>16
		sta	window_2+window_text+2

		jsr	print_windows

		stz	game_mode
		lda	#-1
		sta	nrg_dsp_flg

!exit:
		jsr	players_won
		rts



print_windows:

!loop:		jsr	wait_frame

		ldy	#window_2
		jsr	window_process
		ldy	#window_1
		jsr	window_process

		lda	window_1+window_text
		ora	window_1+window_text+2
		ora	window_2+window_text
		ora	window_2+window_text+2

		bne	!loop
		rts

set_win_lose_text:
		phy
		phx
		tya
		ldy	#window_1
		ldx	#window_2
		cmp	#robot_1
		beq	!r1
		ldy	#window_2
		ldx	#window_1
!r1:
		lda	#player_matchlost&$ffff
		sta	window

2FF793:

		rts


schedule_process:
		lea	schedule,<a1
		ldx	#sch_len
		ldy	#0
!loop:		lda	[a1],y
		bne	!s1
		iny
		iny
		lda	[a1],y
		dey
		dey
		sta	[a1],y
		bra	!s2
!s1:		sec
		sbc	#1
		sta	[a1],y
!s2:		iny
		iny
		iny
		iny
		dex
		bne	!loop
		rts



init_robots:
;		if	en_sp1
		lea	robot_1,<a2
		lda	#Robot_Cyb

		ldx	#2

		jsr	irs
;		endif

;		if	en_sp2
		lea	robot_2,<a2
		lda	robot_opponent

		ldx	difficulty_g

		jsr	irs


;		endif


		ldx	players_g
		bne	!n1
		lda	robot_1+robot_flags
		ora	#1<<Bit_CPU
		sta	robot_1+robot_flags
!n1:
		cpx	#2
		beq	!n2
		lda	robot_2+robot_flags
		ora	#1<<Bit_CPU
		sta	robot_2+robot_flags
!n2:
		rts

init_background:

		if	en_back
		
		lda	robot_2+robot_type
		sta	d8

		lda	#2
		sta	charc_set
		lda	#32
		lda	#0
		clc
		adc	#sc_1n_scrn/2
		sta	d0
		lda	d8
		clc
;		adc	#1
		asl
		asl
		tax
		lda	>robot_table,x
		sta	a0
		sta	a4
		lda	>robot_table+2,x
		sta	a0+2
		sta	a4+2
		ldy	#ri_room
		lda	[a0],y
		tax
		iny
		iny
		lda	[a0],y
		stx	a0
		sta	a0+2
		stz	d8+2
		jsr	back_frame
		endif

		rts



irs:
;Profile index
		pha
		txa
		dec	a
		and	#3
		ldx	#7
		jsr	mult_xa
		clc
		adc	bout_number
		dec	a
		ldx	#6
		jsr	mult_xa
		sta	d4
		pla
		


		if	0
		pha

		ldx	#(robot_parm_size)/2
		lda	#0
		tay
!clp:
		sta	[a2],y
		iny
		iny
		dex
		bne	!clp

		pla	
		endif

		ldy	#robot_type
		sta	[a2],y
		asl
		asl
		tax
		lda	>robot_table,x
		sta	a6
		lda	>robot_table+2,x
		sta	a6+2
		ldy	#ri_gfx
		lda	[a6],y
		pha
		iny
		iny
		lda	[a6],y
		ldy	#robot_gfx+2
		sta	[a2],y
		dey
		dey
		pla
		sta	[a2],y

		ldx	a2
		cpx	#robot_1
		bne	p2_set
p1_set:
		lda	#sjoy0
		sta	robot_joyval,x
		ldy	#ri_xstartl
		lda	[a6],y
		sta	robot_x,x
		sta	robot_x_origin,x

		lda	#robot_2
		sta	robot_other,x
		lda	#0
		sta	robot_other+2,x

		lda	#rob_gbuff_1&$ffff
		sta	robot_graphics,x
		lda	#rob_gbuff_1>>16
		sta	robot_graphics+2,x

		lda	#0
		sta	robot_overdelay,x

		bra	set_ok
p2_set:
		lda	#sjoy1
		sta	robot_joyval,x
		ldy	#ri_xstartr
		lda	[a6],y


31F968:

***********************************
;

		ldx	mission			;if die on mission go back to intro screen
		dex				;else go back to select screen
		bne	!ns

		ldx	players
		dex
		bne	!ns

!ng:		lda	#gs_new_game
		sta	game_state
		jmp	game_loop_end
!ns:
		lda	#gs_new_select
		sta	game_state
		jmp	game_loop_end

;************************ Cyborg Victory *************************************************
victory:

		ldx	players			;2 Players - so select
		dex
		bne	!new_select

		ldx	mission			;Training - so new game
		dex
		bne	!new_select

		lda	robot_2+robot_type
		cmp	#robot_sup
		bne	!new_robot

;************************************************************************************
;
; M I S S I O N   C O M P L E T E   hurray , the end of the game
;
		jsr	end_sequence		;Victory

		lda	#gs_complete
		sta	game_state
		jmp	game_loop_end

!new_robot:
		inc	robot_opponent
		lda	#gs_new_robot
		sta	game_state
		jmp	game_loop_end

!new_game:
		lda	#gs_new_game
		sta	game_state
		jmp	game_loop_end

!new_select:
		lda	#gs_new_select
		sta	game_state
		jmp	game_loop_end

;************************************************************************************



set_scroll:	jsr	wait_frame
		lda	scroll_pos
		a08
		sta	|w_bg2vofs
		xba
		sta	|w_bg2vofs
		a16
		rts

init_new_robot:
		jsr	hdma_off
		lda	#1
		sta	tele_flag

		lda	#1
		sta	split_mode

		jsr	wait_frame
		jsr	clear_screen

		jsr	screen_off

		lda	#$0000
		sta	robot_2+robot_score

		stz	robot_1+robot_won
		stz	robot_2+robot_won

		lda	#1
		sta	bout_number
		lda	demo_mode
		bne	no_select
!sel_again:	jsr	select_screen
		lda	cancel_sel
		bne	!sel_again

no_select:	jsr	hdma_off
		jsr	wait_frame

		lda	players
		sta	players_g
		lda	bouts
		sta	bouts_g	
		lda	timer
		sta	timer_g

		lda	difficulty
		sta	difficulty_g

		lda	demo_mode
		beq	!no_demo


		lda	#0
		sta	play

32F8B2:

dec	d0		;any more shards to create ?
		beq	!exit		;end if not

!na:		lda	a4
		clc
		adc	#shard_parm_size
		sta	a4
		dec	d1
		beq	!exit
		jmp	!lp
!exit:
		rts

create_spark:
		lda	#no_sparks
		sta	d0

		ldx	#spark_buff
!spl:
		lda	spark_y,x
		bne	!not_clear

		lda	shard_coordx
		sta	spark_x,x

		lda	shard_coordy
		sta	spark_y,x

		stz	spark_frame,x

		rts
!not_clear:
		txa
		clc
		adc	#spark_parm_size
		tax
		dec	d0
		bne	!spl
		rts
		



vert_on:
		if	en_vert
		sei
		a08
		lda	#%10110001
		sta	|w_nmitimen

		a16

		lda	>htv
		sta	|w_htimel

		cli
		endif
		rts



np_set:
		ldx	#max_dma_p
		ldy	#50

		a08
		lda	r_stat78
		a16
		bit	#1<<4
		bne	!pal
		ldx	#max_dma_n
		ldy	#60
!pal:
		if	en_ntsc
		ldx	#max_dma_n
		ldy	#60
		endif

		stx	max_dma
		sty	timer_value
		rts


vert_off:
		if	en_vert
		jsr	wait_frame
		
		sei

		a08

		lda	#%10000001
		sta	|w_nmitimen

		a16

		cli
		endif
		rts


;0978 266333

debug:
		if	en_debug
		if	rom=0


		if	0
		pv	robot_2+robot_aioverride,0
		pv	robot_2+robot_aioverridemode,3
		pv	robot_2+robot_mode,6
		pv	robot_2+robot_int,9
		pv	robot_2+robot_motivation,12
		pv	robot_2+robot_speed,15
		pv	robot_2+robot_firepowerdelay,18
		pv	robot_2+robot_aitimer,21
		pv	robot_2+robot_aimoveaddr,24
		pv	robot_2+robot_aimoveaddr+2,27
		pv	robot_2+robot_aimoveaddr+4,30
		endif


		if	0
		pv	robot_2+robot_mode,0
		pv	robot_2+robot_frame,3
		pv	robot_2+robot_y,6
		pv	robot_2+robot_ymax,9
		endif


		if	1
		pv	robot_1+robot_frame,0
		pv	robot_2+robot_frame,3
		pw	cur_col_pos,6
		pw	cur_col_diff,11
		pw	cur_col_xy,16
		pw	cur_col_xy+2,21

		pv	robot_1+robot_cur_hit+2,26
		pv	robot_2+robot_cur_hit+2,29
		endif
		endif
		endif

		rts
reset_energy:
		ldy	a2
		lda	robot_type,y
		asl

34F39C:

straight to IPLROM

                 SET16
                 lda      #(MusicDriver&$ffff)      ;download driver (24 bit address)
                 sta      <SonyAddr
                 lda      #RamII
                 lda      #MusicDriver>>16
                 sta      <SonyAddr+2
                 jsr      SONY_send

		 CLR16
                 lda      #$82              ;DOWNLOAD data (music)
                 sta      >APU_PORT0
                 SET16
                 lda      mus_data
                 sta      <SonyAddr
                 lda      mus_data+2
                 sta      <SonyAddr+2
                 jsr      SONY_send

		 CLR16
                 lda      #$82              ;DOWNLOAD data (samples)
                 sta      >APU_PORT0
                 SET16
                 lda      samp_1
                 sta      <SonyAddr
                 lda      samp_1+2
                 sta      <SonyAddr+2
                 jsr      SONY_send

		 CLR16
                 lda      #$82              ;DOWNLOAD data (samples)
                 sta      >APU_PORT0
                 SET16
                 lda      samp_2
                 sta      <SonyAddr
                 lda      samp_2+2
                 sta      <SonyAddr+2
                 jsr      SONY_send

		 CLR16
                 sta      >APU_PORT3
                 plp                        ;restore any interrupts
		 SET16
                 rts


;-----------------------------------------------------------------------------
SONY_send:       jsr      Boot_APU
                 CLR16
!wait0:          lda      >APU_PORT0        ;wait for handshake
                 bne      !wait0
                 dec      a
                 sta      >APU_PORT2        ;acknowledge handshake
                 sta      <callnum          ;init call number to $FF
                 rts


;-------------------------------------------------------------------------------
; Once the Sound_Init routine has been called, the following routine can be
; used to download additional music data (or sample data with '#Musicdata'
; replaced by '#Samples') which is required for later levels of the game.
;-------------------------------------------------------------------------------

Send_Data:
		 stx	mus_data
		 sta	mus_data+2
send_mus_data:
	         CLR16
                 php
                 sei                        ;disable any other interrupts
S_D0:            lda      >APU_PORT0        ;latest value sent by SOUND CPU
                 cmp      <callnum
                 bne      S_D0              ;previous call still not finished

                 lda      #$82              ;DOWNLOAD data (music)
                 sta      >APU_PORT0
                 inc      <callnum
                 lda      <callnum
                 sta      >APU_PORT3        ;forces a new call
                 SET16
		 lda	  mus_data
                 sta      <SonyAddr
		 lda	  mus_data+2
                 sta      <SonyAddr+2
                 jsr      SONY_send

                 sta      >AP

35FA09:

_code:	incbin	abslogo.bin
		endif


dr


hctab:
hct		=	0
		rept	6
		dw	hct,hct+$10
hct		=	hct+$43
		endr

		endif

dtune_time:	dw	400
hit_scale:
		dw	$80

reverse_off:	db	$2f,$2f,$2f,$2f,$2f,$2f,$2f,$2f,$2f

power_table:
		dw	robot_min_power-2
		dw	robot_mid_power-2
		dw	robot_max_power-2


sel_ts:		dw	%00000000
sel_adsub	dw	%01010010
sel_swel	dw	%00010010

option_table:	dw	3,2,3,4,2,2,3


		if	en_sound!rom
music_table:	dl	music1,music1,music2,music3,music4,musict


(Source: Evilhamwizard)