8 Commits

Author SHA1 Message Date
mcphail cc6b9f03c5 New version with combined amd64/arm64 build 2026-05-03 18:49:11 +01:00
mcphail af01775e41 Try combined amd64/arm64 build
Split Dockerfile so z88dk doesn't have to be rebuilt every time it falls out od cache
2026-05-03 18:41:39 +01:00
mcphail 6b66f9ba30 concurrent build when cross compiling on m1 fails 2026-04-28 22:28:38 +01:00
mcphail 010477fa4a Fix taptools build for macos target 2026-04-26 22:50:57 +01:00
mcphail 04e355a2ee Update sjasmplus, pasta80 and skoolkit for v7.0 2026-04-24 18:20:58 +00:00
mcphail 91e987b972 Add TAPTOOLS 2026-02-23 12:31:47 +00:00
mcphail f2510aedc2 Bug fix for Boriel BASIC 2026-02-09 21:36:51 +00:00
mcphail 97418fa1ef Hotfix for Boriel BASIC 2026-02-02 00:10:52 +00:00
4 changed files with 102 additions and 61 deletions
+22 -51
View File
@@ -1,5 +1,8 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
# My current workflow is to build this on an M1 MacBook for both amd64 and arm64 using:
# docker buildx build --platform linux/arm64/v8,linux/amd64 -t boarstone.mcphail.uk/mcphail/speccydev:tagname .
FROM ubuntu:24.04 AS build FROM ubuntu:24.04 AS build
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
@@ -7,12 +10,13 @@ RUN apt-get update \
automake \ automake \
build-essential \ build-essential \
fpc \ fpc \
libdsk4-dev \
make \ make \
python3-pip \ python3-pip \
unzip \ unzip \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ADD https://github.com/z00m128/sjasmplus.git#v1.21.1 /sjasmplus ADD https://github.com/z00m128/sjasmplus.git#v1.23.0 /sjasmplus
RUN cd /sjasmplus && make -j8 && make install RUN cd /sjasmplus && make -j8 && make install
ADD https://boarstone.mcphail.uk/mcphail/spectrum_remload.git /ttttt ADD https://boarstone.mcphail.uk/mcphail/spectrum_remload.git /ttttt
RUN cd /ttttt && make ttttt RUN cd /ttttt && make ttttt
@@ -20,7 +24,7 @@ ADD https://github.com/einar-saukas/ZX0.git /zx0
RUN cd /zx0/src/ \ RUN cd /zx0/src/ \
&& gcc -O2 -o zx0 zx0.c optimize.c compress.c memory.c \ && gcc -O2 -o zx0 zx0.c optimize.c compress.c memory.c \
&& gcc -O2 -o dzx0 dzx0.c && gcc -O2 -o dzx0 dzx0.c
ADD https://www.boriel.com/files/zxb/zxbasic-1.18.5-linux64.tar.gz . ADD https://www.boriel.com/files/zxb/zxbasic-1.18.7-linux64.tar.gz .
RUN tar xf zxbasic* RUN tar xf zxbasic*
ADD https://github.com/Mastodon-/inpaws.git /inpaws ADD https://github.com/Mastodon-/inpaws.git /inpaws
RUN cd /inpaws/ \ RUN cd /inpaws/ \
@@ -35,54 +39,15 @@ RUN cd /hdfmonkey/ \
&& ./configure \ && ./configure \
&& make -j16 \ && make -j16 \
&& make install && make install
ADD https://github.com/pleumann/pasta80.git#v0.96 /opt/pasta80 ADD https://github.com/pleumann/pasta80.git#v0.98 /opt/pasta80
RUN cd /opt/pasta80 \ RUN cd /opt/pasta80 \
&& fpc pasta && fpc pasta
ADD --unpack https://www.seasip.info/ZX/taptools-1.1.3.tar.gz taptools/
FROM ubuntu:24.04 AS z88dk RUN cd taptools/taptools* \
RUN apt-get update \ && cp /usr/share/automake-1.16/config.guess . \
&& apt-get install -y --no-install-recommends \ && ./configure \
bison \ && make -j8 \
build-essential \ && make install
ca-certificates \
ccache \
cpanminus \
curl \
dos2unix \
flex \
gdb \
git \
libboost-all-dev \
libcapture-tiny-perl \
libclone-perl \
libdata-hexdump-perl \
libfile-slurp-perl \
libgmp3-dev \
liblocal-lib-perl \
libmodern-perl-perl \
libpath-tiny-perl \
libregexp-common-perl \
libtext-table-perl \
libxml2-dev \
libyaml-perl \
m4 \
make \
perl \
pkg-config \
ragel \
re2c \
texi2html \
texinfo \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
ENV Z88DK_PATH="/opt/z88dk"
RUN cpanm -l $HOME/perl5 --no-wget local::lib Template::Plugin::YAML \
&& git clone --depth 1 --branch v2.4 --recursive https://github.com/z88dk/z88dk.git ${Z88DK_PATH} \
&& cd ${Z88DK_PATH} \
&& eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)" \
&& chmod 777 build.sh \
&& BUILD_SDCC=1 BUILD_SDCC_HTTP=1 MAKE_CONCURRENCY=-j8 ./build.sh \
&& make install-clean bins-clean
FROM ubuntu:24.04 FROM ubuntu:24.04
RUN apt-get update \ RUN apt-get update \
@@ -90,6 +55,8 @@ RUN apt-get update \
ca-certificates \ ca-certificates \
fuse-emulator-utils \ fuse-emulator-utils \
git \ git \
libdsk4 \
libdsk-utils \
m4 \ m4 \
make \ make \
openssh-client \ openssh-client \
@@ -99,7 +66,6 @@ RUN apt-get update \
z80dasm \ z80dasm \
zmakebas \ zmakebas \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local/bin/sjasmplus /bin/sjasmplus
COPY --from=build /ttttt/ttttt /bin/ttttt COPY --from=build /ttttt/ttttt /bin/ttttt
COPY --from=build /zx0/src/zx0 /bin/zx0 COPY --from=build /zx0/src/zx0 /bin/zx0
COPY --from=build /zx0/src/dzx0 /bin/dzx0 COPY --from=build /zx0/src/dzx0 /bin/dzx0
@@ -111,9 +77,14 @@ COPY --from=build /zxbasic/tools /opt/zxbasic/tools
COPY --from=build /inpaws/inpaws /bin/inpaws COPY --from=build /inpaws/inpaws /bin/inpaws
COPY --from=build /usr/local/bin/ /usr/local/bin/ COPY --from=build /usr/local/bin/ /usr/local/bin/
COPY --from=build /usr/local/lib/python3.12/dist-packages/skoolkit/ /usr/local/lib/python3.12/dist-packages/skoolkit/ COPY --from=build /usr/local/lib/python3.12/dist-packages/skoolkit/ /usr/local/lib/python3.12/dist-packages/skoolkit/
COPY --from=build /usr/local/bin/hdfmonkey /bin/hdfmonkey
COPY --from=build /opt/pasta80 /opt/pasta80 COPY --from=build /opt/pasta80 /opt/pasta80
COPY --from=z88dk /opt/z88dk/ /opt/z88dk/
# z88dk takes a long time to cross compile so I'm keeping this in a separate container
# so it doesn't require building every time the cache expires. The Dockerfile for z88dk
# is in a subdirectory of this one. If you're building the container yourself you may
# want to alter the next line to your own tagged build of z88dk but you're welcome to
# use mine.
COPY --from=boarstone.mcphail.uk/mcphail/z88dk:v2.4 /opt/z88dk/ /opt/z88dk/
ENV PATH="${PATH}:/opt/z88dk/bin:/opt/zxbasic:/opt/zxbasic/tools:/opt/pasta80" ENV PATH="${PATH}:/opt/z88dk/bin:/opt/zxbasic:/opt/zxbasic/tools:/opt/pasta80"
ENV ZCCCFG="/opt/z88dk/lib/config" ENV ZCCCFG="/opt/z88dk/lib/config"
USER ubuntu USER ubuntu
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "ZX Spectrum dev tools", "name": "ZX Spectrum dev tools",
//"build": { "dockerfile": "Dockerfile" }, //"build": { "dockerfile": "Dockerfile" },
// The Dockerfile takes an age to build due to z88dk, so pull from prebuilt: // The Dockerfile takes an age to build due to z88dk, so pull from prebuilt:
"image": "boarstone.mcphail.uk/mcphail/speccydev:v5.0", "image": "boarstone.mcphail.uk/mcphail/speccydev:v8.0",
"remoteUser": "ubuntu", "remoteUser": "ubuntu",
"runArgs": [ "runArgs": [
"--network=host" "--network=host"
+55
View File
@@ -0,0 +1,55 @@
# syntax=docker/dockerfile:1
# Similar to the speccydev container, I'm building this with:
# docker buildx build --platform linux/arm64/v8,linux/amd64 -t boarstone.mcphail.uk/mcphail/z88dk:tagname .
FROM ubuntu:24.04 AS build
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bison \
build-essential \
ca-certificates \
ccache \
cpanminus \
curl \
dos2unix \
flex \
gdb \
git \
libboost-all-dev \
libcapture-tiny-perl \
libclone-perl \
libdata-hexdump-perl \
libfile-slurp-perl \
libgmp3-dev \
liblocal-lib-perl \
libmodern-perl-perl \
libpath-tiny-perl \
libregexp-common-perl \
libtext-table-perl \
libxml2-dev \
libyaml-perl \
m4 \
make \
perl \
pkg-config \
ragel \
re2c \
texi2html \
texinfo \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
ENV Z88DK_PATH="/opt/z88dk"
RUN cpanm -l $HOME/perl5 --no-wget local::lib Template::Plugin::YAML \
&& git clone --depth 1 --branch v2.4 --recursive https://github.com/z88dk/z88dk.git ${Z88DK_PATH} \
&& cd ${Z88DK_PATH} \
&& eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)" \
&& chmod 777 build.sh \
&& BUILD_SDCC=1 BUILD_SDCC_HTTP=1 ./build.sh \
&& make install-clean bins-clean
FROM ubuntu:24.04
COPY --from=build /opt/z88dk/ /opt/z88dk/
ENV PATH="$(PATH):/opt/z88dk/bin"
ENV ZCCCFG="/opt/z88dk/lib/config"
USER ubuntu
+24 -9
View File
@@ -1,10 +1,10 @@
# Development tools for the ZX Spectrum v5.0 # Development tools for the ZX Spectrum v8.0
The Dockerfile is the basis of the devcontainer and can be changed to add or remove tools. It will take a long time to build locally, so by default the devcontainer will pull a prebuilt version. Edit `.devcontainer/devcontainer.json` if you would rather build your own. The Dockerfile is the basis of the devcontainer and can be changed to add or remove tools. It will take a long time to build locally, so by default the devcontainer will pull a prebuilt version. Edit `.devcontainer/devcontainer.json` if you would rather build your own.
The devcontainer contains: The devcontainer contains:
- pasmo version 0.5.3 (assembler) - pasmo version 0.5.3 (assembler)
- sjasmplus version 1.21.1 (assembler) - sjasmplus version 1.23.0 (assembler)
- z80asm version 1.8 (assembler) - z80asm version 1.8 (assembler)
- z80dasm version 1.1.6 (disassembler) - z80dasm version 1.1.6 (disassembler)
- zmakebas version 1.2b (creates BASIC programs) - zmakebas version 1.2b (creates BASIC programs)
@@ -29,14 +29,14 @@ The devcontainer contains:
- tzxlist - tzxlist
- zx0 (binary compressor) - zx0 (binary compressor)
- dzx0 (binary decompressor) - dzx0 (binary decompressor)
- ZX BASIC (aka Boriel BASIC) version 1.18.5 - ZX BASIC (aka Boriel BASIC) version 1.18.7
- zxbc (BASIC compiler) - zxbc (BASIC compiler)
- zxbasm (assembler) - zxbasm (assembler)
- zxbpp (preprocessor) - zxbpp (preprocessor)
- various tools including nextcreator.py to build .nex files - various tools including nextcreator.py to build .nex files
- ttttt (converts binaries into .tap blocks) - ttttt (converts binaries into .tap blocks)
- inpaws version 1.0.2 (interactive fiction compiler/extractor for Gilsoft's PAW) - inpaws version 1.0.2 (interactive fiction compiler/extractor for Gilsoft's PAW)
- skoolkit version 9.6 (tools for creating browseable disassemblies of Spectrum games) - skoolkit version 10.0 (tools for creating browseable disassemblies of Spectrum games)
- sna2ctl.py - sna2ctl.py
- sna2skool.py - sna2skool.py
- skool2html.py - skool2html.py
@@ -53,22 +53,35 @@ The devcontainer contains:
- bin2sna.py - bin2sna.py
- snapmod.py - snapmod.py
- sna2img.py - sna2img.py
- pasta80 version 0.96 (PASCAL compiler) - pasta80 version 0.98 (PASCAL compiler)
- hdfmonkey version 0.4 (for manipulating sdcard files for the Spectrum Next) - hdfmonkey version 0.4 (for manipulating sdcard files for the Spectrum Next)
- git (version control) - git (version control)
- make (build control) - make (build control)
- John Elliott's TAPTOOLS version 1.1.3
- specform (add +3DOS header to a file)
- unspecform (removes +3DOS header)
- tapcat (combines files into a .tap file)
- tapls (lists content of a .tap file)
- tapget (extracts one or more files from a .tap file)
- tapsplit (extracts everything from a .tap file in one go)
- tap2dsk (builds a +3 or PCDOS image from a .tap file)
- mkp3fs (builds a +3 or PCDOS image from separate files)
- bin2bas (wraps a machine code program in a 2-line BASIC program that runs it)
- sna2tap (converts a .sna format snapshot to a .tap file)
- sna2dsk (converts a .sna format snapshot to a .dsk file)
- dsk2tap (converts a .dsk image to a .tap file which when run on a +3 recreates the original disk)
Several useful VSCode extentsions will be installed, including a Z80 assembly language server, Z80 and C debugger, Makefile support, BASIC syntax highlighter and more. Several useful VSCode extentsions will be installed, including a Z80 assembly language server, Z80 and C debugger, Makefile support, BASIC syntax highlighter and more.
Thanks to the many authors of these wonderful tools and extensions; to think what we could have made with these in 1985! Thanks to the many authors of these wonderful tools and extensions; to think what we could have made with these in 1985!
## Breaking changes from v4.x ## Breaking changes from v7.x
Boriel BASIC (zxbasic) has been updated. There have been further bug fixes to array bounds which may break old code reliant on previous behaviour. No breaking changes, but this version brings full support for Apple silicon which was not present in previous releases.
## New additions from v4.x ## New additions from v7.0
`sjasmplus` has been updated with new features. Native arm64 build for Apple devices.
## Install ## Install
@@ -134,3 +147,5 @@ skoolkit - copyright Richard Dymond and Philip M Anderson and released under GPL
hdfmonkey - copyright Matt Westcott and released under GPL v3 hdfmonkey - copyright Matt Westcott and released under GPL v3
PASTA/80 - copyright Jörg Pleumann and released under GPL v3 with linking exception PASTA/80 - copyright Jörg Pleumann and released under GPL v3 with linking exception
TAPTOOLS - copyright John Elliott and released under GPL v2