cd [file dirname [info script]] proc zipIt {} { set zip [linuxTclFile "zip.exe"] set file [clock format [clock seconds] -format %Y%m%d-%H%M%S.zip] set cmd [list exec $zip $file] foreach file [glob *] { if { [regexp {\.(cpp)|(h)|(S)|(tcl)$} $file] } { lappend cmd $file } } set cmd eval $cmd } proc clean {} { file delete -force bur bios test } if { [catch {set argv}] } { buildLaunch test "uitclsh [info script] build" [pwd] return } #set mingwPath f:/mingw #set env(PATH) "[file native $mingwPath/bin];$env(PATH)" #set env(PATH) "[file native $mingwPath/bin]" #set bin $mingwPath/bin #puts stdout $env(PATH) set env(PATH) "[file native c:/tornado.2.2/host/x86-win32/bin];$env(PATH)" set cc c++pentium.exe set as c++pentium.exe set ld ldpentium.exe set objdump objdumppentium.exe set objcopy objcopypentium.exe #exec $as --help #exec $as --version #exec $as --target-help proc getSyms { o tabName } { global objdump upvar $tabName tab set cnt 0 set syms [join [lrange [split [exec $objdump -t $o] \n] 4 end]] foreach { address type section a b c name } $syms { incr cnt set tab($name) 0x$address } return $cnt } proc depend { left rights make } { set doit 0 if { ![file exists $left] } { incr doit } { foreach right $rights { if { [file mtime $left]<=[file mtime $right] } { incr doit break } } } if { $doit } { uplevel $make } } set include {-I.} #exec $objdump -i #list.cpp interrupt.cpp if { ![catch { set result "" file delete result.txt foreach { gen memories sections } { bur { ram 0x00180000 0x00080000 rom 0x00000700 0x00001c00 } { .text0 rom -O1 { reset.S boot.S } .text1 rom -O3 { entryC.cpp burBiosFlasher.cpp uart.cpp flashAmd.cpp flashIntel.cpp } } bios { ram 0x00180000 0x00080000 rom 0x000f8000 0x00007000 boot 0x000ff000 0x00000ff0 reset 0x000ffff0 0x00000010 } { .text0 rom -O3 { b.cpp uart.cpp ide.cpp pci.cpp cmdLine.cpp flashAmd.cpp flashIntel.cpp config.cpp ohci.cpp fei82559.cpp ip.cpp } .text1 boot -O1 { boot.S entryC.cpp } .text2 reset -O1 { reset.S } } test { ram 0x00110000 0x10000 } { .text ram -O3 { test.cpp } } } { puts stdout $gen #file delete -force $gen if { ![file exists $gen] } { file mkdir $gen } set ld_ld [list] #lappend ld_ld "OUTPUT_FORMAT(elf32-i386, elf32-big, elf32-little)" lappend ld_ld MEMORY lappend ld_ld \{ foreach { name org len } $memories { lappend ld_ld "\t$name : org = $org, len = $len" } lappend ld_ld \} lappend ld_ld "" lappend ld_ld SECTIONS lappend ld_ld \{ foreach { section where opts sources } $sections { set ld_sec " $section :\n\t\{\n" foreach file $sources { set extension [file extension $file] set file [file rootname $file] append ld_sec "\t\t$gen/$file.o(.text)\n" #file delete $gen/$file.o depend $gen/$file.o $file$extension { switch -exact -- $extension { .S { puts stdout $file.S exec $cc -E $file.S -o $gen/$file.s -DARCH_I80486 -D_$gen exec $cc -c $gen/$file.s -g -Wa,-al -o $gen/$file.o >$gen/$file.l #puts stdout [exec $objdump --all-headers $gen/$file.o] } .cpp { depend $gen/$file.o $file.cpp { puts stdout $file.cpp exec $cc -c $file.cpp -Winline -finline-limit=40000 -Wall -S $opts -DARCH_I80486 -D_$gen -o $gen/$file.s exec $cc -c $gen/$file.s $opts -Wa,-al -o $gen/$file.o } } default {} } } } append ld_sec "\t\} >$where" lappend ld_ld $ld_sec } lappend ld_ld { .data : { *(.data) } >ram .bss : { *(.bss) } >ram } lappend ld_ld \} depend $gen/$gen.ld makefile.tcl { set f [open $gen/$gen.ld {WRONLY TRUNC CREAT}] foreach line $ld_ld { puts $f $line } close $f } exec $ld -v -T $gen/$gen.ld -M -o $gen.out >$gen.map exec $objcopy --only-section=.text0 --only-section=.text1 --only-section=.text2 --output-target=binary $gen.out $gen.bin exec $objdump --disassemble $gen.out --architecture=i386 >$gen.bin.reverse puts stdout [format "%s %d" $gen.bin [file size $gen.bin]] } set result #getSyms boot.o boot.syms #exec $cc -c boot_.s -o boot.o } why] } { #exec $objdump --disassemble -s $gen/boot.o >boot.o.reverse #exec $objdump --disassemble-all -s test.o } { puts stdout $why } return zipIt clean set gen bur set file boot set errorInfo "" messageFile [exec $objdump --all-headers $gen/reset.o] messageFile [exec $objdump --all-headers $gen/boot.o] exec $objdump --disassemble-all --target binary 000FFF00.DAT --architecture=i386 >boot.reverse exec $objdump --disassemble-all -s C:/Tornado.2.0/target/proj/cp312/default/romInit.o >romInit.reverse set boot.syms(_romIdtr) fileOpen result.txt fileOpen boot.o.reverse fileOpen boot.bin.reverse fileOpen boot.map fileOpen boot_.s source ymodem.tcl set ser [open com1: RDWR] fconfigure $ser -mode 9600,n,8,1 -buffersize 2048 -blocking 0 -buffering none -translation crlf puts $ser "" set line [read $ser] puts $ser "yload 0070:0000" after 500 send $ser boot.bin puts $ser "go 0070:0000" #puts $ser $ascii::esc close $ser exec c:/Tornado.2.0/host/x86-win32/bin/vxcopy \ C:/Tornado.2.0/target/config/pc486/bootrom_uncmp \ F:/dev/i412/bootrom.sys p 0 0x0a 0 0x10 0xe0000000 p 0 0x0a 0 0x14 0x0000c000 p 0 0x0a 0 0x18 0xe0020000 p 0 0x0a 0 0x04 0x02900007 p 0 0x0a 0 0x3c 0x3808010a p 0 0x12 0 0x5c 0x0000aaaa foreach build { bios bur test } { foreach file [glob -nocomplain $build/*] { file delete $file } }