Author: wmb Date: 2009-10-27 17:23:11 +0100 (Tue, 27 Oct 2009) New Revision: 1434
Modified: dev/olpc/dcon/viadcon.fth dev/via/unichrome/unichrome.fth dev/via/unichrome/vgamodes.fth Log: OLPC trac 9472 - VESA modes now working - trac ticket is complete.
Modified: dev/olpc/dcon/viadcon.fth =================================================================== --- dev/olpc/dcon/viadcon.fth 2009-10-27 10:35:37 UTC (rev 1433) +++ dev/olpc/dcon/viadcon.fth 2009-10-27 16:23:11 UTC (rev 1434) @@ -241,9 +241,7 @@
: maybe-set-cmos ( -- ) 1 dcon-flag cmos! ;
-: init-xo-display - d# 1200 d# 900 d# 16 set-resolution - +: init-xo-display ( -- ) smb-init
olpc-lcd-mode
Modified: dev/via/unichrome/unichrome.fth =================================================================== --- dev/via/unichrome/unichrome.fth 2009-10-27 10:35:37 UTC (rev 1433) +++ dev/via/unichrome/unichrome.fth 2009-10-27 16:23:11 UTC (rev 1434) @@ -395,7 +395,8 @@
: bpp1! ( depth -- ) case - 8 of 22 endof + 4 of 00 endof + 8 of mode-3? if 00 else 22 then endof d# 16 of b6 endof d# 32 of ae endof ( default ) ae swap @@ -457,8 +458,8 @@
: bpp1@ ( -- depth ) 15 seq@ fe and case - 0 of 4 endof - 22 of 8 endof + 0 of 4 endof + 22 of 8 endof b6 of d# 16 endof ae of d# 32 endof ( default ) 8 swap @@ -475,10 +476,12 @@ 4 of 00 endof 8 of 00 endof d# 16 of 40 endof + d# 24 of c0 endof + d# 30 of 80 endof d# 32 of c0 endof ( default ) c0 swap endcase - c0 67 seq-mask + c0 67 crt-mask ; : fifo-depth2! ( n -- ) 3 >> 1- dup 4 << f0 68 crt-mask dup 3 << 80 94 crt-mask 2 << 80 95 crt-mask ; : fifo-threshold2! ( n -- ) 2 >> dup 0f 68 crt-mask 70 95 crt-mask ; @@ -524,15 +527,7 @@ \ 01 df 01 seq-mask \ 00 03 seq!
- mode-3? mode-12? or if 00 else a2 then e2 15 seq-mask - depth case - 4 of 00 endof - 8 of 00 endof - d# 16 of 14 endof - d# 24 of 0c endof - d# 32 of 0c endof - endcase - 1c 15 seq-mask + depth bpp1!
28 fd 1a seq-mask \ Extended mode memory access (value is 20 in modes 3 and 12)
@@ -579,13 +574,7 @@
width pixels>bytes to /scanline \ Offset - mode-3? mode-12? or if -\ d# 512 - d# 320 - else - /scanline - then - hoffset1! + mode-3? mode-12? or if d# 320 else /scanline then hoffset1!
\ fetch count hdisplay mode-3? mode-12? or if 2* else pixels>bytes then hfetch1! @@ -672,9 +661,22 @@ : start2@ ( -- offset ) 62 crt@ fe and 63 crt@ 64 crt@ 0 bljoin 2 << ; : qdepth@ ( -- depth ) 68 crt@ f0 and 4 >> ; \ Unused bits in regs 94 and 95 too
+: bpp2@ ( -- depth ) + 67 crt@ c0 and case + 0 of 8 endof + 40 of d# 16 endof + 80 of d# 30 endof + c0 of d# 32 endof + endcase +; + : simultaneous-mode-3? ( -- flag ) height d# 400 = ; : simultaneous-mode-12? ( -- flag ) depth 4 = ; + : set-pitch2 ( -- ) + depth bpp2! + 20 67 crt-clr \ Turn off interlace bit + \ Offset - distance from one scanline to the next in the memory array width pixels>bytes to /scanline
@@ -686,18 +688,7 @@ \ If this smaller than hdisplay, the last data replicates horizontally to the right width simultaneous-mode-3? simultaneous-mode-12? or if 8 + 4 * else pixels>bytes then hfetch2! ; -: set-secondary-vga-mode ( mode -- ) - depth case - 4 of 00 endof - 8 of 00 endof - d# 16 of 40 endof - d# 24 of 80 endof - d# 32 of 80 endof - endcase - c0 67 crt-mask - - 00 20 67 crt-mask \ Turn off interlace bit - +: set-secondary-timings ( -- ) htotal htotal2! hdisplay hdisplay2! hblank hblank2! @@ -747,24 +738,6 @@ : vsyncs@ 75 crt@ 76 crt@ 70 and 4 << or ; : vsyncends@ 76 crt@ 0f and vsyncs@ 0f invert and or dup vsyncs@ < if 10 + then ;
-: set-shadow-vga-mode ( -- ) - panel-resolution find-timing-table if exit then - - htotal htotals! - hblankend hblankends! - - vtotal vtotals! - vdisplay vdisplays! - - vblank vblanks! - vblankend vblankends! - - vsync vsyncs! - vsyncend vsyncends! - - set-pitch2 -; - : random-stuff ( -- ) 0 start2! \ Second display starting address
@@ -789,7 +762,7 @@ find-timing-table if exit then
80 17 crt-clr \ Assert reset - Turn off screen - set-secondary-vga-mode + set-secondary-timings random-stuff lower-power \ Turn on power here? @@ -799,43 +772,45 @@ 80 17 crt-set \ Release reset ;
-: scaling-on ( -- ) 07 07 79 crt-mask ; -: scaling-off ( -- ) 00 07 79 crt-mask ; +: scaling-on ( -- ) 07 79 crt-set ; +: scaling-off ( -- ) 07 79 crt-clr ;
: olpc-lcd-mode ( -- ) - c0 c0 1b seq-mask \ Secondary display clock on + panel-resolution d# 16 set-resolution
+ c0 1b seq-set \ Secondary display clock on + panel-resolution set-secondary-mode
-\ 60 60 9b crt-mask \ Sync polarity - negative - 60 60 78 seq-mask \ Sync polarity - negative +\ 60 9b crt-set \ Sync polarity - negative + 60 78 seq-set \ Sync polarity - negative
- scaling-off \ Disable scaling - 00 37 a3 crt-mask \ iga2 from S.L., start addr + scaling-off \ Disable scaling + 37 a3 crt-clr \ iga2 from S.L., start addr
- 30 30 1e seq-mask \ Power up DVP1 pads + 30 1e seq-set \ Power up DVP1 pads
- 0c 0c 2a seq-mask \ Power up LVDS pads -\ 2b fb h# d2 crt-mask -\ c0 c0 h# d4 crt-mask -\ 00 40 h# e8 crt-mask - 80 80 f3 crt-mask \ 18-bit TTL mode - 0a f9 crt! \ V1 Mode Exit-to-Ready Time Control (?) - 0d fb crt! \ IGA2 Interlace VSYNC Timing Register + 0c 2a seq-set \ Power up LVDS pads +\ 2b fb h# d2 crt-mask +\ c0 h# d4 crt-set +\ 40 h# e8 crt-clr + 80 f3 crt-set \ 18-bit TTL mode + 0a f9 crt! \ V1 Mode Exit-to-Ready Time Control (?) + 0d fb crt! \ IGA2 Interlace VSYNC Timing Register \ 00 08 h# 6b crt-mask \ Not simultaneous mode
- 40 40 16 seq-mask \ manual says the bit is reserved, but the viafb driver says "CRT path set to IGA2" + 40 16 seq-set \ manual says the bit is reserved, but the viafb driver says "CRT path set to IGA2" ; : olpc-crt-off ( -- ) - 00 30 1b seq-mask \ IGA1 engine clock off - 30 30 36 crt-mask \ DAC off + 30 1b seq-clr \ IGA1 engine clock off + 30 36 crt-set \ DAC off ; : olpc-crt-on ( -- ) - 30 30 1b seq-mask \ IGA1 engine clock on - 00 30 36 crt-mask \ DAC on + 30 1b seq-set \ IGA1 engine clock on + 30 36 crt-clr \ DAC on ; : olpc-lcd-off ( -- ) - 00 c0 1b seq-mask \ IGA2 engine clock off + c0 1b seq-clr \ IGA2 engine clock off ;
\ The table of scaling params below appears to be half of a Gaussian function, @@ -858,8 +833,8 @@ h# 77 crt@ 2 lshift or h# 79 crt@ 4 rshift 3 and d# 10 lshift or ; -: hscale-on ( -- ) c0 c0 a2 crt-mask ; -: hscale-off ( -- ) 00 c0 a2 crt-mask ; +: hscale-on ( -- ) c0 a2 crt-set ; +: hscale-off ( -- ) c0 a2 crt-clr ; : vscale! ( vscale -- ) \ Distribute the V scale factor among various register bit fields dup 3 lshift 8 h# 79 crt-mask ( vscale ) @@ -871,10 +846,9 @@ h# 78 crt@ 1 lshift or h# 79 crt@ 6 rshift 3 and 9 lshift or ; -: vscale-on ( -- ) 08 08 a2 crt-mask ; -: vscale-off ( -- ) 00 08 a2 crt-mask ; +: vscale-on ( -- ) 08 a2 crt-set ; +: vscale-off ( -- ) 08 a2 crt-clr ;
-\ This configures a : scale-lcd ( -- ) scaling-on set-scaling-params \ Interpolation coefficients ( ) @@ -967,7 +941,7 @@
0 value bias : timing-scale ( value -- value' ) - simultaneous-mode-3? simultaneous-mode-12? or if \ Can't use mode-3? here because res-entry isn't pointing to mode3-entry + mode simultaneous-mode-3? simultaneous-mode-12? or if \ Can't use mode-3? here because res-entry isn't pointing to mode3-entry \ Ratio of VCK to LCDCK, from known settings for those clocks d# 338 d# 569 else @@ -1013,10 +987,6 @@
scale-lcd
-\ d# 808 hoffset2! \ For mode 3; not sure how it's calculated (scale-lcd sets it via set-pitch2) -\ width pixels>bytes hoffset2! \ This is better for testing as it preserves the pitch the text renderer uses -\ mode hdisplay pixels>bytes d# 400 + hoffset2! \ Panel-specific fudge factor - study !!! - mode vpll set-vclk panel pll set-lcdck
@@ -1082,8 +1052,6 @@
\ XXX turn off scaling
-\ width pixels>bytes hoffset2! was here - \ The shadow uses the panel size for horizontal panel htotal htotals! panel htotal hblankends! @@ -1223,11 +1191,11 @@ d# 22 spaces vdisplays@ .5 vblanks@ .5 vsyncs@ .5 vsyncends@ .5 vtotals@ .5 vblankends@ .5 cr - ." fetch1: " hfetch1@ . ." offset1: " hoffset1@ . ." fetch2: " hfetch2@ . ." offset2: " hoffset2@ . + ." fetch1: " hfetch1@ . ." offset1: " hoffset1@ . ." bpp1: " bpp1@ . cr + ." fetch2: " hfetch2@ . ." offset2: " hoffset2@ . ." bpp2: " bpp2@ . cr hex - ." bpp: " bpp1@ . cr - ." VCK: " h# 44 seq@ .3 h# 45 seq@ .3 h# 46 seq@ .3 cr - ." ECK: " h# 47 seq@ .3 h# 48 seq@ .3 h# 49 seq@ .3 cr + ." VCK: " h# 44 seq@ .3 h# 45 seq@ .3 h# 46 seq@ .3 3 spaces + ." ECK: " h# 47 seq@ .3 h# 48 seq@ .3 h# 49 seq@ .3 3 spaces ." LCK: " h# 4a seq@ .3 h# 4b seq@ .3 h# 4c seq@ .3 cr ." MISC " misc@ .x .scale-factors @@ -1253,17 +1221,17 @@
defer gp-install ' noop to gp-install
-: set-fb ( -- ) +: set-terminal ( -- ) width height ( width height ) over char-width / over char-height / ( width height rows cols ) /scanline depth fb-install gp-install ( ) ;
-: set-scaled-resolution ( new-width new-height -- ) - depth set-resolution ( ) +: change-resolution ( new-width new-height new-depth -- ) + set-resolution ( ) scale-lcd - set-fb - " page" evaluate + set-terminal +\ " page" evaluate \ erase-frame-buffer ;
@@ -1283,7 +1251,7 @@ declare-props \ Setup properites then default-font set-font - set-fb + set-terminal fb-va to frame-buffer-adr open-count 1+ to open-count ; @@ -1401,8 +1369,11 @@ C10 ea 6c df 28 0 e7 4 e3 ff C30 8 0 11 20 0 10 1 34 fd 96 ff 1 8 74 0 0 C40 0 0 0 80 0 0 0 2 0 + cf 87 C50 d7 af af d7 24 44 b5 bd 8f 83 83 8f 9b 1b 88 6a + 10 C60 34 51 0 0 0 a2 65 50 f0 0 48 8 0 57 5b 8e + 87 C70 83 33 83 8f bb 89 3b 21 21 af 1 2 3 4 7 a C80 d 13 16 19 1c 1d 1e 1f 60 0 1 ca ca ca ca 11 C90 11 0 0 0 8 11 0 10 0 0 0 1b 0 0 0 2 @@ -1413,12 +1384,42 @@ S10 1 78 0 0 0 0 4c 1f 4e 7f 38 f0 54 0 31 S20 0 18 14 3d c 0 0 ff ff S30 c 6 11 1d 4 20 ff + 40 30 S40 38 b0 10 ff 97 10 4 79 88 4 9f c 5 30 0 5f S50 1f 81 0 ff 0 0 ff 0 8 df 0 51 21 0 0 0 S60 0 0 0 0 20 0 20 20 e0 20 0 0 0 e0 1 0 + 0 0 S70 20 4 f 33 1f 1f 0 0 e0 8 10 0 c8 0 0 0 SA8 0 0 80 80 0 0 0 0 G20 0 0 0 +--- botched mode 12 --- +ATR 0 1 2 3 4 5 14 7 38 39 3a 3b 3c 3d 3e 3f 1 0 f 0 0 +SEQ 3 1 f 0 6 +GRF 0 0 0 0 0 0 5 f ff + 0 1 2 3 4 5 6 7 8 9 a b c d e f +C00 5f 4f 50 82 54 80 b 3e 0 40 0 0 0 0 0 0 +C10 ea 6c df 28 0 e7 4 e3 ff +C30 8 0 11 20 0 10 1 34 7d 96 ef 1 8 74 0 0 +C40 0 0 0 80 0 0 0 2 0 +C50 d7 af af cf 24 c4 b6 be 8f 83 83 87 9b 1b 88 6a +C60 a9 51 0 0 0 a2 65 10 f0 0 48 8 0 57 5b 8e +C70 83 33 83 87 b3 89 3b 21 21 af 1 2 3 4 7 a +C80 d 13 16 19 1c 1d 1e 1f 60 0 1 ca ca ca ca 11 +C90 11 0 0 0 8 11 0 10 0 0 0 1b 0 0 0 2 +CA0 0 0 c8 0 3 0 0 8b 1 0 0 0 0 0 0 0 +CD0 0 0 c8 0 0 0 0 0 0 0 0 0 0 0 0 0 +CE0 0 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 +CF0 0 0 0 80 0 0 0 c0 0 a 0 d 0 +S10 1 78 0 0 0 0 4c 1f 4e 7f 8 f0 54 0 31 +S20 0 18 14 3d c 0 0 ff ff +S30 c 6 11 1d 4 20 ff +S40 38 40 30 ff 97 10 4 79 88 4 9f c 5 30 0 5f +S50 1f 81 0 ff 0 0 ff 0 8 df 0 51 21 0 0 0 +S60 0 0 0 0 20 0 20 20 e0 20 0 0 0 e0 1 0 +S70 20 0 f 0 1f 1f 0 0 e0 8 10 0 c8 0 0 0 +SA8 0 0 80 80 0 0 0 0 +G20 0 0 0 + ----------------
Mode 112 - 640x480x8
Modified: dev/via/unichrome/vgamodes.fth =================================================================== --- dev/via/unichrome/vgamodes.fth 2009-10-27 10:35:37 UTC (rev 1433) +++ dev/via/unichrome/vgamodes.fth 2009-10-27 16:23:11 UTC (rev 1434) @@ -66,27 +66,15 @@ ; ' (pc-font) to pc-font
-: duplicate-settings ( -- ) - \ For mode 3 - d# 1280 hfetch1! - d# 320 hoffset1! - d# 2592 hfetch2! \ Apparently every pixel is 4 bytes (80 * 8 * 40 = 2560), plus 32 bytes extra - \ The 4 bytes could be for the interleaved VGA planes. Or maybe not. - d# 808 hoffset2! - -\ h# 06 h# 06 h# 78 seq-mask \ Clock source selection 14.318 MHz/1024 -\ h# 40 h# 16 seq-set \ This bit is undocumented but other drivers set it -; - warning @ warning off -: text-mode3 +: text-mode3 ( -- ) olpc-crt-on \ Restore power to IGA1, as we need it for VGA modes text-mode3 \ The base VGA version; sets up the font and stuff d# 640 d# 400 8 set-resolution set-primary-mode expanded ; -: graphics-mode12 +: graphics-mode12 ( -- ) olpc-crt-on \ Restore power to IGA1, as we need it for VGA modes graphics-mode12 \ The base VGA version; sets up the font and stuff d# 640 d# 480 4 set-resolution @@ -94,3 +82,9 @@ expanded ; warning ! + +: 640x480x32 ( -- ) olpc-lcd-mode d# 640 d# 480 d# 32 change-resolution ; \ VESA mode 112 +: 800x600x32 ( -- ) olpc-lcd-mode d# 800 d# 600 d# 32 change-resolution ; \ VESA mode 115 +: 1024x768x32 ( -- ) olpc-lcd-mode d# 1024 d# 768 d# 32 change-resolution ; \ VESA mode 118 +: 1200x900x16 ( -- ) olpc-lcd-mode d# 1024 d# 768 d# 16 change-resolution ; +: 1200x900x32 ( -- ) olpc-lcd-mode d# 1024 d# 768 d# 32 change-resolution ;
openfirmware@openfirmware.info