From 79355486f7722877e518ee6117cf6894febd1f9b Mon Sep 17 00:00:00 2001 From: aiju Date: Sun, 25 May 2014 01:11:21 +0200 Subject: games/md: first bug fixes --- sys/src/games/md/cpu.c | 6 +++--- sys/src/games/md/mem.c | 4 +++- sys/src/games/md/vdp.c | 2 ++ 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++){ -- cgit v1.2.3