#include "main.h"
#include "debug.h"
#include "gui.h"
+#include "aix.h"
#include "font.h"
volatile uint16_t lcdpwm_high;
const uint16_t button_lmargin[N_BUTTONTYPES] = BUTTON_LMARGIN;
const uint16_t button_rmargin[N_BUTTONTYPES] = BUTTON_RMARGIN;
-uint8_t draw_buffer[FULLSCREEN_PIXELS * 2];
-uint8_t draw_buffer_high = 0;
-uint8_t draw_adsr_low = 0;
-uint8_t draw_adsr_high = 0;
-uint8_t draw_wave_low = 0;
-uint8_t draw_wave_high = 0;
-uint16_t draw_x = 0;
+const uint8_t *draw_adsr_data;
+const uint8_t *draw_wave_data;
+ uint8_t draw_adsr_request = 0;
+ uint8_t draw_wave_request = 0;
+ uint8_t draw_adsr_active = 0;
+ uint8_t draw_wave_active = 0;
+ uint16_t draw_x = 0;
inline void lcd_brightness (const uint16_t value)
// Column Address Setting
lcd_write(LCD_SLAVE, LCD_COMMAND, LCD_SetColumnAddress);
lcd_write(LCD_SLAVE, LCD_DATA, 0);
- lcd_write(LCD_SLAVE, LCD_DATA, 255);
+ lcd_write(LCD_SLAVE, LCD_DATA, HALFSCREEN_PIXELS-1);
// Display On
lcd_write(LCD_SLAVE, LCD_COMMAND, LCD_DisplayOn);
// Column Address Setting
lcd_write(LCD_MASTER, LCD_COMMAND, LCD_SetColumnAddress);
lcd_write(LCD_MASTER, LCD_DATA, 0);
- lcd_write(LCD_MASTER, LCD_DATA, 255);
+ lcd_write(LCD_MASTER, LCD_DATA, HALFSCREEN_PIXELS-1);
// Internal Power Supply
lcd_write(LCD_MASTER, LCD_COMMAND, LCD_ExtCommand2);
if (mode != LCD_GRAY)
{
- draw_adsr_low = 0;
- draw_adsr_high = 0;
- draw_wave_low = 0;
- draw_wave_high = 0;
+ draw_adsr_active = 0;
+ draw_adsr_request = 0;
+ draw_wave_active = 0;
+ draw_wave_request = 0;
draw_x = 0;
}
- if(x0 < 256)
+ if (x0 < HALFSCREEN_PIXELS)
{
- x = (x1>255) ? 255 : x1;
+ x = (x1 > (HALFSCREEN_PIXELS-1)) ? HALFSCREEN_PIXELS-1 : x1;
lcd_set_mode(LCD_SLAVE, mode, x0, x, y0, y1);
lcd_write(LCD_SLAVE, LCD_COMMAND, LCD_WriteDataToDDRAM);
}
- if(x1 >= 256)
+ if (x1 >= HALFSCREEN_PIXELS)
{
- x = (x0<256) ? 0 : (x0-256);
- lcd_set_mode(LCD_MASTER, mode, x, x1-256, y0, y1);
+ x = (x0 < HALFSCREEN_PIXELS) ? 0 : (x0-HALFSCREEN_PIXELS);
+ lcd_set_mode(LCD_MASTER, mode, x, x1-HALFSCREEN_PIXELS, y0, y1);
lcd_write(LCD_MASTER, LCD_COMMAND, LCD_WriteDataToDDRAM);
}
}
y = (mode == LCD_GRAY) ? 9 : 4;
- lcd_setup_drawing(mode, 0, 511, 0, y);
- for(i=0; i<=255; ++i)
+ lcd_setup_drawing(mode, 0, FULLSCREEN_PIXELS-1, 0, y);
+ for(i=0; i<HALFSCREEN_PIXELS; ++i)
{
for(j=0; j<=y; ++j)
{
}
}
-void lcd_draw_wave (const uint8_t * const data)
+inline void lcd_draw_wave (const uint8_t * const data)
{
- if (draw_buffer_high)
- {
- memcpy(draw_buffer, data, HALFSCREEN_PIXELS);
- draw_wave_low = 1;
- }
- else
- {
- memcpy(draw_buffer + FULLSCREEN_PIXELS, data, HALFSCREEN_PIXELS);
- draw_wave_high = 1;
- }
+ draw_wave_data = data;
+ draw_wave_request = 1;
}
-void lcd_draw_adsr (const uint8_t * const data)
+inline void lcd_draw_adsr (const uint8_t * const data)
{
-
- if (draw_buffer_high)
- {
- memcpy(draw_buffer + HALFSCREEN_PIXELS, data, HALFSCREEN_PIXELS);
- draw_adsr_low = 1;
- }
- else
- {
- memcpy(draw_buffer + FULLSCREEN_PIXELS + HALFSCREEN_PIXELS, data, HALFSCREEN_PIXELS);
- draw_adsr_high = 1;
- }
+ draw_adsr_data = data;
+ draw_adsr_request = 1;
}
void lcd_subdraw_button (
for(i=0; i<margin_l; ++i) // left margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
{
for (i=0, i0=-1; i<N; ++i)
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
{
for (i=0, i0=-1, i1=line1-1; i<N; ++i)
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
{
for (i=0, i0=-1, i1=line1-1, i2=line2-1; i<N; ++i)
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
{
for (i=0, i0=-1, i1=line1-1, i2=line2-1, i3=line3-1; i<N; ++i)
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
}
for(i=0; i<margin_r; ++i) // right margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
for(i=0; i<margin_l; ++i) // left margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
for (i=0, i0=-1; i<N; ++i) // single text line; 8 font
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
for(i=0; i<margin_r; ++i) // right margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
for(i=0; i<margin_l; ++i) // left margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
for (i=0, i0=-1; i<N; ++i) // single text line; 16px font
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
if(!(i&0x7))
{
for(i=0; i<margin_r; ++i) // right margin
{
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
lcd_write(chip, LCD_DATA, 0x00);
{
uint8_t chip = LCD_SLAVE;
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x55);
{
uint8_t chip = LCD_SLAVE;
- if (*x >= 256)
+ if (*x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x55);
){
uint16_t x=0;
- lcd_setup_drawing(LCD_MONO, 0, 511, 0, 4);
+ lcd_setup_drawing(LCD_MONO, 0, FULLSCREEN_PIXELS-1, 0, 4);
lcd_subdraw_button (&x, FULLTEXT - buttons, title, 0);
switch (buttons)
for(i=0; i<margin_l; ++i) // left margin
{
- if (x >= 256)
+ if (x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
++x;
for (i=0; i<N; ++i) // underline
{
- if (x >= 256)
+ if (x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, underline);
++x;
for(i=0; i<margin_r; ++i) // right margin
{
- if (x >= 256)
+ if (x >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
++x;
for (i=x, j='^'<<3; i<x+8; ++i, j+=1)
{
- if (i>=256)
+ if (i >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, font8[j]);
}
for (i=x; i<x+8; ++i)
{
- if (i>=256)
+ if (i >= HALFSCREEN_PIXELS)
chip = LCD_MASTER;
lcd_write(chip, LCD_DATA, 0x00);
}
uint16_t x;
x = TITLE_6B_PIXELS + 1;
- lcd_setup_drawing(LCD_MONO, x, 511, 0, 1);
+ lcd_setup_drawing(LCD_MONO, x, FULLSCREEN_PIXELS-1, 0, 1);
lcd_subdraw_lowbutton16(&x, BUTTON_6X, list);
}
lcd_subdraw_button (&x, BUTTON_1X, name, 0);
lcd_subdraw_divider(&x);
- lcd_setup_drawing(LCD_MONO, x, 511, 3, 4);
+ lcd_setup_drawing(LCD_MONO, x, FULLSCREEN_PIXELS-1, 3, 4);
lcd_subdraw_lowbutton8(&x, BUTTON_1X, button_A, selected == 0);
lcd_subdraw_lowdivider(&x);
void handle_lcd (void)
{
- uint8_t *buffer;
- uint8_t *draw_adsr;
- uint8_t *draw_wave;
-
uint8_t col[10];
uint8_t x;
- if (draw_buffer_high)
- {
- if (
- !draw_adsr_high && !draw_wave_high &&
- (draw_adsr_low || draw_wave_low)
- )
- draw_buffer_high = 0;
- }
- else
- {
- if (
- !draw_adsr_low && !draw_wave_low &&
- (draw_adsr_high || draw_wave_high)
- )
- draw_buffer_high = 1;
- }
-
- if (draw_buffer_high)
- {
- buffer = draw_buffer + FULLSCREEN_PIXELS;
- draw_adsr = &draw_adsr_high;
- draw_wave = &draw_wave_high;
- }
- else
+ if (!draw_wave_active & !draw_adsr_active)
{
- buffer = draw_buffer;
- draw_adsr = &draw_adsr_low;
- draw_wave = &draw_wave_low;
+ if (draw_wave_request)
+ {
+ draw_x = 0;
+ draw_wave_active = 1;
+ draw_wave_request = 0;
+ }
+ else if (draw_adsr_request)
+ {
+ draw_x = 0;
+ draw_adsr_active = 1;
+ draw_adsr_request = 0;
+ }
}
- if (draw_x < HALFSCREEN_PIXELS)
+ if (draw_wave_active)
{
- if (*draw_wave)
- lcd_setup_drawing(LCD_GRAY, draw_x, HALFSCREEN_PIXELS-1, 0, 9);
- while (*draw_wave)
+ lcd_setup_drawing(LCD_GRAY, draw_x, HALFSCREEN_PIXELS-1, 0, 9);
+ while (draw_wave_active)
{
memset(col, 0, 10);
- x = convert_wave((int8_t)buffer[draw_x]);
+ x = convert_wave((int8_t)draw_wave_data[draw_x]);
if (x < WAVE_LOWER_0)
{
// finished
if (draw_x >= HALFSCREEN_PIXELS)
{
- *draw_wave = 0;
- draw_x = HALFSCREEN_PIXELS;
+ draw_wave_active = 0;
+ draw_x = 0;
return;
}
- // interrupt drawing to handle communication every 8 pixels
- if (!(draw_x & 0x07))
- return;
+ // // interrupt drawing to handle AIX communication
+ // if (NOT_EMPTY_BP(aix_buffer_w, aix_buffer_r, N_AIX_DATA))
+ // return;
}
- draw_x = HALFSCREEN_PIXELS;
+ draw_x = 0;
}
- if (draw_x >= HALFSCREEN_PIXELS)
+ else if (draw_adsr_active)
{
- if (*draw_adsr)
- lcd_setup_drawing(LCD_GRAY, draw_x, FULLSCREEN_PIXELS-1, 0, 9);
- while (*draw_adsr)
+ lcd_setup_drawing(LCD_GRAY, HALFSCREEN_PIXELS+draw_x, FULLSCREEN_PIXELS-1, 0, 9);
+ while (draw_adsr_active)
{
memset(col, 0, 10);
- x = buffer[draw_x];
+ x = draw_adsr_data[draw_x];
if (x >= ADSR_UPPER_1)
{
++draw_x;
// finished
- if (draw_x >= FULLSCREEN_PIXELS)
+ if (draw_x >= HALFSCREEN_PIXELS)
{
- *draw_adsr = 0;
+ draw_adsr_active = 0;
draw_x = 0;
return;
}
- // interrupt drawing to handle communication every 16 pixels
- if (!(draw_x & 0x0F))
- return;
+ // // interrupt drawing to handle communication
+ // if (NOT_EMPTY_BP(aix_buffer_w, aix_buffer_r, N_AIX_DATA))
+ // return;
}
draw_x = 0;
}