[openfirmware] [commit] r1865 - cpu/arm cpu/arm/mmp2 forth/kernel ofw/core ofw/gui ofw/termemu ofw/wifi

repository service svn at openfirmware.info
Tue Jul 13 09:24:52 CEST 2010


Author: wmb
Date: Tue Jul 13 09:24:52 2010
New Revision: 1865
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1865

Log:
ARM MMP2 port - checkpoint of a lot of work to bring the build in line with the OLPC setup.

Added:
   cpu/arm/crc32.fth
   cpu/arm/linux.fth
   cpu/arm/loadarea.fth
   cpu/arm/mmp2/boot.fth
   cpu/arm/mmp2/config.fth
   cpu/arm/mmp2/devices.fth
   cpu/arm/mmp2/fw.bth
   cpu/arm/mmp2/mmuon.fth
   cpu/arm/mmp2/watchdog.fth
   cpu/arm/mmusetup.fth
   ofw/core/initdict.fth
   ofw/core/reboot.fth
   ofw/core/reenter.fth
Modified:
   cpu/arm/basefw.bth
   cpu/arm/fb8-ops.fth
   cpu/arm/kerncode.fth
   cpu/arm/mmp2/addrs.fth
   cpu/arm/mmp2/dsi.fth
   cpu/arm/mmp2/lcd.fth
   cpu/arm/mmp2/lcdcfg.fth
   cpu/arm/mmp2/mmp2.bth
   cpu/arm/mmp2/probemem.fth
   cpu/arm/mmp2/rootnode.fth
   cpu/arm/saverom.fth
   cpu/arm/tools.bth
   cpu/arm/traps.fth
   forth/kernel/kernel.fth
   ofw/core/countdwn.fth
   ofw/core/muxdev.fth
   ofw/gui/iconmenu.fth
   ofw/termemu/fb8.fth
   ofw/wifi/loadpkg.fth

Modified: cpu/arm/basefw.bth
==============================================================================
--- cpu/arm/basefw.bth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/basefw.bth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -90,6 +90,7 @@
 
 tag-file @ fclose  tag-file off
 
+h# 10.0000  dictionary-size !
 .( --- Saving basefw.dic --- )  cr " basefw.dic" $save-forth
 [then]
 

