orig-boot
By Archeologist: Patrik Sevallius
After running the protection, this is what we end up with, the original boot block in all it's glory:
bootblock: dc.b 'DOS',0
checksum: dc.l $D5245E13
rootblock: dc.l 0
sub_59F4:
bra.s loc_5A10
dc.b $19
dc.b 2
dc.b 1
dc.b 0
dc.b 0
dc.b $E0
dc.b 6
dc.b 2
dc.b 3
dc.b 0
dc.b $B
dc.b 0
dc.b 2
dc.b 0
dc.b 0
dc.b 2
dc.b $4B
dc.b $32
dc.b 0
dc.b $16
dc.b 0
dc.b $55
dc.b 1
dc.b $C4
dc.b $FF
dc.b 0
loc_5A10:
lea (unk_DFF000).l,a4
move.w #$7FFF,$9A(a4)
move.w #$7FFF,$96(a4)
lea $180(a4),a0
moveq #15,d0
loc_5A28:
clr.l (a0)+
dbf d0,loc_5A28
lea (relocation).w,a5
lea loc_5A3C,a0
move.l a0,(dword_80).w
trap #0
loc_5A3C:
movea.l a5,sp
movea.l a5,a0
lea bootblock,a1
move.w #$FF,d0
loc_5A48:
move.l (a1)+,(a0)+
dbf d0,loc_5A48
jmp $6A(a5)
sub_5A52:
lea (copperlist+$2E),a0
lea $4480(a5),a1
move.l a1,d1
moveq #$28,d2
moveq #3,d0
loc_5A60:
move.w d1,4(a0)
swap d1
move.w d1,(a0)
swap d1
add.l d2,d1
addq.l #8,a0
dbf d0,loc_5A60
lea copperlist,a0
move.l a0,$80(a4)
clr.w $88(a4)
move.w #$8280,$96(a4)
lea $4400(a5),a3
move.w $20(a5),d3
beq.s loc_5A9A
moveq #$3F,d5
bsr.w sub_5BAE
moveq #1,d5
moveq #1,d6
bsr.s sub_5AB8
loc_5A9A:
move.w $22(a5),d3
loc_5A9E:
beq.s loc_5A9E
move.w $24(a5),d5
move.l a3,-(sp)
bsr.w sub_5BAE
move.w $20(a5),d0
beq.s locret_5AB6
moveq #$10,d5
moveq #$FFFFFFFF,d6
bsr.s sub_5AB8
locret_5AB6:
rts
sub_5AB8:
move.w #$20,$9C(a4)
loc_5ABE:
btst #5,$1F(a4)
beq.s loc_5ABE
lea $4404(a5),a0
lea (copperlist+$4E),a1
move.b d5,d0
moveq #$B,d1
asl.w d1,d0
moveq #$F,d4
loc_5AD6:
move.w (a0)+,d1
add.w d1,d1
moveq #$1E,d2
and.w d1,d2
mulu.w d0,d2
swap d2
move.w #$1E0,d3
and.w d1,d3
mulu.w d0,d3
swap d3
andi.w #$F0,d3
or.w d3,d2
clr.b d1
mulu.w d0,d1
swap d1
move.b d2,d1
move.w d1,(a1)
lea 4(a1),a1
dbf d4,loc_5AD6
add.b d6,d5
cmp.b #$10,d5
bls.s sub_5AB8
rts
copperlist: dc.w 1,$FF7E
dc.w $96, $100
dc.w $8E,$2C81
dc.w $90, $C1
dc.w $92, $38
dc.w $94, $D0
dc.w $100,$4200
dc.w $102, 0
dc.w $104, 0
dc.w $108, $78
dc.w $10A, $78
dc.w $E0, 0
dc.w $E2, 0
dc.w $E4, 0
dc.w $E6, 0
dc.w $E8, 0
dc.w $EA, 0
dc.w $EC, 0
dc.w $EE, 0
dc.w $180, 0
dc.w $182, 0
dc.w $184, 0
dc.w $186, 0
dc.w $188, 0
dc.w $18A, 0
dc.w $18C, 0
dc.w $18E, 0
dc.w $190, 0
dc.w $192, 0
dc.w $194, 0
dc.w $196, 0
dc.w $198, 0
dc.w $19A, 0
dc.w $19C, 0
dc.w $19E, 0
dc.w $3701,$FF7E
dc.w $96,$8100
dc.w $FF01,$FF7E
dc.w $96, $100
dc.w $FF7F,$FF7E
sub_5BAE:
ext.l d3
divu.w #$B,d3
move.w d3,d4
swap d3
loc_5BB8:
moveq #$B,d6
ext.l d3
divu.w d6,d3
swap d3
sub.w d3,d6
sub.w d6,d5
bpl.s loc_5BCA
add.w d5,d6
clr.w d5
loc_5BCA:
movem.l d2-d7/a2-a3/a6,-(sp)
lea (CIA_offset).l,a1
moveq #2,d7
lea $26(a5),a6
moveq #$79,d0
lsr.w #1,d4
bcs.s loc_5BE2
moveq #$7D,d0
loc_5BE2:
move.b d0,$100(a1) ; CIA_B_PRB
nop
andi.b #$F7,d0
move.b d0,$100(a1) ; CIA_B_PRB
move.b d0,$A(a5)
move.b #$9C,$400(a1) ; CIA_B_TALO
move.b #$AE,$500(a1) ; CIA_B_TAHI 0xae9c = 63ms
bsr.w start_timer_A_and_wait_for_eqpiration
move.w d4,2(a5)
move.w d3,4(a5)
move.w d6,(a5)
move.l a3,6(a5)
tst.w (a6)
bpl.s loc_5C1A
bsr.w find_track_0
loc_5C1A:
bsr.w step_x_steps_in_y_dir
move.w #$8210,$96(a4)
move.w #$4489,$7E(a4)
move.w #$9500,$9E(a4)
move.w #$4000,$24(a4)
move.w #2,$9C(a4)
lea $406(a5),a0
clr.l (a0)
move.l a0,$20(a4)
moveq #$A,d0
loc_5C48:
clr.w $438(a0)
lea $440(a0),a0
dbf d0,loc_5C48
move.b $D00(a1),d0 ; CIA_B_ICR
loc_5C58:
btst #ICR_FLG,$D00(a1) ; CIA_B_ICR
beq.s loc_5C58
move.w #$9F40,$24(a4)
move.w #$9F40,$24(a4)
move.w 4(a5),d5
move.w (a5),d6
lea $400(a5),a2
move.w #$440,d0
mulu.w d5,d0
adda.w d0,a2
movea.l 6(a5),a3
move.l #$186A0,d3
bra.s loc_5CA2
loc_5C8A:
subq.l #1,d3
beq.s loc_5CCE
tst.w $43E(a2)
beq.s loc_5C8A
bsr.s MFM_decode
bmi.s loc_5CCE
lea $440(a2),a2
lea $200(a3),a3
addq.w #1,d5
loc_5CA2:
dbf d6,loc_5C8A
loc_5CA6:
btst #1,$1F(a4)
beq.s loc_5CA6
bsr.w delay_3ms
move.w #$4000,$24(a4)
movem.l (sp)+,d2-d7/a2-a3/a6
add.w d6,d3
addq.w #1,d4
mulu.w #$200,d6
adda.w d6,a3
tst.w d5
bne.w loc_5BB8
rts
loc_5CCE:
bsr.w delay_3ms
bsr.w find_track_0_
dbf d7,loc_5C1A
move.w #$A00,$174(a5)
move.w #$7FFF,$96(a4)
loc_5CE6:
bra.s loc_5CE6
MFM_decode:
movem.l d2-d4/a1/a3,-(sp)
move.l #$55555555,d3
lea $40(a2),a0
lea $200(a0),a1
moveq #127,d4
loop:
move.l (a0)+,d0
move.l (a1)+,d1
and.l d3,d0
and.l d3,d1
add.l d0,d0
or.l d1,d0
move.l d0,(a3)+
dbf d4,loop
moveq #0,d0
bra.s loc_5D14
moveq #$FFFFFFFF,d0
loc_5D14:
movem.l (sp)+,d2-d4/a1/a3
rts
sub_5D1A:
move.l (a0)+,d0
move.l (a0)+,d1
and.l d3,d0
and.l d3,d1
add.l d0,d0
or.l d1,d0
rts
find_track_0_:
bsr.s find_track_0
step_x_steps_in_y_dir:
lea step_out,a2
move.w 2(a5),d2
sub.w (a6),d2
bpl.s decrement
lea step_in,a2
neg.w d2
bra.s decrement
step:
jsr (a2)
decrement:
dbf d2,step
move.w 2(a5),(a6)
bra.s loop
find_track_0:
bra.s check_for_track_0
loop:
bsr.s step_in
bsr.s delay_3ms
check_for_track_0:
btst #PRA_TK0,(CIA_A_PRA_0).l
bne.s loop
clr.w (a6)
bra.s loop
step_out:
moveq #0,d1
bra.s step
step_in:
moveq #DIR,d1
step:
moveq #SIDE|SEL0|SEL1|SEL2|SEL3,d0
and.b $A(a5),d0
or.b d1,d0
move.b d0,$100(a1) ; CIA_B_PRB
nop
addq.b #STEP,d0 ; CIA_B_PRB
move.b d0,$100(a1)
bsr.s delay_3ms
loop:
btst #PRA_RDY,(CIA_A_PRA_0).l
bne.s loop
rts
delay_3ms:
move.b #$50,$400(a1) ; CIA_B_TALO
move.b #9,$500(a1) ; CIA_B_TAHI 0x950 = 3ms
start_timer_A_and_wait_for_eqpiration:
move.b #START|RUNMODE|LOAD,$E00(a1) ; CIA_B_CRA
loc_5D98:
btst #ICR_TA,$D00(a1) ; CIA_B_ICR
beq.s loc_5D98
rts