diff --git a/doc/apple2.sgml b/doc/apple2.sgml
index e07d716a3..6af74b3a5 100644
--- a/doc/apple2.sgml
+++ b/doc/apple2.sgml
@@ -292,8 +292,11 @@ usage.
- _dos_type
+
- drivecount
+
- drivelist
- get_ostype
- rebootafterexit
+
- rootdir
- ser_apple2_slot
- tgi_apple2_mix
diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml
index 1b2982bb4..1433abc67 100644
--- a/doc/apple2enh.sgml
+++ b/doc/apple2enh.sgml
@@ -292,8 +292,11 @@ usage.
- _dos_type
+
- drivecount
+
- drivelist
- get_ostype
- rebootafterexit
+
- rootdir
- ser_apple2_slot
- textframe
- textframexy
diff --git a/include/apple2.h b/include/apple2.h
index 1fbf181e7..d856c2840 100644
--- a/include/apple2.h
+++ b/include/apple2.h
@@ -137,24 +137,29 @@ extern unsigned char _dos_type;
-unsigned char get_ostype (void);
-/* Get the machine type. Returns one of the APPLE_xxx codes. */
-
-void rebootafterexit (void);
-/* Reboot machine after program termination has completed. */
-
unsigned char drivecount (void);
/* Returns the number of ProDOS 8 drives. */
unsigned char* drivelist (void);
/* Returns a pointer to the list of ProDOS 8 drives. */
-#define ser_apple2_slot(num) ser_ioctl (0, (void *) (num))
+unsigned char get_ostype (void);
+/* Get the machine type. Returns one of the APPLE_xxx codes. */
+
+void rebootafterexit (void);
+/* Reboot machine after program termination has completed. */
+
+unsigned char __fastcall__ rootdir (unsigned char drive, char* buf);
+/* Fill buffer with root directory name of ProDOS 8 disk in ProDOS 8 drive.
+ * Returns 0 for success and an OS specific error code in case of failure.
+ */
+
+#define ser_apple2_slot(num) ser_ioctl (0, (void*) (num))
/* Select a slot number from 1 to 7 prior to ser_open.
* The default slot number is 2.
*/
-#define tgi_apple2_mix(onoff) tgi_ioctl (0, (void *) (onoff))
+#define tgi_apple2_mix(onoff) tgi_ioctl (0, (void*) (onoff))
/* If onoff is 1, graphics/text mixed mode is enabled.
* If onoff is 0, graphics/text mixed mode is disabled.
*/
diff --git a/libsrc/apple2/Makefile b/libsrc/apple2/Makefile
index 8ecb7d5b7..9f5c08b4f 100644
--- a/libsrc/apple2/Makefile
+++ b/libsrc/apple2/Makefile
@@ -94,6 +94,7 @@ S_OBJS= _scrsize.o \
read.o \
reboot.o \
revers.o \
+ rootdir.o \
rwcommon.o \
syschdir.o \
sysmkdir.o \
diff --git a/libsrc/apple2/rootdir.s b/libsrc/apple2/rootdir.s
new file mode 100644
index 000000000..a64bf75bb
--- /dev/null
+++ b/libsrc/apple2/rootdir.s
@@ -0,0 +1,52 @@
+;
+; Oliver Schmidt, 2010-05-24
+;
+; unsigned char __fastcall__ rootdir (unsigned char drive, char* buf);
+;
+
+ .export _rootdir
+ .import popax
+
+ .include "zeropage.inc"
+ .include "errno.inc"
+ .include "mli.inc"
+
+_rootdir:
+ ; Save buf
+ sta ptr1
+ stx ptr1+1
+
+ ; Set buf
+ sta mliparam + MLI::ON_LINE::DATA_BUFFER
+ stx mliparam + MLI::ON_LINE::DATA_BUFFER+1
+
+ ; Set drive
+ jsr popax
+ sta mliparam + MLI::ON_LINE::UNIT_NUM
+
+ ; Get volume name
+ lda #ON_LINE_CALL
+ ldx #ON_LINE_COUNT
+ jsr callmli
+ bcs :+
+
+ ; Get volume name length
+ ldy #$00
+ lda (ptr1),y
+ and #15 ; Max volume name length
+ sta tmp1
+
+ ; Add leading slash
+ lda #'/'
+ sta (ptr1),y
+
+ ; Add terminating zero
+ ldy tmp1
+ iny
+ lda #$00
+ sta (ptr1),y
+
+ ; Return success or error
+: sta __oserror
+ ldx #$00
+ rts
diff --git a/libsrc/apple2enh/Makefile b/libsrc/apple2enh/Makefile
index d2ed51120..4ed14d989 100644
--- a/libsrc/apple2enh/Makefile
+++ b/libsrc/apple2enh/Makefile
@@ -97,6 +97,7 @@ S_OBJS= _scrsize.o \
read.o \
reboot.o \
revers.o \
+ rootdir.o \
rwcommon.o \
syschdir.o \
sysmkdir.o \