Permalink
/SERIAL-BASED DISK SYSTEM | |
/NON-SYSTEM HANDLER FOR OMNIBUS | |
/KYLE OWEN - 2/17/2014 | |
VERS="D&77 | |
BASER=6400 | |
BASET=6410 | |
SKCF=BASER | |
SKSF=BASER+1 | |
SKCC=BASER+2 | |
SKRS=BASER+4 | |
SKIE=BASER+5 | |
SKRB=BASER+6 | |
STFL=BASET | |
STSF=BASET+1 | |
STCF=BASET+2 | |
STPC=BASET+4 | |
STSK=BASET+5 | |
STLS=BASET+6 | |
BLKNUM=6260 | |
/HANDLER SENDS: | |
/A OR B FOR PRIMARY DISK, SIDE A OR B | |
/C OR D FOR SECONDARY DISK, SIDE A OR B | |
*0 | |
-4 /FOUR DEVICES | |
DEVICE SDSK; DEVICE SDA0; 4640; ENTRY1&177; 0; 0 | |
DEVICE SDSK; DEVICE SDB0; 4640; ENTRY2&177; 0; 0 | |
DEVICE SDSK; DEVICE SDA1; 4640; ENTRY3&177; 0; 0 | |
DEVICE SDSK; DEVICE SDB1; 4640; ENTRY4&177; 0; 0 | |
*200 | |
SENDC, 0 /SEND CHARACTER IN AC | |
STLS | |
STSF | |
JMP .-1 | |
JMP I SENDC | |
SNDNUM, 0 /SEND NUMBER AS TWO CONSECUTIVE CHARACTERS | |
JMS SENDC /SEND BOTTOM 8 BITS OF WORD | |
BSW /SEND TOP 6 BITS OF WORD PLUS SOME, LET SERVER HANDLE IT | |
JMS SENDC | |
CLA | |
JMP I SNDNUM | |
GETNUM, 0 | |
SKCC /CLEAR AC AND FLAG | |
SKSF /SKIP IF FLAG SET | |
JMP .-1 | |
SKRB /READ BUFFER | |
BSW /SWAP BYTES | |
SKSF /SKIP IF FLAG SET | |
JMP .-1 | |
SKRS /OR BUFFER WITH AC | |
JMP I GETNUM | |
TXPG, TAD CDFSTO /GET DATA FIELD | |
DCA TXCDF /MODIFY CDF FOR TRANSFER | |
TXCDF, HLT /MODIFIED TO CDF | |
TAD I SLOC /GET WORD | |
CDF 0 /BACK TO FIELD 0 | |
ISZ SLOC /NEXT LOCATION | |
NOP | |
JMS SNDNUM /SEND IT | |
ISZ WORDCT /INCREMENT WORD COUNT...DONE? | |
JMP TXCDF /NO, KEEP LOOPING | |
JMP GETACK /ANY MORE REQUESTS? | |
EXIT, ISZ ENTRY1 /NORMAL EXIT | |
SFIELD, HLT /MODIFIED TO CDI | |
JMP I ENTRY1 /EXIT WITH FATAL ERROR | |
ERROR, CLL CML RAR /ROTATE ERROR CODE AND SET NEGATIVE BIT | |
JMP SFIELD /ERROR EXIT | |
ENTRY1, VERS | |
CLA CLL /CLEAR LINK FOR FIRST PLATTER | |
SETUP, TAD WKUP /ADD WAKEUP CHARACTER | |
DCA SENDC /STORE IN A TEMP LOCATION | |
JMS CTRLC /CHECK IF CTRL C HAS BEEN PRESSED | |
TAD SENDC /GET WAKEUP CHARACTER | |
JMS SENDC /SEND WAKEUP CHARACTER | |
CLA | |
RDF /GET CURRENT FIELD | |
TAD SCDI /ADD CDI | |
DCA SFIELD /DEPOSIT MODIFIED CIF | |
TAD I ENTRY1 /GET FUNCTION | |
JMS SNDNUM /TELL SERVER FUNCTION | |
ISZ ENTRY1 /LOOK AT BUFFER ADDRESS | |
TAD I ENTRY1 /GET BUFFER ADDRESS | |
JMS SNDNUM /TELL SERVER BUFFER ADDRESS | |
TAD I ENTRY1 /GET BUFFER ADDRESS | |
DCA SLOC /STORE BUFFER ADDRESS | |
ISZ ENTRY1 /LOOK AT STARTING BLOCK NUMBER | |
TAD I ENTRY1 /GET STARTING BLOCK NUMBER | |
JMS SNDNUM /TELL SERVER STARTING BLOCK NUMBER | |
ISZ ENTRY1 /LOOK AT ERROR RETURN | |
JMS GETNUM /RECEIVE CDF INSTRUCTION | |
DCA CDFSTO | |
JMS GETNUM /RECEIVE NEGATIVE WORD COUNT | |
DCA WORDCT | |
GETACK, JMS GETNUM /4000=READ, 4001=WRITE, 0000=DONE, 2000=ERROR | |
SNA /WAS IT ZERO? | |
JMP EXIT /YES, EXIT | |
CLL RAL /NO, IS HIGH BIT SET? | |
SNL | |
JMP ERROR /NO, ERROR! | |
SZA CLA /YES, READ OR WRITE? | |
JMP TXPG /TIME TO WRITE | |
RXLP, JMS GETNUM /GET WORD | |
CDFSTO, HLT /MODIFIED TO CDF | |
DCA I SLOC /STORE CONTENTS | |
CDF 0 | |
ISZ SLOC /NEXT LOCATION | |
NOP | |
ISZ WORDCT /INCREMENT WORD COUNT...DONE? | |
JMP RXLP /NO, KEEP LOOPING | |
JMP GETACK /ANY OTHER REQUESTS? | |
ENTRY2, VERS /SECOND ENTRY POINT | |
CLA | |
TAD ENTRY2 /GET ARGUMENT ADDRESS | |
DCA ENTRY1 /STORE IT IN COMMON PLACE | |
CLA CLL IAC /SET AC = 1 FOR 2ND PLATTER | |
JMP SETUP /CONTINUE WITH SETUP | |
ENTRY3, VERS | |
CLA | |
TAD ENTRY3 /GET ARGUMENT ADDRESS | |
DCA ENTRY1 /STORE IT IN COMMON PLACE | |
CLA CLL IAC RAL /SET AC = 2 FOR 3RD PLATTER | |
JMP SETUP /CONTINUE WITH SETUP | |
ENTRY4, VERS | |
CLA | |
TAD ENTRY4 /GET ARGUMENT ADDRESS | |
DCA ENTRY1 /STORE IT IN COMMON PLACE | |
CLA CLL CML IAC RAL /SET AC = 3 FOR 4TH PLATTER | |
JMP SETUP /CONTINUE WITH SETUP | |
CTRLC, 0 | |
CLA | |
KRS /READ KEYBOARD | |
AND S177 /KEEP BOTTOM 7 BITS | |
TAD N3 /SUBTRACT 3 | |
SNA CLA /WAS IT A ^C? | |
KSF /YES, IS KEYBOARD FLAG UP? | |
JMP I CTRLC /RETURN | |
SCDI, CDF CIF 0 | |
JMP I S7600 /JUMP BACK TO OS/8 | |
S177, 177 | |
N3, -3 | |
S7600, 7600 | |
SLOC, 0 | |
WORDCT, 0 | |
WKUP, 101 /'A' | |
ZBLOCK 400-. | |
$ |