|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2134 (0x856)
Types: TextFile
Notes: UNIX file
Names: »null.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦2d53db1df⟧ UNIX Filesystem
└─⟦this⟧ »sys/coh/null.c«
/* (-lgl
* The information contained herein is a trade secret of Mark Williams
* Company, and is confidential information. It is provided under a
* license agreement, and may be copied or disclosed only under the
* terms of that agreement. Any reproduction or disclosure of this
* material without the express written authorization of Mark Williams
* Company or persuant to the license agreement is unlawful.
*
* COHERENT Version 0.7.3
* Copyright (c) 1982, 1983, 1984.
* An unpublished work by Mark Williams Company, Chicago.
* All rights reserved.
-lgl) */
/*
* Null and memory driver.
* Minor device 0 is /dev/null
* Minor device 1 is physical memory
* Minor device 2 is kernel data
*/
#include <coherent.h>
#include <con.h>
#include <errno.h>
#include <stat.h>
#include <uproc.h>
/*
* Functions for configuration.
*/
int nlread();
int nlwrite();
int nulldev();
int nonedev();
/*
* Configuration table.
*/
CON nlcon ={
DFCHR, /* Flags */
0, /* Major index */
nulldev, /* Open */
nulldev, /* Close */
nulldev, /* Block */
nlread, /* Read */
nlwrite, /* Write */
nonedev, /* Ioctl */
nulldev, /* Powerfail */
nulldev, /* Timeout */
nulldev, /* Load */
nulldev, /* Unload */
};
/*
* Null/memory read routine.
*/
nlread(dev, iop)
dev_t dev;
register IO *iop;
{
register unsigned n;
switch (minor(dev)) {
case 0:
n = 0;
break;
case 1:
n = pucopy((long)iop->io_seek, iop->io_base, iop->io_ioc);
break;
case 2:
n = kucopy(kdaddr(iop->io_seek), iop->io_base, iop->io_ioc);
break;
default:
u.u_error = ENXIO;
return;
}
iop->io_ioc -= n;
if (u.u_error == EFAULT)
u.u_error = 0;
}
/*
* Null/memory write routine.
*/
nlwrite(dev, iop)
dev_t dev;
register IO *iop;
{
register unsigned n;
switch (minor(dev)) {
case 0:
n = iop->io_ioc;
break;
case 1:
n = upcopy(iop->io_base, (long)iop->io_seek, iop->io_ioc);
break;
case 2:
n = ukcopy(iop->io_base, kdaddr(iop->io_seek), iop->io_ioc);
break;
default:
u.u_error = ENXIO;
return;
}
iop->io_ioc -= n;
if (u.u_error == EFAULT)
u.u_error = 0;
}