ciaa
.cia = &ciaa,
ciaa.pra &= ~2;
ciaa.pra |= 2;
DEFINE(CIAABASE, &ciaa);
wrprot = !(ciaa.pra & DSKPROT);
changed = !(ciaa.pra & DSKCHANGE);
ciaa.crb = 8; /* one-shot, stop */
ciaa.tblo=ticks%256;
ciaa.tbhi=ticks/256;
ciaa.crb=0x19; /*count eclock, force load, one-shoot, start */
if (!(ciaa.pra & DSKRDY) || --on_attempts == 0) {
if (ciaa.pra & DSKTRACK0)
if ((ciaa.pra & DSKTRACK0) == 0)
id |= (ciaa.pra & DSKRDY) ? 0 : 1; /* cia regs are low-active! */
if ((ciaa.pra & DSKPROT) == 0) {
case 0: data = ~amiga_custom.joy0dat; button = (~ciaa.pra >> 6) & 1; break;
case 1: data = ~amiga_custom.joy1dat; button = (~ciaa.pra >> 7) & 1; break;
scancode = ~ciaa.sdr; /* get and invert scancode (keyboard is active low) */
ciaa.cra |= 0x40; /* switch SP pin to output for handshake */
ciaa.cra &= ~0x40; /* switch CIA serial port to input mode */
ciaa.cra &= ~0x41; /* serial data in, turn off TA */
input_report_key(dev, BTN_LEFT, ciaa.pra & 0x40);
ciaa.ddrb = 0xff; /* all pins output */
ciaa.ddrb = 0; /* all pins input */
s->u.amiga.data = ciaa.prb;
s->u.amiga.datadir = ciaa.ddrb;
ciaa.prb = s->u.amiga.data;
ciaa.ddrb = s->u.amiga.datadir;
ciaa.ddrb = 0xff;
p = parport_register_port((unsigned long)&ciaa.prb, IRQ_AMIGA_CIAA_FLG,
ciaa.prb = data;
return ciaa.prb;
ciaa.pra &= ~0x02;
ciaa.pra |= 0x02;