Author: wmb Date: 2009-01-14 10:28:37 +0100 (Wed, 14 Jan 2009) New Revision: 1072
Added: cpu/arm/pl011-diaguart.fth cpu/arm/versatilepb/ cpu/arm/versatilepb/build/ cpu/arm/versatilepb/build/Makefile cpu/arm/versatilepb/qemubase.bth Modified: cpu/arm/saverom.fth Log: ARM - Added rudimentary OFW build for QEMU emulation of ARM VersatilePB board.
Added: cpu/arm/pl011-diaguart.fth =================================================================== --- cpu/arm/pl011-diaguart.fth (rev 0) +++ cpu/arm/pl011-diaguart.fth 2009-01-14 09:28:37 UTC (rev 1072) @@ -0,0 +1,12 @@ + +: inituarts ( -- ) ; + +: ukey? ( -- flag ) uart-base h# 18 + l@ h# 10 and 0= ; +: ukey ( -- char ) + begin ukey? until + uart-base l@ h# ff and +; +: uemit ( char -- ) + begin uart-base h# 18 + l@ h# 20 and 0= until + uart-base l! +;
Modified: cpu/arm/saverom.fth =================================================================== --- cpu/arm/saverom.fth 2009-01-13 20:16:46 UTC (rev 1071) +++ cpu/arm/saverom.fth 2009-01-14 09:28:37 UTC (rev 1072) @@ -2,8 +2,8 @@ \ See license at end of file
\ Save an image of the target system in a file. -: save-rom ( str -- ) - >r +: $save-rom ( filename$ -- ) + 2>r make-arm-header
\ Turn off the relocation bitmap maintainer @@ -14,7 +14,7 @@ " stand-init-io" $find-name is init-io " stand-init" init-save
- aif-header h# 80 r> save-image + aif-header h# 80 2r> $save-image ;
\ LICENSE_BEGIN
Added: cpu/arm/versatilepb/build/Makefile =================================================================== --- cpu/arm/versatilepb/build/Makefile (rev 0) +++ cpu/arm/versatilepb/build/Makefile 2009-01-14 09:28:37 UTC (rev 1072) @@ -0,0 +1,28 @@ +OS := $(shell uname) + +BASEDIR= `(cd ../../../..; pwd;)` +CLIENTDIR=../../../../clients +CLIENTPROGS= + +all: qemubase.rom + +qemubase.rom: FORCE build ${CLIENTPROGS} + ./build $@ + +../../${OS}/forth: + @make -C ../../${OS} forth + +../../build/inflate.bin: + @make -C ../../build inflate.bin + +build: ../../${OS}/forth + @ln -sf ../../${OS}/forth build + +clean: + rm -f *.dic *.log headers *~ *.elf *.di *.img builton.fth build *.rom *.version + +clean-all: clean + @make -C ../../build clean + @make -C ../../${OS} clean + +.PHONY: FORCE clean all clean-all
Added: cpu/arm/versatilepb/qemubase.bth =================================================================== --- cpu/arm/versatilepb/qemubase.bth (rev 0) +++ cpu/arm/versatilepb/qemubase.bth 2009-01-14 09:28:37 UTC (rev 1072) @@ -0,0 +1,94 @@ +purpose: Load file for OFW on ARM VersatilePB as emulated by QEMU +\ See license at end of file + +\ Example QEMU command line: +\ qemu-system-arm -M versatilepb -m 32 -kernel qemubase.rom -serial vc +\ Then type "Ctrl-Alt 3" in the QEMU popup window to get the serial console +\ The memory size (32 shown above) is not critical - 16 or greater works. + +dictionary: ${BP}/cpu/arm/build/basefw.dic +command: &armforth &dictionary &this +build-now + +\ ' $report-name is include-hook + + +h# 8.0000 constant initial-heap-size + +: (initial-heap) ( -- adr len ) limit initial-heap-size ; +' (initial-heap) to initial-heap + + +h# 101f1000 constant uart-base \ UART0 base address on VersatilePB board + +fload ${BP}/cpu/arm/pl011-diaguart.fth \ PL011 UART + +\ Setup the console I/O vectors for a simple UART +: install-uart-io ( -- ) + inituarts + + ['] lf-pstr is newline-pstring + ['] ukey? is key? + ['] ukey is (key + ['] uemit is (emit + ['] default-type is (type + ['] emit1 is emit + ['] type1 is type + ['] crlf is cr + ['] true is (interactive? + ['] cancel is light +; + +\ Install the simple UART driver from the standalone I/O init chain +: stand-init-io ( -- ) + stand-init-io + install-uart-io +; + +\ 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 + ldr r8,[r2,#0x1c] \ r8: memtop - From Linux kernel args set by QEMU + \ r9 is up + mov r10,#0 \ r10: argc + mov r11,r2 \ r11: argv (kernel args) + mov r12,`initial-heap-size` \ r12: initial-heap-size + + b 'code start-forth \ Branch to the generic startup code +end-code + + +fload ${BP}/cpu/arm/saverom.fth \ Save the dictionary for standalone startup + +.( --- Saving qemubase.rom --- ) cr " qemubase.rom" $save-rom + +\ LICENSE_BEGIN +\ Copyright (c) 2009 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