Register - Login
Views: 99379665
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 11:00:52 PM
Jul - SM64 Hacking (Archive) - Correctly Compilling C For Usage With N64 New poll - New thread - New reply
Pages: 1 2 Next newer thread | Next older thread
Casis777
User
Level: 11


Posts: 2/19
EXP: 5137
For next: 848

Since: 10-10-11


Since last post: 8.8 years
Last activity: 8.6 years

Posted on 01-17-12 10:29:58 PM (last edited by Casis777 at 01-17-12 08:41 PM) Link | Quote
There seems to be a problem with the way the mips-gcc compiler is compiling my code (and others) into MIPS assembly to be translated into a gameshark code for the nemu emulator. Here is what I have done...

*I'm running on Windows Vista 32-bit
*I'm running the MinGW compiler
*I have MSYS and all Paths correctly configured
*I'm using the MIPS-GCC compiler and other tools provided in this tutorial: link
*I have libraries from that google codesite downloaded
*I am modifying/using this linker script just to generate hacks: link
*I am modifying/using this linker script to generate overlays (or actors): link

Now, I have programmed a few basic hacks but none of them seem to be compiling correctly. Finally, I decided to try and compile a hack I know should run. Of course... it failed. Then, I decided to take spinout's bombarrow hack and compile that. Now, he had a compiled GS code of what it should look like, so when I compared the GS code that I had with his, I had finally come to the conclusion that it was a problem with the compiler or the linker (probably the compiler). Frauber, I know that you've compiled hacks made in C before, could you possibly know what the problem is?

By the way, here is the GS code I got after compiling the bombarrows hack and here is spinout's original GS code... As you can see, they begin to differ around the first couple of GS code lines. This leads me to believe it's either the compiler's, linker's, or objcopy's fault. Also, here is the source code for spinout's bombarrows for others to compile.

Should I try using this linker script instead? It seems to be exactly the same as the original linker script I was using except that it has fewer comments. And what about trying a different compiler? I found another mips-gcc compiler that was packaged with Galatea.

I know that this topic has to do with a OoT debug hack, but I also wish to know what is the problem so that way I may generate hacks for SM64

Lyskar
12210
-The Chaos within trumps the Chaos without-
Level: 192


Posts: 10793/12211
EXP: 99235523
For next: 638048

Since: 07-03-07

From: 52-2-88-7

Since last post: 7.4 years
Last activity: 7.3 years

Posted on 01-17-12 11:02:11 PM Link | Quote
Stats
Time/Date
01-17-12 05:02:11 PM
Posts
10793
Days Here
1659
Level
154
Metal_Man88's Post
Normally I would trash this, but there is nowhere else in this forum to put this information, and it is something legitimately interesting, so I shall let it stay. But like all exceptions, this means this will be the topic for compiling C for use with N64--I won't be accepting an armada of other similar topics or just let any topic in just because of this one.

____________________
Eisnaught - SSQ² - Mobius Roleplay - SSS
Casis777
User
Level: 11


Posts: 3/19
EXP: 5137
For next: 848

Since: 10-10-11


Since last post: 8.8 years
Last activity: 8.6 years

Posted on 01-17-12 11:47:22 PM (last edited by Casis777 at 01-17-12 08:47 PM) Link | Quote
Thanks, Metal_Man. I wasn't sure if I would be allowed to post this thread or not because of the following rule read in the sticky: SM64 Forum Info- Don't Make New Topics--



Do not post a thread unless it is one of the following:

A well-phrased Question not answered or addressed in another topics

messiaen
Catgirl
Level: 68


Posts: 1037/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 01-18-12 05:37:29 AM Link | Quote
I feel like helping since there's great value in learning how to set this up. If you got anything to compile, then you are on the right path.

Dunno about spinout stuff, but this file should help you. The subdirectory labelled 'c' contains multiple examples of SM64 hacks done in C. Use mario64.c as reference for Makefile and linker script. If I recall correctly, some of the CFLAGS have been changed from the example hacks.

A few important points:

1) Hook.txt is the hack entry-point. It replaces something useless in Mario's behavior with JAL 0x80400000, so your code will ONLY BE CALLED when Mario can be controlled (but not during menus, cutscenes and pauses). This is a quick cheapo to test hacks easily as Nemu64 cheats. If you want to inject your hack into the ROM, you'll need a few more steps, I should probably write a guide on that (fortunately its simpler with ROMs already modified by the OBJ Importer).

