\ loader stuff for plan9 \ hack for doing boot args for now... \ later we should parse from plan9.ini \ fill in your auth and fs ip addrs! : bootline ( -- $s ) " " ; : bootargs ( -- $s ) " *nomp=1"n*nodumpstack=1"n*norealmode=1"n*maxmem=0x10000000"nmouseport=ps2"nauth=10.12.8.3"nfs=10.12.8.3"nbootargs=tcp ether /dev/etherU0"n" ; : page-round ( x -- x ) fff + fffff000 and ; : putstr-nul ( $src targ -- ) 2 pick over 3 pick ( src n targ src targ n ) move ( src n targ ) + 0 swap c! ( src ) drop ; variable targ variable confaddr variable buf variable text variable data variable bss warning off : init-program ( -- ) h# 1200 confaddr ! h# 10.0000 targ ! loaded drop buf ! \ parse a.out header buf @ l@ bswap 1eb <> if exit then \ 386 magic check buf @ h# 4 + l@ bswap to text buf @ h# 8 + l@ bswap to data buf @ h# c + l@ bswap to bss \ copy text and data and zero bss at targ \ we're assuming the loaded location (80.0000) does not \ overlap the target location (starting at 10.000). 20 dup buf +! targ +! buf @ targ @ text @ move text @ buf +! text @ targ @ + page-round targ ! buf @ targ @ data @ move data @ dup buf +! targ +! targ @ bss @ erase \ XXX read plan9.ini, parse and place. \ for now we just put strings directly in place bootline confaddr @ putstr-nul bootargs confaddr @ h# 40 + putstr-nul \ copy what loader.elf does \ "In BIOS Data Area, emulate a 639 KB fre low memory" h# 7f h# 413 c! h# 2 h# 414 c! \ setup execution at our entry point with a small temp stack h# 10.0020 h# 9.fff0 (init-program) ; warning on dcon-unfreeze \ if usb net isn't recognized by ofw \ wifi your-essid boot net: