; _sectnum_t - 16bit
;
-
+ .import __sio_call,pushax
.export __dio_read
- .import popa,popax
.include "atari.inc"
.proc __dio_read
- sta DBUFLO ; set buffer address into DCB
- stx DBUFHI
- jsr popax
- sta DAUX1 ; set sector #
- stx DAUX2
- jsr popa
- cmp #16
- bcs _inv_dev ; invalid device #
- adc #1
- sta DUNIT ; unit number (d1,d2,d3,...)
- lda #$31 ; D1 (drive_id == 0) has id $31
- sta DDEVIC
- lda #0
- sta DBYTHI ; high byte of bytes to transfer
- lda #%01000000 ; indicate i/o direction (read)
- sta DSTATS
- lda #15
- sta DTIMLO ; value got from DOS source
- lda #128
- sta DBYTLO ; low byte of bytes to transfer
- lda #SIO_READ ; read sector
- sta DCOMND
-
- jsr SIOV ; execute
-
- ldx #0
- lda DSTATS
- bmi _req_err ; error occurred
- txa ; no error occurred
-_req_err:
- rts
-
-_inv_dev:
- ldx #0
- lda #NONDEV ; non-existent device error
- rts
+ jsr pushax ; push buffer address
+ ldx #%01000000 ; direction value
+ lda #SIO_READ ; read sector command
+ jmp __sio_call ; do the call and return to the user
.endproc
+
; _sectnum_t - 16bit
;
-
+ .import __sio_call,pushax
.export __dio_write
- .import popa,popax
.include "atari.inc"
.proc __dio_write
- sta DBUFLO ; set buffer address into DCB
- stx DBUFHI
- jsr popax
- sta DAUX1 ; set sector #
- stx DAUX2
- jsr popa
- cmp #16
- bcs _inv_dev ; invalid device #
- adc #1
- sta DUNIT ; unit number (d1,d2,d3,...)
- lda #$31 ; D1 (drive_id == 0) has id $31
- sta DDEVIC
- lda #0
- sta DBYTHI ; high byte of bytes to transfer
- lda #%10000000 ; indicate i/o direction (write)
- sta DSTATS
- lda #15
- sta DTIMLO ; value got from DOS source
- lda #128
- sta DBYTLO ; low byte of bytes to transfer
- lda #SIO_WRITE ; write sector
- sta DCOMND
-
- jsr SIOV ; execute
-
- ldx #0
- lda DSTATS
- bmi _req_err ; error occurred
- txa ; no error occurred
-_req_err:
- rts
-
-_inv_dev:
- ldx #0
- lda #NONDEV ; non-existent device error
- rts
+ jsr pushax ; push buffer address
+ ldx #%10000000 ; indicate i/o direction (write)
+ lda #SIO_WRITE ; write sector command
+ jmp __sio_call ; do the call and return to the user
.endproc
+