2) The linker script (mario64.x) shouldn´t be modified, however there's something very important to take in account, , which is the start address definied by ".". In this case, it's 0x80400000, which is fine for Gameshark test hacks, however when inserting to the ROM this has to match the actual RAM destination. More on this on a later post.


SECTIONS {
. = 0x80400000 ;


3) Remember ALL your source files must begin with this:

asm volatile("la $gp, _gp");

This ensures $GP is a pointer to the .data section containing the variables used by your code, otherwise the first load/store operation will result in an exception and crash the game.

Hope this heps, feel free to ask any questions.
Casis777
User
Level: 11


Posts: 4/19
EXP: 5137
For next: 848

Since: 10-10-11


Since last post: 8.8 years
Last activity: 8.6 years

Posted on 01-18-12 10:01:51 PM (last edited by Casis777 at 01-18-12 07:02 PM) Link | Quote
I appreciate your help, messian, but I already know how to correctly use the linker scripts and how hooks work. Although, I haven't tried adding asm volatile("la $gp, _gp"); to the code yet...

Perhaps I could try tinkering around with the GCC optimization levels within the CFLAGS to see if I get different outputs. Using the -mabi=32 argument seems to help the compiled GS code a little.

Maybe it's because I'm running Vista 32-bit? Everyone seems to frown upon programming in a vista environment
messiaen
Catgirl
Level: 68


Posts: 1038/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 01-18-12 11:37:00 PM Link | Quote
Use objdump -d file.elf to get a disassembly of your compiled code, then it should be easier to figure out what's different.
Casis777
User
Level: 11


Posts: 7/19
EXP: 5137
For next: 848

Since: 10-10-11


Since last post: 8.8 years
Last activity: 8.6 years

Posted on 02-14-12 02:26:41 AM (last edited by Casis777 at 02-13-12 11:30 PM) Link | Quote
I just deleted my previous reply because I fixed what was the main problem with the hack-- the makefile. Thanks for the examples and help, messian! I'll try making a few example hacks for SM64 now that I've done what I wanted with OoT
messiaen
Catgirl
Level: 68


Posts: 1063/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-23-12 06:18:43 PM Link | Quote
Sent by Cajetan in a PM. Please post question in the appropriate threads, not in PMs, geeky stuff is the purpose of this forum.

