home *** CD-ROM | disk | FTP | other *** search
- ; DISK.A86
- title 'Common Disk Entries'
- pagesize 60+11
- ;************************************************
- ;* *
- ;* XIOS DISK ROUTINE ENTRY POINTS *
- ;* CDOS 6.0 XIOS *
- ;* DRI OS ENGR, JMB *
- ;* *
- ;************************************************
- ; Major mods:
- ; 6.x
- ; 1 JUL 88 -- removed support for MDISK - GMS
- ; 6.0
- ; 20 OCT 87 -- IO_verify function supported on floppy disk - GMS
- ; 28 SEP 87 -- remove DPH_OWNER test (BDOS does it now) - JW
- ; 22 JUL 87 -- add DPH_OWNER stuff for DRV_LOCK support - JW
- ; 5.0
- ; 11 JUNE 85 -- update 4.1 ASM86 source to RASM86
-
- ; include COPYRITE.TXT
-
- nolist
- include CDOS.EQU
- list
- ; The following was included:
- ; include CDOS.EQU
-
- CGROUP group CODE
- DGROUP group ddseg0
-
- public io_seldsk@, io_write@, io_read@ ;for HEADER.A86
- public io_write_vfy@
- public io_flushbuf@
- public select_tbl$, read_tbl$, write_tbl$
-
- cseg
- extrn sel_fid@ :near, read_fid@ :near ;in FIDDS.A86
- extrn write_fid@ :near
-
- dseg
- extrn cur_disk$:byte ;in FLOPPY.A86
- extrn verify_flag$:byte, temp_verify$:byte
- extrn dph_tbl$:word ;in HEADER.A86
-
- eject
-
- cseg
- ;==========
- io_seldsk@:
- ;==========
- ; Function 9: Select Disk:
- ; entry: CL = disk to be selected
- ; DL = 00h if disk has not been previously selected
- ; = 01h if disk has been previously selected
- ; exit: AX = 0 if illegal disk
- ; = offset of DPH relative from
- ; XIOS Data Segment
-
- mov bx,offset select_tbl$
- jmps disk_branch ; vector to select routine
-
-
- ;========
- io_read@:
- ;========
- ; Function 10: Read sector:
- ; Reads the sector on the current disk, track and
- ; sector into the current dma buffer.
- ; entry: parameters on stack
- ; exit: AL = 00 if no error occured
- ; AL = 01 if an error occured
- ; AH = extended error code
-
- mov bx,offset read_tbl$
- jmps io_rw ; code shared with io_write
- eject
-
- ;=========
- io_write@:
- ;=========
- mov al,verify_flag$ ; get setup flag
- jmps io_rw0
-
-
- ;=============
- io_write_vfy@:
- ;=============
- ; Function 11: Write disk:
- ; Write the sector in the current Dma buffer to the current disk
- ; on the current track in the current sector.
- ; exit: AL = 00H if no error occured
- ; = 01H if error occured
- ; = 02H if read only disk
- ; AH = extended error code
- mov al,TRUE ; set verify flag true
-
- io_rw0:
- mov temp_verify$,al ; set verify flag
- mov bx,offset write_tbl$
- io_rw:
- mov bp,sp ; for stack parameters
- mov cl,DRIVE ; for branching out
- mov cur_disk$,cl ; save for port stuff
- ; jmps disk_branch
-
-
- disk_branch:
- ; Branch point for select, read, and write:
- ; entry: bx -> routine vector base
- ; cl = disk number
-
- mov ch,0 ; clear msb
- mov si,cx
- shl si,1 ; si = disk number index
- jmp word ptr [bx+si]
-
-
- ;============
- io_flushbuf@:
- ;============
- ; Function 12: Flush buffers:
- ; This is a nop nowadays because no XIOS buffering.
-
- xor al,al ; zero for no error
- ret
- eject
-
- ddseg0 dseg word
-
- ; These branch tables are now completely set up
- ; in the "fix_disk_tables" routine of XINIT.LIB:
-
- ; Select Disk branch table:
-
- select_tbl$ dw sel_fid@,sel_fid@,sel_fid@ ; A,B,C
- dw sel_fid@,sel_fid@,sel_fid@ ; D,E,F
- dw sel_fid@,sel_fid@,sel_fid@ ; G,H,I
- dw sel_fid@,sel_fid@,sel_fid@ ; J,K,L
- dw sel_fid@,sel_fid@,sel_fid@ ; M,N,O
- dw sel_fid@ ; P
-
- ; Read branch table:
-
- read_tbl$ dw read_fid@,read_fid@,read_fid@ ; A,B,C
- dw read_fid@,read_fid@,read_fid@ ; D,E,F
- dw read_fid@,read_fid@,read_fid@ ; G,H,I
- dw read_fid@,read_fid@,read_fid@ ; J,K,L
- dw read_fid@,read_fid@,read_fid@ ; M,N,O
- dw read_fid@ ; P
-
- ; Write branch table:
-
- write_tbl$ dw write_fid@,write_fid@,write_fid@ ; A,B,C
- dw write_fid@,write_fid@,write_fid@ ; D,E,F
- dw write_fid@,write_fid@,write_fid@ ; G,H,I
- dw write_fid@,write_fid@,write_fid@ ; J,K,L
- dw write_fid@,write_fid@,write_fid@ ; M,N,O
- dw write_fid@ ; P
-
- end
-
- ; END OF DISK.A86
-
-