€€B ; PATCHR.S06 29-MAY-73 ; UPDATE 15-MAY-73 PATCHR.S04 ; UPDATE 2/15/73 PATCHR.S03 ; UPDATE 1/26/73 PATCHR.S02 .TITLE PATCHR (DYNAMIC PATCHES FOR CITGO) ; ;***********************************************************************PCHR ; *PCHR ; P A T C H R *PCHR ; ; UPDATE 14-MAY-73 CORLOD.S07 ; UPDATE 14 MAY 73 CORLOD.S06 ; UPDATE 1 MAY 73 CORLOD.S05 (FIRST FOR /45) ; UPDATE 6/22/72 CORLOD.S04 ; UPDATE 05-MAY-72 CORLOD.S03 ; UPDATE 5/5/72 CORLOD.S02 ; UPDATE 5/3/72 CORLOD.S01 .TITLE CORLOD ;*********************************************************************** ;* * ;* USED B; MAGTAP.316 9-MAY-73 ; MAGTAP.315 4-MAY-73 ; MAGTAP.314 2-MAY-73 ; MAGTAP.313 1-MAY-73 ; MAGTAP.312 27-APR-73 ; MAGTAP.311 26-APR-73 ; MAGTAP.310 24-APR-73 ; MAGTAP.309 21-APR-73 .TITLE MAGTAP ;********************************************************************** ;* M A G T A P ** ;* ** ;* PROGRAM IDENTIFICATION. MAGTAP - MAGNETўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџП@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ІЖЖw b* ‰* Іw B! ‰! އї " ї іэ  ‡A`wкэїиэЮe‡‰…‡РТэ  7 Юэ”—  јТЅ —  — 0ъ— 7чС C С C С C `Сх0З ˜эф7~эЮe‡цCФS”Ф §Схƒ…Р^э7 nэ7 XэТСсб• Т ќСс’ТЅ "ТЅ ТЅ — A— Z — 0— 9ї &эз- э ‘З э€ ої эћї э ‰˜Юe‡7 єь7мь‡Тv!ƒђСсФSЄјФ ќЗРь7КьЮe‡7 мь7Šbэ 7Š\эї•€TэЗФьŽ7 € AТ`ї‹8э€СeУEјџУe0сРE Т ѓї‹эТ„ь‚ ‚ ‚ ƒ`ЩїЕќьРlьР РEјџ`ЩР^ь€ € Тїекьгї ЎŽ…7 œ Рp!ТBУ т‡„ ќdФe0‘У ѕAТ`!˜Т §ї nŽ…'шd іE№&@&Ž Ž Ž Ž Ž Ž ЮEќАЮŽ Ž ˆU€…&f fРЮ A Р ќС С С С ]€…цІf&„€‚ƒ„РСlŠС §РЎ"7lы7jыї>$fыї>$bыСшŠС §‡Р:С8 @а  љїјFщїрBщ‡&€Р Рe* L†€ї зшО Ъ v v J J € Т J v n Ъ ф LцпEzџўц …ЦЎ"fffе f…Жv…ЖNї „єї‹/ыї‹ыї NЦх7 „ъї•Yъ‰цХЭ Э Э Э ї‹юъ zџїдBшїТ:шЦЎ"ї 4є7 Hъї•ъ‰ї‹Хъ5$–%ї‹въўРд ј а  С­Йъјўї ц&ц0w D§@&w 0§G‰0‡ї‹vъw@її‹fъ zџРЪчШ    ї‹Pъwœїп5zџї љпzџїъъї jw|її‹-ъjї‹(ъ €ї‹-ъї ъaЗŠlщїъъї‹bщYї‹YщVцжщЮEрж%ї‹EщїŠќщIї:щ7щї;щющwŠ/щї-АщВщ,ƒїeІщї-Ђщ˜щ‡ї5Žщз-”щ‡ї X*ї‹Љщї‹­щЗŠђшїхpщїedщ†їe^щї јї жїїeNщї-JщLщ‡пїe:щ†їe4щї ‡7 (щ7 &щ7 $щї$щ.щїэщ(щї $щї щї щї щї щ†їџџ щ‡ї‹-щ‰ !‰7Šщї‹ щ‰цЬшї ^њw ИќŽXZїхˆш†їх‚шц|шцzшї њ‡РЄш€ € € € € &w ќ Р аЅ0№• џџљ‰ѓ‰ ‰‡fІBСe<бdшбbшIw"nшƒЩhшї‹ЭчЗЌЧчrŠїŠЛч‚ЮeїŠЛч€їiшГчї ўfІIї‹8ш1 Щ‰ ‰ ‰ ‰ ЩEёџЩeрєIТЩ q Т ћBТEрб ‘`I ЩEќџЩ Щ Щ Щ ‚ЮefqqБ Б Б Б Юeї‹Рч‡У ч„ рєп€тєїч7’ч? \чї  ћ7ŠњцпФєпЦєї‹™ч5€їjчdч7Š‹чї-^чZчwvїRчRчї-NчHч ‚пBчфєп@чцєї•bч(п чфєп5фєпх€фєпEфєпфєцєпmчфєпm чцє7Š0чї•vцпќцфєпіццєпэъццєпmшццє7Š чїфєоцї•§цС@Т`п цє RТ5ќпЌBЌbСZТzRС5џќС@Т`п цєћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџ LаHїE@жќ‰Lџџ DEVICE FAILED TO INTERRUPT DROPPING MODULE р‹РЅ@‰аHРЅ€wЄќ‰аHа‹ѓ•џ M‡р‹РЅ€wŠќ‰аHа‹ѓ•џ M‡7ьLvќТ З’xќ‚ їžnќЗ ˜ї މаHї †“З ~Щџї%twєўї nw„ќїЈb‰аH€…„ƒ‚…Сп5@єwрРУ7 ХDBuз—ўџФ ц—ўџЮЕїеэџŸ•ўџŒ~їзўџсџD!ї­иџзџ‰€  оРџџУяџХDBuз—ўџ „ ‚~ї—ўџѓџїХэџD!ї­фџуџ‰Р  ццц€ХC  wУ B ~!C!‰Ž Ж#ю–%црџцџџ€Т„  В€v…w &§w Мќw §w Аќw §w Єќw §w ˜ќw іќw Œќw ъќ w €ќ w оќ w tќ w вќw hќЈPCCB0hџ8€€ЊNЊNЊNї–џ~ї n7 l7 j7 hСxџбPOЩrџї \"Тdџ’$б бєNЩ\џw Юђ:ЪU@‰њN6NЪE@Ъ 9ї5&ЗŠї цР џw *їw ЗŠњї­іј6ї5ђчї т№‰6NШUA‰VO6NШE@Ш 7Шї Рї‹Оь… ‰жO6Nї5Ў(їEІw*џ ‰кO6Nї ˜ї•wџї‚Мўї€Иў‰6NwџЪ‹€…З jж wЌџ‰6N‰6Nђ‰6NоOџџPџџ% PUNCH ERROR, DROPPED THE PUNCH %% READ ERROR, DROPPED THE READER %CRAD0pў˜Р€ЄPЄPЄPРŽџ7Œа 7ˆа 7„Р|џа*QШvџ7 fџ5jї rџї B‰0P7 N7 N7 LїџB‰0P‰0Pџ5: ї .ѕї ‰0P‰0PЗ ї%PwіџA‰џ‹  €їoўїoњЗ №ї жџE@ьRQ0Pї џї5@ќў ї5єўЛї5ьўЗї%PИ ї%(Аа‰0PwTџї5Ъў‰0PwDџї5Кў‰0Pw4џї%P~‰0Pw$џї-vjї*R’ўї^ўї4Rˆўї\†ў‰0Pї-THї,Rnўї<lўї6Rdўї:bў‰0Pї5Rўї%P wЦў‰0Pї6ўї2ў‡#o{†+‰Р ц„N+ Т7 УФЮtзўџuї—ўџїџФ ї­юџэџ‰€ Ž € щ  7 Фuзўџ@uї—ўџїџ!ї­юџэџ‰Р Ю  щˆпЅєwюТŸ фEрУEяџї˜їŸ(ЏŸЃ‰Ь5РУe З ъџТ-цџёТ˜УUП—Ѓ‰Ь5РУх ї ъџТ-цџёˆРТ,Т Фњџ пўџЂп•рЂпР, прпЊ, пg пўџŒPпe Т ŒP ‰ $‰Уe Œ@ЮŠ,Юg"DfˆЊ>Ь~юў пЂ  ЂŠўџпп ˆп5Рўџ_цЮedŸЈ& ƒцп‹јп џЌџп ŒџпЅєп єЌєп ŒєЦeР цЮeŸћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџп ћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§яџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџ ПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџ ўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџП@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћV ** ;* PURPOSE. ALL COMMUNICATIONS WITH THE MAGNETIC TAPES WILL ** ;* BE THROUGH THIS SUBROUTINE. THIS ROUTINE PERFORMS THE ** ;* FOLLOWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) ** ;* 2 CLOSE (NO OPERATION) ** ;* 3 READ ** ;* 4 WWDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTUIC = 400 ; UNIT NUMBER INCREMENT .ENDC ; ; FIRST AND LAST WORDS FOR џяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџп џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ^E. THE ASSEMBLER LINKAGE TO MAGTAP IS: ** ;* ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP ** ;* ** ;* THE FORTRAN EQUIVALENT CALL IS: ** ;* ** ;* _EAD .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW ;REWIND MULTIPLE UNITS .ENDC ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MRREA џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћf* ;* +6 PRIORITY LEVEL DEVICE NUMBER (0 OR 1) ** ;* +10 RETURN ERROR PARAMETER (0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BUFFER ADDRESS ** ;* +16 SYSTEM ** ;* +20 SYSTEM ** ;* +22 FUNCTION (CODES LISTED ABg .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .WORD 0,0,0 ; RSVRD 1 TO 3 .BYTE SECR ; TIMER RESOLUTION .BYTE 20 ; TIMER OPTIONS (J) .WORD 0 ; RESERVED џўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћn ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST ALREADY IN A QUEUE ** ;* 2 INVALID DEVICE TYPE ** ;* 3 ILLEGAL EXIT TYPE ** ;* 5 ILLEGAL DEVICE NUMBER o.ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN ; IS DEVICE TYPE = 4 INC R4 ; SET R4 = 2 CMPB DEVICE(R0),#4 BNE MTERR ;RETURN IF NOT 4 яџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџ џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћvN) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNCTIONS ** ;* ** ;* PROGRAMMER: 67 ** ;* DATE 10.04.72 ** ;* ** ;* w MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R1 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R1,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR ; BR IF NOT INC R4 ; SET SKIP OR SPACE COUNT ERROR CODE CMP R1,#7 џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћz GULF ELECTRONIC SYSTEMS ** ;* ** ;********************************************************************** ; ; D E F .GLOBL MAGTAP,MTINT ; R E F .GLOBL PUSHR,POPR .GLOBL ACTIVE,$CTASK .GLOBL IOSTAT,DSPTCH .GLOBL RESTOR,RELTSK .GLOBL UNSPND,QSAVEI ; ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = { BLT MT02 TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: .IFNZ MULRE CMP R1,#11 BGT MTERR ; BR IF MORE THAN 9 .ENDC MT02: CLR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;Qџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ~ %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ;STACK POINTER PC = %7 ;PROGRAM COUNTER PS = 177776 ;PROCESSOR STATUS WORD ; ; M A G T A P E Q U A T E P A R A M E T E R S ; THREAD = 0. ;LIST THREAD DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT = 4. ;I/O COMPLETE ADDRESS DEVNUM = 6. UEUE IT MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ; QUEUE THE CURRENT REQUEST MOV (SP)+,MTLAST MOV 16(R0),@#$KPAR6 .ENDC џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ‚ ;DEVICE NUMBER ERROR = 8. ;ERROR PARAMETER SYSTEM = 10. ;RESERVED (SAVE TASK NUMBER) DATA = 12. ;ADDRESS OF DATA BUFFER FUNCT = 18. ;FUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTER RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 ƒ CMP 16+4*$KT11C(SP),#TSK.PC ; IS CALLER A TASK BNE MT04 ; BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; SET REPEAT COUNT AND CLEAR BACK SPACE INC NMTREQ ; BUMP NUMBER OF REQUESTS BNE MTEX2 ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ†RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTREP = 18. ;MAG TAPE REPEAT COUNT (4N+2) QTIME = 7 DQTIME = 10 ; MTWORD = 167540 ;WORD COUNT REGISTER MTSTAT = 167542 ;STATUS REGISTER MTCOMM = 167544 ;COMMAND REGISTER MTMEMO = 167546 ;MEMORY ADDRESS REGISTER ; ; COMMAND CODES FOR MAGNETIC TAPE CONTROLLER READ = ‡RUPT ROUTINE MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LISџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћŠ1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ;ENABLE INTERRUPT OFFL = 2000 ;OFF LINE ‹T MTEXIT: MOV @#MTSTAT,STATUS(R0) RST.56 JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS RTS PC ;RETURN TO CALLE- MTEX1: MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT Œ PROGRAM IDENTIFICATION. MAGTAP - MAGNETIC TAPE INTERFACE ** ;* SUBROUTINE USING THE KT-11C AND THE GULF CONTROLLER ** ;* ** ;* PURPOSE. ALL COMMUNICATIONS WITH THE MAGNETIC TAPES WILL ** ;* BE THROUGH THIS SUBROUTINE. THIS ROUTINE PERFORMS THE ** ;* FOLLOWING MAGNETIC TAPE FUNCTIONS: ** ;* 1 OPEN (RETURN STATUS) *JUMP TABLE FOR HANDLERS PCHR JMPTAB: .WORD DEFINE ; PCHR .WORD DELETE ; PCHR .WORD EXIT ; PCHR .WORD CANCEL ; PCHR .WORD LIST ; PCHR .WORD PATCH ; ŽCLEA = 40000 ;CLEAR CONTROLLER ; ; FIRST AND LAST WORDS FOR LIST THREAD MTFRST: .WORD 0 MTLAST: .WORD MTFRST NMTREQ: .WORD -1 ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT: .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N REC ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH .PAGE ; MAGNETIC TAPE Iџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ’ORDS .WORD MSKFI ;SKIP +-N FILES ; MAGNETIC TAPE RETURN AFTER INTERRUPT JUMP TABLE MTRET: .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MRREA ;READ .WORD MRWRI ;WRITE .WORD MRWEO ;WRITE FILE MARK .WORD MRREW ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES MTIMV: ; TIME OUT VALUES IN SEC“NTERRUPT ROUTINE MTINT: JSR R5,SAVE SPL 5 TST NMTREQ BMI MTEYIT .IFZ $KT11C MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 .IFF MOV CDTLST,R0 ; PLACE CURRENT LIST S V A IN R0 MOV MTPAR5,$KPAR5 ; GET CURRENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN I” ** ;* 11 MULTIPLE REWIND ** ;* ALL THREE STANDARD R0S I/O EXITS ARE SUPPORTED BY MAGTAP. ** ;* ** ;* USAGE. THE ASSEMBLER LINKAGE TO MAGTAP IS: ** ;* ** ;* MOV #LIST,-(SP) ;PUSH LIST ADDRESS ON STACK ** ;* EMT MAGTAP •.WORD -1 ; =+1 VALUE PCHR FLD3F: .WORD -1 ; = 0 VOID (ONLY AFTER A PCHR ; +1 (VALUE) PCHR FIELD1: .WORD 0 ; VALUE OF FIELD 1 PCHR FIELD2: .WORD 0 ; 2 PCHR FIELD3: .WORD 0 ; 3 PCHR FLGWRD: .WORD 0 ; CURRENT FLAGS SE–ONDS .BYTE 0,0 ;OPEN .BYTE 0,0 ;CLOSE .BYTE 5,0 ;READ .BYTE 5,0 ;WRITE .BYTE 5,0 ;WRITE FILE MARK .BYTE 180.,0 ;REWIND .BYTE 5,0 ;SPACE .BYTE 60.,0 ;SKIP MTTLI: ;MAGNETIC TAPE TIMER LIST .WORD 1 .BYTE 0 .BYTE 25 .WORD 0 .WORD MTTIM .PAGE ; ; —NTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) TST R5 BNE MTEYIT MTINRE: JSR PC,MTDQXN MTEYIT: JMP RESTOR .PAGE MTDQXN: JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK CLR џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћš S T A R T O F M A G T A P ; MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOT, RETURN MOV FUNCT(R0),RES2(R0) ; IS DEVICE TYPE = 4 INC R4 ;SET R4 = 2 CMPB DEVICE(R0),#4 BNE MTERR ;RETURN IF NOT 4 ; › -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: CMPB TYPE(R0),#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS .IFNZ $KT1œ ** ;* LIST THREAD ** ;* +2 EXIT TYPE (1-3) DEVICE TYPE ** ;* +4 EXIT ADDRESS (EXIT TYPE 3 ONLY) ** ;* +6 DEVICE NUMBER FOR FUNCTIONS 1-10, SET BITS FOR 11 ** ;* +10 RETURN ERROR PARAMETER (0 TO 14) ** ;* +12 SYSTEM (CALLING TASK #) ** ;* +14 DATA BU PCHR NEXSEC: .WORD 0 ; SECTOR FOR NEXT PATCH PCHR NEXWRD: .WORD 0 ; WORD FOR NEXT PATCH PCHR WORD0: .WORD 0 ; WORD 0 OF SECTOR 0. PCHR TEMP1: .WORD 0 ; SCRATCH STORAGE PCHR TEMP2: .WORD 0 ; PCHR TEMP3: .WORD 0 ; ž IS EXIT TYPE 1 OR 2 INC R4 ;SET R4 = 3 MOVB TYPE(R0),R1 ;R1 = EXIT TYPE BLE MTERR ;BRANCH IF .LE. 0 CMP R1,#3 BGE MTERR ;BRANCH IF .GT. 3 ; IS THE LOGICAL DEVICE NUMBER 0 OR1 MOV #5,R4 MOVB DEVNUM(R0),R1 ;PLACE DEVICE NUMBER IN R1 BLT MTERR ;RETURN IF NEGATIVE CMP R1,#MTDVLM ;IS THE DEVICE NUMBER DEFINED BGT MTERŸ1C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 ; SYSTEM VIRTUAL MOV R0,CDTLST ; SAVE FOR NEXT MOV $KPAR5,MTPAR5 ; INTERRUPT MOV DTPAR(R0),@#$KPAR6 ;INITIALIZE KPAR FOR DATA BUFFER ADDR .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 ; FUNCTIONAL JSR PC,@MTFCT(R1) ; RџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћЂR ;RETURN IF NOT ; IS THE FUNCTION CODE DEFINED MOV #10,R4 ;SET R4 = 8 MOV FUNCT(R0),R1 ;PLACE FUNCTION CODE IN R1 BLE MTERR ;BRANCH IF NEGATIVE CMP R1,R4 BGT MTERR ;BR IF R1 IS MORE THAN 8 CMP R1,#7 BLT MT01 ;BR IF R1 IS 6 OR LESS TST COUNT(R0) BEQ MTERR ;BR IF COUNT IS ZERO CLR NWORD(R0) MT01: CLЃOUTINE CMP RES2(R0),#2 BLE MTINRE TST R4 BNE MTINRE MTIN05: MOV #MTTLI,-(SP) MOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .IFF ЄG REPEAT COUNT ** ;* +34 RESERVED ** ;* +36 RESERVED ** ;* ** ;* THE RETURN ERROR CODES ARE AS FOLLOWS: ** ;* ** ;* 0 I/O SUCCESSFUL ** ;* 1 LIST AЅFILE TYPE + CORE DIRECTORY PCHR DEFLEN: .WORD 0 ; REQUESTED LENGTH OF FILE. PCHR .PAGE ; PCHR ; PCHR ; AT LAST WE CAN START PCHR START: MOV #PCHTST,-(SP) ; PLACE ADDRESS OF STACK FOR CORLOD EMT $CRLOAD ; GET ADDRESS OF CORLOD TABLE MOV ІR SYSTEM(R0) ; PLACE LIST IN THREAD MOV @#PS,-(SP) ;INHIBIT INTERRUPTS, SAVE PROGRAM STATUS REG. SPL 7 ;SET PRIORITY TO 7 MOV R0,@MTLAST ;QUEUE IT MOV R0,MTLAST TST ACTIVE ;SEE IF CALLER IS A TASK BEQ MT04 ;BRANCH IF NOT MOV $CTASK,R2 INCB IOSTAT(R2) MOV R2,SYSTEM(R0) MT04: MOV (SP)+,@#PS MOV #MTREP,RES1(R0) ; Ї MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11 BNE MTTIM1 JSR PC,MUREWI TST R2 BEQ MTTIM4 MOV #MTTLI,-(SP) ; TIMER LIST MOV #1,-(SP) ; TIMER DELAY JSR PC,QTIME TST (SP)+ BR MTTIM2 ; DEQUEUE THE REQUEST MTTIM1: MOV #12,R4 MTTIM4: JSR PC,MTDQXўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џЌ MAGNETIC TAPE TIME OUT ** ;* 13 END OF TAPE DETECTED ;* 14 WRITE COMMAND FOR REAL WITHOUT WRITE RING ** ;* ** ;* COUNT =NUMBER OF WORDS READ BY THE READ COMMAND ** ;* =NUMBER OF RECORDS (+-N) TO SPACE ** ;* =NUMBER OF FILES (+-N) TO SKIP ** ;* =UNUSED FOR ALL OTHER FUNC­PCHR STAA00: MOV #MESS1,R0 ; PRINT PROMPTER MESSAGE PCHR JSR PC,TTYOUT ; PCHR JSR PC,TTYIN ; GET AN INPUT (REQUEST) PCHR JSR PC,INTERP ; GO INTERPRET THE REQUEST PCHR BNE STAA20 ; SYNTAX ERROR PCHR MOV #OPTAB,R0 ; GET ADDRESS OF OPCODE TABLE. PCHR 10$: MOV (R0)+,R1 ; GEЎ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST BR MTEXIT MTERR: INC (R0) MOV R4,ERROR(R0) ;STORE ERROR CODE IN LIST MTEXIT: MOV @#MTSTAT,STATUS(R0) JSR R5,POPR ;RESTORE REGISTERS MOV (SP)+,(SP) ;MOVE RETURN ADDRESS MTEX0: RTS PC ;RETURN TO CALLE- ; MTEX1: MOV #MTTLI,-(SP) ;ADDRESS OF MAG TAPE TIMER LIST ЏFORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTERED AFTER A READ ATTEMPT OR A BACK SPACE RECORD ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 ;SET I/O COMPLETE TST RES1(R0) ; TEST BACKSPACE FLAG BPL MRRE1 џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїД************************************* ; .DEF MAGTAP,MTINT .REF PUSHR,POPR,ACTIVE,$CTASK,IOSTAT,DSPTCH,RESTOR,RELTSK .REF UNSPND,QSAVEI,PPASV5,PPASV6,SVPPA,SAVE .REF TSK.PC,QTIME,DQTIME,IOCOMX ; ; M A G T A P E Q U A T E P A R A M E T E R S ; DATUM = 1 FOROS2 = 1 MULRE = 1 ; 0 FOR DELETE, 1 TO INCLUDE DEVICE = 2. ;LOGICAL DEVICE TYPE TYPE = 3. ;EXIT TYPE $EXIT Е JSR PC,TTYOUT ; TELL USER PCHR BR STAA00 ; TRY AGAIN PCHR .PAGE ; PCHR ; DEFINE A PATCH FILE (MUST NOT EXIST) PCHR ; PCHR DEFINE: ; PCHR TST FLD1F ; DO I HAVЖHE CALLER IS NOT A TASK MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR PC,QSAVEI ;AND LET QSAVI SUSPEND THE TASK JMP DSPTCH ; .PAGE ; M T I N T MAGNETIC TAPE INTERRUPT ROUTINE MTINT: $SAVE MOV R4,@#PS MOV MTFRST,R0 ;PLACE LIST ADDRESS IN R0 BEQ MTEYIT ;BR IF QUEUEЗ1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG .IFNZ DATUM MOV #-1,@#MTBCNT .ENDC BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€џўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўМUNCTION CODE NWORD = 20. ;BUFFER SIZE IN WORDS COUNT = 22. ;SEE DEFINITION ABOVE STATUS = 24. ;HARDWARE STATUS REGISTER RES1 = 26. ;RESERVED 1 RES2 = 28. ;RESERVED 2 RES3 = 30. ;RESERVED 3 ; MTDVLM = 1 ;HIGHEST LOGICAL DEVICE NUMBER (0 & 1) MTMREW = 177774 ;COM OF DEFINED LOGICAL UNITS MTREP = 18. ;MAG TAPE REPEН EMT $DEFIN ; PCHR MOVB DEFERR,R1 ; GET ERROR CODE AND TEST PCHR BNE DELA20 ; YES - GO TO COMMON CODE PCHR MOV #126.,R0 ; NO - LET'S SET UP SECTOR 0. PCHR 40$: CLR SECZ(R0) ; PCHR SUB #2,R0 ; DECREMENT BY A WORD. PCHR BGE 40$ ; MORE TО2 EXIT BNE MTIN00 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK CLR -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTIN00: TST NMTREQ BMI MTEYIT ;BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS JSR PC,MTINIT BPL MTINRE MOV FUNCT(R0),R1 ;RETURN JUMP TO DEC R1 ; DESIRП ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING BIT IN SIGN BIT BMI MWRI1 ; BR IF NO WRITE RING .ENDC CLR R4 ;CLEAR ERROR FLAG ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE ПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџПџ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ФR MAGNETIC TAPE CONTROLLER .IFZ DATUM READ = 1 WRIT = 2 ;WRITE BUFFER WRFM = 4 ;WRITE FILE MARK WEXG = 10 ;WRITE WITH EXTENDED GAP SPCF = 20 ;SPACE FILE FORWARD BCKF = 40 ;BACK SPACE FILE SPCR = 100 ;SPACE RECORD FORWARD BCKR = 200 ;BACK SPACE RECORD REWD = 400 ;REWIND ENAB = 1000 ХTE: ; PCHR MOV #DEFBLK,-(SP) ; DELETE THE PATCH FILE PCHR EMT $DELET ; PCHR MOVB DEFERR,R1 ; GET ERROR CODE AND TEST PCHR BNE DELA20 ; YES PCHR JMP STAA00 ; NO - ALL DONE PCHR ; Ц MOV #CLEA,@#MTCOMM ;CLEAR CURRENT COMMAND MOV MTFRST,R0 BEQ MTTIM2 ; DEQUEUE THE REQUEST MOV #12,R4 JSR PC,MTDEQ ; DEQUEUE REQUEST CMPB TYPE(R0),#2 ;TYPE 2 EXIT BNE MTTIM2 MOV SYSTEM(R0),-(SP) ;PLACE TASK NUMBER ON STACK CLR -(SP) ;PUSH 0 ON STACK JSR PC,UNSPND TST (SP)+ ;POP OFF ERROR CODE MTTIM2: JSR R5,POPR ЧWRIT BR MRRE3 MRWR1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT BMI MRRE2 ;BR IF ERROR ; PLACE WORD COUNT AND STATUS IN LIST SUB @#MTWORD,COUNT(R0) .IFF BIT @#MTSTAT,#34600 BNE MRRE2 ; BRANCH IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC RTS PC .PAGE яџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџяџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџпџ ЬK SPCR = 10 ; SPACE RECORD BCKR = 12 ; BACKSPACE RECORD WEXG = 14 ;WRITE WITH EXTENDED GAP SPCF = 10 ; SPACE FILE FORWARD BCKF = 12 ; BACK SPACE FILE REWD = 16 ; REWIND MTDVS = 10 ; SHIFT COUNT MTINB = 20101 ; INTERRUPT ENABLE CLEA = 10000 ; CLEAR CONTROLLER ENAB = 100 ; INTERRUPT ENABLE MTCLR = 1400 ; CLEAR CONTROLLER MTRWD = 2 ; TEST IF REWINDING MTЭC R1 ; PCHR BEQ 10$ ; NO - ERR 7 ( ALREADY DEFINED)? PCHR DEC R1 ; PCHR BEQ 15$ ; NO - ERR 8 (DISK FILE TYPE FULL)? PCHR DEC R1 ; PCHR BEQ 20$ ; NO - ERR 9 ( FILE NOT DEFINED)? PCHR MOV #MES25,R0 ; NO - MUST BE ERR 1Ю MOV DATA(R0),@#MTMEMO MOV NWORD(R0),@#MTWORD ; FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA1: RTS PC ; ; THIS ROUTINE IS ENTERED AFTER A READ ATTEMPT OR A BACK SPACE RECORD ; ; R0 = ADDRESS OF LIST ; BYTE RES1 IS THE REREAD REPEAT COUNT ; BIT 15 OF RES1 IS THE BACK SPACE RECORD FLAG MRREA: CLR R5 Я ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BITћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџд ; NUMBER OF (REQUESTS - 1) IN QUEUE ; ; MAGNETIC TAPE FUNCTION JUMP TABLE MTFCT =.-2 .WORD MOPEN ;OPEN .WORD MCLOS ;CLOSE .WORD MREAD ;READ .WORD MWRIT ;WRITE .WORD MWEOF ;WRITE FILE MARK .WORD MREWI ;REWIND .WORD MSPRC ;SPACE +-N RECORDS .WORD MSKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREW е 40$ ; PCHR 20$: MOV #MES24,R0 ; PCHR 40$: JSR PC,TTYOUT ; PRINT MESSAGE PCHR JMP STAA00 ; GO TRY AGAIN. PCHR .PAGE ; PCHR ; TASK EXIT PCHR ; жRD,R2 ;MINUS WORD COUNT REGISTER MOV R2,COUNT(R0) ;SAVE IN LIST BR MRRE4 ; MRRE2: MOV #11,R4 DEC RES1(R0) ; DEC REPEAT COUNT BEQ MRRE4 JSR PC,MTINIT BPL MRRE4 MOVB #200,RES1+1(R0) ;SET BACK SPACE FLAG BIS #BCKR,R3 ;R3 =BACK SPACE COMMAND MOV R3,@#MTCOMM ;GIVE BACK SPACE COMMAND MRRE3: INC R5 ;SET I/O NOT COMPLETE MRз R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTI§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџмKFI ;SKIP +-N FILES .IFNZ MULRE .WORD MUREWI .ENDC MTIMV =.-3 ; TIME OUT VALUE IN SECONDS .BYTE 5 ; READ .BYTE 5 ; WRITE .BYTE 5 ; WRITE FILE MARK .BYTE 180. ; REWIND .BYTE 5 ; SPACE .BYTE 60. ; SKIP .IFNZ MULRE .BYTE 1 ; MULTIPLE REWIND .ENDC .BOUND MTTLI: ;MAGNETIC TAPE TIMER LIST нD1F ; ANYTHING SPECIFIED? PCHR BGT 20$ ; OK PCHR JMP STAA20 ; NO - BAD PCHR 20$: JSR PC,TASKNO ; GET & CHECK TASK NO. PCHR JSR PC,READ0 ; GET SECTOR ZERO PCHR ASL R2 ; SHIFT INTO A WORD INDEX PCHR CLR SECZ(R2) ; CLEAR THE ENTRY FOR TASK Sо R4 ;CLEAR ERROR FLAG MOV DATA(R0),@#MTMEMO MOV NWORD(R0),@#MTWORD ; IS THIS THE FOURTH TRY MOV RES1(R0),R2 ;LOAD REPEAT COUNT IN R2 BIC #177774,R2 BEQ MWRI2 ;BRANCH TO ISSUE WRITE WITH EXTENDED GAP ; ISSUE NORMAL WRITE BIS #WRIT,R3 ;OR IN WRITE COMMAND BR MWRI3 MWRI2: BIS #WEXG,R3 ;OR IN WRITE WITH EXTENDED GAP MWRI3: MOV R3,@#MTCOMM п ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїфNDC .ENDM ; .MACRO RST.56 .IFNZ $KT11C MOV (SP)+,@#$KPAR6 MOV (SP)+,@#$KPAR5 .ENDC .ENDM .PAGE ; S T A R T O F M A G T A P MAGTAP: JSR R5,PUSHR ;SAVE R0-R5 ON STACK MOV 14.(SP),R0 ;R0 = F.W.A. OF LIST SAV.56 MOV #1,R4 ;SET ERROR CODE IN R4 DEC (R0) ;IS THREAD = 1 BNE MTERR ;IF NOхFLGWRD ; CLEAR THE BYTE FLAG PCHR BIS #RELFLG,FLGWRD ; SET THE RELOCATION FLAG PCHR BR PATA00 ; GO TO COMMON PCHR ; PCHR ; DEFINE A BYTE PATCH PCHR ; PCHR BYTPCH: ; ц ; PLACE WORD COUNT AND STATUS IN LIST MOV NWORD(R0),COUNT(R0) ;SAVE COUNT SUB @#MTWORD,COUNT(R0) MOV @#MTSTAT,STATUS(R0) ;SAVE STATUS BR MRWR3 ; ERROR ON LAST WRITE MRWR2: MOV #11,R4 DECB RES1(R0) ;DECREMENT REPEAT COUNT BEQ MRWR3 JSR PC,MTINIT ;INITIALIZE FOR BACK SPACE COMMAND BPL MRWR3 ;BRANCH NONE ZERO MOVB #200,RES1+1(R0) ;SET BACK ч CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїьV R1,RES2(R0) BLE MTERR ;BRANCH IF NEGATIVE CMP R1,R4 .IFZ MULRE BGT MTERR ;BR IF R1 IS MORE THAN 8 .IFF BGT MT01 ;BR IF MORE THAN 8 .ENDC MOV #5,R4 ; SET LOGICAL DEVICE ERROR CODE MOVB DEVNUM(R0),R1 BLT MTERR ; BR IF NEGATIVE DEVICE NUMBER CMP R1,#MTDVLM ; IS DEVICE NUMBER DEFINED BGT MTERR э ; PCHR BIC #BYTFLG!RELFLG,FLGWRD ; CLEAR BOTH BYTE & RELOCATION. PCHR PATA00: TST FLD1F ; ALL THREE FLAGS MUST BE +1. PCHR BLE 10$ ; NO PCHR TST FLD2F ; YES - NEXT PCHR BLE 10$ ; NO PCHR TST FLD3F ; YES - LAST ю ;BR IF NO WRITE RING CLR R4 ;CLEAR ERROR FLAG BIS #WRFM,R3 ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRWEO3 MRWEO1: я MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPE MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET Dџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїє SPL 7 ;SET PRIORITY TO 7 .IFZ $KT11C MOV R0,@MTLAST ;QUEUE IT MOV R0,MTLAST .IFF MOV R0,-(SP) ; STORE SYSTEM VIRTUAL LIST ADDRESS ON STACK JSR PC,SVPPA ; GET LIST'S PPA (PACKED PHYSICAL ADDRESS ) MOV MTLAST,-(SP) ; CONVERT THE ADDRESS OF THE LAST ENTRY IN QUEUE JSR PC,PPASV6 ; GET LAST'S SVA (SYSTEM VIRTUAL ADDRESS ) MOV 2(SP),@(SP)+ ѕ THIS A BYTE COMMAND PCHR BEQ 17$ ; NO - CHECK FOR ODD ADDRESS. PCHR BIT #177400,FIELD3 ; YES - CHECK FOR ONLY 1 BYTE OF DATA. PCHR BNE 10$ ; DATA IN UPPER BYTE - ILLEGAL PCHR BR 20$ ; DATA OK. ALL ADDRESS OK. GO ON. PCHR 17$: BIT #1,FIELD2 ; NO - MUST BE EVEN ADDRESS. PCHR BNE 10$ ; ODD WORD ADDRESS - BAD. PCHR і I/O NOT COMPLETE MRWEO2: RTS PC ; .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: JSR PC,MTINIT BPL MREW1 BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER A REWIND ; MRREW: CLR їVNUM(R0),R1 CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїќ;BR IF NOT FIRST IN QUEUE .IFNZ $KT11C MOV R0,CDTLST ; SAVE LIST S.V.A. FOR INTERRUPT ROUTINE MOV $KPAR5,MTPAR5 ; SAVE KPAR5 FOR INTERRUPT POUTINE .ENDC MOV FUNCT(R0),R1 ;RETURN JUMP TO ASL R1 JSR PC,@MTFCT(R1) ; ROUTINE CMP RES2(R0),#2 BLE MTXB2 TST R4 BEQ MTEX1 ;BR IF NO ERRORS MTXB2: JSR PC,MTDEQ ; DEQUEUE REQUEST §ROR MESSAGE PCHR JSR PC,TTYOUT ; PCHR JMP STAA00 ; AND TRY AGAIN. PCHR 30$: MOVB #DISABL,@TTSTAD ; DISABLE THE TASK. PCHR 40$: SPL 0 ; BACK TO LEVEL 0. PCHR ; PCHR PATB00: JSR PC,READ0 ; READ IN SECTOR 0 PCHR ўORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DEC NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWџA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,RџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїTIME TST (SP)+ MTEX2: CMPB #2,TYPE(R0) ;TYPE 2 ? BNE MTEXIT ;BR IF NOT TST SYSTEM(R0) ;SEE IF THIS IS A TASK CALLING BEQ MTEXIT ;BR IF THE CALLER IS NOT A TASK .IIF NE $KT11C ADD #4,SP ; THE CALLER IS A TASK, THE PAR'S CAN GO MOV @#PS,14.(SP) ;PLACE PS ON STACK JSR R5,POPR ;RESTORE REGESTERS CLR -(SP) ;SET INVOLUNTARY SUSPEND FLAG JSR DY HAS PATCH(S) PCHR MOV SECZ,SECZ(R2) ; HERE IF TASK'S FIRST PATCH. SET POINTPCHR ADD #PATSIZ,SECZ ; TO SLOT AND BUMP WORD 0 TO NEXT PAT RCPCHR BCS PATE00 ; CHAIN WORD OVERFLOW PCHR BR PATC20 ; GO GET SECTOR TO PATCH. PCHR 10$: JSR PC,DECODE ; GET LOCATION OF NEXT PATCH PCHR CMP R4,SNSEC ; ONLY READ THE DATA SECTOR IF IT IS PCHR  ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: (SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџїџї ENT LIST PAR5 .ENDC MOV #MTTLI,-(SP) JSR PC,DQTIME TST (SP)+ CLR R4 ; BRANCH ON FUNCTION CODE ON RETURNING FROM AN INTERRUPT MOV FUNCT(R0),R5 ;LOAD FUNCTION CODE (1 TO 8) ASL R5 JSR PC,@MTRET(R5) MOV @#MTSTAT,STATUS(R0) BIT @#MTSTAT,#ENDTAP ; TEST FOR END OF TAPE MARK BEQ MTINT2 MOV #13,ERROR(R0) ; SET END OF TAPE INDICATOR IN LIST  PCHR 20$: MOV SECN+CHAIN(R5),R3 ; GET NEXT CHAIN POINTER, IF ANYPCHR BNE 10$ ; MORE TO COME PCHR ; PCHR PATC00: MOV SECZ,SECN+CHAIN(R5) ; UPDATE LAST PATCH RECORDS PCHR ADD #PATSIZ,SECZ ; LINK WORD & SEC 0 WORD 0. PCHR BCS PATE00 ; CHAIN WORD OVERFLOW PCHR MOV  ASH #12.,R3 ;LEST SHIFT 0&1 INTO 12&13 MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #1000,R3 ;SET INTERRUPT ENABLE BIT ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 ; TEST READY BIT CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;LOAD WITH BYTE SIGN EXTENDED BGT MTIN2 ;B THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CURRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1ўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ§џ,#3 BNE MTIN02 MOV R0,-(SP) ; LIST ADDRESS MOV SYSTEM(R0),-(SP) ; TASK NUMBER JSR PC,IOCOMX ; EXECUTE I/O COMPLETE SUBROUTINE MTIN02: TST NMTREQ BMI MTDQD ; BR IF -1 MOV MTFRST,R0 ;GET NEXT LIST ADDRESS .IFNZ $KT11C MOV R0,-(SP) ; CONVERT LIST ADDRESS JSR PC,PPASV5 ; FROM PACKED PHYSICAL TO MOV (SP)+,R0 W LAST PATCH. PCHR MOV FIELD2,SECN+LOC(R5) ; SET LOCATION OF NEW PATCH. PCHR MOV FLGWRD,SECN+FLAG(R5) ; SET BYTE & REL FLAGS PCHR MOV FIELD3,SECN+VALUE(R5) ; SET VALUE OF PATCH. PCHR ; PCHR PATD00: JSR PC,WRTN ; WRITE PATCHED SECTOR OUT. PCHR JSR PC,WRT0 ; WRITE UPDATED SECTOR 0 OUT. PCHR MOVB SAVT MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END ; MT4T.03 16-JUL-73 ; MT4T.03 ; MT4T.02 8-MAY-73 .TITLE MAGT4 .LIST MEB .MACRO LMAC EX,DN,DA,FU,NW,CT,?A,?B,?C,?D MOV #C-REL,R0 MOV R0,-(SP) EMT 71 ; MAGTAP .IFEQ EX-1 MOV (R0),R1 CMP R1,#1 .WORD 1374 ; BRANCH IF NOT EQUAL .ENDC .IFEQ EX-3 INC A BR A+2 A: .WORD 0 TST A џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџўџMOV FUNCT(R0),R1 MOVB MTIMV(R1),-(SP) JSR PC,QTIME TST (SP)+ MTDQD: RTS PC .PAGE ; MAGNETIC TAPE TIME OUT ROUTINE MTTIM: JSR R5,PUSHR TST NMTREQ ; IS QUEUE EMPTY BMI MTTIM2 .IFZ $KT11C MOV MTFRST,R0 .IFF MOV CDTLST,R0 ; GET LIST S.V.A. MOV MTPAR5,$KPAR5 ; AND ASSOCIATED PAR5 .ENDC CMP FUNCT(R0),#11  PCHR ; LIST ALL A TASK'S PATCHES PCHR ; PCHR LIST: ; PCHR TST FLD1F ; ANY PARAMETERS? 2/12/73 BGT 2$ ; YES 2/12/73 MOV #1,FIELD1 ; NO - LIST EVERYTHING - FROM TASK #1 2/12/73 MOV  * ;* 1 TASK NUMBER * ;* 2 PRIORITY * ;* 3 TASK ACCESS STATUS * ;* IN ADDITION TO THE ABOVE, THE FOLLOWING OPTIONAL ENTRIES MAY * ;* BE SET * ;* 1 MAXIMUM TASK RUN TIME * ORD DA-REL,16,20 ; DATA BUFFER ADDRESS SYS SYS .WORD FU,NW,CT ; FUNCTION CODE BUFFER SIZE COUNT .WORD 0,0,0,0 ; STATUS RES1 RES2 RES3 D: NOP ; ************************************************************* .ENDM ERROR = 8. R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 .PAGE ; TASK HEADER .Wџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ";* 2 TPDR7 & TPAR7 SET TO THE DEVICE PAGE * ;* * ;* AN EXAMPLE OF AN INPUT CARD IS * ;* ACC=BCH; DEV; NAM=LDFILE; PRI=2; TIM=180; TSK=12;END; * ;* THE 'END;' COMMAND MUST BE THE LAST COMMAND * ;* THE OTHER COMMANDS MAY BE IN ANY ORDER AND ON MORE THAN ONE CARD* ;*****************************************************#ORD 1 ; THREAD .WORD 4 ; TASK NUMBER .BYTE 20 ; SYSTEM TASK .WORD MGTS,0,0 ; ENTRY / TIME / MAX TIME .BYTE 200,1 ; STACK SIZE / PRIORITY .WORD 0,0 ; TIMER / ARG .BYTE 0,4 ; STATUS / TASK NUMBER .WORD 0 .BLKW 200 ; WRITE 16 FILES 37 RECORDS PER FILE MTES1: DEC MTRCC BEQ MTESTE MOV #4,R4 $EN ; MOPEN: JSR PC,MTINIT BR MCL10 ;GO TO COMMON EXIT FOR OPEN/CLOSE ; ; ; MAGNETIC TAPE CLOSE ; MCLOS: CLR R4 MCL10: RTS PC .PAGE ; M A G N E T I C T A P E R E A D MREAD: JSR PC,MTINIT BPL MREA1 JSR PC,MTBAD ; FORM READ COMMAND IN R3 BIS #READ,R3 ;INCLUSIVE OR UNIT NUMBER AND COMMAND MOV R3,@#MTCOMM ;GIVE READ COMMAND MREA%; AND CHECK OUT END VALUE. 2/12/73 JSR PC,TASKNO ; 2/12/73 MOV R0,FIELD1 ; END IS LEGAL. RESTORE START VALUE. 2/12/73 CMP R2,R0 ; IS START <= END? 2/12/73 BGE 8$ ; YES - OK. 2/12/73 MOV #MES11,R0 ; NO - ERROR SO TELL HIM. 2/12/73 JSR PC,TTYOUT ; &******************* ; THE SWITCH REGISTER MUST BE SET AS FOLLOWS ; BATCH TASK = 0 ; BACKGROUND TASK = 1 ; FOREGROUND OR SYSTEM = 2 ; THE ABOVE ARE ONLY TEMPORARY UNTIL KEY SWITCHES ARE INSTALLED ; ; ; ROSLNK ERROR CODES SET IN R3 BEFORE GOING TO RLKER ; ; CODE DEFINITION PRINTS ON TTY ; 60 SUCCESSFUL 0 ; 61 BAD COMMAND 1 ; 62 BAD ACCESS CODE 2 ; ' ; WRITE COMMAND MOV MTRCC,R1 BIC #177740,R1 ; WRITE E O F AFTER 31 RECORDS BNE MTES2 INC R4 ; WRITE FILE MARK MTES2: MOV R4,.+56 ; STORE FUNCTION CODE MOV R4,.+136 ; STORE FUNCTION CODE LMAC 2,0,MWOUT,4,150,0 ; WRITE UNIT 0 LMAC 2,1,MWOUT,4,150,0 ; WRITE UNIT 1 BR MTES1 MTESTE: LMAC 2,0,MWRIN,6,0,0 ; REWIND џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ* 63 NO END COMMAND 3 ; 64 BAD NAME 4 ; 65 PROIRITY ERROR 5 ; 66 BAD TIME LIMIT 6 ; 67 BAD TASK NUMBER 7 ; 70 IMPROPER KEY SETTING 8 ; 71 MISSING DELIMITER 9 ; 101 DISCIO ERROR A ; 102 DEVICE PAGE NOT AVAILABLE ; .PAGE ; ROS3 INPUT / OUTPUT CONTROL BLOCK MACRO .MACRO IOCBM DEV,EXTY,EXIT,ETSK,LEV,DAT+LMAC 1,1,MWRIN,6,0,0 ; REWIND LMAC 2,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,3,200,0 ; READ MT100: LMAC 2,0,MWRIN,7,0,3 ; SPACE LMAC 1,0,MWRIN,3,200,0 ; READ LMAC 1,0,MWRIN,7,0,-2 ; SPACE LMAC 2,0,MWRIN,3,200,0 ; READ MT150: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,3 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LM, MRRE6 ; BR IF EOF DETECTED ASH #4,R2 ;MOVE ERROR BIT INTO SIGN BIT BMI MRRE2 ;BRANCH IF ERROR SET MRRE6: SUB @#MTWORD,COUNT(R0) ; SUB WORD COUNT .IFF MRRE6: BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCK IF ANY ERRORS MOV @#MTBCNT,R1 ASR R1 ADD R1,COUNT(R0) .ENDC BR MRRE4 MRRE2: MOV #11,R4 DEC RES1(R0) - 2/12/73 MOV R2,R1 ; PUT # INTO R1 2/12/73 MOV #TEMP1,R0 ; AND CONVERT IT; RESULT IN TEMP1-3. 2/12/73 JSR PC,BINOCT ; 2/12/73 MOV TEMP3,TSKNUM ; PUT 2 DIGITS INTO PRINT BUFFER. 2/12/73 MOV #TSKMES,R0 ; AND PRINT TASK# 2/12/73 ASL R2 ; MAKE INTO A WORD INDEX PCHR .B .WORD 1 .BYTE DEV ;LOGICAL DEVICE NUMBER .BYTE EXTY ;EXIT TYPE .WORD EXIT ;I/O COMPLET .BYTE ETSK ;ERROR TASK .BYTE LEV ;PRIORITY LEVEL .WORD 0,0 ;ERROR PARA / SYSTEM .WORD DATB ;DATA BUFFER ADDRESS .ENDM ; ; ROS 3 TASK HEADER EQUATES THRD = 0 ; THREAD WORD TASK = 2 ; TASK NUMBER TACC /AC 1,1,MWRIN,7,0,51 ; SPACE MT175: LMAC 2,1,MWRIN,3,200,0 ; READ LMAC 2,1,MWRIN,10,0,-2 ; SKIP FILES LMAC 1,1,MWRIN,3,200,0 ; READ LMAC 3,1,MWRIN,3,200,0 ; READ MT200: LMAC 3,0,MWRIN,7,0,2 ; SPACE RECORD LMAC 3,0,MWRIN,3,200,0 ; READ LMAC 2,3,MWRIN,11,0,0 BR MTEND MTESE: NOP ; USE FOR ERROR BREAK POINT MTEND: EMT 4 ; EXITџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ2 = 4 ; TASK ACCESS STATUS PRIR = 5 ; PRIORITY ENTY = 6 ; ENTRY POINT MTIM = 10 ; MAXIMUM RUN TIME CTIM = 12 ; CURRENT TIME STSZ = 14 ; STACK SIZE STAT = 16 ; CPU STATUS STPT = 20 ; STACK POINTER ARGU = 22 ; ARGUEMENT TPDR = 24 ; PAGE DESCRIPTOR REGISTER TPAR = 44 ; PAGE ADDRESS REGISTER PRGH = 64 ; PROGRAM HI ; ; ROS 3 I/ ; .WORD 0 MWOUT: .ASCII /THIS BUFFER OF DATA WILL BE USED TO TEST THE MAGNETIC TAPE 62C/ .EVEN MTRCC: .WORD 1234 ; REPEAT COUNT .ASCII /SECOND LINE OF THE WRITE, REWIND, AND READ TEST 62 CHARACTERS./ MWRIN: .ASCII /INPUT BUFFER/ .EVEN .BLKW 30 .WORD 0 .BLKW 30 . = . + 200 TSKEND: .END 4 R0 = ADDRESS OF LIST ; BYTE RES1 IS REWRITE REPEAT COUNT ; BIT 15 OF RES1 IS BACK SPACE RECORD FLAG ; MWRIT: JSR PC,MTINIT BPL MWRI1 JSR PC,MTBAD MOV #14,R4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWRI1 ;BR IF NO WRITE RING .IFF ASH #13.,R2 ; PLACE WRITE RING B5 PCHR BR 55$ ; GO ON WITH THE LOOP. 2/12/73 15$: JSR PC,TTYOUT ; PRINT TASK # - NONEMPTY CHAIN. 2/13/73 20$: JSR PC,DECODE ; GET LOCATION OF PATCH PCHR JSR PC,READN ; GET THE SECTOR PCHR MOV #LSTBUF,R0 ; GET ADDRESS FOR CHARACTER STRING PCHR MOV SECN+LOC(R5),R1 ; GET BINARY NUMBER 6O CONTROL BLOCK EQUATES THRD = 0 ; THREAD WORD DEVN = 2 ; DEVICE NUMBER ETYP = 3 ; EXIT TYPE EXIT = 4 ; EXIT ADDRESS LEVL = 7 ; PRIORITY LEVEL EROR = 10 ; ERROR CODE DATA = 14 ; DATA BUFFER ; ; ASCII CHARACTER CODES EQSN =075 ; EQUAL SIGN SCOL =073 ; SEMI-COLON COMA =054 ; COMMA RPAR =051 ; RIGHT PARENTHESIS SPAC =040 џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћ: ; SPACE LPAR =050 ; LEFT PARENTHESIS DOLR = 44 ; DOLLAR SIGN CODE SWR = 177570 ; SWITCH REGISTER TIMLM = 2000 ; TIME LIMIT IN SECONDS ; ; ROS EMT NUMBERS TSKDEF = 10 ; DEFAULT OR BATCH TASK NUMBER ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFINIT = 36 BFENTR = 37 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS EXIT = 4 ;EMT FOR< MOV R3,@#MTCOMM ;STORE IN COMMAND REGISTER MWRI1: RTS PC .PAGE ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AFTER WRITE COMMANDS ; MRWRI: CLR R5 ;SET I/O COMPLETE TST RES1(R0) BPL MRWR1 ;BRANCH IF THE BACK SPACE IS NOT SET JSR PC,MWRIT BR MRRE3 MRWR1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PALCE ERROR BIT IN SIGN BIT =; NO PCHR MOVB #'R,(R0)+ ; YES SET 'R' FLAG PCHR BR 50$ ; PCHR 30$: BIT #BYTFLG,SECN+FLAG(R5) ; BYTE? PCHR BEQ 40$ ; NO PCHR MOVB #'B,(R0)+ ; YES - SET FLAG PCHR BR 50$ ; PC> CALL TO MONITOR EXIT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII ASCBIN = 17 DISCIO = 23 ;EMT FOR DISC I/O ROUTINE CREAD = 24 ;EMT FOR CARD READER LPRNTR = 25 ;EMT FOR LINE PRINTER NOCKPT = 30 ;EMT FOR NO CHECKPOINT ROUTINE GETIME = 31 ;EMT FOR GET TIME џћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћџћB GEDATE = 32 ;EMT FOR GET DATE R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = 51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE ; TASK HEADER FOR TSKNTR TSKHD: .WORD 1 ; THREAD .WORD 64. ; TASK NUMBER .BYTE 20 ; DR4 ;SET ERROR CODE MOV @#MTSTAT,R2 .IFZ DATUM ASR R2 ;PLACE BIT 0 IN CARRY BIT BCS MWEOF1 ;BR IF NO WRITE RING .IFF ASH #15,R2 BMI MWEOF1 .ENDC CLR R4 ;CLEAR ERROR FLAG BIS #WRFM,R3 ; COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MWEOF1: RTS PC ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPT PROCESSOR AE STARTING TASK # AND GO SEE 2/12/73 BR 10$ ; IF DONE YET? 2/12/73 60$: MOV #MES10,R0 ; PRINT END 2/12/73 JSR PC,TTYOUT ; PCHR JMP STAA00 ; DONE PCHR .PAGE ; PCHR ; SUBROUTINES USED BY PATCHR FSYSTEM TASK .BYTE PRIBKG ; PRIORITY .WORD TSKNTR ; ENTRY POINT .WORD 0,0 ; MAX TIME / TIMER .WORD 200 ; STACK SIZE .WORD $OVTYP ; CUP STATUS .WORD 0,0 ; STACK POINTER / ARG .BYTE 6 ; SET READ AND WRITE ACCESS .BYTE TSKND-TSKBG/100 ; TPDR 0 .WORD 0,0 ; TPDR 1-2 .WORD 0,0,0 ; TPDR 3-5 .WORHFTER WRITE E O F OPERATION ; MRWEO: CLR R5 ;SET I/O COMPLETE MOV RES1(R0),R1 BPL MRWEO1 ;BRANCH IF BACK SPACE FLAG IS NOT SET JSR PC,MWEOF BR MRRE3 MRWEO1: .IFZ DATUM MOV @#MTSTAT,R2 ASH #4,R2 ;PLACE ERROR BIT IN SIGN BIT BPL MWEOF1 .IFF BIT @#MTSTAT,#MDATST BNE MRRE2 ; BRANCH IF ANY ERRORS .ENDI PCHR ; PCHR ; TTYOUT TYPES A OUTPUT MESSAGE ON THE TTY PCHR ; INPUT R0 = ADDRESS OF MESSAGE BUFFER PCHR ; OUTPUT NONE PCHR ; PCHR TTYOUT: ; PCHR MOV R0,KBADD JD 0,0 ; TPDR 6-7 .WORD TSKBG,0,0 ; TPAR O-2 .WORD 0,0,0 ; TPAR 3-5 .WORD 0,0 ; TPAR 6-7 . = . + 14 .CSECT TSKNTC TSKBG: .WORD 0 .BLKW 177 .ASCII / / FWASC: .WORD 0,0,0 ; TEMTORARY ASCII BUFFER .WORD 0 LWASC = . FWRAD: .WORD 0,0,0 ; TEMTORARY RAD50 BUFFER LWRAD = . DACRD: .WORD 80. ; NUMBER OF CHARACTERS TO READ .WORD 0 LC RTS PC .PAGE ; M A G N E T I C T A P E R E W I N D ; MREWI: JSR PC,MTINIT BPL MREW1 .IFZ DATUM BIT @#MTSTAT,#2 ;TEST LOAD POINT BIT .IFF BIT @#MTSTAT,#40 .ENDC BNE MREW2 BIS #REWD,R3 MOV R3,@#MTCOMM MREW1: RTS PC MREW2: CLR RES2(R0) BR MREW1 ; ; THIS ROUTINE IS ENTERED BY THE INTERRUPTM; SET ADDRESS INTO I/O LIST PCHR MOV #KBLIST,-(SP) ; CALL EMT PCHR EMT $TTYOT ; PCHR TST KBERR ; ERRORS? PCHR BNE 10$ ; YES PCHR RTS PC ; NO PCHR 10$: EMT $EXIT ; YES - EXIT PCN; NUMBER ACTUALLY READ FWCRD: .BLKW 40. ; BUFFER LWCRD: .WORD 0 ; LAST WORD OF INPUT TABLE ; TSKNO: .WORD TSKDEF ; TASK NUMBER TSKAC: .BYTE 0 ; TASK ACCESS STATUS HPRIR: .BYTE 0 ; PRIORITY MAXTM: .WORD 0 ; MAXIMUM TIME DEVPG: .WORD 0 ; DEVICE PAGE FLAG ; ; CARD READER LIST CSIOB: IOCBM 2,2,0,0,3,DACRD TYIOB: IOCBM 0,2,0,0,0,TYMES TYMES: .WORD 14,0 .ASCII /TSKNTR MSG/ TYNUP PROCESSOR AFTER A REWIND ; MRREW: CLR R5 ;SET I/O COMPLETE RTS PC .PAGE ; MAGNETIC TAPE SPACE RECORD (+-N) ; MSPRC: .IFZ DATUM CLR R5 ;SET I/O COMPLETE TST @#MTSTAT ;CHECK FOR FILE MARK BMI MSPRC5 JSR PC,MTINIT ;INITIALIZE BPL MSPRC2 TST COUNT(R0) BEQ MSPRC2 BMI MSPRC3 ;BR IF NEGATIVE ; DQHR ; PCHR ; TTYIN READS A MESSAGE INTO REQBUF PCHR ; INPUT - NONE PCHR ; OUTPUT - MESSAGE PCHR ; PCHR TTYIN: ; PCHR MOV #REQLST,KBADD ; SET RM: .BYTE 40,40 ; SET ERROR NUMBER CODE BFPCB: .WORD 0 ; STATUS CODE .WORD 0 ; ID OF ROS FILE BFNAM: .WORD.0,0 ; ELEMENT NAME BFSTAT: .BYTE 0 BFTYPE: .BYTE 1 ; ELEMENT TYPE BFSECT: .WORD 0 ; RELATIVE START SECTOR BFSIZE: .WORD 0 ; LENGTH IN SECTORS TXTHED: .WORD BTCHID ; FILE I D FOR BATCH FILE .BYTE 0 ; RELATIVE SECTOR TXTR.W: .BYTE 0 TECREMENT (N) AND SPACE FORWARD DEC COUNT(R0) INC NWORD(R0) BIS #SPCR,R3 ; BR MSPRC4 ; INCREMENT (N) AND SPACE BACK MSPRC3: INC COUNT(R0) DEC NWORD(R0) BIS #BCKR,R3 MSPRC4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSPRC2: RTS PC MSPRC5: TST NWORD(R0) BGT MSPRC6 INC NWORD(R0) UADDRESS INTO I/O LIST PCHR MOV #KBLIST,-(SP) ; CALL EMT PCHR EMT $TTYIN ; PCHR TST KBERR ; ANY ERRORS? PCHR BNE 10$ ; YES PCHR RTS PC ; NO. PCHR 10$: MOV #MESS6,R0 ; TRY TO PRINT A WARNING MESSAGE PCHR V .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ OR WRITE TXTCNT: .WORD 40 ; NUMBER OF WORDS TO TRANSFER TXTBK1: .BLKW 40 .PAGE ; ROSLNK COMMAND LIST RKLCL: .RAD50 /ACC/ ; ACCESS STATUS .RAD50 /DEV/ ; DEVICE PAGE .RAD50 /END/ ; END .RAD50 /NAM/ ; NAME .RAD50 /PRI/ ; PRIORITY .RAD50 /TIM/ ; TIME LIMIT IN SECONDS .RADX DEC COUNT(R0) BR MSPRC2 MSPRC6: DEC NWORD(R0) INC COUNT(R0) BR MSPRC2 .IFF JSR PC,MTINIT ; INITIALIZE BPL MSPRC3 ; BRANCH IF ERROR MOV COUNT(R0),R1 BMI MSPRC3 NEG R1 BIS #SPCR,R3 ; OR IN SPACE COMMAND MSPRC1: MOV R1,@#MTBCNT ; PLACE COUNT IN CONTROLLER REGISTER MOV R3,@#MTCOMM ; GIVE COMMAND MSPRC2: RTY CMP KBERR,#28. ; INPUT TIMEOUT? PCHR BEQ 20$ ; YES - THEN JUST EXIT. PCHR JSR PC,TTYOUT ; PCHR 20$: EMT $EXIT ; AND EXIT. PCHR .PAGE ; PCHR ; TASKNO GETS A TASK # FROM FIELD1, CHECKS FOR VALIDTY, AND IF VALID PCHR ; RETURNS IT TO CALLER. Z50 /TSK/ ; TASK NUMBER .WORD 0 ; ; ROSLNK COMMAND PROCESSOR JUMP TABLE RLKJT: .WORD RLACC ; ACCESS STATUS .WORD RLDEV ; DEVICE PAGE .WORD RLEND ; END .WORD RLNAM ; NAME .WORD RLPRI ; PRIORITY .WORD RLTIM ; TIME LIMIT .WORD RLTSK ; TASK NUMBER ; ; TASK ACCESS STATUS MNEMONICS AND ASSOCIATED BIT SETTINGS ACCTB: .RAD50 /BCH/ ; BA\S PC MSPRC3: BIS #BCKR,R3 ; OR IN BACKSPACE COMMAND BR MSPRC1 MRPRC: MOV COUNT(R0),R1 BPL MSPRC4 COM R1 MSPRC4: ADD @#MTBCNT,R1 MOV R1,NWORD(R0) CLR R5 RTS PC .ENDC .PAGE ; MAGNETIC TAPE SKIP FILES (+-N) ; MSKFI: CLR R5 ;SET I/O COMPLETE MOV @#MTSTAT,R1 .IFZ DATUM ASL R1 .IFF ASH #5] PCHR ; INPUT - VALUE IN FIELD1 PCHR ; OUTPUT R2 = TASK # PCHR ; PCHR TASKNO: ; PCHR MOV FIELD1,R2 ; GET VALUE PCHR BLE 10$ ; LESS THAN 1 -BAD PCHR ^TCH TASK .WORD 1 .RAD50 /BCF/ ; FLOATING POINT BATCH TASK .WORD 11 .RAD50 /BKG/ ; BACKGROUND TASK .WORD 2 .RAD50 /BKF/ ; FLOATING POINT BACKGROUND TASK .WORD 12 .RAD50 /FCD/ ; FOREGROUND TASK .WORD 4 .RAD50 /FGF/ ; FLOATING POINT FOREGROUND TASK .WORD 14 .RAD50 /SYS/ ; SYSTEM TASK .WORD 20 .RAD50 /SYF/ ; FLOATING POINT SYSTEM TASK `,R1 .ENDC BMI MSKFI5 JSR PC,MTINIT ;INITIALIZE BPL MSKFI2 .IFNZ DATUM MOV #-77776,@#MTBCNT .ENDC TST COUNT(R0) BEQ MSKFI2 BMI MSKFI3 ;BR IF NEGATIVE DEC COUNT(R0) INC NWORD(R0) BIS #SPCF,R3 ;FORM SKIP FILE COMMAND BR MSKFI4 MSKFI3: INC COUNT(R0) ;INCREMENT COUNT DEC NWORaCMP R2,#MAXTSK ; IS IT TO LARGE? 2/12/73 BGT 10$ ; YES PCHR RTS PC ; NO - RETURN PCHR 10$: MOV #MESS5,R0 ; GET ILL. TASK # MESSAGE ADDRESS PCHR JSR PC,TTYOUT ; PRINT IT PCHR TST (SP)+ ; GET RID OF CALLERS RETURN ADD. PCHR JMP STAA00 ; AND GO GET Ab .WORD 30 .WORD 0 ; END FLAG .PAGE TSKNTR: ; TASK ENTER MOV #LWCRD,R1 ; SET CHARACTER POINTER SO A CARD WILL BE READ RLKGC: JSR PC,GWORD ; GET NEXT COMMAND MOV #FWASC,-(SP) ; ASCII BUFFER ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,R2 MOV #RKLCL,R4 ; SET POINTER TO COMMAND LIST RLKA1: TST (R4) ; AT END OF dD(R0) BIS #BCKF,R3 ;FORM BACK SPACE FILE COMMAND MSKFI4: MOV R3,@#MTCOMM ;GIVE COMMAND INC R5 ;SET I/O NOT COMPLETE MSKFI2: RTS PC MSKFI5: TST NWORD(R0) BGT MSKFI6 INC NWORD(R0) DEC COUNT(R0) BR MSKFI2 MSKFI6: DEC NWORD(R0) INC COUNT(R0) BR MSKFI2 .PAGE .IFNZ MULRE ; MAGNETIC TAPEeNOTHER REQUEST. PCHR .PAGE ; PCHR ; BINOCT CONVERTS A BINARY # TO 6 OCTAL DIGITS PCHR ; INPUT R0 = ADDRESS OF THE LEFTMOST CHARACTER PCHR ; R1 = BINARY NUMBER PCHR ; PCHR BINOCT: ; PCHR MOfLIST BNE RLKA2 ;YES, BRANCH MOV #61,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLKA2: CMP (R4)+,R2 ;NO, TEST COMMAND BNE RLKA1 ; BRANCH IF NOT A COMMAND SUB #RKLCL,R4 ; DETERMINE COMMAND INDEX SUB #2,R4 ; R4=R4-2 JMP @RLKJT(R4) ; JUMP TO COMMAND PROCESSOR RLKER: MOVB R3,TYNUM+1 ; SET ERROR CODE TO BE PRINTED h MULTIPLE DRIVE REWIND MUREW: CLR R2 ;USE AS DEVICE NUMBER COUNTER MOVB DEVNUM(R0),R1 MOV R1,-(SP) ;SAVE ON STACK BIC #MTMREW,R1 ;CLEAR ALL BUT DEFINED UNITS MURE1: ASR R1 BCC MURE2 ;BR IF BIT 0 WAS CLEAR MOVB R2,DEVNUM(R0) ;SET DEVICE NUMBER IN LIST JSR PC,MTINIT BPL MURE2 BIC #ENAB,R3 ; CLEAR INTERRUPT ENABLE BIS #REWD,iV R2,-(SP) ; SAVE R2 PCHR MOV R3,-(SP) ; R3 PCHR MOV R1,R3 ; SET UP FOR THE ASHC PCHR MOV #6,R1 ; SET COUNTER PCHR CLR R2 ; CLEAR THE WORD REGISTER. PCHR ASHC #1,R2 ; GET THE SIGN BIT PCHR BR 20$ ; GO TO THE COMMON Cj MOV #TYIOB,-(SP) ; LIST ADDRESS EMT TTYOUT EMT EXIT .PAGE ; PROCESS TASK ACCESS STATUS RLACC: TST R3 ; EQUAL SIGN DELIMITER BNE RLAC1 JSR PC,GWORD ;GET TASK ACCESS STATUS CMP R3,#1 ; TEST FOR SEMI-COLON BEQ RLAC2 ; RLAC1: MOV #62,R3 ; SET ERROR CODE BR RLKER ; ERROR ROUTINE RLAC2: MOV #FWASClR3 ;SET REWIND COMMAND MOV R3,@#MTCOMM ;GIVE COMMAND MURE2: INC R2 ;INC DEVICE NUMBER TST R1 ;HAVE ALL REWINDS BEEN ISSUED BNE MURE1 ;BR IF NOT MOV (SP)+,DEVNUM(R0) ;RESTOR RTS PC ;RETURN ; MUREWI: MOV DEVNUM(R0),R1 CLR R2 ;DONE FLAG CLR R3 ;DEVICE NUMBER BIC #MTMREW,R1 ;CLEAR ALL BUT DmODE AND CONVERT IT. PCHR 10$: ASHC #3,R2 ; GET A 3 BIT BYTE. PCHR 20$: ADD #060,R2 ; CONVERT TO A NUMBER PCHR MOVB R2,(R0)+ ; PUT A CHARACTER INTO THE STRING. PCHR CLR R2 ; CLEAR THE WORD REGISTER. PCHR SOB R1,10$ ; LOOP TILL DONE PCHR MOV (SP)+,R3 ; RESTORE R3 PCHR MOV n,-(SP) MOV #FWRAD,-(SP) EMT R50PAK MOV FWRAD,R2 ; PLACE ACCESS CODE IN R2 MOV #ACCTB-2,R4 ; SET POINTER TO TABLE - 2 RLAC3: CMP #30,(R4)+ ; TEST FOR END OF TABLE BEQ RLAC1 ; BRANCH IF AT END OF TABLE CMP (R4)+,R2 ; COMPAIR INPUT COMMAND WITH TABLE ENTRY BNE RLAC3 ; TRY NEXT ENTRY IN TABLE MOVB (R4),TSKAC ; SAVE ACCESS CODE JMP RLKGC pEFINED UNITS MURE3: ASR R1 BCC MURE4 ;BR IF BIT 0 WAS CLEAR BIC #MTCLR,@#MTCOMM ; CLEAR TAPE UNIT NUMBER BIS R3,@#MTCOMM ; SET UNIT NUMBER BIT #MTRWD,@#MTSTAT ; TEST REWIND BIT BEQ MURE4 ;BR IF DONE INC R2 ;INC IF NOT DONE MURE4: ADD #MTUIC,R3 ; INC UNIT NUMBER TST R1 ;HAVE ALL UNITS BEEN CHECKED BNE MURE3 ;BR IF NOT MUREq(SP)+,R2 ; AND R2 PCHR RTS PC ; RETURN PCHR ; PCHR ; OCTBIN CONVERTS 6 OCTAL DIGITS TO A BINARY # PCHR ; INPUT R0 = LEFT MOST CHARACTERS ADD. PCHR ; OUTPUT R1 = BINARY NUMBER PCHR ; STATUS BIT r ; PROCESS NEXT COMMAND ; ; PROCESS DEVICE PAGE COMMAND RLDEV: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLDEV1 MOV #71,R3 ; SET ERROR CODE BR RLKER RLDEV1: INC DEVPG ; SET DEVICE PAGE FLAG BR RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS END COMMAND RLEND: CMP #1,R3 ; TEST FOR SEMI-COLON BEQ RLED2 RLED1: MOV #63,R3 ; SET ERt5: RTS PC .ENDC .PAGE ; THIS IS A MAGNETIC TAPE CONTROLLER INITIALIZATION ROUTINE ; CALL IS JSR PC,MTINIT ; RETURNS WITH ; R3 = DEVICE NUMBER SHIFTED FOR A COMMAND INSTRUCTION ; R4 = 0 AND (N) BIT SET IF NO ERROR ; R4 = 1 AND (N) BIT CLEAR IF TIME OUT ERROR MTINIT: MOV #CLEA,@#MTCOMM ;ISSUE CLEAR TO MAG TAPE CONTROLLER MOVB DEVNUM(R0),R3 ;OBTAIN DEVICE NUMBER ASH #MTDVS,R3 ; LEFT SHIFT u PCHR ; Z = 1 IF NO SYNTAY ERRORS PCHR ; Z = 0 IF SYNTAY ERRORS PCHR ; PCHR OCTBIN: ; PCHR MOV R2,-(SP) ; SAVE R2 PCHR MOV #6,R2 ; SET COUNTER PCHR CLR R1 vROR CODE JMP RLKER ; BR TO ERROR ROUTINE RLED2: CMP TSKNO,TSKDEF ; IS THIS A BATCH TASK BEQ RLED3 ;******* CHANGE WHEN KEY SWITCH IS INSTALLED ********************** CMP @#SWR,#1 BEQ RLED3 CMP @#SWR,#2 BNE RLED1 RLED3: MOV #BFPCB,-(SP) EMT BFOPEN MOV BFSECT,TXTSEC ; SET TO READ IN TASK HEADER INFO CLRB TXTR.W ; SET READ FLAG MOV x MOV R3,@#MTCOMM ;STORE UNIT NUMBER IN COMMAND REGISTER BIS #MTINB,R3 ; SET INTERRUPT ENABLE ; CLEAR BACK SPACE FLAG AND SET DELAY COUNTER TO ZERO CLRB RES1+1(R0) ;CLEAR BACK SPACE FLAG CLR R4 CMP FUNCT(R0),#1 ;OPEN COMMAND BEQ MTIN3 MOVB @#MTSTAT,R1 ;LOAD WITH BYTE SIGN EXTENDED .IFNZ DATUM ASH #11,R1 .ENDC BPL MTIN2 ; BRANCH IF REy ; CLEAR RESULT PCHR 10$: ASH #3,R1 ; SHIFT OVER 3 BITS PCHR BCS 30$ ; ONLY ALLOW 16 BITS, NOT 18 IN 6 BYTES.PCHR CLR -(SP) ; SET UP TEMP STORAGE PCHR MOVB (R0)+,(SP) ; GET A CHARACTER PCHR SUB #060,(SP) ; SUBTRACT OFF NUMERIC BASE PCHR BLT 20$ ; NOT A NUMBER z #TXTLST,-(SP) ; PUSH LIST ADDRESS EMT NOCKPT ; STAY IN CORE WHILE I/O IN PROGRESS EMT DISCIO ; GO READ EMT CKPT MOV #101,R3 ; SET ERROR CODE TST TXTERR ; ANY ERRORS BNE RLKER MOV TSKNO,TXTBK1+2 ; MOVE TASK NUMBER MOV TSKAC,TXTBK1+4 ; MOVE PRIORITY AND TASK ACCESS STSATUS MOV MAXTM,TXTBK1+10 ; MOVE MAX TIME MOV DEVPG,R2 BEQ |ADY BIT WAS 0 MTIN3: RTS PC ;RETURN MTIN2: MOV #11,R4 BR MTIN3 ; .PAGE ; PLACE BUFFER ADDRESS AND WORD COUNT IN CONTROLLER REGISTERS MTBAD: .IFZ $KT11C MOV DATA(R0),@MTMEMO .IFF MOV DTPAR(R0),@#772354 MOV DTVIRT(R0),-(SP) JSR PC,SVPPA ; TO PPA MOV (SP)+,R5 ; LOAD PPA CLR R4 ; PLACE BITS ASHC } PCHR CMP (SP),#7 ; IS IT TOO LARGE PCHR BGT 20$ ; YES PCHR ADD (SP)+,R1 ; NO - A NUMBER PCHR SOB R2,10$ ; GO BACK FOR MORE PCHR MOV (SP)+,R2 ; RESTORE R2 PCHR SEZ ; SET STATUS AS NO SYNTAX ERROR PCHR RTS PC ~ RLED4 ; BR IF DEVICE PAGE NOT DESIRED MOV #102,R3 ; SET ERROR CODE TSTS TXTBK1+42 ; TEST TPRR 7 BNE RLKER ; BR IF IN USE MOV #77406,TXTBK1+42 ; SET TPDR7 MOV #7600,TXTBK1+62 ; SET TPAR 7 RLED4: MOV #TXTLST,-(SP) ; PUSH LIST ADDRESS EMT NOCKPT ; STAY IN CORE WHILE I/O IN PROGRESS EMT DISCIO EMT CKPT MOV #101,R3 € #2,R4 ; 16 & 17 IN R4 .IFZ DATUM ASH #2,R4 ; SET ADDRESS MOV R4,@#MTSTAT ; BITS 16 & 17 .IFF ASH #4,R4 ; SET ADDRESS BIS R4,R3 ; BITS 16 & 17 .ENDC ; DATUM MOV DATA(R0),R4 ; GET BITS 0 & 1 BIC #177774,R4 BIS R4,R5 MOV R5,@#MTMEMO ; SET BITS 0 THRU 15 .ENDC ; KT11C  ; PCHR 20$: TST (SP)+ ; POP OF WORK WORD PCHR 30$: MOV (SP)+,R2 ; RESTORE R2 PCHR CLZ ; SET STATUS TO SYNTAX ERROR PCHR RTS PC ; PCHR .PAGE ; PCHR ; READ0 & WRT0 READ OR WRITE THE PATCH FILES SECTOR 0 INTO OR OUT OF ‚; SET ERROR CODE TST TXTERR ; ANY ERRORS BNE RLKER EMT EXIT ; .PAGE ; PROCESS NAME COMMAND RLNAM: TST R3 ; EQUAL SIGN DELIMITER BNE RLNAM1 ; NO BRANCH JSR PC,GWORD ; GET NAME OF BFUP FILE CMP #1,R3 ; SEMI-COLON DELIMITER BEQ RLNAM2 ; YES BRANCH RLNAM1: MOV #64,R3 ; SET ERROR CODE BR RLKER RLNAM2: „ MOV NWORD(R0),R5 ;GET WORD COUNT MOV R5,COUNT(R0) .IFZ DATUM MOV R5,@#MTWORD .IFF MOV NWORD(R0),R5 ; GET WORD COUNT ASL R5 ; BYTE COUNT NEG R5 MOV R5,@#MTBCNT .ENDC RTS PC .PAGE ; DEQUEUE THE REQUEST MTDEQ: MOV R4,ERROR(R0) DEC NMTREQ MOV @#MTSTAT,STATUS(R0) MOV @#PS,-(SP) ;SAVE CU… PCHR ; THE BUFFER SZHEAD. PCHR ; PCHR ; READN & WRTN TRANSFER A DATA SECTOR VIA THE BUFFER SNHEAD. PCHR ; INPUT R4 = SECTOR NUMBER TO TRANSFER PCHR ; PCHR ; FOR ALL FOUR, AN ERROR WILL CAUSE A MESSAGE TO BE PRINTED AND CONTROL PCHR ; RETURNED NOT TO THE CALLER BUT T†MOV #FWASC,-(SP) ; ASCII BUFFER ADDRESS MOV #FWRAD,-(SP) ; RAD50 BUFFER ADDRESS EMT R50PAK MOV FWRAD,BFNAM ; SAVE NAME MOV FWRAD+2,BFNAM+2 JMP RLKGC ; GO PROCESS NEXT COMMAND .PAGE ; PROCESS PRIORITY RLPRI: TST R3 ; EQUAL SIGN BEQ RLPR2 RLPR1: MOV #65,R3 ; SET ERROR CODE BR RLKER RLPR2: JSR PC,GWORD CMP #1,R3 ; ˆRRENT CPU STATUS REGISTER SPL 7 ;INHIBIT INTERRUPTS MOV (R0),MTFRST ;PUT NEXT GUY IN THRAED AT TOP OF QUEUE BNE MTDEQ2 MOV #MTFRST,MTLAST .IFNZ $KT11C CLC ROR MTLAST CLC ROR MTLAST .ENDC MTDEQ2: MOV #1,(R0) ;SET LIST READY MOV (SP)+,@#PS ;UN-INHIBIT THE INTERRUPTS MOV SYSTEM(R0),R2 ;GET TASK NUMBER OF REQUESTOR ‰O THE MAIN PROGRAM TO ASK FOR PCHR ; ANOTHER REQUEST. PCHR ; PCHR WRT0: ; PCHR MOVB #WRTFN,SZFUN ; SET WRITE FUNCTION PCHR BR REDO10 ; PCHR ; PCHRŠTEST FOR SEMI-COLON BNE RLPR1 MOV #FWASC,-(SP) EMT ASCBIN MOV (SP)+,R2 ; R2 = BINARY NUMBER TST (SP)+ ; CLEAR STACK TST R2 BLT RLPR1 ; BRANCH IF NEGATIVE CMP R2,NPRIOR BGT RLPR1 ; BR IF TOO HIGH MOVB R2,HPRIR ; SAVE PRIORITY JMP RLKGC ; GO TO PROCESS NEXT COMMAND .PAGE ; PROCESS TIME LIMIT COMMAN BEQ MTDEQ1 ;BRANCH IF NOT A TASK DECB IOSTAT(R2) ;OTHERWISE, DECREMENT THE I/O IN PROGRES BNE MTDEQ1 MOV R2,-(SP) ;GO TO OVERLAY MONITOR SO THE TASKS CORE JSR PC,RELTSK ; CAN BE RELEASED MTDEQ1: RTS PC .END  READ0: ; PCHR MOVB #RDFN,SZFUN ; SET READ FUNCTION PCHR REDO10: MOV #SZHEAD,DKADD ; SET ADDRESS FOR TRANSFER. PCHR BR IOCA00 ; GO TO COMMON CODE PCHR ; PCHR WRTN: ; PCHR MOVB #WRTFN,SNFUN ; SET WRŽD RLTIM: TST R3 BNE RTIM1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON DELIMITER ? BEQ RTIM2 ;YES, CONTINUE RTIM1: MOV #66,R3 ; SET ERROR CODE BR RTIM6 RTIM2: MOV #FWASC,-(SP) ; ASCII STRING ADDRESS EMT ASCBIN ; DECIMAL ASCII TO BINARY MOV (SP)+,R4 ; PLACE CONVERTED NUMBER IN R4 TST (SP)+ TST R4 BEQ RTIM4 ‘ITE FUNCTION PCHR BR REDN10 ; PCHR ; PCHR READN: ; PCHR MOVB #RDFN,SNFUN ; SET READ FUNCTION PCHR REDN10: MOV R4,SNSEC ; SET SECTOR # TO TRANSFER PCHR MOV #SNHEAD,DKADD ; SET ADDRESS FOR TRANSFER. PCHR ; ’ ; BR IF ZERO CMP R4,#TIMLM BPL RTIM1 ; BRANCH IF OVER TIME LIMIT MOV R4,MAXTM ; SAVE TIME LIMIT RTIM3: JMP RLKGC ; PROCESS NEXT COMMAND RTIM4: CMP @#SWR,#2 ; FOREGROUND OR SYSTEM TASK BEQ RTIM3 ; BR IF YES RTIM5: MOV #70,R3 ; SET ERROR CODE RTIM6: JMP GWDER ; ERROR ROUTINE .PAGE ; PROCESS TASK NUMBER COMMAND RLTSK: TST R3 • PCHR IOCA00: ; COMMON DISK I/O CODE PCHR MOV #DKLIST,-(SP) ; CALL EMT FOR TRANSFER. PCHR EMT $DSKIO ; PCHR TST DKERR ; ANY ERRORS PCHR BNE 10$ ; YES PCHR RTS PC ; NO - BACK TO– BNE RTSK1 JSR PC,GWORD CMP #1,R3 ; SEMI-COLON BEQ RTSK2 ;YES, BRANCH RTSK1: MOV #67,R3 ; SET ERROR CODE BR GWDER ; ERROR ROUTINE ;*************** CHANGE WHEN KEY SWITCH IS INSTALLED ********** RTSK2: CMP @#SWR,#2 ; FOREGROUND OR SYSTEM ? BEQ RTSK3 ; BR IF YES CMP @#SWR,#1 ; BACKGROUND ? BNE RTIM5 ;NO, BRANCH RTSK3: MO™ CALLER PCHR 10$: MOV #MESS4,R0 ; YES- ERRORS DONE HERE. PCHR CMP DKERR,#9. ; FILE FULL? PCHR BNE 20$ ; NO. PCHR MOV #MESS3,R0 ; YES. TELL THE USER. PCHR 20$: JSR PC,TTYOUT ; PRINT ERROR MESSAGE PCHR TST (SP)+ ; GET RID OF CALLERS RETURN ADDRESS PCHR JMšV #FWASC,-(SP) EMT ASCBIN ; CONVERT ASCII STRING TO BINARY MOV (SP)+,R4 TST (SP)+ ; TEST TO SEE IF NUMBER IS ALREADY ASSIGNED MOV R4,TSKNO ; SAVE TASK NUMBER JMP RLKGC ; PROCESS NEXT COMMAND .PAGE ; GET NEXT WORD FROM ROSLNK 3 CONTROL CARDS ; ; INPUT: RO = FWA OF TASK HEADER ; R1 = CHARACTER POINTER ; ; R2 IS USED AS A CHARACTER POINTER TO THE ASCII BUFFER ; ; OUTPUT:P STAA00 ; AND ASK FOR NEXT REQUES PCHR .PAGE ; PCHR ; INTERP IS USED TO DECODE AN OPERATOR REQUEST INTO IT'S OPCODE AND PCHR ; FIELD VALUE(S). SYNTAX ERRORS ARE REPORTED TO THE CALLING ROUTINE, PCHR ; NOT THE TTY. PCHR ; THE FIELD FLAGS ARE USED CURRENTLY AS BINARY VALUES. PCHR ; = -1 IF NO VALUE IN THE RELATED FIELD ž THE WORD WILL BE PLACED IN (TMASC) AND R3 WILL INDICATE DELIMITER ; R3 = 0 EQUAL SIGN ; R3 = 1 SEMI-COLON ; R3 = 2 COMMA ; R3 = 3 RIGHT PARENTHESIS ; GWORD: MOV R2,-(SP) MOV R4,-(SP) MOV #FWASC+6,R2 MOV #20040,R3 ; 2 SPACE CODES MOV R3,-(R2) MOV R3,-(R2) MOV R3,-(R2) GWD1: CMP #LWCRD,R1 ; IS CARD BUFFER EMPTY BEQ GWD3 ; BR IF AT END Ё PCHR ; = +1 IF THERE IS A VALUE PCHR ; PCHR ; THEY DESIGNED TO BE TERTIARY WITH '0' REPRESENTING A VOID FIELD. PCHR ; THIS CAN BE ADDED AND IS DESIGNED TO AID THE USE OF DEFAULT VALUES. PCHR ; PCHR ; INPUT REQUEST CHARACTER STRING IN REQBUF PCHR ; OUTPUT ЂMOVB (R1)+,R4 ; GET CHARACTER CMP R4,#SPAC ; SPACE ? BEQ GWD1 ; YES BRANCH CLR R3 ; R3 = 0 CMP R4,#EQSN ; = ? BEQ GWEX ; YES INC R3 ; R3 = 1 CMP R4,#SCOL ; ; ? BEQ GWEX ; YES INC R3 ; R3 = 2 CMP R4,#COMA ; , ? BEQ GWEX ; YES INC R3ЅFIELD & FIELD FLAGS & LETTR SET. PCHR ; PCHR INTERP: ; PCHR CLR FLD1F ; CLEAR THE FIELD FLAGS. PCHR CLR FLD2F ; WITH ONLY 2 VALUES 0=-1 IN MEANING. PCHR CLR FLD3F ; PCHR CLR LETTR ; CLEAR THE OPCODE І ; R3 = 3 CMP R4,#RPAR ; ) ? BNE GWD7 ; NO GWEX: MOV (SP)+,R4 MOV (SP)+,R2 RTS PC GWD7: MOVB R4,(R2)+ ; NO, PLACE CHARACTER IN TEMB CMP #LWASC,R2 ; COMPAIR CHAR POINTER WITH END OF TABLE BNE GWD1 ; NO MOV #71,R3 ; SET ERROR CODE BR GWDER GWD3: ; INSERT ROS CARD READ COMMAND MOV #CSIOB,-(SP) EMT Љ PCHR MOV #REQCNT,R4 ; GET ADD OF CHAR. CNT. & STRING PCHR MOV (R4)+,R5 ; GET COUNT INTO RT. R4 POINTS TO FIRST PCHR BLE INTB20 ; SYNTAX ERR. CHAR. CNT MUST BE >0. PCHR MOVB (R4)+,LETTR ; PUT OP CODE INTO SLOT. PCHR DEC R5 ; DEC CHARACTE COUNT PCHR BEQ INTE00 ; ONLY OP CODE - ALL DONE AND OK. PCHR CMPB (R4)+, CREAD ; READ A CARD MOV #FWCRD,R1 ; RESET CHARACTER POINTER CMP @R1,#DOLR ; ROS 3 CONTROL CARD BNE GWD1 MOV #63,R3 ; SET ERROR CODE GWDER: JMP RLKER ; ERROR TSKND: .END ­#', ; IS THE NEXT CHARACTER A ',' ? PCHR BNE INTB20 ; NO - ERROR PCHR DEC R5 ; COUNT IT PCHR BEQ INTB20 ; RUN OUT? ERROR. PCHR CLR R0 ; SET UP FOR FIELD #1. PCHR INTB00: MOV #TEMP1,R1 ; GET ADD. OF TEMP STORAGE AREA PCHR MOV #6,R3 ; SAVE A SIX - USED A LOT Б PCHR MOV R3,R2 ; ZERO 6 CHARACTERS (WITH ASCII ZEROS) PCHR 10$: MOVB #060,(R1)+ ; AND LEAVE R1 POINTING 1 PAST LAST PCHR SOB R2,10$ ; CHARACTER. PCHR INC R3 ; BUMP MAX FOR 6 CHAR PLUS A COMMA. PCHR MOV R3,R2 ; SET COUNTER TO FIND FIELD END PCHR 30$: DEC R5 ; COUNT THE TOTAL STRING LENGTH. PCHR BLT INTB34 Е ; IT'S RUN OUT SO WE BETTER DO THE SAME PCHR MOVB (R4)+,-(SP) ; GET A CHARACTER ON THE STACK. PCHR CMPB (SP),#', ; WAS IT A COMMA? PCHR BEQ INTB32 ; YES PCHR SOB R2,30$ ; COUNT IN STRING PCHR ADD #14.,SP ; MORE THAN 6 VALID CHAR. RESTORE SP + PCHR INTB20: CLZ ; SET SYNTAX ERROR Й PCHR RTS PC ; RETURN TO CALLER PCHR INTB32: TST (SP)+ ; POP OFF THE COMMA. PCHR INTB34: SUB R2,R3 ; GET NUMBER OF CHARACTERS BLE INTB20 ; ILLEGAL # OF CHARACTERS 10$: MOV (SP)+,-(R1) ; POP CHARACTERS IN REVERSED ORDER SOB R3,10$ ; INTO TEMPORARY STORAGE MOV R0,-(SP) ; SAVE R0 MOV #TEMP1,R0 ; POINT TO CHARACTER SНTRING JSR PC,OCTBIN ; AND CONVERT TO BINARY NUMBER BEQ 30$ ; STATUS OK TST (SP)+ ; RESTORE STACK BR INTB20 ; ERROR RETURN 30$: MOV (SP)+,R0 ; RESTORE R0 MOV R1,FIELD1(R0) ; PUT VALUE INTO FIELD MOV #1,FLD1F(R0) ; AND SET FIELD FLAG TST R5 ; HAS THE INPUT STRING RUN OUT BLE INTE00 ; YES, THEN STOP NOW TST (R0)С+ ; BUMP R0 TO NEXT FIELD CMP R0,#6 ; DONE WITH ALL THREE BLT INTB00 ; NOT YET INTE00: SEZ ; SET STATUS = ALL OK RTS PC ; RETURN .PAGE ; DECODE IS USED TO BREAK A PATCH FILE CHAIN WORD INTO IT'S SECTOR AND WORD ; VALUES ; INPUT R3 = CHAIN WORD ; OUTPUT R4 = SECTOR NUMBER ; R5 = SECTOR RELATIVE WORD NUMBER (AS A BYTE ADDRESS) ; DECODE: CLR Х R4 ; CLEAR OUTPUT REGISTERS CLR R5 MOV R3,R5 ; PUT CHAIN WORD INTO R5 ASHC #9.,R4 ; AND SHIFT SECTOR NUMBER INTO R4 MOV R3,R5 ; THEN GET THE SECTOR RELATIVE BIC #SECMSK,R5 ; WORD NUMBER IN R5 RTS PC ; DONE TSKEND: .END