Originally posted by Cajetan
Okay another question(sorry for annoying you, but there isn't any other who knows stuff like that): How do i setup all stuff correctly?

Yes, i did following:
Installed MinGW, MSYS everything perfectly. I also got z64actor and z64teleport successfully compiled. Now i wanted to make my OWN code for SM64. Now comes the hard part for me: How do i setup everything correctly. In my folder is following:

m64helloworld.c
mario64.h
mario64.x
hook
makefile

Now with MSYS i did cd to that folder. Now i typed in: make
i get following errors:

"make: *** No rule to make target `mario64.o', needed by `mario64.elf'. Stop."

So, but i know mario64.o and mario64.elf get generated... i can't have them, because they must be later generated... So what am i doing wrong here?


I don't blame you, makefiles are very confusing.

Your makefile PRJNAME is probably mario64, so it expects your source file to be called mario64.c, unless you specify otherwise.
Cajetan
Member
Level: 22


Posts: 29/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-24-12 10:45:44 AM Link | Quote
Originally posted by messiaen
Sent by Cajetan in a PM. Please post question in the appropriate threads, not in PMs, geeky stuff is the purpose of this forum.

Originally posted by Cajetan
Okay another question(sorry for annoying you, but there isn't any other who knows stuff like that): How do i setup all stuff correctly?

Yes, i did following:
Installed MinGW, MSYS everything perfectly. I also got z64actor and z64teleport successfully compiled. Now i wanted to make my OWN code for SM64. Now comes the hard part for me: How do i setup everything correctly. In my folder is following:

m64helloworld.c
mario64.h
mario64.x
hook
makefile

Now with MSYS i did cd to that folder. Now i typed in: make
i get following errors:

"make: *** No rule to make target `mario64.o', needed by `mario64.elf'. Stop."

So, but i know mario64.o and mario64.elf get generated... i can't have them, because they must be later generated... So what am i doing wrong here?


I don't blame you, makefiles are very confusing.

Your makefile PRJNAME is probably mario64, so it expects your source file to be called mario64.c, unless you specify otherwise.


Well, it does compile now, but again a lot of errors:

$ make hlw

mips64-gcc -std=gnu99 -nodefaultlibs -march=vr4300 -mtune=vr4300 -mabi=32 -I. -I../include -fno-builtin -o3 -c -o hlw.o hlw.c
In file included from hlw.c:1:
explode.h:43: error: expected ')' before 'flags'
explode.h:56: error: expected ')' before '*' token
explode.h:57: error: expected ')' before '*' token
explode.h:58: error: expected ')' before '*' token
explode.h:59: error: expected ')' before '*' token
explode.h:60: error: expected ')' before 'obj_pointer'
explode.h:61: error: expected ')' before 'object1'
explode.h:62: error: expected ')' before 'dst'
explode.h:63: error: expected ')' before 'obj_ptr'
explode.h:64: error: expected ')' before 'argument'
explode.h:69: error: expected ')' before 'obj_pointer'
explode.h:70: error: expected ')' before 'model_ID'
explode.h:71: error: expected ')' before 'animation_index'
explode.h:72: error: expected ')' before 'argument'
explode.h:73: error: expected ')' before 'obj_pointer'
explode.h:74: error: expected ')' before 'behavior_segmented_pointer'
explode.h:75: error: expected ')' before 'obj_pointer'
explode.h:76: error: expected ')' before 'obj_pointer'
explode.h:79: error: expected ')' before 'mario_struct_pointer'
explode.h:81: error: expected ')' before '*' token
explode.h:85: error: expected ')' before 'layer'
explode.h:86: error: expected ')' before '*' token
explode.h:89: error: expected ')' before 'msg_ID'
explode.h:90: error: expected ')' before 'x_pos'
explode.h:91: error: expected ')' before 'x'
explode.h:92: error: expected ')' before 'arg'
explode.h:95: error: expected ')' before 'x'
explode.h:96: error: expected ')' before 'x'
explode.h:97: error: expected ')' before 'x'
explode.h:100: error: expected ')' before 'segmented_pointer'
explode.h:103: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
explode.h:112: error: expected specifier-qualifier-list before 'u16'
explode.h:119: error: expected specifier-qualifier-list before 'u32'
explode.h:125: error: expected declaration specifiers or '...' before 'u16'
explode.h:131: error: expected specifier-qualifier-list before 'u32'
explode.h:154: error: expected specifier-qualifier-list before 'u32'
explode.h:172: error: expected specifier-qualifier-list before 'u16'
explode.h:190: error: expected specifier-qualifier-list before 's16'
explode.h:203: error: expected specifier-qualifier-list before 'u32'
explode.h:220: error: expected specifier-qualifier-list before 's16'
explode.h:243: error: expected specifier-qualifier-list before 'u16'
explode.h:415: error: expected specifier-qualifier-list before 'u32'
hlw.c: In function '_start':
hlw.c:5: warning: implicit declaration of function 'PrintXY'
make: *** [hlw.o] Error 1"



I used now the updated explode.h, then i tried using the outdated(mario64.h) and get the same errors like up there. Is something wrong with the compiler?
messiaen
Catgirl
Level: 68


Posts: 1065/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-24-12 12:47:02 PM Link | Quote
Seems like you aren't including n64.h.

Use #include before anything else in your main .c file.

If that doesn't work, copy n64.h to the local directory and use #include "n64.h" instead.
Cajetan
Member
Level: 22


Posts: 30/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-24-12 12:51:43 PM (last edited by Cajetan at 02-24-12 09:59 AM) Link | Quote
Ok, the last help i need. Ok everything compiles now, but i get now a very short error:



$ make

mips64-gcc -std=gnu99 -nodefaultlibs -march=vr4300 -mtune=vr4300 -mabi=32 -I. -I../include -fno-builtin -o3 -c -o hlw.o hlw.c
mips64-ld -o hlw.elf hlw.o -L. -T hlw.x
d:\m64hack\c\n64tree-win32\root\bin\mips64-ld.exe:hlw.x:44: parse error
make: *** [hlw.elf] Error 1



I think that would be all then and compilation can be successful.

If the compilation goes successful next time, then i will write a tutorial how to get a successful compilation with your own code.

BTW, Hook is the hack entry point, so where do i actually hook my helloworld.c in?
messiaen
Catgirl
Level: 68


Posts: 1066/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-24-12 03:10:13 PM Link | Quote
Can't help if you don't post the contents of your hlw.x file. Make sure it's exactly the same as mario64.x and it will work fine.

The "hook" is what CALLS your code. In the examples provided, its called from Mario's Behavior, so whenever Mario is playing, your function (which by default is at 0x80400000) will be called.

The hook file is simply a Gameshark code that paches

JAL 0x80400000
NOP

to Mario Behavior, which is equivalente to a YourHack(); function call in C.

"Injecting" the hack into the ROM without using Gameshark codes is a bit more complicated.
Cajetan
Member
Level: 22


Posts: 31/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-24-12 04:04:53 PM (last edited by Cajetan at 02-24-12 01:13 PM) Link | Quote
Originally posted by messiaen
Can't help if you don't post the contents of your hlw.x file. Make sure it's exactly the same as mario64.x and it will work fine.

The "hook" is what CALLS your code. In the examples provided, its called from Mario's Behavior, so whenever Mario is playing, your function (which by default is at 0x80400000) will be called.

The hook file is simply a Gameshark code that paches

JAL 0x80400000
NOP

to Mario Behavior, which is equivalente to a YourHack(); function call in C.

"Injecting" the hack into the ROM without using Gameshark codes is a bit more complicated.


Ah Thank you, i found it out. It looks like i got a false mario64.x file. It compiles now everything. Thanks for your help, im going to write a tutorial how to do compile own codes without problems.
messiaen
Catgirl
Level: 68


Posts: 1068/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-24-12 04:40:34 PM Link | Quote
It would be nice if you could do it really step-by-step, with lots of pictures from all the steps (installing MSYS/MinGW, downloading the files, setting things up, etc).

I'm doing some modifications in the ROM Layout for the next version of the importer, so injecting new code will be a bit easier.
Vinnyboiler
Catgirl
Level: 66


Posts: 888/1044
EXP: 2439776
For next: 22075

Since: 12-27-07

From: London, England

Since last post: 6 days
Last activity: 3 days

Posted on 02-24-12 04:42:34 PM Link | Quote



Originally posted by Cajetan
Ah Thank you, i found it out. It looks like i got a false mario64.x file. It compiles now everything. Thanks for your help, im going to write a tutorial how to do compile own codes without problems.


Oh a tutorial actually sounds quite nice, I would absolute love it if you do.

____________________




Look in my eyes/What do you see?/The cult of personality// I know your anger, I know your dreams/I've been everything you want to be/Oh, I'm the cult of personality

~ Cult Of Personality - Living Colour


Cajetan
Member
Level: 22


Posts: 32/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-24-12 05:43:08 PM Link | Quote
Originally posted by vinnyboiler
Originally posted by Cajetan
Ah Thank you, i found it out. It looks like i got a false mario64.x file. It compiles now everything. Thanks for your help, im going to write a tutorial how to do compile own codes without problems.


Oh a tutorial actually sounds quite nice, I would absolute love it if you do.


Yes, i will do. By the way, this is the successful Result i got from compiling:

Cajetan
Member
Level: 22


Posts: 33/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-24-12 08:55:16 PM (last edited by Cajetan at 02-24-12 05:55 PM) Link | Quote
So i wrote the tutorial... I don't know if you like it, but if anything is missing please report it:

http://sites.google.com/site/cajetan64/home/coding-in-n64-with-c
messiaen
Catgirl
Level: 68


Posts: 1070/1085
EXP: 2594038
For next: 134762

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-25-12 03:45:24 PM (last edited by messiaen at 02-25-12 12:46 PM) Link | Quote
Please provide a link to the GCC N64 Toolchain setup tutorial". By the way, that tutorial was made by ZZT32.

Animations.h isn't needed, unless someone completes that with descriptions of all object animations.

Some possible tutorials you or someone else could try writing, or rather, guides for what you can learn from the examples. I strongly recommend reading all the basic tutorials on cprogramming.com. It's essential understanding struct pointers AND pointers-to-pointers syntax (you'll be using this to acess most structs).

1) Using pointers to alter things in RAM
- Reading/writing 8, 16 and 32-bit values (types u8, u16, u32 and floats)
- Converting simple Gameshark codes to C code

