SourceForge logo
SourceForge logo
Menu

cadcdev-svn-commits — Source Code Repository Updates

You can subscribe to this list here.

2003 Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
(35)
Dec
(2)
2004 Jan
(37)
Feb
(10)
Mar
Apr
(2)
May
(17)
Jun
(1)
Jul
(14)
Aug
(14)
Sep
(4)
Oct
Nov
(14)
Dec
(4)
2005 Jan
(6)
Feb
Mar
Apr
(6)
May
Jun
Jul
Aug
Sep
(1)
Oct
Nov
(92)
Dec
(12)
2006 Jan
(3)
Feb
(4)
Mar
Apr
(5)
May
(3)
Jun
(15)
Jul
(3)
Aug
(1)
Sep
(29)
Oct
(1)
Nov
(6)
Dec
(5)
2007 Jan
(2)
Feb
(2)
Mar
Apr
(3)
May
(14)
Jun
(2)
Jul
(16)
Aug
(73)
Sep
(12)
Oct
(9)
Nov
(27)
Dec
(3)
2008 Jan
(4)
Feb
(4)
Mar
(3)
Apr
(8)
May
(23)
Jun
(4)
Jul
(1)
Aug
(3)
Sep
(7)
Oct
(5)
Nov
(1)
Dec
(1)
2009 Jan
Feb
(10)
Mar
Apr
(4)
May
(4)
Jun
(10)
Jul
Aug
(1)
Sep
Oct
(7)
Nov
Dec
(1)
2010 Jan
Feb
(1)
Mar
Apr
(6)
May
Jun
(3)
Jul
(11)
Aug
(1)
Sep
Oct
(15)
Nov
(1)
Dec
(5)
2011 Jan
(4)
Feb
(1)
Mar
(6)
Apr
May
(22)
Jun
Jul
(8)
Aug
(2)
Sep
Oct
Nov
Dec
(2)
2012 Jan
Feb
(10)
Mar
(1)
Apr
(6)
May
(27)
Jun
(48)
Jul
(30)
Aug
(4)
Sep
Oct
(3)
Nov
(1)
Dec
(11)
2013 Jan
(4)
Feb
(7)
Mar
(6)
Apr
(18)
May
(28)
Jun
(20)
Jul
Aug
(4)
Sep
(1)
Oct
(1)
Nov
(2)
Dec
(7)
2014 Jan
(3)
Feb
(2)
Mar
(4)
Apr
(9)
May
(11)
Jun
(10)
Jul
Aug
(18)
Sep
(12)
Oct
(17)
Nov
(10)
Dec
(16)
2015 Jan
(5)
Feb
(1)
Mar
(5)
Apr
(4)
May
(28)
Jun
(2)
Jul
Aug
Sep
(6)
Oct
Nov
(2)
Dec
(1)
2016 Jan
(14)
Feb
Mar
(3)
Apr
May
Jun
(3)
Jul
(4)
Aug
(4)
Sep
(1)
Oct
(1)
Nov
Dec
(1)
2017 Jan
(11)
Feb
Mar
(21)
Apr
May
(1)
Jun
Jul
Aug
Sep
Oct
Nov
Dec
(1)
2018 Jan
Feb
Mar
(1)
Apr
May
(1)
Jun
Jul
Aug
(2)
Sep
(4)
Oct
(4)
Nov
Dec
(1)
2019 Jan
(1)
Feb
Mar
Apr
(1)
May
Jun
Jul
Aug
(13)
Sep
(4)
Oct
Nov
Dec
2020 Jan
(10)
Feb
(9)
Mar
(5)
Apr
(4)
May
(3)
Jun
(18)
Jul
(4)
Aug
(2)
Sep
(20)
Oct
(2)
Nov
Dec
2021 Jan
Feb
Mar
Apr
(2)
May
(1)
Jun
(2)
Jul
(1)
Aug
(2)
Sep
Oct
Nov
Dec
(2)
2022 Jan
(1)
Feb
(2)
Mar
(2)
Apr
(1)
May
Jun
Jul
Aug
(5)
Sep
Oct
(1)
Nov
Dec
(1)
2023 Jan
(10)
Feb
(7)
Mar
(29)
Apr
(31)
May
(29)
Jun
(34)
Jul
(3)
Aug
(24)
Sep
(22)
Oct
(10)
Nov
(38)
Dec
(27)
2024 Jan
(15)
Feb
(8)
Mar
(4)
Apr
(20)
May
(33)
Jun
(18)
Jul
(15)
Aug
(23)
Sep
(26)
Oct
(32)
Nov
(6)
Dec
(4)
2025 Jan
(7)
Feb
(1)
Mar
(1)
Apr
(4)
May
(46)
Jun
(19)
Jul
(26)
Aug
(48)
Sep
(30)
Oct
(6)
Nov
Dec
S M T W T F S






