modified entry point for XHDI routines
This commit is contained in:
3
Makefile
3
Makefile
@@ -81,7 +81,8 @@ ASRCS= \
|
|||||||
$(SRCDIR)/mmu.S \
|
$(SRCDIR)/mmu.S \
|
||||||
$(SRCDIR)/exceptions.S \
|
$(SRCDIR)/exceptions.S \
|
||||||
$(SRCDIR)/supervisor.S \
|
$(SRCDIR)/supervisor.S \
|
||||||
$(SRCDIR)/illegal_instruction.S
|
$(SRCDIR)/illegal_instruction.S \
|
||||||
|
$(SRCDIR)/xhdi_vec.S
|
||||||
|
|
||||||
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
||||||
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ SECTIONS
|
|||||||
objs/illegal_instruction.o(.text)
|
objs/illegal_instruction.o(.text)
|
||||||
objs/xhdi_sd.o(.text)
|
objs/xhdi_sd.o(.text)
|
||||||
objs/xhdi_interface.o(text)
|
objs/xhdi_interface.o(text)
|
||||||
|
objs/xhdi_vec.o(text)
|
||||||
*(.data)
|
*(.data)
|
||||||
*(.bss)
|
*(.bss)
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ struct XHDICALL_args
|
|||||||
uint16_t opcode;
|
uint16_t opcode;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern unsigned long xhdi_call(struct XHDICALL_args stack);
|
extern unsigned long xhdi_call(struct XHDICALL_args *stack);
|
||||||
|
|
||||||
extern xhdi_call_fun xhdi_sd_install(xhdi_call_fun old_vector) __attribute__((__interrupt__));
|
extern xhdi_call_fun xhdi_sd_install(xhdi_call_fun old_vector) __attribute__((__interrupt__));
|
||||||
|
|
||||||
|
|||||||
@@ -29,10 +29,10 @@
|
|||||||
|
|
||||||
#define DRIVER_VERSION 0x130
|
#define DRIVER_VERSION 0x130
|
||||||
|
|
||||||
|
|
||||||
static BPB sd_bpb[4]; /* space for four partitions on SD card */
|
static BPB sd_bpb[4]; /* space for four partitions on SD card */
|
||||||
|
|
||||||
static xhdi_call_fun old_vector = NULL;
|
static xhdi_call_fun old_vector = NULL;
|
||||||
|
extern xhdi_call_fun xhdi_vec;
|
||||||
|
|
||||||
__attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov)
|
__attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov)
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@ __attribute__((__interrupt__)) xhdi_call_fun xhdi_sd_install(xhdi_call_fun ov)
|
|||||||
"move.l %[xhdi_call],d1\n\t"
|
"move.l %[xhdi_call],d1\n\t"
|
||||||
"move.l d1,(sp)\n\t" /* FIXME: dirty overwrite of saved register on stack with return value */
|
"move.l d1,(sp)\n\t" /* FIXME: dirty overwrite of saved register on stack with return value */
|
||||||
: /* output */
|
: /* output */
|
||||||
: [xhdi_call]"g"(xhdi_call)
|
: [xhdi_call]"g"(xhdi_vec)
|
||||||
: "d1","memory");
|
: "d1","memory");
|
||||||
|
|
||||||
*_drvbits |= (uint32_t) 1 << ('S' - 'A');
|
*_drvbits |= (uint32_t) 1 << ('S' - 'A');
|
||||||
|
|||||||
15
sources/xhdi_vec.S
Normal file
15
sources/xhdi_vec.S
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// XHDI entry point
|
||||||
|
//
|
||||||
|
.extern _xhdi_call
|
||||||
|
.globl _xhdi_vec
|
||||||
|
|
||||||
|
_xhdi_vec:
|
||||||
|
lea -12(sp),sp
|
||||||
|
movem.l d1/a0-a1,(sp)
|
||||||
|
pea 16(sp)
|
||||||
|
jsr _xhdi_call
|
||||||
|
addq.l #4,sp
|
||||||
|
movem.l (sp),d1/a0-a1
|
||||||
|
lea 12(sp),sp
|
||||||
|
rts
|
||||||
Reference in New Issue
Block a user