2) Reading data from the game: current level, number of stars
- Using conditionals to enhance simpler codes
- Making your code execute only on a specific level, or on a minimum number of stars

3) Acessing the Mario struct
- Pointer-to-pointer struct syntax and acessing members, ie (*Struct)->member
- Checking current and previous action
- Reading JoyPad input using & and == operators.

4) Detecting current collision type Mario is stepping
- Adding action to existing collision types
- Creating custom collision types

5) Acessing the Object Struct
- Basic variables: action, position, collision spheres & interaction, x/y/z speed, distance from Mario or from other object
- Deactivating (killing) objects
- Changing action based on object timers
- Changing current animation
- Checking behaviors
- Spawning child objects
- Segmented vs RAM pointers (SegmentedToVirtual function)
- Iterating through the object linked list to find an specific object.

6) DMA
- Copying data from the ROM to RAM
Cajetan
Member
Level: 22


Posts: 34/88
EXP: 51640
For next: 6710

Since: 08-06-11

From: Binary

Since last post: 345 days
Last activity: 345 days

Posted on 02-26-12 11:31:23 AM Link | Quote
Thanks Messiaen. I will provide the link to the N64Toolchain and the restly things will be added too.
I will also add some exercises like spawn a child object or make a code that prints Hello World on the screen... I think that should help understanding how Super Mario 64 actually works and motivates others to write tutorials. I also will provide links to learn the C syntax.. it must be destiny... because i actually wanted to post the same link (http://www.cprogramming.com). It's a very good site and i learned from there all my basic knowledge of the C Syntax. It's great written and very understandable.

I hope you, me or someone else could update the header files and share it here.

ShenoxVII

(in all seriousness, you're a prick)
Level: 24


Posts: 69/111
EXP: 75917
For next: 2208

Since: 10-09-10


Since last post: 9.0 years
Last activity: 9.0 years

Posted on 02-29-12 09:18:27 PM Link | Quote
Lol hey tarek, haven't talked to you since I met you randomly on kaillera like a couple of years ago, and before that when we were hacking that kiddy game. If you are the person i think you are, German.

Btw, NICE tutorial, I love it thanks for doing this its a huge break through for progress in the sm64 hacking world, hopefully this will gain popularity of more complex hacks and now dealing with actual languages with the rom, so we can build off of it.

This, is great.
Pages: 1 2 Next newer thread | Next older thread
Jul - SM64 Hacking (Archive) - Correctly Compilling C For Usage With N64 New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

32 database queries, 14 query cache hits.
Query execution time:  0.092762 seconds
Script execution time:  0.032760 seconds
Total render time:  0.125522 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 301 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 212 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 97 - Warning: unescaped & or unknown entity "&page"
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 132 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 177 column 102 - Warning: unescaped & or unknown entity "&postid"
line 200 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 202 column 9 - Warning: missing <tr>
line 220 column 13 - Warning: missing <tr>
line 221 column 102 - Warning: unescaped & or unknown entity "&postid"
line 223 column 74 - Warning: <style> isn't allowed in <td> elements
line 223 column 9 - Info: <td> previously mentioned
line 223 column 1365 - Error: <z> is not recognized!
line 223 column 1365 - Warning: discarding unexpected <z>
line 223 column 1377 - Warning: discarding unexpected </z>
line 225 column 1409 - Error: <z> is not recognized!
line 225 column 1409 - Warning: discarding unexpected <z>
line 225 column 1417 - Warning: discarding unexpected </z>
line 227 column 1434 - Error: <z> is not recognized!
line 227 column 1434 - Warning: discarding unexpected <z>
line 227 column 1446 - Warning: discarding unexpected </z>
line 229 column 1462 - Error: <z> is not recognized!
line 229 column 1462 - Warning: discarding unexpected <z>
line 229 column 1470 - Warning: discarding unexpected </z>
line 231 column 2722 - Warning: discarding unexpected </td>
line 234 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 236 column 9 - Warning: missing <tr>
line 254 column 13 - Warning: missing <tr>
line 255 column 102 - Warning: unescaped & or unknown entity "&postid"
line 266 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 268 column 9 - Warning: missing <tr>
line 286 column 13 - Warning: missing <tr>
line 287 column 102 - Warning: unescaped & or unknown entity "&postid"
line 313 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 315 column 9 - Warning: missing <tr>
line 333 column 13 - Warning: missing <tr>
line 334 column 102 - Warning: unescaped & or unknown entity "&postid"
line 343 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 345 column 9 - Warning: missing <tr>
line 363 column 13 - Warning: missing <tr>
line 364 column 102 - Warning: unescaped & or unknown entity "&postid"
line 369 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 371 column 9 - Warning: missing <tr>
line 389 column 13 - Warning: missing <tr>
line 390 column 102 - Warning: unescaped & or unknown entity "&postid"
line 395 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 397 column 9 - Warning: missing <tr>
line 415 column 13 - Warning: missing <tr>
line 416 column 102 - Warning: unescaped & or unknown entity "&postid"
line 443 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 445 column 9 - Warning: missing <tr>
line 463 column 13 - Warning: missing <tr>
line 464 column 102 - Warning: unescaped & or unknown entity "&postid"
line 543 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 545 column 9 - Warning: missing <tr>
line 563 column 13 - Warning: missing <tr>
line 564 column 102 - Warning: unescaped & or unknown entity "&postid"
line 568 column 133 - Error: <n64.h> is not recognized!
line 568 column 133 - Warning: discarding unexpected <n64.h>
line 573 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 575 column 9 - Warning: missing <tr>
line 593 column 13 - Warning: missing <tr>
line 594 column 102 - Warning: unescaped & or unknown entity "&postid"
line 612 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 614 column 9 - Warning: missing <tr>
line 632 column 13 - Warning: missing <tr>
line 633 column 102 - Warning: unescaped & or unknown entity "&postid"
line 649 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 651 column 9 - Warning: missing <tr>
line 669 column 13 - Warning: missing <tr>
line 670 column 102 - Warning: unescaped & or unknown entity "&postid"
line 688 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 690 column 9 - Warning: missing <tr>
line 708 column 13 - Warning: missing <tr>
line 709 column 102 - Warning: unescaped & or unknown entity "&postid"
line 716 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 718 column 9 - Warning: missing <tr>
line 736 column 13 - Warning: missing <tr>
line 737 column 102 - Warning: unescaped & or unknown entity "&postid"
line 741 column 750 - Warning: missing </font> before <blockquote>
line 742 column 789 - Warning: inserting implicit <font>
line 742 column 789 - Warning: missing </font> before <hr>
line 742 column 853 - Warning: inserting implicit <font>
line 742 column 853 - Warning: missing </font> before <hr>
line 743 column 1 - Warning: inserting implicit <font>
line 746 column 1465 - Warning: unescaped & or unknown entity "&st"
line 746 column 1471 - Warning: unescaped & or unknown entity "&#"
line 755 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 757 column 9 - Warning: missing <tr>
line 775 column 13 - Warning: missing <tr>
line 776 column 102 - Warning: unescaped & or unknown entity "&postid"
line 787 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 789 column 9 - Warning: missing <tr>
line 807 column 13 - Warning: missing <tr>
line 808 column 102 - Warning: unescaped & or unknown entity "&postid"
line 815 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 817 column 9 - Warning: missing <tr>
line 835 column 13 - Warning: missing <tr>
line 836 column 102 - Warning: unescaped & or unknown entity "&postid"
line 875 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 877 column 9 - Warning: missing <tr>
line 895 column 13 - Warning: missing <tr>
line 896 column 102 - Warning: unescaped & or unknown entity "&postid"
line 906 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 908 column 9 - Warning: missing <tr>
line 926 column 13 - Warning: missing <tr>
line 927 column 102 - Warning: unescaped & or unknown entity "&postid"
line 929 column 74 - Warning: missing </div>
line 936 column 17 - Warning: missing <tr>
line 936 column 17 - Warning: discarding unexpected <table>
line 939 column 35 - Warning: missing <tr>
line 939 column 97 - Warning: unescaped & or unknown entity "&page"
line 939 column 50 - Warning: missing </font> before </td>
line 939 column 132 - Warning: missing </font> before </table>
line 941 column 35 - Warning: missing <tr>
line 941 column 50 - Warning: missing </font> before </td>
line 942 column 37 - Warning: unescaped & or unknown entity "&id"
line 941 column 212 - Warning: missing </font> before </table>
line 943 column 17 - Warning: discarding unexpected </textarea>
line 943 column 28 - Warning: discarding unexpected </form>
line 943 column 35 - Warning: discarding unexpected </embed>
line 943 column 43 - Warning: discarding unexpected </noembed>
line 943 column 53 - Warning: discarding unexpected </noscript>
line 943 column 64 - Warning: discarding unexpected </noembed>
line 943 column 74 - Warning: discarding unexpected </embed>
line 943 column 82 - Warning: discarding unexpected </table>
line 943 column 90 - Warning: discarding unexpected </table>
line 945 column 9 - Warning: missing </font> before <table>
line 957 column 25 - Warning: discarding unexpected </font>
line 966 column 58 - Warning: discarding unexpected </font>
line 944 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 162 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 204 column 17 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 17 - Warning: <img> lacks "alt" attribute
line 204 column 60 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 60 - Warning: <img> lacks "alt" attribute
line 204 column 103 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 103 - Warning: <img> lacks "alt" attribute
line 204 column 146 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 146 - Warning: <img> lacks "alt" attribute
line 204 column 189 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 189 - Warning: <img> lacks "alt" attribute
line 204 column 232 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 232 - Warning: <img> lacks "alt" attribute
line 204 column 275 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 275 - Warning: <img> lacks "alt" attribute
line 204 column 318 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 318 - Warning: <img> lacks "alt" attribute
line 204 column 361 - Warning: <img> proprietary attribute value "absmiddle"
line 204 column 361 - Warning: <img> lacks "alt" attribute
line 205 column 23 - Warning: <img> lacks "alt" attribute
line 205 column 64 - Warning: <img> lacks "alt" attribute
line 205 column 113 - Warning: <img> lacks "alt" attribute
line 205 column 163 - Warning: <img> lacks "alt" attribute
line 206 column 11 - Warning: <img> lacks "alt" attribute
line 216 column 15 - Warning: <img> lacks "alt" attribute
line 223 column 1210 - Warning: <tr> attribute "valign" has invalid value "center"
line 231 column 2265 - Warning: <img> lacks "alt" attribute
line 239 column 22 - Warning: <img> lacks "alt" attribute
line 239 column 63 - Warning: <img> lacks "alt" attribute
line 239 column 112 - Warning: <img> lacks "alt" attribute
line 239 column 162 - Warning: <img> lacks "alt" attribute
line 250 column 15 - Warning: <img> lacks "alt" attribute
line 271 column 22 - Warning: <img> lacks "alt" attribute
line 271 column 63 - Warning: <img> lacks "alt" attribute
line 271 column 111 - Warning: <img> lacks "alt" attribute
line 271 column 161 - Warning: <img> lacks "alt" attribute
line 282 column 15 - Warning: <img> lacks "alt" attribute
line 318 column 22 - Warning: <img> lacks "alt" attribute
line 318 column 63 - Warning: <img> lacks "alt" attribute
line 318 column 112 - Warning: <img> lacks "alt" attribute
line 318 column 162 - Warning: <img> lacks "alt" attribute
line 329 column 15 - Warning: <img> lacks "alt" attribute
line 340 column 586 - Warning: <img> proprietary attribute value "absmiddle"
line 340 column 586 - Warning: <img> lacks "alt" attribute
line 348 column 22 - Warning: <img> lacks "alt" attribute
line 348 column 63 - Warning: <img> lacks "alt" attribute
line 348 column 111 - Warning: <img> lacks "alt" attribute
line 348 column 161 - Warning: <img> lacks "alt" attribute
line 359 column 15 - Warning: <img> lacks "alt" attribute
line 374 column 22 - Warning: <img> lacks "alt" attribute
line 374 column 63 - Warning: <img> lacks "alt" attribute
line 374 column 112 - Warning: <img> lacks "alt" attribute
line 374 column 162 - Warning: <img> lacks "alt" attribute
line 385 column 15 - Warning: <img> lacks "alt" attribute
line 392 column 309 - Warning: <img> proprietary attribute value "absmiddle"
line 392 column 309 - Warning: <img> lacks "alt" attribute
line 400 column 22 - Warning: <img> lacks "alt" attribute
line 400 column 63 - Warning: <img> lacks "alt" attribute
line 400 column 111 - Warning: <img> lacks "alt" attribute
line 400 column 161 - Warning: <img> lacks "alt" attribute
line 411 column 15 - Warning: <img> lacks "alt" attribute
line 448 column 22 - Warning: <img> lacks "alt" attribute
line 448 column 63 - Warning: <img> lacks "alt" attribute
line 448 column 112 - Warning: <img> lacks "alt" attribute
line 448 column 162 - Warning: <img> lacks "alt" attribute
line 449 column 11 - Warning: <img> lacks "alt" attribute
line 459 column 15 - Warning: <img> lacks "alt" attribute
line 548 column 22 - Warning: <img> lacks "alt" attribute
line 548 column 63 - Warning: <img> lacks "alt" attribute
line 548 column 111 - Warning: <img> lacks "alt" attribute
line 548 column 161 - Warning: <img> lacks "alt" attribute
line 559 column 15 - Warning: <img> lacks "alt" attribute
line 578 column 22 - Warning: <img> lacks "alt" attribute
line 578 column 63 - Warning: <img> lacks "alt" attribute
line 578 column 112 - Warning: <img> lacks "alt" attribute
line 578 column 162 - Warning: <img> lacks "alt" attribute
line 579 column 11 - Warning: <img> lacks "alt" attribute
line 589 column 15 - Warning: <img> lacks "alt" attribute
line 617 column 22 - Warning: <img> lacks "alt" attribute
line 617 column 63 - Warning: <img> lacks "alt" attribute
line 617 column 111 - Warning: <img> lacks "alt" attribute
line 617 column 161 - Warning: <img> lacks "alt" attribute
line 628 column 15 - Warning: <img> lacks "alt" attribute
line 654 column 22 - Warning: <img> lacks "alt" attribute
line 654 column 63 - Warning: <img> lacks "alt" attribute
line 654 column 112 - Warning: <img> lacks "alt" attribute
line 654 column 162 - Warning: <img> lacks "alt" attribute
line 655 column 11 - Warning: <img> lacks "alt" attribute
line 665 column 15 - Warning: <img> lacks "alt" attribute
line 693 column 22 - Warning: <img> lacks "alt" attribute
line 693 column 63 - Warning: <img> lacks "alt" attribute
line 693 column 111 - Warning: <img> lacks "alt" attribute
line 693 column 161 - Warning: <img> lacks "alt" attribute
line 704 column 15 - Warning: <img> lacks "alt" attribute
line 721 column 22 - Warning: <img> lacks "alt" attribute
line 721 column 63 - Warning: <img> lacks "alt" attribute
line 721 column 112 - Warning: <img> lacks "alt" attribute
line 721 column 162 - Warning: <img> lacks "alt" attribute
line 722 column 11 - Warning: <img> lacks "alt" attribute
line 732 column 15 - Warning: <img> lacks "alt" attribute
line 746 column 1478 - Warning: <img> lacks "alt" attribute
line 760 column 22 - Warning: <img> lacks "alt" attribute
line 760 column 63 - Warning: <img> lacks "alt" attribute
line 760 column 112 - Warning: <img> lacks "alt" attribute
line 760 column 162 - Warning: <img> lacks "alt" attribute
line 761 column 11 - Warning: <img> lacks "alt" attribute
line 771 column 15 - Warning: <img> lacks "alt" attribute
line 784 column 643 - Warning: <img> lacks "alt" attribute
line 792 column 22 - Warning: <img> lacks "alt" attribute
line 792 column 63 - Warning: <img> lacks "alt" attribute
line 792 column 112 - Warning: <img> lacks "alt" attribute
line 792 column 162 - Warning: <img> lacks "alt" attribute
line 793 column 11 - Warning: <img> lacks "alt" attribute
line 803 column 15 - Warning: <img> lacks "alt" attribute
line 820 column 22 - Warning: <img> lacks "alt" attribute
line 820 column 63 - Warning: <img> lacks "alt" attribute
line 820 column 111 - Warning: <img> lacks "alt" attribute
line 820 column 161 - Warning: <img> lacks "alt" attribute
line 831 column 15 - Warning: <img> lacks "alt" 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 881 column 11 - Warning: <img> lacks "alt" attribute
line 891 column 15 - Warning: <img> lacks "alt" attribute
line 910 column 11 - Warning: <img> lacks "alt" attribute
line 911 column 22 - Warning: <img> lacks "alt" attribute
line 911 column 63 - Warning: <img> lacks "alt" attribute
line 911 column 112 - Warning: <img> lacks "alt" attribute
line 911 column 162 - Warning: <img> lacks "alt" attribute
line 912 column 11 - Warning: <img> lacks "alt" attribute
line 922 column 15 - Warning: <img> lacks "alt" attribute
line 942 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 942 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 942 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 951 column 25 - Warning: <img> lacks "alt" attribute
line 956 column 267 - Warning: <img> lacks "alt" attribute
line 936 column 17 - Warning: trimming empty <tr>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 221 column 27 - Warning: <nobr> is not approved by W3C
line 223 column 1136 - Warning: <table> proprietary attribute "height"
line 255 column 27 - Warning: <nobr> is not approved by W3C
line 287 column 27 - Warning: <nobr> is not approved by W3C
line 334 column 27 - Warning: <nobr> is not approved by W3C
line 364 column 27 - Warning: <nobr> is not approved by W3C
line 390 column 27 - Warning: <nobr> is not approved by W3C
line 416 column 27 - Warning: <nobr> is not approved by W3C
line 464 column 27 - Warning: <nobr> is not approved by W3C
line 564 column 27 - Warning: <nobr> is not approved by W3C
line 594 column 27 - Warning: <nobr> is not approved by W3C
line 633 column 27 - Warning: <nobr> is not approved by W3C
line 670 column 27 - Warning: <nobr> is not approved by W3C
line 709 column 27 - Warning: <nobr> is not approved by W3C
line 737 column 27 - Warning: <nobr> is not approved by W3C
line 776 column 27 - Warning: <nobr> is not approved by W3C
line 808 column 27 - Warning: <nobr> is not approved by W3C
line 836 column 27 - Warning: <nobr> is not approved by W3C
line 896 column 27 - Warning: <nobr> is not approved by W3C
line 927 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 312 warnings and 5 errors!

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 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.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md