diff options
author | aiju <devnull@localhost> | 2014-05-25 01:11:21 +0200 |
---|---|---|
committer | aiju <devnull@localhost> | 2014-05-25 01:11:21 +0200 |
commit | 79355486f7722877e518ee6117cf6894febd1f9b (patch) | |
tree | 1866336fd23dde5f337bb227ea7c30cd08169d82 /sys/src/games | |
parent | 93cfa1be72e18029d242ca462da3484488d1c6b3 (diff) |
games/md: first bug fixes
Diffstat (limited to 'sys/src/games')
-rw-r--r-- | sys/src/games/md/cpu.c | 6 | ||||
-rw-r--r-- | sys/src/games/md/mem.c | 4 | ||||
-rw-r--r-- | 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++){ |