--- layout: page title: PDP-10 KA10 Basic Instruction Diagnostic #12 permalink: /apps/pdp10/diags/ka10/dakal/ machines: - id: testka10 type: pdp10 config: /devices/pdp10/machine/ka10/test/debugger/machine.xml debugger: true commands: a DAKAL.MAC --- PDP-10 KA10 Basic Instruction Diagnostic #12 -------------------------------------------- The *PDP-10 KA10 Basic Instruction Diagnostic #12* (MAINDEC-10-DAKAL) test code has been extracted from [DAKALM.MAC](DAKALM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakalm.mac.html)] and [DAKALT.MAC](DAKALT.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakalt.mac.html)] for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below. This diagnostic "TESTS THE MULTIPY, INTERGER MULIPLY, DIVIDE AND INTERGER DIVIDE INSTRUCTIONS." Hopefully the tests work better than their spell-checking. Information regarding this diagnostic includes: - [Issues](#issues) - [Instructions](#dakaltxt) - [History](#dakalhst) - [Source Code](#dakalmac) - [MACRO-10 Listing](DAKAL.LST.txt) - [Additional Information](https://s3-us-west-2.amazonaws.com/archive.pcjs.org/apps/pdp10/diags/ka10/dakal/DAKAL.SEQ.txt) {% include machine.html id="testka10" %} The Debugger's assemble ("a") command can be used to test the new built-in [MACRO-10 Mini-Assembler](/modules/pdp10/lib/macro10.js), which supports a subset of the [MACRO-10](https://s3-us-west-2.amazonaws.com/archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language. This command: a DAKAL.MAC will automatically read the [DAKAL.MAC](DAKAL.MAC.txt) source file (a slightly modified copy of [DAKALM.MAC](DAKALM.MAC.txt)), assemble it, and then load the binary image at the location specified in the file. Issues ------ The following DAKAL diagnostic test sequence produced correct results but still failed: 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000001 13=000000000000 14=777777777777 15=525252525252 16=000000000016 17=000000000000 PC=030641 RA=00030626 EA=030626 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030641: 200600 044434 MOVE 14,44434 ;cycles=1 >> tr 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000001 13=000000000000 14=525252525252 15=525252525252 16=000000000016 17=000000000000 PC=030642 RA=00044434 EA=044434 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030642: 200640 044435 MOVE 15,44435 ;cycles=1 >> tr 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000001 13=000000000000 14=525252525252 15=000000000000 16=000000000016 17=000000000000 PC=030643 RA=00044435 EA=044435 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030643: 200500 044440 MOVE 12,44440 ;cycles=1 >> tr 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000002 13=000000000000 14=525252525252 15=000000000000 16=000000000016 17=000000000000 PC=030644 RA=00044440 EA=044440 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030644: 224600 000012 MUL 14,12 ;cycles=1 >> tr 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000002 13=000000000000 14=777777777776 15=652525252524 16=000000000016 17=000000000000 PC=030645 RA=00000012 EA=000012 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030645: 312600 044441 CAME 14,44441 ;cycles=1 >> tr 00=000000000000 01=000000000000 02=000000000000 03=000000000000 04=000000000000 05=000000000000 06=000000000000 07=000000000000 10=000000000000 11=000000000000 12=000000000002 13=000000000000 14=777777777776 15=652525252524 16=000000000016 17=000000000000 PC=030647 RA=00044441 EA=044441 PS=000000 OV=0 C0=0 C1=0 ND=0 PD=0 030647: 312640 044442 CAME 15,44442 ;cycles=1 The multiplication of 525252525252 * 2 produces 777777777776,652525252524, which is correct for the PDP-10's 72-bit "dual sign" format. However, the first time I ran this test, it failed -- not because the result was wrong, but because the value calculated for the expected result was wrong. The source code for the test produces the expected results by performing 36-bit multiplication in the MACRO-10 Assembler: 775 ;MULTIPLY A FLOATING 1 BY 1010...101010 776 525252 525252 V1=N1 777 652525 252524 V2=N1*XX but the expected result *my* MACRO-10 Mini-Assembler calculated was different: >> dw 44442 l1 044442: 252525 252524 My result wasn't really the *wrong value*; it was the correct (albeit truncated) value in the *wrong format*. My expression parser was performing simple JavaScript multiplication and then truncating the result to 36 bits; MACRO-10 performs a similar calculation, but it also adjusts the sign of the low 36 bits to match the sign of the high 36 bits -- because that's what the PDP-10 does, too. My solution was to move the expression parser's *multiplication* code to its own function, *evalMUL()*, and then change the PDP-10 Debugger to override *evalMUL()* with its own function that calls the PDP-10 CPU *doMUL()* function, guaranteeing that all multiplication results are performed with the same 72-bit precision and returned in the same PDP-10 72-bit format (before being truncated to 36 bits). Unfortunately, this creates an incestuous relationship between CPU functionality being tested and the code testing it, because it increases the likelihood that the multiplication tests will succeed even if/when they calculate incorrect results, at least whenever the expected results are being calculated with the same multiplicands that the test itself uses. So, as a precaution, I added some *DEBUG* code to the *evalMUL()* function that outputs all the instances where JavaScript multiplication and PDP-10 multiplication differ, so that I can verify that all my PDP-10 results match those in DEC's [MACRO-10 Listing](DAKAL.LST.txt), which I'm treating as "the gold standard." Here's that output: MUL(525252525252,000000000002) PDP-10: 652525252524 JavaScript: 252525252524 @030641 MUL(525252525252,000000000002) PDP-10: 652525252524 JavaScript: 252525252524 @030641 MUL(525252525252,000000000010) PDP-10: 652525252520 JavaScript: 252525252520 @030667 MUL(525252525252,000000000010) PDP-10: 652525252520 JavaScript: 252525252520 @030667 MUL(525252525252,000000000040) PDP-10: 652525252500 JavaScript: 252525252500 @030715 MUL(525252525252,000000000040) PDP-10: 652525252500 JavaScript: 252525252500 @030715 MUL(525252525252,000000000200) PDP-10: 652525252400 JavaScript: 252525252400 @030743 MUL(525252525252,000000000200) PDP-10: 652525252400 JavaScript: 252525252400 @030743 MUL(525252525252,000000001000) PDP-10: 652525252000 JavaScript: 252525252000 @030771 MUL(525252525252,000000001000) PDP-10: 652525252000 JavaScript: 252525252000 @030771 MUL(525252525252,000000004000) PDP-10: 652525250000 JavaScript: 252525250000 @031017 MUL(525252525252,000000004000) PDP-10: 652525250000 JavaScript: 252525250000 @031017 MUL(525252525252,000000020000) PDP-10: 652525240000 JavaScript: 252525240000 @031045 MUL(525252525252,000000020000) PDP-10: 652525240000 JavaScript: 252525240000 @031045 MUL(525252525252,000000100000) PDP-10: 652525200000 JavaScript: 252525200000 @031073 MUL(525252525252,000000100000) PDP-10: 652525200000 JavaScript: 252525200000 @031073 MUL(525252525252,000000400000) PDP-10: 652525000000 JavaScript: 252525000000 @031121 MUL(525252525252,000000400000) PDP-10: 652525000000 JavaScript: 252525000000 @031121 MUL(525252525252,000002000000) PDP-10: 652524000000 JavaScript: 252524000000 @031147 MUL(525252525252,000002000000) PDP-10: 652524000000 JavaScript: 252524000000 @031147 MUL(525252525252,000010000000) PDP-10: 652520000000 JavaScript: 252520000000 @031175 MUL(525252525252,000010000000) PDP-10: 652520000000 JavaScript: 252520000000 @031175 MUL(525252525252,000040000000) PDP-10: 652500000000 JavaScript: 252500000000 @031223 MUL(525252525252,000040000000) PDP-10: 652500000000 JavaScript: 252500000000 @031223 MUL(525252525252,000200000000) PDP-10: 652400000000 JavaScript: 252400000000 @031251 MUL(525252525252,000200000000) PDP-10: 652400000000 JavaScript: 252400000000 @031251 MUL(525252525252,001000000000) PDP-10: 652000000000 JavaScript: 252000000000 @031277 MUL(525252525252,001000000000) PDP-10: 652000000000 JavaScript: 252000000000 @031277 MUL(525252525252,004000000000) PDP-10: 650000000000 JavaScript: 250000000000 @031325 MUL(525252525252,004000000000) PDP-10: 650000000000 JavaScript: 250000000000 @031325 MUL(525252525252,020000000000) PDP-10: 640000000000 JavaScript: 240000000000 @031353 MUL(525252525252,020000000000) PDP-10: 640000000000 JavaScript: 240000000000 @031353 MUL(525252525252,100000000000) PDP-10: 600000000000 JavaScript: 200000000000 @031401 MUL(525252525252,100000000000) PDP-10: 600000000000 JavaScript: 200000000000 @031401 MUL(252525252525,000000000002) PDP-10: 125252525252 JavaScript: 525252525252 @031461 MUL(252525252525,000000000010) PDP-10: 125252525250 JavaScript: 525252525250 @031507 MUL(252525252525,000000000040) PDP-10: 125252525240 JavaScript: 525252525240 @031535 MUL(252525252525,000000000200) PDP-10: 125252525200 JavaScript: 525252525200 @031563 MUL(252525252525,000000001000) PDP-10: 125252525000 JavaScript: 525252525000 @031611 MUL(252525252525,000000004000) PDP-10: 125252524000 JavaScript: 525252524000 @031637 MUL(252525252525,000000020000) PDP-10: 125252520000 JavaScript: 525252520000 @031665 MUL(252525252525,000000100000) PDP-10: 125252500000 JavaScript: 525252500000 @031713 MUL(252525252525,000000400000) PDP-10: 125252400000 JavaScript: 525252400000 @031741 MUL(252525252525,000002000000) PDP-10: 125252000000 JavaScript: 525252000000 @031767 MUL(252525252525,000010000000) PDP-10: 125250000000 JavaScript: 525250000000 @032015 MUL(252525252525,000040000000) PDP-10: 125240000000 JavaScript: 525240000000 @032043 MUL(252525252525,000200000000) PDP-10: 125200000000 JavaScript: 525200000000 @032071 MUL(252525252525,001000000000) PDP-10: 125000000000 JavaScript: 525000000000 @032117 MUL(252525252525,004000000000) PDP-10: 124000000000 JavaScript: 524000000000 @032145 MUL(252525252525,020000000000) PDP-10: 120000000000 JavaScript: 520000000000 @032173 MUL(252525252525,100000000000) PDP-10: 100000000000 JavaScript: 500000000000 @032221 MUL(252525252525,000000000002) PDP-10: 125252525252 JavaScript: 525252525252 @032301 MUL(252525252525,000000000010) PDP-10: 125252525250 JavaScript: 525252525250 @032327 MUL(252525252525,000000000040) PDP-10: 125252525240 JavaScript: 525252525240 @032355 MUL(252525252525,000000000200) PDP-10: 125252525200 JavaScript: 525252525200 @032403 MUL(252525252525,000000001000) PDP-10: 125252525000 JavaScript: 525252525000 @032431 MUL(252525252525,000000004000) PDP-10: 125252524000 JavaScript: 525252524000 @032457 MUL(252525252525,000000020000) PDP-10: 125252520000 JavaScript: 525252520000 @032505 MUL(252525252525,000000100000) PDP-10: 125252500000 JavaScript: 525252500000 @032533 MUL(252525252525,000000400000) PDP-10: 125252400000 JavaScript: 525252400000 @032561 MUL(252525252525,000002000000) PDP-10: 125252000000 JavaScript: 525252000000 @032607 MUL(252525252525,000010000000) PDP-10: 125250000000 JavaScript: 525250000000 @032635 MUL(252525252525,000040000000) PDP-10: 125240000000 JavaScript: 525240000000 @032663 MUL(252525252525,000200000000) PDP-10: 125200000000 JavaScript: 525200000000 @032711 MUL(252525252525,001000000000) PDP-10: 125000000000 JavaScript: 525000000000 @032737 MUL(252525252525,004000000000) PDP-10: 124000000000 JavaScript: 524000000000 @032765 MUL(252525252525,020000000000) PDP-10: 120000000000 JavaScript: 520000000000 @033013 MUL(252525252525,100000000000) PDP-10: 100000000000 JavaScript: 500000000000 @033041 MUL(400000000000,400000000000) PDP-10: 400000000000 JavaScript: 000000000000 @033707 VERIFIED MUL(400000000000,400000000000) PDP-10: 400000000000 JavaScript: 000000000000 @033707 VERIFIED MUL(400000000000,400000000000) PDP-10: 400000000000 JavaScript: 000000000000 @033707 VERIFIED MUL(400000000000,400000000000) PDP-10: 400000000000 JavaScript: 000000000000 @033707 VERIFIED MUL(777777777776,777777777776) PDP-10: 000000000004 JavaScript: 000000000000 @033726 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033726 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033726 MUL(777777777775,777777777775) PDP-10: 000000000011 JavaScript: 000000000000 @033741 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033741 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033741 MUL(777777777773,777777777773) PDP-10: 000000000031 JavaScript: 000000000000 @033754 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033754 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033754 MUL(777777777767,777777777767) PDP-10: 000000000121 JavaScript: 000000000000 @033767 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033767 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033767 MUL(777777777757,777777777757) PDP-10: 000000000441 JavaScript: 000000000000 @034002 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034002 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034002 MUL(777777777737,777777777737) PDP-10: 000000002101 JavaScript: 000000000000 @034015 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034015 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034015 MUL(777777777677,777777777677) PDP-10: 000000010201 JavaScript: 000000000000 @034030 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034030 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034030 MUL(777777777577,777777777577) PDP-10: 000000040401 JavaScript: 000000000000 @034043 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034043 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034043 MUL(777777777377,777777777377) PDP-10: 000000201001 JavaScript: 000000000000 @034056 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034056 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034056 MUL(777777776777,777777776777) PDP-10: 000001002001 JavaScript: 000002000000 @034071 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034071 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034071 MUL(777777775777,777777775777) PDP-10: 000004004001 JavaScript: 000004000000 @034104 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034104 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034104 MUL(777777773777,777777773777) PDP-10: 000020010001 JavaScript: 000020000000 @034117 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034117 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034117 MUL(777777767777,777777767777) PDP-10: 000100020001 JavaScript: 000100000000 @034132 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034132 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034132 MUL(777777757777,777777757777) PDP-10: 000400040001 JavaScript: 000400000000 @034145 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034145 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034145 MUL(777777737777,777777737777) PDP-10: 002000100001 JavaScript: 002000000000 @034160 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034160 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034160 MUL(777777677777,777777677777) PDP-10: 010000200001 JavaScript: 010000000000 @034173 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034173 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034173 MUL(777777577777,777777577777) PDP-10: 040000400001 JavaScript: 040000000000 @034206 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034206 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034206 MUL(777777377777,777777377777) PDP-10: 200001000001 JavaScript: 200002000000 @034221 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034221 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034221 MUL(777776777777,777776777777) PDP-10: 000002000001 JavaScript: 000002000000 @034234 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034234 MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034234 MUL(777775777777,777775777777) PDP-10: 000004000001 JavaScript: 000004000000 @034247 MUL(000000777776,000000777776) PDP-10: 377774000004 JavaScript: 777774000004 @034247 MUL(000000777776,000000777776) PDP-10: 377774000004 JavaScript: 777774000004 @034247 MUL(777773777777,777773777777) PDP-10: 000010000001 JavaScript: 000010000000 @034262 MUL(000000777774,000000777774) PDP-10: 377770000020 JavaScript: 777770000020 @034262 MUL(000000777774,000000777774) PDP-10: 377770000020 JavaScript: 777770000020 @034262 MUL(777767777777,777767777777) PDP-10: 000020000001 JavaScript: 000020000000 @034275 MUL(000000777770,000000777770) PDP-10: 377760000100 JavaScript: 777760000100 @034275 MUL(000000777770,000000777770) PDP-10: 377760000100 JavaScript: 777760000100 @034275 MUL(777757777777,777757777777) PDP-10: 000040000001 JavaScript: 000040000000 @034310 MUL(000000777760,000000777760) PDP-10: 377740000400 JavaScript: 777740000400 @034310 MUL(000000777760,000000777760) PDP-10: 377740000400 JavaScript: 777740000400 @034310 MUL(777737777777,777737777777) PDP-10: 000100000001 JavaScript: 000100000000 @034323 MUL(000000777740,000000777740) PDP-10: 377700002000 JavaScript: 777700002000 @034323 MUL(000000777740,000000777740) PDP-10: 377700002000 JavaScript: 777700002000 @034323 MUL(777677777777,777677777777) PDP-10: 000200000001 JavaScript: 000200000000 @034336 MUL(000000777700,000000777700) PDP-10: 377600010000 JavaScript: 777600010000 @034336 MUL(000000777700,000000777700) PDP-10: 377600010000 JavaScript: 777600010000 @034336 MUL(777577777777,777577777777) PDP-10: 000400000001 JavaScript: 000400000000 @034351 MUL(000000777600,000000777600) PDP-10: 377400040000 JavaScript: 777400040000 @034351 MUL(000000777600,000000777600) PDP-10: 377400040000 JavaScript: 777400040000 @034351 MUL(777377777777,777377777777) PDP-10: 001000000001 JavaScript: 001000000000 @034364 MUL(000000777400,000000777400) PDP-10: 377000200000 JavaScript: 777000200000 @034364 MUL(000000777400,000000777400) PDP-10: 377000200000 JavaScript: 777000200000 @034364 MUL(776777777777,776777777777) PDP-10: 002000000001 JavaScript: 002000000000 @034377 MUL(000000777000,000000777000) PDP-10: 376001000000 JavaScript: 776001000000 @034377 MUL(000000777000,000000777000) PDP-10: 376001000000 JavaScript: 776001000000 @034377 MUL(775777777777,775777777777) PDP-10: 004000000001 JavaScript: 004000000000 @034412 MUL(000000776000,000000776000) PDP-10: 374004000000 JavaScript: 774004000000 @034412 MUL(000000776000,000000776000) PDP-10: 374004000000 JavaScript: 774004000000 @034412 MUL(773777777777,773777777777) PDP-10: 010000000001 JavaScript: 010000000000 @034425 MUL(000000774000,000000774000) PDP-10: 370020000000 JavaScript: 770020000000 @034425 MUL(000000774000,000000774000) PDP-10: 370020000000 JavaScript: 770020000000 @034425 MUL(767777777777,767777777777) PDP-10: 020000000001 JavaScript: 020000000000 @034440 MUL(000000770000,000000770000) PDP-10: 360100000000 JavaScript: 760100000000 @034440 MUL(000000770000,000000770000) PDP-10: 360100000000 JavaScript: 760100000000 @034440 MUL(757777777777,757777777777) PDP-10: 040000000001 JavaScript: 040000000000 @034453 MUL(000000760000,000000760000) PDP-10: 340400000000 JavaScript: 740400000000 @034453 MUL(000000760000,000000760000) PDP-10: 340400000000 JavaScript: 740400000000 @034453 MUL(737777777777,737777777777) PDP-10: 100000000001 JavaScript: 100000000000 @034466 MUL(000000740000,000000740000) PDP-10: 302000000000 JavaScript: 702000000000 @034466 MUL(000000740000,000000740000) PDP-10: 302000000000 JavaScript: 702000000000 @034466 MUL(677777777777,677777777777) PDP-10: 200000000001 JavaScript: 200000000000 @034501 MUL(000000700000,000000700000) PDP-10: 210000000000 JavaScript: 610000000000 @034501 MUL(000000700000,000000700000) PDP-10: 210000000000 JavaScript: 610000000000 @034501 MUL(577777777777,577777777777) PDP-10: 000000000001 JavaScript: 400000000000 @034514 MUL(000000600000,000000600000) PDP-10: 040000000000 JavaScript: 440000000000 @034514 MUL(377777777777,377777777777) PDP-10: 000000000001 JavaScript: 000000000000 @034527 MUL(777777377777,000001000000) PDP-10: 777777000000 JavaScript: 377777000000 @035347 MUL(777777377777,000001000000) PDP-10: 777777000000 JavaScript: 377777000000 @035347 MUL(000000000010,377777777777) PDP-10: 377777777770 JavaScript: 777777777770 @000000 MUL(000000000020,377777777777) PDP-10: 377777777760 JavaScript: 777777777760 @000000 --- DAKAL.TXT --------- ``` MAINDEC-10-DAKAL.TXT IDENTIFICATION -------------- PRODUCT CODE: MAINDEC-10-DAKAL-B-D PRODUCT NAME: DECSYSTEM10 PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC (12) FUNCTION: MULTIPY & DIVIDE VERSION: 0.2 DATE RELEASED: JANUARY 1977 MAINTAINED BY: DIAGNOSTIC ENGINEERING GROUP AUTHOR: JOHN R. KIRCHOFF COPYRIGHT(C) 1976,1977 DIGITAL EQUIPMENT CORPORATION MARLBORO, MASS. 01752 THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON EXECPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. MAINDEC-10-DAKAL.TXT PAGE 2 TABLE OF CONTENTS ----------------- 1.0 ABSTRACT 2.0 REQUIREMENTS 2.1 EQUIPMENT 2.2 STORAGE 2.3 PRELIMINARY PROGRAMS 3.0 PROGRAM PROCEDURES 3.1 LOADING PROCEDURE 3.2 STARTING PROCEDURE 3.3 OPERATING PROCEDURE 4.0 DATA SWITCH FUNCTIONS 5.0 ERRORS 6.0 ITERATION COUNTER 7.0 CYCLE TIME 8.0 OPERATIONAL VARIATIONS 9.0 MISCELLANEOUS 10.0 LISTING MAINDEC-10-DAKAL.TXT PAGE 3 1.0 ABSTRACT THIS PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC IS THE TWELVTH IN A SERIES OF PDP-10 KA10 PROCESSOR DIAGNOSTICS. THE DIAGNOSTIC TESTS THE MULTIPY, INTERGER MULIPLY, DIVIDE AND INTERGER DIVIDE INSTRUCTIONS. 2.0 REQUIREMENTS 2.1 EQUIPMENT A PDP-10 KA10 EQUIPPED WITH A MINIMUM OF 32K OF MEMORY PAPER TAPE READER CONSOLE TELETYPE DECTAPE LINE PRINTER (OPTIONAL) 2.2 STORAGE THE PROGRAM RUNS WITHIN 32K OF MEMORY. 2.3 PRELIMINARY PROGRAMS PREVIOUS PROCESSOR DIAGNOSTICS 3.0 PROGRAM PROCEDURES 3.1 LOADING PROCEDURE THIS DIAGNOSTIC REQUIRES THAT THE DECSYSTEM10 SUBROUTINE PROGRAM BE RESIDENT IN THE PDP-10. PAPER TAPE - HARDWARE READ-IN (READER DEVICE CODE 104) DECTAPE - LOAD WITH DIAMON (DECTAPE DEVICE CODE 320) TIME SHARING - RUN UNDER DIAMON. MAINDEC-10-DAKAL.TXT PAGE 4 3.2 STARTING PROCEDURE A. SELECT OPERATIONAL CONSOLE DATA SWITCH SETTINGS (REFER TO 4.0 DATA SWITCH FUNCTIONS). B. EXEC MODE STAND-ALONE STARTING ADDRESS IS 30000. C. USER MODE RUN UNDER "DIAMON". IN USER MODE THE FOLLOWING QUESTIONS WILL BE ASKED TO SELECT THE OPERATIONAL SWITCHES: TELETYPE SWITCH CONTROL ? 0,S,Y OR N (CR) - IF THE OPERATOR TYPES "N", THE ACTUAL CONSOLE SWITCHES ARE USED. IF THE OPERATOR TYPES "Y", THE FOLLOWING QUESTIONS ARE ASKED AND THE OPERATOR RESPONDS BY TYPING THE ANSWER AS SIX OCTAL DIGITS REPRESENTING THE DESIRED SWITCH SETTINGS. SPECIFY LH SWITCHES IN OCTAL- SPECIFY RH SWITCHES IN OCTAL- IF THE OPERATOR TYPES "0", ZERO'S ARE USED FOR THE SWITCH SETTINGS. IF THE OPERATOR TYPES "S", PREVIOUSLY SET SWITCHES ARE USED. THIS IS ONLY VALID UPON RESTARTING OF AN INTERRUPTED PROGRAM. MAINDEC-10-DAKAL.TXT PAGE 5 3.3 OPERATING PROCEDURE A. TO THROUGHLY TEST ALL HARDWARE, ALL TEST CONTROL DATA SWITCHES SHOULD BE SET TO 0. B. WHEN DEBUGGING HARDWARE, SET SWITCHES TO 0. ALLOW THE TELETYPE TO PRINT THE ERROR MESSAGES. THIS ALLOWS THE PROGRAM TO RUN A COMPLETE PASS AND THEN THE ERROR MESSAGES MAY BE CORRELATED TO QUICKLY DIAGNOSE THE FAILURE. IF A HARDWARE PROBLEM IS SUCH THAT THE ERROR MESSAGES, AFTER THE FIRST ONE, HAVE NO MEANING (FIRST ERROR CAUSES ALL FOLLOWING TESTS TO FAIL) SET THE LOOP ON ERROR SWITCH AND RESTART THE TEST FROM THE BEGINNING. THE FIRST FAILURE WILL THEN CAUSE THE PROGRAM TO ENTER A LOOP SUITABLE FOR SCOPING. THE ERROR MESSAGE USED IN CONJUNCTION WITH THE LISTING AND SCOPING IF NECESSARY SHOULD ALLOW THE FAILING CONPONENT TO BE ISOLATED AND REPLACED AND/OR REPAIRED. C. WHEN TAKING MARGINS, SET DATA SWITCHES 'NOPNT' AND 'DING'. THIS WILL INHIBIT PRINTOUT BUT WILL ALLOW THE TELETYPE BELL TO BE RUNG WHEN A ERROR OCCURS. IF THE MARGIN OBTAINED IS UNACCEPTABLE, THE OPERATOR MAY REVERT TO STANDARD SWITCH SETTINGS FOR DEBUGGING PURPOSES. D. ERROR INFORMATION MAY BE OBTAINED QUICKLY BY PRINTING ERRORS ON THE LINE PRINTER. E. IN THE EVENT OF A PRINT ROUTINE FAILURE THE 'NOPNT' SWITCH AND THE 'ERSTOP' SWITCH MAY BE SET TO INHIBIT PRINTOUT BUT HALT THE PROGRAM POINTING TO THE ERROR. MAINDEC-10-DAKAL.TXT PAGE 6 4.0 DATA SWITCH FUNCTIONS SWITCH STATE FUNCTION ------ ----- -------- 0 ABORT 0 NORMAL OPERATION 1 ABORT AT END OF PASS 1 RSTART NOT USED 2 TOTALS NOT USED 3 NOPNT 0 NORMAL TYPEOUT 1 INHIBIT ALL PRINT/TYPEOUT (EXCEPT FORCED) 4 PNTLPT 0 NORMAL OUTPUT TO TTY 1 PRINT ALL DATA ON LPT (LOGICAL DEVICE, USER MODE) 5 DING 0 NO FUNCTION 1 RING TTY BELL ON ERROR 6 LOOPER 0 PROCEED TO NEXT TEST 1 ENTER SCOPE LOOP ON TEST ERROR 7 ERSTOP 0 NO FUNCTION 1 HALT ON TEST ERROR 8 PALERS 0 PRINT ONLY FIRST ERROR WHEN LOOPING 1 PRINT ALL ERRORS, EVEN IF SAME ERROR 9 RELIAB NOT USED 10 TXTINH 0 PRINT FULL ERROR MESSAGES. 1 INHIBIT COMMENT PORTION OF ERROR MESSAGES. 11 INHPAG 0 ALLOW PAGING AND TRAP ENABLE 1 INHIBIT PAGING AND TRAPPING 12 MODDVC NOT USED 13 INHCSH NOT USED MAINDEC-10-DAKAL.TXT PAGE 7 5.0 ERRORS ERRORS ARE PRINTED ON THE TTY OR LINE PRINTER. THE ERROR PRINTOUT CONTAINS THE TEST TITLE, THE PC OF THE FAILURE, ERROR NUMBER AND THE CONTENTS OF AN APPLICABLE AC. THE PC VALUE IS USEFUL IN RELATING THE FAILURE TO THE LISTING. THE ERROR NUMBER IS PROVIDED SUCH THAT AN ERROR DICTIONARY MAY BE MADE AT SOME FUTURE DATE. WHEN THE SCOPE LOOP MODE IS USED THE MI REGISTER WILL COUNT FOR EACH OCCURANCE OF AN ERROR. IF AN AUDIO INDICATION OF A CONTINUING ERROR IS DESIRED THE 'DING' SWITCH MAY BE SET. 6.0 ITERATION COUNTER THE ITERATION COUNT OF THE PROGRAM IS DISPLAYED IN THE MEMORY INDICATORS (MI). THIS COUNT IS A DECREMENTING COUNT AND INITIALLY STARTS AT -1 IN STAND-ALONE OPERATION. 7.0 CYCLE TIME THE CYCLE TIME OF THE PROGRAM IS IN THE MILLISECOND RANGE AND IS THEREFORE SUITABLE FOR TAKING MARGINS, VIBRATION TESTS, ETC. MAINDEC-10-DAKAL.TXT PAGE 8 8.0 OPERATIONAL VARIATIONS A. DIAGNOSTIC MONITOR THE PROGRAM IS USABLE WITH THE DIAGNOSTIC MONITOR TO PROVIDE RELIABILITY TESTS, ACCEPTANCE TESTS, AND/OR TO PROVIDE A QUICK METHOD OF ISOLATION OF A FAULT TO A PARTICULAR AREA OF THE PROCESSOR. CERTAIN PROCEDURES ARE USED WHEN THE PROGRAM IS USED IN THIS MANNER. THEY ARE: 1. THE DIAGNOSTIC MONITOR TRANSFERS CONTROL TO THE PROGRAM AND STARTS IT AT LOCATION 30002. 2. MONCTL - LOCATION 30043 IS USED AS THE DIAGNOSTIC MONITOR CONTROL WORD. LH = 0, STAND-ALONE OPERATION -1, RUNNING UNDER DIAGNOSTIC MONITOR RH = RIGHT HALF OF CONSOLE SWITCHES IF UNDER DIAGNOSTIC MONITOR CONTROL. B. USER MODE TO OUTPUT THE PRINTED ERROR MESSAGES TO A USER SPECIFIED DEVICE IN USER MODE, ASSIGN THE DESIRED OUTPUT DEVICE TO DEVICE NAME 'DEV' AND SET SWITCH 'PNTLPT'. THE PHYSICAL DEVICE USED CAN BE ANY DEVICE THAT CAN ACCEPT ASCII OUTPUT FORMAT SUCH AS LPT, DSK, DTA, ETC. THE CORRESPONDING OUTPUT FILE IS 'DAKAL.TMP' EXAMPLE DEVICE ASSIGNMENT: .ASSIGN DSK DEV IN USER MODE THE PROGRAM WILL MAKE 1000(8) PASSES AND THEN RETURN TO DIAMON COMMAND MODE. MAINDEC-10-DAKAL.TXT PAGE 9 8.0 OPERATIONAL VARIATIONS (CON'T) THE OUTPUT FILE (IF USED) MAY THEN BE LISTED BY USING THE NORMAL MONITOR COMMANDS (PRINT, LIST, TYPE, PIP, ETC.). IF THE PROGRAM IS ABORTED BEFORE COMPLETION (BY ^C, ETC.) THE OUTPUT FILE MAY BE CLOSED BY USING THE MONITOR 'REENTER' COMMAND. C. SYSTEM EXERCISER START ADDRESS IS 30003. DATA SWITCHES ARE PRESTORED IN 'SWTEXR' LOC 30023. 9.0 MISCELLANEOUS THE NON-EX-MEMORY AND PARITY STOP SWITCHES SHOULD BE RESET (0). THESE ERRORS, ILLEGAL UUO'S AND OTHER ERRORS OF THIS TYPE ARE HANDLED BY PRINTOUT ON THE TELETYPE. 10.0 LISTING ``` DAKAL.HST --------- THIS IS A HISTORY OF THE DEVELOPMENT OF MAINDEC-10-DAKAL ************************************************************************ PRODUCT CODE: MAINDEC-10-DAKAL PRODUCT NAME: BASIC INSTRUCTION DIAGNOSTIC #12 DATE RELEASED: JANUARY 1977 VERSION: 0.2 UPDATE AUTHOR: JOHN R. KIRCHOFF CHANGES MADE: 1. UPGRADE TO ALLOW COMPATABILITY WITH THE SUBROUTINE PACKAGE. ************************************************************************ ORIGINAL VERSION: 0.1 ORIGINAL AUTHOR: RICHARD MALISKA ORIGINAL RELEASE: 16-MAR-72 ************************************************************************ DAKAL.MAC --------- [[Download](DAKAL.MAC.txt)] {% highlight text %} {% include_relative DAKAL.MAC.txt %} {% endhighlight %}