Table of Contents
Items we could demonstrate
"We" don't demonstrate the following:
VOBJ (Verify Object Programs) - by Jack Ghiselli - July 16, 2022
Discussed here -
Operating Instructions Source deck List deck Object deck |
Trojan protection cards Beside function changes in some of the programs the boot loader for all programs has changed. The new boot loader allows one or more 'Trojan' cards to be placed in the front of each deck. All of these 'Trojan' cards are the same. They are read into the machine and then cause the next card to be read and processed. The first card of most deck takes a beating and has to be copied and replaced. With the 'Trojan' card, you can just toss it and replace it with another 'Trojan' card. README file for Big Print Friday, August 28, 2015 Author Ed Thelen Modifications Stan Paddock BigPrint is a demonstration program run on the IBM 1401 The input is a series of cards: The first card is a date card. Whatever is in the first 25 columns of this card is considered the date. January 23, 1987 is as good as 1/23/87 The second card and all following cards are name cards. The first name can be up to 11 characters. If the first name is longer than 11 characters, it will be truncated to 11 characters. The second name can be up to 10 characters. The second name starts after the space between the first name and the start of the second name. The next 10 characters will be displayed as the second name. There can be three names like Juan el Capitan The program will print Juan on the first line and El Capitan on the second line. Except that there must be a space between names, the rest of the spacing does not matter. All extra spaces will be ignored. There is no limit to the number of name cards that can be used. The last card is the End Of File card. If the three characters EOF are found in Columns 1-5 the program will terminate with a halt. If you want to run it again with a new set of cards, set sense switch G on, clear the card reader, place the second date, name and EOF cards in the reader and press start. If you don't want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. A new feature has been added to BigPrint rev 16.2. It is called BANNER. If the first 6 characters of the date card are BANNER, BigPrint shifts into BANNER mode. Each following card will print a line on the printer. CC 1:If it is a D, the Double print will be used and the characters from column 3-13 will be printed. (11 characters) :If it is a S, the Single print will be used and the characters from column 3-24 will be printed.(22 characters) CC 2:If CC 2 is a D, the line will be double printed as in Dark. :If CC 2 is a L, the line will be single printed as in light. The last card is the End Of File card. If the three characters EOF are found in Columns 1-5 the program will terminate with a halt. End of Document README file for Lincoln Friday, March 06, 2015 Author Ron Mak ****************************************************************** * LINCOLN'S BIRTHDAY PROGRAM * BY RONALD MAK * * ORIGINAL VERSION: FEBRUARY 1969 * RESURRECTED: FEBRUARY 2005 * CONDENSED: NOVEMBER 2010 ****************************************************************** This program was written by a very young Ronald Mak. It prints out the head of lincoln using the words from the Gettysberg address. The program will terminate with a halt. If you want to run it again with a new set of cards, set sense switch G on, clear the card reader, place the second date, name and EOF cards in the reader and press start. If you don?t want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. End of Document README file for Mandelbrot Saturday, March 07, 2015 Author Ken Shirriff Benoit B. Mandelbrot was a Polish-born, French and American mathematician, noted for developing the field of fractal geometry , which included coining the word "fractal". He later discovered the Mandelbrot set of intricate, never-ending fractal shapes, named in his honor. This program generated the most famous Mandelbrot figure on a machine developed 20 years before Fractals were identified. The IBM 1401 does not have the ability to work with floating point numbers so all of the math has to be done with integer math. The program is CPU time intensive but fun to watch if you know what is going on in the program. The program will terminate with a halt. If you want to run it again, set sense switch G on, and press start. If you don?t want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. End of Document README file for Powers of two Saturday, March 07, 2015 Author Stan Paddock Powers Of 2 is a demonstration program run on the IBM 1401 computer. The IBM 1401 stores one digit per memory location. The IBM 1401 has 16,000 locations of memory. With this amount of memory, the IBM 1401 can add together two 8,000 digit numbers.! Modern computers perform integer arithmetic using binary values. For the IBM PC, the largest value is 64 bits. The largest value that can be expressed in 64 bits is 18,446,744,073,709,551,616. That is 20 digits long. The Powers Of Two program demonstrates the ability of the IBM 1401 to handle large numbers by starting with a single digit of 2 and then double it until it fills a single print line on the IBM 1403 printer. In addition of that, the program prints out how you pronounce the resultant number. The program will terminate with a halt. If you want to run it again, set sense switch G on, and press start. If you don?t want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. End of Document README file for prime_demo Friday, March 06, 2015 Author Ken Shirriff prime_demo is a demonstration program run on the IBM 1401 It uses the sieve of Eratosthenes an ancient algorithm for finding all prime numbers up to any given limit. For this program, the given limit is 25,000 due to the memory limitation of the computer. The program will terminate with a halt. If you want to run it again with a new set of cards, set sense switch G on, clear the card reader, place the second date, name and EOF cards in the reader and press start. If you don?t want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. End of Document README file for Tape Demo Saturday, June 20, 2015 Author Stan Paddock Tape Demo is a demonstration program run on the IBM 1401 computer. The IBM 1401 uses tapes to store large amounts of data. When processing that data, the each active tape drive would randomly be selected and read or write data. This program makes the tape drives appear to be working very hard. The program supports the use of one, two, three or four tape drives. When a tape drive is selected, 1 to 9 records are written to the drive. After a half a reel of tape has been written to the tape drives, the tape drives go into high-speed rewind. (*) The program uses the IBM 1401 sense switches to control the actions of the program. SENSE SWITCH A = (NOT USED) SENSE SWITCH B = TAPE DRIVE 1 ONLY SENSE SWITCH C = TAPE DRIVES 1 & 2 SENSE SWITCH BC = TAPE DRIVES 1 & 2 & 3 SENSE SWITCH D = TAPE DRIVES 1 & 2 & 3 & 4 SENSE SWITCH E = LOOP TEST PROGRAM SENSE SWITCH F = TERMINATE PROGRAM SENSE SWITCH G = RERUN PROGRAM FROM START The program will terminate with a halt. If you want to run it again, set sense switch G on, and press start. (*) If sense switch G is on while the program is running, it will not do the final rewind. The next time the program runs, all active tape drives will go into high speed rewind. If you don?t want to run it again, leave sense switch G off and when you press start, it will look for and read in the next program. End of Document |
--------------------------------------------------------------------
BigPrint15.4 , Aug 2015
Lincoln2.1 .s .s.revised .lst .cd .ReadMe
Mandelbrot2.1 .s .lst .cd .out [ photo, from Sam Mazur < sam . mazur [at] ogilvy . com > ]
PowersOfTwo4.3 .s .lst .cd .out .ReadMe
prime_demo3 .s .lst .cd .ReadMe
TapeDemo7.2 .s .lst .cd .out .ReadMe
Radio Music - 'IBM 1401 memory music'
- Hold an AM radio (tuned away from a station) near/on a 1401 running
this (or many other programs we may/maynot have) and listen to the radio or
click here to see and hear compressed file. .wmv file,
YouTube version.
(The compression hurt the video, but not the sound. The sound is NOT concert hall quality!!)
Table of Contents:
Re: Reverse assembling the 1401 AM radio music program - Michael Albaugh
Here's the PDF of a scan of a listing - Van Snyder
J?hann's comments, above, seem good to me:
--------------------------------------------------------------------
KS-Pi-DemoPrint (Prints Pretty Pi)
.s
.lst
.cd
.out
To make a nice 083 Sorter Demo Deck by Ken Ross - Feb 2020
Tape Demo, from Germany, from Van Snyder
Van suggested I include this
zip file for more files.
I think the encoding is original SimH, so the group mark is apostrophe.
Maybe that will need changing before punching a deck to run it.
Assembled and Disassembled code from
"Risky line printer music on a vintage IBM mainframe" in Ken Shirriff's blog (Sept 2019)
-
Ron 2.1
Usually when the program gets stuck on a single tape drive it is encountering errors and retrying the
write/read after advancing the tape very slightly Attempting to stop the program by turning off sense
switch G usually makes that obvious because the program doesn't check the switch in the error loop
and will keep going until it finally has a success. Not sure why it started acting up, possibly changing
temperatures. Will check on it next week.
Discussion - by Jack Ghiselli - Oct 24, 2019, 3:27 PM
Jack Ghiselli, Consultant
Solution - by Jack Ghiselli - Nov 2, 2019
Jack Ghiselli, Consultant
Radio Music - 'IBM 1401 memory music' finally came to our 1401 -
In December 2008, Robert Garner found a 1401 card deck/program on e-bay that
made musical radio noise. (.pdf of object deck)
- Re: Reverse assembling the 1401 AM radio music program - Michael Albaugh
- Here's the PDF of a scan of a listing - Van Snyder
-
-
-
-
-
-
-
> From: Michael Albaugh
From: Van Snyder < van.snyder@sbcglobal.net >
Date: Tue, Jun 25, 2019 11:10 am
Here's the PDF of a scan of a listing I got from somebody
(maybe Rob) in 2010.
I disassembled and reverse engineered the code, and made three versions.
RadioMusic.s is straight disassembly, with some reverse engineering
to add comments and create "meaningful" labels.
RadioMusic-1.s has the code "straightened out."
RadioMusic-2.s has the code "straightened out"
and uses indexing to simplify it.
I didn't transcribe the data from the PDF.
Van
I appealed for help
"Unfortunately I don't know how to give it a good category
One can say "1403 Chain Printer Music"
But the best I can come up with for music generated by
Radio Frequency Interference
from a 1401 is
"1401 RFI Music"
which is an even a less lovely name than "Chain Printer Music"
The whole field of "computer music" seems to beg for more descriptive names:
- computer composed tunes
- audible music caused by actions of a computer by
- printers of various kinds
- a loud speaker connected to various parts of a computer circuit
- Radio Frequency Interference
- and probably many categories I have forgotten"
J?hann Gunnarsson responded with:
JOB create a sort deck with random numbers
CTL 6611
* ******************************************************************
* Create sort deck to demo the 083 card sorter
* by Ken Ross
*
* Dated November 15, 2015
*
* This uses the "Middle Square" method to generate psuedo random
* numbers. The method is pretty poor but will suffice for this
* humble purpose.
*
******************************************************************
ORG 333
*
* Set up constants
*
TITLE DCW @Ken Ross - Sort Deck Generator@
SEED DCW @34817@
MULT DCW @000000000000@
COUNT DCW @000@
TEXT DCW @SORT DECK@
*
* Clear storage and set word marks
*
START CS 332
CS
SW 1,201
SW 101
*
* Read a single card and get output count in cols 1-3 (zero filled)
* and set up text in print area and punch area
*
BEGIN MCW TITLE,250 MOVE TO PRINT AREA
W PRINT IT
MCW TEXT,109
R Read the single card
MCW 003,COUNT Save the value which is # cards to punch
*
LOOP B COMPUT
MCW SEED,270
W
MCW SEED,180 MOVE VALUE AND PUNCH IT
P
S @1@,COUNT
BWZ LOOP,COUNT,B LOOP SO LONG AS + ZONE
DONE H DONE
*
*
* Compute a new number
*
COMPUT SBR RETURN+3 SAVE RETURN ADDRESS
MCW SEED,MULT-7 STORE THE PRIOR NUMBER
M SEED,MULT SQUARE IT
SW MULT-7 SET WORKMARK TO EXTRACT MIDDLE DIGITS
MCW MULT-3,SEED EXTRACT
CW MULT-7 CLEAR WORDMARK
RETURN B 0000
END START
Here's my revision of code I got from HzG as an object deck, and then
reverse engineered it. In the original version, it could also jiggle
the 2311 heads, but since CHM doesn't have a 2311, I removed that code
in the "nodisk" version.
CLEAR STORAGE 1 ,008015,022026,030037,044,049,053053N000000N00001026 1
CLEAR STORAGE 2 L068116,105106,110117B101/I9I#071029C029056B026/B001/0991,001/001117I0? 2
BOOTSTRAP ,008015,022029,036040,047054,061068,072/061039 ,0010011040 3
0 HZG DEMO SGSVU PAGE 1
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
101 JOB HZG DEMO
102 CTL 6611
103 *
104 * CONTROL CARD LAYOUT
105 *
106 I3LEN EQU 4 1-4 TAPE 3 RECORD LENGTH 0004
107 I3WMAX EQU 8 6-8 TAPE 3 RECORDS UNTIL REWIND 0008
108 I3PMAX EQU 11 10-11 TAPE 3 PROCESSING DELAY 0011
109 I3RDLY EQU 16 13-16 TAPE 3 REWIND DELAY 0016
110 I4LEN EQU 21 18-21 TAPE 4 RECORD LENGTH 0021
111 I4WMAX EQU 25 23-25 TAPE 4 RECORDS UNTIL REWIND 0025
112 I4PMAX EQU 28 27-28 TAPE 4 PROCESSING DELAY 0028
113 I4RDLY EQU 33 30-33 TAPE 4 REWIND DELAY 0033
114 I5LEN EQU 38 35-38 TAPE 5 RECORD LENGTH 0038
115 I5WMAX EQU 42 40-42 TAPE 5 RECORDS UNTIL REWIND 0042
116 I5PMAX EQU 45 44-45 TAPE 5 PROCESSING DELAY 0045
117 I5RDLY EQU 50 47-50 TAPE 5 REWIND DELAY 0050
118 I6LEN EQU 55 52-55 TAPE 6 RECORD LENGTH 0055
119 I6WMAX EQU 59 57-59 TAPE 6 RECORDS UNTIL REWIND 0059
120 I6PMAX EQU 62 61-62 TAPE 6 PROCESSING DELAY 0062
121 I6RDLY EQU 67 64-67 TAPE 6 REWIND DELAY 0067
122 IRDLY EQU 72 69-72 FULL REEL TAPE REWIND DELAY 0072
123 *
124 ORG 81 RECORD MARK AT 81 WILL BE 0081
125 DC @'@ SENTINEL AFTER LAST LINE OF IMAGE 1 0081 4
126 KP1 DCW &1 1 0082 4
127 KB DCW #1 CHANGES BSS C TO BRANCH 1 0083 4
128 KC DCW @C@ CHANGES BRANCH TO BSS C 1 0084 4
129 DC @..@ 2 0086 4
130 X1 DCW 081 3 0089 4
131 DC @..@ 2 0091 4
132 X2 DCW 010 3 0094 5
133 DC @..@ 2 0096 5
134 X3 DCW 000 3 0099 5
135 GMWM DCW @"@ 1 0100 GMARK 5
136 ORG 336 0336
137 *
138 * LOAD PARAMETERS
139 *
140 START R 1 0336 1 6
141 MCW I3RDLY,T3RDLY TAPE 3 REWIND DELAY 7 0337 M 016 853 6
142 MCW TAPE 3 PROCESSING DELAY 1 0344 M 6
143 MCW TAPE 3 RECORDS UNTIL REWIND 1 0345 M 6
144 MCW I4RDLY,T4RDLY TAPE 4 REWIND DELAY 7 0346 M 033 881 6
145 MCW TAPE 4 PROCESSING DELAY 1 0353 M 6
146 MCW TAPE 4 RECORDS UNTIL REWIND 1 0354 M 6
147 MCW I5RDLY,T5RDLY TAPE 5 REWIND DELAY 7 0355 M 050 909 7
1 HZG DEMO SGSVU PAGE 2
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
148 MCW TAPE 5 PROCESSING DELAY 1 0362 M 7
149 MCW TAPE 5 RECORDS UNTIL REWIND 1 0363 M 7
150 MCW I6RDLY,T6RDLY TAPE 6 REWIND DELAY 7 0364 M 067 937 7
151 MCW TAPE 6 PROCESSING DELAY 1 0371 M 7
152 MCW TAPE 6 RECORDS UNTIL REWIND 1 0372 M 7
153 MCW IRDLY,RDELAY REWIND FULL TAPE DELAY COUNT 7 0373 M 072 958 7
154 *
155 * CALCULATE TAPE WRITE ADDRESSES FROM RECORD LENGTHS
156 *
157 B GETOFF CALULATE OFFSET = - I3LEN 4 0380 B 731 8
158 DSA I3LEN TAPE 3 RECORD LENGTH 3 0386 004 8
159 DSA TAPE3W&6 TAPE 3 WRITE INSTRUCTION 3 0389 860 8
160 B GETOFF CALULATE OFFSET = - I4LEN 4 0390 B 731 8
161 DSA I4LEN TAPE 4 RECORD LENGTH 3 0396 021 8
162 DSA TAPE4W&6 TAPE 4 WRITE INSTRUCTION 3 0399 888 8
163 B GETOFF CALULATE OFFSET = - I5LEN 4 0400 B 731 8
164 DSA I5LEN TAPE 5 RECORD LENGTH 3 0406 038 9
165 DSA TAPE5W&6 TAPE 5 WRITE INSTRUCTION 3 0409 916 9
166 B GETOFF CALULATE OFFSET = - I6LEN 4 0410 B 731 9
167 DSA I6LEN TAPE 6 RECORD LENGTH 3 0416 055 9
168 DSA TAPE6W&6 TAPE 6 WRITE INSTRUCTION 3 0419 944 9
169 *
170 SW 1 4 0420 , 001 9
171 B RDIMAG READ AND STORE THE IMAGE 4 0424 B 473 9
172 *
173 * EVENT LOOP -- CHECK SWITCHES TO DETERMINE ACTIONS
174 *
175 SWLOOP BSS PRINT,C D-MOD CHANGED BY PRINT TO BLANK 5 0428 B 519 C 10
176 BSS TAPEX,D EXERCISE TAPE 3 5 0433 B 577 D 10
177 NOP NOP T3PAKT 4 0438 N 845 10
178 BSS TAPEX,E EXERCISE TAPE 4 5 0442 B 577 E 10
179 NOP T4PAKT 4 0447 N 873 10
180 BSS TAPEX,F EXERCISE TAPE 5 5 0451 B 577 F 10
181 NOP T5PAKT 4 0456 N 901 10
182 BSS TAPEX,G EXERCISE TAPE 6 5 0460 B 577 G 11
183 NOP T6PAKT 4 0465 N 929 11
184 B SWLOOP 4 0469 B 428 11
1 HZG DEMO -- PRINT THE PICTURE SGSVU PAGE 3
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
185 JOB HZG DEMO -- PRINT THE PICTURE
186 *
187 * READ THE IMAGE AND STORE IT. THE FIRST CHARACTER AFTER THE LAST
188 * ONE IN THE STORAGE AREA WILL BE A RECORD MARK.
189 *
190 RDIMAG SBR RDEXIT&3 4 0473 H 518 12
191 RLOOP R 1 0477 1 12
192 LCA 81,IMAGE&X1 STORE ONE LINE OF THE IMAGE 7 0478 L 081 9W9 12
193 B GOTEM,A DONE? 5 0485 B 501 A 12
194 SBR X1,80&X1 ADD 80 TO X1 7 0490 H 089 0Y0 12
195 B RLOOP GET ANOTHER ONE 4 0497 B 477 12
196 *
197 GOTEM SBR X1,80 RESET X1 TO 80 7 0501 H 089 080 12
198 CS 332 4 0508 / 332 13
199 CS 1 0512 / 13
200 CC 1 2 0513 F 1 13
201 RDEXIT H 0 WAIT FOR THE SWITCHES TO BE SET 4 0515 . 000 13
202 *
203 * PRINT THE PICTURE
204 *
205 PRINT SBR PRINTX&3 4 0519 H 576 13
206 MCW KB,SWLOOP&4 MAKE ENTRY TEST UNCONDITIONAL 7 0523 M 083 432 13
207 LCA IMAGE&X1,306 7 0530 L 9W9 306 13
208 W 1 0537 2 14
209 B PRINTA,IMAGE&1&X1,' LAST IMAGE? 8 0538 B 557 9X0 ' 14
210 SBR X1,80&X1 ADD 80 TO X1 7 0546 H 089 0Y0 14
211 B PRINTX 4 0553 B 573 14
212 PRINTA SBR X1,80 RESET X1 TO 80 7 0557 H 089 080 14
213 CC 1 2 0564 F 1 14
214 MCW KC,SWLOOP&4 CHANGE ENTRY TEST TO BSS C 7 0566 M 084 432 14
215 PRINTX B 0 4 0573 B 000 15
1 HZG DEMO -- TAPE EXERCISER SGSVU PAGE 4
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
216 JOB HZG DEMO -- TAPE EXERCISER
217 *
218 * TAPE EXERCISER PACKET LAYOUT
219 *
220 TWMAX EQU 2&X3 NUMBER OF RECORDS INITIAL VALUE 0002 X
221 TPMAX EQU 5&X3 PROCESSING DELAY INITIAL VALUE 0005 X
222 TRDLY EQU 10&X3 REWIND DELAY INITIAL VALUE 0010 X
223 TWRIT EQU 18&X3 TAPE WRITE INSTRUCTION LAST CHAR 0018 X
224 TPCNT EQU 20&X3 CURRENT PROCESSING DELAY COUNT 0020 X
225 TWCNT EQU 23&X3 CURRENT RECORDS UNTIL REWIND 0023 X
226 TRCNT EQU 27&X3 CURRENT REWIND DELAY COUNT 0027 X
227 *
228 * TAPE EXERCISER. FOLLOW B TAPEX WITH NOP PACKET
229 *
230 TAPEX SBR TAPEXX&3 4 0577 H 707 16
231 SBR X3 4 0581 H 099 16
232 MCW 4&X3,X3 ADDRESS OF PACKET TO X3 7 0585 M 0?4 099 16
233 BWZ TAPEXA,TRCNT,K ENOUGH REWIND DELAY? 8 0592 V 611 0B7 K 16
234 S KP1,TRCNT 7 0600 S 082 0B7 16
235 B TAPEXX 4 0607 B 704 16
236 TAPEXA C KONE,TPCNT ENOUGH PROCESSING DELAY? 7 0611 C 968 0B0 17
237 BE TAPEXB 5 0618 B 641 S 17
238 S KP1,TPCNT DECR PROCESSING DELAY COUNT 7 0623 S 082 0B0 17
239 MZ KZERO,TPCNT 7 0630 Y 965 0B0 17
240 B TAPEXX 4 0637 B 704 17
241 TAPEXB LCA TRDLY,TRCNT RWD DELAY DEPENDING ON REC CNT 7 0641 L 0A0 0B7 17
242 BWZ TAPEXE,TWCNT,K TIME TO REWIND? 8 0648 V 708 0B3 K 18
243 LCA RDELAY,TRCNT DELAY FOR FULL REEL REWIND 7 0656 L 958 0B7 18
244 BEF TAPEXE 5 0663 B 708 K 18
245 LCA KM1,TRCNT SET FOR NO REWIND DELAY 7 0668 L 962 0B7 18
246 MCW TWRIT,*&8 COPY TAPE WRITE INSTRUCTION 7 0675 M 0A8 689 18
247 WT 3,GMWM 8 0682 M %U3 100 W 19
248 S KP1,TWCNT DECREMENT WRITE COUNTER 7 0690 S 082 0B3 19
249 MCW TPMAX,TPCNT STORE PROCESSING DELAY 7 0697 M 0?5 0B0 19
250 TAPEXX B 0 4 0704 B 000 19
251 TAPEXE MN TWRIT-4,*&4 SET DRIVE NUMBER IN REWIND 7 0708 D 0A4 718 19
252 RWD 3 5 0715 U %U3 R 19
253 MCW TWMAX,TWCNT RE-INITIALIZE WRITE COUNT 7 0720 M 0?2 0B3 20
254 B TAPEXX 4 0727 B 704 20
255 *
256 * OFFSET THE TAPE WRITE ADDRESS, GIVEN THE RECORD LENGTH
257 * DO THIS BY MA-ING THE 16000-COMPLEMENT OF THE RECORD
258 * LENGTH TO THE ADDRESS IN THE TAPE WRITE INSTRUCTION
259 *
260 GETOFF SBR X3 4 0731 H 099 20
261 SBR GETXX&3,6&X3 7 0735 H 825 0?6 20
262 LCA P16K,ROFF START WITH 16001 7 0742 L 842 834 20
263 MCW 2&X3,*&4 ADDRESS OF RECORD LENGTH 7 0749 M 0?2 759 20
264 S 0,ROFF DECREASE BY RECORD LENGTH 7 0756 S 000 834 21
265 MZ KZERO,ROFF CLEAR ZONE 7 0763 Y 965 834 21
1 HZG DEMO -- TAPE EXERCISER SGSVU PAGE 5
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
266 GETL S KP1,RTHOU 7 0770 S 082 831 21
267 BWZ GETX,RTHOU,K DONE? 8 0777 V 796 831 K 21
268 MA K1000,ROFF ADD 1000 TO OFFSET 7 0785 # 837 834 21
269 B GETL 4 0792 B 770 22
270 GETX MCW 5&X3,X3 ADDRESS OF TAPE WRITE 7 0796 M 0?5 099 22
271 CS 0 GET LAST ADDRESS TO B REG 4 0803 / 000 22
272 LCA GMWM GMWM TO TOP OF MEMORY 4 0807 L 100 22
273 SBR 0&X3 LAST ADDRESS IN MEMORY - 1 4 0811 H 0?0 22
274 MA ROFF,0&X3 SUBTRACT RECORD LENGTH 7 0815 # 834 0?0 22
275 GETXX B 0 4 0822 B 000 22
276 *
277 RLEN DCW 0000 RECORD LENGTH 4 0829 23
278 RTHOU DCW 00 THOUSANDS PART OF OFFSET 2 0831 23
279 ROFF DC 000 OFFSET TO TAPE ADDRESS = - RLEN 3 0834 23
280 K1000 DSA 1000 ADDRESS CONSTANT 1000 3 0837 '00 23
281 P16K DCW 16001 5 0842 23
282 *
283 * TAPE EXERCISER CONTROL PACKETS
284 *
285 T3PAKT DCW 000 NUMBER OF RECORDS INITIAL VALUE 3 0845 23
286 DC #1 FILLER FROM CONTROL CARD 1 0846 23
287 DCW 00 PROCESSING DELAY INITIAL VALUE 2 0848 23
288 DC #1 FILLER FROM CONTROL CARD 1 0849 23
289 T3RDLY DCW 0000 REWIND DELAY INITIAL VALUE 4 0853 23
290 TAPE3W WT 3,0 TAPE WRITE INSTRUCTION 8 0854 M %U3 000 W 24
291 DCW 00 CURRENT PROCESSING DELAY COUNT 2 0863 24
292 DCW 000 CURRENT RECORDS UNTIL REWIND 3 0866 24
293 DCW -0001 CURRENT REWIND DELAY COUNT 4 0870 24
294 *
295 T4PAKT DCW 000 NUMBER OF RECORDS INITIAL VALUE 3 0873 24
296 DC #1 FILLER FROM CONTROL CARD 1 0874 24
297 DCW 00 PROCESSING DELAY INITIAL VALUE 2 0876 24
298 DC #1 FILLER FROM CONTROL CARD 1 0877 24
299 T4RDLY DCW 0000 REWIND DELAY INITIAL VALUE 4 0881 24
300 TAPE4W WT 4,0 TAPE WRITE INSTRUCTION 8 0882 M %U4 000 W 25
301 DCW 00 CURRENT PROCESSING DELAY COUNT 2 0891 25
302 DCW 000 CURRENT RECORDS UNTIL REWIND 3 0894 25
303 DCW -0001 CURRENT REWIND DELAY COUNT 4 0898 25
304 *
305 T5PAKT DCW 000 NUMBER OF RECORDS INITIAL VALUE 3 0901 25
306 DC #1 FILLER FROM CONTROL CARD 1 0902 25
307 DCW 00 PROCESSING DELAY INITIAL VALUE 2 0904 25
308 DC #1 FILLER FROM CONTROL CARD 1 0905 25
309 T5RDLY DCW 0000 REWIND DELAY INITIAL VALUE 4 0909 25
310 TAPE5W WT 5,0 TAPE WRITE INSTRUCTION 8 0910 M %U5 000 W 26
311 DCW 00 CURRENT PROCESSING DELAY COUNT 2 0919 26
312 DCW 000 CURRENT RECORDS UNTIL REWIND 3 0922 26
313 DCW -0001 CURRENT REWIND DELAY COUNT 4 0926 26
314 *
315 T6PAKT DCW 000 NUMBER OF RECORDS INITIAL VALUE 3 0929 26
1 HZG DEMO -- TAPE EXERCISER SGSVU PAGE 6
0 SEQ PG LIN LABEL OP OPERANDS SFX CT LOCN INSTRUCTION TYPE CARD
316 DC #1 FILLER FROM CONTROL CARD 1 0930 26
317 DCW 00 PROCESSING DELAY INITIAL VALUE 2 0932 26
318 DC #1 FILLER FROM CONTROL CARD 1 0933 26
319 T6RDLY DCW 0000 REWIND DELAY INITIAL VALUE 4 0937 26
320 TAPE6W WT 6,0 TAPE WRITE INSTRUCTION 8 0938 M %U6 000 W 27
321 DCW 00 CURRENT PROCESSING DELAY COUNT 2 0947 27
322 DCW 000 CURRENT RECORDS UNTIL REWIND 3 0950 27
323 DCW -0001 CURRENT REWIND DELAY COUNT 4 0954 27
324 *
325 RDELAY DCW 0000 DELAY COUNTER FOR EOT REWINDS 4 0958 27
326 KM1 DCW -0001 CONSTANT -1 4 0962 27
327 *
328 KZERO DCW 000 CONSTANT ZERO 3 0965 27
329 KONE DCW 001 3 0968 28
330 IMAGE DS 1 STORAGE FOR IMAGE STARTS HERE 0969
331 END START / 336 080
1 HZG DEMO -- TAPE EXERCISER SGSVU PAGE 7
0SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS SYMBOL ADDRESS
GETL 770 GETOFF 731 GETX 796 GETXX 822 GMWM 100 GOTEM 501 I3LEN 4
I3PMAX 11 I3RDLY 16 I3WMAX 8 I4LEN 21 I4PMAX 28 I4RDLY 33 I4WMAX 25
I5LEN 38 I5PMAX 45 I5RDLY 50 I5WMAX 42 I6LEN 55 I6PMAX 62 I6RDLY 67
I6WMAX 59 IMAGE 969 IRDLY 72 K1000 837 KB 83 KC 84 KM1 962
KONE 968 KP1 82 KZERO 965 NOP 438 P16K 842 PRINT 519 PRINTA 557
PRINTX 573 RDELAY 958 RDEXIT 515 RDIMAG 473 RLEN 829 RLOOP 477 ROFF 834
RTHOU 831 START 336 SWLOOP 428 T3PAKT 845 T3RDLY 853 T4PAKT 873 T4RDLY 881
T5PAKT 901 T5RDLY 909 T6PAKT 929 T6RDLY 937 TAPE3W 854 TAPE4W 882 TAPE5W 910
TAPE6W 938 TAPEX 577 TAPEXA 611 TAPEXB 641 TAPEXE 708 TAPEXX 704 TPCNT 20+X3
TPMAX 5+X3 TRCNT 27+X3 TRDLY 10+X3 TWCNT 23+X3 TWMAX 2+X3 TWRIT 18+X3 X1 89
X2 94 X3 99
,008015,022026,030037,044,049,053053N000000N00001026 0001SGSVU
L068116,105106,110117B101/I9I#071029C029056B026/B001/0991,001/001117I0?0002SGSVU
,008015,022029,036040,047054,061068,072/061039 ,00100110400003SGSVU
'A C..081.. L011091)081081,082083,08408710400004SGSVU
010..000" L009100,097100,040040,04004010400005SGSVU
1M016853MMM033881MM L019354,337344,345346,35335410400006SGSVU
M050909MMM067937MMM072958 L025379,362363,364371,37237310400007SGSVU
B731004860B731021888B731 L024403,384387,390394,39740010400008SGSVU
038916B731055944,001B473 L024427,407410,414417,42042410400009SGSVU
B519CB577DN845B577EN873B577FN901 L032459,433438,442447,45145610400010SGSVU
B577GN929B428 L013472,465469,040040,04004010400011SGSVU
H5181L0819W9B501AH0890Y0B477H089080 L035507,477478,485490,49750110400012SGSVU
/332/F1.000H576M083432L9W9306 L029536,512513,515519,52353010400013SGSVU
2B5579X0'H0890Y0B573H089080F1M084432 L036572,538546,553557,56456610400014SGSVU
B000 L004576,040040,040040,04004010400015SGSVU
H707H099M0?4099V6110B7KS0820B7B704 L034610,581585,592600,60704010400016SGSVU
C9680B0B641SS0820B0Y9650B0B704L0A00B7 L037647,618623,630637,64104010400017SGSVU
V7080B3KL9580B7B708KL9620B7M0A8689 L034681,656663,668675,04004010400018SGSVU
M%U3100WS0820B3M0?50B0B000D0A4718U%U3R L038719,690697,704708,71504010400019SGSVU
M0?20B3B704H099H8250?6L842834M0?2759 L036755,727731,735742,74904010400020SGSVU
S000834Y965834S082831V796831K#837834 L036791,763770,777785,04004010400021SGSVU
B770M0?5099/000L100H0?0#8340?0B000 L034825,796803,807811,81582210400022SGSVU
000000000'0016001000 00 0000 L028853,830835,838843,84785010400023SGSVU
M%U3000W00000000J000 00 0000 L028881,862864,867871,87587810400024SGSVU
M%U4000W00000000J000 00 0000 L028909,890892,895899,90390610400025SGSVU
M%U5000W00000000J000 00 0000 L028937,918920,923927,93193410400026SGSVU
M%U6000W00000000J0000000J000 L028965,946948,951955,95996310400027SGSVU
001 L003968,040040,040040,04004010400028SGSVU
/336080 0029SGSVU
....
Please note:
when saving Ken's files into this website, I got a warning to save as Unicode.
I did, but possibly some characters do not show correctly :-(
,008015,022033L067135,1050291001/099H104C104135B101/,0011/001199199 0001MUSIC
,109116,121125,126133/101099 0002MUSIC
,008015,022029,036040,047054,061068,072/061039 ,00100110400003MUSIC
0000000000000,001/000H099L/49089 L032118,092097,100104,10811210400004MUSIC
L/490941C003/53B334SM0996J5B165DL/54354L039157,126127,134139,14615110400005MUSIC
M0756J1A/56094M0660?0H0991L0660?0H099 L037194,165172,179183,18419110400006MUSIC
A/57089C089/59B126U.100 L023217,202209,214040,04004010400007MUSIC
M585099/332/,0052011N372M002005 L031364,341345,346353,35435810400008MUSIC
M/60002B564001XB353001 B503001RL/49089 L038402,372380,388396,04004010400009MUSIC
C0036/1B438SA/56089C089094B403U.100 L035437,410415,422429,43404010400010MUSIC
L6/80?7L/49089A005089A005089A005089 L035472,445452,459466,04004010400011MUSIC
A005089L8?90A1A/62099B564AB353,002 L034506,480487,494499,50304010400012MUSIC
L/49089A002089A002089A002089A002089?002L039545,514521,528535,54204010400013MUSIC
L?/60?4A/63099B494L5890?4,0?5L/64/99 L036581,553560,564571,57504010400014MUSIC
B/99B590B599B.582B334CB582N L027608,586590,595599,60460810400015MUSIC
1 L0003322 L0003323 L0003324 L033641,612619,622629,63263910400016MUSIC
L0003325 L0003326 L0003327 L000332 L037678,649652,659662,66967210400017MUSIC
8 L0003329 L000332010L000332011 L033711,682689,692699,70270910400018MUSIC
L000332012L000332013L000332014L000332 L037748,719722,729732,73974210400019MUSIC
015L000332016L000332017L000332018 L033781,752759,762769,77277910400020MUSIC
L000332019L000332020L000332NB846 L032813,789792,799802,80981010400021MUSIC
B862B878B894B910B926B942B958 L028841,818822,826830,83483810400022MUSIC
B974H099B854H?07B994H099B870 L028869,846850,854858,86286610400023MUSIC
H?07B993H099B886H?07B992H099 L028897,874878,882886,89089410400024MUSIC
B902H?07B991H099B918H?07B990 L028925,902906,910914,91892210400025MUSIC
H099B934H?07B989H099B950H?07 L028953,930934,938942,94695010400026MUSIC
B988H099B966H?07B987H099B982 L028981,958962,966970,97497810400027MUSIC
H?07222222 L010991,986987,988989,99099110400028MUSIC
222B?04GB?08B000FJ L018?09,993994,995?00,?04?0810400029MUSIC
FJB0?0NB?53B?68B?83B?98 L023?32,?12?16,?17?21,?25?2910400030MUSIC
B?98B/13B/13B/13B/13H099?/67/71 L031?63,?37?41,?45?49,?53?5710400031MUSIC
B/24H099?/74/71B/24H099?/77/71B/24 L034?97,?68?72,?79?83,?87?9410400032MUSIC
H099?/81/71B/24H099?/85/71S/86/71 L033/30,/02/09,/13/17,/2404010400033MUSIC
C/50/71B/24UB0?0000AENDB10 L026/56,/38/43,/47/51,/54/5510400034MUSIC
121 114N25? L011/67,/58/60,/61/63,/64/6510400035MUSIC
50?75?100?200?A L019/86,/72/75,/78/82,/8604010400036MUSIC
/100080 0037MUSIC
U I K * T 1 C3 130
1 M 9 ? L 2 C3 130
1 CS3 138
16#UZKP*E&38 2 CS3 138
$ T D X . 1 D3 146
1 K 3 P 0 2 D3 146
K U 3 C M 1 DS3 155
1? * K / 1 B 2 DS3 155
M P * A D I & 1 E3 164
1 / U X ? J 2 E3 164
F $ O J M , 1 F3 174
1 / 6 . F A 2 F3 174
A V S F X . 1 FS3 185
1 ? M 5 R O 0 2 FS3 185
H Q Y X 7 E 1 G3 196
1 ? - ? Z 9 I 2 G3 196
O F J $ . # , $ 1 GS3 207
1 / J $ 1 # F 6 W 2 GS3 207
$ M V 9 ? E P 1 A3 220
1 2 C Q , ? T 4 I 2 A3 220
4 A Q P S M / 0 1 AS3 233
1 Q N S M # 0 7 D 2 AS3 233
- / B V T F X & , 1 B3 246
1 . % 1 O 7 Q Q 9 2 B3 246
# A Y & N 7 * S 1 C4 261
1 & L 5 - @ G Z 4 O 2 C4 261
50TYJO$DI27 1 CS4 277
16#UZKP*E&38 2 CS4 277
$ % T 3 D P X 8 . R 1 D4 293
1 $ K T S 3 F P X 0 . 2 D4 293
P % Z U 8 3 H C - K Z 1 DS4 311
1 E - P K U / 6 1 H * 2 DS4 311
M 2 P - T A DY Z I &K 1 E4 329
1 Q R/ *U V E F? J . 2 E4 329
6 F $ M J # 4 . F M , 1 F4 349
1 A O , / Y 6 . F O A , W # 2 F4 349
V 8& A M X9 ? C OY # 2 E 1 FS4 369
1C O Z 2 G ? - / 4 G $ K 2 FS4 369
1 HA Q LY T X@ 7 E 2 * 1 G4 392
1 5 ?E- N? K ZS 9 4I 2 G4 392
O$ F. M J $ F. 6#U , O$ 1 GS4 415
16 /W JO$ F 16# W AF. 6 /W, 2 GS4 415
$7 M V . * 9N ? ZE @ P3 1 A4 440
1 ?Y C# 0 Q 3, ?F R T 4 - , I U 2 A4 440
1 2 Q S . N S H M # G K 0 D J 7 D 2 AS4 466
? 4 A X 2 Q W. P S & M / G M 0 D 1 AS4 466
- / A U B V C W V F U G X & Y 1 , 1 B4 493
1 J . % ? L 1 O 4 P 7 Q P 8 Q 9 P @ 2 B4 493
& I *UL 6-I L TK6 I * R % T 1 C5 526
1@ & MCX W 9A?M L7W A? J* 7W 2 C5 526
50TYJO$DI27 O$DI27@V?LQ 1 CS5 554
16#UZKP*E&38 KP*E&38/W,M 2 CS5 554
$6 % F T R1 ? D 0 P 1V B 8 K .T R 1 D5 587
1V $3 8 K 0 HT R 3 % F0 P 1 X D8 K . V 2 D5 587
P 7KI Z F U$ 8 O 3 JH V C @ -5 K 2Z 1 DS5 622
1Y 2E - V 7 P 4 KI W D / $6 L 1 ? HT * 0 2 DS5 622
MT2 I HPW . Z * A%4 X 5DL ? Z 0I &K/ 1 E5 689
1 UH G V Q RY? T 1*U J X6E F?9 0BJ . 2 E5 689
O 6, F W$ 6M / . D J # 4 A , O.U F#M 6, 1 F5 698
1W A# O 1, F /$ Y 6 O. W F# O A6, . W$ # 2 F5 698
$V K8& V A &M AX9 ?OY C # OY2 N#E 2 ? E 1 FS5 739
1CZ ?O@ CZ O 2 Z /G ?4- /G 4-% G T $ 6 K I 2 FS5 739
U J # 16 HA Q LY 0T 5&C - N X@ 7 E 2 * K ZS 9 1 G5 783
1 &CQ LY T 5 ?E- N? X@ 7 2G B MRS , 9 4I $ O 2 G5 783
O$D .5 @ ? X N *E& 50 V M J $ F.4 #U , R O E ? 1 GS5 860
16 2 /W JO$ F 4 1 # X% Y P*E ? 0 7 V %N AF. 6 U / , 2 GS5 860
Y$ 9 E/M VQ. B5J 9NH ?T$ 6ZE JI@ 3WR 1 A5 880
1U & Y$7 4C#K 8 VQ.S *3, Y7?F N R?TO 4XC * JI@ 1UP 2 A5 880
?/4 H AMX0 2 Q G J W. 0 DP? S 7&AM ?/4G * MX0 D 3 1 AS5 932
1 @EQ4S J 8. N D ? S H 7 AM Y#2 G- KV . 0 D Q S J 7& N D 2 AS5 932
,- 2/%1& A ULB1 VMC 4W VPF5U G - 8XR &9YP * 0 1 ,- 1 B5 987
1@ - J . % T A? UL 1 D S C O 4T PF U 7 Q PI8X Q&9 P ? 1@ 2 B5 987
&9 $& VM8 I *UL 7$&K V I8* L UH7 KA TK6 I * SJ H7 %$ 1 C6 1046
87 00000 # X0
92 00000 # X1
97 000 # X2
100 ,001 set wordmark 1 # Start
104 /000 clear storage 0 # Wraps to top of memory?
108 H099 store B* 99 # Top of memory - 100? into X2
112 L/49089 load 1149 89 # X1 = 0
119 L/49094 load 1149 94 # X2 = 0
126 1 read # READNOTE: Read first card
127 C003/53 compare 3 1153 # Card has END?
134 B334S branch 334 S # Branch if equal to READNOTES:
139 M0996J5 move 99 615(X1) # line table[X1] = X2
146 B165D branch 165 D # if sense D set, branch to SENSED: numeric mode?
151 L/54354 load 1154 354 # Replace NOP with BRANCH
158 M0756J1 move 75 611(X1) # Store note name in table
165 A/56094 add 1156 94 # SENSED: X1 = X1 + 10 (10 is length of table entry)
172 M0660?0 move 66 0(X2) # *X2 = 66 character from card (i.e. half the print line)
179 H099 store B* 99 # X2 = left of line
183 1 read # Read second card
184 L0660?0 load 66 0(X2) # *X2 = 66 characters from card and word mark
191 H099 store B* 99 # X2 = left of line
195 A/57089 add 1157 89 # X0 = X0 + 1
202 C089/59 compare 89 1159 # if X0 < 21:
209 B126U branch 126 U # then branch to READNOTE:
214 .100 stop # else stop. Should have hit END card.
334 M585099 move 585 99 # READNOTES: END card read: X2 = /99 = 1199
341 /332 clear storage 332
345 / clear storage # Clear 200 to 332, i.e. print buffer. Note: previous code overlapped print buffer.
346 ,005201 set wordmark 5 201 # Set word marks at 5 and 201 (start of print buffer)
353 1 read # READTUNE: Read card
354 N372 no operation 372 # Modifed: if sense D not set, branch to READDONE
358 M002005 move 2 5 # card[5] = card[2] # Numeric format: move number to position 5
365 M/60002 move 1160 2 # card[2] = ' '
372 B564001X branch 564 1 X # READDONE: If first char 'X', branch to DOIT1:
380 B353001 branch 353 1 # If first char ' ', branch to READTUNE:
388 B503001R branch 503 1 R # If first char 'R' (rest), branch to LOOKUPREST:
396 L/49089 load 1149 89 # X0 = 0
# Find card[2:3] in the table of notes
403 C0036/1 compare 3 611(X0) # MATCHNOTE: Compare card[2:3] to table[X0] (entries for 1 to 20)
410 B438S branch 438 S # if equal, branch to LOOKUPNOTE:
415 A/56089 add 1156 89 # X0 += 10 (length of table entry)
422 C089094 compare 89 94
429 B403U branch 403 U # if X0 < X1, branch to MATCHNOTE:
434 .100 stop # Bad card? Stop.
438 L6/80?7 load 618(X0) 7(X2) # LOOKUPNOTE: *X2 = table[X0] (7-char load instruction for note line)
445 L/49089 load 1149 89 # X0 = 0
452 A005089 add 5 89 # X0 += card pos 5
459 A005089 add 5 89 # X0 += card pos 5
466 A005089 add 5 89 # X0 += card pos 5
473 A005089 add 5 89 # X0 += card pos 5, i.e. X0 = card[5] * 4
480 L8?90A1 load 809(X0) 11(X2) # X2[11] = 809[card pos 5]. Jump table for note duration
487 A/62099 add 1162 99 # X2 += 11
494 B564A branch 564 A # MAYBEDOIT1: if sense switch A, branch to DOIT:
499 B353 branch 353 # else branch to READTUNE:
503 ,002 set wordmark 2 # LOOKUPREST: set wordmark on 2nd char in read buffer
507 L/49089 load 1149 89 # X0 = 0
514 A002089 add 2 89 # X0 += card pos 2
521 A002089 add 2 89 # X0 += card pos 2
528 A002089 add 2 89 # X0 += card pos 2
535 A002089 add 2 89 # X0 += card pos 2, i.e. X0 = card[2] * 4
542 ?002 clear wordmark 2
546 L?/60?4 load 1016(X0) 4(X2) # X2[4] = 1016[X0]: Get branch instruction from rest jump table
553 A/63099 add 1163 99 # X2 += 4
560 B494 branch 494 # Branch to MAYBEDOIT1:
564 L5890?4 load 589 4(X2) # DOIT1: X2[4] = 'branch 590'
571 ,0?5 set wordmark 5(X2) # Set wordmark on X2[5]
575 L/64/99 load 1164 1199 # *1199 = 'N' (nop)
582 B/99 branch 1199 # DOIT2: branch to generated instruction sequence at 1199.
# For a note, code starting at 1199: N Lxxx332 Byyy B590. xxx is line pointer, loaded into print buffer at 201-332. yyy is note duration e.g. 846
# For a rest, code starting at 1199: N Bxxx B 590. xxx is e.g. 1053, rest code.
586 B590 branch 590 # Branch instruction to NOTEDONE: copied into X2 buffer
590 B599B branch 599 B # NOTEDONE: If not sense switch B,
595 .582 stop # then stop, continue at DOIT2:
599 B334C branch 334 C # F: if sense switch C, branch to READNOTES:
604 B582 branch 582 # Branch to DOIT2:
608 N no operation
609 1 # Note table: name can be overwritten with name from card e.g. G5
612 L000332 load 0 332 # Note table: addresses filled in to point to lines
619 2
622 L000332 load 0 332 # 332 is end of print buffer
629 3
632 L000332 load 0 332
639 4
642 L000332 load 0 332
649 5
652 L000332 load 0 332
659 6
662 L000332 load 0 332
669 7
672 L000332 load 0 332
679 8
682 L000332 load 0 332
689 9
692 L000332 load 0 332
699 010
702 L000332 load 0 332
709 011
712 L000332 load 0 332
719 012
722 L000332 load 0 332
729 013
732 L000332 load 0 332
739 014
742 L000332 load 0 332
749 015
752 L000332 load 0 332
759 016
762 L000332 load 0 332
769 017
772 L000332 load 0 332
779 018
782 L000332 load 0 332
789 019
792 L000332 load 0 332
799 020
802 L000332 load 0 332
809 N no operation
810 B846 branch 846 # Duration table entry 1. Branch to DURATION1:
814 B862 branch 862 # Branch to DURATION2:
818 B878 branch 878 # Branch to DURATION3:
822 B894 branch 894 # Branch to DURATION4:
826 B910 branch 910 # Branch to DURATION5:
830 B926 branch 926 # Branch to DURATION6:
834 B942 branch 942 # Branch to DURATION7:
838 B958 branch 958 # Branch to DURATION8:
842 B974 branch 974 # Branch to DURATION9:
# Entry points to play a note of particular duration
846 H099 store B* 99 # DURATION1: X2 = return addr, i.e. 1211 holding branch to 590 NOTEDONE:
850 B854 branch 854 # Branch to next instruction to set up B*
854 H?07 store B* 1007 # Store 854 (i.e. this address) in LOOPPRINT:
858 B994 branch 994 # Branch to PRINT1
862 H099 store B* 99 # DURATION2: X2 = addr
866 B870 branch 870
870 H?07 store B* 1007 # Store addr in LOOPPRINT:
874 B993 branch 993 # Branch to PRINT2
878 H099 store B* 99 # DURATION3: X2 = addr
882 B886 branch 886
886 H?07 store B* 1007 # Store addr in LOOPPRINT:
890 B992 branch 992 # Branch to PRINT3
894 H099 store B* 99 # DURATION4: X2 = addr
898 B902 branch 902 # Branch to
902 H?07 store B* 1007 # Store addr in LOOPPRINT:
906 B991 branch 991 # Branch to PRINT4
910 H099 store B* 99 # DURATION5: X2 = addr
914 B918 branch 918 # Branch to
918 H?07 store B* 1007 # Store addr in LOOPPRINT:
922 B990 branch 990 # Branch to PRINT5
926 H099 store B* 99 # DURATION6: X2 = addr
930 B934 branch 934
934 H?07 store B* 1007 # Store addr in LOOPPRINT:
938 B989 branch 988 # Branch to PRINT7
942 H099 store B* 99 # DURATION7: X2 = addr
946 B950 branch 950
950 H?07 store B* 1007 # Store addr in LOOPPRINT:
954 B988 branch 988 # Branch to PRINT8
958 H099 store B* 99 # DURATION8: X2 = addr
962 B966 branch 966
966 H?07 store B* 1007 # Store addr in LOOPPRINT:
970 B987 branch 987 # Branch to PRINT9
974 H099 store B* 99 # DURATION9: X2 = addr
978 B982 branch 982
982 H?07 store B* 1007 # Store addr in LOOPPRINT:
986 2 print # PRINT9
987 2 print # PRINT8
988 2 print # PRINT7
989 2 print # PRINT6
990 2 print # PRINT5
991 2 print # PRINT4
992 2 print # PRINT3
993 2 print # PRINT2
994 2 print # PRINT1
995 B?04G branch 1004 G # if sense switch G, goto LOOPPRINT:
1000 B?08 branch 1008 # else goto CARRIAGE:
1004 B000 branch 0 # LOOPPRINT: loop address stored here
1008 FJ control carriage J # CARRIAGE: one line
1010 FJ control carriage J # one line
1012 B0?0 branch 0(X2) # Return (to X2) i.e. NOTEDONE:
1016 N no operation
1017 B?53 branch 1053 # Rest jump table entry 1. Branch REST1:
1021 B?68 branch 1068 # Branch REST2:
1025 B?83 branch 1083 # Branch REST3:
1029 B?98 branch 1098 # Branch REST4:
1033 B?98 branch 1098 # Branch REST4:
1037 B/13 branch 1113 # Branch REST5:
1041 B/13 branch 1113 # Branch REST5:
1045 B/13 branch 1113 # Branch REST5:
1049 B/13 branch 1113 # Rest jump table entry 9. Branch REST5:
1053 H099 store B* 99 # REST11: X2 = B*, i.e. return address 1205 holding branch to 590 NOTEDONE:
1057 ?/67/71 zero and add 1167 1171 # *1171 = +250: rest loop for 250 counts
1064 B/24 branch 1124 # Branch RESTLOOP:
1068 H099 store B* 99 # REST2: X2 = B*
1072 ?/74/71 zero and add 1174 1171 # *1171 = +500
1079 B/24 branch 1124 # Branch RESTLOOP:
1083 H099 store B* 99 # REST3: X2 = B*
1087 ?/77/71 zero and add 1177 1171 # *1171 = +750
1094 B/24 branch 1124 # Branch RESTLOOP:
1098 H099 store B* 99 # REST4: X2 = B*
1102 ?/81/71 zero and add 1181 1171 # *1171 = +1000
1109 B/24 branch 1124 # Branch RESTLOOP:
1113 H099 store B* 99 # REST5: X2 = B*
1117 ?/85/71 zero and add 1185 1171 # *1171 = +2000
1124 S/86/71 subtract 1186 1171 # RESTLOOP: *1171 -= +1
1131 C/50/71 compare 1150 1171 # Compare +0001 to 1171
1138 B/24U branch 1124 U # Branch if B higher to RESTLOOP:
1143 B0?0 branch 0(X2) # Return to X2, i.e. NOTEDONE:
1147 000A # +0001
1151 END # 'END'
1154 B # Branch
1155 10 # 10 (table length inc)
1157 1 # 1 (increment)
1158 21 # 21 (loop limit)
1160 # ' '
1161 11 # 11
1163 4 # 4
1164 N # NOP
1165 25? # +250
1168 # Rest timing counter
1172 50? # +500
1175 75? # +750
1178 100? # +1000
1182 200? # +2000
1186 A # +1
1199 # Holds instruction.
1207 # Jump table branch here 1207-1210
Problem - from Pat Buder
We ran the tape program v2.0 before the demo to get sufficient tape on
the takeup reels to show high speed rewind. When running the tape
program during the demo an odd thing happened. At first it operated
normally on drives 1-3. After a while, drives 1 and 3 stopped but drive
2 kept running. We were not touching any sense switches. However we did
hit reset and start on the drives in an attempt to restart the motion.
Hi Carl,
I wrote it so I?ll fix it. Thanks for the heads-up. What happens now in ?Ron 2.0? is if it gets a persistent write error,
it performs Skip-and-Blank-Tape (about 3 inches) which hopefully gets to a better piece of tape, and tries writing again.
This could cause one tape to appear to be running while the others stop. My original reason for modifying Ron Williams?
original ?Wear Out Tapes? was it could run off the end of reel. I fixed that, but introduced write-error checking, since I
was interested in how often errors occur on our tape drives & reels. Better dock my pay until I get the fix in.
--Jack
Hi Ed,
Paperwork is always late. Attached is the ?Listing? for my updated IBM1401 program ?Ron 2.1 Exercise Tapes?. The
updates are per the discussions below.
Ron Williams wrote his original program by hand. As a real man, he didn?t use any of that Assembler program stuff!
Thus, there is no true ?listing?. But, attached is a .PDF pseudo-listing I used to punch up the object cards.
It?s merely a listing of an Excel file I used to reduce my mistakes (also included).
Thanks so much for your wonderful archives, Ed.