Register - Login
Views: 99380131
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 11:17:42 PM
Jul - SM64 Hacking (Archive) - SM64 RSP Commands New poll - New thread - New reply
Next newer thread | Next older thread
rstewart215804
User
Crazed Mario 64 Hacker!!!
Level: 11


Posts: 6/18
EXP: 5578
For next: 407

Since: 09-13-07


Since last post: 13.2 years
Last activity: 11.7 years

Posted on 10-22-07 07:11:32 PM Link | Quote
Over the past few years VL-Tone and many others have hacked and worked with SM64, however there is still a few left barriers to overcome. The first one is the N64 RSP microcode. (It is draws the polygons in the game.) VL-Tone has found out how some of the commands work but there is still more. If we knew how all the commands work then we could create levels from scratch. I suggest all of us Rom hackers come together and help. I will search my notes tonight and give post all the information I have.

On a side note in a few weeks a will release a collision data editor. Currently I am rebuilding my editor from the ground up to remove some of the bugs that I had with my first test version. I use the same software as VL-Tone which means that my editor is cross platform.


____________________
Just you wait until next time. Until then, keep that Control Stick smokin’! Buwaa ha ha!
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 118/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 10-24-07 07:07:24 AM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
I'm all for finding the purpose of remaining GBI/RSP commands. But, I'll add my unfortunately pessimistic view on what could follow...

Even if we knew all RSP commands, it wouldn't mean it would be easy to import external models. These commands put very specific restrictions on the way models are constructed, and 3d modeling programs don't know anything about these limitations.

Super Mario 64 models were created with Nichimen N-World, a program that was partly developed in collaboration with Nintendo, so it could take into account all the specific requirements of the N64 RSP command set. A special custom-made plug-in for this program exported models to GBI/RSP commands. N-World is not simply a modeler, it has some feature that made it easy to create worlds and objects suited for the n64 platform. Some RSP commands have no direct equivalents in modern 3d modelers.

The Goldeneye editor can import external 3d models, but that's because Rare used a completely different engine and modeler, with a more modern data-driven approach for model data instead of the command-driven approach used by early Nintendo games like SM64. Rare used a different approach precisely to avoid the problems I'm describing in the SM64 approach. Even then, the GE editor has its share of problems when importing models.

While we could define a set of guidelines that users would have to follow when creating/exporting their 3d models from their 3d modeler, just defining these guidelines would be a tough job in itself. And then, I can already imagine all sorts of emerging issues, which would be hard to sort out since not all users would have followed the guidelines in the first place.

I know I sound overly pessimistic when I talk about this, but to me knowing all RSP commands is a very small part of the solution to a bigger problem.

I guess it's a first step, and I don't want to discourage any efforts to crack the remaining RSP commands. I just don't want people to expect me to easily implement a model importer in TT64 just because we know the purpose of all commands. If you or anyone else want to create an importer then, have fun, but it won't be a piece of cake.

Anyhow, I'd be happy if you could prove me wrong

Don't hesitate to still post your notes, and I'll add a few things I may have not included in my docs.



____________________
Mega Mario XD
80
Level: 22


Posts: 34/81
EXP: 53040
For next: 5310

Since: 10-26-07

From: Australia

Since last post: 13.8 years
Last activity: 13.8 years

Posted on 12-03-07 06:06:26 AM Link | Quote
Quote of the moment by The Glitch: "What good is a document without notes? Digital toilet paper at best."
****
Originally posted by VL-Tone
I'm all for finding the purpose of remaining GBI/RSP commands. But, I'll add my unfortunately pessimistic view on what could follow...

Even if we knew all RSP commands, it wouldn't mean it would be easy to import external models. These commands put very specific restrictions on the way models are constructed, and 3d modeling programs don't know anything about these limitations.




Some guy said he imported a Mario Party 3 Daisy Model into SM64 and fixed all the animations. I'll see if I can get him to reveal his secrets...

____________________
Matthew Coburn
One of the Peachy64 hack team
http://www.nintennetwork.org/bbs/index.php
paulguy

Green Birdo
Level: 93


Posts: 13/2294
EXP: 8025357
For next: 27453

Since: 09-14-07

From: Buffalo, NY

Since last post: 9.7 years
Last activity: 9.6 years

Posted on 12-04-07 03:35:02 PM Link | Quote
Since when is TT64 cross platform compatible?
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 120/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 12-06-07 04:35:09 PM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Originally posted by paulguy
Since when is TT64 cross platform compatible?


Since the beginning, it works on both Windows and Mac OS X. Unfortunately it's not running natively in Linux (some people reported success under Wine, though the ROM extender doesn't work). It's not that I don't care about Linux, but I started using Director as a development platform a long time before Linux was on the map and even before it was released, and Director is what I know best, by far.

As for the guy that supposedly imported the Mario Party 3 Daisy model into SM64 and fixed the animations, I say it's complete bullshit. Tell him to come post here and show some proofs (and that means a video not some photoshoped screenshot).

____________________
Mega Mario XD
80
Level: 22


Posts: 43/81
EXP: 53040
For next: 5310

Since: 10-26-07

From: Australia

Since last post: 13.8 years
Last activity: 13.8 years

Posted on 12-07-07 04:09:50 AM Link | Quote
Originally posted by VL-Tone

As for the guy that supposedly imported the Mario Party 3 Daisy model into SM64 and fixed the animations, I say it's complete bullshit. Tell him to come post here and show some proofs (and that means a video not some photoshoped screenshot).


I'll get a video of him as soon as he's available to show off some screen shots.

He knows what he's doing. I contacted him for some help on the Peachy64 Project.

____________________
Matthew Coburn
Member of the Peachy64 Hacking Team
NintenNetwork
Sig Banner
****
THIS POST IS TOTALLY ORIGINAL
UNAUTHORISED DUPLICIATION PROHIBITED
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1809/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 12-14-07 02:44:24 AM Link | Quote
Jul - Post #1809 - 12-13-07 09:44:24pm
I'm wondering how similar SM64's and MK64's microcodes are. Just for a quick comparison, here's some RSP command dumps from Mario Kart:

000000 FC 12 18 24 FF 33 FF FF Set Combine - muxs0=121824 muxs1=FF33FFFF
000008 B9 00 03 1D 00 55 20 78 Set Other Mode L - 00 03 1D 00 55 20 78
000010 06 00 00 00 07 00 14 A0 Display List - addr=07:0014A0
000018 06 00 00 00 07 00 09 C0 Display List - addr=07:0009C0
000020 06 00 00 00 07 00 06 88 Display List - addr=07:000688
000028 06 00 00 00 07 00 03 F0 Display List - addr=07:0003F0
000030 B8 00 00 00 00 00 00 00 End Display List - 00 00 00 00 00 00 00
000038 FF DA 00 00 02 E8 00 00 Set CIMG - DA 00 00 02 E8 00 00


