can now test a few functions

This commit is contained in:
Markus Fröschle
2013-05-04 17:51:10 +00:00
parent 46b0d03aec
commit 0eec0e9608
3 changed files with 76 additions and 43 deletions

View File

@@ -6,8 +6,9 @@
TOOLCHAIN_PREFIX=m68k-atari-mint- TOOLCHAIN_PREFIX=m68k-atari-mint-
CC=$(TOOLCHAIN_PREFIX)gcc CC=$(TOOLCHAIN_PREFIX)gcc
CFLAGS=-mcpu=68000 \ CFLAGS=-mcpu=547x \
-Os \ -Os \
-fomit-frame-pointer \
-g \ -g \
-Wno-multichar\ -Wno-multichar\
-Wall -Wall

View File

@@ -58,8 +58,9 @@
extern long xhdi_entrypoint; 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 */ /* XHDI #0 */
#define xhdi_version(xhdi_entry) \ #define XHGetVersion(xhdi_entry) \
__extension__ \ __extension__ \
({ \ ({ \
register long retvalue __asm__("d0"); \ register long retvalue __asm__("d0"); \
@@ -71,7 +72,7 @@ __extension__ \
"addq.l #2,sp\n\t" \ "addq.l #2,sp\n\t" \
: [retvalue]"=r"(retvalue) /* outputs */ \ : [retvalue]"=r"(retvalue) /* outputs */ \
: [entry] "m" (xhdi_entry) /* inputs */ \ : [entry] "m" (xhdi_entry) /* inputs */ \
: __CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -101,7 +102,7 @@ __extension__ \
[block_size]"g"(block_size), \ [block_size]"g"(block_size), \
[flags]"g"(flags), \ [flags]"g"(flags), \
[product_name]"g"(product_name) \ [product_name]"g"(product_name) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -128,7 +129,7 @@ __extension__ \
[minor]"g"(minor), \ [minor]"g"(minor), \
[do_reserve]"g"(do_reserve), \ [do_reserve]"g"(do_reserve), \
[key]"g"(key), \ [key]"g"(key), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -155,7 +156,7 @@ __extension__ \
[minor]"g"(minor), \ [minor]"g"(minor), \
[do_lock]"g"(do_lock), \ [do_lock]"g"(do_lock), \
[key]"g"(key), \ [key]"g"(key), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -182,7 +183,7 @@ __extension__ \
[minor]"g"(minor), \ [minor]"g"(minor), \
[do_stop]"g"(do_stop), \ [do_stop]"g"(do_stop), \
[key]"g"(key), \ [key]"g"(key), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -209,14 +210,14 @@ __extension__ \
[minor]"g"(minor), \ [minor]"g"(minor), \
[do_stop]"g"(do_eject), \ [do_stop]"g"(do_eject), \
[key]"g"(key), \ [key]"g"(key), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
}); });
/* XHDI #6 */ /* XHDI #6 */
#define xhdi_drivemap(xhdi_entry) \ #define XHDrvMap(xhdi_entry) \
__extension__ \ __extension__ \
({ \ ({ \
register long retvalue __asm__("d0"); \ register long retvalue __asm__("d0"); \
@@ -227,8 +228,8 @@ __extension__ \
"jsr (a0)\n\t" \ "jsr (a0)\n\t" \
"addq.l #2,sp\n\t" \ "addq.l #2,sp\n\t" \
: [retvalue] "=r" (retvalue)/* outputs */ \ : [retvalue] "=r" (retvalue)/* outputs */ \
: [entry] "a" (xhdi_entry) /* inputs */ \ : [entry] "m" (xhdi_entry) /* inputs */ \
: __CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -236,27 +237,29 @@ __extension__ \
#define e_xhdi_drivemap xhdi_drivemap(xhdi_entrypoint) #define e_xhdi_drivemap xhdi_drivemap(xhdi_entrypoint)
/* XHDI #7 */ /* 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__ \ __extension__ \
({ \ ({ \
register long retvalue __asm__("d0"); \ register long retvalue __asm__("d0"); \
\ \
__asm__ volatile( \ __asm__ volatile( \
"move.w #XHDI_INQUIRE_DEVICE,-(sp)\n\t" \ "move.w #7,-(sp)\n\t" \
"move.w [major],-(sp)\n\t" \ "move.w %[a_bios_device],-(sp)\n\t" \
"move.w [minor],-(sp)\n\t" \ "move.l %[a_major],-(sp)\n\t" \
"lea [start_sector],-(sp)\n\t" \ "move.l %[a_minor],-(sp)\n\t" \
"lea [bpb],-(sp)\n\t" \ "move.l %[a_start_sector],-(sp)\n\t" \
"lea %[entry],a0\n\t" \ "move.l %[a_bpb],-(sp)\n\t" \
"move.l %[a_entry],a0\n\t" \
"jsr (a0)\n\t" \ "jsr (a0)\n\t" \
"lea 14(sp),sp\n\t" \ "lea 20(sp),sp\n\t" \
: "=r"(retvalue) /* outputs */ \ : [retvalue]"=r"(retvalue) /* outputs */ \
: [xhdi_entry]"g"(xhdi_entry), \ : [a_entry]"g"(xhdi_entry), \
[major]"g"(major), \ [a_bios_device]"g"(bios_device), \
[minor]"g"(minor), \ [a_major]"g"(major), \
[start_sector]"g"(start_sector), \ [a_minor]"g"(minor), \
[bpb]"g"(bpb), \ [a_start_sector]"g"(start_sector), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ [a_bpb]"g"(bpb) \
: CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -286,7 +289,7 @@ __extension__ \
[company]"g"(company), \ [company]"g"(company), \
[ahdi_version]"g"(ahdi_version), \ [ahdi_version]"g"(ahdi_version), \
[max_ipl]"g"(max_ipl), \ [max_ipl]"g"(max_ipl), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -306,7 +309,7 @@ __extension__ \
"addq.l #6,sp\n\t" \ "addq.l #6,sp\n\t" \
: "=r"(retvalue) /* outputs */ \ : "=r"(retvalue) /* outputs */ \
: [newcookie]"g"(newcookie) /* inputs */ \ : [newcookie]"g"(newcookie) /* inputs */ \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -338,7 +341,7 @@ __extension__ \
[recno]"g"(recno), \ [recno]"g"(recno), \
[count]"g"(count), \ [count]"g"(count), \
[buf]"g"(buf) \ [buf]"g"(buf) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -370,7 +373,7 @@ __extension__ \
[device_flags]"g"(device_flags), \ [device_flags]"g"(device_flags), \
[product_name]"g"(product_name), \ [product_name]"g"(product_name), \
[stringlen]"g"(stringlen) \ [stringlen]"g"(stringlen) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -403,7 +406,7 @@ __extension__ \
[bpb]"g"(bpb), \ [bpb]"g"(bpb), \
[blocks]"g"(blocks), \ [blocks]"g"(blocks), \
[partid]"g"(partid) \ [partid]"g"(partid) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -430,7 +433,7 @@ __extension__ \
[key2]"g"(key2), \ [key2]"g"(key2), \
[subopcode]"g"(subopcode), \ [subopcode]"g"(subopcode), \
[data]"g"(data) \ [data]"g"(data) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -457,7 +460,7 @@ __extension__ \
[minor]"g"(minor), \ [minor]"g"(minor), \
[blocks]"g"(blocks), \ [blocks]"g"(blocks), \
[bs]"g"(bs) \ [bs]"g"(bs) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -480,7 +483,7 @@ __extension__ \
: [xhdi_entry]"g"(xhdi_entry), \ : [xhdi_entry]"g"(xhdi_entry), \
[major]"g"(major), \ [major]"g"(major), \
[minor]"g"(minor), \ [minor]"g"(minor), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -503,7 +506,7 @@ __extension__ \
: [xhdi_entry]"g"(xhdi_entry), \ : [xhdi_entry]"g"(xhdi_entry), \
[opcode]"g"(opcode), \ [opcode]"g"(opcode), \
[data]"g"(data), \ [data]"g"(data), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -526,7 +529,7 @@ __extension__ \
: [xhdi_entry]"g"(xhdi_entry), \ : [xhdi_entry]"g"(xhdi_entry), \
[which]"g"(which), \ [which]"g"(which), \
[limit]"g"(limit), \ [limit]"g"(limit), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -551,7 +554,7 @@ __extension__ \
[major]"g"(major), \ [major]"g"(major), \
[minor]"g"(minor), \ [minor]"g"(minor), \
[ms]"g"(ms) \ [ms]"g"(ms) \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \
@@ -574,7 +577,7 @@ __extension__ \
: [xhdi_entry]"g"(xhdi_entry), \ : [xhdi_entry]"g"(xhdi_entry), \
[major]"g"(major), \ [major]"g"(major), \
[minor]"g"(minor), \ [minor]"g"(minor), \
: CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ \ : CLOBBER_REGISTERS /* clobbered regs */ \
AND_MEMORY \ AND_MEMORY \
); \ ); \
retvalue; \ retvalue; \

View File

@@ -38,21 +38,50 @@ int getcookie(uint32_t cookie, uint32_t *p_value)
return 0; 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[]) int main(int argc, char *argv[])
{ {
(void) Cconws("\033EGCC XHDI Test Program\r\n=====================\r\n\r\n"); (void) Cconws("\033EGCC XHDI Test Program\r\n=====================\r\n\r\n");
if (getcookie('XHDI', (uint32_t *) &xhdi)) if (getcookie('XHDI', (uint32_t *) &xhdi))
{ {
printf("XHDI cookie: %p\r\n", xhdi); Supexec(xhdi_test);
printf("xhdi version : %ld\r\n", xhdi_version(xhdi));
printf("xhdi drivemap: %lx\r\n", xhdi_drivemap(xhdi));
} }
else else
(void) Cconws("no XHDI cookie found.\r\n"); (void) Cconws("no XHDI cookie found.\r\n");
(void) Cconws("press any key\r\n"); (void) Cconws("\r\n<press any key to return to desktop>\r\n");
(void) Cconin(); (void) Cconin();
return 0; return 0;
} }