added _dio_read() and _dio_write() handlers
git-svn-id: svn://svn.cc65.org/cc65/trunk@349 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
55
libsrc/atari/dioread.s
Normal file
55
libsrc/atari/dioread.s
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
;
|
||||||
|
; Christian Groessler, October 2000
|
||||||
|
;
|
||||||
|
; this file provides the _dio_read function
|
||||||
|
;
|
||||||
|
; unsigned char __fastcall__ _dio_read(_driveid_t drive_id, _sectnum_t sect_num, void *buffer);
|
||||||
|
; _driveid_t - 8bit
|
||||||
|
; _sectnum_t - 16bit
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
.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
|
||||||
|
|
||||||
|
.endproc
|
||||||
55
libsrc/atari/diowrite.s
Normal file
55
libsrc/atari/diowrite.s
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
;
|
||||||
|
; Christian Groessler, October 2000
|
||||||
|
;
|
||||||
|
; this file provides the _dio_write function
|
||||||
|
;
|
||||||
|
; unsigned char __fastcall__ _dio_write(_driveid_t drive_id, _sectnum_t sect_num, void *buffer);
|
||||||
|
; _driveid_t - 8bit
|
||||||
|
; _sectnum_t - 16bit
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
.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
|
||||||
|
|
||||||
|
.endproc
|
||||||
Reference in New Issue
Block a user