;************************************** ; SYSTEM ROUTINES FOR IMP77 * ; DATE: 16.jun.81 * ;************************************** ; NB: ; TO TURN INTO THE FILE IMP77PY#REL, DO THE FOLLOWING ; 1) ASS11 SYS_IMP77P,Y,L ; 2) #CONNECT Y ; 3) #SWORD X?????C,3 - TURN IT INTO A 'TEXT' FILE ; 4) CON11 Y/Z ; 5) NEWGEN Z#REL,IMP77PY#REL ; DS = R5 LNB = R4 PONPOF = 17. GETID = 12. .WORD SPONZ-. .BYTE 3 .ASCII /PON/ .EVEN SPONE: MOV R0,R3 MOV (R3)+, R0 MOV (R3)+, R1 MOV (R3)+, R2 MOV (R3), R3 EMT 2; EMT PON RTS PC SPONZ: .WORD SPOFFZ-. .BYTE 4 .ASCII /POFF/ .EVEN SPOFFE: MOV R0, -(SP) MOV @R0, R0 EMT 3 MOV R0, (DS)+ MOV (SP)+, R0 MOV -(DS), (R0)+ MOV R1, (R0)+ MOV R2, (R0)+ MOV R3, (R0) RTS PC SPOFFZ: .WORD PONOZ-. .BYTE 6 .ASCII /PONOFF/ .EVEN PONOE: MOV R4, -(SP) MOV R0, R4 MOV (R4)+, R0 MOV (R4)+, R1 MOV (R4)+, R2 MOV (R4), R3 EMT PONPOF; EMT PONPOFF SUB #6, R4 MOV R0, (R4)+ MOV R1, (R4)+ MOV R2, (R4)+ MOV R3, (R4) MOV (SP)+, R4 RTS PC PONOZ: .WORD MAPVZ-. .BYTE 7 .ASCII /MAPVIRT/ .EVEN MAPVRT: MOV -(DS), R2 MOV -(DS), R1 MOV -(DS), R0 EMT 12; EMT MAP VIRTUAL (10) RTS PC MAPVZ: .WORD GETABZ-. .BYTE 6 .ASCII /MAPABS/ .EVEN GETABS: ; %INTEGER VAD, LEN, ID MOV -(DS), R0; ID MOV -(DS), R2; LEN (=0 => DROP) MOV -(DS), R1; VAD ;072127; ASH R1, -13. - RIGHT ; 177763 ROL R1 ROL R1 ROL R1 ROL R1 BIC #177770, R1; CLEAR TOP BITS EMT 13; MAP ABS ; R0 = PAR, R1 = PDR CLRB R1 ASR R1 ASR R1; LEN IN WORDS ADD #100, R1 ADD (DS), R2; R2=LEN+VAD BIC #160000, R2; AS INDEX IN SEGMENT CMP R2, R1 BGT GETABX; OUT OF SEGMENT MOV R0, R1; RESULT (PAGES) RTS PC; AND RETURN GETABX: CLR R1; FAILED RTS PC; AND RETURN GETABZ: .WORD SGETZ-. .BYTE 5 .ASCII /GETID/ .EVEN SGETID: EMT GETID MOV R0, R1 RTS PC SGETZ: .WORD ALARMZ-. .BYTE 5 .ASCII /ALARM/ .EVEN STIME: ; %INTEGER TICKS ; TICKS IS IN R0 ALREADY EMT 10; EMT 8. RTS PC ALARMZ: .WORD LINKIZ-. .BYTE 6 .ASCII /LINKIN/ .EVEN SLINKN: ; %INTEGER SER EMT 15; EMT 13. RTS PC LINKIZ: .WORD MAPHWZ-. .BYTE 6 .ASCII /MAPHWR/ .EVEN SMAPHW: ; %INTEGER SEGS EMT 17; EMT 15. RTS PC MAPHWZ: .WORD MAPPSZ-. .BYTE 8. .ASCII /MAPPSECT/ .EVEN ; SVC MAP PSECT(%INTEGER TASK, SEG) EMT 16. MOV R0, R1; RESULT RTS PC MAPPSZ: TIME: .WORD TIMEPZ-. .BYTE 4 .ASCII /TIME/ .EVEN TIMEP: ; TICKS FROM IPL (OR SET UP) EMT 23.; GET TICKS FROM KERNAL MOV R0, R1 RTS PC; RESULT IN R1 TIMEPZ: .WORD PUSHZ-. .BYTE 4 .ASCII /PUSH/ .EVEN PUSH: QU = R1 EN = R0 MOV (QU), R2; R2 == Q_E BNE PUL1 MOV EN, (EN); E_LINK == E BR PUL2 PUL1: MOV (R2), (EN); E_LINK == Q_E_LINK MOV EN, (R2); Q_E_LINK == E PUL2: MOV EN, (QU); Q_E == E RTS PC; AND RETURN PUSHZ: .WORD POPZ-. .BYTE 3 .ASCII /POP/ .EVEN POP: MOV (R0), R2; Q_E == R2 BNE POP1 CLR R1; E == NULL RTS PC POP1: MOV (R2), R1; E == Q_E_LINK CMP R1, R2; UNLESS E == Q_E %START BEQ POP2 MOV (R1), (R2); Q_E_LINK == E_LINK BR POP3 POP2: CLR (R0); E == NULL POP3: RTS PC; GO AWAY POPZ: .WORD SETPRZ-. .BYTE 7 .ASCII /SETPRIO/ .EVEN SETPRIO: EMT 18.; PARAM IS IN R0 RTS PC SETPRZ: .WORD DUPADZ-. .BYTE 7 .ASCII /DUPADDR/ .EVEN DUPAD: EMT 22.; PARAM (TARG SEG) IS IN R0 MOV R0,R1; RESULT BACK IN R1 RTS PC DUPADZ: .WORD CLSEZ-. .BYTE 10. .ASCII /CLOSEOUTPU/ .EVEN CLOSE: MOV #4, R0; SIGNIFY CLOSE OUTPUT MOV @#160014, R1; PICKUP ADDRESS JMP @R1; AND JUMP THROUGH IT CLSEZ: .WORD CLSIZ-. .BYTE 10. .ASCII /CLOSEINPUT/ .EVEN CLR R0; SIGNIFY CLOSE INPUT MOV @#160014, R1; PICKUP ADDRESS JMP @R1; GO TO IT CLSIZ: .WORD WAITZ-. .BYTE 4 .ASCII /WAIT/ .EVEN EMT 1 WAITZ: 0 .END