aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authorPhilip Paeps <philip@FreeBSD.org>2007-02-21 12:27:12 +0000
committerPhilip Paeps <philip@FreeBSD.org>2007-02-21 12:27:12 +0000
commit0754972c5c72adff156ec736d2f4ebc57776e1ae (patch)
tree8f2df30a1e9c79b8e09d7dc29d55cee093923b96 /sys/dev/syscons
parent9fad4c2a128e0db65a32641d74158bb00269b082 (diff)
Notes
Diffstat (limited to 'sys/dev/syscons')
-rw-r--r--sys/dev/syscons/fire/fire_saver.c11
-rw-r--r--sys/dev/syscons/logo/logo_saver.c13
-rw-r--r--sys/dev/syscons/rain/rain_saver.c17
-rw-r--r--sys/dev/syscons/warp/warp_saver.c11
4 files changed, 40 insertions, 12 deletions
diff --git a/sys/dev/syscons/fire/fire_saver.c b/sys/dev/syscons/fire/fire_saver.c
index 0bc031cad7cb1..de60a20a58f9b 100644
--- a/sys/dev/syscons/fire/fire_saver.c
+++ b/sys/dev/syscons/fire/fire_saver.c
@@ -52,6 +52,12 @@
#define GREEN(n) ((n) * 3 + 1)
#define BLUE(n) ((n) * 3 + 2)
+#define SET_ORIGIN(adp, o) do { \
+ int oo = o; \
+ if (oo != last_origin) \
+ set_origin(adp, last_origin = oo); \
+ } while (0)
+
static u_char *buf;
static u_char *vid;
static int banksize, scrmode, bpsl, scrw, scrh;
@@ -63,6 +69,7 @@ fire_update(video_adapter_t *adp)
{
int x, y;
int o, p;
+ int last_origin = -1;
/* make a new bottom line */
for (x = 0, y = scrh; x < scrw; x++)
@@ -87,12 +94,12 @@ fire_update(video_adapter_t *adp)
p -= banksize;
o += banksize;
}
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
if (p + scrw < banksize) {
bcopy(buf + y * scrw, vid + p, scrw);
} else {
bcopy(buf + y * scrw, vid + p, banksize - p);
- set_origin(adp, o + banksize);
+ SET_ORIGIN(adp, o + banksize);
bcopy(buf + y * scrw + (banksize - p), vid,
scrw - (banksize - p));
p -= banksize;
diff --git a/sys/dev/syscons/logo/logo_saver.c b/sys/dev/syscons/logo/logo_saver.c
index 0a75886388baf..20f2bdcef02af 100644
--- a/sys/dev/syscons/logo/logo_saver.c
+++ b/sys/dev/syscons/logo/logo_saver.c
@@ -42,6 +42,12 @@
#define SAVER_NAME "logo_saver"
+#define SET_ORIGIN(adp, o) do { \
+ int oo = o; \
+ if (oo != last_origin) \
+ set_origin(adp, last_origin = oo); \
+ } while (0)
+
extern unsigned int logo_w;
extern unsigned int logo_h;
extern unsigned char logo_pal[];
@@ -56,10 +62,11 @@ static void
logo_blit(video_adapter_t *adp, int x, int y)
{
int d, l, o, p;
+ int last_origin = -1;
for (o = 0, p = y * bpsl + x; p > banksize; p -= banksize)
o += banksize;
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
for (d = 0; d < logo_img_size; d += logo_w) {
if (p + logo_w < banksize) {
@@ -68,12 +75,12 @@ logo_blit(video_adapter_t *adp, int x, int y)
} else if (p < banksize) {
l = banksize - p;
bcopy(logo_img + d, vid + p, l);
- set_origin(adp, (o += banksize));
+ SET_ORIGIN(adp, (o += banksize));
bcopy(logo_img + d + l, vid, logo_w - l);
p += bpsl - banksize;
} else {
p -= banksize;
- set_origin(adp, (o += banksize));
+ SET_ORIGIN(adp, (o += banksize));
bcopy(logo_img + d, vid + p, logo_w);
p += bpsl;
}
diff --git a/sys/dev/syscons/rain/rain_saver.c b/sys/dev/syscons/rain/rain_saver.c
index 80e2212ee3c7a..3cdf980eceed1 100644
--- a/sys/dev/syscons/rain/rain_saver.c
+++ b/sys/dev/syscons/rain/rain_saver.c
@@ -51,6 +51,12 @@
#define GREEN(n) ((n) * 3 + 1)
#define BLUE(n) ((n) * 3 + 2)
+#define SET_ORIGIN(adp, o) do { \
+ int oo = o; \
+ if (oo != last_origin) \
+ set_origin(adp, last_origin = oo); \
+ } while (0)
+
static u_char *vid;
static int banksize, scrmode, bpsl, scrw, scrh;
static u_char rain_pal[768];
@@ -73,6 +79,7 @@ rain_saver(video_adapter_t *adp, int blank)
{
int i, j, o, p, pl;
u_char temp;
+ int last_origin = -1;
if (blank) {
/* switch to graphics mode */
@@ -87,18 +94,18 @@ rain_saver(video_adapter_t *adp, int blank)
bpsl = adp->va_line_width;
splx(pl);
for (i = 0; i < bpsl*scrh; i += banksize) {
- set_origin(adp, i);
+ SET_ORIGIN(adp, i);
if ((bpsl * scrh - i) < banksize)
bzero(vid, bpsl * scrh - i);
else
bzero(vid, banksize);
}
- set_origin(adp, 0);
+ SET_ORIGIN(adp, 0);
for (i = 0, o = 0, p = 0; i < scrw; i += 2, p += 2) {
if (p > banksize) {
p -= banksize;
o += banksize;
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
}
vid[p] = 1 + (random() % MAX);
}
@@ -109,12 +116,12 @@ rain_saver(video_adapter_t *adp, int blank)
p -= banksize;
o += banksize;
}
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
temp = (vid[p] < MAX) ? 1 + vid[p] : 1;
if (p + bpsl < banksize) {
vid[p + bpsl] = temp;
} else {
- set_origin(adp, o + banksize);
+ SET_ORIGIN(adp, o + banksize);
vid[p + bpsl - banksize] = temp;
}
}
diff --git a/sys/dev/syscons/warp/warp_saver.c b/sys/dev/syscons/warp/warp_saver.c
index 050790d8a391b..aba2439534c3f 100644
--- a/sys/dev/syscons/warp/warp_saver.c
+++ b/sys/dev/syscons/warp/warp_saver.c
@@ -44,6 +44,12 @@
#define SPP 15
#define STARS (SPP * (1 + 2 + 4 + 8))
+#define SET_ORIGIN(adp, o) do { \
+ int oo = o; \
+ if (oo != last_origin) \
+ set_origin(adp, last_origin = oo); \
+ } while (0)
+
static u_char *vid;
static int banksize, scrmode, bpsl, scrw, scrh;
static int blanked;
@@ -61,6 +67,7 @@ static void
warp_update(video_adapter_t *adp)
{
int i, j, k, n, o, p;
+ int last_origin = -1;
for (i = 1, k = 0, n = SPP*8; i < 5; i++, n /= 2) {
for (j = 0; j < n; j++, k++) {
@@ -70,7 +77,7 @@ warp_update(video_adapter_t *adp)
p -= banksize;
o += banksize;
}
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
vid[p] = 0;
star[k] += i;
if (star[k] > scrw*scrh)
@@ -81,7 +88,7 @@ warp_update(video_adapter_t *adp)
p -= banksize;
o += banksize;
}
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
vid[p] = i;
}
}