diff --git a/projects/examples/dev.audio.usm b/projects/examples/dev.audio.usm index eae17d2..a15c54a 100644 --- a/projects/examples/dev.audio.usm +++ b/projects/examples/dev.audio.usm @@ -133,13 +133,13 @@ BRK DUP #f0 AND STH #01 ~Mouse.state #10 EQU #0e MUL ADD ADD #0f AND STHr ADD ,Audio #00 ~track.active #02 MUL ADD2 ++ POK2 $no-r DUP #05 NEQ ^$no-left JNZ - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 PEK2 + ,Audio 8+ #00 ~track.active #02 MUL ADD2 PEK2 #10 ~Mouse.state #10 EQU #e0 MUL ADD ADD - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 POK2 $no-left + ,Audio 8+ #00 ~track.active #02 MUL ADD2 POK2 $no-left DUP #06 NEQ ^$no-right JNZ - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 PEK2 + ,Audio 8+ #00 ~track.active #02 MUL ADD2 PEK2 DUP #f0 AND STH #01 ~Mouse.state #10 EQU #0e MUL ADD ADD #0f AND STHr ADD - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 POK2 $no-right + ,Audio 8+ #00 ~track.active #02 MUL ADD2 POK2 $no-right POP ( release ) #00 =Mouse.state ,draw-controls JSR2 @@ -336,10 +336,10 @@ RTN ( vol ) ~ctlframe.x1 #0058 ADD2 ~ctlframe.y1 8+ #02 ,vol_txt ,draw-label JSR2 ~ctlframe.x1 #0058 ADD2 ~ctlframe.y1 #0010 ADD2 - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 PEK2 #04 SFT + ,Audio 8+ #00 ~track.active #02 MUL ADD2 PEK2 #04 SFT ,draw-knob JSR2 ~ctlframe.x1 #0068 ADD2 ~ctlframe.y1 #0010 ADD2 - ,Audio #0009 ADD2 #00 ~track.active #02 MUL ADD2 PEK2 #0f AND + ,Audio 8+ #00 ~track.active #02 MUL ADD2 PEK2 #0f AND ,draw-knob JSR2 RTN diff --git a/src/emulator.c b/src/emulator.c index 415215f..53d7075 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -108,19 +108,6 @@ paintpixel(Uint8 *dst, Uint16 x, Uint16 y, Uint8 color) dst[row + 8] |= 1UL << col; } -void -painticn(Uint8 *dst, Uint16 x, Uint16 y, Uint8 *sprite, Uint8 blend) -{ - Uint16 v, h; - for(v = 0; v < 8; v++) - for(h = 0; h < 8; h++) { - Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1); - if(ch1 == 0 && (blend == 0x05 || blend == 0x0a || blend == 0x0f)) - continue; - paintpixel(dst, x + h, y + v, ch1 ? blend % 4 : blend / 4); - } -} - #pragma mark - Helpers void @@ -459,12 +446,19 @@ sprite_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) Uint8 *m = u->ram.dat; ptr += 8; if(b0 == 0x0e) { + Uint16 v, h; Uint16 x = (m[ptr] << 8) + m[ptr + 1]; Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; - Uint16 a = (m[ptr + 4] << 8) + m[ptr + 5]; - Uint8 source = (b1 >> 4) & 0xf; - Uint8 *layer = source % 2 ? screen.fg : screen.bg; - painticn(layer, x, y, &m[a], b1 & 0xf); + Uint8 blend = b1 & 0xf; + Uint8 *layer = ((b1 >> 4) & 0xf) % 2 ? screen.fg : screen.bg; + Uint8 *sprite = &m[(m[ptr + 4] << 8) + m[ptr + 5]]; + for(v = 0; v < 8; v++) + for(h = 0; h < 8; h++) { + Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1); + if(ch1 == 0 && (blend == 0x05 || blend == 0x0a || blend == 0x0f)) + continue; + paintpixel(layer, x + h, y + v, ch1 ? blend % 4 : blend / 4); + } screen.reqdraw = 1; } return b1; @@ -500,7 +494,7 @@ audio_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) { Uint8 *m = u->ram.dat; m[PAGE_DEVICE + 0x0070 + b0] = b1; - if(b0 & 1) { + if(b0 > 0x08 && b0 & 1) { Uint16 addr = ptr + (b0 & 0x6); Channel *c = &channels[(b0 & 0x6) >> 1]; SDL_LockAudioDevice(audio_id);