#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; } } }