Files
atari2600/source/pia.cpp
T
raimon@prometeo fb5097733d -[NEW] reorganització de códi
-[NEW] mòdul display operatiu
-[NEW] mòdul tia pràcticament acabat (falta el reset)
-[NEW] glue code para poder compilar. Primera compilació
-[NEW] Afegides classes de UI
-[NEW] Afegides classes de debug desensamblador del z80, a convertir a 6502
2026-09-17 10:43:59 +02:00

89 lines
2.4 KiB
C++

#include "pia.h"
namespace pia
{
uint8_t ram[128];
uint8_t INTIM;
uint8_t TIMINT;
void reset()
{
}
void tick()
{
}
uint8_t read(uint16_t address)
{
if (address & 0x200) {
if ( (address & 0x04) ) {
// Timer functions
if (address & 0x01) {
uint8_t flags = TIMINT;
TIMINT &= ~0x80; // resetejem el flag
return flags;
} else {
return INTIM;
}
} else {
// I/O Ports
switch( address & 0x03) {
case 0x00: // [TODO] SWCHA
return 0x00;
case 0x01: // [TODO] DDRA
return 0x00;
case 0x02: // [TODO] SWCHB
return 0x00;
case 0x03: // [TODO] DDRB
return 0x00;
default:
return 0x00;
}
}
} else {
return ram[address & 0x7f];
}
}
void write(uint16_t address, uint8_t value)
{
if (address & 0x200) {
if ( (address & 0x04) ) {
if ( (address & 0x10) ) {
// Timer functions
switch( address & 0x03) {
case 0x00: // [TODO] TIM1T
break;
case 0x01: // [TODO] TIM8T
break;
case 0x02: // [TODO] TIM64T
break;
case 0x03: // [TODO] TIM1024T
break;
}
} else {
// Funcionalitat relacionada amb les interrupcions. Ignorar per a la Atari 2600
}
} else {
// I/O Ports
switch( address & 0x03) {
case 0x00: // [TODO] SWCHA
break;
case 0x01: // [TODO] DDRA
break;
case 0x02: // [TODO] SWCHB
break;
case 0x03: // [TODO] DDRB
break;
}
}
} else {
ram[address & 0x7f] = value;
}
}
}