Warning: You are using TidyHTML mode! Pages MAY and probably WILL break. To disable, click here or append 'xxx-off=1' to the URL!

Register - Login
Views: 57949832
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - JCS - Stats - Latest Posts - Color Chart - Smilies
10-17-14 08:12:13 PM

Jul - Posts by MarIO0
Pages: 1 2 3
MarIO0
Member
Level: 14


Posts: 1/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-03-09 11:25:13 AM, in Save file format info (last edited by MarIO0 at 09-03-09 11:27 AM) Link
Probably not useful, but it may be interesting to test some things.



Structure of the EEPROM dump (512 bytes)
----------------------------------------
----------------------------------------
56 bytes - Save Data 1
56 bytes - Save Data 1 (backup)
56 bytes - Save Data 2
56 bytes - Save Data 2 (backup)
56 bytes - Save Data 3
56 bytes - Save Data 3 (backup)
56 bytes - Save Data 4
56 bytes - Save Data 4 (backup)
64 bytes - Padding / random data?

The game seems to check if the checksum of the main save data is valid, if it isn't, then it tries to load the backup, and if it's also invalid, it deletes the save data.

Save Data (56 bytes each)
-------------------------
-------------------------

Settings
--------
Byte 9 - Bit 1: Cap stolen by snowman
Byte 9 - Bit 2: Cap stolen by bird
Byte 9 - Bit 3: Cap stolen by monkey
Byte 9 - Bit 5: 3rd floor (50 star) door
Byte 10 - Bit 1: Unknown. Seems to be set when opening the DDR/BitFS room?
Byte 10 - Bit 2: Water level outside the castle
Byte 10 - Bit 3: Princess secret slide door
Byte 10 - Bit 4: Whomp's Fortress door
Byte 10 - Bit 5: Cool, Cool Mountain door
Byte 10 - Bit 6: Jolly Roger Bay door
Byte 10 - Bit 7: Bowser in the dark world (8 star) door
Byte 10 - Bit 8: Bowser in the fire sea (30 star) door
Byte 11 - Bit 1: Valid game (Game is empty otherwise)
Byte 11 - Bit 2: Wing cap switch
Byte 11 - Bit 3: Metal cap switch
Byte 11 - Bit 4: Vanish cap switch
Byte 11 - Bit 5: Bowser in the dark world key (disabled when the door is opened)
Byte 11 - Bit 6: Bowser in the fire sea key (disabled when the door is opened)
Byte 11 - Bit 7: Basement door open
Byte 11 - Bit 8: 2nd floor door open

Stars
-----
Byte n: Bit 1/2/3/4/5/6/7 - Stars 1/2/3/4/5/6/7
Byte n + 1: Bit 8 - Cannon

Bob-omb Battlefield: n = 12
Whomp's Fortress: n = 13
Jolly Roger Bay: n = 14
Cool, Cool mountain: n = 15
Big Boo's Haunt: n = 16
Hazy Maze Cave: n = 17
Lethal Lava Land: n = 18
Shifting Sand Land: n = 19
Dire, Dire Docks: n = 20
Slowman's Land: n = 21
Wet-Dry World: n = 22
Tall, Tall Mountain: n = 23
Tiny-Huge Island: n = 24
Tick Tock Clock: n = 25
Rainbow Ride: n = 26

Secret stars
------------
Byte 8: Bit 1 - Toad near Hazy Maze Cave
Byte 8: Bit 2 - Toad near Tall, Tall Mountain
Byte 8: Bit 3 - Toad near Tick Tock Clock
Byte 8: Bit 4 - MIPS 1
Byte 8: Bit 5 - MIPS 2
Byte 27: Bit 1 - Bowser in the dark world*
Byte 28: Bit 1 - Bowser in the fire sea
Byte 29: Bit 1 - Bowser in the sky
Byte 30: Bit 1 - Princess slide
Byte 30: Bit 2 - Princess slide 21'
Byte 31: Bit 1 - Metal cap star
Byte 32: Bit 1 - Wing cap star
Byte 33: Bit 1 - Vanish cap star
Byte 34: Bit 1 - Flying special level
Byte 35: Bit 8 - Flying special level (cannon)
Byte 35: Bit 1 - Aquarium

* = Uses the same byte as the Rainbow Ride cannon!

"Unused" stars
--------------
All the bytes of the stars (8 + 12 to 35), plus byte 36, can be used to store stars. The stars should be saved in the low 7 bits, and the high bit is used to store the cannon flag.

The maximum number of stars (in the save file) is 26 * 7 = 182.

Coins
-----
The coins are saved in:

Bob-omb Battlefield: Byte 37
Whomp's Fortress: Byte 38
Jolly Roger Bay: Byte 39
Cool, Cool mountain: Byte 40
Big Boo's Haunt: Byte 41
Hazy Maze Cave: Byte 42
Lethal Lava Land: Byte 43
Shifting Sand Land: Byte 44
Dire, Dire Docks: Byte 45
Slowman's Land: Byte 46
Wet-Dry World: Byte 47
Tall, Tall Mountain: Byte 48
Tiny-Huge Island: Byte 49
Tick Tock Clock: Byte 50
Rainbow Ride: Byte 51

Checksum
--------
52: 2 bytes - Always 0x4441?
54: 2 bytes - Checksum-16 (Sum of all bytes to a 16-bit integer) of the data (from 0 to 54).

Unknown or unused
-----------------
Bytes 0 to 7.
Some bits, probably unused.

MarIO0
Member
Level: 14


Posts: 2/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-05-09 06:49:13 PM, in Mario 64 'C' header files (last edited by MarIO0 at 04-13-10 07:17 PM) Link
Mario Y speed: 0x8033B1BC (IEEE 32-bit float) -> 0x4C inside mario _ obj.
Mario X speed: 0x8033B1C4 (IEEE 32-bit float) -> 0x54 inside mario _ obj.

Here's a GS code that sets the X speed to 400.0.



8133B1C4 43C8
8133B1C6 0000



(Works best when flying).

EDIT: Fix'd
MarIO0
Member
Level: 14


Posts: 3/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-06-09 11:40:42 PM, in Mario's current action (RAM values) Link
Simple D program that finds SOME Mario actions.



import std.stdio;
import std.file;

