Bitcoin Forum
April 25, 2024, 12:01:37 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 »
  Print  
Author Topic: Hacking The KNC Firmware: Overclocking  (Read 144307 times)
idee2013
Sr. Member
****
Offline Offline

Activity: 407
Merit: 250


View Profile
January 11, 2014, 12:22:16 AM
 #361

how is the extra watt after overclocked the jupiter?Huh

does anyone know?Huh

do you read any previous posts? you ask very often things that were already answered.
1714046497
Hero Member
*
Offline Offline

Posts: 1714046497

View Profile Personal Message (Offline)

Ignore
1714046497
Reply with quote  #2

1714046497
Report to moderator
1714046497
Hero Member
*
Offline Offline

Posts: 1714046497

View Profile Personal Message (Offline)

Ignore
1714046497
Reply with quote  #2

1714046497
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714046497
Hero Member
*
Offline Offline

Posts: 1714046497

View Profile Personal Message (Offline)

Ignore
1714046497
Reply with quote  #2

1714046497
Report to moderator
1714046497
Hero Member
*
Offline Offline

Posts: 1714046497

View Profile Personal Message (Offline)

Ignore
1714046497
Reply with quote  #2

1714046497
Report to moderator
tolip_wen
Sr. Member
****
Offline Offline

Activity: 386
Merit: 250


View Profile
January 11, 2014, 12:24:29 AM
 #362

OK, finally decided to give this a go, october jupiter 8 vrm which was running around 557GH

Followed the instructions to change to 211, and initially speed was awful around 400, so using cyper's post as a guide started messing with advanced page replicating the spi voltage and frequency and then tweaking the various die voltages, after a while I only managed to get it back up to around 500 and decided to give up.

Flashed back to 0.98 and the miner returned to it's usual 557GH

Today decided to give it another go, flashed back to 0.99.1-tune, made the alteration to 221 and restarted and it was up around 620 which was excellent, when I looked at the advanced page it had remembered all my settings from the previous attempt.

Most of the dies were running around 50A similar to the screenshot cyper posted, but one was up at 54A so I lowered it's voltage setting and hit apply, immediately the miner dropped back down to 550GH and all the dies dropped back down to 42-43A

Very confused now  Huh

Pressing the 'Apply" button sets the clocks back to default.
Restart modified .sh again after making any changes on Advanced page.

YMMV
Smiley



'twisted research and opinion' donations happily accepted @
13362fxFAdrhagmCvSmFy4WoHrNRPG2V57
My sub 1337 vanity address Wink
Tigggger
Legendary
*
Offline Offline

Activity: 1098
Merit: 1000



View Profile
January 11, 2014, 12:47:46 AM
 #363

Very confused now  Huh

Applying anything at the Advanced page removes the overclock with immediate effect.
To restart the overclock just do /config/zzz.sh restart or whatever file you use.

So basically when tweaking the voltages whenever you hit Apply you need to restart the overclock file via SSH Wink

I would suggest to install BFGminer - it is much easier to tweak as you can see the hash rate of each individual board.

Pressing the 'Apply" button sets the clocks back to default.
Restart modified .sh again after making any changes on Advanced page.


Thank you both Smiley

I had just modified the existing cgminer.sh, restarted the miner and although I can see shares at the pool I've lost http & ssh access so will need to carry on tweaking tomorrow when I have physical access to reboot it manually.

tiozes
Legendary
*
Offline Offline

Activity: 861
Merit: 1000


“Create Your Decentralized Life”


View Profile
January 11, 2014, 02:57:07 AM
 #364

Just jumped upto 231 myself...put copper heatsinks on vrms and removed pci extenders cause i was only getting 11.5v on one module and the extenders were getting very hot...running great now 12v-11.9v on all modules now, temps are 64, 57, 53, 52 with 2 fans on rear modules...around 55-56a per vrm and getting around .8% hw errors...up .4% from 211 but i suppose i could push alittle more volts and lower it and getting around 660-680 poolside on eligius Smiley ty ty maybe i'll make ROI outta this machine yet...7 btc more n its party time!! Thanks for this thread  Grin

Great point about the PCI extenders, I need to take a look at that as well since my back modules seem to be running 11.6-.7.. Given your experience any recommendations on how to run the cables, or did you manage to find a power supply with long enough PCIe power cables?

ya what cablez said, but i do have a psu that has long pcie cables...and update on hashrate...eligius 12hr rate says 673gh/s Cheesy and my cgminer says 674...that is pretty darn close Smiley


hi, I have a jupiter October, Might you tell me what settings I have for that power?

F.A 1200W

I'm Spanish and I do not quite understand.

regards

        ▄▄███████████▄▄       
     ▄██████▀▀▀▀▀▀▀██████▄   
    ████▀             ▀████▄ 
  ▄███▀    ▄▄▄████▄▄    ▀████
▐███     ██████████▀     ███▌
 ███▌    ██████▀▀        ▄███▌
▐███    ▐████▄      ▄▄▄██████▌
▐███▌  ▄████████▄▄██████████▀
████████▀█████████████▀▀▀   
  ████▌    ▀▀██████▀▀      ▄▄
   ▀████▄              ▄▄████▌
     ▀█████▄▄▄    ▄▄▄██████▀▀
       ▀▀██████████████▀▀     
             ▀▀▀▀▀▀           



        ▄▄███████████▄▄       
     ▄██████▀▀▀▀▀▀▀██████▄   
    ████▀             ▀████▄ 
  ▄███▀    ▄▄▄████▄▄    ▀████
▐███     ██████████▀     ███▌
 ███▌    ██████▀▀        ▄███▌
▐███    ▐████▄      ▄▄▄██████▌
▐███▌  ▄████████▄▄██████████▀
████████▀█████████████▀▀▀   
  ████▌    ▀▀██████▀▀      ▄▄
   ▀████▄              ▄▄████▌
     ▀█████▄▄▄    ▄▄▄██████▀▀
       ▀▀██████████████▀▀     
             ▀▀▀▀▀▀           
ncs0ne
Full Member
***
Offline Offline

Activity: 147
Merit: 100


software developer


View Profile
January 11, 2014, 11:07:32 AM
 #365

(...)

hi, I have a jupiter October, Might you tell me what settings I have for that power?

F.A 1200W

I'm Spanish and I do not quite understand.

regards


¿Qué parte no es comprensible para usted? (google translate)


All you need to do is: modify line 61 in the cgminer starter where the clock speed is being set.
It is located on your miner at the following path '/etc/init.d/cgminer.sh'

The line looks like this:
 cmd=$(printf "0x86,0x%02X,0x01,0xF1" $c) 

Change it for example (https://bitcointalk.org/index.php?topic=313978.msg3985606#msg3985606) to
 cmd=$(printf "0x86,0x%02X,0x02,0x11" $c)

Notice, please, after rebooting changes are gone, therefore copy the file to '/config' first and modify it there.
After modification is done you can execute the modified starter with argument 'restart'
 /config/cgminer.sh restart

Then keep an eye on your advanced tab values and temps!
And cgminer to find best clock setting for your device.

tiozes
Legendary
*
Offline Offline

Activity: 861
Merit: 1000


“Create Your Decentralized Life”


View Profile
January 11, 2014, 02:36:56 PM
 #366

(...)

hi, I have a jupiter October, Might you tell me what settings I have for that power?

F.A 1200W

I'm Spanish and I do not quite understand.

regards


¿Qué parte no es comprensible para usted? (google translate)


All you need to do is: modify line 61 in the cgminer starter where the clock speed is being set.
It is located on your miner at the following path '/etc/init.d/cgminer.sh'

The line looks like this:
 cmd=$(printf "0x86,0x%02X,0x01,0xF1" $c) 

Change it for example (https://bitcointalk.org/index.php?topic=313978.msg3985606#msg3985606) to
 cmd=$(printf "0x86,0x%02X,0x02,0x11" $c)

Notice, please, after rebooting changes are gone, therefore copy the file to '/config' first and modify it there.
After modification is done you can execute the modified starter with argument 'restart'
 /config/cgminer.sh restart

Then keep an eye on your advanced tab values and temps!
And cgminer to find best clock setting for your device.

Do I have to change the voltage and frequency SPI SPI? in paragraph advanced

This is what confuses me

regards

        ▄▄███████████▄▄       
     ▄██████▀▀▀▀▀▀▀██████▄   
    ████▀             ▀████▄ 
  ▄███▀    ▄▄▄████▄▄    ▀████
▐███     ██████████▀     ███▌
 ███▌    ██████▀▀        ▄███▌
▐███    ▐████▄      ▄▄▄██████▌
▐███▌  ▄████████▄▄██████████▀
████████▀█████████████▀▀▀   
  ████▌    ▀▀██████▀▀      ▄▄
   ▀████▄              ▄▄████▌
     ▀█████▄▄▄    ▄▄▄██████▀▀
       ▀▀██████████████▀▀     
             ▀▀▀▀▀▀           



        ▄▄███████████▄▄       
     ▄██████▀▀▀▀▀▀▀██████▄   
    ████▀             ▀████▄ 
  ▄███▀    ▄▄▄████▄▄    ▀████
▐███     ██████████▀     ███▌
 ███▌    ██████▀▀        ▄███▌
▐███    ▐████▄      ▄▄▄██████▌
▐███▌  ▄████████▄▄██████████▀
████████▀█████████████▀▀▀   
  ████▌    ▀▀██████▀▀      ▄▄
   ▀████▄              ▄▄████▌
     ▀█████▄▄▄    ▄▄▄██████▀▀
       ▀▀██████████████▀▀     
             ▀▀▀▀▀▀           
mruiter
Sr. Member
****
Offline Offline

Activity: 281
Merit: 250



View Profile
January 11, 2014, 03:02:10 PM
 #367

i changed the spi to sevral values
i have not seen any changes in hashing speed or hardware error. And half my dies work on 251 which i considder the max that can be done whith de vrms and board design i guess

❘|❘ ICONOMI  Fund Management Platform
  LINK TO ICO | LINK TO DISCUSSION
jelin1984
Legendary
*
Offline Offline

Activity: 2408
Merit: 1004



View Profile
January 11, 2014, 06:49:35 PM
 #368

Mining Status

CGMiner Status   Running (pid=1896)
Last Checked   Sat Jan 11 18:48:43 UTC 2014
Avg. Hash Rate   639 Gh/s
Difficulty Accepted   3,026,944
Difficulty Rejected   23,552 (0.8 %)
Hardware Errors   61,345 (1.9 %)
WU   8,937
Difficulty Stale   0
Network Blocks   50
Pool Rejected   0.8 %
Pool Stale   0
Best Share   3,130,981
Found Blocks   0
HW Status

ASIC slot #1   50.0 ℃
ASIC slot #2   -
ASIC slot #3   48.5 ℃
ASIC slot #4   54.0 ℃
ASIC slot #5   40.0 ℃
ASIC slot #6   -
ImI
Legendary
*
Offline Offline

Activity: 1946
Merit: 1019



View Profile
January 11, 2014, 08:45:55 PM
 #369

Mining Status

CGMiner Status   Running (pid=1896)
Last Checked   Sat Jan 11 18:48:43 UTC 2014
Avg. Hash Rate   639 Gh/s
Difficulty Accepted   3,026,944
Difficulty Rejected   23,552 (0.8 %)
Hardware Errors   61,345 (1.9 %)
WU   8,937
Difficulty Stale   0
Network Blocks   50
Pool Rejected   0.8 %
Pool Stale   0
Best Share   3,130,981
Found Blocks   0
HW Status

ASIC slot #1   50.0 ℃
ASIC slot #2   -
ASIC slot #3   48.5 ℃
ASIC slot #4   54.0 ℃
ASIC slot #5   40.0 ℃
ASIC slot #6   -


October Jup with 8 vrm / 4 vrm?
mwarrior
Member
**
Offline Offline

Activity: 329
Merit: 10


https://eloncity.io/


View Profile
January 11, 2014, 09:54:07 PM
Last edit: January 12, 2014, 10:21:37 AM by mwarrior
 #370

OK, finally decided to give this a go, october jupiter 8 vrm which was running around 557GH

Followed the instructions to change to 211, and initially speed was awful around 400, so using cyper's post as a guide started messing with advanced page replicating the spi voltage and frequency and then tweaking the various die voltages, after a while I only managed to get it back up to around 500 and decided to give up.

Flashed back to 0.98 and the miner returned to it's usual 557GH

Today decided to give it another go, flashed back to 0.99.1-tune, made the alteration to 221 and restarted and it was up around 620 which was excellent, when I looked at the advanced page it had remembered all my settings from the previous attempt.

Most of the dies were running around 50A similar to the screenshot cyper posted, but one was up at 54A so I lowered it's voltage setting and hit apply, immediately the miner dropped back down to 550GH and all the dies dropped back down to 42-43A

Very confused now  Huh

I have an October Jupiter w/8 VRM's.  For line 61 I am using the following which gets me 600 - 615 GH/s with stable temps.

cmd=$(printf "0x86,0x%02X,0x02,0x01" $c)  

My factory code is as follows which is different from what everyone else appears to have for some reason.   cmd=$(printf "0x86,0x%02X,0x01,0xD1" $c)

You might want to give it a whirl.  

-MW

jelin1984
Legendary
*
Offline Offline

Activity: 2408
Merit: 1004



View Profile
January 11, 2014, 10:30:30 PM
 #371

October with 4vrm
Sonic_AFB
Newbie
*
Offline Offline

Activity: 11
Merit: 0


View Profile
January 11, 2014, 11:59:18 PM
 #372

Hi, i am the brother of tiozes, we connect to the jupiter using putty, then press Q, later we open /etc/init.d/cgminer.sh and in the line 61..

http://imagizer.imageshack.us/v2/800x600q90/138/eago.jpg
CeeCee
Full Member
***
Offline Offline

Activity: 237
Merit: 100


View Profile
January 12, 2014, 12:24:06 AM
 #373

update to at least firmware v0.99
Sonic_AFB
Newbie
*
Offline Offline

Activity: 11
Merit: 0


View Profile
January 12, 2014, 12:42:27 AM
 #374

update to at least firmware v0.99
have 0.99 tuning firmware
ncs0ne
Full Member
***
Offline Offline

Activity: 147
Merit: 100


software developer


View Profile
January 12, 2014, 01:15:33 AM
Last edit: January 14, 2014, 04:35:40 PM by ncs0ne
 #375

Hi, i am the brother of tiozes, we connect to the jupiter using putty, then press Q, later we open /etc/init.d/cgminer.sh and in the line 61..

[img removed]

That file belongs to a November device. [edit: with latest 0.99-2 the file has changed, might be October, too]
It enables the cores only, but there's no section where the clock speed is set as far as I can read it.
That 're-enable all cores' part can be found on both, October and November devices.
Code:
for p in $good_ports ; do
    # re-enable all cores
    i=0
    while [[ $i -lt 192 ]] ; do
     i2cset -y 2 0x2$p $i 1
        i=$((i+1))
    done
    spi_ena=$(( spi_ena | (1 << $p) ))
done


This 'Re-enable PPL' part with 'spi-test' calls is missing on November devices (as well as on 0.99-2 in general), however 'spi-test' binary is available.
Code:
# Re-enable PLL                                         
i2cset -y 2 0x71 1 $((p+1))                            
for c in 0 1 2 3 ; do                                  
    cmd=$(printf "0x84,0x%02X,0,0" $c)              
    spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/dev/null
    cmd=$(printf "0x86,0x%02X,0x01,0xD1" $c)
    spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/dev/null
    cmd=$(printf "0x85,0x%02X,0,0" $c)              
    spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/dev/null
done

for each good port the following is executed on October devices to set the clock speed, before all cores are re-enabled.
The line where the clock speed is set is this one
Code:
cmd=$(printf "0x86,0x%02X,0x01,0xD1" $c)
spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/dev/null
it means for each port, all 4 chips are touched ($c=[0..3])
Code:
spi-test -s 50000 -OHC -D /dev/spidev1.0 0x86,0x00,0x01,0xD1
..
spi-test -s 50000 -OHC -D /dev/spidev1.0 0x86,0x03,0x01,0xD1

So you could play around with this command on a November unit.
Overclocking might work if they are not already at their max and most important:
be aware please you can blow up your hardware without any possibility for RMA.

Here's some info about spi-test to understand better what this magic line does
Code:
Usage: spi-test [-DsbdlnHOLC3] [data,..]
  -D --device   device to use (default /dev/spidev1.1)
  -s --speed    max speed (Hz)
  -d --delay    delay (usec)
  -b --bpw      bits per word
  -n --len      length
  -l --loop     loopback
  -H --cpha     clock phase
  -O --cpol     clock polarity
  -L --lsb      least significant bit first
  -C --cs-high  chip select active high
  -3 --3wire    SI/SO signals shared
  data is a series of octets to send, separated by comma, or b# to switch to another bits per word

Sonic_AFB
Newbie
*
Offline Offline

Activity: 11
Merit: 0


View Profile
January 12, 2014, 02:15:01 AM
 #376

Done firmware changed to 0.99.1 tuning (or tuned i don't remember) actually mining at 626 Gh/s with cmd=$(printf "0x86,0x%02X,0x02,0x01" $c)

A lot of thanks Smiley
Cablez
Legendary
*
Offline Offline

Activity: 1400
Merit: 1000


I owe my soul to the Bitcoin code...


View Profile
January 12, 2014, 02:46:19 AM
 #377

I might have missed it but if one is running bfgminer instead of cgminer the file to change is different correct?  Like /etc/init.d/bfgminer.sh

Tired of substandard power distribution in your ASIC setup???   Chris' Custom Cablez will get you sorted out right!  No job too hard so PM me for a quote
Check my products or ask a question here: https://bitcointalk.org/index.php?topic=74397.0
ncs0ne
Full Member
***
Offline Offline

Activity: 147
Merit: 100


software developer


View Profile
January 12, 2014, 03:17:20 AM
 #378

I might have missed it but if one is running bfgminer instead of cgminer the file to change is different correct?  Like /etc/init.d/bfgminer.sh

No, actually it is the same file '/etc/init.d/cgminer', content has changed.
Here's the complete one from the latest (0.99-2), no difference between October/November devices btw.
It's missing the spi-test line, so I added the part before 'set e', as well as the last line in 'do_start()' and the line in 'do_stop()' into my modified starter based on 0.99-tune.

Code:
#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

use_bfgminer=
if [ -f /config/miner.conf ]; then
. /config/miner.conf
fi
if [ "$use_bfgminer" = true ] ; then
DAEMON=/usr/bin/bfgminer
NAME=bfgminer
DESC="BFGMiner daemon"
EXTRA_OPT="-S knc:auto"
else
DAEMON=/usr/bin/cgminer
NAME=cgminer
DESC="Cgminer daemon"
EXTRA_OPT=
fi

set -e

test -x "$DAEMON" || exit 0

do_start() {
# Stop SPI poller
spi_ena=0
i2cset -y 2 0x71 2 $spi_ena

good_ports=""
bad_ports=""

# CLear faults in megadlynx's
for b in 3 4 5 6 7 8 ; do
for d in 0 1 2 3 4 5 6 7 ; do
i2cset -y $b 0x1$d 3 >/dev/null 2>&1 || true
done
done

for p in 0 1 2 3 4 5 ; do
i2cset -y 2 0x71 1 $((p+1))
good_flag=0
ar="$(spi-test -s 50000 -OHC -D /dev/spidev1.0 0x80,3,0,0,0,0,0,0 | tail -c 13)"
                if [ "x$ar" = "x00 30 A0 01" ] ; then
good_flag=1
fi
ar="$(spi-test -s 50000 -OHC -D /dev/spidev1.0 0x80,2,0,0,0,0,0,0 | tail -c 13)"
                if [ "x$ar" = "x00 30 A0 01" ] ; then
good_flag=1
fi
ar="$(spi-test -s 50000 -OHC -D /dev/spidev1.0 0x80,1,0,0,0,0,0,0 | tail -c 13)"
                if [ "x$ar" = "x00 30 A0 01" ] ; then
good_flag=1
fi
ar="$(spi-test -s 50000 -OHC -D /dev/spidev1.0 0x80,0,0,0,0,0,0,0 | tail -c 13)"
                if [ "x$ar" = "x00 30 A0 01" ] ; then
good_flag=1
fi

if [ "$good_flag" = "1" ] ; then
good_ports=$good_ports" $p"
else
bad_ports=$bad_ports" $p"
fi
done

if [ -n "$good_ports" ] ; then
for p in $good_ports ; do
# re-enable all cores
i=0
while [[ $i -lt 192 ]] ; do
i2cset -y 2 0x2$p $i 1
i=$((i+1))
done
spi_ena=$(( spi_ena | (1 << $p) ))
done
fi
if [ -n "$bad_ports" ] ; then
for p in $bad_ports ; do
# disable all cores
i=0
while [[ $i -lt 192 ]] ; do
i2cset -y 2 0x2$p $i 0
i=$((i+1))
done
spi_ena=$(( spi_ena & ~(1 << $p) ))
done
fi

# Disable direct SPI
i2cset -y 2 0x71 1 0

# Enable SPI poller
i2cset -y 2 0x71 2 $spi_ena

start-stop-daemon -b -S -x screen -- -S cgminer -t cgminer -m -d "$DAEMON" --api-listen -c /config/cgminer.conf $EXTRA_OPT
}

do_stop() {
killall -9 bfgminer cgminer 2>/dev/null || true
}
case "$1" in
  start)
        echo -n "Starting $DESC: "
do_start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
do_stop
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        do_stop
        do_start
        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

When enabling bfgminer, file '/config/miner.conf' which is loaded at the beginning contains
Code:
use_bfgminer="true"

baller1
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
January 12, 2014, 03:44:30 AM
 #379

update to at least firmware v0.99
have 0.99 tuning firmware

@Sonic
remove bert-mod. then it should be right.
elasticband
Legendary
*
Offline Offline

Activity: 1036
Merit: 1000


Nighty Night Don't Let The Trolls Bite Nom Nom Nom


View Profile
January 12, 2014, 10:13:54 AM
Last edit: January 12, 2014, 12:18:32 PM by elasticband
 #380


Code:
 # Re-enable PLL
                i2cset -y 2 0x71 1 $((p+1))
                        for c in 0 1 2 3 ; do
                                cmd=$(printf "0x84,0x%02X,0,0" $c)
                                spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/
                                cmd=$(printf "0x86,0x%02X,0x01,0xD1" $c)
                                spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/
                                cmd=$(printf "0x85,0x%02X,0,0" $c)
                                spi-test -s 50000 -OHC -D /dev/spidev1.0 $cmd >/
                        done
[/quote]


trying to add the above, but running into problems...

Quote
Restarting Cgminer daemon: /etc/init.d/cgminer.sh: line 134: can't create /: Is a directory



edit: ohhhhh how i hate this editing...... if at first you don't succeed...... offer a reward for someone to teach you...... any takers?
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!