mirror of
https://github.com/cc65/cc65.git
synced 2024-12-28 22:30:12 +00:00
8476360e9f
* Trying to open an unused drive would leave a byte on the hardware stack. * Too high device numbers weren't caught.
86 lines
1.9 KiB
ArmAsm
86 lines
1.9 KiB
ArmAsm
;
|
|
; 2001-07-02, Maciej 'YTM/Elysium' Witkowiak
|
|
; 2015-08-24, Greg King
|
|
;
|
|
; based on Atari version by Christian Groessler
|
|
;
|
|
; dhandle_t __fastcall__ dio_open (unsigned char device);
|
|
; unsigned char __fastcall__ dio_close (dhandle_t handle);
|
|
;
|
|
; dio_open sets given device as current and initializes disk
|
|
; dio_close does nothing special
|
|
|
|
.export _dio_open, _dio_close
|
|
.import __oserror, _OpenDisk
|
|
.importzp ptr1, tmp1
|
|
|
|
.include "dio.inc"
|
|
.include "jumptab.inc"
|
|
.include "geossym.inc"
|
|
.include "const.inc"
|
|
|
|
.bss
|
|
|
|
sectsizetab:
|
|
.res 4 * sst_size ; this is hardcoded
|
|
|
|
.code
|
|
|
|
_dio_open:
|
|
cmp #4
|
|
bcs _inv_drive
|
|
tax
|
|
lda driveType,x ; check if there's a device
|
|
beq _inv_drive
|
|
txa
|
|
pha
|
|
clc
|
|
adc #8 ; normalize devnum
|
|
sta curDevice
|
|
jsr SetDevice
|
|
jsr _OpenDisk ; take care for errors there
|
|
|
|
pla
|
|
tay ; drive #
|
|
asl a ; make index from drive id
|
|
asl a
|
|
tax
|
|
|
|
lda #0
|
|
sta sectsizetab+sst_sectsize,x
|
|
lda #128
|
|
sta sectsizetab+sst_flag,x ; set flag that drive is "open"
|
|
lda #1
|
|
sta sectsizetab+sst_sectsize+1,x
|
|
tya
|
|
sta sectsizetab+sst_driveno,x
|
|
|
|
stx tmp1
|
|
lda #<sectsizetab
|
|
clc
|
|
adc tmp1
|
|
sta tmp1
|
|
lda #>sectsizetab
|
|
adc #0
|
|
tax
|
|
lda tmp1
|
|
|
|
rts
|
|
|
|
_inv_drive:
|
|
lda #DEV_NOT_FOUND
|
|
sta __oserror
|
|
lda #0
|
|
tax
|
|
rts
|
|
|
|
_dio_close:
|
|
sta ptr1
|
|
stx ptr1+1
|
|
lda #0
|
|
ldy #sst_flag
|
|
sta (ptr1),y
|
|
sta __oserror ; success
|
|
tax
|
|
rts ; return no error
|