1
2
3
(1)
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31





Showing 1 results of 1

From: <ljs...@us...> - 2009年08月03日 00:38:53
Revision: 647
 http://cadcdev.svn.sourceforge.net/cadcdev/?rev=647&view=rev
Author: ljsebald
Date: 2009年08月03日 00:38:45 +0000 (2009年8月03日)
Log Message:
-----------
Support for multiple framebuffers when the PVR isn't being used.
Modified Paths:
--------------
 kos/kernel/arch/dreamcast/hardware/video.c
 kos/kernel/arch/dreamcast/include/dc/video.h
Modified: kos/kernel/arch/dreamcast/hardware/video.c
===================================================================
--- kos/kernel/arch/dreamcast/hardware/video.c	2009年06月12日 02:40:54 UTC (rev 646)
+++ kos/kernel/arch/dreamcast/hardware/video.c	2009年08月03日 00:38:45 UTC (rev 647)
@@ -11,6 +11,8 @@
 #include <string.h>
 #include <stdio.h>
 
+#define FBPOS(n) (n * 0x200000)
+
 /*-----------------------------------------------------------------------------*/
 /* This table is indexed w/ DM_* */
 vid_mode_t vid_builtin[DM_MODE_COUNT] = {
@@ -205,6 +207,198 @@
 		{ 0, 0, 0, 0 }
 	},
 
