From: ol.sc 
Date: Mon, 15 Oct 2012 21:59:51 +0000 (+0000)
Subject: I wasn't aware that the unit numbers in the ProDOS device list contain device type... 
X-Git-Tag: V2.14~222
X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=272b8e718533466e81e5006b2ce147816daf6359;p=cc65
I wasn't aware that the unit numbers in the ProDOS device list contain device type identifiers in the low nibble. So if we can't use the device list entries as-is we can as well present the high nibble as low nibble to the user thus providing more meaningful device numbers.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5852 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
diff --git a/doc/apple2.sgml b/doc/apple2.sgml
index 28f550b0e..02c8450a2 100644
--- a/doc/apple2.sgml
+++ b/doc/apple2.sgml
@@ -494,10 +494,10 @@ url="ca65.html" name="assembler manual">.
   to the formula
 
   
-    device = slot * 0x10 + (drive - 1) * 0x80
+    device = slot + (drive - 1) * 8
   
 
-  so that for example slot 6 drive 2 is mapped to  returns
diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml
index 1567f4c0b..f3ae6e4e1 100644
--- a/doc/apple2enh.sgml
+++ b/doc/apple2enh.sgml
@@ -500,10 +500,10 @@ url="ca65.html" name="assembler manual">.
   to the formula
 
   
-    device = slot * 0x10 + (drive - 1) * 0x80
+    device = slot + (drive - 1) * 8
   
 
-  so that for example slot 6 drive 2 is mapped to  returns
diff --git a/libsrc/apple2/Makefile b/libsrc/apple2/Makefile
index 3896f2903..ad4573ac3 100644
--- a/libsrc/apple2/Makefile
+++ b/libsrc/apple2/Makefile
@@ -19,7 +19,7 @@ CFLAGS	= -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include
 #--------------------------------------------------------------------------
 # Rules
 
-%.o:   	%.c
+%.o:	%.c
 	@$(CC) $(CFLAGS) $<
 	@$(AS) -o $@ $(AFLAGS) $(*).s
 
@@ -50,19 +50,19 @@ C_OBJS=	closedir.o	\
 	rewinddir.o
 
 S_OBJS=	_scrsize.o	\
-     	break.o		\
-     	cclear.o	\
-     	cgetc.o		\
-     	chline.o	\
+	break.o		\
+	cclear.o	\
+	cgetc.o		\
+	chline.o	\
 	close.o		\
-     	clrscr.o	\
-     	color.o		\
-        cout.o          \
-     	cputc.o		\
-     	crt0.o		\
-     	ctype.o		\
-     	cvline.o	\
-     	devicedir.o	\
+	clrscr.o	\
+	color.o		\
+	cout.o		\
+	cputc.o		\
+	crt0.o		\
+	ctype.o		\
+	cvline.o	\
+	devicedir.o	\
 	dioclose.o	\
 	diocommon.o	\
 	dioopen.o	\
@@ -75,41 +75,42 @@ S_OBJS=	_scrsize.o	\
 	exehdr.o	\
 	filedes.o	\
 	filename.o	\
-        get_ostype.o    \
+	get_ostype.o	\
 	getdevice.o	\
 	gotoxy.o	\
 	gotoy.o		\
-        home.o          \
+	home.o		\
 	initcwd.o	\
-	iobuf.o         \
-        joy_stddrv.o    \
-     	kbhit.o		\
-        mainargs.o      \
+	iobuf.o		\
+	isdevice.o	\
+	joy_stddrv.o	\
+	kbhit.o		\
+	mainargs.o	\
 	mcbdefault.o	\
 	mli.o		\
-        mouse_stddrv.o  \
+	mouse_stddrv.o	\
 	open.o		\
-        oserrlist.o     \
+	oserrlist.o	\
 	oserror.o	\
-        randomize.o     \
-        rdkey.o         \
-     	read.o          \
-     	reboot.o        \
-     	revers.o	\
+	randomize.o	\
+	rdkey.o		\
+	read.o		\
+	reboot.o	\
+	revers.o	\
 	rwcommon.o	\
 	syschdir.o	\
 	sysmkdir.o	\
 	sysremove.o	\
 	sysrename.o	\
 	sysrmdir.o	\
