If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Fighting Street/Uncompiled Source Code

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of Fighting Street.

Hmmm...
To do:
Get hex addresses and extract the rest. Also, fix up some of the fragments

Scattered throughout the disc are small bits of code. That said, it turns out there is a lot of code, possibly a result of the amount of disk space given to the game. The following bits of code are in the Japanese version of the game and can be found at the following addresses.

0x1800

r_m		equ	$222f
s_mode		equ	$2230
;
tnomin		equ	$2250
tnomax		equ	$2251
outmin		equ	$2252
outsec		equ	$2253
outfrm		equ	$2254
suberrc		equ	$225a
vdtin_flg	equ	$225d
int_flg		equ	$2284
ramend		equ	$2285
;
max_mapping	equ	$fff5


0x3000

;************************************************
;*	================================	*
;*	project	:ストリート・ファイター		*
;*	================================	*
;*	group	:MAIN				*
;*	file	:MAIN.S				*
;*	date	:S63/4				*
;*      coding	:Alfa HaHi/Takamine		*
;*						*
;************************************************
;===============================
;	include file
;===============================
	include 7UP.H
	include BIOSW.H
	include	CONST.H
	include	ID.H
;===============================
;	extrn declare
;===============================
	extrn	function_in	;WORK.S
	extrn	function_out	;WORK.S
	extrn	stage_no	;WORK.S
	extrn	hi_sel		;WORK.S
	;
	extrn	s_game2
	;
	extrn	readptr
	extrn	seekpos
	
	zextrn	a0,a1,len
	zextrn	sprite_ptr
;===============================
;	public declare
;===============================
	public	main_start
	public	read
	public	stage_id
	public	stage_spos
	public	load_stage
	public	set_seekpos
	public	sat_clear
;===============================


0xFCB0

========== ファイル ALL.BAT の行数 = 18
========== ファイル BACKUP.BAT の行数 = 5
BONUS2.BAT  4:  store =%BONUS2_ID%*0x20000 bonus2.bin
========== ファイル BONUS2.BAT の行数 = 7
CONT.BAT  4:  store =%CONT_ID%*0x20000 cont.bin
========== ファイル CONT.BAT の行数 = 7
========== ファイル CP.BAT の行数 = 12
FIGHT1.BAT  4:  store =%FIGHT1_ID%*0x20000 fight1.bin
========== ファイル FIGHT1.BAT の行数 = 7
FIGHT2.BAT  4:  store =%FIGHT2_ID%*0x20000 fight2.bin
========== ファイル FIGHT2.BAT の行数 = 7
FIGHT3.BAT  4:  store =%FIGHT3_ID%*0x20000 fight3.bin
========== ファイル FIGHT3.BAT の行数 = 7
========== ファイル FONT.BAT の行数 = 21
FONT1.BAT  1:  store =(%FONT_ID%+%2)*0x20000 %1.bin
========== ファイル FONT1.BAT の行数 = 1
GAME.BAT  4:  store =%GAME_ID%*0x20000 game.bin 
========== ファイル GAME.BAT の行数 = 7
HATA.BAT  4:  store =%HATA_ID%*0x20000 hata.bin
========== ファイル HATA.BAT の行数 = 7
========== ファイル ID.BAT の行数 = 19
MAP.BAT  4:  store =%MAP_ID%*0x20000 map.bin
========== ファイル MAP.BAT の行数 = 7
NAME.BAT  4:  store =%NAME_ID%*0x20000 name.bin
========== ファイル NAME.BAT の行数 = 7
OPEN.BAT  4:  store =%OPEN_ID%*0x20000 opendat.bin
OPEN.BAT  5:  store =%OPEN_ID%*0x20000 open.bin
========== ファイル OPEN.BAT の行数 = 8
========== ファイル PK.BAT の行数 = 1
RANK.BAT  4:  store =%RANK_ID%*0x20000 rank.bin
========== ファイル RANK.BAT の行数 = 7
RESET.BAT  4:  store =%RESET_ID%*0x20000 reset.bin 
========== ファイル RESET.BAT の行数 = 7
ROUND.BAT  4:  store =%ROUND_ID%*0x20000 round.bin
========== ファイル ROUND.BAT の行数 = 7
SEL.BAT  4:  store =%SEL_ID%*0x20000 sf.bin
SEL.BAT  5:  store =%SEL_ID%*0x20000 sel.bin 
========== ファイル SEL.BAT の行数 = 8
STAGE.BAT  4:  store =%STAG_ID%*0x20000 stage.bin 
========== ファイル STAGE.BAT の行数 = 7
========== ファイル TBL.BAT の行数 = 10
TBL1.BAT  7:  store =%STAG_ID%*0x20000+(0x10+%2*0x04)*0x800 %1tbl.bin
========== ファイル TBL1.BAT の行数 = 10
========== ファイル TEST.BAT の行数 = 42
========== ファイル TR.BAT の行数 = 12
TR1.BAT  14:  store	=%FIGHT1_ID%*0x20000+(0x20+%2*0x10)*0x800+0x6000 %1.bin
TR1.BAT  18:  store	=%FIGHT1_ID%*0x20000+0xe000 %1.bin
TR1.BAT  22:  store	=%FIGHT1_ID%*0x20000+0xf000 %1.bin
========== ファイル TR1.BAT の行数 = 25
VS.BAT  4:  store =%VS_ID%*0x20000 vs.bin
========== ファイル VS.BAT の行数 = 7
========== ファイル X.BAT の行数 = 1
MAIN.BAT  4:  rem store =%MAIN_ID%*0x20000 main.bin 
========== ファイル MAIN.BAT の行数 = 7
========== 該当ファイルの総行数 = 298


0x1066D

err:
		cla
		ldx	#32
		ldy	#30
		jsr	screen_mode
		lda	#1
		sec
		rts
;===========================================================================
;	Input	data
;		a <= 0<-5MHz		1<-7MHz
;		x <= ( 10 - 34 )	( 16 - 44 )	ps.not use odd data.
;		y <= ( 10 - 30 )	( 10 - 30 )
;	jsr	screen_mode	fast init
;	jsr	screen_set	init genzai no mode ni para is not use
;		if cf set then error
;===========================================================================
;
screen_mode:
		sta	s_mode
		and	#5
		sta	s_mode
		stx	s_mode+1
		sty	s_mode+2
