Added PAL mode for A2024 monitor, cleaned A2024 code, added borderblank to all

modes that support it.
This commit is contained in:
chopps 1994-01-30 08:25:02 +00:00
parent 404b8fce6b
commit 39dd8d2805
11 changed files with 470 additions and 84 deletions

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_a2024_mode.c,v 1.2 1994/01/29 07:00:14 chopps Exp $
* $Id: grf_cc_a2024_mode.c,v 1.3 1994/01/30 08:25:02 chopps Exp $
*/
#if defined (GRF_A2024)
@ -156,15 +156,15 @@ display_a2024_view (view_t *v)
u_byte **plane = inst_plane;
u_long full_line = v->bitmap->bytes_per_row+v->bitmap->row_mod;
u_long half_plane = full_line * v->bitmap->rows / 2;
int line_mod = 0xbc; /* standard 2024 15khz mod. */
int depth = v->bitmap->depth, i, j;
plane[0] = v->bitmap->plane[0];
if (depth == 2) {
plane[1] = v->bitmap->plane[1];
}
if (this_data->current_view) {
VDATA(this_data->current_view)->flags &= ~VF_DISPLAY; /* mark as no longer displayed. */
}
@ -173,38 +173,25 @@ display_a2024_view (view_t *v)
tmp = find_copper_inst (cp, CI_MOVE(R_COLOR1F));
tmp = find_copper_inst (tmp, CI_MOVE(R_BPLCON0)); /* grab third one. */
tmp->cp.inst.operand = this_data->bplcon0 | ((depth & 0x7) << 13); /* times 2 */
#if 0
/* change display wait if 2 bitplanes. */
if (depth == 2) {
tmp = find_copper_inst (cp, CI_WAIT(0, 43));
if (tmp) {
tmp->cp.inst.opcode = CI_WAIT (0,42);
}
} else {
/* XXX does same thing as above */
tmp = find_copper_inst (cp, CI_WAIT(0, 43));
if (tmp) {
tmp->cp.inst.opcode = CI_WAIT (0, 42);
}
#if 0 /* blows away the coplc data load :^) */
if (depth == 1) {
tmp = find_copper_inst (cp, CI_MOVE(R_BPL2PTH));
CWAIT (tmp, 255,255);
CWAIT (tmp, 255,255);
}
#endif
}
/* set new modulos FIX: doesn't support larger bitmaps. */
tmp = find_copper_inst (cp, CI_MOVE(R_BPLMOD1));
tmp[0].cp.inst.operand = 0xbc + v->bitmap->row_mod;
tmp[1].cp.inst.operand = 0xbc + v->bitmap->row_mod;
#endif
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD1], std_a2024_copper_list_size);
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD2], std_a2024_copper_list_size);
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD3], std_a2024_copper_list_size);
/*
* Mark Id's
*/
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD1_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD2_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD3_ID);
#define HALF_2024_LINE (512>>3)
plane[0]--;
@ -229,6 +216,12 @@ display_a2024_view (view_t *v)
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][full_line])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][full_line])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2000);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
@ -242,6 +235,12 @@ display_a2024_view (view_t *v)
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][full_line+HALF_2024_LINE])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2000);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
@ -255,6 +254,12 @@ display_a2024_view (view_t *v)
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2000);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
@ -268,34 +273,13 @@ display_a2024_view (view_t *v)
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line+HALF_2024_LINE])));
}
/*
* Mark Id's
*/
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD1_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD2_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_WAIT (126,21));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD3_ID);
/* set next pointers correctly */
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD0], CI_MOVE (R_COP1LCH));
tmp[0].cp.inst.operand = HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1]));
tmp[1].cp.inst.operand = LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1]));
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_MOVE (R_COP1LCH));
tmp[0].cp.inst.operand = HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2]));
tmp[1].cp.inst.operand = LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2]));
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_MOVE (R_COP1LCH));
tmp[0].cp.inst.operand = HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3]));
tmp[1].cp.inst.operand = LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3]));
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_MOVE (R_COP1LCH));
tmp[0].cp.inst.operand = HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0]));
tmp[1].cp.inst.operand = LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0]));
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2000);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0])));
CEND (tmp); CEND (tmp);
/* swap new pointers in. */
for (i = F_STORE_QUAD0, j = F_QUAD0;
i <= F_STORE_QUAD3; i++, j++) {

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_global.c,v 1.2 1994/01/29 07:00:19 chopps Exp $
* $Id: grf_cc_global.c,v 1.3 1994/01/30 08:25:04 chopps Exp $
*/
#include "grf_cc_priv.h"
@ -39,6 +39,7 @@ cop_t std_copper_list[] = {
{ CI_WAIT (0, 12), 0xfffe },
#if defined (GRF_ECS)
{ R_BEAMCON0, 0x0000 },
{ R_BPLCON3, 0x0020 }, /* enable border blank */
#endif
/* bit plane pointers */
{ R_BPL0PTH, 0x0000 }, { R_BPL0PTL, 0x0000 },
@ -84,6 +85,7 @@ cop_t std_dlace_copper_list[] = {
{ CI_WAIT(0,12), 0xfffe }, /* WAIT (0, 12) */
#if defined (GRF_ECS)
{ R_BEAMCON0, 0x0000 },
{ R_BPLCON3, 0x0020 }, /* enable border blank */
#endif
/* colors */
{ R_COLOR00, 0x0000 }, { R_COLOR01, 0x0000 }, { R_COLOR02, 0x0000 }, { R_COLOR03, 0x0000 },
@ -115,13 +117,21 @@ cop_t std_dlace_copper_list[] = {
{ R_COP1LCH, 0x0000 }, { R_COP1LCL, 0x0000 },
{ 0xffff, 0xfffe }, { 0xffff, 0xfffe } /* COPEND, COPEND */
};
int std_dlace_copper_list_len = sizeof (std_dlace_copper_list) / sizeof (cop_t);
int std_dlace_copper_list_size = sizeof (std_dlace_copper_list);
cop_t std_a2024_copper_list[] = {
{ CI_WAIT(0,12), 0xfffe }, /* WAIT (0, 12) */
#if defined (GRF_ECS)
{ R_BEAMCON0, 0x0000 },
#endif
/* hedley card init setup section */
{ R_COLOR00, 0x0f00 },
{ R_BPL0PTH, 0x0000 }, { R_BPL0PTL, 0x0000 }, /* init plane of 1's with first set for centering */
{ R_DIWSTRT, 0x1561 }, { R_DIWSTOP, 0x16d1 },
#if defined (GRF_ECS)
{ R_DIWHIGH, 0x2000 },
#endif
{ R_DDFSTRT, 0x0040 }, { R_DDFSTOP, 0x00d0 },
{ R_BPLCON0, 0x9200 },
/* actual data that will be latched by hedley card. */
@ -131,7 +141,7 @@ cop_t std_a2024_copper_list[] = {
{ CI_WAIT(190,21), 0xfffe }, { R_COLOR01, 0x0ff1 }, /* Stuff2 */
{ CI_WAIT(0,22), 0xfffe },
{ R_COLOR00, 0x0000 }, { R_BPLCON0, 0x0000 },
{ CI_WAIT(0,42), 0xfffe },
{ CI_WAIT(0,43), 0xfffe },
/* set the registers up. */
{ R_COLOR00, 0x0009 }, { R_COLOR01, 0x0001 }, { R_COLOR02, 0x0008 }, { R_COLOR03, 0x0000 },
{ R_COLOR04, 0x0809 }, { R_COLOR05, 0x0801 }, { R_COLOR06, 0x0808 }, { R_COLOR07, 0x0800 },
@ -152,13 +162,71 @@ cop_t std_a2024_copper_list[] = {
{ R_BPL1PTH, 0x0000 }, { R_BPL1PTL, 0x0000 },
{ R_BPL2PTH, 0x0000 }, { R_BPL2PTL, 0x0000 },
{ R_BPL3PTH, 0x0000 }, { R_BPL3PTL, 0x0000 },
#if defined (GRF_ECS)
{ R_DIWHIGH, 0x2000 },
#endif
{ R_COP1LCH, 0x0000 }, { R_COP1LCL, 0x0000 },
{ 0xffff, 0xfffe }, { 0xffff, 0xfffe } /* COPEND, COPEND */
};
int std_a2024_copper_list_len = sizeof (std_a2024_copper_list) / sizeof (cop_t);
int std_a2024_copper_list_size = sizeof (std_a2024_copper_list);
int std_dlace_copper_list_len = sizeof (std_dlace_copper_list) / sizeof (cop_t);
int std_dlace_copper_list_size = sizeof (std_dlace_copper_list);
cop_t std_pal_a2024_copper_list[] = {
{ CI_WAIT(0,20), 0xfffe }, /* WAIT (0, 12) */
#if defined (GRF_ECS)
{ R_BEAMCON0, STANDARD_PAL_BEAMCON },
#endif
/* hedley card init setup section */
{ R_COLOR00, 0x0f00 },
{ R_BPL0PTH, 0x0000 }, { R_BPL0PTL, 0x0000 }, /* init plane of 1's with first set for centering */
{ R_DIWSTRT, 0x1d61 }, { R_DIWSTOP, 0x1ed1 },
#if defined (GRF_ECS)
{ R_DIWHIGH, 0x2000 },
#endif
{ R_DDFSTRT, 0x0040 }, { R_DDFSTOP, 0x00d0 },
{ R_BPLCON0, 0x9200 },
/* actual data that will be latched by hedley card. */
{ R_COLOR01, 0x0001 }, /* Stuff1 */
{ CI_WAIT(126,29), 0xfffe }, { R_COLOR01, 0x0001 }, /* Display Quadrent */
{ CI_WAIT(158,29), 0xfffe }, { R_COLOR01, 0x08f0 }, /* Stuff */
{ CI_WAIT(190,29), 0xfffe }, { R_COLOR01, 0x0ff1 }, /* Stuff2 */
{ CI_WAIT(0,30), 0xfffe },
{ R_COLOR00, 0x0000 }, { R_BPLCON0, 0x0000 },
{ CI_WAIT(0,43), 0xfffe },
/* set the registers up. */
{ R_COLOR00, 0x0009 }, { R_COLOR01, 0x0001 }, { R_COLOR02, 0x0008 }, { R_COLOR03, 0x0000 },
{ R_COLOR04, 0x0809 }, { R_COLOR05, 0x0801 }, { R_COLOR06, 0x0808 }, { R_COLOR07, 0x0800 },
{ R_COLOR08, 0x0089 }, { R_COLOR09, 0x0081 }, { R_COLOR0A, 0x0088 }, { R_COLOR0B, 0x0080 },
{ R_COLOR0C, 0x0889 }, { R_COLOR0D, 0x0881 }, { R_COLOR0E, 0x0888 }, { R_COLOR0F, 0x0880 },
{ R_COLOR10, 0x0009 }, { R_COLOR11, 0x0009 }, { R_COLOR12, 0x0001 }, { R_COLOR13, 0x0809 },
{ R_COLOR14, 0x0009 }, { R_COLOR15, 0x0009 }, { R_COLOR16, 0x0001 }, { R_COLOR17, 0x0809 },
{ R_COLOR18, 0x0008 }, { R_COLOR19, 0x0008 }, { R_COLOR1A, 0x0000 }, { R_COLOR1B, 0x0808 },
{ R_COLOR1C, 0x0089 }, { R_COLOR1D, 0x0089 }, { R_COLOR1E, 0x0081 }, { R_COLOR1F, 0x0889 },
/* window size. */
{ R_DIWSTRT, 0x2c81 }, { R_BPLCON0, 0x0000 }, { R_DIWSTOP, 0x2c81 },
/* datafetch */
{ R_DDFSTRT, 0x0038 }, { R_DDFSTOP, 0x00b8 },
{ R_BPLCON1, 0x0000 },
{ R_BPL1MOD, 0x00bc }, { R_BPL2MOD, 0x00bc },
/* bitplanes */
{ R_BPL0PTH, 0x0000 }, { R_BPL0PTL, 0x0000 },
{ R_BPL1PTH, 0x0000 }, { R_BPL1PTL, 0x0000 },
{ R_BPL2PTH, 0x0000 }, { R_BPL2PTL, 0x0000 },
{ R_BPL3PTH, 0x0000 }, { R_BPL3PTL, 0x0000 },
#if defined (GRF_ECS)
{ R_DIWHIGH, 0x2100 },
#endif
{ R_COP1LCH, 0x0000 }, { R_COP1LCL, 0x0000 },
{ 0xffff, 0xfffe }, { 0xffff, 0xfffe } /* COPEND, COPEND */
};
int std_pal_a2024_copper_list_len = sizeof (std_pal_a2024_copper_list) / sizeof (cop_t);
int std_pal_a2024_copper_list_size = sizeof (std_pal_a2024_copper_list);
#endif /* GRF_A2024 */

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_h_mode.c,v 1.2 1994/01/29 07:00:20 chopps Exp $
* $Id: grf_cc_h_mode.c,v 1.3 1994/01/30 08:25:05 chopps Exp $
*/
#if defined (GRF_NTSC)
@ -67,7 +67,7 @@ cc_init_ntsc_hires (void)
this->nominal_size.width = 640;
this->nominal_size.height = 200;
this_data->max_size.width = 724;
this_data->max_size.height = 241;
this_data->max_size.height = 242;
this_data->min_size.width = 320;
this_data->min_size.height = 100;
this_data->min_depth = 1;
@ -95,7 +95,7 @@ cc_init_ntsc_hires (void)
bcopy (std_copper_list, this_data->frames[F_STORE_LONG], std_copper_list_size);
bcopy (std_copper_list, this_data->frames[F_LONG], std_copper_list_size);
this_data->bplcon0 = 0x8200; /* hires, color composite enable, lace. */
this_data->bplcon0 = 0x8200|USE_CON3; /* hires, color composite enable, lace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) hires_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_hdl_mode.c,v 1.2 1994/01/29 07:00:22 chopps Exp $
* $Id: grf_cc_hdl_mode.c,v 1.3 1994/01/30 08:25:06 chopps Exp $
*/
#if defined (GRF_A2024) && defined (GRF_NTSC)
@ -111,7 +111,7 @@ cc_init_ntsc_hires_dlace (void)
bcopy (std_dlace_copper_list, this_data->frames[F_LONG], std_dlace_copper_list_size);
bcopy (std_dlace_copper_list, this_data->frames[F_SHORT], std_dlace_copper_list_size);
this_data->bplcon0 = 0x8204; /* hires, color composite enable, dlace. */
this_data->bplcon0 = 0x8204|USE_CON3; /* hires, color composite enable, dlace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) hires_dlace_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_hl_mode.c,v 1.2 1994/01/29 07:00:24 chopps Exp $
* $Id: grf_cc_hl_mode.c,v 1.3 1994/01/30 08:25:08 chopps Exp $
*/
#if defined (GRF_NTSC)
@ -102,7 +102,7 @@ cc_init_ntsc_hires_lace (void)
bcopy (std_copper_list, this_data->frames[F_LONG], std_copper_list_size);
bcopy (std_copper_list, this_data->frames[F_SHORT], std_copper_list_size);
this_data->bplcon0 = 0x8204; /* hires, color composite enable, lace. */
this_data->bplcon0 = 0x8204|USE_CON3; /* hires, color composite enable, lace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) hires_lace_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_mode.c,v 1.2 1994/01/29 07:00:26 chopps Exp $
* $Id: grf_cc_mode.c,v 1.3 1994/01/30 08:25:09 chopps Exp $
*/
#include "errno.h"
#include "grf_cc_priv.h"
@ -50,6 +50,7 @@ dmode_t *(*mode_init_funcs[])(void) = {
#endif /* GRF_NTSC */
#if defined (GRF_PAL)
#if defined (GRF_A2024)
cc_init_pal_a2024,
cc_init_pal_hires_dlace,
#endif /* GRF_A2024 */
cc_init_pal_hires_lace,
@ -149,7 +150,7 @@ cc_alloc_colormap (int depth)
cm->blue_mask = 0x0F;
cm->first = 0;
cm->size = size;
cm->entry = &cm[1]; /* table directly after. */
cm->entry = (u_long *) &cm[1]; /* table directly after. */
for (i=0; i < min(size,32); i++) {
cm->entry[i] = CM_WTOL(cc_default_colors[i]);
}
@ -170,7 +171,7 @@ cc_a2024_alloc_colormap (int depth)
cm->grey_mask = 0x03;
cm->first = 0;
cm->size = size;
cm->entry = &cm[1]; /* table directly after. */
cm->entry = (u_long *) &cm[1]; /* table directly after. */
for (i=0; i < size; i++) {
cm->entry[i] = CM_WTOL(cc_a2024_default_colors[i]);
}

View File

@ -0,0 +1,324 @@
/*
* Copyright (c) 1993 Christian E. Hopps
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Christian E. Hopps.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#if defined (GRF_A2024) && defined (GRF_PAL)
#include "grf_cc_priv.h"
#include "../../../amiga/cc_2024.h"
#if defined (AMIGA_TEST)
#define DEBUG
#include <debug.h>
#else
#define D(x)
#endif
static void pal_a2024_mode_vbl_handler (dmode_t *d);
static void display_pal_a2024_view (view_t *v);
static view_t *get_current_view (dmode_t *d);
/* -------
* |0 |1 |
* |------
* |2 |3 |
* -------
*/
#define QUAD0_ID 0x0001
#define QUAD1_ID 0x00f1
#define QUAD2_ID 0x0f01
#define QUAD3_ID 0x0ff1
/* display order Q0 -> Q2 -> Q1 -> Q3 ---> */
enum frame_numbers {
F_QUAD0, F_QUAD1, F_QUAD2, F_QUAD3,
F_STORE_QUAD0, F_STORE_QUAD1, F_STORE_QUAD2, F_STORE_QUAD3,
F_TOTAL
};
static dmode_t pal_a2024_mode;
static dmdata_t pal_a2024_mode_data;
static cop_t *pal_a2024_frames[F_TOTAL];
static u_byte *hedley_init; /* init bitplane. */
static dmode_t *this;
static dmdata_t *this_data;
dmode_t *
cc_init_pal_a2024 (void)
{
/* this function should only be called once. */
if (!this) {
int i;
u_word len = std_pal_a2024_copper_list_len;
cop_t *cp;
this = &pal_a2024_mode;
this_data = &pal_a2024_mode_data;
bzero (this, sizeof (dmode_t));
bzero (this_data, sizeof (dmdata_t));
this->name = "pal: A2024 15khz";
this->nominal_size.width = 1024;
this->nominal_size.height = 1024;
this_data->max_size.width = 1024;
this_data->max_size.height = 1024;
this_data->min_size.width = 1024;
this_data->min_size.height = 1024;
this_data->min_depth = 1;
this_data->max_depth = 2;
this->data = this_data;
this->get_monitor = cc_get_monitor;
this->alloc_view = cc_alloc_view;
this->get_current_view = get_current_view;
this_data->use_colormap = cc_a2024_use_colormap;
this_data->get_colormap = cc_a2024_get_colormap;
this_data->display_view = display_pal_a2024_view;
this_data->alloc_colormap = cc_a2024_alloc_colormap;
this_data->monitor = cc_monitor;
this_data->flags |= DMF_HEDLEY_EXP;
this_data->frames = pal_a2024_frames;
this_data->frames[F_QUAD0] = alloc_chipmem (std_pal_a2024_copper_list_size*F_TOTAL);
if (!this_data->frames[F_QUAD0]) {
panic ("couldn't get chipmem for copper list");
}
/* setup the hedley init bitplane. */
hedley_init = alloc_chipmem (128);
if (!hedley_init) {
panic ("couldn't get chipmem for hedley init bitplane");
}
for (i = 1; i < 128; i++) hedley_init[i] = 0xff;
hedley_init[0] = 0x03;
/* copy image of standard copper list. */
bcopy (std_pal_a2024_copper_list, this_data->frames[0], std_pal_a2024_copper_list_size);
/* set the init plane pointer. */
cp = find_copper_inst (this_data->frames[F_QUAD0], CI_MOVE(R_BPL0PTH));
cp[0].cp.inst.operand = HIADDR (PREP_DMA_MEM (hedley_init));
cp[1].cp.inst.operand = LOADDR (PREP_DMA_MEM (hedley_init));
for (i = 1; i < F_TOTAL; i++) {
this_data->frames[i] = &this_data->frames[i-1][len];
bcopy (this_data->frames[0], this_data->frames[i], std_pal_a2024_copper_list_size);
}
this_data->bplcon0 = 0x8200; /* hires */
this_data->vbl_handler = (vbl_handler_func *) pal_a2024_mode_vbl_handler;
dadd_head (&MDATA(cc_monitor)->modes, &this->node);
}
return (this);
}
static void
display_pal_a2024_view (view_t *v)
{
if (this_data->current_view != v) {
vdata_t *vd = VDATA(v);
monitor_t *monitor = this_data->monitor;
cop_t *cp, *tmp;
u_byte *inst_plane[2];
u_byte **plane = inst_plane;
u_long full_line = v->bitmap->bytes_per_row+v->bitmap->row_mod;
u_long half_plane = full_line * v->bitmap->rows / 2;
int line_mod = 0xbc; /* standard 2024 15khz mod. */
int depth = v->bitmap->depth, i, j;
plane[0] = v->bitmap->plane[0];
if (depth == 2) {
plane[1] = v->bitmap->plane[1];
}
if (this_data->current_view) {
VDATA(this_data->current_view)->flags &= ~VF_DISPLAY; /* mark as no longer displayed. */
}
cp = this_data->frames[F_STORE_QUAD0];
tmp = find_copper_inst (cp, CI_MOVE(R_COLOR1F));
tmp = find_copper_inst (tmp, CI_MOVE(R_BPLCON0)); /* grab third one. */
tmp->cp.inst.operand = this_data->bplcon0 | ((depth & 0x7) << 13); /* times 2 */
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD1], std_pal_a2024_copper_list_size);
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD2], std_pal_a2024_copper_list_size);
bcopy (this_data->frames[F_STORE_QUAD0], this_data->frames[F_STORE_QUAD3], std_pal_a2024_copper_list_size);
/*
* Mark Id's
*/
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_WAIT (126,29));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD1_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_WAIT (126,29));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD2_ID);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_WAIT (126,29));
CBUMP(tmp);
CMOVE (tmp, R_COLOR01, QUAD3_ID);
#define HALF_2024_LINE (512>>3)
plane[0]--;
plane[0]--;
if (depth == 2) {
plane[1]--;
plane[1]--;
}
/*
* Set bitplane pointers.
*/
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD0], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
CMOVE (tmp, R_BPL0PTH, HIADDR (PREP_DMA_MEM (&plane[0][0])));
CMOVE (tmp, R_BPL0PTL, LOADDR (PREP_DMA_MEM (&plane[0][0])));
CMOVE (tmp, R_BPL1PTH, HIADDR (PREP_DMA_MEM (&plane[0][full_line])));
CMOVE (tmp, R_BPL1PTL, LOADDR (PREP_DMA_MEM (&plane[0][full_line])));
if (depth == 2) {
CMOVE (tmp, R_BPL2PTH, HIADDR (PREP_DMA_MEM (&plane[1][0])));
CMOVE (tmp, R_BPL2PTL, LOADDR (PREP_DMA_MEM (&plane[1][0])));
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][full_line])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][full_line])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2100);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD1])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD1], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
CMOVE (tmp, R_BPL0PTH, HIADDR (PREP_DMA_MEM (&plane[0][HALF_2024_LINE])));
CMOVE (tmp, R_BPL0PTL, LOADDR (PREP_DMA_MEM (&plane[0][HALF_2024_LINE])));
CMOVE (tmp, R_BPL1PTH, HIADDR (PREP_DMA_MEM (&plane[0][full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL1PTL, LOADDR (PREP_DMA_MEM (&plane[0][full_line+HALF_2024_LINE])));
if (depth == 2) {
CMOVE (tmp, R_BPL2PTH, HIADDR (PREP_DMA_MEM (&plane[1][HALF_2024_LINE])));
CMOVE (tmp, R_BPL2PTL, LOADDR (PREP_DMA_MEM (&plane[1][HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][full_line+HALF_2024_LINE])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2100);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD2])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD2], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
CMOVE (tmp, R_BPL0PTH, HIADDR (PREP_DMA_MEM (&plane[0][half_plane])));
CMOVE (tmp, R_BPL0PTL, LOADDR (PREP_DMA_MEM (&plane[0][half_plane])));
CMOVE (tmp, R_BPL1PTH, HIADDR (PREP_DMA_MEM (&plane[0][half_plane+full_line])));
CMOVE (tmp, R_BPL1PTL, LOADDR (PREP_DMA_MEM (&plane[0][half_plane+full_line])));
if (depth == 2) {
CMOVE (tmp, R_BPL2PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane])));
CMOVE (tmp, R_BPL2PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane])));
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2100);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD3])));
CEND (tmp); CEND (tmp);
tmp = find_copper_inst (this_data->frames[F_STORE_QUAD3], CI_MOVE (R_BPLMOD2));
CBUMP(tmp);
CMOVE (tmp, R_BPL0PTH, HIADDR (PREP_DMA_MEM (&plane[0][half_plane+HALF_2024_LINE])));
CMOVE (tmp, R_BPL0PTL, LOADDR (PREP_DMA_MEM (&plane[0][half_plane+HALF_2024_LINE])));
CMOVE (tmp, R_BPL1PTH, HIADDR (PREP_DMA_MEM (&plane[0][half_plane+full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL1PTL, LOADDR (PREP_DMA_MEM (&plane[0][half_plane+full_line+HALF_2024_LINE])));
if (depth == 2) {
CMOVE (tmp, R_BPL2PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane+HALF_2024_LINE])));
CMOVE (tmp, R_BPL2PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane+HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTH, HIADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line+HALF_2024_LINE])));
CMOVE (tmp, R_BPL3PTL, LOADDR (PREP_DMA_MEM (&plane[1][half_plane+full_line+HALF_2024_LINE])));
}
#if defined (GRF_ECS)
CMOVE (tmp, R_DIWHIGH, 0x2100);
#endif
CMOVE (tmp, R_COP1LCH, HIADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0])));
CMOVE (tmp, R_COP1LCL, LOADDR (PREP_DMA_MEM (this_data->frames[F_STORE_QUAD0])));
CEND (tmp); CEND (tmp);
/* swap new pointers in. */
for (i = F_STORE_QUAD0, j = F_QUAD0;
i <= F_STORE_QUAD3; i++, j++) {
cp = this_data->frames[j];
this_data->frames[j] = this_data->frames[i];
this_data->frames[i] = cp;
}
this_data->current_view = v;
vd->flags |= VF_DISPLAY;
cc_a2024_use_colormap (v, vd->colormap);
}
cc_load_mode (this);
}
static view_t *
get_current_view (dmode_t *d)
{
return (this_data->current_view);
}
static void
pal_a2024_mode_vbl_handler (dmode_t *d)
{
u_word vp = ((custom.vposr & 0x0007) << 8) | ((custom.vhposr) >> 8);
if (vp < 20) {
custom.cop1lc = PREP_DMA_MEM (this_data->frames[this_data->hedley_current]);
custom.copjmp1 = 0;
}
this_data->hedley_current++;
this_data->hedley_current &= 0x3; /* if 4 then 0. */
}
#endif /* GRF_A2024 & GRF_PAL */

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_ph_mode.c,v 1.2 1994/01/29 07:00:28 chopps Exp $
* $Id: grf_cc_ph_mode.c,v 1.3 1994/01/30 08:25:11 chopps Exp $
*/
#if defined (GRF_PAL)
@ -66,9 +66,9 @@ cc_init_pal_hires (void)
this->nominal_size.width = 640;
this->nominal_size.height = 256;
this_data->max_size.width = 724;
this_data->max_size.height = 283;
this_data->max_size.height = 289;
this_data->min_size.width = 320;
this_data->min_size.height = 128;
this_data->min_size.height = 244;
this_data->min_depth = 1;
this_data->max_depth = 4;
this->data = this_data;
@ -94,7 +94,7 @@ cc_init_pal_hires (void)
bcopy (std_copper_list, this_data->frames[F_STORE_LONG], std_copper_list_size);
bcopy (std_copper_list, this_data->frames[F_LONG], std_copper_list_size);
this_data->bplcon0 = 0x8200; /* pal_hires, color composite enable, lace. */
this_data->bplcon0 = 0x8200|USE_CON3; /* pal_hires, color composite enable, lace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) pal_hires_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_phdl_mode.c,v 1.2 1994/01/29 07:00:30 chopps Exp $
* $Id: grf_cc_phdl_mode.c,v 1.3 1994/01/30 08:25:12 chopps Exp $
*/
#if defined (GRF_A2024) && defined (GRF_PAL)
@ -110,7 +110,7 @@ cc_init_pal_hires_dlace (void)
bcopy (std_dlace_copper_list, this_data->frames[F_LONG], std_dlace_copper_list_size);
bcopy (std_dlace_copper_list, this_data->frames[F_SHORT], std_dlace_copper_list_size);
this_data->bplcon0 = 0x8204; /* hires, color composite enable, dlace. */
this_data->bplcon0 = 0x8204|USE_CON3; /* hires, color composite enable, dlace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) pal_hires_dlace_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_phl_mode.c,v 1.2 1994/01/29 07:00:32 chopps Exp $
* $Id: grf_cc_phl_mode.c,v 1.3 1994/01/30 08:25:14 chopps Exp $
*/
#if defined (GRF_PAL)
@ -68,9 +68,9 @@ cc_init_pal_hires_lace (void)
this->nominal_size.width = 640;
this->nominal_size.height = 512;
this_data->max_size.width = 724;
this_data->max_size.height = 566;
this_data->max_size.height = 578;
this_data->min_size.width = 320;
this_data->min_size.height = 256;
this_data->min_size.height = 484;
this_data->min_depth = 1;
this_data->max_depth = 4;
this->data = this_data;
@ -102,7 +102,7 @@ cc_init_pal_hires_lace (void)
bcopy (std_copper_list, this_data->frames[F_LONG], std_copper_list_size);
bcopy (std_copper_list, this_data->frames[F_SHORT], std_copper_list_size);
this_data->bplcon0 = 0x8204; /* hires, color composite enable, lace. */
this_data->bplcon0 = 0x8204|USE_CON3; /* hires, color composite enable, lace. */
this_data->std_start_x = STANDARD_VIEW_X;
this_data->std_start_y = STANDARD_VIEW_Y;
this_data->vbl_handler = (vbl_handler_func *) pal_hires_lace_mode_vbl_handler;

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: grf_cc_priv.h,v 1.2 1994/01/29 07:00:34 chopps Exp $
* $Id: grf_cc_priv.h,v 1.3 1994/01/30 08:25:16 chopps Exp $
*/
#if ! defined (_GRF_CCPRIV_H)
@ -150,6 +150,12 @@ int cc_a2024_use_colormap (view_t *v, colormap_t *);
int cc_a2024_get_colormap (view_t *v, colormap_t *);
colormap_t * cc_a2024_alloc_colormap (int);
#if defined (GRF_PAL)
extern cop_t std_pal_a2024_copper_list[];
extern int std_pal_a2024_copper_list_len;
extern int std_pal_a2024_copper_list_size;
#endif
extern cop_t std_a2024_copper_list[];
extern int std_a2024_copper_list_len;
extern int std_a2024_copper_list_size;
@ -173,6 +179,9 @@ extern monitor_t *cc_monitor;
#if defined (GRF_ECS)
#define CALC_DIWHIGH(hs, vs, he, ve) \
((u_word)((he&0x100)<<5)|(ve&0x700)|((hs&0x100)>>3)|((vs&0x700)>>8))
#define USE_CON3 0x0001
#else
#define USE_CON3 0x0
#endif
#endif /* _GRF_CCPRIV_H */