DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦ac56bfa73⟧ TextFile

    Length: 1276 (0x4fc)
    Types: TextFile
    Notes: UNIX file
    Names: »port.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦2d53db1df⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »hr/src/port/port.c« 

TextFile



/*
 * Commodore Z8000-HR console
 */
#include	<coherent.h>
#include	<con.h>
#include	<io.h>
#include	<uproc.h>
#include	<errno.h>
#include	<sched.h>
#include	<sgtty.h>
#include	<signal.h>
#include	<stat.h>


#define	MAJOR	9		/* major device # of the console */
#define	PIOINW	1		/* input word		*/
#define	PIOINB	2		/* input byte		*/
#define	PIOOUTW	3		/* output word		*/
#define	PIOOUTB	4		/* output byte		*/

struct pio
{
	unsigned paddr;		/* port address		*/
	unsigned pdata;		/* port data		*/
};

int	ptioctl( ),
	ptload,
	ptuload,
	nulldev();


CON ptcon = {
	DFCHR,
	MAJOR,
	nulldev,
	nulldev,
	nulldev,
	nulldev,
	nulldev,
	ptioctl,
	nulldev,
	nulldev,
	ptload,
	ptuload
};



ptload()
{
	printf("PTload\n");
}

ptuload()
{
}

ptioctl( dev, com, args)
dev_t	dev;
int	*args;
{
	register unsigned self;
	struct	 pio	  pio;

	self = minor( dev);

	if ( com != PIOINB && com != PIOINW && com != PIOOUTW && com != PIOOUTB )
		return;
	ukcopy(args, &pio, sizeof(pio));
	if ( u.u_error )
		return;

	if ( com == PIOOUTW )
	{
		out(pio.paddr, pio.pdata);
		return;
	}
	else if ( com == PIOOUTB )
	{
		outb(pio.paddr, pio.pdata);
		return;
	}
	else if (com == PIOINB )
		pio.pdata = inb(pio.paddr) & 0xff;
	else
		pio.pdata = in(pio.paddr);
	kucopy(&pio, args, sizeof(pio));
}