XB40:2004 DSK (?? ! MANAGER aaZ70!6?8&402D402D402S402S12PIO___________________________________________________________________15027 10NSYSTEX  4"XB2004TEST,0pٱXB40:2004 =PXB40:OBJ >PXB40:S P !XB40:SA $P$#1XB40:SC ! XqX?      "`BpBG " `Bp'>GLpC2'0GB(pB`jings, OK 74063Working...Program Completed!`* EX=< `XqX?   "`BpBG " `Bp'>G@pC2'0G> pB`j**********************SMOVE 1`j2EODEFSESLOOPQSYL4]SYL3iSYL2xSYL1>LIN02LIN079LIN06ILIN05UpLIN04aWLIN03m>TABLEyWSP1OFFSET MSGCMSGBMSGA MSSLOAD "B1B"` 3`j*********************** ** Generated By ** SysTex V1.0 ** (C) 1985 ** By Barry Boone *"INITLOAD81962540LINKSLOAD> R13> R12> R11> R10> R9>R8>R7>R6>R5>uR4>}R3>-R2>R1> R0>b^*******************?YSTEX2 @`dI7(E$(X''Z'01J110% B% x'n-d-Z-P,F-<-2-e(-,X, '0'040'33/3J)a*&2'~*kt-j)`)V3VL'B*83.%$%&R&2X2()'333*+ *+G4#5z!Qp`f \!YWRH#K>"4'*" #x' #(+~-+-,,,.----F.P.sv+l+b,X&N4D4J:&0 P&!~4445#&(e((($/'6#5^6['|$r( h5t^5T5J(@/%6/;,/o"6#(..( 7Y(966(?%O!7'0(x$*n$d$jlI13RI1RISOUND1000400066028800See?LINKTEXTLINKPRINTTFLINKPRINTTַ45$Look two lines up, right after also.rLINKPRINTT$Of course you can just bop back intoLINKPRINTT$regular mode to use those functions.nLINKPRINTTYou also need to avoid the CHR$LINKPRINTT%function. It may currupt the display. ! !F !0 ! ! " " ". "\ #h &, !v  >   B  y  !t`s !`!ts> !!`j ! "B-"Bm1"J`"Jm`]ab@[.~S#d V@) !   !܁"ZROT 6V V 8  , 2 @"[ r`U    : 4 2  !  A#d 0  !$ 0[ "` S#d " V ! 2  !  .` $%~$#F%: . ! %~ "%4Nà "@#d%ѣ& v ,%Pf#@ $ & $ $ ( * ( (H % ̠ " ,  %$&&P & *%$ &&SDbF,CLI& *F `#`$B@@` `## #[ `#?@!` *[ [ Š% %̠\ %% @ \ 20p0T0VP @#f .  !p P  < ! [ `#   *$ ( *%  @\*ONXYxyRDX #d|~r !$`| `#d *D&&Q$@| FCD5 FCD4 FCD3 DSRLK ! MAKEITLDX $DSRLK VSBW ! VMBW !VSBR !VMBR !VWTR !DSRLNK! XMLLNK!GPLLNK!LOADER!$KSCAN !VDPRD VDPSTAVDPWD VDPWA GRMRD GRMRA GRMWD GRMWA N>__/?_o/?_/_??//o/o. @rX |   -  1&ׁ@J ]Aׁ(xc2222#2222#2222#2222Y22###'#d~1147:=@p D p Qp p  !,  "̱̱̱̱̱ "'?8&  L ΁$`l -@&4l2   nj1 >>n>n>n`1!AaQ,X | (C) 1984 BY Millers Graphics4l  rj4 ƢƢƢ`4! AaQ4lH  nj7 >>>`7! AaPQ洣,1#XB40:2004 CFROM ERRORS= , TO ERRORS=Yx\@4ljlll^ hjX X  Y\ 4l  njYx ~~~YĠ Ğl Ĝl P)` `$ Y\ X X 4 ` Ğp Ĝr s-`~` `l*`. Pl@`` ` Ğp Ĝr.t 4l.0^  nj\@  Y\ ` `l`4X X \Ġh Ğn Ĝn P ` ` ~.``~^ ` ` lH4l  zl΃` ` hנ4J ^^`  ``^9 `. 4 \`4`^4` Ğn Ĝn4 ln&l  zl P"""" `4` `  ~.ƒ\^`.1`Y!`\!\\`0 1 B`` ``B ^d L \bȨ@`\Pdād ^N$`P h^` Z^ b` ` 4l`^4l ^d L#``bDb`d\Pd`\r(f ^NJ`P4j^` Z^ b f\ f` ` ```B 1 0 `1 `0 140818 L\P 1 X2^1.Ġh4`h`j (`hrf`jrf`l` \``\ 1!08B Q\ b \f[ \f[hcg j2cgjnruy}R4lj @  nj@@ R @@Ġh~R` `,. llR _  zl_ ,,, _4p _`(%4(S  zl_ «nnn4 _ h«```. د.   tj c¬ `б:(M. : rj g ¬^Ь^T^ `` Q!Q. `! !!Q 24(!   |lj2¬$$`БS " .   " s. P.8ܰ NΠ  @  4(Bl^`4J. 3"$.``/`B`%`.8a.8( \  \P `P*  Р" X"@  ^i\ 2C .8`\r(f4`\ \. \P 2^6p/ \ P 2^"Ġh`4(m>4(%``d/01DSK VERIFYING SECTORS < >DISK INITIALIZATION COMPLETEDINITIALIZING DISKINSTALL DISK MANAGER Y/N :INSTALLING DISK MANAGERCONFIGURATION SET TO SINGLE SIDED (j`Qނ`Qv`Q`Q΋l`! a rB!! ! J[MANAGER aaZ70!6?8&΋ < <?8 ́́́́́́  `΋c"""Y##"'"J[c###Y[402D402D402S402S124l  rj: ⼸⼸4`:! qaQ$,U}@@4   X @ l>X llj  zlU \4X  器 l,  zl} \ҽ\ҽ\4 X  﫸S   `!BԠ BԠ \>X`!DBԠ BԠ \   nj@@\ξξ` ``@Ġh~` `* `ilt  zl΃4J \222ߘ ` `lH` 14 @``΋4(1J[` ``z `.xl4x* \\ \. ` `’` `` ``à4(f`DISK TESTS COMPLETED` `.xl4x* j1ׁ\pTT0\ \. ` `’j2ׁ\p0\ \. ` `’ .  \j3ׁ \ \  ` `’` `` ``à(f`΋` ` `rf` rYfr f`\r1fJ[J`΋l4x$04x$X4x$4x$l4x$J[΋l4x$4x$H4x$l4x$J[ , .`2 , .`΋`@!L  \P ^' #P "P` `.x$`$ ` ` 4x$` ``$J[.x4(f`DSK. 1 1X [ [ @ [΋ N MX`l΋ M`l΋ N MX`l΋ M`l  @  [ J[ ΋(Č` `Ĝ (. 4 . Ĝ&!hĜCĞrf`Ĝr& fJ[{][{ױ[.8t!  # [ 2d 0pfܓܓܓԓ'< j fc< l g < n h ifp  pi[ DISKETTE TO LARGE FOR DISK DRIVE{΋P Q`$L .  `P,` `%`. `  !!q 24( J`QJ[{΋P Q`$L2J[WRITE PROTECTED DISK BAD PARAMETERS NO DISKETTE OR NO DRIVESECTOR NOT FOUND LOST DATA ON A READ LOST DATA ON A WRITE !"#(134''ƴ^; ΋`P4˜> + "H&נ ײ `JrfױױױבJA[΋BA A !!0ׁ BJ[@@DQ34 ljl 6  nj@@ hhh@Ġh~6` `lHD6Ȳ6Ȳ6Ȳ Q36"ȌȲȪȲPPDSK1. OBJECT FILE NOT FOUNDLOADING OBJECT FILE @D `!D (JJx.Lɂ΁$`l נ@J נ ׁ2&(I(`!*!Q\ !(4(`Ȍ΋\ ! J[΋ |ׁׁ VJ[BEEPHONK:OBEEPHONK:SBUDSUP:SRCDSKLBL:03 GPLDSR:S HPCODES MANAGER MINITESTERMTXT5LINE NEWCAT NEWCAT:ALTSYSTEX XB2004TESTXB40:2004 XB40:OBJ XB40:S XB40:SA XB40:SB XB40:SBNEWXB40:SC XB40:SD XB40:SE XB40:SF XB40:SG XBDSRLNK:SXBEQUATE:SXBEQUATES XBSOUND:O XBSOUND:S XGPLLNK XGPLLNK:MGXGPLLNK:MOXGPLLNKO XGPLLNKS XINVERTS XPRINTS XXBTEST T>EDITOR T>HP2392 T>HREVIEW T>MAINMENUT>PCPDIAL T>SETCOLORT>SETFILEXT>SETHARD T>SETMACROT>SETMODEMT>SETTERM T>TIBBSXMDT>VT100NETT>VT100VAXT>VT52 T>XMODEM T>YMODEM TELCO TELCO:RUN TELCODOC TELCOXB TELCP TELCQ TMGR1 TMGR2 TMGR3 TOS/CONFIGTOS/PCP TOS/PHONE `$% a(0 EXECUTE COMMANDS Y/N :FILE COMMANDS COMPLETEDEXECUTING COMMANDS# of Files to Copy : Total Size of Files : L΁$`l4 lj -$  nj@@ $ZZZ@Ġh~$` `lH`. Pl@l4ll.x`T$VXZR`V,vxτ8`h τ8 ϊB!2B τ8 ό!D`lD ~l ώ2 `:`l`x#ђўѪѪҎђў$$$$$`$``τn `:τ`τ τB `@ ђўf4Ҏ`τn `@τ`τЈnτB`!(```τ τB`!``8`h τ8 ϊB!2 τ8 ό! l ώ `F ђў&`τ܈n `Fτ`τ τB ϐ ϐ`$Ҹ π4(ϔ  zlђўӲӖӲӖӲ4 jϒl|`πQ X X  @Y&4ljll Ġτψφ۸\`Eլ խծկ φ%uUψψτ τl((n `φ Y\Ԛ΁`(ָ؈גbٴ4(Ϫ4lljנ4`$`h` h8 h!2bZ``j`h`h8`h τ8 ϊB!2 τ8 ό![΋`φrf`ψr fJ[UuTtMmTtPpCcMmDd Unprotecting : Protecting : Copying : Deleting : Renaming : 5΋τ۸L\`EզէA%U `;U`Np T t( 4$(( `@!AL֞΁X | `l`Pkτ τlJ[΋τ۸S\`% բ գդեA%U `;U`Np  8( 4$(( `@!ALb΁X | `l`P τ τlJ[J4ۈ`΋τ۸V\`% ը թժիD%U `>pտ7`N( 4$( ( `@!aLB΁X | `l`Pτ τlJ[ τ8@"2[`τ 8@"ʀ[΋τ۸`ٜ\տ{ `pp  : ؆ Р@$΁X |`l`P ؄P`| ؆N( 4$( ( TP( `@!AL~΁X |`l`P`| ` pτ τl`؎J[ ծٲ կٳ հٲ ձٳ΋τ۸c\`EٲٳX  6G! @ 4$( ( Dմ մ `! (տJ НP`| ``|τ τlJ[BAD DISK DRIVE NAMEWRITE PROTECTED DISKETTEBAD OPEN ATTRIBUTEILLEGAL OPERATIONOUT OF SPACE ON DISK DRIVEATTEMPT TO READ PAST END OF FILENO DISKETTE OR HARDWARE ERRORFILE ACCESS ERRORڲ :W΋`P !hajױJ[MANAGER ΋pJ`ۮ p[CcMmYx\@΋NP0`NN04l  njYx BBBYĠ P-` `( Y\ X X 4 ` Ğp Ĝr s-`NQ`~` `l* ` Ğp Ĝr.t 4l.0  nj\@ *** Y\ ` `l`4X X \Ġh P ` ` ~.`~ ` ` lHl  zl΃` ` hנ4J  `  ``3 `. 4 \jނv`4`4`4` `  ~.ƒ\^`.1`Y!`\!`NQJ[J4 lנ4`J`J4lljנ4`$X X  Y\ [΋τN L۸`\`E` ````` `߶N`РY$΁X |`l`P`|4$( ( "1P1V1X1ZTP!"P!PR T"РY$V$j΁X |`l`P`|` `N4l`Р\$"V$΁X |`lLL`PT `|M4l  zl *4( h PψP`Р\$v΁X | `l`P`| T"RР\$V$΁X |`l`P`| RTh Rψ`P ψ φn ` `N``τ τl`l` `N`J[΋B!BABL PN(  P J[1214131209,YNSDCMDcmdNnUPTupt0*"L*r {΋$ t " ) @R *C qaHJ[΋`" `x`v*Q $" jk"  lp ׃C% JJ[ %΋p΋pJ[΋%   pJpJ[΋pJ[΋pJJ[΋ԁR%Ԡ$J[΋ܠR܀%$J[΋ %P$J[R [*" `H` ΋pJ[΋J[R ΋pJ[R [΋JpJ[%2%[΋G%ׁr%J[΋%ܠ嬘%J[΋ ]AׁJ[΋ ]aׁJ[2 _@ZZt΋ R u`| `R  * "   " p* %"      J[$23J% N UProgramDis/FixDis/VarInt/FixInt/VarPU4lj  nj@@ £@Ġh~` `lHlRTVX Z4l y2x s \bʀd \ P  ^`VQfl`fa/?\P  ^`VQ b`dC!0PpC!`0 0 D`0C!! ``沨 pb tdfl`b`% \bh`l< rj . Ĝ4ĞhĜנ@(. `k!0!ׁ`lr,fױ`Ğr=f`ĜrHfn4`i!1ׁ kl|`l`ɠ R` `bח  ׷ 'wr(f `    "  "ױ  ` r(f ` `b!בn pb h``` '^%`2`ZQ^v@x `h h8 h!2b``j`hh``TQ`XQ(88 PP(.xfl8    (4xf.xfJ[( C[;΋ (]J[(L`[TP΋__ __  PP( #`ױױנJ[΋΁ ΋΁(PJZׁנ VX | ! J[΋`| `  ]AJ[JR8 J8 [ 2 ΋ ؔ1װJ[΋ J`| `[ Р☘ Р 8 8`! [;{@[λ΋4`P \^*[JJ[ #[+[;{p[{л搑%[΋ 3ׁrJ[@ 8 h;΋B (ׁJ[(j΋3г 3 8 h3 j׳J[;;΋A $נJ[ [` [@?[`@@?[[111112  21Y402D402D402S402S XB40:2004 NN"PIO________________________________"___________________________________Y     15027 10ND I S K M A N A G E R V 2.3Select Option: 1. File Utilities 2. Disk Utilities 3. Disk Tests 4. Configure ManagerWritten by Steve Mildon File UtilitiesSelect Option:1. Copy / Rename / DeleteChange Protection 2. Load and Run (Assembly file) Disk UtilitiesSelect Option:1. Catalog 3. Rename2. Copy Disk 4. Initialize Disk TestsSelect Option:1. Read only test"2. Destructive Write and Read test Configure ManagerDrive ConfigurationDrive 1Drive 2 Tracks/Side : Tracks/Side : No. Sides : No. Sides : Density S/D : Density S/D : Drive 3 Drive 4 Tracks/Side : Tracks/Side : No. Sides : No. Sides : Density S/D : Density S/D :FromToDrive No. : Drive No. :Output Configuration Screen Color: Text Color :PRESS CTRL X FOR NEXT PAGE Page 2 of 2Single Density Interlace :(1-10)Double Density Interlace :(1-11)Enable Turbo Option Y/N : SAVE CONFIGURATION TO DISK Y/N :PRESS CTRL E FOR PREVIOUS PAGE Drive No. : Disk Name :FreeUsed File Name :Program Name :DSK . Page ofFiles Free UsedFilename Size Type P---------- ---- ----------- -"CMD Filename Size Type P"--- ---------- ---- ----------- -Turn Page with CTRL E - CTRL XBUILDING FILE LISTFrom Drive No. : Disk Name : Free Used ToInitialize Diskette Y/N : Tracks/Side : No. Sides : Density S/D :Not InitializedFilename Size Type P---------- ---- ----------- -New Disk Name :BUILDING DISK CATALOGLoop Y/N : Log Errors Y/N : Side No. : Sector No. : No. Errors : Loop No. : Test No. : DISKETTE ALREADY INITIALIZED Proceed Y/N:WARNING: ALL DATA WILL BE LOSTCOPYING DISK < >LOAD MASTER DISKLOAD COPY DISKSINGLE DISK PROCESSING NOT SETDISK COPY COMPLETED Not InitializedCOPY PROTECTED DISKETTE#NOTE: TO DRIVE FILES WILL BE ERASED"FROM DISK TOO LARGE; CONTINUE Y/N:"FILE IS WRITE PROTECTED; COPY Y/N:::::88 K$D3CL372LINKCOLORT16CLCLULINKPRINTTLINKPRINTT&XKEY can help avoid the CHR$ function.vLINKDISPAT201XNOTE: You need a file called CHARA2 in Drive #1 or else it will just fail quietly.,LINKPRINTTLINKRETURN-LINKPRINTTcolors of the text.KLINKHCHART9102042LINKHCHART12102042LINKPRINTT$There is an XKEY function in the setLINKPRINTT%which can directly return a string orLINKPRINTT ASCII value.bLINKPRINTT#Random numbers won't work either...LINKPRINTTLINKPRINTTDLINKPRINTTSOUND1000440066028800RANDOM NUMBERS...,I13RI1LINKPRINTTRIpLINKPRINTT&You can use sound, but it will corruptLINKPRINTT the screen!LINKPRINTT K$C K$B,LINKXKEY0K$ C$?CLEARLOADING C$INITLOADC$INITIALIZING...LCLEAREnter name of code to load,or enter null string to skipC$4I124LINKDISPATI1طD$I40ILINKSCRLT41010BLINKDISPAT241Press for a PIO screen dumpdLINKDISPAT101FWELCOME TO THE 40-COLUMN DISPLAY UTILITY FOR EXTENDED BASIC.LINKDUMP2I13LINKDISPAT20I22T$IIYI13LINKACCEPTI2018TILINKFORMATTIT$I18I;I13LINKDISPAT20I20 >| |83D0=00-*A0E86BC804B8356B04E0B837CB0420C03EAB0014B1008BD820C004CB83557F293F 0142A0E9CB04E0B837CB0420C03EAB0014BC185B0586BC045B0221B0001B0A817F29EF 0143A0EB2B7060B8356B111AB0981BD020B8355B0980B0220B8300BD870C00627F2C9F 0144 >83D0=00-*A0EC8B0581B8181B16FBB06C5BD805C0062B0200B0000B0201B0002B02027F2E0F 0145A0EDEC0062B04E0B837CB0420B2010B0460C043CB0200C0062B0201B2A2A7F2CBF 0146A0EF4BCC01B0280C0072B16FCB06C5BD805C0062B0460C0ED4B02E0C00927F275F 0147 >83D0=00-*A0F0AB0200B0000B0201B0001B0420B200CB0420B2018B12B8BC0A0B834A7F2F8F 0148A0F20BC802C0006B0282B0001B1141B0602B38A0C0008BC1C3B0581B04207F2F7F 0149A0F36B200CB0420B2018B12B8BC120B834AB0284B0018B1532B8120C00067F2E6F 0150 >83D0=00-*A0F4CB1102B0460C043CB0604B3920C0008B0581B0420B200CB0420B20187F301F 0151A0F62B12B8BC220B834AB1502B0460C043CBC0C7BC003BA020C0008B02017F2B1F 0152A0F78C00FCBC0A0C0008B0420B202CB6020C0008B0420B2024BA0E0C00087F2CBF 0153 BYTE TO R5-*A0F8EB8143B16EFBC005B04C2B0201B8000B0420B2020B0580B0582B88027F2C9F 0154A0FA4C0008B16F9B0608B16E1B0460C043CB02E0C0092B0200B0000B02017F2E0F 0155A0FBAB0001B0420B200CB0420B2018B12B8BC120B834AB0284B0001B11377F2DEF 0156 BYTE TO R5-*A0FD0B0604B0581B0420B200CB0420B2018B12B8BC160B834AB0605BC1857F2C1F 0157A0FE6B6184B1502B0460C043CB0586B0581B0420B200CB0420B2018B12B87F2D7F 0158A0FFCBC220B834AB1502B0460C043CBC004B0201C00D2BC086B0420B202C7F2A0F 0159 BYTE TO R5-*A1012B0580B0602B0420B2024B0600BA020C0008B8800C000AB11F1BC0047F317F 0160A1028B0201B8000B0420B2020BA020C0008B8800C000AB11F9B0608B16E47F305F 0161A103EB0460C043CB02E0C0092B0200B0000B0201B0001B0420B200CB04207F32AF 0162 BYTE TO R5-*A1054B2018B12B8BC120B834AB0284B0001B1141B0604B0581B0420B200C7F301F 0163A106AB0420B2018B12B8BC160B834AB0605BC185B6184B1502B0460C043C7F2C6F 0164A1080B0586BA160C000AB6160C0008B0581B0420B200CB0420B2018B12B87F2FFF 0165 BYTE TO R5-*A1096BC220B834AB1502B0460C043CBC004BA020C0008B0201C00D2BC0867F2D0F 0166A10ACB0420B202CB6020C0008B0420B2024BA020C0008BA020C0008B88007F309F 0167A10C2C000AB11F0BC004BA020C000AB6020C0008B0201B8000B0420B20207F310F 0168 OF CALLING PMGA10D8B0580B8140B1501B10FAB0608B16DEB0460C043CB02E0C0092B04C07F2AFF 0169A10EEB0201B0001B0420B200CB0420B2018B12B8BC120B834AB1309B02847F2E9F 0170A1104B0001B113FB0284B0005B153CB0A84BD804C005DBD820C005DB83747F2BCF 0171VB @GRMRA,1PMGA111AB04E0B837CB0420C03EAB0034B04E0B837CB0300B0002B0300B00007F2E3F 0172A1130B0420B201CB9820C0053B837CB16F6BD120B8301B2120C0002B130E7F2E9F 0173A1146BD060B8375B0981BC801B834AB0420B2018B0020B04C0B0201B00027F2F8F 01744+,@GRMWA1PMGA115CB0420B2008B100EBC820B8374C00D2B0204B0100BD804C00D2B04C07F2D3F 0175A1172B0201B0002B0202C00D2B0420B2010B0201B0500BD801B8374B04607F339F 0176A1188C043C7FD99F 01774+,@GRMWA1PMG50846CHRSET5087ATEXT 50902COLORT508C2RETURN5095ACLEART7F1CBF 017850966DUMP 507FEALCHAR50A76DISPAT50AC2PRINTT50B14INPUTT7F1B3F 017950C1AACCEPT50D58HCHART50D9EINVERT50E16REVERT50E2EFORMAT7F15DF 0180>0300 RANGELY50F06SCRLT 50FB0VSCROL51042HSCROL510E8XKEY 7F4BFF 0181: 99/4 AS Version 0182,2# BLWP @VMBR *READ LINE CLR 1DATA >0008* LI 1,>0300 RANGELY0119EXBTX40V1A0000B0000B0100B0000B0000B0020B0300B0110B0028B00007F263F 0001A0012B0000B0000B0000B0000B0000B0000B0000B0000B0000B0000B00007F3AFF 0002A0028B0000B0000B0000B0000B0000B0000B0000B0000B0000B0000B00007F3A8F 0003003A003EB0000B0000B0000B0000B0000B0000B0064B2000B0003B0407B08097F36FF 0004A0054B0D20B2860B7E7FB80FFB0000B0000BAA00B2E00A0064A00747F3CCF 0005A0094A00B4A00D4A00FEA01FEA02BEA02C0B0000B0100B0010B0000B50207F2DFF 0006006A02CAB0000B0003B5049B4F00B0500B03EAB0000B030FB000BB4453B4B317F2DAF 0007A02E0B2E43B4841B5241B3200B3838B3838B3838B0000B0000B0000B00007F319F 0008A02F6B00FEB007CB7C7CB7C7CB7C7CC02F8C002AC0306BC17EB53E0C00557F21CF 0009009A030CBC020B8356BC240B0229BFFF8B0420B2028BD0C1B0983B0704B02027F2A4F 0010A0322C0020B0580B0584B80C4B1306B0420B2028BDC81B9801C0062B16F67F2E1F 0011A0338BC104B1352B0284B0007B154FB04E0B83D0BC804B8354BC804C001A7F2AFF 0012012A034EB0584BA804B8356BC820B8356C001CB02E0B83E0B04C1B020CB0F007F290F 0013A0364BC30CB1301B1E00B022CB0100B04E0B83D0B028CB2000B1332BC80C7F2BBF 0014A037AB83D0B1D00B0202B4000B9812C0060B16EEBA0A0C0034B1003BC0A07F2BDF 0015015A0390B83D2B1D00BC092B13E6BC802B83D2B05C2BC272BD160B8355B13097F280F 0016A03A6B9C85B16F2B0985B0206C0020B9CB6B16EDB0605B16FCB0581BC8017F266F 0017A03BCC001EBC809C0018BC80CC0016B0699B10E2B1E00B02E0C002ABC0097F282F 0018018A03D2B0420B2028B09D1B1604B0380B02E0C002AB04C1B06C1BD741BF3E07F2A8F 0019A03E8C0055B0380B2038C03F0BD060B9802B06C1BD060B9802B06C1B02217F2C2F 0020A03FEBFFFDBD0A0B8373B0982B0222B8300B05C2BD481B06C1BD881B00017F255F 0021021A0414B06C2BD802B8373BD83EB9C02BD83EB9C02BC120B2000B0203C04347F28EF 0022A042ABC803B2000B02E0B83E0B045BB02E0B2038BC804B2000B0380BD1337F2BEF 0023A0440B0984BD073B0221B6000B0420B2020B0580B8800C000AB1302B06047F323F 0024024A0456B16F5B045BB04C0B0201B8000BC0A0C000AB0420B2020B1002BD8017F2E4F 0025A046CB8C00B0602B16FCB045BB02E0B83E0B7820B837CB837CB0460B00707F284F 0026A0482B02E0C0094B0200B0400BC800B834AB04E0B837CB0420C03ECB00187F2C5F 0027027A0498B0420C03ECB004AB0200B03F0B0201C02F8BC801C0300B0202B00087F2EBF 0028A04AEB0420B2024B0460C0474B02E0C0094B0200B0300B0201C01FEB02027F302F 0029A04C4B00C0B0420B202CB0200B01F0B0420B2030B06C0BD800B83D4B02007F2E9F 0030030A04DAB0717B0420B2030B0201B0028BC801C0008B06C1BD801C02C9B02017F2E4F 0031A04F0B03C0BC801C000AB06A0C045AB0460C0474B02E0C0094B0200B00007F2E1F 0032A0506B0201B0001B0420B200CB0420B2018B12B8BC0E0B834AB0603B02837F2FCF 0033033A051CB0000B1119B0283B000FB1516B0A43B0201B0002B0420B200CB04207F31FF 0034A0532B2018B12B8BC020B834AB0600B0280B0000B1108B0280B000FB15057F306F 0035A0548BA003B0220B0700B0420B2030B0460C0474B02E0C0094B06A0C045A7F306F 0036036A055EB0200B01E0B0420B2030B06C0BD800B83D4B0200B0300B0201C01FE7F2E3F 0037A0574B0202B00C0B0420B2024B0201B0020BC801C0008B06C1BD801C02C97F2FDF 0038A058AB0201B0300BC801C000AB0460C0474B02E0C0094B04C0B0201B80007F2FFF 0039039A05A0BC0A0C000AB0420B2020B1002BD801B8C00B0602B16FCB0460C04747F2CFF 0040A05B6B02E0C0094B0200B0020BC800B830CB04E0B837CB0420B2018B00027F2E2F 0041A05CCBC820B831CC0000B0200B002ABC800B830CB04E0B837CB0420B20187F2ADF 0042042A05E2B0002BC820B831CC02C6BD820B9802C02BEBD820B9802C02BFB06207F27DF 0043A05F8C02BEBC020C0000B0201C02C0B0202B0012B0420B2024BC1A0C00007F2FBF 0044A060EB0226B000DBC806B8356B0420C0302B0008B0201B0300BC020C00007F312F 0045045A0624B0220B0004B0420B2020B04E0C0006BC020C0006B0201C00FEBC0A07F305F 0046A063AC0008B0420B202CB04C1B7860C0057C00FEB0581B8801C0008B16F97F2BEF 0047A0650B04C1B9821C00FEC0055B1105B9821C00FEC0059B1501B1003BD8607F2C1F 0048048A0666C0055C00FEB0581B8801C0008B16F0BC020C02C6B0201C00FEBC0A07F2A0F 0049A067CC0008B0420B2024BC806B8356B0420C0302B0008BA820C0008C00067F305F 0050A0692BC020C0006B8800C000AB11CCB0201B0100BC020C0000B0220B00047F319F 0051051A06A8B0420B2020BC806B8356B0420C0302B0008BD820C02BEB9C02BD8207F2BAF 0052A06BEC02BFB9C02B0460C0474B02E0C0094B0200B0020BC800B830CB04E07F2A7F 0053A06D4B837CB0420B2018B0002BC020B831CB0201C02D2B0202B0015B04207F2FCF 0054054A06EAB2024B04E0B837CB0220B0009BC800B8356B04E0B837CB0420C03027F2B8F 0055A0700B0008B0201C02E8BC801C0300B0460C0474BC180B04C5B3D60C00087F2E8F 0056A0716BC1E0C0008B61C6B81CAB1101BC287BC1C0BC147BA14AB0605B02087F27CF 0057057A072CB0001B04C9BD820C0058C005CB0201C00D5BC08AB0203B8000BDC437F2ACF 0058A0742B0602B16FDB0201C00D5BC08AB0420B2024B04E0B837CB0420C03EC7F2A5F 0059A0758B0034B04C6B0586B0286B0080B110CB04C6B9820C005CC0058B13047F2DBF 0060060A076EBD820C0058C005CB1003BD828C00D4C005CBD060C005CB0420B20207F2B2F 0061A0784B04E0B837CB0300B0002B0300B0000B0420B201CB9820C0055B837C7F2FAF 0062A079AB16E0BC820C000CC0010B101EBD820B8375C005EB04C6B04E0B837C7F280F 0063063A07B0B0420B201CB9820C0055B837CB130FB9820B8375C005BB13CCB05867F2A1F 0064A07C6B8806C0010B16F0BC820C000EC0010BD820C005EB8375B1003BC8207F2B7F 0065A07DCC000CC0010B9820C0054B8375B1602B0460C09DEB9820C0052B83757F2C2F 0066066A07F2B1602B0460C0892B9820C0053B8375B1602B0460C08BCB9820C004F7F2CAF 0067A0808B8375B1602B0460C08ECB9820C0050B8375B1602B0460C094AB98207F2D2F 0068A081EC0051B8375B1602B0460C09B0B9820B8375C0059B1506B9820B83757F2D8F 0069069A0834C0055B1102B0460C0848B04E0B837CB0420C03ECB0036B108AB98207F2CFF 0070A084AC005DC004EB1302B0460C0952BD060B8375B0221B6000B0420B20207F2FAF 0071A0860BDA01C00D4B0608B8248B1601B0589B0580B05C8B8288B1501B10017F2D3F 0072072A0876BC20AB8140B1501B1001B0600BD820C0058C005CBD060C005CB04207F2DDF 0073A088CB2020B0460C07A4B0420C0A06B0288B0001B1508B04E0B837CB04207F2E1F 0074A08A2C03ECB0036B04C6B0460C075CBD068C00D4B0420B2020B0600B06087F2C2F 0075075A08B8B0460C0880B0420C0A06B8140B1304B0608B8248B1609B0588B04E07F2E0F 0076A08CEB837CB0420C03ECB0036B04C6B0460C075CBD068C00D5B0420B20207F295F 0077A08E4B05C8B0580B0460C0880B0420C0A06B0289B0000B1328B8248B15267F2E6F 0078078A08FAB0202C00D5B0203C00FEB0204B0001B1002BDCF2B0584B8204B16FC7F29CF 0079A0910B0582B0584B8244B1502BDCF2B10FBB0202B8000BD4C2B04C4B02027F2AEF 0080A0926C00D5B0203C00FEBDCB3B0584B8244B16FCBC100BC007B0201C00D57F27CF 0081081A093CBC089B0420B2024BC004B0609B0460C0880B0420C0A22B0460C075C7F2DAF 0082A0952B04C4B0202C00D5B0203C00FEB1001BDCF2B0584B8204B1301B10FB7F2AAF 0083A0968BD060B8375B0221B6000BDCC1BDCF2B0584B8244B1501B10FBB82887F278F 0084084A097EB1305B0588B0580B8289B1301B0589B04C4B0202C00D5B0203C00FE7F2C2F 0085A0994BDCB3B0584B8244B16FCBC100BC007B0201C00D5BC089B0420B20247F290F 0086A09AABC004B0460C0880B0420C0A06B04E0C00D4B0201C00D5BC08AB02037F2B7F 0087087A09C0B8000BDC43B0602B16FDB04C9BC007B0201C00D5BC08AB0420B20247F296F 0088A09D6B0208B0001B0460C075CB0420C0A06BD068C00D4B0420B2020B02897F2E4F 0089A09ECB0000B1306B9829C00D4C005AB1602B0609B10FAB06C9BD809C00D47F28BF 0090090A0A02B06C9B045BC00B4C0A0AB9820C005DC004EB1307B04E0C005DB02007F2A1F 0091A0A18B03F0BC060C0300B100BB0380C00B4C0A26B0201BFF00BD801C005D7F2ADF 0092A0A2EB0200B03F0B0201C02F0B0202B0008B0420B2024B0380B0200B00007F32CF 0093093A0A44B0201B0003B0420B200CB0420B2018B12B8BC120B834AB0200B00007F312F 0094A0A5AB0201B0001B0420B200CB0420B2018B12B8BC060B834AB0601B38607F2EDF 0095A0A70C0008BC142B0201B0002B0420B200CB0420B2018B12B8BC0A0B834A7F2E5F 0096096A0A86B0602BA142B045BB02E0C0094B06A0C0A56B8805C000AB151DBD1A07F297F 0097A0A9CB8302B21A0C0002B1305B0201B0003B06A0C0D3CB100EB0201B00037F2F4F 0098A0AB2B0202C00FEB0204BFF00BD804C00FEB0420B2014B9820C00FEC004E7F279F 0099099A0AC8B1305BC005B0203C00FEB06A0C043EB0460C0474B02E0C0094B06A07F2AAF 0100A0ADEC0CF4B06A0C0D22BD1A0B8300B21A0C0002B1305B0201B0001B06A07F2AEF 0101A0AF4C0D3CB100FB0200B0000B0201B0001BD820C0009C00FEB0202C00FE7F2BBF 0102102A0B0AB0420B2014B9820C00FEC004EB1308BC020C000AB6020C0008B02037F2E0F 0103A0B20C00FEB06A0C043EB0460C0474B02E0C0094B06A0C0CF4B0200B00007F2B8F 0104A0B36B0201B0001B0202C00D4BD820C0009C00D4B0420B2014BD0A0C00D47F2EAF 0105105A0B4CB0982BC802C0006B06A0C0D22BC0A0C0006B0282B0000B1308BC0207F2CAF 0106A0B62C000AB6020C0008B0203C00D4B06A0C043EBC020C000AB6020C00087F2EBF 0107A0B78BA020C0006BC2A0C0008B62A0C0006B06A0C070EBD1A0B8301B21A07F2AEF 0108108A0B8EC0002B133AB0289B0000B132AB04C1B7860C0057C00D5B0581B82417F2CDF 0109A0BA4B1501B10F9B0200B03C0B0201B0000B0420B2020B0580B0280B03D07F311F 0110A0BBAB16FAB0200B03C0B0201C00D4BD0B1B0982B0420B2024BC800B83567F2A2F 0111111A0BD0B04E0B837CB0420B2018B11AEB0200B0000B0201B0002B04E0B837C7F2D0F 0112A0BE6B0420B2008B1020B0200B0000BC800B834AB0200B0000B0201B00027F32EF 0113A0BFCB04E0B837CB0420B2008B1013B0201B0001B7860C0057C00D4B05817F2D7F 0114114A0C12B8241B1501B10F9B0200B0000B0201B0002B0202C00D4B04E0B837C7F304F 0115A0C28B0420B2010B0460C0474B02E0C0094B06A0C0A40B04C6BA184BA1857F2C6F 0116A0C3EB8806C000AB1556BC005BC284B06A0C070EBD1A0B8303B21A0C00027F296F 0117117A0C54B133AB0289B0000B132AB04C1B7860C0057C00D5B0581B8241B15017F2DCF 0118A0C6AB10F9B0200B03C0B0201B0000B0420B2020B0580B0280B03D0B16FA7F2E7F 0119A0C80B0200B03C0B0201C00D4BD0B1B0982B0420B2024BC800B8356B04E07F2D1F 0120120A0C96B837CB0420B2018B11AEB0200B0000B0201B0004B04E0B837CB04207F2E5F 0121A0CACB2008B1020B0200B0000BC800B834AB0200B0000B0201B0004B04E07F30FF 0122A0CC2B837CB0420B2008B1013B0201B0001B7860C0057C00D4B0581B82417F2F4F 0123123A0CD8B1501B10F9B0200B0000B0201B0004B0202C00D4B04E0B837CB04207F2F2F 0124A0CEEB2010B0460C0474B04C3BC160C000AB6160C0008BC003BA020C00087F2CAF 0125A0D04B0201C00FEBC0A0C0008B0420B202CB6020C0008B0420B2024BA0E07F2DCF 0126126A0D1AC0008B8143B16EFB045BBC020C000AB6020C0008B0201B8000B04207F2DDF 0127A0D30B2020B0580B8800C000AB16FAB045BB0200B0000B0420B200CBD8207F2E4F 0128A0D46C004EB8355B0420C03ECB0014BD120B8356BD020B8355B0980B02207F2C1F 0129129A0D5CB8300B0201C00FEBDC44B0984BDC70B0604B16FDB045BB02E0C00947F25FF 0130A0D72B06A0C0A40B04C6BA185BA184B8806C000AB1517B0200B0000B02017F2D3F 0131A0D88B0004B0420B200CB0420B2018B12B8BC060B834AB0A81B0221B60007F2E3F 0132132A0D9EBC005BC084B0420B2020B1002BD801B8C00B0602B16FCB0460C04747F2B2F 0133A0DB4B02E0C0094B06A0C0A40B04C6BA184BA185B8806C000AB1530BC0057F293F 0134A0DCAB0201C0074BC084B0420B202CB04C6B0202B0008BD026C0074B09807F2CDF 0135135A0DE0B0A30BC046B0A31B0221C00FEB0420B202CB0586B8106B16F3B02017F2B0F 0136A0DF6C00FEB0571B0281C01FEB16FCB0200B0700B0201C00FEB0202B01007F2A4F 0137A0E0CB0420B2024B04C2BC005B0201BE000B0420B2020B0221B0100B05807F316F 0138138A0E22B0582B8102B16F8B0460C0474B02E0C0094B06A0C0A40BC005B02017F2D3F 0139A0E38C0074BC084B0420B2024B0460C0474B02E0C0094B0200C0064B02017F30AF 0140A0E4EB2020BCC01B0280C0074B16FCB0200B0000B0201B0003B0420B200C7F2F0F 0141141A0E64B0420B2018B12B8BC120B834AB0201B0004B0420B200CB0420B20187F2FCF 0142A0E7AB12B8BC160B834AB0200B0000B0201B0001B0420B200CB0284B00007F2FFF 0143A0E90B130DB0224B0900BD820C0055B8355BC804B8356B04E0B837CB04207F2B4F 0144144A0EA6C03ECB0014B1008BD820C004EB8355B04E0B837CB0420C03ECB00147F28AF 0145A0EBCBC185B0586BC045B0221B0001B0A81B7060B8356B111AB0981BD0207F2A9F 0146A0ED2B8355B0980B0220B8300BD870C0064B0581B8181B16FBB06C5BD8057F296F 0147147A0EE8C0064B0200B0000B0201B0002B0202C0064B04E0B837CB0420B20107F318F 0148A0EFEB0460C0474B0200C0064B0201B2A2ABCC01B0280C0074B16FCB06C57F297F 0149A0F14BD805C0064B0460C0EEAB02E0C0094B0200B0000B0201B0001B04207F2F4F 0150150A0F2AB200CB0420B2018B12B8BC0A0B834ABC802C0006B0282B0001B11407F2CBF 0151A0F40B0602B38A0C0008BC1C3B0581B0420B200CB0420B2018B12B8BC1207F2D4F 0152A0F56B834AB0284B0018B1531B8120C0006B1101B045BB0604B3920C00087F2FFF 0153153A0F6CB0581B0420B200CB0420B2018B12B8BC220B834AB1502B0460C04747F2D3F 0154A0F82BC0C7BC003BA020C0008B0201C00FEBC0A0C0008B0420B202CB60207F2B2F 0155A0F98C0008B0420B2024BA0E0C0008B8143B16EFBC005B04C2B0201B80007F2C7F 0156156A0FAEB0420B2020B0580B0582B8802C0008B16F9B0608B16E1B0460C04747F2CAF 0157A0FC4B02E0C0094B0200B0000B0201B0001B0420B200CB0420B2018B12B87F311F 0158A0FDABC120B834AB0284B0001B1137B0604B0581B0420B200CB0420B20187F2E2F 0159159A0FF0B12B8BC160B834AB0605BC185B6184B1502B0460C0474B0586B05817F2ADF 0160A1006B0420B200CB0420B2018B12B8BC220B834AB1502B0460C0474BC0047F2F2F 0161A101CB0201C00D4BC086B0420B202CB0580B0602B0420B2024B0600BA0207F307F 0162162A1032C0008B8800C000AB11F1BC004B0201B8000B0420B2020BA020C00087F320F 0163A1048B8800C000AB11F9B0608B16E4B0460C0474B02E0C0094B0200B00007F2F3F 0164A105EB0201B0001B0420B200CB0420B2018B12B8BC120B834AB0284B00017F305F 0165165A1074B1141B0604B0581B0420B200CB0420B2018B12B8BC160B834AB06057F2F9F 0166A108ABC185B6184B1502B0460C0474B0586BA160C000AB6160C0008B05817F2E1F 0167A10A0B0420B200CB0420B2018B12B8BC220B834AB1502B0460C0474BC0047F2E7F 0168168A10B6BA020C0008B0201C00D4BC086B0420B202CB6020C0008B0420B20247F304F 0169A10CCBA020C0008BA020C0008B8800C000AB11F0BC004BA020C000AB60207F2D5F 0170A10E2C0008B0201B8000B0420B2020B0580B8140B1501B10FAB0608B16DE7F2F5F 0171171A10F8B0460C0474B02E0C0094B04C0B0201B0001B0420B200CB0420B20187F30DF 0172A110EB12B8BC120B834AB1309B0284B0001B113FB0284B0005B153CB0A847F2C5F 0173A1124BD804C005FBD820C005FB8374B04E0B837CB0420C03ECB0034B04E07F28EF 0174174A113AB837CB0300B0002B0300B0000B0420B201CB9820C0055B837CB16F67F2EDF 0175A1150BD120B8301B2120C0002B130EBD060B8375B0981BC801B834AB04207F2E2F 0176A1166B2018B0020B04C0B0201B0002B0420B2008B100EBC820B8374C00D47F309F 0177177A117CB0204B0100BD804C00D4B04C0B0201B0002B0202C00D4B0420B20107F314F 0178A1192B0201B0500BD801B8374B0460C04747F85AF 0179504B6TEXT 50556RETURN50596CLEART505B6DUMP 504FECOLORT7F20BF 018018050482CHRSET506C6ALCHAR50A8CDISPAT50AD8PRINTT50B2AINPUTT7F157F 018150C30ACCEPT50D6EHCHART50DB4INVERT50E2CREVERT50E44FORMAT7F167F 018250F1CSCRLT 50FC4VSCROL51056HSCROL510FCXKEY 7F49BF 0183183: 99/4 AS -- Vers 0184450C30ACCEPT50D6EHCHART50DB4INVERT50E2CREVERT50E44FORMAT7F167F 0182P50F1CSCRLT 50FC4VSCROL51056HSCROL510FCXKEY 7F49BF 0183(*--------------------------------------*(* XBASIC 40 PACK - Version 2004 *(* *(* Full Version - Recreated *(* from MTXT40 source and dis- *(* assembly of XB object file. *(* *(* Re-Created 2003 - 2004 *(*--------------------------------------** * XB40:S**' TITL 'XB40-PACK -- Version 2004'** COPY "DSK2.XB40:SA" COPY "DSK2.XB40:SB" * COPY "DSK2.XB40:SC" COPY "DSK2.XB40:SD" COPY "DSK2.XB40:SE" COPY "DSK2.XB40:SF" COPY "DSK2.XB40:SG" END TITL 'XB40-PACK -- Version 2004'** COPY "DSK2.XB40:SA" COPY "DSK2.XB40:SB" *(*--------------------------------------*** XB40:SA*(*--------------------------------------**1* XBEQUATES *EXPANDED & STANDARDIZED*NUMASG EQU >2008NUMREF EQU >200CSTRASG EQU >2010STRREF EQU >2014XMLLNK EQU >2018KSCAN EQU >201CVSBW EQU >2020VMBW EQU >2024VSBR EQU >2028VMBR EQU >202CVWTR EQU >2030UTILWS EQU >2038 :ARGID EQU >8300 *NAME CHANGED FROM AGR1ID BY RGM!2ARGCNT EQU >8312 *NAME CHANGED FROM ARGNUM >2018FAC EQU >834A@PNTR EQU >8356 *POINTER TO NAME LENGTH FOR DSR ROUTINEARG EQU >835CSUBSTK EQU >8373KEYDEV EQU >83742KEY EQU >8375 *NAME CHANGED FROM KEYVAL STATUS EQU >837CGPLWS EQU >83E0 VDPSTA EQU >8802VDPRD EQU >8800/VDPWD EQU >8C00 *FOR MANUAL VDP WRITES/VDPWA EQU >8C02 *FOR MANUAL VDP WRITES GRMRA EQU >9802GRMWA EQU >9C02 *FROM MTXT40 @BTEMP EQU >03C0 *BASIC ROLL-OUT AREA FOR INPUT ROUTINES EQU >8802?PATTAD EQU >0400 *CHARACTER PATTERN ADDRESS OF CHR$(32) *FOR XMLLNK CIF EQU >20CFI EQU >12B8CSN EQU >11AEERR EQU >2034 )NEXT EQU >70 *SHORTCUT RETURN (*--------------------------------------*U >8802(* VARIABLES, BUFFERS *(* CONSTANTS, PABS *(*--------------------------------------* PAB DATA >0000PTEST DATA >0100SAVRT DATA >0000LENG DATA >0000LINLEN DATA >0020EOS DATA >0300LONG DATA >0110SHORT DATA >0028RPTIME DATA >0000(*--------------------------------------*(* DSR AREA *(*--------------------------------------* DSRDT6 DATA >0000 *UNKNOWN DSRDT7 DATA >0000 *UNKNOWNDSRDT5 DATA >0000A >0110DSRDT4 DATA >0000DSRDT1 DATA >0000DSRDT2 DATA >0000DSRDT3 DATA >0000 DSRBUF BSS >8REG2 BSS >20!DSRDTA DATA >0064 *UNKNOWN!DSRDTB DATA >2000 *UNKNOWN(*--------------------------------------*ZERO BYTE >00H3 BYTE >030110H4 BYTE >04H7 BYTE >07H8 BYTE >08H9 BYTE >09HD BYTE >0DH20 BYTE >20H28 BYTE >28BO BYTE >60H7E BYTE >7EH7F BYTE >7FH80 BYTE >80NOKEY BYTE >FFCBYTE BYTE >00INSERF BYTE >00SAVKEY BYTE >00E >0301100SVXKEY BYTE >00 *ADDED FOR XKEY ROUTINE EVEN(*--------------------------------------*(* DSR CONSTANTS *(*--------------------------------------*VALID BYTE >AA EVENPERIOD BYTE >2E EVEN*>030110(*--------------------------------------*(* BUFFERS *(*--------------------------------------**SMLBUF BSS >10INVBUF BSS >20FABWS BSS >20ALTWS BSS >20CARBUF BSS >2ALGBUFF BSS >100VDPBUF BSS >C0SAVEG BSS >2 EVEN*(*--------------------------------------*(* PABS *(*--------------------------------------**PBDATA DATA >0000 DATA >0100 DATA >0010BUFADR DATA >0000 BYTE >50BYTCNT BYTE >20 BSS >2 DATA >0000 BYTE >00NAMELG BYTE >03PBNAME TEXT 'PIO' EVEN*CARPAB DATA >0500 DATA >03EA DATA >0000 DATA >030F BYTE >00 BYTE >0B TEXT 'DSK1.CHARA2' EVEN*BYTCNT BYTE >20 BSS >2(*--------------------------------------*(* CHARACTER DEFS *(*--------------------------------------**#ALTCUR DATA >3838,>3838,>3838,>0000#LINCUR DATA >0000,>0000,>0000,>00FE#BASCUR DATA >007C,>7C7C,>7C7C,>7C7CCURPAT DATA BASCUR (*--------------------------------------*(* DEFINITIONS *(*--------------------------------------**, DEF CHRSET,TEXT,COLORT,RETURN,CLEART DEF DUMP,ALCHAR,DISPAT DEF PRINTT,INPUTT,ACCEPTURPAT DATA BASCUR ' DEF HCHART,INVERT,REVERT,FORMAT$ DEF SCRLT,VSCROL,HSCROL,XKEY *+--------------------------+*|ADAPTED FROM OR RELATED TO|*| TI-KEYS |*| BY |*| WES JOHNSTON |CEPTURPAT DATA BASCUR *| |*| VERSION 3.0 |*| COPYRIGHT 1986 |*+--------------------------+************************** SUBROUTINE DSRLNK ** BLWP @DSRLNK. ** ENTER WITH POINTER TO ** NAME LENGTH IN >8356 *R ************************* *MASK BYTE >20 AKA H20*PERIOD BYTE >2E*VALID BYTE >AA!*REG1 BSS >20 UNUSED??*REG2 BSS >20*DSRBUF BSS 8 DSRLNK DATA REG2,DSRL1 6DSRL1 MOV *14+,5 GET DATA TO R5 & INC PMG CNTR>8356 *R ( SZCB @H20,15 RESET EQUAL BIT/ MOV @>8356,0 NAME LENGTH BYTE TO R0# MOV 0,9 THEN TO R96 AI 9,>FFF8 R9 POINTS TO BEGINNING OF PAB0 BLWP @VSBR GET LENGTH BYTE INTO R1NC PMG CNTR>8356 *R # MOVB 1,3 MOVE TO R3, SRL 3,8 ALIGN TO RIGHT BYTE# SETO 4 R4 = >FFFF, LI 2,DSRBUF R2 POINTS TO BUFFER DSRL2 INC 0 R0=R0+1 INC 4 R4=R4+1NC PMG CNTR>8356 *R " C 4,3 DONE YET?# JEQ DSRL3 YES, GO ON* BLWP @VSBR NO, GET NEXT BYTE- MOVB 1,*2+ AND PUT IT IN BUFFER) CB 1,@PERIOD WAS IT A PERIOD?* JNE DSRL2 NO, GET NEXT BYTE6 *R DSRL3 MOV 4,4 R4=0?, JEQ DSRL10 YES, RETURN W/ERROR+ CI 4,>0007 R4 GREATER THAN 7?, JGT DSRL10 YES, RETURN W/ERROR CLR @>83D0 >83D0=0- MOV 4,@>8354 NAME LENGTH TO >8354 *R ) MOV 4,@DSRDT1 >PER DISASSEMBLY INC 4 R4=R4+18 A 4,@>8356 >8356 POINTS TO DATA AFTER NAME , MOV @8356,@DSRDT2 >>>PER DISASSEMBLY % LWPI >83E0 USE GPL REGS CLR 1 R1=0 6 LI 12,>0F00 R12 = BEGINNING OF DSR BLOCKS$DSRL4 MOV 12,12 CHECK FOR 0# JEQ DSRL04 YES, GO ON& SBZ >00 TURN CARD OFF0DSRL04 AI 12,>0100 POINT TO NEXT DSR BLOCK CLR @>83D0 >83D0=00  CI 12,>2000 DONE?3 JEQ DSRL9 YES, INCORRECT DEVICE NAME- MOV 12,@>83D0 STORE BLOCK AT >83D0% SBO >00 TURN CARD ON: LI 2,>4000 R2 POINTS TO BEGINNING OF DSR ROM @>83D0 >83D0=00 - CB *2,@VALID CHECK FOR VALID CARD5 JNE DSRL4 NOT ONE HERE, TRY NEXT BLOCK 5* AI R2,8 R2 POINTS TO DSR ENTRY FIELD3 A @REG2+10,2 >>>ALTERED PER DISASSEMBLY  NG OF DSR ROM @>83D0 >83D0=00 9 JMP DSRL6 SKIP OVER THE FIRST TIME THROUGH0DSRL5 MOV @>83D2,2 NEXT DEVICE FIELD TO R2% SBO >00 TURN CARD ON2DSRL6 MOV *2,2 ENTRY FIELD POINTER TO R2DISASSEMBLY  NG OF DSR ROM @>83D0 >83D0=00 ; JEQ DSRL4 TRY NEXT BLOCK IF THIS IS LAST ONE3 MOV 2,@>83D2 SAVE POINTER TO NEXT ENTRY; INCT 2 POINT TO ENTRY ADR FOR THIS DEVICE# MOV *2+,9 MOVE TO R9* MOVB @>8355,5 LENGTH BYTE TO R5 # JEQ DSRL8 GO IF ZERO) CB 5,*2+ LENGTH THE SAME?, JNE DSRL5 NO, TRY NEXT DEVICE7 SRL 5,8 YES, ALIGN COUNT TO RIGHT BYTE1 LI 6,DSRBUF R6 POINTS TO NAME BUFFER LENGTH BYTE TO R5 7DSRL7 CB *6+,*2+ CHECK FOR MATCH & INC POINTERS2 JNE DSRL5 NO MATCH, TRY NEXT DEVICE! DEC 5 COUNT -1& JNE DSRL7 TRY NEXT BYTE DSRL8 INC 1 R1=R1+1 O NAME BUFFER LENGTH BYTE TO R5 * MOV 1,@DSRDT3 >>PER DISASSEMBLY* MOV 9,@DSRDT4 >>PER DISASSEMBLY* MOV 12,@DSRDT5 >>PER DISASSEMBLY  * BL *9 BRANCH TO DSR ROM5 JMP DSRL5 THIS INSTRUCTION IS SKIPPED! LENGTH BYTE TO R5 & SBZ >00 TURN CARD OFF. LWPI REG2 USE PROGRAM REGISTERS6 MOV 9,0 R0 POINTS TO FLAG/STATUS BYTE# BLWP @VSBR GET STATUS) SRL 1,13 ALIGN ERROR BITSS SKIPPED! LENGTH BYTE TO R5 $ JNE DSRL11 GO IF ERROR( RTWP RETURN NO ERROR.DSRL9 LWPI REG2 USE PROGRAM REGISTERSDSRL10 CLR 1 R1=01DSRL11 SWPB 1 ERROR CODE TO RIGHT BYTE1 MOVB 1,*13 PUT IN R0 OF CALLING PMG& SOCB @H20,15 SET ERROR BIT' RTWP RETURN W/ERROR (*--------------------------------------*(* 1984 GPLLNK *(*--------------------------------------* GPLLNK DATA UTILWS,GPLAGPLA MOVB @GRMRA,1PMG SWPB 1 MOVB @GRMRA,1 SWPB 1 AI 1,-3 MOVB @SUBSTK,2 SRL 2,8 AI 2,>8300 INCT 2 MOVB 1,*2 SWPB 1 MOVB 1,@1(2) SWPB 2 MOVB 2,@SUBSTK MOVB *14+,@GRMWA1PMG MOVB *14+,@GRMWA MOV @>2000,4 LI 3,GPL1 MOV 3,@>2000 LWPI GPLWS RTGPL1 LWPI UTILWS MOV 4,@>2000 RTWPB 1 MOVB 1,@1(2) SWPB 2 MOVB 2,@SUBSTK MOVB *14+,@GRMWA1PMG* XB40:SC(****************************************(* SPECIAL KEY ROUTINES *(*****************************************+LEFT BLWP @CKINSR *CHECK INSERT FLAG*5LEFT2 CI 8,>0001 *CHECK FOR LEFTMOST POSITION& JGT LEFT3 *IF NOT GO ON. CLR @STATUS *OTHERWISE BOOP & OUT BLWP @GPLLNK% DATA >0036 *BOOP IF NOT CLR 6 B @SCAN*'LEFT3 MOVB @CARBUF(8),1 *GET CHARACTERFOR LEFTMOST POSITION2 BLWP @VSBW *USE IT TO REPLACE CURSOR+ DEC 0 *DECREASE LOCATION+ DEC 8 *DECREASE POSITION B @CURPUT*+RITE BLWP @CKINSR *CHECK INSERT FLAG* CHARACTERFOR LEFTMOST POSITION9 C 0,5 *COMPARE LOCATION TO MAXLOCATION2 JEQ RITE1 *IF EQUAL THEN BOOP & OUT3 DEC 8 *OTHERWISE ADJUST POSITION/ C 8,9 *& COMPARE WITH LENGTHHARACTERFOR LEFTMOST POSITION1 JNE RITE2 *IF NOT EQUAL THEN GO ON3 INC 8 *OTHERWISE MOVE ILLEGAL SO(* *ADJUST LENGTH&RITE1 CLR @STATUS BLWP @GPLLNK DATA >0036 *BOOP CLR 6ST POSITION B @SCAN *OUT*@RITE2 MOVB @CARBUF+1(8),1 *FETCH CHARACTER FROM INPUT STRING) BLWP @VSBW *WRITE TO SCREEN7 INCT 8 *ADJUST AND INCREMENT POSITION, INC 0 *INCREMENT LOCATION B @CURPUT** DELETE ROUTINE*DELETE BLWP @CKINSR. CI 9,>0000 *IF LENGTH=0 THEN OUT JEQ DELOUT9 C 8,9 *IF POSITION BEYOND END THEN OUT JGT DELOUT* *INCREMENT LOCATIONI LI 2,CARBUF+1 *PREPARE TO DELETE BY SHIFTING INPUT STRING FROM< LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK AGAIN, LI 4,1 *INITIALIZE COUNTER JMP DELEL(DELEB MOVB *2+,*3+ *SHIFT ONE BYTE INC 45DELEL C 4,8 *COMPARE COUNTER TO POSITION JNE DELEB*0 INC 2 *SKIP DELETED CHARACTER+DELEC INC 4 *INCREMENT COUNTER3 C 4,9 *COMPARE COUNTER TO LENGTH *SHIFT ONE BYTE INC 4+ JGT DELEK *IF FINISHED GO ON0 MOVB *2+,*3+ *MOVE ANOTHER CHARACTER JMP DELEC*DELEK LI 2,>8000( MOVB 2,*3 *PAD WITH BLANK*' CLR 4 *RESET COUNTERTH *SHIFT ONE BYTE INC 4+ LI 2,CARBUF+1 *GET READY TO MOVE% LI 3,LGBUFF *STRING BACK8DELED MOVB *3+,*2+ *RESTORE INPUT STRING TO CARBUF INC 4# C 4,9 *FINISHED? *RESET COUNTERTH *SHIFT ONE BYTE INC 4P JNE DELED *IF NOT REPEAT * LOC PLACED in R5 *' MOV 0,4 *SAVE LOCATION& MOV 7,0 *SCREEN START LI 1,CARBUF+1 MOV 9,2( BLWP @VMBW *REWRITE SCREEN INC 4* MOV 4,0 *RESTORE LOCATION*) DEC 9 *DECREASE LENGTH!DELOUT B @CURPUT *GET OUT** TURN ON INSERT FLAG*INSERT BLWP @IFLGON B @SCAN*$* ROUTINE TO INSERT A CHARACTER*E SCREEN INC 4'INSRTX CLR 4 *CLEAR COUNTERC LI 2,CARBUF+1 *PREPARE TO INSERT BY SHIFTING STRING FROM6 LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK JMP INSRTYINSRTA MOVB *2+,*3++INSRTY INC 4 *INCREMENT COUNTERINC 4( C 4,8 *IF AT POSITION JEQ INSRTB *SKIP9 JMP INSRTA *ELSE MOVE 1ST PORTION OF STRING*2INSRTB MOVB @KEY,1 *FETCH INSERTED CHARACTER& AI 1,>6000 *BASIC OFFSET *INCREMENT COUNTERINC 46 MOVB 1,*3+ *INSERTED CHARACTER TO BUFFER*4INSRTC MOVB *2+,*3+ *FINISH MOVING INPUT STRING INC 4 C 4,9A JGT INSRTG *IF NOT FINISHED SHIFT ANOTHER CHARACTER JMP INSRTC**INCREMENT COUNTERINC 47INSRTG C 8,10 *COMPARE POSITION TO MAXLENGTH7 JEQ INSOUT *IF EQUAL NO OTHER ADJUSTMENTS1INSRTD INC 8 *ELSE INCREMENT POSITION- INC 0 *AND SCREEN LOCATION* JMP INSRTC**INCREMENT COUNTERINC 45INSRTE C 9,10 *COMPARE LENGTH TO MAXLENGTH' JEQ INSOUT *IF EQUAL SKIP/ INC 9 *ELSE INCREMENT LENGTH*,INSOUT CLR 4 *INITIALIZE COUNTER LI 2,CARBUF+1 LI 3,LGBUFFMENT COUNTERINC 4.INSRTF MOVB *3+,*2+ *MOVE NEW STRING BACK INC 4 C 4,9 JNE INSRTF*' MOV 0,4 *SAVE LOCATION MOV 7,0 LI 1,CARBUF+1 MOV 9,24 BLWP @VMBW *WRITE NEW STRING TO SCREENINC 4* MOV 4,0 *RESTORE LOCATION* B @CURPUT *OUT*.ERASE BLWP @CKINSR *TURN OFF INSERT FLAG CLR @CARBUF LI 1,CARBUF+1 MOV 10,2 LI 3,>8000*ERASE2 MOVB 3,*1+ *BLANKS TO INPUT$NC 4 DEC 2 JNE ERASE2 CLR 9 MOV 7,0 LI 1,CARBUF+1 MOV 10,2? BLWP @VMBW *WRIT NEW BLANK INPUT STRING TO SCREEN LI 8,>0001% B @SCAN *START FRESH*ENTER BLWP @CKINSRNC 4 MOVB @CARBUF(8),1/ BLWP @VSBW *BLANK CURSOR LOCATION*/ CI 9,0 *CHECK FOR NULL STRING JEQ ENTOUT6ENTERA CB @CARBUF(9),@H80 *LOOK FOR TRAILING BLANK JNE ENTOUTRT FRESH*ENTER BLWP @CKINSRNC 49 DEC 9 *ADJUST LENGTH IF TRAILING BLANK$ JMP ENTERA *LOOK AGAIN* ENTOUT SWPB 9/ MOVB 9,@CARBUF *LENGTH BYTE TO BUFFER< SWPB 9 *RESTORE LENGTH BYTE IN CASE NEEDEDRESH*ENTER BLWP @CKINSRNC 4& RT *EXIT ROUTINE*(*--------------------------------------*(* CKINSR SUBROUTINE *(* CHECKS INSERT FLAG *(*--------------------------------------**CKINSR DATA ALTWS,CKSTRT BLWP @CKINSRNC 41CKSTRT CB @INSERF,@ZERO *IF FLAG RESET, OUT JEQ CKIOUT+ CLR @INSERF *RESET INSERT FLAG0 LI 0,>03F0 *CURSOR PATTERN ADDRESS; MOV @CURPAT,1 *FETCH APPROPRIATE PATTERN ADDRESSWS,CKSTRT BLWP @CKINSRNC 4: JMP NEWCUR *JUMP TO WRITE NEW CURSOR PATTERN CKIOUT RTWP*(*--------------------------------------*(* IFLGON SUBROUTINE *(* SETS INSERT FLAG *(*--------------------------------------**@CKINSRNC 4IFLGON DATA ALTWS,FLGONAFLGONA LI 1,>FF00" MOVB 1,@INSERF *SET FLAG( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,LINCUR *INSERT CURSOR PATTERN ADDRESS*NEWCUR LI 2,8 *8 BYTES TO WRITE---------------**@CKINSRNC 4, BLWP @VMBW *NEW CURSOR PATTERN RTWP *(*--------------------------------------*(* UTILITY TO GET A SCREEN LOCATION*(* PARAMETER 1 IS ROW # *(* PARAMETER 2 IS COL # *----------**@CKINSRNC 4(* PARAMETER 3 IS LENG *(* *(* LENGTH PLACED in R4 *(* LOC PLACED in R5 *(*--------------------------------------**GETPAR LI 0,0 LI 1,3@CKINSRNC 4& BLWP @NUMREF *PARAMETER #3, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI! MOV @FAC,4 *LENG=R4*GETLOC LI 0,0& LI 1,1 *PARAMETER #1! BLWP @NUMREF *GET ROW LI 1,3@CKINSRNC 4, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI MOV @FAC,15 DEC 1 *ADJUST FOR BASIC CONVENTION8 MPY @LINLEN,1 *BEGIN TO BUILD SCREEN LOCATION7 MOV 2,5 *RESULT OF MULTIPLICATION TO 5NC 4& LI 1,2 *PARAMETER #2$ BLWP @NUMREF *GET COLUMN, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI+ MOV @FAC,2 *PUT IN REGISTER 26 DEC 2 *ADJUST FOR BASIC CONVENTIONSATION TO 5NC 41 A 2,5 *ADD TO ROW X LINELENGTH RT *GET COLUMN, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI+ MOV @FAC,2 *PUT IN REGISTER 26 DEC 2 *ADJUST FOR BASIC CONVENTIONSATION TO 5NC 4* XB40:SD(*--------------------------------------*(* LOADS ALTERNATE CHARACTERS *(* FROM DISK: "DSK1.CHARA2" *(* CALL LINK("ALCHAR") *(*--------------------------------------**ALCHAR LWPI FABWS' LI 0,>0020 *BYTES FOR PAB MOV 0,@>830C CLR @STATUS* BLWP @GPLLNK2* DATA >0038 *ALLOCATE VDP RAM FOR PAB) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLYBWS MOV @>831C,0 LI 1,CARPAB LI 2,>0015- BLWP @VMBW *PAB DATA TO VDP RAM CLR @STATUS AI 0,>0009 MOV 0,@PNTR CLR @STATUS' BLWP @DSRLNK *LOAD 'CHARA2' DATA >0008* LI 1,ALTCUR; MOV 1,@CURPAT *POINT TO ALTERNATE CURSOR PATTERN* B @XBRET *(*--------------------------------------*(* LOADS STANDARD CHARACTERS *(* CALL LINK("CHRSET") * DATA >0008*(*--------------------------------------**CHRSET LWPI FABWS) LI 0,PATTAD *CHAR 32 ADDRESS MOV 0,@FAC CLR @STATUS$ BLWP @GPLLNK *UPPER CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE DATA >004A( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,BASCUR *POINT TO BASIC CURSOR PATTERN> MOV 1,@CURPAT *FOR USE IN CURSOR ROUTINE CAN USE IT LI 2,8= BLWP @VMBW *AND WRITE NEW PATTERN TO PATT TABLE* DATA >004A B @XBRET*(*--------------------------------------*(* ENTER TEXT MODE *(* CALL LINK("TEXT") *(*--------------------------------------**TEXT LWPI FABWS WRITE NEW PATTERN TO PATT TABLE* DATA >004AC LI 0,768 *NEW IN 2003; NEW POSITION PER DISASSEMBLY LI 1,VDPBUF7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLY' BLWP @VMBR *SAVE VDP INFO LI 0,>01F0* BLWP @VWTR *SET VDP REGISTER04A SWPB 0, MOVB 0,@>83D4 *SAVE REGISTER BYTE: LI 0,>0717 *>0717 PER DISASSEMBLY. NOT >0713$ BLWP @VWTR *SET COLORS LI 1,>0028) MOV 1,@LINLEN *SET LINE LENGTH SWPB 1SET VDP REGISTER04A+ MOVB 1,@BYTCNT *ADJUST "DUMP" PAB LI 1,>03C0) MOV 1,@EOS *& END OF SCREEN**. BL @CLEARC *CLEAR THE NEW SCREEN B @XBRET*(*--------------------------------------* SWPB 1SET VDP REGISTER04A(* RETURN TO GRAPHICS MODE *(* CALL LINK("RETURN") *(*--------------------------------------**RETURN LWPI FABWS BL @CLEARC LI 0,>01E0* BLWP @VWTR *SET VDP REGISTERPB 1SET VDP REGISTER04A3 SWPB 0 *RELOCATED PER DISASSEMBLY* MOVB 0,@>83D4 *SAVE VDP R1 BYTE*A LI 0,768 *NEW IN 2003 & RELOCATED PER DISASSEMBLY LI 1,VDPBUF7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLYEGISTER04A* BLWP @VMBW *RESTORE VDP INFO LI 1,>00206 MOV 1,@LINLEN *ADJUST LINE LENGTH PARAMETER SWPB 19 MOVB 1,@BYTCNT *ADJUST BYTE COUNT IN "DUMP" PAB LI 1,>0300NOTE NEW SIZE PER DISASSEMBLYEGISTER04A8 MOV 1,@EOS *CHANGE END OF SCREEN PARAMETER B @XBRET*(*--------------------------------------*(* SET COLORS IN TEXT MODE *(* CALL LINK("COLORT",FGD,BKGD) *(*--------------------------------------**TER04ACOLORT LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI3 MOV @FAC,3 *RETRIEVE FOREGROUND COLOR DEC 3$ CI 3,>0000 *TEST RANGE JLT CLOUT CI 3,>000F04A JGT CLOUT0 SLA 3,4 *FORGROUND=3D NYBBLE R3 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,0' DEC 0 *BACKGROUND=R0 CI 0,>0000$ JLT CLOUT *TEST RANGE CI 0,>000F JGT CLOUT" A 3,0 *ADD THEM( AI 0,>0700 *FOR VDP REG. 7$ BLWP @VWTR *SET COLORS CLOUT B @XBRET*(*--------------------------------------*00$ JLT CLOUT *TEST RANGE(* CLEAR SCREEN EITHER MODE *(* CALL LINK("CLEART") *(*--------------------------------------**CLEART LWPI FABWS! BL @CLEARC *EXPAND? B @XBRET*(*--------------------------------------* *TEST RANGE(* ASCII SCREEN DUMP *(* CALL LINK("DUMP") *(*--------------------------------------**DUMP LWPI FABWS' LI 0,>0020 *BYTES FOR PAB/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUSNGE* BLWP @GPLLNK3* DATA >0038 *ALLOCATES VDP RAM FOR PAB*) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY*% MOV @>831C,@PAB *PAB ADDRESS*. LI 0,>002A *BYTES FOR VDP BUFFERTUSNGE/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUS* BLWP @GPLLNK6* DATA >0038 *ALLOCATES VDP RAM FOR BUFFER*) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY**OR VDP BUFFERTUSNGE- MOV @>831C,@BUFADR *BUFFER ADDRESS*7 MOVB @GRMRA,@SAVEG *SAVE GROM RETURN ADDRESS MOVB @GRMRA,@SAVEG+1 DEC @SAVEG* MOV @PAB,0 LI 1,PBDATA LI 2,>0012) BLWP @VMBW *PAB DATA TO VDP* MOV @PAB,6 AI 6,>000D' MOV 6,@PNTR *PT TO NAME LG* BLWP @DSRLNK DATA >0008* LI 1,>0300 MOV @PAB,0 AI 0,>0004' BLWP @VSBW *SET FOR WRITE* CLR @LENG DATA TO VDP MOV @LENG,0LINEW LI 1,LGBUFF MOV @LINLEN,2# BLWP @VMBR *READ LINE CLR 1,OFST SB @BO,@LGBUFF(1) *ADJUST OFFSET INC 1 C 1,@LINLEN JNE OFST (*--------------------------------------*(* RESTORED FROM DISASSEMBLY *(*--------------------------------------* CLR 1NEW3 CB @LGBUFF,@H20 JLT NEW1 CB @LGBUFF,@H7F JGT NEW1 JMP NEW2NEW1 MOVB @H20,@LGBUFF(1) NEW2 INC 1-------------* C 1,@LINLEN JNE NEW3(*--------------------------------------** MOV @BUFADR,0 LI 1,LGBUFF MOV @LINLEN,2* BLWP @VMBW *LINE TO VDP BUFF* MOV 6,@PNTR$ BLWP @DSRLNK *WRITE LINE---* DATA >0008* A @LINLEN,@LENG MOV @LENG,0$ C 0,@EOS *LAST LINE?0 JLT LINEW *IF NOT DO ANOTHER LINE* LI 1,>0100 MOV @PAB,0 AI 0,>0004 BLWP @DSRLNK *WRITE LINE---*+ BLWP @VSBW *SET TO CLOSE FILE* MOV 6,@PNTR$ BLWP @DSRLNK *CLOSE FILE DATA >0008* MOVB @SAVEG,@GRMWA8 MOVB @SAVEG+1,@GRMWA *RESET GROM RETURN ADDRESS B @XBRETDSRLNK *WRITE LINE---** XB40:SE(*--------------------------------------*(* EMULATE 'DISPLAY AT' *(* CALL LINK("DISPAT",R,C,N/N$) *(*--------------------------------------**DISPAT LWPI FABWS# BL @GETLOC *LOC IN R5 C 5,@EOS JGT DISOUT* MOVB @ARGID+2,6/ COC @PTEST,6 *TEST FOR STRING PARAM JEQ DSTRS*& LI 1,3 *3D PARAMETER. BL @NTS *GET NUMBER & CONVERT" JMP DSOUT *PRINT IT*DSTRS LI 1,3OS LI 2,LGBUFF LI 4,>FF00 MOVB 4,@LGBUFF$ BLWP @STRREF *GET STRING CB @LGBUFF,@ZERO JEQ DISOUT "DSOUT MOV 5,0 *LOCATION LI 3,LGBUFF *BUFFER" BL @PRBUF *PRINT IT*SDISOUT B @XBRET*(*--------------------------------------*(* EMULATE 'PRINT' *(* CALL LINK("PRINTT",N/N$) *(*--------------------------------------**PRINTT LWPI FABWS* BL @PTTA *SCROLL UP SCREENT*S+ BL @PTXX *BLANK BOTTOM LINE*) MOVB @ARGID,6 *SAME AS PAD????) COC @PTEST,6 *TEST FOR STRING JEQ PTSTR*' LI 1,1 *1ST PARAMETER0 BL @NTS *GET NUMBER AND CONVERTP SCREENT*S" JMP PSOUT *PRINT IT*PTSTR LI 0,0 LI 1,1. MOVB @LINLEN+1,@LGBUFF *MAX STRING SIZE LI 2,LGBUFF$ BLWP @STRREF *GET STRING*+ CB @LGBUFF,@ZERO *NULL STRING?NUMBER AND CONVERTP SCREENT*S$ JEQ PTOUT *EXIT IF SO*0PSOUT MOV @EOS,0 *ADDRESS OF BOTTOM LINE S @LINLEN,0 LI 3,LGBUFF" BL @PRBUF *PRINT IT PTOUT B @XBRET*(*--------------------------------------* CONVERTP SCREENT*S(* EMULATE 'INPUT' *(* CALL LINK("INPUTT",P$,N/N$) *(*--------------------------------------**INPUTT LWPI FABWS* BL @PTTA *SCROLL UP SCREEN* LI 0,0 LI 1,1 LI 2,CARBUFSCREENT*S MOVB @LINLEN+1,@CARBUF+ BLWP @STRREF *GET PROMPT STRING MOVB @CARBUF,2 SRL 2,8 MOV 2,@LENG*+INNB BL @PTXX *BLANK BOTTOM LINE* MOV @LENG,2 CI 2,>0000 LI 2,CARBUFSCREENT*S7 JEQ INX *JUMP IF PROMPT IS NULL STRING MOV @EOS,0. S @LINLEN,0 *ADDRESS OF LAST LINE LI 3,CARBUF& BL @PRBUF *PRINT PROMPT INX MOV @EOS,0 S @LINLEN,0 LI 2,CARBUFSCREENT*S(*--------------------------------------*(* MODIFIED PER DISASSEMBLY *(*--------------------------------------* A @LENG,0 MOV @LINLEN,10 S @LENG,10(*--------------------------------------* * MOV @LINLEN,10* DEC 10* A @LENG,0>* S @LENG,10 *ADJUST BOTTOM LINE ADDRES FOR PROMPT + BL @CURSOR *TO CURSOR ROUTINE0 MOVB @ARGID+1,6 *TEST FOR STRING OUTPUT4 COC @PTEST,6 *IF ARGUMENT IDENTIFIER SETLEN,101 JEQ INSTRS *THEN JUMP TO STRING OUT** CI 9,>0000? JEQ ZNOUT *IF NULL INPUT JUMP TO ZERO NUMBER OUT* CLR 1?ISNZ SB @BO,@CARBUF+1(1) *ADJUST BUFFER FOR BASIC OFFSET INC 1 C 1,9N,10 JGT INBOUT JMP ISNZ*INBOUT LI 0,BTEMP LI 1,>00005INBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0 CI 0,BTEMP+16 JNE INBX* LI 0,BTEMP LI 1,CARBUF 1 C 1,9N,102 MOVB *1+,2 *CARBUF LENGTH BYTE TO R2 SRL 2,81 BLWP @VMBW *BUFFER TO ROLL-OUT AREA* MOV 0,@FAC+12 CLR @STATUS2 BLWP @XMLLNK *CONVERT STRING TO NUMBER DATA CSN* LI 0,09N,10 LI 1,2 CLR @STATUS, BLWP @NUMASG *ASSUNG NUMBER TO N* JMP INOUT *EXIT*ZNOUT LI 0,>00000 MOV 0,@FAC *ZERO BYTES TO FAC AREA LI 0,0 LI 1,2 DATA CSN* LI 0,09N,10(*--------------------------------------*(* MODIFIED PER DISASSEMBLY *(*--------------------------------------** MOVB @ZERO,@STATUS CLR @STATUS * BLWP @NUMASG *ASSIGN ZERO TO N* JMP INOUT *EXIT*,10INSTRS LI 1,16ISSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ISSB JMP ISSZ*ISSB LI 0,0 LI 1,2 LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*0INOUT B @XBRET*(*--------------------------------------*(* EMULATE 'ACCEPT AT' *(* CALL LINK("ACCEPT",R,C,L,N/N$) *(*--------------------------------------**ACCEPT LWPI FABWS( BL @GETPAR *GET PARAMETERS**0 CLR 6 A 4,6 A 5,6 C 6,@EOS3 JGT STROUT *EXIT IF VALUES OFF SCREEN* MOV 5,0 MOV 4,10- BL @CURSOR *GOTO CURSOR ROUTINE* MOVB @ARGID+3,6 COC @PTEST,6S**01 JEQ ACSTRS *JUMP IF STRING VARIABLE* CI 9,>0000C JEQ NULOUT *IF NULL INPUT GOTO ZERO NUMBER ASSIGNMENT* CLR 18ASNZ SB @BO,@CARBUF+1(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9S**0 JGT ASNB JMP ASNZ*ASNB LI 0,BTEMP LI 1,>00005ASNBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0 CI 0,BTEMP+16 JNE ASNBX LI 0,BTEMP LI 1,CARBUF MOVB *1+,2S**0 SRL 2,85 BLWP @VMBW *OUTPUT STR TO ROLL-OUT AREA* MOV 0,@FAC+12 CLR @STATUS BLWP @XMLLNK9 DATA CSN *CONVERT OUTPUT STRING TO NUMBER* LI 0,0 LI 1,4 CLR @STATUS**0% BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*NULOUT LI 0,>0000) MOV 0,@FAC *ZERO VAL TO FAC LI 0,0 LI 1,4* MOVB @ZERO,@STATUS CLR @STATUS % BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*ACSTRS LI 1,16ASSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASSB JMP ASSZ*ASSB LI 0,0 LI 1,4 LI 2,CARBUF CLR @STATUSSIGN TO N*& BLWP @STRASG *ASSIGN TO M$*STROUT B @XBRET*(*--------------------------------------*(* UTILITY AREA *(*--------------------------------------*(* SCROLL WHOLE SCREEN UP ONE LINE * CLR @STATUSSIGN TO N*(*--------------------------------------**.PTTA CLR 3 *CLEAR LOCATION INDEX MOV @EOS,5 S @LINLEN,5PTTAX MOV 3,0A A @LINLEN,0 *INCREMENT LOCATION INDEX BY LINE LENGTH LI 1,LGBUFF @STATUSSIGN TO N* MOV @LINLEN,2" BLWP @VMBR *GET LINE S @LINLEN,0/ BLWP @VMBW *WRITE ONE LINE HIGHER A @LINLEN,3 C 3,50 JNE PTTAX *IF NOT DONE DO ANOTHER RT*,LGBUFF @STATUSSIGN TO N*(*--------------------------------------*(* BLANK BOTTOM LINE *(*--------------------------------------*PTXX MOV @EOS,09 S @LINLEN,0 *ADDRESS OF START OF BOTTOM LINE LI 1,>8000 RT*,LGBUFF @STATUSSIGN TO N*+PTX BLWP @VSBW *BLANK BOTTOM LINE INC 0 C 0,@EOS(*--------------------------------------*(* ADDED PER DISASSEMBLY *(*--------------------------------------* JNE PTX RT*UFF @STATUSSIGN TO N*(*--------------------------------------*(* CONVERT NUMBER TO STRING AND *(* PLACE IN LGBUFF WITH LENGTH BYTE*(*--------------------------------------**NTS LI 0,0$ BLWP @NUMREF *GET NUMBER MOVB @ZERO,@FAC+11GN TO N* BLWP @GPLLNK+ DATA >0014 *CONVERT TO STRING*" MOVB @FAC+12,4 *LEN IN 4 MOVB @FAC+11,0 SRL 0,8' AI 0,>8300 *STR ADDR IN 0 LI 1,LGBUFF*) MOVB 4,*1+ *STR LEN TO BUFFGN TO N* SRL 4,8%NTSA MOVB *0+,*1+ *STR TO BUFF DEC 4 JNE NTSA RT N 4 MOVB @FAC+11,0 SRL 0,8' AI 0,>8300 *STR ADDR IN 0 LI 1,LGBUFF*) MOVB 4,*1+ *STR LEN TO BUFFGN TO N** XB40:SF(*--------------------------------------*(* EMULATES 'HCHAR' *(* CALL LINK("HCHART",R,C,LEN,CHR) *(*--------------------------------------**HCHART LWPI FABWS( BL @GETPAR *GET LOC & LENG CLR 6 A 5,6 A 4,61 C 6,@EOS *R6=LOCATION PLUS LENGTH0 JGT HCOUT *EXIT IF EXCEEDS SCREEN LI 0,0* LI 1,4 *FOURTH PARAMETER& BLWP @NUMREF *ASCII NUMBER BLWP @XMLLNKR 6 DATA CFI% MOV @FAC,1 *ASCII TO R1 SLA 1,8* AI 1,>6000 *ADJUST FOR BASIC# MOV 5,0 *LOC TO R0$ MOV 4,2 *LENG TO R25 BLWP @VSBW *WRITE ONE BYTE TO SET VDPWA @XMLLNKR 6 JMP HCHAB:HCHA MOVB 1,@>8C00 *WRITE SUCESSIVE BYTES THRU VDPWD#HCHAB DEC 2 *FINISHED?3 JNE HCHA *WRITE ANOTHER BYTE IF NOT HCOUT B @XBRET*(*--------------------------------------* SET VDPWA @XMLLNKR 6(* MAKES UP TO 32 CHARACTERS *(* OF "INVERSE VIDEO" *(* CALL LINK("INVERT",ROW,COL,LEN) *(*---------------------------------------*INVERT LWPI FABWS( BL @GETPAR *GET PARAMETERS* CLR 6@XMLLNKR 6 A 4,6 A 5,61 C 6,@EOS *R6=LOCATION PLUS LENGTH0 JGT INVOUT *EXIT IF EXCEEDS SCREEN*- MOV 5,0 *GET SCREEN LOCATION/ LI 1,INVBUF *CHARACTER BUFFER AREA CLR 6@XMLLNKR 6( MOV 4,2 *LENGTH OF READ= BLWP @VMBR *READ CHARACTERS TO CHARACTER BUFFER* CLR 6 *INDEX/ LI 2,8 *LENGTH OF PATTERN DEF+P1 MOVB @INVBUF(6),0 *GET CHARACTER VAL CLR 6@XMLLNKR 63 SRL 0,8 *CORRECT TO LEAST SIG BYTE< SLA 0,3 *MPY X 8 FOR OFFSET INTO PATT TABLE# MOV 6,1 *GET INDEXA SLA 1,3 *MPY X 8 FOR OFFSET FOR INVERSION BUFFERCHARACTER VAL CLR 6@XMLLNKR 64 AI 1,LGBUFF *LOCATION IN PATTERN BUFFER: BLWP @VMBR *READ PATTERN TO INVERSION BUFFER INC 6 C 6,4 *DONE?3 JNE P1 *IF NOT GET NEXT CHARACRER*) LI 1,LGBUFF *START OF BUFFER/M1 INV *1+ *INVERT WORD IN BUFFER( CI 1,LGBUFF+256 *END OF BUFFER?1 JNE M1 *IF NOT INVERT NEXT WORD*/ LI 0,>0700 *ADDR OF CHARACTER 1282 LI 1,LGBUFF *INVERSION BUFFER ADDRESSART OF BUFFER( LI 2,>0100 *BYTES TO WRITE BLWP @VMBW *WRITE* CLR 2 *INDEX1 MOV 5,0 *LOCATION OF SCREEN LINE2 LI 1,>E000 *FIRST INVERTED CHARACTERF *INVERSION BUFFER ADDRESSART OF BUFFER/P2 BLWP @VSBW *WRITE FIRST CHARACTER( AI 1,>0100 *NEXT CHARACTER' INC 0 *NEXT POSITION) INC 2 *INCREMENT INDEX1 C 2,4 *IF NOT DONE WRITE AGAIN JNE P2INVOUT B @XBRET*(*--------------------------------------*(* RESTORE ORGINAL SCREEN *(* CALL LINK("REVERT",R,C,LENG) *(*--------------------------------------**REVERT LWPI FABWS BL @GETPAR" MOV 5,0 *LOCATIONT B @XBRET3 LI 1,INVBUF *ORIGINAL CHARACTER STRING MOV 4,2 *LENGTH) BLWP @VMBW *RE-WRITE SCREEN B @XBRET*(*--------------------------------------*(* NUMBER FORMATTER * *LOCATIONT B @XBRET(* CALL LINK("FORMAT",N,N$,D,L) *(*--------------------------------------**FORMAT LWPI FABWS LI 0,SMLBUF LI 1,>20207FZ MOV 1,*0+ *LOAD IMAGE STRING WITH SPACES CI 0,SMLBUF+>10 JNE FZ*T B @XBRET LI 0,0* LI 1,3 *GET 3D PARAMETER BLWP @NUMREF BLWP @XMLLNK DATA CFI2 MOV @FAC,4 *NUM OF DECIMAL PLACES=R4*+ LI 1,4 *GET 4TH PARAMETER BLWP @NUMREF BLWP @XMLLNKET DATA CFI# MOV @FAC,5 *LENGTH=R5* LI 0,0+ LI 1,1 *GET 1ST PARAMETER$ BLWP @NUMREF *NUM AT FAC= CI 4,>0000 *IF DECIMAL=0 THEN JUMP TO NON-FIXED JEQ INTOUT* AI 4,>0900. MOVB @H20,@FAC+11 *SET FOR FIXED FORMAT1 MOV 4,@FAC+12 *RETRIEVE DECIMAL PLACES CLR @STATUS! BLWP @GPLLNK *CONVERT DATA >00149 JMP TOBUFF *GET READY TO MOVE TO OUT BUFFER*INTOUT MOVB @ZERO,@FAC+11 CLR @STATUS, BLWP @GPLLNK *UNFIXED CONVERSION DATA >0014*TOBUFF MOV 5,6& INC 6 *LENG+1 IN R6 MOV 5,1! AI 1,>0001 *LENG +1 SLA 1,8 SB @FAC+12,1INTOUT MOVB @ZERO,@FAC+11* JLT BIGOUT *IF TOO LONG JUMP+ SRL 1,8 *OFFSET FOR LENGTH MOVB @FAC+11,0 SRL 0,8 AI 0,>83004MV1 MOVB *0+,@SMLBUF(1) *MOVE STRING TO CARBUF INC 1% C 1,6 *FIXED LENTHC+11 JNE MV1 SWPB 5& MOVB 5,@SMLBUF *LENG TO BUFF*FOUT LI 0,09 LI 1,2 *READY TO ASSIGN TO 2D PARAMETER LI 2,SMLBUF CLR @STATUS- BLWP @STRASG *ASSIGN STRING TO N$ B @XBRET*1BIGOUT LI 0,SMLBUF. LI 1,>2A2A *ADDRESS OF ASTERISKS'BGZ MOV 1,*0+ *TO OUT BUFFER CI 0,SMLBUF+>10 JNE BGZ SWPB 5 MOVB 5,@SMLBUF3 B @FOUT *EXIT TO STRING ASSIGNMENT B @XBRET*1* XB40:SG(*--------------------------------------*(* SCROLL UP A HORIZONTAL *(* SECTION OF THE SCREEN *9* CALL LINK("SCRLT",ROW1,ROW2,CNT)* *NEW PARAMETER(*--------------------------------------**SCRLT LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,2+ MOV 2,@LENG *SAVE ROW1 TO LENG CI 2,>0001( JLT SCROUT *EXIT IF ROW1<1-----**3 DEC 2 *ADJUST FOR BASIC NOTATION* MPY @LINLEN,2 *START ADDR IN R3, MOV 3,7 *SAVE IN REGISTER 7(*--------------------------------------*(* MODIFIED TO MATCH DISASSEMBLY * ROW1<1-----**(*--------------------------------------** LI 1,2 INC 1  BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,4) CI 4,>0018 *EXIT IF ROW2>24 JGT SCROUT $ C @LENG,4 *ROW1 0% B @XBRET *ELSE RETURN/SCRY MOV 7,3 *RESTORE START ADDRESSSCRA MOV 3,0ETERW18000 *LOAD BLANK CHARACTER,SCRB BLWP @VSBW *WRITE TO LAST LINE INC 0 INC 2 C 2,@LINLEN *EOL?,0ETERW10001 *EXIT IF <1 JLT VOUT DEC 4(*--------------------------------------*(* MODIFIED TO MATCH DISASSEMBLY *(*--------------------------------------** LI 1,2 INC 1  BLWP @NUMREFOW2? BLWP @XMLLNK DATA CFI MOV @FAC,5 DEC 5 MOV 5,6 S 4,6, JGT VZ *EXIT IF 0# B @XBRET *ELSE EXIT VX MOV 4,0VSA LI 1,CARBUF MOV 6,2& BLWP @VMBR *READ TOP SEG INC 0 DEC 2 MOV @FAC,8 *COUNT to R8 LWP @NUMREFOW2?= BLWP @VMBW *WRITE IT ONE POSITION TO RIGHT (+1)* DEC 0 *READJUST VDP ADR*# A @LINLEN,0 *NEXT LINE' C 0,@EOS *END OF SCREEN$ JLT VSA *IF NOT JMP* MOV 4,0MREFOW2? LI 1,>8000(VSB BLWP @VSBW *BLANKS TO COL1 A @LINLEN,0 C 0,@EOS JLT VSB) DEC 8 *DECREMENT COUNT JNE VXVOUT B @XBRET*)*---------------------------------------*MREFOW2?)* SCROLL UP VERTICAL SECTION *)* CALL LINK("HSCROL",COL1,COL2,CNT)*)*---------------------------------------**HSCROL LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI--*MREFOW2?& MOV @FAC,4 *START COL=R4 CI 4,>0001$ JLT HOUT *EXIT IF <1 DEC 4(*--------------------------------------*(* MODIFIED TO MATCH DISASSEMBLY *(*--------------------------------------** LI 1,2 INC 1  BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,5# DEC 5 *END COL=5 MOV 5,65 S 4,6 *EXIT IF LESS THAN START COL JGT HZ B @XBRET** LI 1,2!HZ INC 6 *LENG=R6+ A @EOS,5 *END OF BOTTOM ROW S @LINLEN,5*& INC 1 *3d Parameter BLWP @NUMREF  BLWP @XMLLNK DATA CFI & MOV @FAC,8 *COUNT to R8 1,2% JGT HX *MUST BE >0) B @XBRET *OR ELSE GETOUT HX MOV 4,0 A @LINLEN,0HSA LI 1,CARBUF MOV 6,2& BLWP @VMBR *READ 2D LINE S @LINLEN,08 *COUNT to R8 1,22 BLWP @VMBW *WRITE IT ONE LINE HIGHER*# A @LINLEN,0 *NEXT LINE A @LINLEN,0' C 0,@EOS *END OF SCREEN$ JLT HSA *IF NOT JMP* MOV 4,0 A @EOS,0 S @LINLEN,02 LI 1,>8000(HSB BLWP @VSBW *BLANKS TO COL1 INC 0 C 0,5. JGT HY *IF DONE GET NEXT COL: JMP HSB *IF NOT END OF LINE WRITE ANOTHER*#HY DEC 8 *DEC COUNT @LINLEN,025 JNE HX *IF NOT DONE THEN LOOP AGAINHOUT B @XBRET*(*--------------------------------------*(* CALL KEY REPLACEMENT *(* CALL LINK("XKEY",UNIT,K/K$) *(*--------------------------------------**LEN,02XKEY LWPI FABWS CLR 0& LI 1,>0001 *1ST PARAMETER BLWP @NUMREF BLWP @XMLLNK DATA CFI' MOV @FAC,4 *KEY UNIT to R4 JEQ KEYZ CI 4,>00011 JLT KOUT *ILLEGALLY SMALL KEY UNIT CI 4,>00051 JGT KOUT *ILLEGALLY LARGE KEY UNIT SLA 4,8' MOVB 4,@SVXKEY *STORE KEY UNITKEYZ MOVB @SVXKEY,@KEYDEV CLR @STATUS BLWP @GPLLNK" DATA >0034 *GET READY CLR @STATUS*IT8KLOOP LIMI >0002 *INTERRUPTS ENABLED FOR KEYPRESS LIMI >0000 BLWP @KSCAN CB @H20,@STATUS3 JNE KLOOP *KEEP WAITING FOR KEY PRESS*. MOVB @ARGID+1,4 *TEST SECOND PARAMETER COC @PTEST,4@STATUS*IT. JEQ KEYX *JUMP IF IT'S A STRING MOVB @KEY,1 SRL 1,8 MOV 1,@FAC8 BLWP @XMLLNK *CONVERT ASCII VALUE OF KEYPRESS DATA CIF CLR 0/ LI 1,>0002 *ASSIGN TO 2D PARAMETERST,4@STATUS*IT BLWP @NUMASG" JMP KDONE *GOTO EXIT*KEYX MOV @KEYDEV,@CARBUF LI 4,>0100) MOVB 4,@CARBUF *LENGTH to CARBUF CLR 0) LI 1,>0002 *SECOND PARAMETER LI 2,CARBUFD PARAMETERST,4@STATUS*IT" BLWP @STRASG *ASSIGN ITKDONE LI 1,>0500+ MOVB 1,@KEYDEV *RESET KSCAN DEVICEKOUT B @XBRET *EXIT  GTH to CARBUF CLR 0) LI 1,>0002 *SECOND PARAMETER LI 2,CARBUFD PARAMETERST,4@STATUS*ITformat6LINKPRINTT!I like BLACK on GREY best of all.LINKCOLORT215=LINKPRINTT(You can change foreground and backgroundLINKPRINTT1LINKPRINTTcommands available in BASIC.:LINKPRINTT%Of course you can use most the normalLINKPRINTT8LINKPRINTT#screen scroll. Watch the top lines!9LINKPRINTT$plain old BASIC, like this SELECTIVE;LINKPRINTT&And we can do things you can't do with7LINKPRINTT"Press any key for a demonstration.:LINKPRINTT%We can scroll lots of different ways.LINKCHRSETCLINKDISPAT151%display to any given screen location.kLINKDISPAT131MAs you can see, the screen now displays a full 40-character line, and you cannLINKDISPAT171PYou can even change to a different set of characters. Press any key and watch!!LINKTEXT?9 8B2004TESTd"2r*&* A 'UNIVERSAL' GPLLNK AND DSRLNK$* ROUTINE FROM CRAIG MILLER AND"* D.C. WARREN AS PUBLISHED IN!* SMART PROGRAMMER JULY 1986*+* SEE THAT ISSUE FOR DETAILED COMMENTS*.* REPUBLISHED IN MICROPENDIUM AUGUST 1991*&* THIS DSR ROUTINE NEEDS THIS GPL+* ROUTINE. BOTH WORK IN ANY ENVIROMENT+* AND WORK JUST LIKE THE E/A ROUTINES.* 4*GPLWS EQU >83E0 *DO NOT DUP IN YOUR SOURCE!GR4 EQU GPLWS+8GR6 EQU GPLWS+12DIUM AUGUST 1991*'STKPNT EQU >8373 * A.K.A.SUBSTKLDGADD EQU >60XTAB27 EQU >200EGETSTK EQU >166C 176C R10 DATA >50 R11 GLNKWS EQU $->18 BSS >08 R12-R15 GLINK1 MOV *11,@GR4 MOV *14+,@GR6 MOV @XTAB27,12 MOV 9,@XTAB27 LWPI GPLWS BL *4 MOV @GXMLAD,@>8302(4) INCT @STKPNT B @LDGADD R11 XMLRTN MOV @GETSTK,4 BL *4 LWPI GLNKWS MOV 12,@XTAB27 RTWP #*********************************** PUTSTK EQU >50TYPE EQU >836D)NAMLEN EQU >8356 * A.K.A. PNTR*VWA EQU >8C02 * A.K.A. VDPWAVRD EQU >8800GR4LB EQU >83E9+GSTAT EQU >837C * A.K.A. STATUS DSRLNK DATA DSRWS,DLINK1 DSRWS EQU $DR3LB EQU $+7DLINK1 MOV 12,12 JNE DLINK3  LWPI GPLWS MOV @PUTSTK,4 BL *4 LI 4,>11 MOVB 4,@>402(13) JMP DLINK2 DATA 0 DATA 0,0,0DLINK2 MOVB @GR4LB,@>402(13) MOV @GETSTK,5 MOVB *13,@DSRAD1 INCT @DSRADD BL *5 LWPI DSRWS LI 12,>2000 DLINK3 INC 14I 4,>11 MOVB *14+,@TYPE MOV @NAMLEN,3 AI 3,-8 BLWP @GPLLNKDSRADD BYTE >03DSRAD1 BYTE >00 #* ERROR CHECKING & REPORT BACK  MOVB @DR3LB,@VWA MOVB 3,@VWA SZCB 12,15 MOVB @VRD,3 SRL 3,5 MOVB 3,*13 JNE SETEQ COC @GSTAT,12 JNE DSRENDSETEQ SOCB 12,15 DSREND RTWP  00 #* ERROR CHECKING & REPORT BACK  MOVB @DR3LB,@VWA MOVB 3,@VWA SZCB 12,15 MOVB @VRD,3 SRL 3,5* X40:TEXTS(*--------------------------------------*(* LOADS ALTERNATE CHARACTERS *(* FROM DISK: "DSK1.CHARA2" *(* CALL LINK("ALCHAR") *(*--------------------------------------** DEF ALCHAR*ALCHAR LWPI FABWS' LI 0,>0020 *BYTES FOR PAB MOV 0,@>830C CLR @STATUS* BLWP @GPLLNK2* DATA >0038 *ALLOCATE VDP RAM FOR PAB) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY MOV @>831C,0 LI 1,CARPAB LI 2,>0015- BLWP @VMBW *PAB DATA TO VDP RAM CLR @STATUS AI 0,>0009 MOV 0,@PNTR CLR @STATUS' BLWP @DSRLNK *LOAD 'CHARA2' DATA >0008*EMBLY LI 1,ALTCUR; MOV 1,@CURPAT *POINT TO ALTERNATE CURSOR PATTERN* B @XBRET*(*--------------------------------------*(* LOADS STANDARD CHARACTERS *(* CALL LINK("CHRSET") * DATA >0008*EMBLY(*--------------------------------------** DEF CHRSET*CHRSET LWPI FABWS) LI 0,PATTAD *CHAR 32 ADDRESS MOV 0,@FAC CLR @STATUS$ BLWP @GPLLNK *UPPER CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE DATA >004A( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,BASCUR *POINT TO BASIC CURSOR PATTERN> MOV 1,@CURPAT *FOR USE IN CURSOR ROUTINE CAN USE IT LI 2,8 CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE= BLWP @VMBW *AND WRITE NEW PATTERN TO PATT TABLE* B @XBRET*(*--------------------------------------*(* ENTER TEXT MODE *(* CALL LINK("TEXT") *(*--------------------------------------**ASE DEF TEXT*TEXT LWPI FABWSC LI 0,768 *NEW IN 2003; NEW POSITION PER DISASSEMBLY LI 1,VDPBUF7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLY' BLWP @VMBR *SAVE VDP INFO LI 0,>01F0-----**ASE* BLWP @VWTR *SET VDP REGISTER SWPB 0, MOVB 0,@>83D4 *SAVE REGISTER BYTE: LI 0,>0717 *>0717 PER DISASSEMBLY. NOT >0713$ BLWP @VWTR *SET COLORS LI 1,>0028NFO LI 0,>01F0-----**ASE) MOV 1,@LINLEN *SET LINE LENGTH SWPB 1+ MOVB 1,@BYTCNT *ADJUST "DUMP" PAB LI 1,>03C0) MOV 1,@EOS *& END OF SCREEN**. BL @CLEARC *CLEAR THE NEW SCREEN B @XBRET*0,>01F0-----**ASE(*--------------------------------------*(* RETURN TO GRAPHICS MODE *(* CALL LINK("RETURN") *(*--------------------------------------** DEF RETURN*RETURN LWPI FABWS BL @CLEARC LI 0,>01E0--**ASE* BLWP @VWTR *SET VDP REGISTER3 SWPB 0 *RELOCATED PER DISASSEMBLY* MOVB 0,@>83D4 *SAVE VDP R1 BYTE*A LI 0,768 *NEW IN 2003 & RELOCATED PER DISASSEMBLY LI 1,VDPBUF LI 0,>01E0--**ASE7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLY* BLWP @VMBW *RESTORE VDP INFO LI 1,>00206 MOV 1,@LINLEN *ADJUST LINE LENGTH PARAMETER SWPB 19 MOVB 1,@BYTCNT *ADJUST BYTE COUNT IN "DUMP" PAB-**ASE LI 1,>03008 MOV 1,@EOS *CHANGE END OF SCREEN PARAMETER B @XBRET*(*--------------------------------------*(* SET COLORS IN TEXT MODE *(* CALL LINK("COLORT",FGD,BKGD) *BYTE COUNT IN "DUMP" PAB-**ASE(*--------------------------------------** DEF COLORT*COLORT LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI3 MOV @FAC,3 *RETRIEVE FOREGROUND COLOR DEC 3DUMP" PAB-**ASE$ CI 3,>0000 *TEST RANGE JLT CLOUT CI 3,>000F JGT CLOUT0 SLA 3,4 *FORGROUND=3D NYBBLE R3 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,0 3DUMP" PAB-**ASE' DEC 0 *BACKGROUND=R0 CI 0,>0000$ JLT CLOUT *TEST RANGE CI 0,>000F JGT CLOUT" A 3,0 *ADD THEM( AI 0,>0700 *FOR VDP REG. 7$ BLWP @VWTR *SET COLORS ASECLOUT B @XBRET*(*--------------------------------------*(* CLEAR SCREEN EITHER MODE *(* CALL LINK("CLEART") *(*--------------------------------------** DEF CLEART*CLEART LWPI FABWS BL @CLEARCS ASE B @XBRET *--------------------------------------*(* CLEAR SCREEN EITHER MODE *(* CALL LINK("CLEART") *(*--------------------------------------** DEF CLEART*CLEART LWPI FABWS BL @CLEARCS ASE0117A A0000B0000B0100B0000B0000B0020B0300B0110B0028B00007F39AF 0001A0012B0003B0407B0809B0D20B2860B7E7FB80FFB0000B0000BAA2E7F3C6F 0002A0026A0036A0056A0076A0096A00C0A01C0A0280A0282B3838B3838B38387F303F 0003 >20A0288B0000B0000B0000B0000B00FEB007CB7C7CB7C7CB7C7CC0292B00007F2B1F 0004A029EB0100B0010B0000B5020B0000B0003B5049B4F00B0500B03EAB00007F32CF 0005A02B4B030FB000BB4453B4B31B2E43B4841B5241B3200B0000B0000B00007F305F 0006R0+10A02CAB0000B0000A02CEA02D6A02F6C02D6C02FABC17EB53E0C0019BC0207F277F 0007A0302B8356BC240B0229BFFF8B0420B2028BD0C1B0983B0704B0202C02CE7F29FF 0008A0318B0580B0584B80C4B1306B0420B2028BDC81B9801C0025B16F6BC1047F2C8F 0009R0+10A032EB1352B0284B0007B154FB04E0B83D0BC804B8354BC804C02C8B05847F29FF 0010A0344BA804B8356BC820B20A4C02CAB02E0B83E0B04C1B020CB0F00BC30C7F276F 0011A035AB1301B1E00B022CB0100B04E0B83D0B028CB2000B1332BC80CB83D07F2B9F 00120+10A0370B1D00B0202B4000B9812C0024B16EEBA0A0C02E0B1003BC0A0B83D27F2BCF 0013A0386B1D00BC092B13E6BC802B83D2B05C2BC272BD160B8355B1309B9C857F273F 0014A039CB16F2B0985B0206C02CEB9CB6B16EDB0605B16FCB0581BC801C02CC7F239F 00150+10A03B2BC809C02C6BC80CC02C4B0699B10E2B1E00B02E0C02D6BC009B04207F277F 0016A03C8B2028B09D1B1604B0380B02E0C02D6B04C1B06C1BD741BF3E0C00197F295F 0017A03DEB0380B2038C03E4BD060B9802B06C1BD060B9802B06C1B0221BFFFD7F268F 00180+10A03F4BD0A0B8373B0982B0222B8300B05C2BD481B06C1BD881B0001B06C27F2A1F 0019A040ABD802B8373BD83EB9C02BD83EB9C02BC120B2000B0203C0428BC8037F27CF 0020A0420B2000B02E0B83E0B045BB02E0B2038BC804B2000B0380B02E0B83E07F2D1F 0021N CARD ONA0436B0460B006ABD133B0984BD073B0221B6000B0420B2020B0580B88007F304F 0022A044CC000AB1302B0604B16F5B045BB04C0B0201B8000BC0A0C000AB04207F2DAF 0023A0462B2020B1002BD801B8C00B0602B16FCB045BB0200B0000B0201B00037F30CF 0024N CARD ONA0478B0420B200CB0420B2018B12B8BC120B834AB0200B0000B0201B00017F31AF 0025A048EB0420B200CB0420B2018B12B8BC060B834AB0601B3860C0008BC1427F2D4F 0026A04A4B0201B0002B0420B200CB0420B2018B12B8BC0A0B834AB0602BA1427F2E7F 0027OINTER TO R2A04BAB045BB04C3BC160C000AB6160C0008BC003BA020C0008B0201C00C07F2CBF 0028A04D0BC0A0C0008B0420B202CB6020C0008B0420B2024BA0E0C0008B81437F2F2F 0029A04E6B16EFB045BBC020C000AB6020C0008B0201B8000B0420B2020B05807F2ECF 0030 BYTE TO R5A04FCB8800C000AB16FAB045BB0200B0000B0420B200CBD820C0012B83557F2C6F 0031A0512B0420C03E0B0014BD120B8356BD020B8355B0980B0220B8300B02017F30BF 0032A0528C00C0BDC44B0984BDC70B0604B16FDB045BBC180B04C5B3D60C00087F269F 0033 BYTE TO R5A053EBC1E0C0008B61C6B81CAB1101BC287BC1C0BC147BA14AB0605B02087F26DF 0034A0554B0001B04C9BD820C001CC0020B0201C0097BC08AB0203B8000BDC437F2D2F 0035A056AB0602B16FDB0201C0097BC08AB0420B2024B04E0B837CB0420C03E07F2B2F 0036 BYTE TO R5A0580B0034B04C6B0586B0286B0080B110CB04C6B9820C0020C001CB13047F2F1F 0037A0596BD820C001CC0020B1003BD828C0096C0020BD060C0020B0420B20207F304F 0038A05ACB04E0B837CB0300B0002B0300B0000B0420B201CB9820C0019B837C7F2E4F 0039 BYTE TO R5A05C2B16E0BC820C000CC0010B101EBD820B8375C0022B04C6B04E0B837C7F29DF 0040A05D8B0420B201CB9820C0019B837CB130FB9820B8375C001FB13CCB05867F299F 0041A05EEB8806C0010B16F0BC820C000EC0010BD820C0022B8375B1003BC8207F2BEF 0042 BYTE TO R5A0604C000CC0010B9820C0018B8375B1602B0460C0806B9820C0016B83757F30AF 0043A061AB1602B0460C06BAB9820C0017B8375B1602B0460C06E4B9820C00137F2DFF 0044A0630B8375B1602B0460C0714B9820C0014B8375B1602B0460C0772B98207F30BF 0045 OF CALLING PMGA0646C0015B8375B1602B0460C07D8B9820B8375C001DB1506B9820B83757F2D7F 0046A065CC0019B1102B0460C0670B04E0B837CB0420C03E0B0036B108AB98207F2DAF 0047A0672C0021C0012B1302B0460C077ABD060B8375B0221B6000B0420B20207F325F 0048 OF CALLING PMGA0688BDA01C0096B0608B8248B1601B0589B0580B05C8B8288B1501B10017F2D4F 0049A069EBC20AB8140B1501B1001B0600BD820C001CC0020BD060C0020B04207F2F3F 0050A06B4B2020B0460C05CCB0420C082EB0288B0001B1508B04E0B837CB04207F2D1F 0051A06CAC03E0B0036B04C6B0460C0584BD068C0096B0420B2020B0600B06087F2DDF 0052A06E0B0460C06A8B0420C082EB8140B1304B0608B8248B1609B0588B04E07F2D0F 0053A06F6B837CB0420C03E0B0036B04C6B0460C0584BD068C0097B0420B20207F2CDF 0054A070CB05C8B0580B0460C06A8B0420C082EB0289B0000B1328B8248B15267F2D6F 0055A0722B0202C0097B0203C00C0B0204B0001B1002BDCF2B0584B8204B16FC7F2E1F 0056A0738B0582B0584B8244B1502BDCF2B10FBB0202B8000BD4C2B04C4B02027F2A6F 0057 3,GPL1A074EC0097B0203C00C0BDCB3B0584B8244B16FCBC100BC007B0201C00977F297F 0058A0764BC089B0420B2024BC004B0609B0460C06A8B0420C084AB0460C05847F2DFF 0059A077AB04C4B0202C0097B0203C00C0B1001BDCF2B0584B8204B1301B10FB7F2BCF 0060 3,GPL1A0790BD060B8375B0221B6000BDCC1BDCF2B0584B8244B1501B10FBB82887F27FF 0061A07A6B1305B0588B0580B8289B1301B0589B04C4B0202C0097B0203C00C07F2EAF 0062A07BCBDCB3B0584B8244B16FCBC100BC007B0201C0097BC089B0420B20247F283F 0063A07D2BC004B0460C06A8B0420C082EB04E0C0096B0201C0097BC08AB02037F2C0F 0064A07E8B8000BDC43B0602B16FDB04C9BC007B0201C0097BC08AB0420B20247F297F 0065A07FEB0208B0001B0460C0584B0420C082EBD068C0096B0420B2020B02897F2E4F 0066 BSS >8A0814B0000B1306B9829C0096C001EB1602B0609B10FAB06C9BD809C00967F2C1F 0067A082AB06C9B045BC0076C0832B9820C0021C0012B1307B04E0C0021B02007F2F9F 0068A0840B03F0BC060C029AB100BB0380C0076C084EB0201BFF00BD801C00217F2B9F 0069A0856B0200B03F0B0201C028AB0202B0008B0420B2024B0380B02E0C00567F31DF 0070A086CB04C0B0201B0001B0420B200CB0420B2018B12B8BC120B834AB13097F2EAF 0071A0882B0284B0001B113FB0284B0005B153CB0A84BD804C0023BD820C00237F2E0F 0072 DATA BASCUR A0898B8374B04E0B837CB0420C03E0B0034B04E0B837CB0300B0002B03007F2D9F 0073A08AEB0000B0420B201CB9820C0019B837CB16F6BD120B8301B2120C00027F2D7F 0074A08C4B130EBD060B8375B0981BC801B834AB0420B2018B0020B04C0B02017F2CEF 0075 DATA BASCUR A08DAB0002B0420B2008B100EBC820B8374C0096B0204B0100BD804C00967F2E3F 0076A08F0B04C0B0201B0002B0202C0096B0420B2010B0201B0500BD801B83747F320F 0077A0906B0460C0432B02E0C0056B0200B0020BC800B830CB04E0B837CB04207F2EBF 0078 DATA BASCUR A091CB2018B0002BC820B831CC0000B0200B002ABC800B830CB04E0B837C7F2BFF 0079A0932B0420B2018B0002BC820B831CC02A2BD820B9802C0280BD820B98027F2D2F 0080A0948C0281B0620C0280BC020C0000B0201C029CB0202B0012B0420B20247F331F 0081A095EBC1A0C0000B0226B000DBC806B8356B0420C02F6B0008B0201B03007F2E1F 0082A0974BC020C0000B0220B0004B0420B2020B04E0C0006BC020C0006B02017F337F 0083A098AC00C0BC0A0C0008B0420B202CB04C1B7860C001BC00C0B0581B88017F2BEF 0084 *A09A0C0008B16F9B04C1B9820C00C0C0019B1105B9820C00C0C001DB15017F2D4F 0085A09B6B1003BD860C0019C00C0B0581B8801C0008B16F0BC020C02A2B02017F2D9F 0086A09CCC00C0BC0A0C0008B0420B2024BC806B8356B0420C02F6B0008BA8207F2B5F 0087 BSS >8A09E2C0008C0006BC020C0006B8800C000AB11CCB0201B0100BC020C00007F302F 0088A09F8B0220B0004B0420B2020BC806B8356B0420C02F6B0008BD820C02807F2ECF 0089A0A0EB9C02BD820C0281B9C02B0460C0432B02E0C0056B0200B0020BC8007F2D0F 00901 >8A0A24B830CB04E0B837CB0420B2018B0002BC020B831CB0201C02AEB02027F2C8F 0091A0A3AB0015B0420B2024B04E0B837CB0220B0009BC800B8356B04E0B837C7F2BFF 0092A0A50B0420C02F6B0008B0201C0282BC801C029AB0460C0432B02E0C00567F2EFF 0093 *A0A66B0200B0400BC800B834AB04E0B837CB0420C03E0B0018B0420C03E07F2CFF 0094A0A7CB004AB0200B03F0B0201C0292BC801C029AB0202B0008B0420B20247F2F3F 0095A0A92B0460C0432B02E0C0056B0200B0300B0201C01C0B0202B00C0B04207F325F 0096-----**A0AA8B202CB0200B01F0B0420B2030B06C0BD800B83D4B0200B0717B04207F2DEF 0097A0ABEB2030B0201B0028BC801C0008B06C1BD801C02A5B0201B03C0BC8017F2BEF 0098A0AD4C000AB06A0C0456B0460C0432B02E0C0056B06A0C0456B0200B01E07F2DAF 0099-----**A0AEAB0420B2030B06C0BD800B83D4B0200B0300B0201C01C0B0202B00C07F2E4F 0100A0B00B0420B2024B0201B0020BC801C0008B06C1BD801C02A5B0201B03007F312F 0101A0B16BC801C000AB0460C0432B02E0C0056B0200B0000B0201B0001B04207F328F 0102LIZE POSITIONA0B2CB200CB0420B2018B12B8BC0E0B834AB0603B0283B0000B1119B02837F2D1F 0103A0B42B000FB1516B0A43B0201B0002B0420B200CB0420B2018B12B8BC0207F2FCF 0104A0B58B834AB0600B0280B0000B1108B0280B000FB1505BA003B0220B07007F30FF 01051,CARBUF+1ONA0B6EB0420B2030B0460C0432B02E0C0056B06A0C0456B0460C0432B02E07F2F1F 0106A0B84C0056B06A0C0486B8805C000AB151DBD1A0B8302B21A0C0002B13057F2C9F 0107A0B9AB0201B0003B06A0C0504B100EB0201B0003B0202C00C0B0204BFF007F2F9F 01081,CARBUF+1ONA0BB0BD804C00C0B0420B2014B9820C00C0C0012B1305BC005B0203C00C07F2E8F 0109A0BC6B06A0C043AB0460C0432B02E0C0056B06A0C04BCB06A0C04EABD1A07F277F 0110A0BDCB8300B21A0C0002B1305B0201B0001B06A0C0504B100FB0200B00007F310F 01111,CARBUF+1ONA0BF2B0201B0001BD820C0009C00C0B0202C00C0B0420B2014B9820C00C07F2FCF 0112A0C08C0012B1308BC020C000AB6020C0008B0203C00C0B06A0C043AB04607F2FCF 0113A0C1EC0432B02E0C0056B06A0C04BCB0200B0000B0201B0001B0202C00967F301F 01141,CARBUF+1ONA0C34BD820C0009C0096B0420B2014BD0A0C0096B0982BC802C0006B06A07F2D0F 0115A0C4AC04EABC0A0C0006B0282B0000B1308BC020C000AB6020C0008B02037F2DFF 0116A0C60C0096B06A0C043ABC020C000AB6020C0008BA020C0006BC2A0C00087F2D8F 0117,CARBUF+1ONA0C76B62A0C0006B06A0C0536BD1A0B8301B21A0C0002B133AB0289B00007F2D8F 0118A0C8CB132AB04C1B7860C001BC0097B0581B8241B1501B10F9B0200B03C07F2BFF 0119A0CA2B0201B0000B0420B2020B0580B0280B03D0B16FAB0200B03C0B02017F308F 0120 BLWP @KSCANA0CB8C0096BD0B1B0982B0420B2024BC800B8356B04E0B837CB0420B20187F2ADF 0121A0CCEB11AEB0200B0000B0201B0002B04E0B837CB0420B2008B1020B02007F2F5F 0122A0CE4B0000BC800B834AB0200B0000B0201B0002B04E0B837CB0420B20087F2F6F 0123PPED!*@KSCANA0CFAB1013B0201B0001B7860C001BC0096B0581B8241B1501B10F9B02007F2F0F 0124A0D10B0000B0201B0002B0202C0096B04E0B837CB0420B2010B0460C04327F329F 0125A0D26B02E0C0056B06A0C0470B04C6BA184BA185B8806C000AB1556BC0057F2A5F 0126ECIAL KEY*ANA0D3CBC284B06A0C0536BD1A0B8303B21A0C0002B133AB0289B0000B132A7F2B4F 0127A0D52B04C1B7860C001BC0097B0581B8241B1501B10F9B0200B03C0B02017F2E6F 0128A0D68B0000B0420B2020B0580B0280B03D0B16FAB0200B03C0B0201C00967F2FFF 0129ECIAL KEY*ANA0D7EBD0B1B0982B0420B2024BC800B8356B04E0B837CB0420B2018B11AE7F292F 0130A0D94B0200B0000B0201B0004B04E0B837CB0420B2008B1020B0200B00007F335F 0131A0DAABC800B834AB0200B0000B0201B0004B04E0B837CB0420B2008B10137F2E5F 0132ECIAL KEY*ANA0DC0B0201B0001B7860C001BC0096B0581B8241B1501B10F9B0200B00007F308F 0133A0DD6B0201B0004B0202C0096B04E0B837CB0420B2010B0460C0432B02E07F2F7F 0134A0DECC0056B0200B0000B0201B0001B0420B200CB0420B2018B12B8BC0A07F2F7F 0135@ZEROKEY*ANA0E02B834ABC802C0006B0282B0001B1141B0602B38A0C0008BC1C3B05817F2DEF 0136A0E18B0420B200CB0420B2018B12B8BC120B834AB0284B0018B1532B81207F2E8F 0137A0E2EC0006B1102B0460C0432B0604B3920C0008B0581B0420B200CB04207F317F 0138@ZEROKEY*ANA0E44B2018B12B8BC220B834AB1502B0460C0432BC0C7BC003BA020C00087F2BBF 0139A0E5AB0201C00C0BC0A0C0008B0420B202CB6020C0008B0420B2024BA0E07F2E1F 0140A0E70C0008B8143B16EFBC005B04C2B0201B8000B0420B2020B0580B05827F2E9F 0141THEN TLOCAANA0E86B8802C0008B16F9B0608B16E1B0460C0432B02E0C0056B0200B00007F2EAF 0142A0E9CB0201B0001B0420B200CB0420B2018B12B8BC120B834AB0284B00017F2EFF 0143A0EB2B1137B0604B0581B0420B200CB0420B2018B12B8BC160B834AB06057F2D7F 0144THEN TLOCAANA0EC8BC185B6184B1502B0460C0432B0586B0581B0420B200CB0420B20187F2E5F 0145A0EDEB12B8BC220B834AB1502B0460C0432BC004B0201C0096BC086B04207F2B3F 0146A0EF4B202CB0580B0602B0420B2024B0600BA020C0008B8800C000AB11F17F2ECF 0147IX & OUTAANA0F0ABC004B0201B8000B0420B2020BA020C0008B8800C000AB11F9B06087F2F2F 0148A0F20B16E4B0460C0432B02E0C0056B0200B0000B0201B0001B0420B200C7F322F 0149A0F36B0420B2018B12B8BC120B834AB0284B0001B1141B0604B0581B04207F2FBF 0150IX & OUTAANA0F4CB200CB0420B2018B12B8BC160B834AB0605BC185B6184B1502B04607F2B7F 0151A0F62C0432B0586BA160C000AB6160C0008B0581B0420B200CB0420B20187F2FDF 0152A0F78B12B8BC220B834AB1502B0460C0432BC004BA020C0008B0201C00967F2D7F 0153IX & OUTAANA0F8EBC086B0420B202CB6020C0008B0420B2024BA020C0008BA020C00087F2EAF 0154A0FA4B8800C000AB11F0BC004BA020C000AB6020C0008B0201B8000B04207F2EFF 0155A0FBAB2020B0580B8140B1501B10FAB0608B16DEB0460C0432B02E0C00567F2B7F 0156IX & OUTAANA0FD0B06A0C0470B04C6BA185BA184B8806C000AB1517B0200B0000B02017F2D0F 0157A0FE6B0004B0420B200CB0420B2018B12B8BC060B834AB0A81B0221B60007F2D6F 0158A0FFCBC005BC084B0420B2020B1002BD801B8C00B0602B16FCB0460C04327F2ABF 0159IX & OUTAANA1012B02E0C0056B0200C0026B0201B2020BCC01B0280C0036B16FCB02007F30CF 0160A1028B0000B0201B0003B0420B200CB0420B2018B12B8BC120B834AB02017F31FF 0161A103EB0004B0420B200CB0420B2018B12B8BC160B834AB0200B0000B02017F30DF 0162IX & OUTAANA1054B0001B0420B200CB0284B0000B130DB0224B0900BD820C0019B83557F317F 0163A106ABC804B8356B04E0B837CB0420C03E0B0014B1008BD820C0012B83557F2C3F 0164A1080B04E0B837CB0420C03E0B0014BC185B0586BC045B0221B0001B0A817F2D7F 0165IX & OUTAANA1096B7060B8356B111AB0981BD020B8355B0980B0220B8300BD870C00267F2E2F 0166A10ACB0581B8181B16FBB06C5BD805C0026B0200B0000B0201B0002B02027F2EBF 0167A10C2C0026B04E0B837CB0420B2010B0460C0432B0200C0026B0201B2A2A7F304F 0168X & OUTAANA10D8BCC01B0280C0036B16FCB06C5BD805C0026B0460C10B8B02E0C00567F299F 0169A10EEB06A0C0470B04C6BA184BA185B8806C000AB1530BC005B0201C00367F2B4F 0170A1104BC084B0420B202CB04C6B0202B0008BD026C0036B0980B0A30BC0467F2DFF 0171X & OUTAANA111AB0A31B0221C00C0B0420B202CB0586B8106B16F3B0201C00C0B05717F2EDF 0172A1130B0281C01C0B16FCB0200B0700B0201C00C0B0202B0100B0420B20247F32AF 0173A1146B04C2BC005B0201BE000B0420B2020B0221B0100B0580B0582B81027F326F 0174 INC 4A115CB16F8B0460C0432B02E0C0056B06A0C0470BC005B0201C0036BC0847F2D5F 0175A1172B0420B2024B0460C04327FA93F 017650868XKEY 5090ADUMP 50A1AALCHAR50A62CHRSET50A96TEXT 7F284F 0177 INC 450ADERETURN50B1ECOLORT50B76CLEART50B82DISPAT50BCEPRINTT7F115F 017850C20INPUTT50D26ACCEPT50DEASCRLT 50E94VSCROL50F26HSCROL7F175F 017950FCCHCHART51012FORMAT510EAINVERT51162REVERT7F451F 0180 INC 4: 99/4 AS Version 0181TO R3, SRL 3,8 ALIGN TO RIGHT BYTE# SETO 4 R4 = >FFFF, LI 2,DSRBUF R2 POINTS TO BUFFER DSRL2 INC 0 R0=R0+1 >8010C6 A0000B0000B0100B0000B0000B0020B0300B0110B0028B00007F39AF 0001A0012B0003B0407B0809B0D20B2860B7E7FB80FFB0000B0000BAA2E7F3C6F 0002A0026A0036A0056A0076A0096A00C0A01C0A0280A0282B3838B3838B38387F303F 0003N CARD ONA0288B0000B0000B0000B0000B00FEB007CB7C7CB7C7CB7C7CC0292B00007F2B1F 0004A029EB0100B0010B0000B5020B0000B0003B5049B4F00B0500B03EAB00007F32CF 0005A02B4B030FB000BB4453B4B31B2E43B4841B5241B3200C02B6C02D6C02FA7F2A3F 0006OINTER TO R2A02CAB176CB0050A02CEA02D6BC81BB83E8BC83EB83ECBC320B200EBC8097F213F 0007A02E4B200EB02E0B83E0B0694BC920C02CAB8302B05E0B8373B0460B00607F2A5F 0008A02FABC120B166CB0694B02E0C02B6BC80CB200EB0380C030EC030EBC30C7F263F 0009 BYTE TO R5A0310B161CB02E0B83E0BC120B0050B0694B0204B0011BDB44B0402B10047F2EDF 0010A0326B0000B0000B0000B0000BDB60B83E9B0402BC160B166CBD81DC035D7F2C4F 0011A033CB05E0C035CB0695B02E0C030EB020CB2000B058EBD83EB836DBC0E07F265F 0012 BYTE TO R5A0352B8356B0223BFFF8B0420C02C4B0300BD820C0315B8C02BD803B8C027F29DF 0013A0368B53CCBD0E0B8800B0953BD743B1603B2320B837CB1601BF3CCB03807F27FF 0014A037EB02E0B83E0B0460B006ABD133B0984BD073B0221B6000B0420B20207F2D8F 0015 BYTE TO R5A0394B0580B8800C000AB1302B0604B16F5B045BB04C0B0201B8000BC0A07F2E0F 0016A03AAC000AB0420B2020B1002BD801B8C00B0602B16FCB045BB0200B00007F2E1F 0017A03C0B0201B0003B0420B200CB0420B2018B12B8BC120B834AB0200B00007F315F 0018 BYTE TO R5A03D6B0201B0001B0420B200CB0420B2018B12B8BC060B834AB0601B38607F2F7F 0019A03ECC0008BC142B0201B0002B0420B200CB0420B2018B12B8BC0A0B834A7F2D2F 0020A0402B0602BA142B045BB04C3BC160C000AB6160C0008BC003BA020C00087F2E3F 0021 BYTE TO R5A0418B0201C00C0BC0A0C0008B0420B202CB6020C0008B0420B2024BA0E07F2FFF 0022A042EC0008B8143B16EFB045BBC020C000AB6020C0008B0201B8000B04207F2E8F 0023A0444B2020B0580B8800C000AB16FAB045BB0200B0000B0420B200CBD8207F2EFF 0024 OF CALLING PMGA045AC0012B8355B0420C02C4B0014BD120B8356BD020B8355B0980B02207F2EDF 0025A0470B8300B0201C00C0BDC44B0984BDC70B0604B16FDB045BBC180B04C57F285F 0026A0486B3D60C0008BC1E0C0008B61C6B81CAB1101BC287BC1C0BC147BA14A7F267F 0027 OF CALLING PMGA049CB0605B0208B0001B04C9BD820C001CC0020B0201C0097BC08AB02037F2E1F 0028A04B2B8000BDC43B0602B16FDB0201C0097BC08AB0420B2024B04E0B837C7F29FF 0029A04C8B0420C02C4B0034B04C6B0586B0286B0080B110CB04C6B9820C00207F2DCF 0030 AI 1,-3A04DEC001CB1304BD820C001CC0020B1003BD828C0096C0020BD060C00207F2D8F 0031A04F4B0420B2020B04E0B837CB0300B0002B0300B0000B0420B201CB98207F315F 0032A050AC0019B837CB16E0BC820C000CC0010B101EBD820B8375C0022B04C67F2AFF 0033 3,GPL1 1,-3A0520B04E0B837CB0420B201CB9820C0019B837CB130FB9820B8375C001F7F2B2F 0034A0536B13CCB0586B8806C0010B16F0BC820C000EC0010BD820C0022B83757F2C3F 0035A054CB1003BC820C000CC0010B9820C0018B8375B1602B0460C0752B98207F2F6F 0036 3,GPL1 1,-3A0562C0016B8375B1602B0460C0606B9820C0017B8375B1602B0460C06307F316F 0037A0578B9820C0013B8375B1602B0460C0660B9820C0014B8375B1602B04607F30CF 0038A058EC06BEB9820C0015B8375B1602B0460C0724B9820B8375C001DB15067F2C4F 0039A05A4B9820B8375C0019B1102B0460C05BCB04E0B837CB0420C02C4B00367F2C3F 0040A05BAB108AB9820C0021C0012B1302B0460C06C6BD060B8375B0221B60007F2E9F 0041A05D0B0420B2020BDA01C0096B0608B8248B1601B0589B0580B05C8B82887F2D0F 0042A05E6B1501B1001BC20AB8140B1501B1001B0600BD820C001CC0020BD0607F2F7F 0043A05FCC0020B0420B2020B0460C0518B0420C077AB0288B0001B1508B04E07F2FEF 0044A0612B837CB0420C02C4B0036B04C6B0460C04D0BD068C0096B0420B20207F2DFF 0045A0628B0600B0608B0460C05F4B0420C077AB8140B1304B0608B8248B16097F2F5F 0046A063EB0588B04E0B837CB0420C02C4B0036B04C6B0460C04D0BD068C00977F2A5F 0047A0654B0420B2020B05C8B0580B0460C05F4B0420C077AB0289B0000B13287F2FBF 0048A066AB8248B1526B0202C0097B0203C00C0B0204B0001B1002BDCF2B05847F2E9F 0049A0680B8204B16FCB0582B0584B8244B1502BDCF2B10FBB0202B8000BD4C27F28BF 0050A0696B04C4B0202C0097B0203C00C0BDCB3B0584B8244B16FCBC100BC0077F297F 0051N ADDRESSA06ACB0201C0097BC089B0420B2024BC004B0609B0460C05F4B0420C07967F2D5F 0052A06C2B0460C04D0B04C4B0202C0097B0203C00C0B1001BDCF2B0584B82047F2CBF 0053A06D8B1301B10FBBD060B8375B0221B6000BDCC1BDCF2B0584B8244B15017F282F 0054 BLWP @DSRLNKA06EEB10FBB8288B1305B0588B0580B8289B1301B0589B04C4B0202C00977F2AEF 0055A0704B0203C00C0BDCB3B0584B8244B16FCBC100BC007B0201C0097BC0897F299F 0056A071AB0420B2024BC004B0460C05F4B0420C077AB04E0C0096B0201C00977F2E7F 0057 CLR 1KA0730BC08AB0203B8000BDC43B0602B16FDB04C9BC007B0201C0097BC08A7F28EF 0058A0746B0420B2024B0208B0001B0460C04D0B0420C077ABD068C0096B04207F307F 0059A075CB2020B0289B0000B1306B9829C0096C001EB1602B0609B10FAB06C97F2CDF 0060) NEW2 INC 1A0772BD809C0096B06C9B045BC0076C077EB9820C0021C0012B1307B04E07F2BFF 0061A0788C0021B0200B03F0BC060C029AB100BB0380C0076C079AB0201BFF007F2C9F 0062A079EBD801C0021B0200B03F0B0201C028AB0202B0008B0420B2024B03807F30DF 0063 @LINLEN,@LENGA07B4B02E0C0056B04C0B0201B0001B0420B200CB0420B2018B12B8BC1207F2F8F 0064A07CAB834AB1309B0284B0001B113FB0284B0005B153CB0A84BD804C00237F2BEF 0065A07E0BD820C0023B8374B04E0B837CB0420C02C4B0034B04E0B837CB03007F2B6F 0066 @LINLEN,@LENGA07F6B0002B0300B0000B0420B201CB9820C0019B837CB16F6BD120B83017F2E5F 0067A080CB2120C0002B130EBD060B8375B0981BC801B834AB0420B2018B00207F2E4F 0068A0822B04C0B0201B0002B0420B2008B100EBC820B8374C0096B0204B01007F31AF 0069 @LINLEN,@LENGA0838BD804C0096B04C0B0201B0002B0202C0096B0420B2010B0201B05007F32EF 0070A084EBD801B8374B0460C037EB02E0C0056B0200B0020BC800B830CB04E07F2BBF 0071A0864B837CB0420B2018B0002BC820B831CC0000B0200B002ABC800B830C7F2DDF 0072A087AB04E0B837CB0420B2018B0002BC820B831CC02A2BD820B9802C02807F2B3F 0073A0890BD820B9802C0281B0620C0280BC020C0000B0201C029CB0202B00127F312F 0074A08A6B0420B2024BC1A0C0000B0226B000DBC806B8356B0420C030AB00087F2E7F 0075A08BCB0201B0300BC020C0000B0220B0004B0420B2020B04E0C0006BC0207F322F 0076A08D2C0006B0201C00C0BC0A0C0008B0420B202CB04C1B7860C001BC00C07F2D7F 0077A08E8B0581B8801C0008B16F9B04C1B9820C00C0C0019B1105B9820C00C07F2C7F 0078 >0008*A08FEC001DB1501B1003BD860C0019C00C0B0581B8801C0008B16F0BC0207F2C3F 0079A0914C02A2B0201C00C0BC0A0C0008B0420B2024BC806B8356B0420C030A7F2EAF 0080A092AB0008BA820C0008C0006BC020C0006B8800C000AB11CCB0201B01007F2F9F 0081 >0008*A0940BC020C0000B0220B0004B0420B2020BC806B8356B0420C030AB00087F323F 0082A0956BD820C0280B9C02BD820C0281B9C02B0460C037EB02E0C0056B02007F2C0F 0083A096CB0020BC800B830CB04E0B837CB0420B2018B0002BC020B831CB02017F2CDF 0084 DATA >004AA0982C02AEB0202B0015B0420B2024B04E0B837CB0220B0009BC800B83567F2E2F 0085A0998B04E0B837CB0420C030AB0008B0201C0282BC801C029AB0460C037E7F2C4F 0086A09AEB02E0C0056B0200B0400BC800B834AB04E0B837CB0420C02C4B00187F2B8F 0087 DATA >004AA09C4B0420C02C4B004AB0200B03F0B0201C0292BC801C029AB0202B00087F2ECF 0088A09DAB0420B2024B0460C037EB02E0C0056B0200B0300B0201C01C0B02027F308F 0089A09F0B00C0B0420B202CB0200B01F0B0420B2030B06C0BD800B83D4B02007F2E5F 0090 DATA >004AA0A06B0717B0420B2030B0201B0028BC801C0008B06C1BD801C02A5B02017F2FCF 0091A0A1CB03C0BC801C000AB06A0C03A2B0460C037EB02E0C0056B06A0C03A27F2A0F 0092A0A32B0200B01E0B0420B2030B06C0BD800B83D4B0200B0300B0201C01C07F304F 0093REGISTER04AA0A48B0202B00C0B0420B2024B0201B0020BC801C0008B06C1BD801C02A57F2F6F 0094A0A5EB0201B0300BC801C000AB0460C037EB02E0C0056B0200B0000B02017F301F 0095A0A74B0001B0420B200CB0420B2018B12B8BC0E0B834AB0603B0283B00007F2EEF 0096REGISTER04AA0A8AB1119B0283B000FB1516B0A43B0201B0002B0420B200CB0420B20187F303F 0097A0AA0B12B8BC020B834AB0600B0280B0000B1108B0280B000FB1505BA0037F2E5F 0098A0AB6B0220B0700B0420B2030B0460C037EB02E0C0056B06A0C03A2B04607F2EEF 0099REGISTER04AA0ACCC037EB02E0C0056B06A0C03D2B8805C000AB151DBD1A0B8302B21A07F27EF 0100A0AE2C0002B1305B0201B0003B06A0C0450B100EB0201B0003B0202C00C07F323F 0101A0AF8B0204BFF00BD804C00C0B0420B2014B9820C00C0C0012B1305BC0057F2C4F 0102REGISTER04AA0B0EB0203C00C0B06A0C0386B0460C037EB02E0C0056B06A0C0408B06A07F2C1F 0103A0B24C0436BD1A0B8300B21A0C0002B1305B0201B0001B06A0C0450B100F7F2FFF 0104A0B3AB0200B0000B0201B0001BD820C0009C00C0B0202C00C0B0420B20147F325F 0105EGISTER04AA0B50B9820C00C0C0012B1308BC020C000AB6020C0008B0203C00C0B06A07F2FCF 0106A0B66C0386B0460C037EB02E0C0056B06A0C0408B0200B0000B0201B00017F30BF 0107A0B7CB0202C0096BD820C0009C0096B0420B2014BD0A0C0096B0982BC8027F2C8F 0108EGISTER04AA0B92C0006B06A0C0436BC0A0C0006B0282B0000B1308BC020C000AB60207F2F7F 0109A0BA8C0008B0203C0096B06A0C0386BC020C000AB6020C0008BA020C00067F2EEF 0110A0BBEBC2A0C0008B62A0C0006B06A0C0482BD1A0B8301B21A0C0002B133A7F2A3F 0111-**TER04AA0BD4B0289B0000B132AB04C1B7860C001BC0097B0581B8241B1501B10F97F2C8F 0112A0BEAB0200B03C0B0201B0000B0420B2020B0580B0280B03D0B16FAB02007F2F7F 0113A0C00B03C0B0201C0096BD0B1B0982B0420B2024BC800B8356B04E0B837C7F2BFF 01143,>000F04AA0C16B0420B2018B11AEB0200B0000B0201B0002B04E0B837CB0420B20087F30AF 0115A0C2CB1020B0200B0000BC800B834AB0200B0000B0201B0002B04E0B837C7F305F 0116A0C42B0420B2008B1013B0201B0001B7860C001BC0096B0581B8241B15017F323F 0117 *TEST RANGEA0C58B10F9B0200B0000B0201B0002B0202C0096B04E0B837CB0420B20107F310F 0118A0C6EB0460C037EB02E0C0056B06A0C03BCB04C6BA184BA185B8806C000A7F275F 0119A0C84B1556BC005BC284B06A0C0482BD1A0B8303B21A0C0002B133AB02897F2ADF 0120 *TEST RANGEA0C9AB0000B132AB04C1B7860C001BC0097B0581B8241B1501B10F9B02007F2D6F 0121A0CB0B03C0B0201B0000B0420B2020B0580B0280B03D0B16FAB0200B03C07F2F6F 0122A0CC6B0201C0096BD0B1B0982B0420B2024BC800B8356B04E0B837CB04207F2B6F 0123 *TEST RANGEA0CDCB2018B11AEB0200B0000B0201B0004B04E0B837CB0420B2008B10207F2EBF 0124A0CF2B0200B0000BC800B834AB0200B0000B0201B0004B04E0B837CB04207F2FDF 0125A0D08B2008B1013B0201B0001B7860C001BC0096B0581B8241B1501B10F97F306F 0126A0D1EB0200B0000B0201B0004B0202C0096B04E0B837CB0420B2010B04607F31AF 0127A0D34C037EB02E0C0056B0200B0000B0201B0001B0420B200CB0420B20187F322F 0128A0D4AB12B8BC0A0B834ABC802C0006B0282B0001B1141B0602B38A0C00087F2C3F 0129 C 5,@EOSA0D60BC1C3B0581B0420B200CB0420B2018B12B8BC120B834AB0284B00187F2CAF 0130A0D76B1532B8120C0006B1102B0460C037EB0604B3920C0008B0581B04207F311F 0131A0D8CB200CB0420B2018B12B8BC220B834AB1502B0460C037EBC0C7BC0037F294F 0132S LI 1,3OSA0DA2BA020C0008B0201C00C0BC0A0C0008B0420B202CB6020C0008B04207F2F7F 0133A0DB8B2024BA0E0C0008B8143B16EFBC005B04C2B0201B8000B0420B20207F2C5F 0134A0DCEB0580B0582B8802C0008B16F9B0608B16E1B0460C037EB02E0C00567F2A1F 0135 *PRINT IT*SA0DE4B0200B0000B0201B0001B0420B200CB0420B2018B12B8BC120B834A7F300F 0136A0DFAB0284B0001B1137B0604B0581B0420B200CB0420B2018B12B8BC1607F2E1F 0137A0E10B834AB0605BC185B6184B1502B0460C037EB0586B0581B0420B200C7F2CFF 0138P SCREENT*SA0E26B0420B2018B12B8BC220B834AB1502B0460C037EBC004B0201C00967F2D4F 0139A0E3CBC086B0420B202CB0580B0602B0420B2024B0600BA020C0008B88007F2F4F 0140A0E52C000AB11F1BC004B0201B8000B0420B2020BA020C0008B8800C000A7F301F 0141P SCREENT*SA0E68B11F9B0608B16E4B0460C037EB02E0C0056B0200B0000B0201B00017F2EDF 0142A0E7EB0420B200CB0420B2018B12B8BC120B834AB0284B0001B1141B06047F2E2F 0143A0E94B0581B0420B200CB0420B2018B12B8BC160B834AB0605BC185B61847F2C0F 0144P SCREENT*SA0EAAB1502B0460C037EB0586BA160C000AB6160C0008B0581B0420B200C7F2CDF 0145A0EC0B0420B2018B12B8BC220B834AB1502B0460C037EBC004BA020C00087F2C0F 0146A0ED6B0201C0096BC086B0420B202CB6020C0008B0420B2024BA020C00087F2F7F 0147P SCREENT*SA0EECBA020C0008B8800C000AB11F0BC004BA020C000AB6020C0008B02017F2CFF 0148A0F02B8000B0420B2020B0580B8140B1501B10FAB0608B16DEB0460C037E7F2D7F 0149A0F18B02E0C0056B06A0C03BCB04C6BA185BA184B8806C000AB1517B02007F29EF 0150FSCREENT*SA0F2EB0000B0201B0004B0420B200CB0420B2018B12B8BC060B834AB0A817F2E2F 0151A0F44B0221B6000BC005BC084B0420B2020B1002BD801B8C00B0602B16FC7F2D5F 0152A0F5AB0460C037EB02E0C0056B0200C0026B0201B2020BCC01B0280C00367F2ECF 0153FSCREENT*SA0F70B16FCB0200B0000B0201B0003B0420B200CB0420B2018B12B8BC1207F2FEF 0154A0F86B834AB0201B0004B0420B200CB0420B2018B12B8BC160B834AB02007F2E2F 0155A0F9CB0000B0201B0001B0420B200CB0284B0000B130DB0224B0900BD8207F30CF 0156FSCREENT*SA0FB2C0019B8355BC804B8356B04E0B837CB0420C02C4B0014B1008BD8207F2A9F 0157A0FC8C0012B8355B04E0B837CB0420C02C4B0014BC185B0586BC045B02217F2B0F 0158A0FDEB0001B0A81B7060B8356B111AB0981BD020B8355B0980B0220B83007F2C4F 0159V @LINLEN,10A0FF4BD870C0026B0581B8181B16FBB06C5BD805C0026B0200B0000B02017F2BAF 0160A100AB0002B0202C0026B04E0B837CB0420B2010B0460C037EB0200C00267F315F 0161A1020B0201B2A2ABCC01B0280C0036B16FCB06C5BD805C0026B0460C10047F2C3F 0162ER SETLEN,10A1036B02E0C0056B06A0C03BCB04C6BA184BA185B8806C000AB1530BC0057F2A2F 0163A104CB0201C0036BC084B0420B202CB04C6B0202B0008BD026C0036B09807F2F1F 0164A1062B0A30BC046B0A31B0221C00C0B0420B202CB0586B8106B16F3B02017F2E8F 0165C 1,9N,10A1078C00C0B0571B0281C01C0B16FCB0200B0700B0201C00C0B0202B01007F30CF 0166A108EB0420B2024B04C2BC005B0201BE000B0420B2020B0221B0100B05807F320F 0167A10A4B0582B8102B16F8B0460C037EB02E0C0056B06A0C03BCBC005B02017F2B5F 0168C 1,9N,10A10BAC0036BC084B0420B2024B0460C037E7F837F 0169507B4XKEY 50856DUMP 50966ALCHAR509AECHRSET509E2TEXT 7F27CF 017050A2ARETURN50A6ACOLORT50AC2CLEART50ACEDISPAT50B1APRINTT7F11DF 0171 0,09N,1050B6CINPUTT50C72ACCEPT50D36SCRLT 50DE0VSCROL50E72HSCROL7F175F 017250F18HCHART50F5EFORMAT51036INVERT510AEREVERT7F442F 0173: 99/4 AS Version 0174 0,09N,10* X40:CURSOR(*--------------------------------------*(* 'CURSOR' ROUTINE TO ACCEPT *(* KEYBOARD INPUT STRING *(* *(* ROUTINE USES FOLLOWING *(* REGISTERS: *(* *(* GIVENS: *(* R00CURRENT SCREEN LOACTION *(* R04>TEMPORARY STORAGE *(* R05>MAXLOCATION *(* R06>COUNT-DOWN *(* R07>SCREENSTART *(* R08>POSITION *(* R09>LENGTH *(*--------------------------------------**(CURSOR MOV 0,6 *MOVE START LOC CLR 5% DIV @LINLEN,5 *R6 = COLUMNREENSTART *% MOV @LINLEN,7 *LINE LENGTH2 S 6,7 *SUBTRACT COL GET MAX LEN4 C 10,7 *COMPARE WITH GIVEN MAX LEN, JLT CURSO2 *IF LESS THEN GO ON. MOV 7,10 *OTHERWISE SUBSTITUTE *+CURSO2 MOV 0,7 *SCREENSTART TO R7 MOV 7,5 A 10,5% DEC 5 *SET MAX LOC- LI 8,1 *INITIALIZE POSITION% CLR 9 *LENGTH TO 02 MOVB @H7E,@CBYTE *ESTABLISH CURSOR PATTERN* LI 1,CARBUF+1 MOV 10,2 LI 3,>8000*CURA MOVB 3,*1+ *BLANKS TO BUFFER DEC 2 JNE CURA* LI 1,CARBUF+1 MOV 10,20 BLWP @VMBW *WRITE BUFFER TO SCREEN* CLR @STATUSRN* BLWP @GPLLNK DATA >0034 *BEEP' CLR 6 *CLEAR COUNTER** MAIN LOOP* SCAN INC 6. CI 6,>80 *COUNT-DOWN COMPLETE?. JLT S2 *IF NOT JUMP TO KSCANREEN* CLR @STATUSRN*/ CLR 6 *IF SO RESTORE COUNTER0 CB @CBYTE,@H7E *CHECK CURSOR CHARACTER) JEQ BBYTE *IF ON THEN JUMP- MOVB @H7E,@CBYTE *ELSE TURN CURSOR ON JMP S2*NOT JUMP TO KSCANREEN* CLR @STATUSRN*7BBYTE MOVB @CARBUF(8),@CBYTE *SEG OF BUFFER TO CURSOR*S2 MOVB @CBYTE,1& BLWP @VSBW *WRITE CURSOR. CLR @STATUS *CLEAR STATUS BYTE TO7 LIMI 2 *ALLOW INTERRUPTS SO BEEPS ANDEEN* CLR @STATUSRN*- LIMI 0 *BOOPS CAN BE PLAYED BLWP @KSCAN *KSCAN+ CB @H20,@STATUS *IF NO KEY PRESSED$ JNE SCAN *SCAN AGAIN** END MAIN LOOP*5 MOV @LONG,@RPTIME *ESTABLISH REPEAT DELAY @STATUSRN*1 JMP SPCHK *CHECK WHICH KEY PRESSED** REPEAT TRAP*(RPTR MOVB @KEY,@SAVKEY *SAVE KEY VALUE, CLR 6 *INITIALIZE COUNTER*RPTRA CLR @STATUS BLWP @KSCAN" CB @H20,@STATUS *NEW NEW?AY @STATUSRN*( JEQ NEWKEY *IF SO WRITE IT! CB @KEY,@NOKEY *NO KEY?/ JEQ SCAN *IF SO GET OUT OF TRAP INC 6% C 6,@RPTIME *DELAY OVER?" JNE RPTRA *TRAPPED!*@H20,@STATUS *NEW NEW?AY @STATUSRN*F MOV @SHORT,@RPTIME *THIS IS REPEATED KEY SO SET SHORT DELAY- MOVB @SAVKEY,@KEY *FETCH THE KEY VALUE) JMP SPCHK *CHECK WHICH KEY*8NEWKEY MOV @LONG,@RPTIME *NEW KEY SO SET LONG DELAY** CHECK FOR SPECIAL KEY*SPCHK CB @HD,@KEY JNE SPCHKA B @ENTERSPCHKA CB @H8,@KEY JNE SPCHKB B @LEFTSPCHKB CB @H9,@KEY JNE SPCHKC B @RITESPCHKC CB @H3,@KEY JNE SPCHKD B @DELETER SPECIAL KEY*SPCHKD CB @H4,@KEY JNE SPCHKE B @INSERTSPCHKE CB @H7,@KEY JNE SPCHKF B @ERASE* * TEST FOR ASCII PRINTABLES*SPCHKF CB @KEY,@H7F JGT SPCHKZ CB @KEY,@H20 JLT SPCHKZPECIAL KEY* B @PUTUP** NOT VALID KEY*SPCHKZ CLR @STATUS* BLWP @GPLLNK *BOOP FOR BAD KEY DATA >0036, JMP SCAN *JUMP TO SCAN AGAIN*,* PLACE CHARACTER IN BUFFER & ON SCREEN*PUTUP CB @INSERF,@ZEROKEY* JEQ PUTUPZC B @INSRTX *IF INSERT FLAG ON JUMP TO INSERT SEQUENCE*PUTUPZ MOVB @KEY,18 AI 1,>6000 *ADJUST KEYVAL FOR BASIC OFFSET: BLWP @VSBW *WRITE TO CURRENT SCREEN LOCATION CB @INSERF,@ZEROKEY*, MOVB 1,@CARBUF(8) *INSERT INTO INPUT$*<* POSITION TESTS FOR ADJUSTING LENGTH & SCREEN LOCATION*& DEC 8 *DEC POSITION2 C 8,9 *COMP ADJ POS TO LENGTH+11 JNE TLOCA *IF NOT EQUAL THEN TLOCA) INC 9 *INCREASE LENGTH +TLOCA INC 0 *INCREASE LOCATION5 INCT 8 *RESTORE & INCREASE POSITION*; C 8,10 *COMPARE NEW POSITION TO MAXLENGTH JNE TLOCA *IF NOT EQUAL THEN TLOCA5 JGT TLOCB *IF LESS OR EQUAL THEN TLOCC JMP TLOCC?TLOCB MOV 10,8 *OTHERWISE RESET POSITION TO MAXLENGTH*9TLOCC C 0,5 *COMPARE LOCATION TO MAXLOCATION3 JGT TLOCD *IF GREATER THAN FIX & OUTA+ JMP CURPUT *ELSE STRAIGHT OUT* TLOCD DEC 0**CURPUT MOVB @H7E,@CBYTE *SET CURSOR VALUE MOVB @CBYTE,1E BLWP @VSBW *WRITE CURSOR TO INCREMENTED SCREEN LOCATION$ B @RPTR *SCAN AGAIN*AN FIX & OUTA(****************************************(* SPECIAL KEY ROUTINES *(*****************************************+LEFT BLWP @CKINSR *CHECK INSERT FLAG*5LEFT2 CI 8,>0001 *CHECK FOR LEFTMOST POSITIONN AGAIN*AN FIX & OUTA& JGT LEFT3 *IF NOT GO ON. CLR @STATUS *OTHERWISE BOOP & OUT BLWP @GPLLNK% DATA >0036 *BOOP IF NOT CLR 6 B @SCAN*'LEFT3 MOVB @CARBUF(8),1 *GET CHARACTERSITIONN AGAIN*AN FIX & OUTA2 BLWP @VSBW *USE IT TO REPLACE CURSOR+ DEC 0 *DECREASE LOCATION+ DEC 8 *DECREASE POSITION B @CURPUT*+RITE BLWP @CKINSR *CHECK INSERT FLAG* CHARACTERSITIONN AGAIN*AN FIX & OUTA9 C 0,5 *COMPARE LOCATION TO MAXLOCATION2 JEQ RITE1 *IF EQUAL THEN BOOP & OUT3 DEC 8 *OTHERWISE ADJUST POSITION/ C 8,9 *& COMPARE WITH LENGTHHARACTERSITIONN AGAIN*AN FIX & OUTA1 JNE RITE2 *IF NOT EQUAL THEN GO ON3 INC 8 *OTHERWISE MOVE ILLEGAL SO(* *ADJUST LENGTH&RITE1 CLR @STATUS BLWP @GPLLNK DATA >0036 *BOOP CLR 6GAIN*AN FIX & OUTA B @SCAN *OUT*@RITE2 MOVB @CARBUF+1(8),1 *FETCH CHARACTER FROM INPUT STRING) BLWP @VSBW *WRITE TO SCREEN7 INCT 8 *ADJUST AND INCREMENT POSITION, INC 0 *INCREMENT LOCATIONX & OUTA B @CURPUT** DELETE ROUTINE*DELETE BLWP @CKINSR. CI 9,>0000 *IF LENGTH=0 THEN OUT JEQ DELOUT9 C 8,9 *IF POSITION BEYOND END THEN OUT JGT DELOUT* *INCREMENT LOCATIONX & OUTAI LI 2,CARBUF+1 *PREPARE TO DELETE BY SHIFTING INPUT STRING FROM< LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK AGAIN, LI 4,1 *INITIALIZE COUNTER JMP DELEL(DELEB MOVB *2+,*3+ *SHIFT ONE BYTE INC 45DELEL C 4,8 *COMPARE COUNTER TO POSITION JNE DELEB*0 INC 2 *SKIP DELETED CHARACTER+DELEC INC 4 *INCREMENT COUNTER3 C 4,9 *COMPARE COUNTER TO LENGTH *SHIFT ONE BYTE INC 4+ JGT DELEK *IF FINISHED GO ON0 MOVB *2+,*3+ *MOVE ANOTHER CHARACTER JMP DELEC*DELEK LI 2,>8000( MOVB 2,*3 *PAD WITH BLANK*' CLR 4 *RESET COUNTERTH *SHIFT ONE BYTE INC 4+ LI 2,CARBUF+1 *GET READY TO MOVE% LI 3,LGBUFF *STRING BACK8DELED MOVB *3+,*2+ *RESTORE INPUT STRING TO CARBUF INC 4# C 4,9 *FINISHED? *RESET COUNTERTH *SHIFT ONE BYTE INC 4P JNE DELED *IF NOT REPEAT * LOC PLACED in R5 *' MOV 0,4 *SAVE LOCATION& MOV 7,0 *SCREEN START LI 1,CARBUF+1 MOV 9,2( BLWP @VMBW *REWRITE SCREEN INC 4* MOV 4,0 *RESTORE LOCATION*) DEC 9 *DECREASE LENGTH!DELOUT B @CURPUT *GET OUT** TURN ON INSERT FLAG*INSERT BLWP @IFLGON B @SCAN*$* ROUTINE TO INSERT A CHARACTER*E SCREEN INC 4'INSRTX CLR 4 *CLEAR COUNTERC LI 2,CARBUF+1 *PREPARE TO INSERT BY SHIFTING STRING FROM6 LI 3,LGBUFF *ONE BUFFER TO ANOTHER & BACK JMP INSRTYINSRTA MOVB *2+,*3++INSRTY INC 4 *INCREMENT COUNTERINC 4( C 4,8 *IF AT POSITION JEQ INSRTB *SKIP9 JMP INSRTA *ELSE MOVE 1ST PORTION OF STRING*2INSRTB MOVB @KEY,1 *FETCH INSERTED CHARACTER& AI 1,>6000 *BASIC OFFSET *INCREMENT COUNTERINC 46 MOVB 1,*3+ *INSERTED CHARACTER TO BUFFER*4INSRTC MOVB *2+,*3+ *FINISH MOVING INPUT STRING INC 4 C 4,9A JGT INSRTG *IF NOT FINISHED SHIFT ANOTHER CHARACTER JMP INSRTC**INCREMENT COUNTERINC 47INSRTG C 8,10 *COMPARE POSITION TO MAXLENGTH7 JEQ INSOUT *IF EQUAL NO OTHER ADJUSTMENTS1INSRTD INC 8 *ELSE INCREMENT POSITION- INC 0 *AND SCREEN LOCATION* JMP INSRTC**INCREMENT COUNTERINC 45INSRTE C 9,10 *COMPARE LENGTH TO MAXLENGTH' JEQ INSOUT *IF EQUAL SKIP/ INC 9 *ELSE INCREMENT LENGTH*,INSOUT CLR 4 *INITIALIZE COUNTER LI 2,CARBUF+1 LI 3,LGBUFFMENT COUNTERINC 4.INSRTF MOVB *3+,*2+ *MOVE NEW STRING BACK INC 4 C 4,9 JNE INSRTF*' MOV 0,4 *SAVE LOCATION MOV 7,0 LI 1,CARBUF+1 MOV 9,24 BLWP @VMBW *WRITE NEW STRING TO SCREENINC 4* MOV 4,0 *RESTORE LOCATION* B @CURPUT *OUT*.ERASE BLWP @CKINSR *TURN OFF INSERT FLAG CLR @CARBUF LI 1,CARBUF+1 MOV 10,2 LI 3,>8000*ERASE2 MOVB 3,*1+ *BLANKS TO INPUT$NC 4 DEC 2 JNE ERASE2 CLR 9 MOV 7,0 LI 1,CARBUF+1 MOV 10,2? BLWP @VMBW *WRIT NEW BLANK INPUT STRING TO SCREEN LI 8,>0001% B @SCAN *START FRESH*ENTER BLWP @CKINSRNC 4 MOVB @CARBUF(8),1/ BLWP @VSBW *BLANK CURSOR LOCATION*/ CI 9,0 *CHECK FOR NULL STRING JEQ ENTOUT6ENTERA CB @CARBUF(9),@H80 *LOOK FOR TRAILING BLANK JNE ENTOUTRT FRESH*ENTER BLWP @CKINSRNC 49 DEC 9 *ADJUST LENGTH IF TRAILING BLANK$ JMP ENTERA *LOOK AGAIN* ENTOUT SWPB 9/ MOVB 9,@CARBUF *LENGTH BYTE TO BUFFER< SWPB 9 *RESTORE LENGTH BYTE IN CASE NEEDEDRESH*ENTER BLWP @CKINSRNC 4& RT *EXIT ROUTINE*(*--------------------------------------*(* CKINSR SUBROUTINE *(* CHECKS INSERT FLAG *(*--------------------------------------**CKINSR DATA ALTWS,CKSTRT BLWP @CKINSRNC 41CKSTRT CB @INSERF,@ZERO *IF FLAG RESET, OUT JEQ CKIOUT+ CLR @INSERF *RESET INSERT FLAG0 LI 0,>03F0 *CURSOR PATTERN ADDRESS; MOV @CURPAT,1 *FETCH APPROPRIATE PATTERN ADDRESSWS,CKSTRT BLWP @CKINSRNC 4: JMP NEWCUR *JUMP TO WRITE NEW CURSOR PATTERN CKIOUT RTWP*(*--------------------------------------*(* IFLGON SUBROUTINE *(* SETS INSERT FLAG *(*--------------------------------------**@CKINSRNC 4IFLGON DATA ALTWS,FLGONAFLGONA LI 1,>FF00" MOVB 1,@INSERF *SET FLAG( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,LINCUR *INSERT CURSOR PATTERN ADDRESS*NEWCUR LI 2,8 *8 BYTES TO WRITE---------------**@CKINSRNC 4, BLWP @VMBW *NEW CURSOR PATTERN RTWP @INSERF *SET FLAG( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,LINCUR *INSERT CURSOR PATTERN ADDRESS*NEWCUR LI 2,8 *8 BYTES TO WRITE---------------**@CKINSRNC 4"* X40:DSRLNK = FROM 1986 CODE(*--------------------------------------*(* DSR VARS REGS & BUFFERS *(*--------------------------------------*DSRDT5 DATA >0000DSRDT4 DATA >0000DSRDT1 DATA >0000DSRDT2 DATA >0000DSRDT3 DATA >0000 DSRBUF BSS >8REG2 BSS >20*+--------------------------+*|ADAPTED FROM OR RELATED TO|*| TI-KEYS |*| BY |*| WES JOHNSTON |*| |*| VERSION 3.0 | >0000 *| COPYRIGHT 1986 |*+--------------------------+************************** SUBROUTINE DSRLNK ** BLWP @DSRLNK. ** ENTER WITH POINTER TO ** NAME LENGTH IN >8356 ************************** DSRLNK DATA REG2,DSRL1 0000 6DSRL1 MOV *14+,5 GET DATA TO R5 & INC PMG CNTR( SZCB @H20,15 RESET EQUAL BIT/ MOV @>8356,0 NAME LENGTH BYTE TO R0# MOV 0,9 THEN TO R96 AI 9,>FFF8 R9 POINTS TO BEGINNING OF PABDSRL1 0000 0 BLWP @VSBR GET LENGTH BYTE INTO R1# MOVB 1,3 MOVE TO R3, SRL 3,8 ALIGN TO RIGHT BYTE# SETO 4 R4 = >FFFF, LI 2,DSRBUF R2 POINTS TO BUFFER DSRL2 INC 0 R0=R0+1000 INC 4 R4=R4+1" C 4,3 DONE YET?# JEQ DSRL3 YES, GO ON* BLWP @VSBR NO, GET NEXT BYTE- MOVB 1,*2+ AND PUT IT IN BUFFER) CB 1,@PERIOD WAS IT A PERIOD? R0=R0+1000 * JNE DSRL2 NO, GET NEXT BYTEDSRL3 MOV 4,4 R4=0?, JEQ DSRL10 YES, RETURN W/ERROR+ CI 4,>0007 R4 GREATER THAN 7?, JGT DSRL10 YES, RETURN W/ERROR CLR @>83D0 >83D0=0+1000 - MOV 4,@>8354 NAME LENGTH TO >8354 ) MOV 4,@DSRDT1 >PER DISASSEMBLY INC 4 R4=R4+18 A 4,@>8356 >8356 POINTS TO DATA AFTER NAME , MOV @8356,@DSRDT2 >>>PER DISASSEMBLY >83D0=0+1000 % LWPI >83E0 USE GPL REGS CLR 1 R1=06 LI 12,>0F00 R12 = BEGINNING OF DSR BLOCKS$DSRL4 MOV 12,12 CHECK FOR 0# JEQ DSRL04 YES, GO ON& SBZ >00 TURN CARD OFF3D0=0+1000 0DSRL04 AI 12,>0100 POINT TO NEXT DSR BLOCK CLR @>83D0 >83D0=0 CI 12,>2000 DONE?3 JEQ DSRL9 YES, INCORRECT DEVICE NAME- MOV 12,@>83D0 STORE BLOCK AT >83D0% SBO >00 TURN CARD ON: LI 2,>4000 R2 POINTS TO BEGINNING OF DSR ROM- CB *2,@VALID CHECK FOR VALID CARD5 JNE DSRL4 NOT ONE HERE, TRY NEXT BLOCK 5* AI R2,8 R2 POINTS TO DSR ENTRY FIELD SBO >00 TURN CARD ON3 A @REG2+10,2 >>>ALTERED PER DISASSEMBLY  9 JMP DSRL6 SKIP OVER THE FIRST TIME THROUGH0DSRL5 MOV @>83D2,2 NEXT DEVICE FIELD TO R2% SBO >00 TURN CARD ON2DSRL6 MOV *2,2 ENTRY FIELD POINTER TO R2; JEQ DSRL4 TRY NEXT BLOCK IF THIS IS LAST ONE3 MOV 2,@>83D2 SAVE POINTER TO NEXT ENTRY; INCT 2 POINT TO ENTRY ADR FOR THIS DEVICE# MOV *2+,9 MOVE TO R9* MOVB @>8355,5 LENGTH BYTE TO R5# JEQ DSRL8 GO IF ZERO) CB 5,*2+ LENGTH THE SAME?, JNE DSRL5 NO, TRY NEXT DEVICE7 SRL 5,8 YES, ALIGN COUNT TO RIGHT BYTE1 LI 6,DSRBUF R6 POINTS TO NAME BUFFER LENGTH BYTE TO R57DSRL7 CB *6+,*2+ CHECK FOR MATCH & INC POINTERS2 JNE DSRL5 NO MATCH, TRY NEXT DEVICE! DEC 5 COUNT -1& JNE DSRL7 TRY NEXT BYTE DSRL8 INC 1 R1=R1+1 O NAME BUFFER LENGTH BYTE TO R5* MOV 1,@DSRDT3 >>PER DISASSEMBLY* MOV 9,@DSRDT4 >>PER DISASSEMBLY* MOV 12,@DSRDT5 >>PER DISASSEMBLY  * BL *9 BRANCH TO DSR ROM5 JMP DSRL5 THIS INSTRUCTION IS SKIPPED! LENGTH BYTE TO R5& SBZ >00 TURN CARD OFF. LWPI REG2 USE PROGRAM REGISTERS6 MOV 9,0 R0 POINTS TO FLAG/STATUS BYTE# BLWP @VSBR GET STATUS) SRL 1,13 ALIGN ERROR BITSS SKIPPED! LENGTH BYTE TO R5$ JNE DSRL11 GO IF ERROR( RTWP RETURN NO ERROR.DSRL9 LWPI REG2 USE PROGRAM REGISTERSDSRL10 CLR 1 R1=01DSRL11 SWPB 1 ERROR CODE TO RIGHT BYTE1 MOVB 1,*13 PUT IN R0 OF CALLING PMG& SOCB @H20,15 SET ERROR BIT' RTWP RETURN W/ERROR  LWPI REG2 USE PROGRAM REGISTERSDSRL10 CLR 1 R1=01DSRL11 SWPB 1 ERROR CODE TO RIGHT BYTE1 MOVB 1,*13 PUT IN R0 OF CALLING PMG* X40:DUMP(*--------------------------------------*(* ASCII SCREEN DUMP *(* CALL LINK("DUMP") *(*--------------------------------------** DEF DUMP*DUMP LWPI FABWS' LI 0,>0020 *BYTES FOR PAB/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUS* BLWP @GPLLNK3* DATA >0038 *ALLOCATES VDP RAM FOR PAB*) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY*% MOV @>831C,@PAB *PAB ADDRESS*. LI 0,>002A *BYTES FOR VDP BUFFER/ MOV 0,@>830C *SET UP FOR ALLOCATION CLR @STATUS* BLWP @GPLLNKMBLY6* DATA >0038 *ALLOCATES VDP RAM FOR BUFFER*) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY**- MOV @>831C,@BUFADR *BUFFER ADDRESS*7 MOVB @GRMRA,@SAVEG *SAVE GROM RETURN ADDRESS MOVB @GRMRA,@SAVEG+1 DEC @SAVEG* MOV @PAB,0 LI 1,PBDATA LI 2,>0012) BLWP @VMBW *PAB DATA TO VDP* MOV @PAB,6 AI 6,>000D' MOV 6,@PNTR *PT TO NAME LG* BLWP @DSRLNK DATA >0008* LI 1,>0300 MOV @PAB,0 AI 0,>0004' BLWP @VSBW *SET FOR WRITE* CLR @LENG MOV @LENG,0LINEW LI 1,LGBUFF MOV @LINLEN,2# BLWP @VMBR *READ LINE CLR 1K,OFST SB @BO,@LGBUFF(1) *ADJUST OFFSET INC 1 C 1,@LINLEN JNE OFST CLR 1NEW3 CB @LGBUFF,@H20 JLT NEW1 CB @LGBUFF,@H7F JGT NEW1 JMP NEW2NEW1 MOVB @H20,@LGBUFF(1) NEW2 INC 1 C 1,@LINLEN JNE NEW3  MOV @BUFADR,0 LI 1,LGBUFF MOV @LINLEN,2* BLWP @VMBW *LINE TO VDP BUFF* MOV 6,@PNTR$ BLWP @DSRLNK *WRITE LINE DATA >0008* A @LINLEN,@LENG MOV @LENG,0$ C 0,@EOS *LAST LINE?0 JLT LINEW *IF NOT DO ANOTHER LINE* LI 1,>0100 MOV @PAB,0 AI 0,>0004+ BLWP @VSBW *SET TO CLOSE FILE* MOV 6,@PNTR A @LINLEN,@LENG$ BLWP @DSRLNK *CLOSE FILE DATA >0008* MOVB @SAVEG,@GRMWA8 MOVB @SAVEG+1,@GRMWA *RESET GROM RETURN ADDRESS B @XBRET >0004+ BLWP @VSBW *SET TO CLOSE FILE* MOV 6,@PNTR A @LINLEN,@LENG* X40:EQUATS(*--------------------------------------**1* XBEQUATES *EXPANDED & STANDARDIZED*NUMASG EQU >2008NUMREF EQU >200CSTRASG EQU >2010STRREF EQU >2014XMLLNK EQU >2018KSCAN EQU >201CVSBW EQU >2020VMBW EQU >2024VSBR EQU >2028VMBR EQU >202CVWTR EQU >2030UTILWS EQU >2038 :ARGID EQU >8300 *NAME CHANGED FROM AGR1ID BY RGM!2ARGCNT EQU >8312 *NAME CHANGED FROM ARGNUMFAC EQU >834AVSBW EQU >2020@PNTR EQU >8356 *POINTER TO NAME LENGTH FOR DSR ROUTINEARG EQU >835CSUBSTK EQU >8373KEYDEV EQU >83742KEY EQU >8375 *NAME CHANGED FROM KEYVAL STATUS EQU >837CGPLWS EQU >83E0 VDPSTA EQU >8802VDPRD EQU >8800/VDPWD EQU >8C00 *FOR MANUAL VDP WRITES/VDPWA EQU >8C02 *FOR MANUAL VDP WRITES GRMRA EQU >9802GRMWA EQU >9C02 *FROM MTXT40 @BTEMP EQU >03C0 *BASIC ROLL-OUT AREA FOR INPUT ROUTINES EQU >8802VDPRD EQU >8800?PATTAD EQU >0400 *CHARACTER PATTERN ADDRESS OF CHR$(32) *FOR XMLLNK CIF EQU >20CFI EQU >12B8CSN EQU >11AEERR EQU >2034 )NEXT EQU >6A *SHORTCUT RETURN  OR INPUT ROUTINES EQU >8802VDPRD EQU >8800* X40:FORMAT(*--------------------------------------*(* NUMBER FORMATTER *(* CALL LINK("FORMAT",N,N$,D,L) *(*--------------------------------------** DEF FORMAT*FORMAT LWPI FABWS LI 0,SMLBUF LI 1,>20207FZ MOV 1,*0+ *LOAD IMAGE STRING WITH SPACES CI 0,SMLBUF+>10 JNE FZ* LI 0,0* LI 1,3 *GET 3D PARAMETER BLWP @NUMREF BLWP @XMLLNK DATA CFI 0,SMLBUF2 MOV @FAC,4 *NUM OF DECIMAL PLACES=R4*+ LI 1,4 *GET 4TH PARAMETER BLWP @NUMREF BLWP @XMLLNK DATA CFI# MOV @FAC,5 *LENGTH=R5* LI 0,0+ LI 1,1 *GET 1ST PARAMETER$ BLWP @NUMREF *NUM AT FAC= CI 4,>0000 *IF DECIMAL=0 THEN JUMP TO NON-FIXED JEQ INTOUT* AI 4,>0900. MOVB @H20,@FAC+11 *SET FOR FIXED FORMAT1 MOV 4,@FAC+12 *RETRIEVE DECIMAL PLACES1ST PARAMETER CLR @STATUS! BLWP @GPLLNK *CONVERT DATA >00149 JMP TOBUFF *GET READY TO MOVE TO OUT BUFFER*INTOUT MOVB @ZERO,@FAC+11 CLR @STATUS, BLWP @GPLLNK *UNFIXED CONVERSION DATA >0014*RAMETERTOBUFF MOV 5,6& INC 6 *LENG+1 IN R6 MOV 5,1! AI 1,>0001 *LENG +1 SLA 1,8 SB @FAC+12,1* JLT BIGOUT *IF TOO LONG JUMP+ SRL 1,8 *OFFSET FOR LENGTH MOVB @FAC+11,0 SRL 0,8 AI 0,>83004MV1 MOVB *0+,@SMLBUF(1) *MOVE STRING TO CARBUF INC 1% C 1,6 *FIXED LENTH JNE MV1 SWPB 5& MOVB 5,@SMLBUF *LENG TO BUFF*FOUT LI 0,0H MOVB @FAC+11,09 LI 1,2 *READY TO ASSIGN TO 2D PARAMETER LI 2,SMLBUF CLR @STATUS- BLWP @STRASG *ASSIGN STRING TO N$ B @XBRET*BIGOUT LI 0,SMLBUF. LI 1,>2A2A *ADDRESS OF ASTERISKS MOVB @FAC+11,0'BGZ MOV 1,*0+ *TO OUT BUFFER CI 0,SMLBUF+>10 JNE BGZ SWPB 5 MOVB 5,@SMLBUF3 B @FOUT *EXIT TO STRING ASSIGNMENT T LI 0,SMLBUF. LI 1,>2A2A *ADDRESS OF ASTERISKS MOVB @FAC+11,0* X40:GPLLNK(*--------------------------------------*(* 1984 GPLLNK *(*--------------------------------------* GPLLNK DATA UTILWS,GPLAGPLA MOVB @GRMRA,1 SWPB 1 MOVB @GRMRA,1 SWPB 1 AI 1,-3 MOVB @SUBSTK,2 SRL 2,8 AI 2,>8300 INCT 2 MOVB 1,*2 SWPB 1 MOVB 1,@1(2) SWPB 2 MOVB 2,@SUBSTK MOVB *14+,@GRMWA MOVB *14+,@GRMWA MOV @>2000,4 LI 3,GPL1 1,-3 MOV 3,@>2000 LWPI GPLWS RTGPL1 LWPI UTILWS MOV 4,@>2000 RTWP MOVB 1,@1(2) SWPB 2 MOVB 2,@SUBSTK MOVB *14+,@GRMWA MOVB *14+,@GRMWA MOV @>2000,4 LI 3,GPL1 1,-3* X40:HCHART(*--------------------------------------*(* EMULATES 'HCHAR' *(* CALL LINK("HCHART",R,C,LEN,CHR) *(*--------------------------------------** DEF HCHART*HCHART LWPI FABWS( BL @GETPAR *GET LOC & LENG CLR 6 A 5,6 A 4,61 C 6,@EOS *R6=LOCATION PLUS LENGTH0 JGT HCOUT *EXIT IF EXCEEDS SCREEN LI 0,0* LI 1,4 *FOURTH PARAMETER& BLWP @NUMREF *ASCII NUMBER BLWP @XMLLNK DATA CFI% MOV @FAC,1 *ASCII TO R1 SLA 1,8* AI 1,>6000 *ADJUST FOR BASIC# MOV 5,0 *LOC TO R0$ MOV 4,2 *LENG TO R25 BLWP @VSBW *WRITE ONE BYTE TO SET VDPWA JMP HCHAB:HCHA MOVB 1,@>8C00 *WRITE SUCESSIVE BYTES THRU VDPWD#HCHAB DEC 2 *FINISHED?3 JNE HCHA *WRITE ANOTHER BYTE IF NOT HCOUT B @XBRET R2* X40:INVERS(*--------------------------------------*(* MAKES UP TO 32 CHARACTERS *(* OF "INVERSE VIDEO" *(* CALL LINK("INVERT",ROW,COL,LEN) *(*---------------------------------------* DEF INVERT*INVERT LWPI FABWS( BL @GETPAR *GET PARAMETERS* CLR 6 A 4,6 A 5,61 C 6,@EOS *R6=LOCATION PLUS LENGTH0 JGT INVOUT *EXIT IF EXCEEDS SCREEN*- MOV 5,0 *GET SCREEN LOCATION/ LI 1,INVBUF *CHARACTER BUFFER AREA( MOV 4,2 *LENGTH OF READ= BLWP @VMBR *READ CHARACTERS TO CHARACTER BUFFER* CLR 6 *INDEX/ LI 2,8 *LENGTH OF PATTERN DEF*GET SCREEN LOCATION+P1 MOVB @INVBUF(6),0 *GET CHARACTER VAL3 SRL 0,8 *CORRECT TO LEAST SIG BYTE< SLA 0,3 *MPY X 8 FOR OFFSET INTO PATT TABLE# MOV 6,1 *GET INDEXI 2,8 *LENGTH OF PATTERN DEF*GET SCREEN LOCATIONA SLA 1,3 *MPY X 8 FOR OFFSET FOR INVERSION BUFFER4 AI 1,LGBUFF *LOCATION IN PATTERN BUFFER: BLWP @VMBR *READ PATTERN TO INVERSION BUFFER INC 6 C 6,4 *DONE?TERN DEF*GET SCREEN LOCATION3 JNE P1 *IF NOT GET NEXT CHARACRER*) LI 1,LGBUFF *START OF BUFFER/M1 INV *1+ *INVERT WORD IN BUFFER( CI 1,LGBUFF+256 *END OF BUFFER?1 JNE M1 *IF NOT INVERT NEXT WORD* SCREEN LOCATION/ LI 0,>0700 *ADDR OF CHARACTER 1282 LI 1,LGBUFF *INVERSION BUFFER ADDRESS( LI 2,>0100 *BYTES TO WRITE BLWP @VMBW *WRITE* CLR 2 *INDEX *IF NOT INVERT NEXT WORD* SCREEN LOCATION1 MOV 5,0 *LOCATION OF SCREEN LINE2 LI 1,>E000 *FIRST INVERTED CHARACTER/P2 BLWP @VSBW *WRITE FIRST CHARACTER( AI 1,>0100 *NEXT CHARACTER' INC 0 *NEXT POSITIONWORD* SCREEN LOCATION) INC 2 *INCREMENT INDEX1 C 2,4 *IF NOT DONE WRITE AGAIN JNE P2INVOUT B @XBRET*(*--------------------------------------*(* RESTORE ORGINAL SCREEN *(* CALL LINK("REVERT",R,C,LENG) *ON(*--------------------------------------** DEF REVERT*REVERT LWPI FABWS BL @GETPAR" MOV 5,0 *LOCATION3 LI 1,INVBUF *ORIGINAL CHARACTER STRING MOV 4,2 *LENGTHLINK("REVERT",R,C,LENG) *ON) BLWP @VMBW *RE-WRITE SCREEN B @XBRET REVERT LWPI FABWS BL @GETPAR" MOV 5,0 *LOCATION3 LI 1,INVBUF *ORIGINAL CHARACTER STRING MOV 4,2 *LENGTHLINK("REVERT",R,C,LENG) *ON* X40:PABS(*--------------------------------------*(* DUMP PAB *(*--------------------------------------**PBDATA DATA >0000 DATA >0100 DATA >0010BUFADR DATA >0000 BYTE >50BYTCNT BYTE >20 DATA >0000 BYTE >00NAMELG BYTE >03PBNAME TEXT 'PIO' EVEN*(*--------------------------------------*(* CHARACTER FILE PAD *(*--------------------------------------**CARPAB DATA >0500 DATA >03EA0 DATA >0000 DATA >030F BYTE >00 BYTE >0B TEXT 'DSK1.CHARA2' EVEN -------------*(* CHARACTER FILE PAD *(*--------------------------------------**CARPAB DATA >0500 DATA >03EA0(*--------------------------------------*(* XBASIC 40 PACK - Version 2004 *(* *(* Full Version - Recreated *(* from MTXT40 source and dis- *(* assembly of XB object file. *(* *(* Re-Written 2004 *(*--------------------------------------** * X40:S**' TITL 'X40-PACK -- Version 2004b'** COPY "DSK2.X40:EQUATS" COPY "DSK2.X40:VARS"* COPY "DSK2.X40:PABS" * COPY "DSK2.X40:DSRLNK"* COPY "DSK2.X40:GPLLNK"  COPY "DSK2.GPLDSR:S" COPY "DSK2.X40:UTILS" COPY "DSK2.X40:CURSOR" COPY "DSK2.X40:XKEY" COPY "DSK2.X40:DUMP"40:VARS"* COPY "DSK2.X40:TEXTS" COPY "DSK2.X40:SCRIOS" COPY "DSK2.X40:SCRLS" COPY "DSK2.X40:HCHART" COPY "DSK2.X40:FORMAT" COPY "DSK2.X40:INVERS" ENDY "DSK2.X40:XKEY" COPY "DSK2.X40:DUMP"40:VARS"** X40:SCRIOS(*--------------------------------------*(* EMULATE 'DISPLAY AT' *(* CALL LINK("DISPAT",R,C,N/N$) *(*--------------------------------------** DEF DISPAT*DISPAT LWPI FABWS# BL @GETLOC *LOC IN R5 C 5,@EOS JGT DISOUT* MOVB @ARGID+2,6/ COC @PTEST,6 *TEST FOR STRING PARAM JEQ DSTRS*& LI 1,3 *3D PARAMETER. BL @NTS *GET NUMBER & CONVERT" JMP DSOUT *PRINT IT*DSTRS LI 1,3 LI 2,LGBUFF LI 4,>FF00 MOVB 4,@LGBUFF$ BLWP @STRREF *GET STRING CB @LGBUFF,@ZERO JEQ DISOUT "DSOUT MOV 5,0 *LOCATION NUMBER & CONVERT LI 3,LGBUFF *BUFFER" BL @PRBUF *PRINT IT*DISOUT B @XBRET*(*--------------------------------------*(* EMULATE 'PRINT' *(* CALL LINK("PRINTT",N/N$) *(*--------------------------------------** DEF PRINTT*PRINTT LWPI FABWS* BL @PTTA *SCROLL UP SCREEN+ BL @PTXX *BLANK BOTTOM LINE*) MOVB @ARGID,6 *SAME AS PAD????) COC @PTEST,6 *TEST FOR STRING JEQ PTSTR*-------------------*' LI 1,1 *1ST PARAMETER0 BL @NTS *GET NUMBER AND CONVERT" JMP PSOUT *PRINT IT*PTSTR LI 0,0 LI 1,1. MOVB @LINLEN+1,@LGBUFF *MAX STRING SIZE LI 2,LGBUFFPTSTR*-------------------*$ BLWP @STRREF *GET STRING*+ CB @LGBUFF,@ZERO *NULL STRING?$ JEQ PTOUT *EXIT IF SO*0PSOUT MOV @EOS,0 *ADDRESS OF BOTTOM LINE S @LINLEN,0 LI 3,LGBUFF" BL @PRBUF *PRINT IT --*PTOUT B @XBRET*(*--------------------------------------*(* EMULATE 'INPUT' *(* CALL LINK("INPUTT",P$,N/N$) *(*--------------------------------------** DEF INPUTT*INPUTT LWPI FABWS@PRBUF *PRINT IT --** BL @PTTA *SCROLL UP SCREEN* LI 0,0 LI 1,1 LI 2,CARBUF MOVB @LINLEN+1,@CARBUF+ BLWP @STRREF *GET PROMPT STRING MOVB @CARBUF,2 SRL 2,8 MOV 2,@LENG* *PRINT IT --*+INNB BL @PTXX *BLANK BOTTOM LINE* MOV @LENG,2 CI 2,>00007 JEQ INX *JUMP IF PROMPT IS NULL STRING MOV @EOS,0. S @LINLEN,0 *ADDRESS OF LAST LINE LI 3,CARBUF* *PRINT IT --*& BL @PRBUF *PRINT PROMPT INX MOV @EOS,0 S @LINLEN,0(*--------------------------------------* A @LENG,0 MOV @LINLEN,10 S @LENG,10(*--------------------------------------* * MOV @LINLEN,10** DEC 10* A @LENG,0>* S @LENG,10 *ADJUST BOTTOM LINE ADDRES FOR PROMPT + BL @CURSOR *TO CURSOR ROUTINE0 MOVB @ARGID+1,6 *TEST FOR STRING OUTPUT4 COC @PTEST,6 *IF ARGUMENT IDENTIFIER SETLEN,10*1 JEQ INSTRS *THEN JUMP TO STRING OUT** CI 9,>0000? JEQ ZNOUT *IF NULL INPUT JUMP TO ZERO NUMBER OUT* CLR 1?ISNZ SB @BO,@CARBUF+1(1) *ADJUST BUFFER FOR BASIC OFFSET INC 1 C 1,9N,10* JGT INBOUT JMP ISNZ*INBOUT LI 0,BTEMP LI 1,>00005INBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0 CI 0,BTEMP+16 JNE INBX* LI 0,BTEMP LI 1,CARBUF 1 C 1,9N,10*2 MOVB *1+,2 *CARBUF LENGTH BYTE TO R2 SRL 2,81 BLWP @VMBW *BUFFER TO ROLL-OUT AREA* MOV 0,@FAC+12 CLR @STATUS2 BLWP @XMLLNK *CONVERT STRING TO NUMBER DATA CSN* LI 0,09N,10* LI 1,2 CLR @STATUS, BLWP @NUMASG *ASSUNG NUMBER TO N* JMP INOUT *EXIT*ZNOUT LI 0,>00000 MOV 0,@FAC *ZERO BYTES TO FAC AREA LI 0,0 LI 1,2 CLR @STATUS 0,09N,10** BLWP @NUMASG *ASSIGN ZERO TO N* JMP INOUT *EXIT*INSTRS LI 1,16ISSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ISSB JMP ISSZ*ISSB LI 0,0 LI 1,2N,10* LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*INOUT B @XBRET*(*--------------------------------------*(* EMULATE 'ACCEPT AT' *(* CALL LINK("ACCEPT",R,C,L,N/N$) * 0,0 LI 1,2N,10*(*--------------------------------------** DEF ACCEPT*ACCEPT LWPI FABWS( BL @GETPAR *GET PARAMETERS* CLR 6 A 4,6 A 5,6 C 6,@EOS3 JGT STROUT *EXIT IF VALUES OFF SCREEN*,2N,10* MOV 5,0 MOV 4,10- BL @CURSOR *GOTO CURSOR ROUTINE* MOVB @ARGID+3,6 COC @PTEST,61 JEQ ACSTRS *JUMP IF STRING VARIABLE* CI 9,>0000JGT STROUT *EXIT IF VALUES OFF SCREEN*,2N,10*C JEQ NULOUT *IF NULL INPUT GOTO ZERO NUMBER ASSIGNMENT* CLR 18ASNZ SB @BO,@CARBUF+1(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASNB JMP ASNZ*ASNB LI 0,BTEMP LI 1,>0000N,10*5ASNBX BLWP @VSBW *BLANK OUT VDP ROLL-OUT AREA INC 0 CI 0,BTEMP+16 JNE ASNBX LI 0,BTEMP LI 1,CARBUF MOVB *1+,2 SRL 2,85 BLWP @VMBW *OUTPUT STR TO ROLL-OUT AREA*,>0000N,10* MOV 0,@FAC+12 CLR @STATUS BLWP @XMLLNK9 DATA CSN *CONVERT OUTPUT STRING TO NUMBER* LI 0,0 LI 1,4 CLR @STATUS% BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*N,10*NULOUT LI 0,>0000) MOV 0,@FAC *ZERO VAL TO FAC LI 0,0 LI 1,4* MOVB @ZERO,@STATUS CLR @STATUS % BLWP @NUMASG *ASSIGN TO N* JMP STROUT *EXIT*ACSTRS LI 1,1T *EXIT*N,10*6ASSZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASSB JMP ASSZ*ASSB LI 0,0 LI 1,4 LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*STROUT B @XBRET SZ SB @BO,@CARBUF(1) *ADJUST FOR BASIC OFFSET INC 1 C 1,9 JGT ASSB JMP ASSZ*ASSB LI 0,0 LI 1,4 LI 2,CARBUF CLR @STATUS& BLWP @STRASG *ASSIGN TO M$*STROUT B @XBRET* X40:SCRLS(*--------------------------------------*(* SCROLL UP A HORIZONTAL *(* SECTION OF THE SCREEN *9* CALL LINK("SCRLT",ROW1,ROW2,CNT)* *NEW PARAMETER(*--------------------------------------** DEF SCRLT*SCRLT LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,2+ MOV 2,@LENG *SAVE ROW1 TO LENG CI 2,>0001( JLT SCROUT *EXIT IF ROW1<13 DEC 2 *ADJUST FOR BASIC NOTATION* MPY @LINLEN,2 *START ADDR IN R3, MOV 3,7 *SAVE IN REGISTER 7 INC 1  BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,4 *EXIT IF ROW1<1) CI 4,>0018 *EXIT IF ROW2>24 JGT SCROUT $ C @LENG,4 *ROW1 0% B @XBRET *ELSE RETURN/SCRY MOV 7,3 *RESTORE START ADDRESSSCRA MOV 3,0 A @LINLEN,0 LI 1,LGBUFF MOV @LINLEN,2$ BLWP @VMBR *GET A LINE S @LINLEN,0/ BLWP @VMBW *WRITE ONE LINE HIGHER *ELSE RETURN A @LINLEN,3 C 3,5/ JNE SCRA *JUMP IF NOT LAST LINE* MOV 5,0 CLR 2. LI 1,>8000 *LOAD BLANK CHARACTER,SCRB BLWP @VSBW *WRITE TO LAST LINE INC 0 INC 2 *ELSE RETURN C 2,@LINLEN *EOL? JNE SCRB *LOOP1 DEC 8 *ADJUST REPITITION COUNT1 JNE SCRY *DO IT AGAIN IF NOT DONESCROUT B @XBRET*)*---------------------------------------* INC 2 *ELSE RETURN)* SCROLL VERTICAL SECTION RIGHT *)* CALL LINK("VSCROL",COL1,COL2,CNT)*)*---------------------------------------** DEF VSCROL*VSCROL LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI& MOV @FAC,4 *START COL=R4$ CI 4,>0001 *EXIT IF <1 JLT VOUT DEC 4 INC 1  BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,5 DEC 5 MOV 5,6 S 4,6 DATA CFI, JGT VZ *EXIT IF 0# B @XBRET *ELSE EXIT VX MOV 4,0VSA LI 1,CARBUF MOV 6,2& BLWP @VMBR *READ TOP SEG INC 0 DEC 2 % MOV @FAC,8 *COUNT to R8 4,6 DATA CFI= BLWP @VMBW *WRITE IT ONE POSITION TO RIGHT (+1)* DEC 0 *READJUST VDP ADR*# A @LINLEN,0 *NEXT LINE' C 0,@EOS *END OF SCREEN$ JLT VSA *IF NOT JMP* MOV 4,0 4,6 DATA CFI LI 1,>8000(VSB BLWP @VSBW *BLANKS TO COL1 A @LINLEN,0 C 0,@EOS JLT VSB) DEC 8 *DECREMENT COUNT JNE VXVOUT B @XBRET*)*---------------------------------------* 4,6 DATA CFI)* SCROLL UP VERTICAL SECTION *)* CALL LINK("HSCROL",COL1,COL2,CNT)*)*---------------------------------------** DEF HSCROL*HSCROL LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI& MOV @FAC,4 *START COL=R4 CI 4,>0001$ JLT HOUT *EXIT IF <1 DEC 4 INC 1  BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,5# DEC 5 *END COL=5 MOV 5,6I5 S 4,6 *EXIT IF LESS THAN START COL JGT HZ B @XBRET!HZ INC 6 *LENG=R6+ A @EOS,5 *END OF BOTTOM ROW S @LINLEN,5*& INC 1 *3d Parameter BLWP @NUMREF 6I BLWP @XMLLNK DATA CFI & MOV @FAC,8 *COUNT to R8 % JGT HX *MUST BE >0) B @XBRET *OR ELSE GETOUT HX MOV 4,0 A @LINLEN,0HSA LI 1,CARBUF MOV 6,2BLWP @NUMREF 6I& BLWP @VMBR *READ 2D LINE S @LINLEN,02 BLWP @VMBW *WRITE IT ONE LINE HIGHER*# A @LINLEN,0 *NEXT LINE A @LINLEN,0' C 0,@EOS *END OF SCREEN$ JLT HSA *IF NOT JMP*6I MOV 4,0 A @EOS,0 S @LINLEN,0 LI 1,>8000(HSB BLWP @VSBW *BLANKS TO COL1 INC 0 C 0,5. JGT HY *IF DONE GET NEXT COL: JMP HSB *IF NOT END OF LINE WRITE ANOTHER*#HY DEC 8 *DEC COUNT5 JNE HX *IF NOT DONE THEN LOOP AGAINHOUT B @XBRET COL1 INC 0 C 0,5. JGT HY *IF DONE GET NEXT COL: JMP HSB *IF NOT END OF LINE WRITE ANOTHER* XB40:TEXTS(*--------------------------------------*(* LOADS ALTERNATE CHARACTERS *(* FROM DISK: "DSK1.CHARA2" *(* CALL LINK("ALCHAR") *(*--------------------------------------** DEF ALCHAR*ALCHAR LWPI FABWS' LI 0,>0020 *BYTES FOR PAB MOV 0,@>830C CLR @STATUS* BLWP @GPLLNK2* DATA >0038 *ALLOCATE VDP RAM FOR PAB) BLWP @XMLLNK *PER DISASSEMBLY) DATA >0002 *PER DISASSEMBLY MOV @>831C,0 LI 1,CARPAB LI 2,>0015- BLWP @VMBW *PAB DATA TO VDP RAM CLR @STATUS AI 0,>0009 MOV 0,@PNTR CLR @STATUS' BLWP @DSRLNK *LOAD 'CHARA2' DATA >0008*EMBLY LI 1,ALTCUR; MOV 1,@CURPAT *POINT TO ALTERNATE CURSOR PATTERN* B @XBRET*(*--------------------------------------*(* LOADS STANDARD CHARACTERS *(* CALL LINK("CHRSET") * DATA >0008*EMBLY(*--------------------------------------** DEF CHRSET*CHRSET LWPI FABWS) LI 0,PATTAD *CHAR 32 ADDRESS MOV 0,@FAC CLR @STATUS$ BLWP @GPLLNK *UPPER CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE DATA >004A( LI 0,>03F0 *CURSOR ADDRESS7 LI 1,BASCUR *POINT TO BASIC CURSOR PATTERN> MOV 1,@CURPAT *FOR USE IN CURSOR ROUTINE CAN USE IT LI 2,8 CASE DATA >0018$ BLWP @GPLLNK *LOWER CASE= BLWP @VMBW *AND WRITE NEW PATTERN TO PATT TABLE* B @XBRET*(*--------------------------------------*(* ENTER TEXT MODE *(* CALL LINK("TEXT") *(*--------------------------------------**ASE DEF TEXT*TEXT LWPI FABWSC LI 0,768 *NEW IN 2003; NEW POSITION PER DISASSEMBLY LI 1,VDPBUF7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLY' BLWP @VMBR *SAVE VDP INFO LI 0,>01F0-----**ASE* BLWP @VWTR *SET VDP REGISTER SWPB 0, MOVB 0,@>83D4 *SAVE REGISTER BYTE: LI 0,>0717 *>0717 PER DISASSEMBLY. NOT >0713$ BLWP @VWTR *SET COLORS LI 1,>0028NFO LI 0,>01F0-----**ASE) MOV 1,@LINLEN *SET LINE LENGTH SWPB 1+ MOVB 1,@BYTCNT *ADJUST "DUMP" PAB LI 1,>03C0) MOV 1,@EOS *& END OF SCREEN**. BL @CLEARC *CLEAR THE NEW SCREEN B @XBRET*0,>01F0-----**ASE(*--------------------------------------*(* RETURN TO GRAPHICS MODE *(* CALL LINK("RETURN") *(*--------------------------------------** DEF RETURN*RETURN LWPI FABWS BL @CLEARC LI 0,>01E0--**ASE* BLWP @VWTR *SET VDP REGISTER3 SWPB 0 *RELOCATED PER DISASSEMBLY* MOVB 0,@>83D4 *SAVE VDP R1 BYTE*A LI 0,768 *NEW IN 2003 & RELOCATED PER DISASSEMBLY LI 1,VDPBUF LI 0,>01E0--**ASE7 LI 2,192 *NOTE NEW SIZE PER DISASSEMBLY* BLWP @VMBW *RESTORE VDP INFO LI 1,>00206 MOV 1,@LINLEN *ADJUST LINE LENGTH PARAMETER SWPB 19 MOVB 1,@BYTCNT *ADJUST BYTE COUNT IN "DUMP" PAB-**ASE LI 1,>03008 MOV 1,@EOS *CHANGE END OF SCREEN PARAMETER B @XBRET*(*--------------------------------------*(* SET COLORS IN TEXT MODE *(* CALL LINK("COLORT",FGD,BKGD) *BYTE COUNT IN "DUMP" PAB-**ASE(*--------------------------------------** DEF COLORT*COLORT LWPI FABWS LI 0,0 LI 1,1 BLWP @NUMREF BLWP @XMLLNK DATA CFI3 MOV @FAC,3 *RETRIEVE FOREGROUND COLOR DEC 3DUMP" PAB-**ASE$ CI 3,>0000 *TEST RANGE JLT CLOUT CI 3,>000F JGT CLOUT0 SLA 3,4 *FORGROUND=3D NYBBLE R3 LI 1,2 BLWP @NUMREF BLWP @XMLLNK DATA CFI MOV @FAC,0 3DUMP" PAB-**ASE' DEC 0 *BACKGROUND=R0 CI 0,>0000$ JLT CLOUT *TEST RANGE CI 0,>000F JGT CLOUT" A 3,0 *ADD THEM( AI 0,>0700 *FOR VDP REG. 7$ BLWP @VWTR *SET COLORS ASECLOUT B @XBRET*(*--------------------------------------*(* CLEAR SCREEN EITHER MODE *(* CALL LINK("CLEART") *(*--------------------------------------** DEF CLEART*CLEART LWPI FABWSTR *SET COLORS ASE! BL @CLEARC *EXPAND? B @XBRET-------*(* CLEAR SCREEN EITHER MODE *(* CALL LINK("CLEART") *(*--------------------------------------** DEF CLEART*CLEART LWPI FABWSTR *SET COLORS ASE* X40:UTILS(*--------------------------------------*(* UTILITY TO RETURN TO BASIC *(*--------------------------------------**&XBRET LWPI GPLWS *RELOAD GPLWS. B @NEXT *BRANCH BACK TO BASIC*(*--------------------------------------*(* UTILITY TO PRINT BUFFER AT R03 *(* TO SCREEN AT LOCATION IN R00 *(*--------------------------------------**3PRBUF MOVB *3+,4 *GET STRING LEN FOR USE AS TO BASIC*/ SRL 4,8 *INDEX AND MOVE TO LSB&PBUFA MOVB *3+,1 *GET ONE BYTE0 AI 1,>6000 *ADD BASIC OFFSET VALUE( BLWP @VSBW *WRITE ONE BYTE& INC 0 *NEXT ADDRESS% C 0,@EOS *BEYOND EOS?$ JEQ PROUT *IF SO STOP) DEC 4 *DECREMENT INDEX3 JNE PBUFA *WRITE ANOTHER IF NOT DONE PROUT RT*(*--------------------------------------*(* UTILITY TO CLEAR SCREEN * 0,@EOS *BEYOND EOS?(* BL @CLEARC *(*--------------------------------------** CLEARC CLR 0' LI 1,>8000 *BYTE TO WRITE' MOV @EOS,2 *SIZE OF BLOCK5 BLWP @VSBW *WRITE ONE BYTE TO SET VDPWA JMP CLRC2OS?7CLRC3 MOVB 1,@VDPWD *MOVE SUCESSIVE BYTES TO VDPWD#* *AT >8C00? CLRC2 DEC 21 JNE CLRC3 *CONTINUE UNTIL FINISHED RT*(*--------------------------------------*(* UTILITY TO GET A SCREEN LOCATION*OS?(* PARAMETER 1 IS ROW # *(* PARAMETER 2 IS COL # *(* PARAMETER 3 IS LENG *(* *(* LENGTH PLACED IN R4 *(* LOC PLACED IN R5 *ON*OS?(*--------------------------------------**GETPAR LI 0,0 LI 1,3& BLWP @NUMREF *PARAMETER #3, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI! MOV @FAC,4 *LENG=R4*GETLOC LI 0,0N R5 *ON*OS?& LI 1,1 *PARAMETER #1! BLWP @NUMREF *GET ROW, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFI MOV @FAC,15 DEC 1 *ADJUST FOR BASIC CONVENTION4*GETLOC LI 0,0N R5 *ON*OS?8 MPY @LINLEN,1 *BEGIN TO BUILD SCREEN LOCATION7 MOV 2,5 *RESULT OF MULTIPLICATION TO 5& LI 1,2 *PARAMETER #2$ BLWP @NUMREF *GET COLUMN, BLWP @XMLLNK *CONVERT TO INTEGER DATA CFIOS?+ MOV @FAC,2 *PUT IN REGISTER 26 DEC 2 *ADJUST FOR BASIC CONVENTIONS1 A 2,5 *ADD TO ROW X LINELENGTH RT*(*--------------------------------------*(* SCROLL WHOLE SCREEN UP ONE LINE *TA CFIOS?(*--------------------------------------**.PTTA CLR 3 *CLEAR LOCATION INDEX MOV @EOS,5 S @LINLEN,5PTTAX MOV 3,0A A @LINLEN,0 *INCREMENT LOCATION INDEX BY LINE LENGTH LI 1,LGBUFFE LINE *TA CFIOS? MOV @LINLEN,2" BLWP @VMBR *GET LINE S @LINLEN,0/ BLWP @VMBW *WRITE ONE LINE HIGHER A @LINLEN,3 C 3,50 JNE PTTAX *IF NOT DONE DO ANOTHER RT*,LGBUFFE LINE *TA CFIOS?(*--------------------------------------*(* BLANK BOTTOM LINE *(*--------------------------------------**PTXX MOV @EOS,09 S @LINLEN,0 *ADDRESS OF START OF BOTTOM LINE LI 1,>8000T*,LGBUFFE LINE *TA CFIOS?+PTX BLWP @VSBW *BLANK BOTTOM LINE INC 0 C 0,@EOS JNE PTX RT*(*--------------------------------------*(* CONVERT NUMBER TO STRING AND *(* PLACE IN LGBUFF WITH LENGTH BYTE*GBUFFE LINE *TA CFIOS?(*--------------------------------------**NTS LI 0,0$ BLWP @NUMREF *GET NUMBER MOVB @ZERO,@FAC+11 BLWP @GPLLNK+ DATA >0014 *CONVERT TO STRING*" MOVB @FAC+12,4 *LEN IN 4 MOVB @FAC+11,0 CFIOS? SRL 0,8' AI 0,>8300 *STR ADDR IN 0 LI 1,LGBUFF*) MOVB 4,*1+ *STR LEN TO BUFF SRL 4,8%NTSA MOVB *0+,*1+ *STR TO BUFF DEC 4 JNE NTSA RTN IN 4 MOVB @FAC+11,0 CFIOS?* X40:VARS(*--------------------------------------*(* VARIABLES, CONSTANTS, BUFFERS *(* AND CHARACTER DEFINITIONS *(*--------------------------------------* PAB DATA >0000PTEST DATA >0100SAVRT DATA >0000LENG DATA >0000LINLEN DATA >0020EOS DATA >0300LONG DATA >0110SHORT DATA >0028RPTIME DATA >0000ZERO BYTE >00H3 BYTE >03H4 BYTE >04H7 BYTE >07H8 BYTE >08H9 BYTE >09HD BYTE >0DH20 BYTE >20H28 BYTE >28BO BYTE >60000H7E BYTE >7EH7F BYTE >7FH80 BYTE >80NOKEY BYTE >FFCBYTE BYTE >00INSERF BYTE >00SAVKEY BYTE >000SVXKEY BYTE >00 *ADDED FOR XKEY ROUTINEVALID BYTE >AAPERIOD BYTE >2E EVEN*(*--------------------------------------*0000(* BUFFERS *(*--------------------------------------**SMLBUF BSS >10INVBUF BSS >20FABWS BSS >20ALTWS BSS >20CARBUF BSS >2ALGBUFF BSS >100VDPBUF BSS >C0SAVEG BSS >2 EVEN*--------------------*0000(*--------------------------------------*(* BUILT/IN CHARACTER DEFINITIONS *(*--------------------------------------**#ALTCUR DATA >3838,>3838,>3838,>0000#LINCUR DATA >0000,>0000,>0000,>00FE#BASCUR DATA >007C,>7C7C,>7C7C,>7C7CCURPAT DATA BASCUR0 EVEN---------------------------*(* BUILT/IN CHARACTER DEFINITIONS *(*--------------------------------------**#ALTCUR DATA >3838,>3838,>3838,>0000#LINCUR DATA >0000,>0000,>0000,>00FE#BASCUR DATA >007C,>7C7C,>7C7C,>7C7CCURPAT DATA BASCUR0* X40:XKEY(*--------------------------------------*(* CALL KEY REPLACEMENT *(* CALL LINK("XKEY",UNIT,K/K$) *(*--------------------------------------** DEF XKEY*XKEY LWPI FABWS CLR 0& LI 1,>0001 *1ST PARAMETER BLWP @NUMREF BLWP @XMLLNK DATA CFI' MOV @FAC,4 *KEY UNIT to R4 JEQ KEYZ CI 4,>00011 JLT KOUT *ILLEGALLY SMALL KEY UNIT CI 4,>00051 JGT KOUT *ILLEGALLY LARGE KEY UNIT SLA 4,8' MOVB 4,@SVXKEY *STORE KEY UNITKEYZ MOVB @SVXKEY,@KEYDEV CLR @STATUS BLWP @GPLLNK" DATA >0034 *GET READY CLR @STATUS* 4,>00058KLOOP LIMI >0002 *INTERRUPTS ENABLED FOR KEYPRESS LIMI >0000 BLWP @KSCAN CB @H20,@STATUS3 JNE KLOOP *KEEP WAITING FOR KEY PRESS*. MOVB @ARGID+1,4 *TEST SECOND PARAMETER COC @PTEST,4. JEQ KEYX *JUMP IF IT'S A STRING MOVB @KEY,1 SRL 1,8 MOV 1,@FAC8 BLWP @XMLLNK *CONVERT ASCII VALUE OF KEYPRESS DATA CIF CLR 0/ LI 1,>0002 *ASSIGN TO 2D PARAMETERST,4 BLWP @NUMASG" JMP KDONE *GOTO EXIT*KEYX MOV @KEYDEV,@CARBUF LI 4,>0100) MOVB 4,@CARBUF *LENGTH to CARBUF CLR 0) LI 1,>0002 *SECOND PARAMETER LI 2,CARBUFD PARAMETERST,4" BLWP @STRASG *ASSIGN ITKDONE LI 1,>0500+ MOVB 1,@KEYDEV *RESET KSCAN DEVICEKOUT B @XBRET *EXIT*LENGTH to CARBUF CLR 0) LI 1,>0002 *SECOND PARAMETER LI 2,CARBUFD PARAMETERST,4