News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release  (Read 27613 times)

Time/SpaceMage

  • Jr. Member
  • **
  • Posts: 25
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #100 on: September 02, 2018, 11:19:14 am »
Actually, it turns out that the information about 25% resistance could very well be incorrect. I just saw another guide here that I've been testing and finding to be more accurate here: http://mikesrpgcenter.com/arcana/attributes.html

No attribute takes 100% from all. Same attributes are 80%, advantages are 160%/40%, and opposite attributes are 120%

Opposite attributes are Wind/Water and Fire/Earth, so for example
Spoiler:
Changing Attribute to Wind against Darah will have you doing 120% damage to him, but only take 80% from his newly found Lightning 2 spell (or only 40% from his Smash 1 spell if you're playing the original), but you wouldn't want to do that before defeating Barah as he can get a lucky critical and potentially end your game.

I first noticed this when I was able to one shot a Gurgeon/Chimera as a none attribute, but could no longer do so after matching its attribute.

That's a really interesting find. So if 80% damage is "normal" to spirits, resistance is 0.5x, opposites are 1.5x and weaknesses are 2x. I wonder how these multipliers are implemented bitwise? Oh, and any idea how damage is done when multiple elements are involved? I get the feeling damage is lower than it should be. Also, he lists Rimsala as having all elements but her data says she's elementless. Maybe the fight would be more interesting if she was 0F instead of 00... Just realized nobody actually learns Revitalize (heals Paralysis) either. I thought Sylph would have it?

If I ever make a second quest, it is totally going to go full-on parody for misread Japanese and so on  :laugh: Join Looks and his rare blue Sylph on their adventure to stop Gallon from reviving the evil Rimless in the tower of Rim-seala  :D


TheSiege

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #101 on: September 05, 2018, 11:14:23 pm »
From what I understand, Rimsalia herself has a special attribute that has her take extra damage from the sword you're using.

I don't think anyone in your group ever gets paralyzed. Petrify seems to exist for story purposes only. The only thing left is sleep. This means that tents don't do everything they're advertised to do.
One funny side effect of this is that it's possible to get the unpetrify spell for rooks after he's already cast it.

Join Luke and Sarah as they slay a cloud with his trusty buster sword.

PersianImm0rtal

  • Jr. Member
  • **
  • Posts: 20
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #102 on: February 05, 2019, 02:51:59 pm »
Any new developmentts lately?

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #103 on: February 06, 2019, 10:06:36 am »
Yep! Last night I found where the dungeon music IDs are stored. There's a separate byte for each floor of every dungeon, and on a side note I also found the code that checks whether Darwin is in your party so it plays his theme instead :3

...Oh I forgot I was gonna start with the same av. This is Time/SpaceMage on my new account~☆
« Last Edit: February 07, 2019, 11:19:25 am by Sarah Shinespark »

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #104 on: March 17, 2019, 03:07:57 pm »
Okay, so the big graphics issue is not on Geiger's Debugger, but IS on Snes9x 1.51 (which it's based on) :huh:, and the bug is exactly the same on multiple later versions including 1.59.2. Also, no$sns has a similar bug but in a different area. I read through the changelog for the Debugger and didn't see anything jump out at me, but looking deeper into that is probably going to involve comparing 9yo source code. I usually stop to reevaluate my options before doing a depth-first search, so I'll go over it here.

Here's what the bug looks like (1) after entering the Chapter 2 area and (2) halfway through turning.


Opening and closing the map redraws the center area, but leaves a line at the bottom. I tried switching characters and the corruption is on a different BG layer (BG2), so Rooks' face is just covered up and definitely not eight eaten by Missingno.


Finishing a battle fully redraws the screen, but then opening and closing the map again leaves a line at the bottom! Other than that, the bug is gone until you leave and re-enter the start of the area again.


Also for comparison, here's what it looks like in no$sns:



Annnd the issues in nocash are coming from the FastROM patch. Well isn't that nice? The code written by rainponcho who isn't here any more is still haunting me... any ideas where I should look?


Also on a separate topic, I'm going through the code for loading an item's health value. Now finding it was no issue, but I've been seeing an awful lot of the sub $C88B and I want to figure out wth it's doing!

Code: [Select]
**Load 2-byte health of Silver Flask (15) from ROM
$00/9B09 A7 10       LDA [$10]  [$05:F234]   A:0001 X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:eNvmxdIzc HC:1304 VC:256 FC:56 I:00
$00/9B0B E6 10       INC $10    [$00:1E10]   A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:envmxdIzc HC:1368 VC:256 FC:56 I:00
$00/9B0D 6B          RTL                     A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:eNvmxdIzc HC:0066 VC:257 FC:56 I:00