screen_set:
		lda	s_mode+2
		cmp	#10
		bcc	screen_errpop
		cmp	#31
		bcs	screen_errpop
		lda	s_mode
		and	#1
		bne	screen_7M
screen_5M:
		lda	s_mode+1
		cmp	#10
		bcc	screen_err
		cmp	#35
		bcs	screen_err
		bsr	screen_yset
		reg	#10		;<HSR> setup
		st1	#2		;HSW <=2
		lda	s_mode+1
		tax
		dex			;x<=HDW
		lsr	a
		eor	#$ff
		clc
		adc	#$13
		sta	$0003		;hi7up<=HDS
		clc
		adc	s_mode+1
		eor	#$ff
		tay			;y<=-(HDS+HDW+2)
		reg	#11		;<HDR> setup
		stx	$0002		;low7up<=HDW
		tya
		clc
		adc	#$27
		sta	$0003		;hi7up<=HDE
		cla
		jsr	dot_mode
		cla
		rts
;
screen_7M:
		lda	s_mode+1
		cmp	#16
		bcc	screen_err
		cmp	#45
		bcs	screen_err
		bsr	screen_yset
		reg	#10		;<HSR> setup
		st1	#3		;HSW <=3
		lda	s_mode+1
		tax
		dex			;x<=HDW
		lsr	a
		eor	#$ff
		clc
		adc	#$19
		sta	$0003		;hi7up<=HDS
		clc
		adc	s_mode+1
		eor	#$ff
		tay			;y<=-(HDS+HDW+2)
		reg	#11		;<HDR> setup
		stx	$0002		;low7up<=HDW
		tya
		clc
		adc	#$35
		sta	$0003		;hi7up<=HDE
		lda	#10
		jsr	dot_mode
		cla
		rts
;
screen_yset:
		reg	#12		;VPR
		st1	#2		;VSW<=2
		lda	s_mode+2
		asl	a
		asl	a
		asl	a
		tax			;y<=VDW
		dex
		lsr	a
		eor	#$ff
		clc
		adc	#136
		sta	$0003		;hi7up<=VDS
		reg	#13		;VDR
		stx	$0002		;low7up<=low VDW
		st2	#0		;hi7up<=hi VDW
		reg	#14		;VCR
		txa
		inc	a
		inc	a
		lsr	a
		adc	#125
		sta	$0002		;low7up<=VCR
		st2	#0		;hi7up<=0
		lda	s_mode
		eor	#4
		sta	$400		;ctsr
		rts
;
;============================
;	set v line mode
;============================
vmode:
	smb3	crh_m
	lda	mwr_m
	and	#$30
	beq	mode_mid
	smb4	crh_m
	and	#1
	bne	hvmode
	rmb3	crh_m
	bra	hvmode
;
;============================
;	set v line mode
;============================
hmode:
	rmb3	crh_m
mode_mid:
	rmb4	crh_m
hvmode:
	reg	#5		;CR
	lda	crh_m
	sta	$0003		;hi7up
	rts
;
;===============
;wait for v_sync
;===============
vsync:
	cli
	bbs3	crl_m,vsyncj
	jsr	irqon
vsyncj:	lda	irq_cnt
vsyncw:	cmp	irq_cnt
	beq	vsyncw
	rts
;
;==========
;on rcr irq
;==========
rcron:
	smb2	crl_m		;rcr irq on
	bra	crset
;
;==========
;off rcr irq
;==========
rcroff:
	rmb2	crl_m		;rcr irq off
	bra	crset
;
;=========
;on v_sync
;=========
irqon:
	smb2	crl_m		;rcr irq on
	smb3	crl_m		;v-sync check (vc) on
	bra	crset
;
;=======================
;off v_sync & raster hit
;=======================
irqoff:
	rmb2	crl_m		;rcr irq off
	rmb3	crl_m		;v-sync check (vc) off
crset:	reg	#5		;CR
	lda	crl_m
	sta	$0002		;LOW7UP
	rts
;
;=====================
;display control
;effect in next v_sync
;=====================
bgon:
	smb7	crl_m
	rts
;
bgoff:	rmb7	crl_m
	rts
;
spron:	smb6	crl_m
	rts
;
sproff:	rmb6	crl_m
	rts
;
dspon:	smb6	crl_m			;spr on
	smb7	crl_m			;bg on
	rts
;
dspoff:	rmb6	crl_m			;spr off
	rmb7	crl_m			;bg off
	rts
;
;==========================================
;	DMA mode setup
;	a=DMA mode
;==========================================
dma_mode:
	and	#31
	sta	dcr_m
	reg	#15
	lda	dcr_m
	sta	$0002		;DCR
	rts
;
;==============================
;dma transfer sprite sat buffer
;==============================
sprdma:
	reg	#19		;DVSSR
	lda	sat_adr
	sta	$0002		;low7up
	lda	sat_adr+1
	sta	$0003		;hi7up
	jmp	vsync
;
;=======================================================================
;	joy card sens ( 5 players )
;				in	joyena
;				out	joytrg
;=======================================================================
joy_pad:	
	lda	#%0000_0001		; pad reset
	sta	$1000			;joyio
	lda	#%0000_0011
	sta	$1000			;joyio
;
	cly				; pad read ( 5 time )
joy_pad_loop1:
	lda	#%0000_0001
	sta	$1000			;joyio
	pha				; 1.24us delay
	$e3		;tia
	dw	$0404		;ctdt
;
;================
;clear sat buffer
;================
satclr:
	jsr	hmode
	reg	#0		;MAWR
	lda	sat_adr
	sta	$0002		;low7up
	lda	sat_adr+1
	sta	$0003		;hi7up
	reg	#2		;VWR
	clx
satclp:	st1	#0
	st2	#0
	dex
	bne	satclp
	rts
