home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.update.uu.se
/
ftp.update.uu.se.2014.03.zip
/
ftp.update.uu.se
/
pub
/
pdp8
/
os278-src.tar.Z
/
os278-src.tar
/
rd51sy.pa
< prev
next >
Wrap
Text File
|
1992-09-18
|
8KB
|
385 lines
/RD51SY.PA OS/78 V4 RD51 SYSTEM HANDLER
/
/
/
/
/
/
/
/
/COPYRIGHT (C) 1982 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
/9-MAR-83
/
/ VER 001
/
/THE RD51 CONTROLLER FOR THE DECMATE II OPERATES ON BLOCK NUMBERS, IT
/PERFORMS ANY NECESSARY MAPPING TO CYLINDER, SURFACE AND SECTOR WITHIN A
/LOGICAL VOLUME.
/AS OS8 IS LIMITED TO 4096 BLOCKS, THIS IS THE LIMIT USED IN THIS HANDLER.
/
/
DEVCOD=700 /RD51 DEVICE CODE
/
/
RDSR=6001+DEVCOD /SKIP ON DATA TRANSFER REQ. CLEAR IF SET
RDSC=6002+DEVCOD /SEND COMMAND TO RD CONTROLLER
RDSD=6003+DEVCOD /SKIP ON COMMAND DONE, CLEAR FLAG IF SET
RDTD=6004+DEVCOD /TRANSFER DATA TO-FROM RD<->AC
/DIRECTION DETERMINED BY COMMAND IN PROGRESS
RDWE=6005+DEVCOD /SET-CLEAR INTERRUPT ENABLE WITH AC<11>
RDSE=6006+DEVCOD /SKIP ON ERROR, CLEAR FLAG IF SET
/
/
/SOME DEFINITIONS
/
MINUS3=CLA CLL CMA RTL
AC4000=CLA CLL CML RAR
/
/THE ONLY COMMANDS AVAILABLE THROUGH THIS HANDLER ARE :
/ :READ_A_BLOCK : PERFORMED AS READ THEN EMPTY BUFFER
/ :WRITE_A_BLOCK : PERFORMED AS FILL BUFFER THEN WRITE.
/FOR BOTH OF THESE AN INITIAL SET_VOLUME_AND_BLOCK COMMAND IS ISSUED.
/THE FORM OF THE COMMAND IS :- RDSC WITH AC=1 /IOT "SEND_COMMAND"
/FOLLOWED BY SENDING THREE WORDS :-
/ WORD #1 - AC<8:11> VOLUME # (1 - 15), DEFINED
/ IN THE MOUNT COMMAND
/ WORD #2 - AC<00:11> LOW ORDER BLOCK NUMBER
/ WORD #3 - AC<04:11> HIGH ORDER BLOCK NUMBER
/
/AS THE SIZE OF EACH VOLUME IS LIMITED BY OS78 TO A 12-BIT BLOCK NUMBER
/THE LOW ORDER BLOCK NUMBER ABOVE IS THE BLOCK NUMBER WITHIN A VOLUME
/THE HIGH ORDER BLOCK NUMBER CAN BE ONLY 0
/
VERSION=0161 /VERSION = A1
AC0001=CLL CLA IAC
AC0002=CLL CLA CML RTL
AC0006=CLL CLA CML IAC RTL
AC4000=CLL CLA CML RAR
AC3777=CLL CLA CMA RAR
AC7775=CLL CLA CMA RTL
/ HEADER BLOCK
/RL02 DEVICE # IS ??
*0
-1
DEVICE RDSY
DEVICE SYS
4270 /MULTI-TYPE RX HANDLER
SYS&177+6000 /TWO PAGE HANDLER
0 /UNUSED
7777 /SIZE OF RX50 = 770 DECIMAL
STBOOT-NDBOOT /-SIZE
XR= 10
ZR= 11
RELOC 200 /WINCHESTER BOOT LOADS INTO 200 FIELD 0
STBOOT= .
ZBLOCK 10 /FOR DISK ID STUFF
TAD MOV1 /MOVE THE DATA AT 400 TO FIELD 2
DCA XR /SET UP AUTO INDEX
TAD K7577
DCA ZR /ADDRESS TO MOVE IT TO
XR1, TAD I XR /GET A WORD
JMS SAVE
JMP XR1
CLL CLA IAC /SET VOLUME AND BLOCK
RDSC
JMS LOAD
TAD K66 /BLOCK 66
JMS LOAD
JMS LOAD
RDSD /NOW WAIT FOR DONE
JMP .-1
CLL CLA IAC RTL /AC=4 FOR A READ
RDSC
RDSD
JMP .-1
CDF 10
TAD K7577
DCA ZR
TAD KK25
RDSC
XR2, JMS LOAD /GET THE DATA
JMS SAVE
JMP XR2
CDF 20
TAD K7577 /NOW LOAD UP FIELD 2
DCA ZR
XR3, JMS LOAD /GET THE DATA
JMS SAVE
JMP XR3 /AND DO IT AGAIN
RDSD
JMP .-1
CIF CDF
JMP I .+1
7605 /GO START THE SYSTEM HANDLER
MOV1, 377
K66, 66 /BLOCK 66 OF DISK
K7577, 7577
KK25, 25
LOAD, 0
DCA XR
RDSR
JMP .-1
TAD XR
RDTD /VOLUME NUMBER
JMP I LOAD
SAVE, 0
DCA I ZR /SAVE IT
TAD ZR /SEE IF DONE
IAC
SNA CLA /SKIP FI DONE
ISZ SAVE
JMP I SAVE
NDBOOT= .
/
/RETRIES ARE BUILT IN TO THE CONTROLLER.
/
/ CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS
RELOC
*0200
RELOC 7600
/USUALLY THE FIRST 7 LOCATIONS ARE FILLED WITH A ZBLOCK 7
/ALTHOUGH THESE COMMANDS ARE COMPILED WITH THE HANDLER THE
/SYSTEM WILL OVER WRITE THESE LOCATIONS WITH THE SAME INFORMATION
/THIS WAS DONE FOR CONVIENCE
JMS SYS /CALL SYSTEM HANDLER
5000 /WRITE 10 PAGES -- 5 BLOCKS
0000 /START AT MEM ADDRESS 0
0033 /PUT INFO INTO SYSTEM SCRATCH AREA BLK 33
CLA HLT
CIF CDF 10 /CHANGE FIELD TO 1
JMP 7667 /THIS JMP IS A CALL TO LOAD THE KEYBOARD MONITOR
/ENTRY
SYS, VERSION
CLL CLA
L12, 12
3 /!!REQUIRED AT 7612!! TO SHOW OS78 2 PAGE HANDLER
RDF /GET FIELD OF CALLING ROUTINE
TAD LLCDF0 /MAKE A CDF OUT OF IT
DCA RESTOR /PUT IT BACK, GO TO I/O ROUTINE ON PAGE 2
JMP RSTART /GO CALL SECOND PAGE, IOTYP FALLS THRU TO HERE
IOTYP, 0
LLCDF0, CDF 0
LM12, -12
L6, 6
*7640
RSTART, TAD SYS /HAS THE CALL ADDRESS
/FLOPPY HAD DENISTY AND UNIT INFORMATION
RESTOR, HLT /SET DATA FIELD TO CALLING ROUTINE
CIF 20 /!! CDF,CIF OR CID MUST BE AT 7642
JMP PAGE2 /FOR FRTS TO WORK
ZBLOCK 7744-. /!! 7743 IS THE LAST USABLE LOCATION
/7744-7777 IS USED BY THE MONITOR
/ SECOND PAGE
RELOC
*0400
RELOC 7600
/
/ FETCH ARGUMENTS, ETC.
/
PAGE2, DCA FETCH /ENTER WITH ARGUMENT LIST ADDR IN AC
RDF /SAFE HERE?
TAD LCDIF0 /SET UP EXIT TO CALLER
DCA EXFLD
AC4000 /SET UP TO PUT R/W BIT TO LINK
TAD I FETCH /FIRST ARGUMENT HAS FIELD FOR TRANSFER
AND L70 /KEEPING ONLY FIELD
TAD LCDF0 /MAKE CDF TO TRANSFER FIELD
DCA BUFCDF /PLACE IN LINE FOR SILO LOOP
TAD K3 /SET UP TO DO READ OR WRITE DEPENDANT ON LINK
SNL /SKIP IF DOING A WRITE
CLL IAC /3=WRITE 4= READ
DCA FN
TAD I FETCH /MAKE CONTROL COUNT FOR TRANSFER
RAL
AND K7600 /COUNT OF WORDS
CIA /0 FOR WHOLE FIELD
DCA BC
ISZ FETCH /NEXT ARGUMENT
TAD I FETCH /BUFFER ADDRESS
DCA BUF
ISZ FETCH /NEXT
TAD I FETCH /BLOCK ADDRESS
ISZ FETCH /MOVING POINTER TO ERROR EXIT
DCA LREC /SAVE BLOCK #
CLL CLA IAC RTL /AC=4
AND FN /DETERMINE IF READ OR WRITE FUNCTION
SZA CLA /SKIP IF WRITE
JMP STREAD /GO DO A READ
/
/WRITE FALL THROUGH
/
TOP, TAD K4 /AC TO READ BIT
AND FN /AGAIN CHECK THE FUNCTION FOR THE SILO COMMAND
SZA CLA /SKIP IF WRITE FUNCTION
TAD K23 /MAKE EMPTY BUFFER COMMAND FOR READ
TAD K2
RDSC /SEND THE COMMAND
TAD DENSW /BYTE COUNT FOR A SECTOR
DCA RDWC /SAVE IT FOR THE TRANSFER LOOP
CLL /MAKE SURE LINK IS CLEARED FOR THE READ
BUFCDF, HLT /DATA BUFFER FIELD
TRLOOP, JMS WAIT /WAIT FOR A WORD
SKP /TR SEEN
JMP ERROR /ERROR FLAG FROM CONTROLLER
TAD I BUF /GET A CHARACTER
RDTD /TRANSFER IT
SZL /SKIP IF A READ COMMAND
JMP INCWC /GO UPDATE THE WORD COUNT
DCA TEMP /SAVE THE AC FOR NOW.
TAD FN /SEE IF A WRITE FUNCTION IN WHICH CASE LEAVE THE BUFFER
/AS IS BECAUSE THE RD INSTRUCTIONS CLEAR THE AC
AND K4 /MASK THE READ BIT
SNA CLA /SKIP IF READ FUNCTION
JMP .+3 /WAS A WRITE. LEAVE THE BUFFER ALLONE
TAD TEMP
DCA I BUF /STORE THE DATA READ FROM THE DISK
ISZ BUF /MOVE BUFFER POINTER (IT MAY SKIP)
L70, 70 /AND 70 WON'T BOTHER THE AC IF IT DOESN'T SKIP
ISZ BC
SKP
STL /SO THE BUFFER DOES'T CHANGE ON HALF PAGE
K7600,
INCWC, 7600
ISZ RDWC /UPDATE THE WORD COUNT
JMP TRLOOP /AND DO IT AGAIN
JMS WAIT /NOW WAIT FOR DONE
JMP ERROR /TR SEEN. ERROR CONDITION
TAD BC /LOOP CONTROL TO FINISH READ.
SZA CLA /SKIP IF ALL DONE
JMP STREAD /GO PERFORM THE WRITE OPERATION
CLL CLA IAC RTL /AC=4 FOR READ
AND FN /MASK THE CURRENT FUNCTION
SZA CLA /SKIP IF IT IS A WRITE
JMP EXIT /ALL DONE
STL /SET FOR READ
/
/MIDDLE OF MAIN LOOP
/
STREAD, CLA IAC /SET VOLUME AND BLOCK
RDSC /AND DO THE COMMAND
JMS WAIT /WAIT FOR TR
SKP /TR SEEN
JMP ERROR /DID NOT WANT TO SEE DONE
RDTD /VOLUME NUMBER TO RD
JMS WAIT /WAIT FOR TR
SKP /TR SEEN
JMP ERROR
TAD LREC /THE LOW ORDER TWELVE BITS OF BLOCK NUMBER
RDTD /SEND IT TO THE INTERFACE
JMS WAIT
SKP /TR SEEN. SEND THE FINAL PART OF SET VOLUME COMMAND
JMP ERROR /DONE SEEN TO EARLY
RDTD /ALWAYS ZERO
JMS WAIT
JMP ERROR
TAD FN
RDSC
JMS WAIT
JMP ERROR
ISZ LREC /POINT TO NEXT RECORD.
SNL CLA /SEE IF THERE IS MORE TO DO
JMP TOP /GO BACK AND DO IT
EXIT, ISZ FETCH /UPDATE THE RETURN
EXFLD, HLT /USER FIELD
JMP I FETCH /AND EXIT
FETCH, 0
BC, 0
FN, 0
RDWC, 0 /BLOCK WORD COUNT
BUF, 0
LREC, 0 /LOW WORD OF BLOCK NUMBER
K2, 2
K3, 3
K4, 4
TEMP, 0 /TEMP STORAGE FOR DATA FROM CONTROLLER
K23, 23 /NEEDED TO MAKE FILL OR EMPTY COMMAND
LCDIF0, 6203 /CIF CDF 0
LCDF0, CDF 0
DENSW, 7400
/
/WAIT FOR A FLAG FROM THE WINCHESTER
/
WAIT, 0
RDSR
SKP /NOT TR
JMP I WAIT
RDSD /NOW FOR DONE
JMP WAIT+1 /NOT YET
ISZ WAIT /DONE SET UP RETURN TO CALLER +2
RDSE /NOW TEST FOR THE ERROR FLAG
JMP I WAIT /NO ERROR FLAG
ERROR, AC4000 /TAKE THE ERROR EXIT
JMP EXFLD /AND RETURN TO CALLER
$$$$$