Added: cpu/arm/crc32.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/crc32.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,54 @@
+\ See license at end of file
+purpose: CRC-32 calculation
+
+\ Load this before forth/lib/crc32.fth
+
+[ifdef] notdef
+code crcstep  ( crc b table-adr -- crc' )
+   \ tos: table-adr, r1:b, r2:crc
+   ldmia   sp!,{r1,r2}
+   eor     r1,r1,r2             \ r1: crc ^ byte
+   and     r1,r1,#0xff          \ index
+   ldr     tos,[tos,r1,lsl #2]  \ Table data
+   eor     tos,tos,r2,lsr #8    \ Return crc'=table_data^(crc>>8)
+c;
+[then]
+
+code ($crc)  ( crc table-adr adr len -- crc' )
+   movs    r3,tos
+   ldmia   sp!,{r1,r2,tos}     \ r1:adr, r2:table-adr, r3:len, tos:crc
+   nxteq                       \ Bail out if len is 0
+
+   begin
+      ldrb     r4,[r1],#1         \ Get next byte
+      eor      r4,r4,tos          \ r4: crc^byte
+      and      r4,r4,#0xff        \ r4: index
+      ldr      r4,[r2,r4,lsl #2]  \ lookup in table
+      decs     r2,1               \ Decrement len
+      eor      tos,r4,tos,lsr #8  \ crc' = table_data ^ (crc >> 8)
+   0= until
+c;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/arm/fb8-ops.fth
==============================================================================
--- cpu/arm/fb8-ops.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/fb8-ops.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -62,6 +62,56 @@
    repeat
 c;
 
+\ Within the rectangular region, replace 3-byte pixels whose current value
+\ is the same as fg-color with bg-color, and vice versa, leaving bytes that
+\ match neither value unchanged.
+code fb24-invert  ( adr width height bytes/line fg-color bg-color -- )
+   ldmia   sp!,{r1,r2,r3,r4,r5}
+   \ r0:scratch  r1:fg-colour r2:bytes/line  r3:height  r4:width  r5:adr
+   \ r6 bytes/line, r7 scratch, r8 scratch, tos bg-color
+
+   add        r4,r4,r4, lsl #1  \ Multiply width by 4 to get bytes
+   begin
+      cmp     r3,#0
+   > while
+      mov     r6,#0
+      begin
+         cmp     r4,r6		\ more pixels/line?
+      > while
+         add     r0,r5,r6       \ r0 points to the pixel
+         ldrb    r7,[r0]        \ Start reading a 3-byte pixel
+         ldrb    r8,[r0,#1]
+         orr     r7, r7, r8, lsl #8
+         ldrb    r8,[r0,#2]
+         orr     r7, r7, r8, lsl #16
+
+         cmp     r7,tos   \ Is it the background color?
+         0=  if
+            \ If so, replace with the foreground color
+            strb  r1,[r0]
+            mov   r8,r1,lsr #8
+            strb  r8,[r0,#1]
+            mov   r8,r1,lsr #16
+            strb  r8,[r0,#2]
+         then
+
+         cmp     r7,r1   \ Is it the foreground color?
+         0=  if
+            \ If so, replace with the background color
+            strb  tos,[r0]
+            mov   r8,tos,lsr #8
+            strb  r8,[r0,#1]
+            mov   r8,tos,lsr #16
+            strb  r8,[r0,#2]
+         then
+         inc   r6,#3     \ Advance offset to the next pixel
+      repeat
+      add     r5,r5,r2   \ Advance to next scan line
+      dec     r3,#1      \ Decrease the remaining line count
+   repeat
+   pop   tos,sp
+c;
+
 \ Within the rectangular region, replace halfwords whose current value is
 \ the same as fg-color with bg-color, and vice versa, leaving bytes that
 \ match neither value unchanged.
@@ -158,6 +208,55 @@
    ldmia   sp!,{r9,tos}
 c;
 
+\ Draws a character from a 1-bit-deep font into a 24bpp frame buffer
+\ Font bits are stored 1-bit-per-pixel, with the most-significant-bit of
+\ the font byte corresponding to the leftmost pixel in the group for that
+\ byte.  "font-width" is the distance in bytes from the first font byte for
+\ a scan line of the character to the first font byte for its next scan line.
+code fb24-paint
+  ( fontadr fontbytes width height screenadr bytes/line fg-color bg-color -- )
+   ldmia   sp!,{r1,r2,r3,r4,r5,r6,r7}
+   psh     r9,sp
+\ tos:bg-col  r1:fg-col  r2:bytes/line  r3: screenadr  r4:height  r5:width
+\ r6:font-width  r7:fontadr
+\ free: r8 r9 r0
+   begin
+      cmp     r4,#0
+   > while
+      mov     r8,#0			\ r8: pixel-offset
+      begin
+         cmp     r5,r8			\ one more pixel?
+      > while
+         ldrb    r9,[r7,r8,lsr #3]	\ r9 fontdatabyte
+         and     r0,r8,#7               \ r9 bit offset 0-7
+         rsb     r0,r0,#8               \ r0 bit offset 8-1
+         movs    r0,r9,asr r0           \ Test font bit
+         add     r9,r3,r8,lsl #1        \ r9 = r3 = r8*2 - Partial address computation
+         add     r9,r9,r8               \ r9 = r3 + r8*3
+         u<  if
+            \ Background
+            strb    tos,[r9]		\ store first byte of pixel
+            mov     r0,tos,lsr #8
+            strb    r0,[r9,#1]		\ store second byte of pixel
+            mov     r0,tos,lsr #16
+            strb    r0,[r9,#2]		\ store third byte of pixel
+         else
+            \ Foreground
+            strb    r1,[r9]		\ store first byte of pixel
+            mov     r0,r1,lsr #8
+            strb    r0,[r9,#1]		\ store second byte of pixel
+            mov     r0,r1,lsr #16
+            strb    r0,[r9,#2]		\ store third byte of pixel
+         then
+         inc     r8,#1
+      repeat
+      add     r7,r7,r6			\ new font-line
+      add     r3,r3,r2			\ new screen-line
+      dec     r4,#1
+   repeat
+   ldmia   sp!,{r9,tos}
+c;
+
 \ Draws a character from a 1-bit-deep font into an 8-bit-deep frame buffer
 \ Font bits are stored 1-bit-per-pixel, with the most-significant-bit of
 \ the font byte corresponding to the leftmost pixel in the group for that
@@ -181,9 +280,9 @@
          and     r0,r8,#7
          rsb     r0,r0,#8
          movs    r0,r9,asr r0
-         strcs   r1,[r3,r8]
-         strcc   tos,[r3,r8]
-         inc     r8,#4
+         strcs   r1,[r3,r8,lsl #2]
+         strcc   tos,[r3,r8,lsl #2]
+         inc     r8,#1
       repeat
       add     r7,r7,r6			\ new font-line
       add     r3,r3,r2			\ new screen-line

Modified: cpu/arm/kerncode.fth
==============================================================================
--- cpu/arm/kerncode.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/kerncode.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -689,6 +689,23 @@
    strb      r4,[r5],#1
 c;
 
+code t!  ( n adr -- )
+   mov       r5,tos         \ r5: adr
+   ldmia     sp!,{r4,tos}
+   strb      r4,[r5],#1
+   mov       r4,r4,ror #8
+   strb      r4,[r5],#1
+   mov       r4,r4,ror #8
+   strb      r4,[r5],#1
+c;
+code t@  ( adr -- w )
+   ldrb      r0,[tos]
+   ldrb      tos,[tos,#1]
+   orr       r0,r0,tos,lsl #8
+   ldrb      tos,[tos,#2]
+   orr       tos,r0,tos,lsl #16
+c;
+
 code unaligned-w@  ( adr -- w )
    ldrb      r0,[tos]
    ldrb      tos,[tos,#1]
@@ -852,6 +869,21 @@
    < until
 c;
 
+\ tfill fills with a 3-byte value.  It's useful for 24bpp frame buffers
+code tfill       ( adr cnt t -- )
+   mov       r2,tos
+   ldmia     sp!,{r0,r1,tos}  \ r0-cnt r1-adr r2-data
+   mov       r3,r2,lsr #8
+   mov       r4,r2,lsr #16
+   begin
+      decs    r0,3
+      strgeb  r2,[r1],#1
+      strgeb  r3,[r1],#1
+      strgeb  r4,[r1],#1
+   < until
+c;
+
+
 code lfill       ( adr cnt l -- )
    mov       r2,tos
    ldmia     sp!,{r0,r1,tos} \ r0-cnt r1-adr r2-data
@@ -861,6 +893,36 @@
    < until
 c;
 
+\ Skip initial occurrences of bvalue, returning the residual length
+code bskip  ( adr len bvalue -- residue )
+   ldmia  sp!,{r0,r1}  \ r0-len r1-adr tos-bvalue
+   mov    r2,tos       \ r2-bvalue
+   movs   tos,r0       \ tos-len
+   nxteq               \ Bail out if len=0
+
+   begin
+      ldrb   r0,[r1],#1
+      cmp    r0,r2
+      nxtne
+      decs   tos,1
+   = until
+c;
+
+\ Skip initial occurrences of lvalue, returning the residual length
+code lskip  ( adr len lvalue -- residue )
+   ldmia  sp!,{r0,r1}  \ r0-len r1-adr tos-lvalue
+   mov    r2,tos       \ r2-lvalue
+   movs   tos,r0       \ tos-len
+   nxteq               \ Bail out if len=0
+
+   begin
+      ldr    r0,[r1],#4
+      cmp    r0,r2
+      nxtne
+      decs   tos,4
+   = until
+c;
+
 \ code /link  ( -- /link )  psh tos,sp   mov tos,/link  c;
 
 code /char  ( -- 1 )  psh tos,sp  mov tos,#1  c;
@@ -903,6 +965,9 @@
 code /l*  ( n1 -- n2 )  mov tos,tos,lsl #2  c;
 code /n*  ( n1 -- n2 )  mov tos,tos,lsl #2  c;
 
+code /t*  ( n1 -- n2 )  add tos,tos,tos,lsl #1  c;
+code 3*   ( n1 -- n2 )  add tos,tos,tos,lsl #1  c;
+
 8 equ nvocs     \ Number of slots in the search order
 
 code upc  ( char -- upper-case-char )

Added: cpu/arm/linux.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/linux.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,204 @@
+\ See license at end of file
+purpose: ARM Linux zImage program loading
+
+defer linux-hook  ' noop to linux-hook
+
+0 value ramdisk-adr
+0 value /ramdisk
+
+0 value linux-memtop
+
+\ Find the end of the largest piece of memory
+: memory-limit  ( -- limit )
+   \ If we have already loaded a RAMdisk in high memory, its base is the memory limit
+   ramdisk-adr  ?dup  if  exit  then
+
+   " /memory" find-package 0= abort" No /memory node"  ( phandle )
+   " available" rot get-package-property abort" No memory node available property"  ( $ )
+   \ Find the memory piece that starts at 0
+   begin  dup  8 >=  while           ( $ )
+      decode-int  0=  if             ( $ )   \ Found the one we want
+         decode-int                  ( $ limit )
+         nip nip  exit
+      then                           ( $ )
+      decode-int drop                ( $ )
+   repeat                            ( $ )
+   2drop true abort" No suitable memory piece"
+;
+
+: add-root-dev  ( cmdline$ -- cmdline$' )
+   /ramdisk  if                  ( cmdline$ )
+      "  root=/dev/ram0" $cat2   ( cmdline$' )
+   then                          ( cmdline$ )
+;
+
+\ see http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html
+
+0 value arm-linux-machine-type  \ Set this after loading this file
+h# 100 value linux-params       \ The location recommended by the above article
+def-load-base value linux-base
+0 value rootdev#                \ Set externally
+
+0 value tag-adr
+: tag-w,  ( w -- )  tag-adr w!  tag-adr wa1+ to tag-adr  ;
+: tag-b,  ( b -- )  tag-adr c!  tag-adr ca1+ to tag-adr  ;
+: tag-l,  ( n -- )  tag-adr l!  tag-adr la1+ to tag-adr  ;
+
+defer fb-tag,  ' noop to fb-tag,  \ Define externally if appropriate
+
+: set-parameters  ( cmdline$ -- )
+   linux-params to tag-adr
+
+   5           tag-l,    \ size   
+   h# 54410001 tag-l,    \ ATAG_CORE
+   0           tag-l,    \ Flags (1 for read-only)
+   pagesize    tag-l,
+   rootdev#    tag-l,
+
+   4            tag-l,
+   h# 54410002  tag-l,    \ ATAG_MEM
+   linux-memtop tag-l,    \ size
+   0            tag-l,    \ start_address
+
+   /ramdisk  if
+      5              tag-l,          \ size
+      h# 54410004    tag-l,          \ ATAG_RAMDISK
+      0              tag-l,          \ load flag == 0
+      d# 4096        tag-l,          \ 4k kilobytes = 4 megabytes (calculate dynamically?)
+      0              tag-l,          \ unused floppy block number
+
+      4              tag-l,
+      h# 54420005    tag-l,          \ ATAG_RAMDISK2
+      ramdisk-adr >physical tag-l,   \ physical starting address
+      /ramdisk       tag-l,          \ size of compressed ramdisk in bytes
+   then
+
+   \ Command line
+   ( cmdline$ ) add-root-dev 
+   ( cmdline$ )                  ( adr len )
+   dup  if                       ( adr len )
+      1+ 4 round-up              ( adr len+null_rounded )
+      dup  2 rshift  2 +  tag-l, ( adr len+null_rounded )  \ tag size
+      h# 54410009         tag-l, ( adr len+null_rounded )  \ ATAG_CMDLINE
+      tuck  tag-adr swap move    ( len+null_rounded )      \ copy in cmdline
+      tag-adr +  to tag-adr      ( )
+   else                          ( adr len )
+      2drop                      ( )
+   then
+
+   fb-tag,
+
+   0 tag-l,    \ size of ATAG_NONE is really 2 but must be written as 0
+   0 tag-l,    \ ATAG_NONE
+;
+
+
+: linux-fixup  ( -- )
+[ifdef] linux-logo  linux-logo  [then]
+   args-buf cscount set-parameters          ( )
+   disable-interrupts
+
+   linux-base linux-base  (init-program)    \ Starting address, SP
+   0 to r0
+   arm-linux-machine-type to r1
+   linux-params to r2
+   linux-hook
+;
+
+d# 256 buffer: ramdisk-buf
+' ramdisk-buf  " ramdisk" chosen-string
+
+defer load-ramdisk
+defer place-ramdisk
+: linux-place-ramdisk  ( adr len -- )
+   to /ramdisk                                    ( adr )
+
+   memory-limit  umin  /ramdisk -                 ( adr new-ramdisk-adr )
+   tuck /ramdisk move                             ( new-ramdisk-adr )
+\  dup to linux-memtop
+   to ramdisk-adr
+;
+: $load-ramdisk  ( name$ -- )
+   0 to /ramdisk                                  ( name$ )
+
+   ['] load-path behavior >r                      ( name$ r: xt )
+   ['] ramdisk-buf to load-path                   ( name$ r: xt )
+
+   ." Loading ramdisk image from " 2dup type  ."  ..."  ( name$ r: xt )
+   ['] boot-read catch                            ( throw-code r: xt )
+   cr                                             ( throw-code r: xt )
+   r> to load-path                                ( throw-code )
+   throw
+
+   loaded place-ramdisk
+;
+: cv-load-ramdisk  ( -- )
+   " ramdisk" eval  dup 0=  if  2drop exit  then  ( name$ )
+   $load-ramdisk
+;
+' cv-load-ramdisk to load-ramdisk
+
+0 value linux-loaded?
+
+: init-zimage?   ( -- flag )
+   loaded                               ( adr len )
+   h# 30 <  if  drop false exit  then   ( adr )
+   dup h# 24 + l@  h# 016f2818  <>  if  drop false exit  then   ( adr )
+   >r
+   r@ h# 28 + l@  r@ +                  ( start r: adr )
+   r@ h# 2c + l@  r@ +                  ( start end r: adr )
+   r> drop                              ( start end )
+   over -                               ( start len )
+   
+   linux-base swap move                 ( )
+
+   true to linux-loaded?                ( )
+
+   true                                 ( flag )
+;
+
+warning @ warning off
+: init-program  ( -- )
+   init-zimage?  if  exit  then
+   init-program
+;
+warning !
+
+warning @ warning off
+: init-program  ( -- )
+   false to linux-loaded?
+   init-program
+   linux-loaded?  if
+      ['] linux-place-ramdisk to place-ramdisk
+      memory-limit to linux-memtop  \ load-ramdisk may change this
+      ['] load-ramdisk guarded
+      linux-fixup
+   then
+;
+warning !
+
+: mcr  ( -- )  cr exit? throw  ;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Added: cpu/arm/loadarea.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/loadarea.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,79 @@
+\ See license at end of file
+purpose: Manage the allocation and mapping of the program load area (load-base)
+
+h# f000.0000 constant def-load-base
+def-load-base to load-limit
+
+h# 10.0000 constant /load-piece
+h#  8.0000 constant /reserved
+h#  8.0000 constant /dma-reserved
+
+\ Frees virtual address space and physical memory behind it
+: release-all  ( virt len -- )
+   >r dup mmu-translate  if       ( virt phys mode r: len )
+      drop r@ mem-release         ( virt r: len )
+      dup r@ mmu-unmap            ( virt r: len )
+   then                           ( virt r: len )
+   r> mmu-release
+;
+
+\ Release-load-area depends on the way that map-load-area populates
+\ the load area in piecewise-contiguous section-sized units
+: release-load-area  ( boundary-adr -- )
+   pagesize round-up		             ( unused-base )
+
+   dup /load-piece round-up load-limit umin  ( unused next-boundary )
+   2dup u<  if                               ( unused next-boundary )
+      2dup over -  release-all               ( unused next-boundary )
+   then                                      ( unused next-boundary )
+
+   load-limit swap  ?do  i /load-piece release-all  /load-piece +loop
+					     ( unused )
+   to load-limit
+;
+
+: map-load-area  ( -- )
+   \ Reserve some DMA memory and some ordinary memory
+   /dma-reserved " /"  " dma-alloc" execute-device-method  drop >r
+   /reserved dup mem-claim  >r           
+
+   \ Allocate and map the load region
+   def-load-base  begin                  ( top )
+   /load-piece /load-piece ['] mem-claim  catch  0=  while  ( top phys )
+      over  /load-piece  0   mmu-claim   ( top phys virt )
+      /load-piece  -1  mmu-map           ( top )
+      /load-piece +                      ( top' )
+   repeat                                ( top x x )
+   2drop  to load-limit                  ( )
+
+   r> /reserved mem-release              \ Put the reserved piece back
+   r> /dma-reserved  " /"  " dma-free" execute-device-method  drop
+;
+
+stand-init: Load area
+   map-load-area
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/arm/mmp2/addrs.fth
==============================================================================
--- cpu/arm/mmp2/addrs.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/addrs.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -1,3 +1,49 @@
+\ Platform design choices
+h# 2000.0000 constant total-ram-size
+
+h# 1fc0.0000 constant fb-pa
+h#   40.0000 constant fb-size
+
+fb-pa constant available-ram-size
+
+
+: (memory?)  ( phys -- flag )  total-ram-size u<  ;
+' (memory?) to memory?
+
+\ OFW implementation choices
+h# 0040.0000 constant fw-pa
+
+[ifdef] virtual-mode
+h# f700.0000 constant fw-virt-base
+h# 0100.0000 constant fw-virt-size  \ 16 megs of mapping space
+[else]
+fw-pa value fw-virt-base
+0 value fw-virt-size
+[then]
+
+h# 0010.0000 constant /fw-ram
+
+h# 0110.0000 constant def-load-base
+
+\ The heap starts at RAMtop, which on this system is "fw-pa /fw-ram +"
+
+\ We leave some memory in the /memory available list above the heap
+\ for DMA allocation by the sound and USB driver.  OFW's normal memory
+\ usage thus fits in one 4M page-directory mapping region.
+
+h#  18.0000 constant heap-size
+heap-size constant initial-heap-size
+
+h# 4000 constant page-table-pa
+
+
+\ Defined by CPU core
+h# 1000 to pagesize
+d# 12   to pageshift
+h# 10.0000 constant /section
+h# 4000 constant /page-table
+
+\ Defined by MMP2 hardware
 h# d401.9000 constant gpio-base
 h# d405.1024 constant acgr-pa
 h# d401.5000 constant clock-unit-pa
@@ -8,6 +54,3 @@
 h# d420.b000 constant lcd-pa
 h# d401.4000 constant timer-pa
 
-
-h# 08.0000 constant fb-pa
-

Added: cpu/arm/mmp2/boot.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/boot.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,22 @@
+\ This is some glue code to convert the machine setup that QEMU gives us
+\ to the setup that start-forth (see arm/boot.fth) wants.
+\ We get here via a call instruction at origin+8, which is inserted below
+
+code stand-cold-code    ( r0: 0  r1: board-id  r2: &kernel-args  lr: &aif_header+8c )
+   here  origin 8 +  put-call  \ Insert call instruction
+
+   \ Put the arguments in safe registers
+   sub   r6,lr,#0x8c        \ r6 points to header (lr set by code at origin)
+   mov   r7,#0              \ r7: functions
+   add   r8,r6,0x200000     \ r8: memtop - 2MiB above load address
+                            \ r9 is up
+   mov   r10,#0             \ r10: argc
+   mov   r11,r2             \ r11: argv (kernel args)
+   mov   r12,`initial-heap-size`  \ r12: initial-heap-size
+   mov   r3,#0
+   str   r0,[r3],#4
+   str   r1,[r3],#4
+   str   r2,[r3],#4
+
+   b     'code start-forth  \ Branch to the generic startup code
+end-code

Added: cpu/arm/mmp2/config.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/config.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,3 @@
+create debug-startup
+
+fload ${BP}/cpu/arm/mmp2/addrs.fth

Added: cpu/arm/mmp2/devices.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/devices.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,108 @@
+fload ${BP}/dev/omap/diaguart.fth	\ OMAP UART
+h# d4018000 to uart-base		\ UART# base address on MMP2
+
+fload ${BP}/forth/lib/sysuart.fth	\ Set console I/O vectors to UART
+
+0 value keyboard-ih
+0 value screen-ih
+
+fload ${BP}/ofw/core/muxdev.fth          \ I/O collection/distribution device
+
+\ Install the simple UART driver from the standalone I/O init chain
+warning off
+: stand-init-io  ( -- )
+   stand-init-io
+   inituarts  install-uart-io
+;
+warning on
+
+fload ${BP}/cpu/arm/mmp2/twsi.fth
+fload ${BP}/cpu/arm/mmp2/timer.fth
+fload ${BP}/cpu/arm/mmp2/mfpr.fth
+: init-stuff
+   set-camera-domain-voltage
+   acgr-clocks-on
+   init-mfprs
+   set-gpio-directions
+   init-timers
+   init-twsi
+   power-on-dsi
+;
+stand-init:
+   init-stuff
+;
+
+fload ${BP}/cpu/arm/mmp2/gpio.fth
+
+fload ${BP}/cpu/arm/mmp2/watchdog.fth	\ reset-all using watchdog timer
+
+0 0  " d4018000"  " /" begin-package
+   " uart" name
+   h# d4018000  h# 20  reg
+
+   : write  ( adr len -- actual )
+      0 max  tuck                    ( actual adr actual )
+      bounds  ?do  i c@ uemit  loop  ( actual )
+   ;
+   : read   ( adr len -- actual )
+      0=  if  drop 0  exit  then
+      ukey?  if           ( adr )
+         ukey swap c!  1  ( actual )
+      else                ( adr )
+         drop  -2         ( -2 )
+      then
+   ;
+   : open  ( -- okay? )  true  ;
+   : close  ( -- )   ;
+   : install-abort  ;
+   : remove-abort  ;
+end-package
+devalias com1 /uart
+: com1  " com1"  ;
+' com1 is fallback-device   
+
+0 0  " d420b000"  " /" begin-package
+   " screen" name
+   fload ${BP}/cpu/arm/mmp2/lcdcfg.fth
+   fload ${BP}/cpu/arm/mmp2/dsi.fth
+
+   fload ${BP}/cpu/arm/mmp2/lcd.fth
+   : display-on
+      init-lcd
+      fb-pa  hdisp vdisp * >bytes  h# ff fill
+   ;
+   : map-frame-buffer  ( -- )
+      fb-pa to frame-buffer-adr
+   ;
+   " display"                      device-type
+   " ISO8859-1" encode-string    " character-set" property
+   0 0  encode-bytes  " iso6429-1983-colors"  property
+
+   : display-install  ( -- )
+      display-on
+      default-font set-font
+      map-frame-buffer
+      width  height                           ( width height )
+      over char-width / over char-height /    ( width height rows cols )
+      /scanline depth fb-install              ( )
+   ;
+
+   : display-remove  ( -- )  ;
+   : display-selftest  ( -- failed? )  false  ;
+
+   ' display-install  is-install
+   ' display-remove   is-remove
+   ' display-selftest is-selftest
+end-package
+devalias screen /screen
+   
+devalias keyboard /keyboard
+
+fload ${BP}/ofw/termemu/cp881-16.fth
+
+d# 3000 to ms-factor
+
+fload ${BP}/cpu/arm/mmp2/sdhcimmp2.fth
+
+devalias ext /sd/disk at 1
+

Modified: cpu/arm/mmp2/dsi.fth
==============================================================================
--- cpu/arm/mmp2/dsi.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/dsi.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -1,8 +1,6 @@
-h# 004c constant pmua_display1_clk_res_ctrl_offset         \ DISPLAY1 Clock/Reset Control Register
-h# 0110 constant pmua_display2_clk_res_ctrl_offset      \ DISPLAY2 Clock/Reset Control Register
-h# 0050 constant pmua_ccic_clk_res_ctrl_offset     \ CCIC Clock/Reset Control Register
-
-
+h# 004c constant pmua_display1_clk_res_ctrl_offset  \ DISPLAY1 Clock/Reset Control Register
+h# 0110 constant pmua_display2_clk_res_ctrl_offset  \ DISPLAY2 Clock/Reset Control Register
+h# 0050 constant pmua_ccic_clk_res_ctrl_offset      \ CCIC Clock/Reset Control Register
 
 : pmua@  ( offset -- n )  pmua-pa + l@  ;
 : pmua!  ( n offset -- )  pmua-pa + l!  ;
@@ -15,6 +13,7 @@
 ; 
 : dsi-twsi@  ( reg# -- l )  wbsplit 2 4 twsi-get  bljoin  ;
 : dsi-twsi-w@  ( reg# -- w )  wbsplit 2 2 twsi-get  bwjoin  ;
+
 : dsi1!  ( n offset -- )  dsi1-pa + l!  ;
 : dsi1@  ( n offset -- )  dsi1-pa + l@  ;
 : dsi2!  ( n offset -- )  dsi2-pa + l!  ;
@@ -41,9 +40,9 @@
    \ Disable DSI
    0  h# 00 dsi1!  \ Stop the interface
    h# c000.0000  dsi1-pa h# 00 +  bitset
-   1 ms
+   2 ms
    h# c000.0000  dsi1-pa h# 00 +  bitclr
-   1 ms
+   2 ms
    d# 83 gpio-clr  1 ms  d# 83 gpio-set  1 ms  \ LCD_RST_N line resets DSI bridge
    
    5 set-address h# 16 set-slave       \ TWSI address of TC358762 MIPI DSI bridge
@@ -138,6 +137,8 @@
    vdisp 2-   wljoin
    h# 118 dsi1!  \ DSI_LCD1_TIMING_2
 ;
+
+[ifdef] debug-dsi
 : .dsi  ( index -- )  dup 3 u.r space dsi-twsi@ 8 u.r cr  ;
 : .dsiw  ( index -- )  dup 3 u.r space dsi-twsi-w@ 8 u.r cr  ;
 : dump-dsi  ( -- )
@@ -168,6 +169,8 @@
    430 .dsiw
    432 .dsiw
 ;
+[then]
+
 [ifdef] support-low-speed-dsi
 : parity  ( n -- 0|1 )
    dup d# 16 rshift xor
@@ -232,6 +235,7 @@
 ;
 
 [then]
+
 [ifdef] use-dsi2
 : set-dsi-data  ( l index -- )
    swap h# 30 dsi!                  ( index )   \ Data register
@@ -345,6 +349,7 @@
 
 ;
 : dsi-read  ( -- n )  h# 64 dsi2@  ;
+
 : dsi-lcd  ( enable? -- )
    0 dsi1@  7 invert and  0 dsi1!   \ Disable all panels
    h# 4c pmua@  2 invert and  h# 4c pmua!  \ stop clock?

Added: cpu/arm/mmp2/fw.bth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/fw.bth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,524 @@
+purpose: Build Open Firmware for Marvell MMP2
+\ See license at end of file
+
+dictionary: ${BP}/cpu/arm/build/basefw.dic
+command: &armforth &dictionary &this
+build-now
+
+" fw.tag" r/w create-file drop  tag-file !
+
+hex
+\ ' $report-name is include-hook
+' noop is include-hook
+
+fload ${BP}/cpu/arm/mmp2/config.fth
+
+: headerless ;  : headers  ;  : headerless0 ;
+
+' (quit) to quit
+
+: \Tags [compile] \  ; immediate
+: \NotTags [compile] \  ; immediate
+
+: RAMbase  ( -- adr )  fw-virt-base  ;
+: RAMtop  ( -- adr )  RAMbase /fw-ram +  ;
+
+def-load-base ' load-base set-config-int-default
+
+use-movable-vector-base  \ Marvell CPU core has a movable vector base
+
+true ' fcode-debug? set-config-int-default
+\ false  ' auto-boot?    set-config-int-default
+
+
+
+[ifdef] serial-console
+" com1" ' output-device set-config-string-default
+" com1" ' input-device set-config-string-default
+[then]
+
+
+fload ${BP}/cpu/arm/mmp2/rootnode.fth	\ Root node mapping - physical mode
+dev /
+   " Marvell,Bonnell" model
+   " Marvell,Armada 610" encode-string  " architecture" property
+\ The clock frequency of the root bus may be irrelevant, since the bus is internal to the SOC
+\    d# 1,000,000,000 " clock-frequency" integer-property
+device-end
+
+: (cpu-arch  ( -- adr len )
+   " architecture" ['] root-node  get-package-property  drop
+   get-encoded-string
+;
+' (cpu-arch to cpu-arch
+
+\ Memory management services
+[ifdef] virtual-mode
+fload ${BP}/ofw/core/clntmem1.fth	\ client services for memory
+[else]
+fload ${BP}/ofw/core/clntphy1.fth	\ client services for memory
+: >physical  ( va -- pa )
+   dup fw-virt-base - fw-virt-size u<  if   ( va )
+      fw-virt-base -  fw-pa +
+   then
+;
+[then]
+fload ${BP}/ofw/core/memlist.fth	\ Resource list common routines
+fload ${BP}/ofw/core/showlist.fth	\ Linked list display tool
+fload ${BP}/ofw/core/allocph1.fth	\ S Physical memory allocator
+fload ${BP}/ofw/core/availpm.fth	\ Available memory list
+
+fload ${BP}/cpu/arm/mmp2/probemem.fth	\ Memory probing
+
+stand-init: Probing memory
+   " probe" memory-node @ $call-method
+;
+
+[ifdef] virtual-mode
+fload ${BP}/cpu/arm/loadvmem.fth	\ /mmu node
+stand-init: MMU
+   " /mmu" open-dev mmu-node !
+;
+fload ${BP}/ofw/core/initdict.fth	\ Dynamic dictionary allocation
+fload ${BP}/arch/arm/loadarea.fth	\ Allocate and map program load area
+[else]
+fload ${BP}/cpu/arm/mmp2/mmuon.fth
+[then]
+
+\ XXX should be elsewhere
+dev /client-services
+: chain  ( len args entry size virt -- )
+   release                                       ( len args entry )
+   h# 8000 alloc-mem h# 8000 +  (init-program)   ( len args )
+   to r1  to r2
+   go
+;
+device-end
+
+fload ${BP}/cpu/arm/crc32.fth		\ Assembly language Zip CRC calculation
+fload ${BP}/forth/lib/crc32.fth		\ High-level portion of CRC calculation
+
+[ifdef] resident-packages
+
+\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
+support-package: ext2-file-system
+   fload ${BP}/ofw/fs/ext2fs/ext2fs.fth	\ Linux file system
+end-support-package
+
+[ifdef] jffs2-support
+\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
+support-package: jffs2-file-system
+   fload ${BP}/ofw/fs/jffs2/jffs2.fth	\ Journaling flash file system 2
+end-support-package
+[then]
+
+support-package: zip-file-system
+   fload ${BP}/ofw/fs/zipfs.fth		\ Zip file system
+end-support-package
+
+support-package: dropin-file-system
+   fload ${BP}/ofw/fs/dropinfs.fth	\ Dropin file system
+end-support-package
+[then]
+
+fload ${BP}/ofw/core/osfile.fth		\ For testing
+
+\ Load file format handlers
+
+: call32 ;
+
+fload ${BP}/ofw/core/allocsym.fth    \ Allocate memory for symbol table
+fload ${BP}/ofw/core/symcif.fth
+fload ${BP}/ofw/core/symdebug.fth
+: release-load-area  ( boundary-adr -- )  drop  ;
+
+[ifdef] use-elf
+fload ${BP}/ofw/elf/elf.fth
+fload ${BP}/ofw/elf/elfdebug.fth
+[ifdef] virtual-mode
+\ Depends on the assumption that physical memory is mapped 1:1 already
+: (elf-map-in) ( va size -- )  0 mem-claim  drop  ;
+[else]
+: (elf-map-in)  ( va size -- )  2drop  ;
+[then]
+' (elf-map-in) is elf-map-in
+[then]
+
+\ Reboot and re-entry code
+fload ${BP}/ofw/core/reboot.fth		\ Restart the client program
+fload ${BP}/ofw/core/reenter.fth	\ Various entries into Forth
+
+headerless
+[ifdef] virtual-mode
+: (initial-heap)  ( -- adr len )  sp0 @ ps-size -  dict-limit  tuck -  ;
+[else]
+: (initial-heap)  ( -- adr len )  RAMtop heap-size  ;
+[then]
+' (initial-heap) is initial-heap
+headers
+
+" /openprom" find-device
+   " FirmWorks,3.0" encode-string " model" property
+device-end
+
+[ifdef] virtual-mode
+fload ${BP}/cpu/arm/mmusetup.fth	\ Initial values for MMU lists
+[then]
+
+: background-rgb  ( -- r g b )  h# ff h# ff h# ff  ;
+
+fload ${BP}/cpu/arm/mmp2/devices.fth
+
+[ifndef] virtual-mode
+warning off
+: stand-init-io
+   stand-init-io
+   go-fast         \ From mmuon.fth
+;
+warning on
+[then]
+
+true ' local-mac-address? set-config-int-default
+[ifdef] resident-packages
+support-package: nfs
+   fload ${BP}/ofw/fs/nfs/loadpkg.fth
+end-support-package
+
+[then]
+devalias nfs net//obp-tftp:last//nfs
+
+fload ${BP}/cpu/arm/linux.fth
+d# 2382 to arm-linux-machine-type  \ Marvell Jasper
+
+\ Add a tag describing the linear frame buffer
+: mmp-fb-tag,  ( -- )
+   8 tag-l,
+   h# 54410008 tag-l, \ ATAG_VIDEOLFB
+   d# 800 tag-w,      \ Width
+   d# 480 tag-w,      \ Height
+   d#  24 tag-w,      \ Depth
+   d# 800 3 * tag-w,  \ Pitch
+   fb-pa      tag-l,  \ Base address
+   d# 800 3 *  d# 480 *  tag-l,  \ Total size - perhaps could be larger
+   8     tag-b,       \ Red size
+   d#  0 tag-b,       \ Red position
+   8     tag-b,       \ Green size
+   d#  8 tag-b,       \ Green position
+   8     tag-b,       \ Blue size
+   d# 16 tag-b,       \ Blue position
+   0     tag-b,       \ Rsvd size
+   d# 24 tag-b,       \ Rsvd position
+;
+\ ' mmp-fb-tag, to fb-tag,
+
+\ fload ${BP}/cpu/arm/mmp2/usb.fth
+
+false to stand-init-debug?
+\ true to stand-init-debug?
+
+: protect-fw  ( -- )  ;
+: usb-power-on  ( -- )  ;
+
+hex
+: i-key-wait  ( ms -- pressed? )
+   cr ." Type 'i' to interrupt stand-init sequence" cr   ( ms )
+   0  do
+      ukey?  if
+         ukey upc ascii I  =  if  true unloop exit  then
+      then
+      1 ms
+   loop
+   false
+;
+
+warning @  warning off 
+: init
+\ initial-heap add-memory
+   init
+
+   standalone?  if
+      disable-interrupts
+[ifdef] notdef
+      d# 1000
+      i-key-wait  if
+\        protect-fw
+         ." Interacting" cr  hex interact
+      then
+      \ Turn on USB power here to overlap the time with other startup actions
+      usb-power-on
+[then]
+   then
+;
+warning !
+[then]
+
+: (.firmware)  ( -- )
+   ." Open Firmware  "  .built  cr
+   ." Copyright 2010 FirmWorks  All Rights Reserved" cr
+;
+' (.firmware) to .firmware
+
+fload ${BP}/ofw/gui/bmptools.fth
+fload ${BP}/dev/null.fth
+fload ${BP}/ofw/core/bailout.fth
+
+\ GUI
+false value gui-safeboot?
+
+: 2tuck  ( d1 d2 -- d2 d1 d2 )  2swap 2over  ;
+: user-ok  "ok"  ;  \ This is supposed to check for authorization
+true value user-mode?
+
+fload ${BP}/ofw/gui/loadmenu.fth
+\ fload ${BP}/ofw/gui/insticon.fth
+
+\ Uninstall the diag menu from the general user interface vector
+\ so exiting from emacs doesn't invoke the diag menu.
+' quit to user-interface
+
+: screen-#lines  ( -- n )
+   screen-ih 0=  if  default-#lines exit  then
+   screen-ih  package( #lines )package
+;
+' screen-#lines to lines/page
+
+true value text-on?
+: text-off  ( -- )
+   text-on?  if
+      screen-ih remove-output
+      false to text-on?
+   then
+;
+: text-on   ( -- )
+   text-on? 0=  if
+      screen-ih add-output
+      cursor-on
+      true to text-on?
+   then
+;
+
+fload ${BP}/cpu/x86/pc/olpc/help.fth
+
+[ifdef] notyet
+fload ${BP}/cpu/x86/pc/olpc/gamekeys.fth
+
+: emacs  ( -- )
+   false to already-go?
+   boot-getline to boot-file   " rom:emacs" $boot
+;
+
+fload ${BP}/ofw/gui/ofpong.fth
+fload ${BP}/cpu/x86/pc/olpc/life.fth
+[then]
+
+" u:\boot\olpc.fth ext:\boot\olpc.fth int:\boot\olpc.fth ext:\zimage /prober /usb/ethernet /usb/wlan"
+   ' boot-device  set-config-string-default
+
+\needs ramdisk  " " d# 128 config-string ramdisk
+" "   ' boot-file      set-config-string-default   \ Let the boot script set the cmdline
+
+\ Eliminate 4 second delay in install console for the case where
+\ there is no keyboard.  The delay is unnecessary because the screen
+\ does not go blank when the device is closed.
+patch drop ms install-console
+
+alias reboot bye
+
+alias crcgen drop  ( crc byte -- crc' )
+
+\ Dictionary growth size for the ARM Image Format header
+\ 1 section   before origin  section table
+h# 10.0000      h# 8000 -      h# 4000 -      dictionary-size !
+
+fload ${BP}/cpu/arm/saverom.fth  \ Save the dictionary for standalone startup
+
+fload ${BP}/forth/lib/selstr.fth
+
+fload ${BP}/ofw/inet/loadtcp.fth
+
+support-package: http
+   fload ${BP}/ofw/inet/http.fth	\ HTTP client
+end-support-package
+
+[ifdef] notyet
+fload ${BP}/cpu/x86/pc/olpc/memtest.fth
+[then]
+
+[ifdef] notyet
+fload ${BP}/ofw/wifi/wifi-cfg.fth
+support-package: supplicant
+fload ${BP}/ofw/wifi/loadpkg.fth
+end-support-package
+
+: ofw-ssids  ( -- $ )  " OFWSSID"  ;
+' ofw-ssids to default-ssids
+[then]
+
+fload ${BP}/ofw/inet/sntp.fth
+: olpc-ntp-servers  ( -- )
+   " DHCP time 172.18.0.1 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"
+;
+' olpc-ntp-servers to ntp-servers
+: ntp-time&date  ( -- s m h d m y )
+   ntp-timestamp  abort" Can't contact NTP server"
+   ntp>time&date
+;
+: .clock  ( -- )
+   time&date .date space .time  ."  UTC" cr
+;
+: ntp-set-clock  ( -- )
+   ntp-time&date  " set-time"  clock-node @ $call-method
+   .clock
+;
+
+[ifdef] use-ppp
+fload ${BP}/ofw/ppp/loadppp.fth
+[then]
+
+" dhcp" ' ip-address  set-config-string-default
+
+[ifdef] notyet
+: c1-idle  ( -- )  interrupts-enabled?  if  halt  then  ;
+' c1-idle to stdin-idle
+[then]
+
+fload ${BP}/ofw/core/countdwn.fth	\ Startup countdown
+
+: console-start  ( -- )
+   install-mux-io
+\  cursor-off
+   true to text-on?
+
+   " //null" open-dev to null-ih  \ For text-off state
+;
+
+: interpreter-init  ( -- )
+   hex
+   warning on
+   only forth also definitions
+
+\   install-alarm
+
+   page-mode
+   #line off
+
+\   .built cr
+;
+
+[ifdef] notyet
+: ?games  ( -- )
+   rocker-right game-key?  if
+      protect-fw
+      time&date 5drop 1 and  if
+         ['] pong guarded
+      else
+         ['] life-demo guarded
+      then
+      power-off
+   then
+;
+: ?diags  ( -- )
+   rocker-left game-key?  if
+      protect-fw
+      text-on  " test-all" ['] eval guarded
+      ." Tests complete - powering off" cr  d# 5000 ms  power-off
+   then
+;
+
+: ?scan-nand  ( -- )
+   rocker-up game-key?  if
+      protect-fw  text-on  ['] scan-nand guarded
+   then
+;
+: ?fs-update  ( -- )
+   button-check button-x or  button-o or  button-square or   ( mask )
+   game-key-mask =  if  protect-fw try-fs-update  then
+;
+[then]
+
+: startup  ( -- )
+   standalone?  0=  if  exit  then
+
+\  block-exceptions
+   no-page
+
+   console-start
+
+[ifdef] notyet
+   read-game-keys
+[then]
+
+\  text-off
+
+   " probe-" do-drop-in
+
+[ifdef] notyet
+   sound
+   ?games
+[then]
+
+   ['] false to interrupt-auto-boot?
+[ifdef] probe-usb
+   probe-usb
+   report-disk
+   report-keyboard
+[then]
+   " probe+" do-drop-in
+
+   interpreter-init
+[ifdef] notyet
+   ?scan-nand
+   ?diags
+   ?fs-update
+[then]
+\  unblock-exceptions
+   ['] (interrupt-auto-boot?) to interrupt-auto-boot?
+\  ?usb-keyboard
+   auto-banner?  if  banner  then
+
+   auto-boot
+
+   cr cr
+
+   quit
+;
+
+\ This helps with TeraTerm, which sends ESC-O as the arrow key prefix
+also hidden also keys-forth definitions
+warning @  warning off
+: esc-o  key lastchar !  [""] esc-[ do-command  ;
+warning !
+previous previous definitions
+
+tag-file @ fclose  tag-file off
+
+.( --- Saving fw.dic ...)
+" fw.dic" $save-forth cr
+
+fload ${BP}/cpu/arm/mmp2/boot.fth
+
+.( --- Saving ofw.rom --- )  cr " ofw.rom" $save-rom
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/arm/mmp2/lcd.fth
==============================================================================
--- cpu/arm/mmp2/lcd.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/lcd.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -1,3 +1,4 @@
+
 : lcd@  ( offset -- l )  lcd-pa + l@  ;
 : lcd!  ( l offset -- )  lcd-pa + l!  ;
 
@@ -52,9 +53,9 @@
 ;
 
 : init-lcd  ( -- )
-   0 h# 190 lcd!   \ Disable LCD DMA controller
-   fb-pa  h# f4 lcd!  \ Frame buffer area 0
-   0  h# f8 lcd!      \ Frame buffer area 1
+   0      h# 190 lcd!   \ Disable LCD DMA controller
+   fb-pa               h# f4 lcd!  \ Frame buffer area 0
+   0                   h# f8 lcd!  \ Frame buffer area 1
    hdisp bytes/pixel * h# fc lcd!  \ Pitch in bytes
 
    hdisp vdisp wljoin  dup h# 104 lcd!  dup h# 108 lcd!  h# 118 lcd!  \ size, size after zoom, disp
@@ -65,8 +66,8 @@
    hbp >chunks  wljoin  h# 11c lcd!
    
    vfp vbp wljoin  h# 120 lcd!
-   h# 2000FF00 h# 194 lcd!   \ DMA CTRL 1
-   h# d h# 1b8 lcd!         \ Dumb panel controller
+   h# 2000FF00 h# 194 lcd!  \ DMA CTRL 1
+   h#        d h# 1b8 lcd!  \ Dumb panel controller
    h# 01330133 h# 13c lcd!  \ Panel VSYNC Pulse Pixel Edge Control
    h# 40001108 h# 1a8 lcd!  \ Clock divider
    h# 00021100 h# 190 lcd!  \ DMA CTRL 0 - enable DMA, 24 bpp mode

Modified: cpu/arm/mmp2/lcdcfg.fth
==============================================================================
--- cpu/arm/mmp2/lcdcfg.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/lcdcfg.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -17,3 +17,8 @@
 
 : >bytes   ( pixels -- chunks )  bytes/pixel *  ;
 : >chunks  ( pixels -- chunks )  >bytes #lanes /  ;
+
+alias width  hdisp
+alias height vdisp
+alias depth  bpp
+width >bytes constant /scanline  

Modified: cpu/arm/mmp2/mmp2.bth
==============================================================================
--- cpu/arm/mmp2/mmp2.bth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/mmp2.bth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -21,6 +21,10 @@
 
 fload ${BP}/forth/lib/sysuart.fth	\ Set console I/O vectors to UART
 
+0 value keyboard-ih
+0 value screen-ih
+
+fload ${BP}/ofw/core/muxdev.fth          \ I/O collection/distribution device
 
 \ Install the simple UART driver from the standalone I/O init chain
 : stand-init-io  ( -- )
@@ -38,6 +42,9 @@
 fload ${BP}/cpu/arm/mmp2/virtaddr.fth	\ Virtual addresses for the firmware
 
 fload ${BP}/cpu/arm/mmp2/addrs.fth
+
+fload ${BP}/cpu/arm/mmp2/mmuon.fth
+
 fload ${BP}/cpu/arm/mmp2/twsi.fth
 fload ${BP}/cpu/arm/mmp2/timer.fth
 fload ${BP}/cpu/arm/mmp2/mfpr.fth
@@ -50,16 +57,11 @@
    init-twsi
    power-on-dsi
 ;
-fload ${BP}/cpu/arm/mmp2/gpio.fth
-fload ${BP}/cpu/arm/mmp2/lcdcfg.fth
-fload ${BP}/cpu/arm/mmp2/dsi.fth
-fload ${BP}/cpu/arm/mmp2/lcd.fth
-: display-on
+stand-init:
    init-stuff
-   init-lcd
-   fb-pa  hdisp vdisp * >bytes  h# ff fill
 ;
 
+fload ${BP}/cpu/arm/mmp2/gpio.fth
 
 \ fload ${BP}/cpu/arm/rootnode.fth	\ Root node mapping
 fload ${BP}/cpu/arm/mmp2/rootnode.fth	\ Root node mapping - physical mode
@@ -100,15 +102,50 @@
    " FirmWorks,3.0" encode-string " model" property
 device-end
 
+fload ${BP}/cpu/arm/mmp2/watchdog.fth	\ reset-all using watchdog timer
+
+0 0  " d420b000"  " /" begin-package
+   " screen" name
+   fload ${BP}/cpu/arm/mmp2/lcdcfg.fth
+   fload ${BP}/cpu/arm/mmp2/dsi.fth
+
+   fload ${BP}/cpu/arm/mmp2/lcd.fth
+   : display-on
+      init-lcd
+      fb-pa  hdisp vdisp * >bytes  h# ff fill
+   ;
+   : map-frame-buffer  ( -- )
+      fb-pa to frame-buffer-adr
+   ;
+   " display"                      device-type
+   " ISO8859-1" encode-string    " character-set" property
+   0 0  encode-bytes  " iso6429-1983-colors"  property
+
+   : display-install  ( -- )
+      display-on
+      default-font set-font
+      map-frame-buffer
+      width  height                           ( width height )
+      over char-width / over char-height /    ( width height rows cols )
+      /scanline depth fb-install              ( )
+   ;
+
+   : display-remove  ( -- )  ;
+   : display-selftest  ( -- failed? )  false  ;
+
+   ' display-install  is-install
+   ' display-remove   is-remove
+   ' display-selftest is-selftest
+end-package
+
+fload ${BP}/ofw/termemu/cp881-16.fth
+
 \ fload ${BP}/arch/dna/mmusetup.fth	\ Initial values for MMU lists
 
 \ fload ${BP}/arch/dna/boot.fth
 
 \ false ' auto-boot? set-config-int-default
 
-\ 1 section   before origin  section table
-h# 10.0000      h# 8000 -      h# 4000 -      dictionary-size !
-
 \ dev /mmu
 \ patch instruction! l! section!
 \ device-end
@@ -128,6 +165,10 @@
 
 tag-file @ fclose  tag-file off
 
+\ Dictionary growth size for the ARM Image Format header
+\ 1 section   before origin  section table
+h# 10.0000      h# 8000 -      h# 4000 -      dictionary-size !
+
 fload ${BP}/cpu/arm/saverom.fth  \ Save the dictionary for standalone startup
 
 .( --- Saving mmp2.dic --- )  cr " mmp2.dic" $save-forth

Added: cpu/arm/mmp2/mmuon.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/mmuon.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,67 @@
+code page-table!  ( padr -- )
+   mcr p15,0,tos,2,0,0
+   pop tos,sp
+c;
+code page-table@  ( -- padr )
+   psh tos,sp
+   mrc p15,0,tos,2,0,0
+   mov tos,tos,lsr #14  \ Clear low bits which read unpredictably
+   mov tos,tos,lsl #14
+c;
+
+
+: map-section  ( pa+mode va -- )
+   d# 18 rshift  page-table@ +  l!
+;
+: map-sections  ( pa mode va size -- )
+   2>r  +  2 or   2r>     ( pa+mode va size )
+   bounds  ?do            ( pa+mode )
+      dup i map-section   ( pa+mode )
+      /section +          ( pa+mode' )
+   /section +loop         ( pa+mode )
+   drop
+;
+
+: setup-sections
+   page-table-pa page-table!
+   page-table-pa /page-table erase
+
+   h# 0000.0000 h# c0e             0 fb-pa        map-sections  \ Cache and write bufferable
+   fb-pa        h# c06  fb-pa        fb-size      map-sections  \ Write bufferable
+   h# d400.0000 h# c02  h# d400.0000 h# 0100.0000 map-sections  \ I/O - no caching or buffering
+;
+\ Do we need to map SRAM and DDRC ?
+
+code start-mmu
+   set     r2, 0xFFFFFFFF       \ Set domains for Manager access
+   mcr     p15,0,r2,3,0,0       \ Update register 3 in CP15
+
+   \ Enable the MMU
+   mrc     p15, 0, r2, 1, 0, 0  \ Read current settings in control reg
+   mov     r2,  r2, LSL #18     \ Upper 18-bits must be written as zero,
+   mov     r2,  r2, LSR #18     \ ... clear them now.
+
+   orr     r2, r2, 0x200        \ Set the ROM Protection bit
+   bic     r2, r2, 0x100        \ Clear the System Protection bit
+   orr     r2, r2, 0x001        \ Set the MMU bit
+
+   ahead
+      forth
+      begin  here h# 1f and  while  0 c,  repeat
+      assembler
+   then
+
+   mcr    p15, 0, r2, 1, 0, 0       \ Go Virtual - Wheeeeeee!
+   mrc    p15, 0, r2, 2, 0, 0       \ Insure that the write completes
+   mov    r2,  r2                     \ before continuing
+   sub    pc,  pc,  #4
+c;
+
+: go-fast
+   setup-sections
+   start-mmu
+   dcache-on
+   icache-on
+   d# 400,000 to ms-factor
+   d# 400 to us-factor
+;

Modified: cpu/arm/mmp2/probemem.fth
==============================================================================
--- cpu/arm/mmp2/probemem.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/probemem.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -16,7 +16,7 @@
 
 headers
 : probe  ( -- )
-   0 sdram-size log&release
+   0 available-ram-size log&release
 
    0 0 encode-bytes                                   ( adr 0 )
    physavail  ['] make-phys-memlist  find-node        ( adr len  prev 0 )

Modified: cpu/arm/mmp2/rootnode.fth
==============================================================================
--- cpu/arm/mmp2/rootnode.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/mmp2/rootnode.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -12,6 +12,7 @@
 extend-package
 
 1 encode-int  " #address-cells"  property
+1 encode-int  " #size-cells"  property
 
 hex
 

Added: cpu/arm/mmp2/watchdog.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/watchdog.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,61 @@
+\ See license at end of file
+purpose: System reset using the watchdog timer
+
+: enable-wdt-clock
+   main-pmu-pa h# 1020 +  dup l@  h# 10 or  swap l!  \ enable wdt 2 clock  PMUM_PRR_PJ
+   7  main-pmu-pa h# 200 +  l!
+   3  main-pmu-pa h# 200 +  l!
+;
+
+h# d4080000 value wdt-pa
+: (wdt!)  ( value offset -- )  wdt-pa +  l!  ;
+: wdt!  ( value offset -- )
+   h# baba h# 9c (wdt!)   h# eb10 h# a0 (wdt!)  ( value offset )
+   (wdt!)
+;
+: wdt@  ( offset -- value )  wdt-pa +  l@  ;
+: (reset-all)  ( -- )
+   enable-wdt-clock
+   2 h# 68  wdt!  \ set match register
+   3 h# 64 wdt!   \ match enable: just interrupt, no reset yet
+   1 h# 98 wdt!   \ Reset counter
+   begin  again
+;
+' (reset-all) to reset-all
+
+stand-init:
+   ['] reset-all to bye
+;
+
+0 [if]
+: test-wdt  ( -- )
+   enable-wdt-clock
+   h# 100  h# 68  wdt!  \ set match register
+   1 h# 64 wdt!         \ match enable: just interrupt, no reset yet
+   h# 6c wdt@ .  d# 100 ms  h# 6c wdt@ .
+;
+[then]
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Added: cpu/arm/mmusetup.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmusetup.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,87 @@
+\ See license at end of file
+purpose: Establish the initial values for the MMU and virtual lists
+
+\ The code in this file depends in detail on the initial MMU setup
+\ established by initmmu.fth
+
+dev /mmu
+: st-section  ( -- va )  st-va /section round-down  ;
+
+: st-end  ( -- )  st-va h# 4000 +  ;
+
+: >p  ( va -- pa )
+   dup section@ h# fff0.0000 and  ( va pa-base )
+   swap h# f.f000 and  or
+;
+
+: (initial-mmu-setup)  ( -- )	\ Locate the section table
+   fw-virt-base h# 1f.c000 +  to st-va
+\   fw-virt-base h# ef.c000 +  to st-va
+;
+' (initial-mmu-setup) to initial-mmu-setup
+
+: (initial-claim)  ( -- )
+   0              pagesize          claim-virtual drop   \ Trap table
+   fw-virt-base   memtop @ over -   claim-virtual drop   \ Firmware region
+   st-va          st-end over -     claim-virtual drop   \ Section table
+;
+' (initial-claim) to initial-claim
+
+: (initial-map)  ( -- )
+   0 >p            0            pagesize          h# c map   \ Trap vectors R/O
+\  fw-virt-base >p fw-virt-base memtop @ over -     -1 map   \ Firmware 
+   fw-virt-base >p fw-virt-base /section            -1 map   \ Firmware 
+
+   \ Formally establish the pre-existing mapping so it can be released later
+   st-va >p       st-section   /section         h# c00 map   \ section table
+
+   \ Move the section table virtual address to the pocket just above the
+   \ Forth stacks; typically f70f.c000.
+   st-section                                     ( old-st-va-bas )
+   st-va >p       memtop @     h# 4000          h# c00 map   \ section table
+   memtop @ to st-va                              ( old-st-va-bas )
+   ( old-st-va )               /section     unmap   	 \ Release old mapping
+
+[ifdef] io-base
+   io-base  io-base  /section -1  map
+[then]
+;
+' (initial-map) to initial-map
+
+: vectors-rw  ( -- )  0 >p  0  pagesize  h# c0c  modify  ;
+: vectors-ro  ( -- )  0 >p  0  pagesize  h#   c  modify  ;
+: mmu-install-handler  ( handler trap# -- )
+   vectors-rw hw-install-handler vectors-ro
+;
+
+also forth definitions
+: unmap-temp-io  ( virt -- )
+   dup io-base =  if  drop  else  /section  unmap  then
+;
+previous definitions
+device-end
+
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/arm/saverom.fth
==============================================================================
--- cpu/arm/saverom.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/saverom.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -13,6 +13,7 @@
 
    " stand-init-io" $find-name is init-io
    " stand-init"    init-save
+   " startup" $find drop  is cold-hook
 
    aif-header  h# 80  2r>  $save-image
 ;

Modified: cpu/arm/tools.bth
==============================================================================
--- cpu/arm/tools.bth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/tools.bth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -27,6 +27,7 @@
 
 tag-file @ fclose  tag-file off
 
+h# 10.0000  dictionary-size !
 .( --- Saving tools.dic --- )  " tools.dic" $save-forth cr
 [then]
 

Modified: cpu/arm/traps.fth
==============================================================================
--- cpu/arm/traps.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ cpu/arm/traps.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -65,8 +65,7 @@
    pop  tos,sp
 c;
 
-h# 80 buffer: ram-vector-base-buf
-: move-vector-base  ( -- )  ram-vector-base-buf h# 20 round-up vector-base!  ;
+: move-vector-base  ( -- )  h# 80 alloc-mem h# 20 round-up vector-base!  ;
 
 \ Execute this at compile time for processors that need it.
 \ Ideally we would detect the vector base register at run time
@@ -76,7 +75,7 @@
    ['] move-vector-base to init-vector-base
 ;
 
-: stand-init-io  ( -- )
+: stand-init-io  \ Exception handlers
    stand-init-io
    ['] (restart           is restart
    ['] hw-install-handler is install-handler

Modified: forth/kernel/kernel.fth
==============================================================================
--- forth/kernel/kernel.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ forth/kernel/kernel.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -225,7 +225,7 @@
 [ifndef] run-time
 0 value "temp
 headerless
-d# 1024 1+ /n-t +  constant /stringbuf  \ 1024 bytes + /n for length + 1 for null
+d# 1024 1+ /n-t +  aligned-t  constant /stringbuf  \ 1024 bytes + /n for length + 1 for null
 0 value stringbuf
 0 value $buf
 : init  ( -- )

Modified: ofw/core/countdwn.fth
==============================================================================
--- ofw/core/countdwn.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ ofw/core/countdwn.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -20,6 +20,7 @@
          key?  if
             key drop  true unloop unloop exit
          then
+[ifndef] install-mux-io
 [ifdef] ukey
          ukey? if
             ukey drop
@@ -27,6 +28,7 @@
             true unloop unloop exit
          then
 [then]
+[then]
 
       loop
    -1 +loop

Added: ofw/core/initdict.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ ofw/core/initdict.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,86 @@
+\ See license at end of file
+purpose: Dynamic allocation of dictionary space
+
+\ For use in virtual-memory systems in which the Forth dictionary does
+\ not have memory preallocated to it, this file establishes a mechanism
+\ for allocating physical memory to the dictionary "on demand".
+
+headerless
+
+0 value hard-limit	\ Absolute maximum top of dictionary (virtual)
+
+\ Called when ALLOT can't satisfy the request.  Allocates some more
+\ physical memory for the dictionary, maps it in, and updates limit
+\ to include the new memory.
+
+: extend-dictionary  ( size -- size )
+   dup  pad + d# 100 +                            ( size top-adr )
+   dup  hard-limit  >  if  allot-abort  then      ( size top-adr )
+   pagesize round-up   limit - >r                 ( size r: size' )
+   r@ pagesize mem-claim                          ( size phys.. r: size' )
+   limit r@ mem-mode  mmu-map                     ( size r: size' )
+   limit r> +  hard-limit min  is limit           ( size )
+;
+
+\ Initially, the dictionary growth space extends from here to limit,
+\ and "plenty" of space is available there.  After we have initialized
+\ the memory allocators and the MMU, we give back anything we're not
+\ using, by setting hard-limit to the old limit and setting limit to
+\ the next page boundary above here.  Later, if we need more dictionary
+\ space, allot (via allot-error which we set to execute extend-dictionary)
+\ will dynamically allocate additional physical pages as needed.
+
+: reclaim  ( virt len -- )
+   >r                             ( virt r: len )
+   dup mmu-translate  if          ( virt phys.. mode r: len )
+      drop                        ( virt phys.. r: len )
+      r@ mem-release              ( virt r: len )
+      r> mmu-unmap                ( )
+   else                           ( virt r: len )
+      r> 2drop
+   then                           ( )
+;
+: init-dictionary  ( -- )
+   limit pagesize round-down  to hard-limit
+
+   \ Put the non-page-aligned fragment above hard-limit in the heap
+   hard-limit limit over -    ( adr len )
+   dup  if  add-memory  else  2drop  then
+
+   here  pagesize round-up    to limit
+
+   \ Put the page-aligned unused growth space in the page pool
+   limit  hard-limit  over - reclaim
+
+   \ Unmap the page that is below the dictionary
+   fw-virt-base   origin pagesize round-down  over -  mmu-unmap
+
+   ['] extend-dictionary is allot-error
+;
+stand-init: Reclaim dictionary
+   init-dictionary
+;
+headers
+\ LICENSE_BEGIN
+\ Copyright (c) 2006 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: ofw/core/muxdev.fth
==============================================================================
--- ofw/core/muxdev.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ ofw/core/muxdev.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -68,6 +68,8 @@
 ;
 
 : add-device  ( ihandle -- )
+   ?dup  0=  if  exit  then                      ( ihandle )
+
    /list-node alloc-mem >r                       ( ihandle r: listnode )
 
    dup r@ >ihandle !                             ( ihandle r: listnode )
@@ -112,6 +114,8 @@
 ;
 
 : remove-device  ( ihandle -- )
+   ?dup  0=  if  exit  then             ( ihandle )
+
    >r  first-device                     ( prev r: ihandle )
 
    begin  dup >link @  dup  while       ( prev this  r: ihandle )

Added: ofw/core/reboot.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ ofw/core/reboot.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,62 @@
+\ See license at end of file
+purpose: Reboot system: save reboot info in nvram configuration variables
+
+headerless
+: put-env-number  ( n name$ -- )  hex   rot (.) 2swap (put-ge-var) drop  ;
+: get-env-number  ( name$ -- n )
+   hex   $getenv  if  0  else  $number  if  0  then  then
+;
+
+0 value reboot-info
+: +rb  ( offset -- adr )  reboot-info +  ;
+: copy-reboot-info  ( -- )
+   " reboot-command" $getenv  if  false to reboot?  exit  then
+
+   d# 140 alloc-mem  to reboot-info
+   " reboot-command" $getenv  if  " "  then  d#   0 +rb place
+   " reboot-line#"   get-env-number          d# 132 +rb !
+   " reboot-column#" get-env-number          d# 136 +rb !
+
+   " reboot-command" $unsetenv
+   " reboot-line#"   $unsetenv
+   " reboot-column#" $unsetenv
+
+   true to reboot?
+;
+
+: (save-reboot-info)  ( cmd$ line# column# -- )
+   " reboot-column#" put-env-number
+   " reboot-line#"   put-env-number
+   " reboot-command" (put-ge-var) drop
+;
+' (save-reboot-info) to save-reboot-info
+
+: (get-reboot-info)  ( -- cmd$ line# column# )
+   0 +rb count  d# 132 +rb @  d# 136 +rb @
+;
+' (get-reboot-info) to get-reboot-info
+headers
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2006 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Added: ofw/core/reenter.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ ofw/core/reenter.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -0,0 +1,71 @@
+\ See license at end of file
+purpose: Handle various kinds of entries into Forth from traps, etc.
+
+headerless
+: .go-message  ( -- )
+   \ Restarting is only possible if the state that was first saved
+   \ is from a restartable exception.
+   state-valid @  -1 =  already-go? and  if
+      restartable? on
+      ." Type  'go' to resume" cr
+   then
+;
+
+: .entry  ( -- )
+   talign		\ ... in case dp is misaligned
+
+   aborted? @  if
+      aborted? off  hex cr  ." Keyboard interrupt" cr  .go-message   exit
+   then
+
+   [ also hidden ] (.exception) [ previous ]
+;
+
+headers
+stand-init:
+   ['] .entry is .exception
+;
+
+\ Temporary hacks until we implement these functions correctly
+
+0 value client-rerun?
+
+defer user-interface ' quit to user-interface
+also client-services definitions
+\ " reenter.fth: Implement 'exit' client service correctly" ?reminder
+: exit  ( -- )
+   [ also hidden ] breakpoints-installed off  [ previous ]
+   [ifdef] vector  vector off  [then]
+
+   " restore"  stdout @  ['] $call-method  catch  if  3drop  then
+   " restore"  stdin  @  ['] $call-method  catch  if  3drop  then
+
+   client-rerun? 0= to already-go?
+   user-interface
+;
+: enter  ( -- )  interact  ;
+previous definitions
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2006 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: ofw/gui/iconmenu.fth
==============================================================================
--- ofw/gui/iconmenu.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ ofw/gui/iconmenu.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -155,6 +155,7 @@
    current-sq sq >help 2@ show-description
 ;
 
+[ifdef] x86-assembler
 code expand-rect  ( src dst w h --- )
    dx  pop              \ Height of source image in pixels
    4 [sp] edi xchg
@@ -175,6 +176,7 @@
    edi pop   \ Restore EDI
    esi pop   \ Restore ESI
 c;
+[then]
 
 : expand-icon  ( adr - eadr )
    /icon alloc-mem tuck  ( eadr adr eadr )

Modified: ofw/termemu/fb8.fth
==============================================================================
--- ofw/termemu/fb8.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ ofw/termemu/fb8.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -260,6 +260,17 @@
    /w +loop                      ( color mask )
    2drop                         ( )
 ;
+[ifdef] t!
+: fb24-merge  ( color bits dst-adr width -- )
+   3*  bounds  ?do               ( color mask )
+      dup h# 80000000 and  if    ( color mask )
+         over i t!               ( color mask )
+      then                       ( color mask )
+      3*                         ( color mask' )
+   3 +loop                       ( color mask )
+   2drop                         ( )
+;
+[then]
 : fb32-merge  ( color bits dst-adr width -- )
    /l*  bounds  ?do              ( color mask )
       dup h# 80000000 and  if    ( color mask )
@@ -329,6 +340,17 @@
          ['] colors-565  to fb-16map
       endof
 
+[ifdef] fb24-invert
+      d# 24 of
+         ['] /t*         to pix*
+         ['] fb24-invert to fb-invert
+         ['] tfill       to fb-fill
+         ['] fb24-paint  to fb-paint
+         ['] fb24-merge  to fb-merge
+         ['] colors-32bpp to fb-16map
+      endof
+[then]
+
       d# 32 of
          ['] /l*         to pix*
          ['] fb32-invert to fb-invert

Modified: ofw/wifi/loadpkg.fth
==============================================================================
--- ofw/wifi/loadpkg.fth	Fri Jul  9 06:25:07 2010	(r1864)
+++ ofw/wifi/loadpkg.fth	Tue Jul 13 09:24:52 2010	(r1865)
@@ -1,7 +1,9 @@
 purpose: Load file for supplicant support package
 
 \ Encryption/decryption
+[ifdef] 386-assembler
 fload ${BP}/ofw/wifi/sha1.fth
+[then]
 fload ${BP}/ofw/wifi/aes.fth
 fload ${BP}/ofw/wifi/md5.fth
 fload ${BP}/ofw/wifi/rc4.fth



More information about the openfirmware mailing list