From 1a5c536cc96de8ba24773e11856c3de15191fcd0 Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:43:21 +0200 Subject: [PATCH 1/7] Complete attributes --- workbench/libs/gadtools/getvisualinfoa.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/workbench/libs/gadtools/getvisualinfoa.c b/workbench/libs/gadtools/getvisualinfoa.c index d195c922cf1..e1ae0306730 100644 --- a/workbench/libs/gadtools/getvisualinfoa.c +++ b/workbench/libs/gadtools/getvisualinfoa.c @@ -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: @@ -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 From f4abcf0942aa163930f4996a57a1abf58639bfcf Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:52:32 +0200 Subject: [PATCH 2/7] Complete attributes --- workbench/libs/gadtools/freevisualinfo.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/workbench/libs/gadtools/freevisualinfo.c b/workbench/libs/gadtools/freevisualinfo.c index e8a5dcee31b..09397efe398 100644 --- a/workbench/libs/gadtools/freevisualinfo.c +++ b/workbench/libs/gadtools/freevisualinfo.c @@ -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: @@ -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(vi->vi_ScreenFont); + FreeVec(vi); } AROS_LIBFUNC_EXIT From 841e1dfdb2a4bb9745782f2873816310492aebc5 Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:30:53 +0200 Subject: [PATCH 3/7] complete Attributes for VisualInfo --- workbench/libs/gadtools/gadtools_intern.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/workbench/libs/gadtools/gadtools_intern.h b/workbench/libs/gadtools/gadtools_intern.h index eb7c2103ecd..8255343c36b 100644 --- a/workbench/libs/gadtools/gadtools_intern.h +++ b/workbench/libs/gadtools/gadtools_intern.h @@ -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. @@ -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 */ From 5ebc2e0d13af7f91bf39d426adec7f5b34cfd70a Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:32:06 +0200 Subject: [PATCH 4/7] Complete Attributes (fixed camelcase) --- workbench/libs/gadtools/freevisualinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workbench/libs/gadtools/freevisualinfo.c b/workbench/libs/gadtools/freevisualinfo.c index 09397efe398..3e97bcfddb5 100644 --- a/workbench/libs/gadtools/freevisualinfo.c +++ b/workbench/libs/gadtools/freevisualinfo.c @@ -61,7 +61,7 @@ il = nextil; } FreeScreenDrawInfo(((struct VisualInfo *)vi)->vi_screen, ((struct VisualInfo *)vi)->vi_dri); - CloseFont(vi->vi_ScreenFont); + CloseFont(vi->vi_screenfont); FreeVec(vi); } From 8bf3585af61c1179160838a1b974f9620b326b43 Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:22:47 +0200 Subject: [PATCH 5/7] Added typecast --- workbench/libs/gadtools/freevisualinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workbench/libs/gadtools/freevisualinfo.c b/workbench/libs/gadtools/freevisualinfo.c index 3e97bcfddb5..6134b8cf0b1 100644 --- a/workbench/libs/gadtools/freevisualinfo.c +++ b/workbench/libs/gadtools/freevisualinfo.c @@ -61,7 +61,7 @@ il = nextil; } FreeScreenDrawInfo(((struct VisualInfo *)vi)->vi_screen, ((struct VisualInfo *)vi)->vi_dri); - CloseFont(vi->vi_screenfont); + CloseFont(((struct VisualInfo *)vi)->vi_screenfont); FreeVec(vi); } From 51f8e64cb9ec7491eeb3140102081c3e26e82cb8 Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Mon, 26 Oct 2026 10:52:28 +0100 Subject: [PATCH 6/7] Added CYBRMATTR_DISPADR, default val to -1 --- workbench/libs/cgfx/getcybermapattr.c | 137 +++++++++++++++----------- 1 file changed, 77 insertions(+), 60 deletions(-) diff --git a/workbench/libs/cgfx/getcybermapattr.c b/workbench/libs/cgfx/getcybermapattr.c index b38d6e4990a..a593269f4b9 100644 --- a/workbench/libs/cgfx/getcybermapattr.c +++ b/workbench/libs/cgfx/getcybermapattr.c @@ -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: @@ -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) */ From 5aad15225e8a2a0e5a19579007a95998c5d0176c Mon Sep 17 00:00:00 2001 From: DerThore <101505694+DerThore@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:38:37 +0100 Subject: [PATCH 7/7] Recode in assembler --- arch/m68k-amiga/graphics/vbeampos.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/arch/m68k-amiga/graphics/vbeampos.c b/arch/m68k-amiga/graphics/vbeampos.c index 29cc3b185c2..fcef9356c89 100644 --- a/arch/m68k-amiga/graphics/vbeampos.c +++ b/arch/m68k-amiga/graphics/vbeampos.c @@ -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 @@ -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 (;;) { @@ -28,6 +42,7 @@ AROS_LH0(LONG, VBeamPos, } return v1 | ((v2 & 7) << 8); + */ AROS_LIBFUNC_EXIT } /* VBeamPos */