Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions arch/m68k-amiga/graphics/vbeampos.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright � 1995-2013, The AROS Development Team. All rights reserved.
Copyright © 1995-2013, The AROS Development Team. All rights reserved.
$Id$

Desc: Read the current vertical position of the beam
Expand All @@ -17,7 +17,21 @@ AROS_LH0(LONG, VBeamPos,
{
AROS_LIBFUNC_INIT

volatile struct Custom *custom = (struct Custom*)0xdff000;
ULONG result;

asm volatile(
"move.l 0x00dff004, %[result] \n"
"asr.l #8, %[result] \n"
"and.l #0x7ff, %[result] \n"
: [result] "=d" (result)
:
: "cc"
);

return result;

/*
volatile struct Custom *custom = (struct Custom*)0xdff000;
UWORD v1, v2;

for (;;) {
Expand All @@ -28,6 +42,7 @@ AROS_LH0(LONG, VBeamPos,
}

return v1 | ((v2 & 7) << 8);
*/

AROS_LIBFUNC_EXIT
} /* VBeamPos */
137 changes: 77 additions & 60 deletions workbench/libs/cgfx/getcybermapattr.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright � 1995-2020, The AROS Development Team. All rights reserved.
Copyright © 1995-2020, The AROS Development Team. All rights reserved.
$Id$

Desc:
Expand Down Expand Up @@ -71,80 +71,97 @@

OOP_Object *bm_obj = NULL;
OOP_Object *pf = NULL;
ULONG w, h, bs, ms;

IPTR retval = 0;
IPTR retval = -1;

if (IS_HIDD_BM(bitMap))
{
bm_obj = HIDD_BM_OBJ(bitMap);
OOP_GetAttr(bm_obj, aHidd_BitMap_PixFmt, (IPTR *)&pf);
bm_obj = HIDD_BM_OBJ(bitMap);
OOP_GetAttr(bm_obj, aHidd_BitMap_PixFmt, (IPTR *)&pf);
}

switch (attribute) {
case CYBRMATTR_XMOD:
if (bm_obj)
OOP_GetAttr(bm_obj, aHidd_BitMap_BytesPerRow, &retval);
else
retval = bitMap->BytesPerRow;
break;

case CYBRMATTR_BPPIX:
if (pf)
OOP_GetAttr(pf, aHidd_PixFmt_BytesPerPixel, &retval);
break;

case CYBRMATTR_PIXFMT:
case CYBRMATTR_PIXFMT_ALPHA:
if (pf)
{
OOP_GetAttr(pf, aHidd_PixFmt_CgxPixFmt, &retval);

/* Backwards compatibility kludge. To be removed.
Used only by Cairo, do not use CYBRMATTR_PIXFMT_ALPHA
anywhere else. */
if (attribute == CYBRMATTR_PIXFMT_ALPHA)
{
IPTR stdpf;

OOP_GetAttr(pf, aHidd_PixFmt_StdPixFmt, &stdpf);
if ((stdpf >= vHidd_StdPixFmt_0RGB32) && (stdpf >= vHidd_StdPixFmt_0BGR32))
retval += 91; // TODO: This is not safe - use the actual values.
}

D(bug("[GetCyberMapAttr] Pixel format is %d\n", retval));
}
else
retval = -1;
break;

case CYBRMATTR_WIDTH:
retval = GetBitMapAttr(bitMap, BMA_WIDTH);
break;
case CYBRMATTR_XMOD:
if (bm_obj)
OOP_GetAttr(bm_obj, aHidd_BitMap_BytesPerRow, &retval);
else
retval = bitMap->BytesPerRow;
break;

case CYBRMATTR_BPPIX:
if (pf)
OOP_GetAttr(pf, aHidd_PixFmt_BytesPerPixel, &retval);
break;

case CYBRMATTR_PIXFMT:
case CYBRMATTR_PIXFMT_ALPHA:
if (pf)
{
OOP_GetAttr(pf, aHidd_PixFmt_CgxPixFmt, &retval);

/* Backwards compatibility kludge. To be removed.
Used only by Cairo, do not use CYBRMATTR_PIXFMT_ALPHA
anywhere else.
Warning:
On non AROS systems, this is the same Tag descriptor ID as CYBRMATTR_COLORMAP.
*/
if (attribute == CYBRMATTR_PIXFMT_ALPHA)
{
IPTR stdpf;

OOP_GetAttr(pf, aHidd_PixFmt_StdPixFmt, &stdpf);
if ((stdpf >= vHidd_StdPixFmt_0RGB32) && (stdpf >= vHidd_StdPixFmt_0BGR32))
retval += 91; // TODO: This is not safe - use the actual values.
}

D(bug("[GetCyberMapAttr] Pixel format is %d\n", retval));
}
else
retval = -1;
break;

case CYBRMATTR_WIDTH:
retval = GetBitMapAttr(bitMap, BMA_WIDTH);
break;

case CYBRMATTR_HEIGHT:
retval = GetBitMapAttr(bitMap, BMA_HEIGHT);
break;
case CYBRMATTR_HEIGHT:
retval = GetBitMapAttr(bitMap, BMA_HEIGHT);
break;

case CYBRMATTR_DEPTH:
retval = GetBitMapAttr(bitMap, BMA_DEPTH);
break;
case CYBRMATTR_DEPTH:
retval = GetBitMapAttr(bitMap, BMA_DEPTH);
break;

case CYBRMATTR_ISCYBERGFX:
retval = bm_obj ? TRUE : FALSE;
break;

case CYBRMATTR_ISLINEARMEM:
if (bm_obj)
OOP_GetAttr(bm_obj, aHidd_BitMap_IsLinearMem, &retval);
else
retval = TRUE;
break;
case CYBRMATTR_ISCYBERGFX:
retval = bm_obj ? TRUE : FALSE;
break;

case CYBRMATTR_ISLINEARMEM:
if (bm_obj)
OOP_GetAttr(bm_obj, aHidd_BitMap_IsLinearMem, &retval);
else
retval = TRUE;
break;

case CYBRMATTR_DISPADR:
retval = (IPTR)bitMap->Planes[0];
if(retval == -1 || retval == 0)
{
if(bm_obj)
{
if(HIDD_BM_ObtainDirectAccess(bm_obj, &retval, &w, &h, &bs, &ms))
UnLockBitMap(bitMap);
}
}
if(retval == 0) retval = -1;
break;

#if defined(CYBRMATTR_COLORMAP)
case CYBRMATTR_COLORMAP:
#endif
default:
D(bug("!!! UNKNOWN ATTRIBUTE PASSED TO GetCyberMapAttr()\n"));
D(bug("!!! UNKNOWN ATTRIBUTE PASSED TO GetCyberMapAttr()\n"));
break;
} /* switch (attribute) */

Expand Down
17 changes: 14 additions & 3 deletions workbench/libs/gadtools/freevisualinfo.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright � 1995-2007, The AROS Development Team. All rights reserved.
Copyright © 1995-2007, The AROS Development Team. All rights reserved.
$Id$

Desc:
Expand Down Expand Up @@ -47,11 +47,22 @@
***************************************************************************/
{
AROS_LIBFUNC_INIT
struct ImageLink *il;
struct ImageLink *nextil;

if (vi)
{
FreeScreenDrawInfo(((struct VisualInfo *)vi)->vi_screen, ((struct VisualInfo *)vi)->vi_dri);
FreeVec(vi);
il = ((struct VisualInfo *)vi)->vi_images;
while(il)
{
nextil = il->il_Next;
DisposeObject(il->il_Image);
FreeVec(il);
il = nextil;
}
FreeScreenDrawInfo(((struct VisualInfo *)vi)->vi_screen, ((struct VisualInfo *)vi)->vi_dri);
CloseFont(((struct VisualInfo *)vi)->vi_screenfont);
FreeVec(vi);
}

AROS_LIBFUNC_EXIT
Expand Down
6 changes: 5 additions & 1 deletion workbench/libs/gadtools/gadtools_intern.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define GADTOOLS_INTERN_H

/*
Copyright � 1995-2011, The AROS Development Team. All rights reserved.
Copyright © 1995-2011, The AROS Development Team. All rights reserved.
$Id$

Desc: Internal definitions for gadtools.library.
Expand Down Expand Up @@ -300,7 +300,11 @@ struct GT_IntuiMessage
struct VisualInfo
{
struct Screen * vi_screen;
struct TextFont * vi_screenfont;
struct DrawInfo * vi_dri;
struct ImageLink * vi_images;
UBYTE vi_textpen;
UBYTE vi_backpen;
};

/* dummy gadget created by CreateContext */
Expand Down
11 changes: 8 additions & 3 deletions workbench/libs/gadtools/getvisualinfoa.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright � 1995-2007, The AROS Development Team. All rights reserved.
Copyright © 1995-2007, The AROS Development Team. All rights reserved.
$Id$

Desc:
Expand Down Expand Up @@ -61,13 +61,18 @@
if (screen == NULL)
return NULL;

vi = AllocVec(sizeof(struct VisualInfo), MEMF_ANY);
vi = AllocVec(sizeof(struct VisualInfo), MEMF_ANY|MEMF_CLEAR);
if (!vi)
return NULL;

vi->vi_screen = screen;
vi->vi_screenfont = OpenFont(screen->Font);
vi->vi_dri = GetScreenDrawInfo(screen);

if(vi->vi_dri)
{
vi->vi_textpen = vi->vi_dri->dri_Pens[TEXTPEN];
vi->vi_backpen = vi->vi_dri->dri_Pens[BACKGROUNDPEN];
}
return vi;

AROS_LIBFUNC_EXIT
Expand Down