Can't send data with AtTiny84 slave module

Hi,
I’m trying to program a custom tiny84 slave board to take SPI commands from an Uno master, do a PORT out, and then return a confirmation to the master. I get the Uno to output a byte, which I can see on a scope. The slave will read them and do basic pin operations, so I know it’s receiving the bytes just fine. My two questions are, how do I write my byte to PORTA? and how do I write a byte back to the master?

here is my working slave code with a diagnostic blink, which will output to the pins 8 or 10 depending on what the master sends, but it wont send out to the MISO pin/SPIDR.

// Incoming data goes here
byte spiData;


//int ss = 0;
//int butt = 1;
//byte goodbyte = 127;
//int badbyte = 255;


volatile uint8_t spi_in, spi_out;
ISR (USI_OVF_vect)
{
  USISR = (1 << USIOIF); // clear irq
  spi_in = USIDR;        // wot we have just received
  switch (spi_in) {

    case 240:
      digitalWrite(10, HIGH);
      delay(10);
      digitalWrite(10, LOW);
      break;
    case 100:
      digitalWrite(8, HIGH);
      delay(10);
      digitalWrite(8, LOW);
      break;
  }
  spi_out = 255;
  USIDR = spi_out;       // ready for next SPI
}

// Initialise as SPI slave
void spiSlaveInit()
{
  USICR = (1 << USIWM0) // SPI mode
          | (1 << USIOIE) // Enable interrupt
          | (1 << USICS1); // Clock is external

}


byte spiSlaveTransfer()                               // Receive a byte from the master
{

  while ((USISR & (1 << USIOIF)) == 0) {              // Wait for complete byte to arrive
  }

  USISR = (1 << USIOIF);                              // Clear counter overflow flag so next byte can begin arriving while we're processing this one

  return USIDR;                                       // Return received byte
}


void setup() {
//  pinMode(ss, INPUT);
//  pinMode(butt, INPUT);
  pinMode(8, OUTPUT);
  pinMode(10, OUTPUT);
  spiSlaveInit();
}

void loop() {

}

and my attempt at what I really want, which doesn’t output to PORTA or return a byte to MOSI/SPIBR

// Incoming data goes here
byte spiData;


int ss = 0;
int butt = 1;
byte goodbyte = 127;
int badbyte = 255;


// The interrupt handler
ISR(USI_OVF_vect)
{
  digitalWrite(10, HIGH);
  spiData = USIBR;
  if (digitalRead (ss), LOW) {
    if (digitalRead (butt), LOW) {
      PORTA = spiData;
      USIBR = goodbyte;
    }
    else {
      USIBR = badbyte;
    }
  }
  delay(10);
  digitalWrite(10, LOW);
}

// Initialise as SPI slave
void spiSlaveInit()
{
  USICR = (1 << USIWM0) // SPI mode
          | (1 << USIOIE) // Enable interrupt
          | (1 << USICS1); // Clock is external

}


byte spiSlaveTransfer()                               // Receive a byte from the master
{

  while ((USISR & (1 << USIOIF)) == 0) {              // Wait for complete byte to arrive
  }

  USISR = (1 << USIOIF);                              // Clear counter overflow flag so next byte can begin arriving while we're processing this one

  return USIBR;                                       // Return received byte
}


void setup() {
  pinMode(ss, INPUT);
  pinMode(butt, INPUT);
  DDRA = B11110000;
  spiSlaveInit();
}

void loop() {

}

I also tried both SPIDR and SPIBR, and various SPI frequencies. I’m working with a lot of stuff that’s new to me, like interrupts. I know I haven’t been super consistent with C or arduino dialect, but I’ve had to mix it up since I can’t get arduino SPI libraries to work on the tiny84…

thanks in advance for any help!