**Save our value in $00
$87/BC46 85 00       STA $00    [$00:1E00]   A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF3 P:eNvmxdIzc HC:0116 VC:257 FC:56 I:00
$87/BC48 22 F8 9A 00 JSL $009AF8[$00:9AF8]   A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF3 P:eNvmxdIzc HC:0150 VC:257 FC:56 I:00

**Load whatever's the next byte after that
$00/9AF8 E6 10       INC $10    [$00:1E10]   A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:eNvmxdIzc HC:0206 VC:257 FC:56 I:00
$00/9AFA A7 10       LDA [$10]  [$05:F236]   A:000F X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:eNvmxdIzc HC:0292 VC:257 FC:56 I:00
$00/9AFC 29 FF 00    AND #$00FF              A:070C X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:envmxdIzc HC:0356 VC:257 FC:56 I:00
$00/9AFF 6B          RTL                     A:000C X:0022 Y:F230 D:1E00 DB:80 S:1FF0 P:envmxdIzc HC:0388 VC:257 FC:56 I:00

**Put my bytes "000F" in A and the next 1 byte in X
$87/BC4C AA          TAX                     A:000C X:0022 Y:F230 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0438 VC:257 FC:56 I:00
$87/BC4D 5C AE C2 00 JMP $00C2AE[$00:C2AE]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0456 VC:257 FC:56 I:00
$00/C2AE A5 00       LDA $00    [$00:1E00]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0488 VC:257 FC:56 I:00
$00/C2B0 20 A1 C8    JSR $C8A1  [$00:C8A1]   A:000F X:000C Y:F230 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0528 VC:257 FC:56 I:00


$00/C8A1 85 22       STA $22    [$00:1E22]   A:000F X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:0622 VC:257 FC:56 I:00
$00/C8A3 20 8B C8    JSR $C88B  [$00:C88B]   A:000F X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:0662 VC:257 FC:56 I:00


**Okay so here $C88B puts A&X in one byte then multiplies by X... and returns the low byte.
**(256*A + X) * X mod 256
**Does this look like a familiar function to anyone, maybe floating point math?
$00/C88B 29 FF 00    AND #$00FF              A:000F X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0716 VC:257 FC:56 I:00
$00/C88E EB          XBA                     A:000F X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0748 VC:257 FC:56 I:00
$00/C88F 85 20       STA $20    [$00:1E20]   A:0F00 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:0776 VC:257 FC:56 I:00
$00/C891 8A          TXA                     A:0F00 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:0816 VC:257 FC:56 I:00
$00/C892 29 FF 00    AND #$00FF              A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0838 VC:257 FC:56 I:00
$00/C895 05 20       ORA $20    [$00:1E20]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0870 VC:257 FC:56 I:00
$00/C897 8D 02 42    STA $4202  [$80:4202]   A:0F0C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0910 VC:257 FC:56 I:00
$00/C89A EA          NOP                     A:0F0C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0954 VC:257 FC:56 I:00
$00/C89B EA          NOP                     A:0F0C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0976 VC:257 FC:56 I:00
$00/C89C EA          NOP                     A:0F0C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0998 VC:257 FC:56 I:00
$00/C89D AD 16 42    LDA $4216  [$80:4216]   A:0F0C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:1020 VC:257 FC:56 I:00
$00/C8A0 60          RTS                     A:00B4 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:1064 VC:257 FC:56 I:00

** Ok so it saves that result (the low byte of the multiplication) in $24 and then switches to the 2nd byte (00) and repeats C88B...
$00/C8A6 85 24       STA $24    [$00:1E24]   A:00B4 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:1114 VC:257 FC:56 I:00
$00/C8A8 A5 22       LDA $22    [$00:1E22]   A:00B4 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:1154 VC:257 FC:56 I:00
$00/C8AA EB          XBA                     A:000F X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:1194 VC:257 FC:56 I:00
$00/C8AB 20 8B C8    JSR $C88B  [$00:C88B]   A:0F00 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:1222 VC:257 FC:56 I:00


$00/C88B 29 FF 00    AND #$00FF              A:0F00 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:1276 VC:257 FC:56 I:00
$00/C88E EB          XBA                     A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:1308 VC:257 FC:56 I:00
$00/C88F 85 20       STA $20    [$00:1E20]   A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:1336 VC:257 FC:56 I:00
$00/C891 8A          TXA                     A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:0012 VC:258 FC:56 I:00
$00/C892 29 FF 00    AND #$00FF              A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0034 VC:258 FC:56 I:00
$00/C895 05 20       ORA $20    [$00:1E20]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0066 VC:258 FC:56 I:00
$00/C897 8D 02 42    STA $4202  [$80:4202]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0106 VC:258 FC:56 I:00
$00/C89A EA          NOP                     A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0150 VC:258 FC:56 I:00
$00/C89B EA          NOP                     A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0172 VC:258 FC:56 I:00
$00/C89C EA          NOP                     A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0194 VC:258 FC:56 I:00
$00/C89D AD 16 42    LDA $4216  [$80:4216]   A:000C X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIzc HC:0216 VC:258 FC:56 I:00
$00/C8A0 60          RTS                     A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FEF P:envmxdIZc HC:0260 VC:258 FC:56 I:00

** And then it adds those two together. At first I thought it was finding the low byte and the high byte in 2 separate calls,
but no it's just throwing out the high byte in both. What?
$00/C8AE 85 22       STA $22    [$00:1E22]   A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0310 VC:258 FC:56 I:00
$00/C8B0 29 00 FF    AND #$FF00              A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0350 VC:258 FC:56 I:00
$00/C8B3 EB          XBA                     A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0382 VC:258 FC:56 I:00
$00/C8B4 AA          TAX                     A:0000 X:000C Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0410 VC:258 FC:56 I:00
$00/C8B5 A5 22       LDA $22    [$00:1E22]   A:0000 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0432 VC:258 FC:56 I:00
$00/C8B7 29 FF 00    AND #$00FF              A:0000 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0472 VC:258 FC:56 I:00
$00/C8BA EB          XBA                     A:0000 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0504 VC:258 FC:56 I:00
$00/C8BB 18          CLC                     A:0000 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0532 VC:258 FC:56 I:00
$00/C8BC 65 24       ADC $24    [$00:1E24]   A:0000 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIZc HC:0594 VC:258 FC:56 I:00
$00/C8BE 90 01       BCC $01    [$C8C1]      A:00B4 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:0634 VC:258 FC:56 I:00
$00/C8C1 60          RTS                     A:00B4 X:0000 Y:F230 D:1E00 DB:80 S:1FF1 P:envmxdIzc HC:0664 VC:258 FC:56 I:00

And after this it... does something with A and X, then loops eleven times doing a bunch of shift operations and EORs to make
a very large number that it doesn't seem to use.
What??

Oh, and sometimes healing items will be 1 off what their value states.
« Last Edit: March 17, 2019, 06:41:59 pm by Sarah Shinespark »

justin3009

  • Hero Member
  • *****
  • Posts: 1603
  • Welp
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #105 on: March 17, 2019, 08:58:46 pm »
I'm slightly confused by the code here.

I assume the FastROM patch is on that already, but why is it jumping back to $00 instead of $80 like it normally would for FastROM? Seems like it missed some JMPs/JSL's and stuff along the way.

I would assume the healing being 1 digit off is due to a CLC missing somewhere but I'm not sure. Seems like some very strange oddities.
'We have to find some way to incorporate the general civilians in the plot.'

'We'll kill off children in the Juuban district with an infection where they cough up blood and are found hanging themselves from cherry blossom trees.'

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #106 on: March 17, 2019, 11:21:53 pm »
I assume the FastROM patch is on that already, but why is it jumping back to $00 instead of $80 like it normally would for FastROM? Seems like it missed some JMPs/JSL's and stuff along the way.

