def scroll(self, delta):
            if delta == 0:
                return

            count = len(self.list)
            step = (delta > 0) - (delta < 0) # step = 1 or -1
            for i in range(0, delta, step):
                if (self.position % self.rows) == 0:
                    n = self.position // self.rows
                    # at even boundary, need to update hidden row
                    m = (n + step + count) % count
                    row = (self.offset + self.rows) % self.bufrows
                    self.ssd1306.display_block(self.bitmaps[m], row, 0, self.cols)
                    if m == self.pan_row:
                        self.pan_offset = 0
                self.offset = (self.offset + self.bufrows + step) % self.bufrows
                self.ssd1306.command(self.ssd1306.SET_START_LINE | self.offset)
                max_position = count * self.rows
                self.position = (self.position + max_position + step) % max_position