;
;==============================================
;
;	irq_m
;	7 6 5 4 3 2 1 0
;	| | | | | | | |
;	| | | | | | | +---irq2  jmp vector enb
;	| | | | | | +-----irq   jmp vector enb
;	| | | | | +-------timer jmp vector enb
;	| | | | +---------nmi   jmp vector enb
;	| | | +-----------if irq vectot off then sync jmp vector enb
;	| | +-------------nop sync irq
;	| +---------------if irq vectot off then rcr jmp vector enb
;	+-----------------nop rcr irq
;
;===============================================
;	irq handring nmi/irq/irq2/timer
;===============================================
;
;===============
;handler for irq
;===============
nmivec:
	bbs3	irq_m,nmi_go
	rti
nmi_go:
	jmp	[nmi_jmp]
;
;=====================
;handler for timer irq
;=====================
;
timvec:
	bbs2	irq_m,tim_go
	sta	$1403		;irqreg  tiq reset
	rti
;
tim_go:
	jmp	[tim_jmp]
;
;================
;handler for irq2
;================
;
irq2vc:
	bbs0	irq_m,irq2_go
	rti
;
irq2_go:
	jmp	[irq2_jmp]
;
;=================
;user program call
;=================
;
user_rcr:
	jmp	[rcr_jmp]
;
user_sync:
	jmp	[sync_jmp]
;
irq_go:
	jmp	[irq_jmp]
;
;===============
;handler for irq
;===============
;
irqvec:
	bbs1	irq_m,irq_go
	pha
	phx
	phy
	lda	$0000		;reg7up
	sta	str_b
	bbr5	str_b,irqh
;
;vsync
;
	st0	#5		;CR
	lda	crl_m
	sta	$0002		;LOW7UP
	lda	crh_m
	sta	$0003		;HI7UP
	inc	irq_cnt
	bbs5	irq_m,irqsn
	st0	#7		;BXR
	tii	bgx1,$0002,2	;$0002=low7up
	st0	#8		;BYR
	tii	bgy1,$0002,2	;$0002=low7up
	jsr	color_command	;color data trans
	jsr	joy_pad
irqsn:
	bbr4	irq_m,irqh
	jsr	user_sync
;
;hsync
;
irqh:
	bbr4	str_b,irqe
	bbs7	irq_m,irqhn
	st0	#7		;BXR
	tii	bgx2,$0002,2	;$0002=low7up
	st0	#8		;BYR
	tii	bgy2,$0002,2	;$0002=low7up
irqhn:
	bbr6	irq_m,irqe
	jsr	user_rcr
;
irqe:
	lda	reg_box
	sta	$0000		;REG7UP
	ply
	plx
	pla
	rti


11E21:


;-------------------------------
start:
	lea	readptr,main_start
	lea	seekpos,$0004
	lda	#02
	jsr	read_entry
	jmp	main_start
;///////////////////////////////
	endif
;
;*********************** end of PACK.S *********************************
;
 ointer is sprite_ptr ( 0-63 )
;--------------------------------------
SPRX_MAX	equ	320+32
SPRY_MAX	equ	$100+64
;
sat_set:
	lda	sprite_ptr
	cmp	#64
	bcs	satste
	;
	lda	sprx+1
	beq	sat_putx
	cmp	#high SPRX_MAX
	bne	satste
	lda	sprx
	cmp	#low SP


lea	readptr,$4000
	lda	#$20
	jmp	read
;-----------------------
load_fontdata:
	jsr	get_fontdata_loc
	;
	jsr	set_bank_3
	;
	cla
	jsr	set_seekpos_sub
	lea	readptr,$3700
	lda	#high($4000-$3700)
	jsr	read
	;
	lda	#2
	jsr	set_seekpos_sub
	lea	readptr,$4000
	lda	#$20
	jsr	read
	;
	jsr	set_bank_4567
	;
	lda	#$16
	jsr	set_seekpos_sub
	lea	readptr,$4000
	lda	#$80
	jsr	read
	;
	lea	a0,$4000
	lea	a1,FIGHT_DATA_ADRS
	lea	len,($8000-FIGHT_DATA_ADRS)
	jsr	tfr_to_7up
	;
	lda	#$06
	jsr	set_seekpos_sub
	lea	readptr,$4000
	lda	#$80
	jmp	read
;
set_seekpos_sub:
	add	w_seekpos+l
	sta	seekpos+l
	cla
	adc	w_seekpos+h
	sta	seekpos+h
	rts
;
;-------------------------------
bgdata_loc_tbl:
	dw	$020		;rtu_bg
	dw	$030		;gki_bg
	dw	$040		;joe_bg
	dw	$050		;mik_bg
	dw	$060		;lee_bg
	dw	$070		;gen_bg
	dw	$080		;bir_bg
	dw	$090		;eag_bg
	dw	$0a0		;adn_bg
	dw	$0b0		;sag_bg
trdata_loc_tbl:
	dw	$020+$0c	;rtu
	dw	$030+$0c	;gki
	dw	$040+$0c	;joe
	dw	$050+$0c	;mik
	dw	$060+$0c	;lee
	dw	$070+$0c	;gen
	dw	$080+$0c	;bir
	dw	$090+$0c	;eag
	dw	$0a0+$0c	;adn
	dw	$0b0+$0c	;sag
;-------------------------------
put_set:
	lea	inf_adr,inf1
	lea	a1,FIGHT_GAUGE_SPCG_ADRS+$40*0+$20	;$00 & $01 3rd plane
	bsr	put_set_sub
	
	lea	inf_adr,inf2
	lea	a1,FIGHT_GAUGE_SPCG_ADRS+$40*2+$20	;$02 & $03 3rd plane
put_set_sub:
	ldy	#SET_GET	;勝ったラウンド数
	lda	[inf_adr],y
	beq	put_set_sub0
	;
	pha
	bsr	round_set
	pla
	;
	dec	a
	beq	put_set_sub0
	addb	a1,#$40
	bsr	round_set
	;
put_set_sub0:
	rts

round_set:
	jsr	ex_hmode
	;
	reg	#MAWR
	ldw	LOW7UP,a1
	;
	reg	#VWR
	ldx	#16
rnd_set_lop:
	st1	#$ff
	st2	#$ff
	dex
	bne	rnd_set_lop
	rts
