diff --git a/sd-emutos/xhdi.h b/sd-emutos/xhdi.h index ebf55f8..3f0318a 100644 --- a/sd-emutos/xhdi.h +++ b/sd-emutos/xhdi.h @@ -136,33 +136,33 @@ __extension__ \ }); /* XHDI #3 */ -#define xhdi_lock(xhdi_entry, major, minor, do_lock, key) \ +#define XHLock(xhdi_entry, major, minor, do_lock, key) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ \ __asm__ volatile( \ - "move.w #XHDI_LOCK,-(sp)\n\t" \ - "move.w [major],-(sp)\n\t" \ - "move.w [minor],-(sp)\n\t" \ - "move.w [do_lock],-(sp)\n\t" \ - "move.w [key],-(sp)\n\t" \ - "lea %[entry],a0\n\t" \ + "move.w %[a_key],-(sp)\n\t" \ + "move.w %[a_do_lock],-(sp)\n\t" \ + "move.w %[a_minor],-(sp)\n\t" \ + "move.w %[a_major],-(sp)\n\t" \ + "move.w #3,-(sp)\n\t" \ + "move.l %[entry],a0\n\t" \ "jsr (a0)\n\t" \ "lea 10(sp),sp\n\t" \ : "=r"(retvalue) /* outputs */ \ - : [xhdi_entry]"g"(xhdi_entry), \ - [major]"g"(major), \ - [minor]"g"(minor), \ - [do_lock]"g"(do_lock), \ - [key]"g"(key), \ + : [entry]"g"(xhdi_entry), \ + [a_major]"g"(major), \ + [a_minor]"g"(minor), \ + [a_do_lock]"g"(do_lock), \ + [a_key]"g"(key) \ : CLOBBER_REGISTERS /* clobbered regs */ \ ); \ retvalue; \ -}); +}) /* XHDI #4 */ -#define xhdi_stop(xhdi_entry, major, minor, do_stop, key) \ +#define XHStop(xhdi_entry, major, minor, do_stop, key) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ @@ -189,31 +189,30 @@ __extension__ \ }); /* XHDI #5 */ -#define xhdi_eject(xhdi_entry, major, minor, do_eject, key) \ +#define XHEject(xhdi_entry, major, minor, do_eject, key) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ \ __asm__ volatile( \ - "move.w #XHDI_EJECT,-(sp)\n\t" \ - "move.w [major],-(sp)\n\t" \ - "move.w [minor],-(sp)\n\t" \ - "move.w [do_eject],-(sp)\n\t" \ - "move.w [key],-(sp)\n\t" \ - "lea %[entry],a0\n\t" \ + "move.w %[a_key],-(sp)\n\t" \ + "move.w %[a_do_eject],-(sp)\n\t" \ + "move.w %[a_minor],-(sp)\n\t" \ + "move.w %[a_major],-(sp)\n\t" \ + "move.w #5,-(sp)\n\t" \ + "move.l %[entry],a0\n\t" \ "jsr (a0)\n\t" \ "lea 10(sp),sp\n\t" \ : "=r"(retvalue) /* outputs */ \ - : [xhdi_entry]"g"(xhdi_entry), \ - [major]"g"(major), \ - [minor]"g"(minor), \ - [do_stop]"g"(do_eject), \ - [key]"g"(key), \ + : [entry]"g"(xhdi_entry), \ + [a_major]"g"(major), \ + [a_minor]"g"(minor), \ + [a_do_eject]"g"(do_eject), \ + [a_key]"g"(key) \ : CLOBBER_REGISTERS /* clobbered regs */ \ - AND_MEMORY \ ); \ retvalue; \ -}); +}) /* XHDI #6 */ #define XHDrvMap(xhdi_entry) \ diff --git a/sd-emutos/xhdi_test.c b/sd-emutos/xhdi_test.c index 4ed4345..124d644 100644 --- a/sd-emutos/xhdi_test.c +++ b/sd-emutos/xhdi_test.c @@ -40,14 +40,14 @@ int getcookie(uint32_t cookie, uint32_t *p_value) 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\trecsiz = %u\r\n", bpb->recsiz); + printf("\t\tclsiz = %u\r\n", bpb->clsiz); + printf("\t\tclsizb = %u\r\n", bpb->clsizb); + printf("\t\trdlen = %u\r\n", bpb->rdlen); + printf("\t\tfsiz = %u\r\n", bpb->fsiz); + printf("\t\tfatrec = %u\r\n", bpb->fatrec); + printf("\t\tdatrec = %u\r\n", bpb->datrec); + printf("\t\tnumcl = %u\r\n", bpb->numcl); printf("\t\tbflags = %x\r\n", bpb->bflags); } void xhdi_test(void) @@ -76,11 +76,15 @@ void xhdi_test(void) 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); + printf("\tmajor = %x, minor = %x, start_sector = %lx, bpb = %p\r\n", major, minor, start_sector, bpb); + /* if (bpb != NULL) + print_bpb(bpb); */ + + printf("trying to eject device major = %u, minor = %u. result = %ld\r\n", major, minor, XHEject(xhdi, major, minor, 1, 1)); + printf("trying to lock device major = %u, minor = %u. result = %ld\r\n", major, minor, XHLock(xhdi, major, minor, 1, 1)); } } + bpb = NULL; } } int main(int argc, char *argv[])