Revision: 18815
http://vice-emu.svn.sourceforge.net/vice-emu/?rev=18815&view=rev
Author: amatthies
Date: 2008-05-30 03:13:59 -0700 (Fri, 30 May 2008)
Log Message:
-----------
Fixed sprite initialization bug for border modes. Added parentheses in vicii_sprites_set_x_position().
Modified Paths:
--------------
branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.c
branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.h
branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.c
branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.h
branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.c
branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.h
branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii.c
Modified: branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.c
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.c 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.c 2008-05-30 10:13:59 UTC (rev 18815)
@@ -39,7 +39,7 @@
static void raster_sprite_status_init(raster_sprite_status_t *status,
- unsigned int num_sprites)
+ unsigned int num_sprites, int sprite_offset)
{
status->num_sprites = num_sprites;
status->cache_init_func = raster_sprite_cache_init;
@@ -58,7 +58,7 @@
status->sprite_data_2 = NULL;
}
- raster_sprite_status_reset(status);
+ raster_sprite_status_reset(status, sprite_offset);
}
static void raster_sprite_status_shutdown(raster_sprite_status_t *status,
@@ -71,11 +71,11 @@
}
}
-void raster_sprite_status_new(raster_t *raster, unsigned int num_sprites)
+void raster_sprite_status_new(raster_t *raster, unsigned int num_sprites, int sprite_offset)
{
raster->sprite_status = (raster_sprite_status_t *)lib_malloc(
sizeof(raster_sprite_status_t));
- raster_sprite_status_init(raster->sprite_status, num_sprites);
+ raster_sprite_status_init(raster->sprite_status, num_sprites, sprite_offset);
}
void raster_sprite_status_destroy(raster_t *raster)
@@ -87,7 +87,7 @@
}
}
-void raster_sprite_status_reset(raster_sprite_status_t *status)
+void raster_sprite_status_reset(raster_sprite_status_t *status, int sprite_offset)
{
unsigned int i;
@@ -105,7 +105,7 @@
status->new_sprite_data = status->sprite_data_2;
for (i = 0; i < status->num_sprites; i++)
- raster_sprite_reset(&status->sprites[i]);
+ raster_sprite_reset(&status->sprites[i], sprite_offset);
}
void raster_sprite_status_set_draw_function(raster_sprite_status_t *status,
Modified: branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.h
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.h 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite-status.h 2008-05-30 10:13:59 UTC (rev 18815)
@@ -85,9 +85,9 @@
struct raster_s;
extern void raster_sprite_status_new(struct raster_s *raster,
- unsigned int num_sprites);
+ unsigned int num_sprites, int sprite_offset);
extern void raster_sprite_status_destroy(struct raster_s *raster);
-extern void raster_sprite_status_reset(raster_sprite_status_t *status);
+extern void raster_sprite_status_reset(raster_sprite_status_t *status, int sprite_offset);
extern void raster_sprite_status_set_draw_function(
raster_sprite_status_t *status,
raster_sprite_status_draw_function_t function);
Modified: branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.c
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.c 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.c 2008-05-30 10:13:59 UTC (rev 18815)
@@ -29,9 +29,9 @@
#include "raster-sprite.h"
-void raster_sprite_reset(raster_sprite_t *s)
+void raster_sprite_reset(raster_sprite_t *s, int sprite_offset)
{
- s->x = 8;
+ s->x = sprite_offset;
s->y = 0;
s->x_expanded = 0;
s->y_expanded = 0;
Modified: branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.h
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.h 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/raster/raster-sprite.h 2008-05-30 10:13:59 UTC (rev 18815)
@@ -71,7 +71,7 @@
typedef struct raster_sprite_s raster_sprite_t;
-extern void raster_sprite_reset(raster_sprite_t *s);
+extern void raster_sprite_reset(raster_sprite_t *s, int sprite_offset);
#endif
Modified: branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.c
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.c 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.c 2008-05-30 10:13:59 UTC (rev 18815)
@@ -1170,7 +1170,7 @@
sprite = vicii.raster.sprite_status->sprites + num;
- x_offset = vicii.screen_leftborderwidth - 24;
+ x_offset = vicii_sprite_offset();
/* Handle spritegap in NTSC mode */
if (vicii.sprite_wrap_x > 0x200 && (unsigned int)new_x > 0x187)
@@ -1211,30 +1211,32 @@
sprite->x = vicii.sprite_wrap_x;
} else {
/* display already started on last_pos, change on next fetch */
- if (raster_x + 8 < new_x && sprite->x > raster_x + 8)
+ if (raster_x + 8 < new_x && sprite->x > raster_x + 8) {
/* last line was already drawn */
sprite->x = new_x;
- else
+ } else {
raster_changes_sprites_add_int(&vicii.raster,
SPRITE_DISPLAY_IMMEDIATE_DATA_FETCHED(num),
&sprite->x, new_x);
+ }
}
}
} else {
/* next_pos >= last_pos */
- if (change_pos <= last_pos)
- {
+ if (change_pos <= last_pos) {
/* display not started yet, use next_pos */
sprite->x = new_x;
} else {
- if (change_pos >= next_pos)
- if (raster_x + 8 < sprite->x && new_x > raster_x + 8)
+ if (change_pos >= next_pos) {
+ if (raster_x + 8 < sprite->x && new_x > raster_x + 8) {
/* last line was already drawn */
sprite->x = new_x;
- else
- /* display already started on last_pos, change on next fetch */
- raster_changes_sprites_add_int(&vicii.raster,
- SPRITE_DISPLAY_IMMEDIATE_DATA_FETCHED(num), &sprite->x, new_x);
+ } else {
+ /* display already started on last_pos, change on next fetch */
+ raster_changes_sprites_add_int(&vicii.raster,
+ SPRITE_DISPLAY_IMMEDIATE_DATA_FETCHED(num), &sprite->x, new_x);
+ }
+ }
}
}
raster_changes_sprites_add_int(&vicii.raster,
@@ -1271,3 +1273,7 @@
lib_free(sprline);
}
+int vicii_sprite_offset(void)
+{
+ return vicii.screen_leftborderwidth - 24;
+}
Modified: branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.h
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.h 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii-sprites.h 2008-05-30 10:13:59 UTC (rev 18815)
@@ -49,6 +49,7 @@
extern void vicii_sprites_reset_sprline(void);
extern void vicii_sprites_init_sprline(void);
extern void vicii_sprites_reset_xshift(void);
+extern int vicii_sprite_offset(void);
#endif
Modified: branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii.c
===================================================================
--- branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii.c 2008-05-29 12:15:14 UTC (rev 18814)
+++ branches/amatthies/v1.22.16-sprites/vice/src/vicii/vicii.c 2008-05-30 10:13:59 UTC (rev 18815)
@@ -298,7 +298,7 @@
raster = &vicii.raster;
video_color_set_canvas(raster->canvas);
- raster_sprite_status_new(raster, VICII_NUM_SPRITES);
+ raster_sprite_status_new(raster, VICII_NUM_SPRITES, vicii_sprite_offset());
raster_line_changes_sprite_init(raster);
if (raster_init(raster, VICII_NUM_VMODES) < 0)
@@ -427,7 +427,7 @@
for (i = 0; i <= 0x3f; i++)
vicii_store(i, 0);
- raster_sprite_status_reset(vicii.raster.sprite_status);
+ raster_sprite_status_reset(vicii.raster.sprite_status, vicii_sprite_offset());
}
/* This /should/ put the VIC-II in the same state as after a powerup, if
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|