;-------------------------------
put_param:
	jsr	clear_moji_cg
	;
	stz	moji_x
	;
	jsr	put_p1_score	;sprite C.G. No $00~$03
	jsr	put_p2_score	;sprite C.G. No $04~$07
	;
	jsr	zprs
	db	-1,0,PxHI_COL,"HI",0		;sprite	C.G. No $08
	lea	score_adr,hiscore
	jsr	put_score	;sprite C.G. No $09~$0b
	;
	jsr	put_pl_name	;sprite	C.G. No $0c~$0f $10~$13
	;
	lda	moji_x
	pha
	jsr	zprs
	db	-1,0,TIMES_COL,"TIME",0	;sprite C.G. No $14~$15
	pla
	sta	moji_x
	jsr	put_timer
	;
	jsr	put_set
	;
	rts
;--
put_p1_score:
	lda	s_game
	cmp	#2
	beq	put_sp8
	;
	jsr	zprs
	db	-1,0,PxHI_COL,"P1",0
	lea	score_adr,inf1+SCORE
	jmp	put_score
;
put_p2_score:
	lda	s_game
	cmp	#1
	beq	put_sp8
	;
	jsr	zprs
	db	-1,0,PxHI_COL,"P2",0
	lea	score_adr,inf2+SCORE
	jmp	put_score
;
put_sp8:
	jsr	zprs
	db	-1,0,PxHI_COL,"        ",0
	rts

;-------------------------------
put_pl_name:
	ldb	moji_c,#1
	stz	moji_y
	;
	lda	s_game
	beq	PLAYER1_vs_PLAYER2
	dec	a
	beq	PLAYER1_vs_ENEMY

PLAYER2_vs_ENEMY:
	jsr	zprs
	db	-1,0,NAME_COL
	db	"PLAY","ENEM"
	db	"ER2 ","Y   "
	db	0
	rts

PLAYER1_vs_ENEMY:
	jsr	zprs
	db	-1,0,NAME_COL
	db	"PLAY","ENEM"
	db	"ER1 ","Y   "
	db	0
	rts

PLAYER1_vs_PLAYER2:
	jsr	zprs
	db	-1,0,NAME_COL
	db	"PLAY","PLAY"
	db	"ER1 ","ER2 "
	db	0
	rts

;-------------------------------
put_timer:
	jsr	zprs
	db	-1,1,TIME_COL," ",0
	;
	clx
put_timer_lop:
	lda	game_in_time,x
	jsr	put_mojis_num
	inx
	cpx	#3
	bcc	put_timer_lop
	stz	moji_y
	rts
;-------------------------------
set_bank_4567:
	lda	#4
	jsr	bank_set
	inc	a
	tam4
	inc	a
	tam5
	rts
	
set_bank_3:
	lda	#3
	jmp	bank_set
	
set_bank_2:
	lda	#2
	jmp	bank_set
;-------------------------------
tfr_fight_gauge_spcg:
	lea	a0,FIGHT_GAUGE_SPCG
	lea	a1,FIGHT_GAUGT_GAUGPCG_ADRS+$40*2+$20	;$02 & $03 3rd plane
put_set_sub:
	ldy	#SET_GET	;勝ったラウンド数
	lda	[inf_adr],y
	beq	put_set_sub0
	;
	pha
	bsr	round_set
	pla
	;
	dec	a
	beq	put_set_sub0
	addb	a1,#$40
	bsr	round_set
	;
put_set_sub0:
	rts

round_set:
	jsr	mode_h
	;
	reg	#MAWR
	ldw	LOW7UP,a1
	;
	reg	#VWR
	ldx	#16
rnd_set_lop:
	st1	#$ff
	st2	#$ff
	dex
	bne	rnd_set_lop
	rts
;-------------------------------
put_param:
	jsr	clear_moji_cg
	;
	stz	moji_x
	;
	jsr	put_p1_score	;sprite C.G. No $00~$03
	jsr	put_p2_score	;sprite C.G. No $04~$07
	;
	jsr	zprs
	db	-1,0,PxHI_COL,SX,OR_MESY,GAME_MESC,"OR",0
	jsr	zpr
	db	GAME0_MESX,GAME0_MESY,GAME_MESC,"PLAYER1 VS PLAYER2",0
	rts
;---------------
put_copyright:
	jsr	zpr
	db	COPY_MESX,COPY_MESY,COPY_MESC,low(Ccp)," CAPCOM/HUDSON",0
	rts
;---------------
check_run2
	lda	joytrg+0
	ora	joytrg+1
	bit	#sta
	bne	check_run2_exit
	;
	rts	;zero
;
;one playerで
;2番目のジョイパッドのrunが押されたら
;s_game = 2 にする
;
check_run2_exit:
	lda	s_game
	dec	a
	bne	check_run2_exit1
	lda	joytrg+1
	bit	#sta
	beq	check_run2_exit1
	inc	s_game
check_run2_exit1:
	lda	#1
	rts	;not zero
;---------------
check_sel:
	lda	joytrg+0
	ora	joytrg+1
	bit	#sel
	rts	;zero or not zero
;==================================
;	     'capcom'
;==================================
mapout:
;-------------------font set
	lda	#$40/8
	jsr	set_seekpos
	lea	readptr,$4000
	lda	#$80
	jsr	read

	lea	a0,bg_font
	lea	a1,BGFONT
	lea	c0,$8000
	jsr	putvdp

;-------------------bat,color set
	lda	#$c0/8
	jsr	set_seekpos
	lea	readptr,$4000
	lda	#$20
	jsr	read

	jsr	palini

	lea	a0,bg_bat
	lea	a1,0
	lea	c0,$1000	;4kB
	jsr	putbat

	rts

;==================================
;	put sprite routine
;==================================
move_csr:
	jsr	check_sel
	bne	move_csr1
	rts
;
move_csr1:
	lda	s_game
	eor	#1	;0<=>1
	sta	s_game
;	bra	put_csr
;
put_csr:
	lda	s_game
	beq	put_csr1
	;
	jsr	zpr
	db	CSR_MESX,GAME1_MESY,GAME_MESC,low(Csr),0
	jsr	zpr
	db	CSR_MESX,GAME0_MESY,GAME_MESC," ",0
	rts
