can now test a few functions
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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; \
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user