' JJJJ ?\>' L-=l>  ԠéԠˠ#~?  xDIR ERA TYPESAVEREN USERY!yO#< Ty#O 3ǯ21y_͸2y2ͽ:ķ˜1͘A͌>>͌92^ :˷¥.!_~#fow]ɭʎʥ!v"!çREAD ERRORçNO FILE^:˷#͘*~ "Ʒ"͌#>?͌͘ =_.:;<> Oƅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  Ň!˶2:2a{_:˷ʖ:˷>Ľʖ:=2–!B!6#5ʖ:˷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<į2: :):>:(y2E!|"*wɍ`JX)^>EE??++ ԩ  [\ ĭ ?  JL ``LLL $Lq<`ΧԠĠڸčԠԠ͠Ԡ؍2>o:= gw8H<8H=` }Hx / hJ Leh<> > @A @A>i =<>+ LeÍڍh@(L>*// -П( ( $8` %  ZNx`. }x$50x.$50xL JJJJ`Hjf5 }h $50x`  Ȍ` Hx  -(hL(h8֩`Lx (`H݌hHhHh݌>?F؅G(jf5(  ;  R( FGj 0x j $xxH` ( Rh RL.xxH h  !"#$%&'()*+,-./0123456789:;<=>?x&& 8 , P ; ' / \ ; & ; x)*++`FGG8`0($ p,&" cI꽌ɪVɭ&Y & &Y &   꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`V0 ^ *^ *>`+*xS&x'8*3IxiU ,>J>V J>V `8'x0| &HhHh V Y V '&Y V x ꪽV ' `Hh` ! ~ 3#0 Wx x ƀ Ƃ G ~ # 3x~#B!Y~ɯ2:˷=!˾ý:˷=!˾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ɯw4!Y~ʆ͌†t=ʆf ^ T ɯ2o&)|+!<ͧЯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ٷ:ddslO s#r:EϷ͊:==»y==»*Ww#*"͸*:G#š"͸:!پw4!iw:Z!E~=26 w ~>2!E5T*C!"C"C!w# F! w͌xѯ2͢*C ~<wʃG:٠!٦ʎì 4~ʶ¬:<ʶ$ʶïZͻЯx>2>2ͻ:!پZկ2:EϷẅ́͊Ͳ> *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyxʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :ٷ~w~͔͔# # ::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sӖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5:AϾ#~$=2Ek͌ ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:مo$*C~i6iw**{#zr+s{ozg**͕** Ѿ,w͜͸Ͳ!!N#F$**O!~#O: \зSЀ*C :ٷqn& ^#V>O^"*}:*)=":O:١o"*C *C!ͮ~2~2ͦ:٦2ͮ:ЯO:فw:w |g}o*ٯ# 2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>گ*w#w*w#w'û*ڷ! J*""!N#F*^#V*~#foyx*{_zW+*x: 2 p&x~+é7ͯ2 H! >w_: ! Ͼ5ͤNkͱ¦ͱxʊ#Nx: Ϸ! ϖ2 ͤ! 5™#wO~x½p Hy<< ڷʑ :!qMD# O͐  :ϷE B 2>: Ϸb# : Ϸy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! Ͼ Hù H H $O͐: 2 *CN# ʽY̙̥̫̱"C{2!"E9"1Aϯ22!ty)K!G_^#V*Cΐ~؃E؜إث ,&-AGMSϛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6=qf^!~2>`~2˯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !˶ Â$$$ SUBÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yʸpsp2mÆÆf ͧÆFILE EXISTS _: É: :˷ʉ=2)ͽÉ T!@k!}|qs+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!BϾw!>2*C~=2u:B2~2wE:A*C϶w>"!""ٯ2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*٤W}_*"}o|g":ٷʑ*C6:ٷʑw:2E**E}DQ>2C0T"I !>"H>2J: !͢:d::d!s~B#1!P!J߇o~,foɷp:BB Apple ][ CP/M 56K Ver. 2.20B (C) 1980 Microsoft ;ۯ2>EE??++B#1!P!J߇o~,foɷp;ۯ2:޷;ۯ2e ]~6(*} *:޽ y(3:޷s:2G<2x/a2:oa":޷zޯ2{![:޷ <2:>sɯ2>!>2!;:*     1>2>2*"?ۯ2:08 !"Y"BT"->2:8Y"/:8Y"F~!xq!;`~0,~!M;!x~1.~8[q>:޷ 2y2!!{o!:=8 ~y!3w.y2Cɯ2>!w#w#wOa."y .:g"*"!~((5:# :*޽ :޼ $| 8g,"ޯ2!"_!ޅoN!޷((+! ~O#O:x >2ޯ2:޷*(*D*:wk*(:$_"~28 ?@wx( !;!܅ony 2$8!2E!y>>?22!ɯog"$2E!.B...X&*}(8.|8&"$պ`~(,qy2E[22G: 2:O*:P!O#~#'۹~y/:02?"2O: K*:*(0**:8'(*:08* *: 8(*7!w˹#~(=5:!( +_ywɷ+ͱ*:]lc_O{- OMG!~_ :( 6>83! ~èCfuÇKmVÉÎÓãݯ`iޓښ:ޓڦJޓڲZޓھjޓzޓߊ / !~ `66= !; !{g1:Q!͢گ22>2!"2!"͎>2PASCAL PCO PASCAL PCO !PASCAL PCOPASLIB PCOL"#$%&'()*+PASERRS TXT(,-./0TESTP PAS12INSTALLPSUB3DATTIM COM 45Gj[?[i[ `bba`i[a`[b:Y$M(i[`i[i[i[b,b` b+[YaY YP])]Pb+$b+(L•ʁ“LZb2Rb+M'H'M(B[B `Aff[Bʄ9ʄ9`[ i[]!\ [?dib bLine #Q$ , Error ##`$(` 2`2 =continue, =quit? # B$`?cZ` cWʃ4Z ZF` ʃ4Z bb?Z Z?bbʃ4Zi?b?b?Zab`ci? ??i? #JRIR @i[[[\ i[ i[[[??9 Di[PRUN COMn6789:;<=>?@ABCCONSTRLZZ800DEFGHICONTEST PAS>JKLMNOPQCONTEST PCORSTCONSTRL ASMbUVWXYZ[\]^_`aPRUN20 COMdbcdefghijklmnCHASE PCOopCHASE PAS*qrstuvʁ@fUUX[ZXXUUWWW.UWUUSWWf ʁ@`USWW-D X" ʁ@ʀ,#ʁ@Z[X#!. :ʁ@Q$ʁ@!ʁ@R$?ʁ@ a a a 2v1  *`ʀbaЍʀbЃaЄ  8`N`NMZP`ʀʀ :VVʀʀʁ@(ʁ@ʀO]!ʁ@V$ʁ@U]ʁ@ ʁ@]#ʁ@UYi[ @[@ @@ [[??F\( i%i:! Wild character= #Y$i]?441a\'`bb  iaba`4a?ia w PASCALM INIT DECLARE g4BODYSEG 5b1 GETPARM + 03/06/8009:00Sorcim PASCAL/M Compiler. ʁ@i?]!ʁ@B>#9RIPGʁHp$e# \  <"A  f Bw b)ʂ%adBII dqdpaʀ:BII ʀCBII ]]BI'AhhBabU``cs`csy 8 \ \"`\6 bbq btbsU bbw`ʀ2 \ʀ\%5NU" f+ fNfYEYe9i[[Y-Y+Y-i[[!abcY#zdmm` pm`'`o ~~i[[!ad oad4` ݏp ݝ dDIʂ`p`MYʂ%MDID)L^"Bʁ B3&#`{`a`Ba8a.a &a! undefined#uat$G`BP#au$$KF^`bdfhjnpvxz|~32>\/Y &  2ʁHpb ʁH`8b`/ceat at`/c= ['(i[-(') i[ [ [ =>))i[= [  {  "$&(*,.2468:<J/XZ\ʁ@''`QL&ʀʀ \,nof f``#` Errors,#`Q$` Lines,#`Nd$`00 bytes not used. (ver#`03.05#`) `(ǁ@ǁǁ ǁǁǁ#nn P#nnn procname levN (***** bytes))LlH x ʀ8ʀʀʀ|ʀʀtʀʀʀxʀ(ʄ9 ghʁ@  LENGTH INSERT DELETE COPY POS MOVELEFTMOVERIGH+TIME 2EXIT .SCAN#ID /FIND#SYMREADXY FILLCHARFILEREADFILEWRITdINTEGER d Kda adREAL d Vda adCHAR d Uda adBOOLEAN d Wda adLONG_INTd Xda adSTRING d +da adTEXT d .d V &EXP V 'SQRT V  bf -ffMARK  RELEASE  3HALT  IORESULTK MEMAVAILK ~ ""*ʂ%`$$$$ `"E©3 3` ` `` ` ` ```` ```dbH`Aa  i jjj jajjdjci6 XREAD READLN  WRITE M%ʁ@(A&*( ǁ@ǁ ǁsdj48X <Z$p\2,PJ @ ^ @ h * jP(' SET_NEXT)SIZEOF *WDECA * WHEXA +GOTOXY +OUTPORT ,INPORT - SIZE - NEXT .PURGE /ASSERT \cHaDb   iii֮SCREEN REWRITE RESET  FILEBUSY!CLOSE "GET " PUT #(PAGE $ SCAN %OS#VFD &OS#OPEN &OS#CREAT&OS#SDIR &OS#CLOS &OS#DELF a adINTERACTd ,da2 2dINPUT d .ddd21 1dOUTPUT d .ddd1 adKEYBOARDd .dddadM af WcfTRUE f#ghA R`VWfQB~U^X[DYZCdeF _)%L]ʀ /&:ʀ^  Line. AddrSorcim PASCAL/Mʀʀ)+ʀ:ʀCPageʀJʀ* ʀ(SWRITELN  EOF EOLN -CARD PRED SUCC ODD  ORD  ABS  SQR  TRUNC  NEW  DISPOSE  CHR CONCAT K```V```X```U```W```--```..```U,,```U+ +``P```K` ` `U`P adibi `i Z  af Kff `f VffaCONACT  (EXP10 V (PWROFTENV *RANDOM V ` ROUND K !SIN V "COS V #ARCTAN V $LOG V %LN `7 7` ` ```6 6` ` ````5 5` ` ```4 4` ` ` `` `` ``` ```FALSE fcf`faacWa add -dNIL dda add KdMAXINT dabddd adMAXLINT d Xddba8 8` ` g3UIIDI$RIGJSKQ*THMGLMM'(I_$`ʁ@ST?i Oan8   / 03.05# ʁ````NNb刣 ba`ab` ba`4 ` `cpTacqIbbb8cr#c^^^^ʃcrcqcrcrcr%cBIa IIcbI CW```paa `EEpDDpEp  PEpʀPAS 4PEpʀ*! Input file not found.# 2Ep PCO .! Input file suffix is .PCO# 2ʀ0EpʀPCO ʀ ʀNULL:PDpʀ bbЌ b,$\` 2)# @``Ќ*``` >ppa`a<bbЋBI`I BIaBI`I ``? BI`I "```BII @` BI`I `BIBII 8E`q`BI`qI`q &cbE Suppress Pcode# D- Suppress Line # code# G- Don't allow GOTO#& R- Suppress value range checks#( S Swap mode, for large programs#+ `P4 Pa.aNʃhʃ’I0C= ʁ````J =0 0``J`PROGRAM ` ````` M`` ` ` \!i\,ʀʂ%M0 00` `PFb=b;a-AAb @@bEʀLP: 9ʀ#err# +DU$BH 1T-^`bd`F  Source file name, options: #ʁʁ2ʁ?F Fʁʂ2@@ʀ0bEpʀPRN ʀCʀ 2@@Cr@@M@#Ep]SYM ]ʁ*] 2`w `P=aPPaPR( ```b'b'0bbЌbb2   bh `bbaadZa(,d)ad bddadbbaaaad adadad,a aabap aCaa&aacb`p`a bp0` na` aɈ` @`,aƈ` ``aՈ`p`a`H baccaaa``, bڈ:a aЋ4aǀǀPaVPa8a.a aЋVaǀǀPa VaPaPVbVV V a-aP)b -- - -PaȀǀ4PǀVǀ.ǀ-ǀP\\(ʀ\\;< <```0`J`P`H` Z``;i Xh (  Gʀ0Pʀ\PʀPʀ0Pʀʁǂ\ʂGpʂGpǂ\PʂGpȂ\GƂ\<ʂGGp ʂGGp Hʁʁǂ]IHǂ]Pʁ GFʀ0F F'! Command Line Error#2Bʀج2 :B$ D   PASCAL/M Command Line contains:#)1) Name of the input file to be compiled;#$2) followed by zero or more Options:# L=file Specify Listing# P=file Specify Pcode# P=0  , aac'ocaccacacccdcdc'ac ccdcdcdccecc1cccccdac'cceccccccccd6f"7}`cqccIca})a aa BIb`cq 6RCDCVCXECqEC-bE=FG PFG 8F 1+CpCp  D0+' ^ C   v0"#C Cqt\C\7LOCK PURGE `&x1"#C,CqtCrt( CrUt&J2#CIGD<`D/CU(EeeeEE C+ CC}+ v% T&"#C(C hqhrhr ipiqist\" dacaq%CV`CX `:a412+56}7y(u0q.m8i9e/^FHFHFDCNKC @VC 2XC $UC C Cx T\ LLa:& ;1\7^ bv'bvq bvrUb\"\\c:&C` `q\adC\CC kqkr kqXKVNU f+ fNfX \EDCWEC CWmFi0b)h d ddd dv@ p? ```\e4 eo"e€"e;<=C Cq}fKC!CqCVmfD sC %:5 #6"#CCqt CrUt')\ CKt K&p7 %&8I C0CW&D` EO B jjj\ CCq rCDE E   I \KrC`DEE `   ,to"u{u{uwusqsqomkPkiLiwigg\?h ("dpqdpC``;AddpC0CKcc CVbbCXaa hAapWCW`!&C CKt`K$ z`V1\#"C CKt' D`X% :`W" 0`U &``# `! tT\ LLc:& R<4 #CCq})"$&(*,.02468:<>@BDFPRTVXZ\^`ʀ EE\'] EdCMj9 A=VA/ A$AB @5CKCX}WCCq}D KCfCCVfCX}K'C CK}D U, %K%\%Cx\ C CK}f -$` N9`a*a a PaЄa (a a PaЄa h:2\8 `v'`vq `vrU`\"\ \a:"#E㩳aC\ LL\ EEEa19RT[~F\ʀ:ʀ \ʀ\^ d d"'dd kvk a~"CaEavab3a b! DEb\@aaw\\a~dd dndd Md d Dd d0dP dCrU}2: WcT="#C Cq}\ %&X>7Cq!-)"C ( F@dwdd\C\)DCCUC Cq] CDCCU C CqdCi*CqdCrdCm G lGmCldgdCdp dqdV dW dXbcpq+cpVmcpX ddcpKcXJ`\   a kݝ f(gXgggg2aXK T99\#ZHʁeqeʁesf!f ipOirpir iq\` Q I`\ \ʀ\z| d d"dJL\  nKg倜\ LL(* 2LDCWd EI a\ 4 Id cb I\ -d `aIdcb `da MSCaaqaVaX\ gIʃgpgR RhۄhI`IZP))ʂ%MdDIDʂZD$ikPUU  6Z P  HfT d`"@Zf@ \R3 JJ JRJ\] @RgS7@ hffg g jf i`dS\6If Xd d j  i< xi( f ddw  d i<7i< % 3p`3#ijk WX :8``awax ` ap 0H@$. #ʀ#`  ʀ fʀBIfIf wbTb hvEh,hvqah a hvHahvphahw\JʁHsd ddqʁHrbRb hv h h irM`NYPROKQDT=6  "$&YTHQE@l hNhNIdP \& 99H{ IKF2^ʀX*& Qg  a\a`Neddnrf nrf dnpbndnfnIcbcb\ LL\I\ʀbi\ LL\ \ h`D @!!t""b##$$,%j%%H&p&&,*P*'l **<+++,,-..N."-p../P////X0x000(1H1U7<7<<<<<A<<:o::3C?CKCWCWCWCc:93C9?CWCWCWC?C9WCWCKCKC higSg Q\ 6B`CyCqnHbH bʁHcCrEʁHccFcG,J ʁHccJJ aJRJ\ LL\6IHb Ja `\bC ECqa!a0a hq#aH!3CJJ\#QHʁbqbʁbs`a`cpO crcqa7T pKI\hv,irUirp hwI\ʀ\ LL\  IʁHrbb h  hw,vccvpʁHsdd hr ip iq}hq^II @`\6Ia`DPC C&R` ` S\x   kvkkkcP`'`qX``qV`Ligeuer edpdedcder kjI hm4ihenrk Ilk Inqnpk ei\  ?>gN`L\ `5 :Oagagggݰgݰ` `ʀ \ʀ\H ʁHqH gmmm \4 imm gmhmkmik i " \ghj \\ / \*\* \\( \\P\0   v   q x (  \C  `` `f f  afsf frfrqfrfrݰfr }.fftfvfv - }.ffݰa `a  \ b4b b!bbbba a apb bbb`bbB aaa\ %  % !  \\  \ bee e\)]bb c/a)ab avbva/`awaw/aaw\ /u/e \1 bffw gfi\ `).n"    ```\l%  % +  ``  `/` /% v vqI   vlf f.fq$fVcfKfX i imvm{ivg+\d  fK4ll P lP g+ gmlml\ g`gp  f ag a3Ix bxbeq`bKbVbX-bj hʁHpgjl \  X\*L\.G h\  hgg hgph ah aap``app'). \#QʁHbs`a`p `sr   a`a`$` aapaatʀ  \ʀ\ʀ a`\ \+ʀ  \, \-H HH ʁH V   v9q,Vm  ` n   \      rrv o  aeeaee ePbbʀ \ LL\aʀa@ae ceJJd ewew ccqeʁHrʁH`\ \\ʀ/uˈfqebfd> \    fffaf  a  `qp \ LL\ \     ql #af d dcdd5erer ccc gi3O`bvH  b bbb3  bb bv  bvp aAO`qa`cOccbsb`  \ LL\ƌz  \ `cc cc\)] \ `` a`\  ^^   \f\ g ii  \ LL\ n nqlgfg nggwi\ ! a aa    \ LL\\ \ (     % r       \ \ L L\ ` `P    \ LL\_\Q   v   %  qy q p J (  J \wFFۣF2FF4FFFDABBA(F2FpCF8FAF6FACADADE`F2CF2F@F8FYQFۡ@F8FF.FF6F4E@FpF3@q3! STACK OVERFLOWP3 @q@p@|`@r  @p @ S*(BCCCCCA@@CpC*@C@ CC*C*@@d@B0d a dff d J PY M`!C_CCʂ%MYYYa dydwcQcvAgJg !FFF2FFFDABBA!F8FFpCAF6FACADADEF2*F2F@F8FFF@F8FF4AFF3FF.FFFF8F 2," 4 <RN ,\! \v \ \ g gg go jowiihf \ \ `JhfhowofovLoomm)AA@A?@)AA2 A6A4A@pA`CCBC BACCC.C2CC@ C,C,CCbC2C2C4C6@C2 CBBBBBAB,BB2A B4BBBBB B4BAiB2С3BB8BBDB @B8BB6B.BB8B8BB2 B2B@B8BB.  vpgJg cwMd ۉd Y`4P H ZddZʂZP PH/H ʁHfdwadfdcr dfdc\R\6fz F4F8FF6E@FpFFFFFFp Fp FdFp&@Fp AA Fp F0A8@FpF2F4FFp  FF FF@FwPASLIB  PRINTERR, INITIALI03/05/8015:00Sorcim PASCAL/M Library.4o*ovqommovpoJJovp mhg afax* `>) DeM CYY\\bJ a J JR#X\ʀʁHpdfNdd ad$d4C6B>#B p $B@BB)CCCC@CC ABd   ` << < >tz&KFF2\\p \\\PH=\\dd!\e\ʀ \ʀ>Rcvd eeeq xd  f{\d \"]T`  eKj h  d  hfd \ ji  oZ`nYk;  F + 2 @@ۡ@@@@p @@@: BABA@BpBAB6      %      DA7'& ('ABЃ@ABBABABЃ(@CCBЃA4B@DB@B@CЃDDCB@CBBCЃNBPA@A@CЌCAB@B@.A@0BA@C BACBA@BD:D0D)DDDD CC V AFFFFF2A)@FF.FF6FF@ FZAF8FFF dGݏcݝ`d02GQcd6 X0    AAp &2 - - +23A`A`p `ۡA+A`p *B4  9A+  i12 @ I AI2  ݑ- ((EE(#EE((@IE(IEIE((E(EI$ U @.AAA v02<r,A,@ A, @ @ 0&A, @   @ ݰ@ 6B BBȀɀɀ EZ*Cp B B    Cr(   B#*\+BB  @Bۡ BA+BA '@A,2Ar ,2      @EAEA @A@ 7h@p @ @p @ D2`Dp D `` D2B8DBBBAE @EABABABA8AF2B@@BFpC@D @ DC@B.FF4FFF8F4F8F   @:aaaaDb a`b` aa,E P6A@  A- ݰ@6EAED0 R-AAp g gpi.12[ h5   43 @ @ 5 .2 5 E e23 HF0F(hG  G0@_.  eE  -EE H HE 0H HE 0HiE#EE.GAE0.E0 EIE IAЋɀɀɀɀɀɀ2Сɀˀɀˀɀɀɀˀɀˀ]ɀ2ɀˀɀɀ>Bɀɀˀˀɀɀɀɀ    T-A,2Ar ,2      J.b/2bafDec,c0d ca dcA  `pd``peN ~/`bap/aeapf,EE80 7AB@7 CBA@7!BA@A7#True PA FalsePB@70"A @@ЋB@70$@@ЋC@70%AG ݚ" ݝ WQ. Q WаWS ݰ   E0W.G RH FD/HW DC/HW WW:: VWV(:H H( H(Sݑ  5T #F0GgHGQ !AQ AaQ a0Q0122 5z1  1UTQF0G SG W G Q WDBACBB@BCSCBCЄCED3EDEFBE EDBECCEE:Xft j D r Tr D,j8 R ~ $(d`D # V aCurrent dynamic length= #`$, Illegal index value= #a$" pa`"  @a@ File at ##h is :# d@`D(AHardware parity error(Unknown device specified(Illegal I/O direction(Undefined hardware error( Device referenced is not on-line(File not found on CLOSE(Illegal file name(No space for filgL.4b`\&hIORESULTK MEMAVAILK ~ ""*ʂ%`$$$$ `"E©Set element out of range(fPointer invalid or Nil(HAssertion failure(/( eQ'  ~`D ! ##; At #a-^*  Value= #%8(p8 CKt K&p7 %&8I C0CW&D` EOɁ nrk lnrknrk m`nrk  f``yEab kqabksFktge,beF ku    #ffgfk` )B & DD `/ p B&G C 62 .*%- 35,.,&,V` b`a`Ѝ b`Ѓa`Є ( b  a a*PASLIB* nrа nre(9("File not found on volume specified(Duplicate file name(File already open( File not open(xError reading Real or Integer(RPut not at EOF(; End of file(' {\5rN9 IOEnter new value: #& 8`)DValue= #`$`) , Limit= #`$\Value= #$$Value = #Nil#  16##++`**``CONSOLE:P+**rCRT:Pr+*/ 03.05#V4:s $S#ss P#ppp procedur I#iiii sp=1234 < (  Line #$CE=continue, =quit?# D D CC ( 2 Resuming...#ed(Stack overflow($String length exceeds declared limit(Can't read Pcode file(Programmed HALT(Program interrupted by user(String Index out of range(Illegal EXTERNAL reference(Case out of range( error: (? Unknown run-time error(BDivide by zero(Exit from uncalled proc(Floating point error(Illegal PCODE instruction(Integer overflow(Value range error(Non-existent Proc/Seg call 1: Error in simple type 2: Identifier expected 3: 'PROGRAM' expected 4: ')' expected 5: ': ' expected 6: Illegal symbol (possibly missing ';' on line above) 7: Error in parameter list 8: 'OF' expected 9: '(' expected d 190: Error in compiler directive 201: Error in Real constant - digit expected 202: String constant must not exceed source line 203: Integer constant exceeds range 204: Digit exceeds radix. 250: Too many nested scopes of identifiers 2ust be Boolean 136: Set element type must be scalar or subrange 137: Set element types must be compatible 138: Type of variable is not Array 139: Index type is not compatible with declaration 140: Type of variable is not Record 141: Type of v 58: Error in (bad expression) 59: Error in variable 101: Identifier declared twice 102: Lower bound exceeds upper bound 103: Identifier is not of the appropriate class 104: Undeclared identifier 105: Sign not allowed 106: Numb 160: Previous declaration was not FORWARD 161: Previously declared as FORWARD 162: Parameter size must be constant 163: Missing variant in declaration 164: Substitution of standard proc/func not allowed 165: Multidefined label 166: Multideclasing result type in Function declaration 124: F-format for Reals only 125: Error in type of standard Function parameter 126: Number of parameters does not agree with declaration 127: Illegal parameter substitution 128: Result type does not agree 10: Error in type 11: '[' expected 12: ']' expected 13: 'END' expected 14: ';' expected (possibly on line above) 15: Integer expected 16: '=' expected 17: 'BEGIN' expected 18: Error in declaration part 19: Error in xpression 148: Subrange bounds must be scalar 149: Index type must not be Integer 150: Assignment to standard function is not allowed 151: Assignment to formal function is not allowed 152: No such field in this record 153: Type error in Read ariable must be File or Pointer 142: Illegal parameter substitution 143: Illegal type of loop control variable 144: Illegal type of expression 145: Type conflict 146: Assignment of Files not allowed 147: Label type incompatible with selecting eer expected 107: Incompatible subrange types 108: File not allowed here 109: Type must not be REAL 110: type must be scalar or subrange 111: Incompatible with type 112: Index type must not be real 113: Index type must red label 167: Undeclared label 168: Undefined label 169: Base type of set exceeds implementation limit 170: Value parameter expected 171: Standard file was re-declared 172: Undeclared external file 174: Pascal procedure or function expectewith declaration 129: Type conflict of operands 130: Expression is not of Set type 131: Tests on equality allowed only 132: Strict inclusion not allowed 133: File comparison not allowed 134: Illegal type of operand(s) 135: Type of operand m 20: ',' expected 21: '*' expected 50: Error in constant 51: ':=' expected 52: 'THEN' expected 53: 'UNTIL' expected 54: 'DO' expected 55: 'TO' or 'DOWNTO' expected in FOR statement 56: 'IF' expected 57: 'FILE' expected 154: Actual parameter must be a variable 155: Control variable must be local and not a parameter 156: Multidefined case label 157: Too many cases in case statement 158: No such variant in this record 159: Real or string tagfields not allowed n 119: Must not repeat parameter list for a FORWARD declared procedure 120: Function result type must be scalar, subrange or pointer 121: File value parameter not allowed 122: Must not repeat result type for a FORWARD declared function 123: Misbe scalar or subrange 114: Base type must not be real 115: Base type must be scalar or a subrange 116: Error in type of standard procedure parameter 117: Unsatisfied forward reference 118: Forward referenced type identifier in variable declaratio51: Too many nested procedures and/or functions 252: Too many forward references of procedure entries 253: Procedure too long 254: Too many long constants in this procedure 255: Too many errors on this source line 257: Too many externals 25Writeln( WRNFIL, 'PASLIB.pco = Pascal library.'); Writeln( WRNFIL, ' TESTP.pas = Pascal test program source code.'); (*This file*) end (*end Filetext*) ; begin WRITELN (' ', VERSION); (*Write alpexpected end of input (Premature EOF) 402: Error in writing code file 403: Error in reading include file 404: Error in writing list file 405: Include files cannot be nested ASERRS.TXT[v] PRUN PASCAL TESTP.PAS,L=CONSOLE: PRUN TESTP '); Write ( WRNFIL, 'No part of the "PASCAL/M Software System"'); Writeln( WRNFIL, ' covered by this License Agreemen ( WRNFIL, 'or by any means, electronic, mechanical,'); Writeln( WRNFIL, ' magnetic, optical, chemical,'); Write ( WRNFIL, 'manual, or otherwise, without the prior'); Writeln( WRNFIL, ' written permission of'); Writeln( WRNFIL, 'SORCIM, 28: Too many local files 259: Expression too complicated 261: Too many Segments. 262: "FORWARD" declared as Segment 263: All Segment procedures must be first 270: No window variable for untyped files 300: Division by zero 301: No case p, WRNFILNAM); Filetext; Close ( WRNFIL, LOCK); (*Copy TPWARN.txt to the console*) Reset ( WRNFIL, WRNFILNAM); while not Eof( WRNFIL) do begin Readln ( WRNFIL, LINE); Writeln( LINE); end; Writeln; end. habetics*) for CH:='A' to 'Z' do Write( CH); Writeln; for CH:='a' to 'z' do Write( CH); Writeln; Writeln; (*Create TPWARN.txt*) {$I-} Reset( WRNFIL, WRNFILNAM); {$I+} Close ( WRNFIL, PURGE); Rewrite( WRNFILprogram TESTP( OUTPUT, WRNFIL); (* 'TESTP.PAS': Pascal installation test program. Sorcim Pascal/M: seh 79-08-7*) const WRNFILNAM='TPWARN.txt'; VERSION='Testp: Version 02.08'; var CH: char; LINE: string; WRNFIL: text; 273 Calle De Luna, Santa Clara CA 95050.'); Writeln( WRNFIL); Writeln( WRNFIL, 'The files on this disk are as follows:'); Writeln( WRNFIL, 'PASCAL.pco = Pascal compiler.'); Writeln( WRNFIL, ' PRUN.com = Pascal P-code interpreter.'); rovided for this value 302: Index expression out of bounds 303: Value to be assigned is out of bounds 304: Element expression out of range 398: Implementation restriction 399: Feature NOT implemented 400: Illegal character in text 401: UnERA A:PASCAL.PCO ERA A:PRUN.COM ERA A:PASLIB.PCO ERA A:TESTP.PAS ERA A:TESTP.PCO ERA A:PASERRS.TXT PIP A:PRUN.COM=B:PRUN.COM[v] PIP A:PASLIB.PCO=B:PASLIB.PCO[v] PIP A:PASCAL.PCO=B:PASCAL.PCO[v] PIP A:TESTP.PAS=B:TESTP.PAS[v] PIP A:PASERRS.TXT=B:P); Write ( WRNFIL, 'may be reproduced, transmitted, transcribed,'); Writeln( WRNFIL, ' stored in a retrieval system,'); Write ( WRNFIL, 'or translated into any language'); Writeln( WRNFIL, ' or computer language, in any form,'); Write procedure Filetext; begin Write ( WRNFIL, 'Copyright (c) 1979 by Sorcim.'); Writeln( WRNFIL, ' All rights reserved.'); Write ( WRNFIL, 'No part of the "PASCAL/M Software System"'); Writeln( WRNFIL, ' covered by this License Agreement'1>/2t!~vf>>'<#2u =JҤJ2Ҫ> 2tJxڰ!=>:2tJ%ҶJaҼ:=> Sorcim program for setting time and date entry to be compatible with PASCAL/M definition for CP/M 1.x systems. Entry format is- mm/ddý}ìì _ 2fCVKq ) :fo&EoýCVCK^#Vx8GjS]  (:!Z ~_#~WýCVy!Z N#Fڙo`ALbS\ ëʫo#!- y/w#x/wý = ìì{ozgì}o|}/o}z6ììý(  ,   C  9 2 ) CCCCCC0khC  CC?% CCCCCCCCCC{3qjczx: Ƞ2 Ʉ&O!*.  !0*. OO!>*.   V>ɯ^f XNy#g͌͌  Y  # :[>2u ###T*u "u ### o g o gì _ì!ì _րW _*R *R*R*T͋ì*T͋^#Vì*T͋s#rì *^#V= ͋ ì͋ì/yy hh:mm Date (mm/dd/yy) is: Time (hh:mm:ss) is: 00:uPYfP:ul#~͗#~͗#͏͗͏͗:t_0:0 $<VXfXIllegal month specified.Illegal day of month?? @o& 0!P_^#VKV}~B8b8 _*T @_*R^#Vb_!!!DwDR 3(T"|CC5 s J # CC54 '); Writeln( WRNFIL, 'PASCAL.pco = Pascal compiler.'); Writeln( WRNFIL, ' PRUN.com = Pascal P-code interpreter.'); ͋CV`i{=S ) ý͋CV{OzGý `iG^#V#MDì^#V#~#foìCVq#p#s#rý ʬo&)+V+^= ì ʑo&)9^#Vs#r#= ì^ìsì͋CVKBýì O>Gì᯲ìè 2vCV|}2_!^N:v .Copyright SORCIM, 1980.03.05 Sorcim proprietary product SerialZ# Z 2046FilenameEXTÊ Ö ðýP>P?  :cW:d_z2c{2d>2c{>Q>P2d specified.Illegal year specified.Illegal hour specified.Illegal minute specified.All entries must be in range from 0 to 9*%*/>*:"-o&"*V"!9":!x#=#ì*ì...CV..!""."CV"!/>.!'"P.. . . CV*~. (#KV>  "CV"!/>.."."".PCOCV͖ ýCV͖  CVS ý7Rì 8 Ҭ]ڬ>!: ( 0 ! 6>KV"!WÎ"Z2o&))~W-^s,r#^,V"+V+}_|W~o**4,#s,r怺ʬKz!+ = "f *fý!"f"h!9+6xGyOzW{_5ʋ #t :i2i#:h2h#:g2g#:f2f+++~w#~w#~w#~w++++= *f}lg*h}lgý*h*f "f"h*l*j "j"lɯ_>W>o>g"xᯕo>g>o>g "x<{_zWyOx#  {+  x) {#  {+   "#$&&&&AND 'ARRAY ,BEGIN CASE CONST DIV 'DO DOWNTO  ELSE END EXTERNAL"FOR FILE .FORWARD "FUNCTION GOTO IF IN MDR"f!99y:f/O:g/G>kb ýCV])9N#F#! >8.!vqxgFOx>0y_!~h&##)y(#9(>o&ý} | } |  0 ì8 O>Gì*O ^#V7RMDìi`N#F#^#V#"V"z}|ýxB#)*VN#F!ì@ ( !ý@ (!ý@ 8 @ 8 @ 8@ 8 CV_!P ^#VD`  | }!^z {^2_N2vG8Ay(#:v͋CVKB ͋CV)MD (+{_}zzɯO>G CV_! ^#Vz j 3 B + R ^  `i CV_! ^#VzC##}gr-$1$ $"&%% &&##uNd)2,,,,-,,;CdZ͋"| `i" W>O>G| 㴵 *zÞ *zð 7CVE#)9~"\## 0 )LABEL MOD 'NOT &OF OR (OTHERWISPACKED +PROCEDURPROGRAM !RECORD -REPEAT SET *SEGMENT !THEN TO  TYPE UNTIL VAR WHILE WITH !n> #w"h"f^#V*hz"dý!na8{+BMDì*+V+^" "T*R^#V ( O*R #*" "R"*y x( *~c"ìo&)) F-N q,py*P$s*""Z CV/<_*^#V7R"~C^#V#N#F8o>g9v o>g9v*##y*V***!9"  . |0)D_>W>o>g0x0K 0 ýR0Bz *h*fz *l*j+ !'*PҬ Ҭ] *j*hڽʽ ?͹!!x)C"f"h"j *h*fzKW(/K|!>áx}})"jyKxjxʽ*jjý>!/͞>!:͞ýC*Ps#rì^#V"Pì*Ps#r "P!9výxý͖s xʽ]Tý}|8͖ý ͖+ý0ѷRý  {*Z>O*\ý͢({/ #z/ #:v ͢(~/ #~/ #:v(CVx!8X{z8M!vqxgOFszg_~!\^#V( = x!z G{_#zWx:vREADER 5PUNCH GPRINTER LP 5COMM1,COMMC,NULL5TAPE15TAPE2////////>2!"$P~(b0^Ox#">!x̓0&: E*#!!͹>88Oy 2~*w0O͆!*T] FOO+~7G,_~W+~O+~7Gҡ$g_|W|O|GáwGN #x=beƁOGOG~#V#^_P|gxҕzWyOxG- ||ʴ}l&.Æ_üwOG~ G#yƁO ~#V#^_~G &f! &^!> &n!>2@&#~ !*!""N*~ɯ2>2i`""""!&"*'ԇ&:y'*0!*͍!(  x2y'"8 *"!"*!L&w**͕!( (x2y'"'!"G>  x!8|(;(=(-(:(@7 #7 *7 ?< 2J aC { w*%*/͞>*:W x:t Ƞ2t Ʉ͊ Ö OYy! *. OO! *.   Һ ɯ ͼ ^{# I!!I!!~OF+N+V+^>2X Hz@CPt$> nk(:Chԥ5!c_ʹ1^ l $-xX(y)hSYR%oNˑ?;! I|oŰE7v@pvCV2X:Xʽ?͵Rý͵"f"hR*h*fý͵ͤý͵ͅþ͵>2ý>&y( ! $*.!0!ý>>2!}$""""">&~ (G:(~ 9#~2###^$*|(W!~ w** L&w*ýx2.Ç**'$:&Ç&!"2*͂'**{(g:(NR%V: %Ϳ%>8/Gwq#6ý>2ý!#9 *#j*#j!# ~!<2\!#]<!\n!!x# :@!. Pascal ABORT. PC= FFFFh SP= FFFFh $$$ SUB*}ʬÇ*ì{2#w#wì}2#{ì2y(02&oA"":>#N#V8x8 y8 }?0 }o|g{_7}o0!9~ +~r#wS(@){_{_øZx)zG{֐ڄz}>2Xҋ>_8 O>G¼{} ,GOWo,-(|*"|))|?bk Fo'L&:'~w!^!w! %:f'bk 6o'>27%! {~w*)*#~2%#~2%ɀ@ `-TIہI1r ^[((*'*';*'*'ͅ;!_!%!}0! 6zW{_! 4!~oO P!!!! Y!!!͐! !͘!  ABDEFGGCONSOLE#CON#CRT þ͵?þ͵ͬþ͵;þ͵͜ý͹bþ͹ͽþ͹þ"ZzWx怺 (YP{ z { z*Z!9]T>w>Ôw>GҞ/ZQHo8- $%~o###zW+y %͊ wH%͖%wv%%} (%> %:ʝ> 6#{ L&w#"$: A:y2 = ͚%$~%>w 7 :7>>( YOͿ%Oʹ%} é%_>ã%*b|~#"b!"b & % *, s#r> 2 & > +~ x xx~a4{4# $~#<7#Ezq#RO:=@I |o}xƐ'@'ɯ2J #~:+:~@##¥:<~>:7.~.#y !  :J 7x7~ #. *>? ~# ߷<怨BW]"Z}o:X2Xl&9*Zo$MDy_xW{z/W{/_xzW{_>y͇y͇y͇y͇}0>02>0]T< 8=kbG:”> x>20~0~0#yÞGN#xy_ѯ #7# y(yz{x7# ͤ*'*';b}2R"~"|*'*'ͅ"":8 (X("z"x(:(t){(w)͵(:ڂ)͜:y)͜"z"x(:ʯ)µ)͵(ø){(:)͜{*'*')2*'*'?:= "" g9!9!!9"" "R"T! "}2ý!2!U&*2w:2!2~22 N#F#y2#2:w#:w#q#p#~#~#ίR**?**;ͅ"":= ****;|S,} >2X>f,>2}ց2.+D,*&R*'*'?ͅ:D,*'*'?*&R*'*'͹R)þ͹͒)þ͹4*þ͹u*þ͹'+þ͹ ()"1}2!~2#<$61 .ͼ.U̓!]1=#ͼ.M0!s1͹E0L1/0DM#~#fo*b#6+"b!"b 2/0!EX">T22̓!]1]#!PC">O22! !0]#2! 1]#**0!&1]#"%"$!2͝!/0! 1]#?? No Machine code fileͬ'""ͅ****͎;"z"xͤb"R͎)*)?:yo*"z"xͬ{ڎ*""*'"*'"!")-R*KBS R**?**;ͅ""*- :x+*'*'*z*x** "P!9výxý͖s xʽ]Tý}|8͖ý ͖+ý0ѷRý  {#  {+  x) {#  {+   "#$&&&&AND 'ARRAY ,BEGIN CASE CONST DIV ͋"| `i" áx}})"jyKxjxʽ*jjý>!/͞>!:͞ýC*Ps#rì^#V"Pì*Ps#r ,þ͹|,þ: ʬ-ýCV| !- R*-N#- -K*n&y-f*n&-]*#n&-ft- S#12 P#123 Lev 12 12345 - line executed. Entering Proc name - 12345678 :.!.@-! /-:2!--!'."PBKPpS () found ?? Machine file ill-formed Machine file load address too large *b<6,#"b6 ?? File name error! <@T=0f0*@Tf03@M=m0K "!@P!`P!\ 2XF+}O+W+}ց2_}o""*'"*'">2****;ͅ'"":= :o:xһ+*'*'͎""*'"*'">2o&R:<OYPS 'DO DOWNTO  ELSE END EXTERNAL"FOR FILE .FORWARD "FUNCTION GOTO IF IN )LABEL MOD 'NOT &OF OR (OTHERWISPACKED +PROCEDURPROGRAM !RECORD -REPEAT SET *SEGMENT !THE  |/}.Ҷ1/ x# ?? Pascal Library not found. ?? Pcode file not found. ?? Pascal Library ill-formed. ?? Pcode file ill-formed. PASCAL/M version NOT compatible with OS. Sorcim PASCAL/M ver vv.llPASLIB PCO!/]<~!<22\!TEP O͔.ͤ. ~.}|:.c.~ ]. ].,].;].|~. ~.~.aY.{Y. w#).6#.:.x.~ ~.~.#c.6#).6go~Œ.ѯx~ ʟ. £.#Ô.~'ʴ."ʴ.2.6#2.1~#.<+w#_^#Vѯ715ͬ1!""""U!///; TITLE 'CONSTRLZ - Console Control Common deck (Zilog). ;CONSTRLZ - Console Control Common Deck (Zilog mnemonics). ; 79-11-20, SORCIM. ; CONSTRLZ deck contains all the console device ; dependent code. All addresses up thru and including ; the c MUP: DEFB 'K'-40h,EOS,0 ;VT move up one line MDWN: DEFB 'J'-40h,EOS,0 ;LF move down one line MLEF: DEFB 'H'-40h,EOS,0 ;BS move left one char MRIG: DEFB 'L'-40h,EOS,0 ;FF move right one char MDEL: DEFB ESC,'W',EOS ; delete char MINS: DEFB ESC,'Screen). If your ; terminal appears to be mis-behaving, it can be helpful ; to set (CDELAY) to a very large number while debugging ; your CONSTRL adapatation. CDELAY: DEFB 25 ;25 milliseconds delay DEFW 0 ;(reserved) ; Machine clock period facto3 ; terminal. To aid the user in constructing a CONSTRL ; configured for his actual device, example source ; code for a few other terminals is provided in the ; file CONSTRL.ASM. The installer is urged to consult ; the manual for the specific terminVT move up one line MDWN: DEFB 'J'-40h,EOS,0 ;LF move down one line MLEF: DEFB 'H'-40h,EOS,0 ;BS move left one char MRIG: DEFB 'L'-40h,EOS,0 ;FF move right one char MDEL: DEFB EOS,0,0 ; delete char ***N/A*** MINS: DEFB EOS,0,0 ; insert cha ()ursor motion table must be maintained in this ; deck as each user configures it for his/her own ; device. The CONSTRL region begins at 180h and can ; extend up thru 1FFh. ; ; Refer to section 19.3 in your PASCAL/M (tm) manual ; for directions on usi49 8080 FREQ EQU 4000 ;Frequency in KiloHertz SCLFRE: DEFB FREQ/25 ; Reserved for future expansion. DEFW 0 DEFW 0 DEFW 0 ; Constants for character movement processors. ; Each entry MUST be three bytes long, with the ; last byte alwaysr. ; Used by PRUN to determine delay times. ; (1 MHz = 1000 KHz) ; Value= (Clock Frequency/1000) div 25 ;Examp Freq Period Value ; 5000 200ns 200 ; 4000 250ns 160 Z80A ; 2765 360ns 111 8085A ; 2174 460ns 87 8080A ; 2000 500ns 80 Z80 ; 1230 820ns al to be employed ; before beginning the process. ; ;79-10-02 ADM 42 configuration is courtesy of ; ComputerLand, Belmont, CA ESC EQU '['-40h ;Escape, Ascii ESC ; (for convience) ; External addresses for this release package. ; (Not r ***N/A*** CLSN: DEFB 'Z'-40h,EOS,0 ;SUB Clear screen (& Home cursor) ; Following values for Televideo TVI 912/920. ; (Superset of ADM 3). IF 0 ;(skip) HOMEC: DEFB '^'-40h,EOS,0 ;RS home display (0,0) CLNE1: DEFB ESC,'T',EOS ; Clear to EOL olumns per line ;CCCHR: char to echo to console for unknown control-char (0..20h) CCCHR: DEFB '?' ;CDELAY: milliseconds of delay between cursor motions. ; Some terminals can take a significant amount of time for ; complex functions (e.g., Clear ng CONSTRL. ; ; As released, this deck is set up to be acceptable ; to a hypothetical Z80 assembler. The user should use ; this source code as a guide to adapt to whatever ; assembler is available. ; ; The default configuration herein is for an ADM EOS. (The 0 constants are ; included to pad to three bytes.) ; ; Following values are for Lear-Seigler ADM3, or equivalent. HOMEC: DEFB '^'-40h,EOS,0 ;RS home display (0,0) CLNE1: DEFB EOS,0,0 ; Clear to EOL ***N/A*** MUP: DEFB 'K'-40h,EOS,0 ; () ()Q',EOS ; insert char CLSN: DEFB 'Z'-40h,EOS,0 ;SUB Clear screen (& Home cursor) ENDIF ; Refer to the companion assembly deck CONSTRL.ASM for ; values appropriate to other terminals. ; END OF FIXED ADDRESS CODE AND DATA ; ASSERT $ = 1B0h (* r east side*) ; for X:=1 to (LENGTH-1) do begin Write (OUTPUT,CH); Conact(4);{left} Conact(4); end (*endfor bottom*) ; for X:=1 to (HEIGHT-1) do begin Write (OUTPUT,CH); Conact(4);{left} Conact(2);{up} --'Contest' is intended to demonstrate and exercise --the console-action intrinsics of Pascal/M. --This program and the procedures within it are NOT licensed, --and the user may adapt any part of this program --for his own software and/or personal insing code is supplied as a sample for terminals ; supporting the reading of the cursor. ; Upper left corner is = (0,0), or DE=2020h. ; Note: If terminal returns absolute coordinates, they ; must be biased by adding ' ' before exit. ; X is Column, Y is dure will not draw a box equal to the console screen in width unless the AUTO-LF feature of the console is disabled} {requires global procedure 'Wait': (waste 3 seconds)} const CH='+'; var X: integer; begin for X:=1 to ((LENGTH div 2)-1) DE LD A,E ;X+32 JP OUTSC ; The entire CONSTRL patch area cannot extend past 1FFh. XEND EQU $ IF XEND > (CONORG+128) error: DEFW (XEND-CONORG) console interface is too long ENDIF ORG CONORG+128 END ;end of assembly i.e.: The origin counter should ; now be = 1B0h if the above is ; done properly. *) ; All code following is local to your implementation ; and is always referenced locally (ie PASCAL does not ; make any direct references to the code). RDCXY-************************************************************ const VERSION='Contest: Version 10/31/79'; var X,Y,Z: integer; procedure Wait; var Q: integer; begin for Q:=1 to 5000 do ; end (*end Wait*) ; procedure Border (LENGTH,truction. --Indeed, users are encouraged to suggest improvements --(or useful adaptations/applications) to this program --for inclusion in the next release of Pascal/M. --Please send comments to Digital Marketing: --(address inside Pascal/M manual) -Row. Some terminals use (X,Y) order. ; Code for TVI 912/920 and ADM 42. ; Note the read & discard of CR following Y X. LD A,ESC CALL OUTSC LD A,'?' CALL OUTSC ;Inform terminal I want Y,X CALL INPSC ;read Y+32 PUSH AF CALL INPSC ;read X+3do Conact(5);{right} {cursor is now @ 1/2 line length} for X:=1 to (LENGTH-(LENGTH div 2)) do Write (OUTPUT,CH); for X:=1 to (HEIGHT-1) do begin Write (OUTPUT,CH); Conact(4);{left} Conact(3);{down} end (*endfoprogram Contest (INPUT,OUTPUT,KEYBOARD); (* 'Contest.pas': console intrinsics demo/test program. Sorcim Pascal/M: seh 08/27/79 *) --************************************************************ --Note to users of this program: : ;Read X,Y postion ; Entry None. ; Exit D= Y+32 ; E= X+32 ; Uses all. ; ADM 3 does not have this capability, so reply = (0,0). LD DE,' ' RET ; The RET may be patched out if the ; following code suffices for your ; terminal. ; FollowHEIGHT: integer); {'Border': seh 09/07/79} {requires 'Conact' #s 2-5} (*Border draws a box of dimensions LENGTH & HEIGHT: CURSOR MUST BE @ STARTING POSITION OF BOX BEFORE 'Border' IS CALLED. Exits with cursor @ starting position.*) {this proceDM 42, Televideo 912, and SOROC IQ. ; Can be adapted to BEEHIVE 100 by changing '=' to 'F'; PUSH DE LD A,ESC CALL OUTSC LD A,'=' ;for ADM, TVI & SOROC ; LD A,'F' ;(for BEEHIVE 100) CALL OUTSC POP DE LD A,D ;Y+32 PUSH DE CALL OUTSC POP2 POP DE LD E,A PUSH DE CALL INPSC ;read CR and discard POP DE RET ;D=Y+32, E=X+32 SETXY: ;set X,Y position of cursor ; Entry D= Y+32 ; E= X+32 ; Exit None. ; Uses all. ; Following code is for ADM3 or compatible, including ; A end (*endfor west side*) ; for X:=1 to (LENGTH-(LENGTH div 2)) do Write (OUTPUT,CH); for X:=1 to (LENGTH-(LENGTH div 2)) do Conact(4);{left} end (*end Border*) ; procedure ClrtoEOL (WIDTH: integer); {'ClrtoEOL': seh 09/07/7or*) ; GotoXY(OLDX,OLDY); end (*end Sinewave*); procedure Spiral (MAXX,MAXY: integer); {'Spiral': seh 09/07/79} {requires 'GotoXY' and 'ReadXY'} {draws a spiral of size MAXX by MAXY; cursor position @ start becomes UL corner of spiral} {Exietters will not.'); GotoXY(0,0); repeat Read(KEYBOARD,CH); if CH in ['D','d','E','e','L','l','R','r','U','u','X','x'] then begin if CH in ['A'..'Z'] then begin Write(OUTPUT,CH); Conact(4); it; end (*end ClrtoEOL*) ; procedure Insrdelt; {'Insrdelt': seh 09/07/79} {requires 'Conact' #s 6 & 7 and 'Screen'} {Exit: cursor is moved down 4 lines} {requires global procedure 'Wait': (waste 3 seconds)} const CR=13; BEG='<<<<<'; izable drawing...} {Exit: cursor @ starting position} const CH='*'; TWOPi=6.28318; var OFFY,OLDX,OLDY,X,Y: integer; INCR,THETA,YSTRETCH: real; begin ReadXY(OLDX,OLDY); INCR:=TWOPi/MAXX; THETA:=0; OFFY:=Round(MAXY/2)+OLDY-1; Writeln(OUTPUT); end (*end Inserdelt*) ; procedure Joystick; {'Joystick': seh 09/07/79} {requires 'Conact' #s 0,2-5, 'ReadXY', and 'GotoXY'} {Exit: cursor @ (0,0)} var X,Y: integer; CH: char; begin Writeln(OUTPUT,'The console will n9} {requires Conact(1); Exit: cursor is moved down 1 line} {requires global procedure 'Wait': (waste 3 seconds)} const CR=13; S1='This sentence will disappear first.'; S2='This one will be second.'; LENGTHS=58; var X: integer; begi end (*endcase of console input*) ; end (*endif CH is a valid command*) ; ReadXY(X,Y); GotoXY(0,0); Write (OUTPUT,'(',X,',',Y,') '); GotoXY(X,Y); until CH in ['Q','q']; (*QUIT chars*) GotoXY(0,0); end (*end J end (*endif char was uppercase*) ; case CH of 'D','d': Conact(3); 'E','e': Conact(0); 'L','l': Conact(4); 'R','r': Conact(5); 'U','u': Conact(2); 'X','x': Halt; ENND='*|'; LENGTH=32; NEWT='*** Sorcim Pascal/M ***'; OLD='These are PASCAL cursor controls'; REF='--------------------------------'; var LIN: packed array[1..LENGTH] of char; OFFX: packed array[1..25] of char; X,Y: in YSTRETCH:=MAXY/2; for X:=OLDX to OLDX+MAXX-1 do begin Y:=-Round(Sin(THETA)*YSTRETCH); if (not Odd(MAXY)) and (Y<1) then Y:=Y+1+OFFY else Y:=Y+OFFY; GotoXY(X,Y); Write (OUTPUT,CH); THETA:=THETA+INCR; end (*endfow go into Joystick mode:'); Writeln(OUTPUT,'r=right, l=left'); Writeln(OUTPUT,'u=up , d=down'); Writeln(OUTPUT,'Q=QUIT , E=erase screen, X=RETURN TO OS'); Write (OUTPUT,'UPPER-CASE letters will echo;'); Write (OUTPUT,' lower-case ln Writeln(OUTPUT); for X:=1 to (25+((WIDTH-LENGTHS) div 2)) do Write (OUTPUT,' '); Write (OUTPUT,S1); Wait; Write (OUTPUT,Chr(CR),S2); Wait; Conact(1); Wait; Write (OUTPUT,Chr(CR)); Wait; Conact(1); Waoystick*) ; procedure Sinewave (MAXX,MAXY: integer); {'Sinewave': seh 09/07/79} {requires ReadXY and GotoXY} {draws a sine-wave of MAXX by MAXY; cursor position @ start becomes UL corner of sine-wave; Note: A height <3 will not produce a recognFX:Y,BEG); Wait; for X:=1 to LENGTH do Conact(6);{delete 1 char @ cursor} Wait; for X:=1 to LENGTH do begin Conact(7);{insert blank char @ cursor} Write (OUTPUT,LIN[X]); end (*endfor Conact(insert)*) ; Wait; teger; begin Screen(OUTPUT,Y,X); Fillchar(OFFX[1],25,' '); Y:=(X-LENGTH-5) div 2; LIN:=NEWT; Writeln(OUTPUT); Writeln(OUTPUT,OFFX:Y,' ',REF,ENND); Write (OUTPUT,OFFX:Y,BEG,OLD,ENND); Wait; Write (OUTPUT,Chr(CR),OFt: cursor @ starting position} const C=0.345; {tightness-of-curl constant} INCR=0.08; {0.08 radians = 3.6305 degrees} XSTRETCH=2.3; {optimum for TeleVideo} CH='*'; var MINX,MINY,OFFX,OFFY,X,Y: integer; THETA: real; begin Read@vpFHJLNPvTVXZ\z`bxfhv( a$, `$) #a`bsy~ SINEWAVE ЃIa ` d`eeaWAITˆa`*BORDER+ac ,b-aac.+ b/`c0+ 123b4ac5+ 678b9`c:+ ;<=dif X & Y are in range*) ; THETA:=THETA+INCR; until ( ((X=MAXX)) and ((Y=MAXY)) ); (*until X AND Y have both exceeded their boundaries*) end (*end Spiral*) ; {Main Program} {Notice the use of 'ScJOYSTICK+The console will now go into Joystick mode:#r=right, l=left#u=up , d=down#'Q=QUIT , E=erase screen, X=RETURN TO OS#UPPER-CASE letters will echo;#XY(MINX,MINY); OFFX:=MAXX div 2 + MINX; OFFY:=MAXY div 2 + MINY; MAXX:=MAXX+MINX; MAXY:=MAXY+MINY; {OFFX&Y are offsets for center of spiral: THETA is radians, and XSTRETCH stretches the spiral to fit screen} THETA:=0; repeat #VWXY Z[\] INSRDELTqr s t *** Sorcim Pascal/M *** uv! # --------------------------------#*|#b>aac?+ b@aac AbB?r4CLRTOEOLPQ`:bR aS#This sentence will disappear first.#TU This one will be second.reen': } {This enables 'Contest' to adapt itself to} {different size terminal-screens: better portability.} begin Write (OUTPUT,VERSION); Wait; Screen (OUTPUT, Y, X); repeat Conact(0); GotoXY(1,1); Border( X-2, Y-6) lower-case letters will not.#b$0$0bb b/x3qDx460 6: "8&(6,.02468:<>w CONTEST H ??/??/????:?? X:=Round(OFFX+XSTRETCH*(THETA*Cos(THETA)*C)); Y:=Round(OFFY+ THETA*Sin(THETA)*C ); if ( (X>=MINX) and (X=MINY) and (Y:7.~.#y !  :J 7x7~ #. *>? ~# ߷; GotoXY(2,2); Sinewave( X-4, Y-8); Wait; Conact(0); GotoXY(1,1); Border( X-2, Y-6); GotoXY(2,2); Spiral( X-4, Y-8); GotoXY(0,Y-6); ClrtoEOL(X); GotoXY(0,Y-6); Insrdelt; mV !ݕ `b bfbfcb* ݓcedXk SPIRALag`fag`f e33 "ã0 d !ã0 cgcabfb` KHz) ; Value= (Clock Frequency/1000) div 25 ;Examp Freq Period Value ; 5000 200ns 200 ; 4000 250ns 160 Z80A ; 2765 360ns 111 8085A ; 2174 460ns 87 8080A ; 2000 500ns 80 Z80 ; 1230 820ns 49 8080 FREQ EQU 4000 ;Frequency in KiloHertz SCLFRE: DB FR; Pickles & Trout, Goleta, CA ;81-01-13 PC-8001 configuration is courtesy of ; SYNCWARE LABS, Tokyo ESC EQU '['-40h ;Escape, Ascii ESC ; (for convenience) ; External addresses for this release package. ; (Not changeable by user). CONntrol-char (0..20h) CCCHR: DB '?' ;CDELAY: milliseconds of delay between cursor motions. ; Some terminals can take a significant amount of time for ; complex functions (e.g., Clear Screen). If your ; terminal appears to be mis-behaving, it c To aid the user in constructing a CONSTRL ; configured for his actual device, example source ; code for a few other terminals is provided, within ; IF-skip brackets. The installer is urged to consult ; the manual for the specific terminal to be emplocb* }#cgcabfb` CONTESTContest: Version 10/31/79#DCDCDCDCCD ORG CONORG ;Fixed address ; Jump vector for all PASCAL callable functions RDXY: JMP RDCXY WTXY: JMP SETXY ; Define dimensions of character output devices. ; These are the values returned by the SCREEN intrinsic ; function. ; ConsoleORG EQU 180h ;FIXED orgin INPSC EQU CONORG-6 ; Get(KEYBOARD); A:=(KEYBOARD^) ; ;Transparent read, no echo. ; ;Exit A= Char, uses all. OUTSC EQU INPSC+3 ; OUTPUT^:=A; Put(OUTPUT) ; ;Transparent write to crt. ; ;Entry A= Char, uses all. ; TITLE 'CONSTRL - Console Control Assembly Module.' ;CONSTRL - Console Control Assembly Module. ; 79-11-21, SORCIM. ; CONSTRL This deck contains all the console device ; dependent code. All addresses up thru and including ; the cursor motion taan be helpful ; to set (CDELAY) to a very large number while debugging ; your CONSTRL adapatation. CDELAY: DB 10 ;10 milliseconds delay DW 0 ;(reserved) ; Machine clock period factor. ; Used by PRUN to determine delay times. ; (1 MHz = 1000yed ; before beginning the process. ; ;79-10-02 ADM 42 configuration is courtesy of ; ComputerLand, Belmont, CA ;79-11-11 Hazeltine 1500 configuration is courtesy of ; J. Spanton, Sunnyvale, CA ;80-03-14 TRS Model II configuration is courtesy of C>  dimensions NOLNES: DB 24 ;Maximum lines on terminal NOCOLS: DB 80 ;Maximum columns on terminal ; Printer dimensions NOPLN: DB 62 ;Maximum lines per page NOPCOL: DB 80 ;Maximum columns per line ;CCCHR: char to echo to console for unknown co ; As released, this deck is set up to be acceptable ; to the CP/M (tm) ASM assembler. The user should use ; this source code as a guide to adapt to whatever ; assembler is available. ; ; The default configuration herein is for an ADM 3 ; terminal. ble must be maintained in this ; deck as each user configures it for his/her own ; device. The CONSTRL region begins at 180h and can ; extend up thru 1FFh. ; ; Refer to section 19.3 in your PASCAL/M (tm) manual ; for directions on using CONSTRL. ; EQ/25 ;Scaled frequency value ; Reserved for future expansion. DW 0 DW 0 DW 0 ; Constants for character movement processors. ; Each entry MUST be three bytes long, with any ; bytes not used set to 0 (terminals are supposed ; to ignorFollowing values for SouthWest Technical Products CT82. IF 0 ;skip (1 to assemble) HOMEC: DB 'P'-40h,0,0 ;home display (0,0) CLNE1: DB 'F'-40h,0,0 ;Clear to EOL MUP: DB 'A'-40h,0,0 ;move up one line MDWN: DB 'B'-40h,0,0 ;move down one line MLEF: DB values for SOROC IQ 120/140. IF 0 ;skip (1 to assemble) HOMEC: DB '^'-40h,0,0 ;RS home display (0,0) CLNE1: DB ESC,'T',0 ; Clear to EOL MUP: DB 'K'-40h,0,0 ;VT move up one line MDWN: DB 'J'-40h,0,0 ;LF move down one line MLEF: DB 'H'-40h,0,0 ;e cursor) ENDIF ; Following values for Televideo TVI 912/920. ; (Superset of ADM 3). IF 0 ;skip (1 to assemble) HOMEC: DB '^'-40h,0,0 ;RS home display (0,0) CLNE1: DB ESC,'T',0 ; Clear to EOL MUP: DB 'K'-40h,0,0 ;VT move up one line MDWNing values for Tandy Radio Shack, TRS-80 Model II. IF 0 ;skip (1 to assemble) HOMEC: DB 'F'-40h,0,0 ;ACK home display (0,0) CLNE1: DB 'A'-40h,0,0 ;SOH Clear to EOL MUP: DB '^'-40h,0,0 ;RS move up one line MDWN: DB '_'-40h,0,0 ;US move down one linIF ; Following values are for Perkin-Elmer Fox 1100 IF 0 ;skip (1 to assemble) HOMEC: DB ESC,'H',0 ; home display (0,0) CLNE1: DB ESC,'I',0 ; Clear to EOL MUP: DB ESC,'A',0 ; move up one line MDWN: DB ESC,'B',0 ; move down one line e NULls). ; ; Following values are for Lear-Seigler ADM3A or equivalent IF 0 ;assemble (0 to skip) HOMEC: DB '^'-40h,0,0 ;RS home display (0,0) CLNE1: DB 0,0,0 ; Clear to EOL ***N/A*** MUP: DB 'K'-40h,0,0 ;VT move up one line MDWN: DB 'J'-40hskip (1 to assemble) HPRE EQU 7Eh ;Lead-in character (Tilde) HOMEC: DB HPRE,'R'-40h,0 ;~DC2 home display (0,0) CLNE1: DB HPRE,'O'-40h,0 ;~SI Clear to EOL MUP: DB HPRE,'L'-40h,0 ;~FF move up one line MDWN: DB 'J'-40h,0,0 ;LF move down one line MLBS move left one char MRIG: DB 'L'-40h,0,0 ;FF move right one char MDEL: DB 0,0,0 ; delete char ***N/A*** MINS: DB 0,0,0 ; insert char ***N/A*** CLSN: DB ESC,'*',0 ; Clear screen ENDIF ; Following values for HAZELTINE 1500. IF 0 ;: DB 'J'-40h,0,0 ;LF move down one line MLEF: DB 'H'-40h,0,0 ;BS move left one char MRIG: DB 'L'-40h,0,0 ;FF move right one char MDEL: DB ESC,'W',0 ; delete char MINS: DB ESC,'Q',0 ; insert char CLSN: DB 'Z'-40h,0,0 ;SUB Clear screen (& Home e MLEF: DB 'H'-40h,0,0 ;BS move left one char MRIG: DB ']'-40h,0,0 ;GS move right one char MDEL: DB 0,0,0 ; delete char ***N/A*** MINS: DB 0,0,0 ; insert char ***N/A*** CLSN: DB 'L'-40h,0,0 ;FF Clear screen (& Home cursor) ENDIF ; MLEF: DB ESC,'D',0 ; move left one char MRIG: DB ESC,'C',0 ; move right one char MDEL: DB 0,0,0 ; delete char ***N/A*** MINS: DB 0,0,0 ; insert char ***N/A*** CLSN: DB ESC,'K',0 ; Clear screen (& Home cursor) ENDIF ; Following ,0,0 ;LF move down one line MLEF: DB 'H'-40h,0,0 ;BS move left one char MRIG: DB 'L'-40h,0,0 ;FF move right one char MDEL: DB 0,0,0 ; delete char ***N/A*** MINS: DB 0,0,0 ; insert char ***N/A*** CLSN: DB 'Z'-40h,0,0 ;SUB Clear screen (& HomEF: DB 'H'-40h,0,0 ;BS move left one char MRIG: DB 'P'-40h,0,0 ;DLE move right one char MDEL: DB 0,0,0 ; delete char ***N/A*** MINS: DB 0,0,0 ; insert char ***N/A*** CLSN: DB HPRE,1Ch,0 ; Clear screen (& Home cursor) ENDIF ; Follow MDWN: DB 'J'-40h,0,0 ;LF move down one line MLEF: DB 'H'-40h,0,0 ;BS move left one char MRIG: DB 'L'-40h,0,0 ;FF move right one char MDEL: DB ESC,'W',0 ; delete char MINS: DB ESC,'Q',0 ; insert char CLSN: DB ESC,'+',0 ; Clear screen ENDcursor) ENDIF ; Following values for Lear Siegler ADM 42. ; (Also works for TVI 912/920.) IF 0 ;skip (1 to assemble) HOMEC: DB '^'-40h,0,0 ;RS home display (0,0) CLNE1: DB ESC,'T',0 ; Clear to EOL MUP: DB 'K'-40h,0,0 ;VT move up one line 'D'-40h,0,0 ;move left one char MRIG: DB 'I'-40h,0,0 ;move right one char MDEL: DB '\'-40h,'H'-40h,0 ;delete char MINS: DB '\'-40h,'X'-40h,0 ;insert char CLSN: DB 'L'-40h,0,0 ;Clear screen ENDIF ; FOLLOWING VALUES FOR NEC PC-8001 IF 1 HOMEC ; SetXY for Fox 1100 ; Following code for Perkin-Elmer Fox 1100 IF 0 ;skip (1 to assemble) PUSH D MVI A,ESC CALL OUTSC MVI A,'Y' CALL OUTSC ;ESC-'Y' = 'set X' POP D MOV A,E PUSH D CALL OUTSC MVI A,ESC CALL OUTSC MVI A,'Xterminals, thus the characters ; must get a bias of 32 here. IF 0 ;skip (1 to assemble) MVI A,']'-40h CALL OUTSC MVI A,'A'-40h CALL OUTSC CALL INPSC ADI 20h MOV E,A PUSH D CALL INPSC POP D ADI 20h MOV D,A RET ENDIF ;None. ; Exit D= Y+32 ; E= X+32 ; Uses all. ; ADM 3 does not have this capability, so reply = (0,0). ; TRS-80 Mod II, ditto. IF 0 ;assemble default (0 to skip) LXI D,' ' RET ENDIF ; Following code is supplied as a sample for terminals ;y changing '=' to 'F'; ; Can be adapted to TRS Model II by changing '=' to 'Y'; IF 0 ;assemble (0 to skip) PUSH D MVI A,ESC CALL OUTSC MVI A,'=' ;for ADM, TVI & SOROC ; MVI A,'F' ;(for BEEHIVE 100) ; MVI A,'Y' ;(for TRS-80 Mod II) CALL OUTSCDA 0EA63H ADI 1FH MOV D,A ;GET Y LDA 0EA64H ADI 1FH MOV E,A ;GET X RET ENDIF ; ReadXY Fox 1100 ; Following code suitable for Perkin-Elmer Fox 1100. IF 0 ;skip (1 to assemble) MVI A,ESC CALL OUTSC MVI A,'Z' CALL OUTSC ;E: DB 0BH,0,0 CLNE1: DB 0,0,0 MUP: DB 1EH,0,0 MDWN: DB 1FH,0,0 MLEF: DB 1DH,0,0 MRIG: DB 1CH,0,0 MDEL: DB 0,0,0 MINS: DB 0,0,0 CLSN: DB 0CH,0,0 ENDIF ; END OF FIXED ADDRESS CODE AND DATA ; ASSERT $ = 1B0h (i.e.: The origin counter shouD CALL INPSC ;read & discard CR POP D RET ICORD: ;Get Hazeltine coordinate & unbias. CALL INPSC ;read coordinate value CPI 'a'-1 JC ICORD3 ;If response in lower range SUI 'a'-1 ;remove Hazeltine upper bias ICORD3: ADI ' ' ;add Pa ReadXY Hazeltine 1500 ; Following code for Hazeltine 1500 IF 0 ;skip (1 to assemble) MVI A,HPRE CALL OUTSC MVI A,'E'-40h CALL OUTSC ;request current X,Y CALL ICORD ;read X PUSH PSW CALL ICORD ;read Y POP D MOV E,D MOV D,A PUSH supporting the reading of the cursor. ; Upper left corner is = (0,0), or DE=2020h. ; Note: If terminal returns absolute coordinates, they ; must be biased by adding ' ' before exit. ; X is Column, Y is Row. Some terminals use (X,Y) order. ; Code fo POP D MOV A,D ;Y+32 PUSH D CALL OUTSC POP D MOV A,E ;X+32 JMP OUTSC ENDIF ; SET XY FOR PC-8001 ; FOLLOWING CODE FOR NEC PC-8001 IF 1 MOV A,D SUI 31 STA 0EA63H ;SET Y MOV A,E SUI 31 STA 0EA64H ;SET X RET ENDIF SC-Z means 'ReadXY?' CALL INPSC ;get Y+32 PUSH PSW CALL INPSC ;get X+32 POP D MOV E,A RET ENDIF ; ReadXY CT82 ; Following is for SouthWest Technical Products CT82. ; The CT82 does not offset cursor addressing by 20h ; like most other ld ; now be = 1B0h if the above is ; done properly) ; ; All code following is local to your implementation ; and is always referenced locally (ie PASCAL does not ; make any direct references to the code). RDCXY: ;Read X,Y postion ; Entry scal/M bias RET ENDIF SETXY: ;set X,Y position of cursor ; Entry D= Y+32 ; E= X+32 ; Exit None. ; Uses all. ; Following code is for ADM3 or compatible, including ; ADM 42, Televideo 912, and SOROC IQ. ; Can be adapted to BEEHIVE 100 bminal I want Y,X CALL INPSC ;read Y+32 PUSH PSW CALL INPSC ;read X+32 POP D MOV E,A PUSH D CALL INPSC ;read CR and discard POP D RET ;D=Y+32, E=X+32 ENDIF ; READ XY PC-8001 ; FOLLOWING CODE SUITABLE FOR NEC PC-8001 IF 1 Lr TVI 912/920 and ADM 42. ; Note the read & discard of CR following Y X. IF 0 ;assemble sample (0 to skip) ; the RET above can be patched out if ; this code is appropriate to your crt. MVI A,ESC CALL OUTSC MVI A,'?' CALL OUTSC ;Inform ter' CALL OUTSC ;ESC-'X' = 'set Y' POP PSW JMP OUTSC ENDIF ; SetXY for CT82 ; Following is for SouthWest Technical Products CT82. ; The CT82 does not bias its screen addressing by 32 ; like most other terminals, therefore we must subtract ; tý}ìì _ 2fCVKq ) :fo&EoýCVCK^#Vx8GjS]  (:!Z ~_#~WýCVy!Z N#Fڙo`ALbS\ ëʫo#!- y/w#x/wý = ìì{ozgì}o|}/o}z6ììý(  ,   C  9 2 ) CCCCCC0khC  CC?% CCCCCCCCCC{3qjczsed Y ENDIF ; The entire CONSTRL patch area cannot extend past 1FFh. ; Following awkward expression is ASM way of saying this. XEND EQU $ ; IF XEND > (CONORG+128) IF (XEND-(CONORG+128d)) and 08000h error: DW (XEND-CONORG) ; console interfa # :[>2u ###T*u "u ### o g o gì _ì!ì _րW _*R *R*R*T͋ì*T͋^#Vì*T͋s#rì *^#V= ͋ ì͋ìhe bias from the characters being sent. IF 0 ;skip (1 to assemble) MVI A,'K'-40h PUSH D CALL OUTSC POP D MOV A,E SUI 20h PUSH D CALL OUTSC POP PSW SUI 20h JMP OUTSC ENDIF ; SetXY for Hazeltine 1500 ; Following code for HAZEL?? @o& 0!P_^#VKV}~B8b8 _*T @_*R^#Vb_!!!DwDR 3(T"|CC5 s J # CC54ce is too long ENDIF ORG CONORG+128 END ;end of assembly 03@M=m0K "!@P!`P!\ Gì᯲ìè 2vCV|}2_!^N:v .Copyright SORCIM, 1980.03.05 Sorcim proprietary product SerialZ# Z 2046FilenameEXTÊ Ö ðP>P?T  WQ>}>?}zz_z>}>=}z}{}TINE 1500. IF 0 ;skip (1 to assemble) PUSH D MVI A,HPRE CALL OUTSC MVI A,'Q'-40h ;Ascii DC1 CALL OUTSC POP D MOV A,E ;X+32 PUSH D SUI 20h CALL OUTSC ;output unbiased X POP D MOV A,D ;Y+32 SUI 20h JMP OUTSC ;go output unbia"-o&"*V"!9":!n#3#ì*ì...CV..!""."CV"!/>.!'"P.. . . CV*~. #KV>  "CV"!/>.."."".PCOCV͖ ýCV͖  CVS ý7Rì 8 Ҭ]ڬ>!: ( 0 ! 6>KV"!WÎ"Z2o&))~W-^s,r#^,V"+V+}_|W~o**4,#s,r怺ʬKz!+ = "f *fý!"f"h!9+6xGyOzW{_5ʋ #t :i2i#:h2h#:g2g#:f2f+++~w#~w#~w#~w++++= *f}lg*h}lgý*h*f "f"h*l*j "j"lɯ_>W>o>g"xᯕo>g>o>g "x<{_zWyOx#  {+  x) {#  {+   "#$&&&&AND 'ARRAY ,BEGIN CASE CONST DIV 'DO DOWNTO  ELSE END EXTERNAL"FOR FILE .FORWARD "FUNCTION GOTO IF IN MDR"f!99y:f/O:g/G>kb ýCV])9N#F#! >8.!vqxgFOx>0y_!~h&##)y(#9(>o&ý} | } |  0 ì8 O>Gì*O ^#V7RMDìi`N#F#^#V#"V"z}|ýxB#)*VN#F!ì@ ( !ý@ (!ý@ 8 @ 8 @ 8@ 8 CV_!P ^#VD`  | }!^z {^2_N2vG8Ay(#:v͋CVKB ͋CV)MD (+{_}zzɯO>G CV_! ^#Vz j 3 B + R ^  `i CV_! ^#VzC##}gr#$'$$"%%%&&##uNd)2,,,,-,,;CdZ͋"| `i" W>O>G| 㴵 *zÞ *zð 7CVE#)9~"\## 0 )LABEL MOD 'NOT &OF OR (OTHERWISPACKED +PROCEDURPROGRAM !RECORD -REPEAT SET *SEGMENT !THEN TO  TYPE UNTIL VAR WHILE WITH !n> #w"h"f^#V*hz"dý!na8{+BMDì*+V+^" "T*R^#V ( O*R #*" "R"*y x( *~c"ìo&)) F-N q,py*P$s*""Z CV/<_*^#V7R"~C^#V#N#F8o>g9v o>g9v*##y*V***!9"  . |0)D_>W>o>g0x0K 0 ýR0Bz *h*fz *l*j+ !'*PҬ Ҭ] *j*hڽʽ ?͹!!x)C"f"h"j *h*fzKW(/K|!>áx}})"jyKxjxʽ*jjý>!/͞>!:͞ýC*Ps#rì^#V"Pì*Ps#r "P!9výxý͖s xʽ]Tý}|8͖ý ͖+ý0ѷRý  {*Z>O*\ý͢({/ #z/ #:v ͢(~/ #~/ #:v(CVx!8X{z8M!vqxgOFszg_~!\^#V( = x!z G{_#zWx:v2!"$P~(b0^Ox#">!x̓0&: E*#!!͹>88Oy 2~*w0O|!*T] FO>8/GO+~7G,_~W+~O+~7Gҡ$g_|W|O|GáwGN #x=beƁOGOG~#V#^_P|gxҕzWyOxG- ||ʴ}l&.Æ_üwOG~ G#yƁO ~#V#^_~G&T!>&d!>25&#~ !*!""N*~ɯ2>2i`""""!y&"*'|&:t'*0!*̓!(  x2t'"8 *"!"*!A&w**͋!( (x2t'"&!"*"G>  x!8|(;(=(-(:(@7 #7 *7 ?< 2J aC { w*%*/͞>*:W x:t Ƞ2t Ʉ͊ Ö OYy(OOy_  ҹ ɯ ͻ ^{# ?!6!?!#F+N+V+^>2X Hz@CPt$> nk(:Chԥ5!c_ʹ1^ l $-xX(y)hSYR%oNˑ?;! I|oŰE7v@pvCV2X:Xʽ?͵Rý͵"f"hR*h*fý͵ͤý͵ͅþ͵3&y( !$*.!0!ý>>2!s$"""""3&~ (G:(~ 9#~2###^$*|(W!~ w** A&w*ýx2.Ç**'$:&|&!"2*}'**{(g:(NH%V:%ʹ%$͊ wwq#6ý>2ý!#9 *#j*#j!# t!<2\!#]<!\d!!n# :@!. Pascal ABORT. PC= FFFFh SP= FFFFh $$$ SUB*}ʬÇ*ì{2#w#wì}2#{ì2y(02&o7"":>>2ý#N#V8x8 y8 }?0 }o|g{_7}o0!9~ +~r#wS(@){_{_øZx)zG{֐ڄz}>2Xҋ>_8 O>G¼{} ,GOWo,-(||))|?bk ##6++Fj'A&5'~w!T!w! %:a'bk 6j'>27%! {~w*)*#~2%#~2%π@ `-TIہI1r ^[((*'*';*'*'ͅ;6^w#VwzW{_! 4!~oO P!!!! Y!!ͷ!͆! ͷ!͎!  ABDEFGGCONSOLE#CON#CRT >READER 5Pþ͵?þ͵ͬþ͵;þ͵͜ý͹bþ͹ͽþ͹þ"ZzWx怺 (YP{ z { z*Z!9]T>w>Ôw>GҞ/ZQHo8- $%~o###zW+y>%͋%wl%%} %> %:ʝ> 6#{ A&w#"$: @:y2 = ͏%#t%>w  :7>>( YOʹ%Oʮ%} Þ%_>Ø%*b|~#"b!"b& % *, s#r> 2& >&\! +~ x xx~a4{4# $~#<7#Ezq#RO:=@I |o}xƐ'@'ɯ2J #~:+:~@##¥:<~>:7.~.#y !  :J 7x7~ #. *>? ~# ߷<怨BW]"Z}o:X2Xl&9*Zo$MDy_xW{z/W{/_xzW{_>y͇y͇y͇y͇}0>02>0]T< 8=kbG:”> x>20~0~0#yÞGN#xy_ѯ #7# y(yz{x7# ͤ*'*';b}2R"~"|*'*'ͅ"":8 (X("z"x(:(t){(w)͵(:ڂ)͜:y)͜"z"x(:ʯ)µ)͵(ø){(:)͜{*'*')2*'*'?:= ""468:<>@BDFHJLNPRTVXZ\^`bdflnprtvxz|~b 8 D`r$``p+``p#``q``q4+%!`q`qO`p`paD `qO `p a( `qO `p`s`q` g9!9!!9"" "R"T! "}2ý!2!J&*2w:2!2~22 N#F#y2#2:w#:w#q#p#~#~#ίR**?**;ͅ"":= ****;|S,} >2X>f,>2}ց2.+D,*&R*'*'?ͅ:D,*'*'?*&R*'*'͹R)þ͹͒)þ͹4*þ͹u*þ͹'+þ͹INIT/Ob aO  aOb- ab&a| Oa| aOb- a+˃x˃O˃O˃˃˃˃˃˃˃CdDD."1}2!~2#<$61 .ͼ.U̓!]13#ͼ.M0!s1͹E0L1/0DM#~#fo*b#6+"b!"b 2/0!EX">T22̓!]1S#!PC">O22! !0S#2! 1S#**0!&1S#"%"$!2͓!/0! 1S#?? No Machine code fileͬ'""ͅ****͎;"z"xͤb"R͎)*)?:yo*"z"xͬ{ڎ*""*'"*'"!")-R*KBS R**?**;ͅ""*- :x+*'*'*z*x**,þ͹|,þ: ʬ-ýCV| !- R*-N#- -K*n&y-f*n&-]*#n&-ft- S#12 P#123 Lev 12 12345 - line executed. Entering Proc name - 12345678 :.!.@-! /-:2!--!'."PBKPpS   "*Bd cEBB 2bH2bQ˃˃˃˃˃˃˃˃H2x=/! [ "$&(*,.02 found ?? Machine file ill-formed Machine file load address too large *b<6,#"b6 ?? File name error! <@T=0f0*@Tf03@M=m0K "!@P!`P!\ 2XF+}O+W+}ց2_}o""*'"*'">2****;ͅ'"":= :o:xһ+*'*'͎""*'"*'">2o&R:<OYPS w CHASE  ??/??/????:??  |/}. Ҷ1/ n# ?? Pascal Library not found. ?? Pcode file not found. ?? Pascal Library ill-formed. ?? Pcode file ill-formed. PASCAL/M version NOT compatible with OS. Sorcim PASCAL/M ver vv.llPASLIB PCO!/]<t!<22\!TEP O͔.ͤ. ~.}|:.c.~ ]. ].,].;].|~. ~.~.aY.{Y. w#).6#.:.x.~ ~.~.#c.6#).6go~Œ.ѯx~ ʟ. £.#Ô.~'ʴ."ʴ.2.6#2.1~#.<+w#_^#Vѯ715ͬ1!""""U!///p`s Ga`aEʃʃGɃɃ̈ɃɃˈ0˃˃* Welcome to the Sorcim program of CHASE...#, The object of this two player program is to#, avoid ea= left; U1rht : U1stat.Dir := right; U2rht : U2stat.Dir := right; otherwise Uchr := Lchr; end; Lchr := Uchr; end(*Getchr*); procedure Cnewpos (var U: Ustat); var Offsides: Boolean; begin case U.Dir of up : Char; Screen : packed array [0..Width, 0..Height] of Char; U1stat, U2stat : Ustat; procedure Init; var i,j : Integer; begin FOR I := 0 TO WIDTH DO BEGIN Fillchar(Screen[i],Height+1,' '); end; Conact (0) E$ + user wins #Ƀ$ x user wins #Ƀ$ Want to play again? (y or n): #  ¼ȃƃ׌  fȃ In)Ht  r; var dum : real; Uchr : Char; i : Integer; begin for i := 0 to Delay do begin Dum := (0); end; if Steps mod 20 = 0 then Delay := Delay - (Delay div 10); if Filebusy(Keyboard) then Exit (Getchr); Read (Keyboard,Uc79; Height = 23; U1UP = 'E'; U1DWN = 'X'; U1LFT = 'S' ; U1RHT = 'F'; U2up = '8'; U2dwn = '2'; U2lft = '4' ; U2rht = '6'; type Ustat= record X,Y : Integer; Dir : (up,down,right,left); Ch ch other and the walls while moving#& your object around the inscribed box.#4 Player one (+) uses e,x s,f for up,down left,right# Player two (x) uses 8,2 4,6#0 Please inWrite('-'); end; U1stat.Ch:= '+'; U2stat.Ch:= 'x'; U1stat.X := Width div 3; U2stat.X := Width div 3 *2; U1stat.Y := Height div 2; U2stat.Y := Height div 2+1; U1stat.Dir := right; U2stat.Dir := left ; U1stat.Dead := False; U(*home and clear Screen *); for i := 1 to Width do begin Write('-'); end; for i := 1 to Height-1 do begin GOTOXY(0,I) ; WRITE('I'); GOTOXY(WIDTH-1,I); WRITE('I') end; Gotoxy(0,Height); for i := 1 to Width do begin (*$D- Must suppress debug info for Filebusy *) program CHASE; --************************************************************ --Note to users of this program: --'Contest' is intended to demonstrate and exercise --the console-action intrinsics of Pashr); if Uchr = Lchr then Exit(Getchr); case Uchr of U1up : U1stat.Dir := up; U2up : U2stat.Dir := up; U1dwn : U1stat.Dir := down; U2dwn : U2stat.Dir := down; U1lft : U1stat.Dir := left; U2lft : U2stat.Dir :: Char; Dead: Boolean; Wins: Integer; end; var Delay : Integer; Mspeed : Integer; Ngames : Integer; Steps : Integer; II : Integer; Crash : Boolean; Lchr : Char; Uch dicate your machine speed, 2 or 4(MHz)#GɃɃϘ TIE game. #qɃ7Ƀ˃ User #Ƀ  won.#5Ƀ˃ User #Ƀ  won.# Total number of steps : #2stat.Dead := False; Steps := 0; Delay := (Mspeed * 100) - (Ngames * 5); Ngames:= Ngames+1; Crash := False; Lchr := '.'; (* throw away any Chars in usart *) while not Filebusy(Keyboard) do Read(Keyboard, Uch); end; procedure Getchions/applications) to this program --for inclusion in the next release of Pascal/M. --Please send comments to Digital Marketing: --(address inside Pascal/M manual) --************************************************************ CONST Width = cal/M. --This program and the procedures within it are NOT licensed, --and the user may adapt any part of this program --for his own software and/or personal instruction. --Indeed, users are encouraged to suggest improvements --(or useful adaptat : U.Y := U.Y-1; down : U.Y := U.Y+1; left : U.X := U.X -1; right : U.X := U.X +1; end; Offsides := (U.X < 0) or (U.X > Width) or (U.Y < 0) or (U.Y > Height); if not Offsides then begin Offsides Writeln(' Welcome to the Sorcim program of CHASE...'); Writeln(' The object of this two player program is to'); Writeln(' avoid each other and the walls while moving'); Writeln(' your object around the inscribed box.'); Writeln(' Player ones..3, ' x user wins ',U2stat.Wins..3); Gotoxy(4,Height-2); Write (' Want to play again? (y or n): '); while not Filebusy(Keyboard) do Read(Keyboard,Uch); for II := 0 to 700 do begin Uch := ' '; end; Read := Screen[U.X, U.Y] <> ' '; if not Offsides then begin Screen [U.X, U.Y] := U.Ch; Gotoxy (U.X, U.Y); Write (U.Ch); end; end; Crash := Crash or Offsides; U.Dead := Offsides; end(*Cnewpos*); procedure Disp (+) uses e,x s,f for up,down left,right'); Writeln(' Player two (x) uses 8,2 4,6'); Writeln; Writeln; Write(' Please indicate your machine speed, 2 or 4(MHz)'); Read( Mspeed); Ngames := 0; repeat Init; Dispts; (* Display I(Keyboard,Uch); UNTIL UCH = 'N' end. Ps#r "P!9výxý͖s xʽ]Tý}|8͖ý ͖+ý0ѷRý  {ts; begin Steps := Steps +1; Cnewpos(U1stat); Cnewpos(U2stat); if not Crash then begin Crash := (U1stat.X = U2stat.X) and (U1stat.Y = U2stat.Y) end; end; begin (*chase*) U1stat.Wins := 0; U2stat.Wins := 0; Writeln; Writeln; Write(' User ', U2stat.Ch, ' won.') end else begin U1stat.Wins := U1stat.Wins+1; Write(' User ', U1stat.Ch, ' won.'); end; Writeln (' Total number of steps : ',Steps, ' + user wins ',U1stat.Winnitial setting *) repeat Getchr; Dispts; until Crash; Gotoxy(4,Height-3); if U1stat.Dead = U2stat.Dead then Write(' TIE game. ') else if U1stat.Dead then begin U2stat.Wins := U2stat.Wins+1;