   serprintf("button %d pressed\r\n", button);
   serprintf("before: active_player=%d, button_pressed=%d\r\n", active_player, button_pressed);
   active_player = (button_pressed + 1) % 2;
-  players[active_player].last_update_ms = millis();
+  players[active_player].clock->last_update_ms = millis();
   button_pressed = NONE;
   serprintf("after:  active_player=%d, button_pressed=%d\r\n", active_player, button_pressed);
 }
 
 int out_of_time(Player *p) {
-  return p->time_remaining_ms <= 0;
+  return p->clock->time_remaining_ms <= 0;
 }
 
 void setup(void) {

  screen->tft->stroke(255,255,255);
  screen->tft->fill(0,0,0);
  screen->tft->setTextSize(DISPLAY_FONT_SIZE);
}

void update_timer(Player *p) {
  p->time_remaining_ms -= (millis() - p->last_update_ms);
  p->last_update_ms = millis();
}

void update_changed_chars(Player *p, const char *text) {


void update_display(Player *p) {
  static char timea[12];
  ltoa(p->clock->time_remaining_ms/100, timea, 10);
  update_changed_chars(p, timea);
}

