G3/DT233という機種は、NetNSD/macppcのドキュメント読むと、Bootが面倒な機種の1つらしい。 当初から、NetBootさせてDisklessで使おうと思っていたが、やはりハマった。 解決の肝は、 1)SYSTEM DISK 2)arpテーブル であった。 MacOS上で動作するSYSTEM DISK 使うと下記のように nvramrcが追加される。 これが追加されてないとNetBoot時のDHCPに失敗して、boot loaderすら読み込めない。 DHCPサーバで、arpテーブルを静的に設定しておく

Open Firmware, 2.0f1
To continue booting the MacOS type:
BYE
To continue booting from the default boot device type:
BOOT
For Open Firmware serial I/O type:
TTYA IO
 ok
0 > printenv

VARIABLE            CURRENT             DEFAULT
little-endian?      false               false
real-mode?          false               false
auto-boot?          true                true
diag-switch?        false               false
fcode-debug?        false               false
oem-banner?         false               false
oem-logo?           false               false
use-nvramrc?        true                false
real-base           F00000              -1
real-size           100000              100000
virt-base           -1                  -1
virt-size           100000              100000
load-base           600000              4000
pci-probe-list      -1                  -1
screen-#columns     64                  64
screen-#rows        28                  28
selftest-#megs      0                   0
boot-device         enet:               /AAPL,ROM
boot-file
diag-device                             fd:diags
diag-file
input-device        ttya                kbd
output-device       ttya                screen
oem-banner
oem-logo
nvramrc
     hex
     : $D find-device ;
     : $E device-end ;
     : $L BLpatch ; : $R BRpatch ;
     : $X execute ;
     : $p 0 to my-self property ;
     : $a " /chosen" $D $p $E ;
     : &c " ata-enable" $call-parent ;
     10 buffer: km
     dev kbd
     get-key-map km swap move
     $E
     : ck 0 do swap dup 3 >> km + c@ 1 rot 7 and << and or loop ;
     : bootr 0d word count encode-string " machargs" $a
     0 0 1 ck if 0 and else f 3d 0 2 ck if 40 or then then
     if bye else 1e 0 do ['] boot catch drop 1f4 ms loop then bye ;
     : myboot boot-command eval ;
     dev enet
     ' open constant $M
     : $M2 $M 710 - $X ;
     : rl@ -7D9D40 $X ;
     : chstat begin $M2 $M 14f8 - $X -7D6C20 $X rl@ 400 and 0= until ;
     : bmstat begin $M2 $M 13F0 - $X rl@ 100 and until ;
     : xmt1 get-msecs $M 720 - ! chstat $M A00 - $X bmstat chstat ;
     ' xmt1 ' WRITE 10 + l!
     62 ' READ 7 - c!
     : READ { _p _n ; _a } begin _p _n bead -> _a _a 2+
     if _p c@ 80 and 0= else 1 then until _a ;
     $E
     dev /packages/obp-tftp
     : $M over + ['] noop $L ;
     : $O ['] open + ;
     : $M1 dup 24 - -1720 $O $X 6 move 14 + ;
     -5BC $O ' $M1 $L
     0 $O E8 $M EC $M F0 $M F4 $M F8 + ' true $L
     $E
     dev /packages/mac-parts
     : $M -7E89E0 $X 8000 alloc-mem 7F00 + 4 -7E89E0 $X ;
     ' load 268 - ' $M $L
     ' load 160 + ' 0 $L
     $E
     dev ide0
     : open use-ata-interface 0 &c -1 ;
     : set-device-ID set-drive-select ;
     : reset-atapi-bus reset-ata-bus ;
     ' reset-ata-bus 2c + ' 2 $L
     $E
     dev ide1
     : open use-ata-interface 0 &c -1 ;
     : set-device-ID set-drive-select ;
     : reset-atapi-bus reset-ata-bus ;
     ' reset-ata-bus 2c + ' 2 $L
     $E
     dev scsi
     : $M ['] do-cmd + ;
     : $M2 5 us -5f0 $M $X ;
     : $M3 -710 $M f over $X $X ;
     : $M4 1 ms ;
     -1AC $M ' $M2 $L
     100 $M ' $M3 $L
     120 $M ' $M4 $L
     124 $M ' 1 $L
     $E
     unselect-dev
boot-command        boot                boot
 ok
0 >