diff --git a/sd-emutos/Makefile b/sd-emutos/Makefile index 8a14935..09dd123 100644 --- a/sd-emutos/Makefile +++ b/sd-emutos/Makefile @@ -6,7 +6,7 @@ TOOLCHAIN_PREFIX=m68k-atari-mint- CC=$(TOOLCHAIN_PREFIX)gcc -CFLAGS=-mcpu=547x \ +CFLAGS=-mcpu=68030 \ -Os \ -fomit-frame-pointer \ -g \ @@ -27,7 +27,7 @@ $(APP): $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) -o $(APP) test: xhdi_test.c - $(CC) $(CFLAGS) -Wl,-traditional-format xhdi_test.c -o xhdi_test.prg + $(CC) $(CFLAGS) -Wl,-traditional-format xhdi_test.c -o xhditest.prg .PHONY clean: - rm -rf *.o $(APP) \ No newline at end of file diff --git a/sd-emutos/xhdi.h b/sd-emutos/xhdi.h index 7c95ae9..ebf55f8 100644 --- a/sd-emutos/xhdi.h +++ b/sd-emutos/xhdi.h @@ -58,7 +58,8 @@ extern long xhdi_entrypoint; -#define CLOBBER_REGISTERS __CLOBBER_RETURN("d0") "d1", "d2", "d3", "d4", "d5", "d6", "a0", "a1", "a2", "a3", "a4", "a5", "a6" +#define CLOBBER_REGISTERS "memory" /* */ + /* XHDI #0 */ #define XHGetVersion(xhdi_entry) \ __extension__ \ @@ -71,9 +72,8 @@ __extension__ \ "jsr (a0)\n\t" \ "addq.l #2,sp\n\t" \ : [retvalue]"=r"(retvalue) /* outputs */ \ - : [entry] "m" (xhdi_entry) /* inputs */ \ + : [entry] "g" (xhdi_entry) /* inputs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \ - AND_MEMORY \ ); \ retvalue; \ }) @@ -157,7 +157,6 @@ __extension__ \ [do_lock]"g"(do_lock), \ [key]"g"(key), \ : CLOBBER_REGISTERS /* clobbered regs */ \ - AND_MEMORY \ ); \ retvalue; \ }); @@ -230,7 +229,6 @@ __extension__ \ : [retvalue] "=r" (retvalue)/* outputs */ \ : [entry] "m" (xhdi_entry) /* inputs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \ - AND_MEMORY \ ); \ retvalue; \ }) @@ -243,12 +241,12 @@ __extension__ \ register long retvalue __asm__("d0"); \ \ __asm__ volatile( \ - "move.w #7,-(sp)\n\t" \ - "move.w %[a_bios_device],-(sp)\n\t" \ - "move.l %[a_major],-(sp)\n\t" \ - "move.l %[a_minor],-(sp)\n\t" \ - "move.l %[a_start_sector],-(sp)\n\t" \ "move.l %[a_bpb],-(sp)\n\t" \ + "move.l %[a_start_sector],-(sp)\n\t" \ + "move.l %[a_minor],-(sp)\n\t" \ + "move.l %[a_major],-(sp)\n\t" \ + "move.w %[a_bios_device],-(sp)\n\t" \ + "move.w #7,-(sp)\n\t" \ "move.l %[a_entry],a0\n\t" \ "jsr (a0)\n\t" \ "lea 20(sp),sp\n\t" \ @@ -260,7 +258,6 @@ __extension__ \ [a_start_sector]"g"(start_sector), \ [a_bpb]"g"(bpb) \ : CLOBBER_REGISTERS /* clobbered regs */ \ - AND_MEMORY \ ); \ retvalue; \ }) diff --git a/sd-emutos/xhdi_test.c b/sd-emutos/xhdi_test.c index 8f22698..4ed4345 100644 --- a/sd-emutos/xhdi_test.c +++ b/sd-emutos/xhdi_test.c @@ -38,6 +38,18 @@ int getcookie(uint32_t cookie, uint32_t *p_value) return 0; } +void print_bpb(_BPB *bpb) +{ + printf("\t\trecsiz = %d\r\n", bpb->recsiz); + printf("\t\tclsiz = %d\r\n", bpb->clsiz); + printf("\t\tclsizb = %d\r\n", bpb->clsizb); + printf("\t\trdlen = %d\r\n", bpb->rdlen); + printf("\t\tfsiz = %d\r\n", bpb->fsiz); + printf("\t\tfatrec = %d\r\n", bpb->fatrec); + printf("\t\tdatrec = %d\r\n", bpb->datrec); + printf("\t\tnumcl = %d\r\n", bpb->numcl); + printf("\t\tbflags = %x\r\n", bpb->bflags); +} void xhdi_test(void) { long drvmap; @@ -56,15 +68,17 @@ void xhdi_test(void) uint16_t minor = 0; long start_sector = 0L; uint32_t ret; - _BPB *bpb = NULL; + _BPB *bpb; if ((drvmap >> i) & 1) { ret = XHInqDev(xhdi, i, &major, &minor, &start_sector, &bpb); - //if (ret == E_OK) + if (ret == E_OK || ret == EDRVNR) { printf("drive %d returned %d:\r\n", i, ret); printf("\tmajor = %d, minor = %d, start_sector = %lx, bpb = %p\r\n", major & 0xff, minor & 0xff, start_sector, bpb); + if (bpb != NULL) + print_bpb(bpb); } } }