put_csr1:
	jsr	zpr
	db	CSR_MESX,GAME1_MESY,GAME_MESC," ",0
	jsr	zpr
	db	CSR_MESX,GAME0_MESY,GAME_MESC,low(Csr),0
	rts
	
;=============================
;	set font,bat
;=============================
ssp:
	ldy	#0
ssp71:
	lda	[a0],y
	sta	low7up
	iny
	lda	[a0],y
	sta	hi7up
	iny
	bne	ssp71
	rts
;
; put vdp[a1] <--- memory[a0] c0 bytes
putvdp:
	reg	#MAWR
	ldw	low7up,a1
	reg	#VWR

putvd1:
	bsr	ssp
	inc	a0+1
	dec	c0+1
	bne	putvd1
	rts

bsp:
	ldy	#0
bsp71:
	lda	[a0],y
	sta	low7up
	iny
	lda	[a0],y
	add	#high BGFONT/16
	sta	hi7up
	iny
	bne	bsp71
	rts
	
putbat:
	reg	#MAWR
	stz	low7up
	stz	hi7up
	reg	#VWR
putba1:
	bsr	bsp

	inc	a0+h
	dec	c0+h
	bne	putba1
	rts

;=========================
;	set color_buf
;=========================
palini:
	lea	a0,bg_palet
	jsr	tfr_bgpal
	jsr	clr_sppal
	
	lda	#$18
	jsr	set_moji_palet
	
	lda	#$29
	jsr	set_moji_palet
	
	lda	#$3a
	jsr	set_moji_palet
	
	lda	#$ff
	sta	irq_flag
	rts
;
;*********************** end of SEL.S **********************************
;


;s_game = 2 にする
;
check_run2_exit:
	lda	s_game
	dec	a
	bne	check_run2_exit1
	lda	joytrg+1
	bit	#sta
	beq	check_run2_exit1
	inc	s_game
check_run2_exit1:
	lda	#1
	rts	;not zero
;---------------
check_sel:
	lda	joytrg+0
	ora	joytrg+1
	bit	#sel
	rts	;zero or not zero
;==================================
;	     'capcom'
;==================================
mapout:
;-------------------font set
	lda	#$40/8
	jsr	set_seekpos
	lea	readptr,$4000
	lda	#$80
	jsr	read

	lea	a0,bg_font
	lea	a1,BGFONT
	lea	c0,$8000
db	low (%1*2+SPFONTq/32)+(%8 and 1)
	db	(high (%1*2+SPFONTq/32))+%2*8+%3*128+%4*64+%5*16
	db	%6
	db	%7
	ENDM
	
open_sprite_table:
	dw	ossan_0
	dw	ossan_1
	dw	ossan_2
	dw	ossan_3
	dw	copyright0
	dw	copyright1

;======================================
;
;	object pattrn data
;
;		code,/x,/y,cx,cy,ox,oy
;
;	jsrspr	sub_rutin jump
;	jmpspr	sub_rutin go to
;=====================================

ossan_0:
	db	6
	spriteo	$0, 0, 0, 1, 2,0,0,0
	spriteo	$8, 0, 0, 1, 2,32,0,0
	spriteo	$10, 0, 0, 1, 2,64,0,0
	spriteo	$18, 0, 0, 1, 2,96,0,0
	spriteo	$20, 0, 0, 1, 0,32,48,0
	spriteo	$22, 0, 0, 1, 0,64,48,0
	endspr
	
ossan_1:
	db	6
	spritep	$0, 0, 0, 1, 2,0,0,0
	spritep	$8, 0, 0, 1, 2,32,0,0
	spritep	$10, 0, 0, 1, 2,64,0,0
	spritep	$18, 0, 0, 1, 1,96,32,0
	spritep	$1c, 0, 0, 1, 0,32,48,0
	spritep	$1e, 0, 0, 1, 0,64,48,0
	endspr
	
ossan_2:
	db	7
	spritep	$20, 0, 0, 1, 2,16,0,0
	spritep	$28, 0, 0, 1, 2,48,0,0
	spritep	$30, 0, 0, 1, 2,80,0,0
	spritep	$38, 0, 0, 1, 0,16,48,0
	spritep	$3a, 0, 0, 1, 0,48,48,0
	spritep	$3c, 0, 0, 1, 0,80,48,0
	spritep	$3e, 0, 0, 1, 0,112,48,0
	endspr

ossan_3:
	db	8
	spriteo	$0, 0, 0, 1, 2,16,0,0
	spriteo	$8, 0, 0, 1, 2,48,0,0
	spriteo	$10, 0, 0, 1, 2,80,0,0
	spriteo	$18, 0, 0, 1, 2,112,0,0
	spriteo	$20, 0, 0, 1, 0,16,48,0
	spriteo	$22, 0, 0, 1, 0,48,48,0
	spriteo	$24, 0, 0, 1, 0,80,48,0
	spriteo	$26, 0, 0, 1, 0,112,48,0
	endspr

copyright0:
	db	4
	spriteq	$00, 0, 0, 1, 0,0,0,0
	spriteq	$04, 0, 0, 1, 0,32,0,0
	spriteq	$08, 0, 0, 1, 0,64,0,0
	spriteq	$0c, 0, 0, 1, 0,96,0,0
	endspr

copyright1:
	db	4
	spriteq	$02, 0, 0, 1, 0,0,0,0
	spriteq	$06, 0, 0, 1, 0,32,0,0
	spriteq	$0a, 0, 0, 1, 0,64,0,0
	spriteq	$0e, 0, 0, 1, 0,96,0,0
	endspr

;
;*********************** end of OPEN.S *********************************
;


equ	(*-MOJI_CG)/16
h,0C62adr_tbl:
	dw	inf1,inf2
score_adr_tbl:
	dw	inf1+SCORE,inf2+SCORE,hiscore
;-
lda_PLAYER_ID:
	ldy	#PLAYER_ID
	lda	[inf_adr],y
	rts
;-
inc_pl_SET_GET
	ldy	#SET_GET
	lda	[inf_adr],y
	inc	a
	sta	[inf_adr],y
	rts
;-
clr_score_bit:
	lea	score_adr,inf1+SCORE
	bsr	clr_score_bit_sub
	lea	score_adr,inf2+SCORE
	bsr	clr_score_bit_sub
	lea	score_adr,hiscore
