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)