From: cpg Date: Sun, 20 Feb 2005 00:39:46 +0000 (+0000) Subject: clean up X-Git-Tag: V2.12.0~442 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=50319e2a4ff95a80b6cb1c617cf334ceecda7991;p=cc65 clean up git-svn-id: svn://svn.cc65.org/cc65/trunk@3396 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s index 8995e79e6..09398b9ac 100644 --- a/libsrc/atari/diopncls.s +++ b/libsrc/atari/diopncls.s @@ -16,7 +16,7 @@ .export sectsizetab .import __oserror, __sio_call, _dio_read .import pushax, addysp, subysp - .importzp ptr2, tmp1, sp + .importzp ptr2, sp .include "atari.inc" @@ -27,8 +27,16 @@ sectsizetab: .code +; code for _dio_open -.proc _dio_open +_inv_drive: + lda #NONDEV ; non-existent device + sta __oserror + lda #0 + tax + rts ; return NULL + +_dio_open: cmp #NUMDRVS ; valid drive id? bcs _inv_drive @@ -36,7 +44,7 @@ sectsizetab: asl a ; make index from drive id asl a tax - lda #128 ; preset sectsize, will be overridden by query_sectorsize + lda #128 ; preset sectsize sta sectsizetab+sst_sectsize,x sta sectsizetab+sst_flag,x ; set flag that drive is "open" lda #0 @@ -44,99 +52,64 @@ sectsizetab: sta __oserror ; success tya sta sectsizetab+sst_driveno,x - stx tmp1 + stx ptr2 lda #sectsizetab adc #0 tax - lda tmp1 - jmp query_sectorsize ; query drive for current sector size -; rts - -_inv_drive: - lda #NONDEV ; non-existent device - sta __oserror - lda #0 - tax - rts ; return NULL - -.endproc - -.proc _dio_close - - sta ptr2 - stx ptr2+1 - lda #0 - ldy #sst_flag - sta (ptr2),y - sta __oserror ; success - tax - rts ; return no error - -.endproc + stx ptr2+1 ; ptr2: pointer to sectsizetab entry ; query drive for current sector size ; procedure: -; - read sector #4 (SIO command $54) to update drive status -; read length is 128 bytes, buffer is below the stack pointer, -; sector data is ignored -; command status is ignored, we will get an error with a DD disk -; anyway (read size 128 vs. sector size 256) -; - issue SIO command $53 (get status) to retrieve the sector size -; if the command returns with an error, we set sector size to 128 -; bytes -; -; AX - handle +; - read sector #4 (SIO command $54) to update drive status; +; read length is 128 bytes, buffer is allocated on the stack, +; sector data is ignored; +; returned command status is ignored, we will get an error with +; a DD disk anyway (read size 128 vs. sector size 256); +; - issue SIO command $53 (get status) to retrieve the sector size; +; use the DVSTAT system area as return buffer; +; if the command returns with an error, set sector size to 128 +; bytes; ; -.proc query_sectorsize - - sta ptr2 - stx ptr2+1 ; remember pointer to sectsizetab entry - -; jsr pushax ; handle for subsequent __sio_call ldy #128 - jsr subysp ; use buffer on the stack + jsr subysp ; allocate buffer on the stack lda sp pha lda sp+1 - pha + pha ; save sp (buffer address) on processor stack lda ptr2 ldx ptr2+1 - jsr pushax ; handle + ldx #0 lda #4 jsr pushax ; sect_num -; ldy #128 -; jsr subysp ; use buffer on the stack -; lda sp -; ldx sp+1 pla tax - pla -; jsr pushax ; buffer address (not pushed, _dio_read is __fastcall__) + pla ; AX - buffer address + ; sst_sectsize currently 128 jsr _dio_read ; read sector to update status ldy #128 jsr addysp ; discard stack buffer - lda ptr2 ldx ptr2+1 - jsr pushax ; handle for subsequent __sio_call - + jsr pushax ; handle ldx #0 lda #4 - jsr pushax ; dummy sector # + jsr pushax ; dummy sector #, ignored by this SIO command, + ; but set to circumvent the special 1-3 sector + ; handling in __sio_call ldx #>DVSTAT lda #