Skip to content
Find file
43c337f Feb 17, 2014
executable file 165 lines (145 sloc) 3.7 KB
/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-.
$
Something went wrong with that request. Please try again.