.TITLE CAIOS TEST A=%1 B=%2 C=%3 T=%4 TT=%5 SP=%6 PC=%7 PS=-2 .MACRO CALL ROUT JSR PC,ROUT .ENDM CALL .MACRO RET RTS PC .ENDM RET .MACRO PUSH RS .IRP R, MOV R,-(SP) .ENDM .ENDM PUSH .MACRO POP RS .IRP R, MOV (SP)+,R .ENDM .ENDM POP .INSRT CHAOS;CHS DEFS .=4 NXMBRK 5_5 .=1000 STEND:: GO: JMP BEG GO1: MOV #1,A ;LOOPBACK START (JUST TESTS THE INTERFACE ALONE) JMP BEG1 NPASS: 0 ;NUMBER OF PASSES SRC: 0 ;MY SRC ADR DST: 0 ;MY DST ADR ADST: .-. ;DEST TO SEND TO THIS TIME SPYM: 0 ;NON-ZERO => SPY MODE PATTER: 0 ;POINTER TO PATTERN GENERATOR PATN: 0 ;ARG TO .. MSGL: 0 ;NUMBER OF WORDS IN MESSAGE MSGBUF: .BLKW 256. ;MESSAGE NXMBRK: JSR PC,LOSE RTI BPTACS: .BLKW 8 TPC=.-2 CAMCSR: 0 ;CALL HERE ON LOSSAGE LOSE: MOV (SP)+,BPTACS+14. .REPT 7 MOV %0+.RPCNT,BPTACS+<2*.RPCNT> .ENDR MOV CAICSR,CAMCSR LOSE1: WAIT BR LOSE1 .REPT 7 MOV BPTACS+<2*.RPCNT>,%0+.RPCNT .ENDR JMP @BPTACS+14. ;PATTERN GENERATORS PZERO: CLR (A)+ RET PMONE: CLR (A) COM (A)+ RET PALTB: TST PATN BNE 1$ MOV #125252,PATN 1$: COM PATN MOV PATN,(A)+ RET PFLOT1: TST PATN BNE 1$ INC PATN 1$: MOV PATN,(A)+ ASL PATN RET PFLOT0: TST PATN BNE 1$ 2$: MOV #077776,PATN 1$: TST PATN BMI 2$ SEC ROL PATN MOV PATN,(A)+ RET PADR: INC PATN MOVB PATN,(A)+ MOVB PATN,(A)+ RET ;HERE IF INTERRUPT EXPECTED INTYES: MOV #3$,270 MOV #240,272 CLR PS CLR A 1$: DEC A BNE 1$ JSR PC,LOSE ;TIME OUT AND NO INT 2$: MOV #5_5,PS RET 3$: CMP (SP)+,(SP)+ BR 2$ ;HERE IF INTERRUPT NOT EXPECTED INTNO: MOV #3$,270 MOV #240,272 CLR PS MOV #2000.,A 1$: DEC A BNE 1$ 2$: MOV #5_5,PS ;TIME OUT AND NO INT RET 3$: CMP (SP)+,(SP)+ CALL LOSE ;INT BR 2$ ;HERE TO SEND MSG FROM MSGBUF SEND: TST SPYM BEQ 1$ BIS #%CASPY+%CATCL+%CATEN,CAICSR ;CLEAR XMITTR BR 2$ 1$: BIS #%CATCL+%CATEN,CAICSR ;CLEAR XMITTR 2$: BIT #%CATDN,CAICSR ;TDONE SHOULD SET BNE SEND0 CALL LOSE SEND0: MOV MSGL,B MOV #MSGBUF,A 1$: MOV (A)+,CAIWBF DEC B BNE 1$ MOV ADST,CAIWBF BIT #%CATDN,CAICSR ;TDONE SHOULD BE CLEAR NOW BEQ SEND0A CALL LOSE SEND0A: TST CAIXMT CLR A 2$: BIT #%CATDN,CAICSR BNE SEND2 DEC A BNE 2$ SEND1: CALL LOSE ;T DONE DIDN'T COME ON SEND2: CALL INTYES ;SHOULD INTERRUPT NOW BIC #%CATEN,CAICSR CALL INTNO ;SHOULDN'T INTERRUPT TWICE TST SPYM BEQ 1$ BIS #%CASPY,CAICSR RET 1$: BIC #%CATEN,CAICSR ;CLEAR TRANSMIT INT ENB RET ;HERE TO RECEIVE MESSAGE THAT HAS SUPPOSEDLY ARRIVED ;AND COMPARE AGAINST MSGBUF RCV: BIT #%CARDN,CAICSR BNE RCV0 CALL LOSE ;RCV DONE NOT ON RCV0: TST SPYM BEQ 1$ BIS #%CASPY+%CAREN,CAICSR BR 2$ 1$: BIS #%CAREN,CAICSR 2$: CALL INTYES ;SHOULD INTERRUPT BIC #%CAREN,CAICSR CALL INTNO ;BUT ONLY ONCE BIT #%CAERR,CAICSR BEQ RCV0A CALL LOSE ;CRC ERROR RCV0A: MOV MSGL,A ;MESSAGE SHOULD BE RIGHT LENGTH ADD #3,A ;3 OVERHEAD WORDS .REPT 4 ADD A,A ;# BITS .ENDR MOV CAIRBC,B INC B ;HAS VALUE MINUS ONE CMP A,B BEQ RCV2 RCV1: CALL LOSE ;NOT SAME LENGTH RCV2: MOV MSGL,B MOV #MSGBUF,A RCV2A: MOV CAIRBF,C CMP C,(A)+ BEQ RCV3 CALL LOSE ;DATA WRONG RCV3: DEC B BNE RCV2A MOV CAIRBC,B CMP B,#47. ;SHOULD BE 3 WORDS LEFT BEQ RCV4 CALL LOSE RCV4: MOV CAIRBF,B ;SHOULD BE DESTINATION CMP B,ADST BEQ RCV5 CALL LOSE RCV5: MOV CAIRBF,B ;THEN SOURCE CMP B,SRC BEQ RCV6 CALL LOSE RCV6: TST CAIRBF ;THEN ERROR CHECK MOV CAIRBC,B BIT #4000,B BNE RCV7 CALL LOSE ;SHOULDN'T BE ANY BITS LEFT RCV7: TST SPYM BEQ 1$ BIS #%CARCL+%CASPY,CAICSR BR 2$ 1$: BIS #%CARCL,CAICSR ;CLEAR RCVR, LOOPBACK 2$: BIT #%CARDN,CAICSR BEQ RCV8 CALL LOSE ;DIDN'T RCV8: RET BEG: CLR A BEG1: RESET MOV #STEND,SP MOV CAIMYN,SRC MOV SRC,DST TST A BEQ 1$ BIS #%CALPBK,CAICSR ;TURN ON LOOP BACK 1$: CLR NPASS MOV #5_5,PS PASS: MOV #PZERO,PATTER CALL PASS1 MOV #PMONE,PATTER CALL PASS1 MOV #PALTB,PATTER CALL PASS1 MOV #PFLOT1,PATTER CALL PASS1 MOV #PFLOT0,PATTER CALL PASS1 MOV #PADR,PATTER CALL PASS1 DEC MSGL CLR ADST ;TEST THAT SEND TO ALL GETS RECEIVED BIS #%CARCL,CAICSR ;CLEAR RECEIVER CALL SEND ;SEND IT OFF CALL RCV ;MAKE SURE IT CAME BACK CALL SEND ;SEND IT AGAIN CALL SEND ;AND AGAIN, SHOULD NOT GET ABORTED BIT #%CATAB,CAICSR BEQ BCAST1 CALL LOSE ;DIDN'T GET ABORTED BCAST1: BIS #%CARCL,CAICSR ;CLEAR RECEIVER BIT #%CARDN,CAICSR BEQ BCAST2 CALL LOSE ;DIDN'T CLEAR BCAST2: MOV #105,ADST ;TEST THAT RECEIVE ALL WORKS INC SPYM BIS #%CARCL,CAICSR ;CLEAR RECEIVER CALL SEND ;SEND IT OFF CALL RCV ;MAKE SURE IT CAME BACK CALL SEND ;SEND IT AGAIN CALL SEND ;AND AGAIN, SHOULD NOT GET ABORTED BIT #%CATAB,CAICSR BEQ SPY1 CALL LOSE ;DIDN'T GET ABORTED SPY1: CLR SPYM BIS #%CARCL,CAICSR ;CLEAR RECEIVER BIT #%CARDN,CAICSR BEQ SPY2 CALL LOSE ;DIDN'T CLEAR SPY2: INC NPASS ;END OF PASS BR PASS ;CALL HERE FOR EACH PATTERN. ;TRIES ALL LENGTHS. SENDS EACH LENGTH 3 (REALLY 4) TIMES. ONCE SHOULD BE ;SUCESSFULLY RECEIVED, ONCE SHOULD BE ABORTED, ONCE SHOULD BE ;SENT OFF INTO LIMBO. PASS1: CLR MSGL PASS1A: INC MSGL CMP MSGL,#253. BLT PASS1B RET PASS1B: CLR PATN MOV MSGL,B ;MAKE THE PATTERN MOV #MSGBUF,A 1$: CALL @PATTER DEC B BNE 1$ BIS #%CARCL,CAICSR ;CLEAR RECEIVER MOV DST,ADST CALL SEND ;SEND IT OFF CALL RCV ;MAKE SURE IT CAME BACK CALL SEND ;SEND IT AGAIN CALL SEND ;AND AGAIN, SHOULD GET ABORTED BIT #%CATAB,CAICSR BNE PASS1C CALL LOSE ;DIDN'T GET ABORTED PASS1C: BIS #%CARCL,CAICSR ;CLEAR RECEIVER BIT #%CARDN,CAICSR BEQ PASS1D CALL LOSE ;DIDN'T CLEAR PASS1D: MOV #105,ADST ;SEND A MSG INTO HYPERSPACE CALL SEND MOV #2000.,A 1$: DEC A ;WAIT A WHILE BNE 1$ BIT #%CARDN,CAICSR BEQ PASS1E CALL LOSE ;WE RECEIVED IT? PASS1E: JMP PASS1A .END GO