TITLE LOADER CHK=16 ERP=15 PPTR=14 C=4 D=11 CKSM=12 REG=13 F=7 S=10 SPNTR=10 P=6 PNTR=1 A=2 B=3 CMPTR=4 BCOUNT=5 O.SYMS=-100. ;GETS ADDED TO IN DEBUGGER BUFF: BLOCK 40 RCH: MOVE PNTR,[10700,,BUFF-1] ;INITL BYTE PNTR TO BUFF MOVEM PNTR,CMPTR GCHR: PUSHJ P,TYI ;GET CHAR CAIN A,177 ;RUBOUT? JRST RUBOT IDPB A,PNTR CAIN A,33 JRST GCHR1 ;ALT MODE ALSO TERMINATES COMMAND CAIE A,15 ;CR? JRST GCHR GCHR1: MOVEI A,0 ;IT WAS CR IDPB A,PNTR ;MARK END OF STRNG CPOPJ: POPJ P, RUBOT: CAMN PNTR,[10700,,BUFF-1] ;RUBOUT AT BEG OF BUFFER? JRST BRUB LDB A,PNTR ;GET LAST CHAR TYPED PUSHJ P,TYO ;ECHO IT ADD PNTR,[70000,,] ;DECREMENT POINTER JUMPGE PNTR,GCHR ;JUMP IF VALID SUB PNTR,[430000,,1] ;WAS 440700,,SOMETHING, BACK IT UP JRST GCHR BRUB: PUSHJ P,CRR ;TYPE CR LF JRST GCHR TYI: .IOT TTI,A JUMPE A,TYI CAIE A,15 POPJ P, PUSHJ P,CRR ;ECHO CR MOVEI A,15 POPJ P, TYO: .IOT TTO,A POPJ P, SCRS: MOVEI A,2 PUSHJ P,TYO CRS: MOVEI A,"* PUSHJ P,TYO CRR: MOVEI A,15 PUSHJ P,TYO MOVEI A,12 JRST TYO LINE==1 TTO==1 TTI==2 DSK==3 ERRC==4 BEGIN: MOVE P,[-100,,PLD] .OPEN TTO,STTO .VALUE 0 .OPEN TTI,STTI .VALUE 0 JRST BCMD STTO: 45,,(SIXBIT /TTY/) STTI: 20,,(SIXBIT /TTY/) STTI1: 4,,(SIXBIT /TTY/) PLD: BLOCK 100 BCMD: CLEARM PASS ;PASS 0 - LOAD NORMAL, -1 LOAD LOADER LOADER PUSHJ P,SCRS PUSHJ P,RCH ;GET TYPED IN COMMANND MOVE PNTR,IP SETZB F,S COMND: ILDB A,CMPTR CAIN A,^Q JRST CMDQ CAIN A,33 ;ALT MODE TERMINATES COMMAND SOSA PASS ;AND SAYS TO USE LOADER LOADER (TO AVOID CLOBBERING) CAIN A,15 JRST CMDE CAIN A,^G JRST BCMD CAIN A,": JRST CMDCOL CAIN A,"; JRST CMDSC CAIG A,40 JRST CMDS SXBT: SUBI A,40 CAIL A,100 SUBI A,40 TLNE PNTR,770000 ;STOP AFTER POSITIN=0 IDPB A,PNTR JRST COMND CMDS: MOVE F,S CMD1: MOVE PNTR,IP MOVEI S,0 JRST COMND CMDSC: MOVEM S,SNR JRST CMD1 CMDCOL: JRST CMD1 ;FOR NOW IGNORE IT IP: 440600,,S CMDE: .SUSET [.SSNAM,,SNR] JUMPE F,FZ JUMPN S,SNZ FZ: LSHC F,36. ;MOVE S TO F AND ZERO S SZ: JUMPE F,BCMD ;TAKE IN NEW NAME MOVE S,BIN SNZ: MOVEM F,ADR+1 MOVEM S,ADR+2 PASS2: .OPEN DSK,ADR JRST ERROR SKIPGE PASS JRST LLDR ;LOAD LOADER LOADER FIRST LLDR1: .OPEN LINE,[45,,'TTY] .VALUE ;SUPER-IMAGE OUT SO NO PADDING, ETC. .OPEN TTI,STTI1 ;SWITCH INTO IMAGE MODE .VALUE 0 MOVEI A,15 .SLEEP A, MOVEI PNTR,0 JRST STBLK LLDR: .CALL LLOPN .VALUE JRST LLDR1 ERROR: .OPEN ERRC,ERR0 .VALUE 0 ERR1: .IOT ERRC,A CAIN A,3 JRST BCMD JUMPL A,BCMD PUSHJ P,TYO JRST ERR1 PASS: 0 ;0 LOAD REGULAR THING, -1 LOAD LOADER LOADER ERR0: SIXBIT / ERR/ 1 0 SNR: 0 ADR: 2,,(SIXBIT /DSK/) 0 0 BIN: SIXBIT /BIN / CMDQ: ILDB A,CMPTR JRST SXBT BTTO: 7,,(SIXBIT /TTY/) LLOPN: SETZ SIXBIT /OPEN/ 5000,,2 1000,,DSK [SIXBIT /DSK/] [SIXBIT /GT40LL/] [SIXBIT /BIN/] SETZ+[SIXBIT /GT40/] ;PNTR HAS MINUS # LEFT SO ADRS(PNTR) GIVES NEXT WORD ;WHEN IT EQUALS 0, GET NEW BLOCK. IF RETURN WITH NEG ;POINTER, WRITE NEG 1 AS EOF CHAR GETDSK: JUMPE PNTR,RELOD ;NEED NEW BLOCK MOVE A,ADRS(PNTR) ANDI A,377 AOJA PNTR,CPOPJ ;ADD ONE AND RET URN RELOD: MOVE PNTR,DBUFP .IOT DSK,PNTR JUMPL PNTR,ENFIL NPNTR: HLRE PNTR,DBUFP ;GET MIN WRD COUNT IN PNTR JRST GETDSK ENFIL: HRRZS PNTR ;ZERO LEFT HALF TO GET NEXT ADRESS SETOM (PNTR) ;WRITE EOF CHAR JRST NPNTR DBUFP: -50,,BUFR BUFR: BLOCK 50 ADRS=. STBLK: .IOT LINE,[175] .IOT LINE,["R] .IOT LINE,[175] .IOT LINE,["L] SETZB B,C STBLK4: .RESET TTI, STBLK1: PUSHJ P,GETDSK CAIE A,1 ;START OF BLOCK? JRST STBLK1 ;NOT YET PUSHJ P,SEND ;YES, SEND IT PUSHJ P,GETDSK ;AND THE ZERO FOLLOWING PUSHJ P,SEND PUSHJ P,GWRD ;GET COUNT MOVE D,C CAIN D,6 JRST STBLK2 SUBI D,4 STBLK3: PUSHJ P,GETDSK PUSHJ P,SEND SOJGE D,STBLK3 MOVEI A,TTI .LISTEN A, JUMPE A,STBLK1 .IOT TTI,A CAIE A,175 JRST STBLK4 JRST BEGIN GWRD: PUSHJ P,GETDSK MOVE C,A PUSHJ P,SEND PUSHJ P,GETDSK PUSHJ P,SEND LSH A,8. ADD C,A POPJ P, STBLK2: PUSHJ P,GWRD PUSHJ P,GETDSK PUSHJ P,SEND MOVEI A,0 PUSHJ P,SEND AOSG PASS JRST PASS2 ;NOW FOR THE REAL STUFF .VALUE [ASCIZ /:LOGOUT /] SENDCH: TRNN F,40 TRO F,100 .IOT TTO,F POPJ P, SEND: JRST @SENDD(B) SENDD: SEND1 SEND2 SEND3 SEND1: MOVE F,A MOVEI S,0 LSHC F,-2 LSH S,-30. AOS B JRST SENDCH SEND2: MOVE F,A ANDI F,360 LSH F,-4 ADD F,S MOVE S,A ANDI S,17 LSH S,2 AOS B JRST SENDCH SEND3: MOVE F,A LSH F,-6 ADD F,S MOVE S,A PUSHJ P,SENDCH MOVE F,A ANDI F,77 MOVEI B,0 JRST SENDCH END BEGIN