Fixed a couple of PDP-10 opcode emulation bugs (AOBJN, AOBJP, and CMP), and rounded out the set of DEC's basic instruction diagnostics

This commit is contained in:
Jeff 2017-03-27 11:44:42 -07:00 committed by Jeff Parsons
commit 2a8c2a74d2
21 changed files with 29570 additions and 84 deletions

View file

@ -8,10 +8,10 @@ machines:
type: pdp10
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
debugger: true
commands: a 30724 /apps/pdp10/diags/klad/dakaa/MYDAKAA.MAC
commands: a 30724 /apps/pdp10/diags/klad/dakaa/DAKAA.MAC
---
Now that the PDPjs MACRO-10 Mini-Assembler is [limping along](/blog/2017/03/21/), it was time to start assembling some
Now that the PDPjs MACRO-10 Mini-Assembler is [limping along](/blog/2017/03/21/), it's time to start assembling some
of DEC's PDP-10 diagnostics and loading them into a test machine. The first diagnostic I tried was
[KA10 Basic Instruction Diagnostic #1 (MAINDEC-10-DAKAA-B-D)](/apps/pdp10/diags/klad/dakaa/), which has been loaded into
the machine below.
@ -20,9 +20,9 @@ the machine below.
Here were the results of my first run attempt:
>> a 30724 /apps/pdp10/diags/klad/dakaa/MYDAKAA.MAC
>> a 30724 /apps/pdp10/diags/klad/dakaa/DAKAA.MAC
starting PCjs MACRO-10 Mini-Assembler...
loading MYDAKAA.MAC
loading DAKAA.MAC
CPU will not be auto-started (click Run to start)
2844 words loaded at 030724-036357
00=000000000000 01=000000000000 02=000000000000 03=000000000000
@ -60,9 +60,9 @@ Happily, this was a good outcome, because 035057 is the end of the test. If you
Next, I tried [KA10 Basic Instruction Diagnostic #4 (MAINDEC-10-DAKAD-B-D)](/apps/pdp10/diags/klad/dakad/):
>> a 30724 /apps/pdp10/diags/klad/dakad/MYDAKAD.MAC
>> a 30724 /apps/pdp10/diags/klad/dakad/DAKAD.MAC
starting PCjs MACRO-10 Mini-Assembler...
loading MYDAKAD.MAC
loading DAKAD.MAC
1986 words loaded at 030724-034625
00=000000000000 01=000000000000 02=777777777777 03=000000000000
04=777777777777 05=000000000000 06=000000000000 07=777777777777
@ -91,8 +91,88 @@ Next, I tried [KA10 Basic Instruction Diagnostic #4 (MAINDEC-10-DAKAD-B-D)](/app
032005: 312140 034462 CAME 3,34462 ;history=2
032006: 254200 032007 HALT 32007 ;history=1
This looked less good.
This looked less good. Both AC3 and memory location 34462 contained 400000000000, so the CAME instruction should have
"skipped if equal." There was a bug in the [cpuops.js](/modules/pdp10/lib/cpuops.js) *CMP()* function:
```javascript
/**
* CMP(dst, src)
*
* Performs the SIGNED comparison (CMP) of two 36-bit operands.
*
* @param {number} dst (36-bit value)
* @param {number} src (36-bit value)
* @return {number} (dst - src)
*/
PDP10.CMP = function(dst, src)
{
return (dst < PDP10.INT_LIMIT? dst : dst - PDP10.WORD_LIMIT) - (src < PDP10.INT_LIMIT? src : src - PDP10.INT_LIMIT);
};
```
And here's the correction:
```javascript
return (dst < PDP10.INT_LIMIT? dst : dst - PDP10.WORD_LIMIT) - (src < PDP10.INT_LIMIT? src : src - PDP10.WORD_LIMIT);
```
Just a stupid typo. After fixing that and trying again, the diagnostic got a bit farther:
>> g
running
stopped (1119 instructions, 1118 cycles, 12 ms, 93167 hz)
00=000001000001 01=000000000000 02=000000000002 03=000000000003
04=000000000004 05=000000000005 06=000000000006 07=000000000007
10=000000000010 11=000000000011 12=000000000012 13=000000000013
14=000000000014 15=000000000015 16=000000000016 17=000000777723
PC=033446 RA=00033446 EA=033446 C0=0 C1=0 OV=0 ND=0 PD=0
033446: 324000 033447 JUMPA 0,33447
>> dh
033432: 253000 033434 AOBJN 0,33434 ;history=10
033434: 324000 033435 JUMPA 0,33435 ;history=9
033435: 200000 034573 MOVE 0,34573 ;history=8
033436: 252000 033440 AOBJP 0,33440 ;history=7
033437: 334000 000000 SKIPA 0,0 ;history=6
033441: 324000 033442 JUMPA 0,33442 ;history=5
033442: 474000 000000 SETO 0,0 ;history=4
033443: 253000 033444 AOBJN 0,33444 ;history=3
033444: 312000 034574 CAME 0,34574 ;history=2
033445: 254200 033446 HALT 33446 ;history=1
The problem here was that after `SETO 0,0`, AC0 contained 777777777777, so when AOBJN added 000001000001 to it, the result
should have been 000001000000, but because other another typo, this time in the *opAOBJN()* function:
```javascript
/**
* opAOBJN(0o253000): Add One to Both Halves of AC and Jump if Negative
*
* From the DEC PDP-10 System Reference Manual (May 1968), p. 2-41:
*
* Add 1000001 [base 8] to AC and place the result back in AC. If the result is less than zero
* (ie if bit 0 is 1, and hence a negative count in the left half has not yet reached zero or a positive
* count has reached 2^17), take the next instruction from location E and continue sequential operation
* from there.
*
* The incrementing of both halves of AC simultaneously is effected by adding 1000001 [base 8]. A count
* of -2 in AC left is therefore increased to zero if 2^18 - 1 is incremented in AC right.
*
* @this {CPUStatePDP10}
* @param {number} op
* @param {number} acc
*/
PDP10.opAOBJN = function(op, acc)
{
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_MASK;
this.writeWord(acc, dst);
if (dst >= PDP10.INT_LIMIT) this.setPC(this.regEA);
};
```
when `dst` became 0o1000001000000 and exceeded WORD_MASK (0o777777777777), it needed to be mod'ed with WORD_LIMIT (0o1000000000000),
not WORD_MASK, to truncate the value to 36 bits. Here's the corrected line:
```javascript
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_LIMIT;
```
*[@jeffpar](http://twitter.com/jeffpar)*
*Mar 24, 2017*

View file

@ -11,4 +11,6 @@ PCjs has archived selected files from
[PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html), including:
- [KA10 Basic Instruction Diagnostic #1 (MAINDEC-10-DAKAA-B-D)](dakaa/)
- [KA10 Basic Instruction Diagnostic #2 (MAINDEC-10-DAKAB-B-D)](dakab/)
- [KA10 Basic Instruction Diagnostic #3 (MAINDEC-10-DAKAC-B-D)](dakac/)
- [KA10 Basic Instruction Diagnostic #4 (MAINDEC-10-DAKAD-B-D)](dakad/)

View file

@ -1,15 +1,27 @@
;MACROS
; STOP - USED FOR SCOPE LOOP, IF INSTRUCTION FAILS, CHANGE (JUMPA .+1)
; TO A (JUMPA X) TO CYCLE ON FAILING INSTRUCTION
DEFINE STOP (A)<
HALT .+1 ;TEST FAILED IF PROGRAM HALTS HERE
JUMPA .+1 ;IF TEST FAILS, CHANGE THIS INSTRUCTION (JUMPA .+1)
;TO JUMPA X(X IS THE ADDRESS OF THE FIRST
;INSTRUCTION IN THE SUBTEST) TO LOOP ON ERROR
;AND CHANGE HALT INSTRUCTION TO JUMPA .+1>
SUBTTL DIAGNOSTIC SECTION
START: SETZM USER# ;CLEAR USER CONTROL WORD
JSP 0,.+1 ;GET FLAGS
TLNE USERF ;IN USER MODE?
SETOM USER ;YES, SET USER CONTROL WORD
SKIPN MONFLG ;SPECIAL USER MODE?
SETZM USER ;YES, CLEAR USER CONTROL WORD
SKIPN USER
JRST STARTA
SKIPL MONCTL
TTCALL 3,PGMNAM ;MENTION OUR NAME
START: ;SETZM USER# ;CLEAR USER CONTROL WORD
;JSP 0,.+1 ;GET FLAGS
;TLNE USERF ;IN USER MODE?
;SETOM USER ;YES, SET USER CONTROL WORD
;SKIPN MONFLG ;SPECIAL USER MODE?
;SETZM USER ;YES, CLEAR USER CONTROL WORD
;SKIPN USER
;JRST STARTA
;SKIPL MONCTL
;TTCALL 3,PGMNAM ;MENTION OUR NAME
JRST STARTA
PGMNAM: ASCIZ/
@ -1037,6 +1049,5 @@ SN=SN+1
;**********
>
ENDXX: JRST BEGEND ;LOOP PROGRAM
ENDXX:
;JRST BEGEND ;LOOP PROGRAM

View file

@ -1,27 +1,15 @@
;MACROS
; STOP - USED FOR SCOPE LOOP, IF INSTRUCTION FAILS, CHANGE (JUMPA .+1)
; TO A (JUMPA X) TO CYCLE ON FAILING INSTRUCTION
DEFINE STOP (A)<
HALT .+1 ;TEST FAILED IF PROGRAM HALTS HERE
JUMPA .+1 ;IF TEST FAILS, CHANGE THIS INSTRUCTION (JUMPA .+1)
;TO JUMPA X(X IS THE ADDRESS OF THE FIRST
;INSTRUCTION IN THE SUBTEST) TO LOOP ON ERROR
;AND CHANGE HALT INSTRUCTION TO JUMPA .+1>
SUBTTL DIAGNOSTIC SECTION
START: ;SETZM USER# ;CLEAR USER CONTROL WORD
;JSP 0,.+1 ;GET FLAGS
;TLNE USERF ;IN USER MODE?
;SETOM USER ;YES, SET USER CONTROL WORD
;SKIPN MONFLG ;SPECIAL USER MODE?
;SETZM USER ;YES, CLEAR USER CONTROL WORD
;SKIPN USER
;JRST STARTA
;SKIPL MONCTL
;TTCALL 3,PGMNAM ;MENTION OUR NAME
START: SETZM USER# ;CLEAR USER CONTROL WORD
JSP 0,.+1 ;GET FLAGS
TLNE USERF ;IN USER MODE?
SETOM USER ;YES, SET USER CONTROL WORD
SKIPN MONFLG ;SPECIAL USER MODE?
SETZM USER ;YES, CLEAR USER CONTROL WORD
SKIPN USER
JRST STARTA
SKIPL MONCTL
TTCALL 3,PGMNAM ;MENTION OUR NAME
JRST STARTA
PGMNAM: ASCIZ/
@ -1049,5 +1037,6 @@ SN=SN+1
;**********
>
ENDXX:
; JRST BEGEND ;LOOP PROGRAM
ENDXX: JRST BEGEND ;LOOP PROGRAM

View file

@ -7,14 +7,14 @@ machines:
type: pdp10
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
debugger: true
commands: a 30724 MYDAKAA.MAC
commands: a 30724 DAKAA.MAC
---
PDP-10 KA10 Basic Instruction Diagnostic #1
-------------------------------------------
The *PDP-10 KA10 Basic Instruction Diagnostic #1* (MAINDEC-10-DAKAA-B-D) test code has been extracted from
[DAKAA.MAC](DAKAA.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakaam.mac.html)]
[DAKAAM.MAC](DAKAAM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakaam.mac.html)]
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
Resources for this test include:
@ -32,9 +32,9 @@ The Debugger's assemble ("a") command can be used to test the new built-in
of the [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
This command:
a 30724 MYDAKAA.MAC
a 30724 DAKAA.MAC
will automatically read the [MYDAKAA.MAC](MYDAKAA.MAC.txt) source file (a slightly modified copy of [DAKAA.MAC](DAKAA.MAC.txt)),
will automatically read the [DAKAA.MAC](DAKAA.MAC.txt) source file (a slightly modified copy of [DAKAAM.MAC](DAKAAM.MAC.txt)),
assemble it, and then load the binary output at the specified address.
---

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,274 @@
---
layout: page
title: PDP-10 KA10 Basic Instruction Diagnostic #2
permalink: /apps/pdp10/diags/klad/dakab/
machines:
- id: testka10
type: pdp10
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
debugger: true
commands: a 30724 DAKAB.MAC
---
PDP-10 KA10 Basic Instruction Diagnostic #2
-------------------------------------------
The *PDP-10 KA10 Basic Instruction Diagnostic #2* (MAINDEC-10-DAKAB-B-D) test code has been extracted from
[DAKABM.MAC](DAKABM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakabm.mac.html)]
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
Resources for this test include:
- [Instructions](#dakabtxt)
- [History](#dakabhst)
- [Source Code](#dakabmac)
- [MACRO-10 Listing](DAKAB.LST.txt)
- [Additional Information](http://archive.pcjs.org/apps/pdp10/diags/klad/dakab/DAKAB.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](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
This command:
a 30724 DAKAB.MAC
will automatically read the [DAKAB.MAC](DAKAB.MAC.txt) source file (a slightly modified copy of [DAKABM.MAC](DAKABM.MAC.txt)),
assemble it, and then load the binary output at the specified address.
---
DAKAB.TXT
---------
```
MAINDEC-10-DAKAB.TXT
IDENTIFICATION
--------------
PRODUCT CODE: MAINDEC-10-DAKAB-B-D
PRODUCT NAME: DECSYSTEM10 PDP-10 KA10 BASIC
INSTRUCTION DIAGNOSTIC (2)
FUNCTION: BASIC INSTRUCTIONS 2
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-DAKAB.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 ERRORS
5.0 ITERATION COUNTER
6.0 CYCLE TIME
7.0 OPERATIONAL VARIATIONS
8.0 MISCELLANEOUS
9.0 LISTING
MAINDEC-10-DAKAB.TXT
PAGE 3
1.0 ABSTRACT
THIS PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC IS THE
SECOND IN A SERIES OF PDP-10 KA10 PROCESSOR DIAGNOSTICS.
THE DIAGNOSTIC TESTS SOME FOLLOWING INSTRUCTIONS.
MOVE, COMPARE, TEST, HALF WORD AND BOOLE.
IT ALSO TESTS THE ADDERS USING ADD AND COMPARE INSTRUCTIONS.
2.0 REQUIREMENTS
2.1 EQUIPMENT
A PDP-10 KA10 WITH A MINIMUM OF 32K OF MEMORY
PAPER TAPE READER
DECTAPE (OPTIONAL)
CONSOLE TELETYPE
2.2 STORAGE
THE PROGRAM RUNS WITHIN 32K OF MEMORY.
2.3 PRELIMINARY PROGRAMS
CONSOLE FUNCTIONS WORKING PROPERLY
PAPER TAPE OR DECTAPE READ-IN WORKING PROPERLY
PREVIOUS PROCESSOR DIAGNOSTICS
MAINDEC-10-DAKAB.TXT
PAGE 4
3.0 PROGRAM PROCEDURES
3.1 LOADING PROCEDURE
PAPER TAPE - HARDWARE READ-IN (READER DEVICE CODE 104)
DECTAPE - LOAD WITH DIAMON (DECTAPE DEVICE CODE 320)
3.2 STARTING PROCEDURE
STAND-ALONE STARTING ADDRESS IS 30000.
IF THE DIAGNOSTIC FAILS TO START CORRECTLY TRY STARTING AT THE
FIRST TEST INSTEAD OF AT THE BEGINNING OF THE CONTROL SEQUENCE.
(SEE LISTING).
3.3 OPERATING PROCEDURE
ONCE STARTED THE PROGRAM WILL CYCLE CONTINUALLY UNTIL STOPPED
OR AN ERROR OCCURS.
4.0 ERRORS
ERRORS ARE IN THE FORM OF HALT INSTRUCTIONS. THE LISTING
SHOULD BE CONSULTED TO DETERMINE THE CAUSE OF THE ERROR. A
NO OPERATION (JUMP) INSTRUCTION FOLLOWS EACH HALT. THIS
MAY BE USEFUL IN CONSTRUCTING A SCOPE LOOP TO CYCLE ON THE
FAILING INSTRUCTION.
5.0 ITERATION COUNTER
THE ITERATION COUNT OF THE PROGRAM IS DISPLAYED IN THE MEM-
ORY INDICATORS (MI). THIS COUNT IS A DECREMENTING COUNT AND
INITIALLY STARTS AT -1 IN STAND-ALONE OPERATION.
6.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-DAKAB.TXT
PAGE 5
7.0 OPERATIONAL VARIATIONS
A. DIAGNOSTIC MONITOR
THE PROGRAM IS USABLE WITH THE DIAGNOSTIC MONITOR TO PRO-
VIDE RELIABILITY TESTS, ACCEPTANCE TESTS, AND/OR TO PRO-
VIDE 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 PRO-
GRAM AND STARTS IT AT LOCATION 30002.
2. MONCTL - LOCATION 30043 IS USED AS THE DIAGNOSTIC MON-
ITOR CONTROL FLAG WORD.
B. USER MODE
THE PROGRAM WILL OPERATE IN USER MODE AND AS SUCH PROVIDES
ASSURANCE THAT THE PROCESSOR IS PERFORMING ALL FUNCTIONS
CORRECTLY. USER MODE STARTING ADDRESS IS 30000.
C. SYSTEM EXERCISER
STARTING ADDRESS IS 30003. NO DATA SWITCHES ARE USED BY
THIS PROGRAM.
8.0 MISCELLANEOUS
NONE
9.0 LISTING
```
DAKAB.HST
---------
THIS IS A HISTORY OF THE DEVELOPMENT OF MAINDEC-10-DAKAB
************************************************************************
PRODUCT CODE: MAINDEC-10-DAKAB
PRODUCT NAME: BASIC INSTRUCTION DIAGNOSTIC #2
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
************************************************************************
DAKAB.MAC
---------
[[Download](DAKAB.MAC.txt)]
{% highlight text %}
{% include_relative DAKAB.MAC.txt %}
{% endhighlight %}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,273 @@
---
layout: page
title: PDP-10 KA10 Basic Instruction Diagnostic #3
permalink: /apps/pdp10/diags/klad/dakac/
machines:
- id: testka10
type: pdp10
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
debugger: true
commands: a 30724 DAKAC.MAC
---
PDP-10 KA10 Basic Instruction Diagnostic #3
-------------------------------------------
The *PDP-10 KA10 Basic Instruction Diagnostic #3* (MAINDEC-10-DAKAC-B-D) test code has been extracted from
[DAKACM.MAC](DAKACM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakacm.mac.html)]
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
Resources for this test include:
- [Instructions](#dakactxt)
- [History](#dakachst)
- [Source Code](#dakacmac)
- [MACRO-10 Listing](DAKAC.LST.txt)
- [Additional Information](http://archive.pcjs.org/apps/pdp10/diags/klad/dakac/DAKAC.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](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
This command:
a 30724 DAKAC.MAC
will automatically read the [DAKAC.MAC](DAKAC.MAC.txt) source file (a slightly modified copy of [DAKACM.MAC](DAKACM.MAC.txt)),
assemble it, and then load the binary output at the specified address.
---
DAKAC.TXT
---------
```
MAINDEC-10-DAKAC.TXT
IDENTIFICATION
--------------
PRODUCT CODE: MAINDEC-10-DAKAC-B-D
PRODUCT NAME: DECSYSTEM10 PDP-10 KA10 BASIC
INSTRUCTION DIAGNOSTIC (3)
FUNCTION: LOGICAL, HALF WORD, ADDER
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-DAKAC.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 ERRORS
5.0 ITERATION COUNTER
6.0 CYCLE TIME
7.0 OPERATIONAL VARIATIONS
8.0 MISCELLANEOUS
9.0 LISTING
MAINDEC-10-DAKAC.TXT
PAGE 3
1.0 ABSTRACT
THIS PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC IS THE
THIRD IN A SERIES OF PDP-10 KA10 PROCESSOR DIAGNOSTICS.
THE DIAGNOSTIC TESTS SOME FOLLOWING INSTRUCTIONS.
LOGICAL TEST, HALF WORD INSTRUCTIONS AND THE ADDER.
2.0 REQUIREMENTS
2.1 EQUIPMENT
A PDP-10 KA10 WITH A MINIMUM OF 32K OF MEMORY
PAPER-TAPE READER
DECTAPE (OPTIONAL)
CONSOLE TELETYPE
2.2 STORAGE
THE PROGRAM RUNS WITHIN 32K OF MEMORY.
2.3 PRELIMINARY PROGRAMS
CONSOLE FUNCTIONS WORKING PROPERLY
PAPER-TAPE OR DECTAPE READ-IN WORKING PROPERLY
PREVIOUS PROCESSOR DIAGNOSTICS
MAINDEC-10-DAKAC.TXT
PAGE 4
3.0 PROGRAM PROCEDURES
3.1 LOADING PROCEDURE
PAPER TAPE - HARDWARE READ-IN (READER DEVICE CODE 104)
DECTAPE - LOAD WITH DIAMON (DECTAPE DEVICE CODE 320)
3.2 STARTING PROCEDURE
STAND-ALONE STARTING ADDRESS IS 30000.
IF THE DIAGNOSTIC FAILS TO START CORRECTLY TRY STARTING AT THE
FIRST TEST INSTEAD OF AT THE BEGINNING OF THE CONTROL SEQUENCE.
(SEE LISTING).
3.3 OPERATING PROCEDURE
ONCE STARTED THE PROGRAM WILL CYCLE CONTINUALLY UNTIL STOPPED
OR AN ERROR OCCURS.
4.0 ERRORS
ERRORS ARE IN THE FORM OF HALT INSTRUCTIONS. THE LISTING
SHOULD BE CONSULTED TO DETERMINE THE CAUSE OF THE ERROR. A
NO OPERATION (JUMP) INSTRUCTION FOLLOWS EACH HALT. THIS
MAY BE USEFUL IN CONSTRUCTING A SCOPE LOOP TO CYCLE ON THE
FAILING INSTRUCTION.
5.0 ITERATION COUNTER
THE ITERATION COUNT OF THE PROGRAM IS DISPLAYED IN THE MEM-
ORY INDICATORS (MI). THIS COUNT IS A DECREMENTING COUNT AND
INITIALLY STARTS AT -1 IN STAND-ALONE OPERATION.
6.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-DAKAC.TXT
PAGE 5
7.0 OPERATIONAL VARIATIONS
A. DIAGNOSTIC MONITOR
THE PROGRAM IS USABLE WITH THE DIAGNOSTIC MONITOR TO PRO-
VIDE RELIABILITY TESTS, ACCEPTANCE TESTS, AND/OR TO PRO-
VIDE 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 PRO-
GRAM AND STARTS IT AT LOCATION 30002.
2. MONCTL - LOCATION 30043 IS USED AS THE DIAGNOSTIC MON-
ITOR CONTROL FLAG WORD.
B. USER MODE
THE PROGRAM WILL OPERATE IN USER MODE AND AS SUCH PROVIDES
ASSURANCE THAT THE PROCESSOR IS PERFORMING ALL FUNCTIONS
CORRECTLY. USER MODE STARTING ADDRESS IS 30000.
C. SYSTEM EXERCISER
STARTING ADDRESS IS 30003. NO DATA SWITCHES ARE USED BY
THIS PROGRAM.
8.0 MISCELLANEOUS
NONE
9.0 LISTING
```
DAKAC.HST
---------
THIS IS A HISTORY OF THE DEVELOPMENT OF MAINDEC-10-DAKAC
************************************************************************
PRODUCT CODE: MAINDEC-10-DAKAC
PRODUCT NAME: BASIC INSTRUCTION DIAGNOSTIC #3
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
************************************************************************
DAKAC.MAC
---------
[[Download](DAKAC.MAC.txt)]
{% highlight text %}
{% include_relative DAKAC.MAC.txt %}
{% endhighlight %}

View file

@ -35,16 +35,16 @@ DEFINE SFLAG (A)<
JRST 2,.+1(1) ;SET A FLAG>
SUBTTL DIAGNOSTIC SECTION
START: SETZM USER# ;CLEAR USER CONTROL WORD
JSP 0,.+1 ;GET FLAGS
TLNE USERF ;IN USER MODE?
SETOM USER ;YES, SET USER CONTROL WORD
SKIPN MONFLG ;SPECIAL USER MODE?
SETZM USER ;YES, CLEAR USER CONTROL WORD
SKIPN USER
JRST C00
SKIPL MONCTL
TTCALL 3,PGMNAM ;MENTION OUR NAME
START: ;SETZM USER# ;CLEAR USER CONTROL WORD
;JSP 0,.+1 ;GET FLAGS
;TLNE USERF ;IN USER MODE?
;SETOM USER ;YES, SET USER CONTROL WORD
;SKIPN MONFLG ;SPECIAL USER MODE?
;SETZM USER ;YES, CLEAR USER CONTROL WORD
;SKIPN USER
;JRST C00
;SKIPL MONCTL
;TTCALL 3,PGMNAM ;MENTION OUR NAME
JRST STARTA
PGMNAM: ASCIZ/
@ -2051,4 +2051,4 @@ C22700: SETZM 2 ;INITIALIZE AC
;**********
JRST BEGEND
;JRST BEGEND

View file

@ -35,16 +35,16 @@ DEFINE SFLAG (A)<
JRST 2,.+1(1) ;SET A FLAG>
SUBTTL DIAGNOSTIC SECTION
START: ;SETZM USER# ;CLEAR USER CONTROL WORD
;JSP 0,.+1 ;GET FLAGS
;TLNE USERF ;IN USER MODE?
;SETOM USER ;YES, SET USER CONTROL WORD
;SKIPN MONFLG ;SPECIAL USER MODE?
;SETZM USER ;YES, CLEAR USER CONTROL WORD
;SKIPN USER
;JRST C00
;SKIPL MONCTL
;TTCALL 3,PGMNAM ;MENTION OUR NAME
START: SETZM USER# ;CLEAR USER CONTROL WORD
JSP 0,.+1 ;GET FLAGS
TLNE USERF ;IN USER MODE?
SETOM USER ;YES, SET USER CONTROL WORD
SKIPN MONFLG ;SPECIAL USER MODE?
SETZM USER ;YES, CLEAR USER CONTROL WORD
SKIPN USER
JRST C00
SKIPL MONCTL
TTCALL 3,PGMNAM ;MENTION OUR NAME
JRST STARTA
PGMNAM: ASCIZ/
@ -2051,4 +2051,4 @@ C22700: SETZM 2 ;INITIALIZE AC
;**********
; JRST BEGEND
JRST BEGEND

View file

@ -7,14 +7,14 @@ machines:
type: pdp10
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
debugger: true
commands: a 30724 MYDAKAD.MAC
commands: a 30724 DAKAD.MAC
---
PDP-10 KA10 Basic Instruction Diagnostic #4
-------------------------------------------
The *PDP-10 KA10 Basic Instruction Diagnostic #4* (MAINDEC-10-DAKAD-B-D) test code has been extracted from
[DAKAD.MAC](DAKAD.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakadm.mac.html)]
[DAKADM.MAC](DAKADM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakadm.mac.html)]
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
Resources for this test include:
@ -32,9 +32,9 @@ The Debugger's assemble ("a") command can be used to test the new built-in
of the [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
This command:
a 30724 MYDAKAD.MAC
a 30724 DAKAD.MAC
will automatically read the [MYDAKAD.MAC](MYDAKAD.MAC.txt) source file (a slightly modified copy of [DAKAD.MAC](DAKAD.MAC.txt)),
will automatically read the [DAKAD.MAC](DAKAD.MAC.txt) source file (a slightly modified copy of [DAKADM.MAC](DAKADM.MAC.txt)),
assemble it, and then load the binary output at the specified address. Use the command `db 30724` to dump the first few words
of binary data:
@ -246,7 +246,6 @@ SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
NONE
9.0 LISTING
```
DAKAD.HST

View file

@ -0,0 +1,12 @@
dep 100 JFCL 17,101
dep 101 MOVEI 1,1
dep 102 SUBI 1,1
dep 103 JFCL 17,104
dep 104 SUBI 1,1
dep 105 MOVSI 1,400000
dep 106 ADDI 1,1
dep 107 SUBI 1,1
dep 110 JFCL 17,111
dep 111 SUBI 1,1
dep pc 100
do t

View file

@ -0,0 +1,11 @@
A 100;
JFCL 17,101;
MOVEI 1,1;
SUBI 1,1;
JFCL 17,104;
SUBI 1,1;
MOVSI 1,400000;
ADDI 1,1;
SUBI 1,1;
JFCL 17,111;
SUBI 1,1;

View file

@ -2160,7 +2160,7 @@ PDP10.opBLT = function(op, acc)
*/
PDP10.opAOBJP = function(op, acc)
{
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_MASK;
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_LIMIT;
this.writeWord(acc, dst);
if (dst < PDP10.INT_LIMIT) this.setPC(this.regEA);
};
@ -2184,7 +2184,7 @@ PDP10.opAOBJP = function(op, acc)
*/
PDP10.opAOBJN = function(op, acc)
{
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_MASK;
var dst = (this.readWord(acc) + 0o000001000001) % PDP10.WORD_LIMIT;
this.writeWord(acc, dst);
if (dst >= PDP10.INT_LIMIT) this.setPC(this.regEA);
};
@ -6500,7 +6500,7 @@ PDP10.CLR = function(dst, src)
*/
PDP10.CMP = function(dst, src)
{
return (dst < PDP10.INT_LIMIT? dst : dst - PDP10.WORD_LIMIT) - (src < PDP10.INT_LIMIT? src : src - PDP10.INT_LIMIT);
return (dst < PDP10.INT_LIMIT? dst : dst - PDP10.WORD_LIMIT) - (src < PDP10.INT_LIMIT? src : src - PDP10.WORD_LIMIT);
};
/**

View file

@ -172,7 +172,6 @@ class DebuggerPDP10 extends Debugger {
this.nStep = 0;
this.sCmdTracePrev = null;
this.sCmdDumpPrev = null;
this.fIgnoreNextCheckFault = false; // TODO: Does this serve any purpose on a PDP-11?
this.nSuppressBreaks = 0;
this.cInstructions = this.cInstructionsStart = 0;
this.nCycles = this.nCyclesStart = this.msStart = 0;
@ -2607,7 +2606,7 @@ class DebuggerPDP10 extends Debugger {
}
var sOptions = asArgs[0].substr(1);
var match = sOpcode.match(/^(['"]?)(.*\.mac)\1$/i);
var match = sOpcode.match(/^(['"]?)(.*\.mac|.*\.html)\1$/i);
if (match) {
var dbg = this;
if (this.macro10) {
@ -3327,9 +3326,6 @@ class DebuggerPDP10 extends Debugger {
*/
doRun(sCmd, sAddr, sOptions, fQuiet)
{
if (sCmd == "gt") {
this.fIgnoreNextCheckFault = true;
}
if (sAddr !== undefined) {
var dbgAddr = this.parseAddr(sAddr);
if (!dbgAddr) return;

View file

@ -348,7 +348,7 @@ class Macro10 {
* If the "preprocess" option is set, then just return the plain text we retrieved.
*/
if (this.sOptions.indexOf('p') >= 0) {
this.println(this.asLines.join());
this.println(this.asLines.join(""));
return 0;
}
@ -577,6 +577,7 @@ class Macro10 {
this.addMacro(sOperator, sRemainder);
break;
case Macro10.PSEUDO_OP.LALL: // TODO
case Macro10.PSEUDO_OP.PAGE: // TODO
case Macro10.PSEUDO_OP.SUBTTL: // TODO
case Macro10.PSEUDO_OP.TITLE: // TODO
@ -1417,6 +1418,7 @@ Macro10.PSEUDO_OP = {
IFN: "IFN",
IRP: "IRP",
IRPC: "IRPC",
LALL: "LALL",
LITERAL: "LITERAL", // this is a pseudo-pseudo-op, used for internal purposes
PAGE: "PAGE",
REPEAT: "REPEAT",