mirror of
				https://github.com/SEPPDROID/Digital-Research-Source-Code.git
				synced 2025-10-26 01:44:21 +00:00 
			
		
		
		
	Upload
Digital Research
This commit is contained in:
		
							
								
								
									
										67
									
								
								CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/boot/iosys.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/boot/iosys.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
|  | ||||
| /**************************************************************** | ||||
| *								* | ||||
| *		CP/M-68K BDOS Disk I/O System Module		* | ||||
| *								* | ||||
| *	This module translates from the packet oriented I/O	* | ||||
| *	passed from the other BDOS modules into BIOS calls.	* | ||||
| *								* | ||||
| *	It includes only one external entry point: | ||||
| *		do_phio()   - do physical i/o			* | ||||
| *								* | ||||
| *								* | ||||
| *	Configured for Alcyon C on the VAX			* | ||||
| *								* | ||||
| ****************************************************************/ | ||||
|  | ||||
| #include "stdio.h"		/* Standard I/O declarations */ | ||||
|  | ||||
| #include "bdosdef.h"		/* Type and structure declarations for BDOS */ | ||||
|  | ||||
| #include "pktio.h"		/* Packet I/O definitions */ | ||||
|  | ||||
| #include "biosdef.h"		/* Declarations for BIOS entry points */ | ||||
|  | ||||
| EXTERN	udiv();			/* Assembly language unsigned divide routine */ | ||||
| 				/* in bdosif.s.  It's used because Alcyon C  */ | ||||
| 				/* can't do / or % without an external */ | ||||
|  | ||||
| /************************ | ||||
| *  do_phio entry point	* | ||||
| ************************/ | ||||
|  | ||||
| UWORD do_phio(iop) | ||||
|  | ||||
| REG struct iopb *iop;		/* iop is a pointer to a i/o parameter block */ | ||||
|  | ||||
| { | ||||
|     REG struct dph *hdrp;	  /* pointer to disk parameter header	*/ | ||||
|     REG struct dpb *dparmp;	  /* pointer to disk parameter block	*/ | ||||
|     struct | ||||
|     {				/* structure for results of external divide */ | ||||
| 	UWORD iotrk; | ||||
| 	UWORD iosect; | ||||
|     } iopdiv; | ||||
|  | ||||
|     LOCK		/* lock the disk system while doing physical i/o */ | ||||
|  | ||||
|     switch (iop->iofcn) | ||||
|     { | ||||
| 	case sel_info:	 | ||||
| 		iop->infop = bseldsk(iop->devnum, iop->ioflags); | ||||
| 		break; | ||||
|  | ||||
| 	case read: | ||||
| 		hdrp = iop->infop; | ||||
| 		dparmp = hdrp->dpbp; | ||||
| 		udiv( iop->devadr, dparmp->spt, &iopdiv ); | ||||
| 		bsettrk( iopdiv.iotrk + dparmp->trk_off ); | ||||
| 		bsetsec( bsectrn( iopdiv.iosect, hdrp->xlt ) ); | ||||
| 		bsetdma(iop->xferadr); | ||||
| 		return(bread()); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     UNLOCK | ||||
|     return(0); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user