diff --git a/libsrc/atari/siocall.s b/libsrc/atari/siocall.s index db71e44ec..0a8f9acdd 100644 --- a/libsrc/atari/siocall.s +++ b/libsrc/atari/siocall.s @@ -1,10 +1,10 @@ ; ; Christian Groessler, October 2000 ; -; this file provides the __sio_call function -; the function does a SIO call, it's not completely +; This file provides the __sio_call function +; The function does a SIO call, it's not completely ; generic (e.g. transfer size is fixed), it's used -; to save space with _dio_read and _dio_write functions +; to save space with _dio_read and _dio_write functions. ; ; unsigned char __fastcall__ _sio_call(_driveid_t drive_id, ; _sectnum_t sect_num, @@ -12,12 +12,13 @@ ; unsigned int sio_val); ; _driveid_t - 8bit ; _sectnum_t - 16bit -; sio_cal is (sio_command | sio_direction << 8) +; sio_val is (sio_command | sio_direction << 8) ; .export __sio_call .include "atari.inc" .import popa,popax + .import sectsizetab .proc __sio_call @@ -30,18 +31,21 @@ sta DAUX1 ; set sector # stx DAUX2 jsr popa - cmp #16 + cmp #NUMDRVS bcs _inv_dev ; invalid device # adc #1 sta DUNIT ; unit number (d1,d2,d3,...) + sbc #0 + asl a + tax + lda sectsizetab,x + sta DBYTLO ; low byte of bytes to transfer + lda sectsizetab+1,x + sta DBYTHI ; high byte of bytes to transfer lda #$31 ; D1 (drive_id == 0) has id $31 sta DDEVIC - lda #0 - sta DBYTHI ; high byte of bytes to transfer lda #15 sta DTIMLO ; value got from DOS source - lda #128 - sta DBYTLO ; low byte of bytes to transfer jsr SIOV ; execute