clr_score_bit_sub:
	ldy	#SCORE_KETA-1
clr_score_bit_lop:
	lda	[score_adr],y
	and	#$7f
	sta	[score_adr],y
	dey
	bpl	clr_score_bit_lop
	;
	rts
;--------------------------
; sprite table
;--------------------------
FIGHT_SPRITE_TBL:
	dw	massage_spr	;0
;======================================
;
;	object pattrn data
;
;		code,/x,/y,cx,cy,ox,oy
;
;	jsrspr	sub_routin jump
;	jmpspr	sub_routin go to
;======================================
;
;		code,/x,/y,cgx,cgy,xoffset,yoffset,colbit
sprite	MACRO	   %1,%2,%3,%4,%5,%6,%7,%8
	db	low (%1*2+MSG_SPCG_ADRS/32)+(%8 and 1)
	db	(high (%1*2+MSG_SPCG_ADRS/32))+%2*8+%3*128+%4*64+%5*16
	db	%6
	db	%7
	ENDM

massage_spr:
	db	4
	sprite	$00,norx,nory,cgx2,cgy4,16,8,col0
	sprite	$08,norx,nory,cgx2,cgy4,48,8,col0
	sprite	$10,norx,nory,cgx2,cgy4,80,8,col0
	sprite	$18,norx,nory,cgx2,cgy4,112,8,col0
	endspr
;
;********************** end of FIGHT1.S ********************************


;************************************************
;*	================================	*
;*	project	:ストリート・ファイター		*
;*	================================	*
;*	group	:STAGE.MAK/STAGE.LNK		*
;*	file	:STAGE.S			*
;*	date	:S63/4				*
;*      coding	:Alfa HaHi			*
;*						*
;************************************************
;===============================
;	include file
;===============================
	include	7UP.H
	include BIOSW.H
	include WORK.H
;=======================
;	boot define
;=======================
	defseg	stageboot
	seg	stageboot
	dw	STAGE_ID			;stage id
	dw	init_stage			;entry
	db	$ff,$f8,$01,$02,$03,$04,$05,$00	;mapping
	db	$01,$a0,$20			;load sct/adrs(pg)/length(pg)
	db	0				;load end
	db	"INIT STAGE '88/3/31 Hudson/Alfa System"
	dw	256
;
;    00	+---------------+
;	|boot		|
;    10	+---------------+
; (8000)|rtutbl		|
;    14	+---------------+
; (a000)|gkitbl		|
;    18	+---------------+
; (c000)|joetbl		|
;    1c	+---------------+
; (e000)|miktbl		|
;    20	+---------------+
;(10000)|leetbl		|
;    24	+---------------+
;(12000)|gentbl		|
;    28	+---------------+
;(14000)|birtbl		|
;    2c	+---------------+
;(16000)|eagtbl		|
;    30	+---------------+
;(18000)|adntbl		|
;    34	+---------------+
;(1a000)|sagtbl		|
;    38	+---------------+
;(1c000)|		|
;    3c	+---------------+
;(1e000)|		|
;    	+---------------+
;
;=======================
; 	work
;=======================
	seg	dseg
data_sel	ds	1	;=course_select/2*4+nando
;=======================
;	program
;=======================
	seg	cseg
	
	include mul8.icl

init_stage:
	jsr	enemy_ctrl_load
	jsr	init_set_get
	jsr	set_stage_no2
	jsr	set_country_scene
	stz	round_no
	rts
;-----------------------
init_set_get:
	stz	inf1+SET_GET
	stz	inf2+SET_GET
	rts
;-----------------------
set_stage_no2:
	lda	stage_no
	lsr	a
	sta	stage_no2
	rts
;-----------------------
;course_select と stage_no から
;country と scene をセットする
;-----------------------
set_country_scene:
	lda	course_select	;course_select*5
	asl	a
	asl	a
	add	course_select
	add	stage_no2	;+stage_no2(stage_no/2)
	tax
	lda	course_country_tbl+1,x
	sta	next_country
	lda	course_country_tbl,x
	sta	country
	;
	asl	a		;country*2
	sta	wk0
	lda	stage_no	;+(stage_no mod 2)
	and	#1
	add	wk0
	tax
	lda	country_scene_tbl,x
	sta	scene
	rts
;-
JAP	equ	0
USA	equ	1
CHI	equ	2
ENG	equ	3
TAI	equ	4
;-
course_country_tbl
	db	JAP,USA,CHI,ENG,TAI	;course0
	db	CHI,ENG,JAP,USA,TAI	;course1
	db	USA,JAP,ENG,CHI,TAI	;course2
	db	ENG,CHI,USA,JAP,TAI	;course3
;-
RTU	equ	0
GKI	equ	1
JOE	equ	2
MIK	equ	3
LEE	equ	4
GEN	equ	5
BIR	equ	6
EAG	equ	7
ADN	equ	8
SAG	equ	9
;-
country_scene_tbl:
	db	RTU,GKI
	db	JOE,MIK
	db	LEE,GEN
	db	BIR,EAG
	db	ADN,SAG
;-------------------------------
DATA_TOP	equ	$4000

TKxx_MAWAI_RATE	equ	DATA_TOP+0
TKxx_MAWAI_DATA	equ	TKxx_MAWAI_RATE+16*8
TKxx_IDO_KYORI	equ	TKxx_MAWAI_DATA+6
TKxx_IDO_PTN	equ	TKxx_IDO_KYORI+8
TKxx_RIDATU_PTN	equ	TKxx_IDO_PTN+48*8
Txx_ATTACK_RATE	equ	TKxx_RIDATU_PTN+32*8
Txx_DEFENS_RATE	equ	Txx_ATTACK_RATE+16*8
Txx_DEFENSE_UP	equ	Txx_DEFENS_RATE+16*8
Txx_DEFENSE_DWN	equ	Txx_DEFENSE_UP+80*8
Txx_ATTACK_A	equ	Txx_DEFENSE_DWN+80*8
Txx_ATTACK_B	equ	Txx_ATTACK_A+240*8
Txx_ATTACK_C	equ	Txx_ATTACK_B+240*8
DAMPTN_Txx_TBL	equ	Txx_ATTACK_C+240*8
OUTPTN_Txx_TBL	equ	DAMPTN_Txx_TBL+3*13
;		equ	OUTPTN_Txx_TBL+3*11
;
enemy_ctrl_load:
	jsr	load_enemy_ctrl_data
	;
	lda	nando
	and	#3
	sta	wk0
	lda	course_select
	and	#2
	asl	a
	ora	wk0
	sta	data_sel
	;
	jsr	tfr_mawai_data_tbl
	jsr	tfr_mawai_rate_tbl
	jsr	tfr_ido_kyori_tbl
	jsr	tfr_ido_pattern_tbl
	jsr	tfr_ridatu_ptn_tbl
	jsr	tfr_attack_rate_tbl
	jsr	tfr_defense_rate_tbl
	jsr	tfr_defense_up_tbl
	jsr	tfr_defense_dwn_tbl
	jsr	tfr_attack_A_ptn
	jsr	tfr_attack_B_ptn
	jsr	tfr_attack_C_ptn
	jsr	tfr_damtk_ptn_tbl
	jsr	tfr_outtk_ptn_tbl
	;
	rts
;--
load_enemy_ctrl_data:
	ldx	scene
	lda	enemy_ctrl_data_loc,x
	jsr	set_seekpos
	lea	readptr,DATA_TOP
	;
	lda	#$30
	jmp	read
;--
enemy_ctrl_data_loc:
	db	$10	;rtu
	db	$14	;gki
	db	$18	;joe
	db	$1c	;mik
	db	$20	;lee
	db	$24	;gen
	db	$28	;bir
	db	$2c	;eag
	db	$30	;adn
	db	$34	;sag
;---------------------------------------
;メモリ転送サブルーチン
; input :a0=source address
;	 a1=distination address
;	 len=length
;---------------------------------------
tfrsub:
	cly
	ldx	len+l
	beq	tfrsub1
	bsr	tfrsubs
tfrsub1:
	lda	len+h
	beq	tfrsub3
tfrsub2:
	bsr	tfrsubs
	dec	len+h
	bne	tfrsub2
tfrsub3:
	rts
;-
tfrsubs:
	lda	[a0],y
	sta	[a1],y
	iny
	bne	tfrsubs1
	inc	a0+h
	inc	a1+h
tfrsubs1:
	dex
	bne	tfrsubs
	;
	rts
;-------------------------------
;データ選択&転送マクロ
;-------------------------------
seltfr	MACRO	srctbl,dsttbl,size
	ldb	wk0,data_sel
	ldb	wk1,#size
	jsr	mul_wk0_wk1
	lda	wk2+l
	add	#low srctbl
	sta	a0+l
	lda	wk2+h
	add	#high srctbl
	sta	a0+h
	;
	lea	a1,dsttbl
	lea	len,size
	jmp	tfrsub
	ENDM
;--
tfr_mawai_data_tbl:
	lea	a0,TKxx_MAWAI_DATA
	lea	a1,mawai_data_tbl
	lea	len,6
	jmp	tfrsub
;--
tfr_ido_kyori_tbl:
	lea	a0,TKxx_IDO_KYORI
	lea	a1,ido_kyori_tbl
	lea	len,6
	jmp	tfrsub
;--
tfr_damtk_ptn_tbl
	lea	a0,DAMPTN_Txx_TBL
	lea	a1,damtk_ptn_tbl
	lea	len,13*3
	jmp	tfrsub
;--
tfr_outtk_ptn_tbl
	lea	a0,OUTPTN_Txx_TBL
	lea	a1,outtk_ptn_tbl
	lea	len,11*3
	jmp	tfrsub
;--
tfr_mawai_rate_tbl:
	seltfr	TKxx_MAWAI_RATE,mawai_rate_tbl,16
;--
tfr_ido_pattern_tbl:
	seltfr	TKxx_IDO_PTN,ido_pattern_tbl,48
;--
tfr_ridatu_ptn_tbl:
	seltfr	TKxx_RIDATU_PTN,ridatu_ptn_tbl,32
;--
tfr_attack_rate_tbl:
	seltfr	Txx_ATTACK_RATE,attack_rate_tbl,16
;--
tfr_defense_rate_tbl:
	seltfr	Txx_DEFENS_RATE,defense_rate_tbl,16
;--
tfr_defense_up_tbl:
	seltfr	Txx_DEFENSE_UP,defense_up_tbl,80
;--
tfr_defense_dwn_tbl:
	seltfr	Txx_DEFENSE_DWN,defense_dwn_tbl,80
;--
tfr_attack_A_ptn:
	seltfr	Txx_ATTACK_A,attack_A_ptn,240
;--
tfr_attack_B_ptn:
	seltfr	Txx_ATTACK_B,attack_B_ptn,240
;--
tfr_attack_C_ptn:
	seltfr	Txx_ATTACK_C,attack_C_ptn,240
;
;*********************** end of STAGE.S ********************************
;1:
	bsr	ssp
	inc	a0+1
	dec	c0+1
	bne	putvd1
	rts

bsp:
	ldy	#0
bsp71:
	lda	[a0],y
	sta	low7up
	iny
	lda	[a0],y
	add	#high BGFONT/16
	sta	hi7up
	iny
	bne	bsp71
	rts
	
putbat:
	reg	#MAWR
	stz	low7up
	stz	hi7up
	reg	#VWR
putba1:
	bsr	bsp

	inc	a0+h
	dec	c0+h
	bne	putba1
	rts

;=========================
;	set color_buf
;=========================
palini:
	lea	a0,bg_palet
	jsr	tfr_bgpal
	jsr	clr_sppal
	
	lda	#$18
	jsr	set_moji_palet
	
	lda	#$29
	jsr	set_moji_palet
	
	lda	#$3a
	jsr	set_moji_palet
	
	lda	#$ff
	sta	irq_flag
	rts
;
;*********************** end of SEL.S **********************************
********************************
;

                TACK_RATE,attack_rate_tbl,16
;--
tfr_defense_rate_tbl:
	seltfr	Txx_DEFENS_RATE,defense_rate_tbl,16
;--
tfr_defense_up_tbl:
	seltfr	Txx_DEFENSE_UP,defense_up_tbl,80
