From 0eec0e96085772aa4050d9e85d53e7c4eed609a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Sat, 4 May 2013 17:51:10 +0000 Subject: [PATCH] can now test a few functions --- sd-emutos/Makefile | 3 +- sd-emutos/xhdi.h | 77 ++++++++++++++++++++++--------------------- sd-emutos/xhdi_test.c | 39 +++++++++++++++++++--- 3 files changed, 76 insertions(+), 43 deletions(-) diff --git a/sd-emutos/Makefile b/sd-emutos/Makefile index 77f0d64..8a14935 100644 --- a/sd-emutos/Makefile +++ b/sd-emutos/Makefile @@ -6,8 +6,9 @@ TOOLCHAIN_PREFIX=m68k-atari-mint- CC=$(TOOLCHAIN_PREFIX)gcc -CFLAGS=-mcpu=68000 \ +CFLAGS=-mcpu=547x \ -Os \ + -fomit-frame-pointer \ -g \ -Wno-multichar\ -Wall diff --git a/sd-emutos/xhdi.h b/sd-emutos/xhdi.h index 5ba7664..7c95ae9 100644 --- a/sd-emutos/xhdi.h +++ b/sd-emutos/xhdi.h @@ -58,8 +58,9 @@ extern long xhdi_entrypoint; +#define CLOBBER_REGISTERS __CLOBBER_RETURN("d0") "d1", "d2", "d3", "d4", "d5", "d6", "a0", "a1", "a2", "a3", "a4", "a5", "a6" /* XHDI #0 */ -#define xhdi_version(xhdi_entry) \ +#define XHGetVersion(xhdi_entry) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ @@ -71,7 +72,7 @@ __extension__ \ "addq.l #2,sp\n\t" \ : [retvalue]"=r"(retvalue) /* outputs */ \ : [entry] "m" (xhdi_entry) /* inputs */ \ - : __CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -101,7 +102,7 @@ __extension__ \ [block_size]"g"(block_size), \ [flags]"g"(flags), \ [product_name]"g"(product_name) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -128,7 +129,7 @@ __extension__ \ [minor]"g"(minor), \ [do_reserve]"g"(do_reserve), \ [key]"g"(key), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -155,7 +156,7 @@ __extension__ \ [minor]"g"(minor), \ [do_lock]"g"(do_lock), \ [key]"g"(key), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -182,7 +183,7 @@ __extension__ \ [minor]"g"(minor), \ [do_stop]"g"(do_stop), \ [key]"g"(key), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -209,14 +210,14 @@ __extension__ \ [minor]"g"(minor), \ [do_stop]"g"(do_eject), \ [key]"g"(key), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ }); /* XHDI #6 */ - #define xhdi_drivemap(xhdi_entry) \ + #define XHDrvMap(xhdi_entry) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ @@ -227,8 +228,8 @@ __extension__ \ "jsr (a0)\n\t" \ "addq.l #2,sp\n\t" \ : [retvalue] "=r" (retvalue)/* outputs */ \ - : [entry] "a" (xhdi_entry) /* inputs */ \ - : __CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : [entry] "m" (xhdi_entry) /* inputs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -236,27 +237,29 @@ __extension__ \ #define e_xhdi_drivemap xhdi_drivemap(xhdi_entrypoint) /* XHDI #7 */ -#define xhdi_inquire_device(xhdi_entry, major, minor, start_sector, bpb) \ +#define XHInqDev(xhdi_entry, bios_device, major, minor, start_sector, bpb) \ __extension__ \ ({ \ register long retvalue __asm__("d0"); \ \ __asm__ volatile( \ - "move.w #XHDI_INQUIRE_DEVICE,-(sp)\n\t" \ - "move.w [major],-(sp)\n\t" \ - "move.w [minor],-(sp)\n\t" \ - "lea [start_sector],-(sp)\n\t" \ - "lea [bpb],-(sp)\n\t" \ - "lea %[entry],a0\n\t" \ + "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_entry],a0\n\t" \ "jsr (a0)\n\t" \ - "lea 14(sp),sp\n\t" \ - : "=r"(retvalue) /* outputs */ \ - : [xhdi_entry]"g"(xhdi_entry), \ - [major]"g"(major), \ - [minor]"g"(minor), \ - [start_sector]"g"(start_sector), \ - [bpb]"g"(bpb), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + "lea 20(sp),sp\n\t" \ + : [retvalue]"=r"(retvalue) /* outputs */ \ + : [a_entry]"g"(xhdi_entry), \ + [a_bios_device]"g"(bios_device), \ + [a_major]"g"(major), \ + [a_minor]"g"(minor), \ + [a_start_sector]"g"(start_sector), \ + [a_bpb]"g"(bpb) \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -286,7 +289,7 @@ __extension__ \ [company]"g"(company), \ [ahdi_version]"g"(ahdi_version), \ [max_ipl]"g"(max_ipl), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -306,7 +309,7 @@ __extension__ \ "addq.l #6,sp\n\t" \ : "=r"(retvalue) /* outputs */ \ : [newcookie]"g"(newcookie) /* inputs */ \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -338,7 +341,7 @@ __extension__ \ [recno]"g"(recno), \ [count]"g"(count), \ [buf]"g"(buf) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -370,7 +373,7 @@ __extension__ \ [device_flags]"g"(device_flags), \ [product_name]"g"(product_name), \ [stringlen]"g"(stringlen) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -403,7 +406,7 @@ __extension__ \ [bpb]"g"(bpb), \ [blocks]"g"(blocks), \ [partid]"g"(partid) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -430,7 +433,7 @@ __extension__ \ [key2]"g"(key2), \ [subopcode]"g"(subopcode), \ [data]"g"(data) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -457,7 +460,7 @@ __extension__ \ [minor]"g"(minor), \ [blocks]"g"(blocks), \ [bs]"g"(bs) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -480,7 +483,7 @@ __extension__ \ : [xhdi_entry]"g"(xhdi_entry), \ [major]"g"(major), \ [minor]"g"(minor), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -503,7 +506,7 @@ __extension__ \ : [xhdi_entry]"g"(xhdi_entry), \ [opcode]"g"(opcode), \ [data]"g"(data), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -526,7 +529,7 @@ __extension__ \ : [xhdi_entry]"g"(xhdi_entry), \ [which]"g"(which), \ [limit]"g"(limit), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -551,7 +554,7 @@ __extension__ \ [major]"g"(major), \ [minor]"g"(minor), \ [ms]"g"(ms) \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ @@ -574,7 +577,7 @@ __extension__ \ : [xhdi_entry]"g"(xhdi_entry), \ [major]"g"(major), \ [minor]"g"(minor), \ - : CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ + : CLOBBER_REGISTERS /* clobbered regs */ \ AND_MEMORY \ ); \ retvalue; \ diff --git a/sd-emutos/xhdi_test.c b/sd-emutos/xhdi_test.c index dcf465b..8f22698 100644 --- a/sd-emutos/xhdi_test.c +++ b/sd-emutos/xhdi_test.c @@ -38,21 +38,50 @@ int getcookie(uint32_t cookie, uint32_t *p_value) return 0; } +void xhdi_test(void) +{ + long drvmap; + int i; + + printf("XHDI cookie: %p\r\n\r\n", xhdi); + + printf("XHGetVersion = %lx\r\n", XHGetVersion(xhdi)); + drvmap = XHDrvMap(xhdi); + printf("XHDrvmap = %lx\r\n", drvmap); + + printf("XHInqDev for all XHDI devices\r\n"); + for (i = 0; i < 32; i++) + { + uint16_t major = 0; + uint16_t minor = 0; + long start_sector = 0L; + uint32_t ret; + _BPB *bpb = NULL; + + if ((drvmap >> i) & 1) + { + ret = XHInqDev(xhdi, i, &major, &minor, &start_sector, &bpb); + //if (ret == E_OK) + { + 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); + } + } + } +} int main(int argc, char *argv[]) { (void) Cconws("\033EGCC XHDI Test Program\r\n=====================\r\n\r\n"); if (getcookie('XHDI', (uint32_t *) &xhdi)) { - printf("XHDI cookie: %p\r\n", xhdi); - - printf("xhdi version : %ld\r\n", xhdi_version(xhdi)); - printf("xhdi drivemap: %lx\r\n", xhdi_drivemap(xhdi)); + Supexec(xhdi_test); } else (void) Cconws("no XHDI cookie found.\r\n"); - (void) Cconws("press any key\r\n"); + (void) Cconws("\r\n\r\n"); (void) Cconin(); + return 0; }