Skip to content

Instantly share code, notes, and snippets.

@mikaelweave
Last active July 27, 2020 14:57
Show Gist options
  • Save mikaelweave/294e888533200ba2c312461975ae7365 to your computer and use it in GitHub Desktop.
Save mikaelweave/294e888533200ba2c312461975ae7365 to your computer and use it in GitHub Desktop.
Mac OSX Display DSPC Hex Decoder
#!/bin/bash
function hex2values {
# https://opensource.apple.com/source/IOKitUser/IOKitUser-67/graphics.subproj/IOGraphicsLibPrivate.h
clock=0x${1:0:4}
horizActive=0x${1:4:2}
horizBlanking=0x${1:6:2}
horizHigh=0x${1:8:2}
verticalActive=0x${1:10:2}
verticalBlanking=0x${1:12:2}
verticalHigh=0x${1:14:2}
horizSyncOffset=0x${1:16:2}
horizSyncWidth=0x${1:18:2}
verticalSyncOffsetWidth=0x${1:20:2}
syncHigh=0x${1:22:2}
horizImageSize=0x${1:24:2}
verticalImageSize=0x${1:26:2}
imageSizeHigh=0x${1:28:2}
horizBorder=0x${1:30:2}
verticalBorder=0x${1:32:2}
flags=0x${1:34:2}
echo "clock - ${clock}"
echo "horizActive - ${horizActive}"
echo "horizBlanking - ${horizBlanking}"
echo "horizHigh - ${horizHigh}"
echo "verticalActive - ${verticalActive}"
echo "verticalBlanking - ${verticalBlanking}"
echo "verticalHigh - ${verticalHigh}"
echo "horizSyncOffset - ${horizSyncOffset}"
echo "horizSyncWidth - ${horizSyncWidth}"
echo "verticalSyncOffsetWidth - ${verticalSyncOffsetWidth}"
echo "syncHigh - ${syncHigh}"
echo "horizImageSize - ${horizImageSize}"
echo "verticalImageSize - ${verticalImageSize}"
echo "imageSizeHigh - ${imageSizeHigh}"
echo "horizBorder - ${horizBorder}"
echo "verticalBorder - ${verticalBorder}"
echo "flags - ${flags}"
echo
# https://opensource.apple.com/source/IOKitUser/IOKitUser-67/graphics.subproj/IODisplayLib.c.auto.html
printf "csPixelClock %u\n" $(((($clock & 0xff) << 8) | ($clock >> 8)))
printf "csHorizontalActive %u\n" $(($horizActive | (($horizHigh & 0xf0) << 4)))
printf "csHorizontalBlanking %u\n" $(($horizBlanking | (($horizHigh & 0x0f) << 8)))
printf "csVerticalActive %u\n" $(($verticalActive | (($verticalHigh & 0xf0) << 4)))
printf "csVerticalBlanking %u\n" $(($verticalBlanking | (($verticalHigh & 0x0f) << 8)))
printf "csHorizontalSyncOffset %u\n" $(($horizSyncOffset | (($syncHigh & 0xc0) << 2)))
printf "csHorizontalSyncPulseWidth %u\n" $(($horizSyncWidth | (($syncHigh & 0x30) << 4)))
printf "csVerticalSyncOffset %u\n" $(((($verticalSyncOffsetWidth & 0xf0) >> 4) | (($syncHigh & 0x0c) << 4)))
printf "csVerticalSyncPulseWidth %u\n" $(((($verticalSyncOffsetWidth & 0x0f) >> 0) | (($syncHigh & 0x03) << 4)))
printf "csHorizontalBorderLeft %u\n" $horizBorder
printf "csHorizontalBorderRight %u\n" $horizBorder
printf "csVerticalBorderTop %u\n" $verticalBorder
printf "csVerticalBorderBottom %u\n" $verticalBorder
printf "csHorizontalSyncConfig %u\n" $((($flags & 2) ? kSyncPositivePolarityMask : 0))
printf "csHorizontalSyncLevel 0\n"
printf "csVerticalSyncConfig %u\n" $((($flags & 4) ? kSyncPositivePolarityMask : 0))
printf "csVerticalSyncLevel 0\n"
}
#hex2values "292700E050381F4040403A00000000000018"
hex2values "286800E0F0701F8040403A00000000000018"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment