DREAMWEB: Encapsulated some endian conversions in accessors

This commit is contained in:
Bertrand Augereau 2011-07-30 15:52:28 +02:00
parent 5de064f1e4
commit 69f7a6bcdf
3 changed files with 14 additions and 8 deletions

View file

@ -39,7 +39,7 @@ void DreamGenContext::printsprites() {
Sprite *sprites = spritetable(); Sprite *sprites = spritetable();
for (size_t j = 0; j < 16; ++j) { for (size_t j = 0; j < 16; ++j) {
const Sprite &sprite = sprites[j]; const Sprite &sprite = sprites[j];
if (READ_LE_UINT16(&sprite.updateCallback) == 0x0ffff) if (sprite.updateCallback() == 0x0ffff)
continue; continue;
if (priority != sprite.priority) if (priority != sprite.priority)
continue; continue;
@ -83,7 +83,7 @@ Sprite *DreamGenContext::makesprite(uint8 x, uint8 y, uint16 updateCallback, uin
++sprite; ++sprite;
} }
WRITE_LE_UINT16(&sprite->updateCallback, updateCallback); sprite->setUpdateCallback(updateCallback);
sprite->x = x; sprite->x = x;
sprite->y = y; sprite->y = y;
WRITE_LE_UINT16(&sprite->w6, somethingInDx); WRITE_LE_UINT16(&sprite->w6, somethingInDx);
@ -111,7 +111,7 @@ void DreamGenContext::spriteupdate() {
Sprite *sprite = sprites; Sprite *sprite = sprites;
for (size_t i=0; i < 16; ++i) { for (size_t i=0; i < 16; ++i) {
uint16 updateCallback = READ_LE_UINT16(&sprite->updateCallback); uint16 updateCallback = sprite->updateCallback();
if (updateCallback != 0xffff) { if (updateCallback != 0xffff) {
sprite->w24 = sprite->w2; sprite->w24 = sprite->w2;
if (updateCallback == addr_mainman) // NB : Let's consider the callback as an enum while more code is not ported to C++ if (updateCallback == addr_mainman) // NB : Let's consider the callback as an enum while more code is not ported to C++
@ -279,7 +279,7 @@ void DreamGenContext::backobject(Sprite *sprite) {
push(ds); push(ds);
ds = data.word(kSetdat); ds = data.word(kSetdat);
di = READ_LE_UINT16(&sprite->obj_data); di = sprite->objData();
ObjData *objData = (ObjData *)ds.ptr(di, 0); ObjData *objData = (ObjData *)ds.ptr(di, 0);
if (sprite->delay != 0) { if (sprite->delay != 0) {

View file

@ -20,8 +20,12 @@
* *
*/ */
#include "common/endian.h"
struct Sprite { struct Sprite {
uint16 updateCallback; uint16 _updateCallback;
uint16 updateCallback() const { return READ_LE_UINT16(&_updateCallback); }
void setUpdateCallback(uint16 v) { WRITE_LE_UINT16(&_updateCallback, v); }
uint16 w2; uint16 w2;
uint16 w4; uint16 w4;
uint16 w6; uint16 w6;
@ -35,7 +39,9 @@ struct Sprite {
uint8 b17; uint8 b17;
uint8 delay; uint8 delay;
uint8 frame; uint8 frame;
uint16 obj_data; uint16 _objData;
uint16 objData() const { return READ_LE_UINT16(&_objData); }
void setObjData(uint16 v) { WRITE_LE_UINT16(&_objData, v); }
uint8 b22; uint8 b22;
uint8 priority; uint8 priority;
uint16 w24; uint16 w24;

View file

@ -892,7 +892,7 @@ void DreamGenContext::eraseoldobs() {
Sprite *sprites = spritetable(); Sprite *sprites = spritetable();
for (size_t i=0; i < 16; ++i) { for (size_t i=0; i < 16; ++i) {
Sprite &sprite = sprites[i]; Sprite &sprite = sprites[i];
if (READ_LE_UINT16(&sprite.obj_data) != 0xffff) { if (sprite.objData() != 0xffff) {
memset(&sprite, 0xff, sizeof(Sprite)); memset(&sprite, 0xff, sizeof(Sprite));
} }
} }
@ -985,7 +985,7 @@ void DreamGenContext::makebackob() {
Sprite *sprites = (Sprite *)es.ptr(bx, sizeof(Sprite) * 16); Sprite *sprites = (Sprite *)es.ptr(bx, sizeof(Sprite) * 16);
bx += sizeof(Sprite) * (sprite - sprites); bx += sizeof(Sprite) * (sprite - sprites);
// //
WRITE_LE_UINT16(&sprite->obj_data, si); sprite->setObjData(si);
if (priority == 255) if (priority == 255)
priority = 0; priority = 0;
sprite->priority = priority; sprite->priority = priority;