; UPDATE CREAD.006 03.08.72 ; UPDATE CREAD.005 02.14.72 .TITLE CREAD ;********************************************************************** ;* ** ;* C R E A D ** ;* ** ;* PROGRAM IDENTIFICATION. CARD READER INPUT SUBROUTINE, ** ;* CATALOG NUMBER ; UPDATE ROS4.004 02.04.72 ; UPDATE ROS4.003 02.27.72 ; UPDATE ROS4.001 01.22.72 ; UPDATE 1/22/72 ROSI.SYS GVR ; UPDATE 1/12/72 ROS2.SYS ; UPDATE 1/11/72 ROS2.SYS ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 PS = 177776 ; $DEBUG = 1 ; IPDATE TESTER.001 02.14.72 .TITLE PRINT ;********************************************************************** ;* ** ;* SAMPLE TASK TO TEST THE LINE PRINTER SUBROUTINE, LPRNTR. ;* ;********************************************************************** ; .DEF GARY .REF LPRNTR,EXIT,TSTAT,TPRTY,TASKS,HEADER,LPINIT ; ; THEAD: .WORD 1,CHECKO,0,500. .©: ¯”imR@(Fœ:mmh4Ω: h¯”®÷æ,æþÿßàþÿþ% f…µ…Ÿþÿƒ*$Ž6 ‡Ÿþÿwöeþ*6 ‡­imR*Zó ** ;* ** ;* PURPOSE. THIS GENERAL PURPOSE SUBROUTINE PROVIDES FOR ** ;* CARD READER INPUT. INPUT REQUESTS ARE QUEUED IF THE ** ;* DEVICE IS BUSY. SINCE THE CARD READER IS A SEQUENTIAL ** ;* INPUT DEVICE, ALL REQUESTS ARE QUEUED ON A FIRST-COME ** ;* FIRST-SERVE BASIS. ** ;* ; ROS DEBUG SWITCH $SAVE = 104400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 16. ; NO. OF SOFTWARE PRIORITY LEVELS .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK =100. ; MAX. NUMBER OF CORE TASKS IN SYSTEM QUEU NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM .BYTE 40.,3 .WORD 0,0,30.*256.,0 .=.+80. ; ; GARY: MOV #30.,R0 CLRB TSTAT(R0) MOVB #3,TPRTY(R0) CMP TASKS,R0 BGT LARRY1 MOV R0,TASKS ; LARRY1: ASL R0 MOV #THEAD,HEADER(R0) JSR PC,LPINIT RTS PC ; ; CHECKO: MOV #LIST1,-(SP) JSR PC,CREAD CMP LIST1+10,#8. BEQ STOP MOV #LIST2,-(SP) ** ;* TWO MODES OF INPUT ARE SUPPORTED: ALPHANUMERIC AND BINARY. ** ;* CREAD ACCEPTS BOTH 026 AND 029 CARD CODE (HOLLERITH AND ** ;* EBCDIC) FOR INPUT IN THE ALPHANUMERIC MODE AND WILL CONVERT ** ;* EITHER TO AN INTERNAL REPRESENTATION OF ASCII OR EBCDIC. ** ;* ** ;* THE THREE GENERAL I/O EXITS ARE AVAILABLE TO THE CALLING ** ;* PROGRAM. ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 1 ; SYSTEM OVERLAY OPTION ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 20 ;MAXIMUM NUMBER OF OVERLAY TASKS .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR JSR PC,LPRNTR BR CHECKO ; STOP: JSR PC,EXIT ; LIST1: .WORD 1 .BYTE 2,2 .WORD 0,0,0,0,BUFFER ; BUFFER: .WORD 80.,0 .=.+80. .END |9|9„f’QH”Ì:Â~|9Ì~ô9T~l:Û~ä: CREAD WILL PROCESS REQUESTS FOR ANY NUMBER OF ** ;* LIKE CARD READERS, SINCE THE SUBROUTINE IS REENTRANT. ** ;* MOREOVER, IN THE ALPHANUMERIC MODE, INPUT CAN BE SWITCHED ** ;* FROM THE C/R TO THE TTY AND BACK AGAIN. ** ;* ** ;* USAGE. THE ASSEMBLER CODE IS: ** ;* MOV #LIST,-(SP) ** ;*  = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXX; UPDATE LPRNTR.005 03.08.72 ; UPDATE LPRNTR.004 02.21.72 ; UPDATE LPRNTR.003 02.14.72 ; UPDATE LPRNTR.002 02.08.72 ; UPDATE LPRNTR.001 02.04.72 .TITLE LPRNTR ;********************************************************************** ;* ** ;* L P R N T R ** ;* c~\;ê~Ô;r~L<ù~Ä< EMT CREAD ** ;* BNE LIST ERROR ONLY ** ;* THE FORMAT OF THE DATA BUFFER IS: ** ;* WORD 1 NWORD ** ;* 2 NREAD ** ;* 3+ DATA ** ;* WHERE: NWORD > 0 = NUMBER CHARACTERS TO READ (80 CHAR MAX) ** XXXX ;NTASK MUST BE <= MXTASK .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = 0 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = 0 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY PROPERTY LEVEL 3 PRIP04 = 1  ** ;* PROGRAM IDENTIFICATION. LPRNTR - LINE PRINTER OUTPUT ** ;* SUBROUTINE. ** ;* ** ;* PURPOSE. THIS SUBROUTINE PERFORMS THE OUTPUT PROCESSING ** ;* AND CONTROL FUNCTIONS FOR EVERY LINE PRINTER IN THE ** ;* SYSTEM. ALL OUTPUT REQUESTS ARE QUEUED ON A PRIORITY ** ;* BASIS, THEREBY PERMITTING THE LINE PRI�~<=~´=�~,>~¤>;* < 0 = NUMBER BINARY WORDS TO READ (60 WDS MAX)** ;* NREAD = NUMBER CHARACTERS/WORDS ACTUALLY READ ** ;* (STORED BY CREAD) ** ;* ** ;* PROGRAMMER: 55 ** ;* DATE: 01.10.72 ** ;* REVISION:  ; PRIORITY PROPERTY LEVEL 4 PRIP05 = 0 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = 0 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = 1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = 1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = 0 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVEL 11 PRIP12 = 1 ; PRNTER TO BE USED ** ;* IN REAL-TIME APPLICATIONS FOR PRIORITY ALARM MESSAGES, ** ;* ETC. THE INTERNAL MESSAGE FORMAT ACCEPTED BY LPRNTR ** ;* IS EITHER ASCII OR EBCDIC. NON-PRINTABLE CHARACTERS ARE ** ;* CONVERTED TO BLANKS, ALTHOUGH THE CHARACTER IS SYSGENABLE ** ;* TO ANY OTHER PRINTABLE CHARACTER. ALL THREE GENERAL I/O ** ;* EXITS ARE SUPPORTED BY LPRNTR. ** ;* Ÿ~?&~”?®~ @ ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* ALL RIGHTS RESERVED ** ;* ** ;* ** ;* G U L F E L E C T R O N I C S S Y S T E MIORITY PROPERTY LEVEL 12 PRIP13 = -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETR˜ ** ;* USAGE. THE ASSEMBLER LINKAGE TO LPRNTR IS: ** ;* ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT LPRNTR ** ;* ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* .•௔̵;@4Þ@¼M:@Â.€}@œ:mm@©: @«:<}@_M€Q@.äb; @äb“@çb; @çb“@YeÞ@¸.9mQŠ@imR@Tq€@ërh@9€p:@×.9€a@ƒ…4f@L©C @(*”¶^hZ&”ð_h •! S ** ;* ** ;********************************************************************** ; ; .PAGE ;********************************************************************** ;* ;* C R E A D P A R A M E T E R S ;* .IFG NCR ;DON'T ASSEMBLE THIS ROUTINE IF THERE ;ISN'T AT LEAST ONE C/R IN SYSTEM .DEF CREAD,CRINIT .IFNZ "IEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR #5~„@½~ü@E~tAÌ~ìA$àhf™üXh¯”÷æ ç å ã á  ß  Ý Û Ù × Õ Ó Ñ(P@",6†@" ,"62/2"0>LÞ"0> L4© 6³ 8± :¯ :²% TTYSW .DEF CRDON,CRDOFF .REF TTYIN .ENDC .REF UNSPND,DQTIME,TTYOUT,QTIME .REF ACTIVE,QSAVEI,DSPTCH,ROSTOP .REF $CTASK,IOQTME,IODQTM,IOSTAT .REF PHYDEV,ALTDEV,LOGMAX .IFNZ BCD .REF O26ASC .IFNZ INEBC .REF O26EBC .ENDC .IFNZ EXEBC .REF O29ASC .IFNZ INEBC .REF O29EBC .ENDC .ENDC .ENDC & ARG = 0, THEN THE CORRESPONDING ; ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR/T~dBÛ~ÜBc~TCê~ÌC( ;® <­<pþpþÔ >«>rþrþÎ @©@tþtþÈ B§,B CR 1 ERROR CR 1 SPUR INT 9,ff¦æ&f� ¶ 6 @ ÷ ºBœŸ,Š ³ :Ä ŸþÿÄÄ Ä M  :¬,®1…„ƒ‚�€´‡Ä€ @ìq_M€QYeÞ$YeÞŠ.ÒÄ êÃà ó¥ñóæþÿßàþÿÉ Ó{) .IFNZ OVRLAY .REF RELTSK .ENDC PSR = PS ;ADDRESS OF PSR BELL = 07 ;'BELL' ASCII CODE LF = 12 ;LINE FEED ASCII CODE CR = 15 ;CARRIAGE RETURN ASCII CODE NREAD = 2 ;NREAD WORD OF DATA BUFFER AVAIL = 100000 ;'AVAILABLE' BIT IN PHYSICAL DEVICE TABL ALT = 040000 ;'ALTERNATE DEVICE' BIT IN PHYSICAL DEV TBL CRDEV = * ONE .IFG ARG-1 ; XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 3 ; THREE ABORT MESSAGE BUFFERS ABRT .IFL $ABMES ; $ABMES MUST BE => 0. +; UPDATE IOQTME.001 02.08.72 .TITLE IOQTME ;********************************************************************** ;* ** ;* I O Q T M E / I O D Q T M ** ;* ** ;* PURPOSE. THESE SUBROUTINES QUEUE AND DEQUEUE TIMER MODULES ** ;* FOR THE ROS I/O SUBROUTINES. ** , 4ÞYeÞ(¢,øs÷ Ä´Š1 0 ó &Ÿª& ̵;L©C «:<}" ¹,þÿñ¥÷ ¤…„ƒ‚�€¤‡¨Ìµ;.@æþÿ€ ¶ ¶ …„ƒ‚�& æwŒ$€}(9mQŠì.f³ Ÿþÿ3 ó  ñ‹óó¾*  äb;  &äb“(<,Œ÷ ¶ÁÄæB÷ fó´ÅõÖf+ B"Ö.,-2 ;PHYSICAL DEVICE TABLE CODE FOR C/R DEVICES .PAGE ;********************************************************************** ;* ;* C R E A D D A T A T A B L E S ;* ;********************************************************************** ; ; COUNT: ;CONTAINS CURRENT BYTE INDEX TO .=.+NCR+NCR ;CALLER'S DATA BUFFER ; ERRCR: ;CONTAINS COUNTER OF NUMBER OF RETRIES .=.+NCR+NCR . XXXXXX ; ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 /;* ** ;* USAGE. THE LINKAGE TO THESE SUBROUTINES IS THE SAME AS FOR ** ;* QTIME AND DQTIME: ** ;* ** ;* MOV #MODULE,-(SP) MOV #MODULE,-(SP) ** ;* MOV #DELAY(-(SP) JSR PC,IODQTM ** ;* JSR PC,IOQTME 0°æ<÷ Ö ¯‰ ó æR÷ 6Mó Ñ ©:  R&›,Ôß5@pþ/MÀpþ÷ þMw"À5€ûÀ5,ø@À5ó3Àðž&æ÷ Ö ‚ž$©: M,ßE@pþM3 ó Á÷ 3 Mæþÿ  O,@ÀÂýÁÄýñ´ý÷ æý± W"Rñ ô,dPßàþÿ·”ý÷ŽýŸþÿÄŒýÈ𥭠Ô,ˆð¥@ ƒ ÿŸ†¦ê1 ;BEFORE ABORTING REQUEST ; MXCNT: ;MAXIMUM NUMBER OF BYTES TO STORE: .=.+NCR+NCR ;2*NWORD FOR BINARY, NWORD FOR ALPHANUM. ; CRFRST: ;CARD READER QUEUE POINTER TO .=.+NCR+NCR ;BEGINNING OF QUEUE ; CRLAST: ;POINTER TO END OF QUEUE .=.+NCR+NCR ; ; CRBUSY: .=.+NCR+NCR ;0 = C/R NOT IN USE, 1 = C/R IN USE ; CRDATA: .=.+2USER PSTP ; PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO"3 ** ;* ** ;* WHEN IOQTME IS ENTERED, THE INTERRUPT SYSTEM IS INHIBITED ** ;* (MAX OF 42 MICROSECONDS). IF THE MODULE IS ALREADY QUEUED, ** ;* THEN THE TIMER COUNTER IS RESET AND QTIME IS NOT CALLED. ** ;* OTHERWISE, INTERRUPTS ARE ENABLED AND QTIME IS CALLED. ** ;* ** ;* IODQTM DOES NOT DEQUEUE THE TIMER MODULE, IT ONLY 4ërhˆ0¬æ&fÈ …„ƒ‚Ä && ÷ Ö Ä ôŠÆ ƒ…4f*«:<}P,Ô&÷  ßEApþ3 æ0÷ Ö M�Ù Tq€ 0 œ:mm?,ø@ ÷ @3 ÷ <M0•ó 8Hó ê  8&H,Á ÁeÁlÂ4  -Ä>Ä V 4$>,@Ä Ä Ä ³ 4MÄ> ÑÄ Ñóeó Ñ4>"&.dó1�îÄ>Ä Ä Ä Ä ÑÄ ‘óeó Æ5NCR+NCR ;ADDRESS OF CURRENT DATA BUFFER ; CRTASK: .=.+NCR+NCR ;TASK NO. FOR CURRENT I/O - 0=NON-TASK RQST ; IGNORE: .=.+NCR+NCR ;1 = IGNORE REMAINDER OF CARD BEING READ ; REPEAT: .=.+NCR+NCR ;1 = READ ANOTHER CARD [LAST ONE WAS CONTROL] ; .IFNZ BCD TABLE: .=.+NCR+NCR ;CONTAINS THE ADDRESS OF THE ALPHANUMERIC ;CONVERSION TABLE CURRENTLY IN USE 6 MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESO7SWITCHES ** ;* THE JSR ADDRESS TO POINT TO AN RTS PC INSTRUCTION. ** ;* THESE ROUTINES ASSUME THAT ONLY THE ARGUMENT AND JSR OPTIONS ** ;* OF THE TIMER MODULE ARE EXERCISED. ** ;* ** ;* IOQTME REQUIRES 4 WORDS OF STACK; IODQTM REQUIRES 2 WORDS ** ;* OF STACK STORAGE. BOTH INCLUDE THE ARGUMENTS PUSHED ONTO ** ;* THE STACK BY THE CALLING PROGRAM. G>$(J0ŠàÀ1ÚÉ^>óe3 4ó M³ ×,;>4$(·0²Ä>! ³ *! ! +! ó a>*J,Ú¸Â@ÂlÁ ÁeÁl¡’ó ªÁñÊ@  $ï.þ³ MÀð‹ó³ —óš* äb;  &äb“(2,$ùÀð‹óðóì Á%(†�*çb; çb“E .ENDC ; .IFNZ TTYSW CRBKUP: .=.+NCR+NCR ;1 = BACK UP C/R WITH TTY .ENDC ; CRMOD: ;CARD READER TIMER MODULES .WORD 1 ;FOR FIRST CARD READER .BYTE 0,120+$RES ;ARGUMENT AND JSR TO SUBROUTINE OPTIONS .WORD 0,0,0 .IFG NCR-1 .WORD 1 ;FOR SECOND CARD READER .BYTE 0,120+$RES .WORD 0,2,0 .IFG NCR-2 FLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ;1/60 RES1 = 15. ;1/4 RES2 = 2 ;1/2 RES3 = 2 ;1 RES4 = 5 ;5 RES5 = 2 ;10 RES6 = H ** ;* ** ;* TIMING CONSIDERATIONS. IOQTME EXECUTES IN: ** ;* 62.2 USEC IF MODULE ONLY NEEDS TO BE RESET ** ;* 33.3 + QTIME USEC IF QTIME IS CALLED ** ;* ** ;* PROGRAMMER: 55 ** ;* DATE: 01.27.72 """"""" """""""""""""""""""""""""""""""""""""""""""""""""""DDDDDDD@DDDDDDDDDDˆ�€@DDDDDDDDDDDDDDDDDDDDDDDDD€ˆ€ˆˆ€ˆ‘™™™™™™™™™™™@DDDDDDDDDDDDDDDDDD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆADD-B C•àTÀuÝ›ër€ÔRÀó$š›Û}Ú}OÀÿ ›©: ^ø›ër�OÀ :þ€•à^ S›©: OÀø' X›”MœOÀø\”›’M²ZSÀ†!þ›ër€ÔSÀøž%.›’M²Z^W ›”Mœ^ø3;›ër0/TÀƒ;w›$Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwwwwwwwwww÷ÝÝÝÝ™™™™™™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅaå Í‹æÄ,L ƒw:ÄB8ŽŒ ýƒàÇ` 5 þÿ€�&ˆ ‚— ýÿ†ƒœÃEÀÿ× >w†× × ò f€ò5ÀeòU@ò €× [æ*ˆ² ¦¦æ× Ž & *ˆÖ G× ‚&(ˆ°Ì 8�L'ˆ°4e÷ ÌQ$ ô �BBâBä" ± üÿü× ÷ ¬ŒÉU@Ò °ðU€ Æe  Å"U%÷‹äþGæÎeÞþæfÇ.Ö … U¥… … … … U¥Ñ Bb‘â‹Ã 0Š æ*ˆ€�Ö BÃÅ.&0 æM &0 & I.WORD 1 ;FOR THIRD CARD READER .BYTE 0,120+$RES .WORD 0,4,0 .IFG NCR-3 .WORD 1 ;FOR FOURTH CARD READER .BYTE 0,120+$RES .WORD 0,6,0 .ENDC .ENDC .ENDC ; CRLIST: .WORD 1 ;C/R ERROR MESSAGE I/O LISTS .BYTE 0,3 ;C/R # 1 .WORD CRTTY,0,0,0,0 .IFG NCR-1 .WORD 1 ;C/R # 2 .BYTJ 3 ;30 RES7 = 2 ;60 RES8 = 3 RES9 = 5 RES10 = 100. RES11 = 2 RES12 = 2 RES13 = 2 RES14 = 2 RES15 = 2 TRES = 1 ; TIME-SLICE RESOLUTION USING MAXT ; ; IN TASK HEADER ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = K$ërh=.HW ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ%ƒërh(ërh,n† ÿŸ †   `— ÿŸ†Ä ‡„ „ „ 2’„ „ øÄ õCÀ<ÀU3æB÷ Nó´#<"B,ß,¼ñÖ; <fæ<÷ Ö ‡CûEA<aÖ <©: &<É,àû5< ó ì…Áñw>ý…w*ý <x0„fÅ"æþÿßàþÿõ 5 Ÿþÿf÷ O "*9€aT0L ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* ALL RIGHTS RESERVED ** ;* ** ;********************************************************************** ; ; .DEF IOQTME,IODME 0,3 .WORD CRTTY,0,0,0,0 .IFG NCR-2 .WORD 1 ;C/R # 3 .BYTE 0,3 .WORD CRTTY,0,0,0,0 .IFG NCR-3 .WORD 1 ;C/R # 4 .BYTE 0,3 .WORD CRTTY,0,0,0,0 .ENDC .ENDC .ENDC ; CRMDAD: .WORD CRMOD,CRMOD+10.,CRMOD+20.,CRMOD+30. .=CRMDAD+NCR+NCR ;TABLE USED TO GET ADDRESS OF TIMER ;MODULE USN0 ;NORMALLY 1 MSEC: HERE IS = 16.7 MSECS SECR = 3 ;"RES3" IS THE ONE-SECOND RESOLUTION $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "O,…ޤ‡Ÿþÿ…Ž´‡1 ‡3 3 s   $*Z,T3 4ó À  �  s83 ó %4  8"& ·.xÁfæ<÷ ñžÖ ³ûA<‡û 8"©: ž"<( É0žßÀ""ÚðÈp &æ0÷ Ö ÷ x""È 0$œ:mm*9€p:,Ƈ ñ@Ä ô¥ñ Àð‡ @ "S,ê…3wDü3 ³ …wü· ú‡7 ZPQTM .REF QTIME ; ; IOQTME: MOV @#PS,-(SP) ;INHIBIT INTERRUPTS .IFZ $1145 MOV #340,@#PS .ENDC .IFNZ $1145 SPL 7 .ENDC CMP #1,@6(SP) ;SEE IF MODULE IS ALREADY QUEUED BEQ IOQA00 ;BRANCH IF IT ISN'T MOV R5,-(SP) ;OTHERWISE, RESET TIME DELAY MOV 8.(SP),R5 ;GET MODULE ADDRESS MOV 6(SP),4(R5) ;RESET TIMERQING C/R INDEX .PAGE ; ; CRIOLS: .WORD CRLIST,CRLIST+14.,CRLIST+28.,CRLIST+42. .=CRIOLS+NCR+NCR ;TABLE USED TO GET ADDRESS OF TTY I/O LIST ;USING C/R INDEX .IFNZ BIN ; BYTE: ;USED IN BINARY MODE TO INDICATE WHICH .=.+NCR+NCR ;SET OF BITS TO USE FROM NEXT COLUMN ; BINARY: ;USED IN BINARY MODE; CONTAINS 4 BITS .=.+NCR+NCR RTICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ;# OF T-O-D CLOCK TICKS PER SECOND $ABMPL = 6 ;CLOCK BASE PERIOD = 1/10 SECOND C1COMD = 177546 ;DEVICE ADDRESS FOR HIGH-SPEED CLOCK C1CBIT = 100 ;BIT TO CONTROL FAST CLOCK INTERRUPT $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = S †$ú‡ß¼˜ßàš7 äù÷àù‡ö ¼óT MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+,@#PS ;ENABLE INTERRUPT MOV (SP)+,(SP) ;MOVE PC UP ONE NOTCH IN STACK CLR 2(SP) ;SET NO ERROR CONDITION ; IOQB00: RTS PC ;THEN EXIT ; ; ; TIMER MODULE MUST BE QUEUED BY QTIME. WE ONLY GET TO SERVE ; AS AN INTERMEDIARY. ; ; IOQA00: MOV (SP)+,@#PS ;ENABLE INTERRUPTS JMP QTIME ;THEN GO TO QTIME ANU;CARRIED OVER FROM PREVIOUS COLUMNS ; CRMODE: .=.+NCR+NCR ;1 = CURRENT REQUEST IS IN BINARY .ENDC .PAGE ; ; C / R S T A T U S B I T S ( C R S ) ; CRERR = 100000 ;C/R ERROR DONE = 040000 ;CARD DONE HOPPER = 020000 ;INPUT HOPPER EMPTY / OUTPUT HOPPER FULL CHECK = 010000 ;C/R CHECK ERROR TIMING = 004000 ;C/R TIMING ERROR ONLINE = 002000 ;TV 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; ACTSIZ = 20. ; MAXIMUM NO. OF ENTRIES IN AUTH. CODE .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 1 XD LET IT DO ITS THING ;(QTIME WILL EXIT TO CALLER 'CAUSE ; THE STACK NOW LOOKS LIKE: ; ; :MODULE ; :DELAY ; TOP ========> CALLER'S PC ; ; IODQTM: ADD #8.,2(SP) ;SET MODULE ADDRESS TO POINT TO JSR ADDR MOV #IOQB00,@2(SP) ;SYRANSITION TO ON-LINE BUSY = 001000 ;HOPPER EMPTY READY = 000400 ;C/R READY COLUMN = 000200 ;COLUMN READY ENABLE = 000100 ;INTERRUPT ENABLE EJECT = 000002 ;SUPPRESS COLUMN READY (EJECT CARD) START = 000001 ;START I/O SWITCH = 6004 ;BINARY CODE FOR SWITCH TO TTY (12-11-7 ) EOD = 6003 ;LOGICAL END-OF-DATA (12-11-8-9) $029 = 6002 Z ; DISC RESIDENT DIRECTORY OPTION .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR MAX. OF 3 DISCS .ENDC ; NDPRT1 = 5 ; NO. OF PRIORITY LEVELS IN DISC 1 QUEUES .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; MU[.’M²Z¯”̵;@4Þ@; €M@´.€}@“€M@œ:mm@©: @«:<}@._M€Q@YeÞ@9mQŠ@�m„@Tq€@ö.þv@@9€a@ƒ…4f@L©C @(ÎÓ.‰MüXh¤�Mp&h€�M€Wh†’M²Zh”Mè€hÀ¬¯”‘TORE ADDRESS OF AN RTS PC CLR 2(SP) ;CLEAR ERROR POINTER FOR CALLER RTS PC ;RETURN .END ] ;029 CARD CODE (12-11-8 ) $026 = 6001 ;026 CARD CODE (12-11-9 ) THREAD = 0. ;* DEVICE = 2. ;* S Y S T E M TYPE = 3. ;* $EXIT = 4. ;* LEVEL = 6. ;* I / O L I S T ERRTSK = 7. ;* ERROR = 8. ;* SYSTEM = 10. ;* E Q U A T E S DATA = 12. ;* ^ST BE AT LEAST THREE .ENDC .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3 QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC .ENDC .IFZ DRESDI NCFILE = 40. ; NO. OF CORE RESIDENT FILE ID'S .ENDC .IFNZ DRESDI NCFILE = NDISCS+40. ; NO. OF CORE RESIDENT ID'S ; ; IN_÷æ ç å  ß Ù × Õ Ó Ñ Ï Í Ë  É ¦C,¦zzz¤zz$z$Êz”z´¢,´PÂPÂPÂPƒ  ÂU ØÂM`; UPDATE LPTABL.001 02.08.72 .TITLE LPTABL ;********************************************************************** ;* ** ;* L I N E P R I N T E R C O N V E R S I O N T A B L E S ** ;* ** ;* ** ;* ASCLP = TO CONVERT INTERNAL ASCII TO LINE PRINTER EVEN ** a; ; C/R TABLES OF ADDRESSES. THE C/R INDEX SERVES AS AN INDEX INTO ; THESE TABLES TO GET THE ADDRESS OF THE REQUIRED TABLE FOR THE ; CURRENT CARD READER. ; CRADDR: .BYTE CR1 ;ADDRESSES OF CARD READERS .BYTE CR2 .BYTE CR3 .BYTE CR4 .=CRADDR+NCR .EVEN ; CRS: .WORD CRS.1 ;ADDRESS OF CARD READER STATUS WORDS .WORD CRS.2 .WORD CRS.3 .WORD CRS.4 .=CRS+NCR+NCR ; CRB1bCLUDING DOD'S .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION .ENDC CHKPTC = 0 ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 2 ;NO. OF TTY UNITS ;IN SYSTEM SYSc¾[ ¾/ ¿* À)À, Â', L/P 1 PARITY ERROR L/P 1 ÀæNOT READY ðùð L/P 1 ABORTEDŽ ä ¤(¬0 ¤( ¬ 0Ó,&f¦æ&f€ ÷ ¨ 7¬”ÿ£,,Ä0÷ T…„ƒ‚�€Ž‡œ— PÂÉ Ñd;* PARITY ASCII. ** ;* EBCLP = TO CONVERT INTERNAL EBCDIC TO LINE PRINTER EVEN ** ;* PARITY ASCII. ** ;* ** ;* IN THE CASE OF EITHER TABLE, THE INPUT BYTE SERVES AS AN ** ;* INDEX INTO THE TABLE. ** ;* e: .WORD CRB1.1 ;ADDRESS OF C/R BINARY BUFFERS .WORD CRB1.2 .WORD CRB1.3 .WORD CRB1.4 .=CRB1+NCR+NCR ; CRB2: .WORD CRB2.1 ;ADDRESS OF C/R COMPRESSED DATA BUFFER .WORD CRB2.2 .WORD CRB2.3 .WORD CRB2.4 .=CRB2+NCR+NCR ; .IFNZ NCR-1 CRVECT: .WORD CRVC.1 ;INTERRUPT VECTOR ADDRESSES C/R # 1 .WORD CRVC.2 ;C/R # 2 .WORD CRVC.3 fTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 g ZŽ,ZÄ çÄ ä÷ ºÄ€ @óÄ ¨_M€QYeÞ"YeÞ�,~ñÃà ó¥ñóæþÿßàþÿÈ *: 4ÞYeÞ& ¦,¢2 ÄÄ´Š0 ó Ÿþÿð¥&&  ̵;L©C «:<}Ç.Æð öþÿ…„ƒ‚�€& ÷ w�$9mQŠ(€}ë,ì0£ˆ ŸþÿÄ™Ÿþÿós3  &p.3 3 ³s3 3 h ** ;********************************************************************** .IFG NLP .DEF ASCLP .IFNZ INEBC .DEF EBCLP .ENDC NON = 240 ;NON = NON-PRINTABLE CHARACTERS ; ; ASCLP: .BYTE 000,201,202,003 ;CARRIAGE 000-003 .BYTE 204,005,006,207 ; CONTROL 004-007 .BYTE 210,011,201,213 ; CODES 010-013 .BYTE 300,215,216,017 ; CODES i;C/R # 3 .WORD CRVC.4 ;C/R # 4 .=CRVECT+NCR+NCR .ENDC .IFZ NCR-1 CRVECT = CRVC.1 .ENDC .PAGE ; ; CREAD OPERATOR ACTION MESSAGES ; ; ERMSGE: .IFG NCR-1 .WORD ERMS,ERMS+16.,ERMS+32.,ERMS+48. .=ERMSGE+NCR+NCR ERMS: .ENDC .WORD 12.,0 .BYTE CR,LF .ASCII 'CR 1 ERROR' .IFG NCR-1 .WORD 12.,0 .BYTE CR,LF .ASCII 'Cj ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS k÷ Âå&  (; €M™,6ñ Â÷ Ð÷ & »‰ ߀þÿÂü “€M&,Z€Á÷ ä÷ ÖÉ ÂwòÂ3 “€M&; €Mé.~÷ ’÷ æMæþÿÂßàþÿ2„Äe® (f,¤2 ÈŸþÿÄôŠ&÷ ¬Ó «:<} Tq€€,È æ& ÷ Ö fæû ƒ… ƒ…4fl 014-017 .BYTE NON,NON,NON,NON ; 020-023 .BYTE NON,NON,NON,NON ; 024-027 .BYTE NON,NON,NON,NON ; 030-033 .BYTE NON,NON,NON,NON ; 034-037 .BYTE 240,041,042,243 ; SP ! " # 040-043 .BYTE 044,245,246,047 ; $ % & ' 044-047 .BYTE 050,251,252,053 ; ' ) * + 050-053 .BYTE 254,055,056,257 ; , - . / 054-057 mR 2 ERROR' .IFG NCR-2 .WORD 12.,0 .BYTE CR,LF .ASCII 'CR 3 ERROR' .IFG NCR-3 .WORD 12.,0 .BYTE CR,LF .ASCII 'CR 4 ERROR' .ENDC .ENDC .ENDC ; ; RANDOM: .IFG NCR-1 .WORD RAND,RAND+20.,RAND+40.,RAND+60. .=RANDOM+NCR+NCR RAND: .ENDC .WORD 16.,0 .BYTE CR,LF .ASCII 'CR 1 SPUR INT ' .IFG NCR-1 n TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION WHERE o&š,ìÂ÷ 2Äò Ò Ä ú)€ ÷ T ±,¶ð ·s3³3 3 ¯"&ü,4ÂsÂ3 3 ÷ Æ÷ ð÷ M�"; €M “€M¬,X÷ æ3 æ´÷ Ö M³ ó%÷ E ´œ:mm"×,|¢÷ À÷ èMæÂ÷ ®ñwðþæÚ÷ ûÂ$Ú, œ÷ œ3 Ä´&ôÂæ<÷ Ö MC?p .BYTE 060,261,262,063 ; 0 1 2 3 060-063 .BYTE 264,065,066,267 ; 4 5 6 7 064-067 .BYTE 270,071,072,273 ; 8 9 : ; 070-073 .BYTE 074,275,276,077 ; < = > ? 074-077 .BYTE 300,101,102,303 ; @ A B C 100-103 .BYTE 104,305,306,107 ; D E F G 104-107 .BYTE 110,311,312,113 ; H I J K 110-113 .BYTE 314,115,116,317 ; L M N O 114-117 .BYTE q .WORD 16.,0 .BYTE CR,LF .ASCII 'CR 2 SPUR INT ' .IFG NCR-2 .WORD 16.,0 .BYTE CR,LF .ASCII 'CR 3 SPUR INT ' .IFG NCR-3 .WORD 16.,0 .BYTE CR,LF .ASCII 'CR 4 SPUR INT ' .ENDC .ENDC .ENDC .PAGE ;********************************************************************** ;* ** ;* r ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE ;* ;* G E N E R A L S s ´Â ©: †0ÄfÁ€÷ rÖ …ÄË÷ Z³ #  *,ì×,´æ<÷ Ö ‡ðÖ …÷ |X©: C.wvþæ&ff& ÀÅAaÁes!93 £"( ,6 DÔ! 3  ³  Ä% 3  ÷ ["x.ZRÄ• ÷ J … s!äÀ5Е sÀìå$(W,€„ Ö …�€Ö ‡Ä … ÷ îÎ5÷â(t120,321,322,123 ; P Q R S 120-123 .BYTE 324,125,126,327 ; T U V W 124-127 .BYTE 330,131,132,333 ; X Y Z [ 130-133 .BYTE 134,335,336,137 ; \ ] ^ 134-137 .BYTE 047,101,102,303 ; ' A B C 140-143 L C .BYTE 104,305,306,107 ; D E F G 144-147 O A .BYTE 110,311,312,113 ; H I J K 150-153 W S .BYTE 314,115,116,317 ; L M N O 154u C R E A D ** ;* ** ;********************************************************************** ; ; CREAD: MOV R1,-(SP) ;SAVE MOV R2,-(SP) ; THE MOV R3,-(SP) ; CALLING MOV R4,-(SP) ; PROGRAM'S MOV R5,-(SP) ; REGISTERS MOV 12.(SP),R1 ;GET I/O LvY S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 32767.+8192. ;TOP OF CORE (BYTE ADDRESS) .PAGE ;********************************************************************** ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* w,¤Å îÄÙ¶ 6 & „`“3 Ž Ö ‡‘ Ë,È 4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%^,ìD „ „ ÄeÿŸD ‚ ñŸ‚ð¥ ^,!ƒ!õŸ†Ä5  ‡ð¥ùÄn,4‡Ä‡Ä‡ß@ê‡Äê& Ä5 Ä5},XÄ5Ö ‡– ‡Ö ‡ó À 3 ôÀ"Ï,| ê÷ šúß ê êß êßÈêÄ´l &´×, ôÂ&æ<÷ Ö ‡fÄÅÅ ýHx-157 E E .BYTE 120,321,322,123 ; P Q R S 160-163 R .BYTE 324,125,126,327 ; T U V W 164-167 .BYTE 330,131,132,NON ; X Y Z 170-173 .BYTE NON,NON,NON,NON ; 174-177 ; ; ; .IFNZ INEBC ; ; EBCLP: .BYTE 000,201,202,003 ; 000-003 .BYTE 204,005,006,207 ; 004-007 .BYTE 210,011,012,213 ; 010-013 yIST ADDRESS, PUT IN R1 MOV 10.(SP),12.(SP) ;PUT PC AT BOTTOM OF STACK FOR EASY EXIT MOV R0,10.(SP) ;THEN SAVE R0. STACK NOW LOOKS LIKE: ; ; PC (BOTTOM) ; R0 ; R1 ; R2 ; R3 ; R4 z ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;********************************************************************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 1 ;1 = INCLUDE BINARY MODE, 0 = DON'T BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INP{©: p0ÄÀåÄÄ Ä Ä Äeô0ð0ŠÈ&÷ Æô*9€aw,ì…À‡ÃwÃwøÿÃwðÿÃ&üÖ,üÅÀ@aAa… !Å ý@Á…Âwjü‰ "}0  ê‡f  ÅÅ Â`üBa…‡„fŦ *¦ ,Hæþÿßàþÿõ 5 Ÿþÿf÷ …ޤC 9€a‘,l‡Ÿþÿ…Ž´‡1 ‡· <ú‡7 6ú‡& œ�,�Î & & & ÷ | .BYTE 300,NON,NON,NON ; 014-017 .BYTE NON,NON,NON,NON ; 020-023 .BYTE NON,NON,NON,NON ; 024-027 .BYTE NON,NON,NON,NON ; 030-033 .BYTE NON,NON,NON,NON ; 034-037 .BYTE NON,NON,NON,NON ; 040-043 .BYTE NON,NON,NON,NON ; 044-047 .BYTE NON,NON,NON,NON ; 050-053 .BYTE } ; R5 (TOP) ; MOV DATA(R1),R0 ;GET DATA BUFFER ADDRESS ; ; THIS SECTION CHECKS THE VALIDITY OF THE CALLER'S LIST AND DATA ; BUFFER VARIABLES. ; ; JSR PC,CRCHEK BNE CRDAXX MOVB DEVICE(R1),R2 ;GET DEVICE NO. CLR R3 ; CRDA00: CMPB R2,CRADDR(R3) ;COMPARE TO VALID DEVICE NUMBERS * BEQ CRDA10 ;BRANCH IF OK ~UT TO TTY ON COMMAND INEBC = 1 ;1 = PROVIDE FOR INTERNAL EBCDIC CODE EXEBC = 1 ;1 = PROVIDE FOR EXTERNAL EBCDIC CODE ; (029 CARD CODE) $RES = 0. ;BASIC TIMER RESOLUTION USED BY CREAD $1SEC = 60. ;MULTIPLE USING $RES FOR 1 SECOND $500MS = 30. ;MULTIPLE USING $RES FOR 1/2 SECOND $100MS = 6. ;MULTIPLE USING $RES FOR 100 MS MXTIME = Ö ‡ ßL€ßà‚÷ 6�m„Là"´Œþ÷ fÿÀÁ B  ü‡‡¿  Áó€ NON,NON,NON,NON ; 054-057 .BYTE NON,NON,NON,NON ; 060-063 .BYTE NON,NON,NON,NON ; 064-067 .BYTE NON,NON,NON,NON ; 070-073 .BYTE NON,NON,NON,NON ; 074-077 .BYTE 240,NON,NON,NON ; SP 100-103 .BYTE NON,NON,NON,NON ; 104-107 .BYTE NON,NON,NON,056 ; . 110-113 .BYTE 074,050,053,� * C .IFG NCR-1 TST (R3)+ CMP R3,#NCR+NCR BNE CRDA00 * R .ENDC NO. * ; CRDW01: MOV #1,R4 ;ILLEGAL DEVICE NUMBER BR CRDAXX ; CRDW06: MOV (SP)+,@#PSR MOV #6,R4 ;LIST NOT THREADABLE BR CRDAXX ; CRDW09: MOV #9.,R4 ;LIST IS I‚ 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 „NON ; < ( + 114-117 .BYTE 246,NON,NON,NON ; & 120-123 .BYTE NON,NON,NON,NON ; 124-127 .BYTE NON,NON,041,044 ; ! $ 130-133 .BYTE 252,251,273,NON ; * ) ; 134-137 .BYTE 055,257,NON,NON ; - / 140-143 .BYTE NON,NON,NON,NON ; 144-147 .BYTE NON,NON,336,254 ; ^ , 150-153 .BYTE 245,NON,276,077 ; % …N ROS BR CRDAXX ; CRDW10: MOV #10.,R4 ;DEVICE NOT AVAILABLE ; CRDAXX: MOV R4,ERROR(R1) ;STORE USER'S ERROR CODE MOV (SP)+,R5 ;RESTOORE HIS REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 SEZ ;SET ERROR CODE RTS PC ;THEN EXIT BACK TO CALLER ; CRDA10: MOV LOGMAX,R† ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 ‡ü8ü8gQH”Ì:Ã~ü8M~t9Ô~ì9\~d:ˆ> ? 154-157 .BYTE NON,NON,NON,NON ; 160-163 .BYTE NON,NON,NON,NON ; 164-167 .BYTE NON,NON,072,243 ; : # 170-173 .BYTE 300,047,275,042 ; @ ' = " 174-177 .BYTE NON,101,102,303 ; A B C 200-203 * .BYTE 104,305,306,107 ; D E F G 204-207 * .BYTE 110,311,NON,NON ; H I 210-213 * .BYTE NON,NON,NON,NON ; ‰4 ; CRDA11: TBIT #AVAIL,PHYDEV(R3) ;SEE IF THIS DEVICE IS AVAILABLE BNE CRDA13 ;BRANCH IF C/R IS AVAILABLE ; CRDA12: TBIT #ALT,PHYDEV(R3) ;OOPS. BETTER SEE IF WE HAVE BEQ CRDW10 ;AN ALTERNATE. BRANCH IF NO DEC R4 BLE CRDW10 ;BRANCH IF NO MORE DEVICES MOV ALTDEV(R3),R3 ;GET LOGICAL UNIT NO. OF ALTERNATE ASL R3 ;CONŠ = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT ‹ã~Ü:k~T;ò~Ì;z~D<Œ 214-217 * L .BYTE NON,312,113,314 ; J K L 220-223 * O C .BYTE 115,116,317,120 ; M N O P 224-227 * W A .BYTE 321,322,NON,NON ; Q R 230-233 * E S .BYTE NON,NON,NON,NON ; 234-237 * R E .BYTE NON,NON,123,324 ; S T 240-243 * .BYTE 125,126,327,330 ; U V W X 244-247 * .BYTE 131,132,NON,NON ; Y Z �VERT TO WORD INDEX CMPB #CRDEV,PHYDEV(R3) ;SEE IF THE DEVICE IS COMPATIBLE BEQ CRDA11 ;BRANCH IF WE CAN USE IT BR CRDA12 ;OTHERWISE, GO TRY NEXT NEXT ALTERNATE ; CRDA13: MOV @#PSR,-(SP) ;SAVE PSR .IFZ $1145 MOV #340,@#PSR ;SET CPU LEVEL = 7 (11/20) .ENDC .IFNZ $1145 SPL 7 ;SET CPU LEVEL = 7 (11/45) .ENDC DEC (R1) ŽVECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;********************************************************************** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************�~¼<‰~4=~¬=˜� 250-253 * .BYTE NON,NON,NON,NON ; 254-257 .BYTE NON,134,NON,NON ; \ 260-263 .BYTE 333,335,NON,NON ; [ ] 264-267 .BYTE NON,NON,NON,NON ; 270-273 .BYTE NON,NON,NON,NON ; 274-277 .BYTE NON,101,102,303 ; A B C 300-303 * .BYTE 104,305,306,107 ; D E F G 304-307 * .BYTE 110,311,NON,NON ; H I ‘ ;TEST THREAD WORD OF LIST BNE CRDW06 ;AND BRANCH IF NOT ONE (THAT'S A NO-NO) MOV R1,@CRLAST(R3) ;QUEUE THE REQUEST MOV R1,CRLAST(R3) TST ACTIVE ;SEE IF A TASK IS CURRENTLY ACTIVE BEQ CRDA15 ;BRANCH IF NO MOV $CTASK,R4 ;OTHERWISE, GET THE TASK NUMBER INCB IOSTAT(R4) ;INCREMENT THE TASK'S 'I/O IN PROGRESS' FLAG MOV R4,SYSTEM(R1) ;STORE THE TASK NO. FOR ’** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 “~$>~œ>§~?.~Œ?” 310-313 * .BYTE NON,NON,NON,NON ; 314-317 * U .BYTE NON,312,113,314 ; J K L 320-323 * P C .BYTE 115,116,317,120 ; M N O P 324-327 * P A .BYTE 321,322,NON,NON ; Q R 330-333 * E S .BYTE NON,NON,NON,NON ; 334-337 * R E .BYTE NON,NON,123,324 ; S T 340-343 * .BYTE 125,126,327,330 ; U V W X •USE WHEN I/O IS COMPLT BR CRDA16 ;BRANCH IF 'TIS ; CRDA15: CLR SYSTEM(R0) ;ZERO MEANS REQUESTOR IS NOT A TASK ; CRDA16: TST CRBUSY(R3) ;SEE IF THE I/O SHOULD BE STARTED BEQ CRDC00 ;BRANCH IF IT IS .PAGE ;********************************************************************** ;* ;* ;* THIS SECTION OF THE CODE PREPARES TO EXIT. IF EXIT TYPE 2 IS ;* REQUESTED, THE CALLING TASK IS SUSPENDE– ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 —¶~@=~|@Å~ô@M~lA 344-347 * .BYTE 131,132,NON,NON ; Y Z 350-353 * .BYTE NON,NON,NON,NON ; 354-357 * .BYTE 060,261,262,063 ; 0 1 2 3 360-363 .BYTE 264,065,066,267 ; 4 5 6 7 364-367 .BYTE 270,071,NON,NON ; 8 9 370-373 .BYTE NON,NON,NON,NON ; 374-377 .ENDC .ENDC .END ™D. OTHERWISE, CONTROL ;* IS RETURNED TO THE CALLER. ;* ;********************************************************************** ;* ; CRDB05: MOV (SP)+,@#PSR ;FIRST, RESET THE CPU INTERRUPT LEVEL ; CRDB06: CMPB #2,TYPE(R1) ;THEN SEE IF WE'RE IN A TYPE 2 RETURN BNE CRDB10 ;BRANCH IF NO TST ACTIVE ;ELSTWISE, MAKE SURE A TASK IS CALLING BEQ CRDB10 ;BRANCH IF NO - SOMEBODY GOOFED CLZ š ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765020 ;L/P # 1 STATUS REGISTER STAT.2 = 765020 ;L/P # 2 STATUS REGISTER ›Ô~äA\~\Bã~ÔBk~LCœ ** ;* CALL LPRNTR (IADDR(LIST)) ** ;* ** ;* THE FORMAT OF THE DATA BUFFER, DATA, IS: ** ;* ** ;* ----------------------------------- ** ;* WORD 1 ! NWORD ! ** ;* ------� ;SET CONDITION CODE ZERO BR CRSAVE ;AND SUSPEND CALLER ; CRDB10: ;WE MUST RETURN TO THE CALLER MOV (SP)+,R5 ;FIRST, MOV (SP)+,R4 ; RESTORE MOV (SP)+,R3 ; THE MOV (SP)+,R2 ; GENERAL MOV (SP)+,R1 ; REGISTERS MOV (SP)+,R0 ; CLZ ;THEN, S STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION .PAGE Ÿò~ÄCz~ PC (RETURN) CLR -(SP) MOV #DSPTCH,-(SP) ; JMP QSAVEI ;SUSPEND TASK; QSAVEI WILL EXIT TO DSPTCH .PAGE ;*******************¦= 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $SAVE = 104400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 16. ; NO. OF SOFTWARE PRIORITY LEVELS .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK =100. ; MAX. NUMBER OF CORE TASKS IN SYSTEM QUEU NLTASK = 1 ; LARGEST TASK # OF TA§~ G.~„G¶~üG>~tH¨ NWORD = NUMBER OF CHARACTERS TO PRINT (INCLUDING THE ** ;* CONTROL CHARACTER, CNTRL), AND ** ;* NWORD > 0 FOR ASCII STRINGS ** ;* NWORD < 0 FOR EBCDIC STRINGS ** ;* RESRVD = RESERVED FOR SYSTEM USE ** ;* CNTRL = CARRIAGE CONTROL: 0 - NO LINE FEED ** ;* N - SKIP N LINES (N=1,2,3) ** ©*************************************************** ;* ;* AT THIS POINT, THE CURRENT REQUEST IS THE FIRST REQUEST IN THE ;* QUEUE. IF THE C/R IS READY, THEN I/O WILL BE INITIATED. ;* OTHERWISE, OPERATOR ACTION WILL BE REQUIRED. CRDC00 IS ;* ENTERED WITH INTERRUPTS MASKED. ;* ;* ;********************************************************************** ; ; CRDC00: INC CRBUSY(R3) MOV (SP)+,@#PSR ;RESTORE PREVIOUS PSR (ENABLE INTERRUPTS) ªSKS LOADED WITH SYSTEM ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 1 ; SYSTEM OVERLAY OPTION ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 20 ;MAXIMUM NUMBER OF OVERLAY TASKS .ENDC ;(NOT USED IF OVRLAY = 0) «Å~ìHM~dIÔ~ÜI\~TJ¬ ;* FF- EJECT PAGE ** ;* LF- SKIP 1 LINE (SAME AS N=1) ** ;* CHAR K = MESSAGE IN ASCII OR EBCDIC ** ;* ** ;* FF, LF AND HT MAY BE IMBEDDED IN THE TEXT FOR MULTIPLE LINES.** ;* TAB (HT) POSITIONS ARE: 1, 9, 17, ..., 8N + 1, ... ** ;* ­ MOV R0,CRDATA(R3) ;STORE ADDRESS OF DATA BUFFER .IFNZ BCD TST TABLE(R3) ;IF TABLE IS NON-ZERO, THEN A MODE BNE CRDC05 ;HAS ALREADY BEEN DEFINED TSTB LEVEL(R1) ;SEE IF CALLER WANTS ASCII OR EBCDIC BNE CRDC04 MOV #O26ASC,TABLE(R3) ;ASSUME 026 TO ASCII CONVERSION BR CRDC05 ; CRDC04: MOV #O26EBC,TABLE(R3) ; CRDC05: .ENDC JSR PC,CRSIO ® .IFZ OVRLAY ; MAXOVR = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; ¯ã~ÌJk~DKò~¼Kz~4L° ** ;* PROGRAMMER: 55 ** ;* DATE: 01.17.71 ** ;* ** ;* COPYRIGHT 1972 ** ;* GULF ELECTRONIC SYSTEMS ** ;* ALL RIGHTS RESERVED ** ;* ± ;OTHERWISE, START UP C/R MOV CRFRST(R3),R1 ;RESTORE LIST ADDRESS BR CRDB06 ; CRDC10: MOV #ERMSGE,-(SP) ;PUT ADDRESS OF ERROR MESSAGE ON STACK JSR PC,CRMSGE ;PRINT MESSAGE MOV #MXTIME,COUNT(R3) ;SET UP FOR MAXIMUM TIME DELAY .IFZ NCR-1 ; . MOV #CRMOD,R5 ;GET TIMER MODULE ADDRESS FOR NCR = 1 .ENDC ; .IFG NCR-1 MOV CR² QTAB XXXXXXXX ;NTASK MUST BE <= MXTASK .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = 0 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = 0 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY³~¬L‰~$M~œM˜~N´ ** ;********************************************************************** ; .IFG NLP .DEF LPRNTR .DEF LPINIT .REF QSAVEI,SAVE,TTYOUT,DSPTCH .REF QUEUE,IOQTME,IODQTM,IOSTAT .REF ASCLP,ACTIVE,UNSPND,$CTASK .REF PHYDEV,ALTDEV,LOGMAX .DEF LPON,LPOFF .IFNZ INEBC .REF EBCLP .ENDC .IFNZ LPBACK .DEF LPTTY .ENDC .IFNZ OVµMDAD(R3),R5 ;GET TIMER MODULE ADDRESS FOR NCR > 1 .ENDC ; . MOV #CRDLAY,8.(R5) ;STORE ADDRESS OF CRDLAY IN TIMER MODULE MOV R5,-(SP) ;ADDRESS OF TIMER MODULE ONTO STACK MOV #$1SEC,-(SP) ;REQUEST 1 SECOND DELAY JSR PC,IOQTME TST (SP)+ BR CRDB05 .PAGE ;********************************************************************** ;* ¶ PROPERTY LEVEL 3 PRIP04 = 1 ; PRIORITY PROPERTY LEVEL 4 PRIP05 = 0 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = 0 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = 1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = 1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = 0 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVE·~ŒN§~O.~|O¶¸RLAY .REF RELTSK .ENDC ;* ;* S Y S T E M E Q U A T E P A R A M E T E R S ;* THREAD = 0. ;LIST THREAD DEVICE = 2. ;LIGICAL DEVICE NO TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDR ERRTSK = 6. ;ERROR TASK NO. LEVEL = 7. ;I/O PRIORITY ERROR = 8. ;ERROR PARAMETER SYSTEM = 10. ;RESERVED DATA = ¹ ** ;* C R I N T ** ;* ** ;* CARD READER INTERRUPT ROUTINE. THIS ROUTINE GETS ENTERED ** ;* FOR THE FOLLOWING REASONS: ** ;* ** ;* 1. CARD DONE INTERRUPT ** ;* 2. COLUMN READY INTERRUPT ºL 11 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; »~ôO>~lPÅ~äP@€€@÷à䮯ü8ø6÷ œ7÷|ox¯÷€t¯ß¢tßà÷ènÔ®÷àЮ÷´‘ð®÷àì®Á€÷"~\Q2jЮwή÷ègÊ®wÈ®� ÷2jj¯wh¯÷ègd¯wb¯÷ú®÷ ö®÷ ä÷ ¦.÷ /÷ ¨?\®÷ lÁñ•‰x1Š¡wÁ ñ’o¸v_¼ 12. ;ADDRESS OF DATA PSR = PS ;CPU STATUS REGISTER AVAIL = 100000 ;'AVAILABLE' BIT IN PHYSICAL DEVICE TABLE ALT = 040000 ;'ALTERNATE DEVICE' BIT IN PHYSICAL DEVICE TBL LPDEV = 3 ;PHYSICAL DEVICE TABLE CODE FOR L/P DEVI ;* ;* L P R N T R E Q U A T E P A R A M E T E R S ;* ID = 100000 ;INTERRUPT ON L/P DONE IE = 040000 ;INTERRUPT ON PARITY OR PAPER ½ ** ;* 3. CARD READER ERROR ** ;* 4. TRANSITION TO ON-LINE ** ;* 5. A BERSERK CARD READER DOING THINGS IT SHOULDN'T ** ;* OUGHTA DO. ** ;* ** ;* OUR MISSION, SHOULD WE DECIDE TO ACCEPT IT, IS TO DETERMINE ** ;* WHAT CAUSED THE INTERR¾ WILL BE RETRIEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE '¿TÂÃRÒÒÒ5~ÔQ Ãe� W #ó      w`-Š~LRnXP¶U L/P 1 PAÄ~ÄRRITY ERROR L/P 1 NOT READY L/P 1 ABORTEDR˜R&f¦æ&f€ ÷ ¨ 7¬”ÿÄ0÷ T…„ƒ‚�€Ž‡ƒ~ 0. XXXXXX ; ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS ËõŸ†Ä5  ‡ð¥ùćććß@ê‡Äê& Ä5 Ä5Ä5Ö ‡– ‡Ö ‡ó ´R 3R  ê÷ �~tWšúß ê êßRêßÈêĨRô¶U&æ<÷ žÖ ‡fÄøRÅÅ ýÀåÄÄ Ä Ä ÄeèW0ð0ŠÈ&÷ Þ…ÀøR‡Ã£~ìWwÅÀøR@aAa… !Å ý@ÁöQ…ÂRwjü ê‡f  ÅÅ Â`üBa…‡„fÅšRæþÿßàþÿõ 5 Ÿþÿf÷ d…ޤ‡Ÿ›~dXþÿ…Ž´‡1 ‡· <ú‡7 6ú‡& œÎ & & & ÷ Æ!Ö ‡ ß@T€ßà‚÷ Œþ÷ fÿÀøQÁþQB  ü‡‡�‚„‡ˆ �‹À�Ž          3Ì ** ;* L P R N T R D A T A T A B L E S ** ;* ** ;* THE FOLLOWING TABLE AND BUFFER DEFINITIONS ASSUME A ** ;* MAXIMUM OF FOUR (4) LINE PRINTERS WILL EVER BE USED. IF ** ;* NLP > 4, THEN SOME CODE WILL HAVE TO BE ADDED. ** ;* ** ;*********************ÍBIT #DONE,@CRS(R3) .ENDC BNE CRCLOS ;BRANCH TO CLOSE OUT THIS REQUEST JMP (R5) ; CRIB10: .IFZ NCR-1 ;GET MOV @#CRS.1,R0 ; THE TST ERRCR ; CURRENT .ENDC ; STATUS .IFG NCR-1 ; OF THE MOV @CRS(R3),R0 ; CARD READER TST ERRCR(R3) ; AND TEST FOR A Î PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DÏ~ÜX       !"£$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZ     ß ˜Xß š`‡ ‹À     Ñ~TY                                                         .<(+ ¦         !$ª©» -¯        Þ¬¥ ¾?          :£À'½" ABÃDÅÆGHÉ~ÌY       ÊKÌMNÏPÑÒ        SÔUVרYZ       \  ÛÝ           ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרYZ      0±²3´56·¸9      æ­~DZþÿßàþÿþ% f…µ…ŸþÿŽ6 ‡Ÿþÿwè.öeþlZ6 ‡Ð************************************************* ; LPBUSY: .=.+NLP+NLP ;1 = L/P CURRENTLY IN USE ; LPDATA: .=.+NLP+NLP ;ADDRESS OF ACTIVE DATA BUFFER ; LPFRST: ; * .=NLP+NLP*NLPRTY+. ;ADDRESS OF FIRST LIST IN THREAD " ; " LPLAST: ; * .=NLP+NLP*NLPRÑ .ENDC ; PREVIOUS ERROR ; CRIB12: BEQ CRIB20 ;BRANCH IF NO PREVIOUS ERROR JMP (R5) ;OTHERWISE, EXIT TO RESTOR ; CRIB15: JMP CRID00 ;THIS IS HERE 'CAUSE A BRANCH WON'T REACH ; CRIB20: BIT #COLUMN,R0 ;TEST FOR COLUMN READY BNE CRIB15 ;BRANCH IF A COLUMN OF DATA IS READY BIT #DONE,R0 ;TEST FOR CARD DONE BNE CRIC00 ÒESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ÓPÈ_ ZªZf~¼Z¸ZÆZÔZpþrþtþ CR 1 ERROR CR 1 SPUR INT f¦æ&f� ¶ 6 @ ÷ ºBœ ³ ÂZÄ ŸþÿÄÄ ÄÆ~4[ 1…„ƒ‚�€´‡Ä®õ_n[ @þPìÄ êÃQà ó¥þPñóæþÿßàþÿÉ Ó{�Zs�Z÷ ÖÄÌ´Šx1 0 ó ’Z&Ÿþÿñ¥3~¬[÷ ¬¤…„ƒ‚�€¤‡æþÿ€ ¶ ¶ …„ƒ‚�& æTw‚³ ’ZŸþÿ3”Zó œZ ñ‹ó²`œZó²cœZ÷ ¶ÁŽZÄæÊZ÷ 0~$\fó´ˆZÅ Zõ^_fæ<÷ þÖ ¯‰ ó ’ZæÚZ÷ 6Mó ˜Zß5@pþ/ÔTY+. ;ADDRESS OF LAST LIST IN QUEUE " ; ================================ ; " ; " ; ====> STORED AS: PRIORITY 1 * ; PRIORITY 2 * ; . * ; . * L/P # 1 Õ ;BRANCH IF END OF CARD BIT #ONLINE,R0 ;TEST FOR TRANSITION TO ON-LINE BNE CRIB12 ; MOV R0,ERRCR(R3) ;ASSUME C/R ERROR AND SAVE STATUS .IFZ NCR-1 MOV #CRMOD,R0 ;PUT ADDRESS OF TIMER MODULE IN R0 .ENDC .IFG NCR-1 ;AND, IF NCR > 1..... MOV CRMDAD(R3),R0 ;GET ADDRESS OF C/R TIMER .ENDC MOV #CRTIME,8.(R0) ;SET TIMEOUT ADDRESS TO CRDERR Ö; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ;1/60 RES1 = 15. ;1/4 RES2 = 2 ;1/2 RES3 = 2 ;1 RES4 = 5 ;5 RES5 ×MÀpþ÷ þMw"À5€ûÀ5@À5ó3ŠZÀ Zð&_&æô~œ\÷  ýÖ ßE@pþM3 ˜Zó šZÁŽZ÷ 3 šZMæþÿÀÂýÁÄýñ´ý÷ æý± W"Rñ Pßàþÿ·”ý÷ŽZŽýŸþÿÄŒýÈð¥~]ð¥@ ƒ ÿŸ†¦æ&fÈ …„ƒ‚Ä && ÷ f!Ö Ä ôŠxœ¢Â ßEApþ3 ’Zæ¸Z÷ üüÖ M�@ ÷ @3q~Œ]”Z÷ <M0•ó ÀZHó ŒZÁ”ZÁeÁlˆZ¼Z  -ÄÆZÄ Ä Ä Ä ³ ¼ZMÄÆZ ÑÄ ÑóeˆZó ŒZó1�îÄÆZÄ Ä Ä Ä Ñ~^Ä ‘óeˆZó ŒZàÀ1ÚÉ^ÆZóeˆZ3 ¼Zó Ø ; . * ; PRIORITY NLPRTY * ; . ; . ; . ; REPEAT FOR L/P # 2, ETC. ; ; LPTASK: .=.+NLP+NLP ;THE TASK NO. WHO INITIATED THE CURRENT RQST ; LPIOÙ MOV R0,-(SP) MOV #$500MS,-(SP) ;SET UP 500 MS DELAY JSR PC,IOQTME ;START TIMER TST (SP)+ .IFZ NCR-1 ;SUPPRESS FURTHER INTERRUPTS FROM C/R BIC #ENABLE,@#CRS.1 ; . .ENDC ; . .IFG NCR-1 ; . BIC #ENABLE,@CRS(R3); . .ENDC ; . JMP (R5) Ú= 2 ;10 RES6 = 3 ;30 RES7 = 2 ;60 RES8 = 3 RES9 = 5 RES10 = 100. RES11 = 2 RES12 = 2 RES13 = 2 RES14 = 2 RES15 = 2 TRES = 1 ; TIME-SLICE RESOLUTION USING MAXT ; ; IN TASK HEADER ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATEÛŒZM³ ˆZ×,ˆZÄÆZ! ³ žZ*! ! +! ó ŒZ¸ÂÈZÂlœZÁ”ZÁeÁlˆZ¡’ó Ý~|^ŒZªÁŽZñ³ ˜ZMÀŽZð‹ó²`œZ³ šZ—ó²cœZùÀŽZð‹ó²aœZðó²bœZì Á%(†W ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ% ~ô^† ÿŸ †   `— ÿŸ†Ä ‡„ „ „ „ „ øÄ õCÀÄZÀU3ŠZæÊZ÷ Nó´ˆZñ^_; ÄZfæ<÷ êúÖ ‡CûEAÄZû5í~l_ÄZ ó ˆZì…ÁŽZñw>ý…w*ý„fŪZæþÿßàþÿõ 5 Ÿþÿf÷ …ޤ‡Ÿþÿ…Ž´‡1 ‡3 ˆZ3 ˜Zs –Z3 ¼Zó žZy~ä_À”Z � ÜCM: .=.+NLP+NLP ;I/O COMPLETE ADDRESS OF CURRENT REQUEST ; LPCNT: .=.+NLP+NLP ;INDEX INTO TEXT OF CURRENT REQUEST ; LPMAX: .=.+NLP+NLP ;MAXIMUM VALUE OF LPCNT (= NWORD) ; LPRTRY: .=.+NLP+NLP ;NO. OF ATTEMPTS OF CURRENT REQUEST ; LPRIOR: .=.+NLP+NLP ;PRIORITY INEDX FOR CURRENT REQUEST ; LPMODE: .=.+NLP+NLP ;0 = CARRIAGE CTRL MODE; 1 = AUTO LINE FEED ; LPWOÝ;EXIT TO RESTOR .PAGE ;********************************************************************** ;* ;* ;* AT THIS POINT, ONE FULL CARD HAS BEEN READ. IF THE 'READ ANOTHER ;* CARD' FLAG (REPEAT) HAS BEEN SET, THEN ANOTHER REQUEST WILL BE ;* INITIATED IMMEDIATELY. THIS USUALLY HAPPENS WHEN A CONTROL CARD ;* HAS BEEN READ. ;* ;* CRIC00: CLR IGNORE(R3) TST REPEAT(R3) ;SHOULD WE READ ANOTHER CARD? BEQ CRCLOS ;BRANCH IF IT ISÞR THAN ONE MILLISECOND. MSECR = 0 ;NORMALLY 1 MSEC: HERE IS = 16.7 MSECS SECR = 3 ;"RES3" IS THE ONE-SECOND RESOLUTION $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALß sÀZ3 ŠZó’ZÁ Zfæ<÷ 4úñ&_Ö ³ŒZûAÄZ‡û ”ZßÀªZ"ÚðP`p &æ¸Z÷ .úÖ ÷ ú‡ ñÈ_Ä”Z$~\`ô¥ñ ÀŽZð…3ˆZwDü3 žZ³ šZ…wü· ú‡7 ú‡ßD\˜ßàš7 äù÷ŽZàù‡ 12345678 &=':>@9 0/Ö~Ô`STUVWXY _,(%\"Z -JKLMNOPQ $*];^R ! +ABCDEFGH .)[<#I ~La ? 12345678 :#@'àRD: .=.+NLP+NLP ;THIS WORD CONTAINS THE LENGTH OF THE ;CURRENT L/P BUFFER BEING OUTPUT (WHICH ;IS NOT NECESSARILY THE SAME AS THE CALLER'S ;BUFFER LENGTH) ; LPBUF: .=LPSIZE+2*NLP+. ;BUFFERS FOR LINE PRINTER OUTPUT ; LPLIST: .WORD 1,400,TYDONE,0,0,0,0 ;TTYOUT .WORD 1,400,TYDONE,0,0,0,0 ; LISTS .WORD 1,400,TYDONE,0,0,0,0áN'T ; CRIC10: MOV CRFRST(R3),R1 ;GET I/O LIST ADDRESS JSR PC,CRSIO ;OTHERWISE, START THE I/O CLR REPEAT(R3) ; CARD' FLAG JMP (R5) ;EXIT TO RESTOR .PAGE ;********************************************************************** ;* ;* ;* THIS SECTION CLOSES OUT A READ REQUEST AND, IF NECESSARY, ;* UNSUSPENDS THE CALLER OR JSR'S TO THE I/O COMPLETE ROUTINE ;* ;* ;***************************âLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ;# OF T-O-D CLOCK TICKS PER SECOND $ABMPL = 6 ;CLOCK BASE PERIOD = 1/10 SECOND C1COMD = 177546 ;DEVICE ADDRESS FOR HIGH-SPEED CLOCK C1CBIT = 100 ;BIT TO CONTROL FAST CLOCK INTERRUPT $TMSLC = 1 ;SYSTEM OPTIONã="9 Ñ~Äa 0/STUVWXY ,% >?Z -JKLMNOPQ !$*); R  stuvwxy z &ABCDEFGH ~?ðaâãäåæçèiàklmnoé!"#$%&'()*+,-./`ÑÒÓÔÕÖרYZ[\]^_ÙС¢£¤¥¦§¨ ª«¬­®¯©ábcdefgh ÿ~,cêëìíîïPÁÂÃÄÅÆÇÈIJKLMNOÉ À�‚ƒ„…†‡ˆ€Š‹Œ�Ž�‰ABCDEFGHÊËÌÍÎÏj‘’“”•–—˜�š›œ�žŸ™QRSä ; FOR .WORD 1,400,TYDONE,0,0,0,0 ; MESSAGES .=NLP*14.+LPLIST ; LPMOD: .WORD 1,$RES*256.+050000,0,0,LPTIME ;TIMER .WORD 1,$RES*256.+050000,0,2,LPTIME ; MODULE .WORD 1,$RES*256.+050000,0,4,LPTIME ; FOR .WORD 1,$RES*256.+050000,0,6,LPTIME ; DELAYS .=NLP*10.+LPMOD ; LPUNIT: .BYTE 3,0,0,0 ;VALID LOGICAL DEVICE ADDRESSES .=LPUNIT+NLP .EVEN .IFG NLå******************************************* ; ; CRCLOS: MOV @#PSR,-(SP) ;SAVE CURRENT PRIORITY LEVEL .IFZ NCR-1 ;CODE FOR ONLY ONE C/R MOV CRFRST,R0 ;GET LIST ADDRESS =====>R0 MOV CRDATA,R1 ;GET DATA ADDRESS =====>R1 MOV COUNT,NREAD(R1) .IFNZ BIN .IFNZ BCD TST CRMODE ;IF IT'S BINARY DATA WE READ .IFZ $RASM BEQ CRCA05 .ENDC æ FOR INCLUDING TIME-SLICING $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; ACTSIZ = 20. ; MAXIMUM NO. OF ENTRIES IN AUTH. CODE .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; çTUVWXÚÛÜÝÞßp±²³´µ¶·¸°º»¼½¾¿¹q\~¤crstuvwx0úûüýþÿ@ñòóôõö÷ø@P~}zn|ù@@@@@@@@@@@@@@@ðaâãäåæçè@@kMl±@é@@@@@@@@@@@@@@@ ÑÒÓÔÕÖר@@[\µ^jÙ@@@@@@@@@@@@@@@Z@@@@@@@@@£~d@@@@@@@@@@@@@@@@@@@@@@NÁÂÃÄÅÆÇÈ@@K�´L;É@@@@@@@@@ @@o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ~”d@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@eô(%~ e@tÿÀ0Š¡wð•‰xÀ-47.À ð²d¸v_BY‡÷Pnæ˜eß èP-1 ; LPIOLS: .WORD LPLIST ;ADDRESS OF LINE PRINTER .WORD LPLIST+14. ;TTY MESSAGE I/O LISTS .WORD LPLIST+28. ;FOR QUICK ACCESS .WORD LPLIST+42. ; .=LPIOLS+NLP+NLP ; LPMDAD: .WORD LPMOD ;TIMER MODULE ADDRESSES .WORD LPMOD+10. ;FOR QUICK ACCESS .WORD LPMOD+20. ; .WORD LPMOD+30. ; .=LPMDAD+NLP+NLP .ENDC ; ; .IFNZ é .IFNZ $RASM BEQ CRCA01 .ENDC .ENDC ASR NREAD(R1) ;THEN CONVERT NO. BYTES TO NO. WORDS .IFNZ BCD .IFNZ $RASM BR CRCA05 ; CRCA01: CMP (R1),#82. ;IF USER WANTED 82 CHARACTERS, STORE BNE CRCA05 ;THE LAST TWO AS CR, LF MOV #LF*256.+CR,80.(R1) .ENDC ; CRCA05: .ENDC .ENDC .IFZ $1145 MOV #340,@#PSR ê .IFNZ NDISCS DRESDI = 1 ; DISC RESIDENT DIRECTORY OPTION .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR MAX. OF 3 DISCS .ENDC ; NDPRT1 = 5 ; NO. OF PRIORITY LEVELS IN DISC 1 QUEUES .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRëîZ×-Næ¦e÷XTÀfÁP”ÀåÁ û÷� @÷ €í÷Þ´~„e7 7Š’š÷ ÷ º ´e´ePÑ~üepÿ€àtÿ„àrÿ‚àvÿ†à0fR0 MOV CRDATA(R3),R1 ;GET DATA ADDRESS =====>R1 MOV COUNT(R3),NREAD(R1) ;STORE NO. CHARACTERS READ .IFNZ BIN .IFNZ BCD TST CRMODE(R3) ;SEE WHICH MODE WE'RE IN .IFZ $RASM BEQ CRò; ; INCLUDING DOD'S .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION .ENDC CHKPTC = 0 ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 2 ;NO. OF TTY UNITS ó & ÷ ÞÖ w €ø w ‚œ ôŠx— Â÷ j1Š{f÷ ²žf %žfÄåžf·•Ò–±Š{f5–f 1Š}f%žf·•?~Di¸–5šf÷ 4w® 1ŠfñŠ{f·• –÷±Šƒff(f÷ l Ö ïñ•‹f1Šƒfôý• fñ•‹fâñ‹‘fý• fñ•‹fØ1Š‘fý•Ufñ•‹f±ŠƒfÌý•^fc~¼iñ•‹fö}œ‡ffñ•‹fﱊƒfý• fñ• ‹få1Š‹fw`þý• f1Šƒfñ• ‹f§ý• fñ• ‹f 1Šƒf@šfwjþñ‹“fw&ÿý•fñŠ“fwÿ‰’~4jÁ�Æ•ÁEðÿEÅ D$fô•@šf Ê €f(fæ÷ üÖ DŸf+ÄÅ€¡|¡ n¡ *¡-ƒÃeƒl¡.ñ‹…fB¦ÎEÀ–,ô LPRDY: .IFG NLP-1 .WORD LPRD ;ADDRESSES OF EACH LINE PRINTER DATA BUFFER .WORD LPRD+22. .WORD LPRD+44. .WORD LPRD+66. .=LPRDY+NLP+NLP LPRD: .ENDC .WORD 17.,0 .BYTE CR,LF .ASCII 'L/P 1 NOT READY' .EVEN .IFG NLP-1 .WORD 17.,0 .BYTE CR,LF .ASCII 'L/P 2 NOT READY' .EVEN .IFG NLP-2 .WORD 17.,0 õCA05 ;BRANCH IF ALPHANUMERIC AND NO ASSEMBLER .ENDC .IFNZ $RASM ;.....OR..... BEQ CRCA01 ;BRANCH IF ALPHANUMERIC AND AN ASSEMBLER .ENDC ;IS IN THE SYSTEM .ENDC ASR NREAD(R1) ;CONVERT BYTES TO WORDS .IFNZ BCD .IFNZ $RASM BR CRCA05 ; CRCA01: CMP (R1),#82. ;IF USER WANTED 82 CHARACTERS, STORE BNE CRCA05 ;THEö ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAG÷I² n~¬j ‘Ê €Ê5@Ä =‘fC$fó•Ê5@@w, Ä• ñ•‹fîý•^fñ•‹f2 ïò äò Ê Þ�à ñ‹…f ±Š…fÄ•\ñ•‹fñ’‡fÐÄ’Î1Š…fœ~$k²  ‘1‘‡fÄ•\ñ•‹fÁñ‹‰fÀ±Š‰ff(f÷ ŒÖ ¸½Šf½=‘fñ• ‹ff$f÷ pÖ ²Ä•=‘fñ•‹fò€÷ >È 6·•r”œ8w få5Á W<§~œkþP4ñ5€þP<AœþPp� ¬,¬(œ— &0Š Ãˆ  ÄÜ0‘ ´ŠxCà Ń`0 ‡ˆ ·•”ð‡ð‡ð‡ðV~l‡ð‡ñ5@þPìAQ°÷ >÷ Š<®f4®f·•º“‡&÷ &÷ ržfüžf4žfÀežf4®f·•ø .BYTE CR,LF .ASCII 'L/P 3 NOT READY' .EVEN .IFG NLP-3 .WORD 17.,0 .BYTE CR,LF .ASCII 'L/P 4 NOT READY' .EVEN .ENDC .ENDC .ENDC ; LPXXXX: .IFG NLP-1 .WORD LPXX .WORD LPXX ;ADDRESSES OF LINE PRINTER ABORT .WORD LPXX+20. ;MESSAGE DATA BUFFERS .WORD LPXX+40. ; .WORD LPXX+60. ; ù LAST TWO AS , MOV #LF*256.+CR,80.(R1) .ENDC ; CRCA05: .ENDC .ENDC .IFZ $1145 MOV #340,@#PSR ;INHIBIT INTERRUPTS .ENDC ; . .IFNZ $1145 ; . SPL 7 ; . .ENDC ; . MOV (R0),R2 ;SAVE ADDRESS OF NEXT LIST MOV R2,CRFRST(R3) ;DEQUEUE THIS REQUEST BNE úE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR û�“€‡fÁ Á �`D`Ä �‡‚ñ•�fñ‹‡~Œl“fCD,fô•ð1Š�fñ‹{f1Š‹f@–f 4 �¡ ñ• ‹f=‘ff(fæýÕ@ f÷ „Ö J@šf 3 1Љf1Š…fñ•‹fDŸfÄAË5@U~mÄ =‘ff$fæÝñ•“fñ• ‹fý•ff,fæðÏw ,Ã�?ù³Š�fÅÅ AŸf7Š/ùóŠ�fwüó‹{f@–f@šfð÷ªø÷¨ø7 ¦øœ5~|mÄ ô5@þPsQ ò5€þPlò5þPhô5 þP„êôU þP=Š f=Šf�œþPp� w\ø÷ ¶B   Âe®fÅ Å @ÀežfÅe®fÄ÷ Ú:JÒ †~ôm Ä ÷·•’÷ Àñ‹{f!ñœ{f{fñœ}f}fñœff EÅ µ–f–fµšfšf·•Ì‘ü .=LPXXXX+NLP+NLP LPXX: .ENDC .WORD 15.,0 .BYTE CR,LF .ASCII 'L/P 1 ABORTED' .EVEN .IFG NLP-1 .WORD 15.,0 .BYTE CR,LF .ASCII 'L/P 2 ABORTED' .EVEN .IFG NLP-2 .WORD 15.,0 .BYTE CR,LF .ASCII 'L/P 3 ABORTED' .EVEN .IFG NLP-3 .WORD 15.,0 .BYTE CR,LF .ASCII 'L/P 4 ABORTED' .EVEN ý CRCA20 ;BRANCH IF SOMEONE'S LEFT IN QUEUE ; CRCA10: MOV RO,R4 ;SO, CLEAN IT UP. ADD #CRFRST,R4 MOV R4,CRLAST(R3) ; CRCA20: MOV (SP)+,@#PSR MOV CRTASK(R3),R4 ;SET R4 = CALLER'S TASK NO. .ENDC ; ; NOW CHECK FOR EXIT TYPE 2 (SUSPENDED TASK) OR 3 (I/O COMPLETE) ; MOV #1,(R0) CMPB #2,TYPE(R0) BEQ CRCA40 ;BRANCH IF EXIT 2 BGT CRCB00þ ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ÿæ÷ Jþƒó•ÿÿ{f3Š}f3Šf ·•°‘õ}�ff(fæ÷ þÖ 3Š�fw ‡³~lnó‹�fﳊ�f÷ ê×-˜÷æf÷ 6‡w ÐÁ�â÷EÅ =Šf±Š‘f7ŠÒ÷@šfðý•^fñ•‹fw ®‡¦ö�6‘÷Õà.‘‡f&Á� ÷Á � ±Š“f„½~än�‡æ &€¶6À ˜À  L‚6o€ ùoZzB|¸~P|Â}¦|^‰Ø‰Z�œ�¾fHgoBtÐsRu, AFTER ;ASSEMBLER READ REQUESTS .PAGE ;********************************************************************** ;* Úq AC:  ? ILL CMD! ILL PAR! NON-QUIESCENT æ7 ôÿ7 òÿ7 ðÿaÃrc™i~,rÄ ýær÷ ˜„Ö  ƒ‡Žr¦rÜrîr ÁÁÁW¥,2Ä 0!-‚÷  ÿÅ )!&7!Ü#Ât�yFr÷àj�ô¥¡w4Š¡w·Z� ~¤r‡÷àR�ô‹¡w­¡w ·@�÷þqàþæ˜q÷ òó ‡ô•¡w·$�‡&& & & ÷ rÖ ñè&÷ ² ‡ HH:MM:SS MM/DD/YY s¾~ss ssss�Ä÷ æþÅ &ÅeÀ õI ưÿ‡·ªÿW¥, !ôÀ÷ Æÿ÷ àÖ ì‡À‘ÁsÂþrw*·xÿW¥, !ÛÀ .WORD CNT.4 ;L/P # 4 .=LPWDCT+NLP+NLP ; LPFEED: .WORD LFRG.1 ;ADDRESS OF L/P LINE FEED REGISTER / L/P # 1 .WORD LFRG.2 ;L/P # 2 .WORD LFRG.3 ;L/P # 3 .WORD LFRG.4 L/P # 4 .=LPFEED+NLP+NLP ; LPADDR: .WORD LPDT.1 ;ADDRESS OF L/P MEMORY ADDR REGISTER - L/P # 1 .WORD LPDT.2 ;L/P # 2 .WORD LPDT.3 ;L/P # 3 .WORD LPDT.4 ,-(SP) ;OK - LET'S UNSUSPEND THE TASK CLR -(SP) JSR PC,UNSPND TST (SP)+ ;IGNORE ERRORS ; ; BEFORE WE EXIT, WE NEED TO SEE IF THERE ARE ANY OTHER REQUESTS ; QUEUED FOR THIS CARD READER. ; CRCB00: TST R4 BEQ CRCB05 ;BRANCH IF REQUESTOR WASN'T A TASK DECB IOSTAT(R4) ;OTHERWISE, DECREMENT HIS I/O IN PROGRESS .IFNZ OVRLAY ;COUNTER, AND..... BNE CRCB05  ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;********************************************************************** NCR = ÷ ”ÿ÷ (~”sèæÀ‘Á s sÅÈ æør÷ �DÔ�DÿÔ�AÿÅ õÅ ·Þýæ˜q÷ ðò‡æ w Œû�¶ Ñ‹À D”Ä¥ À ùD”Äå0�¡ ‚CÂà ­~ tà Â`‚`a…À ïñ¥-úÿ v6 w >û‡6ú'èd w û„…À8tÄ �Õ•+Á•  â€d Á0B`•�È ôÄe0 ‘¶ w ø~„tèú–%‡Õ•- äÒ‹åÿÿ·ôÿ·îÿ·èÿ·êÿ· Þÿ÷  ÷ Œæ÷ ¢æÆÿæÄÿÅuľÿüÿ·¸ÿÆxf&æ¦f&ê÷~ütR ö÷àøŠ÷ Œÿ�€�‚ƒ„…÷ 4÷ rÿÆvÿ÷ í÷ êw 澊æ÷ 7 w  ;L/P # 4 .=LPADDR+NLP+NLP ; LPVECT: .WORD LPVC.1 ;L/P # 1 INTERRUPT VECTOR ADDRESS .WORD LPVC.2 ;L/P # 2 INTERRUPT VECTOR ADDRESS .WORD LPVC.3 ;L/P # 3 INTERRUPT VECTOR ADDRESS .WORD LPVC.4 ;L/P # 4 INTERRUPT VECTOR ADDRESS .=LPVECT+NLP+NLP .ENDC .PAGE ;********************************************************************** ;*  ;IF HE IS IN AN OVERLAY SYSTEM, AND..... MOV R4,-(SP) ;HIS COUNTER WENT TO ZERO (NO MORE I/O GOING), JSR PC,RELTSK ;THEN LET THE OVERLAY MONITOR RELEASE HIS CORE .ENDC ;(IF IT IS READY TO BE RELEASED, THAT IS) ; CRCB05: TST R2 BNE CRCB10 ;BRANCH IF SOMEBODY IS WAITING .IFZ NCR-1 ;OTHERWISE, SHUT OFF C/R INTERRUPT BIC #ENABLE!START,@#CRS.1 .ENDC  1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 1 ;1 = INCLUDE BINARY MODE, 0 = DON'T BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 1 ;1 = PROVIDE FOR INTERNAL EBCDIC CODE EXEBC = 1 ;1 = PROVIDE FOR EXTERNAL EBCDIC CODE ; (029 CARD CODE) $RES = 0. ;BASIC TIME÷øÿ‡Zuÿÿ>vnu) E,~tuRROR XXXXX SXXXXX SXXXXX SXXXXX SXXXXX xuu†u�u”u·øÿŽw ªù¦Åêÿ w œù…æ0Š÷à*ŠÍ €ÿw|ÿ· zÿ·Šw ¥~ìu€ùއ� ø7 ®ÿÅ\ÿ'wVÿ÷ZuPÿ·î‰Äœuf&÷ &þÌ ú÷• RÿÅå Íæ`u÷ ˆð÷ nÿׇ· fÿ渉÷ಉÖ÷ÿÿ ÿ·¦‰‡ò~dvÿÿÿÿšvœvžv v¢v¤v¦v¨vªv¬v®v°v²v´v¶v¸v¶~Üv ** ;* S T A R T O F L P R N T R ** ;* ** ;* ** LPRNTR: MOV R0,-(SP) ;GUESS MOV R1,-(SP) ; WHAT MOV R2,-(SP) ; WE'RE MOV R3,-(SP) ; DOING MOV R4,-(SP) ; HERE MOV  .IFG NCR-1 BIC #ENABLE!START,@CRS(R3) .ENDC CLR CRBUSY(R3) MOV CRMDAD(R3),-(SP) JSR PC,IODQTM ;DEQUEUE TIMER TST (SP)+ JMP (R5) ;AND EXIT TO RESTOR ; ; ; CRCB10: MOV R2,R1 ;BEFORE WE START ANYTHING, MAKE SURE CRCB15: MOV DATA(R1),R0 ;THE LIST IS STILL VALID, ETC. JSR PC,CRCHEK BNE CRCB20 ;BRANCH IF NO GOOD R RESOLUTION USED BY CREAD $1SEC = 60. ;MULTIPLE USING $RES FOR 1 SECOND $500MS = 30. ;MULTIPLE USING $RES FOR 1/2 SECOND $100MS = 6. ;MULTIPLE USING $RES FOR 100 MS MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; TIMES STATES. ; ; ; C / R V E C T /~Tw¶~Ìw>~DxÅ~¼x R5,-(SP) ; MOV 14.(SP),R0 ;GET ADDRESS OF LIST MOV DATA(R0),R1 ;GET ADDRESS OF DATA JSR PC,LPCHEK ;GO CHECK SOME OF THE INFO BNE LPRA10 ;OOPS, SOMETHING HAPPENED. GO TELL CALLER CLR R3 ;CHECK L/P DEVICE ADDRESS .IFZ NLP-1 CMPB DEVICE(R0),LPUNIT ;FOR ONE L/P BEQ LPRA20 .ENDC .IFG NLP-1 LPRA00: CMPB DEVICE(R0),LPUMOV R0,CRDATA(R3) JSR PC,CRSIO ;OTHERWISE, START I/O JMP (R5) ; ; CRCB20: MOV R4,ERROR(R0) ;STORE ERROR CODE IN USER'S LIST BR CRCLOS ;AND GO TELL HIM ABOUT IT .PAGE ;********************************************************************** ;* ;* THIS SECTION OF CODE IS EXECUTED WHEN A COLUMN OF DATA IS READY. ;* THE INPUT MODE (BINARY OR ALPHANUMERIC) IS DETERMINED, AND THE ;* DATA ARE PROCESSED ACCO R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 M~4yÔ~¬y\~$zw õ×þÿ&  „Ý6 Ä a7¡êû^‚ß•àþÿô‹¡w ­¡wWô‹xSöÿÿÄ ˜~œz¸vNIT(R3) ;FOR MORE THAN ONE L/P BEQ LPRA20 INC R3 CMP R3,#NLP BLT LPRA00 .ENDC MOV #3,R4 ;AT THIS POINT, THE L/P # IS NOT LEGAL ; LPRA10: MOV R4,ERROR(R0) ;THIS IS AN ERROR EXIT - THE REQUEST JSR PC,LPQERR ;GO QUEUE THE ERROR (IF THERE IS ONE) ; LPRA15: MOV (SP)+,R5 ;RESTORE MOV (SP)+,R4 ; THE MOV (SP)+,R3 ; ORDINGLY ;* ;********************************************************************** ; CRID00: .IFNZ BIN .IFNZ BCD TST CRMODE(R3) ;SEE IF WE'RE IN THE BINARY MODE BEQ CRIE00 ;BRANCH IF ALPHANUMERIC .ENDC .ENDC TST MXCNT(R3) ;SEE IF THERE'S ANYMORE INFORMATION BLE CRID30 ;THAT WE WANT ON CARD - BRANCH IF NO ;* ;* USE BYTE TO TELL US HOW AND WHERE TO USE THE 12 BITS IN  ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.„ ô•¡wß�þÿ���‰xW Á•¡e?†r� ß•àþÿÊ 2Á ¹vv±vvô•¡w4Šx2 ² Ö ß�þÿw nô÷ Lúö ¶Æe~{‡öþÿ¶Æeæ÷ Dw$Ž Ž Ž Ž Ž Ž Ž 6 ¶Øæ&f¦÷ ª„€ƒ•À Ìé禶¶æ—þÿß•àþÿ÷ àú[7 ÚúŸ•þÿæ¦~Œ{f�vÂÀú ‚¸v²� 6 ²€6 „Ü×þÿß•àþÿÆšú&À"7 |À À 2 7 ÊÁ ô•¡w¡e‡ô•¡wß�þÿÞ~|&÷ öƒ‡ô•¡w€œ À Ä <˜v¸v0¸vvv0¸v˜vß�þÿ‡Ÿ•þÿŽŽŽ‡æ—þÿ& ÷ ÿwß•àþÿÀú ÜÈ1Š¡w7 ðù7 € YOU-KNOW-WHATS MOV (SP)+,R2 ; . MOV (SP)+,R1 ; . MOV (SP)+,R0 ; . MOV (SP)+,(SP) ;PUT PC ON TOP OF OLD LIST ADDRESS RTS PC ;AND GO, GO, GO - HOME, HOME, HOME ; ; LPRA20: .IFG NLP-1 ;R3 NOW CONTAINS THE L/P INDEX (0,1,...) ASL R3 ;CONVERT IT TO A WORD INDEX (0,2,...) .ENDC MOVB CRB1 ;* AS FOLLOWS. ASSUME FORMAT OF CRB1 IS 00 X1 X2 X3, WHERE ;* XX = 4 BITS EACH. ;* ;* BYTE CRB1 IN CURRENT WORD CRB1 IN NEXT WORD ;* ;* 0 X1 X2 X3 00 ----------- ;* 1 00 00 00 X1 X2 X3 00 00 ;* 2 00 00 X1 X2 X3 00 00 00 ;* 3 00 X1 X2 X3 ----------- ;* ;* .IFNZ BIN MOV CRDATA(R3),R4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;********************************************************************** ;* 7 Úø0 ÆÃ~||æùW e ‡ñ‹x ±Š¡wŠþÿf÷ hƒŠþÿw´ñŠ¡wùw ¸ò €Ýk7 ªùh‚æ—þÿß•àþÿœ¡wÁ yÒ|„}„}„}„}„}æ|þ|.}.}„}„}„}.}Ÿ“þÿ&÷ Òß•àø~ô|þÿÖ E/Á\ù1 7 Tù7 ä7 >ø�ÁeÆHùfffffffff e‡ð‹xð•ýÿ¡wð•¡wŸ“þÿ&&÷ ¬‚€ß•àþÿð•¡wÂ�´}W"ô~l}Âåø1f÷ *øŸ•þÿw âñއccc�}œ}¨}öÕ€6Šw ˜ñæ—þÿ €j€Á‘ 7 ~øc‚å~ä}À ¸v€ ß•àþÿœ¡wÂå  S / -Âå2Lð•¡wŸ“þÿBœ  ƒ˜vAC ÄÃû;  LEVEL(R0),R2 ;NOW, TEST THE PRIORITY LEVEL BLE LPRA30 ;BRANCH IF ILLEGAL CMP R2,#NLPRTY BLE LPRA40 ;BRANCH IF IT'S OK ; LPRA30: MOV #NLPRTY,R2 ;USER'S VALUE IS ILLEGAL, USE LOWEST ; LPRA40: TST (R1) ;TEST NWORD FOR VALIDITY BGT LPRA50 ;BRANCH IF > 0 AND ASCII .IFZ INEBC MOV #9.,R4 ;BUT, IF EBCDIC ISN'T SYSGENED BR LPRA10 !1 ;GET ADDRESS OF DATA BUFFER ADD #4,R1 ADD COUNT(R3),R1 ;ADD INDEX INTO BUFFER MOV BYTE(R3),R2 BEQ CRID10 DEC R2 BEQ CRID40 DEC R2 BEQ CRID50 BR CRID60 ; CRID10: MOV @CRB1(R3),R4 ;GET CURRENT DATA .IFZ $1145 ;SHIFT ASL R4 ; DATA ASL R4 ; INTO ASL R4 " ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VE#ß•àþÿW"5ò ˜v r˜v ò˜vvv²`vvL2<~\~vvÉÀ � e†1 ð‹xð•¡wŸ“þÿ&&÷ v�€ ß•àþÿ0Š¡wŸ•þÿvw Êð‡… … … õÅ ð•þÿ¡wðw ¦ð×þÿ&  „Ý=7¡’÷:‚ß•àÿ~Ô~þÿ­¡w5ô•¡w¡e ‡ß�þÿæ�&÷ �‚ƒ• #Ä ¸v„ Ê �œ Á ¹vv±vv´Š¡wß�þÿ¶w Fðö އö—þÿæ÷ 0üwŽ Ž Ž 6 Ó~LæŠþÿ7 ôÿ÷ þöl÷ êõiÄööÄ  Ã÷ ØÿíÂ`ò ˜v!÷—!ü8 áß•àþÿ÷ ´ÿÛ�˜vw¸ör˜v²vvòe˜vvv EÜW­¡wa~Ä7 –öŠþÿ×w‘ˆöµŠ¡w‚ ·�€ö·„öÉñ @œÀEÿÀ @`Àe$ ;NWORD CAN'T BE <= 0 .ENDC .IFNZ INEBC .=.-2 ;IF EBCDIC IF USED, ONLY 0 IS ILLEGAL BNE LPRA50 MOV #9.,R4 BR LPRA10 .ENDC ; LPRA45: MOV #11.,R4 BR LPRA10 ; LPRA50: JSR PC,LPLEVL ;NOW, DETERMINE THE INDEX OF THE MOV LOGMAX,R4 ; LPRA51: TBIT #AVAIL,PHYDEV(R3) ;SEE IF THIS DEVICE IS AVAILABLE BNE LPRA53% ; POSITION ASL R4 ; .ENDC ; .IFNZ $1145 ; ASH R4,4 ; .ENDC ; MOV R4,(R1) ;STORE BINARY DATA ; CRID20: INC BYTE(R3) .ENDC ; CRID30: JMP (R5) ;EXIT TO RESTOR ; .IFNZ BIN ; CRID40: MOV @CRB1(R3),R4 ;GET CURRENT COLUMN OF DATA CLR R0 &CTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 'B·î·Jÿ& fB ·Ú·6ÿF€ 6 vœ �‚ƒ„…Y~<€þ7 ö7 ö7 ö7 ÿÀöÀ 0 ˜vð˜vvv0`vvÀåöÀtÁè1 ¸vð•¡w0Šx0Љx0Š™x1 ¨xá À ðÀÁ´}ÙÀ ü‡ÂÀ Á`v ƒ U~´€W"tÁqà€¸v¹¸v¹ú€0œ�‰x0Š¡wá À  ð‡�º�d‚ƒÀƒl„ …°…X†ü††‡”�0‚Ú‚Œƒ6„â„€…&†Î†Î†Î†²�2N~,�¢�  ~¤�TASK # 2 æ”� ˆˆN‚( ;BRANCH IF IT IS ; LPRA52: TBIT #ALT,PHYDEV(R3) ;OOPS. BETTER SEE IF WE HAVE BEQ LPRA45 ;AN ALTERNATE. BRANCH IF NO. DEC R4 ; BLE LPRA45 ; MOV ALTDEV(R3),R3 ;GET LOGICAL UNIT NO. OF ALTERNATE ASL R3 ;CONVERT TO WORD INDEX CMPB #LPDEV,PHYDEV(R3) ;SEE IF THE DEVICE IS COMPATIBLE BEQ LPRA51 ;BRANC)BISB R4,R0 ;SET R4 = BITS 0-7 OF CRB1 DATA SWAB R4 BISB R4,(R1) ;STORE BITS 8-11 OF CRB1 IN DATA BUFFER ADD #2,COUNT(R3) ;INCREMENT DATA BUFFER INDEX DEC MXCNT(R3) ;DECREMENT NO. WORDS COUNTER BLE CRID30 ;BRANCH IF NO MORE CARD DATA IS REQUIRED MOVB R0,3(R1) ;STORE 8 BITS OF BINARY DATA IN TOP BYTE BR CRID20 ;OF DATA BUFFER ; CRID50: MOV @CRB1(* ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 +2ð~‚>‚ TASK # 3 æ0‚ ˆæ& & & ˆÖ ˆø‚2h~”‚è‚ TASK # 4 æÚ‚ ˆæ& & æˆï~ ƒÖ æˆñªƒ2-~„ƒ,H IF WE CAN USE IT. BR LPRA52 ;OTHERWISE, GO TRY NEXT ALTERNATE ; LPRA53: MOV @#PSR,-(SP) ;PRIORITY QUEUE. INHIBIT INTERRUPTS. .IFZ $1145 MOV #340,@#PSR .ENDC .IFNZ $1145 SPL 7 .ENDC DEC (R0) ;SEE IF LIST IS THREADABLE BNE LPRA80 ;BRANCH IF NO, CAUSE THAT'S A NO-NO MOV R0,@LPLAST(R2) ;QUEUE IT - MOV R0,LPLAST(R2) -R3),R4 ;GET CURRENT DATA .IFZ $1145 ;SHIFT ASL R4 ; INTO ASL R4 ; BIT ASL R4 ; POSITIONS ASL R4 ; 4-15 SO WE .ENDC ; CAN GET THE .IFNZ $1145 ; MOST SIGNIFICANT ASH R4,4 ; 8 BITS OF CRB1 .ENDC ; .COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ; ; LPSIZE 2šƒ TASK # 5 挃 ˆæ& & & ˆÖ õT„2y~üƒD„ TASK # 6 æ6„ ˆæ& & æˆÖ ô…l~t„2L~ì„ð„ TASK # 7 æâ„ ˆˆûž…20 ;QUEUE IT ! MOV ACTIVE,R4 ;SEE IF CALLER IS A TASK BEQ LPRA55 ;BRANCH IF HE ISN'T MOV $CTASK,R4 ;OTHERWISE, GET HIS NUMBER INCB IOSTAT(R4) ;AND INCREMENT THE I/O IN PROGRESS STATUS BYTE ; LPRA55: MOV R4,SYSTEM(R0) ;SAVE TASK NO. (0 =====> NOT A TASK) TST LPBUSY(R3) ;SEE IF IT'S THE FIRST IN THE QUEUE BEQ LPRB00 ;BRANCH IF YES MOV (SP)+,@#1 DATA CLR R0 BISB R4,R0 ;SET R4 = BITS 0-3 OF CRB1 DATA SWAB R4 MOVB R4,(R1) ;STORE BINARY DATA AS 00 00 X1 X2 ADD #2,COUNT(R3) ;INCREMENT DATA BUFFER INDEX DEC MXCNT(R3) ;DECREMENT NO. WORDS COUNTER BLE CRID30 SWAB R0 MOV R0,2(R1) ;STORE BINARY DATA IN NEXT WORD OF BR CRID20 ;BUFFER AS X3 00 00 00 ; CRID60: = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P .PAGE 6r~DDù~¼D�~4E~¬E4PSR ;ELSTWISE, CLEAR THE INHIBIT ; ; THIS SECTION RETURNS TO THE CALLER (IF EXIT TYPES 1 OR 3) OR TO ; THE ROS DISPATCHER (IF EXIT TYPE 2); THE LATTER REQUIRES THAT ; THE TASK BE SUSPENDED FIRST. ; LPRA60: CMPB #2,TYPE(R0) ;IS THE EXIT TYPE = 2? BNE LPRA70 ;BRANCH IF NO TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ LPRA70 ;BRANCH IF THE CALLER IS NOT A TASK MOV @#PSR,14.(SP) ;GOOD, H5 BIS @CRB1(R3),(R1) ;PUT CURRENT BINARY DATA IN BUFFER ADD #2,COUNT(R3) ;AS 00 X1 X2 X3 CLR BYTE(R3) DEC MXCNT(R3) JMP (R5) ;EXIT TO RESTOR .ENDC .PAGE ;********************************************************************** ;* ;* ;* A L P H A N U M E R I C M O D E ;* ;* THIS SECTION CONVERTS THE CURRENT COLUMN CHARACTER TO THE ;* SPECIFIED FORMAT AND STORES IT IN THE DATA BUFFER. IT?}~d…Ž… TASK # 8 怅 ˆæ& ˆÖ ÷D†2 ~Ü…4† TASK # 9 æ&† ˆææˆX~T†Ö öì†2 ~̆܆ TASK # 10 æΆ ˆæˆÖ ˆr‡2 7.”Mœ¯”(€; €Mh“€Mh€_¯”‘÷æ,�‚„‡ˆ �‹À�Ž                 !"£§,$$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆG&,HHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉÊK ,lÌMNÏPÑÒSÔUVרY8E IS A TASK, PUT PSR ON STACK MOV (SP)+,R5 ;RESTORE MOV (SP)+,R4 ; ALL MOV (SP)+,R3 ; THE MOV (SP)+,R2 ; GENERAL MOV (SP)+,R1 ; REGISTERS MOV (SP)+,R0 ; CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVEI SUSPEND 'IM JMP DSPTCH ;THEN GO TO THE SYSTEM DISPATCHER ; LPRA70: MO9 ALSO ;* CHECKS COLUMN 1 OF EACH CARD FOR CONTROL INFORMATION (FORMAT ;* OF CARDS, ETC.). ;* .IFNZ BCD ; CRIE00: INC COUNT(R3) ;INCREMENT CHARACTER (COLUMN) COUNT CMP COUNT(R3),#1 ;IS THIS THE FIRST COLUMN? BNE CRIE15 ;BRANCH IF NO MOV @CRB1(R3),R4 ;OTHERWISE, GET BINARY CARD IMAGE .IFNZ TTYSW CMP R4,#SWITCH ;SEE IF COMMAND IS TO SWITCH TO TTY BNE CRIE10 :�~$F~œFŸ~G&~ŒG;Z     �‚„‡ˆ ‹À   ,�                                    À,´                       .<(+ ¦       Y,Ø  !$ª©» -¯        Þ¬¥ ¾?          :£,üÀ'½" ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ      £,   SÔUVרYZ       \  ÛÝ           ABÃa,DDÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרE hYZ      0±²3´56·¸9      ³ó<V R4,ERROR(R0) ;STORE ERROR CODE BR LPRA15 ;AND GO WHERE THE REGISTER CAN BE RESTORED ; LPRA80: INC (R0) ;LIST IS NOT THREADABLE MOV (SP)+,@#PSR MOV #1,R4 BR LPRA10 .PAGE ;********************************************************************** ;* ** ;* AT THIS POINT, THE REQUEST JUST QUEUED IS THE ONLY ** ;* = INC CRBKUP(R3) ;SET FLAG TO SWITCH TO TTY BACKUP BR CRIF10 ;THEN GO SET 'READ ANOTHER CARD' FLAG .ENDC ; CRIE10: CMP R4,#$026 ;026 CONTROL COMMAND? BEQ CRIF00 ;BRANCH IF YES .IFNZ EXEBC CMP R4,#$029 ;029 CONTROL COMMAND? BEQ CRIF30 ;BRANCH IF 029 .ENDC CMP R4,#EOD ;LOGICAL END-OF-DATA? BEQ CRIE20 ;BRANC>®~H5~|H½~ôH@ REQUEST IN THE QUEUE, SO WE GONNA START THE OUTPUT. ** ;* INTERRUPTS ARE INHIBITED ON ENTRY, AND THE REGISTERS ** ;* ARE SET AS FOLLOWS: ** ;* ** ;* R0 = ADDR(LIST) ** ;* R1 = ADDR(DATA) ** ;* R2 = PRIORITY INDEX *AH IF EOD ; CRIE15: ; TST MXCNT(R3) ;WELL THEN, IT MUST BE AN ORDINARY CHARACTER BLE CRID30 ;BRANCH IF WE DON'T NEED ANY MORE CHARACTERS MOV @CRB2(R3),R2 ;GET COMPRESSED VERSION OF CHARACTER ADD TABLE(R3),R2 ;ADD IN BASE TABLE ADDRESS MOV CRDATA(R3),R1 ;GET DATA BUFFER ADDRESS ADD #4,R1 ADD COUNT(R3),R1 ;ADD CHARACTER INDEX MOVB (R2),-(R1) ;MOVE BE~lIÌ~äIT~\JÛ~ÔJC^~D‡7  € ·  ˆúü‡2 ²~¼‡7  � ·  æ æˆÖ õÀDˆÂÃàƒ Ò— ú‡7 ´~4ˆ„À7d7l‡÷þÿv÷Eàÿp·j·d· ^÷ þíþæðí÷ 8ô¢ˆ—"®ˆ—"& ¦’$Ò�ÎíÊ�0Ò Ò(Ê ÷ íw²öZ‘~¬ˆZßÖˆßà÷~‡ß‰·D* ;* R3 = L/P INDEX ** ;* ** ;********************************************************************** ; ; LPRB00: MOV (SP)+,@#PSR ;ENABLE INTERRUPTS MOV PC,LPBUSY(R3) ;SET L/P BUSY FLAG MOV R1,LPDATA(R3) ;SAVE DATA BUFFER ADDRESS MOV $EXIT(R0),LPIOCM(R3) ;SAVE EXIT ADDRESS MOV SYSTEM(R0),LPTASK(R3) ECONVERTED CHARACTER TO CALLER'S BUFFER DEC MXCNT(R3) BR CRID30 ; CRIE20: MOV CRFRST(R3),R1 ;EOD READ - GET ADDRESS OF LIST MOV #7,ERROR(R1) ;SET EOD ENCOUNTERED ERROR CODE INC IGNORE(R3) ;SET 'IGNORE CARD' FLAG JMP (R5) ; ; 026 CONTROL CARD READ. SET CONVERSION TABLE ADDRESS UP. ; CRIF00: .IFNZ INEBC MOV CRFRST(R3),R0 ;GET I/O LIST ADDRESS TSTB LEVEL(R0) Fc~LKê~ÄKr~�÷à o‹÷ø�ÿÓµ÷eÿ“�K�6 w nÞÖ ¡±æðn÷àênÆå Vý~‘Ö €$Á@�Î5Á;�& H” H” H”¦)€�À–‹7DúÁ% Á ýÀÞ‹Á1à‹à Á Á úÀŒÁ1˜ŒÁ ü÷•ÿÿžú÷•ÿÿ¹þ7Š•ú7 bþ÷ð~”‘ø�^þ÷�dþ7 Pþ÷’þ7 �þ÷Žþ‡¦æÀ‘wŽø¦X ;CALL SAVE TO TAKE CARE OF THINGS MOV #2,R3 ;SET L/P INDEX TO SECOND L/P .IFGE NLP-3 BR LPIA00 ; LPINT4: $SAVE ;ET CETERA MOV #4,R3 .IFGE NLP-4 BR LPIA00 ; LPINT6: $SAVE ;...AND ET CETERA MOV #6,R3 .ENDC .ENDC .ENDC ; ; LPIA00: .IFZ $1145 ;CLEAR THE INTERRUPT INHIBIT MOV YE ERROR ;R4 = ERROR CODE ** ;* ** ;* ALL REGISTERS USED BY CRCHEK ARE SAVED AND RESTORED. ** ;* ** ;********************************************************************** ; ; CRCHEK: CLR R4 CMP #ROSTOP,R1 ;TEST FOR LEGAL I/O LIST ADDRESS BHIS CRDW19 ;BRANCH IF ILLEGAL Zþÿ…„ƒ‚�€& ÷ @'w +f~4T0¸ˆ ŸþÿÄ®ŸþÿótRsvR3†R3 „R3 ˆR³ŽRsŠR3 ŠR3 ŒR÷ ÂòXñ ÂrY÷ Ð÷  »‰ ߀þÿÂŽR€xRÁvR÷ ]~¬TÔ÷ ÆÉ ÂrYwòÂòX÷ ’÷ ÖMæþÿÂŽRßàþÿ2xR„ÄexR2~RÈŸþÿÄ„RôŠx&÷ öª¬ æ„R& ÷ ˜)Ö û~$Ufæû †Rƒ…ÂŽRÂ÷ Äò xRÒ Ä ú)€xR ÷ ¦ð ·svR3†R³ŽR3 „R3 ˆRÂòXsŠRÂrY3 ŠR3 ŒR÷ Æ÷ à÷ ï~œUM÷ Ö3 tRæ&S÷ öÖ M³ ŒRó%ŒR÷ ´÷ €÷ ØMæ4S÷ �ñw[æÌ‘w\úa~ ’ã~„’k~ü’ó~t“\ #LPINH*32.,@#PSR ;INHIBIT INTERRUPTS AT AND BELOW L/P .ENDC .IFNZ $1145 SPL LPINH .ENDC MOV LPRIOR(R3),R2 ;GET CURRENT REQUEST PRIORITY LEVEL MOV LPFRST(R2),R0 ;GET I/O LIST ADDRESS MOV LPDATA(R3),R1 ;GET DATA BUFFER ADDRESS JSR PC,LPSTAT ;GET L/P STATUS BNE LPIA03 ;BRANCH IF AN ERROR WAS DETECTED JSR PC,LPRSET ;THEN RESET THE L/P .I] CMP R1,#HICORE BHIS CRDW19 ;BRANCH IF ADDRESS IS BEYOND CORE MOVB TYPE(R1),R2 ;CHECK FOR VALID EXIT TYPE BLE CRDW02 ;BRANCH IF <= 0 * CMP R2,#3 ; * ONLY 1,2,3 ARE VALID BGT CRDW02 ;BRANCH IF > 3 * BNE CRDA20 ;BRANCH IF EXITS 1 OR 2 CMP #ROSTOP,$EXIT(R1) ;CHECK I/O COMPLETE ADDRESS BHIS CRDW03 ;BRA^ðþæLS÷ ~÷ Œ3 ŒRÄ&S&ô Væ<÷ lÖ MCfÁvR ~VÂŽR€xR÷ bÖ …Ä�RË÷ J³ ŒR×,ŒR´æ<÷ .Ö ‡ðÖ …÷ Xwvþæ&ff& ÀvSňRAaÁes!ŠR1 DÔ! Ä% 3 V~ŒVvS ÷ RÄ• ÷ J … s!ŠRêÀ5Е sˆRÀìvS„ Ö …�€Ö ‡Ä … ÷ îÎ5÷âÅ îÄÙ¶ 6 & „`“3 xSŽ Ö ‡ 2~W4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%D „ „ ÄeÿŸD ‚ ñŸ‚ð¥ !ƒ!õŸ†Ä5  ‡ð¥ùćććߦ~|W@ê‡Äê& Ä5 Ä5Ä5Ö ‡– ‡Ö ‡_òœòœòœþœ*~ì“ü8Qü8ZvˆZôQ²dBYfÿÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ÷®k¢ÿ÷¸k¦k÷–ÿ÷•ÿÿx 7Š~d”r wÆ÷�k„ÿw È7tÆä“ÄãžÃóžw ¦ 7^w ìw >Ä�\ÿŒŒŒ7‘Zk7Š0 ÷•ÿÿ, ÷àZk÷"›RkwæÆ.ÿ& ÷ ÿædkæ^k÷•@˜jà 7~Ü”D÷‹ü A „ &DCƒcà ÷Ú w 2w ΄·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦&w ¶„‚À•\w ¶wXw ºw ö�Ä øfw |÷•m`FNZ INEBC TST (R1) ;HERE'S WHERE WE DECIDE WHETHER THE INTERNAL BGT LPIA04 ;CODE IS ASCII OR EBCDIC MOV #EBCLP,R2 ;MUST BE EBCDIC AT THIS POINT BR LPIA06 ; LPIA03: JMP LPIE00 ; LPIA04: .ENDC MOV #ASCLP,R2 ;INTERNAL FORMAT IS ASCII .IFNZ INEBC ; LPIA06: .ENDC JSR PC,LPCNVT ;AND GO SEE IF THERE'S MORE TEXT BNE LPIA10 aNCH IF ADDRESS IS IN ROS CMP #HICORE,$EXIT(R1) ;OR OUTSIDE AVAILABLE CORE ; CRDA20: CMP #ROSTOP,R0 ;NOW, MAKE SURE DATA ADDRESS IS VALID BHIS CRDW04 ;BRANCH IF IT'S IN ROS CMP R0,#HICORE BHIS CRDW04 ;OR OUTSIDE AVAILABLE CORE MOV (R0),R2 ;GET WORD COUNT BEQ CRDW05 ;BRANCH IF ZERO 'CAUSE IT'S NO GOOD BGT CRDA30 NEG R2 ;SET IT ++bó 2S3�R  ê êß’RêßÈêÄ&Sô V&æ<÷ ˜Ö ‡fÄvSÅÅ ýÀåÄ�~ôWÄ Ä Ä ÄeX0ð0ŠÈ&÷ ¨…ÀvS‡ÃwÅÀvS@aAa… !Å ý@ÁvR…ÂŽRwˆü ê‡f  ÅÅ Â`üBa…‡„—~lXfÅSæþÿßàþÿõ 5 Ÿþÿf÷ .…ޤ‡Ÿþÿ…Ž´‡· Šú‡7 „ú‡& œÎ & & & ÷ –!Ö ‡ ß”T€ßà‚÷  þ÷ lÿÀxRÁ~äX~RB  ü‡‡�‚„‡ˆ �‹À�Ž                 !"£$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉ¥~\YÊKÌMNÏPÑÒSÔUVרYc~T•t €w „7Š€ wtwhw ŒÄŸ  Ä%-Ÿû‚ÀEøÿÄ Äeä“‚ whÄåŸ÷À6 Áßž÷ æÀ=w F·Š6 À�/ w :À�( w 2À�! w *À w "Q~Ì•w *  7� w 7�þw 7Šø7�óÀÒžÁßž÷ JÄÔÂwð7ŠØ  wèw (‚b‚ ‚ ·®wúw ‚øw �A�Á � � B`ï÷ r÷%c~D–„€…Ö w|÷‹„û 7Štwr÷•ÿÿjwh·Šg ÄEøÿÄ 7”pwh÷‹P ÄEøÿÄ Ã t”Pà õôÿÿ”Iw Û×-®~¼–ÉÂ% w ’ ÿÿÀ=w ÀòÁê7Ä í”À=w øÀÀe0w ìÀ,w äÂ%ÀÀ@w ~k÷‹d ;(DON'T WANT TO LEAVE ANYTHING HANGING) JSR PC,LPSIO ;START 'ER UP AGAIN BOYS, WE GOT A NEW CUSTOMER JMP (R5) ;THEN GET OUT OF HERE (GO TO RESTOR) ; LPIA10: MOV @#PSR,-(SP) ;SAVE CURRENT CPU STATUS LEVEL MOV LPRIOR(R3),R2 ;GET PRIORITY INDEX .IFZ $1145 ;NO DATA LEFT IN USER'S BUFFER MOV #340,@#PSR ;SO, INHIBIT INTERRUPTS SO'S WE CAN .ENDC ;DEQUEUE Te+++ (PLUS, THAT IT) ASL R2 ;BINARY MODE NWORD = WORDS, NEED BYTES ; CRDA30: ADD R0,R2 ;TEST VALIDITY OF DATA BUFFER ADDRESS CMP R2,#HICORE ;WHEN ADDED TO NWORD BHIS CRDW05 ;BRANCH IF WE WENT OUT OF CORE ; CRKX00: TST R4 RTS PC ; CRDW05: INC R4 CRDW04: INC R4 CRDW03: INC R4 CRDW02: INC R4 INC R4 BR fZ     ß ÈXß š`‡ ‹À                                                              .<(+ ¦         !$ª©» -¯B~ÔY        Þ¬¥ ¾?          :£À'½" ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרYZ       \  ÛÝ           ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ'~LZ        SÔUVרYZ      0±²3´56·¸9      æþÿßàþÿþ% f…µ…ŸþÿŽ6 ‡Ÿþÿw¸.öeþœZ6 ‡š~ÄZPÎ_ÐZÚZèZöZ[pþrþtþ CR 1 ERROR CR 1 SPUR INT f¦æ&f� ¶ 6 @ ÷ Îg¾ÄØüÂeÀ=÷…~4—–w ´@w Xwºüw’·Š¬w¢À=w – w ü ÿÿÀdw *AÀe0w vÀ,w næH÷BÀFw ·6-À ÷.27ì”,€ â»~¬—÷÷‹( ÀBüÄ:üÃ8üw Ö÷üðÀ?w 7 îw ò7Šø7Šó7Š     w À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 1 Ÿ� W  ~$˜Ö†ø÷‹Ì ÷‹©Äm¼7ŠºÁ yD˜|˜Š˜”˜è˜j•’šø˜–ô˜N™r–™š š`™Þš$–,–V–Š–—H—¬—Ê—P—”•Ú”¾”ƒ·ŠZ7ŠU´÷<D ÷2 ~œ˜7.7(÷% Ä„ î‡ÀÀŸw Ô÷%‹À•=w ÀŸöw À• w hHE REQUEST .IFNZ $1145 SPL 7 .ENDC MOV (R0),LPFRST(R2) ;PUT NEXT GUY IN THREAD AT TOP OF QUEUE BNE LPIA20 ;BRANCH IF THERE'S MORE IN QUEUE MOV R2,R4 ;OTHERWISE, PLACE THIS PRIORITY'S ADD #LPFRST,R4 ;QUEUE IN THE NOMINAL STATE (NO ENTRIES) MOV R4,LPLAST(R2) ; LPIA20: MOV #1,(R0) ;SET LIST REASY MOV (SP)+,@#PSR ;UN-INHIBIT THE INTERRUPTS i CRKX00 CRDW19: MOV #9.,R4 BR CRKX00 .PAGE ;********************************************************************** ;* ** ;* C R T I M E ** ;* ** ;* THIS ROUTINE IS ENTERED WHENEVER AN EXPECTED CARD ** ;* READER INTERRUPT IS NOT RECEIVED. AN APPROPRIATj~<[�Bœ ³ òZÄŸþÿÄÄ 1…„ƒ‚�€´‡æþÿßàþÿÉ è{ÀZsÀZ÷ ÐÄÆ´Šx1 0 ó ÂZ&Ÿþÿñ¥Ä~´[÷ ¦¤…„ƒ‚�€¤‡æþÿ€ ¶ ¶ …„ƒ‚�& æTw|³ ÂZŸþÿ3ÄZó ÌZ ñ‹ó²`ÌZó²cÌZ÷ ¶Á¾ZÄæúZ÷ f‚~,\ó´¸ZÅÐZõd_fæ<÷ ,þÖ ¯‰ ó ÂZæ [÷ 6Mó ÈZß5@pþ/MÀpþ÷ DþMw"À5€ûÀ5@À5ó3ºZÀÐZð,_&æ†~¤\÷ ÊýÖ ßE@pþM3 ÈZó ÊZÁ¾Z÷ 3 ÊZMæþÿÀìýÁîýñÞý÷ þ± W"Rñ Pßàþÿ·¾ýkwúþ÷ ÈwêþwÞþ·ŠÞ÷ Ðù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m[~™¶¶÷²²w ¬æ¦÷ Àžw ®·”Ö%À/w ¨¯À\ú÷ zÔ÷ \÷íppÜÀ.ŸÄ à … L‡Å Äe”  ! ”B†Ô ù! ”=‚(~Œ™L® !6‚4”4 $”¤ À.Ÿ!ž‚4”ô6”4 $”Ô ô÷%À w à ÅíôÅ Å @w ´@€ ‡À%€ÿ À%÷ Òw š· Êwu~šÜýwÈý�  à ù÷²ÂÜùÄÖùD · Ôù¼‚€Á &C@AƒEPA&f¦æw „€w ’À/w –€w :ƒ‚�„w ÐÒ Û åƒ`ƒ ƒ Å 9~|šßÀEÿ�¯À € € €` Õ÷‹H·à µ÷•8… l MOV LPTASK(R3),R4 ;GET TASK NO. OF REQUESTOR BEQ LPIA25 ;BRANCH IF NOT A TASK DECB IOSTAT(R4) ;OTHERWISE, DECREMENT HIS I/O IN PROGRESS .IFNZ OVRLAY ;STATUS BYTE BNE LPIA25 ;AND, IF IT BECOMES ZERO, THEN..... MOV R4,-(SP) ;GO THO THE OVERLAY MONITOR SO THE TASK'S JSR PC,RELTSK ;CORE CAN BE RELEASED .ENDC ; LPIA25: CMPB TYPE(R0),#2 ;WAS IT mE ** ;* OPERATOR ACTION MESSAGE IS PRINTED, AND THE C/R ** ;* STATUS IS TESTED EVERY SECOND THEREAFTER ** ;* ** ;********************************************************************** ; ; ;CRTIME IS ENTERED FROM TIMER ROUTINES CRTIME: ;R1 POINTS TO THE TIMER MODULE LIST MOV 6(R1),R3 ;SET R3 = C/R n÷¾Z¸ýŸþÿĶýÈð¥Ï~]ð¥@ ƒ ÿŸ†¦æ&fÈ …„ƒ‚Ä && ÷ `!Ö Ä ôŠx&÷ –¢Â ßEApþ3 ÂZæèZ÷ &ýÖ M�@ ÷ @3ÄZµ~”]÷ <M0•ó ðZHó ¼ZÁÄZÁeÁl¸ZÂìZ  -ÄöZÄ Ä Ä Ä ³ ìZMÄöZ ÑÄ Ñóe¸Zó ¼Zó1�îÄöZÄ Ä Ä Ä ÑÄ~ ^ ‘óe¸Zó ¼ZàÀ1ÚÉ^öZóe¸Z3 ìZó ¼ZM³ ¸Z×,¸ZÄöZ! ³ ÎZ*! ! +! ó ¼Z¸ÂøZÂlÌZÁÄZÁeÁl¸Z¡’ó ¼Z³~„^ªÁ¾Zñ³ ÈZMÀ¾Zð‹ó²`ÌZ³ ÊZ—ó²cÌZùÀ¾Zð‹ó²aÌZðóo°‡Å wFù÷•àLew ¢7Š÷U4ù÷‹÷E(ùw T76æùæù÷‹ü‘À�òÀ‹� ‹à ¡~ôšp$”÷•àew V×­ÔÖ÷‹ÊÓ÷•àèd·Š¿÷UÔø×·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�¬øÅ�¨ø¯ŒŒŒŒw‘¢dÅ’ø÷‹t�å w†ø0~l›Ät!”Ä Ä úw ¼w JÄôžÃõžw ž@÷eZø%Ä•t”7‘2ô $”ªô$”w „ÀBw .À�Àe`€ w À;w ÷ðÄ�ú” ~ä›w úwîû·â·ü÷Æð“f&æ¦fæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æ°€Ä4”6”üü”Ä Ä ÷…÷�0c™÷�.c”7Š$c7Š$c÷‹ cý€…w rx~\œ÷‹cý€÷5cpAN EXIT 2 REQUEST? BGT LPIA40 ;BRANCH IF EXIT 3 BLT LPIB00 ;BRANCH IF EXIT 1 MOV LPTASK(R3),-(SP);OK - IT'S EXIT 2 BEQ LPIA30 CLR -(SP) JSR PC,UNSPND ;SO, UNSUSPEND IT ; LPIA30: TST (SP)+ ;POP OFF ERROR BR LPIB00 ; LPIA40: MOV R5,-(SP) ;THE TIME HAS COME TO JSR TO THE MOV R3,-(SP) ;I/O COMPLETE SUBROUTINE JSqINDEX MOV @CRS(R3),R0 BIS #4,R0 ;SET BIT 2 = 1 TO SIGNAL C/R ERROR CONDITION MOV R0,ERRCR(R3) ;STORE ERROR MOV #ERMSGE,-(SP) ;PRINT MESSAGE JSR PC,CRMSGE MOV #MXTIME,COUNT(R3) ;SET MAXIMUM DELAY THAT WE'LL MOV #CRDLAY,8.(R1) ;WAIT FOR CORRECTIVE ACTION CLR @CRS(R3) ;STORE NEW TIMEOUT ENTRY AND CRTA00: ;DISABLE INTERRUPTS r²bÌZì Á%(†W ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ%Î~ü^† ÿŸ †   `— ÿŸ†Ä ‡„ „ „ „ „ øÄ õCÀôZÀU3ºZæúZ÷ Nó´¸Zñd_; ôZfæ<÷ ûÖ ‡CûEAôZû5ôZF~t_ ó ¸Zì…Á¾Zñw>ý…w*ý„fÅÚZæþÿßàþÿõ 5 Ÿþÿf÷ …ޤ‡Ÿþÿ…Ž´‡1 ‡3 ¸Z3 ÈZs ÆZ3 ìZó ÎZõ~ì_ÀÄZ �  sðZ3 ºZóÂZÁÐZfæ<÷ ^úñ,_Ö ³¼ZûAôZ‡ó ðZßÀÚZ"ÚðV`p &æèZ÷ XúÖ ÷ ô‡ ñÎ_ÄÄZô¥~d` ñ À¾Zð…wJü3 ÎZ³ ÊZ…w$üs÷‹cý€÷�gúb÷�bøb…÷‹V  <6””„ „ !ø…ÃÄþÿ÷%&Ãå„ À&Äe N @ Ä üÀe0w &à óÀ• Ö 9~ÔœÁ”Àÿÿ …÷‹‚bý€7�~b…÷‹rbý€À�nbÀE€ÿÀ¥÷‹Ð  w Ðÿí÷‹¾À¥ ç…Ä ã‡•w ¶ÿú×­4b• À•^w ¤ÿÀ•§~L�Uw œÿÆä“w€ú… ÷ÿÿn÷ÿÿj  ‚7,”X‚ÁRì”Á-P‚Ð ðÀD…w@€ 78À ô÷%(!ùƒ… �„ ú ÷%‚?˜~Ä�?‘‡ÃÿžÃŸÄþžw Nÿ…÷%öw ªþ…÷Ú77Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬À°w pþ· ÷ÊœÀÆ…ÀÀrtR PC,@LPIOCM(R3) MOV (SP)+,R3 ;RESTORE L/P INDEX AND R5 MOV (SP)+,R5 MOV LPRIOR(R3),R2 ;RESTORE PRIORITY INDEX ; ; ; THIS SECTION CHECKS TO SEE IF ANYBODY ELSE IS WAITING FOR ; THIS LINE PRINTER. IF SOMEONE IS, THEN THE NEW I/O IS ; INITIATED. ; ; LPIB00: MOV #1,R2 ;START WITH TOP PRIORITY .IFZ NLPRTY-1 ;CODE FOR ONLY ONE PRIORITY LEVEL * TST LPFRST(R3) u MOV R1,-(SP) ;SET UP FOR 1 SECOND DELAY MOV #$1SEC,-(SP) ; JSR PC,IOQTME TST (SP)+ BNE CRLA00 ;LET'S GO ABORT THIS REQUEST ; CRTA10: RTS PC ;RETURN TO TIMER ROUTINES .PAGE ;********************************************************************** ;* ** ;* C R D L A Y v· <ú‡7 6ú‡ßJ\˜ßàš7 ú÷¾Zú‡ 12345678 &=':>@9 0/STUVWXY �~Ü`_,(%\"Z -JKLMNOPQ $*];^R ! +ABCDEFGH .)[<#I ? �~Ta 12345678 :#@'="9 ¬~Ìa 0/STUVWXY ,% >?Z -JKLMNOPQ !$*); R  stuvwxy z &ABCDEFGH `.<(+|I~Db   aw~<ž÷ºŒÓÄýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå Ãå    ¦  ‚eÂ`„ ä�‡ÅýÿÂÆž ‡€âƒ ûË× Ãe ÃeÃe •~´žÃe Ñ�Ò … è€Ð ‡@(°T°T¸ÿ@€ ODT-11R V002ABEôQÀfÀf *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFR­~,ŸBÿÿÿÿÿÿÿÿªŸÆ¦)ÅÅeL Îxÿ ‡ ¡N N Í ÃŠüÍ ÷ <ÂåÂ%!÷ ,„cÍ À‹ëéÑ�øÃh‹ŠË‹þ€ÃœÀ`ÃE�b¤Ÿÿ ‡·$Í ÄÍ ÃÄPÇ÷ êÿÍ À‹â„ †¿Ä LÀŸ÷ê÷õwZÿÁÂê‰ É‹þ€rœŸ· îÿõpÿ¶x * BEQ LPID00 ;BRANCH IF NOBODY IS IN QUEUE * MOV R3,R2 * .ENDC ******* .IFNZ NLPRTY-1 ;NOW, DO THE SAME THING AGAIN, **** JSR PC,LPLEVL ;BUT FOR > 1 PRORITY LEVEL * MOV #NLPRTY,R4 ;R2 = INDEX FOR TOP PRIORITY * ; y ** ;* ** ;* THIS ROUTINE IS ENTERED ONCE EVERY SECOND AND IS INITIALLY ** ;* ACTIVATED BY CRTIME. IT PURPOSE IS TO PATIENTLY SIT AND ** ;* WAIT FOR THE CARD READER TO GET READY. HOWEVER, NOT BEING ** ;* A VERY PATIENT INDIVIDUAL, HE JUST MIGHT ABORT THE C/R ** ;* REQUEST, BUT ONLY AFTER MXTIME SECONDS HAVE ELAPSED. ** ;* zbcdefgh i jklmnopq r  \()[] þ@ñòóôõö÷øy^~¼bz{|}~ù123456789:;<=>?ðaâãäåæçèiàklmnoé!"#$%&'()*+,-./`ÑÒÓÔÕÖרYZ[\]^_ÙС¢£¤¥¦§¨ ª«¬­®¯©ábcdefgh êëìíîïPÁ‡~4cÂÃÄÅÆÇÈIJKLMNOÉ À�‚ƒ„…†‡ˆ€Š‹Œ�Ž�‰ABCDEFGHÊËÌÍÎÏj‘’“”•–—˜�š›œ�žŸ™QRSTUVWXÚÛÜÝÞßp±²³´µ¶·¸°º»¼½¾¿¹qrstuvwx0�~¬cúûüýþÿ@ñòóôõö÷ø@P~}zn|ù@@@@@@@@@@@@@@@ðaâãäåæçè@@kMl±@é@@@@@@@@@@@@@@@ ÑÒÓÔÕÖר@@[\µ^jÙ@@@@@@@@@@@@@@@Z@@@@@@@@@@@@@@@@@þQ–| * LPIB10: ; * TST LPFRST(R2) ;IS THERE A REQUEST FOR THIS * BNE LPIB20 ;PRIORITY LEVEL? BRANCH IF YES * TST (R2)+ ;INCREMENT INDEX * .IFZ $1145 * DEC R4 * BGT LPIB10 ;AND GO BACK F} ** ;* CRDLAY IS ENTERED FROM THE TIMER ROUTINE AND R1 POINTS TO ** ;* THE TIMER MODULE. ** ;* ** ;********************************************************************** ; CRDLAY: MOV 6(R1),R3 ;GET C/R INDEX BIC #START!ENABLE,@CRS(R3) BIT #READY,@CRS(R3) ;CHECK C/R STATUS BEQ CRLA10 ~~$d@@@@@@@@@@@@@@NÁÂÃÄÅÆÇÈ@@K�´L;É@@@@@@@@@ @@o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~œd@@@@@@@@@@@@@@@@@@@@@@@eô(~eß@tÿÀ0Š¡wð•‰xÀ-47.À ð²d¸v_rY‡÷Pnæ˜eß [×-Næ¦e÷XTÀfÁP”ÀåÁ û÷� @÷ þí÷Þ7 Š3x/~Œe÷ ÷ º ´e´eP:~xGÂ~ðGJ~hHÑ~àH€OR ANOTHER * .ENDC * .IFNZ $1145 * SOB R4,LPIB10 .ENDC BR LPID00 ; * LPIB20: ; * .ENDC ; AT THIS POINT, THERE IS AN ENTRY IN THE QUEUE, AND R2 POINTS ; TO IT. ; MOV � ;BRANCH IF C/R IS READY DEC COUNT(R3) ;TSK, TSK. DECREMENT COUNTER BNE CRTA00 ;GO WAIT SOME IF MXTIME SEC. HAVEN'T ELAPSED CRLA00: MOV (SP)+,R5 ;PUT TIMER RETURN ADDRESS IN R5 MOV CRFRST(R3),R1 ;GET USER'S LIST ADDRESS MOV #7,ERROR(R1) ;SET I/O REQUEST ABORTED ERROR CODE JMP CRCLOS ;THEN GO TO DEQUEUE THE REQUEST AND EXIT ; CRLA10: MOV (SP)+,R5 ;SET TIMER TO RE‚ ~fpÿ€àtÿ„àrÿ‚àvÿ†à0fÈ 6·•r”œ8w æå5Á W<~Q4ñ5~¤k€~Q<Aœ~Qp� ¬,¬(œ— &0Š Ãˆ  ÄÜ0‘ ´ŠxCà Ń`0 ‡ˆ ·•”ð‡ð‡ð‡ð‡ðY~l‡ñ5@~QìAˆQ°÷ >÷ Š<®f4®f·•º“‡&÷ &÷ ržfüžf4žfÀežf4®f·•�“€‡fÁ Á �`D`Ä �‡‚ñ•�fñ‹“fCD,fõ~”lô•ð1Š�fñ‹{f1Š‹f@–f 4 �¡ ñ• ‹f=‘ff(fæýÕ@ f÷ „Ö J@šf 3 1Љf1Š…fñ•‹fDŸfÄAË5@Ä =‘fu�+~€N³~øN;~pOÂ~èO�TER CLR LPBUSY(R3) ;CLEAR THE BUSY INDICATOR .IFG NLP-1 MOV LPMDAD(R3),-(SP) ;GO STOP THE TIMER .ENDC .IFZ NLP-1 MOV #LPMOD,-(SP) .ENDC JSR PC,IODQTM TST (SP)+ JMP (R5) ;EXIT TO RESTOR .PAGE ;********************************************************************** ;* ** ;* ‘ .ENDC .IFG NCR-1 MOV CRIOLS(R3),R5 ;GET THE I/O LIST ADDRESS .ENDC ; ; MOV @#PSR,-(SP) ;SAVE PSR .IFZ $1145 ;THEN, INHIBIT INTERRUPTS MOV #340,@#PSR ;11/20 CODE .ENDC .IFNZ $1145 SPL 7 ;11/45 CODE .ENDC TST DATA(R5) ;SEE IF LIST IS AVAILABLE BNE CMSX00 ;BRANCH IF NO MOV R4,DATA(R5) ’~ mf$fæÝñ•“fñ• ‹fý•ff,fæðÏw ,Ã�?ù³Š�fÅÅ AŸf7Š/ùóŠ�fwüó‹{f@–f@šfð÷ªø÷¨ø7 ¦øœÄ ô5@~Q2~„msˆQ ò5€~Qlò5~Qhô5 ~Q„êôU ~Q=Š f=Šf�œ~Qp� w\ø÷ ¶B   Âe®fÅ Å @ÀežfÅe®fÄ÷ Ú:JÒ  Ä ÷·•Ï~üm’÷ Àñ‹{f!ñœ{f{fñœ}f}fñœff EÅ µ–f–fµšfšf·•Ì‘æ÷ Jþƒó•ÿÿ{f3Š}f3Šf ·•°‘õ}�ff(fæ÷ þÖ 3Š�fw ‡ó‹�fﳊ;~tn�f÷ ê×-˜÷æf÷ 6‡w ÐÁ�â÷EÅ =Šf±Š‘f7ŠÒ÷@šfðý•^fñ•‹fw ®‡¦ö�6‘÷Õà.‘‡“J~`PÑ~ØPY~PQà~ÈQ”THIS SECTION GETS ENTERED FROM THE INTERRUPT ROUTINE IF ** ;* A DEVICE ERROR HAS BEEN DETECTED. ONLY TWO ERROR ** ;* CONDITIONS ARE CONSIDERED: FATAL AND WARNING. PARITY ** ;* ERRORS ARE CONSIDERED FATAL; PAPER LOW, L/P NOT READY, ** ;* ETC., ARE CONSIDERED WARNINGS. FATAL ERRORS ARE ** ;* RESTARTED: AFTER A PREDETERMINED NUMBER OF ATTEMPTS, ** ;* AN ERROR MESSAGE IS GENERATED AND THE REQUEST IS ABORTED. ** •;YES - GRAB IT MOV (SP)+,@#PSR ;ENABLE INTERRUPTS MOV R5,-(SP) ;STORE LIST ADDRESS JSR PC,TTYOUT ;CALL TTYOUT TO PRINT MESSAGE MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+,(SP) CLZ RTS PC ;RETURN TO CALLER ; CMSX00: MOV (SP)+,@#PSR ;LIST BUSY MOV (SP)+,R5 MOV (SP)+,(SP) SEZ ;SET ERROR INDICATOR (BUSY LIST) –f&Á� ÷Á � ±Š“f„�‡æ &~ìn€¶6À ˜À  L‚6o€ ùoZzB|¸~P|Â}¦|^‰Ø‰Z�œ�¾fHgoBtÐsRuû‡6ú'èd w û„…À8tÄ �Õ•+Á•  â€d Á0B`•�È ôÄe0 ‘¶ w èú–%‡Õ•˜~Œt- äÒ‹åÿÿ·ôÿ·îÿ·èÿ·êÿ· Þÿ÷  ÷ Œæ÷ ¢æÆÿæÄÿÅuľÿüÿ·¸ÿÆxf&æ¦f&ê÷R ö÷àI~uøŠ÷ Œÿ�€�‚ƒ„…÷ 4÷ rÿÆvÿ÷ í÷ êw 澊æ÷ 7 w ÷øÿ‡Zuÿÿ>vnu) ERROR XXXõ~|uXX SXXXXX SXXXXX SXXXXX SXXXXX xuu†u�u”u·øÿŽw ªù¦Åêÿ w œù…æ0Š÷à*ŠÍ €ÿw|ÿ· zÿ·Šw €ùއ� У;~hWÂ~àWJ~XXÑ~ÐX¤ MOV #LPMOD,R4 ;GET TIMER MODULE ADDRESS .ENDC .IFG NLP-1 MOV LPMDAD(R3),R4 ;GET TIMER MODULE ADDRESS .ENDC MOV R4,-(SP) MOV #LPTIME,JSRSUB(R4) MOV #$1SEC,-(SP) ;STORE ONE SECOND DELAY JSR PC,IOQTME ;AND GO START THE TIMER TST (SP)+ ; JMP (R5) ;EXIT TO RESTOR .PAGE ;***************************¥; ; CRSIO: CLR COUNT(R3) ;SET COUNT = 0 CLR IGNORE(R3) MOV SYSTEM(R1),CRTASK(R3) ;STORE TASK NUMBER .IFNZ BIN CLR BYTE(R3) .ENDC .IFNZ TTYSW TST CRBKUP(R3) ;SEE IF THIS READ IS TO BE DIRECTED BNE CRSB00 ;TO THE TTY - BRANCH IF YES (OR SI) ; CRSA05: .ENDC MOV CRDATA(R3),R0 ;GET DATA ADDRESS CLR R1 ;DETERMINE MODE ¦~ôuø7 ®ÿÅ\ÿ'wVÿ÷ZuPÿ·î‰Äœuf&÷ &þÌ ú÷• RÿÅå Íæ`u÷ ˆð÷ nÿׇ· fÿ渉÷ಉÖ÷ÿÿ ÿ·¦‰‡ÿ#~lvÿÿÿšvœvžv v¢v¤v¦v¨vªv¬v®v°v²v´v¶v¸v¯~äv'~\w§Y~HYà~ÀYh~8Zï~°Z¨******************************************* ;* ** ;* L P T I M E ** ;* ** ;* THIS ROUTINE IS ENTERED BY TIMER EVERY SECOND. LPTIME ** ;* CHECKS FOR AN L/P READY CONDITION SO THAT OUTPUT CAN ** ;* CONTINUE. AFTER LPMXTM SECONDS, LPTIME GIVES UP ON THE ** ;* OPERATOR AND©OF INPUT MOV (R0),R2 BGE CRSA10 ;NWORD < 0 ======> BINARY INC R1 ;SET R1 = 1 (BINARY) NEG R2 ; CRSA10: MOV R1,CRMODE(R3) ;STORE MODE CODE CLR ERRCR(R3) ;CLEAR ERROR STATUS MOV PC,CRBUSY(R3) ;SET C/R BUSY .IFZ NCR-1 ;NOW WE GOT'S TA GET THE ADDRESS OF MOV #CRMOD,R1 ;THE TIMER MODULE FOR THIS C/R .ENDC .IFG NCR-1 ª®~Ôw6~Lx½~ÄxE~ ;* ;* NOTE: THE SYSTEM OPERATOR CAN ALSO SWITCH INPUT BY THE ;* COMMANDS: ;* CR,K SWITCH TO C/R : K ;* TY,K SWITCH C/R : K TO TTY ;* ;* WHERE K = 1 F²Øæ&f¦÷ ª„€ƒ•À Ìé禶¶æ—þÿß•àþÿ÷ àú[7 ÚúŸ•þÿæ¦f�v~”{ÂÀú ‚¸v²� 6 ²€6 „Ü×þÿß•àþÿÆšú&À"7 |À À 2 7 ÊÁ ô•¡w¡e‡ô•¡wß�þÿ&÷ öƒ‡B~ |ô•¡w€œ À Ä <˜v¸v0¸vvv0¸v˜vß�þÿ‡Ÿ•þÿŽŽŽ‡æ—þÿ& ÷ ÿwß•àþÿÀú ÜÈ1Š¡w7 ðù7 €7 Úø0 ÆæùW e ‡&~„|ñ‹x ± ¡wŠþÿf÷ hƒŠþÿw´ñŠ¡wùw ¸ò €Ýk7 ªùh‚æ—þÿß•àþÿœ¡wÁ yÒ|„}„}„}„}„}æ|þ|.}.}„}„}„}.}Ÿ“þÿ&÷ Òß•àþÿÖ Eï~ü|/Á\ù1 7 Tù7 ³Fa’~p^ L/P 1 PARITY ERROR L/P 1 NOT READY L/P 1 ABORTEDÐ]T^&f¦æ&f€ ÷ \ 7¬”ÿÄ0ð‹~è^&œ& & & ÷ ¸Ö …„ƒ‚�€Ž‡œ— ÂÉ Ä Þ÷ DæþÿßàþÿÈ *:¾]2¾]ÄrÄh´Škx0 ó ´] Ÿþÿð¥ú~`_ð öþÿ…„ƒ‚�€& ÷ Fwà0¸ˆ ŸþÿÄ¥Ÿþÿó´]s¶]3Æ]3 È]³Î]sÊ]3 Ê]3 Ì]÷ âÂìcñ Âld÷ ²÷ ~Ø_ø_ld‰ ߀þÿÂÎ]€¸]Á¶]÷ ¶~÷ ¨É ÂldÂìc÷ x÷ ¼MæþÿÂÎ]ßàþÿ2¸]„Äe´(SP)+,R5 ;OTHERWISE, SET UP TIMER RETURN MOV LPWORD(R3),R4 ;GET LENGTH OF CURRENT LINE BR LPIE05 ;TO LOOK LIKE RESTOR RETURN ; LPTA00: JSR PC,LPRSET ;AND RESET THE L/P INC LPRTRY(R3) ;INCREMENT #ATTEMPTS COUNTER CMP LPRTRY(R3),#LPMXTM BGE LPTA10 ;BRANCH IF IT'S TIME TO QUIT MOV #$1SEC,-(SP) ;RESTART TIMER FOR ONE SECOND JSR PC,IOQTME TSµOR C/R : 1, ETC. ;* ;* ; .IFNZ TTYSW ; CRSB00: .IFNZ BIN TST @CRDATA(R3) ;CAN'T SWITCH IF IT'S BINARY BNE CRSA05 .ENDC .IFZ NCR-1 ;GET THE TTY I/O LIST ADDRESS MOV #CRLIST,R0 .ENDC .IFG NCR-1 MOV CRIOLS(R3),R0 .ENDC CMP (R0),#1 ;IS IT IN USE? BNE CRSA05 ;BRACH AND USE C/R IF IT'S BUSY MOV #CRSB50,¶ä7 >ø�ÁeÆHùfffffffff e‡ð‹xð•ýÿ¡wð•¡wŸ“þÿ&&÷ ¬‚€ß•àþÿð•¡wÂ�´}W"Âåˆ~t}ø1f÷ *øŸ•þÿw âñއccc�}œ}¨}öÕ€6Šw ˜ñæ—þÿ €j€Á‘ 7 ~øc‚À ¸v€ ë~ì}ß•àþÿœ¡wÂå  S / -Âå2Lð•¡wŸ“þÿBœ  ƒ˜vAC ÄÃû;ß•àþÿW"5ò ˜v r˜v ò˜vvv²`vvL2vvÉÀ A~d~� e†1 ñ‹xð•¡wŸ“þÿ&&÷ v�€ ß•àþÿ0Š¡wŸ•þÿvw Êð‡… … … õÅ ð•þÿ¡wðw ¦ð×þÿ&  „Ý=7¡’÷:‚ß•àþÿ­¡w¯·¸]2¾]ÈŸþÿÄÄ]ôŠkx&°Ÿm~P`¬ æÄ]& ÷ dÖ fæû Æ]ƒ…ÂÎ]Â÷ êÄò ¸]Ò Ä ú'€¸] ÷ Œð ·s¶]3Æ]³Î]3 Ä]ÂìcsÊ];~È`Âld3 Ê]3 Ì]÷ °÷ Ê÷ òM÷ À3 ´]æV^÷ ÐÖ Mó Ì]÷ ¤÷ `÷ ÈMær^÷ pñwúþæŠ^÷ ^÷ |ó´Ì]æd^æ<÷ RÖ ôg~@aFaMCfÁ¶]ÂÎ]€¸]÷ R„…Íó Ì]æ<÷ Ö ‡ð…|žw�þæ&ff& À´^ÅÈ]AaÁes!Ê], DÔ! Ä% 3 o~¸a´^÷ H … s!Ê]îÀ5Е sÈ]Àì´^„ Ö …�€Ö ‡Î5èÄ ¸T (SP)+ ;POP OFF ERROR FLAG BNE LPTA10 ;WHAT'S THAT, AN ERROR? THEN BRANCH RTS PC ;RETURN TO TIMER ; ; LPTA10: MOV #7,ERROR(R0) ;SET USER'S ERROR FLAG TST (SP)+ MOV (SP)+,R5 JSR PC,LPQERR ;GO QUEUE THE ERROR TASK, IF THERE IS ONE JMP LPIA10 ;GO TRY NEXT REQUEST. .PAGE ;********************************************************************** ¹$EXIT(R0) ;NOT BUSY. SET I/O COMPLETE ADDR MOV DATA(R1),DATA(R0) ;MOVE ADDR(DATA) INTO TTY LIST MOV R0,-(SP) MOV CRMDAD(R3),-(SP) JSR PC,IODQTM ;STOP THE TIMER TST (SP)+ JSR PC,TTYIN ;CALL TTYIN TO READ DATA RTS PC ;* ;* ;* ENTRY HERE WHEN INPUT REQUEST IS COMPLETE (TTY I/O COMPLETE ;* SUBROUTINE). ON ENTRY, R1 POINTS TO TTY LIST. ;* ;* ; CRSB50: .IFZ NCR-º~Ü~5ô•¡w¡e ‡ß�þÿæ�&÷ �‚ƒ• #Ä ¸v„ Ê �œ Á ¹vv±vv´Š¡wß�þÿ¶w Fðö އö—þÿæ÷ 0üwŽ Ž Ž 6 æ±~TŠþÿ7 ôÿ÷ þöl÷ êõiÄööÄ  Ã÷ ØÿíÂ`ò ˜v!÷—!|9 áß•àþÿ÷ ´ÿÛ�˜vw¸ör˜v²vvòe˜vvv EÜW­¡w7 –öŠþÿ\~Ì×w‘ˆöµŠ¡w‚ ·�€ö·„öÉñ @œÀEÿÀ @`ÀeB·î·Jÿ& fB ·Ú·6ÿF€ 6 vœ �‚ƒ„…þ7 ö7 5~D€ö7 ö7 ÿÀöÀ 0 ˜vð˜vvv0`vvÀåöÀtÁè1 ¸vð•¡w0Šx0Љx0Š™x1 ¨xá À ðÀÁ´}ÙÀ ü‡»÷ ì÷Å ïÄÚ¶ 6 & „`“Àe3 ¶^Ž Ö ‡ ²~0b4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%D „ „ ÄeÿŸD ‚ ñŸ‚ð¥ !ƒ!õŸ†Ä5  ‡ð¥ùćććßo~¨b@ê‡Äê& Ä5 Ä5Ä5Ö ‡– ‡Ö ‡ó p^  ê êßÐ]êßÈêæd^æ<÷ ”Ö ‡fÄ´^ÅÅ ýÀåÄÄ Ä Ä Äe:c0r~ cð0ŠÈ&÷ T…‡ÃwÅÀ´^@aAa… !Å ý@Á¶]…ÂÎ]w²ü ê‡f  ÅÅ Â`üBa…‡„fÅV^æþÿßàþÿÛ~˜cõ 5 Ÿþÿf÷ Þ…Ž¤‡Ÿ¼;* ** ;* L P C N V T ** ;* ** ;* THIS SUBROUTINE FORSM ONE PRINTABLE LINE OF TEXT, ** ;* CONVERTING EACH CHARACTER TO THE L/P EVEN PARITY ASCII ** ;* FORMAT. LINKAGE IS: ** ;* ½1 ;FIRST, WE NEED THE C/R INDEX CLR R3 ;FOR ONE C/R, IT'S SIMPLE! .ENDC .IFG NCR-1 ;FOR MORE THAN TWO, IT AIN'T SO EASY MOV R1,R3 ;(UNLESS, OF COURSE, WE'RE ON THE 11/45) SUB #CRLIST,R3 ;GET DISPLACEMENT OF THIS LIST FROM BEZ CRSB80 ;THE FIRST LIST .IFZ $1145 CLR R4 ;THE C/R INDEX IS = DISP/7 ; CRSB60: SUB #7,R3 ¾ÂÀ Á`v ƒ W"tç~¼€Áqà€¸v¹¸v¹ú€0œ�‰x0Š¡wá À  ð‡�º�d‚ƒÀƒl„ …°…X†ü††‡”�0‚Ú‚Œƒ6„â„€…&†Î†Î†Î†²�29~4�¢� TASK '~¬�# 2 æ”� ˆˆN‚2[~$‚>‚ TASK # 3 æ0‚ ˆæ& & & ˆÖ ˆø‚¿þÿ…Ž´‡ ßÞ_€ßà‚÷ Ôþ÷ �ÿÀ¸]Á¾]B   û‡‡�‚„‡ˆ �‹À�Ž                 !"£°~d$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZ      _Z_‡ˆ ‹À               ”~ˆd                                               .<(+ ¦         !$ª©» -¯        Þ¬¥ ¾?          :£À'½" ABÃDÅÆGHÉ       ÊKÌÆ~eMNÏPÑÒ        SÔUVרYZ       \  ÛÝ           ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרYZ      0±²3´56·¸9      ôeô(1~xeÀ ** ;* SET R0 = LIST ADDRESS ** ;* R1 = DATA ADDRESS ** ;* R2 = CONVERSION TABLE ADDRESS ** ;* R3 = L/P INDEX ** ;* JSR PC,LPCNVT ** ;* BNE ;BRANCH IF NO MORE TEXT ** ;* Á BLT CRSB70 TST (R4)+ BR CRSB60 ; CRSB70: MOV R4,R3 .ENDC .IFNZ $1145 DIV #7,R3 .ENDC .ENDC ; CRSB80: MOV #CRTTY,$EXIT(R1) ;SET TTY LIST BACK TO ORIGINAL FORM MOV CRDATA(R3),R4 ;GET DATA ADDRRESS AND CHECK FOR THE CMPB #BELL,4(R4) ;RETURN TO C/R CHARACTER BEQ CRSC00 ;AND BRANCH IF WE FOUND IT TST ERROR(R1) Â2`~œ‚è‚ TASK # 4 æÚ‚ ˆæ& & æˆÖ æˆ{~ƒñªƒ2‘~Œƒšƒ TASK # 5 挃 ˆæ& & & ˆÖ õT„2q~„ÃÀ0Š÷wð•ßxÀ-Ö7ÐÀ ðlew÷ c~ðeÎý‡æf÷ ¼øú÷ ’fo ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !"#$%&'()*+,-./:;<=>?@[\]^_ 789ABC01”~hf23456 COLUMN 17 = FIRST CHAR æþÿßàþÿþ% f…µ…ŸþÿŽ6 ‡Ÿþÿwœ"öeþ¸f6 ‡pÿ€àtÿ„àrÿ‚à‹~àfvÿ†àüfgg g,g8g3DgVo3DgVo0Egþm0Egþm3Fgšo3FgšoÿÿÄ ** ;********************************************************************** ; ; LPCNVT: ; ; MOV PC,-(SP) ;SET NO DATA FOUND FLAG MOV R0,-(SP) ;SAVE SOME REGISTERS MOV R1,-(SP) ; MOV R5,-(SP) CLR -(SP) ;TAB POSITION COUNTER MOV LPBUFR(R3),R0 ; R0 = ADDR L/P BUFFER MOV LPCNT(R3),R5 ; R1 = TEXT DATA BUFFER ADDRESS ADD R5,R1 Å ;THEN CHECK FOR AN ERROR BEQ CRSB90 ;BRANCH IF NONE MOV CRFRST(R3),R0 ;OOPS - SET ERROR FLAG MOV #7,ERROR(R0) ; CRSB90: MOV (SP)+,R5 ;SET FOR FOR TTYIN RETURN BY JMP (R5) MOV NREAD(R4),COUNT(R3) JMP CRCLOS ;GO CLOSE OUT THIS REQUEST ; ; ; THIS SECTION SETS UP THE LOGIC TO SWITCH BACK TO THE CARD ; READER. ENTERED WHEN THE OPERATOR ENTERS A 'BELL' CHARACTER. ; ; CRSCÆD„ TASK # 6 æ6„ ˆæ& & æˆÖ ô…2)~|„ð„ þ~ô„TASK # 7 æâ„ ˆˆûž…2õ~l…Ž… TASK # 8 怅 ˆæ& ˆÖ ÷D†2 ~ä…Ç­~Xgjglgngpgrgtgvgxgw x÷ ¶ ÷ b÷ ìñ‹Ig.·•V˜¬w ^އœ&& && ÷ äÖ ,–~Ðgˆ ëœ ôŠkx¬âw "ö� ˜& ÷ Êwd±ŠIg5bgñ‹GgË€ñ•Gg·•æ—÷ 2Åw ä÷ "ÈÄ÷ Ì÷ Vñ‹Kgµ±ŠKg5fgñ‹Gg®€~Hh1ŠGgãw ´ÀÔf ÜfüÁw~þÀüfHÀe  DgúÀGgŠ zgüÀGgÂÿÿ�� IgüŠ MgüÀ_gP� bgüÀzgÁjgPÑ W zgûw V‡‰Ë~ÀhÁ�:—ÁEðÿEÅ ÷ ºñ‹YgDôfô•·•—ñ•MgDœWgÄ |üh1ŠYgw*i,jR4 CMP R4,#MAXCC ;IS IT A CONTROL CHARACTER? BLE LPCA05 ;BRANCH IF NO CMP R0,LPBUFR(R3) ;IF WE'RE AT THE BEGINNING OF THE BUFFER BNE É00: CLR CRBKUP(R3) ;CLEAR C/R BACKUP FLAG INC REPEAT(R3) ;SET 'READ ANOTHER CARD' FLAG MOV (SP)+,R5 ;SET R5 FOR TTYIN RETURN BY JMP (R5) JMP CRIC00 ;AND GO START ANOTHER CARD .ENDC .PAGE ;********************************************************************** ;* ** ;* C R D O N / C R D O F F ** Ê4† TASK # 9 æ&† ˆææˆÖ öì†~\†2 ^~Ԇ܆ TASK # 10 æΆ ˆæˆÖ ˆr‡2 Y~L‡7  € ·  ˆúü‡2 ªËæj±ŠOgW¬OgH@bg ´  -m)~8i=�àf­ hý• àfñ• Wgafôf÷ x Ö =ŠÔf=ŠØf œ&& æ& ÷ .Ö œÄñ‹Gg ÷ z¬ & œ & ÷ Ö ¤~°i w Pø w Rœ ôŠkx Â÷ j1ŠGg÷ ®jg %jgÄåjg·•–±ŠGg5bg 1ŠIg%jg·•ì•5fg÷ 4w8 1ŠKgñŠGg·•ü~(jÔ•÷±ŠOgfôf÷  Ö ïñ•Wg1ŠOgôý• àfñ•Wgâñ‹]gý• àfñ•WgØ1Š]gý•Uàfñ•Wg±ŠOgÌý•^àfñ•Wgö}œSgàfñ•Wgﱊ`~ jOgý• àfñ• Wgå1ŠWgwjþý• àf1ŠOgñ• Wg§ý• àfñ• Ì LPCA10 ;AND THE CHARACTER IS NOT CONTROL, THEN INC LPMODE(R3) ;ASSUME AUTO LINE FEED MODE BR LPCA10 ; LPCA05: CMP #HT,R4 ;SEE IF CHARACTER IS A TAB BEQ LPCA60 ;BRANCH IF 'TIS CMP R0,LPBUFR(R3) ;OTHERWISE, IF WE'RE AT THE BEGINNING BNE LPCA20 ;OF THE L/P BUFFER, WE'LL CONTINUE JSR PC,LPSTOR ;FIRST WORD IS CONTROL, TOP BYTE (LEFT) MOVB #' ,R4 Í;* ** ;* THESE SUBROUTINES ARE CALLED BY OPERATOR INPUT AND ARE ** ;* USED TO SWITCH THE C/R INPUT TO THE TELETYPE (CRDOFF) ** ;* OR REINSTATE INPUT FROM THE C/R (CRDON). THE LINKAGE IS: ** ;* ** ;* JSR PC,CRDON (OR CRDOFF) ** ;* Î~ć7  � ·  æ æˆÖ õÀDˆÂÃàƒ Ò— ú‡7 „À7 ~<ˆd7l‡÷þÿv÷Eàÿp·j·d· ^÷ þíþæðí÷ 8ô¢ˆ—"®ˆ—"& ¦’$Ò�ÎíÊ�0Ò Ò(Ê ÷ íw²öZZÏ~´ˆßÖˆßà÷~‡ß‰·n·!€íƒÆzíw tæ· ZÀf& fü‡·NþßÖˆß@fÿÆ:Àf¨ fü‚÷(.÷ b~,‰*æR‰÷ Œì×'xÿÿÿwPÈw (æÆ[æœv÷à–v&×-&¾‹‚€È ÷e?ð �ÏWg 1ŠOg@fgwrþñ‹_gw&ÿý•àfñŠ_gwÿ‰Á�ú”ÁEðÿEÅ Dðfô•@H~kfg Ê €fôfæ÷ 0Ö DŸÜf+ÄÅ€¡|¡ n¡ *¡-ƒÃeƒl¡.ñ‹QgB¦ÎEÀ–,I²  ‘Ê €Ê5@Ä =‘àfCðfÝ~�kó•Ê5@@w¶ Ä• ñ•Wgîý•^àfñ•Wg2 ïò äò Ê Þ�à ñ‹Qg ±ŠQgÄ•\ñ•Wgñ’SgÐÄ’Î1ŠQg²  ‘1‘SgÄ•\ñ•WgÁñ‹~lUgÀ±ŠUgfôf÷ ÀÖ ¸½ŠÔf½=‘àfñ• Wgfðf÷ ¤Ö ²Ä•=‘àfñ•Wgò€÷ :È 6·•¦“œ8w ^ð5Á W<Â\4ñ5€Â\<AœÂ\p� ¬F~€l,¬(œ— &0ŠÐ ;IS IGNORED BY PER DATA CONTROLLER ; LPCA10: JSR PC,LPSTOR ;CONVERT CHARACTER TO L/P ASCII AND BNE LPCA40 ;BRANCH IF L/P BUFFER IF FULL ; LPCA15: INC R5 ;STORE IN L/P BUFFER ; LPCA16: CMP R5,LPMAX(R3) ;IF WE HAVEN'T EXCEEDED MAXIMUM SIZE, BLT LPCA00 ;WE'LL GO BACK FOR MORE ; LPCA20: BIT #1,R0 ;CHECK TO SEE IF THE RIGHTMOST BYTE BEQ LPCA30Ñ ** ;* WHERE R3 CONTAINS THE CARD READER NUMBER (1, 2, 3, ..., NCR) ;* ** ;* R3 IS DESTROYED ON RETURN. ** ;* ** ;********************************************************************** ; ; CRDOFF: .IFNZ TTYSW .IFG NCR-1 TST R3 ;C/R NO. CAN'T BE <= 0 BLE Ò6 °È €¶ÈeøÂ~¤‰¬ÿÿôîð�¨ì¶öB|÷•[¶üÿ÷ŠSû& Æå Û¦ö v÷àvw xå€È%ð•ÿÿÈ%ÿÿœÁEðÿÁ Cw ·  ÁeÀ‹R~ŠBA  ûJ³à‹É6 w 4å0œŒŒ€ ð‹Œ"$·ŠÐô‰À:÷å2ȬÿÿôœÁEðÿW íÁ 9à‹1à‹ æ7pu ðŠŒï~”ŠÔÀ À À fÁÀ‹`÷àTu7�vBABW¬ÿùñŠöCEqœJ°à‹É…7uœó‹æœ& ‹€÷ Àó & Â5@Î& ÷ NïE~ ‹Ö ÂŒ€Ó ÂŒ€ûÜÓ$ÂŒ€&&fû …„€A¶÷“è÷ æ«ÁÀ‹`BA¥W,Ó Ã  ÄÜ0‘ ´ŠkxCà Ń`0 ‡ˆ ·•8“ð‡ð‡ð‡ð‡ð‡ñ5@Â\ìAø~ølÌ\°÷ >÷ †<zg4zg·•î’‡&÷ &÷ njgüjg4jgÀejg4zg·•Ä’€‡fÁ Á �`D`Ä �‡‚ñ•Mgñ‹_gCDøfô•ð1Š[gñ‹GgP~pm1ŠWg@bg 4 �¡ ñ• Wg=‘àffôfæýÕ@Øf÷ ¸Ö J@fg 3 1ŠUg1ŠQgñ•WgDŸÜfÄAË5@Ä =‘ÔffðfæÝñ•_gf~èmñ• Wgý•àfføfæðÏw Ã�?ù³ŠYgÅÅ AŸàf7Š/ùóŠMg~ó‹Gg@bg@fgð÷®ø÷¬ø7 ªøœÄ ô5@Â\sÌ\ ò5€Â\lò5n~`nÂ\Ô ;NEEDS A BLANK MOVB #LPBLNK,(R0)+ ;YES - STORE IT ; LPCA30: ; LPCA40: MOV R5,LPCNT(R3) ;STORE CALLER'S BUFFER POINTER SUB LPBUFR(R3),R0 ;DETERMINE NO. WORDS IN L/P BUFFER MOV R0,R4 ASR R4 ;AND LEAVE IT IN R4 ; LPCA50: TST (SP)+ ;POP OFF TAB COUNTER MOV (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R1 MOV (SP)+,R0 TST (SP)+ Õ CRDF10 CMP R3,#NCR ;OR > NCR BGT CRDF10 DEC R3 ASL R3 INC CRBKUP(R3) .ENDC ; ; .IFZ NCR-1 INC CRBKUP .ENDC ; ; CRDF10: RTS PC .ENDC ; CRDON: .IFZ NCR-1 CLR CRBKUP RTS PC .ENDC .PAGE ; ; ; I N I T I A L I Z A T I O N ; CRINIT: .IFZ NCR-1 ;FIRST, LET'S SET UPÖÿúJ°à‹É÷ Àñ—ÀÀ‹Á÷à†tÐ Á üÿ T~„‹÷Š˜wúþwlé–‹ô~ü‹dd7Š"÷ Ä@÷¼÷ ¶:· °7fÁêñ‹ev)×-êe�‰Àúéð•¡w7”s÷ ’s÷àŠs_~tŒ÷•Ô& æu¦Á B˜v¹vv±vv±˜v9 vv‚��æ²é÷ úï& æT÷Š„7Š˜&fÀ:�Е<ˆŠ¢<9·Š€ŠˆŠ¢<2ŠˆŠ¢-Š?~쌈 "ÁPP�P�ˆŠ÷•)÷mäÿȵ· Úÿ×hô5 Â\„êôU Â\=ŠØf=ŠÔf�œÂ\p� w`ø÷ ¶B   ÂezgÅ Å @ÀejgÅezgÄ÷ Ú:JÒ  Ä ÷·•8‘÷ Àñ‹Gg!ñœGgGgñœ»~ØnIgIgñœKgKg EÅ µbgbgµfgfg·•‘æ÷ Nþƒó•ÿÿGg3ŠIg3ŠKg ·•è�õ}�àffôfæ÷ 6Ö 3ŠYgw à‡ó‹[gﳊ[g÷ ê×-œ÷æäfõ~Po÷ ćw ¬Á�æ÷EÅ =ŠÔf±Š]g7ŠÖ÷@fgðý•^àfñ•Wgw Ї¦ö�n�÷Õàf�‡f&Á�¤÷Á � ±Š_g„�‡æ &€¶6À ˜À §~Èo (‚6Þo€ ù‡Üo°zˆ|Ê~–|æ}à|^‰Ø‰Z�œ�ŠghÜo˜t&t¨u’uv&æ¦f&MÖ €�‚ƒ„…‰æ& æ & ÷ € Ö w Ø ;POP OFF FLAG, WHICH SETS THE CONDITION RTS PC ;CODE: ZERO = DATA STORED ; NON-ZERO = NO DATA STORED ; ; LPCA60: ;CHARACTER IS A TAB, FILL IN BLANKS MOV #40,R4 ;OTHERWISE, KEEP STORING BLANKS INC R5 JSR PC,LPSTOR ;UNTIL WE GET TO A TAB POSITION BNE LPCA40 ;OR UNTIL THE L/P BUFFER IS FULL BIT #7,(SP) BNÙ THE INTERRUPT VECTORS MOV #CRINT1,@#CRVECT ;STORE C/R INTERRUPT ADDRESS MOV #340,@#CRVECT+2 .ENDC .IFG NCR-1 MOV #CRVECT,R0 MOV #CRINT1,R1 MOV #340,R4 MOV #NCR,R2 ; CRNA10: MOV (R0),R3 ;LOAD VECTOR ADDRESS MOV R1,(R3)+ ;STORE ADDR(CRINT) IN VECTOR MOV R4,(R3)+ ;SET PRIORITY LEVEL TO ZERO ADD Ú·Š Á@�@”‰Šp¢-� É•¡Š÷ø�À÷µ÷e²�€·Š÷µ‰–%!À˜GÔ~d�7–r&÷ ^·£Í< ·­¿7·­´2÷ànrÆe"ß2 È7VrB €f÷ ÷ DÑ &÷ –Ö Â‹ ¦�& &  €NÑ & Ý~Ü�÷ zìÖ Â º€yܶÆe÷àr÷•ÿÿEwþæ÷àöqÀöò÷åîÈð5ô7Úq&÷ ¢ð5ðE÷ —-?ö�ð—-²~TŽ ö�ã·­Ú¶ Î Î�ÑÁ‚·£É  ·­»·­°Ñ BÆe�‚¦÷ (Ž-ô ¶-ï¶- êÆeÆe ˆÈ~ÌŽšæ ¦ƒÅöEÛþp2×~@pÍ~¸p ÿÿEN¤rDS¨rQU®rXX´rTMžsDTÐsREÂqEX÷&röæîq÷ ~ö÷€ê÷üqâæîq÷ þö÷ Ò÷%Ò7 ò~0qzÿ÷Êvÿ÷Ærÿæ¬p÷ à�Ö À²p$È ü€w: ær÷ &ö÷’÷üqŠ7 Žæîq÷ ¢ö÷ vëÅþqDÄå�Ä ÃÜpS# Ó Ë û÷8rVæîq@~¨q÷ Þõ×Ë ÓÕ Û Å Ñ÷Fr:ñW¥,Ä ! ‚÷ –Å 7!âêÄ ôE Â\‡ ‡ÜE LPCA60 ;KEEP GOING 'TIL WE HIT A MULTIPLE BR LPCA16 ;OF 8 (PLUS ONE) = 1,9,17,... ; ; LPCA70: TST R5 ;WE GET HERE IF: BNE LPCA50 ; 1. THERE IS NO MORE TO PRINT MOV #SKIP1,R4 ; 2. USER HAS NWORD = 0 BR LPCA10 ;IF (2) IS TRUE, THEN STORE A SINGLE ;LINE SKIP AND PRINT IT .PAGE ;*******************************Ý#8.,R1 .IFZ $1145 ; DEC R2 BNE CRNA10 .ENDC ; .IFNZ $1145 SOB R2,CRNA10 .ENDC ; .ENDC ; ; NOW, LET'S CLEAR THE QUEUES OUT ; .IFZ NCR-1 CLR CRFRST MOV #CRFRST,CRLAST .ENDC .IFG NCR-1 MOV #NCR,R0 MOV #CRFRST,R1 MOV #CRLAST,R2 ; CRNA20: MOV R1ÞÀÿà à ÃÃEàÿöÅ… … … ÅEàÿv‡…Ã�;Õ`Ã�1Õ`Ã�*Í`Í%<Íå<µ þÿå%ÍåŽ Ã�Ü-�Î ÎàÎÎ Î Î »~D�ö¶ ¶ ŽUŽU°‡¦öžp&÷à”p×-”,�†€ðEÈ Èe÷et?p6 È €¦ö\pw ºß€÷àLpÈ%È%ÿÿó~¼�ÅÁþ�BA  ûJÉ6 w �ßÁ�Å ïøðUòø�þ��þ��¯~4�Gÿ&€ö°o <†—-‡€÷à–o7�Ðÿ·�Ëÿ÷Âÿ6 ðw àÞ€Àeàlo üÿ× 0‚÷•�ÿ÷mHüÁ5ß2~ r0r AC:  ? ILL CMD! ILL PAR! NON-QUIESCENT æ7 ôÿ7 òÿ7 ðÿaÃlrc™Ä ýæfr÷ ˜„Ö  ƒô~˜r‡ärür2sDs ÁÁÁW¥,2Ä 0!-‚÷  ÿÅ )!&7!Ü#Â�yœr÷à�ô¥÷w4Š÷w·�‡÷àüŒô‹÷w­÷w  ~s·êŒ÷Tràþæîq÷ hô ‡ô•÷w·ÎŒ‡&& & & ÷ rÖ ñè&÷ – ‡ HH:MM:SS MM/DD/YY Ys\s_smsjsgs�Ä÷ æþÅ Ú~ˆs&ÅeÀ õI ưÿ‡·ªÿW¥, !ôÀ÷ Æÿ÷ ŠÖ à*************************************** ;* ** ;* L P S T O R ** ;* ** ;* CONVERT THE CHARACTER IN REGISTER R4 TO EVEN PARITY, ** ;* LINE PRINTER ASCII, THEN STORE IT IN THE LINE PRINTER ** ;* BUFFER. THE L/P READS CHARACTERS FROM INCREASING ** ;* MEMORY LOCATIONS,(R2)+ ;SET CRLAST = ADDR(CRFRST) CLR (R1)+ ;SET CRFRST = 0 .IFZ $1145 DEC R0 ;DECREMENT COUNTER BNE CRNA20 ;AND TRY, TRY AGAIN .ENDC .IFNZ $1145 SOB R0,CRNA20 .ENDC .ENDC RTS PC .ENDC ;ENDC FOR THE BEGINNING .IFNZ NCR STATEMENT .END â~¬�·Š}ÿ· :ü³ -�‡Âœ-�æÀ.� à ”Daû„`Ã>�÷à o‹÷ø�ÿÓµ÷eÿ“�K�6 w nÞÖ ¡±æðn÷àênÆå VÖ €$Á$~$‘@�Î5Á;�& H” H” H”¦)€�À–‹7DúÁ% Á ýÀÞ‹Á1à‹à Á Á úÀŒÁ1˜ŒÁ ü÷•ÿÿžú÷•ÿÿ¹þ7Š•ú7 bþ÷ø�^þ÷�á~œ‘dþ7 Pþ÷’þ7 �þ÷Žþ‡¦æÀ‘wŽø¦æÌ‘w\úÜ~’ ND.E C ND.E PC S RT 10NALP O BL 2 ,RR0 P CM S UEUE QTYRIIOPRE THN ;I + 0)(R R CL )+R1,(R0 V MO : 10NALP ; 2 ,RR1 V MO R1T,ASPL#L V MO R0T,RSPF#L ä, AND FROM LEFT (TOP BYTE) TO RIGHT ** ;* (BOTTOM BYTE). THUS, LPSTOR CANNOT PERFORM A SIMPLE ** ;* INDEXED STORE. ON ENTRY, THE REGISTERS ARE EXPECTED ** ;* TO CONTAIN: ** ;* ** ;* R0 = ADDRESS OF L/P BUFFER ** ;* R2 = ADDRESS OF CONVERSION TABLE ** ;* åA BUFFER ADDRESS FROM STACK .IFG NLP-1 ADD R3,R4 ;GET ADDRESS OF BUFFER FOR THIS L/P MOV (R4),R4 .ENDC MOV R5,-(SP) ;SAVE R5 .IFZ NLP-1 ;* GET ADDRESS MOV #LPLIST,R5 ;* .ENDC ;* OF LINE PRINTER .IFG NLP-1 ;* MOV LPIOLS(R3),R5 ;* I/O LIST .ENDC ;* MOV @#PSR,-(SP) ;SAVE æÛ~Œ’c~“ê~|“òœòœòœî�à�â—*6z90í~ô“0|9ZvtRÿÿÿÿrY²dÿÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.ŸV MO C ND.E C ND.E 0 A0PN,LR0 B SO 5 14$1 Z FN.I C ND.E 00NALP T BG R0 C DE 5 14$1 FZ.I + 3)(R T TS LRPC,LPC R JS T SEPR,LPC R JS 1 ,RR4 D AD )+R5,(R2 V MO )+R5,(R1 V MO 5 ,R3)(RCTVELP V MO : 00NALP ; R4.,#8 V MO 2 ,R40#3 V MO R10,NTPI#L V MO 0 ,RLP#N V MO R3 R CL 1 P-!þè ** ;* R4 IS DESTROYED, R0 IS UPDATED, AND ALL OTHER REGISTERS ** ;* ARE SAVED. ** ;* ** ;********************************************************************** ; ; LPSTOR: INC 2(SP) ;INCREMENT TAB COUNTER CLR 10.(SP) ;SET 'DATA STORED' FLAG CLR -(SP) éCURRENT CPU LEVEL .IFZ $1145 MOV #340,@#PSR ;11/20 CODE TO INHIBIT INTERRUPTS .ENDC .IFNZ $1145 SPL 7 ;11/45 CODE FOR THE SAME THING .ENDC TST DATA(R5) ;SEE IF THE LIST IS AVAILABLE BNE LPSX00 ;BRANCH IF BUSY MOV R4,DATA(R5) ;IT'S AVAILABLE, SO GRAB IT MOV (SP)+,@#PSR ;ENABLE INTERRUPTS BACK TO WHERE THEY WERE MOV R5,-(SP) ê÷®k¢ÿ÷¸k¦k÷–ÿ÷•ÿÿx 7Šr wÆ÷É~l”�k„ÿw È7tÆä“ÄãžÃóžw ¦ 7^w ìw >Ä�\ÿŒŒŒ7‘Zk7Š0 ÷•ÿÿ, ÷àZk÷"›RkwæÆ.ÿ& ÷ ÿædkæ^k÷•@˜jà D÷‹ü Að~ä” „ &DCƒcà ÷Ú w 2w ΄·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦&w ¶„‚À•\w ¶wXw ºw ö�Ä øfw |÷•t €w ã~\•„7Š€ wtwhw ŒÄŸ  Ä%-Ÿû‚ÀEøÿÄ Äeä“‚ whÄåŸ÷À6 Áßž÷ æÀ=w F·Š6 À�/ w :À�( w 2À�! w *À w "w *  U~Ô•7� w 7�þw 7Šø7�óÀÒžÁßž÷ JÄÔNL FG.I ; ; C ND.E /P LHE TARLE CND;A LRPC,LPC R JS /P LHE TETES;R T SEPR,LPC R JS Y TRENN OTSUPRRTEINT BIHIINO TET;S 2 1+C.PV#L,@40#3 V MO NETIOU RPTRUERNT IOFR DD ARETO;S .1VCLP@#0,NTPI#L V MO R3 R CL 1 P-NL FZ.I : ITINLP ; ; * ********************************************************************;* * * ;* * *þì ;SET 'L/P BUFFER NOT FULL' FLAG ADD R2,R4 ;ADD TABLE BASE ADDRESS TO ASCII CODE MOVB (R4),(R0)+ ;CONVERT BYT' STORE IN LPBUF ; LPST00: CMP R0,LPBUFR+2(R3) ;IS BUFFER FILLED UP TO HERE? BLT LPST10 INC (SP) ; LPST10: TST (SP)+ ;POP 'BUFFER FILLED' FLAG TO SET RTS PC ;CONDITION CODE, THEN EXIT. .PAGE ;***************************************************í ;PUSH LIST ADDRESS JSR PC,TTYOUT ;CALL TTYOUT TO PRINT MESSAGE MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+,(SP) ;PUT STACK IN ORDER CLZ ;SET NO-ERROR CONDITION RTS PC ; ; LPSX00: MOV (SP)+,@#PSR ;ENABLE INTERRUPTS MOV (SP)+,R5 ;RESTORE R5 MOV (SP)+,(SP) ;PUT STACK IN ORDER SEZ ;SET ERROR CONDITION RTS PCîÂwð7ŠØ  wèw (‚b‚ ‚ ·®wúw ‚øw �A�Á � � B`ï÷ r÷%„Âq~L–€…Ö w|÷‹„û 7Štwr÷•ÿÿjwh·Šg ÄEøÿÄ 7”pwh÷‹P ÄEøÿÄ Ã t”Pà õôÿÿ”Iw Û×-ÉÂ%d~Ä– w ’ ÿÿÀ=w ÀòÁê7Ä í”À=w øÀÀe0w ìÀ,w äÂ%ÀÀ@w ~k÷‹¾ÄØüÂeÀ=÷–w ´@ ~<—w Xwºüw’·Š¬w¢À=w – w ü ÿÿÀdw *AÀe0w vÀ,w næH÷BÀFw ·6-À ÷.27ì”,€ â÷÷‹)~´—( ÀBüÄ:üÃ8ü E.IM TONTIZALIIAITINM TEYS SATD LEAL CBED ULHO SITINLP ;* * * ;* * * . S)R(TEINPRE IN LHE TRSEACLD ANS ETES R2. ;* * * S UEAL VORCTVET UPRRTEINS RETO S1. ;* * * ;* * * : NETIOU RISTH E.INUTRON IOATIZALTINI IERNTRI PNELI ;* * * þð******************* ;* ** ;* L P C H E K ** ;* ** ;* THIS SUBROUTINE PERFORMS CHECKS ON THE I/O LIST AND DATA ** ;* BUFFER THAT COULD BOMB LPRNTR. THESE TESTS ARE PERFORMED ** ;* WHEN THE REQUEST IS QUEUED AND WHEN ITS I/O IS STARTED. ** ;* THE REGISTERS MUST CONTAIN: ñ ;EXIT TO CALLER .PAGE ;********************************************************************** ;* ** ;* L P O N / L P O F F ** ;* ** ;* THESE SUBROUTINES ARE CALLED BY OPERATOR INPUT AND ARE ** ;* USED TO SWITCH THE L/P OUTPUT TO THE TELETYPE (LPOFF) ** ;* OR REINSTAòw Ö÷üðÀ?w 7 îw ò7Šø7Šó7Š     w À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 1 Ÿ� W Ö†ø÷‹Ì ~,˜ ÷‹©Äm¼7ŠºÁ yD˜|˜Š˜”˜è˜j•’šø˜–ô˜N™r–™š š`™Þš$–,–V–Š–—H—¬—Ê—P—”•Ú”¾”ƒ·ŠZ7ŠU´÷<D ÷2 7.7Û~¤˜(÷% Ä„ î‡ÀÀŸw Ô÷%‹À•=w ÀŸöw À• w wúþ÷ ÈwêþwÞþ·ŠÞ÷ Ðù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m¶¶÷²Ý~™²w ¬æ¦÷ Àžw ®·”Ö%À/w ¨¯À\ú÷ zÔ÷ \÷íppÜÀ.ŸÄ à … L‡Å Äe”  ! ”B†Ô ù! ”=‚L® };* * ********************************************************************;* E AG.P PC S RT T XI END AERETAMAR PORRR EFF OOP;P + P)(S T TS : 00QALP ; K AS TORRR EHE TUEUE;Q UEUE,QPC R JS ) SP-( R CL ) SP-( R CL ) SP-( R CL D IEIFECSPT NOS ISKTAR ROERN AIFH NCRA;B 00QALP Q BE P)(S T TS ERMBNUK AS TORRR EET;G) SP,(0)(RSKRTER VBMO ) SP-( R CL : RRQELPþô ** ;* ** ;* R0 = ADDRESS OF I/O LIST ** ;* R1 = ADDRESS OF DATA BUFFER ** ;* ** ;* ON RETURN, R4 CONTAINS: ** ;* ** ;* 0 = VALID REQUEST õTE OUTPUT TO THE L/P (LPON). THE LINKAGE IS : ** ;* ** ;* JSR PC,LPON (OR LPOFF) ** ;* ** ;* WHERE R3 CONTAINS THE LINE PRINTER NUMBER (1, 2, 3, ..., NLP)** ;* ** ;* R3 IS DESTROYED ON RETURN (IF NLP > 1). ** ;* ö~”™!6‚4”4 $”¤ À.Ÿ!ž‚4”ô6”4 $”Ô ô÷%À w à ÅíôÅ Å @w ´@€ ‡À%€ÿ À%÷ Òw š· ÊwÜýwÈý� ±~ š à ù÷²ÂÜùÄÖùD · Ôù¼‚€Á &C@AƒEPA&f¦æw „€w ’À/w –€w :ƒ‚�„w ÐÒ Û åƒ`ƒ ƒ Å ßÀEÿ�[~„š¯À € € €` Õ÷‹H·à µ÷•8… °‡Å wFù÷•àLew ¢7Š÷U4ù÷‹÷E(ùw T76æùæù÷‹ü‘À�òÀ‹� ‹à p$”÷•àj~üšew V×­ÔÖ÷‹ÊÓ÷•àèd·Š¿÷UÔø×·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�¬øÅ�¨ø¯ŒŒŒŒw‘ ; ; * ********************************************************************;* * * ;* * * T.IS L/O IHE TOFS ESDRADE THN AINTCOT US MR0, RYNT EON ;* * *. ONTICUXE EOR FSKTAR ROERE THS UEUE QNETIOUBRSUE TLIT LISTH ;* * * R R E Q P L ;* * * ;* * ******************************************************þø ** ;* 2 = ILLEGAL LIST OR DATA ADDRESS ** ;* 4 = ILLEGAL RETURN TYPE ** ;* 5 = ILLEGAL I/O COMPLETE ADDRESS ** ;* ** ;********************************************************************** ; ; LPCHEK: CMP R0,#ROSTOP ;TEST LIST ADDRESS BLOS LPKE02 ù ** ;********************************************************************** ; ; LPOFF: .IFNZ LPBACK .IFG NLP-1 TST R3 ;L/P NO. CAN'T BE <= 0 BLE LPDF10 CMP R3,#NLP ;OR = BGT LPDF10 DEC R3 ASL R3 INC LPTTY(R3) .ENDC ; ; .IFZ NLP-1 INC LPTTY .ENDC ; ; ú¢dÅ’ø÷‹t�å w†øÄt!”«~t›Ä Ä úw ¼w JÄôžÃõžw ž@÷eZø%Ä•t”7‘2ô $”ªô$”w „ÀBw .À�Àe`€ w À;w ÷ðÄ�ú”w úwîûJ~ì›·â·ü÷Æð“f&æ¦fæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æ°€Ä4”6”üü”Ä Ä ÷…÷�0c™÷�.c”7Š$c7Š$c÷‹ cý€…w r÷‹cý€÷5©~dœc÷‹cý€÷�gúb÷�bøb…÷‹V  <6””„ „ !ø…ÃÄþÿ÷%&Ãå„ À&Äe N @ Ä üÀe0w &à óÀ• Ö Á”Àÿÿ”~Üœ …÷‹‚bý€7�~b…÷‹rbý€À�nbÀE€ÿÀ¥÷‹Ð  w Ðÿí**************;* E AG.P C ND.E PC S RT Y TTLP R CL 1 P-NL FZ.I : ONLP ; C ND.E PC S RT : 10DFLP ; ; C ND.E Y TTLP C IN 1 P-NL FZ.I ; ; C ND.E ) R3Y(TTLP C IN R3 L AS R3 C DE 10DFLP T BG = R ;O P NL,#R3 P CM 10DFLP E BL 0<=E B'TAN CO. N/P;L R3 T TS 1 P-NL FG.I CK þü;CAN'T BE IN ROS CMP R1,#ROSTOP ;TEST DATA ADDRESS BLOS LPKE02 ;CAN'T BE IN ROS EITHER CMP R0,#HICORE ;NOR CAN EITHER BE IN NON-EXISTENT BHIS LPKE02 ;MEMORY CMP R1,#HICORE BHIS LPKE02 BIT #1,R0 ;AND, FINALLY, THE ADDRESSES MUST BNE LPKE02 ;BE EVEN (WORD BOUNDARIES) BIT #1,R1 BNE LPKE02 MOV (R1),R4 ;AND, FINALLýLPDF10: RTS PC .ENDC ; LPON: .IFZ NLP-1 CLR LPTTY RTS PC .ENDC .PAGE ;********************************************************************** ;* ** ;* L P Q E R R ** ;* THIS LITTLE SUBROUTINE QUEUES THE ERROR TASK FOR EXECUTION. ** ;* ON ENTRY, R0 MUST CONTAIN THE ADDRESS OF THE I/Oþ÷‹¾À¥ ç…Ä ã‡•w ¶ÿú×­4b• À•^w ¤ÿÀ•Uw œÿÆ“~T�ä“w€ú… ÷ÿÿn÷ÿÿj  ‚7,”X‚ÁRì”Á-P‚Ð ðÀD…w@€ 78À ô÷%(!ùƒ… �„ ú ÷%‚??‘ü~Ì�‡ÃÿžÃŸÄþžw Nÿ…÷%öw ªþ…÷Ú77Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬À°w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓ~DžÄýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå Ãå    ¦  ‚eÂ`„ ä�‡ÅýÿÂÆž ‡€âƒ ûË× Ãe ÃeÃe Ãe Ñ�Ò L~¼ž… è€Ð ‡@(zYzYÿÿÿÿ@ BALP Z FN.I F:OFLP ; ; * ********************************************************************;* * * ;* * * . 1)> P NLF (IN URET ROND YEROSTDES IR3 ;* * * ;* * )*LP N.,.., 32,, (1R BEUM NERNTRI PNELIE THS INTAON CR3E ERWH ;* * * ;* * * þY (DID I ALREADY SAY THAT?), BLT LPKA00 ;GET NWORD AND MAKE SURE IT'S REASONABLE NEG R4 ;WITHIN AVAILABLE CORE. ; LPKA00: INC R4 ;CONVERT # CHARACTERS ASR R4 ;TO # WORDS ADD #HICORE,R4 CMP R1,R4 ;CHECK DATA BUFFER TO BE GREATER THAN BHI LPKE02 ;NWORD/2 WORDS FROM TOP OF CORE CMP R0,#HICORE-7-7 ;AND THAT LIST IS MORE THAN SEVEN  LIST. ** ;* ** ;********************************************************************** ; ; LPQERR: CLR -(SP) MOVB ERRTSK(R0),(SP) ;GET ERROR TASK NUMBER TST (SP) BEQ LPQA00 ;BRANCH IF AN ERROR TASK IS NOT SPECIFIED CLR -(SP) CLR -(SP) CLR -(SP) JSR PC,QUEUE ;QUEUE THE ERROR TASK ; LPQA00: ODT-11R V002ABErYzY. *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRBÿÿ!~4ŸÿÿÿÿÿÿªŸÆ¦)ÅÅeL Îxÿ ‡ ¡N N Í ÃŠüÍ ÷ <ÂåÂ%!÷ ,„cÍ À‹ëéÑ�øÃh‹ŠË‹þ€ÃœÀ`ÃEÿ ‡·žZ¬Ÿ$Í ÄÍ ÃÄPÇ÷ êÿÍ À‹â„ †¿Ä LÀŸ÷ê÷õwZÿÁÂê‰ É‹þ€rœŸ· îÿõpÿÔ’Q F)OFLPR (ON PO,LPC R JS ;* * * ;* * * : S IGEKAIN LHE T).ONLP (/P LHE TTOT PUUT OTETANSEI ROR ;* * * ) FFPO(LE YPETEL THE TTOT PUUT O/P LHE TCHITSWO TEDUS ;* * * RE AND AUTNP IORATEROPY BEDLLCAE ARS NETIOUBRSUE ESTH ;* * * ;* * * F F O P L / N O P L ;* * * þ BHI LPKE02 ;WORDS FROM TOP OF CORE ; ; NOW WE'LL CHECK FOR I/O COMPLETE ADDRESS ; CMPB #3,TYPE(R0) ;IS IT EXIT 3? BNE LPKB20 ;BRANCH IF NO MOV $EXIT(R0),R4 ;OTHERWISE, TEST THE ADDRESS CMP R4,#ROSTOP BLOS LPKE05 CMP R4,#HICORE-10. BHIS LPKE05 BIT #1,R4 BNE LPKE05 ; LPKB10: CLR R4 ;SET 'NO ERRORS' RTS  TST (SP)+ ;POP OFF ERROR PARAMETER AND EXIT RTS PC .PAGE ;********************************************************************** ;* ** ;* LINE PRINTER INITIALIZATION ROUTINE. THIS ROUTINE: ** ;* ** ;* 1. STORES INTERRUPT VECTOR VALUES ** ;* 2. RESETS AND CLEARS THE LINE PRIN ;* * ********************************************************************;* E AG.P PC S RT E BLLAAIAVT IS L/O IET;S 1)(RTADA R CL : NEDOTY ; R LEAL CTOT XI;E PC S RT ONTIDION CORRR EET;S Z SE R DEORN ICKTA SUT;P P)(S+,P)(S V MO 5 RRETOES;R R5+,P)(S V MO TSUPRRTEINE BLNA;E R PS@#+,P)(S V MO : 00SXLP ; ; þPC ;AND EXIT TO CALLER ; LPKB20: BLT LPKE04 ;TEST FOR VALID EXIT TYPE CMPB #1,TYPE(R0) BLE LPKB10 ; LPKE04: MOV #4,R4 ;ILLEGAL RETURN TYPE RTS PC ; LPKE02: MOV #2,R4 ;ILLEGAL LIST OR DATA ADDRESS RTS PC ; LPKE05: MOV #5,R4 ;ILLEGAL I/O COMPLETE ADDRESS RTS PC .PAGE ;******************************************* TER(S). ** ;* ** ;* LPINIT SHOULD BE CALLED AT SYSTEM INITIALIZATION TIME. ** ;* ** ;********************************************************************** ; ; LPINIT: .IFZ NLP-1 CLR R3 MOV #LPINT0,@#LPVC.1 ;STORE ADDR OF INTERRUPT ROUTINE MOV #340,@#LPVC.1+2 ;SET TPC S RT N IOITNDCOR ROERO- NET;S Z CL R DEORN ICKTA SUT;P P)(S+,P)(S V MO 5 RRETOES;R R5+,P)(S V MO E AGSSMET INPRO TUTYOTTL AL;C T OUTY,TPC R JS SSREDD ASTLIH US;P P)(S,-R5 V MO REWEY HE TREHE WTOK AC BTSUPRRTEINE BLNA;E R PS@#+,P)(S V MO T IABGRO SE,BLLAAIAVS T';I ) R5A(AT,DR4 V MO Y US BIFH NCRA;B 00SXLP E BN E BLLAAIAVS ISTLIE THF IEEýý *************************** ;* ** ;* L P R S E T ** ;* ** ;* THIS SUBROUTINE ISSUES A RESET COMMAND TO THE LINE PRINTER, ** ;* WHICH I SUPPOSE SHOULD CLEAR IT; IN THE EVENT IT NEEDS TO ** ;* BE CLEARED, THAT IS. R3 = L/P INDEX NUMBER. ** ;* O INHIBIT INTERRUPTS ON ENTRY JSR PC,LPRSET ;RESET THE L/P JSR PC,LPCLR ;AND CLEAR THE L/P .ENDC ; ; .IFG NLP-1 CLR R3 MOV #NLP,R0 MOV #LPINT0,R1 MOV #340,R2 MOV #8.,R4 ; LPNA00: MOV LPVECT(R3),R5 MOV R1,(R5)+ MOV R2,(R5)+ ADD R4,R1 JSR PC,LPRSET JSR PC,LPCLR TST (R3)+ ;S 5)(RTADA T TS C ND.E NGHI TMESAE THR FOE OD C451/;1 7 L SP 5 14$1 Z FN.I C ND.E S PTRUERNT IITIBNH ITOE OD C201/;1 SR#P,@40#3 V MO 5 14$1 FZ.I L VELEU CPT ENRRCUE AV;S ) SP-(R,PS@# V MO ;* C ND.E STLIO I/ ;* 5 ,R3)(RLSIOLP V MO ;* 1 P-NL FG.I R TEINPRE IN LOF ;* C ND.E ;* R5T,ISPL#L V ùý ** ;********************************************************************** ; ; LPRSET: .IFZ NLP-1 MOV #CLEAR,@#CMD.1 .ENDC .IFG NLP-1 MOV #CLEAR,@LPCMD(R3) ;CLEAR IT .ENDC RTS PC ;THAT'S ALL, FOLKS! .PAGE ;********************************************************************** ;* .IFZ $1145 DEC R0 BGT LPNA00 .ENDC .IFNZ $1145 SOB R0,LPNA00 .ENDC .ENDC MOV #LPFRST,R0 MOV #LPLAST,R1 MOV R1,R2 ; LPNA10: MOV R0,(R1)+ CLR (R0)+ ;IN THE PRIORITY QUEUES CMP R0,R2 BLO LPNA10 RTS PC .ENDC .END MO SSREDD AET G;* 1 P-NL FZ.I R5E AV;S P)(S,-R5 V MO C ND.E 4 ,R4)(R V MO P L/S HI TOR FERFFBUF OSSREDD AET;G 4 ,RR3 D AD 1 P-NL FG.I K ACSTM RO FSSREDD AERFFBUA AT DET;G R4),SP2( V MO : GEMSLP ; ; * ********************************************************************;* * * ;* * * õý ** ;* L P S T A T ** ;* ** ;* THIS SUBROUTINE READS THE STATUS OF THE INDICATED LINE ** ;* PRINTER, THEN SETS THE CONDITION CODES ACCORDINGLY: ** ;* ** ;* ZERO = EVERYTHING'S ALRIGHT ** ;* < ZERO = FATAL ERROR . EDOYTRES DIS4 RERSTGIRE ;* * * ;* * * LEABILVA A'TSNWAT IS LIFH NCRA;B E BN ;* * * E SGPM,LPC R JS ;* * * S ESDRADR FEUF BTADAH US;P ) SP-(A,AT#D V MO ;* * * X DEINP L/= 3 RET;S ;* * * ;* * * S: IGEKAñý ** ;* > ZERO = OPERATOR ACTION REQUIRED ** ;* ** ;* ON ENTRY, R3 MUST CONTAIN L/P INDEX. R4 IS DESTROYED ** ;* ** ;********************************************************************** ; ; LPSTAT: .IFZ NLP-1 MOV @#STAT.1,R4 .ENDC .IFG NLP-1 MOIN L. EDIRQURES IONTIACR TORAPE OOR ;* * *D TEECET DENBES HAR ROERN AENWHD LEAL CISE SGPM L. PETYLETE ;* * *M TEYS SHE TTOE AGSSMED TECADIINE THS UTTPOUE INUTROUB SISTH ;* * * ;* * * E G S M P L ;* * * ;* * ********************************************************************;* E AG.P PC íýV @LPSTS(R3),R4 ;GET STATUS .ENDC CLR -(SP) ;SET 'OK' CONDITION BIT #PARITY,R4 ;TEST FOR PARITY ERROR BNE LPSA20 ;BRANCH IF PRESENT BIT #PLOW,R4 ; BNE LPSA10 ;BRANCH IF PAPER LOW BIT #ONLINE,R4 BEQ LPSA10 ;BRANCH IF ONLINE ; LPSA00: TST (SP)+ ;SET CONDITION CODE = OK RTS PC ;THEN EXIT ; LPSA10 S RT C ND.E O WHW-NO-KOU YRETOES;R R5+,P)(S V MO : 20LALP ; ) 1 -R2*( 2IND ADN HE;T 2 ,RR5 D AD C ND.E ? CKUI QATTHT N'AS;W 5 ,RR3 L MU ITS OE D451/ 1HE TOW HISS HI TND;A 5 14$1 Z FN.I C ND.E : 10LALP ; 00LALP BR 2 ,RR3 D AD 3 *RTYPRNL ; 20LALP T BL S OE D201/ 1HE TAY WHE TISS HI;T R5 C DE : 00LALP ; éý : INC (SP)+ ;OPERATOR ACTION REQUIRED RTS PC ;EXIT ; LPSA20: DEC (SP)+ ;SET PARITY ERROR INDICATOR RTS PC ;AND EXIT .PAGE ;********************************************************************** ;* ** ;* L P S I O ** ;* 5 14$1 FZ.I ; TYRIIOPR= 2 R ; X DEINP L/= 3 R -REHE;W ; ) 1 -R2*( 2 +R3Y*RTLP N =EXND ITYRIIOPR ; ; : ISN IOATQU EICAS;B S ELEV LTYRIIOPRR BEUM NUMIMAX MET;S R5Y,RTLP#N V MO R2 L AS R2 C DE T ISE UWEE USCA 'R5E åý$ ** ;* THIS SUBROUTINE PERFORMS THE ACTUAL OUTPUT FUNCTION TO ** ;* START THE LINE PRINTER. AFTERWARDS, THE TIMER MODULE ** ;* IS ADJUSTED FOR A ONE SECOND TIMEOUT. IF THE MODULE ** ;* ISN'T QUEUED, IT WILL BE WHEN LPSIO GETS DONE WITH IT. ** ;* REQUIREMENTS ON ENTRY: ** ;* ** ;* R4 = L/P WORD COUNT %Gÿ&€ö°o <†—-‡€÷à–o7�Ðÿ·�Ëÿ÷Âÿ6 ðw „߀Àeàlo üÿ× r~˜� 0‚÷•�ÿ÷mHüÁ5·Š}ÿ· :ü³ -�‡Âœ-�æÀ.� à ”Daû„`Ã>�÷à o‹÷ø�ÿÓµ÷eÿ“�K�6 w ßÖ ¡±æðn÷ß~‘àênÆå VÖ €$Á@�Î5Á;�& H” H” H”¦)€�À–‹7DúÁ% Á ýÀÞ‹Á1à‹à Á Á úÀŒÁ1˜ŒÁ ü÷•ÿÿžú÷•ÿÿ7~ˆ‘¹þ7Š•ú7 bþ÷ø�^þ÷�dþ7 Pþ÷’þ7 �þ÷Žþ‡æàæÀ‘wŽøæàæÌ‘w\ú�AV;S P)(S,-R5 V MO -2TYPRNLP+NL Z FN.I C ND.E R2 R CL -2TYPRNLP+NL FZ.I : VLLELP ; ; * ********************************************************************;* * * ;* * * EXND ITYRIIOPR= 2 RTHWIN URET;R ;* * * L EVPL,LPC R JS ;* * * X DEINP L/= 3 ;R áý( ** ;* R3 = L/P INDEX ** ;* R0 = LIST ADDRESS ** ;* IF THE OPERATOR HAS SO NOTIFIED, THE L/P OUTPUT WILL BE ** ;* DIRECTED TO THE TELETYPE VIA TTYOUT. IN THIS CASE, THE ** ;* TIMER WILL NOT BE STARTED. ** ;* ** ;*******************************)~’ï~x’w~ð’ÿ~h“ ;* * * ) TYPRNL.,..2,1, (TYRIIOPR= 2 ;R ;* * * : ISE AGNKLI L.VELE ;* * Y*ITORRI PND AERNTRI PNELID IEIFECSPE THR FOT ASPL LND ASTFRLP ;* * * S ESCC ATOD REUIEQ REXND IHE TESATULLCCAE INUTROUB SISTH ;* * * ;* * * L V E L P L ;* * ****************************************************Ýý,*************************************** ; ; LPSIO: .IFNZ LPBACK TST LPTTY(R3) ;SEE IF TTY IS TO BE USED BNE LPOB00 ;BRANCH IF YES .ENDC MOV R4,LPWORD(R3) NEG R4 ;L/P NEEDS NEGATIVE WORD COUNT ; LPO000: .IFZ NLP-1 ;THIS CODE IS FOR ONLY L/P IN SYSTEM MOV R4,@#CNT.1 ;STORE LINE PRINTER WORD COUNT TST LPMODE ;SEE WHICH MODE WE'RE IN -òœòœòœþœ:~à“À,Ö\À,°v´]ldleÔfÿÿÿÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ.Ÿ÷®k¢ÿ÷¸k¦kT~X”÷–ÿ÷•ÿÿx 7Šr wÆ÷�k„ÿw È7tÆä“ÄãžÃóžw ¦ 7^w ìw >Ä�\ÿŒŒŒ7‘Zk7Š0 ÷•ÿÿ, ÷àZk÷"›RkwæÆ.ÿ& ÷ ÿædkæ@~Д^k÷•@˜jà D÷‹ü A „ &DCƒcà ÷Ú w 2w ΄·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦&w ¶„‚À•\w ¶wXw ºw ö�Ä ~H•øfw |÷•t €w „7Š€ wtwhw ŒÄŸ  Ä%-Ÿû‚ÀEøÿÄ Äeä“****************;* E AG.P PC S RT C ND.E /P LNE OTNHA TREMOR FOT BU, TOIT;D ) R3R(DDPA@L R CL 1 P-NL FG.I C ND.E /P LNE OLYONR FOS ESDRADY OREM MARLE;C .1DTLP@# R CL 1 P-NL FZ.I R:CLLP ; ; * ********************************************************************;* * * ;* * * LRPC,LPC R JS Ùý0 BEQ LPOA00 ;BRANCH IF CARRIAGE CONTROL MOV #AUTOLF,@#LFRG.1 ;OTHERWISE, ISSUE AUTO LINE FEED BR LPOA10 ; LPOA00: CLR @#LFRG.1 ;SET TO CARRIAGE CONTROL MODE LPOA10: MOV #LPBUF,@#LPDT.1 ;STORE MEMORY BUFFER ADDRESS MOV #SB!IE!ID,@#CMD.1 ;START'ER UP .ENDC ; ; .IFG NLP-1 ;AND NOW FOR THE CODE FOR > 1 L/P IN SYSTEM MOV R4,@LPWDCT(R3) ;STORE1‚ whÄåŸ÷À6 Áßž÷ æÀ=w F·Š6 À�/ w :À�( w 2À�! ¨~À•w *À w "w *  7� w 7�þw 7Šø7�óÀÒžÁßž÷ JÄÔÂwð7ŠØ  wèw (‚b‚ ‚ ·®wúw ‚øw �A�Á � Ò~8–� B`ï÷ r÷%„€…Ö w|÷‹„û 7Štwr÷•ÿÿjwh·Šg ÄEøÿÄ 7”pwh÷‹P ÄEøÿÄ Ã t”Pà õôÿÿ”î~°–Iw Û×-ÉÂ% w ’ ÿÿÀ=w ÀòÁê7Ä í”À=w øÀÀe0w ìÀ,w äÂ%ÀÀ@w ~k÷‹¾ÄØüÂ2~(—eÀ=÷–w ´@w Xwºüw’·Š¬w;* * * EVND I/P L =R3 ;* * * ;* * * R)BEUM N/P L =(KK T.PD LR,TEISEG RSSREDD ARYMOMEE TH ;* * * G INARLE CBYR ROERR TEINPRE IN L ARSEACLE INUTROUB SISTH ;* * * R L C P L ;* * ********************************************************************;* E AG.P C ND.E NEDOE BTOS ISEELT HA WEE SGOÕý4 WORD COUNT TST LPMODE(R3) ;SEE WHICH MODE WE'RE IN BEQ LPOA00 ;BRANCH IF CARRIAGE CONTROL MOV #AUTOLF,@LPFEED(R3) ;OTHERWISE, ISSUE AUTO LINE FEED BR LPOA10 ; LPOA00: CLR @LPFEED(R3) ;SET TO CARRIAGE CONTROL MODE ; LPOA10: MOV LPBUFR(R3),@LPADDR(R3) ;STORE BUFFER MEMORY ADDRESS MOV #SB!ID!IE,@LPCMD(R3) ;REV UP THE OLE ENGINE, BOYS .ENDC .IFZ 5¢À=w – w ü ÿÿÀdw *AÀe0w vÀ,w næH÷BÀFw ·6-À ÷.Ô~ —27ì”,€ â÷÷‹( ÀBüÄ:üÃ8üw Ö÷üðÀ?w 7 îw ò7Šø7Šó7Š     w À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð ~˜1 Ÿ� W Ö†ø÷‹Ì ÷‹©Äm¼7ŠºÁ yD˜|˜Š˜”˜è˜j•’šø˜–ô˜N™r–™š š`™Þš$–,–V–Š–—H—¬—Ê—P—”•Ú”¾”ƒ·ŠZ7ŠU´÷<á~�˜D ÷2 7.7(÷% Ä„ î‡ÀÀŸw Ô÷%‹À•=w ÀŸöw À• w wúþ÷ ÈwêþwÞþ·ŠÞ÷ Ðù÷ ²÷ Ð�~™÷ÄÀ7ŠÄ÷mN HE;T 10IALP P JM X DEINY ITORRI P =R2 ; 2 ,R3)(RORRILP V MO T OUTY TTON URET R =R5 ; R5+,P)(S V MO TADAR DD A =R1 ; 1 ,R3)(RTADALP V MO STLIR DD A =R0 ; 0 ,RR1 V MO S: ARSTEISEG RUPT SE, OW;N ; C ND.E 0 B2PO,LR5 B SO 5 14$1 Z FN.I C ND.E 20OBLP T BG R5 C DE 5 14$1 FZ.I R FEUF B/P LHE TOMFRÑý8 NLP-1 ;NOW, GET ADDRESS OF TIMER MODULE MOV #LPMOD,R4 .ENDC .IFNZ NLP-1 ;THIS PART OF THE CODE PERFORMS MOV LPMDAD(R3),R4 .ENDC ; MOV #LPTIME,JSRSUB(R4) MOV R4,-(SP) MOV #$1SEC,-(SP) ;DELAY ONE SECOND JSR PC,IOQTME ;GO START TIMER TST (SP)+ RTS PC ;UND GO HOME, MEIN HERR. ; ; ; THIS SECTION DIVE9¶¶÷²²w ¬æ¦÷ Àžw ®·”Ö%À/w ¨¯À\ú÷ zÔ÷ \÷íppÜÀ.ŸÄ à … L‡Å Äe”  ! ”ð~€™B†Ô ù! ”=‚L® !6‚4”4 $”¤ À.Ÿ!ž‚4”ô6”4 $”Ô ô÷%À w à ÅíôÅ Å @w ´@€ ‡À%€ÿ À%÷ -~ø™Òw š· ÊwÜýwÈý�  à ù÷²ÂÜùÄÖùD · Ôù¼‚€Á &C@AƒEPA&f¦æw „€w ’À/w –€w :ƒ‚�„w ÐÒ Û +~pšåƒ`ƒ ƒ Å ßÀEÿ�¯À € € €` Õ÷‹H·à µ÷•8… °‡Å wFù÷•àLew ¢7Š÷U4ù÷‹÷E(ùw T76æùæù÷‹ü‘À�òT IS LHE TET;G ) R1-(),R0-( V MO : 20OBLP ; R5 R AS 1 ,RR5 D AD DSARKWAC BRETOES RAN CWES O' S14S LU;P 0 ,RR5 D AD S ESDRAD+ UFPB;L 0 ,R3)(RFRBULP V MO STLIL NAGIRI ORETOES;R 5 ,R4.#1 V MO : 00DALP ; ; ; E ONPD+L8.P*NL.= ; 6EXND I/P LOR FRYNT;E 3 ,R#6 V MO ; 00DALP P JM 4EXND I/P LOR FRYNT;E 3 ,R#4 V MO ; 00DALP P JM 2EXND I/P LORÍý<RTS THE LINE PRINTER OUTPUT TO THE SYSTEM ; TELETYPE. UNLESS, OF COURSE, THIS OPTION WASN'T GENERATED ; INTO THE SYSTEM. IN WHICH CASE, WHAT ARE YOU EVEN DOING ; HERE? ; ; .IFNZ LPBACK ; ; LPOB00: MOV R5,-(SP) ;SAVE R5 MOV LPBUFR(R3),R4 ;FIRST, SAVE LIST IN LPBUF MOV #7,R5 ; LPOB10: MOV (R0)+,(R4)+ .IFZ $1145 DEC R5 BGT LPOB10 .ENDC .IFNZ $114=Ú~èšÀ‹� ‹à p$”÷•àew V×­ÔÖ÷‹ÊÓ÷•àèd·Š¿÷UÔø×·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�¬øÅ�¨ø¯ŒŒŒŒw‘¢dÅ’ø¼~`›÷‹t�å w†øÄt!”Ä Ä úw ¼w JÄôžÃõžw ž@÷eZø%Ä•t”7‘2ô $”ªô$”w „ÀBw .À�Àe`€ w À;w ÷¡~Ø›ðÄ�ú”w úwîû·â·ü÷Æð“f&æ¦fæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æ°€Ä4”6”üü”Ä Ä ÷…÷�0c™÷�.c”7Š$c7Š$cj~Pœ÷‹ cý€…w r÷‹cý€÷5c÷‹cý€÷�gúb÷�bøb…÷‹V  <6””„ „ !ø…ÃÄþÿ÷%&ÇÖ\Ypÿõîÿ· Ÿrœþ€É‹‰ êÂÁZÿwõ÷ê÷ÀŸLÄ ¿†„ âÀ‹Í êÿ÷ ÇÄPÃÍ ÄÍ $·‡Â ÿÃEÀ`Üþ€Ë‹˜Ÿn‹ŠhÃøÑ�éëÀ‹Í „c,÷ !Â%Âå<÷ Í üÃŠÍ NN ¡ ‡ xÿÎ LÅeŦ)ÆŸªÿÿÿÿÿÿÿÿBRCF Ÿ~ïPMSXAI!-FRC>SP@EBOW^,_