; ; 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 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