PDP-11 アセンブリ言語でプログラミングの勉強をすることにした.
ビギナー向けチュートリアルが ChibiAkumas 氏によって YouTube 上で公開されている.
Learn PDP-11 Assembly Coding Lesson 1 - For absolute beginners!.
また, 同氏によるサイト Learn Assembly Programing with ChibiAkumas でチュートリアルの内容が解説されている.
ドキュメントも置いてある.
- PDP-11 Programmers Card: PDP-11 クイックプログラミングリファレンス (17MB)
- PDP-11 04-05-10-35-40-45 processor handbook: PDP-11 04/05/10/35/40/45 プロセッサーハンドブック (172MB)
- PDP 11/40 Processor Handbook: PDP-11/40 プロセッサーハンドブック (17MB)
- PDP-11 MACRO-11 Language Reference Manual: PDP-11 MACRO-11 リファレンスマニュアル (10MB)
- PDP-11 Instruction Reference: PDP-11 インストラクションリファレンス (77MB)
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
残念ながら, クロスコンパイラのコンパイルには失敗したがクロスアセンブラは作成できた.
これらによって作成されたプログラムは \$HOME/opt 以下にインストールした.
$ 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
bin2load
実際に SimH での実行イメージを作成するツールである.
Git リポジトリー からダウンロードできる.
コンパイルは UNIX ライクなシステムなら問題なくできるだろう.
ldaout.cmd
以下の内容を 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 = .;
}
-
no image
-
no image
-
no image
-
no image
-
no image