the cutting room mirror

Uncompiled Source Code

This is a sub-page of Fighting Street.

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