+	/* All of the modes below this comment are exactly the same as the ones
+	 above, other than that they support multiple framebuffers (in the current
+	 case, 4). They're only particularly useful if you're doing a drawing by
+	 directly writing to the framebuffer, and are not useful at all if you're
+	 using the PVR to do your drawing. */
+	/* 320x240 VGA 60Hz */
+	/* DM_320x240_VGA_MB */
+	{
+		DM_320x240 | DM_MULTIBUFFER,
+		320, 240,
+		VID_PIXELDOUBLE|VID_LINEDOUBLE,
+		CT_VGA,
+		0,
+		262, 857,
+		0xAC, 0x28,
+		0x15, 0x104,
+		141, 843,
+		24, 263,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 320x240 NTSC 60Hz */
+	/* DM_320x240_NTSC_MB */
+	{
+		DM_320x240 | DM_MULTIBUFFER,
+		320, 240,
+		VID_PIXELDOUBLE|VID_LINEDOUBLE,
+		CT_ANY,
+		0,
+		262, 857,
+		0xA4, 0x18,
+		0x15, 0x104,
+		141, 843,
+		24, 263,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 640x480 VGA 60Hz */
+	/* DM_640x480_VGA_MB */
+	{
+		DM_640x480 | DM_MULTIBUFFER,
+		640, 480,
+		VID_INTERLACE,
+		CT_VGA,
+		0,
+		0x20C, 0x359,
+		0xAC, 0x28,
+		0x15, 0x104,
+		0x7E, 0x345,
+		0x24, 0x204,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 640x480 NTSC 60Hz IL */
+	/* DM_640x480_NTSC_IL_MB */
+	{
+		DM_640x480 | DM_MULTIBUFFER,
+		640, 480,
+		VID_INTERLACE,
+		CT_ANY,
+		0,
+		0x20C, 0x359,
+		0xA4, 0x12,
+		0x15, 0x104,
+		0x7E, 0x345,
+		0x24, 0x204,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 800x608 NTSC 60Hz (VGA) [BROKEN!] */
+	/* DM_800x608_VGA_MB */
+	{
+		DM_800x608 | DM_MULTIBUFFER,
+		320, 240,
+		VID_INTERLACE,
+		1/*CT_ANY*/, /* This will block the mode from being set. */
+		0,
+		262, 857,
+		164, 24,
+		21, 82,
+		141, 843,
+		24, 264,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 640x480 PAL 50Hz IL */
+	/* DM_640x480_PAL_IL_MB */
+	{
+		DM_640x480 | DM_MULTIBUFFER,
+		640, 480,
+		VID_INTERLACE|VID_PAL,
+		CT_ANY,
+		0,
+		0x270, 0x35F,
+		0xAE, 0x2D,
+		0x15, 0x104,
+		0x8D, 0x34B,
+		0x2C, 0x26C,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 256x256 PAL 50Hz IL (seems to output the same w/o VID_PAL, ie. in NTSC IL mode) */
+	/* DM_256x256_PAL_IL_MB */
+	{
+		DM_256x256 | DM_MULTIBUFFER,
+		256, 256,
+		VID_PIXELDOUBLE|VID_LINEDOUBLE|VID_INTERLACE|VID_PAL,
+		CT_ANY,
+		0,
+		624, 863,
+		226, 37,
+		0x15, 0x104,
+		0x8D, 0x34B,
+		0x2C, 0x26C,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 768x480 NTSC 60Hz IL (thanks DCGrendel) */
+	/* DM_768x480_NTSC_IL_MB */
+	{
+		DM_768x480 | DM_MULTIBUFFER,
+		768, 480,
+		VID_INTERLACE,
+		CT_ANY,
+		0,
+		524, 857,
+		96, 18,
+		0x15, 0x104,
+		0x2e, 0x345,
+		0x24, 0x204,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 768x576 PAL 50Hz IL (DCG) */
+	/* DM_768x576_PAL_IL_MB */
+	{
+		DM_768x576 | DM_MULTIBUFFER,
+		768, 576,
+		VID_INTERLACE | VID_PAL,
+		CT_ANY,
+		0,
+		624, 863,
+		88, 16,
+		0x18, 0x104,
+		0x36, 0x34b,
+		0x2c, 0x26c,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 768x480 PAL 50Hz IL */
+	/* DM_768x480_PAL_IL_MB */
+	{
+		DM_768x480 | DM_MULTIBUFFER,
+		768, 480,
+		VID_INTERLACE | VID_PAL,
+		CT_ANY,
+		0,
+		624, 863,
+		88, 16,
+		0x18, 0x104,
+		0x36, 0x34b,
+		0x2c, 0x26c,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
+	/* 320x240 PAL 50Hz (thanks Marco Martins aka Mekanaizer) */
+	/* DM_320x240_PAL_MB */
+	{
+		DM_320x240 | DM_MULTIBUFFER,
+		320, 240,
+		VID_PIXELDOUBLE|VID_LINEDOUBLE|VID_PAL,
+		CT_ANY,
+		0,
+		312, 863,
+		174, 45,
+		21, 260,
+		141, 843,
+		44, 620,
+		0, VID_MAX_FB,
+		{ FBPOS(0), FBPOS(1), FBPOS(2), FBPOS(3) }
+	},
+
 	/* END */
 	/* DM_SENTINEL */
 	{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, { 0, 0, 0, 0 } }
@@ -244,10 +438,15 @@
 /*-----------------------------------------------------------------------------*/
 void vid_set_mode(int dm, int pm) {
 	vid_mode_t mode;
-	int i, ct, found;
+	int i, ct, found, dm2;
 
 	ct = vid_check_cable();
 
+	/* Remove the multi-buffering flag from the mode, if its present, and save
+	 the state of that flag. */
+	dm2 = dm & DM_MULTIBUFFER;
+	dm &= ~DM_MULTIBUFFER;
+
 	/* Check to see if we should use a direct mode index, a generic
 	 mode check, or if it's just invalid. */
 	if (dm > DM_INVALID && dm < DM_SENTINEL) {
@@ -256,7 +455,7 @@
 		found = 0;
 		for (i=1; i<DM_SENTINEL; i++) {
 			/* Is it the right generic mode? */
-			if (vid_builtin[i].generic != dm)
+			if (vid_builtin[i].generic != (dm | dm2))
 				continue;
 
 			/* Do we have the right cable type? */
@@ -318,9 +517,10 @@
 			mode->scanlines *= 2;
 	}
 
-	dbglog(DBG_INFO, "vid_set_mode: %ix%i%s %s\n", mode->width, mode->height,
+	dbglog(DBG_INFO, "vid_set_mode: %ix%i%s %s%s\n", mode->width, mode->height,
 		(mode->flags & VID_INTERLACE) ? "IL" : "",
-		(mode->flags & VID_PAL) ? "PAL" : "NTSC");
+		(mode->flags & VID_PAL) ? "PAL" : "NTSC",
+		(mode->generic & DM_MULTIBUFFER) ? " multi-buffered" : "");
 	
 	vid_border_color(0, 0, 0);
 	
@@ -392,7 +592,9 @@
 	memcpy(&currmode, mode, sizeof(vid_mode_t));
 	vid_mode = &currmode;
 	
-	vid_set_start(0);
+	/* Set up the framebuffer */
+	vid_mode->fb_curr = -1;
+	vid_flip(0);
 
 	/* Set cable type */
 	if (mode->cable_type & 1) {
@@ -427,6 +629,7 @@
 /*-----------------------------------------------------------------------------*/
 void vid_flip(int fb) {
 	uint16 oldfb;
+	uint32 base;
 
 	oldfb = vid_mode->fb_curr;
 	if (fb < 0) {
@@ -441,6 +644,11 @@
 	}
 
 	vid_set_start(vid_mode->fb_base[vid_mode->fb_curr]);
+
+	/* Set the vram_* pointers as expected */
+	base = vid_mode->fb_base[(vid_mode->fb_curr + 1) & (vid_mode->fb_count - 1)];
+	vram_s = (uint16*)(0xA5000000|base);
+	vram_l = (uint32*)(0xA5000000|base);
 }
 
 /*-----------------------------------------------------------------------------*/
Modified: kos/kernel/arch/dreamcast/include/dc/video.h
===================================================================
--- kos/kernel/arch/dreamcast/include/dc/video.h	2009年06月12日 02:40:54 UTC (rev 646)
+++ kos/kernel/arch/dreamcast/include/dc/video.h	2009年08月03日 00:38:45 UTC (rev 647)
@@ -38,6 +38,9 @@
 	DM_GENERIC_LAST = DM_768x576
 };
 
+// OR this with the generic mode to get 4 framebuffers instead of one
+#define DM_MULTIBUFFER	0x2000
+
 //-----------------------------------------------------------------------------
 // More specific modes (and actual indeces into the mode table)
 
@@ -55,6 +58,17 @@
 	DM_768x576_PAL_IL,
 	DM_768x480_PAL_IL,
 	DM_320x240_PAL,
+	DM_320x240_VGA_MB,
+	DM_320x240_NTSC_MB,
+	DM_640x480_VGA_MB,
+	DM_640x480_NTSC_IL_MB,
+	DM_800x608_VGA_MB,
+	DM_640x480_PAL_IL_MB,
+	DM_256x256_PAL_IL_MB,
+	DM_768x480_NTSC_IL_MB,
+	DM_768x576_PAL_IL_MB,
+	DM_768x480_PAL_IL_MB,
+	DM_320x240_PAL_MB,
 	// The below is only for counting..
 	DM_SENTINEL,
 	DM_MODE_COUNT
@@ -95,6 +109,12 @@
 extern vid_mode_t *vid_mode;
 
 //-----------------------------------------------------------------------------
+// These point to the current drawing area. If you're not using a multi-buffered
+// mode, that means they do what KOS always used to do (they'll point at the
+// start of VRAM). If you're using a multi-buffered mode, they'll point at the
+// next framebuffer to be displayed. You must use vid_flip for this to work
+// though (if you use vid_set_start, they'll point at the display base, for
+// compatibility's sake).
 extern uint16 *vram_s;
 extern uint32 *vram_l;
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

Showing 1 results of 1

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /