mirror of
https://github.com/LIV2/lide.device.git
synced 2025-12-06 00:32:45 +00:00
Mounter: Support fake ConfigDev
Needed when booting from non-autoconfig devices / ROM
This commit is contained in:
parent
a3900a01ee
commit
cbeb5e5cbc
3
Makefile
3
Makefile
@ -49,7 +49,8 @@ OBJ = device.o \
|
|||||||
mounter.o \
|
mounter.o \
|
||||||
debug.o
|
debug.o
|
||||||
|
|
||||||
ASMOBJ = endskip.o
|
ASMOBJ = bootblock.o \
|
||||||
|
endskip.o
|
||||||
|
|
||||||
SRCS = $(OBJ:%.o=%.c)
|
SRCS = $(OBJ:%.o=%.c)
|
||||||
SRCS += $(ASMOBJ:%.o=%.S)
|
SRCS += $(ASMOBJ:%.o=%.S)
|
||||||
|
|||||||
14
bootblock.S
Normal file
14
bootblock.S
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
.globl _bootblock, _bootblock_end
|
||||||
|
|
||||||
|
_bootblock: lea DosName(PC),A1
|
||||||
|
jsr -96(A6) /* FindResident */
|
||||||
|
tst.l D0
|
||||||
|
beq.s fail
|
||||||
|
move.l D0,A0
|
||||||
|
move.l 22(A0),A0 /* RT_INIT */
|
||||||
|
jsr (A0)
|
||||||
|
fail: rts
|
||||||
|
|
||||||
|
DosName: .asciz "dos.library"
|
||||||
|
|
||||||
|
_bootblock_end:
|
||||||
10
mounter.c
10
mounter.c
@ -60,8 +60,8 @@
|
|||||||
#define MAX_BLOCKSIZE 2048
|
#define MAX_BLOCKSIZE 2048
|
||||||
#define LSEG_DATASIZE (512 / 4 - 5)
|
#define LSEG_DATASIZE (512 / 4 - 5)
|
||||||
|
|
||||||
|
#define NO_CONFIGDEV 1
|
||||||
#if NO_CONFIGDEV
|
#if NO_CONFIGDEV
|
||||||
extern UBYTE entrypoint, entrypoint_end;
|
|
||||||
extern UBYTE bootblock, bootblock_end;
|
extern UBYTE bootblock, bootblock_end;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -751,8 +751,8 @@ static void CreateFakeConfigDev(struct MountData *md)
|
|||||||
|
|
||||||
configDev = AllocConfigDev();
|
configDev = AllocConfigDev();
|
||||||
if (configDev) {
|
if (configDev) {
|
||||||
configDev->cd_BoardAddr = (void*)&entrypoint;
|
configDev->cd_BoardAddr = NULL;
|
||||||
configDev->cd_BoardSize = (UBYTE*)&entrypoint_end - (UBYTE*)&entrypoint;
|
configDev->cd_BoardSize = 0;
|
||||||
configDev->cd_Rom.er_Type = ERTF_DIAGVALID;
|
configDev->cd_Rom.er_Type = ERTF_DIAGVALID;
|
||||||
ULONG bbSize = &bootblock_end - &bootblock;
|
ULONG bbSize = &bootblock_end - &bootblock;
|
||||||
ULONG daSize = sizeof(struct DiagArea) + bbSize;
|
ULONG daSize = sizeof(struct DiagArea) + bbSize;
|
||||||
@ -762,7 +762,9 @@ static void CreateFakeConfigDev(struct MountData *md)
|
|||||||
diagArea->da_BootPoint = sizeof(struct DiagArea);
|
diagArea->da_BootPoint = sizeof(struct DiagArea);
|
||||||
diagArea->da_Size = (UWORD)daSize;
|
diagArea->da_Size = (UWORD)daSize;
|
||||||
copymem(diagArea + 1, &bootblock, bbSize);
|
copymem(diagArea + 1, &bootblock, bbSize);
|
||||||
*((ULONG*)&configDev->cd_Rom.er_Reserved0c) = (ULONG)diagArea;
|
// cd_Rom.er_Reserved0c is used as a pointer to diagArea by strap
|
||||||
|
ULONG *da_Pointer = (ULONG *)&configDev->cd_Rom.er_Reserved0c;
|
||||||
|
*da_Pointer = (ULONG)diagArea;
|
||||||
cacheclear(md);
|
cacheclear(md);
|
||||||
}
|
}
|
||||||
md->configDev = configDev;
|
md->configDev = configDev;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user