int main(string[] args)
{
byte[] marioRom;

// Title
writeln("MarioActionFinder v1.0");
writeln("----------------------");
writeln("Usage: MarioActionFinder mario.z64");
writeln();

// Check arguments
if (args.length != 2)
{
writeln("ERROR: Invalid argument count.");
return -1;
}

// Read the ROM
marioRom = cast(byte[])std.file.read(args[1]);

// Find the opcodes
for (size_t i = 0; i <= (marioRom.length - 0x10); i++)
{
// 0x3C 0x01 0xAA 0xBB = LUI AT, 0xAABB
// 0x34 0x21 0xCC 0xDD = ORI AT, AT, 0xCCDD
// 0x12 0x01 0xEE 0xFF = BEQ S0, AT, ActionHandler
// 0x00 0x00 0x00 0x00 = NOP
if (
marioRom[i+0x00] == 0x3C && marioRom[i+0x01] == 0x01 && // LUI
marioRom[i+0x04] == 0x34 && marioRom[i+0x05] == 0x21 && // ORI
marioRom[i+0x08] == 0x12 && marioRom[i+0x09] == 0x01 && // BEQ
marioRom[i+0x0C] == 0x00 && marioRom[i+0x0D] == 0x00 && // NOP
marioRom[i+0x0E] == 0x00 && marioRom[i+0x0F] == 0x00 // NOP
)
{
writefln("Offset: %.8X | Action %.2X%.2X%.2X%.2X",
i, // Offset
marioRom[i + 0x02], marioRom[i + 0x03], // 0xAA 0xBB
marioRom[i + 0x06], marioRom[i + 0x07] // 0xCC 0xDD
);
}
}

return 0;
}

MarIO0
Member
Level: 14


Posts: 4/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-09-09 01:44:07 PM, in Stuff inside the checksum protected area (Title Screen, etc.) (last edited by MarIO0 at 09-09-09 01:49 PM) Link
Originally posted by VL-Tone


Now if we were to relocate this table where we have more space, we could probably have up to 256 different kind of items available for "!" boxes.




The memory address of the table is loaded by the 2 instructions at 0x0x0007C8E0 (ROM).

I've tried to change it's location, but the emulator hangs after I break the box, and when I look at the memory in Nemu64, it looks like it didn't load the part of the ROM where I put the table.
MarIO0
Member
Level: 14


Posts: 5/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-10-09 11:49:08 AM, in Stuff inside the checksum protected area (Title Screen, etc.) Link
Originally posted by messiaen
Originally posted by MarIO0
Originally posted by VL-Tone


Now if we were to relocate this table where we have more space, we could probably have up to 256 different kind of items available for "!" boxes.




The memory address of the table is loaded by the 2 instructions at 0x0x0007C8E0 (ROM).

I've tried to change it's location, but the emulator hangs after I break the box, and when I look at the memory in Nemu64, it looks like it didn't load the part of the ROM where I put the table.


With this hack, you can easily set a region of the ROM to be loaded in extended memory hack. Just changing the pointer loaded in register A0 will work. When copying the table, remember that the last empty entry, indexed 0x63, is also part of it. If you remove it, any invalid value (not part of the table) for the box content will make the game stuck on an infinite loop.

The table can be expanded as much as you want, however you'll have to keep 0x63 as the last entry. This doesn't mean you can't use higher values than 0x63, this is what I mean:

[..]
62 00 04 7A 13 00 07 F8 -- Star 4
64 00 05 7A 13 00 07 F8 -- Star 5
65 00 05 7A 13 00 07 F8 -- Star 5
63 00 00 00 00 00 00 00 -- Last entry, empty box

That's because instead of multiplying the table index by the size of an entry lenght, the function uses an while loop to match the number to its content, so they don't have to be sequential.

Also, something important to keep in mind is that:

LUI A0, 0x8033
ADDIU A0, A0, 0x8BA0

is different from

LUI A0, 0x8033
ORI A0, A0, 0x8BA0

because of the signed addition. In the first case, A0 will be 0x80328BA0 while in the second case it will be 0x80338BA0. Not that this happens in this specific table case since the number being added is less than 0x8000, but it's always to good to be alert when pointers are loaded using LUI + ADDIU instead of LUI + ORI.


I did manage to load the table in an unused but loaded part of the ROM shortly after my post.