-        systime.o       \
-        sysuname.o      \
-        tgi_colors.o    \
-        tgi_stddrv.o    \
-        toascii.o       \
-        vtabz.o         \
-     	wherex.o       	\
-       	wherey.o        \
+	systime.o	\
+	sysuname.o	\
+	tgi_colors.o	\
+	tgi_stddrv.o	\
+	toascii.o	\
+	vtabz.o		\
+	wherex.o	\
+	wherey.o	\
 	write.o
 
 S_EXTRA_OBJS=		\
@@ -141,5 +142,5 @@ all: 	$(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS
 clean:
 	@$(RM) $(C_OBJS:.o=.s) $(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(MOUS:.mou=.o) $(SERS:.ser=.o) $(TGIS:.tgi=.o)
 
-zap:   	clean
+zap:	clean
 	@$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)
diff --git a/libsrc/apple2/devicedir.s b/libsrc/apple2/devicedir.s
index 3572eeeeb..b2a6382f8 100644
--- a/libsrc/apple2/devicedir.s
+++ b/libsrc/apple2/devicedir.s
@@ -27,13 +27,13 @@ _getdevicedir:
 
         ; Set device
         jsr	popa
+        asl
+        asl
+        asl
+        asl
         sta	mliparam + MLI::ON_LINE::UNIT_NUM
 
         ; Check for valid slot
-        tax
-        and	#$0F
-        bne	erange
-        txa
         and	#$70
         beq	erange
 
diff --git a/libsrc/apple2/dioopen.s b/libsrc/apple2/dioopen.s
index 8d51530fa..4c07f0eb2 100644
--- a/libsrc/apple2/dioopen.s
+++ b/libsrc/apple2/dioopen.s
@@ -5,7 +5,7 @@
 ;
 
         .export 	_dio_open
-        .import 	return0, __dos_type
+        .import 	return0, __dos_type, isdevice
 
         .include	"errno.inc"
         .include	"mli.inc"
@@ -17,19 +17,22 @@ _dio_open:
         lda	#$01		; "Bad system call number"
         bne	oserr		; Branch always
 
-        ; Walk device list
-:       ldx	DEVCNT
-:       cmp	DEVLST,x
-        beq	:+		; Found drive_id in device list
-        dex
-        bpl	:-
+        ; Check for valid device
+:       tax
+        jsr	isdevice
+        beq	:+
         lda	#$28		; "No device connected"
-        
+
         ; Return oserror
 oserr:  sta	__oserror
         jmp	return0
 
         ; Return success
-:       ldx	#$00
+:       txa
+        asl
+        asl
+        asl
+        asl
+        ldx	#$00
         stx	__oserror
         rts
diff --git a/libsrc/apple2/getdevice.s b/libsrc/apple2/getdevice.s
index d07420902..ef35edea7 100644
--- a/libsrc/apple2/getdevice.s
+++ b/libsrc/apple2/getdevice.s
@@ -7,42 +7,28 @@
 
         .export         _getfirstdevice
         .export         _getnextdevice
-
-        .import         __dos_type
+        .import         __dos_type, isdevice
 
         .include        "zeropage.inc"
-        .include        "mli.inc"
 
 _getfirstdevice:
         lda     #$FF
         ; Fall through
 
 _getnextdevice:
-next:   tax
-        inx
-        txa
-        cmp     #$FF
+        tax
+next:   inx
+        cpx     #$FF
         beq     done
 
         ; Check for ProDOS 8
-        ldx     __dos_type
+        lda     __dos_type
         beq     next
 
-        ; Up to 14 units may be active
-        ldx     #DEVLST
-        stx     ptr1
-        sty     ptr1+1
-
-        ; Number of on-line devices (minus 1)
-        ldy     DEVCNT
-
-        ; Does the list contain the device?
-:       cmp     (ptr1),y
-        beq     done
-        dey
-        bpl     :-
-        bmi     next            ; Branch always
+        ; Check for valid device
+        jsr     isdevice
+        bne     next
 
-done:   ldx     #$00
+done:   txa
+        ldx     #$00
         rts
diff --git a/libsrc/apple2/isdevice.s b/libsrc/apple2/isdevice.s
new file mode 100644
index 000000000..fad168873
--- /dev/null
+++ b/libsrc/apple2/isdevice.s
@@ -0,0 +1,22 @@
+;
+; Oliver Schmidt, 2012-10-15
+;
+
+        .export         isdevice
+
+        .include        "zeropage.inc"
+        .include        "mli.inc"
+
+isdevice:
+        ldy     DEVCNT
+:       lda     DEVLST,y
+        lsr
+        lsr
+        lsr
+        lsr
+        sta     tmp1
+        cpx     tmp1
+        beq     :+
+        dey
+        bpl     :-
+:       rts
diff --git a/libsrc/apple2enh/Makefile b/libsrc/apple2enh/Makefile
index 44165604b..0c564d465 100644
--- a/libsrc/apple2enh/Makefile
+++ b/libsrc/apple2enh/Makefile
@@ -19,7 +19,7 @@ CFLAGS	= -Osir -g -T -t $(SYS) --forget-inc-paths -I ../apple2 -I ../../include
 #--------------------------------------------------------------------------
 # Rules
 
-%.o:   	../apple2/%.c
+%.o:	../apple2/%.c
 	@$(CC) -o $(notdir $(*).s) $(CFLAGS) $<
 	@$(AS) -o $@ $(AFLAGS) $(*).s
 
@@ -53,19 +53,19 @@ C_OBJS=	closedir.o	\
 	rewinddir.o
 
 S_OBJS=	_scrsize.o	\
-     	break.o		\
-     	cclear.o	\
-     	cgetc.o		\
-     	chline.o	\
+	break.o		\
+	cclear.o	\
+	cgetc.o		\
+	chline.o	\
 	close.o		\
-     	clrscr.o	\
-     	color.o		\
-        cout.o          \
-     	cputc.o		\
-     	crt0.o		\
-     	ctype.o		\
-     	cvline.o	\
-     	devicedir.o	\
+	clrscr.o	\
+	color.o		\
+	cout.o		\
+	cputc.o		\
+	crt0.o		\
+	ctype.o		\
+	cvline.o	\
+	devicedir.o	\
 	dioclose.o	\
 	diocommon.o	\
 	dioopen.o	\
@@ -78,43 +78,44 @@ S_OBJS=	_scrsize.o	\
 	exehdr.o	\
 	filedes.o	\
 	filename.o	\
-        get_ostype.o    \
+	get_ostype.o	\
 	getdevice.o	\
 	gotoxy.o	\
 	gotoy.o		\
-        home.o          \
+	home.o		\
 	initcwd.o	\
-	iobuf.o         \
-        joy_stddrv.o    \
-     	kbhit.o		\
-        mainargs.o      \
+	iobuf.o		\
+	isdevice.o	\
+	joy_stddrv.o	\
+	kbhit.o		\
+	mainargs.o	\
 	mcbdefault.o	\
 	mli.o		\
-        mouse_stddrv.o  \
+	mouse_stddrv.o	\
 	open.o		\
-        oserrlist.o     \
+	oserrlist.o	\
 	oserror.o	\
-        randomize.o     \
-        rdkey.o         \
-     	read.o          \
-     	reboot.o        \
-     	revers.o	\
+	randomize.o	\
+	rdkey.o		\
+	read.o		\
+	reboot.o	\
+	revers.o	\
 	rwcommon.o	\
 	syschdir.o	\
 	sysmkdir.o	\
 	sysremove.o	\
 	sysrename.o	\
 	sysrmdir.o	\
-        systime.o       \
-        sysuname.o      \
+	systime.o	\
+	sysuname.o	\
 	textframe.o	\
-        tgi_colors.o    \
-        tgi_stddrv.o    \
-        toascii.o       \
-        videomode.o     \
-        vtabz.o         \
-     	wherex.o       	\
-       	wherey.o        \
+	tgi_colors.o	\
+	tgi_stddrv.o	\
+	toascii.o	\
+	videomode.o	\
+	vtabz.o		\
+	wherex.o	\
+	wherey.o	\
 	write.o
 
 S_EXTRA_OBJS=		\
@@ -146,5 +147,5 @@ all: 	$(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS
 clean:
 	@$(RM) $(C_OBJS:.o=.s) $(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS:.emd=.o) $(JOYS:.joy=.o) $(MOUS:.mou=.o) $(SERS:.ser=.o) $(TGIS:.tgi=.o)
 
-zap:   	clean
+zap:	clean
 	@$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)