From 272b8e718533466e81e5006b2ce147816daf6359 Mon Sep 17 00:00:00 2001
From: "ol.sc"
Date: Mon, 15 Oct 2012 21:59:51 +0000
Subject: [PATCH] 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
---
doc/apple2.sgml | 4 +--
doc/apple2enh.sgml | 4 +--
libsrc/apple2/Makefile | 71 ++++++++++++++++++-------------------
libsrc/apple2/devicedir.s | 8 ++---
libsrc/apple2/dioopen.s | 21 ++++++-----
libsrc/apple2/getdevice.s | 34 ++++++------------
libsrc/apple2/isdevice.s | 22 ++++++++++++
libsrc/apple2enh/Makefile | 73 ++++++++++++++++++++-------------------
8 files changed, 125 insertions(+), 112 deletions(-)
create mode 100644 libsrc/apple2/isdevice.s
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
+ ; Check for valid device
+ jsr isdevice
+ bne next
- ; 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
-
-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)