From ef6837ec5349337144d750ce40d18b207be0ee09 Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Thu, 16 Dec 2004 16:19:43 +0000 Subject: About screens added. --- Graphic_Equalizer/src/display.hcc | 163 ++++++++++++++++++++++++++++++++------ 1 file changed, 139 insertions(+), 24 deletions(-) diff --git a/Graphic_Equalizer/src/display.hcc b/Graphic_Equalizer/src/display.hcc index 1207db8..94e8657 100644 --- a/Graphic_Equalizer/src/display.hcc +++ b/Graphic_Equalizer/src/display.hcc @@ -49,6 +49,22 @@ chan unsigned 1 maskupdate_notification; +/* + */ +static rom unsigned 20 address_offsets[32] = { + ADDRESS_SKIN_START, + ADDRESS_HELP_START, + ADDRESS_GRAPHMASK_START, + ADDRESS_ABOUT_TOP_FONTYS_START, + ADDRESS_ABOUT_TOP_TASS_START, + ADDRESS_ABOUT_TOP_TRANSFER_START, + ADDRESS_ABOUT_TOP_CELOXICA_START, + ADDRESS_ABOUT_TOP_DETAILS_START, + ADDRESS_ABOUT_BOTTOM_START +}; + + + /*! \fn void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) * * \brief This routine handles all drawing of pixels. It never returns! @@ -72,25 +88,27 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events macro expr DW = PalPL2RAMGetMaxDataWidthCT(); macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); macro expr VISIBLEX = PalVideoOutGetVisibleX(VIDEOOUT, CLOCKRATE); + macro expr VISIBLEY = PalVideoOutGetVisibleY(VIDEOOUT); macro expr TOTALX = PalVideoOutGetTotalX(VIDEOOUT, CLOCKRATE); macro expr TOTALY = PalVideoOutGetTotalY(VIDEOOUT); macro expr SCANX = PalVideoOutGetX(VIDEOOUT); macro expr SCANY = PalVideoOutGetY(VIDEOOUT); - unsigned 10 image_counter[24]; + unsigned AW addresses[32]; unsigned DW pixeldata; unsigned 24 visual_graph_color; - unsigned AW address, address_offset; + unsigned AW address_offset; + unsigned 5 address_index; /* - * If the passed button_state tells us the button is active, then we + * The passed button_state tells us if the button is active, then we * the button is 'on' and we draw it inverted. Otherwise we draw the * area of the button normally. */ macro proc draw_button(button_state) { - if (button_state == pixeldata[31:24]) { + if (button_state) { PalVideoOutWrite(VIDEOOUT, ~PIXEL); } else { PalVideoOutWrite(VIDEOOUT, PIXEL); @@ -114,25 +132,49 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * for the next cycle. */ PalPL2RAMRead(RAM_BANK0, &pixeldata); - PalPL2RAMSetReadAddress(RAM_BANK0, address_offset +address); + PalPL2RAMSetReadAddress(RAM_BANK0, (MODE_GRAPH == events->mode) ? (address_offset +(0 @ (addresses[address_index] \\ 2))) : (address_offset +addresses[address_index])); /* */ switch (events->mode) { - case MODE_HELP: - address_offset = ADDRESS_HELP_START; + case MODE_SKIN: + address_offset = address_offsets[OFFSET_ADDRESS_SKIN]; break; case MODE_GRAPH: - address_offset = ADDRESS_GRAPHMASK_START; + address_offset = address_offsets[OFFSET_ADDRESS_GRAPHMASK]; + break; + case MODE_ABOUT: + address_offset = address_offsets[OFFSET_ADDRESS_HELP]; break; + case MODE_HELP: + address_offset = address_offsets[OFFSET_ADDRESS_HELP]; + break; + case MODE_ABOUT_BUSY: default: - address_offset = ADDRESS_SKIN_START; + delay; break; } if (MODE_GRAPH == events->mode) { par { - visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[31:24]]) << 0); + /* switch (addresses[MASK_AREA_BACKGROUND] <- 2) { + case 0: + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[MASK]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[MASK]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[MASK]) << 0); + break; + case 1: + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[23:16]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[23:16]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[23:16]]) << 0); + break; + case 2: + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[15:8]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[15:8]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[15:8]]) << 0); + break; + case 3: + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << 0); + break; + default: + delay; + break; + }*/ + visual_graph_color = ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << 1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << -1) @ ((unsigned 8)(0 @ audiodata->fft_info.read[pixeldata[7:0]]) << 0); PalVideoOutWrite(VIDEOOUT, 0 @ visual_graph_color); } } else { @@ -142,7 +184,7 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * special or the background. Every specific drawing * obviously only happens in the masked area. */ - switch (pixeldata[31:24]) { + switch (MASK) { /* */ case AREA_WAVEFORM: @@ -201,7 +243,7 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * button offset to possibly match it * with the current mask. */ - draw_button((events->active_preset +BUTTON_PRESET_1) <- 8); + draw_button(((events->active_preset +BUTTON_PRESET_1) <- 8)== MASK); break; case BUTTON_PRECISE: /* fall through */ @@ -214,14 +256,72 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * safley check wether it matches our * mask. */ - draw_button((0 @ events->equalizer_mode) +BUTTON_PRECISE); + draw_button(((0 @ events->equalizer_mode) +BUTTON_PRECISE) == MASK); break; case BUTTON_LOG: /* * */ - draw_button((0 @ audiodata->display_log) +BUTTON_LOG); + draw_button(audiodata->display_log); + break; + + case BUTTON_DEMO: + draw_button(events->button_demo_state); + break; + case BUTTON_RESET: + draw_button(events->button_reset_state); + break; + + case BUTTON_HELP: + draw_button(events->mode == MODE_HELP); + break; + case BUTTON_ABOUT: + draw_button(events->mode == MODE_ABOUT); + break; + + case AREA_ABOUT_TOP: + if (MODE_ABOUT == events->mode) { + par { + events->mode = MODE_ABOUT_BUSY; + address_index = MASK_AREA_ABOUT_TOP; + address_offset = address_offsets[OFFSET_ADDRESS_ABOUT_TOP_TRANSFER /*events->address_offset_index*/]; + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + + case AREA_URL_FONTYS: /* fall through */ + case AREA_URL_TASS: /* fall through */ + case AREA_URL_TRANSFER: /* fall through */ + case AREA_URL_CELOXICA: /* fall through */ + case AREA_ABOUT_BOTTOM: + if (MODE_ABOUT == events->mode) { + par { + events->mode = MODE_ABOUT_BUSY; + address_index = MASK_AREA_ABOUT_BOTTOM; + address_offset = ADDRESS_ABOUT_TOP_CELOXICA_START;//address_offsets[OFFSET_ADDRESS_ABOUT_BOTTOM/* events->address_offset_index */]; + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + break; + + case AREA_MASK_END: + if (MODE_ABOUT_BUSY == events->mode) { + par { + events->mode = MODE_ABOUT; + address_index = MASK_AREA_BACKGROUND; + address_offset = address_offsets[OFFSET_ADDRESS_HELP]; + PalVideoOutWrite(VIDEOOUT, PIXEL); + } + } else { + PalVideoOutWrite(VIDEOOUT, PIXEL); + } break; /* @@ -235,9 +335,9 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * background. */ default: - /* (pixeldata[31:24] <= AREA_EQUALIZER_MAX) && */ - if ((AREA_EQUALIZER_MIN <= pixeldata[31:24]) && (!events->locked_display)) { - if ((SCANY == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(pixeldata[31:24] -AREA_EQUALIZER_MIN) <- 7])) { + /* (MASK <= AREA_EQUALIZER_MAX) && */ + if ((AREA_EQUALIZER_MIN <= MASK) && (!events->locked_display)) { + if ((SCANY == 0 @ events->equalizer_display[(MASK -AREA_EQUALIZER_MIN) <- 7]) || ((SCANY +1) == 0 @ events->equalizer_display[(MASK -AREA_EQUALIZER_MIN) <- 7])) { PalVideoOutWrite(VIDEOOUT, skindata->equalizer.color_primary); } else { PalVideoOutWrite(VIDEOOUT, PIXEL); @@ -248,6 +348,7 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events break; } } + /* * We compare our current X and Y scan positions of the @@ -259,7 +360,7 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events if (MOUSE_UPDATED == mousedata->status) { if ((SCANX == 0 @ mousedata->x) && (SCANY == 0 @ mousedata->y)) { par { - events->mask = pixeldata[31:24]; + events->mask = MASK; mousedata->status = MOUSE_NOT_UPDATED; maskupdate_notification ! MOUSE_UPDATED; } @@ -271,10 +372,6 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events } /* - */ - image_counter[(pixeldata[31:24] \\ 1) <- 5]++; - - /* * The current position of the screen can lay in an * area called the blanking area. We don't have data * for this area as it is not drawn. We therefor have @@ -284,6 +381,14 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * Therefor we have to substract 5 pixels. */ if ((SCANX > (VISIBLEX - 5)) && (SCANX <= (TOTALX - 5))) { + if (SCANY == (VISIBLEY +1)) { + par { + address_index++; + addresses[address_index] = 0; + } + } else { + delay; + } /* * We are in the blanking area of the screen. * If we are on the last line, and thus last @@ -293,7 +398,10 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events /* * Reset our draw address counter to 0. */ - address = 0; + par { + address_index = 0; + addresses[MASK_AREA_BACKGROUND] = 0; + } } else { /* * We have reached the end of the @@ -308,7 +416,14 @@ void display_main(skindata_t *skindata, audiodata_t *audiodata, events_t *events * drawn thus keeping the memory location in * sync with the current pixel position. */ - address++; + par { + if (address_index != MASK_AREA_BACKGROUND) { + addresses[address_index]++; + } else { + delay; + } + addresses[MASK_AREA_BACKGROUND]++; + } } } } -- cgit v0.12