Hello, I’m just a newbie to 6502. I’m translating the game Saint Seiya Ougon no densetsu on the NES to my language. My language has many accents above the letters, such as â, ă, ấ…. But the NES tile is only 8x8 pixel, which is impossible to draw accent above these letters.
However, in the Japanese verison of the Rom, they uses the technique to display Dakuten (") and Handakuten (゜) above the Kanas. Like this
When 3B or 3C is after these characters, it will be displayed on the upper line of these Kanas.
Here you can see the dialogue box can display up to 4 rows, but the game actually uses 2 rows (2nd and 4th) to display the main text, and the remanining (1st and 3rd) are used to display Dakuten and Handakuten. Say, 13=た, 3B=゛so in the ROM, we have 13-3B, then it is displayed as だ on the screen, but in the PPU it looks like this:
Row 1: xxxxxxxx3B (゛)
Row2: xxxxxxxx13 (た)
So I want to copy the routine of these Handakuten and Dakuten (3C, 3B) to another tiles to display accents in my language. The concept is like this
The picture above is not excatly I did to the Rom, I just played round in the PPU to change the display.
I want to apply to the ROM, but hasn’t found the routine that display 3B and 3C one row upper than other letters yet.
The Dakuten (font) start at $213C0 in the Rom, or $1040 in the PPU.
I set a breakpoint on read/write at $13B0 in PPU, but the game didn’t snap when it display the Dakuten to the screen. I wonder why?
So the next step, I searched the pharse
And found it starts at $2089 in PPU. Then I set a breakpoint on write in PPU with the condition A==#12, the result looks like this
06:8FA2:A9 00 LDA #$00
06:8FA4:8D 41 06 STA $0641 = #$02
06:8FA7:85 EC STA $00EC = #$FF
06:8FA9:4C 67 90 JMP $9067
06:8FAC:EE 41 06 INC $0641 = #$02
06:8FAF:EE 44 06 INC $0644 = #$89
06:8FB2:D0 D7 BNE $8F8B
06:8FB4:EE 45 06 INC $0645 = #$20
06:8FB7:D0 D2 BNE $8F8B
06:8FB9:AE 45 06 LDX $0645 = #$20 ;645: text position
06:8FBC:8E 06 20 STX $2006 = #$89
06:8FBF:AE 44 06 LDX $0644 = #$89
06:8FC2:8E 06 20 STX $2006 = #$89
06:8FC5:8D 07 20 STA $2007 = #$31
06:8FC8:EE 44 06 INC $0644 = #$89
06:8FCB:D0 03 BNE $8FD0
06:8FCD:EE 45 06 INC $0645 = #$20
06:8FD0:EE 41 06 INC $0641 = #$02
06:8FD3:20 30 90 JSR $9030
Meanwhile, the Dakuten starts at $2075 for the above sentence (sonna koto wo shiteiru toki dewa arimasen yo)
I set a break point on write at $2075 with the condition A==#3B to know where and when the 3B (code value for Dakuten) is written to $2075. But the game did not snap when it display the Dakuten. Why?
Can anybody explain to my why it didn’t snap? Where I get wrong?
What I have to do to find the routine that display 3B (゛) one row upper than the other code?
P/s: below are what I have known after playing around in the RAM
$CF: avatar graphic control
$580:delete displaying text, delete border: #$01: del 1st line, #$06: don't del after displaying
$640 in Ram: 02: write normal, 03: write from line 1+shift right
$641: 1st moji, 2nd moji.... (from 03~)
$642: text speed
$643: text speed 2?
$644: continous character postion X, (X+1)
$645: text postion, $20: upper dialogue box, $21: middle dialogue box, $22: lowe dialogue box
$646: <line> next postion position
$647: <line> next line postion
$693: text block ID?
$66A: text block ID?