49 lines
1.1 KiB
ArmAsm
49 lines
1.1 KiB
ArmAsm
; Simple working bootblock
|
|
MACHINE 68000
|
|
ORG 0
|
|
|
|
dc.b 'D','O','S',0 ; DOS magic
|
|
dc.l 0 ; Checksum
|
|
dc.l 880 ; Rootblock
|
|
|
|
; Boot code - a1=IORequest, a6=ExecBase
|
|
boot_start:
|
|
; Save IORequest pointer (PC-relative)
|
|
lea SavedA1(pc),a0
|
|
move.l a1,(a0)
|
|
|
|
; Load game from disk
|
|
move.w #2,28(a1) ; CMD_READ
|
|
move.l #$20000,40(a1) ; io_Data
|
|
move.l #11776,36(a1) ; io_Length (Exact game size)
|
|
move.l #1024,44(a1) ; io_Offset
|
|
|
|
jsr -456(a6) ; DoIO
|
|
|
|
; Check for Error
|
|
tst.l d0
|
|
bne.s .loadError
|
|
|
|
; Restore IORequest pointer
|
|
lea SavedA1(pc),a0
|
|
move.l (a0),a1
|
|
|
|
; Turn off motor
|
|
move.w #9,28(a1) ; CMD_MOTOR
|
|
move.l #0,36(a1)
|
|
jsr -456(a6) ; DoIO
|
|
|
|
; Jump to game
|
|
jmp $20000
|
|
|
|
.loadError:
|
|
; Error: Magenta Screen Loop
|
|
move.w #$F0F,$dff180
|
|
bra.s .loadError
|
|
|
|
SavedA1:
|
|
dc.l 0
|
|
|
|
; Pad to 1024 bytes
|
|
dcb.b 1024-(*-0),0
|