]> git.sur5r.net Git - cc65/commitdiff
Added function to find out the volume name of a ProDOS 8 disk in a ProDOS 8 device.
authorol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 26 May 2010 21:02:35 +0000 (21:02 +0000)
committerol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 26 May 2010 21:02:35 +0000 (21:02 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4668 b7a2c559-68d2-44c3-8de9-860c34a00d81

doc/apple2.sgml
doc/apple2enh.sgml
include/apple2.h
libsrc/apple2/Makefile
libsrc/apple2/rootdir.s [new file with mode: 0644]
libsrc/apple2enh/Makefile

index e07d716a3eb691dcb9da1fff66e50103224e4798..6af74b3a5f628a0612704c716d5a2e8301175aa8 100644 (file)
@@ -292,8 +292,11 @@ usage.
 
 <itemize>
 <item>_dos_type
+<item>drivecount
+<item>drivelist
 <item>get_ostype
 <item>rebootafterexit
+<item>rootdir
 <item>ser_apple2_slot
 <item>tgi_apple2_mix
 </itemize>
index 1b2982bb4f601d5a6d0fb5da548e834df8923e34..1433abc67e23fdbf32d7be041980a609350ca9b4 100644 (file)
@@ -292,8 +292,11 @@ usage.
 
 <itemize>
 <item>_dos_type
+<item>drivecount
+<item>drivelist
 <item>get_ostype
 <item>rebootafterexit
+<item>rootdir
 <item>ser_apple2_slot
 <item>textframe
 <item>textframexy
index 1fbf181e793d50df75ef62094f7f05b2f6cf7c4e..d856c284034668d6802bf81b5511ddc949e2f978 100644 (file)
@@ -137,24 +137,29 @@ extern unsigned char _dos_type;
 
 
 
+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. */
+
 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. */
+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))
+#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.
  */
index 8ecb7d5b7d2e6fe341c7ed70d181f5294621db24..9f5c08b4f1f2d6665829b34fbe4a7886818ce3c2 100644 (file)
@@ -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 (file)
index 0000000..a64bf75
--- /dev/null
@@ -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
index d2ed5112063ca0c80755a25b209cf6ced5e7dcf5..4ed14d989290dc9e16476b914e2b5de44be332d3 100644 (file)
@@ -97,6 +97,7 @@ S_OBJS=       _scrsize.o      \
        read.o          \
        reboot.o        \
        revers.o        \
+       rootdir.o       \
        rwcommon.o      \
        syschdir.o      \
        sysmkdir.o      \