summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2014-05-25 01:11:21 +0200
committeraiju <devnull@localhost>2014-05-25 01:11:21 +0200
commit79355486f7722877e518ee6117cf6894febd1f9b (patch)
tree1866336fd23dde5f337bb227ea7c30cd08169d82 /sys
parent93cfa1be72e18029d242ca462da3484488d1c6b3 (diff)
games/md: first bug fixes
Diffstat (limited to 'sys')
-rw-r--r--sys/src/games/md/cpu.c6
-rw-r--r--sys/src/games/md/mem.c4
-rw-r--r--sys/src/games/md/vdp.c2
3 files changed, 8 insertions, 4 deletions
diff --git a/sys/src/games/md/cpu.c b/sys/src/games/md/cpu.c
index 092e21fc0..92eda53f4 100644
--- a/sys/src/games/md/cpu.c
+++ b/sys/src/games/md/cpu.c
@@ -126,7 +126,7 @@ amode(int m, int n, int s)
case 3:
w = fetch16();
v = r[w >> 12];
- if((v & 1<<11) == 0)
+ if((w & 1<<11) == 0)
v = (s16int)v;
return (u32int)(pc + v + (s8int)w - 2);
case 4:
@@ -461,7 +461,7 @@ step(void)
int n, m, d;
static int cnt;
- if(0){
+ if(0 && pc == 0x13dc4){
trace++;
print("%x\n", curpc);
}
@@ -806,7 +806,7 @@ step(void)
}
if(s == 3){ /* Scc */
a = amode(op >> 3, op, 0);
- wmode(a, s, -cond((op >> 8) & 0xf));
+ wmode(a, 0, -cond(op >> 8 & 0xf));
break;
} /* ADDQ, SUBQ */
rS |= FLAGZ;
diff --git a/sys/src/games/md/mem.c b/sys/src/games/md/mem.c
index b0353b6da..38a185664 100644
--- a/sys/src/games/md/mem.c
+++ b/sys/src/games/md/mem.c
@@ -171,6 +171,8 @@ memwrite(u32int a, u16int v, u16int m)
u16int *p;
u16int w;
+ if(0 && (a & 0xe0fffe) == 0xe0b1f4)
+ print("%x %x %x\n", curpc, v, m);
switch((a >> 21) & 7){
case 5:
switch(a >> 16 & 0xff){
@@ -193,7 +195,7 @@ memwrite(u32int a, u16int v, u16int m)
dma = 4;
vdpdata = v >> 8;
p = &vram[vdpaddr / 2];
- if((vdpaddr & 1) != 0)
+ if((vdpaddr & 1) == 0)
*p = *p & 0xff | v << 8;
else
*p = *p & 0xff00 | v & 0xff;
diff --git a/sys/src/games/md/vdp.c b/sys/src/games/md/vdp.c
index c6100fc12..a4f26884e 100644
--- a/sys/src/games/md/vdp.c
+++ b/sys/src/games/md/vdp.c
@@ -207,6 +207,8 @@ spritesinit(void)
if((q->t & 0x1000) != 0)
dy = q->h + ~dy;
q->x = (p[3] & 0x3ff) - 128;
+ if(q->x == 0xff80)
+ break;
q->w = (p[1] >> 10 & 3) + 1 << 3;
c = vram + ((q->t & 0x7ff) << 4) + (dy << 1);
for(i = 0; i < q->w >> 3 && np < xdisp; i++){