disklabel -r -w fd0 floppy
としていたこと。disklabel -r -w /dev/rfd0a floppy
ってやらないと書けないのね ;-) 知らなかった。
isa_chipset_tag_t iba_ic(=> ia_ic => sc_ic)
に、I/O空間の0x480をmapしたhandleを入れて、
isadma.cでそれを使うようにしてみた。
:binutils ppc-makeでの環境変数を設定した状態で、 ./configure --prefix=/usr/local/PPC --host=powerpc-elf-netbsd \ --target=powerpc-elf-netbsd --build=i386-unknown-netbsd1.3A gmake gmake install :gcc setenv PATH /usr/local/Be/powerpc-elf-netbsd/bin:`printenv PATH` patch -p < gcc-2723-assert.diff ./configure \ --prefix=/usr/local/PPC \ --host=powerpc-elf-netbsd \ --target=powerpc-elf-netbsd --build=i386-unknown-netbsd1.3A gmake LANGUAGES="c c++" \ HOST_CC=/usr/local/bin/gcc \ GCC_FOR_TARGET=/usr/local/Be/powerpc-elf-netbsd/bin/gcc
ppc-strip --remove-section=.note ofwboot.elfで
すぱっと切り取ろう。
psim -f tree-970207 ofwboot.elfで起動だ。
hwpend = ipending & ~pcpl; /* Do now unmasked pendings */
ここに、
hwpend &= 0x0fffffff;
が必要。OpenBSD/powerpcでは、
hwpend &= ((1L << ICU_LEN) - 1);ってなっている。
V.4 stack frames look like:
SP----> +---------------------------------------+
| back chain to caller | 0
+---------------------------------------+
| caller's saved LR | 4
+---------------------------------------+
| Parameter save area (P) | 8
+---------------------------------------+
| Alloca space (A) | 8+P
+---------------------------------------+
| Varargs save area (V) | 8+P+A
+---------------------------------------+
| Local variable space (L) | 8+P+A+V
+---------------------------------------+
| saved CR (C) | 8+P+A+V+L
+---------------------------------------+
| Save area for GP registers (G) | 8+P+A+V+L+C
+---------------------------------------+
| Save area for FP registers (F) | 8+P+A+V+L+C+G
+---------------------------------------+
old SP->| back chain to caller's caller |
+---------------------------------------+
/* Disable translation, machine check and recoverability: */ \
mfmsr 2; \
lis 3,(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@ha; \
addi 3,3,(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@l; \
andc 2,2,3; \
mtmsr 2; \
disableにしたいのならば、
lis 3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@ha; \
addi 3,3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@l; \
だろう。あと、これらのbitは(確か)全部下位16bitに収まっているので
andi. 2,2,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@l;で良いはず。NetBSD/powerpcは、こうなっている。
/* First have to enable KERNEL mapping */
lis 31,KERNEL_SEGMENT@ha
addi 31,31,KERNEL_SEGMENT@l
これ、NetBSD/powerpcだと、
/* First have to enable KERNEL mapping */
lis 31,KERNEL_SEGMENT@h
ori 31,31,KERNEL_SEGMENT@l
となってます。
ex.X_add_number = (ex.X_add_number >> 16) & 0xffff;
ex.X_add_number = (((ex.X_add_number >> 16) & 0xffff)
+ ((ex.X_add_number >> 15) & 1));
lis 3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@ha; addi 3,3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@l;のように、addiを使う場合 @ha を使用しなければならない。
lis 3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@h; ori 3,3,~(PSL_DR|PSL_IR|PSL_ME|PSL_RI)@l;のように、addiを使わないのならば、@h を使うべきである。
lis 3,xxx@ha
lwz 3,xxx@l(3)
is correct, while
lis 3,xxx@h
lwz 3,xxx@l(3)
could access a different word (64k lower address than &xxx).
Unfortunately, we are not planning on doing anything to the BootROM of the BeBox to allow it to read various kernels, as we have long stopped production of the BeBox.
dd if=/dev/zero of=/be/home/be/swap bs=32k count=3072 /etc/fstab add: ariel:/be/home/be/swap none swap sw,nfsmntpt=/swap # swapctl -A
:binutils setenv PATH /usr/local/Be/powerpc-elf-netbsd/bin:`printenv PATH` ./configure --prefix=/usr/local/PPC --host=powerpc-elf-netbsd gmake gmake install # libiberty/Makefile # $(RANLIB) -> ppc-ranlib :gcc setenv PATH /usr/local/Be/powerpc-elf-netbsd/bin:`printenv PATH` ./configure \ --prefix=/usr/local/PPC \ --host=powerpc-elf-netbsd \ --target=powerpc-elf-netbsd --build=i386-unknown-netbsd1.2G gmake LANGUAGES=c HOST_CC=/usr/local/bin/gcc
NetBSD 1.2G (GENERIC) #34: Thu Aug 28 23:23:01 GMT 1997
sakamoto@ariel.cec.co.jp:/be/src/NetBSD/sys970801/arch/bebox/compile/GENERIC
CPU: PowerPC 603e (Revision 400)
real memory = 83886080 (81920K bytes)
avail memory = 74727424 (72976K bytes)
using 1024 buffers containing 4194304 bytes of memory
mainbus0 (root)
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0
pchb0: Motorola product 0x0001 (rev. 0x24)
pcib0 at pci0 dev 11 function 0
pcib0: Intel 82378IB PCI-ISA Bridge (System I/O) (rev. 0x43)
Symbios Logic 53c810 (SCSI mass storage, revision 0x02) at pci0 dev 12 function 0 not configured
S3 Trio32/64 (VGA display) at pci0 dev 14 function 0 not configured
isa0 at pcib0
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
lpt0 at isa0 port 0x378-0x37b irq 7
wdc0 at isa0 port 0x1f0-0x1f7 irq 14
wd0 at wdc0 drive 0:
wd0: 335MB, 682 cyl, 16 head, 63 sec, 512 bytes/sec
wd0: using 1-sector 16-bit pio transfers, chs addressing
ed0 at isa0 port 0x300-0x31f irq 5
ed0: address 00:40:33:91:5b:37, type NE2000 (16-bit)
pc0 at isa0 port 0x60-0x6f irq 1: color
spkr0 at pc0 port 0x61
biomask 4000 netmask 4020 ttymask 40a2
ticks_per_sec = 8250000
hz = 100
ticks_per_intr = 82500
boot device:
root device: ed0
dump device:
file system (default generic): nfs
nfs_boot: using network interface 'ed0'
nfs_boot: client_addr=0xc0a80102
nfs_boot: server_addr=0xc0a80101
nfs_boot: hostname=bebox
root on ariel:/be/home/be/root
root time: 0x3405f4f1
init: copying out path `/sbin/init' 11
lis 1,0x42000000@h /* set dsisr<1> to flag pte not found */これ本当は、
lis 1,0x40000000@h /* set dsisr<1> to flag pte not found */となるべき。コメントにもbit 1(PowerPCでは上からbit 0,1,2...と呼ぶ) の説明しかしてないのに、書き間違えたのね...
/*
* Check whether this task is allowed to have
* this page.
*/
prot = entry->protection;
if ((fault_type & (prot)) != fault_type)
RETURN(KERN_PROTECTION_FAILURE);
ここのところ。ここで、prot = VM_PROT_READ|VM_PROT_EXECUTEだが、
fault_type = VM_PROT_READ|VM_PROT_WRITE なので、returnしてしまい、
結局 vm_faultでページをmapできなくなってしまう。
static struct lconv ret;
if (__mlocale_changed) {
/* LC_MONETARY */
ret.int_curr_symbol = _CurrentMonetaryLocale->int_curr_symbol;
この代入するところで、
exc_dsi|exc_user=0x6737c dsisr=0x42000000 at 0x5e7b8
が発生する。
+ exec make -f /usr/local/Be/usr/share/mk/sys.mk -f Makefile creating accept.o : Assembler messages: :2: Error: Unrecognized opcode: `bnlsr' *** Error code 1というエラーが起きる。オペランド`bnlsr'なんてものはないので、 `bnslr'に修正する。書き間違いらしい。
#if 0
XXX NEEDS TO BE FIXED XXX
comconstag = ???;
#endif
という様なところが二カ所 :) ここをfixしたらserial consoleが
動いた。

| 0xD0000000 〜 0xDFFFFFFF | ユーザー空間セグメント |
|---|---|
| 0xE0000000 〜 0xEFFFFFFF | カーネル空間セグメント |
というようなアドレスを仮想アドレスとして使用している。
| BAT0 | 0x00000000 | 0x00000000 | メインメモリ |
|---|---|---|---|
| BAT1 | 0x80000000 | 0x80000000 | PCI/ISA I/O |
| BAT2 | 0xC0000000 | 0xC0000000 | PCI/ISA Memory |
mkisofs directry > /dev/fd0loop: mftbu r30 #load from TBU mftb r31 #load from TBL mftbu r29 #load from TBU cmpw r30,r29 #see if 'old' = 'new' bne loop #loop if carry occurred
| Processor Address Range | Definition |
|---|---|
| 0x00000000 〜 0x7FFFFFFF | System memory space |
| 0x80000000 〜 0x807FFFFF | ISA/PCI I/O space |
| 0x80800000 〜 0x80FFFFFF | PCI config space |
| 0x81000000 〜 0xBF7FFFFF | PCI I/O space |
| 0xBF800000 〜 0xBFFFFFFF | Reserved |
| 0xC0000000 〜 0xFEFFFFFF | PCI memory space |
| 0xFF000000 〜 0xFFFFFFFF | ROM space |