ベースシステムのコンパイルが終わっているのでマージしてデバイスファイルを作成する.
# sysmerge
# cd /dev/ && ./MAKEDEV all
次いで, X 関連ファイルのコンパイルとインストールを行う.
# cd /usr/xenocara
# make bootstrap
# make obj
# make build
パッケージのアップデート.
# pkg_add -uv
以上で OpenBSD のアップグレード作業が完了する.
# sysmerge
# cd /dev/ && ./MAKEDEV all
# cd /usr/xenocara
# make bootstrap
# make obj
# make build
# pkg_add -uv
$ cd /usr/src # ベースシステムのソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/xenocara # X のソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/ports # ports ツリーのアップデート.
$ cvs -q up -Pd -A
# sysupgrade -s # システムの最新のスナップショットへのアップグレード.
$ urxvt
ListUtil.c: loadable library and perl binaries are mismatched (got handshake key 0xeb80000, needed 0xec00000)
# cd /sys/arch/amd64/compile/GENERIC.MP
# make obj
# make config
# make && make install
# cd /usr/src
# make obj && make build
sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns
ghci> :load sum
ghci> :load
sum [1 of 1] Compiling Main ( sum.hs, interpreted )
sum.hs:3:18: error: Ambiguous occurrence ‘sum’ It could refer to
either ‘Prelude.sum’, imported from ‘Prelude’ at sum.hs:1:1
(and originally defined in ‘Data.Foldable’) or ‘Main.sum’,
defined at sum.hs:2:1
||
3 | sum (n:ns) = n + sum ns
| ^^^ |
Failed, no modules loaded.
import Prelude hiding (sum)
sum :: Num a => [a] -> a
sum [] = 0
sum (n:ns) = n + sum ns
[1 of 1] Compiling Main ( sum.hs, interpreted )
Ok, one module loaded.
ghci> sum [1,3,5,7,9,11]
36
ghci> sum [1..10]
55
# pkg_add -v ghc
Update candidates: quirks-6.98 -> quirks-6.101
quirks-6.101 signed on 2023-02-14T11:05:49Z
quirks-6.98->6.101: ok
Can't install ghc-9.2.5p0 because of libraries
|library c.97.0 not found
| /usr/lib/libc.so.96.1 (system): bad major
| /usr/lib/libc.so.96.2 (system): bad major
| /usr/lib/libc.so.96.4 (system): bad major
| /usr/lib/libc.so.96.5 (system): bad major
|library pthread.27.0 not found
| /usr/lib/libpthread.so.26.1 (system): bad major
| /usr/lib/libpthread.so.26.2 (system): bad major
| /usr/lib/libpthread.so.26.3 (system): bad major
| /usr/lib/libpthread.so.26.4 (system): bad major
Direct dependencies for ghc-9.2.5p0 resolve to libffi-3.4.4 libiconv-1.17 gmp-6.2.1p0
Full dependency tree is libffi-3.4.4 gmp-6.2.1p0 libiconv-1.17
Read shared items: ok
Couldn't install ghc-9.2.5p0
# pkg_add -v ghc-9.2.4p2.tgz
M-x run-haskell
# sysmerge # システム関連の各種ファイルのアップデート
# cd /dev/ && ./MAKEDEV all # デバイスファイルの作成
# cd /usr/xenocara
# make bootstrap
# make obj
# make build
# pkg_add -uv
$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ ./autogen.sh
$ ./configure \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -lgccjit' \
--prefix=/usr/local \
--mandir=/usr/local/share/man \
--infodir=/usr/local/info \
--with-x-toolkit=athena \
--with-imagemagick \
--with-xaw3d \
--with-x \
--without-xim \
--with-xpm=ifavailable \
--with-native-compilation
$ git pull
$ gmake bootstrap
$ gmake check
# gmake install
$ cd /usr/src # ベースシステムのソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/xenocara # X のソースコードのアップデート.
$ cvs -q up -Pd -A
$ cd /usr/ports # ports ツリーのアップデート.
$ cvs -q up -Pd -A
# sysupgrade -s # システムの最新のスナップショットへのアップグレード.
# cd /sys/arch/amd64/compile/GENERIC.MP
# make obj
# make config
# make && make install
# cd /usr/src
# make obj && make build
サイト The Ancient Bits adventure に掲載されている Hello world プログラム hellopdp.s:
.TITLE Say hello on console
.IDENT "V00.00"
.GLOBAL start
.GLOBAL _putconch
STACK = 0x1000
.text
start:
mov $STACK, sp
mov $hellom, r1
mov $helloc, r2
10$: movb (r1), r0
jsr pc, _putconch
dec r2
beq 99$
inc r1
jmp 10$
99$: nop
halt
.data
hellom: .ascii "Hello world!"
helloc = . - hellom
.end
.TITLE putconch: send a byte to the system console
.IDENT "V01.00"
.GLOBAL _putconch
XCSR = 0177564
XBUF = 0177566
TXRDY = 0x0080
NRETRY = 5000
.text
_putconch:
mov r1,-(sp)
mov r2,-(sp)
mov $NRETRY, r1
10$:
mov XCSR,r2
bit r2, $TXRDY
bne 20$
dec r1
bne 10$
mov $2,r0
jmp 999$
20$: movb r0,XBUF
mov $NRETRY, r1
30$: mov XCSR,r2
bit r2, $TXRDY
bne 40$
dec r1
bne 30$
mov $2, r0
jmp 999$
40$: mov $0, r0
999$:
mov (sp)+, r2
mov (sp)+, r1
rts pc
.end _putconch
まず, クロスアセンブラを使用して hellopdp.s と putconch.s をアセンブルする.
$ pdp11-aout-as putconch.s -o putconch.o
$ pdp11-aout-as hellopdp.s -o hellopdp.o
$ pdp11-aout-ld -T ldaout.cmd hellopdp.o putconch.o -o hellopdp.out
$ bin2load -a -f hellopdp.out -o hellopdp.lda
$ simh-pdp11
PDP-11 simulator V3.9-0
sim> load hellopdp.lda
sim> g
Hello world!
HALT instruction, PC: 001040 (MOV R1,-(SP))
sim> q
Goodbye
PDP-11 アセンブリ言語でプログラミングの勉強をすることにした.
ビギナー向けチュートリアルが ChibiAkumas 氏によって YouTube 上で公開されている.
Learn PDP-11 Assembly Coding Lesson 1 - For absolute beginners!.
また, 同氏によるサイト Learn Assembly Programing with ChibiAkumas でチュートリアルの内容が解説されている.
ドキュメントも置いてある.
PDP-11 のアセンブリ言語でプログラムを作成したとして, その実行は SimH で行う.
SimH は, PDP-11 のみならず, Altair, HP3000 などいくつもの旧いコンピューターシステムに対するエミュレーターである.
OpenBSD パッケージとして用意されているので, それをインストールした.
# pkg_add simh
PDP-11 のプログラムを SimH で実行させる方法はサイト
The Ancient Bits adventure が参考になる.
このサイトによれば以下のツールが必要である.
・ クロスアセンブラ
・ bin2load
GNU Binutils と GCC をダウンロードし, configure オプションに --target=pdp11-aout を指定して各々のコンパイルを行う.
$ mkdir -p ~/src/obj/obj-binutils
$ cd ~/src/obj/obj-binutils
$ ~/src/binutils-2.39/configure --target=pdp11-aout --prefix=$HOME/opt
$ gmake
$ mkdir -p ~/src/obj/obj-pdp11
$ cd ~/src/obj/obj-pdp11
$ ~/src/gcc-11.2.0/configure \
'CFLAGS=-I/usr/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/local/lib' \
--target=pdp11-aout \
--with-gmp=/usr/local \
--with-mpfr=/usr/local \
--with-mpc=/usr/local \
--prefix=/home/pine/opt/pdp11-aout
$ gmake
$ ls ~/opt/bin/pdp11-aout-* ~/opt/pdp11-aout/bin ~/opt/pdp11-aout/lib
/home/pine/opt/bin/pdp11-aout-addr2line /home/pine/opt/bin/pdp11-aout-ld /home/pine/opt/bin/pdp11-aout-readelf
/home/pine/opt/bin/pdp11-aout-ar /home/pine/opt/bin/pdp11-aout-ld.bfd /home/pine/opt/bin/pdp11-aout-size
/home/pine/opt/bin/pdp11-aout-as /home/pine/opt/bin/pdp11-aout-nm /home/pine/opt/bin/pdp11-aout-strings
/home/pine/opt/bin/pdp11-aout-c++filt /home/pine/opt/bin/pdp11-aout-objcopy /home/pine/opt/bin/pdp11-aout-strip
/home/pine/opt/bin/pdp11-aout-elfedit /home/pine/opt/bin/pdp11-aout-objdump
/home/pine/opt/bin/pdp11-aout-gprof /home/pine/opt/bin/pdp11-aout-ranlib
/home/pine/opt/pdp11-aout/bin/:
ar as ld ld.bfd nm objcopy objdump ranlib readelf strip
/home/pine/opt/pdp11-aout/lib/:
ldscripts
実際に SimH での実行イメージを作成するツールである.
Git リポジトリー からダウンロードできる.
コンパイルは UNIX ライクなシステムなら問題なくできるだろう.
以下の内容を ldaout.cmd という名前で保存する.
OUTPUT_FORMAT("a.out-pdp11")
ENTRY(start)
phys = 00001000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(0100);
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(0100);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
. = ALIGN(0100);
}
end = .;
}
https://cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/
# pkg_add -uv
# sysmerge # システム関連の各種ファイルのアップデート
# cd /dev/ && ./MAKEDEV all # デバイスファイルの作成
# cd /usr/xenocara
# make bootstrap
# make obj
# make build
# pkg_add -uv
https://cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/: no such dir
$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ ./autogen.sh
$ ./configure \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -lgccjit' \
--prefix=/usr/local \
--mandir=/usr/local/share/man \
--infodir=/usr/local/info \
--with-x-toolkit=athena \
--with-imagemagick \
--with-xaw3d \
--with-x \
--without-xim \
--with-xpm=ifavailable \
--with-native-compilation
$ git pull
$ gmake bootstrap
$ gmake check
# gmake install
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |