diff --git a/sd-emutos/.cproject b/sd-emutos/.cproject
deleted file mode 100644
index e83946d..0000000
--- a/sd-emutos/.cproject
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- make
- all
- true
- true
- true
-
-
- make
- clean
- true
- true
- true
-
-
- make
-
- test
- true
- true
- true
-
-
-
-
diff --git a/sd-emutos/.project b/sd-emutos/.project
deleted file mode 100644
index c3741ef..0000000
--- a/sd-emutos/.project
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- emu_sd
-
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.genmakebuilder
- clean,full,incremental,
-
-
-
-
- org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
- full,incremental,
-
-
-
-
-
- org.eclipse.cdt.core.cnature
- org.eclipse.cdt.managedbuilder.core.managedBuildNature
- org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
-
-
diff --git a/sd-emutos/.settings/org.eclipse.core.resources.prefs b/sd-emutos/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/sd-emutos/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/=UTF-8
diff --git a/sd-emutos/Makefile b/sd-emutos/Makefile
deleted file mode 100644
index baa7673..0000000
--- a/sd-emutos/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-# Makefile for the EmuTOS to BaS_gcc SD-card "driver connector"
-#
-# The driver actually resides within BaS_gcc. All we need to do within the AUTO-folder program is to find the driver
-# entry point and put its address into the respective cookie
-
-TOOLCHAIN_PREFIX=m68k-atari-mint-
-CC=$(TOOLCHAIN_PREFIX)gcc
-
-CFLAGS=-mcpu=547x \
- -Os \
- -fomit-frame-pointer \
- -Wno-multichar\
- -Wall
-EMUSD=emusd
-APP=$(EMUSD).prg
-
-all: $(APP) xhditest.prg
-
-SOURCES=$(EMUSD).c \
- cookie.c
-
-OBJECTS=$(SOURCES:.c=.o)
-
-$(APP): $(OBJECTS) depend
- $(CC) $(CFLAGS) $(OBJECTS) -o $(APP)
-
-test: xhditest.prg
-xhditest.prg: xhdi_test.c depend
- $(CC) $(CFLAGS) xhdi_test.c -o xhditest.prg
-
-.PHONY clean:
- - rm -rf *.o depend xhditest.prg
-
-depend: $(SOURCES)
- $(CC) $(CFLAGS) $(INCLUDE) -M $(SOURCES) xhdi_test.c > depend
-
-
-ifneq (clean,$(MAKECMDGOALS))
--include depend
-endif
diff --git a/sd-emutos/cookie.c b/sd-emutos/cookie.c
deleted file mode 100644
index 9943770..0000000
--- a/sd-emutos/cookie.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * cookie.c
- *
- * Created on: 03.05.2013
- * Author: mfro
- */
-
-#include
-#include
-
-static uint32_t cookieptr(void)
-{
- return * (uint32_t *) 0x5a0L;
-}
-
-int getcookie(uint32_t cookie, uint32_t *p_value)
-{
- uint32_t *cookiejar = (uint32_t *) Supexec(cookieptr);
-
- if (!cookiejar) return 0;
-
- do
- {
- if (cookiejar[0] == cookie)
- {
- if (p_value) *p_value = cookiejar[1];
- return 1;
- }
- else
- cookiejar = &(cookiejar[2]);
- } while (cookiejar[-2]);
-
- return 0;
-}
-
-void setcookie(uint32_t cookie, uint32_t value)
-{
- uint32_t *cookiejar = (uint32_t *) Supexec(cookieptr);
-
- do
- {
- if (cookiejar[0] == cookie)
- {
- cookiejar[1] = value;
- return;
- }
- else
- cookiejar = &(cookiejar[2]);
- } while (cookiejar[-2]);
-}
-
diff --git a/sd-emutos/cookie.h b/sd-emutos/cookie.h
deleted file mode 100644
index 8f9071f..0000000
--- a/sd-emutos/cookie.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * cookie.h
- *
- * Created on: 05.05.2013
- * Author: mfro
- */
-
-#ifndef _COOKIE_H_
-#define _COOKIE_H_
-
-#include
-
-/*
- * get and set named cookies. Although these routines do access the cookiejar system variable (which is
- * protected), they do not need to be called in supervisor mode
- */
-extern int getcookie(uint32_t cookie, uint32_t *p_value);
-extern void setcookie(uint32_t cookie, uint32_t value);
-
-#endif /* _COOKIE_H_ */
diff --git a/sd-emutos/emusd.c b/sd-emutos/emusd.c
deleted file mode 100644
index 6d9bbd2..0000000
--- a/sd-emutos/emusd.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * emusd.c
- *
- * The driver actually resides within BaS_gcc. All we need to do within the AUTO-folder program is to find the driver
- * entry point and put its address into the XHDI cookie
- *
- * Created on: 01.05.2013
- * Author: mfro
- */
-
-#include
-#include
-#include
-#include
-
-#include "cookie.h"
-#include "xhdi.h"
-
-#define XHDIMAGIC 0x27011992L
-
-typedef uint32_t (*cookie_fun)(uint16_t opcode,...);
-
-static cookie_fun old_vector = NULL;
-
-static cookie_fun get_fun_ptr(void)
-{
- static cookie_fun xhdi = NULL;
- static int have_it = 0;
-
- if (!have_it)
- {
- uint32_t *magic_test;
-
- getcookie ('XHDI', (uint32_t *) &xhdi);
- have_it = 1;
-
- /* check magic */
-
- magic_test = (uint32_t *) xhdi;
- if (magic_test && (magic_test[-1] != XHDIMAGIC))
- xhdi = NULL;
- }
-
- return xhdi;
-}
-
-cookie_fun bas_sd_vector(cookie_fun old_vector)
-{
- register long retvalue __asm__("d0");
-
- __asm__ __volatile__(
- "move.l %[retvalue],-(sp)\n\t"
- "trap #0\n\t"
- "addq.l #4,sp\n\t"
- : [retvalue]"=r"(retvalue)
- : "g"(old_vector)
- : "d1","d2","d3","a0","a1","a2"
- );
- return (cookie_fun) retvalue;
-}
-
-int main(int argc, char *argv[])
-{
- uint32_t value;
- cookie_fun bas_vector;
-
- if (getcookie('XHDI', &value))
- {
- if ((old_vector = get_fun_ptr()))
- {
- printf("old XHDI vector (%p) found and saved\r\n", old_vector);
- }
- }
-
- bas_vector = bas_sd_vector(old_vector);
- printf("got vector from BaS: %p\r\n", bas_vector);
- //setcookie('XHDI', (uint32_t) bas_vector);
- XHNewCookie(old_vector, bas_vector);
- printf("vector to BaS driver set\r\n");
-
- return 0;
-}
diff --git a/sd-emutos/xhdi.h b/sd-emutos/xhdi.h
deleted file mode 100644
index d89b3a6..0000000
--- a/sd-emutos/xhdi.h
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * xhdi.h
- *
- * Created on: 03.05.2013
- * Author: mfro
- */
-
-#ifndef XHDI_H_
-#define XHDI_H_
-
-/* XHDI function numbers */
-
-#define XHDI_VERSION 0
-#define XHDI_INQUIRE_TARGET 1
-#define XHDI_RESERVE 2
-#define XHDI_LOCK 3
-#define XHDI_STOP 4
-#define XHDI_EJECT 5
-#define XHDI_DRIVEMAP 6
-#define XHDI_INQUIRE_DEVICE 7
-#define XHDI_INQUIRE_DRIVER 8
-#define XHDI_NEW_COOKIE 9
-#define XHDI_READ_WRITE 10
-#define XHDI_INQUIRE_TARGET2 11
-#define XHDI_INQUIRE_DEVICE2 12
-#define XHDI_DRIVER_SPECIAL 13
-#define XHDI_GET_CAPACITY 14
-#define XHDI_MEDIUM_CHANGED 15
-#define XHDI_MINT_INFO 16
-#define XHDI_DOS_LIMITS 17
-#define XHDI_LAST_ACCESS 18
-#define XHDI_REACCESS 19
-
-/* XHDI error codes */
-
-#define E_OK 0 /* OK */
-#define ERROR -1 /* unspecified error */
-#define EDRVNR -2 /* drive not ready */
-#define EUNDEV -15 /* invalid device/target number */
-#define EINVFN -32 /* invalid function number */
-#define EACCDN -36 /* access denied (device currently reserved) */
-#define EDRIVE -46 /* BIOS device not served by driver */
-
-/* XHDI device capabilities */
-
-#define XH_TARGET_STOPPABLE (1 << 0)
-#define XH_TARGET_REMOVABLE (1 << 1)
-#define XH_TARGET_LOCKABLE (1 << 2)
-#define XH_TARGET_EJECTABLE (1 << 3)
-#define XH_TARGET_LOCKED (1 << 29)
-#define XH_TARGET_STOPPED (1 << 30)
-#define XH_TARGET_RESERVED (1 << 31)
-
-/* XHDI DOS limits */
-
-#define XH_DL_SECSIZ (0) /* Maximum sector size (BIOS level) */
-#define XH_DL_MINFAT (1) /* Minimum number of FATs */
-#define XH_DL_MAXFAT (2) /* Maximal number of FATs */
-#define XH_DL_MINSPC (3) /* Minimum sectors per cluster */
-#define XH_DL_MAXSPC (4) /* Maximum sectors per cluster */
-#define XH_DL_CLUSTS (5) /* Maximum number of clusters of a 16-bit FAT */
-#define XH_DL_MAXSEC (6) /* Maximum number of sectors */
-#define XH_DL_DRIVES (7) /* Maximum number of BIOS drives supported by the DOS */
-#define XH_DL_CLSIZB (8) /* Maximum cluster size */
-#define XH_DL_RDLEN (9) /* Max. (bpb->rdlen * bpb->recsiz/32) */
-#define XH_DL_CLUSTS12 (12) /* Max. number of clusters of a 12-bit FAT */
-#define XH_DL_CLUSTS32 (13) /* Max. number of clusters of a 32 bit FAT */
-#define XH_DL_BFLAGS (14) /* Supported bits in bpb->bflags */
-
-#ifndef _FEATURES_H
-#include
-#endif /* _FEATURES_H */
-
-
-extern long xhdi_entrypoint;
-
-#define CLOBBER_REGISTERS "a0","memory" /* */
-
-/* XHDI #0 */
-#define XHGetVersion(xhdi_entry) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w #0,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "addq.l #2,sp\n\t" \
- : [retvalue]"=r"(retvalue) /* outputs */ \
- : [entry] "g" (xhdi_entry) /* inputs */ \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #1 */
-#define XHInqTarget(xhdi_entry, major, minor, block_size, flags, product_name) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_product_name],-(sp)\n\t" \
- "move.l %[a_flags],-(sp)\n\t" \
- "move.l %[a_block_size],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #1,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 18(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_block_size]"g"(block_size), \
- [a_flags]"g"(flags), \
- [a_product_name]"g"(product_name) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
- /* XHDI #2 */
- #define XHReserve(xhdi_entry, major, minor, do_reserve, key) \
- __extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w %[a_key],-(sp)\n\t" \
- "move.w %[a_do_reserve],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #2,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 10(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_do_reserve]"g"(do_reserve), \
- [a_key]"g"(key) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
- })
-
-/* XHDI #3 */
-#define XHLock(xhdi_entry, major, minor, do_lock, key) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "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 */ \
- : [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 XHStop(xhdi_entry, major, minor, do_stop, key) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w %[a_key],-(sp)\n\t" \
- "move.w %[a_do_stop],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #4,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 10(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_do_stop]"g"(do_stop), \
- [a_key]"g"(key) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #5 */
-#define XHEject(xhdi_entry, major, minor, do_eject, key) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "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 */ \
- : [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 */ \
- ); \
- retvalue; \
-})
-
- /* XHDI #6 */
-#define XHDrvMap(xhdi_entry) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w #6,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "addq.l #2,sp\n\t" \
- : [retvalue] "=r" (retvalue)/* outputs */ \
- : [entry] "m" (xhdi_entry) /* inputs */ \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #7 */
-#define XHInqDev(xhdi_entry, bios_device, major, minor, start_sector, bpb) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "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" \
- : [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 */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #8 */
-#define XHInqDriver(xhdi_entry, bios_device, name, version, company, ahdi_version, max_ipl) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_max_ipl],-(sp)\n\t" \
- "move.l %[a_ahdi_version],-(sp)\n\t" \
- "move.l %[a_company],-(sp)\n\t" \
- "move.l %[a_version],-(sp)\n\t" \
- "move.l %[a_name],-(sp)\n\t" \
- "move.w %[a_bios_device],-(sp)\n\t" \
- "move.w #8,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 16(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_bios_device]"g"(bios_device), \
- [a_name]"g"(name), \
- [a_version]"g"(version), \
- [a_company]"g"(company), \
- [a_ahdi_version]"g"(ahdi_version), \
- [a_max_ipl]"g"(max_ipl) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #9 */
-#define XHNewCookie(xhdi_entry, newcookie) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_newcookie],-(sp)\n\t" \
- "move.w #9,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "addq.l #6,sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry] "g" (xhdi_entry), \
- [a_newcookie]"g"(newcookie) /* inputs */ \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #10 */
-#define XHReadWrite(xhdi_entry, major, minor, rwflag, recno, count, buf) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_buf],-(sp)\n\t" \
- "move.w %[a_count],-(sp)\n\t" \
- "move.l %[a_recno],-(sp)\n\t" \
- "move.w %[a_rwflag],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #10,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 18(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_rwflag]"g"(rwflag), \
- [a_recno]"g"(recno), \
- [a_count]"g"(count), \
- [a_buf]"g"(buf) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #11 */
-#define XHInqTarget2(xhdi_entry, major, minor, block_size, device_flags, product_name, stringlen) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w %[a_stringlen],-(sp)\n\t" \
- "move.l %[a_product_name],-(sp)\n\t" \
- "move.l %[a_device_flags],-(sp)\n\t" \
- "move.l %[a_block_size],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #11,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 24(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_block_size]"g"(block_size), \
- [a_device_flags]"g"(device_flags), \
- [a_product_name]"g"(product_name), \
- [a_stringlen]"g"(stringlen) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #12 */
-#define XHInqDev2(xhdi_entry, bios_device, major, minor, start_sector, bpb, blocks, partid) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_partid],-(sp)\n\t" \
- "move.l %[a_blocks],-(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 #12,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 28(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [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), \
- [a_blocks]"g"(blocks), \
- [a_partid]"g"(partid) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #13 */
-#define XHDriverSpecial(xhdi_entry, key1, key2, subopcode, data) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_data],-(sp)\n\t" \
- "move.w %[a_subopcode],-(sp)\n\t" \
- "move.l %[a_key2],-(sp)\n\t" \
- "move.l %[a_key1],-(sp)\n\t" \
- "move.w #13,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 16(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_key1]"g"(key1), \
- [a_key2]"g"(key2), \
- [a_subopcode]"g"(subopcode), \
- [a_data]"g"(data) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #14 */
-#define XHGetCapacity(xhdi_entry, major, minor, blocks, bs) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_bs],-(sp)\n\t" \
- "move.l %[a_blocks],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #14,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 14(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_blocks]"g"(blocks), \
- [a_bs]"g"(bs) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #15 */
-#define XHMediumChanged(xhdi_entry, major, minor) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #15,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "addq.l #6,sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #16 */
-#define XHMintInfo(xhdi_entry, opcode, data) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_data],-(sp)\n\t" \
- "move.w %[a_opcode],-(sp)\n\t" \
- "move.w #16,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 8(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_opcode]"g"(opcode), \
- [a_data]"g"(data) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #17 */
-#define XHDOSLimits(xhdi_entry, which, limit) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_limit],-(sp)\n\t" \
- "move.w %[a_which],-(sp)\n\t" \
- "move.w #17,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 8(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_which]"g"(which), \
- [a_limit]"g"(limit) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #18 */
-#define XHLastAccess(xhdi_entry, major, minor, ms) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.l %[a_ms],-(sp)\n\t" \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #18,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "lea 10(sp),sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor), \
- [a_ms]"g"(ms) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-/* XHDI #19 */
-#define XHReaccess(xhdi_entry, major, minor) \
-__extension__ \
- ({ \
- register long retvalue __asm__("d0"); \
- \
- __asm__ volatile( \
- "move.w %[a_minor],-(sp)\n\t" \
- "move.w %[a_major],-(sp)\n\t" \
- "move.w #19,-(sp)\n\t" \
- "move.l %[entry],a0\n\t" \
- "jsr (a0)\n\t" \
- "addq.l #6,sp\n\t" \
- : "=r"(retvalue) /* outputs */ \
- : [entry]"g"(xhdi_entry), \
- [a_major]"g"(major), \
- [a_minor]"g"(minor) \
- : CLOBBER_REGISTERS /* clobbered regs */ \
- ); \
- retvalue; \
-})
-
-#endif /* XHDI_H_ */
diff --git a/sd-emutos/xhdi_test.c b/sd-emutos/xhdi_test.c
deleted file mode 100644
index 10948c0..0000000
--- a/sd-emutos/xhdi_test.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * xhdi_test.c
- *
- * Created on: 04.05.2013
- * Author: mfro
- */
-
-#include
-#include
-#include
-#include "xhdi.h"
-
-
-static uint32_t *xhdi;
-
-static uint32_t cookieptr(void)
-{
- return * (uint32_t *) 0x5a0L;
-}
-
-int getcookie(uint32_t cookie, uint32_t *p_value)
-{
- uint32_t *cookiejar = (uint32_t *) Supexec(cookieptr);
-
- if (!cookiejar) return 0;
-
- do
- {
- if (cookiejar[0] == cookie)
- {
- if (p_value) *p_value = cookiejar[1];
- return 1;
- }
- else
- cookiejar = &(cookiejar[2]);
- } while (cookiejar[-2]);
-
- return 0;
-}
-
-void print_bpb(_BPB *bpb)
-{
- 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);
-}
-
-/*
- * XHDI test routine
- *
- * XHDI functions must be called in supervisor mode - pack everything in a function that can be called by Supexec()
- */
-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 and XHInqDriver for all XHDI devices\r\n");
- for (i = 0; i < 32; i++)
- {
- char driver_name[17];
- char driver_version[7];
- char driver_company[17];
- uint16_t ahdi_version;
- uint16_t max_ipl;
-
- uint16_t major = 0;
- uint16_t minor = 0;
- long start_sector = 0L;
- uint32_t ret;
- _BPB *bpb = NULL;
- long blocks;
- char part_id[20];
-
- if ((drvmap >> i) & 1)
- {
- printf("XHInqDev(%d):\r\n", i);
- ret = XHInqDev(xhdi, i, &major, &minor, &start_sector, &bpb);
- if (ret == E_OK || ret == EDRVNR)
- {
- long block_size;
- long flags;
- char product_name[33];
- char buff[512];
- unsigned long blocks;
- unsigned long blocksize;
- unsigned long ms;
-
- printf("drive %d returned %d:\r\n", i, ret);
- printf("\tmajor = %x, minor = %x, start_sector = %lx, bpb = %p\r\n", major, minor, start_sector, bpb);
- if (bpb != NULL)
- print_bpb(bpb);
-
- printf("XHInqTarget() major = %x, minor = %x. result = %ld\r\n", major, minor,
- XHInqTarget(xhdi, major, minor, &block_size, &flags, &product_name));
- printf("block_size = %ld, flags = %lx, product_name = \"%s\"\r\n", block_size, flags, product_name);
-
- printf("XHInqTarget2() major = %x, minor = %x. result = %ld\r\n", major, minor,
- XHInqTarget2(xhdi, major, minor, &block_size, &flags, &buff, 512));
- printf("block_size = %ld, flags = %lx, product_name = \"%s\"\r\n", block_size, flags, product_name);
-
- printf("try to read sector 1 from device major = %x, minor = %x. Result: %ld\r\n",
- major, minor, XHReadWrite(xhdi, major, minor, 0, 1, 1, &buff));
-
- (void) Cconws("\r\n\r\n");
- (void) Cconin();
-
- printf("XHEject() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHEject(xhdi, major, minor, 1, 1));
-
- printf("XHLock() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHLock(xhdi, major, minor, 1, 1));
-
- printf("XHReserve() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHReserve(xhdi, major, minor, 1, 1));
-
- printf("XHStop() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHStop(xhdi, major, minor, 1, 1));
-
- printf("XHDriverSpecial() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHDriverSpecial(xhdi, 'EMUT', 0x12345678, 0, NULL));
-
- printf("XHGetCapacity() on device major = %x, minor = %x. result = %ld\r\n",
- major, minor, XHGetCapacity(xhdi, major, minor, &blocks, &blocksize));
- printf("blocks = %ld, blocksize = %ld\r\n", blocks, blocksize);
-
- printf("XHMediumChanged() on device major = %x, minor = %x. Result = %ld\r\n",
- major, minor, XHMediumChanged(xhdi, major, minor));
-
- printf("XHMintInfo() on driver. Result = %ld\r\n",
- XHMintInfo(xhdi, 1, &buff));
-
- (void) Cconws("\r\n\r\n");
- (void) Cconin();
-
- printf("XHDOSLimits(XH_DL_SECSIZ); on driver. Result = %ld\r\n",
- XHDOSLimits(xhdi, XH_DL_SECSIZ, 0));
-
- ms = 0L;
- printf("XHLastAccess() on device major = %x, minor = %x. Result = %ld\r\n",
- major, minor, XHLastAccess(xhdi, major, minor, &ms));
- printf("ms = %ld\r\n", ms);
-
- printf("XHReaccess() on device major = %x, minor = %x. Result = %ld\r\n",
- major, minor, XHReaccess(xhdi, major, minor));
- }
- printf("XHInqDriver(%d):", i);
- ret = XHInqDriver(xhdi, i, &driver_name, &driver_version, &driver_company, &ahdi_version, &max_ipl);
- printf("%d\r\n", ret);
- if (ret == E_OK || ret == EDRVNR)
- {
- printf("driver_name = %s, driver_version = %s, driver_company = %s, ahdi_version = %d, max_ipl = %d\r\n",
- driver_name, driver_version, driver_company, ahdi_version, max_ipl);
- }
-
- printf("XHInqDev2(%d):\r\n", i);
- ret = XHInqDev2(xhdi, i, &major, &minor, &start_sector, &bpb, &blocks, &part_id);
- if (ret == E_OK || ret == EDRVNR)
- {
- printf("drive %d returned %d:\r\n", i, ret);
- printf("\tmajor = %x, minor = %x, start_sector = %lx, bpb = %p, blocks = %ld, part_id = %s\r\n",
- major, minor, start_sector, bpb, blocks, part_id);
- }
- }
- bpb = NULL;
- }
-}
-
-int main(int argc, char *argv[])
-{
- (void) Cconws("\033EGCC XHDI Test Program\r\n=====================\r\n\r\n");
-
- if (getcookie('XHDI', (uint32_t *) &xhdi))
- {
- Supexec(xhdi_test);
- }
- else
- (void) Cconws("no XHDI cookie found.\r\n");
-
- (void) Cconws("\r\n\r\n");
- (void) Cconin();
-
- return 0;
-}