000000 FC 12 7E 24 FF FF F3 F9 Set Combine - muxs0=127E24 muxs1=FFFFF3F9
000008 B9 00 03 1D 00 55 30 78 Set Other Mode L - 00 03 1D 00 55 30 78
000010 B6 00 00 00 00 00 20 00 Clear Geometry Mode - 00 00 00 00 00 20 00
000018 06 00 00 00 07 00 02 38 Display List - addr=07:000238
000020 B7 00 00 00 00 00 20 00 Set Geometry Mode - 00 00 00 00 00 20 00
000028 FC 12 18 24 FF 33 FF FF Set Combine - muxs0=121824 muxs1=FF33FFFF
000030 B9 00 03 1D 00 55 20 78 Set Other Mode L - 00 03 1D 00 55 20 78
000038 06 00 00 00 07 00 0F E8 Display List - addr=07:000FE8
000040 06 00 00 00 07 00 0C 60 Display List - addr=07:000C60
000048 06 00 00 00 07 00 0B 70 Display List - addr=07:000B70
000050 06 00 00 00 07 00 06 B8 Display List - addr=07:0006B8
000058 06 00 00 00 07 00 05 70 Display List - addr=07:000570
000060 B6 00 00 00 00 00 20 00 Clear Geometry Mode - 00 00 00 00 00 20 00
000068 06 00 00 00 07 00 10 C8 Display List - addr=07:0010C8
000070 B7 00 00 00 00 00 20 00 Set Geometry Mode - 00 00 00 00 00 20 00
000078 B8 00 00 00 00 00 00 00 End Display List - 00 00 00 00 00 00 00
000080 FF EE 01 E0 01 6D 00 00 Set CIMG - EE 01 E0 01 6D 00 00
000088 FE F0 01 E0 01 38 00 00 Set ZIMG - F0 01 E0 01 38 00 00
000090 FE C8 01 E0 01 67 00 00 Set ZIMG - C8 01 E0 01 67 00 00
000098 FE DB 01 E0 01 51 00 00 Set ZIMG - DB 01 E0 01 51 00 00


000000 BB 00 00 01 FF FF FF FF Texture-related - 00 00 01 FF FF FF FF
000008 B6 00 00 00 00 02 00 00 Clear Geometry Mode - 00 00 00 00 02 00 00
000010 C0 00 00 00 00 00 00 00 RDP NOP - 00 00 00 00 00 00 00
000018 BA 00 0C 02 00 00 20 00 Set Other Mode H - 00 0C 02 00 00 20 00
000020 BA 00 13 01 00 08 00 00 Set Other Mode H - 00 13 01 00 08 00 00
000028 E8 00 00 00 00 00 00 00 RDP Tile Sync - 00 00 00 00 00 00 00
000030 F5 70 10 00 00 09 40 50 Set Tile - fmt=3 size=2 ?=0 line=8 TMem=0 tile=0 palette=0 ?=1, 0 MaskT=1 ShiftT=0 ?=0, 0 masks=5 shifts=0
000038 F2 00 00 00 00 07 C0 7C Set Tile Size - texcoord=0, 0; tile=0, ?=07C07C
000040 FD 70 00 00 05 00 00 00 Set Texture Location - fmt=3 txsize=2 width=1 addr=05000000
000048 E8 00 00 00 00 00 00 00 RDP Tile Sync - 00 00 00 00 00 00 00
000050 F5 70 00 00 07 00 00 00 Set Tile - fmt=3 size=2 ?=0 line=0 TMem=0 tile=7 palette=0 ?=0, 0 MaskT=0 ShiftT=0 ?=0, 0 masks=0 shifts=0
000058 E6 00 00 00 00 00 00 00 RDP Load Sync - 00 00 00 00 00 00 00
000060 F3 00 00 00 07 3F F1 00 Load Texture - texcoord=0, 0; tile=7, ?=3FF100
000068 FC 12 7E 24 FF FF F3 F9 Set Combine - muxs0=127E24 muxs1=FFFFF3F9
000070 B9 00 03 1D 00 50 49 D8 Set Other Mode L - 00 03 1D 00 50 49 D8
000078 B8 00 00 00 00 00 00 00 End Display List - 00 00 00 00 00 00 00
000080 B9 00 03 1D 00 40 45 D8 Set Other Mode L - 00 03 1D 00 40 45 D8
000088 FC 12 18 24 FF 33 FF FF Set Combine - muxs0=121824 muxs1=FF33FFFF
000090 E8 00 00 00 00 00 00 00 RDP Tile Sync - 00 00 00 00 00 00 00
000098 F5 10 20 00 00 01 40 60 Set Tile - fmt=0 size=2 ?=0 line=16 TMem=0 tile=0 palette=0 ?=0, 0 MaskT=1 ShiftT=0 ?=0, 0 masks=6 shifts=0
0000A0 F2 00 00 00 00 0F C0 7C Set Tile Size - texcoord=0, 0; tile=0, ?=0FC07C
0000A8 FD 10 00 00 05 00 20 00 Set Texture Location - fmt=0 txsize=2 width=1 addr=05002000
0000B0 E8 00 00 00 00 00 00 00 RDP Tile Sync - 00 00 00 00 00 00 00
0000B8 F5 10 00 00 07 00 00 00 Set Tile - fmt=0 size=2 ?=0 line=0 TMem=0 tile=7 palette=0 ?=0, 0 MaskT=0 ShiftT=0 ?=0, 0 masks=0 shifts=0
0000C0 E6 00 00 00 00 00 00 00 RDP Load Sync - 00 00 00 00 00 00 00
0000C8 F3 00 00 00 07 7F F0 80 Load Texture - texcoord=0, 0; tile=7, ?=7FF080
0000D0 B8 00 00 00 00 00 00 00 End Display List - 00 00 00 00 00 00 00


Any similarities? It'd really be nice if they used the same microcode, then we'd have less work to do.

____________________
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 125/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 12-14-07 06:55:58 PM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Here are the microcode commands used for polygon models in SM64.


----------------------------

| Polygon drawing Commands |
----------------------------

[F3] [00 0,0 00] 07 [7F F][1 00]

[1] : F3 = command to load the texture into the texture memory along with more settings
[2,3,4] : the s, t coordinates of the upper left corner of the texture tile in fixed point
format (not used?)
[5] : the tile number on the lower 3 bits
[6,7,8]: width and height of texture represented as a slant. hhhwww
width=256/www*32
height=hhh/32/width

------------------------------------

[FD] [10] 00 00 [09] [00 48 00]

[1]: FD = load texture
[3] : format/pixel size fffpp000
f = format
RGBA = 000 (there are other options)
p = storage size of 1 texel
16 bits = 10 (other options too)
0 = unused

[5]: RAM segment number
[6,7,8]: Offset in segment

------------------------------------

[03] [88] [00 10] [08] [00 C0 90]

[1]: 03= Load color for next triangles.
[2]: When is 0x86, loads the bright color, when 0x88(?) loads darkened color.
[3,4]: ??
[5]: RAM segment number
[6,7,8]: Offset in segment
(colors referred are in 32-bit RGBA format 8888)

------------------------------------

[04] [B0] [00 C0] [07 00 BD 50]

[1]: 04= Loads a chunk of vertices into RSP (The RSP cannot contain too much vertices)
[2] : number of vertices minus one in the high nibble and where in the vertex cache to load in
the low nibble
(eg 0xb+1= 0xc=12 vertices loaded into index 0)
[3,4] : number of bytes of vertex data to load( 16(dec) for each vertex) (redundant?)
[5]: RAM segment number
[6,7,8]: Offset in segment and base address for next triangles.

------------------------------------

[F5] [00 00 00 00 00 00 00]

[1]: F5= Texture mode
[2,8]: Texture mode bits: lllkk.jj jjjjjjji iiiiiiii .....hhh ggggffee eeddddcc bbbbaaaaa
ff= Clamping S coord (cms)
cc= Clamping T coord (cmt)
bbbb= Mask offset S coord (masks)
eeee= Mask offset T coord (maskt)

------------------------------------

[B6] [00 00 00] [00 00] [00 00]

[1]: B6= Clears geometry mode
[5,6]: Culling and other settings, 16-bits= ??ab???? ???????? where a=culling back and b=culling front
[7,8]: Other geometry settings, 16-bits

------------------------------------

[B7] [00 00 00] [00 00] [00 00]

[1]: B7= Clears geometry mode
[5,6]: Culling and other settings, 16-bits= ??ab???? ???????? where a=culling back and b=culling front
[7,8]: Other geometry settings, 16-bits

