mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 02:29:52 +00:00
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
This commit is contained in:
parent
170c59e4c2
commit
272b8e7185
@ -494,10 +494,10 @@ url="ca65.html" name="assembler manual">.
|
|||||||
to the formula
|
to the formula
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
device = slot * 0x10 + (drive - 1) * 0x80
|
device = slot + (drive - 1) * 8
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
so that for example slot 6 drive 2 is mapped to <tt/device/ 0xE0.
|
so that for example slot 6 drive 2 is mapped to <tt/device/ 14.
|
||||||
|
|
||||||
<tag/Sector count/
|
<tag/Sector count/
|
||||||
The function <htmlurl url="dio-3.html" name="dio_query_sectcount()"> returns
|
The function <htmlurl url="dio-3.html" name="dio_query_sectcount()"> returns
|
||||||
|
@ -500,10 +500,10 @@ url="ca65.html" name="assembler manual">.
|
|||||||
to the formula
|
to the formula
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
device = slot * 0x10 + (drive - 1) * 0x80
|
device = slot + (drive - 1) * 8
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
so that for example slot 6 drive 2 is mapped to <tt/device/ 0xE0.
|
so that for example slot 6 drive 2 is mapped to <tt/device/ 14.
|
||||||
|
|
||||||
<tag/Sector count/
|
<tag/Sector count/
|
||||||
The function <htmlurl url="dio-3.html" name="dio_query_sectcount()"> returns
|
The function <htmlurl url="dio-3.html" name="dio_query_sectcount()"> returns
|
||||||
|
@ -19,7 +19,7 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# Rules
|
# Rules
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
@$(CC) $(CFLAGS) $<
|
@$(CC) $(CFLAGS) $<
|
||||||
@$(AS) -o $@ $(AFLAGS) $(*).s
|
@$(AS) -o $@ $(AFLAGS) $(*).s
|
||||||
|
|
||||||
@ -50,19 +50,19 @@ C_OBJS= closedir.o \
|
|||||||
rewinddir.o
|
rewinddir.o
|
||||||
|
|
||||||
S_OBJS= _scrsize.o \
|
S_OBJS= _scrsize.o \
|
||||||
break.o \
|
break.o \
|
||||||
cclear.o \
|
cclear.o \
|
||||||
cgetc.o \
|
cgetc.o \
|
||||||
chline.o \
|
chline.o \
|
||||||
close.o \
|
close.o \
|
||||||
clrscr.o \
|
clrscr.o \
|
||||||
color.o \
|
color.o \
|
||||||
cout.o \
|
cout.o \
|
||||||
cputc.o \
|
cputc.o \
|
||||||
crt0.o \
|
crt0.o \
|
||||||
ctype.o \
|
ctype.o \
|
||||||
cvline.o \
|
cvline.o \
|
||||||
devicedir.o \
|
devicedir.o \
|
||||||
dioclose.o \
|
dioclose.o \
|
||||||
diocommon.o \
|
diocommon.o \
|
||||||
dioopen.o \
|
dioopen.o \
|
||||||
@ -75,41 +75,42 @@ S_OBJS= _scrsize.o \
|
|||||||
exehdr.o \
|
exehdr.o \
|
||||||
filedes.o \
|
filedes.o \
|
||||||
filename.o \
|
filename.o \
|
||||||
get_ostype.o \
|
get_ostype.o \
|
||||||
getdevice.o \
|
getdevice.o \
|
||||||
gotoxy.o \
|
gotoxy.o \
|
||||||
gotoy.o \
|
gotoy.o \
|
||||||
home.o \
|
home.o \
|
||||||
initcwd.o \
|
initcwd.o \
|
||||||
iobuf.o \
|
iobuf.o \
|
||||||
joy_stddrv.o \
|
isdevice.o \
|
||||||
kbhit.o \
|
joy_stddrv.o \
|
||||||
mainargs.o \
|
kbhit.o \
|
||||||
|
mainargs.o \
|
||||||
mcbdefault.o \
|
mcbdefault.o \
|
||||||
mli.o \
|
mli.o \
|
||||||
mouse_stddrv.o \
|
mouse_stddrv.o \
|
||||||
open.o \
|
open.o \
|
||||||
oserrlist.o \
|
oserrlist.o \
|
||||||
oserror.o \
|
oserror.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
rdkey.o \
|
rdkey.o \
|
||||||
read.o \
|
read.o \
|
||||||
reboot.o \
|
reboot.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
rwcommon.o \
|
rwcommon.o \
|
||||||
syschdir.o \
|
syschdir.o \
|
||||||
sysmkdir.o \
|
sysmkdir.o \
|
||||||
sysremove.o \
|
sysremove.o \
|
||||||
sysrename.o \
|
sysrename.o \
|
||||||
sysrmdir.o \
|
sysrmdir.o \
|
||||||
systime.o \
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
tgi_colors.o \
|
tgi_colors.o \
|
||||||
tgi_stddrv.o \
|
tgi_stddrv.o \
|
||||||
toascii.o \
|
toascii.o \
|
||||||
vtabz.o \
|
vtabz.o \
|
||||||
wherex.o \
|
wherex.o \
|
||||||
wherey.o \
|
wherey.o \
|
||||||
write.o
|
write.o
|
||||||
|
|
||||||
S_EXTRA_OBJS= \
|
S_EXTRA_OBJS= \
|
||||||
@ -141,5 +142,5 @@ all: $(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS
|
|||||||
clean:
|
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)
|
@$(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)
|
@$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)
|
||||||
|
@ -27,13 +27,13 @@ _getdevicedir:
|
|||||||
|
|
||||||
; Set device
|
; Set device
|
||||||
jsr popa
|
jsr popa
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
sta mliparam + MLI::ON_LINE::UNIT_NUM
|
sta mliparam + MLI::ON_LINE::UNIT_NUM
|
||||||
|
|
||||||
; Check for valid slot
|
; Check for valid slot
|
||||||
tax
|
|
||||||
and #$0F
|
|
||||||
bne erange
|
|
||||||
txa
|
|
||||||
and #$70
|
and #$70
|
||||||
beq erange
|
beq erange
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _dio_open
|
.export _dio_open
|
||||||
.import return0, __dos_type
|
.import return0, __dos_type, isdevice
|
||||||
|
|
||||||
.include "errno.inc"
|
.include "errno.inc"
|
||||||
.include "mli.inc"
|
.include "mli.inc"
|
||||||
@ -17,19 +17,22 @@ _dio_open:
|
|||||||
lda #$01 ; "Bad system call number"
|
lda #$01 ; "Bad system call number"
|
||||||
bne oserr ; Branch always
|
bne oserr ; Branch always
|
||||||
|
|
||||||
; Walk device list
|
; Check for valid device
|
||||||
: ldx DEVCNT
|
: tax
|
||||||
: cmp DEVLST,x
|
jsr isdevice
|
||||||
beq :+ ; Found drive_id in device list
|
beq :+
|
||||||
dex
|
|
||||||
bpl :-
|
|
||||||
lda #$28 ; "No device connected"
|
lda #$28 ; "No device connected"
|
||||||
|
|
||||||
; Return oserror
|
; Return oserror
|
||||||
oserr: sta __oserror
|
oserr: sta __oserror
|
||||||
jmp return0
|
jmp return0
|
||||||
|
|
||||||
; Return success
|
; Return success
|
||||||
: ldx #$00
|
: txa
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
ldx #$00
|
||||||
stx __oserror
|
stx __oserror
|
||||||
rts
|
rts
|
||||||
|
@ -7,42 +7,28 @@
|
|||||||
|
|
||||||
.export _getfirstdevice
|
.export _getfirstdevice
|
||||||
.export _getnextdevice
|
.export _getnextdevice
|
||||||
|
.import __dos_type, isdevice
|
||||||
.import __dos_type
|
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "mli.inc"
|
|
||||||
|
|
||||||
_getfirstdevice:
|
_getfirstdevice:
|
||||||
lda #$FF
|
lda #$FF
|
||||||
; Fall through
|
; Fall through
|
||||||
|
|
||||||
_getnextdevice:
|
_getnextdevice:
|
||||||
next: tax
|
tax
|
||||||
inx
|
next: inx
|
||||||
txa
|
cpx #$FF
|
||||||
cmp #$FF
|
|
||||||
beq done
|
beq done
|
||||||
|
|
||||||
; Check for ProDOS 8
|
; Check for ProDOS 8
|
||||||
ldx __dos_type
|
lda __dos_type
|
||||||
beq next
|
beq next
|
||||||
|
|
||||||
; Up to 14 units may be active
|
; Check for valid device
|
||||||
ldx #<DEVLST
|
jsr isdevice
|
||||||
ldy #>DEVLST
|
bne next
|
||||||
stx ptr1
|
|
||||||
sty ptr1+1
|
|
||||||
|
|
||||||
; Number of on-line devices (minus 1)
|
done: txa
|
||||||
ldy DEVCNT
|
ldx #$00
|
||||||
|
|
||||||
; Does the list contain the device?
|
|
||||||
: cmp (ptr1),y
|
|
||||||
beq done
|
|
||||||
dey
|
|
||||||
bpl :-
|
|
||||||
bmi next ; Branch always
|
|
||||||
|
|
||||||
done: ldx #$00
|
|
||||||
rts
|
rts
|
||||||
|
22
libsrc/apple2/isdevice.s
Normal file
22
libsrc/apple2/isdevice.s
Normal file
@ -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
|
@ -19,7 +19,7 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I ../apple2 -I ../../include
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# Rules
|
# Rules
|
||||||
|
|
||||||
%.o: ../apple2/%.c
|
%.o: ../apple2/%.c
|
||||||
@$(CC) -o $(notdir $(*).s) $(CFLAGS) $<
|
@$(CC) -o $(notdir $(*).s) $(CFLAGS) $<
|
||||||
@$(AS) -o $@ $(AFLAGS) $(*).s
|
@$(AS) -o $@ $(AFLAGS) $(*).s
|
||||||
|
|
||||||
@ -53,19 +53,19 @@ C_OBJS= closedir.o \
|
|||||||
rewinddir.o
|
rewinddir.o
|
||||||
|
|
||||||
S_OBJS= _scrsize.o \
|
S_OBJS= _scrsize.o \
|
||||||
break.o \
|
break.o \
|
||||||
cclear.o \
|
cclear.o \
|
||||||
cgetc.o \
|
cgetc.o \
|
||||||
chline.o \
|
chline.o \
|
||||||
close.o \
|
close.o \
|
||||||
clrscr.o \
|
clrscr.o \
|
||||||
color.o \
|
color.o \
|
||||||
cout.o \
|
cout.o \
|
||||||
cputc.o \
|
cputc.o \
|
||||||
crt0.o \
|
crt0.o \
|
||||||
ctype.o \
|
ctype.o \
|
||||||
cvline.o \
|
cvline.o \
|
||||||
devicedir.o \
|
devicedir.o \
|
||||||
dioclose.o \
|
dioclose.o \
|
||||||
diocommon.o \
|
diocommon.o \
|
||||||
dioopen.o \
|
dioopen.o \
|
||||||
@ -78,43 +78,44 @@ S_OBJS= _scrsize.o \
|
|||||||
exehdr.o \
|
exehdr.o \
|
||||||
filedes.o \
|
filedes.o \
|
||||||
filename.o \
|
filename.o \
|
||||||
get_ostype.o \
|
get_ostype.o \
|
||||||
getdevice.o \
|
getdevice.o \
|
||||||
gotoxy.o \
|
gotoxy.o \
|
||||||
gotoy.o \
|
gotoy.o \
|
||||||
home.o \
|
home.o \
|
||||||
initcwd.o \
|
initcwd.o \
|
||||||
iobuf.o \
|
iobuf.o \
|
||||||
joy_stddrv.o \
|
isdevice.o \
|
||||||
kbhit.o \
|
joy_stddrv.o \
|
||||||
mainargs.o \
|
kbhit.o \
|
||||||
|
mainargs.o \
|
||||||
mcbdefault.o \
|
mcbdefault.o \
|
||||||
mli.o \
|
mli.o \
|
||||||
mouse_stddrv.o \
|
mouse_stddrv.o \
|
||||||
open.o \
|
open.o \
|
||||||
oserrlist.o \
|
oserrlist.o \
|
||||||
oserror.o \
|
oserror.o \
|
||||||
randomize.o \
|
randomize.o \
|
||||||
rdkey.o \
|
rdkey.o \
|
||||||
read.o \
|
read.o \
|
||||||
reboot.o \
|
reboot.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
rwcommon.o \
|
rwcommon.o \
|
||||||
syschdir.o \
|
syschdir.o \
|
||||||
sysmkdir.o \
|
sysmkdir.o \
|
||||||
sysremove.o \
|
sysremove.o \
|
||||||
sysrename.o \
|
sysrename.o \
|
||||||
sysrmdir.o \
|
sysrmdir.o \
|
||||||
systime.o \
|
systime.o \
|
||||||
sysuname.o \
|
sysuname.o \
|
||||||
textframe.o \
|
textframe.o \
|
||||||
tgi_colors.o \
|
tgi_colors.o \
|
||||||
tgi_stddrv.o \
|
tgi_stddrv.o \
|
||||||
toascii.o \
|
toascii.o \
|
||||||
videomode.o \
|
videomode.o \
|
||||||
vtabz.o \
|
vtabz.o \
|
||||||
wherex.o \
|
wherex.o \
|
||||||
wherey.o \
|
wherey.o \
|
||||||
write.o
|
write.o
|
||||||
|
|
||||||
S_EXTRA_OBJS= \
|
S_EXTRA_OBJS= \
|
||||||
@ -146,5 +147,5 @@ all: $(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS
|
|||||||
clean:
|
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)
|
@$(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)
|
@$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)
|
||||||
|
Loading…
Reference in New Issue
Block a user