;--
tfr_defense_dwn_tbl:
	seltfr	Txx_DEFENSE_DWN,defense_dwn_tbl,80
;--
tfr_attack_A_ptn:
	seltfr	Txx_ATTACK_A,attack_A_ptn,240
;--
tfr_attack_B_ptn:
	seltfr	Txx_ATTACK_B,attack_B_ptn,240
;--
tfr_attack_C_ptn:
	seltfr	Txx_ATTACK_C,attack_C_ptn,240
;
;*********************** end of -----------------
;load main & goto main_star


;==============================
; RYUGKI
;   sprite table & font data
;==============================




	include	spmac.h

f1_ad	equ	$0000	; 84個
f2_ad	equ	$0150	; 319個
f3_ad	equ	$0B48	; 195個
f4_ad	equ	$146C	; 33個
f5_ad	equ	$167C

; sprite palette controle table




;==============================

	defseg	spr0seg
	seg	spr0seg

	dw	fighter_tbl
	db	$46,$64
spr_tbl0:
	dw	spctbl1,spctbl2,spctbl3,spctbl3
spr_tbl2:
	dw	f1_ad,f2_ad,f3_ad,f4_ad
	dw	$A00/2+$3000
	dw	dh0000
pal_tbl:
	db	000h,002h,003h,0

spctbl1
	dw	00202h,02202h,00282h,00202h,00202h,00202h,00202h,02222h
	dw	00202h,00202h,02202h,08082h,00202h,08202h,009A2h,02202h
	dw	02222h,02222h,03E3Eh,02222h,02222h,02822h,00808h,00828h
	dw	00808h,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah
	dw	00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah,00A0Ah
	dw	00A0Ah,00A0Ah

spctbl2
	dw	01C1Ch,0131Ch,01313h,01013h,01000h,01010h,01010h,01000h
	dw	0101Ch,00010h,01010h,01010h,01010h,01010h,01010h,01010h
	dw	01013h,00000h,0101Fh,01010h,01010h,01010h,01010h,01010h
	dw	01010h,0101Ch,01010h,01010h,01000h,01010h,00010h,01010h
	dw	01000h,00000h,01010h,01310h,00010h,01010h,01010h,01010h
	dw	01010h,01010h,01010h,01C10h,01010h,01F0Fh,01010h,00010h
	dw	00000h,01010h,01010h,01010h,01010h,01010h,01010h,0031Ch
	dw	01310h,01000h,01010h,00010h,01010h,01010h,01000h,01010h
	dw	01010h,01010h,01010h,01310h,01313h,0001Fh,01313h,01313h
	dw	00313h,01313h,01313h,00313h,01313h,00313h,01313h,01313h
	dw	01313h,01310h,00313h,0130Fh,00313h,01303h,01313h,01313h
	dw	01303h,01313h,01F13h,01313h,01313h,01303h,01313h,01313h
	dw	01313h,01303h,01313h,01313h,01313h,01313h,01313h,01010h
	dw	01310h,00303h,01313h,01313h,01313h,01313h,01313h,01313h
	dw	01313h,01313h,01313h,00000h,00000h,00000h,00000h,00000h
	dw	00000h,01300h,01313h,01013h,01013h,01310h,01013h,01010h
	dw	01310h,01010h,01310h,01313h,01013h,01010h,01010h,01010h
	dw	01013h,01013h,01013h,01310h,01310h,01310h,01010h,01010h
	dw	01010h,01010h,01010h,01010h,01010h,01010h,01010h,01010h
	dw	01010h,01010h,01010h,01010h,01010h,01010h,01010h
	db	010h

spctbl3
	dw	01A1Ah,0121Ah,01202h,00E12h,01E1Eh,01202h,01E1Ah,00212h
	dw	01212h,01E02h,01E12h,0121Ah,01212h,01202h,01212h,00E02h
	dw	01E12h,01202h,01212h,01E1Eh,01A1Ah,01A1Eh,01212h,00212h
	dw	01212h,01E12h,00E02h,01E12h,01202h,01212h,00212h,01212h
	dw	00212h,0020Eh,0121Eh,01212h,01212h,00212h,00E02h,01212h
	dw	00A0Ah,01212h,00212h,01212h,01A02h,01212h,01212h,01212h
	dw	01202h,01A12h,00A1Ah,00212h,01212h,00212h,00202h,01B1Bh
	dw	01202h,00212h,01202h,01212h,00212h,01212h,00202h,01202h
	dw	01202h,01212h,01E1Ah,0121Ah,01212h,01212h,00212h,00212h
	dw	01202h,01212h,01212h,01212h,01212h,00212h,00202h,01202h
	dw	01212h,01212h,01212h,01212h,01212h,01212h,01212h,00202h
	dw	01212h,01212h,00212h,01202h,01212h,01202h,00212h,01202h
	dw	01212h
	db	012h


fighter_tbl:
	dw	ch0000,ch0001,ch0002,ch0003,ch0004,ch0005,ch0006,ch0000	;ryu
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	;
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	; 10
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	;
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	; 20
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	;
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	; 30
	dw	ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000,ch0000	;
	dw	ch0000,ch0000,ch0000,ch0000,ch0007,ch0008		; 40

	dw	ch0009,ch000A,ch000B,ch0009,ch000C,ch0009,ch0009,ch0009	; geki
	dw	ch0009,ch0009,ch0009,ch0009,ch0009,ch0009,ch0009,ch000D	;
	dw	ch0009,ch0009,ch0009,ch0009,ch0009,ch0009,ch0012,ch0009	; 10
	dw	ch0009,ch0009,ch0009,ch000E,ch000F,ch0010,ch0011	;




;======================================
;
;	object pattern data
;
;spr	cgx,cgy,X offset,Y offset
;dw	code(pal(2),plane(2),number(12))
;jsrspr	/x,/y,X offset,Y offset,label
;jmpspr	/x,/y,X offset,Y offset,label
;
;======================================

;
;
;
dh0000:
	spal	0
	sprkosu	2
	spr	2,2,-7,-8
	dw	02000h,03000h,02001h,03001h
	spr	1,1,-4,8
	dw	0Jl