------------------------------------

[BF] [00 00 00] [00] [28 32 3C]

[1] : BF= Triangle command
[2,3,4] : mean nothing and are likely ignored
[5] : vertex to get normal or color from for flat shading, if flat shading is used; seems to
always be 0.
[6,7,8] : vertex number times 10(dec)

------------------------------------

[06] 00 00 00 [04] [00 CA 00]

[1]: 06= Jumps to another point in the triangle data.
[2,3,4]:??
[5]: RAM segment number
[6,7,8]: Offset in segment

------------------------------------

[B8] [00 00 00 00 00 00 00]

[1]: B8: Command that jumps back to the next command after the last "06" jump (uses a stack)
[2-8]: always zero

------------------------------------

[E6] [00 00 00 00 00 00 00]

[1]: E6= This is just makes the RSP wait until it is not using any textures,
or something like that, in preparation for loading the texture image.
[2-8]: always zero

------------------------------------

Other additional polygon (RSP graphic lib) commands are used in SM64:
E6, BA, B9, F8, BC, FB, FF, BB, FC, E7, E8 and F2.



So they seem very similar, but some commands may not be used in MK64 and vice-versa.

Note that I lost some additional info I had from Cellar Dweller about commands B6, B7 and F5, which were in some private messages on the other boards (and that I stupidly didn't save on my computer).

Command 0x06, which I called the "jump command" is more than probably the same as what you rightly called "Display list", same goes for the 0xB8 command.

You seem to have amassed much more info about the RSP polygon drawing microcode than I did. I essentially stopped looking once I was able to display levels and polygon in a "good enough" manner in TT64. It would be useful for SM64 hacking if you could publish some of the info you have about RSP drawing microcode since they are after all so similar. Maybe it would be time to change the title of this forum to "N64 hacking", though there's a lot of SM64 stickies in here.

I don't think it would be incredibly hard to import/export models between SM64 and MK64, though using models as levels would require more work, because of the collision map and other level properties. In any case it would require more than copy/paste, and automating the process wouldn't be necessarily easy.

But may I reiterate that replacing Mario with an imported model is far from being a piece of cake, and I remain skeptical about that mysterious guy that still can't provide a proof of his supposed importation of Daisy in SM64 (Mario Party 3 is a much more recent game than MK64 and SM64, I'm not even sure it uses the same microcode). And like I said, Mario's body part hierarchy is particular, and you can't easily fit any character in it.


