From 5ee3c88017d45c5a11216e3f5833ecbe234c9a4c Mon Sep 17 00:00:00 2001 From: Bill Kendrick Date: Sun, 13 Jan 2019 21:31:18 -0800 Subject: [PATCH] Some PIA register #defines Some register #defines for PIA. (Some may be too Atari-centric -- I know PIA chip was used by PET & perhaps other platforms supported by cc65. If so, perhaps we can define them elsewhere. Not sure whether they'd be the same for 5200; I admit I know zilch about that system except that it's _more or less_ an Atari 400) --- include/_pia.h | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/include/_pia.h b/include/_pia.h index 867c8f8a5..bd4f7c8ba 100644 --- a/include/_pia.h +++ b/include/_pia.h @@ -4,9 +4,14 @@ /* */ /* Internal include file, do not use directly */ /* */ +/* The Peripheral Interface Adapter (PIA) chip provides parallel I/O */ +/* interfacing; it was used in Atari 400/800 and Commodore PET family of */ +/* computers, for joystick and interrupts. */ +/* - Sources; various + Wikpedia article on "Peripheral Interface Adapter" */ /* */ /* */ /* (C) 2000 Freddy Offenga */ +/* 2019-01-13: Bill Kendrick : Defines for registers */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -34,18 +39,45 @@ #define __PIA_H -/* Define a structure with the pia register offsets */ +/* Define a structure with the PIA register offsets */ struct __pia { unsigned char porta; /* port A data r/w */ +/* Paddle 0-3 triggers (per PORTA bits) */ +#define PORTA_PTRIG3 0x80 +#define PORTA_PTRIG2 0x40 +#define PORTA_PTRIG1 0x08 +#define PORTA_PTRIG0 0x04 + + unsigned char portb; /* port B data r/w */ +/* Paddle 4-7 triggers (per PORTB bits); only 400/800 had four controller ports */ +#define PORTB_PTRIG7 0x80 +#define PORTB_PTRIG6 0x40 +#define PORTB_PTRIG5 0x08 +#define PORTB_PTRIG4 0x04 + + /* See also: "JOY_xxx_MASK" in "atari.h" */ + unsigned char pactl; /* port A control */ unsigned char pbctl; /* port B control */ + +#define PxCTL_IRQ_ENABLE 0x01 /* (W) Peripheral A interrupt (IRQ) enable. */ + /* One equals enable. Set by the OS but available to the user; + reset on powerup. */ +#define PxCTL_BIT1 0x02 /* "Set to zero" */ +#define PxCTL_ADDRESSING 0x04 /* (W) Controls PORTA addressing */ + /* One equals PORTA register; zero equals direction control register */ +#define PACTL_MOTOR_CONTROL 0x08 /* (W) Peripheral motor control line (turn the cassette on + or off; zero equals on) */ +#define PBCTL_PERIPH_CMD_IDENT 0x08 /* Peripheral command identification (serial bus command) */ +#define PxCTL_BIT4 0x10 /* "Set to one" */ +#define PxCTL_BIT5 0x20 /* "Set to one" */ +#define PxCTL_BIT6 0x40 /* "Set to zero" */ +#define PxCTL_IRQ_STATUS 0x80 /* Peripheral interrupt (IRQ) status bit. */ + /* Set by Peripherals (PORTA / PORTB). Reset by reading PORTA / PORTB*/ }; /* End of _pia.h */ #endif - - - -- 2.39.5