home *** CD-ROM | disk | FTP | other *** search
- ;************************************************************************
- ;* *
- ;* READ/WRITE-Unterprogramme *
- ;* *
- ;************************************************************************
-
- entry _seqrd, _seqwr, _rndrd, _rndwr, _chrrd, _chrwr
- maclib BDOSCALL.MLB ;
-
- _chrrd: push de ;
- pop ix ;
- ld a,(ix-3) ; count
- and 7fh ;
- jr nz,noreadsec ;
- push de ;
- call _seqrd ;
- pop ix ;
- ret nz ;
- xor a ;
- noreadsec: inc a ;
- ld (ix-3),a ; next count
- dec a ;
- ld l,(ix-2) ;
- ld h,(ix-1) ;
- call _adda## ;
- ret_z: ld a,(hl) ;
- cp a ; set zero
- ret ;
-
- _chrwr: push de ;
- pop ix ;
- set 2,(ix+0) ; Buffer dirty
- ld a,(ix-3) ; count
- ld l,(ix-2) ;
- ld h,(ix-1) ;
- call _adda## ;
- ld (hl),c ;
- ld a,(ix-3) ;
- inc a ;
- and 7fh ;
- ld (ix-3),a ;
- jr nz,ret_z ;
-
- _seqwr: ld bc,200h+write_seq ; BDOS schreiben
- ld a,(de) ; Buffer not dirty
- and not 4 ;
- ld (de),a ;
- jr common_io ;
-
- _seqrd: ld bc,read_seq ; BDOS-Callnr
-
- common_io: ld a,(de) ; Statusbyte lesen
- bit 0,a ; Datei ge|ffnet?
- jr z,io_err ;
- or b ; bei write ist Bit 1 gesetzt
- ld (de),a ; Statusbyte zur}ck
- inc de ; zeigt jetzt auf BDOS-Teil des FCB
- push bc ;
- push de ;
- pop ix ;
- push de ;
- ld e,(ix-3) ;
- ld d,(ix-2) ;
- bdos set_dma_addr ;
- pop de ;
- pop bc ;
- bdos ; lies/schreibe Sektor
- or a ; Fehler aufgetreten?
- ret ;
-
-
- _rndwr: ld bc,200h+write_random ; Flag und BDOS-Function
- jr common_rnd_io ;
-
- _rndrd: ld bc,read_random ; BDOS-Function
-
- common_rnd_io: push de ;
- pop ix ; ix zeigt auf FCB-1
- ld (ix+34),l ; r0
- ld (ix+35),h ; r1
- ld (ix+36),0 ; r2
- jr common_io ; weiter wie sequential I/O
-
- io_err: ld hl,errmsg ;
- jp _exit## ;
- dseg ;
- errmsg: db "MACLIB Err: File not open during I/O",0
- cseg ;
- end ;