____________________
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1815/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 12-14-07 11:56:23 PM Link | Quote
Jul - Post #1815 - 12-14-07 06:56:23pm
I don't think microcodes are tweaked much at all for individual games, but Mario Kart may be using a later/customized version. I've seen it called F3DEX. (Unfortunately, Googling this is pretty useless because it's 1337 for Fedex. )

A display list is just what they call the subroutines, so 06 is a "call subroutine" command as you've described. It looks like they might be nearly identical. Nice.

I don't think much could be done in the way of exchanging models. The majority of the objects are really just 2D sprites. The only models I've dealt with are the tracks themselves, and rendering a track correctly relies heavily on correct interpretation of the RSP commands, since the tracks are basically just a whole lot of these commands and a coordinate table for them to refer to for placing polygons. The rendering engine is surprisingly simple, the tricky part is emulating all those commands.

Here is a table of how many times each command is used in each level. "Level Commands" is a sort of high-level display list system, each of those is turned into one or more RSP commands. You can see for example 03 and 04 aren't used at all.

I think it might help if we had the source of a high-level RSP emulation plugin, but I haven't had any luck with that. All the open-source plugins I've found are low-level. I imagine a high-level emulator would ignore the actual microcode, except to check which it is, and just interpret these commands directly, so the source would be a huge help in understanding what they do. (Heck, maybe we could just load the plugin directly and let it do all the work. )

____________________
Mega Mario XD
80
Level: 22


Posts: 52/81
EXP: 53040
For next: 5310

Since: 10-26-07

From: Australia

Since last post: 13.8 years
Last activity: 13.8 years

Posted on 12-15-07 02:24:40 AM (last edited by Matthew Coburn at 12-14-07 11:27 PM) Link | Quote
What Matthew Coburn has to say on this topic...
****
Well, this is interesting. There is free space in the EXTended ROM that we *could* import data to.

Imagine a level like Toad's Turnpike. Sure, the Cars and Truck whould be screwed, but if we had the basic layout (the track itself) we could have a "Shroom City" Level in SM64.

I may sound like I'm talking about something random, but could it be possible for something along those lines?

EDIT: Is the MK64 Kart and Driver two seperate models, or one object?

____________________
Matthew Coburn
Member of the Peachy64 Hacking Team
World 9 - Hacking Forums
Sig Banner
****
THIS POST IS TOTALLY ORIGINAL
UNAUTHORISED DUPLICIATION PROHIBITED
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1817/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 12-15-07 02:27:43 AM Link | Quote
Jul - Post #1817 - 12-14-07 09:27:43pm
Very unlikely. The level formats are extremely different.

____________________
Joe
Common spammer
🍬
Level: 111


Posts: 203/3392
EXP: 14488609
For next: 379751

Since: 08-02-07

From: Pororoca

Since last post: 3 days
Last activity: 3 hours

Posted on 12-15-07 04:30:16 AM Link | Quote
Originally posted by HyperHacker
(Unfortunately, Googling this is pretty useless because it's 1337 for Fedex. )
And yet, when I Google F3DEX, the majority of the pages are about the microcode. The first result alone tells me that games like Bomberman Hero, StarFox 64, Super Mario 64, and Super Smash Bros - among others - all run with high-level emulation of that RSP microcode.

I think it's about time for me to download Project64...

____________________
I have a server dedicated to providing me with cheap hosting. There's a few things there now, but it's still not much to look at.
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1911/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 12-25-07 06:48:01 AM Link | Quote
Jul - Post #1911 - 12-25-07 01:48:01am
I guess there's been more info put up since I last did it. (Or maybe I was looking for f3d3x? ) That's good to know, but is this emulator open-source?

Also looking at that page, unless it's a mistake, Mario Kart is listed as F3DEX, while Quest64 is F3D3X, which is interesting. Mario 64 is Fast3D, which I believe is the predecessor to F3DEX (Fast3D-EX). So it may not support some of the commands Mario Kart does, and there's a chance some were removed or changed.

If you search for "RSP" in RAM you can actually find convenient identifier strings. Mario Kart has it at 800F3FB0:

RSP Gfx ucode F3DEX 0.95 Yoshitaka Yasumoto Nintendo.

Mario 64 has a different string at 80339D30:

RSP SW Version: 2.0D, 04-01-96.SGI U64 GFX SW TEAM: S Anderson, S Carr, H Cheng, K Luster, R Moore, N Pooley, A Srinivasan

(also, this string breaks Notepad )

Out of curiosity I checked Quest64 too. It's at 80072680:

RSP Gfx ucode F3DEX 1.23 Yoshitaka Yasumoto Nintendo
So, just a mistake I guess.

BTW, search for "rspark" at the title screen in Mario 64. What is that?




Good news. I confirmed that Fast3D and F3DEX are very similar. Using the video plugin "glN64 V0.4.1", when I loaded a hacked Mario Kart 64 ROM it asked me which microcode was supposed to be used. I chose Fast3D just to see what would happen. The result?


3D models are obliterated (the Nintendo logo is a mess of triangles, but still spins ), but the game runs and all 2D stuff such as the menus and timer display fine.

____________________
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 157/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 12-27-07 04:44:37 AM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
I guess that moving models from SM64 to SMK64 would be easier than in the opposite direction?

____________________
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1936/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 12-27-07 05:03:08 AM (last edited by HyperHacker at 12-27-07 02:04 AM) Link | Quote
Jul - Post #1936 - 12-27-07 12:03:08am
I don't know enough about Mario 64 to be sure, but really, there are very few models in this game. The tracks, item boxes (I think), Nintendo logo, trophies, palm trees, and moving objects (boat, train, chomp etc) are all that come to mind. Everything else is textured quads. If you've ever noticed things like the snowmen have no backs (you can even get 4 players each looking at a different side and they all see a face!) that would be why.

Of course you could easily export the models to a bunch of bitmaps and import them as textures in place of the old ones.

I would assume though that F3DEX supports more commands than Fast3D, but I don't see much reason to port raw RSP commands between the two.

____________________
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 167/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 01-05-08 11:53:29 PM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Originally posted by HyperHacker
I don't know enough about Mario 64 to be sure, but really, there are very few models in this game. The tracks, item boxes (I think), Nintendo logo, trophies, palm trees, and moving objects (boat, train, chomp etc) are all that come to mind. Everything else is textured quads. If you've ever noticed things like the snowmen have no backs (you can even get 4 players each looking at a different side and they all see a face!) that would be why.

Of course you could easily export the models to a bunch of bitmaps and import them as textures in place of the old ones.

I would assume though that F3DEX supports more commands than Fast3D, but I don't see much reason to port raw RSP commands between the two.



Yeah, SMK64 sure has a lot of "billboards" (flat sprites always facing the camera). I don't think we should spend any time trying to move models between the two games, but since Fast3D and F3DEX are similar, knowledge can be shared, hoping that we can eventually import/export models.

Here's some stuff from some doc that shall remain nameless:

The Seven Basic Microcodes
There are seven basic versions of the graphics microcode:
gspFast3D
gspF3DNoN
gspLine3D
gspTurbo3D
gspSprite2D
gspS2DEX
gspZ-Sort
Each basic version has a different set of graphics rendering features and up to three subtypes.

The F3DEX Microcode Series
In addition to the seven basic microcodes, there are seven additional modified versions of gspFast3D, gspF3DNoN, and gspLine3D that have been specially modified to .fifo subtypes to improve performance. These modified versions are:
gspF3DEX
gspF3DEX.NoN
gspF3DLX
gspF3DLX.NoN
gspF3DLX.Rej
gspF3DLP.Rej
gspL3DEX
Together these seven modified microcode versions are known as the "F3DEX microcode series" or the "F3DEX package."


F3DEX - gspF3DEX.fifo.o or gspF3DEX.NoN.fifo.o
These are extended versions of the Fast3D microcode. The vertex cache size is increased to 32, and gSP2Triangles, a GBI command for displaying two triangles at once, is supported. Not supported is the gSP1Quadrangle command, a GBI command for displaying rectangles that was supported in F3DEX Version 1.21 and earlier versions. (However, this is emulated by gSP2Triangles.)



The vertex cache size in Fast3d is 16 vertices, which is kinda limiting (well 32 is limiting too). A triangle can only access vertices from a scope of 16 vertices. The 0x04 command is used to load vertices, and subsequent triangle commands (0xBF) can only access vertices in the cache, so in some complex models you might end up storing multiple instances of the same vertices. Compiling microcode from imported models would require some optimization algorithm that would group sequences of vertices to avoid repetition and minimize the use of the 0x04 command. It can get complicated when models using multiple textures are broken down in pieces by the texture commands.

____________________
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 2075/5390
EXP: 29050437
For next: 284568

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 01-06-08 06:39:00 AM (last edited by HyperHacker at 01-06-08 03:40 AM) Link | Quote
Jul - Post #2075 - 01-06-08 01:39:00am
Ah, that explains this:33 xx yy, 34 xx yy, 35 xx yy, 36 xx yy,
37 xx yy, 38 xx yy, 39 xx yy, 3A xx yy,
3B xx yy, 3C xx yy, 3D xx yy, 3E xx yy,
3F xx yy, 40 xx yy, 41 xx yy, 42 xx yy,
43 xx yy, 44 xx yy, 45 xx yy, 46 xx yy,
47 xx yy, 48 xx yy, 49 xx yy, 4A xx yy,
4B xx yy, 4C xx yy, 4D xx yy, 4E xx yy,
4F xx yy, 50 xx yy, 51 xx yy, 52 xx yy: Set polygon data offset.
yyxx: Offset (start of polygon data plus this)
Note: This is polygon #, multiply by 14 (0xE) to get address.
These commands set the location within the polygon file to read polygon data from, and upload polygon data to the RSP. The command # itself specifies the number of polygons. Note that 33 and 34 are never actually used in the game.
RSP Commands:
0400bbbb 04aaaaaa Load Vertex (b=# of bytes of vertex data, a=address to load from)
Note: The value of b is (Command # * 0x410) - 1. (todo: that can't be right )

I think I goofed up tracing that a bit (0x410?), and "polygons" should probably be replaced with "vertices". Either way, now I know why it does what it does if you switch those commands around.

It'd be interesting to see if we could move that spinning Nintendo logo to SM64, but I haven't looked into where it is in the ROM yet. I wouldn't be surprised if it's just some hardcoded display lists. Damn near everything is hardcoded in this game. (Fortunately, the routines are also quite inefficient and so can easily be replaced with ones that read from a table, leaving plenty of extra space. )

____________________
messiaen
Catgirl
Level: 68


Posts: 66/1085
EXP: 2594041
For next: 134759

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 05-02-08 10:51:50 AM (last edited by messiaen at 05-03-08 07:16 PM) Link | Quote
I found this very useful bit of information by Cellar Dweller about commands 0xB7 and 0xB6:

---

SetGeometryMode and ClearGeometryMode are 0xb7 and 0xb6 respectively. There are no parameters in the first 32 bits. The lower 32 bits contain the flags that are to be set or cleared.

0x00000001 - use Z buffering
0x00000004 - use shading
0x00000200 - enable smooth shading(otherwise use flat shading)
0x00001000 - cull front facing triangles
0x00002000 - cull back facing triangles
0x00010000 - enable fog
0x00020000 - enable lighting
0x00040000 - generate texture coords using the normal
0x00080000 - generate texture coords (not sure how this works)

---

Searching Google for info I found this Mupen RSP_GX plugin source. In the beggining of the code there is a list of RSP commands.

The 0x40000 flag seems interesting, maybe I can use this to generate better texture coordinates for custom geometry. I searched for the ROM and it is used a few times, so I may investigate further. The 0x800000 is never used, maybe it only works with newer games/RSP version?
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 363/621
EXP: 1135505
For next: 21614

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 12-07-08 03:20:52 AM (last edited by VL-Tone at 12-07-08 12:51 AM) Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Now that I'm thinking of fixing bugs in the TT64 polygon decoder, there's a few things I would like to confirm:

First is something I should've known from the beginning, but I'm just not sure anymore.

The SetGeometryMode will set the specified bit(s) to 1 leaving the other bits in the geometry mode intact, right?

The ClearGeometryMode will set the specified bit(s) to 0 leaving the other bits in the geometry mode intact, right?

Also, which bit is responsible for turning on polygon coloring? I mean, which bit will make the engine interpret the 3 last bytes or so of each vertex item as a color instead of a normal?

Is it 0x00000004 - use shading?

Edit:

I'm pretty sure it's this one instead.
0x00000200 - enable smooth shading(otherwise use flat shading)

It's the one I was using in TT64. I get generally good results, I get the shadow under the bridge in Castle Grounds (or in BBB) but I can't get the shadows on the top of the castle.

____________________
Next newer thread | Next older thread
Jul - SM64 Hacking (Archive) - SM64 RSP Commands New poll - New thread - New reply


Rusted Logic

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

31 database queries, 5 query cache hits.
Query execution time:  0.082321 seconds
Script execution time:  0.065275 seconds
Total render time:  0.147596 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
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 188 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 91 - 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 99 - Warning: unescaped & or unknown entity "&postid"
line 185 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 187 column 9 - Warning: missing <tr>
line 205 column 13 - Warning: missing <tr>
line 206 column 99 - Warning: unescaped & or unknown entity "&postid"
line 208 column 73 - Warning: <style> isn't allowed in <td> elements
line 208 column 9 - Info: <td> previously mentioned
line 208 column 137 - Warning: missing </div>
line 229 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 231 column 9 - Warning: missing <tr>
line 249 column 13 - Warning: missing <tr>
line 250 column 99 - Warning: unescaped & or unknown entity "&postid"
line 265 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 267 column 9 - Warning: missing <tr>
line 285 column 13 - Warning: missing <tr>
line 286 column 99 - Warning: unescaped & or unknown entity "&postid"
line 291 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 293 column 9 - Warning: missing <tr>
line 311 column 13 - Warning: missing <tr>
line 312 column 99 - Warning: unescaped & or unknown entity "&postid"
line 314 column 73 - Warning: <style> isn't allowed in <td> elements
line 314 column 9 - Info: <td> previously mentioned
line 314 column 1511 - Warning: missing </font> before <blockquote>
line 314 column 1590 - Warning: inserting implicit <font>
line 314 column 1590 - Warning: missing </font> before <hr>
line 314 column 1654 - Warning: inserting implicit <font>
line 314 column 1654 - Warning: missing </font> before <hr>
line 315 column 1 - Warning: inserting implicit <font>
line 314 column 137 - Warning: missing </div>
line 321 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 323 column 9 - Warning: missing <tr>
line 341 column 13 - Warning: missing <tr>
line 342 column 99 - Warning: unescaped & or unknown entity "&postid"
line 358 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 360 column 9 - Warning: missing <tr>
line 378 column 13 - Warning: missing <tr>
line 379 column 99 - Warning: unescaped & or unknown entity "&postid"
line 381 column 84 - Warning: <style> isn't allowed in <td> elements
line 381 column 9 - Info: <td> previously mentioned
line 381 column 2151 - Warning: unescaped & or unknown entity "&pr"
line 381 column 2156 - Warning: unescaped & or unknown entity "&lv"
line 381 column 2162 - Warning: unescaped & or unknown entity "&ep"
line 381 column 2170 - Warning: unescaped & or unknown entity "&ed"
line 381 column 2179 - Warning: unescaped & or unknown entity "&ll"
line 381 column 2188 - Warning: unescaped & or unknown entity "&ex"
line 381 column 2198 - Warning: unescaped & or unknown entity "&le"
line 381 column 2208 - Warning: unescaped & or unknown entity "&eg"
line 381 column 2215 - Warning: unescaped & or unknown entity "&et"
line 444 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 446 column 9 - Warning: missing <tr>
line 464 column 13 - Warning: missing <tr>
line 465 column 99 - Warning: unescaped & or unknown entity "&postid"
line 467 column 73 - Warning: <style> isn't allowed in <td> elements
line 467 column 9 - Info: <td> previously mentioned
line 467 column 1511 - Warning: missing </font> before <blockquote>
line 469 column 1675 - Warning: inserting implicit <font>
line 469 column 1675 - Warning: missing </font> before <hr>
line 587 column 1 - Warning: inserting implicit <font>
line 467 column 137 - Warning: missing </div>
line 602 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 604 column 9 - Warning: missing <tr>
line 622 column 13 - Warning: missing <tr>
line 623 column 99 - Warning: unescaped & or unknown entity "&postid"
line 625 column 84 - Warning: <style> isn't allowed in <td> elements
line 625 column 9 - Info: <td> previously mentioned
line 625 column 2151 - Warning: unescaped & or unknown entity "&pr"
line 625 column 2156 - Warning: unescaped & or unknown entity "&lv"
line 625 column 2162 - Warning: unescaped & or unknown entity "&ep"
line 625 column 2170 - Warning: unescaped & or unknown entity "&ed"
line 625 column 2179 - Warning: unescaped & or unknown entity "&ll"
line 625 column 2188 - Warning: unescaped & or unknown entity "&ex"
line 625 column 2198 - Warning: unescaped & or unknown entity "&le"
line 625 column 2208 - Warning: unescaped & or unknown entity "&eg"
line 625 column 2215 - Warning: unescaped & or unknown entity "&et"
line 633 column 4481 - Warning: replacing invalid numeric character reference 149
line 633 column 4586 - Warning: replacing invalid numeric character reference 149
line 636 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 638 column 9 - Warning: missing <tr>
line 656 column 13 - Warning: missing <tr>
line 657 column 99 - Warning: unescaped & or unknown entity "&postid"
line 676 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 678 column 9 - Warning: missing <tr>
line 696 column 13 - Warning: missing <tr>
line 697 column 99 - Warning: unescaped & or unknown entity "&postid"
line 699 column 84 - Warning: <style> isn't allowed in <td> elements
line 699 column 9 - Info: <td> previously mentioned
line 699 column 2151 - Warning: unescaped & or unknown entity "&pr"
line 699 column 2156 - Warning: unescaped & or unknown entity "&lv"
line 699 column 2162 - Warning: unescaped & or unknown entity "&ep"
line 699 column 2170 - Warning: unescaped & or unknown entity "&ed"
line 699 column 2179 - Warning: unescaped & or unknown entity "&ll"
line 699 column 2188 - Warning: unescaped & or unknown entity "&ex"
line 699 column 2198 - Warning: unescaped & or unknown entity "&le"
line 699 column 2208 - Warning: unescaped & or unknown entity "&eg"
line 699 column 2215 - Warning: unescaped & or unknown entity "&et"
line 699 column 2684 - Warning: replacing invalid numeric character reference 149
line 699 column 2789 - Warning: replacing invalid numeric character reference 149
line 702 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 704 column 9 - Warning: missing <tr>
line 722 column 13 - Warning: missing <tr>
line 723 column 99 - Warning: unescaped & or unknown entity "&postid"
line 725 column 73 - Warning: <style> isn't allowed in <td> elements
line 725 column 9 - Info: <td> previously mentioned
line 730 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 732 column 9 - Warning: missing <tr>
line 750 column 13 - Warning: missing <tr>
line 751 column 99 - Warning: unescaped & or unknown entity "&postid"
line 753 column 84 - Warning: <style> isn't allowed in <td> elements
line 753 column 9 - Info: <td> previously mentioned
line 753 column 2151 - Warning: unescaped & or unknown entity "&pr"
line 753 column 2156 - Warning: unescaped & or unknown entity "&lv"
line 753 column 2162 - Warning: unescaped & or unknown entity "&ep"
line 753 column 2170 - Warning: unescaped & or unknown entity "&ed"
line 753 column 2179 - Warning: unescaped & or unknown entity "&ll"
line 753 column 2188 - Warning: unescaped & or unknown entity "&ex"
line 753 column 2199 - Warning: unescaped & or unknown entity "&le"
line 753 column 2210 - Warning: unescaped & or unknown entity "&eg"
line 753 column 2217 - Warning: unescaped & or unknown entity "&et"
line 770 column 4484 - Warning: unescaped & or unknown entity "&config"
line 773 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 775 column 9 - Warning: missing <tr>
line 793 column 13 - Warning: missing <tr>
line 794 column 99 - Warning: unescaped & or unknown entity "&postid"
line 796 column 73 - Warning: <style> isn't allowed in <td> elements
line 796 column 9 - Info: <td> previously mentioned
line 796 column 137 - Warning: missing </div>
line 799 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 801 column 9 - Warning: missing <tr>
line 819 column 13 - Warning: missing <tr>
line 820 column 99 - Warning: unescaped & or unknown entity "&postid"
line 822 column 84 - Warning: <style> isn't allowed in <td> elements
line 822 column 9 - Info: <td> previously mentioned
line 822 column 2151 - Warning: unescaped & or unknown entity "&pr"
line 822 column 2156 - Warning: unescaped & or unknown entity "&lv"
line 822 column 2162 - Warning: unescaped & or unknown entity "&ep"
line 822 column 2170 - Warning: unescaped & or unknown entity "&ed"
line 822 column 2179 - Warning: unescaped & or unknown entity "&ll"
line 822 column 2188 - Warning: unescaped & or unknown entity "&ex"
line 822 column 2199 - Warning: unescaped & or unknown entity "&le"
line 822 column 2210 - Warning: unescaped & or unknown entity "&eg"
line 822 column 2217 - Warning: unescaped & or unknown entity "&et"
line 826 column 3163 - Warning: unescaped & or unknown entity "&config"
line 829 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 831 column 9 - Warning: missing <tr>
line 849 column 13 - Warning: missing <tr>
line 850 column 99 - Warning: unescaped & or unknown entity "&postid"
line 852 column 73 - Warning: <style> isn't allowed in <td> elements
line 852 column 9 - Info: <td> previously mentioned
line 852 column 1511 - Warning: missing </font> before <blockquote>
line 852 column 1590 - Warning: inserting implicit <font>
line 852 column 1590 - Warning: missing </font> before <hr>
line 852 column 1658 - Warning: inserting implicit <font>
line 852 column 1658 - Warning: missing </font> before <hr>
line 857 column 1 - Warning: inserting implicit <font>
line 857 column 1 - Warning: missing </font> before <blockquote>
line 861 column 2818 - Warning: inserting implicit <font>
line 861 column 2818 - Warning: missing </font> before <hr>
line 861 column 2822 - Warning: inserting implicit <font>
line 861 column 2822 - Warning: missing </font> before <hr>
line 881 column 3617 - Warning: inserting implicit <font>
line 881 column 3617 - Warning: missing </font> before <hr>
line 881 column 3621 - Warning: inserting implicit <font>
line 881 column 3621 - Warning: missing </font> before <hr>
line 883 column 1 - Warning: inserting implicit <font>
line 852 column 137 - Warning: missing </div>
line 887 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 889 column 9 - Warning: missing <tr>
line 907 column 13 - Warning: missing <tr>
line 908 column 99 - Warning: unescaped & or unknown entity "&postid"
line 910 column 84 - Warning: <style> isn't allowed in <td> elements
line 910 column 9 - Info: <td> previously mentioned
line 926 column 4006 - Warning: unescaped & or unknown entity "&config"
line 926 column 4196 - Warning: unescaped & or unknown entity "&pr"
line 926 column 4201 - Warning: unescaped & or unknown entity "&lv"
line 926 column 4207 - Warning: unescaped & or unknown entity "&ep"
line 926 column 4215 - Warning: unescaped & or unknown entity "&ed"
line 926 column 4224 - Warning: unescaped & or unknown entity "&ll"
line 926 column 4233 - Warning: unescaped & or unknown entity "&ex"
line 926 column 4244 - Warning: unescaped & or unknown entity "&le"
line 926 column 4255 - Warning: unescaped & or unknown entity "&eg"
line 926 column 4262 - Warning: unescaped & or unknown entity "&et"
line 929 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 931 column 9 - Warning: missing <tr>
line 949 column 13 - Warning: missing <tr>
line 950 column 99 - Warning: unescaped & or unknown entity "&postid"
line 970 column 892 - Warning: unescaped & or unknown entity "&format"
line 970 column 904 - Warning: unescaped & or unknown entity "&path"
line 975 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 977 column 9 - Warning: missing <tr>
line 995 column 13 - Warning: missing <tr>
line 996 column 99 - Warning: unescaped & or unknown entity "&postid"
line 998 column 73 - Warning: <style> isn't allowed in <td> elements
line 998 column 9 - Info: <td> previously mentioned
line 998 column 137 - Warning: missing </div>
line 1018 column 17 - Warning: missing <tr>
line 1018 column 17 - Warning: discarding unexpected <table>
line 1021 column 35 - Warning: missing <tr>
line 1021 column 50 - Warning: missing </font> before </td>
line 1021 column 91 - Warning: missing </font> before </table>
line 1023 column 35 - Warning: missing <tr>
line 1023 column 50 - Warning: missing </font> before </td>
line 1024 column 37 - Warning: unescaped & or unknown entity "&id"
line 1023 column 188 - Warning: missing </font> before </table>
line 1025 column 17 - Warning: discarding unexpected </textarea>
line 1025 column 28 - Warning: discarding unexpected </form>
line 1025 column 35 - Warning: discarding unexpected </embed>
line 1025 column 43 - Warning: discarding unexpected </noembed>
line 1025 column 53 - Warning: discarding unexpected </noscript>
line 1025 column 64 - Warning: discarding unexpected </noembed>
line 1025 column 74 - Warning: discarding unexpected </embed>
line 1025 column 82 - Warning: discarding unexpected </table>
line 1025 column 90 - Warning: discarding unexpected </table>
line 1027 column 9 - Warning: missing </font> before <table>
line 1039 column 25 - Warning: discarding unexpected </font>
line 1048 column 57 - Warning: discarding unexpected </font>
line 1026 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 245 - 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 162 column 11 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 190 column 22 - Warning: <img> lacks "alt" attribute
line 190 column 63 - Warning: <img> lacks "alt" attribute
line 190 column 112 - Warning: <img> lacks "alt" attribute
line 190 column 162 - Warning: <img> lacks "alt" attribute
line 201 column 15 - Warning: <img> lacks "alt" attribute
line 208 column 693 - Warning: <img> lacks "alt" attribute
line 222 column 3844 - Warning: <img> proprietary attribute value "absmiddle"
line 222 column 3844 - Warning: <img> lacks "alt" attribute
line 226 column 4094 - Warning: <img> lacks "alt" attribute
line 226 column 4253 - Warning: <img> lacks "alt" attribute
line 233 column 14 - Warning: <img> proprietary attribute value "absmiddle"
line 233 column 14 - Warning: <img> lacks "alt" attribute
line 233 column 57 - Warning: <img> proprietary attribute value "absmiddle"
line 233 column 57 - Warning: <img> lacks "alt" attribute
line 233 column 100 - Warning: <img> proprietary attribute value "absmiddle"
line 233 column 100 - Warning: <img> lacks "alt" attribute
line 233 column 143 - Warning: <img> proprietary attribute value "absmiddle"
line 233 column 143 - Warning: <img> lacks "alt" attribute
line 234 column 22 - Warning: <img> lacks "alt" attribute
line 234 column 63 - Warning: <img> lacks "alt" attribute
line 234 column 112 - Warning: <img> lacks "alt" attribute
line 234 column 162 - Warning: <img> lacks "alt" attribute
line 235 column 11 - Warning: <img> lacks "alt" attribute
line 245 column 15 - Warning: <img> lacks "alt" attribute
line 269 column 11 - Warning: <img> lacks "alt" attribute
line 270 column 22 - Warning: <img> lacks "alt" attribute
line 270 column 63 - Warning: <img> lacks "alt" attribute
line 270 column 112 - Warning: <img> lacks "alt" attribute
line 270 column 161 - Warning: <img> lacks "alt" attribute
line 271 column 11 - Warning: <img> lacks "alt" attribute
line 281 column 15 - Warning: <img> lacks "alt" attribute
line 296 column 22 - Warning: <img> lacks "alt" attribute
line 296 column 63 - Warning: <img> lacks "alt" attribute
line 296 column 112 - Warning: <img> lacks "alt" attribute
line 296 column 162 - Warning: <img> lacks "alt" attribute
line 307 column 15 - Warning: <img> lacks "alt" attribute
line 314 column 693 - Warning: <img> lacks "alt" attribute
line 318 column 2454 - Warning: <img> lacks "alt" attribute
line 318 column 2613 - Warning: <img> lacks "alt" attribute
line 325 column 14 - Warning: <img> proprietary attribute value "absmiddle"
line 325 column 14 - Warning: <img> lacks "alt" attribute
line 325 column 57 - Warning: <img> proprietary attribute value "absmiddle"
line 325 column 57 - Warning: <img> lacks "alt" attribute
line 325 column 100 - Warning: <img> proprietary attribute value "absmiddle"
line 325 column 100 - Warning: <img> lacks "alt" attribute
line 325 column 143 - Warning: <img> proprietary attribute value "absmiddle"
line 325 column 143 - Warning: <img> lacks "alt" attribute
line 326 column 22 - Warning: <img> lacks "alt" attribute
line 326 column 63 - Warning: <img> lacks "alt" attribute
line 326 column 112 - Warning: <img> lacks "alt" attribute
line 326 column 162 - Warning: <img> lacks "alt" attribute
line 327 column 11 - Warning: <img> lacks "alt" attribute
line 337 column 15 - Warning: <img> lacks "alt" attribute
line 363 column 23 - Warning: <img> lacks "alt" attribute
line 363 column 64 - Warning: <img> lacks "alt" attribute
line 363 column 113 - Warning: <img> lacks "alt" attribute
line 363 column 163 - Warning: <img> lacks "alt" attribute
line 374 column 15 - Warning: <img> lacks "alt" attribute
line 381 column 2094 - Warning: <img> lacks "alt" attribute
line 441 column 6816 - Warning: <img> proprietary attribute value "absmiddle"
line 441 column 6816 - Warning: <img> lacks "alt" attribute
line 441 column 8359 - Warning: <img> lacks "alt" attribute
line 449 column 22 - Warning: <img> lacks "alt" attribute
line 449 column 63 - Warning: <img> lacks "alt" attribute
line 449 column 112 - Warning: <img> lacks "alt" attribute
line 449 column 162 - Warning: <img> lacks "alt" attribute
line 460 column 15 - Warning: <img> lacks "alt" attribute
line 467 column 693 - Warning: <img> lacks "alt" attribute
line 599 column 7269 - Warning: <img> lacks "alt" attribute
line 599 column 7428 - Warning: <img> lacks "alt" attribute
line 607 column 23 - Warning: <img> lacks "alt" attribute
line 607 column 64 - Warning: <img> lacks "alt" attribute
line 607 column 113 - Warning: <img> lacks "alt" attribute
line 607 column 163 - Warning: <img> lacks "alt" attribute
line 618 column 15 - Warning: <img> lacks "alt" attribute
line 625 column 2094 - Warning: <img> lacks "alt" attribute
line 625 column 2498 - Warning: <img> proprietary attribute value "absmiddle"
line 625 column 2498 - Warning: <img> lacks "alt" attribute
line 627 column 2726 - Warning: <img> proprietary attribute value "absmiddle"
line 627 column 2726 - Warning: <img> lacks "alt" attribute
line 633 column 4071 - Warning: <img> proprietary attribute value "absmiddle"
line 633 column 4071 - Warning: <img> lacks "alt" attribute
line 633 column 4249 - Warning: <img> lacks "alt" attribute
line 640 column 14 - Warning: <img> proprietary attribute value "absmiddle"
line 640 column 14 - Warning: <img> lacks "alt" attribute
line 640 column 57 - Warning: <img> proprietary attribute value "absmiddle"
line 640 column 57 - Warning: <img> lacks "alt" attribute
line 640 column 100 - Warning: <img> proprietary attribute value "absmiddle"
line 640 column 100 - Warning: <img> lacks "alt" attribute
line 640 column 143 - Warning: <img> proprietary attribute value "absmiddle"
line 640 column 143 - Warning: <img> lacks "alt" attribute
line 641 column 22 - Warning: <img> lacks "alt" attribute
line 641 column 63 - Warning: <img> lacks "alt" attribute
line 641 column 112 - Warning: <img> lacks "alt" attribute
line 641 column 162 - Warning: <img> lacks "alt" attribute
line 642 column 11 - Warning: <img> lacks "alt" attribute
line 652 column 15 - Warning: <img> lacks "alt" attribute
line 681 column 23 - Warning: <img> lacks "alt" attribute
line 681 column 64 - Warning: <img> lacks "alt" attribute
line 681 column 113 - Warning: <img> lacks "alt" attribute
line 681 column 163 - Warning: <img> lacks "alt" attribute
line 692 column 15 - Warning: <img> lacks "alt" attribute
line 699 column 2094 - Warning: <img> lacks "alt" attribute
line 699 column 2452 - Warning: <img> lacks "alt" attribute
line 707 column 23 - Warning: <img> lacks "alt" attribute
line 707 column 64 - Warning: <img> lacks "alt" attribute
line 707 column 113 - Warning: <img> lacks "alt" attribute
line 707 column 163 - Warning: <img> lacks "alt" attribute
line 708 column 11 - Warning: <img> lacks "alt" attribute
line 718 column 15 - Warning: <img> lacks "alt" attribute
line 725 column 1262 - Warning: <img> proprietary attribute value "absmiddle"
line 725 column 1262 - Warning: <img> lacks "alt" attribute
line 735 column 23 - Warning: <img> lacks "alt" attribute
line 735 column 64 - Warning: <img> lacks "alt" attribute
line 735 column 113 - Warning: <img> lacks "alt" attribute
line 735 column 163 - Warning: <img> lacks "alt" attribute
line 746 column 15 - Warning: <img> lacks "alt" attribute
line 753 column 2094 - Warning: <img> lacks "alt" attribute
line 753 column 2363 - Warning: <img> proprietary attribute value "absmiddle"
line 753 column 2363 - Warning: <img> lacks "alt" attribute
line 759 column 3322 - Warning: <img> proprietary attribute value "absmiddle"
line 759 column 3322 - Warning: <img> lacks "alt" attribute
line 763 column 3640 - Warning: <img> proprietary attribute value "absmiddle"
line 763 column 3640 - Warning: <img> lacks "alt" attribute
line 768 column 3969 - Warning: <img> lacks "alt" attribute
line 769 column 4059 - Warning: <img> lacks "alt" attribute
line 770 column 4228 - Warning: <img> proprietary attribute value "absmiddle"
line 770 column 4228 - Warning: <img> lacks "alt" attribute
line 770 column 4495 - Warning: <img> lacks "alt" attribute
line 778 column 22 - Warning: <img> lacks "alt" attribute
line 778 column 63 - Warning: <img> lacks "alt" attribute
line 778 column 112 - Warning: <img> lacks "alt" attribute
line 778 column 162 - Warning: <img> lacks "alt" attribute
line 789 column 15 - Warning: <img> lacks "alt" attribute
line 796 column 693 - Warning: <img> lacks "alt" attribute
line 796 column 1753 - Warning: <img> lacks "alt" attribute
line 796 column 1912 - Warning: <img> lacks "alt" attribute
line 804 column 23 - Warning: <img> lacks "alt" attribute
line 804 column 64 - Warning: <img> lacks "alt" attribute
line 804 column 113 - Warning: <img> lacks "alt" attribute
line 804 column 163 - Warning: <img> lacks "alt" attribute
line 815 column 15 - Warning: <img> lacks "alt" attribute
line 822 column 2094 - Warning: <img> lacks "alt" attribute
line 824 column 2840 - Warning: <img> proprietary attribute value "absmiddle"
line 824 column 2840 - Warning: <img> lacks "alt" attribute
line 826 column 3174 - Warning: <img> lacks "alt" attribute
line 834 column 22 - Warning: <img> lacks "alt" attribute
line 834 column 63 - Warning: <img> lacks "alt" attribute
line 834 column 112 - Warning: <img> lacks "alt" attribute
line 834 column 162 - Warning: <img> lacks "alt" attribute
line 845 column 15 - Warning: <img> lacks "alt" attribute
line 852 column 693 - Warning: <img> lacks "alt" attribute
line 854 column 2229 - Warning: <img> proprietary attribute value "absmiddle"
line 854 column 2229 - Warning: <img> lacks "alt" attribute
line 884 column 4823 - Warning: <img> lacks "alt" attribute
line 884 column 4982 - Warning: <img> lacks "alt" attribute
line 892 column 23 - Warning: <img> lacks "alt" attribute
line 892 column 64 - Warning: <img> lacks "alt" attribute
line 892 column 113 - Warning: <img> lacks "alt" attribute
line 892 column 163 - Warning: <img> lacks "alt" attribute
line 903 column 15 - Warning: <img> lacks "alt" attribute
line 923 column 3065 - Warning: <img> proprietary attribute value "absmiddle"
line 923 column 3065 - Warning: <img> lacks "alt" attribute
line 924 column 3324 - Warning: <img> proprietary attribute value "absmiddle"
line 924 column 3324 - Warning: <img> lacks "alt" attribute
line 926 column 3783 - Warning: <img> proprietary attribute value "absmiddle"
line 926 column 3783 - Warning: <img> lacks "alt" attribute
line 926 column 4017 - Warning: <img> lacks "alt" attribute
line 926 column 4139 - Warning: <img> lacks "alt" attribute
line 934 column 22 - Warning: <img> lacks "alt" attribute
line 934 column 63 - Warning: <img> lacks "alt" attribute
line 934 column 111 - Warning: <img> lacks "alt" attribute
line 934 column 161 - Warning: <img> lacks "alt" attribute
line 945 column 15 - Warning: <img> lacks "alt" attribute
line 980 column 22 - Warning: <img> lacks "alt" attribute
line 980 column 63 - Warning: <img> lacks "alt" attribute
line 980 column 112 - Warning: <img> lacks "alt" attribute
line 980 column 162 - Warning: <img> lacks "alt" attribute
line 991 column 15 - Warning: <img> lacks "alt" attribute
line 998 column 693 - Warning: <img> lacks "alt" attribute
line 1015 column 2659 - Warning: <img> lacks "alt" attribute
line 1015 column 2818 - Warning: <img> lacks "alt" attribute
line 1024 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 1024 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 1024 column 245 - Warning: <img> proprietary attribute value "absmiddle"
line 1033 column 25 - Warning: <img> lacks "alt" attribute
line 1038 column 267 - Warning: <img> lacks "alt" attribute
line 149 column 50 - Warning: trimming empty <font>
line 314 column 1511 - Warning: trimming empty <font>
line 469 column 1675 - Warning: trimming empty <font>
line 852 column 1511 - Warning: trimming empty <font>
line 861 column 2818 - Warning: trimming empty <font>
line 881 column 3617 - Warning: trimming empty <font>
line 1018 column 17 - Warning: trimming empty <tr>
line 1021 column 50 - Warning: trimming empty <font>
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 206 column 27 - Warning: <nobr> is not approved by W3C
line 208 column 157 - Warning: <table> proprietary attribute "height"
line 208 column 222 - Warning: <td> proprietary attribute "background"
line 208 column 318 - Warning: <td> proprietary attribute "background"
line 208 column 408 - Warning: <table> proprietary attribute "height"
line 208 column 488 - Warning: <td> proprietary attribute "background"
line 208 column 1443 - Warning: <td> proprietary attribute "background"
line 250 column 27 - Warning: <nobr> is not approved by W3C
line 286 column 27 - Warning: <nobr> is not approved by W3C
line 312 column 27 - Warning: <nobr> is not approved by W3C
line 314 column 157 - Warning: <table> proprietary attribute "height"
line 314 column 222 - Warning: <td> proprietary attribute "background"
line 314 column 318 - Warning: <td> proprietary attribute "background"
line 314 column 408 - Warning: <table> proprietary attribute "height"
line 314 column 488 - Warning: <td> proprietary attribute "background"
line 314 column 1443 - Warning: <td> proprietary attribute "background"
line 342 column 27 - Warning: <nobr> is not approved by W3C
line 379 column 27 - Warning: <nobr> is not approved by W3C
line 465 column 27 - Warning: <nobr> is not approved by W3C
line 467 column 157 - Warning: <table> proprietary attribute "height"
line 467 column 222 - Warning: <td> proprietary attribute "background"
line 467 column 318 - Warning: <td> proprietary attribute "background"
line 467 column 408 - Warning: <table> proprietary attribute "height"
line 467 column 488 - Warning: <td> proprietary attribute "background"
line 467 column 1443 - Warning: <td> proprietary attribute "background"
line 623 column 27 - Warning: <nobr> is not approved by W3C
line 657 column 27 - Warning: <nobr> is not approved by W3C
line 697 column 27 - Warning: <nobr> is not approved by W3C
line 723 column 27 - Warning: <nobr> is not approved by W3C
line 751 column 27 - Warning: <nobr> is not approved by W3C
line 794 column 27 - Warning: <nobr> is not approved by W3C
line 796 column 157 - Warning: <table> proprietary attribute "height"
line 796 column 222 - Warning: <td> proprietary attribute "background"
line 796 column 318 - Warning: <td> proprietary attribute "background"
line 796 column 408 - Warning: <table> proprietary attribute "height"
line 796 column 488 - Warning: <td> proprietary attribute "background"
line 796 column 1443 - Warning: <td> proprietary attribute "background"
line 820 column 27 - Warning: <nobr> is not approved by W3C
line 850 column 27 - Warning: <nobr> is not approved by W3C
line 852 column 157 - Warning: <table> proprietary attribute "height"
line 852 column 222 - Warning: <td> proprietary attribute "background"
line 852 column 318 - Warning: <td> proprietary attribute "background"
line 852 column 408 - Warning: <table> proprietary attribute "height"
line 852 column 488 - Warning: <td> proprietary attribute "background"
line 852 column 1443 - Warning: <td> proprietary attribute "background"
line 908 column 27 - Warning: <nobr> is not approved by W3C
line 950 column 27 - Warning: <nobr> is not approved by W3C
line 996 column 27 - Warning: <nobr> is not approved by W3C
line 998 column 157 - Warning: <table> proprietary attribute "height"
line 998 column 222 - Warning: <td> proprietary attribute "background"
line 998 column 318 - Warning: <td> proprietary attribute "background"
line 998 column 408 - Warning: <table> proprietary attribute "height"
line 998 column 488 - Warning: <td> proprietary attribute "background"
line 998 column 1443 - Warning: <td> proprietary attribute "background"
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 486 warnings and 0 errors!


Character codes 128 to 159 (U+0080 to U+009F) are not allowed in HTML;
even if they were, they would likely be unprintable control characters.
Tidy assumed you wanted to refer to a character with the same byte value in the
specified encoding and replaced that reference with the Unicode
equivalent.

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