Still polishing the documentation and drafting a release thread, but for the moment, enjoy a little preview of a potentially game-changing development tool. (Almost befitting that this comes just days after Devon's Sonic 1 Mode 1 experiments.)
A while back I made this little hack on smspower View topic - Sonic The Hedgehog SMS Remix (beta version) - Forums - SMS Power! It's main purpose was to basically advertise the fact that Maxim's massively enhanced version of WV's Sonic 1 SMS editor 'STH1EDWV' was an amazing tool and people should try it. As it happened, Slogra's astonishing Sonic Genesis for Master System did a much better job at that, and I quickly forgot about it. I also never released the mini hack here, so without further ado I present: Sonic 1 SMS Remix It's based on the idea that we've all played the game to death, so I tried to make something which encouraged a bit of exploring -all extra lives moved to new locations (including small layout changes to accommodate them) -all chaos emeralds moved to new locations (including small layout changes to accommodate them) -all maps allow backtracking, if you reach the end of a level, it should always be possible to get back to the start if you look around a bit. -and new for this version, that includes disabling the scrolling in Bridge 1 and screen locking/instant death in Jungle 2. It isn't polished, the difficulty is all over the place, it's very lightly tested and it's not winning any awards :-) but it is a functional* hack for Sonic 1 SMS, and I think that's pretty cool. Screenshots are a bit tricky as they'd reveal something hidden and nothing has changed except the hidden stuff. I'll think about it. *subject to testing...
My attempt to improve SMPS-PCM's sample streaming routine using movep unfortunately did not work due to hardware limitations (movep simply copies the data too fast for hardware to handle), but it did produce a usable 68k routine for copying data to an 8-bit peripheral using movep (confirmed as this code worked in GPGX due to that emulator not emulating the waveram behavior correctly): Code (ASM): ; ------------------------------------------------------------------------- ; Subroutine to copy data to an 8-bit peripheral using movep ; Can handle data of any size, and starting at any address ; input: ; a0 = source ; a1 = destination ; d0.w = size of data ; uses d1.l, d4.l, d5.w ; ------------------------------------------------------------------------- CopyTo8Bit: move.l a0,d1 btst #0,d1 ; is start address of data odd? beq.s .even ; branch if not move.b (a0)+,(a1)+ ; copy first byte manually if starting at odd address addq.w #1,a1 ; skip over non-write address subq.w #1,d0 ; minus 1 for 1 byte copied .even: move.w d0,d5 ; if data is not divisible by 8, there will be a remainder of up to 7 bytes lsr.w #3,d0 ; d0 = loops to copy data with 8 bytes per iteration (excluding any remainder) beq.s .less_than_8 ; branch if there are less than 8 bytes total subq.w #1,d0 ; minus 1 for loop counter .copy: move.l (a0)+,d4 ; get 4 bytes of data movep.l d4,0(a1) ; write to destination move.l (a0)+,d4 ; get another 4 bytes movep.l d4,4*2(a1) ; write to destination lea 8*2(a1),a1 ; advance destination address dbf d0,.copy ; repeat for all longwords of data .less_than_8: andi.w #7,d5 ; d5 = remainder if data size was not divisible by 8 beq.s .no_remainder ; branch if there is no remainder cmpi.b #4,d5 bcs.s .less_than_4 ; branch if remainder is less than 4 bytes move.l (a0)+,d4 ; get 4 bytes of data movep.l d4,0(a1) ; copy to destination addq.w #8,a1 ; advance destination address subq.w #4,d5 ; minus 4 bytes from remainder beq.s .no_remainder ; branch if remainder was exactly 4 .less_than_4: subq.w #1,d5 ; minus 1 for loop counter .copy_remainder: move.b (a0)+,(a1)+ ; copy one byte of data addq.w #1,a1 ; skip over non-write addresses dbf d5,.copy_remainder ; loop until remainder is gone .no_remainder: rts