Simh Emulator on Docker

いくつか Simh のことを書きました。
simhもopen-simhがフォークされるなど動きがあります。
取り合えず、open-simhを使ってみた。以下は I1401 で Fortran と COBOL を実行するのも含んでいます。

```
FROM alpine:3.20.3
RUN apk update \
    && apk --no-cache --virtual .build-deps add tzdata \
    && cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && echo "Asia/Tokyo" >  /etc/timezone \
    && apk del --purge .build-deps
RUN apk add gcc libc-dev make git xz libpcap-dev pcre-dev
RUN mkdir /src ; cd /src ; git clone -v https://github.com/open-simh/simh \
    && cd simh ; make GCC="gcc -D_LARGEFILE64_SOURCE -Wno-format" i1401 i7010 pdp11 vax780 \
    && cp BIN/i* BIN/p* BIN/v* /usr/local/bin
RUN cd /src ; wget http://blog.livedoor.jp/suzanhud/IBM1401/FORTRAN/FortranIV.tar.xz ; tar xvf /src/FortranIV.tar.xz
RUN cd /src/FortranIV/generation ; ./mksystem.sh
RUN cd /src/FortranIV/running ; ./sample.sh ; cat sample.lst
RUN cd /src ; wget http://ibm-1401.info/pictures/000COBOL/i1401-Cobol-Generation.zip ; mkdir /src/cobol ; cd /src/cobol ; unzip ../i1401-Cobol-Generation.zip
COPY Cobol_Generation_for_linux.ini /src/cobol/generation/
RUN cd /src/cobol/generation; i1401 Cobol_Generation_for_linux.ini
RUN cd /src/cobol; wget http://ibm-1401.info/pictures/000COBOL/i1401-Cobol.zip ; unzip i1401-Cobol.zip
RUN cd /src/cobol/Cobol; cp ../generation/Autocoder.cobol.tap .; cp ../generation/Cobol.tap .
COPY cobol_linux.ini autocoder_linux.ini /src/cobol/Cobol/
RUN cd /src/cobol/Cobol; dos2unix Hello.cob; i1401 cobol_linux.ini Hello.cob; i1401 autocoder_linux.ini
```
こんな感じです。
```
$ docker build --no-cache --progress=plain -t kazu_simh2 .
#0 building with "default" instance using docker driver

#1 [internal] load .dockerignore
#1 transferring context:
#1 transferring context: 2B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 1.43kB 0.0s done
#2 DONE 0.0s
(snip)
#11 1.265 HALT instruction, IS: 3086 (B 3079)
#11 1.265 Goodbye
#11 1.266                          FORTRAN   RUN                                                      000SAMPL
#11 1.266 FORTRAN COMPILATION  VER 2 MOD 2
#11 1.266 $NO MULTIPLY DIVIDE
#11 1.266      C     SAMPLE PROGRAM TO TEST SYSTEM
#11 1.266      C                                                                       003SAMPL
#11 1.266      C     PROGRAM FOR FINDING THE LARGEST VALUE                             004SAMPL
#11 1.266      C       ATTAINED BY A SET OF NUMBERS                                    005SAMPL
#11 1.266 001        DIMENSION A(12)                                                   006SAMPL
#11 1.266 002        READ (1,1)N,(A(I),I=1,N)                                          007SAMPL
#11 1.266 003      1 FORMAT (I3/(12F6.2))                                              008SAMPL
#11 1.266 004        BIGA=A(1)                                                         009SAMPL
#11 1.266 005        DO 20 I=2,N                                                       010SAMPL
#11 1.266 006        IF (BIGA.LT.A(I)) BIGA = A(I)                                     011SAMPL
#11 1.266 007     20 CONTINUE                                                          012SAMPL
#11 1.266 008        WRITE (3,2)N,BIGA                                                 013SAMPL
#11 1.266 009      2 FORMAT (21H1THE LARGEST OF THESE,I3,11H NUMBERS IS,F9.2)          014SAMPL
#11 1.266 010        STOP                                                              015SAMPL
#11 1.266 011        END                                                               016SAMPL
(snip)
#11 1.266
          THE LARGEST OF THESE 12 NUMBERS IS  9876.54
(snip)
```

## 変更履歴
(2023/01/10)パッケージ「bridge-utils」は不要なので削除しました。Alpine Linuxを3.17.1にバージョンアップ。
(2023/04/08)Alpine Linuxを3.17.3にバージョンアップ。インストールするパッケージに「pcre-dev」を追加。