I would assume the healing being 1 digit off is due to a CLC missing somewhere but I'm not sure. Seems like some very strange oddities.
Yeah, it didn't catch everything. I'll see about manually fixing some of them while I'm going through trace logs. Not sure I should be touching this, but the PLB is what's changing the bank for awhile. I'd NOP it but I assume I'd have to find a corresponding PHB to avoid a potential stack overflow. Thoughts?
Code: [Select]
$80/88ED AD 20 00    LDA $0020  [$80:0020]   A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FED P:envMxdIZC HC:1308 VC:224 FC:15 I:00
$80/88F0 F0 FB       BEQ $FB    [$88ED]      A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FED P:envMxdIZC HC:1340 VC:224 FC:15 I:00
$80/88ED AD 20 00    LDA $0020  [$80:0020]   A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FED P:envMxdIZC HC:1364 VC:224 FC:15 I:00
$00/8335 C2 30       REP #$30                A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE9 P:envMxdIZC HC:0094 VC:225 FC:15 I:00
$00/8337 48          PHA                     A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE9 P:envmxdIZC HC:0124 VC:225 FC:15 I:00
$00/8338 DA          PHX                     A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE7 P:envmxdIZC HC:0162 VC:225 FC:15 I:00
$00/8339 5A          PHY                     A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE5 P:envmxdIZC HC:0200 VC:225 FC:15 I:00
$00/833A 0B          PHD                     A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE3 P:envmxdIZC HC:0238 VC:225 FC:15 I:00
$00/833B F4 00 00    PEA $0000               A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FE1 P:envmxdIZC HC:0276 VC:225 FC:15 I:00
$00/833E 2B          PLD                     A:FF00 X:0028 Y:0009 D:1E00 DB:80 S:1FDF P:envmxdIZC HC:0324 VC:225 FC:15 I:00
$00/833F 8B          PHB                     A:FF00 X:0028 Y:0009 D:0000 DB:80 S:1FE1 P:envmxdIZC HC:0368 VC:225 FC:15 I:00
$00/8340 4B          PHK                     A:FF00 X:0028 Y:0009 D:0000 DB:80 S:1FE0 P:envmxdIZC HC:0398 VC:225 FC:15 I:00
$00/8341 AB          PLB                     A:FF00 X:0028 Y:0009 D:0000 DB:80 S:1FDF P:envmxdIZC HC:0428 VC:225 FC:15 I:00
$00/8342 E2 20       SEP #$20                A:FF00 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envmxdIZC HC:0464 VC:225 FC:15 I:00
$00/8344 AD 10 42    LDA $4210  [$00:4210]   A:FF00 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envMxdIZC HC:0494 VC:225 FC:15 I:00
$00/8347 E6 20       INC $20    [$00:0020]   A:FFC2 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:eNvMxdIzC HC:0532 VC:225 FC:15 I:00
$00/8349 C2 20       REP #$20                A:FFC2 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envMxdIzC HC:0618 VC:225 FC:15 I:00
$00/834B AD 55 10    LDA $1055  [$00:1055]   A:FFC2 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envmxdIzC HC:0648 VC:225 FC:15 I:00
$00/834E D0 03       BNE $03    [$8353]      A:0000 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envmxdIZC HC:0696 VC:225 FC:15 I:00
$00/8350 20 79 83    JSR $8379  [$00:8379]   A:0000 X:0028 Y:0009 D:0000 DB:00 S:1FE0 P:envmxdIZC HC:0720 VC:225 FC:15 I:00


There wouldn't be an Add Without Carry, would there... did a quick search through the instruction set but could've missed it if it didn't mention adding.

Oh, and look at this wonderful shit I found! Every battle stat being loaded into RAM  :woot!:
Also, I can edit: item heal amounts, honey stat boosts, bartender food heal amounts, and soon thanks to this code I'll have more comprehensive monster stats available! #ADHDforlife
Code: [Select]
$82/9147 BF 2D C9 85 LDA $85C92D,x[$85:C969] A:0008 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0814 VC:089 FC:27 I:00
$82/914B 99 0B 12    STA $120B,y[$80:1213]   A:0000 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIZc HC:0856 VC:089 FC:27 I:00
$82/914E BF CD C9 85 LDA $85C9CD,x[$85:CA09] A:0000 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIZc HC:0902 VC:089 FC:27 I:00
$82/9152 99 23 12    STA $1223,y[$80:122B]   A:0060 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0944 VC:089 FC:27 I:00
$82/9155 BF 95 CA 85 LDA $85CA95,x[$85:CAD1] A:0060 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0990 VC:089 FC:27 I:00
$82/9159 99 3B 12    STA $123B,y[$80:1243]   A:0050 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1032 VC:089 FC:27 I:00
$82/915C BF 35 CB 85 LDA $85CB35,x[$85:CB71] A:0050 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1078 VC:089 FC:27 I:00
$82/9160 99 53 12    STA $1253,y[$80:125B]   A:0096 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1154 VC:089 FC:27 I:00
$82/9163 BF D5 CB 85 LDA $85CBD5,x[$85:CC11] A:0096 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1200 VC:089 FC:27 I:00
$82/9167 99 6B 12    STA $126B,y[$80:1273]   A:0006 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1242 VC:089 FC:27 I:00
$82/916A BF 75 CC 85 LDA $85CC75,x[$85:CCB1] A:0006 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1288 VC:089 FC:27 I:00
$82/916E 99 83 12    STA $1283,y[$80:128B]   A:00A6 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:1330 VC:089 FC:27 I:00
$82/9171 BF 15 CD 85 LDA $85CD15,x[$85:CD51] A:00A6 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0012 VC:090 FC:27 I:00
$82/9175 99 9B 12    STA $129B,y[$80:12A3]   A:0002 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0054 VC:090 FC:27 I:00
$82/9178 BF B5 CD 85 LDA $85CDB5,x[$85:CDF1] A:0002 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0100 VC:090 FC:27 I:00
$82/917C 99 B3 12    STA $12B3,y[$80:12BB]   A:0009 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0142 VC:090 FC:27 I:00
$82/917F BF 35 D0 85 LDA $85D035,x[$85:D071] A:0009 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0188 VC:090 FC:27 I:00
$82/9183 99 7B 13    STA $137B,y[$80:1383]   A:0004 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0230 VC:090 FC:27 I:00
$82/9186 BF F5 CE 85 LDA $85CEF5,x[$85:CF31] A:0004 X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0276 VC:090 FC:27 I:00
$82/918A 99 63 13    STA $1363,y[$80:136B]   A:000F X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0318 VC:090 FC:27 I:00
$82/918D BF 55 CE 85 LDA $85CE55,x[$85:CE91] A:000F X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0364 VC:090 FC:27 I:00
$82/9191 99 F3 12    STA $12F3,y[$80:12FB]   A:001C X:003C Y:0008 D:1E00 DB:80 S:1FF3 P:envmxdIzc HC:0412 VC:090 FC:27 I:00
« Last Edit: March 17, 2019, 11:31:23 pm by Sarah Shinespark »

rookwield

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #107 on: March 20, 2019, 12:54:22 pm »
I think you're doing an above-remarkable job, giving this game some fan service! Waiting for a release.


Checked the rainponcho fastrom patch on rhdn and encountered the garbage bug when leaving map view. A lot of guessing later, I found this one:
Code: [Select]
$80/882E 5C 2C FC 9F JMP $9FFC2C[$9F:FC2C]   A:8080 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:0996 VC:003 FC:25 I:00


$9F/FC2C C2 20       REP #$20                A:8080 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:1032 VC:003 FC:25 I:00
$9F/FC2E 8A          TXA                     A:8080 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envmxdIZC HC:1062 VC:003 FC:25 I:00
$9F/FC2F BB          TYX                     A:80E7 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1086 VC:003 FC:25 I:00
$9F/FC30 A8          TAY                     A:80E7 X:80A7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1110 VC:003 FC:25 I:00
$9F/FC31 8B          PHB                     A:80E7 X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1168 VC:003 FC:25 I:00
$9F/FC32 8B          PHB                     A:80E7 X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE4 P:eNvmxdIzC HC:1200 VC:003 FC:25 I:00
$9F/FC33 68          PLA                     A:80E7 X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE3 P:eNvmxdIzC HC:1232 VC:003 FC:25 I:00
$9F/FC34 C9 7F 7F    CMP #$7F7F              A:7E7E X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:1278 VC:003 FC:25 I:00
$9F/FC37 F0 08       BEQ $08    [$FC41]      A:7E7E X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzc HC:1308 VC:003 FC:25 I:00
$9F/FC39 A5 03       LDA $03    [$00:1DFB]   A:7E7E X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzc HC:1332 VC:003 FC:25 I:00
$9F/FC3B 3A          DEC A                   A:0007 X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0014 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0006 X:80A7 Y:80E7 D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0038 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0005 X:80A8 Y:80E8 D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0096 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0004 X:80A9 Y:80E9 D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0154 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0003 X:80AA Y:80EA D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0212 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0002 X:80AB Y:80EB D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0270 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0001 X:80AC Y:80EC D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0328 VC:004 FC:25 I:00
$9F/FC3C 54 7E 7E    MVN 7E 7E               A:0000 X:80AD Y:80ED D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0386 VC:004 FC:25 I:00
$9F/FC3F 80 06       BRA $06    [$FC47]      A:FFFF X:80AE Y:80EE D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0444 VC:004 FC:25 I:00
$9F/FC47 BB          TYX                     A:FFFF X:80AE Y:80EE D:1DF8 DB:7E S:1FE5 P:envmxdIzc HC:0474 VC:004 FC:25 I:00
$9F/FC48 E2 20       SEP #$20                A:FFFF X:80EE Y:80EE D:1DF8 DB:7E S:1FE5 P:eNvmxdIzc HC:0498 VC:004 FC:25 I:00
$9F/FC4A 7A          PLY                     A:FFFF X:80EE Y:80EE D:1DF8 DB:7E S:1FE5 P:eNvMxdIzc HC:0528 VC:004 FC:25 I:00
$9F/FC4B 5C 7C 87 80 JMP $80877C[$80:877C]   A:FFFF X:80EE Y:006B D:1DF8 DB:7E S:1FE7 P:envMxdIzc HC:0614 VC:004 FC:25 I:00

which put back old code becomes this

Code: [Select]
$80/882E B9 00 00    LDA $0000,y[$7E:80A7]   A:8080 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:0986 VC:003 FC:44 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80E7]   A:804A X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1030 VC:003 FC:44 I:00


$80/882E B9 00 00    LDA $0000,y[$7E:80A7]   A:8080 X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:0972 VC:003 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80E7]   A:804A X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1016 VC:003 FC:59 I:00
$80/8834 C8          INY                     A:804A X:80E7 Y:80A7 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1060 VC:003 FC:59 I:00
$80/8835 E8          INX                     A:804A X:80E7 Y:80A8 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1084 VC:003 FC:59 I:00
$80/8836 C2 20       REP #$20                A:804A X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1108 VC:003 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:804A X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1172 VC:003 FC:59 I:00
$80/883A E2 20       SEP #$20                A:804A X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:1240 VC:003 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:804A X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1270 VC:003 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80A8]   A:804A X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1300 VC:003 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80E8]   A:80FF X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1344 VC:003 FC:59 I:00
$80/8834 C8          INY                     A:80FF X:80E8 Y:80A8 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0024 VC:004 FC:59 I:00
$80/8835 E8          INX                     A:80FF X:80E8 Y:80A9 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0048 VC:004 FC:59 I:00
$80/8836 C2 20       REP #$20                A:80FF X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0072 VC:004 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:80FF X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:0102 VC:004 FC:59 I:00
$80/883A E2 20       SEP #$20                A:80FF X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:0170 VC:004 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:80FF X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0200 VC:004 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80A9]   A:80FF X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0230 VC:004 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80E9]   A:8008 X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0274 VC:004 FC:59 I:00
$80/8834 C8          INY                     A:8008 X:80E9 Y:80A9 D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0318 VC:004 FC:59 I:00
$80/8835 E8          INX                     A:8008 X:80E9 Y:80AA D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0342 VC:004 FC:59 I:00
$80/8836 C2 20       REP #$20                A:8008 X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0366 VC:004 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:8008 X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:0396 VC:004 FC:59 I:00
$80/883A E2 20       SEP #$20                A:8008 X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:0464 VC:004 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:8008 X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0494 VC:004 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80AA]   A:8008 X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0524 VC:004 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80EA]   A:80FF X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0608 VC:004 FC:59 I:00
$80/8834 C8          INY                     A:80FF X:80EA Y:80AA D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0652 VC:004 FC:59 I:00
$80/8835 E8          INX                     A:80FF X:80EA Y:80AB D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0676 VC:004 FC:59 I:00
$80/8836 C2 20       REP #$20                A:80FF X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0700 VC:004 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:80FF X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:0730 VC:004 FC:59 I:00
$80/883A E2 20       SEP #$20                A:80FF X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:0798 VC:004 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:80FF X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0828 VC:004 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80AB]   A:80FF X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0858 VC:004 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80EB]   A:8008 X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0902 VC:004 FC:59 I:00
$80/8834 C8          INY                     A:8008 X:80EB Y:80AB D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0946 VC:004 FC:59 I:00
$80/8835 E8          INX                     A:8008 X:80EB Y:80AC D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0970 VC:004 FC:59 I:00
$80/8836 C2 20       REP #$20                A:8008 X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0994 VC:004 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:8008 X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1024 VC:004 FC:59 I:00
$80/883A E2 20       SEP #$20                A:8008 X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:1092 VC:004 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:8008 X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1156 VC:004 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80AC]   A:8008 X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:1186 VC:004 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80EC]   A:80FF X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1230 VC:004 FC:59 I:00
$80/8834 C8          INY                     A:80FF X:80EC Y:80AC D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1274 VC:004 FC:59 I:00
$80/8835 E8          INX                     A:80FF X:80EC Y:80AD D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1298 VC:004 FC:59 I:00
$80/8836 C2 20       REP #$20                A:80FF X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:1322 VC:004 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:80FF X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:1352 VC:004 FC:59 I:00
$80/883A E2 20       SEP #$20                A:80FF X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:envmxdIzC HC:0056 VC:005 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:80FF X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0086 VC:005 FC:59 I:00
$80/882E B9 00 00    LDA $0000,y[$7E:80AD]   A:80FF X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0116 VC:005 FC:59 I:00
$80/8831 9D 00 00    STA $0000,x[$7E:80ED]   A:8008 X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0160 VC:005 FC:59 I:00
$80/8834 C8          INY                     A:8008 X:80ED Y:80AD D:1DF8 DB:7E S:1FE5 P:envMxdIzC HC:0204 VC:005 FC:59 I:00
$80/8835 E8          INX                     A:8008 X:80ED Y:80AE D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0228 VC:005 FC:59 I:00
$80/8836 C2 20       REP #$20                A:8008 X:80EE Y:80AE D:1DF8 DB:7E S:1FE5 P:eNvMxdIzC HC:0252 VC:005 FC:59 I:00
$80/8838 C6 03       DEC $03    [$00:1DFB]   A:8008 X:80EE Y:80AE D:1DF8 DB:7E S:1FE5 P:eNvmxdIzC HC:0282 VC:005 FC:59 I:00
$80/883A E2 20       SEP #$20                A:8008 X:80EE Y:80AE D:1DF8 DB:7E S:1FE5 P:envmxdIZC HC:0350 VC:005 FC:59 I:00
$80/883C D0 F0       BNE $F0    [$882E]      A:8008 X:80EE Y:80AE D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:0380 VC:005 FC:59 I:00
$80/883E 7A          PLY                     A:8008 X:80EE Y:80AE D:1DF8 DB:7E S:1FE5 P:envMxdIZC HC:0404 VC:005 FC:59 I:00
$80/883F 4C 7C 87    JMP $877C  [$80:877C]   A:8008 X:80EE Y:006B D:1DF8 DB:7E S:1FE7 P:envMxdIzC HC:0450 VC:005 FC:59 I:00
$80/877C B7 00       LDA [$00],y[$90:D361]   A:8008 X:80EE Y:006B D:1DF8 DB:7E S:1FE7 P:envMxdIzC HC:0504 VC:005 FC:59 I:00

