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 >