;ANGELS loader, Ripped from their “Dragon Breed” crack
;cleaned up + altered to let you set MFM buffer address -WK
;REMEMBER TO SET mfmptr TO POINT TO YOUR MFM BUFFER ADDRESS!
Angels_load:
movem.l d0-a6,-(a7) ; IN: a0=load addr, d0=filenumber
lea filetable(pc),a5
lsl.w #3,d0
move.l 4(a5,d0.w),d1 ; filesize
move.l (a5,d0.w),d0 ; offset
lea unk_705C8,a2
lea ($BFD100).l,a1
movea.l a0,a5
adda.l d1,a5 ; a5=load addr+filesize (for comparison later)
moveq #0,d3
moveq #0,d4
move.l d0,d5
divu.w #$1600,d5
move.w d5,d3
swap d5
move.w d5,d4
bsr.s sub_70326
bsr.w sub_703C8
bsr.w sub_7043C
bsr.w sub_70422
movem.l (a7)+,d0-a6
rts
sub_70326:
move.b #$7D,(a1)
nop
nop
bclr #3,(a1)
bsr.s sub_70338
clr.l d0
rts
sub_70338:
move.l d1,-(a7)
move.w #$8BD4,d1
bra.s loc_70344
sub_70340:
move.w #$864,d1
loc_70344:
move.b #8,$D00(a1)
move.b d1,$300(a1)
lsr.w #8,d1
move.b d1,$400(a1)
loc_70354:
btst #0,$C00(a1)
beq.s loc_70354
move.l (a7)+,d1
rts
sub_70360:
btst #4,($BFE001).l
beq.s loc_7037C
bset #1,(a1)
bsr.s sub_703AC
loc_70370:
btst #5,($BFE001).l
bne.s loc_70370
bra.s sub_70360
loc_7037C:
clr.b (a2)
rts
sub_70380:
move.b (a2),d0
addq.l #1,d0
move.b d0,(a2)
btst #0,d0
bne.s loc_703A6
bclr #1,(a1)
bsr.s sub_703AC
loc_70392:
btst #5,($BFE001).l
bne.s loc_70392
bset #2,(a1)
loc_703A0:
bsr.w sub_70338
rts
loc_703A6:
bclr #2,(a1)
bra.s loc_703A0
sub_703AC:
bclr #0,(a1)
nop
nop
bset #0,(a1)
bsr.w sub_70340
loc_703BC:
btst #5,($BFE001).l
bne.s loc_703BC
rts
sub_703C8:
movem.l d1-d2,-(a7)
cmpi.b #-1,(a2)
bne.s loc_703D8
bsr.w sub_70360
clr.b (a2)
loc_703D8:
clr.l d1
clr.l d2
move.b (a2),d1
move.b d3,d2
bset #2,(a1)
btst #0,d3
beq.s loc_703F2
bclr #2,(a1)
bsr.w sub_70338
loc_703F2:
lsr.w #1,d2
lsr.w #1,d1
sub.w d1,d2
bcs.s loc_70408
bhi.s loc_703FE
bra.s loc_7041A
loc_703FE:
bclr #1,(a1)
bsr.w sub_70338
bra.s loc_70412
loc_70408:
neg.w d2
bset #1,(a1)
bsr.w sub_70338
loc_70412:
bsr.w sub_703AC
subq.w #1,d2
bne.s loc_70412
loc_7041A:
move.b d3,(a2)
movem.l (a7)+,d1-d2
rts
sub_70422:
move.b #-3,(a1)
nop
nop
bclr #3,(a1)
nop
nop
bset #3,(a1)
bsr.w sub_70338
rts
sub_7043C:
moveq #4,d2
loc_7043E:
bsr.s sub_70488
tst.l d0
bne.s loc_7045A
bsr.w sub_70508
tst.l d0
bne.s loc_7045A
cmpa.l a0,a5
ble.s locret_70458
bsr.w sub_70380
moveq #4,d2
bra.s loc_7043E
locret_70458:
rts
loc_7045A:
bclr #1,(a1)
bsr.w sub_70338
bsr.w sub_703AC
bsr.w sub_70338
bset #1,(a1)
bsr.w sub_70338
bsr.w sub_703AC
bsr.w sub_70338
subq.l #1,d2
bne.s sub_7043C
loc_7047E:
move.w d0,($DFF180).l
subq.w #1,d0
bra.s loc_7047E
sub_70488:
movem.l d1-d2/a0-a2,-(a7)
loc_7048C:
lea ($DFF000).l,a6
; movea.l #$2000,a1 ;MFM Buff
move.l mfmptr(pc),d1
move.l d1,$20(a6)
; move.l a1,$20(a6)
move.w #$8010,$96(a6)
move.w #$7F00,$9E(a6)
move.w #$9500,$9E(a6)
move.w #$4000,$24(a6)
move.w #$4489,$7E(a6)
loc_704BA:
btst #5,($BFE001).l
bne.s loc_704BA
move.w #$9980,$24(a6)
move.w #$9980,$24(a6)
move.l #$20000,d1
move.w #2,$9C(a6)
loc_704DC:
move.w $1E(a6),d2
btst #1,d2
bne.s loc_704EE
subq.l #1,d1
bne.s loc_704DC
moveq #-1,d0
bra.s loc_704F6
loc_704EE:
moveq #0,d0
cmpi.w #$4489,(a1)
bne.s loc_7048C
loc_704F6:
move.w #$4000,$24(a6)
move.w #$10,$96(a6)
movem.l (a7)+,d1-d2/a0-a2
rts
sub_70508:
movem.l d1-d3/d5-d7/a1-a6,-(a7)
movea.l a0,a2
movea.l a0,a3
adda.l d4,a3
movea.l a0,a4
; movea.l #$2000,a1 ;MFM Buff
move.l mfmptr(pc),d5
move.l d5,a1
cmpi.w #$4489,(a1)
bne.s loc_70576
moveq #$A,d5
loc_70522:
bsr.s sub_7057C
tst.l d0
bne.s loc_7056A
moveq #$7F,d6
loc_7052A:
move.l $200(a1),d1
move.l (a1)+,d0
eor.l d0,d2
eor.l d1,d2
bsr.w sub_705B6
cmpa.l a3,a2
bge.s loc_70540
addq.l #4,a2
bra.s loc_7054C
loc_70540:
movea.l a2,a6
addq.l #4,a2
suba.l d4,a6
cmpa.l a5,a6
bge.s loc_7054C
move.l d0,(a6)+
loc_7054C:
dbf d6,loc_7052A
andi.l #$55555555,d2
cmp.l d2,d7
bne.s loc_70576
dbf d5,loc_70522
move.l #$1600,d0
sub.l d4,d0
adda.l d0,a0
clr.l d0
loc_7056A:
tst.l d0
bne.s loc_70576
clr.l d4
loc_70570:
movem.l (a7)+,d1-d3/d5-d7/a1-a6
rts
loc_70576:
movea.l a4,a0
moveq #-1,d0
bra.s loc_70570
sub_7057C:
move.w #$4489,d0
loc_70580:
cmp.w (a1)+,d0
bne.s loc_70580
cmp.w (a1),d0
bne.s loc_7058A
addq.l #2,a1
loc_7058A:
move.l $30(a1),d0
move.l $34(a1),d1
bsr.s sub_705B6
move.l d0,d7
move.l (a1),d0
move.l 4(a1),d1
bsr.s sub_705B6
lsr.w #8,d0
lea $38(a1),a1
add.w d0,d0
asl.w #8,d0
lea (a4,d0.w),a2
moveq #0,d0
clr.l d2
rts
moveq #-1,d0
rts
sub_705B6:
asl.l #1,d0
andi.l #$AAAAAAAA,d0
andi.l #$55555555,d1
or.l d1,d0
rts
; —————————————————————————
unk_705C8: dc.b 0
dc.b 0
mfmptr: dc.l $0 ;pointer to MFM buffer
Angels_loadend:
filetable: dc.l 0
dc.l 0
dc.l $2C00
dc.l $91AC
dc.l $BDAC
dc.l $85DC
dc.l $14388
dc.l $70F4
dc.l $1B47C
dc.l $60A4
dc.l $21520
dc.l $67AC
dc.l $27CCC
dc.l $686C
dc.l $2E538
dc.l $6958
dc.l $34E90
dc.l $4200
dc.l $39090
dc.l $3978
dc.l $3CA08
dc.l $C6D0
dc.l $490D8
dc.l $46F0
dc.l $4D7C8
dc.l $7FF0
dc.l $557B8
dc.l $18E0
dc.l $57098
dc.l $7D20
dc.l $5EDB8
dc.l $44FE0
dc.l $A3D98
dc.l $2C0C
dc.l $A69A4
dc.l $7D00
Angels Loader
;ANGELS loader, Ripped from their “Dragon Breed” crack
<-- Sting’s HARDWARE TRACKLOADER | [ Code ]
<-- Sting’s HARDWARE TRACKLOADER | [ Code ] | Beyond the Ice Palace -->