SF2.islave.asm (13,936 bytes)
2019-11-13 14:16
;*************************
; Coded by Galahad & CFou!
;************************
objfile 'StreetFIghter2.islave'
SECTION StreetFighter2islave000000,CODE
incdir Includes:
include RawDIC.i
SLAVE_HEADER
dc.b 1 ; Slave version
dc.b SFLG_DEBUG ; Slave flags
dc.l DSK_1_Twi1 ;DSK_1 ; Pointer to the first disk structure
dc.l Text ; Pointer to the text displayed in the imager window
dc.b "$VER:"
Text:
db 'StreetFighter 2 Imager V1.2 on 19.11.2019',$A
db 'by Galahad/Fairlight (DOS) & CFou! (Twilight1)',0
cnop 0,4
;****************************** Support for TwiLight1 track ($1400) version by CFou! on 11/2019
;*****************************************************************************************
DSK_1_Twi1
dc.l DSK_2_Twi1 ; Pointer to next disk structure
dc.w 1 ; Disk structure version
dc.w DFLG_DOUBLEINC ; Disk flags
dc.l TL_1_Twi1 ; List of tracks which contain data
dc.l 0 ; UNUSED, ALWAYS SET TO 0!
dc.l FL_DISK1 ; List of files to be saved
dc.l CR_Disk1V1 ; Table of certain tracks with CRC values
dc.l DSK_1 ; Alternative disk structure, if CRC failed
dc.l 0 ; Called before a disk is read
dc.l 0 ; Called after a disk has been read
DSK_2_Twi1
dc.l DSK_3_Twi1 ; Pointer to next disk structure
dc.w 1 ; Disk structure version
dc.w DFLG_DOUBLEINC ; Disk flags
dc.l TL_2_Twi1 ; List of tracks which contain data
dc.l 0 ; UNUSED, ALWAYS SET TO 0!
dc.l FL_DISK2 ; List of files to be saved
dc.l CR_Disk2V1 ; Table of certain tracks with CRC values
dc.l DSK_2 ; Alternative disk structure, if CRC failed
dc.l 0 ; Called before a disk is read
dc.l 0 ; Called after a disk has been read
DSK_3_Twi1
dc.l DSK_4_Twi1 ; Pointer to next disk structure
dc.w 1 ; Disk structure version
dc.w DFLG_DOUBLEINC ; Disk flags
dc.l TL_3_Twi1 ; List of tracks which contain data
dc.l 0 ; UNUSED, ALWAYS SET TO 0!
dc.l FL_DISK3 ; List of files to be saved
dc.l CR_Disk3V1 ; Table of certain tracks with CRC values
dc.l DSK_3 ; Alternative disk structure, if CRC failed
dc.l 0 ; Called before a disk is read
dc.l 0 ; Called after a disk has been read
DSK_4_Twi1
dc.l 0 ; Pointer to next disk structure
dc.w 1 ; Disk structure version
dc.w DFLG_DOUBLEINC ; Disk flags
dc.l TL_4_Twi1 ; List of tracks which contain data
dc.l 0 ; UNUSED, ALWAYS SET TO 0!
dc.l FL_DISK4 ; List of files to be saved
dc.l CR_Disk4V1 ; Table of certain tracks with CRC values
dc.l DSK_4 ; Alternative disk structure, if CRC failed
dc.l 0 ; Called before a disk is read
dc.l 0 ; Called after a disk has been read
;------------------------ Checksum of Twilight versoin for test
CR_Disk1V1
CRCENTRY 0,$59f8 ;$6B50
CRCENTRY 4,$5bc0
CRCEND
CR_Disk2V1
CRCENTRY 0,$add3
CRCENTRY 4,$bf33
CRCEND
CR_Disk3V1
CRCENTRY 0,$6e7e
CRCENTRY 2,$2b7b
CRCEND
CR_Disk4V1
CRCENTRY 0,$add3
CRCENTRY 4,$bdab
CRCEND
;------------------------ Track Load Twilight1 ------------------------------------
LG_TRACK_TWI1 = $1400
TL_1_Twi1
TLENTRY 0,1,$1600,SYNC_STD,DMFM_STD
TLENTRY 2,3,$1200,SYNC_STD,DMFM_NULL
TLENTRY 4,148,$1400,$4489,DMFM_Twilight1
TLEND
TL_2_Twi1
TLENTRY 0,1,$1600,SYNC_STD,DMFM_STD
TLENTRY 2,3,$1200,SYNC_STD,DMFM_NULL
TLENTRY 4,77,$1400,$4489,DMFM_Twilight1
TLENTRY 78,79,$1400,SYNC_STD,DMFM_NULL
TLENTRY 80,147,$1400,$4489,DMFM_Twilight1
TLENTRY 3,122,$1400,$4489,DMFM_Twilight1
TLENTRY 123,128,$1400,SYNC_STD,DMFM_NULL
TLENTRY 129,152,$1400,$4489,DMFM_Twilight1
TLEND
TL_3_Twi1
TLENTRY 0,1,$1400,SYNC_STD,DMFM_STD
TLENTRY 2,157,$1400,$4489,DMFM_Twilight1
TLENTRY 5,70,$1400,$4489,DMFM_Twilight1
TLENTRY 71,72,$1400,$4489,DMFM_NULL
TLENTRY 73,152,$1400,$4489,DMFM_Twilight1
TLEND
TL_4_Twi1
TLENTRY 0,1,$1600,SYNC_STD,DMFM_STD
TLENTRY 2,3,$1200,SYNC_STD,DMFM_NULL
TLENTRY 4,81,$1400,$4489,DMFM_Twilight1
TLENTRY 82,83,$1400,$4489,DMFM_NULL
TLENTRY 84,155,$1400,$4489,DMFM_Twilight1
TLENTRY 3,158,$1400,$4489,DMFM_Twilight1
TLEND
;------------------------ File Lists Twilight1 ------------------------------------
FL_DISK1
FLENTRY FL_BOOTNAME,0,$1600
FLENTRY FL_INTRONAME,$1400*$02,LG_TRACK_TWI1*$49
FLEND
LG_DSK2 = $1400*$4A-$1400
FL_DISK2
FLENTRY FL_BOOTNAME_D2,0,$1600
FLENTRY FL_D2_FILE1,$1400*$02,$1400*$1a ;0; /$1400=25+1
FLENTRY FL_D2_FILE2,$1400*$1c,$1400*$07 ; ; /$1400=6+1 ; DEBUT PISTE 58
FLENTRY FL_D2_FILE3,$1400*$23,$1400*$04 ; ;/$1400=3+1 ; DEBUT PISTE 70
FLENTRY FL_D2_FILE4,$1400*$28,$1400*$19 ; ;/$1400=24+1 ; DEBUT PISTE 80
FLENTRY FL_D2_FILE5,$1400*$41,$1400*$07 ; ;/$1400=6+1 ; DEBUT PISTE 130
FLENTRY FL_D2_FILE6,$1400*$48,$1400*$02 ; ;/$1400=6+1 ; DEBUT PISTE 144/146
FLENTRY FL_D2_FILE7,LG_DSK2+$1400*$01,$1400*$17 ;3 ;/$1400=22+1 ; DEBUT PISTE 3
FLENTRY FL_D2_FILE8,LG_DSK2+$1400*$18,$1400*$06 ;49 ;/$1400=5+1 ; DEBUT PISTE 49
FLENTRY FL_D2_FILE9,LG_DSK2+$1400*$1E,$1400*$18 ;61 ;/$1400=5+1 ; DEBUT PISTE 61
FLENTRY FL_D2_FILEA,LG_DSK2+$1400*$36,$1400*$07 ;109 ; 85
FLENTRY FL_D2_FILEB,LG_DSK2+$1400*$40,$1400*$0c ;229
FLEND
LG_DSK3 = $1400*$4F-$1400*2
FL_DISK3
FLENTRY FL_BOOTNAME_D3,0,$1400
FLENTRY FL_D3_FILE1,$1400*$01,$1400*$23
FLENTRY FL_D3_FILE2,$1400*$24,$1400*$09
FLENTRY FL_D3_FILE3,$1400*$2d,$1400*$05
FLENTRY FL_D3_FILE4,$1400*$32,$1400*$16
FLENTRY FL_D3_FILE5,$1400*$48,$1400*$07
FLENTRY FL_D3_FILE6,LG_DSK3+$1400*$02,$1400*$17
FLENTRY FL_D3_FILE7,LG_DSK3+$1400*$19,$1400*$06
FLENTRY FL_D3_FILE8,LG_DSK3+$1400*$1F,$1400*$04
FLENTRY FL_D3_FILE9,LG_DSK3+$1400*$24,$1400*$16
FLENTRY FL_D3_FILEA,LG_DSK3+$1400*$3a,$1400*$0a
FLENTRY FL_D3_FILEB,LG_DSK3+$1400*$44,$1400*$08
FLEND
LG_DSK4 = $1400*$4E-$1400
FL_DISK4
FLENTRY FL_BOOTNAME_D4,0,$1600
FLENTRY FL_D4_FILE1,$1400*$02,$1400*$1C
FLENTRY FL_D4_FILE2,$1400*$1e,$1400*$07
FLENTRY FL_D4_FILE3,$1400*$25,$1400*$04
FLENTRY FL_D4_FILE4,$1400*$2a,$1400*$1A
FLENTRY FL_D4_FILE5,$1400*$44,$1400*$07
FLENTRY FL_D4_FILE6,$1400*$4b,$1400*$03
FLENTRY FL_D4_FILE7,LG_DSK4+$1400*$01,$1400*$19
FLENTRY FL_D4_FILE8,LG_DSK4+$1400*$1A,$1400*$06
FLENTRY FL_D4_FILE9,LG_DSK4+$1400*$20,$1400*$03
FLENTRY FL_D4_FILEA,LG_DSK4+$1400*$23,$1400*$19
FLENTRY FL_D4_FILEB,LG_DSK4+$1400*$3c,$1400*$08
FLENTRY FL_D4_FILEC,LG_DSK4+$1400*$44,$1400*$03
FLENTRY FL_D4_FILED,LG_DSK4+$1400*$47,$1400*$08
FLEND
;------------------------ File Name list Twilight1 ------------------------------------
; Disk 1
FL_BOOTNAME dc.b "00000000.BOOT",0
FL_INTRONAME dc.b "00000249",0 ; intro
; Disk 2
FL_BOOTNAME_D2: dc.b "01000000.BOOT",0 ;
FL_D2_FILE1 dc.b "0100021A",0 ;
FL_D2_FILE2 dc.b "01001C07",0 ;
FL_D2_FILE3 dc.b "01002304",0 ;
FL_D2_FILE4 dc.b "01002819",0 ;
FL_D2_FILE5 dc.b "01004107",0 ;
FL_D2_FILE6 dc.b "01004802",0 ;
FL_D2_FILE7 dc.b "01010117",0
FL_D2_FILE8 dc.b "01011806",0
FL_D2_FILE9 dc.b "01011E18",0
FL_D2_FILEA dc.b "01013607",0
FL_D2_FILEB dc.b "0101400C",0
; Disk3
FL_BOOTNAME_D3: dc.b "02000000.BOOT",0 ;
FL_D3_FILE1 dc.b "02000123",0 ;
FL_D3_FILE2 dc.b "02002409",0 ;
FL_D3_FILE3 dc.b "02002D05",0 ;
FL_D3_FILE4 dc.b "02003216",0 ;
FL_D3_FILE5 dc.b "02004807",0 ;
FL_D3_FILE6 dc.b "02010217",0 ;
FL_D3_FILE7 dc.b "02011906",0
FL_D3_FILE8 dc.b "02011F04",0
FL_D3_FILE9 dc.b "02012416",0
FL_D3_FILEA dc.b "02013A0A",0
FL_D3_FILEB dc.b "02014408",0
; Disk4
FL_BOOTNAME_D4: dc.b "03000000.BOOT",0 ;
FL_D4_FILE1 dc.b "0300021C",0 ;
FL_D4_FILE2 dc.b "03001E07",0 ;
FL_D4_FILE3 dc.b "03002504",0 ;
FL_D4_FILE4 dc.b "03002A1A",0 ;
FL_D4_FILE5 dc.b "03004407",0 ;
FL_D4_FILE6 dc.b "03004B03",0 ;
FL_D4_FILE7 dc.b "03010119",0
FL_D4_FILE8 dc.b "03011A06",0
FL_D4_FILE9 dc.b "03012003",0
FL_D4_FILEA dc.b "03012319",0
FL_D4_FILEB dc.b "03013C08",0
FL_D4_FILEC dc.b "03014403",0
FL_D4_FILED dc.b "03014708",0
;------------------------ MFM decode Twilight1 ------------------------------------
DMFM_Twilight1:
;.t bra .t
movem.l d1-a6,-(a7)
;sub.l #10,a0
move.l a0,a2
move.l a1,a3
_Decode_Twilight1_1400
MOVE.L #$55555555,D5
LEA (8,A2),A0
BSR.W _DecodeTwi1_CRC
MOVE.L D0,D7
LEA ($10,A2),A0
MOVE.W #$2800,D1
BSR.B _DecodeTwi1_scan
CMP.L D0,D7
BNE.W _ERR
LEA ($10,A2),A0
MOVE.W #$1400,D0
BSR.B _DecodeTwi1
moveq #IERR_OK,d0
movem.l (a7)+,d1-a6
rts
_ERR
movem.l (a7)+,d1-a6
moveq #IERR_CHECKSUM,d0
rts
_DecodeTwi1_scan
LSR.W #2,D1
MOVE.L (A0)+,D0
SUBQ.W #2,D1
.enc MOVE.L (A0)+,D2
EOR.L D2,D0
DBRA D1,.enc
AND.L D5,D0
RTS
_DecodeTwi1_CRC
MOVE.L (A0)+,D0
MOVE.L (A0)+,D1
AND.L D5,D0
AND.L D5,D1
ADD.L D0,D0
OR.L D1,D0
RTS
_DecodeTwi1
LEA (A0,D0.W),A1
LSR.W #2,D0
SUBQ.W #1,D0
.enc MOVE.L (A0)+,D1
MOVE.L (A1)+,D2
AND.L D5,D1
AND.L D5,D2
ADD.L D1,D1
OR.L D2,D1
MOVE.L D1,(A3)+
DBRA D0,.enc
RTS
;*************************************** End of Twiligh1 code
;******************************************************************************************
;****************************** Support for DOS TRACK ($1600) version by Galahad on 01/2004
;******************************************************************************************
_FileNameGen.MSG
db '00000000',0,0
even
DSK_1 dl DSK_2 ; Pointer to next disk structure
dw 1 ; Disk structure version
dw DFLG_NORESTRICTIONS ; Disk flags
dl TL_1 ; List of tracks which contain data
dl 0 ; UNUSED, ALWAYS SET TO 0!
dl FL_NULL ; List of files to be saved ; FL_DISKIMAGE
dl 0 ; Table of certain tracks with CRC values
dl 0 ; Alternative disk structure, if CRC failed
dl 0 ; Called before a disk is read
dl _SaveFileDisk1 ; Called after a disk has been read
DSK_2 dl DSK_3 ; Pointer to next disk structure
dw 1 ; Disk structure version
dw DFLG_NORESTRICTIONS ; Disk flags
dl TL_2 ; List of tracks which contain data
dl 0 ; UNUSED, ALWAYS SET TO 0!
dl FL_NULL ; List of files to be saved
dl 0 ; Table of certain tracks with CRC values
dl 0 ; Alternative disk structure, if CRC failed
dl 0 ; Called before a disk is read
dl _SaveFileDisk2 ; Called after a disk has been read
DSK_3 dl DSK_4 ; Pointer to next disk structure
dW 1 ; Disk structure version
DW DFLG_NORESTRICTIONS ; Disk flags
dl TL_2 ; List of tracks which contain data
dl 0 ; UNUSED, ALWAYS SET TO 0!
dl FL_NULL ; List of files to be saved
dl 0 ; Table of certain tracks with CRC values
dl 0 ; Alternative disk structure, if CRC failed
dl 0 ; Called before a disk is read
dl _SaveFileDisk3 ; Called after a disk has been read
DSK_4 dl 0 ; Pointer to next disk structure
dw 1 ; Disk structure version
dw DFLG_NORESTRICTIONS ; Disk flags
dl TL_2 ; List of tracks which contain data
dl 0 ; UNUSED, ALWAYS SET TO 0!
dl FL_NULL ; List of files to be saved
dl 0 ; Table of certain tracks with CRC values
dl 0 ; Alternative disk structure, if CRC failed
dl 0 ; Called before a disk is read
dl _SaveFileDisk4 ; Called after a disk has been read
;-------------------------- Track List DOS version ------------------
TL_1 TLENTRY 0,$50,$1600,SYNC_STD,DMFM_STD
TLEND
TL_2
TLENTRY 0,0,$1600,SYNC_STD,DMFM_STD
TLENTRY 1,1,$1600,SYNC_STD,DMFM_NULL
TLENTRY $2,$9f,$1600,SYNC_STD,DMFM_STD
TLEND
;-------------------------- Save files code DOS version ------------------
_SaveFileDisk4
LEA (_FileListD4,PC),A1
MOVEQ #$34,D7
BRA.B _SaveFileCommon
_SaveFileDisk3
LEA (_FileListD3,PC),A1
MOVEQ #$33,D7
BRA.B _SaveFileCommon
_SaveFileDisk2
LEA (_FileListD2,PC),A1
MOVEQ #$32,D7
BRA.B _SaveFileCommon
_SaveFileDisk1
LEA (_FileListD1,PC),A1
MOVEQ #$31,D7
_SaveFileCommon
.next MOVEM.L (A1)+,D0/D1
CMPI.L #-1,D0
BEQ.B .end
BSR.B _ConvertName_NUMtoASCII
MULU.W #$200,D0
LEA (_FileNameGen.MSG,PC),A0
MOVE.B D7,(A0)
JSR rawdic_SaveDiskFile(a5)
BRA.B .next
.end
MOVEQ #0,D0
RTS
_ConvertName_NUMtoASCII
MOVEM.L D0-D7/A0-A6,-(SP)
MOVEA.L A0,A1
LEA (_FileNameGen.MSG,PC),A2
MOVEA.L A2,A3
MOVE.L D0,D2
MOVEQ #7,D3
.enc ROL.L #4,D2
MOVE.L D2,D4
AND.L #15,D4
ADD.L #$30,D4
CMPI.L #$39,D4
BLS.B .skip
ADDQ.L #7,D4
.skip
MOVE.B D4,(A2)+
DBRA D3,.enc
MOVEM.L (SP)+,D0-D7/A0-A6
RTS
;-------------------------- File List DOS version ------------------
dw 0
_FileListD1
dl $040,$5B200
dl -1,-1
_FileListD2
dl $016,$20000
dl $116,$8A00
dl $15B,$3E00
dl $17A,$1EC00
dl $270,$8400
dl $2B2,$2600
dl $2C5,$1C800
dl $3A9,$6E00
dl $3E0,$1D800
dl $4CC,$8200
dl $50D,$E400
dl -1,-1
_FileListD3
dl $016,$2B000
dl $16E,$B000
dl $1C6,$5200
dl $1EF,$1A600
dl $2C2,$8000
dl $326,$1C400
dl $408,$7000
dl $440,$4400
dl $462,$1B400
dl $53C,$C800
dl $5A0,$9E00
dl -1,-1
_FileListD4
dl $016,$22000
dl $126,$7C00
dl $164,$3E00
dl $183,$20600
dl $286,$8800
dl $2CA,$2A00
dl $2DF,$1EE00
dl $3D6,$7200
dl $40F,$3C00
dl $42D,$1E800
dl $521,$9400
dl $56B,$2A00
dl $580,$9600
dl -1,-1
END