kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
72 wiersze
1.1 KiB
C
72 wiersze
1.1 KiB
C
![]() |
#include <stdio.h>
|
||
|
|
||
|
#include "atari.h"
|
||
|
#include "cpu.h"
|
||
|
#include "pia.h"
|
||
|
|
||
|
UBYTE PACTL;
|
||
|
UBYTE PBCTL;
|
||
|
UBYTE PORTA;
|
||
|
UBYTE PORTB;
|
||
|
|
||
|
|
||
|
static UBYTE PORTA_mask = 0xff;
|
||
|
static UBYTE PORTB_mask = 0xff;
|
||
|
|
||
|
void PIA_Initialise(void)
|
||
|
{
|
||
|
PORTA = 0xff;
|
||
|
PORTB = 0xff;
|
||
|
}
|
||
|
|
||
|
UBYTE PIA_GetByte(UWORD addr)
|
||
|
{
|
||
|
UBYTE byte=0;
|
||
|
|
||
|
addr &= 0x03;
|
||
|
switch (addr) {
|
||
|
case _PACTL:
|
||
|
byte = PACTL;
|
||
|
break;
|
||
|
case _PBCTL:
|
||
|
byte = PBCTL;
|
||
|
break;
|
||
|
case _PORTA:
|
||
|
byte = Atari_PORT(0);
|
||
|
byte &= PORTA_mask;
|
||
|
break;
|
||
|
case _PORTB:
|
||
|
byte = Atari_PORT(1);
|
||
|
byte &= PORTB_mask;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return byte;
|
||
|
}
|
||
|
|
||
|
int PIA_PutByte(UWORD addr, UBYTE byte)
|
||
|
{
|
||
|
addr &= 0xff03;
|
||
|
|
||
|
switch (addr) {
|
||
|
case _PACTL:
|
||
|
PACTL = byte;
|
||
|
break;
|
||
|
case _PBCTL:
|
||
|
PBCTL = byte;
|
||
|
break;
|
||
|
case _PORTA:
|
||
|
if (!(PACTL & 0x04))
|
||
|
PORTA_mask = ~byte;
|
||
|
break;
|
||
|
case _PORTB:
|
||
|
// if ((byte == 0) && (machine == AtariXL || machine == AtariXE))
|
||
|
// break; /* special hack for old Atari800 games like is Tapper, for example */
|
||
|
if (!(PBCTL & 0x04))
|
||
|
PORTB_mask = ~byte;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|