527 lines
13 KiB
Text
527 lines
13 KiB
Text
.title AC-E664G-MC_CXCPAG0-Processor-test_Sep78
|
|
;
|
|
; original code OCRed from
|
|
; http://www.bitsavers.org/pdf/dec/pdp11/xxdp/listings/AC-E664G-MC_CXCPAG0-Processor-test_Sep78.pdf
|
|
;
|
|
; Changed to run standalone without monitor
|
|
; JH
|
|
|
|
.LIST BIN
|
|
.ENABLE AMA ; relocatable addresses as absolute
|
|
|
|
;**********************************************************************
|
|
.asect
|
|
|
|
SPSIZ=040 ; stack size
|
|
|
|
; is called on every error
|
|
.MACRO HRDER$
|
|
HALT ; just halt on error
|
|
HALT ; force3 word size, like in original
|
|
HALT
|
|
.ENDM
|
|
|
|
;MODNAM: .ASCII /CPAG / ;MODULE NAME
|
|
;**********************************************************************
|
|
INIT: START ;MODULE START ADDRE.
|
|
SPOINT: MODSP ;MODULE STACK POINTER.
|
|
PASCNT: 0 ;PASS COUNTER.
|
|
|
|
|
|
.=220 ; generate same addresses as in original
|
|
|
|
|
|
|
|
START:
|
|
MOV SPOINT,SP ; load stack pointer
|
|
|
|
|
|
;**********************************************************************
|
|
;CHECK BRANCH INSTRUCTIONS
|
|
RESTRT: CCC
|
|
BCS CC0
|
|
BVS CC0
|
|
BEQ CC0
|
|
BMI CC0
|
|
BLT CC0
|
|
BLE CC0
|
|
BLOS CC0
|
|
BHI CON1
|
|
CC0:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CONTINUE
|
|
CON1: SEV ;CC'S=1010
|
|
SEN
|
|
BVC CC2
|
|
BLT CC2
|
|
BLE CC2
|
|
BGE CON3
|
|
CC2:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
;CONTINUE
|
|
CON3: SEZ ;CC'S=1111
|
|
SEC
|
|
BNE CC4
|
|
BGT CC4
|
|
BHI CC4
|
|
BLE YT15:
|
|
CC4:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
|
|
|
|
|
|
;CHECK UNARY WORD OPS USING ADDRESS MODES 3 AND 5
|
|
YT15: BR 1$
|
|
.WORD 0
|
|
.WORD 0
|
|
1$: MOV PC,R3
|
|
SUB #4,R3
|
|
CLR (R3)
|
|
MOV R3,R0
|
|
TST -(R3)
|
|
MOV R0,(R3)
|
|
MOV R3,R4
|
|
CCC
|
|
TST @(R3)+ ;(R0)=000000,CC=0100
|
|
BEQ 2$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
2$: SEC
|
|
ROR @-(R3) ;(R0)=100000,CC=0101
|
|
BCS ROR5
|
|
BVC ROR5
|
|
BMI RD
|
|
ROR5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD: CCC
|
|
ASR @(R4)+ ;(R0)=140000,CC=1010
|
|
BVC ASR3
|
|
BMI RD1
|
|
ASR3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD1: CLN
|
|
ASL @(R3)+ ;(R0)=100000,CC=1001
|
|
BCC ASL3
|
|
BVS ASL3
|
|
BMI RD2
|
|
ASL3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD2: SCC
|
|
DEC @-(R4) ;(R0)=077777,CC=0010
|
|
BCC DEC5
|
|
BVC DEC5
|
|
BEQ DEC5
|
|
BPL RD3
|
|
DEC5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD3: NEG @-(R3) ;(R0)=100001, C=1001
|
|
BCC NEG5
|
|
BVS NEG5
|
|
BMI RD4
|
|
NEG5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD4: SEV
|
|
COM @(R4)+ ;(R0)=077776, C=0001
|
|
BCC COM3
|
|
BVC RD5
|
|
COM3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD5: INC @(R3)+ ;(R0)=077777, C=0001
|
|
BCC INC3
|
|
BPL RD6
|
|
INC3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD6: ADC @-(R4) ;(R0)=100000, C=1010
|
|
BCS ADC5
|
|
BVC ADC5
|
|
BMI RD7
|
|
ADC5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD7: CCC
|
|
ROL @(R4)+ ;(R0)=000000, C=0111
|
|
BCC ROL3
|
|
BVC ROL3
|
|
BEQ RD8
|
|
ROL3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
RD8: INC @-(R3) ;(R0)=000001, C=0001
|
|
SBC @-(R4) ;(R0)=000000, C=0100
|
|
BCS SBC5
|
|
BEQ RD9
|
|
SBC5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CHECK UNARY BYTE OPS USING ADDRESS MODES 3 AND 4
|
|
RD9: BR 1$ ; RESERVE 3 WORDS
|
|
.WORD 0 ;1 FOR EVEN BYTE ADDRESS
|
|
.WORD 0 ;1 FOR ODD BYTE ADDRESS
|
|
.WORD 0 ;AND 1 FOR DATA
|
|
1$: MOV PC,R2
|
|
TST -(R2) ;BACK R2 UP TO
|
|
TST -(R2) ;DATA WORD
|
|
MOV R2,R0 ;R0 POINTS TO THE DATA WORD
|
|
CLR (R0) ;PRESET DATA
|
|
TST -(R2) ;BACK R2 UP TO
|
|
TST -(R2) ;EVEN BYTE ADDRESS WORD
|
|
MOV R0,(R2)+ ;LOAD ADDRESS
|
|
INC R0 ;ODD BYTE ADDRESS
|
|
MOV R0,(R2)+ ;LOAD ODD BYTE ADDRESS
|
|
MOV R2,R0 ;RESET R0
|
|
MOV R2,R5
|
|
|
|
COMB @-(R2) ;(R0)=177400, CC=1001
|
|
BCC COMB5
|
|
BMI TE
|
|
COMB5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE: TSTB @-(R2) ;(R0)=177400, CC=0100
|
|
BEQ 1$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
1$: SEV
|
|
ASRB @-(R5) ;(R0)=177400, CC=1001
|
|
BCC ASRB5
|
|
BVS ASRB5
|
|
BMI TE1
|
|
ASRB5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE1: INCB @(R2)+ ;(R0)=177401, CC=000
|
|
BCC INCB3
|
|
BPL TE2
|
|
INCB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE2: CLC
|
|
RORB @-(R5) ;(R0)=177400, CC=0111
|
|
BCC RORB5
|
|
BVC RORB5
|
|
BNE RORB5
|
|
BPL TE3
|
|
RORB5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE3: ASLB @(R2)+ ;(R0)=177000, CC=1001
|
|
BCC ASLB3
|
|
BVS ASLB3
|
|
BMI TE4
|
|
ASLB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE4: ADCB @-(R2) ;(R0)=177400, CC=1000
|
|
BCS ADCB5
|
|
BMI TE5:
|
|
ADCB5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE5: SCC
|
|
ROLB @(R5)+ ;(R0)=177401, CC=0000
|
|
BLOS ROLB3 ;BRANCH IF C OR Z IS SET
|
|
BVS ROLB3
|
|
BPL TE6
|
|
ROLB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE6: SWAB @-(R2) ;(R0)=000777, C=1000
|
|
BMI 1$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
1$: SEC
|
|
SBCB @(R5)+ ;(R0)=000377, CC=0100
|
|
BCS SBCB3
|
|
BEQ TE7
|
|
SBCB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
TE7: NEGB @(R2)+ ;(R0)=000001
|
|
DECB @-(R2) ;(R0)=000000, CC=0101
|
|
BCC DECB5
|
|
BEQ B1
|
|
DECB5:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CHECK BINARY WORD OPS USING ADDRESS MODES 3 & b5.
|
|
B1: BR 1$ ; RESERVE SPACE FOR DATA AND ADDRESSES
|
|
.WORD 0 ;CONTAINS ADDRESS OF SOURCE DATA
|
|
.WORD 0 ;CONTAINS ADDRESS OF DEST DATA
|
|
.WORD 0 ;CONTAINS SOURCE DATA
|
|
.WORD 0 ;CONTAINS DEST DATA
|
|
1$: MOV PC,R1
|
|
MOV R1,R0 ;SET SCOPE PTR
|
|
CMP -(R0),-(R0) ;ADJUST R0
|
|
MOV R0,R5 ;R5 POINTS TO DEST DATA
|
|
CMP -(R5),-(R5) ;SUB 4 FROM R5
|
|
MOV R0,(R5) ;R5 POINTS TO ADDRESS OF DEST DATA
|
|
MOV R5,R2
|
|
MOV R0,R4 ;R4 POINTS TO DEST DATA
|
|
TST -(R0)
|
|
MOV R0,R3 ;R3 POINTS TO SOURCE DATA
|
|
MOV R0,-(R2) ;R2 POINTS TO ADDRESS OF SOURCE DATA
|
|
CLR (R3) ;PRESET SOURCE DATA
|
|
CLR (R4) ;PRESET DEST DATA
|
|
|
|
SCC
|
|
CLZ
|
|
SUB @(R2)+,@(R5)+ ;(R3)=000000,(R4)=000000, CC=0100
|
|
BCS SUB3
|
|
BVS SUB3
|
|
BEQ H3
|
|
SUB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
H3: BIS #100000,@-(R2) ;(R3)=100000
|
|
ADD #1,@-(R5) ;(R4)=000001
|
|
SUB @(R2)+,@(R5)+ ;(R3)=100000,(R4)=10001, CC=1011
|
|
BCC SUB3A
|
|
BVC SUB3A
|
|
BMI H4
|
|
SUB3A:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
H4: NEG (R4) ;(R4)=077777
|
|
BIT @-(R2),@-(R5) ;(R3)=100000,(R4)=077777
|
|
BEQ 1$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
1$: CMP @(R2)+,@(R5)+
|
|
BVS 2$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
2$: COM @-(R2)
|
|
CCC
|
|
ADD @(R2)+,@-(R5)
|
|
BVC ADD3
|
|
BMI H41
|
|
ADD3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
H41: SEC
|
|
BIC @-(R2),@(R5)+ ;(R3)=077777,(R4)=100000
|
|
BCC BIC3
|
|
BMI H5
|
|
BIC3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
H5: COM @-(R5) ;(R4)=077777
|
|
CMP @(R2)+,@(R5)+ ;(R3)=077777,(R4)=077777
|
|
BEQ H6
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CHECK BINARY BYTE OPS USING ADDRESS MODES 3 & 5
|
|
H6: BR 1$ ;RESERVE SPACE FOR ADDRESSES & DATA
|
|
.WORD 0 ;CONTAINS ADDRESS OF SOURCE DATA (EVEN BYTE)
|
|
.WORD 0 ;CONTAINS ADDRESS OF SOURCE DATA (ODD BYTE)
|
|
.WORD 0 ;CONTAINS ADDRESS OF DEST DATA (EVEN BYTE)
|
|
.WORD 0 ;CONTAINS ADDRESS OF DEST DATA (ODD BYTE)
|
|
.WORD 0 ;CONTAINS SOURCE DATA
|
|
.WORD 0 ;CONTAINS DEST DATA
|
|
1$: MOV PC,R0
|
|
CMP -(R0),-(R0) ;R0=ADDRESS OF DEST DATA
|
|
MOV R0,R3 ;R3 " "
|
|
MOV R3,R5 ;R3 " "
|
|
TST -(R3) ; SUB2 FROm R3
|
|
MOV R0,-(R3) ;R3 POINTS TO ADDRESS OF DEST DATA
|
|
INC (R3) ;ODD BYTE
|
|
MOV R0,-(R3) ;EVEN BYTE
|
|
MOV R3,R4
|
|
TST -(R0) ;R0=ADDRESS OF SOURCE DATA
|
|
MOV R0,-(R4) ;R4 POINTS TO ADDRESS OF SOURCE DATA
|
|
INC (R4) ;ODD BYTE
|
|
MOV R0,-(R4) ;EVEN BYTE
|
|
|
|
SEC ;SET CARRY
|
|
MOV #177001,@(R4)+
|
|
MOVB #200,@(R4)+ ;SOURCE DATA=100001
|
|
MOVB @-(R4),@(R3)+ ;
|
|
MOVB @-(R4),@(R3)+ ;DEST DATA=000600
|
|
BCS 2$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
2$: CMP #600,(R5) ;CHECK DEST DATA
|
|
BEQ 3$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
3$: CMP -(R3),-(R3) ;POINT R4 BACK TO EVEN BYTE
|
|
BISB @(R4)+,@(R3)+
|
|
BISB @(R4)+,@(R3)+ ;DEST DATA=100601
|
|
CMP #100601,(R5) ;CHECK RESULT
|
|
BEQ 4$
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
4$: BICB @-(R4),@-(R3)
|
|
BICB @-(R4),@-(R3)
|
|
BITB @(R4)+,@(R3)+
|
|
BNE BITB3
|
|
BITB @-(R4),@(R3)+
|
|
BNE H7
|
|
BITB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
H7: CMPB @(R4)+,@-(R3)
|
|
BNE CMPB3
|
|
CMPB @(R4)+,@-(R3)
|
|
BEQ JP1
|
|
CMPB3:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CHECK JUMP INSTRUCTIONS
|
|
JP1: MOV PC,R0
|
|
ADD #12,R0 ;SET ADDRESS FOR JUMP INST
|
|
SCC
|
|
JMP (R0)
|
|
2$: BR 3$
|
|
CLN ;JMP INST JUMPS HERE
|
|
BR 2$
|
|
|
|
3$: BCC JMP1
|
|
BVC JMP1
|
|
BNE JMP1
|
|
BPL K2
|
|
JMP1:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
K2: CLR R2 ;SET INDICATOR
|
|
MOV PC,R4 ;SET UP JUMP REGISTER
|
|
MOV R4,R0 ;SET UP CHECK REGISTER
|
|
BR 1$
|
|
COM R2 ;COMPLEMENT INDICATOR
|
|
BR 2$
|
|
1$: CMP (R4)+,(R4)+
|
|
TST (R4)+ ;R4=JMP ADDRESS
|
|
JMP -(R4) ;USE R4 AS ADDRESS
|
|
2$: INC R2 ;CHECK INDICATOR
|
|
BNE JMP4
|
|
CMP (R0)+,(R0)+
|
|
CMP R0,R4 ;CHECK AUTO-DEC R4
|
|
BEQ JSRTST
|
|
JMP4:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
;CHECK JSR INSTRUCTIONS
|
|
JSRTST: MOV #3$,R2 ;FORM DEST ADRS
|
|
SCC ;PRESET CC'S
|
|
CLV
|
|
JSR R5,(R2) ;GO TO 3$ VIA R2
|
|
1$: TST R2 ;CHECK INDICATOR
|
|
BNE JSR1 ;R2 SHOULD=0
|
|
BR EX
|
|
2$: RTS R5 ;RETURN FROM SUB ROUTINE
|
|
3$: BCC JSR1 ;CHECK THAT JSR DID NOT
|
|
BVS JSR1
|
|
BNE JSR1 ;AFFECT CC'S
|
|
BPL JSR1
|
|
CLR R2 ;CLEAR INDICATOR
|
|
MOV #1$,R4 ;GET RETURN ADDRESS
|
|
BR 2$
|
|
JSR1:
|
|
;**************************************************************
|
|
HRDER$,BEGIN,NULL ;
|
|
;**************************************************************
|
|
|
|
EX:
|
|
; ENDIT$,BEGIN ;SIGNAL END OF ITERATION
|
|
;MONITOR SHALL TEst END OF PASS
|
|
HALT
|
|
ST: JMP RESTRT
|
|
|
|
|
|
; stack area has to be beyond 000400
|
|
.REPT SPSIZ ;MODULE STACK STARTS HERE
|
|
.NLIST
|
|
.WORD 0
|
|
.LIST
|
|
.ENDR
|
|
MODSP: ; module stack base
|
|
|
|
|
|
.END
|