About the ADDIU instruction, I had this problem (I'm very new to MIPS assembly, but fortunately it isn't very hard to learn since I'm already decent with x86 assembly). Also fortunately, ADDIU and ORI take the same parameters, so just changing the opcode works.

About the "Extended Memory support", it looks very interesting. I'll have to look at it

Also, what debugger/disassembler do you use? I use Nemu64 and IDA Pro, but Nemu64 can't load "extended" ROMs.
MarIO0
Member
Level: 14


Posts: 6/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 10-27-09 07:18:10 PM, in Mario 64 Movie Maker "A XP Tool Which Is Well' Only Works In XP" Link
Without having looked at the program, I believe that W7 and Vista has restrictions on WriteProcessMemory(), so that may be the problem.
MarIO0
Member
Level: 14


Posts: 7/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 01-05-10 09:52:28 PM, in Hidden coins Link
Has anyone ever tried to make some kind of program, to try to detect if there are more unknown "hidden" coins, like the ones on SL or THI? I just ask to see if it has been attempted before, if it hasn't, I may try it.
MarIO0
Member
Level: 14


Posts: 8/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-23-10 09:37:19 AM, in SM64 Gameshark/Hex Stuff (last edited by MarIO0 at 06-23-10 10:16 AM) Link
What's the best way to do a 32-bit comparison on GameShark?

Here's what I have now, but it requires a lot of codes and a temporal variable:



81001714 0000 // Clear 16-bit temporal variable
D133B1C4 0000 // If first part of speed is 0
80001714 0001 // Set the first byte of the temporal variable
D133B1C6 0000 // If the second part of the speed is 0
80001715 0001 // Set the second byte of the temporal variable
D1001714 0101 // Check if both conditions matched (speed = 0 as 32-bit)
8033B177 0000 // Remove cap from Mario
D3001714 0101 // Else
8033B177 0019 // Wing cap



EDIT: This can also be seen as "what's the best way to implement && and || in GameShark?". The example above can be seen as doing "if LOWORD(speed) == 0 && HIWORD(speed) == 0", just two 16-bit comparisons
MarIO0
Member
Level: 14


Posts: 9/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-23-10 01:46:26 PM, in SM64 Gameshark/Hex Stuff (last edited by MarIO0 at 06-23-10 01:52 PM) Link
Originally posted by messiaen
I don't know much about complex Gameshark codes (try reading the "EnHacklopedia" at kodewerx.org), but if your are comparing to 0 I think you could accomplish this with an optimized ASM hack (note register usage and delay slot exploit) such as:

LUI V0, 0x8034
BNEQ R0, AT, DontRemoveCap
LW AT, 0xB1C4 (V0) /* load speed */
SW R0, 0xB177 (V0) /* remove cap*/
DontRemoveCap:
//

Number of codes would be higher, but you can get more flexibility plus patch it more easily into a ROM.


This is for an experiment I'm working on, to create a really simple programming-like language to create custom Mario 64 GameShark cheats. So I can't use optimized ASM code like this one.
I could generate ASM code, but it doesn't give any benefit to the user, the codes would be longer, and it would require restarting the emulator to get it to work.

This is the code above in the syntax for that language that I currently have in mind:


if speed == 0
cap = wing_cap
else
cap = none
end



This is the syntax I have tought of:
Conditional expressions:
If, like C, no brackets required: if ((A == B && C != D) || (E == F))
Else, no "else if" allowed: else
End: end

Assignement:: Simply A = B

Values can be either a value that is compatible with the type of the item (e.g. action = 0x12345678, allowed because "action" is of type uint) or a "named value" (e.g. action = flying) (the items, addresses, types and named values would be declared in an external and user-editable file).

Implementing everything other than "if" is straightforward. "if" is a bit more complicated because of the difficulty to parse it (everything else can be just parsed by regular expressions) and the difficulty to generate GS codes for it.

I don't know if it will be really useful, because it's very limited, but I think it may be useful to make cheats quickly without having to lookup every time an address list, convert the floating point number to bytes, etc.

For example, something like a moon jump cheat would be very easy to implement:


if buttons == L
action = single_jump
yspeed = 20
end



(BTW, something like this doesn't already exist... right?)
MarIO0
Member
Level: 14


Posts: 10/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-23-10 04:16:52 PM, in SM64 Gameshark/Hex Stuff (last edited by MarIO0 at 06-23-10 04:25 PM) Link
Originally posted by messiaen
Sounds interesting, but I'm not sure if the Gameshark can handle multiple compares, or even nesting the conditionals. Again, you should ask people at kodewerx.org, they know everything about the Gameshark.


You can do AND and OR operations using the same trick I did above. For example, this code:



81001714 0000 // action == single_jump -> 0x1714 = 0x0101
D133B17C 0300
80001714 0001
D133B17E 0880
80001715 0001

81001716 0101 // speed != 0 -> 0x1716 = 0x0101
D133B1C4 0000
80001716 0000
D133B1C6 0000
80001717 0000

81001718 0000 // action == single_jump && speed != 0 -> 0x1718 = 0x0101
D1001714 0101
80001718 0001
D1001716 0101
80001719 0001

D1001718 0101
8033B177 0019
D3001718 0101
8033B177 0000



Would be equivalent to:


if action == single_jump && speed != 0
cap = wing_cap
else
cap = none
end



I use the Enhacklopedia as a reference for the Gameshark code types, and it doesn't look like it's possible to do any of those operations directly.

One thing I've tought is that if I could create some code that jumps to a section of the RAM every frame, and make the code generator make codes for this RAM section (I haven't tested if it's possible to execute code from the RAM), this would allow implementing a few basic operations and simplify the conditionals code without having to restart the emulator every time.

(I don't want to make the language complex... since you can already do complex code using C. The aim is to make something really simple so anyone, even non-programmers, can use it).
MarIO0
Member
Level: 14


Posts: 11/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-23-10 08:49:49 PM, in SM64 Gameshark/Hex Stuff Link
Originally posted by messiaen
Originally posted by MarIO0
(I haven't tested if it's possible to execute code from the RAM).

On the N64, code is always executed from RAM.

But that approach may fail on emulators because they mostly can't handle self-modyfing code, especially on the recompiler mode (once it gets executed for the first fime, you can change the instructions at RAM but the older code will run instead).

Edit: Oh wait, sorry, I think I understood your post incorrectly. Still, the warning about self-modyfing code is useful.


I didn't remember about self-modifying code (this always gave me problems in Nemu64 while making cheats), so it would be impossible to do this unless emulators don't JIT the code in RAM, or there's some trick to avoid them from JITing, or I use an interpreter (maybe that is a good idea, since it would reduce the size of the code).
MarIO0
Member
Level: 14


Posts: 12/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-25-10 01:57:25 PM, in SM64 Gameshark/Hex Stuff Link
Originally posted by HyperHacker
(Or hack Lua into the emulator. )


That would be awesome, but the only problem is that I have no idea about how to do it or how it's typically done, plus Project64 is closed source so I wouldn't be able to do it for it. On Mupen64Plus it seems a good idea, since it's open source and it's available for Windows now. I'll look at it anyway

It would also be possible to do it by reading the RDRAM directly with an external program (ReadProcessMemory, etc.) but that's harder.
MarIO0
Member
Level: 14


Posts: 13/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 06-26-10 10:04:06 PM, in SM64 Gameshark/Hex Stuff Link
Well I've been trying to add Lua to mupen64plus and I've just got "Hello World" working now, and it wasn't difficult to get it working because FCEUX and Snes9x have Lua (both have the same code) and I basically just copied it.

The only thing I don't know is how the licenses for the code work, the Lua engine seems to have been initially added to Snes9x (which has a custom license, I don't know if it's GPL-compatible), but FCEUX is GPL'd and uses it so I guess that it's OK, but I don't know for sure.
MarIO0
Member
Level: 14


Posts: 14/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 09-10-10 03:39:39 AM, in Super Mario 64: The Missing Stars RELEASED! (Download link on first post) Link

If you can't play using Mupen64 on Windows

(The game crashes instantly after booting)

Open the ROM in an hexadecimal editor (or a text editor that preserves the binary data), and find near the beginning of the file:

M64: TheMissingStars


And change the : to any other normal character, like _.

(This happens because file names on Windows can't contain the : character, and Mupen64 crashes when trying to save the EEPROM because of no checks to see if the file can be opened).

Hopefully this can be fixed in a new release. Dunno if it has been already reported.

(I have been able to play using Mupen64 in Windows without doing this, but I don't remember what I did or why it doesn't work for me without this hack now).
MarIO0
Member
Level: 14


Posts: 15/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 10-23-10 04:42:54 PM, in Mario64 Gameshark Patcher Link
What kind of Gamesharks can this program patch? Patches to the ROM, patches to the RAM, or both?
MarIO0
Member
Level: 14


Posts: 16/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 10-24-10 03:14:27 AM, in Mario64 Gameshark Patcher Link
Originally posted by ShenoxVII
Originally posted by Metal_Man88
Currently it just deciphers Gameshark codes into the actual locations of where the rom is being edited; then you have to go in a hex editor and do the rest, if I read it correctly.



Yea, I'm still looking for a way to turn program into hex viewing, then make it go to the offset of textbox 2 and then change next 2 bytes to the value's then save it into the rom. Much work to be done, the biggest block in the road for me is making a hex editor inside a program that is already a advance calculator and gameshark code fixer sort of, sense it can translate older gamesharks into 3.0 version ones, which is the kind pj64. Iv searched google, and tried many possible codes but I can't get it to correctly open a program, view in "&H" which tells the program to view or see something in hex, then to have it fully view the file, say a rom. It will only show the first byte of the full rom. It's getting annoying that I can't do anything to stop this.


Mmm, sorry for making you look like a noob, but you absolutely don't need an hex editor to modify a file in any programming language I know. Assuming you're using C# (which is quite probable), it's as easy as:



byte[] rom = File.ReadAllBytes("C:/m64.z64");
rom[0x1234] = (byte)0x80; // Change byte at position 0x1234 to value 0x80
// Other operations
File.WriteAllBytes("C:/modified_m64.z64", rom);

MarIO0
Member
Level: 14


Posts: 17/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 10-24-10 10:26:46 AM, in Mario64 Gameshark Patcher (last edited by MarIO0 at 10-24-10 10:31 AM) Link
Originally posted by ShenoxVII
Originally posted by MarIO0


Mmm, sorry for making you look like a noob, but you absolutely don't need an hex editor to modify a file in any programming language I know. Assuming you're using C# (which is quite probable), it's as easy as:



byte[] rom = File.ReadAllBytes("C:/m64.z64");
rom[0x1234] = (byte)0x80; // Change byte at position 0x1234 to value 0x80
// Other operations
File.WriteAllBytes("C:/modified_m64.z64", rom);



Thanks, I never done my own project or program using C/C#/C++ or anything like that, I only used C programing language when I was dealing with emulation and some rom hacks. With VB it's probably not as open to what I could do but it is much easier in my opinion. I suppose because I'm not really more then a year of experience with java, C, and VB when most people like frauber or VLtone have like yearS of experience. Is there anyway I could launch two different programing languages into one project file to work all as one problem, and just make it so my gs to offset button can access the C written program and then the C written program can also access the strings I used in VB so I could get the offset and value?



From the screenshot it looks like you may be using VB.NET, in this case you have the functions I used above available in the .NET standard library(1, 2). If you're using an older VB then I have no idea, but I'm sure that there's some way to do it.

About mixing different languages, I wouldn't do it, but if you want to do it anyway: If you're using .NET, I believe you can freely mix any .NET language (like C# and VB.NET) in a project. If you're not using .NET, it gets a lot more complicated, but you can use an external process, or you can also use C libraries with VB.
MarIO0
Member
Level: 14


Posts: 18/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 11-13-10 10:46:14 AM, in N64 Sound Tool Link
Thanks! I once attempted to do something similar, but pretty much failed (got the decoding working, though). Did you figure out the decoding code from SRip or from something different?

Also, I found in the VGMStream source that there are some Gamecube formats that are a bit similar to the algorithm for the N64 one (the << 0x0b >> 0x0b part), but not equal. Unfortunately VGMStream only has decoders, so it doesn't look like there's a predictor algorithm.

Going to look into it.
MarIO0
Member
Level: 14


Posts: 19/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 11-14-10 01:29:45 PM, in N64 Sound Tool (last edited by MarIO0 at 11-14-10 01:35 PM) Link
BTW, to anyone who's looking at the algorithm, at this part



if (i>0)
{
for(int x=i-1; x>-1; x--)
{
total += ( tmp[((i-1)-x)] * pred2[x] );
//printf("sample: %x - pred: %x - _smp: %x\n" , ((i-1)-x) , pred2[x] , tmp[((i-1)-x)]);
}
}



What it's doing is the following:



* i = 0 -> Tmp[] * Pred2 []
* i = 1 -> Tmp[0] * Pred2 [0]
* i = 2 -> Tmp[0 1] * Pred2 [1 0]
* i = 3 -> Tmp[0 1 2] * Pred2 [2 1 0]
* i = 4 -> Tmp[0 1 2 3] * Pred2 [3 2 1 0]
* i = 5 -> Tmp[0 1 2 3 4] * Pred2 [4 3 2 1 0]
* i = 6 -> Tmp[0 1 2 3 4 5] * Pred2 [5 4 3 2 1 0]
* i = 7 -> Tmp[0 1 2 3 4 5 6] * Pred2 [6 5 4 3 2 1 0]

(E.g. i = 2 -> Tmp[0] * Pred2[1] + Tmp[1] * Pred2[0]).



Hope it looks more logic now. Still don't understand why it's this way.

EDIT: I would rewrite it this way (WARNING: Code untested!)



for (int x = 0; x < i; x++)
{
total += tmp[x] * pred2[i-x-1];
}

MarIO0
Member
Level: 14


Posts: 20/43
EXP: 12194
For next: 877

Since: 09-03-09


Since last post: 628 days
Last activity: 404 days

Posted on 12-23-10 05:19:43 PM, in Super Mario 64 Gameshark code Patcher (STABLE RELEASE) (last edited by MarIO0 at 12-23-10 05:20 PM) Link
Originally posted by messiaen
Yes, all game code is static, there isn't any kind of overlay such as in the Zelda-type filesystem.

But the cool thing would be to write a Gameshark interpreter so that all code types could be patched, including the ones that check for input or compare values .


That would be pretty simple, because each GS code has more-or-less a direct translation to MIPS assembler. It's just a matter of converting the GS codes to MIPS assembler, finding an empty area in the ROM to put them, and adding a call to that area in the game main loop. It requires some MIPS assembler knowledge. < /hint >
Pages: 1 2 3
Jul - Posts by MarIO0






Rusted Logic

Acmlmboard - 07/23/2013 b378.03
©2000-2013 Acmlm, Xkeeper, Inuyasha, et al.
bargaining-tycoon
31 database queries, 46 query cache hits.
Query execution time:  0.047634 seconds
Script execution time:  0.084759 seconds
Total render time:  0.132393 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 94 column 11 - Warning: <form> isn't allowed in <table> elements
line 93 column 10 - Info: <table> previously mentioned
line 95 column 11 - Warning: missing <tr>
line 95 column 124 - Warning: missing </font> before </td>
line 99 column 16 - Warning: plain text isn't allowed in <tr> elements
line 95 column 11 - Info: <tr> previously mentioned
line 100 column 68 - Warning: <nobr> is not approved by W3C
line 100 column 68 - Warning: missing </nobr> before </td>
line 117 column 68 - Warning: <nobr> is not approved by W3C
line 117 column 68 - Warning: missing </nobr> before <tr>
line 141 column 35 - Warning: missing <tr>
line 141 column 50 - Warning: missing </font> before </td>
line 141 column 133 - Warning: missing </font> before </table>
line 143 column 35 - Warning: missing <tr>
line 143 column 98 - Warning: unescaped & or unknown entity "&page"
line 143 column 132 - Warning: unescaped & or unknown entity "&page"
line 143 column 50 - Warning: missing </font> before </td>
line 143 column 167 - Warning: missing </font> before </table>
line 150 column 9 - Warning: <div> isn't allowed in <tr> elements
line 149 column 9 - Info: <tr> previously mentioned
line 152 column 9 - Warning: missing <tr>
line 166 column 13 - Warning: missing <tr>
line 167 column 27 - Warning: <nobr> is not approved by W3C
line 293 column 15 - Warning: missing <td>
line 294 column 9 - Warning: <div> isn't allowed in <tr> elements
line 293 column 15 - Info: <tr> previously mentioned
line 296 column 9 - Warning: missing <tr>
line 310 column 13 - Warning: missing <tr>
line 311 column 27 - Warning: <nobr> is not approved by W3C
line 327 column 15 - Warning: missing <td>
line 328 column 9 - Warning: <div> isn't allowed in <tr> elements
line 327 column 15 - Info: <tr> previously mentioned
line 330 column 9 - Warning: missing <tr>
line 344 column 13 - Warning: missing <tr>
line 345 column 27 - Warning: <nobr> is not approved by W3C
line 381 column 1108 - Warning: unescaped & which should be written as &amp;
line 381 column 1109 - Warning: unescaped & which should be written as &amp;
line 381 column 1140 - Warning: unescaped & which should be written as &amp;
line 381 column 1141 - Warning: unescaped & which should be written as &amp;
line 382 column 1194 - Warning: unescaped & which should be written as &amp;
line 382 column 1195 - Warning: unescaped & which should be written as &amp;
line 382 column 1226 - Warning: unescaped & which should be written as &amp;
line 382 column 1227 - Warning: unescaped & which should be written as &amp;
line 383 column 1280 - Warning: unescaped & which should be written as &amp;
line 383 column 1281 - Warning: unescaped & which should be written as &amp;
line 383 column 1312 - Warning: unescaped & which should be written as &amp;
line 383 column 1313 - Warning: unescaped & which should be written as &amp;
line 384 column 1366 - Warning: unescaped & which should be written as &amp;
line 384 column 1367 - Warning: unescaped & which should be written as &amp;
line 384 column 1398 - Warning: unescaped & which should be written as &amp;
line 384 column 1399 - Warning: unescaped & which should be written as &amp;
line 385 column 1452 - Warning: unescaped & which should be written as &amp;
line 385 column 1453 - Warning: unescaped & which should be written as &amp;
line 400 column 15 - Warning: missing <td>
line 401 column 9 - Warning: <div> isn't allowed in <tr> elements
line 400 column 15 - Info: <tr> previously mentioned
line 403 column 9 - Warning: missing <tr>
line 417 column 13 - Warning: missing <tr>
line 418 column 27 - Warning: <nobr> is not approved by W3C
line 430 column 15 - Warning: missing <td>
line 431 column 9 - Warning: <div> isn't allowed in <tr> elements
line 430 column 15 - Info: <tr> previously mentioned
line 433 column 9 - Warning: missing <tr>
line 447 column 13 - Warning: missing <tr>
line 448 column 27 - Warning: <nobr> is not approved by W3C
line 492 column 15 - Warning: missing <td>
line 493 column 9 - Warning: <div> isn't allowed in <tr> elements
line 492 column 15 - Info: <tr> previously mentioned
line 495 column 9 - Warning: missing <tr>
line 509 column 13 - Warning: missing <tr>
line 510 column 27 - Warning: <nobr> is not approved by W3C
line 514 column 15 - Warning: missing <td>
line 515 column 9 - Warning: <div> isn't allowed in <tr> elements
line 514 column 15 - Info: <tr> previously mentioned
line 517 column 9 - Warning: missing <tr>
line 531 column 13 - Warning: missing <tr>
line 532 column 27 - Warning: <nobr> is not approved by W3C
line 536 column 15 - Warning: missing <td>
line 537 column 9 - Warning: <div> isn't allowed in <tr> elements
line 536 column 15 - Info: <tr> previously mentioned
line 539 column 9 - Warning: missing <tr>
line 553 column 13 - Warning: missing <tr>
line 554 column 27 - Warning: <nobr> is not approved by W3C
line 572 column 811 - Warning: unescaped & which should be written as &amp;
line 572 column 812 - Warning: unescaped & which should be written as &amp;
line 572 column 899 - Warning: unescaped & which should be written as &amp;
line 572 column 900 - Warning: unescaped & which should be written as &amp;
line 574 column 15 - Warning: missing <td>
line 575 column 9 - Warning: <div> isn't allowed in <tr> elements
line 574 column 15 - Info: <tr> previously mentioned
line 577 column 9 - Warning: missing <tr>
line 591 column 13 - Warning: missing <tr>
line 592 column 27 - Warning: <nobr> is not approved by W3C
line 619 column 1401 - Warning: unescaped & which should be written as &amp;
line 619 column 1402 - Warning: unescaped & which should be written as &amp;
line 641 column 15 - Warning: missing <td>
line 642 column 9 - Warning: <div> isn't allowed in <tr> elements
line 641 column 15 - Info: <tr> previously mentioned
line 644 column 9 - Warning: missing <tr>
line 658 column 13 - Warning: missing <tr>
line 659 column 27 - Warning: <nobr> is not approved by W3C
line 678 column 807 - Warning: unescaped & which should be written as &amp;
line 678 column 808 - Warning: unescaped & which should be written as &amp;
line 692 column 1097 - Warning: unescaped & which should be written as &amp;
line 692 column 1098 - Warning: unescaped & which should be written as &amp;
line 705 column 15 - Warning: missing <td>
line 706 column 9 - Warning: <div> isn't allowed in <tr> elements
line 705 column 15 - Info: <tr> previously mentioned
line 708 column 9 - Warning: missing <tr>
line 722 column 13 - Warning: missing <tr>
line 723 column 27 - Warning: <nobr> is not approved by W3C
line 734 column 15 - Warning: missing <td>
line 735 column 9 - Warning: <div> isn't allowed in <tr> elements
line 734 column 15 - Info: <tr> previously mentioned
line 737 column 9 - Warning: missing <tr>
line 751 column 13 - Warning: missing <tr>
line 752 column 27 - Warning: <nobr> is not approved by W3C
line 760 column 15 - Warning: missing <td>
line 761 column 9 - Warning: <div> isn't allowed in <tr> elements
line 760 column 15 - Info: <tr> previously mentioned
line 763 column 9 - Warning: missing <tr>
line 777 column 13 - Warning: missing <tr>
line 778 column 27 - Warning: <nobr> is not approved by W3C
line 784 column 15 - Warning: missing <td>
line 785 column 9 - Warning: <div> isn't allowed in <tr> elements
line 784 column 15 - Info: <tr> previously mentioned
line 787 column 9 - Warning: missing <tr>
line 801 column 13 - Warning: missing <tr>
line 802 column 27 - Warning: <nobr> is not approved by W3C
line 818 column 15 - Warning: missing <td>
line 819 column 9 - Warning: <div> isn't allowed in <tr> elements
line 818 column 15 - Info: <tr> previously mentioned
line 821 column 9 - Warning: missing <tr>
line 835 column 13 - Warning: missing <tr>
line 836 column 27 - Warning: <nobr> is not approved by W3C
line 840 column 15 - Warning: missing <td>
line 841 column 9 - Warning: <div> isn't allowed in <tr> elements
line 840 column 15 - Info: <tr> previously mentioned
line 843 column 9 - Warning: missing <tr>
line 857 column 13 - Warning: missing <tr>
line 858 column 27 - Warning: <nobr> is not approved by W3C
line 863 column 987 - Warning: unescaped & or unknown entity "&H"
line 874 column 15 - Warning: missing <td>
line 875 column 9 - Warning: <div> isn't allowed in <tr> elements
line 874 column 15 - Info: <tr> previously mentioned
line 877 column 9 - Warning: missing <tr>
line 891 column 13 - Warning: missing <tr>
line 892 column 27 - Warning: <nobr> is not approved by W3C
line 894 column 74 - Warning: missing </blockquote>
line 912 column 15 - Warning: missing <td>
line 913 column 9 - Warning: <div> isn't allowed in <tr> elements
line 912 column 15 - Info: <tr> previously mentioned
line 915 column 9 - Warning: missing <tr>
line 929 column 13 - Warning: missing <tr>
line 930 column 27 - Warning: <nobr> is not approved by W3C
line 938 column 15 - Warning: missing <td>
line 939 column 9 - Warning: <div> isn't allowed in <tr> elements
line 938 column 15 - Info: <tr> previously mentioned
line 941 column 9 - Warning: missing <tr>
line 955 column 13 - Warning: missing <tr>
line 956 column 27 - Warning: <nobr> is not approved by W3C
line 997 column 15 - Warning: missing <td>
line 998 column 9 - Warning: <div> isn't allowed in <tr> elements
line 997 column 15 - Info: <tr> previously mentioned
line 1000 column 9 - Warning: missing <tr>
line 1014 column 13 - Warning: missing <tr>
line 1015 column 27 - Warning: <nobr> is not approved by W3C
line 1024 column 17 - Warning: discarding unexpected <table>
line 1027 column 35 - Warning: missing <tr>
line 1027 column 98 - Warning: unescaped & or unknown entity "&page"
line 1027 column 132 - Warning: unescaped & or unknown entity "&page"
line 1027 column 50 - Warning: missing </font> before </td>
line 1027 column 167 - Warning: missing </font> before </table>
line 1029 column 35 - Warning: missing <tr>
line 1029 column 50 - Warning: missing </font> before </td>
line 1029 column 133 - Warning: missing </font> before </table>
line 1031 column 17 - Warning: discarding unexpected </textarea>
line 1031 column 28 - Warning: discarding unexpected </form>
line 1031 column 35 - Warning: discarding unexpected </embed>
line 1031 column 43 - Warning: discarding unexpected </noembed>
line 1031 column 53 - Warning: discarding unexpected </noscript>
line 1031 column 64 - Warning: discarding unexpected </noembed>
line 1031 column 74 - Warning: discarding unexpected </embed>
line 1031 column 82 - Warning: discarding unexpected </table>
line 1031 column 90 - Warning: discarding unexpected </table>
line 1040 column 9 - Warning: missing </font> before <table>
line 1056 column 9 - Warning: inserting implicit <font>
line 1068 column 23 - Warning: inserting implicit <font>
line 1075 column 58 - Warning: discarding unexpected </font>
line 1033 column 1 - Warning: missing </center>
line 91 column 9 - Warning: <img> lacks "alt" attribute
line 93 column 10 - Warning: <table> lacks "summary" attribute
line 95 column 63 - Warning: <img> lacks "alt" attribute
line 100 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 100 column 93 - Warning: <img> lacks "alt" attribute
line 117 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 117 column 98 - Warning: <img> lacks "alt" attribute
line 136 column 1 - Warning: <table> lacks "summary" attribute
line 136 column 240 - Warning: <td> attribute "bgcolor" lacks value
line 141 column 17 - Warning: <table> lacks "summary" attribute
line 143 column 17 - Warning: <table> lacks "summary" attribute
line 151 column 9 - Warning: <table> lacks "summary" attribute
line 155 column 22 - Warning: <img> lacks "alt" attribute
line 155 column 63 - Warning: <img> lacks "alt" attribute
line 155 column 112 - Warning: <img> lacks "alt" attribute
line 155 column 162 - Warning: <img> lacks "alt" attribute
line 162 column 15 - Warning: <img> lacks "alt" attribute
line 165 column 11 - Warning: <table> lacks "summary" attribute
line 295 column 9 - Warning: <table> lacks "summary" attribute
line 299 column 22 - Warning: <img> lacks "alt" attribute
line 299 column 63 - Warning: <img> lacks "alt" attribute
line 299 column 112 - Warning: <img> lacks "alt" attribute
line 299 column 162 - Warning: <img> lacks "alt" attribute
line 306 column 15 - Warning: <img> lacks "alt" attribute
line 309 column 11 - Warning: <table> lacks "summary" attribute
line 329 column 9 - Warning: <table> lacks "summary" attribute
line 333 column 22 - Warning: <img> lacks "alt" attribute
line 333 column 63 - Warning: <img> lacks "alt" attribute
line 333 column 112 - Warning: <img> lacks "alt" attribute
line 333 column 162 - Warning: <img> lacks "alt" attribute
line 340 column 15 - Warning: <img> lacks "alt" attribute
line 343 column 11 - Warning: <table> lacks "summary" attribute
line 402 column 9 - Warning: <table> lacks "summary" attribute
line 406 column 22 - Warning: <img> lacks "alt" attribute
line 406 column 63 - Warning: <img> lacks "alt" attribute
line 406 column 112 - Warning: <img> lacks "alt" attribute
line 406 column 162 - Warning: <img> lacks "alt" attribute
line 413 column 15 - Warning: <img> lacks "alt" attribute
line 416 column 11 - Warning: <table> lacks "summary" attribute
line 432 column 9 - Warning: <table> lacks "summary" attribute
line 436 column 22 - Warning: <img> lacks "alt" attribute
line 436 column 63 - Warning: <img> lacks "alt" attribute
line 436 column 112 - Warning: <img> lacks "alt" attribute
line 436 column 162 - Warning: <img> lacks "alt" attribute
line 443 column 15 - Warning: <img> lacks "alt" attribute
line 446 column 11 - Warning: <table> lacks "summary" attribute
line 488 column 2794 - Warning: <img> proprietary attribute value "absmiddle"
line 488 column 2794 - Warning: <img> lacks "alt" attribute
line 494 column 9 - Warning: <table> lacks "summary" attribute
line 498 column 22 - Warning: <img> lacks "alt" attribute
line 498 column 63 - Warning: <img> lacks "alt" attribute
line 498 column 112 - Warning: <img> lacks "alt" attribute
line 498 column 162 - Warning: <img> lacks "alt" attribute
line 505 column 15 - Warning: <img> lacks "alt" attribute
line 508 column 11 - Warning: <table> lacks "summary" attribute
line 516 column 9 - Warning: <table> lacks "summary" attribute
line 520 column 22 - Warning: <img> lacks "alt" attribute
line 520 column 63 - Warning: <img> lacks "alt" attribute
line 520 column 112 - Warning: <img> lacks "alt" attribute
line 520 column 162 - Warning: <img> lacks "alt" attribute
line 527 column 15 - Warning: <img> lacks "alt" attribute
line 530 column 11 - Warning: <table> lacks "summary" attribute
line 538 column 9 - Warning: <table> lacks "summary" attribute
line 542 column 22 - Warning: <img> lacks "alt" attribute
line 542 column 63 - Warning: <img> lacks "alt" attribute
line 542 column 112 - Warning: <img> lacks "alt" attribute
line 542 column 162 - Warning: <img> lacks "alt" attribute
line 549 column 15 - Warning: <img> lacks "alt" attribute
line 552 column 11 - Warning: <table> lacks "summary" attribute
line 576 column 9 - Warning: <table> lacks "summary" attribute
line 580 column 22 - Warning: <img> lacks "alt" attribute
line 580 column 63 - Warning: <img> lacks "alt" attribute
line 580 column 112 - Warning: <img> lacks "alt" attribute
line 580 column 162 - Warning: <img> lacks "alt" attribute
line 587 column 15 - Warning: <img> lacks "alt" attribute
line 590 column 11 - Warning: <table> lacks "summary" attribute
line 643 column 9 - Warning: <table> lacks "summary" attribute
line 647 column 22 - Warning: <img> lacks "alt" attribute
line 647 column 63 - Warning: <img> lacks "alt" attribute
line 647 column 112 - Warning: <img> lacks "alt" attribute
line 647 column 162 - Warning: <img> lacks "alt" attribute
line 654 column 15 - Warning: <img> lacks "alt" attribute
line 657 column 11 - Warning: <table> lacks "summary" attribute
line 707 column 9 - Warning: <table> lacks "summary" attribute
line 711 column 22 - Warning: <img> lacks "alt" attribute
line 711 column 63 - Warning: <img> lacks "alt" attribute
line 711 column 112 - Warning: <img> lacks "alt" attribute
line 711 column 162 - Warning: <img> lacks "alt" attribute
line 718 column 15 - Warning: <img> lacks "alt" attribute
line 721 column 11 - Warning: <table> lacks "summary" attribute
line 736 column 9 - Warning: <table> lacks "summary" attribute
line 740 column 22 - Warning: <img> lacks "alt" attribute
line 740 column 63 - Warning: <img> lacks "alt" attribute
line 740 column 112 - Warning: <img> lacks "alt" attribute
line 740 column 162 - Warning: <img> lacks "alt" attribute
line 747 column 15 - Warning: <img> lacks "alt" attribute
line 750 column 11 - Warning: <table> lacks "summary" attribute
line 754 column 186 - Warning: <img> proprietary attribute value "absmiddle"
line 754 column 186 - Warning: <img> lacks "alt" attribute
line 756 column 567 - Warning: <img> proprietary attribute value "absmiddle"
line 756 column 567 - Warning: <img> lacks "alt" attribute
line 762 column 9 - Warning: <table> lacks "summary" attribute
line 766 column 22 - Warning: <img> lacks "alt" attribute
line 766 column 63 - Warning: <img> lacks "alt" attribute
line 766 column 112 - Warning: <img> lacks "alt" attribute
line 766 column 162 - Warning: <img> lacks "alt" attribute
line 773 column 15 - Warning: <img> lacks "alt" attribute
line 776 column 11 - Warning: <table> lacks "summary" attribute
line 786 column 9 - Warning: <table> lacks "summary" attribute
line 790 column 22 - Warning: <img> lacks "alt" attribute
line 790 column 63 - Warning: <img> lacks "alt" attribute
line 790 column 112 - Warning: <img> lacks "alt" attribute
line 790 column 162 - Warning: <img> lacks "alt" attribute
line 797 column 15 - Warning: <img> lacks "alt" attribute
line 800 column 11 - Warning: <table> lacks "summary" attribute
line 820 column 9 - Warning: <table> lacks "summary" attribute
line 824 column 22 - Warning: <img> lacks "alt" attribute
line 824 column 63 - Warning: <img> lacks "alt" attribute
line 824 column 112 - Warning: <img> lacks "alt" attribute
line 824 column 162 - Warning: <img> lacks "alt" attribute
line 831 column 15 - Warning: <img> lacks "alt" attribute
line 834 column 11 - Warning: <table> lacks "summary" attribute
line 842 column 9 - Warning: <table> lacks "summary" attribute
line 846 column 22 - Warning: <img> lacks "alt" attribute
line 846 column 63 - Warning: <img> lacks "alt" attribute
line 846 column 112 - Warning: <img> lacks "alt" attribute
line 846 column 162 - Warning: <img> lacks "alt" attribute
line 853 column 15 - Warning: <img> lacks "alt" attribute
line 856 column 11 - Warning: <table> lacks "summary" attribute
line 876 column 9 - Warning: <table> lacks "summary" attribute
line 880 column 22 - Warning: <img> lacks "alt" attribute
line 880 column 63 - Warning: <img> lacks "alt" attribute
line 880 column 112 - Warning: <img> lacks "alt" attribute
line 880 column 162 - Warning: <img> lacks "alt" attribute
line 887 column 15 - Warning: <img> lacks "alt" attribute
line 890 column 11 - Warning: <table> lacks "summary" attribute
line 914 column 9 - Warning: <table> lacks "summary" attribute
line 918 column 22 - Warning: <img> lacks "alt" attribute
line 918 column 63 - Warning: <img> lacks "alt" attribute
line 918 column 112 - Warning: <img> lacks "alt" attribute
line 918 column 162 - Warning: <img> lacks "alt" attribute
line 925 column 15 - Warning: <img> lacks "alt" attribute
line 928 column 11 - Warning: <table> lacks "summary" attribute
line 940 column 9 - Warning: <table> lacks "summary" attribute
line 944 column 22 - Warning: <img> lacks "alt" attribute
line 944 column 63 - Warning: <img> lacks "alt" attribute
line 944 column 112 - Warning: <img> lacks "alt" attribute
line 944 column 162 - Warning: <img> lacks "alt" attribute
line 951 column 15 - Warning: <img> lacks "alt" attribute
line 954 column 11 - Warning: <table> lacks "summary" attribute
line 999 column 9 - Warning: <table> lacks "summary" attribute
line 1003 column 22 - Warning: <img> lacks "alt" attribute
line 1003 column 63 - Warning: <img> lacks "alt" attribute
line 1003 column 112 - Warning: <img> lacks "alt" attribute
line 1003 column 162 - Warning: <img> lacks "alt" attribute
line 1010 column 15 - Warning: <img> lacks "alt" attribute
line 1013 column 11 - Warning: <table> lacks "summary" attribute
line 1019 column 419 - Warning: <img> proprietary attribute value "absmiddle"
line 1019 column 419 - Warning: <img> lacks "alt" attribute
line 146 column 17 - Warning: <table> lacks "summary" attribute
line 1027 column 17 - Warning: <table> lacks "summary" attribute
line 1029 column 17 - Warning: <table> lacks "summary" attribute
line 1035 column 1 - Warning: <img> lacks "alt" attribute
line 1036 column 1 - Warning: <img> lacks "alt" attribute
line 1037 column 1 - Warning: <img> lacks "alt" attribute
line 1044 column 9 - Warning: <table> lacks "summary" attribute
line 1046 column 25 - Warning: <img> lacks "alt" attribute
line 1076 column 17 - Warning: <table> lacks "summary" attribute
line 141 column 133 - Warning: trimming empty <font>
line 143 column 167 - Warning: trimming empty <font>
line 997 column 15 - Warning: trimming empty <tr>
line 1027 column 167 - Warning: trimming empty <font>
line 1029 column 133 - Warning: trimming empty <font>
line 153 column 11 - Warning: <a> cannot copy name attribute to id
line 297 column 11 - Warning: <a> cannot copy name attribute to id
line 331 column 11 - Warning: <a> cannot copy name attribute to id
line 404 column 11 - Warning: <a> cannot copy name attribute to id
line 434 column 11 - Warning: <a> cannot copy name attribute to id
line 496 column 11 - Warning: <a> cannot copy name attribute to id
line 518 column 11 - Warning: <a> cannot copy name attribute to id
line 540 column 11 - Warning: <a> cannot copy name attribute to id
line 578 column 11 - Warning: <a> cannot copy name attribute to id
line 645 column 11 - Warning: <a> cannot copy name attribute to id
line 709 column 11 - Warning: <a> cannot copy name attribute to id
line 738 column 11 - Warning: <a> cannot copy name attribute to id
line 764 column 11 - Warning: <a> cannot copy name attribute to id
line 788 column 11 - Warning: <a> cannot copy name attribute to id
line 822 column 11 - Warning: <a> cannot copy name attribute to id
line 844 column 11 - Warning: <a> cannot copy name attribute to id
line 878 column 11 - Warning: <a> cannot copy name attribute to id
line 916 column 11 - Warning: <a> cannot copy name attribute to id
line 942 column 11 - Warning: <a> cannot copy name attribute to id
line 1001 column 11 - Warning: <a> cannot copy name attribute to id
Info: Document content looks like HTML Proprietary
Info: No system identifier in emitted doctype
362 warnings, 0 errors were found!


The table summary attribute should be used to describe
the table structure. It is very helpful for people using
non-visual browsers. The scope and headers attributes for
table cells are useful for specifying which headers apply
to each table cell, enabling non-visual browsers to provide
a meaningful context for each cell.

The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
. You may also want to try
"http://www.cast.org/bobby/" which is a free Web-based
service for checking URLs for accessibility.

You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

To learn more about HTML Tidy see http://tidy.sourceforge.net
Please fill bug reports and queries using the "tracker" on the Tidy web site.
Additionally, questions can be sent to html-tidy@w3.org
HTML and CSS specifications are available from http://www.w3.org/
Lobby your company to join W3C, see http://www.w3.org/Consortium