diff options
| author | YamaArashi <shadow962@live.com> | 2012-01-26 10:32:40 -0800 | 
|---|---|---|
| committer | YamaArashi <shadow962@live.com> | 2012-01-26 10:32:40 -0800 | 
| commit | b42672a0a07793f1ddd15e7132d229bd214877ac (patch) | |
| tree | 481539931789a009fdbca4ab933e914cb6f3670a | |
| parent | 96db7d1cd78232f345eb74bc2c91ad5698d1b11f (diff) | |
| parent | c57d257243a214f269859439cbca46f55791e2e1 (diff) | |
Merge music changes
hg-commit-id: 279fd0d79924
| -rw-r--r-- | music.asm | 1290 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/AbstractData.h | 6 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/Parser.cpp | 190 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/Parser.h | 37 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/UnkCode.cpp | 67 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/UnkCode.h | 29 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/UnkEB.cpp | 69 | ||||
| -rw-r--r-- | music/pokeredmusicdisasm/UnkEB.h | 29 | 
8 files changed, 1628 insertions, 89 deletions
| @@ -5261,23 +5261,1301 @@ branch_aee1:  ;Meet Prof. Oak
  MeetProfOak_md_1: ;AF59 - AFA8
 -INCBIN "baserom.gbc",$af59,$afa9 - $af59
 +	; AF59
 +	mus_tempo 0, 112
 +	mus_volume 119
 +	mus_duty duty75
 +	db $E8
 +	mus_vel 11, 4
 +
 +	mus_octave oct2
 +	mus_note noteF#, note16
 +	mus_note noteB, note16
 +
 +	mus_octave oct3
 +	mus_note noteD#, note16
 +	mus_note noteE, note16
 +	mus_note noteF#, note2_4
 +	mus_vel 10, 2
 +
 +	mus_octave oct2
 +	mus_note noteE, note4_8
 +	mus_note noteB, note2_8
 +	mus_note noteE, note4_8
 +	mus_note noteB, note2_8
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	mus_note noteE, note4_8
 +	mus_note noteB, note2_8
 +	mus_note noteE, note4_8
 +	mus_note noteB, note2_8
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	
 +branch_af85:
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteA, note8
 +	mus_note noteA, note4
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteA, note8
 +	mus_note noteA, note4
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteG#, note8
 +	mus_note noteG#, note4
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteG#, note8
 +	mus_note noteG#, note4
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	mus_note noteE, note4_8
 +	mus_note noteD#, note4
 +	mus_note noteF#, note8
 +	mus_note noteF#, note4
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteG#, note8
 +	mus_note noteG#, note4
 +	mus_note noteF#, note4_8
 +	mus_note noteE, note4
 +	mus_note noteG#, note8
 +	mus_note noteG#, note4
 +	mus_jump 0, branch_af85
 +	; AFA8
  MeetProfOak_md_2: ;AFA9 - B03D
 -INCBIN "baserom.gbc",$afa9,$b03d - $afa9
 +	; AFA9
 +	mus_mod 8, 1, 1
 +	mus_duty duty50
 +	mus_vel 12, 4
 +
 +	mus_octave oct2
 +	mus_note noteB, note16
 +
 +	mus_octave oct3
 +	mus_note noteD#, note16
 +	mus_note noteF#, note16
 +	mus_note noteA#, note16
 +	mus_note noteB, note2_4
 +	mus_vel 11, 2
 +
 +	mus_octave oct2
 +	mus_note noteB, note8
 +
 +	mus_octave oct3
 +	mus_note noteC#, note8
 +	mus_note noteD#, note8
 +	mus_note noteE, note4
 +	mus_note noteD#, note8
 +	mus_note noteC#, note4
 +	mus_vel 6, 4
 +
 +	mus_octave oct3
 +	mus_note noteB, note8
 +
 +	mus_octave oct4
 +	mus_note noteC#, note8
 +	mus_note noteD#, note8
 +	mus_note noteE, note4
 +	mus_note noteD#, note8
 +	mus_note noteC#, note4
 +	mus_vel 11, 2
 +
 +	mus_octave oct2
 +	mus_note noteB, note8
 +	mus_note noteA, note8
 +	mus_note noteG#, note8
 +	mus_note noteA, note4
 +	mus_note noteB, note8
 +	mus_note noteB, note4
 +	mus_vel 8, 1
 +
 +	mus_octave oct3
 +	mus_note noteB, note8
 +	mus_note noteA, note8
 +	mus_note noteG#, note8
 +	mus_note noteA, note4
 +	mus_note noteB, note8
 +	mus_note noteB, note4
 +	mus_vel 11, 2
 +
 +	mus_octave oct2
 +	mus_note noteB, note8
 +
 +	mus_octave oct3
 +	mus_note noteC#, note8
 +	mus_note noteD#, note8
 +	mus_note noteE, note4
 +	mus_note noteD#, note8
 +	mus_note noteC#, note4
 +	mus_vel 6, 4
 +
 +	mus_octave oct3
 +	mus_note noteB, note8
 +
 +	mus_octave oct4
 +	mus_note noteC#, note8
 +	mus_note noteD#, note8
 +	mus_note noteE, note4
 +	mus_note noteD#, note8
 +	mus_note noteC#, note4
 +	mus_vel 11, 2
 +
 +	mus_octave oct2
 +	mus_note noteB, note8
 +	mus_note noteA, note8
 +	mus_note noteG#, note8
 +	mus_note noteA, note4
 +	mus_note noteB, note8
 +	mus_note noteB, note4
 +	mus_vel 8, 1
 +
 +	mus_octave oct3
 +	mus_note noteB, note8
 +	mus_note noteA, note8
 +	mus_note noteG#, note8
 +	mus_note noteA, note4
 +	mus_note noteB, note8
 +	mus_note noteB, note4
 +	mus_vel 11, 5
 +
 +branch_b005:
 +	mus_octave oct3
 +	mus_note noteC#, note4_8
 +
 +	mus_octave oct2
 +	mus_note noteA, note16
 +
 +	mus_octave oct3
 +	mus_note noteC#, note16
 +	mus_note noteE, note4_8
 +	mus_note noteC#, note16
 +	mus_note noteE, note16
 +	mus_note noteF#, note4
 +	mus_note noteE, note4
 +	mus_note noteD#, note4
 +	mus_note noteC#, note4
 +
 +	mus_octave oct2
 +	mus_note noteB, note4_8
 +	mus_note noteG#, note16
 +	mus_note noteB, note16
 +
 +	mus_octave oct3
 +	mus_note noteE, note2
 +	mus_vel 6, 5
 +
 +	mus_octave oct3
 +	mus_note noteB, note4_8
 +	mus_note noteG#, note16
 +	mus_note noteB, note16
 +
 +	mus_octave oct4
 +	mus_note noteE, note2
 +	mus_vel 11, 5
 +
 +	mus_octave oct2
 +	mus_note noteA, note4_8
 +	mus_note noteF#, note16
 +	mus_note noteA, note16
 +
 +	mus_octave oct3
 +	mus_note noteD#, note2
 +	mus_note noteE, note4
 +	mus_note noteD#, note4
 +	mus_note noteC#, note4
 +	mus_note noteC, note4
 +
 +	mus_octave oct2
 +	mus_note noteB, note4_8
 +	mus_note noteG#, note16
 +	mus_note noteB, note16
 +
 +	mus_octave oct3
 +	mus_note noteE, note4_8
 +
 +	mus_octave oct2
 +	mus_note noteB, note16
 +
 +	mus_octave oct3
 +	mus_note noteE, note16
 +	mus_vel 11, 7
 +	mus_note noteG#, note1
 +	mus_jump 0, branch_b005
 +	; B03C
  MeetProfOak_md_3: ;B03D - B11F
 -INCBIN "baserom.gbc",$b03d,$b120 - $b03d
 +	; B03D
 +	mus_vel 1, 2
 +	mus_note noteRst, note2_8
 +
 +	mus_octave oct3
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct3
 +	mus_note noteB, note16
 +	mus_note noteRst, note4_16
 +
 +	mus_octave oct4
 +	mus_note noteE, note4
 +	mus_note noteRst, note4_8
 +
 +	mus_octave oct3
 +	mus_note noteB, note16
 +	mus_note noteRst, note4_16
 +
 +	mus_octave oct4
 +	mus_note noteE, note4
 +
 +	mus_octave oct3
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct3
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteE, note16
 +	mus_note noteRst, note16
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteG, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +
 +branch_bobc:
 +	mus_octave oct3
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct3
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct3
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct3
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +
 +	mus_octave oct4
 +	mus_note noteC#, note16
 +	mus_note noteRst, note16
 +	mus_jump 2, branch_bobc
 +
 +branch_b0d8:
 +	mus_octave oct3
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_jump 2, branch_b0d8
 +	
 +branch_b0ed:
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +	mus_note noteF#, note16
 +	mus_note noteRst, note16
 +	mus_note noteA, note16
 +	mus_note noteRst, note16
 +	mus_jump 2, branch_b0ed
 +	
 +branch_b101:
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_note noteG#, note16
 +	mus_note noteRst, note16
 +	mus_note noteB, note16
 +	mus_note noteRst, note16
 +	mus_jump 2, branch_b101
 +	mus_jump 0, branch_bobc
 +	mus_tempo 0, 100
 +	mus_jump 0, $7123
 +	; B11F
  ;Meet Rival
  MeetRival_md_1: ;B120 - B1BA
 -INCBIN "baserom.gbc",$b120,$b1bb - $b120
 +; B120
 +        mus_tempo 0, 112
 +        mus_volume 119
 +        mus_duty duty75
 +        mus_mod 6, 3, 4
 +        db $e8; B12A
 +        mus_vel 11, 3
 +
 +        mus_octave oct3
 +                mus_note noteD, note16
 +                mus_note noteC#, note16
 +                mus_note noteC, note16; B130
 +
 +        mus_octave oct2
 +                mus_note noteB, note16
 +                mus_note noteA#, note8
 +                mus_note noteA, note16
 +                mus_note noteG#, note16; B135
 +                mus_note noteG, note16
 +                mus_note noteF#, note16
 +                mus_note noteF, note4_8
 +                mus_note noteD, note16
 +                mus_note noteRst, note8_16; B13A
 +
 +                mus_note noteD, note16
 +                mus_note noteRst, note4_16
 +
 +                mus_note noteA, note8
 +                mus_note noteG, note8
 +                mus_note noteA, note8; B13F
 +				
 +branch_b140:
 +                mus_note noteB, note4
 +                mus_note noteA#, note8
 +                mus_note noteA, note4
 +                mus_note noteG, note8
 +
 +        mus_octave oct3; B144
 +                mus_note noteC, note4
 +                mus_note noteD, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteD, note4
 +                mus_note noteC#, note8; B149
 +                mus_note noteC, note8
 +
 +        mus_octave oct2
 +                mus_note noteB, note8
 +
 +        mus_octave oct3
 +                mus_note noteC, note4; B14E
 +                mus_note noteE, note8
 +                mus_note noteD, note4
 +                mus_note noteC, note8
 +
 +        mus_octave oct2
 +                mus_note noteB, note4; B153
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteG, note4
 +                mus_note noteG, note8; B158
 +                mus_note noteF#, note8
 +                mus_note noteE, note8
 +                mus_note noteD, note8
 +                mus_note noteF#, note8
 +
 +        mus_octave oct2; B15D
 +                mus_note noteA, note8
 +
 +        mus_octave oct3
 +                mus_note noteD, note8
 +                mus_note noteF#, note8
 +
 +        mus_octave oct2; B162
 +                mus_note noteA, note8
 +
 +        mus_octave oct3
 +                mus_note noteD, note8
 +
 +        mus_octave oct2
 +                mus_note noteD, note8; B167
 +
 +        mus_octave oct3
 +                mus_note noteD, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct2
 +                mus_note noteD, note8; B16C
 +
 +        mus_octave oct3
 +                mus_note noteC, note4
 +
 +        mus_octave oct2
 +                mus_note noteB, note8
 +                mus_note noteA#, note8; B171
 +                mus_note noteB, note8
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +                mus_note noteF, note8
 +
 +        mus_octave oct2; B176
 +                mus_note noteG, note8
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +                mus_note noteF, note8
 +                mus_note noteD#, note8; B17B
 +                mus_note noteC, note8
 +
 +        mus_octave oct2
 +                mus_note noteA#, note8
 +                mus_note noteG, note8
 +                mus_note noteRst, note4; B180
 +
 +                mus_note noteA#, note4
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +
 +        mus_octave oct2
 +                mus_note noteA#, note8; B185
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +
 +        mus_vel 11, 7
 +
 +        mus_octave oct2
 +                mus_note noteG, note4; B18B
 +                mus_note noteD, note8
 +                mus_note noteF, note4_8
 +                mus_note noteF#, note4
 +                mus_note noteD, note8
 +                mus_note noteRst, note4; B190
 +
 +                mus_note noteD, note4
 +
 +        mus_vel 11, 3
 +                mus_note noteA, note8
 +                mus_note noteG, note8
 +                mus_note noteA, note8; B196
 +
 +        mus_jump 0, branch_b140
 +        mus_tempo 0, 100
 +        mus_jump 0, branch_b1a5
 +        mus_tempo 0, 112
 +		
 +branch_b1a5:
 +        mus_volume 119; B1A6
 +        mus_duty duty75
 +        mus_mod 6, 3, 4
 +        db $e8
 +        mus_vel 11, 3
 +
 +        mus_octave oct2; B1AF
 +                mus_note noteD, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteD, note16
 +                mus_note noteRst, note4_16
 +
 +                mus_note noteA, note8; B1B4
 +                mus_note noteG, note8
 +                mus_note noteA, note8
 +
 +        mus_jump 0, branch_b140
 +; B1BA
  MeetRival_md_2: ;B1BB - B232
 -INCBIN "baserom.gbc",$b1bb,$b233 - $b1bb
 +; B1BB
 +        mus_duty duty75
 +        mus_mod 10, 2, 6
 +        mus_vel 12, 7
 +
 +        mus_octave oct3
 +                mus_note noteB, note16; B1C3
 +                mus_note noteA#, note16
 +                mus_note noteA, note16
 +                mus_note noteG#, note16
 +                mus_note noteG, note8
 +                mus_note noteF#, note16; B1C8
 +                mus_note noteF, note16
 +                mus_note noteE, note16
 +                mus_note noteD#, note16
 +                mus_note noteD, note4_8
 +
 +        mus_octave oct2; B1CD
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteD, note16; B1D2
 +                mus_note noteRst, note16
 +
 +        mus_octave oct3
 +                mus_note noteD, note8
 +                mus_note noteF, note8
 +                mus_note noteF#, note8; B1D7
 +
 +branch_b1d8:
 +        mus_vel 12, 7
 +                mus_note noteG, note4
 +                mus_note noteD, note8
 +                mus_note noteF, note4_8
 +                mus_note noteF#, note4; B1DD
 +                mus_note noteG, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteG, note4
 +                mus_note noteG, note8
 +                mus_note noteA#, note8; B1E2
 +                mus_note noteB, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note4
 +
 +        mus_octave oct3
 +                mus_note noteG, note8; B1E7
 +                mus_note noteA#, note4_8
 +                mus_note noteB, note4
 +
 +        mus_octave oct4
 +                mus_note noteC, note8
 +                mus_note noteRst, note4; B1EC
 +
 +                mus_note noteC, note4
 +                mus_note noteC, note8
 +
 +        mus_octave oct3
 +                mus_note noteB, note8
 +
 +        mus_octave oct4; B1F1
 +                mus_note noteC, note8
 +
 +        mus_vel 11, 0
 +                mus_note noteD, note1
 +
 +        mus_vel 11, 5
 +                mus_note noteD, note4_8; B1F8
 +
 +        mus_vel 12, 7
 +                mus_note noteF, note4
 +                mus_note noteD, note8
 +                mus_note noteC, note8
 +                mus_note noteD, note8; B1FE
 +
 +        mus_vel 11, 0
 +                mus_note noteC, note2
 +
 +        mus_vel 12, 7
 +                mus_note noteC, note2
 +
 +        mus_octave oct3; B205
 +                mus_note noteC, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteA#, note4
 +                mus_note noteG, note8
 +                mus_note noteF, note8; B20A
 +
 +        mus_vel 11, 0
 +                mus_note noteG, note1
 +
 +        mus_vel 11, 3
 +                mus_note noteG, note8
 +
 +        mus_octave oct2; B211
 +                mus_note noteG, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteG, note4
 +
 +        mus_octave oct3
 +                mus_note noteD, note8; B216
 +                mus_note noteF, note8
 +                mus_note noteF#, note8
 +
 +        mus_jump 0, branch_b1d8
 +        mus_duty duty75
 +        mus_mod 10, 2, 6; B221
 +        mus_vel 12, 7
 +
 +        mus_octave oct2
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteG, note16; B227
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteD, note16
 +                mus_note noteRst, note16
 +
 +        mus_octave oct3
 +                mus_note noteD, note8; B22C
 +                mus_note noteF, note8
 +                mus_note noteF#, note8
 +
 +        mus_jump 0, branch_b1d8
 +; B232
  MeetRival_md_3: ;B233 - B3A6
 -INCBIN "baserom.gbc",$b233,$b3a7 - $b233
 +; B233
 +        mus_vel 1, 4
 +
 +        mus_octave oct4
 +                mus_note noteD, note8
 +                mus_note noteRst, note8
 +
 +                mus_note noteC#, note8; B238
 +                mus_note noteRst, note8
 +
 +                mus_note noteC, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct3
 +                mus_note noteB, note8; B23D
 +                mus_note noteRst, note8
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16; B242
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16; B247
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +branch_b24b:
 +                mus_note noteG, note8
 +
 +        mus_octave oct4; B24C
 +                mus_note noteD, note8
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct4; B251
 +                mus_note noteD, note8
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct4; B256
 +                mus_note noteD, note8
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteRst, note4
 +
 +        mus_octave oct4; B25B
 +                mus_note noteD, note4
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteA#, note8
 +                mus_note noteB, note8; B260
 +                mus_note noteG, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note8
 +
 +        mus_octave oct3
 +                mus_note noteG, note8; B265
 +                mus_note noteRst, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note8
 +
 +        mus_octave oct3
 +                mus_note noteG, note8; B26A
 +                mus_note noteRst, note8
 +
 +                mus_note noteB, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note8
 +                mus_note noteRst, note4; B26F
 +
 +                mus_note noteC, note4
 +                mus_note noteC, note8
 +
 +        mus_octave oct3
 +                mus_note noteB, note8
 +                mus_note noteA, note8; B274
 +                mus_note noteF#, note8
 +                mus_note noteA, note8
 +                mus_note noteRst, note8
 +
 +                mus_note noteF#, note8
 +                mus_note noteA, note8; B279
 +                mus_note noteF#, note8
 +                mus_note noteRst, note8
 +
 +                mus_note noteA, note8
 +                mus_note noteF#, note8
 +                mus_note noteA, note8; B27E
 +                mus_note noteRst, note8
 +
 +                mus_note noteF#, note8
 +                mus_note noteA, note8
 +                mus_note noteF#, note8
 +
 +        mus_octave oct4; B283
 +                mus_note noteD, note8
 +
 +        mus_octave oct3
 +                mus_note noteA, note8
 +                mus_note noteE, note8
 +
 +        mus_octave oct4; B288
 +                mus_note noteC, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct3
 +                mus_note noteE, note8
 +
 +        mus_octave oct4; B28D
 +                mus_note noteC, note8
 +
 +        mus_octave oct3
 +                mus_note noteE, note8
 +                mus_note noteF, note8
 +                mus_note noteG, note8; B292
 +                mus_note noteE, note8
 +                mus_note noteRst, note4
 +
 +                mus_note noteE, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note8; B297
 +
 +        mus_octave oct3
 +                mus_note noteB, note8
 +                mus_note noteA#, note8
 +                mus_note noteA, note8
 +                mus_note noteG, note8; B29C
 +                mus_note noteA#, note8
 +                mus_note noteRst, note8
 +
 +                mus_note noteG, note8
 +                mus_note noteA#, note8
 +                mus_note noteG, note8; B2A1
 +                mus_note noteRst, note8
 +
 +                mus_note noteA#, note8
 +                mus_note noteG, note8
 +
 +        mus_octave oct4
 +                mus_note noteD, note8; B2A6
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct4
 +                mus_note noteD, note8; B2AB
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteRst, note8
 +
 +        mus_octave oct4
 +                mus_note noteD, note8; B2B0
 +
 +        mus_jump 0, branch_b24b
 +        mus_vel 1, 4
 +
 +        mus_octave oct3
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16; B2B9
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16; B2BE
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16; B2C3
 +
 +        mus_jump 0, branch_b24b
 +        db $f8
 +        mus_tempo 1, 0
 +        mus_volume 119
 +        mus_duty duty50; B2CF
 +        db $d5
 +
 +                mus_note noteB, note8
 +
 +        mus_octave oct2
 +                mus_note noteA, note8
 +                mus_note noteA, note8; B2D4
 +                mus_note noteG, note8
 +                mus_note noteG, note8
 +                mus_note noteF, note8
 +                mus_note noteE, note8
 +                mus_note noteF, note8; B2D9
 +                mus_note noteA, note8
 +
 +        mus_octave oct3
 +                mus_note noteC, note4
 +                mus_note noteE, note4
 +
 +        mus_octave oct2; B2DE
 +                mus_note noteF, note4
 +
 +        mus_end
 +; B2E0
 +
 +; B2E1
 +branch_b2e1:
 +        db $f8
 +        mus_duty duty50
 +        db $d5
 +
 +                mus_note noteRst, note8_16
 +
 +        mus_octave oct4; B2E6
 +                mus_note noteF, note8
 +                mus_note noteE, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteD, note8
 +                mus_note noteC, note16; B2EB
 +                mus_note noteRst, note16
 +
 +        mus_octave oct3
 +                mus_note noteA#, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note8; B2F0
 +                mus_note noteD, note8
 +                mus_note noteE, note8
 +                mus_note noteF, note4
 +                mus_note noteG, note4
 +                mus_note noteF, note4; B2F5
 +
 +        mus_end
 +; B2F6
 +
 +; B2F7
 +branch_b2f7:
 +        db $f8
 +        db $d5
 +
 +                mus_note noteC#, note16
 +
 +        mus_octave oct4
 +                mus_note noteC, note16; B2FB
 +                mus_note noteRst, note16
 +
 +        mus_octave oct3
 +                mus_note noteF, note8
 +
 +        mus_octave oct4
 +                mus_note noteC, note16; B300
 +                mus_note noteRst, note16
 +
 +        mus_octave oct3
 +                mus_note noteA#, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteA, note16; B305
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteF, note16
 +                mus_note noteRst, note16; B30A
 +
 +                mus_note noteE, note16
 +                mus_note noteRst, note16
 +
 +        mus_octave oct4
 +                mus_note noteF, note16
 +                mus_note noteRst, note8_16; B30F
 +
 +                mus_note noteC, note16
 +                mus_note noteRst, note8_16
 +
 +        mus_octave oct3
 +                mus_note noteF, note8
 +                mus_note noteRst, note8; B314
 +
 +        mus_end
 +; B315
 +
 +; B316
 +branch_b316:
 +        db $f8
 +        mus_tempo 1, 0
 +        mus_volume 119
 +        mus_duty duty50
 +        db $e8; B31E
 +        db $d5
 +
 +                mus_note noteB, note4_16
 +
 +        mus_octave oct3
 +                mus_note noteD, note4
 +                mus_note noteC, note4; B323
 +
 +        mus_octave oct2
 +                mus_note noteA, note2
 +
 +        db $d5
 +
 +                mus_note noteB, note8_16
 +
 +        mus_octave oct3; B328
 +                mus_note noteD#, note8
 +                mus_note noteD#, note8
 +                mus_note noteD, note8
 +                mus_note noteC, note8
 +                mus_note noteC, note8; B32D
 +
 +        mus_octave oct2
 +                mus_note noteA#, note8
 +
 +        db $d5
 +
 +                mus_note noteB, note4_16
 +
 +        mus_octave oct3; B332
 +                mus_note noteC, note2
 +
 +        mus_end
 +; B334
 +
 +; B335
 +branch_b335:
 +        db $f8
 +        mus_mod 8, 2, 7
 +        mus_duty duty50
 +        db $d5
 +
 +                mus_note noteRst, note4_8; B33C
 +
 +        mus_octave oct3
 +                mus_note noteA, note4
 +                mus_note noteF, note4
 +                mus_note noteC, note2
 +
 +        db $d5; B341
 +
 +                mus_note noteRst, note8_16
 +
 +                mus_note noteA#, note8
 +                mus_note noteA#, note8
 +                mus_note noteA#, note8
 +                mus_note noteG, note8; B346
 +                mus_note noteG, note8
 +                mus_note noteA#, note8
 +
 +        db $d5
 +
 +                mus_note noteRst, note4_16
 +
 +                mus_note noteA, note2; B34B
 +
 +        mus_end
 +; B34C
 +
 +; B34D
 +branch_b34d:
 +        db $f8
 +        db $d5
 +
 +                mus_note noteC#, note16
 +
 +        mus_octave oct4
 +                mus_note noteF, note4; B351
 +                mus_note noteD#, note4
 +                mus_note noteC, note2
 +                mus_note noteD#, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteD#, note16; B356
 +                mus_note noteRst, note16
 +
 +                mus_note noteE, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteF, note16
 +                mus_note noteRst, note16; B35B
 +
 +                mus_note noteF, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteG, note16
 +                mus_note noteRst, note16
 +
 +                mus_note noteA, note2; B360
 +
 +        mus_end
 +; B361
 +
 +; B362
 +branch_b362:
 +        db $f8
 +        mus_tempo 1, 0
 +        mus_volume 119
 +        mus_duty duty50
 +        db $e8; B36A
 +        db $d5
 +
 +                mus_note noteA#, note4_16
 +
 +        mus_octave oct2
 +                mus_note noteA#, note4
 +
 +        db $d5; B36F
 +
 +                mus_note noteB, note8
 +
 +        mus_octave oct3
 +                mus_note noteC, note8
 +                mus_note noteC, note16
 +                mus_note noteC, note16; B374
 +
 +        db $d5
 +
 +                mus_note noteA#, note4_16
 +                mus_note noteD#, note4
 +
 +        db $d5
 +
 +                mus_note noteB, note8; B379
 +                mus_note noteF, note8
 +                mus_note noteF, note16
 +                mus_note noteF, note16
 +
 +        db $d5
 +
 +                mus_note noteB, note4_16; B37E
 +                mus_note noteA#, note2
 +
 +        mus_end
 +; B380
 +
 +; B381
 +branch_b381:
 +        db $f8
 +        mus_mod 4, 2, 3
 +        mus_duty duty50
 +        db $d5
 +        db $d1; B388
 +
 +        mus_octave oct3
 +                mus_note noteG, note8
 +                mus_note noteG, note16
 +                mus_note noteG, note16
 +
 +        db $d5; B38D
 +
 +                mus_note noteRst, note4_16
 +
 +                mus_note noteD#, note4
 +
 +        db $d5
 +        db $d1
 +
 +                mus_note noteG#, note8; B392
 +                mus_note noteG#, note16
 +                mus_note noteG#, note16
 +                mus_note noteA#, note8
 +                mus_note noteA#, note16
 +                mus_note noteA#, note16; B397
 +
 +        db $d5
 +
 +                mus_note noteRst, note4_16
 +
 +        mus_octave oct4
 +                mus_note noteD#, note2
 +
 +        mus_end; B39C
 +; B39C
 +
 +; B39D
 +branch_b39d:
 +        db $f8
 +        db $d5
 +
 +                mus_note noteC#, note16
 +
 +        mus_octave oct3
 +                mus_note noteD#, note4; B3A1
 +                mus_note noteG#, note4
 +                mus_note noteG, note4
 +                mus_note noteF, note4
 +                mus_note noteD#, note2
 +
 +        mus_end; B3A6
 +; B3A6
  ;SS Anne
  SSAnne_md_1: ;B3A7 - B418
 diff --git a/music/pokeredmusicdisasm/AbstractData.h b/music/pokeredmusicdisasm/AbstractData.h index 2a9fbbaf..0b49255d 100644 --- a/music/pokeredmusicdisasm/AbstractData.h +++ b/music/pokeredmusicdisasm/AbstractData.h @@ -10,11 +10,11 @@ public:      AbstractData();
      virtual std::string GenAsm(); // Generate Assembly Output
 -    virtual bool IsValid(unsigned char* byte); // Check for byte validity
      virtual bool Parse(unsigned char* byte); // Parse Given Data
 -    virtual unsigned int Arguments(); // Number of arguments taken
 +	virtual bool GetError(); // Get Error (No Write, Error is read only)
 -    virtual bool GetError(); // Get Error (No Write, Error is read only)
 +	virtual bool IsValid(unsigned char* byte); // Check for byte validity
 +    virtual unsigned int Arguments(); // Number of arguments taken
  protected:
      bool error; // Whether there's an error in parsing or not
 diff --git a/music/pokeredmusicdisasm/Parser.cpp b/music/pokeredmusicdisasm/Parser.cpp index 9fa0af7f..b900b575 100644 --- a/music/pokeredmusicdisasm/Parser.cpp +++ b/music/pokeredmusicdisasm/Parser.cpp @@ -18,6 +18,7 @@ Parser::Parser(std::string filename)  	fileLength = 0;
  	filePos = 0;
  	stop = false;
 +	stopAddress = 0;
  	SetFilename(filename);
  }
 @@ -63,7 +64,9 @@ string Parser::GetParsedAsm()  	for(unsigned int i = 0; i < parsedString.size(); i++)
  	{
 -		tmpStr += parsedString[i] + "\n";
 +		// Ensure each line isn't already a new-line, this prevents double or tripple empty lines from piling up
 +		if(parsedString[i] != "\n") tmpStr += parsedString[i] + "\n";
 +		else tmpStr += parsedString[i];
  	}
  	return tmpStr;
 @@ -87,6 +90,8 @@ void Parser::Read()  	// Read filedata
  	tmpFile.read(rawBytes, fileLength);
  	tmpFile.close();
 +
 +	rawBytesFixed = (unsigned char*)rawBytes;
  }
  // Code Operations
 @@ -96,114 +101,165 @@ void Parser::Parse(unsigned int offset)  	ParseNext();
  }
 +template<class T>
 +bool Parser::ParseData(unsigned int& pos, bool reado)
 +{
 +	// Create the class to use if correct and a dummy class for validating
 +	T* tmpC = 0;
 +	T dummy;
 +
 +	// If the bytes are this data type then create and save it
 +	if(dummy.IsValid(&rawBytesFixed[pos]))
 +	{
 +		// Ensure this whole opperation isn't read-only (just peeking)
 +		if(!reado)
 +		{
 +			// Initialize the class
 +			tmpC = new T(&rawBytesFixed[pos]);
 +
 +			// Push it onto the stack and it's assembly generation onto the output class
 +			parsedBytes.push_back(tmpC);	// 
 +			parsedString.push_back(tmpC->GenAsm());
 +
 +			// If the class had any arguments, increment the counter that much forward
 +			pos += tmpC->Arguments();
 +		}
 +		return true;	// Let the code know this class was valid
 +	}
 +
 +	return false;	// Let the code know this class wasn't valid
 +}
 +
  void Parser::ParseNext() // Parses the block immidiately following
  {
  	stringstream tmpStr;
 -	unsigned char* rawBytesFixed = (unsigned char*)rawBytes;
  	stop = false;
  	// Smart generation
 -	bool indent = false;
 -	bool firstNonNote = false;	// First byte wasn't a note or octacve switch, add ";Setup" comment
 -	bool firstNote = false;	// First note or octave
 +	bool firstNonNote = false;	// (unused so far)First byte wasn't a note or octacve switch, add ";Setup" comment
 +	bool firstNote = false;	// (unused so far) First note or octave
 +	unsigned char lDataType = DATA_NA;
  	stringstream pos;
  	pos << "; " << hex << uppercase << (unsigned int)filePos;
  	parsedString.push_back(pos.str());
 +	unsigned int count = 1;	// Counter for processed instructions
  	for(unsigned int i = filePos; (i <= fileLength) && (stop == false); i++)
  	{
 -		// There's a way to make this block shorter but for now it does it's job
 -
 -		// Check to see if it's the correct data type and if so then use it
 -		if(tmpCall.IsValid(&rawBytesFixed[i])) // Should have made IsValid static
 +		// First peek to see what kind of data it is, then perform any pre and post setup
 +		if(ParseData<Call>(i, true))
  		{
 -			// Call data type
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 -			// Create data type then move the increment pointer further up as needed
 -			parsedBytes.push_back(new Call(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpCall.Arguments(); // should have made Arguments static
 +			ParseData<Call>(i);
 +			lDataType = DATA_CALL;
 +		}
 +		else if(ParseData<Duty>(i, true))
 +		{
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 -			Call* _tmp = (Call*)parsedBytes[parsedBytes.size() - 1];
 +			ParseData<Duty>(i);
 +			lDataType = DATA_DUTY;
  		}
 -		else if(tmpDuty.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Jump>(i, true))
  		{
 -			// Duty data type
 -			parsedBytes.push_back(new Duty(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpDuty.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<Jump>(i);
 +			lDataType = DATA_JUMP;
  		}
 -		else if(tmpJump.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Modulation>(i, true))
  		{
 -			// Jump data type
 -			parsedBytes.push_back(new Jump(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpJump.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 -			Jump* _tmp = (Jump*)parsedBytes[parsedBytes.size() - 1];
 +			ParseData<Modulation>(i);
 +			lDataType = DATA_MODULATION;
  		}
 -		else if(tmpModulation.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Note>(i, true))
  		{
 -			// Modulation data type
 -			parsedBytes.push_back(new Modulation(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpModulation.Arguments();
 +			 // Insert a newline after certain types
 +			if((lDataType == DATA_UNKCODE) ||
 +				(lDataType == DATA_UNKEB)) parsedString.push_back("\n");
 +
 +			// If the previous item was a rest note then insert a new line
 +			else if(lDataType == DATA_NOTE)
 +			{
 +				Note* _tmpNote = (Note*)parsedBytes[parsedBytes.size() - 1];
 +				if(_tmpNote->GetPitch() == _tmpNote->noteRst) parsedString.push_back("\n");
 +			}
 +
 +			ParseData<Note>(i);
 +
 +			// Further indent each note
 +			parsedString[parsedString.size() - 1] = "\t" + parsedString[parsedString.size() - 1];
 +			lDataType = DATA_NOTE;
  		}
 -		else if(tmpNote.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Octave>(i, true))
  		{
 -			// Note data type
 -			parsedBytes.push_back(new Note(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpNote.Arguments();
 +			// Insert new-line if previous line isn't a newline
 +			if(parsedString[parsedString.size() - 1] != "\n") parsedString.push_back("\n");
 +
 +			ParseData<Octave>(i);
 +			lDataType = DATA_OCTAVE;
  		}
 -		else if(tmpOctave.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Tempo>(i, true))
  		{
 -			// Octave data type
 -			parsedBytes.push_back(new Octave(&rawBytesFixed[i]));
 -			parsedString.push_back("\n" + parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpOctave.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<Tempo>(i);
 +			lDataType = DATA_TEMPO;
  		}
 -		else if(tmpStop.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Velocity>(i, true))
  		{
 -			// Stop data type
 -			parsedBytes.push_back(new Stop(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpStop.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 -			stop = true;	// Stop all further processing, we've reached the end of the song
 +			ParseData<Velocity>(i);
 +			lDataType = DATA_VELOCITY;
  		}
 -		else if(tmpTempo.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Volume>(i, true))
  		{
 -			// Tempo data type
 -			parsedBytes.push_back(new Tempo(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpTempo.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<Volume>(i);
 +			lDataType = DATA_VOLUME;
  		}
 -		else if(tmpVelocity.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<UnkEB>(i, true))	// The opcode is 0xEB which is unknown and takes a 1-byte argument
  		{
 -			// Velocity data type
 -			parsedBytes.push_back(new Velocity(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpVelocity.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<UnkEB>(i);
 +			lDataType = DATA_UNKEB;
  		}
 -		else if(tmpVolume.IsValid(&rawBytesFixed[i]))
 +		else if(ParseData<Stop>(i, true))
  		{
 -			// Volume data type
 -			parsedBytes.push_back(new Volume(&rawBytesFixed[i]));
 -			parsedString.push_back(parsedBytes[parsedBytes.size() - 1]->GenAsm());
 -			i += tmpVolume.Arguments();
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<Stop>(i);
 +			stop = true; // Raise the stop flag informing the parser to stop
 +			lDataType = DATA_STOP;
  		}
  		else
  		{
 -			// Unknown code
 -			stringstream unkCode;
 -			short tmpByte = (short)rawBytesFixed[i];
 -			unkCode << "db $" << hex << uppercase << (short)rawBytesFixed[i];
 -			parsedString.push_back(unkCode.str());
 +			if(lDataType == DATA_NOTE) parsedString.push_back("\n"); // Insert a newline after notes
 +
 +			ParseData<UnkCode>(i);	// The opcode is unknown - process the raw byte and move on
 +			lDataType = DATA_UNKCODE;
 +		}
 +
 +		// Put everything tabbed over at least 1 time to fix some weird RGBDS bug by pre-pending a tab character
 +		parsedString[parsedString.size() - 1] = "\t" + parsedString[parsedString.size() - 1];
 +
 +		// Append File Position in hexidecimal at end of line every 5 instructions
 +		if((count % 5) == 0)
 +		{
 +			stringstream _tmpCount;
 +			_tmpCount << hex << uppercase << i;
 +			parsedString[parsedString.size() - 1] = parsedString[parsedString.size() - 1] + "; " + _tmpCount.str();
  		}
  		filePos = i;
 +		count++;
  		// If the stop address parameter is set, break when we get there
  		if( (stopAddress != 0) && (i >= stopAddress) ) break;
 diff --git a/music/pokeredmusicdisasm/Parser.h b/music/pokeredmusicdisasm/Parser.h index 515d07ad..20af39a7 100644 --- a/music/pokeredmusicdisasm/Parser.h +++ b/music/pokeredmusicdisasm/Parser.h @@ -13,11 +13,12 @@  #include "Modulation.h"
  #include "Note.h"
  #include "Octave.h"
 -#include "Parser.h"
  #include "Stop.h"
  #include "Tempo.h"
  #include "Velocity.h"
  #include "Volume.h"
 +#include "UnkCode.h"
 +#include "UnkEB.h"
  // This is the final class, it takes all of the data types, abstract class, and helper functions and uses them
  // for parsing
 @@ -49,30 +50,40 @@ public:  	void Parse(unsigned int offset);
  	void ParseNext(); // Parses the block immidiately following
 +	// Templates
 +	template<class T>
 +	bool ParseData(unsigned int& pos, bool reado = false);
 +
 +	const enum dataType : unsigned char
 +	{
 +		DATA_NA,
 +		DATA_CALL,
 +		DATA_DUTY,
 +		DATA_JUMP,
 +		DATA_MODULATION,
 +		DATA_NOTE,
 +		DATA_OCTAVE,
 +		DATA_STOP,
 +		DATA_TEMPO,
 +		DATA_UNKCODE,
 +		DATA_UNKEB,
 +		DATA_VELOCITY,
 +		DATA_VOLUME
 +	};
 +
  private:
  	std::string filename;
  	std::vector<AbstractData*> parsedBytes;
  	std::vector<std::string> parsedString;
  	char* rawBytes;
 +	unsigned char* rawBytesFixed;
  	unsigned int fileLength;
  	unsigned int filePos;
  	bool stop;
  	// Optional Settings
  	unsigned int stopAddress;
 -
 -	// A lot of tmp classes
 -	Call tmpCall;
 -	Duty tmpDuty;
 -	Jump tmpJump;
 -	Modulation tmpModulation;
 -	Note tmpNote;
 -	Octave tmpOctave;
 -	Stop tmpStop;
 -	Tempo tmpTempo;
 -	Velocity tmpVelocity;
 -	Volume tmpVolume;
  };
  #endif
\ No newline at end of file diff --git a/music/pokeredmusicdisasm/UnkCode.cpp b/music/pokeredmusicdisasm/UnkCode.cpp new file mode 100644 index 00000000..93c74f66 --- /dev/null +++ b/music/pokeredmusicdisasm/UnkCode.cpp @@ -0,0 +1,67 @@ +#include <sstream>
 +
 +#include "Call.h"
 +#include "Duty.h"
 +#include "Jump.h"
 +#include "Modulation.h"
 +#include "Note.h"
 +#include "Octave.h"
 +#include "Stop.h"
 +#include "Tempo.h"
 +#include "Velocity.h"
 +#include "Volume.h"
 +
 +#include "UnkCode.h"
 +
 +using namespace std;
 +
 +UnkCode::UnkCode()
 +{
 +	code = 0;
 +}
 +
 +UnkCode::UnkCode(unsigned char* byte)
 +{
 +	code = 0;
 +	Parse(byte);
 +}
 +
 +UnkCode::UnkCode(unsigned char code, bool)
 +{
 +	SetCode(code);
 +}
 +
 +// Getters / Setters
 +unsigned char UnkCode::GetCode()
 +{
 +	return code;
 +}
 +
 +void UnkCode::SetCode(unsigned char value)
 +{
 +	code = value;
 +}
 +
 +// Re-implemented
 +string UnkCode::GenAsm()
 +{
 +	stringstream tmpAsmOut;
 +	tmpAsmOut << "db $" << hex << (short)code;
 +	return tmpAsmOut.str();
 +}
 +
 +bool UnkCode::Parse(unsigned char* byte)
 +{
 +	code = byte[0];
 +	return true;
 +}
 +
 +bool UnkCode::IsValid(unsigned char* byte)
 +{
 +	return true;
 +}
 +
 +unsigned int UnkCode::Arguments()
 +{
 +	return 0;
 +}
\ No newline at end of file diff --git a/music/pokeredmusicdisasm/UnkCode.h b/music/pokeredmusicdisasm/UnkCode.h new file mode 100644 index 00000000..28204448 --- /dev/null +++ b/music/pokeredmusicdisasm/UnkCode.h @@ -0,0 +1,29 @@ +#ifndef UNKCODE_H
 +#define UNKCODE_H
 +
 +#include "AbstractData.h"
 +
 +// Represents an unknown opcode
 +class UnkCode : public AbstractData
 +{
 +public:
 +	// Constructors
 +	UnkCode();
 +	UnkCode(unsigned char* byte); // Parse Immidiately
 +	UnkCode(unsigned char code, bool); // Set Value
 +
 +	// Getters / Setters
 +	unsigned char GetCode();
 +	void SetCode(unsigned char value);
 +
 +	// Re-implemented
 +	virtual std::string GenAsm();
 +	virtual bool Parse(unsigned char* byte);
 +	virtual bool IsValid(unsigned char* byte);
 +	virtual unsigned int Arguments();
 +
 +private:
 +	unsigned char code;
 +};
 +
 +#endif
\ No newline at end of file diff --git a/music/pokeredmusicdisasm/UnkEB.cpp b/music/pokeredmusicdisasm/UnkEB.cpp new file mode 100644 index 00000000..c8db595f --- /dev/null +++ b/music/pokeredmusicdisasm/UnkEB.cpp @@ -0,0 +1,69 @@ +#include <sstream>
 +
 +#include "Call.h"
 +#include "Duty.h"
 +#include "Jump.h"
 +#include "Modulation.h"
 +#include "Note.h"
 +#include "Octave.h"
 +#include "Stop.h"
 +#include "Tempo.h"
 +#include "Velocity.h"
 +#include "Volume.h"
 +
 +#include "UnkEB.h"
 +
 +using namespace std;
 +
 +UnkEB::UnkEB()
 +{
 +	param = 0;
 +}
 +
 +UnkEB::UnkEB(unsigned char* byte)
 +{
 +	param = 0;
 +	Parse(byte);
 +}
 +
 +UnkEB::UnkEB(unsigned char code, bool)
 +{
 +	SetParam(code);
 +}
 +
 +// Getters / Setters
 +unsigned char UnkEB::GetParam()
 +{
 +	return param;
 +}
 +
 +void UnkEB::SetParam(unsigned char value)
 +{
 +	param = value;
 +}
 +
 +// Re-implemented
 +string UnkEB::GenAsm()
 +{
 +	stringstream tmpAsmOut;
 +	tmpAsmOut << hex << "db $" << (short)0xEB << ", $" << (short)param;
 +	return tmpAsmOut.str();
 +}
 +
 +bool UnkEB::Parse(unsigned char* byte)
 +{
 +	param = byte[1];
 +	return true;
 +}
 +
 +bool UnkEB::IsValid(unsigned char* byte)
 +{
 +	if(byte[0] == 0xEB) return true;
 +	else return false;
 +}
 +
 +unsigned int UnkEB::Arguments()
 +{
 +	// 1 1-Byte param
 +	return 1;
 +}
\ No newline at end of file diff --git a/music/pokeredmusicdisasm/UnkEB.h b/music/pokeredmusicdisasm/UnkEB.h new file mode 100644 index 00000000..ab11a655 --- /dev/null +++ b/music/pokeredmusicdisasm/UnkEB.h @@ -0,0 +1,29 @@ +#ifndef UNKEB_H
 +#define UNKEB_H
 +
 +#include "AbstractData.h"
 +
 +// Represents an unknown opcode
 +class UnkEB : public AbstractData
 +{
 +public:
 +	// Constructors
 +	UnkEB();
 +	UnkEB(unsigned char* byte); // Parse Immidiately
 +	UnkEB(unsigned char code, bool); // Set Value
 +
 +	// Getters / Setters
 +	unsigned char GetParam();
 +	void SetParam(unsigned char value);
 +
 +	// Re-implemented
 +	virtual std::string GenAsm();
 +	virtual bool Parse(unsigned char* byte);
 +	virtual bool IsValid(unsigned char* byte);
 +	virtual unsigned int Arguments();
 +
 +private:
 +	unsigned char param;
 +};
 +
 +#endif
\ No newline at end of file | 
