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

⟦95583350d⟧ TextFile

    Length: 1673 (0x689)
    Types: TextFile
    Notes: UNIX file
    Names: »test.c«

Derivation

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

TextFile



/*
** ZCIO1 base address
*/
#define	ZCIO1	0x0000
#define	PKBD	0x0205	/* keyboard enable port		*/
#define	KBDEN	0x02	/* keyboard enable bit		*/
#define PC2	0x04
#define	PC3	0x08

/*
 * Control register addresses
 */
#define	MICR	0x01	/* master interrupt		*/
#define	MCCR	0x03	/* master configuration		*/

/*
 * Register addresses for Port A
 */
#define	PACAS	0x11	/* port a command and status	*/
#define	PAMS	0x41	/* port a mode specification	*/
#define	PAHS	0x43	/* port a handshake spec	*/
#define	PADPP	0x45	/* port a data path polarity	*/
#define	PADD	0x47	/* port a data direction	*/
#define	PASIOC	0x49	/* port a special io control	*/
#define	PAPP	0x4b	/* port a pattern palarity	*/
#define	PAPT	0x4d	/* port a pattern transition	*/
#define	PAPM	0x4f	/* port a patterm mask		*/
#define	PAIV	0x05	/* port a interrupt vector	*/
#define	PADATA	0x1b	/* port a data			*/

/*
 * Register addresses for Port C
 */
#define	PCDD	0x0d	/* port c data direction	*/
#define	PCSIOC	0x0f	/* port c special io control	*/
#define	PCDPP	0x0b	/* port c data path polarity	*/
#define	PCDATA	0x1f	/* port c data			*/

struct ptable
{
	unsigned	paddr;
	char		*pname;
};


struct ptable ptable[] =
{
	PACAS,	"PACAS",
	PAMS,	"PAMS",
	PAHS,	"PAHS",
	PADPP,	"PADPP",
	PADD,	"PADD",
	PASIOC,	"PASIOC",
	PAPP,	"PAPP",
	PAPT,	"PAPT",
	PAPM,	"PAPM",
	PAIV,	"PAIV",
	PADATA,	"PADATA",
	PCDD,	"PCDD",
	PCSIOC,	"PCSIOC",
	PCDPP,	"PCDPP",
	PCDATA,	"PCDATA"
};


main()
{
	int	fd;
	struct ptable	*p;

	fd = open("/dev/port", 2);
	if ( fd < 0 )
		return;
	for ( p=ptable ; p<ptable+(sizeof(ptable)/sizeof(ptable[0])) ; p++ )
		printf("%s\t0x%x\n", p->pname, inb(fd, p->paddr) & 0xff);
	printf("\n");
}