Basic Questions and Answers Thread

Discussion in 'Discussion & Q&A' started by Malevolence, Jul 7, 2009.

  1. Dexetroyer

    Dexetroyer Newcomer Trialist

    Joined:
    Aug 22, 2014
    Messages:
    6
    Location:
    New York, NY
    Clownacy I was actually wondering, Is there anywhere i could see what code was renamed to what? Because I don't seem to find any real tutorial as to how to port the spindash from sonic 2 in sonic 1, for the Github dissassembly anyway...
     
  2. Kaz

    Kaz Well-Known Member Member

    Joined:
    Nov 2, 2013
    Messages:
    66
    When inserting the Clone Driver into S2...


    > > >s2.asm(6112): error: short addressing not allowed
    > > > move.b #$80,(Clone_Driver_RAM+f_stopmusic).w
    > > >s2.asm(6112): error: addressing mode not allowed here
    > > > move.b #$80,(Clone_Driver_RAM+f_stopmusic).w

    Yeah... the line looks really fine when viewed in the disassembly. Nothing unordinary.

    Code:
    SpecialStage_Unpause:
    	move.b  #$80,(Clone_Driver_RAM+f_stopmusic).w
    	move.b	#8,(Vint_routine).w
    	bra.w	WaitForVint
    
     
  3. Clownacy

    Clownacy Retired Staff lolololo Member

    Joined:
    Aug 15, 2014
    Messages:
    1,016
    Wait, there are two people with the same problem? Er, you did define Clone_Driver_RAM, right? Like I said to Pacguy, change .w to a .l. If my understanding's right, you just need to not use short addressing.

    Unfortunately, doing that in the S1 disasms is nowhere near as easy in the S2 and S&K disasms, because of the S1 disasm's total lack of the preservation of historical labels. What I do is have both the Hivebrain and Git disasms, and I compare identifiable and unique code from under the target label against the other disasm.
     
  4. MarkeyJester

    MarkeyJester ♡ ! Member

    Joined:
    Jun 27, 2009
    Messages:
    2,867
    The 68k has an addressing mode that allows the address to be shorterned in size if it meets a certain requirement. Here is a standard instruction as an example:

    move.b #$80,($FFFFC204).lThis will assemble as "13 FC 00 80 FF FF C2 04" and you can see the FFFFC204 in there. Notice the address is FFFFC204, this address can be set as sign-extended. By changing the .l to a .w on the end of that address:

    Code:
    		move.b	#$80,($FFFFC204).w
    This will assemble as "11 FC 00 80 C2 04" which is smaller than the original method, this time however, only C204 is stored away there (the FFFF was removed). This is sign-extension.
    A word value such as C204 is extended by reading it's MSB (Most Significant Bit), in binary C204 is 1100 0010 0000 0100, the MSB is the bit furthest to the left. You'll notice it is a "1", this means it is extended to a long-word filled with 1's: 1111 1111 1111 1111 1100 0010 0000 0100, in hexadecimal this is FFFFC204.

    A word value such as 392F is also extended by reading it's MSB (Most Significant Bit), in binary 392F is 0011 1001 0010 1111, the MSB here is a "0", this means it is extended to a long-word filled with 0's: 0000 0000 0000 0000 0011 1001 0010 1111, in hexadecimal this is 0000392F. To summerise, a value from 0000 to 7FFF is extended to 00000000 to 00007FFF, while a value from 8000 to FFFF is extended to FFFF8000 to FFFFFFFF.

    So, if your address is from 00000000 to 00007FFF, you can use sign-extension .w, if your address is from FFFF8000 to FFFFFFFF, you can also use sign-extension .w, if however your address is none of the above mentioned, for example FFFF5700, then it cannot be set as sign-extended, as 5700 would extend to 00005700 which would be the wrong address.

    Clone_Driver_RAM+f_stopmusic (whatever it is, cannot tell as it's an equate) is not a sign-extendable address.
     
  5. Kaz

    Kaz Well-Known Member Member

    Joined:
    Nov 2, 2013
    Messages:
    66
    I followed the tutorial on your forum post at Retro with the newest GitHub disassembly. Plus I did define Clone_Driver_RAM. Changing the w to an l caused more errors.

    Code:
    > > >s2.asm(283): warning: address is not properly aligned
    > > > 	cmpi.l	#'init',(Checksum_fourcc).w ; has checksum routine already run?
    > > >s2.asm(283): warning: address is not properly aligned
    > > > 	cmpi.l	#'init',(Checksum_fourcc).w ; has checksum routine already run?
    > > >s2.asm(313): warning: address is not properly aligned
    > > > 	move.l	#'init',(Checksum_fourcc).w ; set flag so checksum won't be run again
    > > >s2.asm(3780): warning: address is not properly aligned
    > > > 	move.w	#0,(Demo_mode_flag).w
    > > >s2.asm(3958): warning: address is not properly aligned
    > > > 	move.w	(Demo_number).w,d0
    > > >s2.asm(3963): warning: address is not properly aligned
    > > > 	addq.w	#1,(Demo_number).w
    > > >s2.asm(3964): warning: address is not properly aligned
    > > > 	cmpi.w	#(DemoLevels_End-DemoLevels)/2,(Demo_number).w
    > > >s2.asm(3964): warning: address is not properly aligned
    > > > 	cmpi.w	#(DemoLevels_End-DemoLevels)/2,(Demo_number).w
    > > >s2.asm(3966): warning: address is not properly aligned
    > > > 	move.w	#0,(Demo_number).w
    > > >s2.asm(3968): warning: address is not properly aligned
    > > > 	move.w	#1,(Demo_mode_flag).w
    > > >s2.asm(4115): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w	; test the old flag for the credits demos (now unused)
    > > >s2.asm(4122): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4250): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4364): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4367): warning: address is not properly aligned
    > > > 	move.w	(Ending_demo_number).w,d0
    > > >s2.asm(4379): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4382): warning: address is not properly aligned
    > > > 	cmpi.w	#4,(Ending_demo_number).w
    > > >s2.asm(4382): warning: address is not properly aligned
    > > > 	cmpi.w	#4,(Ending_demo_number).w
    > > >s2.asm(4970): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w	; is demo mode on?
    > > >s2.asm(5031): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(32688): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w	; is debug cheat enabled?
    > > >s2.asm(34495): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w
    > > >s2.asm(34565): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w
    > > >s2.asm(79977): warning: address is not properly aligned
    > > > 	move.w	(Ending_demo_number).w,d0
    > > >s2.asm(82780): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w	; is debug mode on?
    > > >s2.asm(283): warning: address is not properly aligned
    > > > 	cmpi.l	#'init',(Checksum_fourcc).w ; has checksum routine already run?
    > > >s2.asm(283): warning: address is not properly aligned
    > > > 	cmpi.l	#'init',(Checksum_fourcc).w ; has checksum routine already run?
    > > >s2.asm(313): warning: address is not properly aligned
    > > > 	move.l	#'init',(Checksum_fourcc).w ; set flag so checksum won't be run again
    > > >s2.asm(1251): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         tst.b   (Clone_Driver_RAM+v_playsnd1).w
    > > >s2.asm(1251): error: addressing mode not allowed here
    > > >         tst.b   (Clone_Driver_RAM+v_playsnd1).w
    > > >s2.asm(1253): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd1).w
    > > >s2.asm(1253): error: addressing mode not allowed here
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd1).w
    > > >s2.asm(1256): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd4).w
    > > >s2.asm(1256): error: addressing mode not allowed here
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd4).w
    > > >s2.asm(1268): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd2).w
    > > >s2.asm(1268): error: addressing mode not allowed here
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd2).w
    > > >s2.asm(1277): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd3).w
    > > >s2.asm(1277): error: addressing mode not allowed here
    > > >         move.b  d0,(Clone_Driver_RAM+v_playsnd3).w
    > > >s2.asm(1311): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  #1,(Clone_Driver_RAM+f_stopmusic).w     ; pause music
    > > >s2.asm(1311): error: addressing mode not allowed here
    > > >         move.b  #1,(Clone_Driver_RAM+f_stopmusic).w     ; pause music
    > > >s2.asm(1338): error: symbol undefined
    > > > Clone_Driver_RAM
    > > >         move.b  #$80,(Clone_Driver_RAM+f_stopmusic).w   ; unpause music
    > > >s2.asm(1338): error: addressing mode not allowed here
    > > >         move.b  #$80,(Clone_Driver_RAM+f_stopmusic).w   ; unpause music
    > > >s2.asm(1349): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	move.b  #$80,(Clone_Driver_RAM+f_stopmusic).w   ; unpause music
    > > >s2.asm(1349): error: addressing mode not allowed here
    > > > 	move.b  #$80,(Clone_Driver_RAM+f_stopmusic).w   ; unpause music
    > > >s2.asm(3780): warning: address is not properly aligned
    > > > 	move.w	#0,(Demo_mode_flag).w
    > > >s2.asm(3958): warning: address is not properly aligned
    > > > 	move.w	(Demo_number).w,d0
    > > >s2.asm(3963): warning: address is not properly aligned
    > > > 	addq.w	#1,(Demo_number).w
    > > >s2.asm(3964): warning: address is not properly aligned
    > > > 	cmpi.w	#(DemoLevels_End-DemoLevels)/2,(Demo_number).w
    > > >s2.asm(3964): warning: address is not properly aligned
    > > > 	cmpi.w	#(DemoLevels_End-DemoLevels)/2,(Demo_number).w
    > > >s2.asm(3966): warning: address is not properly aligned
    > > > 	move.w	#0,(Demo_number).w
    > > >s2.asm(3968): warning: address is not properly aligned
    > > > 	move.w	#1,(Demo_mode_flag).w
    > > >s2.asm(4115): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w	; test the old flag for the credits demos (now unused)
    > > >s2.asm(4122): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4250): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4364): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4367): warning: address is not properly aligned
    > > > 	move.w	(Ending_demo_number).w,d0
    > > >s2.asm(4379): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(4382): warning: address is not properly aligned
    > > > 	cmpi.w	#4,(Ending_demo_number).w
    > > >s2.asm(4382): warning: address is not properly aligned
    > > > 	cmpi.w	#4,(Ending_demo_number).w
    > > >s2.asm(4970): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w	; is demo mode on?
    > > >s2.asm(5031): warning: address is not properly aligned
    > > > 	tst.w	(Demo_mode_flag).w
    > > >s2.asm(6112): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	move.b  #$80,(Clone_Driver_RAM+f_stopmusic).l
    > > >s2.asm(6112): error: addressing mode not allowed here
    > > > 	move.b  #$80,(Clone_Driver_RAM+f_stopmusic).l
    > > >s2.asm(12804): error: addressing mode not allowed on 68000
    > > > 	move.l	word_A656(pc,d0.w),d1
    > > >s2.asm(12804): error: addressing mode not allowed here
    > > > 	move.l	word_A656(pc,d0.w),d1
    > > >s2.asm(12856): error: addressing mode not allowed on 68000
    > > > 	move.l	word_A766(pc,d0.w),d1
    > > >s2.asm(12856): error: addressing mode not allowed here
    > > > 	move.l	word_A766(pc,d0.w),d1
    > > >s2.asm(32688): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w	; is debug cheat enabled?
    > > >s2.asm(34495): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w
    > > >s2.asm(34565): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w
    > > >s2.asm(51111): error: addressing mode not allowed on 68000
    > > > 	lea	byte_28726(pc,d1.w),a1
    > > >s2.asm(51111): error: addressing mode not allowed here
    > > > 	lea	byte_28726(pc,d1.w),a1
    > > >s2.asm(79977): warning: address is not properly aligned
    > > > 	move.w	(Ending_demo_number).w,d0
    > > >s2.asm(82780): warning: address is not properly aligned
    > > > 	tst.w	(Debug_mode_flag).w	; is debug mode on?
    > > >s1.sounddriver.asm(64): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	lea	(Clone_Driver_RAM&$FFFFFF).l,a6
    > > >s1.sounddriver.asm(64): error: addressing mode not allowed here
    > > > 	lea	(Clone_Driver_RAM&$FFFFFF).l,a6
    > > >s1.sounddriver.asm(1133): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_fm3_track)&$FFFFFF
    > > >s1.sounddriver.asm(1135): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_fm4_track)&$FFFFFF
    > > >s1.sounddriver.asm(1136): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_fm5_track)&$FFFFFF
    > > >s1.sounddriver.asm(1137): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_psg1_track)&$FFFFFF
    > > >s1.sounddriver.asm(1138): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_psg2_track)&$FFFFFF
    > > >s1.sounddriver.asm(1139): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_psg3_track)&$FFFFFF	; Plain PSG3
    > > >s1.sounddriver.asm(1140): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_psg3_track)&$FFFFFF	; Noise
    > > >s1.sounddriver.asm(1144): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_fm3_track)&$FFFFFF
    > > >s1.sounddriver.asm(1146): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_fm4_track)&$FFFFFF
    > > >s1.sounddriver.asm(1147): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_fm5_track)&$FFFFFF
    > > >s1.sounddriver.asm(1148): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_psg1_track)&$FFFFFF
    > > >s1.sounddriver.asm(1149): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_psg2_track)&$FFFFFF
    > > >s1.sounddriver.asm(1150): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_psg3_track)&$FFFFFF	; Plain PSG3
    > > >s1.sounddriver.asm(1151): error: symbol undefined
    > > > Clone_Driver_RAM
    > > > 	dc.l (Clone_Driver_RAM+v_sfx_psg3_track)&$FFFFFF	; Noise
    
    
     
  6. Kaz

    Kaz Well-Known Member Member

    Joined:
    Nov 2, 2013
    Messages:
    66
    Turns out that I didn't define Clone_Driver_RAM. .-.
     
  7. Kaz

    Kaz Well-Known Member Member

    Joined:
    Nov 2, 2013
    Messages:
    66
    Well, constants is very being aggressive about itself because it won't let me reserve $5A0 bytes for Clone_Driver_RAM after freeing up the now unused entries. But success, I got it to work using $500 bytes of RAM instead!
     
  8. Clownacy

    Clownacy Retired Staff lolololo Member

    Joined:
    Aug 15, 2014
    Messages:
    1,016
    Bad. Idea.

    Come on, didn't you read the guide? You need to free up that RAM; The reason you can't get an additional $A0 bytes of RAM is because there isn't $A0 bytes of RAM available. You need to get Underwater_palette and Underwater_palette_2, and move them somewhere where there's unused RAM so that you can use the space that they occupied. There's a not-so-good way here. Better ways exist, but I'm not writing a guide for that.

    Now, because you've given a driver that needs $5A0 bytes only $500, your RAM will be overwritten by a flood of data from the Clone Driver v2's RAM. It needs that $A0 for its extra life sound backup function, and without it your hack will be broken.
     
    Last edited by a moderator: Aug 28, 2014
  9. warr1or2

    warr1or2 I AM CLG Member

    Joined:
    Apr 7, 2008
    Messages:
    416
    Location:
    Town Creek, AL
    using S1smpsTOasm to asm up Music8A (title screen music), then change from incbin Music8A.bin to include Music8A.asm, all I hear from it is just it's DAC & nothing else (just this one). what's the deal? this happens to only Music8A so far.

    EDIT: Nevermind, when asked "Voices Unexploded" I pushed "n" and this messed it up, whereas pushing "y" worked well
     
    Last edited by a moderator: Aug 30, 2014
  10. Stardust Gear

    Stardust Gear A Programmer Member

    Joined:
    Apr 27, 2014
    Messages:
    134
    I request some Sonic 3 SMPSes that didn't port successfully to Sonic 1.

    I use Ralakimus' tutorial to port Sonic 3 songs so do that:

    Add $0B to the DAC and $09 to the PSG instruments.

    Do not convert the tempo from S3K to S1.

    Songs Needed: Hydrocity Zone Act 2, Lava Reef Zone, Both Acts.
     
  11. ThomasThePencil

    ThomasThePencil resident psycho Member

    Joined:
    Jan 29, 2013
    Messages:
    910
    Location:
    the united states. where else?
    ...hold on a minute, I thought you were using the S3K/flamewing driver. :U

    Anyway, I'm still annoyed by the fact that you are blatantly asking for things without really attempting to port over the required things from S3K. Both acts of Lava Reef, and I'm guessing a few other songs as well, use the Universal Voice Bank from S3K. I wouldn't really consider it a difficult task, seeing as you already have all the variables in place... >__>
     
  12. Lone Devil

    Lone Devil Internet War Veteran Member

    Joined:
    Dec 29, 2010
    Messages:
    186
    Location:
    Dallas Texas
    Self explanatory. GHZ3 Obj3D

    [​IMG]

    EDIT:

    Trash this, I overlooked $2A60.

    EDIT 2:

    Better yet, on a side note, where can I find the animation for Obj4B/Ball?

    since it's 2 only frames.
     
    Last edited by a moderator: Aug 31, 2014
  13. Clownacy

    Clownacy Retired Staff lolololo Member

    Joined:
    Aug 15, 2014
    Messages:
    1,016
    Obj48, if that's what you're talking about, doesn't appear to use your usual animation system. It just toggles its obFrame(a0) using bchg. It's a nice optimisation that I often employ, myself. You can find the instruction in question under sub_17C2A, this one affect the toggling red/blue lights directly under Eggman. A similar thing occurs at Obj48_ChkVanish, though it seems to use some strange alternative that I really don't get: you could use bchg #0,$1A(a0) with seemingly no ill effects, and instead a multi-instruction implementation is used. This one affects the actual ball.

    EDIT: If you want to implement the real animation system, do the following:

    Go to Obj48_ChkVanish and comment out the first five instructions, along with the now-useless label. This handled the old hardcoded animation, which we're replacing.

    Under Obj48_Display4, paste this, the code that handles the animation script:


                    lea     Ani_GHZBall(pc),a1      ; load animation script's address into a1
                    jsr     AnimateSprite           ; process animation script
    And after the jmp, paste this, the script itself:


    Ani_GHZBall:    dc.w @ani-Ani_GHZBall

    @ani:           dc.b $FF, 0, 1, $FF
                    even
    I'm sure you can navigate and modify the script yourself.
     
    Last edited by a moderator: Aug 31, 2014
  14. Pokepunch

    Pokepunch That guy who posts on occasion Member

    Joined:
    Aug 7, 2009
    Messages:
    270
    Location:
    UK
    Where can I find the mappings for the results screen?

    [​IMG]

    I wanted to change and optimize the art here but i can't seem to find the right mappings. I thought it would be Obj3A which is the results screen object but apparently not. 
     
  15. MainMemory

    MainMemory Well-Known Member Member

    Joined:
    Mar 29, 2011
    Messages:
    922
    The mappings for Obj3A are unreadable by SonMapEd (or anything else), because they contain backwards references to the title card mappings, as they share the act numbers and "ZONE" text. SonMapEd stops processing the mappings at the first of these. In order to edit them you will have to add in the frames from the title card mappings, the easiest way to do so is to take the ASM mappings from the GitHub disassembly's s2.asm, the results mappings are at Obj3A_MapUnc_14CBC and the title card mappings are at Obj34_MapUnc_147BA. You'll need to copy the entire mappings for the results, and the four frames word_14BC8, word_14BEA, word_14BF4 and word_14BFE from the title card into a new file, then you can use MappingsConverter to convert it into a binary file which you can use to replace obj3A.bin.

    Also, you'll need a VRAM dump of the results screen to use as the art file in SonMapEd.
     
    Last edited by a moderator: Aug 31, 2014
  16. EasterBanana

    EasterBanana Newcomer Trialist

    Joined:
    Jul 22, 2014
    Messages:
    9
    Location:
    In the R of SSRG.
    I'd like to change the title screen. I already know how to change the background of the title screen but I want to change the Sonic The Hedgehog logo with another logo (possibly an image). What software should I use?
     
  17. TheStoneBanana

    TheStoneBanana banana Member

    Joined:
    Nov 27, 2013
    Messages:
    602
    Location:
    The Milky Way Galaxy
    You can use a mixture of SonMapEd and PlaneED to do that.

    Use SonMapEd to import your tiles and PlaneED to arrange them.

    Good luck! :)
     
  18. Pokepunch

    Pokepunch That guy who posts on occasion Member

    Joined:
    Aug 7, 2009
    Messages:
    270
    Location:
    UK
    The mappings work but i'm having an issue when dumping the VRAM using Regen:

    [​IMG]

    How would you recommend I dump the VRAM? 
     
  19. redhotsonic

    redhotsonic Also known as RHS Member

    Joined:
    Aug 10, 2007
    Messages:
    2,969
    Location:
    England
    Don't use Regen for dumping VRAM. Regen unfortunately has a bug with the dumping. The exact same bug with SRAM. It swaps the odd and even byte around. Hence why the art looks "fuzzy". God knows why it does this.


    Remember, Regen is one of the best emulators to use for playing games/hacks as it's real close to real hardware. Although it's not great for debugging.


    I use debugens for debugging/dumping. That's purely the only reason why I have that emulator.
     
    Last edited by a moderator: Aug 31, 2014
  20. OrdosAlpha

    OrdosAlpha RIGHT! Naebody move! Root Admin

    Joined:
    Aug 5, 2007
    Messages:
    1,793
    Location:
    Glasgow, Scotland
    Regen dumps are byte swapped, and this is easily fixable. Open up the dump file in any hex editor, then find and use the byte flip option. Save the file.