fw-decoder-regs.txt 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. PVR350 Video decoder registers 0x02002800 -> 0x02002B00
  2. =======================================================
  3. This list has been worked out through trial and error. There will be mistakes
  4. and omissions. Some registers have no obvious effect so it's hard to say what
  5. they do, while others interact with each other, or require a certain load
  6. sequence. Horizontal filter setup is one example, with six registers working
  7. in unison and requiring a certain load sequence to correctly configure. The
  8. indexed colour palette is much easier to set at just two registers, but again
  9. it requires a certain load sequence.
  10. Some registers are fussy about what they are set to. Load in a bad value & the
  11. decoder will fail. A firmware reload will often recover, but sometimes a reset
  12. is required. For registers containing size information, setting them to 0 is
  13. generally a bad idea. For other control registers i.e. 2878, you'll only find
  14. out what values are bad when it hangs.
  15. --------------------------------------------------------------------------------
  16. 2800
  17. bit 0
  18. Decoder enable
  19. 0 = disable
  20. 1 = enable
  21. --------------------------------------------------------------------------------
  22. 2804
  23. bits 0:31
  24. Decoder horizontal Y alias register 1
  25. ---------------
  26. 2808
  27. bits 0:31
  28. Decoder horizontal Y alias register 2
  29. ---------------
  30. 280C
  31. bits 0:31
  32. Decoder horizontal Y alias register 3
  33. ---------------
  34. 2810
  35. bits 0:31
  36. Decoder horizontal Y alias register 4
  37. ---------------
  38. 2814
  39. bits 0:31
  40. Decoder horizontal Y alias register 5
  41. ---------------
  42. 2818
  43. bits 0:31
  44. Decoder horizontal Y alias trigger
  45. These six registers control the horizontal aliasing filter for the Y plane.
  46. The first five registers must all be loaded before accessing the trigger
  47. (2818), as this register actually clocks the data through for the first
  48. five.
  49. To correctly program set the filter, this whole procedure must be done 16
  50. times. The actual register contents are copied from a lookup-table in the
  51. firmware which contains 4 different filter settings.
  52. --------------------------------------------------------------------------------
  53. 281C
  54. bits 0:31
  55. Decoder horizontal UV alias register 1
  56. ---------------
  57. 2820
  58. bits 0:31
  59. Decoder horizontal UV alias register 2
  60. ---------------
  61. 2824
  62. bits 0:31
  63. Decoder horizontal UV alias register 3
  64. ---------------
  65. 2828
  66. bits 0:31
  67. Decoder horizontal UV alias register 4
  68. ---------------
  69. 282C
  70. bits 0:31
  71. Decoder horizontal UV alias register 5
  72. ---------------
  73. 2830
  74. bits 0:31
  75. Decoder horizontal UV alias trigger
  76. These six registers control the horizontal aliasing for the UV plane.
  77. Operation is the same as the Y filter, with 2830 being the trigger
  78. register.
  79. --------------------------------------------------------------------------------
  80. 2834
  81. bits 0:15
  82. Decoder Y source width in pixels
  83. bits 16:31
  84. Decoder Y destination width in pixels
  85. ---------------
  86. 2838
  87. bits 0:15
  88. Decoder UV source width in pixels
  89. bits 16:31
  90. Decoder UV destination width in pixels
  91. NOTE: For both registers, the resulting image must be fully visible on
  92. screen. If the image exceeds the right edge both the source and destination
  93. size must be adjusted to reflect the visible portion. For the source width,
  94. you must take into account the scaling when calculating the new value.
  95. --------------------------------------------------------------------------------
  96. 283C
  97. bits 0:31
  98. Decoder Y horizontal scaling
  99. Normally = Reg 2854 >> 2
  100. ---------------
  101. 2840
  102. bits 0:31
  103. Decoder ?? unknown - horizontal scaling
  104. Usually 0x00080514
  105. ---------------
  106. 2844
  107. bits 0:31
  108. Decoder UV horizontal scaling
  109. Normally = Reg 2854 >> 2
  110. ---------------
  111. 2848
  112. bits 0:31
  113. Decoder ?? unknown - horizontal scaling
  114. Usually 0x00100514
  115. ---------------
  116. 284C
  117. bits 0:31
  118. Decoder ?? unknown - Y plane
  119. Usually 0x00200020
  120. ---------------
  121. 2850
  122. bits 0:31
  123. Decoder ?? unknown - UV plane
  124. Usually 0x00200020
  125. ---------------
  126. 2854
  127. bits 0:31
  128. Decoder 'master' value for horizontal scaling
  129. ---------------
  130. 2858
  131. bits 0:31
  132. Decoder ?? unknown
  133. Usually 0
  134. ---------------
  135. 285C
  136. bits 0:31
  137. Decoder ?? unknown
  138. Normally = Reg 2854 >> 1
  139. ---------------
  140. 2860
  141. bits 0:31
  142. Decoder ?? unknown
  143. Usually 0
  144. ---------------
  145. 2864
  146. bits 0:31
  147. Decoder ?? unknown
  148. Normally = Reg 2854 >> 1
  149. ---------------
  150. 2868
  151. bits 0:31
  152. Decoder ?? unknown
  153. Usually 0
  154. Most of these registers either control horizontal scaling, or appear linked
  155. to it in some way. Register 2854 contains the 'master' value & the other
  156. registers can be calculated from that one. You must also remember to
  157. correctly set the divider in Reg 2874.
  158. To enlarge:
  159. Reg 2854 = (source_width * 0x00200000) / destination_width
  160. Reg 2874 = No divide
  161. To reduce from full size down to half size:
  162. Reg 2854 = (source_width/2 * 0x00200000) / destination width
  163. Reg 2874 = Divide by 2
  164. To reduce from half size down to quarter size:
  165. Reg 2854 = (source_width/4 * 0x00200000) / destination width
  166. Reg 2874 = Divide by 4
  167. The result is always rounded up.
  168. --------------------------------------------------------------------------------
  169. 286C
  170. bits 0:15
  171. Decoder horizontal Y buffer offset
  172. bits 15:31
  173. Decoder horizontal UV buffer offset
  174. Offset into the video image buffer. If the offset is gradually incremented,
  175. the on screen image will move left & wrap around higher up on the right.
  176. --------------------------------------------------------------------------------
  177. 2870
  178. bits 0:15
  179. Decoder horizontal Y output offset
  180. bits 16:31
  181. Decoder horizontal UV output offset
  182. Offsets the actual video output. Controls output alignment of the Y & UV
  183. planes. The higher the value, the greater the shift to the left. Use
  184. reg 2890 to move the image right.
  185. --------------------------------------------------------------------------------
  186. 2874
  187. bits 0:1
  188. Decoder horizontal Y output size divider
  189. 00 = No divide
  190. 01 = Divide by 2
  191. 10 = Divide by 3
  192. bits 4:5
  193. Decoder horizontal UV output size divider
  194. 00 = No divide
  195. 01 = Divide by 2
  196. 10 = Divide by 3
  197. bit 8
  198. Decoder ?? unknown
  199. 0 = Normal
  200. 1 = Affects video output levels
  201. bit 16
  202. Decoder ?? unknown
  203. 0 = Normal
  204. 1 = Disable horizontal filter
  205. --------------------------------------------------------------------------------
  206. 2878
  207. bit 0
  208. ?? unknown
  209. bit 1
  210. osd on/off
  211. 0 = osd off
  212. 1 = osd on
  213. bit 2
  214. Decoder + osd video timing
  215. 0 = NTSC
  216. 1 = PAL
  217. bits 3:4
  218. ?? unknown
  219. bit 5
  220. Decoder + osd
  221. Swaps upper & lower fields
  222. --------------------------------------------------------------------------------
  223. 287C
  224. bits 0:10
  225. Decoder & osd ?? unknown
  226. Moves entire screen horizontally. Starts at 0x005 with the screen
  227. shifted heavily to the right. Incrementing in steps of 0x004 will
  228. gradually shift the screen to the left.
  229. bits 11:31
  230. ?? unknown
  231. Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL)
  232. --------------------------------------------------------------------------------
  233. 2880 -------- ?? unknown
  234. 2884 -------- ?? unknown
  235. --------------------------------------------------------------------------------
  236. 2888
  237. bit 0
  238. Decoder + osd ?? unknown
  239. 0 = Normal
  240. 1 = Misaligned fields (Correctable through 289C & 28A4)
  241. bit 4
  242. ?? unknown
  243. bit 8
  244. ?? unknown
  245. Warning: Bad values will require a firmware reload to recover.
  246. Known to be bad are 0x000,0x011,0x100,0x111
  247. --------------------------------------------------------------------------------
  248. 288C
  249. bits 0:15
  250. osd ?? unknown
  251. Appears to affect the osd position stability. The higher the value the
  252. more unstable it becomes. Decoder output remains stable.
  253. bits 16:31
  254. osd ?? unknown
  255. Same as bits 0:15
  256. --------------------------------------------------------------------------------
  257. 2890
  258. bits 0:11
  259. Decoder output horizontal offset.
  260. Horizontal offset moves the video image right. A small left shift is
  261. possible, but it's better to use reg 2870 for that due to its greater
  262. range.
  263. NOTE: Video corruption will occur if video window is shifted off the right
  264. edge. To avoid this read the notes for 2834 & 2838.
  265. --------------------------------------------------------------------------------
  266. 2894
  267. bits 0:23
  268. Decoder output video surround colour.
  269. Contains the colour (in yuv) used to fill the screen when the video is
  270. running in a window.
  271. --------------------------------------------------------------------------------
  272. 2898
  273. bits 0:23
  274. Decoder video window colour
  275. Contains the colour (in yuv) used to fill the video window when the
  276. video is turned off.
  277. bit 24
  278. Decoder video output
  279. 0 = Video on
  280. 1 = Video off
  281. bit 28
  282. Decoder plane order
  283. 0 = Y,UV
  284. 1 = UV,Y
  285. bit 29
  286. Decoder second plane byte order
  287. 0 = Normal (UV)
  288. 1 = Swapped (VU)
  289. In normal usage, the first plane is Y & the second plane is UV. Though the
  290. order of the planes can be swapped, only the byte order of the second plane
  291. can be swapped. This isn't much use for the Y plane, but can be useful for
  292. the UV plane.
  293. --------------------------------------------------------------------------------
  294. 289C
  295. bits 0:15
  296. Decoder vertical field offset 1
  297. bits 16:31
  298. Decoder vertical field offset 2
  299. Controls field output vertical alignment. The higher the number, the lower
  300. the image on screen. Known starting values are 0x011E0017 (NTSC) &
  301. 0x01500017 (PAL)
  302. --------------------------------------------------------------------------------
  303. 28A0
  304. bits 0:15
  305. Decoder & osd width in pixels
  306. bits 16:31
  307. Decoder & osd height in pixels
  308. All output from the decoder & osd are disabled beyond this area. Decoder
  309. output will simply go black outside of this region. If the osd tries to
  310. exceed this area it will become corrupt.
  311. --------------------------------------------------------------------------------
  312. 28A4
  313. bits 0:11
  314. osd left shift.
  315. Has a range of 0x770->0x7FF. With the exception of 0, any value outside of
  316. this range corrupts the osd.
  317. --------------------------------------------------------------------------------
  318. 28A8
  319. bits 0:15
  320. osd vertical field offset 1
  321. bits 16:31
  322. osd vertical field offset 2
  323. Controls field output vertical alignment. The higher the number, the lower
  324. the image on screen. Known starting values are 0x011E0017 (NTSC) &
  325. 0x01500017 (PAL)
  326. --------------------------------------------------------------------------------
  327. 28AC -------- ?? unknown
  328. |
  329. V
  330. 28BC -------- ?? unknown
  331. --------------------------------------------------------------------------------
  332. 28C0
  333. bit 0
  334. Current output field
  335. 0 = first field
  336. 1 = second field
  337. bits 16:31
  338. Current scanline
  339. The scanline counts from the top line of the first field
  340. through to the last line of the second field.
  341. --------------------------------------------------------------------------------
  342. 28C4 -------- ?? unknown
  343. |
  344. V
  345. 28F8 -------- ?? unknown
  346. --------------------------------------------------------------------------------
  347. 28FC
  348. bit 0
  349. ?? unknown
  350. 0 = Normal
  351. 1 = Breaks decoder & osd output
  352. --------------------------------------------------------------------------------
  353. 2900
  354. bits 0:31
  355. Decoder vertical Y alias register 1
  356. ---------------
  357. 2904
  358. bits 0:31
  359. Decoder vertical Y alias register 2
  360. ---------------
  361. 2908
  362. bits 0:31
  363. Decoder vertical Y alias trigger
  364. These three registers control the vertical aliasing filter for the Y plane.
  365. Operation is similar to the horizontal Y filter (2804). The only real
  366. difference is that there are only two registers to set before accessing
  367. the trigger register (2908). As for the horizontal filter, the values are
  368. taken from a lookup table in the firmware, and the procedure must be
  369. repeated 16 times to fully program the filter.
  370. --------------------------------------------------------------------------------
  371. 290C
  372. bits 0:31
  373. Decoder vertical UV alias register 1
  374. ---------------
  375. 2910
  376. bits 0:31
  377. Decoder vertical UV alias register 2
  378. ---------------
  379. 2914
  380. bits 0:31
  381. Decoder vertical UV alias trigger
  382. These three registers control the vertical aliasing filter for the UV
  383. plane. Operation is the same as the Y filter, with 2914 being the trigger.
  384. --------------------------------------------------------------------------------
  385. 2918
  386. bits 0:15
  387. Decoder Y source height in pixels
  388. bits 16:31
  389. Decoder Y destination height in pixels
  390. ---------------
  391. 291C
  392. bits 0:15
  393. Decoder UV source height in pixels divided by 2
  394. bits 16:31
  395. Decoder UV destination height in pixels
  396. NOTE: For both registers, the resulting image must be fully visible on
  397. screen. If the image exceeds the bottom edge both the source and
  398. destination size must be adjusted to reflect the visible portion. For the
  399. source height, you must take into account the scaling when calculating the
  400. new value.
  401. --------------------------------------------------------------------------------
  402. 2920
  403. bits 0:31
  404. Decoder Y vertical scaling
  405. Normally = Reg 2930 >> 2
  406. ---------------
  407. 2924
  408. bits 0:31
  409. Decoder Y vertical scaling
  410. Normally = Reg 2920 + 0x514
  411. ---------------
  412. 2928
  413. bits 0:31
  414. Decoder UV vertical scaling
  415. When enlarging = Reg 2930 >> 2
  416. When reducing = Reg 2930 >> 3
  417. ---------------
  418. 292C
  419. bits 0:31
  420. Decoder UV vertical scaling
  421. Normally = Reg 2928 + 0x514
  422. ---------------
  423. 2930
  424. bits 0:31
  425. Decoder 'master' value for vertical scaling
  426. ---------------
  427. 2934
  428. bits 0:31
  429. Decoder ?? unknown - Y vertical scaling
  430. ---------------
  431. 2938
  432. bits 0:31
  433. Decoder Y vertical scaling
  434. Normally = Reg 2930
  435. ---------------
  436. 293C
  437. bits 0:31
  438. Decoder ?? unknown - Y vertical scaling
  439. ---------------
  440. 2940
  441. bits 0:31
  442. Decoder UV vertical scaling
  443. When enlarging = Reg 2930 >> 1
  444. When reducing = Reg 2930
  445. ---------------
  446. 2944
  447. bits 0:31
  448. Decoder ?? unknown - UV vertical scaling
  449. ---------------
  450. 2948
  451. bits 0:31
  452. Decoder UV vertical scaling
  453. Normally = Reg 2940
  454. ---------------
  455. 294C
  456. bits 0:31
  457. Decoder ?? unknown - UV vertical scaling
  458. Most of these registers either control vertical scaling, or appear linked
  459. to it in some way. Register 2930 contains the 'master' value & all other
  460. registers can be calculated from that one. You must also remember to
  461. correctly set the divider in Reg 296C
  462. To enlarge:
  463. Reg 2930 = (source_height * 0x00200000) / destination_height
  464. Reg 296C = No divide
  465. To reduce from full size down to half size:
  466. Reg 2930 = (source_height/2 * 0x00200000) / destination height
  467. Reg 296C = Divide by 2
  468. To reduce from half down to quarter.
  469. Reg 2930 = (source_height/4 * 0x00200000) / destination height
  470. Reg 296C = Divide by 4
  471. --------------------------------------------------------------------------------
  472. 2950
  473. bits 0:15
  474. Decoder Y line index into display buffer, first field
  475. bits 16:31
  476. Decoder Y vertical line skip, first field
  477. --------------------------------------------------------------------------------
  478. 2954
  479. bits 0:15
  480. Decoder Y line index into display buffer, second field
  481. bits 16:31
  482. Decoder Y vertical line skip, second field
  483. --------------------------------------------------------------------------------
  484. 2958
  485. bits 0:15
  486. Decoder UV line index into display buffer, first field
  487. bits 16:31
  488. Decoder UV vertical line skip, first field
  489. --------------------------------------------------------------------------------
  490. 295C
  491. bits 0:15
  492. Decoder UV line index into display buffer, second field
  493. bits 16:31
  494. Decoder UV vertical line skip, second field
  495. --------------------------------------------------------------------------------
  496. 2960
  497. bits 0:15
  498. Decoder destination height minus 1
  499. bits 16:31
  500. Decoder destination height divided by 2
  501. --------------------------------------------------------------------------------
  502. 2964
  503. bits 0:15
  504. Decoder Y vertical offset, second field
  505. bits 16:31
  506. Decoder Y vertical offset, first field
  507. These two registers shift the Y plane up. The higher the number, the
  508. greater the shift.
  509. --------------------------------------------------------------------------------
  510. 2968
  511. bits 0:15
  512. Decoder UV vertical offset, second field
  513. bits 16:31
  514. Decoder UV vertical offset, first field
  515. These two registers shift the UV plane up. The higher the number, the
  516. greater the shift.
  517. --------------------------------------------------------------------------------
  518. 296C
  519. bits 0:1
  520. Decoder vertical Y output size divider
  521. 00 = No divide
  522. 01 = Divide by 2
  523. 10 = Divide by 4
  524. bits 8:9
  525. Decoder vertical UV output size divider
  526. 00 = No divide
  527. 01 = Divide by 2
  528. 10 = Divide by 4
  529. --------------------------------------------------------------------------------
  530. 2970
  531. bit 0
  532. Decoder ?? unknown
  533. 0 = Normal
  534. 1 = Affect video output levels
  535. bit 16
  536. Decoder ?? unknown
  537. 0 = Normal
  538. 1 = Disable vertical filter
  539. --------------------------------------------------------------------------------
  540. 2974 -------- ?? unknown
  541. |
  542. V
  543. 29EF -------- ?? unknown
  544. --------------------------------------------------------------------------------
  545. 2A00
  546. bits 0:2
  547. osd colour mode
  548. 000 = 8 bit indexed
  549. 001 = 16 bit (565)
  550. 010 = 15 bit (555)
  551. 011 = 12 bit (444)
  552. 100 = 32 bit (8888)
  553. bits 4:5
  554. osd display bpp
  555. 01 = 8 bit
  556. 10 = 16 bit
  557. 11 = 32 bit
  558. bit 8
  559. osd global alpha
  560. 0 = Off
  561. 1 = On
  562. bit 9
  563. osd local alpha
  564. 0 = Off
  565. 1 = On
  566. bit 10
  567. osd colour key
  568. 0 = Off
  569. 1 = On
  570. bit 11
  571. osd ?? unknown
  572. Must be 1
  573. bit 13
  574. osd colour space
  575. 0 = ARGB
  576. 1 = AYVU
  577. bits 16:31
  578. osd ?? unknown
  579. Must be 0x001B (some kind of buffer pointer ?)
  580. When the bits-per-pixel is set to 8, the colour mode is ignored and
  581. assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth
  582. is honoured, and when using a colour depth that requires fewer bytes than
  583. allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit
  584. index colour, there are 3 padding bytes per pixel. It's also possible to
  585. select 16bpp with a 32 bit colour mode. This results in the pixel width
  586. being doubled, but the color key will not work as expected in this mode.
  587. Colour key is as it suggests. You designate a colour which will become
  588. completely transparent. When using 565, 555 or 444 colour modes, the
  589. colour key is always 16 bits wide. The colour to key on is set in Reg 2A18.
  590. Local alpha works differently depending on the colour mode. For 32bpp & 8
  591. bit indexed, local alpha is a per-pixel 256 step transparency, with 0 being
  592. transparent and 255 being solid. For the 16bpp modes 555 & 444, the unused
  593. bit(s) act as a simple transparency switch, with 0 being solid & 1 being
  594. fully transparent. There is no local alpha support for 16bit 565.
  595. Global alpha is a 256 step transparency that applies to the entire osd,
  596. with 0 being transparent & 255 being solid.
  597. It's possible to combine colour key, local alpha & global alpha.
  598. --------------------------------------------------------------------------------
  599. 2A04
  600. bits 0:15
  601. osd x coord for left edge
  602. bits 16:31
  603. osd y coord for top edge
  604. ---------------
  605. 2A08
  606. bits 0:15
  607. osd x coord for right edge
  608. bits 16:31
  609. osd y coord for bottom edge
  610. For both registers, (0,0) = top left corner of the display area. These
  611. registers do not control the osd size, only where it's positioned & how
  612. much is visible. The visible osd area cannot exceed the right edge of the
  613. display, otherwise the osd will become corrupt. See reg 2A10 for
  614. setting osd width.
  615. --------------------------------------------------------------------------------
  616. 2A0C
  617. bits 0:31
  618. osd buffer index
  619. An index into the osd buffer. Slowly incrementing this moves the osd left,
  620. wrapping around onto the right edge
  621. --------------------------------------------------------------------------------
  622. 2A10
  623. bits 0:11
  624. osd buffer 32 bit word width
  625. Contains the width of the osd measured in 32 bit words. This means that all
  626. colour modes are restricted to a byte width which is divisible by 4.
  627. --------------------------------------------------------------------------------
  628. 2A14
  629. bits 0:15
  630. osd height in pixels
  631. bits 16:32
  632. osd line index into buffer
  633. osd will start displaying from this line.
  634. --------------------------------------------------------------------------------
  635. 2A18
  636. bits 0:31
  637. osd colour key
  638. Contains the colour value which will be transparent.
  639. --------------------------------------------------------------------------------
  640. 2A1C
  641. bits 0:7
  642. osd global alpha
  643. Contains the global alpha value (equiv ivtvfbctl --alpha XX)
  644. --------------------------------------------------------------------------------
  645. 2A20 -------- ?? unknown
  646. |
  647. V
  648. 2A2C -------- ?? unknown
  649. --------------------------------------------------------------------------------
  650. 2A30
  651. bits 0:7
  652. osd colour to change in indexed palette
  653. ---------------
  654. 2A34
  655. bits 0:31
  656. osd colour for indexed palette
  657. To set the new palette, first load the index of the colour to change into
  658. 2A30, then load the new colour into 2A34. The full palette is 256 colours,
  659. so the index range is 0x00-0xFF
  660. --------------------------------------------------------------------------------
  661. 2A38 -------- ?? unknown
  662. 2A3C -------- ?? unknown
  663. --------------------------------------------------------------------------------
  664. 2A40
  665. bits 0:31
  666. osd ?? unknown
  667. Affects overall brightness, wrapping around to black
  668. --------------------------------------------------------------------------------
  669. 2A44
  670. bits 0:31
  671. osd ?? unknown
  672. Green tint
  673. --------------------------------------------------------------------------------
  674. 2A48
  675. bits 0:31
  676. osd ?? unknown
  677. Red tint
  678. --------------------------------------------------------------------------------
  679. 2A4C
  680. bits 0:31
  681. osd ?? unknown
  682. Affects overall brightness, wrapping around to black
  683. --------------------------------------------------------------------------------
  684. 2A50
  685. bits 0:31
  686. osd ?? unknown
  687. Colour shift
  688. --------------------------------------------------------------------------------
  689. 2A54
  690. bits 0:31
  691. osd ?? unknown
  692. Colour shift
  693. --------------------------------------------------------------------------------
  694. 2A58 -------- ?? unknown
  695. |
  696. V
  697. 2AFC -------- ?? unknown
  698. --------------------------------------------------------------------------------
  699. 2B00
  700. bit 0
  701. osd filter control
  702. 0 = filter off
  703. 1 = filter on
  704. bits 1:4
  705. osd ?? unknown
  706. --------------------------------------------------------------------------------
  707. v0.4 - 12 March 2007 - Ian Armstrong (ian@iarmst.demon.co.uk)