and my dungeon view is cured of whatever sickness was blinding the player. Haven't seen anything in Chapter 1/2 yet.

I guess someone tried to be too clever with asm tweak and botched something?
« Last Edit: March 20, 2019, 05:04:12 pm by rookwield »

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #108 on: March 21, 2019, 06:57:16 pm »
What the... he added a DMA transfer? Yeah that would probably do it. I'm not entirely sure what that code does, but I'm guessing it was initializing RAM. Well if the fix works, that's a wrap! I'll edit the IPS and upload the fix later tonight during one of my class breaks. You're awesome! That was the one part of the patch I hadn't tried getting rid of  :laugh:

EDIT: Which emulator are you using? This cleared up in no$sns, but it's still there in Snes9x 1.59.2. However, it's completely cleared after opening the map now, which is much more acceptable!
« Last Edit: March 21, 2019, 08:53:25 pm by Sarah Shinespark »

rookwield

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #109 on: March 21, 2019, 07:27:06 pm »
Yeah, he played around with dma transfers during active -hdma transfers-. That could be a murderous hazard for your family. Otherwise I saw some loop unrolls. But to his credit, he did pull off some decent speed.

That above code looks like a plain memory copy. Pretty harmless I thought. Except the upper 8-bits of A register gets trashed. That could be a big oops! if the game was hoarding onto that value for later.

I hope that's the only one, because that was a pitb to locate! :)


edit: Using Geiger debugger 1.51. I'll try to track down the others.
« Last Edit: March 22, 2019, 08:10:07 am by rookwield »

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #110 on: March 23, 2019, 02:21:17 am »
Oh, right! I've been using an unreleased update to the Fastrom patch. Can't seem to add anyone else as a contributor, but I finally got the nerve to submit these two.

FastROM v0.5
Multi Level-up v1

Btw, how can you tell he did DMA during HDMA? Still learning what I can about that.
I mean, is there a way I can tell it to not use a certain channel if it's busy? He said awhile back "Do not use hdma 2,3,4,7." Or do I just need to make sure DMA is during V-blank? *eyes cross*
« Last Edit: March 23, 2019, 10:14:38 pm by Sarah Shinespark »

rookwield

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #111 on: March 24, 2019, 09:07:17 am »
Look for 'Special Tracing': 'DMA' and 'HDMA' checkbox. Click those and it'll spam the box when it's being used. During Chapter 1 ending cutscene,

Code: [Select]
H-DMA[3] write (0) 0x01B7D7->0x2131 ind, Count:   1, Rep: yes, V-LINE: 151 01B7CC
H-DMA[4] write (0) 0x01B7D8->0x212C ind, Count:   1, Rep: yes, V-LINE: 151 01B7D6

It looks that fastrom DMA is used during loading data like graphics and initializing ram.

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #112 on: March 29, 2019, 06:08:42 pm »
Wait, so how can you tell they're being used simultaneously? I see both of them pop up in town, dungeons and battle, the latter looking like this:
Code: [Select]
H-DMA[3] write (0) 0x01B7D7->0x2131 ind, Count:   1, Rep: yes, V-LINE: 151 01B7CC
H-DMA[4] write (0) 0x01B7D8->0x212C ind, Count:   1, Rep: yes, V-LINE: 151 01B7D6
DMA[0]: CPU->PPU Mode:0 0x000200->0x2104 Bytes:220 (inc) V:225 OBJADDR: 0000
DMA[0]: CPU->PPU Mode:0 0x000420->0x2122 Bytes:200 (inc) V:229 CGRAM: 00 (0)
H-DMA[2] write (2) 0x030FEF->0x2111 ind, Count:   1, Rep: yes, V-LINE:   0 038963
H-DMA[3] write (0) 0x011893->0x2131 ind, Count: 100, Rep: yes, V-LINE:   0 01B7C6
I take it the [# ] is the channel in use, the range is ROM->RAM, and HDMA only writes a byte or two at a time. So what am I looking for?
« Last Edit: April 01, 2019, 09:29:19 pm by Sarah Shinespark »

rookwield

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #113 on: April 04, 2019, 08:40:10 pm »
Sorry for the late reply. Checking more carefully, sometimes I saw a DMA[6] popup in the logs that didn't happen with vanilla. But I've only seen H-DMA[2,3,4,7] so far. Maybe that's not the problem.

edit: Found the well-hidden gremlin. My previous fix only masked the problem, but it still happened much less often.

Normally fastrom hack behaves something like this:
Code: [Select]
** nmi handler @ 225
DMA[0]: CPU->PPU Mode:0 0x000200->0x2104 Bytes:220 (inc) V:225 OBJADDR: 0000
DMA[0]: CPU->PPU Mode:1 0x7E8000->0x2118 Bytes:1000 (inc) V:229 VRAM: 0400 (1,0) word
** note how game copies everything into vram right now, it takes up to 30 v-lines. 263 is our death line. anything past here will not be written to vram.
DMA[6]: CPU->PPU Mode:0 0x9FFB40->0x2180 Bytes:1320 (fixed) V:259
DMA[6]: CPU->PPU Mode:0 0x9FFB3E->0x2180 Bytes:2640 (fixed) V:027

And when timing runs too fast, it does this
Code: [Select]
DMA[6]: CPU->PPU Mode:0 0x9FFB40->0x2180 Bytes:1320 (fixed) V:222
** nmi handler @ 253
DMA[0]: CPU->PPU Mode:0 0x000200->0x2104 Bytes:220 (inc) V:253 OBJADDR: 0000
DMA[0]: CPU->PPU Mode:1 0x7E8000->0x2118 Bytes:1000 (inc) V:257 VRAM: 0400 (1,0) word
** error: 257+30 exceeds 263. most of transfer is dumped to wasteland and we gets lots of visual garbage instead.
DMA[6]: CPU->PPU Mode:0 0x9FFB3E->0x2180 Bytes:2640 (fixed) V:024

It looks like rainponcho zeros out memory via dma, which is fast but fatal when done around nmi. I'll see about patching this up next chance, since I get it now.

edit:
http://s000.tinyupload.com/index.php?file_id=97991706921447959755

Apply this on top of fastrom v5. It will now check the scanline before deciding when to dma. It's a kludge fix since we could sometimes squeeze in 1 extra dma pre-nmi but idc enough since it doesn't add enough time savings.
« Last Edit: April 05, 2019, 08:53:17 pm by rookwield »

Sarah Shinespark

  • Jr. Member
  • **
  • Posts: 15
  • Modder for Arcana Seal of Rimsala
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #114 on: April 06, 2019, 09:01:00 am »
Fine by me; I fixed Multi Levelup by checking that the current music was "Battle Won" so it wouldn't ADC the spirits' exp each time you switched them out :P

Code: [Select]
DMA[6]: CPU->PPU Mode:0 0x9FFB40->0x2180 Bytes:1320 (fixed) V:259Ok so in your first example there's this; so this is part of it working properly? I don't get how it's different than the garbage in the second example. I'm probably overthinking this and you weren't pointing out that part.

rookwield

  • Jr. Member
  • **
  • Posts: 5
    • View Profile
Re: Arcana - Seal of Rimsala! (SNES) ~ Fixing gfx bug, then release
« Reply #115 on: April 06, 2019, 02:25:23 pm »
It's okay since we copied all the data to vram first, which is critical. Main ram has no timing restrictions.


So log1 says:
V:225 = nmi, vram open for editing
V:225-229 = copy obj to vram
V:229-259 = copy tiles to vram
--- both these must be finished between 225-262.

V:259-027 = memset ram data
--- we don't care. do anytime


Log2 says:
V:222-253 = memset ram data

V:253 = nmi handler
V:253-257 = copy obj to vram
V:257-262 = (partial) copy tiles to vram
--- V:000 = warning: vram is closed for business
V:000-024 = (partial) copy tiles to vram
--- error, invalid, not written, goofed

That's what kills the tiles. There's not enough time to write everything in.