diff --git a/apps/pdp10/diags/ka10/dakak/README.md b/apps/pdp10/diags/ka10/dakak/README.md index 5b41c8d8b..8af2b20e8 100644 --- a/apps/pdp10/diags/ka10/dakak/README.md +++ b/apps/pdp10/diags/ka10/dakak/README.md @@ -20,8 +20,9 @@ for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10 This diagnostic "TESTS THE MULTIPLY INSTRUCTION AND THE MULTIPLY ALGORITHM." -Resources for this diagnostic include: +Information regarding this diagnostic includes: +- [Issues](#issues) - [Instructions](#dakaktxt) - [History](#dakakhst) - [Source Code](#dakakmac) @@ -57,6 +58,37 @@ JavaScript parameters; e.g.: embedPDP10(...,'{commands:"a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm;../stor.klm'"}'); +Issues +------ + +As noted in [cpuops.js](/modules/pdp10/lib/cpuops.js), in the *doMUL()* function: + +> The DAKAK diagnostic contains the following code: + + 036174: 200240 043643 MOVE 5,43643 ; [43643] = 400000000000 + 036175: 200300 043603 MOVE 6,43603 ; [43603] = 777777777777 + 036176: 200140 043604 MOVE 3,43604 ; [43604] = 000000000001 + 036177: 224240 000003 MUL 5,3 ; Multiply 400000000000 by 000000000001 + 036200: 312240 043604 CAME 5,43604 ; high order result in AC should be: 000000000001 + 036201: 003240 033721 UUO 5,33721 ; + 036202: 312300 043602 CAME 6,43602 ; low order result in AC+1 should be: 000000000000 + +> The "natural" result is: + + 05=777777777777 06=400000000000 + +> And SIMH seems to agree. So why does the DEC diagnostic expect: + + 05=000000000001 06=000000000000 + +> The answer can be found in the [DECSYSTEM-10 and DECSYSTEM-20 Processor Reference Manual (June 1982)](http://archive.pcjs.org/pubs/dec/pdp10/kl10/AA-H391A-TK_DECsystem-10_DECSYSTEM-20_Processor_Reference_Jun1982.pdf), +in the description of the MUL instruction: + + CAUTION: In the KA10, an AC operand of 2^35 is treated as though it were +2^35, producing the + incorrect sign in the product. + +> This behavior is now simulated below for MODEL_KA10, at least to the extent that the diagnostic is happy. + --- DAKAK.TXT diff --git a/apps/pdp10/diags/ka10/dakal/README.md b/apps/pdp10/diags/ka10/dakal/README.md index f06eecba2..644087c69 100644 --- a/apps/pdp10/diags/ka10/dakal/README.md +++ b/apps/pdp10/diags/ka10/dakal/README.md @@ -21,8 +21,9 @@ for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10 This diagnostic "TESTS THE MULTIPY, INTERGER MULIPLY, DIVIDE AND INTERGER DIVIDE INSTRUCTIONS." Hopefully the tests work better than their spell-checking. -Resources for this diagnostic include: +Information regarding this diagnostic includes: +- [Issues](#issues) - [Instructions](#dakaltxt) - [History](#dakalhst) - [Source Code](#dakalmac) @@ -41,6 +42,345 @@ This command: 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,000000000004) PDP-10: 525252525250 JavaScript: 525252525250 @030654 + MUL(525252525252,000000000004) PDP-10: 525252525250 JavaScript: 525252525250 @030654 + MUL(525252525252,000000000010) PDP-10: 652525252520 JavaScript: 252525252520 @030667 + MUL(525252525252,000000000010) PDP-10: 652525252520 JavaScript: 252525252520 @030667 + MUL(525252525252,000000000020) PDP-10: 525252525240 JavaScript: 525252525240 @030702 + MUL(525252525252,000000000020) PDP-10: 525252525240 JavaScript: 525252525240 @030702 + MUL(525252525252,000000000040) PDP-10: 652525252500 JavaScript: 252525252500 @030715 + MUL(525252525252,000000000040) PDP-10: 652525252500 JavaScript: 252525252500 @030715 + MUL(525252525252,000000000100) PDP-10: 525252525200 JavaScript: 525252525200 @030730 + MUL(525252525252,000000000100) PDP-10: 525252525200 JavaScript: 525252525200 @030730 + MUL(525252525252,000000000200) PDP-10: 652525252400 JavaScript: 252525252400 @030743 + MUL(525252525252,000000000200) PDP-10: 652525252400 JavaScript: 252525252400 @030743 + MUL(525252525252,000000000400) PDP-10: 525252525000 JavaScript: 525252525000 @030756 + MUL(525252525252,000000000400) PDP-10: 525252525000 JavaScript: 525252525000 @030756 + MUL(525252525252,000000001000) PDP-10: 652525252000 JavaScript: 252525252000 @030771 + MUL(525252525252,000000001000) PDP-10: 652525252000 JavaScript: 252525252000 @030771 + MUL(525252525252,000000002000) PDP-10: 525252524000 JavaScript: 525252524000 @031004 + MUL(525252525252,000000002000) PDP-10: 525252524000 JavaScript: 525252524000 @031004 + MUL(525252525252,000000004000) PDP-10: 652525250000 JavaScript: 252525250000 @031017 + MUL(525252525252,000000004000) PDP-10: 652525250000 JavaScript: 252525250000 @031017 + MUL(525252525252,000000010000) PDP-10: 525252520000 JavaScript: 525252520000 @031032 + MUL(525252525252,000000010000) PDP-10: 525252520000 JavaScript: 525252520000 @031032 + MUL(525252525252,000000020000) PDP-10: 652525240000 JavaScript: 252525240000 @031045 + MUL(525252525252,000000020000) PDP-10: 652525240000 JavaScript: 252525240000 @031045 + MUL(525252525252,000000040000) PDP-10: 525252500000 JavaScript: 525252500000 @031060 + MUL(525252525252,000000040000) PDP-10: 525252500000 JavaScript: 525252500000 @031060 + MUL(525252525252,000000100000) PDP-10: 652525200000 JavaScript: 252525200000 @031073 + MUL(525252525252,000000100000) PDP-10: 652525200000 JavaScript: 252525200000 @031073 + MUL(525252525252,000000200000) PDP-10: 525252400000 JavaScript: 525252400000 @031106 + MUL(525252525252,000000200000) PDP-10: 525252400000 JavaScript: 525252400000 @031106 + MUL(525252525252,000000400000) PDP-10: 652525000000 JavaScript: 252525000000 @031121 + MUL(525252525252,000000400000) PDP-10: 652525000000 JavaScript: 252525000000 @031121 + MUL(525252525252,000001000000) PDP-10: 125252000000 JavaScript: 525252000000 @031134 + MUL(525252525252,000004000000) PDP-10: 125250000000 JavaScript: 525250000000 @031162 + MUL(525252525252,000020000000) PDP-10: 125240000000 JavaScript: 525240000000 @031210 + MUL(525252525252,000100000000) PDP-10: 125200000000 JavaScript: 525200000000 @031236 + MUL(525252525252,000400000000) PDP-10: 125000000000 JavaScript: 525000000000 @031264 + MUL(525252525252,002000000000) PDP-10: 124000000000 JavaScript: 524000000000 @031312 + MUL(525252525252,010000000000) PDP-10: 120000000000 JavaScript: 520000000000 @031340 + MUL(525252525252,040000000000) PDP-10: 100000000000 JavaScript: 500000000000 @031366 + MUL(525252525252,200000000000) PDP-10: 000000000000 JavaScript: 400000000000 @031414 + MUL(525252525252,400000000000) PDP-10: 000000000000 JavaScript: 000000000000 @031427 + MUL(252525252525,000000000002) PDP-10: 125252525252 JavaScript: 525252525252 @031461 + MUL(252525252525,000000000004) PDP-10: 252525252524 JavaScript: 252525252524 @031474 + MUL(252525252525,000000000010) PDP-10: 125252525250 JavaScript: 525252525250 @031507 + MUL(252525252525,000000000020) PDP-10: 252525252520 JavaScript: 252525252520 @031522 + MUL(252525252525,000000000040) PDP-10: 125252525240 JavaScript: 525252525240 @031535 + MUL(252525252525,000000000100) PDP-10: 252525252500 JavaScript: 252525252500 @031550 + MUL(252525252525,000000000200) PDP-10: 125252525200 JavaScript: 525252525200 @031563 + MUL(252525252525,000000000400) PDP-10: 252525252400 JavaScript: 252525252400 @031576 + MUL(252525252525,000000001000) PDP-10: 125252525000 JavaScript: 525252525000 @031611 + MUL(252525252525,000000002000) PDP-10: 252525252000 JavaScript: 252525252000 @031624 + MUL(252525252525,000000004000) PDP-10: 125252524000 JavaScript: 525252524000 @031637 + MUL(252525252525,000000010000) PDP-10: 252525250000 JavaScript: 252525250000 @031652 + MUL(252525252525,000000020000) PDP-10: 125252520000 JavaScript: 525252520000 @031665 + MUL(252525252525,000000040000) PDP-10: 252525240000 JavaScript: 252525240000 @031700 + MUL(252525252525,000000100000) PDP-10: 125252500000 JavaScript: 525252500000 @031713 + MUL(252525252525,000000200000) PDP-10: 252525200000 JavaScript: 252525200000 @031726 + MUL(252525252525,000000400000) PDP-10: 125252400000 JavaScript: 525252400000 @031741 + MUL(252525252525,000001000000) PDP-10: 252525000000 JavaScript: 252525000000 @031754 + MUL(252525252525,000002000000) PDP-10: 125252000000 JavaScript: 525252000000 @031767 + MUL(252525252525,000004000000) PDP-10: 252524000000 JavaScript: 252524000000 @032002 + MUL(252525252525,000010000000) PDP-10: 125250000000 JavaScript: 525250000000 @032015 + MUL(252525252525,000020000000) PDP-10: 252520000000 JavaScript: 252520000000 @032030 + MUL(252525252525,000040000000) PDP-10: 125240000000 JavaScript: 525240000000 @032043 + MUL(252525252525,000100000000) PDP-10: 252500000000 JavaScript: 252500000000 @032056 + MUL(252525252525,000200000000) PDP-10: 125200000000 JavaScript: 525200000000 @032071 + MUL(252525252525,000400000000) PDP-10: 252400000000 JavaScript: 252400000000 @032104 + MUL(252525252525,001000000000) PDP-10: 125000000000 JavaScript: 525000000000 @032117 + MUL(252525252525,002000000000) PDP-10: 252000000000 JavaScript: 252000000000 @032132 + MUL(252525252525,004000000000) PDP-10: 124000000000 JavaScript: 524000000000 @032145 + MUL(252525252525,010000000000) PDP-10: 250000000000 JavaScript: 250000000000 @032160 + MUL(252525252525,020000000000) PDP-10: 120000000000 JavaScript: 520000000000 @032173 + MUL(252525252525,040000000000) PDP-10: 240000000000 JavaScript: 240000000000 @032206 + MUL(252525252525,100000000000) PDP-10: 100000000000 JavaScript: 500000000000 @032221 + MUL(252525252525,200000000000) PDP-10: 200000000000 JavaScript: 200000000000 @032234 + MUL(252525252525,000000000002) PDP-10: 125252525252 JavaScript: 525252525252 @032301 + MUL(252525252525,000000000004) PDP-10: 252525252524 JavaScript: 252525252524 @032314 + MUL(252525252525,000000000010) PDP-10: 125252525250 JavaScript: 525252525250 @032327 + MUL(252525252525,000000000020) PDP-10: 252525252520 JavaScript: 252525252520 @032342 + MUL(252525252525,000000000040) PDP-10: 125252525240 JavaScript: 525252525240 @032355 + MUL(252525252525,000000000100) PDP-10: 252525252500 JavaScript: 252525252500 @032370 + MUL(252525252525,000000000200) PDP-10: 125252525200 JavaScript: 525252525200 @032403 + MUL(252525252525,000000000400) PDP-10: 252525252400 JavaScript: 252525252400 @032416 + MUL(252525252525,000000001000) PDP-10: 125252525000 JavaScript: 525252525000 @032431 + MUL(252525252525,000000002000) PDP-10: 252525252000 JavaScript: 252525252000 @032444 + MUL(252525252525,000000004000) PDP-10: 125252524000 JavaScript: 525252524000 @032457 + MUL(252525252525,000000010000) PDP-10: 252525250000 JavaScript: 252525250000 @032472 + MUL(252525252525,000000020000) PDP-10: 125252520000 JavaScript: 525252520000 @032505 + MUL(252525252525,000000040000) PDP-10: 252525240000 JavaScript: 252525240000 @032520 + MUL(252525252525,000000100000) PDP-10: 125252500000 JavaScript: 525252500000 @032533 + MUL(252525252525,000000200000) PDP-10: 252525200000 JavaScript: 252525200000 @032546 + MUL(252525252525,000000400000) PDP-10: 125252400000 JavaScript: 525252400000 @032561 + MUL(252525252525,000001000000) PDP-10: 252525000000 JavaScript: 252525000000 @032574 + MUL(252525252525,000002000000) PDP-10: 125252000000 JavaScript: 525252000000 @032607 + MUL(252525252525,000004000000) PDP-10: 252524000000 JavaScript: 252524000000 @032622 + MUL(252525252525,000010000000) PDP-10: 125250000000 JavaScript: 525250000000 @032635 + MUL(252525252525,000020000000) PDP-10: 252520000000 JavaScript: 252520000000 @032650 + MUL(252525252525,000040000000) PDP-10: 125240000000 JavaScript: 525240000000 @032663 + MUL(252525252525,000100000000) PDP-10: 252500000000 JavaScript: 252500000000 @032676 + MUL(252525252525,000200000000) PDP-10: 125200000000 JavaScript: 525200000000 @032711 + MUL(252525252525,000400000000) PDP-10: 252400000000 JavaScript: 252400000000 @032724 + MUL(252525252525,001000000000) PDP-10: 125000000000 JavaScript: 525000000000 @032737 + MUL(252525252525,002000000000) PDP-10: 252000000000 JavaScript: 252000000000 @032752 + MUL(252525252525,004000000000) PDP-10: 124000000000 JavaScript: 524000000000 @032765 + MUL(252525252525,010000000000) PDP-10: 250000000000 JavaScript: 250000000000 @033000 + MUL(252525252525,020000000000) PDP-10: 120000000000 JavaScript: 520000000000 @033013 + MUL(252525252525,040000000000) PDP-10: 240000000000 JavaScript: 240000000000 @033026 + MUL(252525252525,100000000000) PDP-10: 100000000000 JavaScript: 500000000000 @033041 + MUL(252525252525,200000000000) PDP-10: 200000000000 JavaScript: 200000000000 @033054 + MUL(252525252525,400000000000) PDP-10: 000000000000 JavaScript: 400000000000 @033067 + MUL(000001000000,000001000000) PDP-10: 000000000000 JavaScript: 000000000000 @033414 + MUL(000002000000,000002000000) PDP-10: 000000000000 JavaScript: 000000000000 @033427 + MUL(000004000000,000004000000) PDP-10: 000000000000 JavaScript: 000000000000 @033442 + MUL(000010000000,000010000000) PDP-10: 000000000000 JavaScript: 000000000000 @033455 + MUL(000020000000,000020000000) PDP-10: 000000000000 JavaScript: 000000000000 @033470 + MUL(000040000000,000040000000) PDP-10: 000000000000 JavaScript: 000000000000 @033503 + MUL(000100000000,000100000000) PDP-10: 000000000000 JavaScript: 000000000000 @033516 + MUL(000200000000,000200000000) PDP-10: 000000000000 JavaScript: 000000000000 @033531 + MUL(000400000000,000400000000) PDP-10: 000000000000 JavaScript: 000000000000 @033544 + MUL(001000000000,001000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033557 + MUL(002000000000,002000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033572 + MUL(004000000000,004000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033605 + MUL(010000000000,010000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033620 + MUL(020000000000,020000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033633 + MUL(040000000000,040000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033646 + MUL(100000000000,100000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033661 + MUL(200000000000,200000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033674 + MUL(400000000000,400000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033707 + MUL(400000000000,400000000000) PDP-10: 000000000000 JavaScript: 000000000000 @033707 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033726 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033726 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033741 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033741 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033754 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033754 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033767 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @033767 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034002 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034002 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034015 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034015 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034030 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034030 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034043 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034043 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034056 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034056 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034071 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034071 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034104 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034104 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034117 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034117 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034132 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034132 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034145 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034145 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034160 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034160 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034173 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034173 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034206 + MUL(000000777777,000000777777) PDP-10: 377776000001 JavaScript: 777776000001 @034206 + 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: 000002000001 @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: 000004000001 @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: 000010000001 @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: 000020000001 @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: 000040000001 @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: 000100000001 @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: 000200000001 @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: 000400000001 @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: 001000000001 @034364 + MUL(000000777400,000000777400) PDP-10: 377000200000 JavaScript: 777000200000 @034364 + MUL(000000777400,000000777400) PDP-10: 377000200000 JavaScript: 777000200000 @034364 + MUL(776777777777,776777777777) PDP-10: 002000000000 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: 004000000000 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: 010000000000 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: 020000000000 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: 040000000000 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: 100000000000 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: 200000000000 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: 000000000000 JavaScript: 400000000000 @034514 + MUL(000000600000,000000600000) PDP-10: 040000000000 JavaScript: 440000000000 @034514 + MUL(377777777777,377777777777) PDP-10: 000000000001 JavaScript: 000000000000 @034527 + MUL(000001000000,777776777777) PDP-10: 377777000000 JavaScript: 777777000000 @035054 + MUL(000002000000,777775777777) PDP-10: 377776000000 JavaScript: 777776000000 @035067 + MUL(000004000000,777773777777) PDP-10: 377774000000 JavaScript: 777774000000 @035102 + MUL(000010000000,777767777777) PDP-10: 377770000000 JavaScript: 777770000000 @035115 + MUL(000020000000,777757777777) PDP-10: 377760000000 JavaScript: 777760000000 @035130 + MUL(000040000000,777737777777) PDP-10: 377740000000 JavaScript: 777740000000 @035143 + MUL(000100000000,777677777777) PDP-10: 377700000000 JavaScript: 777700000000 @035156 + MUL(000200000000,777577777777) PDP-10: 377600000000 JavaScript: 777600000000 @035171 + MUL(000400000000,777377777777) PDP-10: 377400000000 JavaScript: 777400000000 @035204 + MUL(001000000000,776777777777) PDP-10: 377000000000 JavaScript: 777000000000 @035217 + MUL(002000000000,775777777777) PDP-10: 376000000000 JavaScript: 776000000000 @035232 + MUL(004000000000,773777777777) PDP-10: 374000000000 JavaScript: 774000000000 @035245 + MUL(010000000000,767777777777) PDP-10: 370000000000 JavaScript: 770000000000 @035260 + MUL(020000000000,757777777777) PDP-10: 360000000000 JavaScript: 760000000000 @035273 + MUL(040000000000,737777777777) PDP-10: 340000000000 JavaScript: 740000000000 @035306 + MUL(100000000000,677777777777) PDP-10: 300000000000 JavaScript: 700000000000 @035321 + MUL(200000000000,577777777777) PDP-10: 200000000000 JavaScript: 600000000000 @035334 + MUL(400000000000,377777777777) PDP-10: 000000000000 JavaScript: 400000000000 @035347 + MUL(000001000000,777776777777) PDP-10: 377777000000 JavaScript: 777777000000 @035674 + MUL(000002000000,777775777777) PDP-10: 377776000000 JavaScript: 777776000000 @035707 + MUL(000004000000,777773777777) PDP-10: 377774000000 JavaScript: 777774000000 @035722 + MUL(000010000000,777767777777) PDP-10: 377770000000 JavaScript: 777770000000 @035735 + MUL(000020000000,777757777777) PDP-10: 377760000000 JavaScript: 777760000000 @035750 + MUL(000040000000,777737777777) PDP-10: 377740000000 JavaScript: 777740000000 @035763 + MUL(000100000000,777677777777) PDP-10: 377700000000 JavaScript: 777700000000 @035776 + MUL(000200000000,777577777777) PDP-10: 377600000000 JavaScript: 777600000000 @036011 + MUL(000400000000,777377777777) PDP-10: 377400000000 JavaScript: 777400000000 @036024 + MUL(001000000000,776777777777) PDP-10: 377000000000 JavaScript: 777000000000 @036037 + MUL(002000000000,775777777777) PDP-10: 376000000000 JavaScript: 776000000000 @036052 + MUL(004000000000,773777777777) PDP-10: 374000000000 JavaScript: 774000000000 @036065 + MUL(010000000000,767777777777) PDP-10: 370000000000 JavaScript: 770000000000 @036100 + MUL(020000000000,757777777777) PDP-10: 360000000000 JavaScript: 760000000000 @036113 + MUL(040000000000,737777777777) PDP-10: 340000000000 JavaScript: 740000000000 @036126 + MUL(100000000000,677777777777) PDP-10: 300000000000 JavaScript: 700000000000 @036141 + MUL(200000000000,577777777777) PDP-10: 200000000000 JavaScript: 600000000000 @036154 + MUL(000000000010,377777777777) PDP-10: 377777777770 JavaScript: 777777777770 @000000 + MUL(000000000020,377777777777) PDP-10: 377777777760 JavaScript: 777777777760 @000000 + --- DAKAL.TXT diff --git a/modules/pdp10/lib/cpuops.js b/modules/pdp10/lib/cpuops.js index ec53adcac..011c702ab 100644 --- a/modules/pdp10/lib/cpuops.js +++ b/modules/pdp10/lib/cpuops.js @@ -6326,6 +6326,8 @@ PDP10.doDIV = function(dst, ext, src) * PDP-10 "DAKAK" Diagnostic Notes * ------------------------------- * + * The DAKAK diagnostic contains the following code: + * * 036174: 200240 043643 MOVE 5,43643 ; [43643] = 400000000000 * 036175: 200300 043603 MOVE 6,43603 ; [43603] = 777777777777 * 036176: 200140 043604 MOVE 3,43604 ; [43604] = 000000000001 diff --git a/modules/pdp10/lib/debugger.js b/modules/pdp10/lib/debugger.js index aaa5c7915..e59c86505 100644 --- a/modules/pdp10/lib/debugger.js +++ b/modules/pdp10/lib/debugger.js @@ -519,7 +519,16 @@ class DebuggerPDP10 extends Debugger { */ evalMUL(dst, src) { - return PDP10.doMUL.call(this.cpu, dst, src, false, true); + var result = PDP10.doMUL.call(this.cpu, dst, src, false, true); + if (MAXDEBUG) { + var resultJS = this.truncate(dst * src); + if (resultJS !== result) { + var sReference = this.macro10? (" @" + this.toStrBase(this.macro10.nLocation)) : ""; + var sResults = "PDP-10: " + this.toStrBase(result, 36) + " JavaScript: " + this.toStrBase(resultJS, 36); + this.println("MUL(" + this.toStrBase(dst, 36) + "," + this.toStrBase(src, 36) + ") " + sResults + sReference); + } + } + return result; } /**