diff --git a/firmware/rtc/.gitignore b/firmware/rtc/.gitignore index 8954bf5..15bb9a5 100644 --- a/firmware/rtc/.gitignore +++ b/firmware/rtc/.gitignore @@ -1,2 +1,3 @@ Mac128kRTC.axf MacPlusRTC.axf +avr_mcu_section.h diff --git a/firmware/rtc/MacRTC.cpp b/firmware/rtc/MacRTC.c similarity index 95% rename from firmware/rtc/MacRTC.cpp rename to firmware/rtc/MacRTC.c index f8f3bc3..931ad5d 100644 --- a/firmware/rtc/MacRTC.cpp +++ b/firmware/rtc/MacRTC.c @@ -15,8 +15,19 @@ #include #include +#ifdef DO_SIMAVR +#include "avr_mcu_section.h" +AVR_MCU(32768, "attiny85"); +AVR_MCU_SIMAVR_COMMAND (& GPIOR0 ); +const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = + { + { AVR_MCU_VCD_SYMBOL("PORTB5"), .what = (void*)&PORTB, .mask = _BV(5) }, + }; +#endif + /********************************************************************/ // Simplified Arduino.h definitions. +typedef enum { false, true } bool; typedef bool boolean; typedef uint8_t byte; @@ -60,12 +71,14 @@ const int SERIAL_CLOCK_PIN = 2; // Serial clock input on PB2 #if NoXPRAM // Models earlier than the Plus had 20 bytes of PRAM -const int PRAM_SIZE = 20; +//const int PRAM_SIZE = 20; +#define PRAM_SIZE 20 const int group1Base = 0x00; const int group2Base = 0x10; #else // Mac Plus used the xPRAM chip with 256 bytes -const int PRAM_SIZE = 256; +//const int PRAM_SIZE = 256; +#define PRAM_SIZE 256 const int group1Base = 0x10; const int group2Base = 0x08; #endif @@ -77,7 +90,7 @@ enum SerialStateType { SERIAL_DISABLED, RECEIVING_COMMAND, enum PramAddrResult { INVALID_CMD, SECONDS_CMD, WRTEST_CMD, WRPROT_CMD, SUCCESS_ADDR }; -volatile SerialStateType serialState = SERIAL_DISABLED; +volatile enum SerialStateType serialState = SERIAL_DISABLED; volatile boolean lastSerClock = 0; volatile byte serialBitNum = 0; volatile byte address = 0; @@ -131,10 +144,15 @@ void setup() { //set up timer bitSet(GTCCR, TSM); // Turns off timers while we set it up bitSet(TIMSK, TOIE0); // Set Timer/Counter0 Overflow Interrupt Enable - TCCR0B = 0b111; // Set prescaler, 32,768Hz/64 = 512Hz, fills up the 8-bit counter (256) once every half second + // NOTE: 0b111 external clock, 0b011, uses 1/64 prescaler on I/O clock. + TCCR0B = 0b011; // Set prescaler, 32,768Hz/64 = 512Hz, fills up the 8-bit counter (256) once every half second TCNT0 = 0; // Clear the counter bitClear(GTCCR, TSM); // Turns timers back on +#ifdef DO_SIMAVR + GPIOR0 = SIMAVR_CMD_VCD_START_TRACE; +#endif + sei(); //We're done setting up, enable those interrupts again } @@ -413,7 +431,7 @@ int main(void) { setup(); for (;;) { - loop(); + //loop(); } return 0; diff --git a/firmware/rtc/Makefile b/firmware/rtc/Makefile index 1c5dcce..4a15b7a 100644 --- a/firmware/rtc/Makefile +++ b/firmware/rtc/Makefile @@ -1,9 +1,9 @@ all: Mac128kRTC.axf MacPlusRTC.axf -Mac128kRTC.axf: MacRTC.cpp +Mac128kRTC.axf: MacRTC.c avr-gcc -o $@ -Os -mmcu=attiny85 -DNoXPRAM=1 $< -MacPlusRTC.axf: MacRTC.cpp +MacPlusRTC.axf: MacRTC.c avr-gcc -o $@ -Os -mmcu=attiny85 $< clean: