Trailing-Edge
-
PDP-10 Archives
-
BB-FP64A-SB_1986
-
10,7/mbr/mbr.mac
There are 5 other files named mbr.mac in the archive. Click here to see a list.
TITLE MBR -- DO I/O INSTRUCTIONS TO AN RH20 OR RH10
SUBTTL G.M. UHLER/GMU
SEARCH MACTEN,UUOSYM
T1==1
T2==2
T3==3
T4==4
P==17
PDLLEN==10
CI.MBE==400
DO.LDR==1B6
DO.DRE==1B9
DEFINE ERROR(ARG,JMP),<
JRST [OUTSTR [ASCIZ/
?'ARG
/]
IFB <JMP>,<EXIT>
IFNB <JMP>,<JRST JMP>
]>
SALL
MBR: JFCL ;NO CCL ENTRY
RESET ;RESET THE WORLD
OUTSTR [ASCIZ/
Type HELP$G for help
/]
MOVE P,PDLPTR ;SETUP A PDL
PUSHJ P,GETPRV ;GET USER IOT
BRK:: JRST DDT## ;GO TO DDT
;HERE ON DI$G TO READ MASSBUS REGISTER INTO RET.
DI:: MOVE P,PDLPTR ;SETUP STACK
PUSHJ P,GETPRV ;GET PRIVS
MOVSI T2,777700 ;MASK FOR LEGAL VALUES IN REG
PUSHJ P,CHKVAL ;CHECK VALUES
JRST BRK ;DONE IF ILLEGAL
PUSHJ P,SETUP ;SETUP FOR EXECUTION
PUSHJ P,CHKMBE ;CHECK FOR MASSBUS ENABLE ON RH20
JRST BRK ;DONE
XCT DODATO ;DO THE DATAO
IMULI T1,1 ;STALL
IMULI T1,1 ;...
XCT DODATI ;DO THE DATAI
JRST BRK ;DONE
;HERE ON DO$G TO WRITE MASSBUS REGISTER
DO:: MOVE P,PDLPTR ;SETUP STACK
PUSHJ P,GETPRV ;GET PRIVS
MOVE T2,[777700,,600000] ;GET MASK FOR LEGAL VALUES
PUSHJ P,CHKVAL ;CHECK VALUES
JRST BRK ;DONE IF ILLEGAL
PUSHJ P,SETUP ;SETUP FOR EXECUTION
MOVX T1,DO.LDR ;GET LOAD REGISTER BIT
IORM T1,DTOARG ;SET IT
PUSHJ P,CHKMBE ;CHECK FOR MASSBUS ENABLE FOR RH20
JRST BRK ;DONE
XCT DODATO ;DO THE DATAO
JRST BRK ;DONE
;HERE ON CI$G TO READ THE CONI INTO RET.
CI:: MOVE P,PDLPTR ;SETUP STACK
PUSHJ P,GETPRV ;GET PRIVS
MOVEI T2,0 ;GET MASK FOR LEGAL VALUES
PUSHJ P,CHKVAL ;CHECK VALUES
JRST BRK ;DONE IF ERROR
PUSHJ P,DVCODE ;SETUP FOR EXECUTION
XCT DOCONI ;DO THE CONI
JRST BRK ;DONE
;HERE ON CO$G TO DO A CONO TO THE DEVICE.
CO:: MOVE P,PDLPTR ;SETUP STACK
PUSHJ P,GETPRV ;GET PRIVS
MOVSI T2,-1 ;GET MASK FOR LEGAL VALUES
PUSHJ P,CHKVAL ;CHECK VALUES
JRST BRK ;DONE IF ERROR
PUSHJ P,DVCODE ;SETUP FOR EXECUTION
HRRZ T2,REG ;GET VALUE FOR CONO
XCT DOCONO ;DO THE CONO
JRST BRK ;DONE
;HERE ON BITS$G TO GIVE A LISTING OF USEFUL BITS
BITS: OUTSTR BTSMSG
JRST BRK ;DONE
BTSMSG: ASCIZ\
CONI bits:
1B18 400000 Data bus parity error
1B19 200000 Exception
1B20 100000 Long word count
1B21 040000 Short word count
1B22 020000 Channel error
1B23 010000 Drive response error
1B24 004000 Register access error
1B25 002000 Channel ready
1B26 001000 Data overrun
1B27 000400 Massbus enable
1B28 000200 Attention active
1B29 000100 SCR full
1B30 000040 Attention interrupt enable
1B31 000020 PCR full
1B32 000010 Command done
7B35 000007 PI assignment
CONO bits:
1B24 004000 Clear register access error
1B25 002000 Massbus init
1B26 001000 Transfer error clear
1B27 000400 Massbus enable
1B28 000200 Reset command list pointer
1B29 000100 Delete SCR
1B30 000040 Attention interrupt enable
1B31 000020 Stop transfer
1B32 000010 Clear done
7B35 000007 PI assignment
DATAI bits:
77B5 770000,,000000 Register select code
1B6 004000,,000000 Load register
1B7 002000,,000000 Reset command list pointer
1B8 001000,,000000 Control bus parity error
1B9 004000,,000000 Disable register access error
1B10 002000,,000000 Transfer received
7B17 000007,,000000 Drive select code
1B19 000000,,200000 CBUS parity bit for external registers,
Disable transfer error stop for internal
DATAO bits:
77B5 770000,,000000 Register select code
1B6 004000,,000000 Load register
1B7 002000,,000000 Reset command list pointer
1B9 000400,,000000 Disable register access error
1B10 002000,,000000 Store status
7B17 000007,,000000 Drive select code
1B19 000000,,200000 Disable transfer error stop
Register select codes:
0 Control register 1 Status register
2 Error register 3 Maintenance register
4 Attention summary register 5 Desired address register
6 Drive type register
70 SBAR 71 STCR 72 PBAR 73 PTCR
74 IVIR 75 RR
\
;HERE ON HELP$G TO GIVE A LITTLE HELP.
HELP: OUTSTR HLPMSG
JRST BRK
HLPMSG: ASCIZ\
Type CI$G to do CONI into RET
CO$G to do CONO from RH(REG)
DI$G to read massbus register specified by LH(REG) into RET
DO$G to write massbus register specified by LH(REG) with
value specified by RH(REG)
HELP$G to type this text
BITS$G to give a listing of CONI/DATAI bits
Locations of interest are:
KON Must be set to the RH10/RH20 device code
(540-574,270-274,360)
UNIT Must be set to the unit number on the RH20,
i.e., the drive select field for the DATAx.
If set to a SIXBIT name, KON and UNIT will be
set to the appropriate values for the unit.
REG Set to Register,,Value for DI and DO;
0,,Value for CO;
Ignored for CI
RET CI and DI return values here
\
;ROUTINE TO GET USRIOT WITH TRPSET.
;CALL: PUSHJ P,GETPRV
;RETURN CPOPJ ALWAYS
GETPRV: MOVEI T1,0 ;ARGUMENT FOR TRPSET
TRPSET T1, ;GET USRIOT
ERROR <TRPSET failed>
POPJ P, ;RETURN
;ROUTINE TO CHECK THE VALUES OF KON, UNIT, AND REG TO MAKE SURE
;THAT THEY ARE LEGAL.
;CALL: MOVE T2,MASK FOR REG
; PUSHJ P,CHKVAL
;RETURN CPOPJ IF ERROR
; CPOPJ1 IF SUCCESSFUL
CHKVAL: MOVE T4,UNIT ;GET UNIT NUMBER
TDNN T4,[-1,,777770] ;IS IT A NUMBER
JRST CHKVA1 ;YES
MOVEI T3,.DIAKU ;FUNCTION FOR DIAG.
MOVE T1,[2,,T3] ;POINT AT BLOCK
DIAG. T1, ;IS IT A SIXBIT NAME?
ERROR <Illegal unit number in UNIT>,CPOPJ
HLRZM T1,KON ;STORE DEVICE CODE
TLZ T1,-1 ;CLEAR DEVICE CODE
LSH T1,-3 ;RIGHT JUSTIFY UNIT NUMBER
ANDI T1,7 ;MASK IT OFF
HRRZM T1,UNIT ;STORE THAT
CHKVA1: MOVE T1,KON ;GET DEVICE CODE
TLNN T1,-1 ;IS IT ILLEGAL?
TRNE T1,3 ;...
JRST KONERR ;YES
SETOM RH20 ;ASSUME RH20
CAIL T1,540 ;IS IT IN RANGE?
CAILE T1,574 ;...
CAIA ;NO, CHECK FOR RH10
JRST CHKVA3 ;YES
CAIL T1,270 ;RH10?
CAILE T1,274 ;...
CAIA ;NO, CHECK LAST
JRST CHKVA2 ;YES
CAIN T1,360 ;LAST OF 3 RH10'S?
JRST CHKVA2 ;YES
KONERR: ERROR <Device code illegal in KON>,CPOPJ
CHKVA2: SETZM RH20 ;MARK AS RH10
CHKVA3: TDNE T2,REG ;LEGAL VALUE FOR REG?
ERROR <Illegal register specified in REG>,CPOPJ
CPOPJ1: AOS 0(P) ;GIVE SKIP RETURN
CPOPJ: POPJ P, ;RETURN
;ROUTINE TO STORE THE DEVICE CODE IN ALL THE I/O INSTRUCTIONS.
;CALL: PUSHJ P,DVCODE
;RETURN CPOPJ ALWAYS
DVCODE: HRRZ T1,KON ;GET DEVICE CODE
LSH T1,-2 ;ONLY 7 BITS
DPB T1,[POINT 7,DOCONI,9] ;STORE IN ALL 4 I/O INTRUCTIONS
DPB T1,[POINT 7,DOCONO,9]
DPB T1,[POINT 7,DODATI,9]
DPB T1,[POINT 7,DODATO,9]
POPJ P, ;RETURN
;ROUTINE TO BUILD THE DATAO WORD FROM THE VALUES SPECIFIED IN REG AND
;UNIT.
;CALL: PUSHJ P,SETUP
;RETURN CPOPJ ALWAYS
SETUP: PUSHJ P,DVCODE ;SETUP THE DEVICE CODES
HLLZ T1,REG ;GET REGISTER
LSH T1,^D12 ;POSITION IT
HRRZ T2,UNIT ;GET UNIT
TLO T1,<(DO.DRE)>(T2) ;SET DISABLE RAE AND SET DS
HRR T1,REG ;GET THE VALUE IF ANY
MOVEM T1,DTOARG ;STORE IT
POPJ P, ;RETURN
;ROUTINE TO CHECK TO SEE IF MASSBUS ENABLE IS ON IN THE CONI IF THE
;DEVICE IS AN RH20.
;CALL: PUSHJ P,CHKMBE
;RETURN CPOPJ IF NOT
; CPOPJ1 IF IT IS OR NOT AN RH20
CHKMBE: SKIPN RH20 ;IS DEVICE AN RH20?
JRST CPOPJ1 ;NO, GIVE SKIP RETURN
XCT DOCONI ;GET CONI
MOVX T1,CI.MBE ;GET THE BIT
TDNE T1,RET ;IS IT ON?
AOS 0(P) ;YES, GIVE SKIP RETURN
POPJ P, ;RETURN
;I/O INSTRUCTIONS XCT'ED BY THE PROGRAM. THE DEVICE CODE IS SETUP
;FROM KON BY DVCODE.
DODATI: DATAI 0,RET
DODATO: DATAO 0,DTOARG
DOCONI: CONI 0,RET
DOCONO: CONO 0,(T2)
KON:: -1 ;DEVICE CODE
UNIT:: 0 ;UNIT NUMBER
RET:: -1 ;VALUE RETURNED HERE
REG:: 0 ;REGISTER,,VALUE TO READ/WRITE
DTOARG: BLOCK 1 ;BUILD ARG FOR DATAO
RH20: BLOCK 1 ;-1 IF RH20, 0 IF RH10
PDLPTR: IOWD PDLLEN,PDL ;POINTER TO PDL
PDL: BLOCK PDLLEN ;PDL
END MBR