#!/bin/sh

# Create a big tape suitable to be read on an empty machine.

# It starts with track 0, basichelp3, and rebuilds Help-3 for a tripple drum machine with buffer. The help3 programs are stored on tape station 6.

# Track 0 is read by the three cell loader. Press space after SUM. Write r< after basichelp3 is read.

# MK 2025-03-04

# d1	100	The system will be loaded to this track and on before
#		moving takes place
# d3	0	d3 = 0 means the the drum will contain the free area,
#		d3 = 1 that it will be on buffer disc.
# d4	0	1024 * d52 + d4 is used as the number of blocks on the
# d52	0	buffer disc. Only significant if d3 = 1.
# d5	39	1024 * d46 + d5 is used as the first free block. This
# d46	0	may be changed by init help.
# d9	0	First track of final help. Should only be changed for
#		debugging purpose.
# d11	38	Parameter track.
# d16	294	First track of core image.
# d17	3	by-value for standard paper tape reader.
# d18	512	by-value for HP-button inhibit.
# d19	960	Track group for core image.
# d21	34	First track of catalog (catalog always in group 960).
# d22	1	No. of 320-track drums. Drum disc has d22 = 30.
# d23	4	No. of catalog tracks.
# d32	1	d32 = 0 designates that a special work area is used.
#		If d32 = 1 the free area is used for working.
# d33	0	First track and number of tracks in the special work
# d34	0	area (in group d19). Only significant if d32 = 0.
# d35	0	Running kind of aux. programs. d35=0 drum/disk
# d36	0	Aux. programs reserved. d36=1 reserved from free
# d41	1	d41 = 1 designates that code for treating buffer media
#		will be included. d41 = 0 otherwise.
# d43	17	Help 3 alarm output unit + typewriter input. Is used
#		for all alarm messages and HP-entry run number.
# d44	17	Standard output unit + typewriter input. Is used for
#		normal output from aux. programs and most of HP-entry
#		message.
# d46	0	See d5.
# d50	960	Image group during loading. May be redefined according
#		to d19 in the Help 3 system used for loading.
# d52	0	See d4.
# d53	400	Block length on the buffer disc.
# d54	1	Tape station to which tape programs will be moved.

# Size of system	Buffer		Start
# Main			13		0
# exit			1		13
# binin			2		14
# binout		5		16
# start			1		21
# clear ...		6		22
# algol			4		28
# run			1		32
# d36=1
# edit			18
# move			8
# check ...		10
# slip			23
# print			19
# ga4			173

# Size of system	No buffer	Start
# Main			11		0
# exit			1		11
# binin			2		12
# binout		5		14
# start			1		19
# algol			4		20
# check ...		9		24
# clear ...		5		33
# 38 parameter track
# 39 catalog, 20 tracks
# d1=21d1
# d36=1
# run			1
# edit			15
# move			3
# slip			23
# print			18
# ga4			171


# Remove last occurence of _s by reversing the file and remove the first _s, and reverse again

flx2a <"Main help (5) 8.08.68.flx" | tac | sed '0,/_s/{//d;}' | tac | sed -e '/_iredefine/{ N; s/_s/d41=1,d22=3,d16=39,d5=65,d54=6/g }' >BUILDbuffertape.asc
flx2a <"inithelp (4) 13.01.69.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"exit (2) 7.06.68.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"binin (1) 22.07.67.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"start (3) 21.09.70.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"clear ... (10) 8.08.67.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"run (2) 10.08.67.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"check ... (12) 1.07.70.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
# The rest of the programs are placed on tape station 6 (d54)
echo "d35=3" >>BUILDbuffertape.asc 
flx2a <"algol (2) 8.08.67.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"binout, ... (2) 9.08.67.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"edit (9) 8.07.70.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"move (5) 15.12.68.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"slip (4) 14.01.69.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
flx2a <"print ... (12) 23.01.69.flx" | tac | sed '0,/_s/{//d;}' | tac >>BUILDbuffertape.asc
echo "_e10" >>BUILDbuffertape.asc
# Build tape with track 0 and basichelp3
cat "basic track 0 20.08.67.flx" ../help3bin/basichelp3.flx > BUILDbuffertape.flx
# Append set of tapes
cat <<EOF >>BUILDbuffertape.asc
set,3,1000,1,0,0,tape1<
set,3,1000,1,1,0,tape1.1<
set,3,1000,1,2,0,tape1.2<
set,3,1000,2,0,0,tape2<
set,3,1000,2,1,0,tape2.1<
set,3,1000,2,2,0,tape2.2<
set,3,1000,3,0,0,tape3<
set,3,1000,3,1,0,tape3.1<
set,3,1000,3,2,0,tape3.2<
set,3,1000,4,0,0,tape4<
set,3,1000,4,1,0,tape4.1<
set,3,1000,4,2,0,tape4.2<
set,3,1000,5,0,0,tape5<
set,3,1000,5,1,0,tape5.1<
set,3,1000,5,2,0,tape5.2<
t<
EOF
# Remove checksums and append
sed 's/#061#...//g' BUILDbuffertape.asc|sed 's/#061.//g'|a2flx >>BUILDbuffertape.flx
#rm -f BUILDbuffertape.asc
