global: Make Makefile better and some small fixes
[h316.git] / systems / build_super3_8k.sh
1 #!/bin/sh
2
3 TARGET_SYS=$SUPER3_8K_SYS
4 TARGET_SLST=$SUPER3_8K_SLST
5
6 CORESIZE=8
7
8 echo "TARGET_SYS --> $TARGET_SYS"
9 echo "TARGET_SLST --> $TARGET_SLST"
10
11 LAST_LOC=$((($CORESIZE*1024)-1))
12 BASE=$(($CORESIZE*1024-010000))
13 RESTART_BASE=$(($BASE+02000))
14
15 SUPER_BASE=$RESTART_BASE
16 LAST_USER_LOC=$(($SUPER_BASE-1))
17
18 CLEANUP2_BASE=$(($BASE+02100))
19 PRNTNZ_BASE=$(($BASE+02200))
20
21 LOADER_BASE=$(($BASE+03000))
22 LOADER_LAST_CLEAR_LOC=$(($LOADER_BASE+077))
23 LOADER_LIMIT=$(($LOADER_BASE+02000))
24 LOADER_START=$(($LOADER_BASE+03000))
25
26 BINAL_BASE=$(($BASE+07000))
27 PAL_AP_BASE=$BINAL_BASE
28 PUNCH_BASE=$BINAL_BASE
29 PUNCH_LAST_LOC=$(($BINAL_BASE+0577))
30
31 LDR8_BASE=013000
32 LDR8_START=016000
33 LDR8_RESTART=016003
34 LDR8_MAP=016002
35
36 LOAD_LDR_APM=true
37 LOAD_CLEANUP2=true
38 LOAD_RESTART=true
39 LOAD_PRNTNZ=true
40 LOAD_PAL_AP=true
41 LOAD_BINAL=
42
43 DO_FILE=super3_8k.do
44
45 octalize(){
46 for n in $*; do
47 eval "$n=\`printf \"0%o\" \$$n\`"
48 eval "printf \"%23s --> %05o\n\" $n \$$n"
49 done
50 }
51
52 FRESH_LOAD="true"
53
54 load(){
55 printf "Load: %20s --> %o\n" $1 $2
56
57 ST=$LDR8_RESTART
58 if [ "$FRESH_LOAD" ]; then
59 ST=$LDR8_START
60 FRESH_LOAD=
61 fi
62
63 cat >>$DO_FILE <<EOF
64 echo *** Loading $1 --> $2 $ST
65 at ptr $1
66 d a $2
67 d p $ST
68 go
69 go
70 EOF
71 }
72
73 boot(){
74 echo "Boot: $1"
75 cat > $DO_FILE <<EOF
76 at ptr $1
77 boot ptr
78 EOF
79 }
80
81 process(){
82 for n in $*; do
83 cmd="if [ \"\$LOAD_$n\" ]; then load \"\$$n\" \$${n}_BASE; fi"
84 # echo "Process command: " $cmd
85 eval $cmd
86 done
87 }
88
89 echo "\nAutomatic address generation:\n--------------"
90 octalize BASE RESTART_BASE CLEANUP2_BASE PRNTNZ_BASE LOADER_BASE \
91 LOADER_START LOADER_LIMIT BINAL_BASE PAL_AP_BASE \
92 LDR8_BASE LDR8_START LDR8_RESTART LDR8_MAP \
93 LAST_USER_LOC LAST_LOC SUPER_BASE PUNCH_BASE PUNCH_LAST_LOC \
94 LOADER_LAST_CLEAR_LOC
95 echo "--------------\n\n"
96
97
98 # Determine if we have to load LDR-APM to somewhere else than
99 # the default location where it comes from the original 8K tape. # This will load LDR-APM whenever something else than 8K memory is
100 # requested.
101
102 if [ $LOADER_BASE = $LDR8_BASE ]; then
103 echo "LDR-APM will be in the right place at once."
104 LOAD_LDR_APM=
105 else
106 echo "LDR-APM will be loaded."
107 LOAD_LDR_APM=true
108 fi
109
110 if [ ! "$MAKE" ]; then
111 echo "Not run from within Makefile!"
112 exit 4
113 fi
114
115 rm -f $DO_FILE
116
117 boot $LDR_APM_8K
118
119 echo Patching loader for high memory load support...
120 cat >> $DO_FILE <<EOF
121 ; enter high loader address for loading above itself
122 d 15000 77777
123 EOF
124
125 process LDR_APM
126
127 process RESTART CLEANUP2 PRNTNZ BINAL PAL_AP
128
129 cat >> $DO_FILE <<EOF
130
131 ; Patching final loader.
132 d $LOADER_LIMIT $LAST_USER_LOC
133
134 ; Print memory map
135 go $LDR8_MAP
136
137 ; Clear memory
138 d 20-$LAST_USER_LOC 0
139 d $LOADER_BASE-$LOADER_LAST_CLEAR_LOC 0
140
141 d a 0
142 d b $LAST_LOC
143 go $PRNTNZ_BASE
144
145 ; Settings for immediate load after sys restore
146 r
147 d p $LOADER_START
148
149 save $TARGET_SYS
150
151 at ptp $TARGET_SLST
152 d a $0
153 go $PUNCH_BASE
154 d a $SUPER_BASE
155 go
156 d a $PUNCH_LAST_LOC
157 go
158 echo Complete.
159 q
160 EOF
161
162 rm -f $TARGET_SLST
163 h316 $DO_FILE
164 rm -f $DO_FILE