m'"'~& 0&4팼059쌲'^׶' H*挋Ѷ$@ _ʌ״H*&!9]'Z&_On0oDISK NOT LINKED!ERROR LOADING DOS.HOGGLABR" ABASICCMD$RCHESS2ABA 0RCHESS2CMD  *RABTXT RPRINTBAS RRUNIOTXT" & R P %.: ABASIC (c) 1982 HARRY B. FAIR (_ Nߔ0̟/0P!0ܟo!&_NO00n40Ro&2b0DFHxI>LP0:$y0 012V '% 2 %& "2'.F%+0FMH 2' WIXX/ H'40DD H&50ځ*'n.'h% Y% k$HH0d솞 ':0:' H'(0H$!(&FFD H&D H  2b 4&50101'40y5' 0* ^503r >5$#@Oc#dL O # L 0O** ERROR # n$= a$5 'S $' &$'F5A̯-F 6!9O'k< 얒' 'l 6-57_ u|%9$&0 $G' ' 45 69  &J :485$Ǟl6 *4( 4)5 0 '94߁A% ["595 0%9" 9Ձ ':'9,&09 &90 4r 40Ҭ5'  r5 450 9#941j&Z&5 ' 5ŖL9$9V%)_Z&00(pL0"^Z&9 \Z&9PAGE A B A S I C C O M P I L E R V1.4:6   DDDD09#2Ao%l d%l d2ax4~o5900&9&&9$ &90)0r +0()0 0ӟ)0  0:)0s+@% &@9$0)'%'+,0'4`/ߡ&0 '+0 +'0 Ȅ9ENDFORNEXTREMGOTOIFINPUTPRINTRETURNORGBASELETSTACKSTOPCALLDIMPOKEOPTGENRREADRWRITEREA DWRITEDISPLAYNAMEOPENCLOSERESTORESCRATCHKILLCHAINUSERUSERUSERCREATELSTRECXPANDELSEONGOSUBBUF$EOFTHENTOSTEPOFFERROROVRNMINOVRTABFILESABSRNDPOSPEEKCLKERRSWAPEOFSTATUSLENVALASCSUBSTRFREEFILSIZSTR$RIGHT$L EFT$MID$CHR$TRM$X$5_-.J$#040-섍-0 &ؖ-9hi9@44P& P0 F'4'00F0n& ' & T50n5@9J04'88xLx%L0LJ5Z&9x'0y8vx9_O &x#$,!!"=!#H"y$! Q!"!jDh l { . 4 W Q!O!X!a  %%:߁N'\H'XS'XI' ,' 90 0>$M&]&99Z?%9$' ? f 0$ & 9턟@(&"u$ t,'?& t $ u) '90&&@t? ?&tM' = tu'=$P%X$b9XI%94%&NN  2b9n2b'n >' 0w> 0sF%S0\0N\0Q0LQ0XGv0@0@AF'%/'0f0  M**&  $yPROGRAM END ERROR(s) DETECTED PROGRAM LENGTH VARIABLE LENGTH NO ERRORS DETECTED R&$'@/$M' 6^ )@o$G& $^ $S &O $D ;&0& 1;&0v& q'45$(&0 9T$cOZ O\ $ B $  $&?2W !?S$&? 6A$- &   ]},&0 9Oh iY96%  K$H'$96 BV$  #96L$ ~ y66$6W%9 ` W?~?%qH&w#&0% 9"0  _9 $Z$'BNR@$M& O @$] %O 54 _4m$.W$$RL$ 5]'<o$4$ _  m   ߞ$M&  $ 99 |  Q  *$ -9|% 9 &*%& 9oo09 $&!M&9-~ %9 Mn$p_ &݆ O' O  p$#m?$ğB  , H!%M%9G? 1' _0K?ZX $@&%2b&9_=& <& >&09.].N.a.V.8.R $9 $J"O%{% 9='909k('90$#4Y)5&0 %9@6 04 Ӎ$* ڍ$'9$&B0'$<_-.$. -Z&..0 &-90% #  %"99 I%9&9<$x$A'#9<$?_$B& <ʀ$ ?:405&9< ?'0=000:9 I2%9<:405& 9076怦:?<&44 n?' <ʀ Z O $55 E< I.~6$u6_ $ i$"M]' $PK@_' \'9utt\t)&u(u&c $Y,&0 Ֆu'̭ t8$&tI','(E&4K$5$D'\F&84?% '2a9O_-m5'Ձ"&>0_$%M'\s$X S5 %_ ' "&"'O0900\9!$ ' j-9 'O9%]e$$&=0;&45K$/  '&+&0 & @$'@ l ̆ % &9 4V&0"ކsn$'"$ʍ-&$4l&5d5=t_< &j-' pn$9 & ږ &9L&JT_04'\0 M''' ' &R SXOf 45O^004_ 139 $ 3&9:1+&._ -'94O5M'r c '0 13*& 'K /'94' /5 10;&& !& %'945 ܟ% @%9 10F$%?$$& $Q9O g$ _('F-&0$-@P #&!0$ -CS- 0N 1 19 ޔ0(́)' 091#3' 314>540.0-04944005'0-.感4 943&4-4.5-5 5C 6?$ M% $&9_ 9 3$$0O1L39|$ q$O4&2b9&&$)45& M540F5,'2b90% 1_$wOXI@P=by*[*h*p****+ ++++*I++4H115nx&W; ^O&-a &-JU&  =`O1L3*9RG'*l^&0H$ &0 O44-55=_10 ObV&Mk  u4 4'F&&0$ &a &S%WQ' {554&  &  &  +r5]'h O  */ &׍! aʖ3'@O139x'0$09 0/&9&&94Ɓ 4 4 4_ 45$ $& #oo$&4O&A5-9!& 10/9BH#H#X40 ,B9-------r-i-c-A-0-*-[-T-4-,---}-------&O_ Y *- 2b EC/S +1 0n-p n-o  A 4 nU@P_no ڍ ٍՍ Vb- g ύ Ǎ ōR uWd ̤- ̪ ̨ ̣ 4+5 %Ą ʊ Ȉ -?:4.5-X   - S O K G4-&.\' 5.! .& - .& - .5- O 2- --& †-4FF5Ԇ, . & / ن' ՆXI 2~  Ԗ .x'F%0g 逖SRY'v& lIOeS')\0O"l-,04ƀƘR'S&zZ00dY'h0 0M IJW'd00Ƒ0V'b00zU'1`00 rl-9 k?9 /pTX'PjST^0L0ˍX'/f0{70x{\]Z[ opO뛖?9'F%o0F#9LOAD MAP: OUT INP DSK MUL DIV RND ST1 ST2  '|0n-%[3 '#0њ-%O3 &0+&0 ' 0h ;90$ 0_焽'&9? ' ^PZQV~ 0ԅ_&& &9 &90Գ 'i ~$'0ώ\\Z*94_{5 4" &$"L0o$"5ޟ"$9ܖ&&ͦ' &"9 ~&    4&1`m'0lo5ƀ'Z& ' ]'{Z 9  4M+g5 -5@P0oo 'l'%l '%l 荋d%l d} %l pli2b9"9O_444A '-&lw$8 '4 '0m'A0%= "9XIXIXI%+%'%!j 'm&Ħ'2 2Xb5m'@P2a9'2gn2e_O9%o9Z& &o 9 "' ,'90" 9 " '0" '0Z&9o9? >ƀ&'\0  &$ ϧ & 0o"&~$]'Z č`*'' 'm'&"' 2dn9~2b!3P'n?~ @ -%ˆ~3"_""1?' &o9" 0"4_q5 '"0 &9    % '0:m& ~9'_ O9O9x \o o!l ' 44_*\@`ab*\"4H@`cb42|ooahf=bf=aa$lhe'=aa$lg'e= O+& 5m'@P2e9mb'cacSCla&l&+52e'22bn944_*\A@`442A&M& 'Q!2hnm* ``$jlm+ Lhi+&oo$ iidfj&f$@P2f9H#5@XIXI6DV9'b9b9_m'0\ O9b]'i &c0Z ƀo"9''0Z&'9b'4M5'44#.L' b'M'"m',J'0 ]'"$  b]' '0Z 'o52bnƀ b  M'0Z&)''0')9O 'o  &M&9/']'*, +,+#_O9$68') -))-& 0Z&/O9 0 /+Z 4&'"5,"'o ))"4+&-"5&+&"-9DPnp8$,BTMQWq/vA[FZ&P* CHESS2.ABA SETUP TO RUN WITH A/BASIC V1.4 . (c) 1982 Harry B. Fair . org = $100 base =$4000 dim B(8,8),M(8),A$(32),B$(6),C$(1),Z$(36) base=$30 print "WHAT IS YOUR NAME" input A$ T1=rnd($8F) print "DO YOU WANT TO BE WHITE OR BLACK ";A$ input B$ T1=0  T5=0 T8=0 S1=0 S5=0 S8=0 R=0 C2=0 C1=0 print "ENTER 1=LONG GAME, 0=SHORT GAME" input P8 M(1)=2 M(2)=3 M(3)=4 M(4)=5 M(5)=6 M(6)=4 M(7)=3 M(8)=2 K=1 Z$="PAWNROOK KNIGHTBISHOPQUEEN KING" if left$(B$,1)="B" then 150 K=-1 0150 for X=1 to 8 for Y=1 to 8 B (X,Y)=0 * . fill the board with negative values for computer . positive values for the player . if X<>8 then 180 B(X,Y)=K*M(Y) 0180 if X<>7 then 190 B(X,Y)=K 0190 if X<>2 then 200 B(X,Y)=-K 0200 if X<>1 then 210 B(X,Y)=-K*M(Y) 0210 next Y next X PAGE * . set M(X) to the values of the pieces. . M(1)=Pawn, M(2)=Rook, M(3)=Knight, M(4)=Bishop M(5)=Queen and M(6)=King . M(1)=100 M(2)=500 M(3)=300 M(4)=325 M(5)=900 M(6)=2000 if K=1 then 250 0240 gosub 3150 gosub 2000 0250 gosub 3150 gosub 2500 goto 240 * . FIND THE NAME OF THE PIECE SUB . this subroutine puts the name of the piece located at B(X,Y) . or B(C,D) into B$ and the pieces initials into C$. . 0500 L=abs(B(X,Y))*6-5 goto 530 0520 L=abs(B(C,D))*6-5 0530 L1=4 if L=1 then 540 L=L-2 L1=6 0540 B$=trm$(mid$(Z$,L,L1)) C$=left$(B$,1) if left$(B$,2)<>"KN" then 544 C$="N" 0544 return PAGE * COMPUTER CASTLE SUB . This sub checks to see if the computer can castle and will . castle if it is legal and not placing the computer in a . disadvantagous position. . 0550 if T5=1 then 760 if C3=1 then 760 V6=0 gosub 4000 V5=V6+175 if V5-2 then 670 if B(X3,6)+B(X3,7)<>0 then 670 for X=1 to 8 for Y=1 to 8 if B(X,Y)<=0 then 640 C=X3 D=6 gosub 1000 if L=0 then 670 D=7 gosub 1000 if L=0 then 670 0640 next Y next X B(X3,7)=-6 B(X3,6)=-2 B(X3,5)=0 B(X3,8)=0 goto 750 0670 if T1=1 then 760 if B(X3,1)<>-2 then 760 if B(X3,2)+B(X3,3)+B(X3,4)<>0 then 760 for X=1 to 8 for Y=1 to 8 if B(X,Y)<=0 then 730 C=X3 D=3 gosub 1000 if L=0 then 760 D=4 gosub 1000 if L=0 then 760 0730 next Y next X B(X3,3)=-6 B(X3,4)=-2 B(X3,1)=0 B(X3,5)=0 0750 T5=1 L=0 return 0760 L=1 return PAGE * LEGALITY SUBROUTINE . This sub check to see if the move from B(X,Y) to B(C,D) is . a legal move for t he piece at B(X,Y). . If it is the sub will set L=0, if not L=1. . 1000 V=abs(B(X,Y)) on V goto 1020,1180,1140,1300,1440,1460 print "******BOARD ERROR******" stop 1020 Y4=abs(Y-D) if Y4>1 then 1540 X4=B(C,D) if B(X,Y)<>K then 1090 on X-C goto 1050,1070 goto 1540 1050 if Y4=1 then 1060 if X4<>0 then 1540 goto 1530 1060 if X4=0 then 1540 goto 1530 1070 if Y4<>0 then 1540 if X<>7 then 1540 if B(6,Y)<>0 then 1540 if X4<>0 then 1540 goto 1530 1090 on C-X goto 1100,1120 goto 1540 1100 if Y4=1 then 1110 if X4<>0 then 1540 goto 1530 1110 if X4=0 then 1540 goto 1530 1120 if Y4<>0 then 1540 if X<>2 then 1540 1130 if B(3,Y)<>0 then 1540 if X4<>0 then 1540 goto 1530 1140 X4=abs(X-C) Y4=abs(Y-D) if X4+Y4<>3 then 1540 1160 if X4>2 then 1540 if Y4>2 then 1540 g oto 1530 1180 if X=C then 1250 if Y<>D then 1540 if abs(X-C)=1 then 1530 if X>C then 1220 X4=C-1 C4=X+1 goto 1230 1220 X4=X-1 C4=C+1 1230 for L=C4 to X4 if B(L,Y)<>0 then 1540 next L goto 1530 1250 if abs(Y-D)=1 then 1530 if Y>D then 1270 Y4=D-1 D4=Y+1 goto 1280 1270 Y4=Y-1 D4=D+1 1280 for L=D4 to Y4 if B(X,L)<>0 then 1540 next L goto 1530 1300 if abs(X-C)-abs(Y-D)<>0 then 1540 1305 if abs(X-C)=1 then 1530 if X>C then 1350 X4=X+1 C4=C-1 if Y>D then 1340 Y4=Y+1 goto 1380 1340 Y4=Y-1 goto 1410 1350 X4=C+1 C4=X-1 if Y>D then 1370 Y4=D-1 goto 1410 1370 Y4=D+1 1380 for L=1 to C4-X4+1 if B(X4,Y4)<>0 then 1540 X4=X4+1 Y4=Y4+1 next L goto 1530 1410 for L=1 to C4-X4+1 if B(X4,Y4)<>0 then 1540 X4=X4+1 Y4=Y4-1 1430 next L goto 1530 1440 if abs(X-C)-abs(Y-D)=0 then 1305 goto 1180 1460 if abs(X-C)>1 then 1540 if abs(Y-D)>1 then 1540 1530 L=0 return 1540 L=1 return PAGE * PLAYER CASTLE SUBROUTINE . This sub is used to see if the player can legaly castle . when he wants to. If it is legal it performs the castle. . Otherwise it prints the reason and returns w/L=1. . 1550 L=1 if S5<>0 then 1670 print "KINGS SIDE OR QUEENS SIDE (K/Q)" input B$ if B$="K" then 1630 if S1<>0 then 1680 if B(X2,2)+B(X2,3)+B(X2,4)<>0 then 1690 B(X2,1)=0 B(X2,5)=0 B(X2,3)=6 B(X2,4)=2 S5=1 goto 1660 1630 if S8<>0 then 1680 if B(X2,6)+B(X2,7)<>0 then 1690 B(X2,5)=0 B(X2,8)=0 B(X2,6)=2 B(X2,7)=6 S5=1 1660 R=R+1 L=0 return 1670 print "YOU HAVE ALREADY MOVED YOUR KING" return 1680 print "YOU HAVE ALREADY MOVED YOUR ROOK" return 1690 print "THERE ARE OCUPIED SQUARES BETWEEN" return * FIND THE KINGS SUBROUTINE . This subroutine locates the two Kings. It sets X2,Y2 to . the location of the players King and X3,Y3 to the location . of the computers King. . 1700 for X4=1 to 8 for Y4=1 to 8 if B(X4,Y4)<>6 then 1720 X2=X4 Y2=Y4 1720 if B(X4,Y4)<>-6 then 1730 X3=X4 Y3=Y4 1730 next Y4 next X4 return PAGE * PLAYER MOVE INTO CHECK ? . This sub performs the perposed player move and calls . PLAYER CURRENTLY IN CHECK sub to see if it's legal. . 1750 G1=B(X,Y) G2=B(C,D) G3=C G4=D G5=X G6=Y B(C,D)=B(X,Y) B(X,Y)=0 gosub 1920 C=G3 D=G4 X=G5 Y=G6 B(X,Y)=G1 B(C,D)=G2 return * COMPUTER IN CHECK ? . This sub checks to see if there is any legal move the player . can make that can capture the  computers King. . 1840 gosub 1700 1850 C=X3 D=Y3 for X=1 to 8 for Y=1 to 8 if B(X,Y)<=0 then 1900 gosub 1000 if L=0 then 1910 1900 next Y next X 1910 return * PLAYER CURRENTLY IN CHECK ? . This sub checks to see if there are any legal computer . moves  that can capture the players King. . 1920 gosub 1700 C=X2 D=Y2 for X=1 to 8 for Y=1 to 8 if B(X,Y)=>0 then 1970 gosub 1000 if L=0 then 1980 1970 next Y next X 1980 return PAGE * PLAYER MOVE SUBROUTINE . This sub is the actual game part for the players move. . It starts by checking to see if there are any legal moves . that the player can make. Then asks the player for the . location of the piece he wants to move (and checks to see . if such a piece exists). Then it asks for the destination . and checks for legality of the move. . 2000 for X=1 to 8 for Y=1 to 8 if B(X,Y)<=0 then 2090 for C=1 to 8 for D=1 to 8 if B(C,D)>0 then 2080 gosub 1000 if L=1 then 2080 gosub 1750 if L=1 then 2120 2080 next D next C 2090 next Y next X if C2=1 then 2530 goto 3080 2120 print "WHERE IS THE PIECE YOU WANT TO MOVE ";A$ input Y,X if X=-1 then stop if X<>10 then 2160 if C2=1 then 2370 gosub 1550 if L=1 then 2120 return 2160 if B(X,Y)>0 then 2180 print "THERE IS NO SUCH PIECE ";A$ goto 2120 2180 if X>8 then 2120 if X<1 then 2120 if Y>8 then 2120 if Y<1 then 2120 gosub 500 print "MOVE YOUR ";B$;" to WHERE" input D,C if C>8 then 2120 if C<1 then 2120 if D>8 then 2120 if D<1 then 2120 if B(C,D)>0 then 2260 gosub 1000 if L=0 then 2270 2260 print "THAT IS NOT A LEGAL MOVE ";A$ goto 2120 2270 gosub 1750 if L=1 then 2290 print "YOU CAN'T MOVE INTO CHECK ";A$ goto 2120 2290 print "ACCEPTED" if B(C,D)=0 then 2320 gosub 520 print "AND YOU CAPTURE MY ";B$ 2320 B(C,D)=B(X,Y) B(X,Y)=0 R=R+1 if B(C,D)<>6 then 2340 S5=1 2340 if B(C,D)<>2 then 2360 if Y<>8 then 2350 S8=1 2350 if Y<>1 then 2360 S1=1 2360 if C=1 then 2364 if C=8 then 2364 2362 return 2364 if B(C,D)<>1 then 2362 B(C,D)=5 print "AND PROMOTES TO QUEEN" goto 2362 2370 print "YOU CAN'T CASTLE OUT OF CHECK" goto 2120 PAGE * EVALUATION SUBROUTINE . This sub evaluates the perposed computer move by adding . points for moving closer to the players King, for . making progress twords castling and if the computer . can promote to a Queen. . 2380 if T5=1 then 2410 if X<>X3 then 2410 if X=C then 2410 if Y<=Y3 then 2400 if Y=8 then 2400 V3=V3+120 2400 if Y=>Y3 then 2410 if Y=1 then 2410 V3=V3+100 2410 G1=abs(C-X2)+abs(D-Y2) V3=V3+rnd/(640*G1) if B(C,D)<>-1 then 2460 if C=1 then 2450 if C<>8 then 2460 2450 V3=V3+ M(5) 2460 return PAGE * COMPUTER MOVE SUBROUTINE . This is the sub that analizes all of the possible computer . moves and picks the best one. . For every legal move it sets V5 to the value of that move . It then sees if it has a higher value than the  !best so far. . If so it saves the best value in V4, 'from' in X5,Y5 and . 'to' in C5,D5. . 2500 gosub 1840 C2=0 C3=0 if L=1 then 2520 C3=1 2520 gosub 1750 if L=1 then 2540 2530 print "I HAVE WON IN ";R;" MOVES ";A$ stop 2540 V4=-10000 V5=0 P9=0 for X6="1 to 8 for Y6=1 to 8 if B(X6,Y6)=>0 then 2700 for C6=1 to 8 for D6=1 to 8 if B(C6,D6)<0 then 2690 X=X6 Y=Y6 C=C6 D=D6 gosub 1000 if L=1 then 2690 P1=B(C6,D6) P2=B(X6,Y6) V5=0 if P1=0 then 2620 V5=M(P1) 2620 B(C6,D6)=P2 B(X6,Y6)=0 V3=0 gosub 1700 gosub #2380 V5=V5+V3 gosub 1850 if L=1 then 2640 B(C6,D6)=P1 B(X6,Y6)=P2 goto 2690 2640 P9=1 V6=0 gosub 4000 V5=V5+V6 B(C6,D6)=P1 B(X6,Y6)=P2 if V4=>V5 then 2690 V4=V5 X5=X6 Y5=Y6 C5=C6 D5=D6 2690 next D6 next C6 2700 next Y6 next X6 if P9=0 then 3070 gosub 5$50 if L=1 then 2890 print "I CASTLE" goto 3120 2890 X=X5 Y=Y5 C=C5 D=D5 gosub 500 print "I MOVE MY ";B$;" TO ";D;" , ";C if B(C,D)=0 then 3020 gosub 520 print "AND TAKE YOUR ";B$ 3020 B(C,D)=B(X,Y) B(X,Y)=0 if C=1 then 3024 if C<>8 then 3030 3024 if B(%C,D)<>-1 then 3030 B(C,D)=-5 print "AND I PROMOTE TO A QUEEN" 3030 if X5<>X3 then 3070 if T5=1 then 3050 if B(C,D)<>-6 then 3050 T5=1 3050 if T1=1 then 3060 if Y5<>1 then 3060 T1=1 3060 if T8=1 then 3070 if Y5<>8 then 3070 T8=1 3070 if P9<>0 then 3100 &if C3=1 then 3090 3080 print "IT'S A STALEMATE IN ";R;" MOVES" stop 3090 print "YOU HAVE WON IN ";R;" MOVES" stop 3100 gosub 1920 if L=1 then 3120 print "AND YOU ARE IN CHECK" C2=1 3120 return PAGE * DISPLAY THE BOARD SUBROUTINE . This is the sub that' displays the board. . It should be changed for the proper crt operation on . the users crt. . 3150 display 27;72;27;74 : rem HOME and ERASE for a VT100. X=8 3155 print X;" "; for Y=1 to 8 if B(X,Y)<>0 then 3170 print "I "; 3170 if B(X,Y)*K=>0 then 3(190 gosub 500 print "I ";C$;"*"; 3190 if B(X,Y)*K<=0 then 3210 gosub 500 print "I ";C$;" "; 3210 next Y print "I" X=X-1 if X>0 then 3155 print " 1 2 3 4 5 6 7 8" print print return PAGE * FIRST PLAYER LOOK AHEAD . This sub makes all the posib)le legal player moves (long game) . or all the legal player moves that capture a piece (short game) . It saves the value of the worst possible case in V6 and in turn . calls the second computer look ahead sub. . 4000 for X7=1 to 8 for Y7=1 to 8 if B(X7 *,Y7)<=0 then 4120 for C7=1 to 8 for D7=1 to 8 if B(C7,D7)>0 then 4110 if R<4 then 4035 if P8=1 then 4040 4035 if B(C7,D7)=0 then 4110 4040 X=X7 Y=Y7 C=C7 D=D7 gosub 1000 if L=1 then 4110 P3=B(C7,D7) P4=B(X7,Y7) B(C7,D7)=P4 B(X7,Y7)=0 gosub 1920 if L=0  +then 4100 V7=-10000 gosub 4400 if V7>-10000 then 4091 V7=0 4091 if P3=0 then 4095 V7=V7-M(-P3) 4095 if V7=>V6 then 4100 V6=V7 4100 B(C7,D7)=P3 B(X7,Y7)=P4 4110 next D7 next C7 4120 next Y7 next X7 return PAGE * SECOND COMPUTER MOVE LOOK AHEAD . This s ,ubs makes all the legal computer moves that capture . a player piece and saves the best value in V7. . This sub is called by the first player look ahead sub . and in turn calls the second player look ahead sub. . It also calls the evaluation subroutine -. . 4400 for X8=1 to 8 for Y8=1 to 8 if B(X8,Y8)=>0 then 4520 for C8=1 to 8 for D8=1 to 8 if B(C8,D8)<=0 then 4510 X=X8 Y=Y8 C=C8 D=D8 gosub 1000 if L=1 then 4510 P5=B(C8,D8) P6=B(X8,Y8) B(C8,D8)=P6 B(X8,Y8)=0 V3=0 gosub 1700 gosub 2380 V8=0 gosub 4800 . V8=V8+M(P5)+V3 if V8<=V7 then 4500 V7=V8 4500 B(C8,D8)=P5 B(X8,Y8)=P6 4510 next D8 next C8 4520 next Y8 next X8 return PAGE * SECOND PLAYER LOOK AHEAD SUBROUTINE . This sub checks all the legal player moves that end up in . a capture of a computer pi /ece. It returns the worst case . in V8. This sub is called by the second computer look ahead . sub. . 4800 for X9=1 to 8 for Y9=1 to 8 if B(X9,Y9)<=0 then 4890 for C9=1 to 8 for D9=1 to 8 if B(C9,D9)=>0 then 4880 X=X9 Y=Y9 C=C9 D=D9 gosub 1000 if L=10 then 4880 V9=-M(-B(C9,D9)) if V9=>V8 then 4880 V8=V9 4880 next D9 next C9 4890 next Y9 next X9 return base=$4200 stop END _O&WHAT IS YOUR NAME5 !^00@ 02!0H"DO YOU WANT TO BE W`HITE OR BLACK 50@x  40@O_0O_4O_6O_8O_:O_O_@O_B@ ENTER 1=LONG GAME, 0=SHORT GAME 5l=DXI@~45XI@~45XI@~4 5XI@~458XI@~45PXI@~45XIh@~45XI@~45F!PAWNROOK KNIGHTBISHOPQUEEN KI NG5'0@$ ^1B'2~ #0@  0B Ş' B5 0B &FHJLNH=LXI?4O_5(H''H=LXI?@4LXI@~00Fz5XH'H=LXIp?4F5H' H=LXI?4F@P5H'/H=LXI?4F@P4LXI@~0A2b5LLN.+HHJ.XI@~4d5XI@~45XI@~4,50XI@~4E5HXI@~45XI `@~45F&x D8H=LXI?0*@P4A'2bP'R=TXI?0*@P4A2bPVP& PPV1B'2~2~0@$wP4V510B '0@1B'2~0 8@E0B'0@P1B'2~0@h0B0' KN50B!'N5'0@|94&X&O_ZZ\\^,h6&`=XI?0섃'`=XI?04`=XI? 0'H(JLNH=LXI?0@섃.(`RTXP&TP&pLLN.HHJ.`=XI?45`=XI?45`=XI?4O_5`=XI?4 O_580&8`=XI?0섃'`=XI?04`=0XI?04`=XHI?0'H`JLNH=LXIx?0섃.(`RTP&TP&LLN.H  HJ.`=XI?45`=XI?45`=XI?4O_5`=XI? 4O_54O_P98P9H=LXI?0*@PPbbM'&M&h&r&&&l******BOARD  ERROR******5q~LT*@Pdd/R=TXI?0fH=LXI?0섓F'zHRM'& &)gd&  f'SKf& (F>d'9H' @/=LXI?0섃' Xf' RHM'   p& &)d & f'f &d'H' =LXI?0섃 'f'HR* @PfLT*@Pdfd 'kf/ad/ WOHR&tLT'B 0HR*@P&+HR/   HRfHhH `fRhhPfjP=L xXI?0섃'PP j.LT*@P& LT/TdL lLdTllP djH=PXI?0섃' }PPj.gH R*@P4LT*@P@P   'HHR*@P& 81HR/+HfR PhLT/ Ld2L hdmRfHhL T/ TdLTd Phfjf=dXI? 0섃'ffd dPPj. Phfjf=dXI?0  섃'offdd PPj.KHR*@ (P4LT*@P@P @&HR*@P/ XLT*@P/O_P p9P9P:' m KINGS SIDE OR QUEENS  SIDE (K/Q)5j 0@z0@1B'  Ҟ' K50B &8'n= XI?04n=XI? 04n=XI?0 0'sn=XI? H4O_5n=XI? `4O_5n=XI? x45n=XI? 45:<  'n=XI?0 4n=XI?0 'n=XI?4O_ 5n=XI?4O_5n=XI?4 5n=XI?485:>>O_P9P!YOU HAVE ALREADY MOhVED YOUR KING59 t!YOU HAVE ALREADY MOVED YOUR ROOK5p9E"THERE ARE OCUPIED SQUARES BETWEEN5o@9fpdrf=dXI?0섃'fndtf=dXI?0섃'(f`dvddr.@ffp.9H=LXI X?0xR=TXI?0pzR|T~H݀L݂R=TXI?4H=LXI?05H=LXI?4O_5|R~T܀H܂LH=LXI?4x5R=TXI?4z59`RvTHJLNH=LXI?0 0. P&LHLN.HHJ.`9ynRtTHJxLNH=LXI?0- P&LLN.HHJ.9HJLNH=LXI?0섃.bR݄T݆R= TXI?0섃/P & $P&ET8T.RR.PLLN.xHHJh.`@&mYy%WHERE IS THE PIECE YOU WANT TO MOVE 50@ h L HH&~H '@& P&9H=LXI?0섃/1THERE IS NO SUCH PIECE 5(0@ @H/@6H,,L/"XL,# MOVE YpOUR 50@ȍ to WHERE5   !T RR/R, T/T,R=TXI?0섃/ RP&3 THAT IS NOT A LEGAL MOVE 510@ * S%P&04 YOU CAN'T MOVE HINTO CHECK 5 0@ `   ACCEPTED5x  R=TXI?0섃 &- ZAND YOU CAPTURE MY 5 0@  ZR=TXI?4H=LXI?05H=LXI?4O_5>>R=TXI?0섃' :R=TXI?0섃'8L' h MOVES 5 80@   1 ~^O_\O_݊0݌ݎݐݒ܌=ӐHXI?0섃-}ݔ`ݖݘݚܔ=ӘXI?x0섃,5܌HܐLܔRܘTP&ܔ=XI?0ݜ܌=ӐXI?0ݞO_\ܜ& ܜXI@~0\ܔ=ӘXI?4 5܌=ӐXI?4O_5O_݈\ӈ\ P&1ܔ=ӘXI?84ܜ5܌=ӐXI?4Pܞ5]݊O_Zhe\Z\ܔ=ӘXI?4ܜ5܌=ӐXI?4ܞ5^\-\^܌ݠܐݢܔݤܘݦܘݘ. ܔݔ.ܐݐ.]܌݌.E܊&P& I CASTLE5 -QܠHܢ(LܤRܦTS I MOVE@ MY 50@ TOX 5T  , 5pRR=TXI?0섃&( aAND TAKE YOUR 50@fR=TXI?4H=LXI?05H=LXI?4O_5R& R'VR=TXI?0섃'>R=TXI?405AND I PROMOTHE TO A QUEEN5ܠ``'Y4&R=TX xI?0섃'40&ܢ'06&ܢ'6'vX&8 IT'S A STALEMATE IN 5W>s MOVES5D~YOU HAVE WON IN  5#>? MOVES58~ P&' PAND YOU ARE IN CHECK5h@9HJH\Hˍ 5[LNH=LXI?0섃'%I 5l'H=LXI?00F؃-%I 5:0@3*5(H  (=LXI?00F.@%BI 50@X 5LLpN.@}I5HHH/]$  1 2 3 4 5 6  7 85VUR9ݨݪݬݮܨ=XI?0섃.bݰ !ݲݴݶܰ=ӴXI?0섃/>, 0D&ܰ=ӴXI?0H섃&ܨHܬLܰRܴ`TP&ܰ=ӴXIx?0ݸܨ=ӬXI?0ݺܰ=ӴXI?4ܺ5ܨ=ӬXI?4O_5P&Dݼܼ "/O_ݼܸ&ܸ@PXI@~0@PӼݼܼZ-ܼZܰ=ӴXI?4 ܸ5ܨ=ӬXI?485ܴݴ.ܰPݰ.ܬݬ.hxܨݨ.`9ݾܾ=XI?0섃- #Ɔ=XI?0.ܾHLRTXP&Ɔ=XI?0ܾ=XI?0Ɔ=XI?45(ܾ=XI?4O_5@O_݈O_XI@~X0ӈғ.ݼpƆ=XI?45ܾ $=XI?45ʓ.Ɠ.“.ܾݾ.9Ԇ=XI?0섃.=XI?0섃-M0HLRTP&H0܆=XI?0@PX %`I@~0@P-x..uؓ.Eԓ.-9~~0B"9O_444A '-&lw$8 '4 '0m'A0%= "9XIXIXI%+%' %!j 'm&Ħ'2b5 m'@P2a9'2gn2 & 8e_O9%o9Z& &o P 9 "' ,'90" h 9 " '0" ' 0Z&9o9? > ƀ&'\0   &$ ϧ & 0o "&~$]'Z 0B9 4 " &$"L0o$"5 "$9ܖ&&ͦ' '!&"9 ~& !(    4&m'!@0lo5ƀ'Z& !X' ]'{Z 9  4M+!pg5 -5@P0oo! 'l'%l '%!l 荋d%l d}! %l pli2b94!4_*\@`ab*\@ (!`cb42|ooahf=b"f=aa$lhe'=aa$l"g'e= O+& 5m'@"0P2e9mb'cacSCla&l&"H+52e'22bn9"`44_*\A@`442"xA&M& 'Q!2hnm"* ``$jlm+ Lhi+"&oo$  )"iidfj&f$@P2"f9HXIXI6DV9"'b9b9_m'0\ O9b]#'i &c0Z ƀo"9# ''0Z&'9b'4#8M5'44#.L' b'M'#P"m',J'0 ]'"$  b]#h' '0Z 'o52bnƀ #b  M'0Z&)'*#'0')9O 'o  # &M&99  Page 2 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (INTERNAL MEMORY ASSIGNMENT "2. * M-6809 BASIC COMPILER "3. * "4. * Last edit : "5. * 1.4:6 18-JUL-82 PRINT IN 'IF THEN ELSE' "6. * 1.4:5 18-JUL-82 POSITION USAGE AND INIT, ADD CHAIN "7. * 1.4:4 V4 14-JUL-82 TRANSFER ADDRESS "8. * 1.4:3 13-JUL-82 PREAMBLE ADDRESS "9. * 1.4:1 V3 09-JUL-82 PRINT BUFFER USAGE !10. * 29-JUN-82 'POS', 'RND' !11. * V2 24-APR-82 0001 13. VER EQU 1 0004 14. REV EQU 4 0006  15. EDIT EQU 6 !17. * INTERNAL MEMORY ASSIGNMENTS !18. . 0000 19. CODEAD RMB 2 ACTUAL ADDRESS OF START OF CO 0002 20. SYMPOS RMB 2 STRING SRCH BEG ADDR 0004 21. DATCNT RMB 2 STORAGE ALLOCATION PRT 0006 22. OBJCNT RMB 2 OBJECT CODE LOCATION PTR 0008 23. INDFLG RMB 1 INDEXED DEST. FLG 0009 24. OUTPTR RMB 2 000B 25. STRSLT RMB 1 STRING RESULT FLAG 000C 26. STRTYP RMB 1 STRING TYPE CODE 000D 27. BUFEMT RMB 1 STR BUFFER EMPTY FLAG 000E 28. RESFLG RMB 1 000F 29. PASS RMB 1 COMPILE PASS FLAG 0010 30. LNTEND RMB 2 PTR TO END OF LINE # TABLE 0012 31. BUFPTR RMB 2 PTR TO CURRENT POS IN INPUT B 0014 32. VSIZE RMB 1 VAR. WORD SIZE 0015 33. CSIZE RMB 1 SUBCR SIZE 0016 34. STBFLG RMB 1 0017 35. PAGE RMB 1 0018 36. LINE RMB 1 0019 37. LOOKIE RMB 2 LOOK AHEAD POINTER 001B 38. LSTLIN RMB 2 VAL OF LAST LINE # PROCESSED 001D 39. COUNT RMB 1 TEMP 001E 40. OPTION RMB 1 COMPILE OPTIONS 001F 41. LINLIM RMB 2 0021 42. SYMLIM RMB 2 0023 43. NUM RMB 2 TEMP TO BUILD NUMBERS 0025 44. SYMBEG RMB 2 PTR TO BEG OF SYMBOL IN INPUT 0027 45. KEYPTR RMB 2 PTR TO POS IN KEYWORD TABLE 0029 46. TBLBEG RMB 2 002B 47. TBLEND RMB 2 002D 48. VAL RMB 2 002F 49. SYMEND RMB 2 0031 50. PNDFLG RMB 1 0032 51. LINFLG RMB 1 0033 52. REGFLG RMB 1 0034 53. VSPTR RMB 2 0036 54. DEST RMB 2 Page 3 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (INTERNAL MEMORY ASSI GNMENT 0038 55. OBJPTR RMB 2 PTR TO OBJ OUT BUFFER 003A 56. FORSP RMB 2 FOR-NEXT STACK PTR 003C 57. FORSYM RMB 2 FOR VAR. 003E 58. ERRCNT RMB 1 003F 59. BTMP RMB 1 0040 60. XTMP RMB 2 0042 61. XTMP2 RMB 2 0044 62. IF$P T RMB 2 PENDING IF POINTER 0046 63. UNIF$PT RMB 2 NEXT IF POINTER 0048 64. IF$FLG RMB 1 PENDING IF FLAG 0049 65. FOR$NXT RMB 1 FOR NEXT LEVEL 004A 66. IOXTMP RMB 2 I/O XREG TMP 004C 67. OBJTOT RMB 2 004E 68. VARTOT RMB 2  0050 69. TA RMB 2 TRANSFER ADDRESS !70. . !71. . RUN TIME SUBR FLAGS !72. . 0052 73. OUTFLG RMB 1 0053 74. INFLG RMB 1 0054 75. STRFLG RMB 1 0055 76. FUNFLG RMB 1 0056 77. DIVFLG RMB 1 0057 78. MULFLG RMB 1 0058 79.  XSTFLG RMB 1 0059 80. DSKFLG RMB 1 !81. . !82. . RUN TIME SUBR ADDRS !83. . 005A 84. OUTADR RMB 2 005C 85. INADR RMB 2 005E 86. STRADR RMB 2 0060 87. FUNADR RMB 2 0062 88. DIVADR RMB 2 0064 89. MULADR RMB 2 0066 90 . XSTADR RMB 2 0068 91. DSKADR RMB 2 !92. . !93. . RUN TIME BUFFER ADDRS !94. . 006A 95. STRBUF RMB 2 STRING BUFFER ADDR 006C 96. BUFADR RMB 2 I/O BUFFER ADDR 006E 97. OPCODE RMB 1 006F 98. ADDR RMB 1 OPERAND FOR ABOVE 0070 99. EXTADR RMB 2 LOCATION FOR 4 BYTE CODES 0072 100. IOSAVX RMB 2 0074 101. TEMP RMB 2 0076 102. OBJADR RMB 2 OBJ OUT START ADDR 0078 103. BYTCNT RMB 1 OBJ OUT BYTE CNT 0079 104. OBJBUF RMB 24 OBJ CODE OUT BUFFER 0091 105. ARRTYP RMB 1 0092 106. DSIZE RMB 1 0093 107. DISFLG RMB 1 DISPLAY COMMAND FLAG 0094 108. STACK$ RMB 2 TOP OF STACK ADDERESS 0096 109. OBJFLG RMB 1 OBJECT CODE ? Page 4 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (INTERNAL MEMORY ASSIGNMENT 0097 110. SRCFCB RMB 321 SOURCE FCB 01D8 111. OBJFCB RMB 321 OBJECT FCB 112. . 113. . TABLES AND STACKS 114. . 0319 115. IFTABL RMB 2*200 IF TABLE 04A8 116. FORLIM EQU *-1 04A9 117. RMB 16*4 FOR/NEXT STACK 04E8 118. FORSTK EQU *-1 04E9 119. RMB 24*3 0530 120. VARSTK EQU *-1 OPERAND STACK 0531 121. LINBUF RMB 81 SOURCE INPUT BUFFER 0582 122. OUTBUF RMB 90 LISTING OUT BUFFER 05DC 123. LINTAB RMB 700*4 10CC 124. MIDPNT EQU * 10CC 125. RMB 150*6 SYMBOL TABLE 1450 126. ENDPNT EQU * Page 76 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (ABLIB2 3608. * ALL COMPILE TIME (IOPACK) 3609. . AND ALL RUN TIME (LINKED) 3610. . ROUTINES FOR: 3611. . 3612. . FLEX - ABASIC 3613. . 3614. . 08-MAR-81 BY HARRY B. FAIR 3615. . 3616. . LAST EDIT 18-JUL-82 3617. . 24-APR-82 3618. . 3619. . TEMP STORAGE DEFINITIONS FOR RUNTIME 3620. . 0010 3621. FCBTMP EQU $10 0012 3622. ERRADR EQU $12 0014 3623. ERRTYP EQU $14 0016 3624. EOFADD EQU $16 0018 3625. DSKFLG2 EQU $18 0019 3626. RECNUM EQU $19 NUMBER OF RECORDS FOR RANDOM 001B 3627. RECLEN EQU $1B LENGTH OF THE RECORDS 0020 3628. XSAVE EQU $20 0022 3629. BUFPTR2 EQU $22 0024 3630. BUFPOS EQU $24 CURRENT POSITION OF BUFFER 0026 3631. ZONE EQU $26 CURRENT TAB POSITION 0027 3632. STRPTR EQU $27 0029 3633. STRSAV EQU $29 002B 3634. OVERFL EQU $2B 002B 3635. OBJLEN  EQU $2B 002C 3636. TSTLEN EQU $2C 002D 3637. XTEMP EQU $2D 002F 3638. POSCNT EQU $2F Page 77 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (FLEX EQUATES D403 3640. RFLEX EQU $D403 FMS CLOSE D406 3641. FLEX EQU $D406 FMS C ALL CC11 3642. LASTERM EQU $CC11 LAST TERMINATOR CHR CC14 3643. FLEXBUF EQU $CC14 FLEX BUFFER POINTER CD03 3644. WARMS EQU $CD03 CD15 3645. GETCHR EQU $CD15 CD18 3646. PUTCHR$ EQU $CD18 CD24 3647. PCRLF EQU $CD24 CD2D 3648. GETFIL EQU $CD2D CD3F 3649. RPTERR EQU $CD3F CD33 3650. SETEXT EQU $CD33 CC18 3651. PREVCH EQU $CC18 CC14 3652. FLXPT EQU $CC14 ADDERESS OF FLEX BUFFER POINTER 0001 3654. OPNR EQU 1 0002 3655. OPNW EQU 2 0003 3656. OPNU EQU 3 0004 3657. CLSF EQU 4 0005 3658. RWDF EQU 5 000C 3659. DELF EQU 12 Page 81 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME OUTPUT SUBROUTINE IMAGES 30FC 00 00 00 00 00 3788. ZLDX1 FCB 0,0,0,0,0 TEMP FOR LEAX XXXX,U RTS 3101 3789. BEG1 EQU * 3790. * 3791. . PUT SPACE IN I/O BUFFER 3101 86 20 3792. ZOUTS LDA #$20 3793. * 3794. . PUT CHR IN I/O BUFFER 3103 34 10 3795. ZOUT PSHS X 3105 9E 22 3796. LDX BUFPTR2 3107 A7 84 3797. STA 0,X 3109 0C 26 3798. INC ZONE count the chr in the tab position 310B 96 24 3799. LDA BUFPOS 310D 81 80 3800. CMPA #128 BUFFER LIMIT 310F 22 03 3114 3801. BHI ZOUT2 3111 4C 3802. INCA 3112 30 01 3803. LEAX 1,X 3114 6F 84 3804. ZOUT2 CLR 0,X MARK END OF BUFFER 3116 97 24 3805. STA BUFPOS 3118 9F 22 3806. STX BUFPTR2 311A 35 90 3807. PULS X,PC 3808. * 3809. . INITIALIZE I/O 311C 8D DE 30FC 3810. ZINZIO BSR ZLDX1 311E 9F 22 3811. STX BUFPTR2 3120 0F 24 3812. CLR BUFPOS 3122 39 3813. RTS 3814. * 3815. . SKIP ZONE 3123 8D DC 3101 3816. ZSKPZ2 BSR ZOUTS 3125 96 26 3817. ZSKPZ LDA ZONE 3127 84 07 3818. ANDA #7 3129 81 01 3819. CMPA #1 312B 26 F6 3123 3820. BNE ZSKPZ2 3821. * 3822. . PRINT BUFFER - NO CR/LF 312D 8D CD 30FC 3823. ZENDBN BSR ZLDX1 312F A6 80 3824. ZEBN2 LDA ,X+ 3131 27 E9 311C 3825. BEQ ZINZIO 3133 8D 0B 3140 3826. BSR PRCHR 3135 20 F8 312F 3827. BRA ZEBN2  3828. * 3829. . TAB FUNCTION 3137 8D C8 3101 3830. ZTAB2 BSR ZOUTS 3139 D1 26 3831. ZTAB CMPB ZONE  313B 22 FA 3137 3832. BHI ZTAB2  313D 39 3833. RTS  313E 20 C3 3103 3834. ZGOUT BRA ZOUT  3140 7E CD 18 3835. PRC HR JMP PUTCHR$ Page 82 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME OUTPUT SUBROUTINE IMAGES 3836. * 3837. . PRINT BUFFER + CR/LF 3143 8D E8 312D 3838. ZENDB BSR ZENDBN  3145 86 01 3839. LDA #1 3147 97 26 3840.  ! STA ZONE RESET THE ZONE # 3149 86 0D 3841. LDA #$0D 314B 8D F3 3140 3842. BSR PRCHR  314D 86 0A 3843. LDA #$0A  314F 20 EF 3140 3844. BRA PRCHR  3845. * 3846. . DISPLAY A NUMBER 3151 1F 98 3847. DISPNM "TFR B,A PUT THE CHR IN A-REG 3153 20 AE 3103 3848. BRA ZOUT AND DISPLAY IT 3849. * 3850. . PRINT STRING (DISK) 3155 0F 18 3851. ZPSTRD CLR DSKFLG2 3157 0C 18 3852. INC DSKFLG2 SET FOR DISK TYPE 3159 20 18 3173 3853. BRA ZP#RS1 3854. * 3855. . PRINT DIGIT 315B 34 02 3856. ZPRSUB PSHS A 315D A6 84 3857. LDA 0,X  315F 26 04 3165 3858. BNE ZPRS2  3161 6D 01 3859. TST 1,X  3163 27 06 316B 3860. BEQ ZPRS3  3165 8A 30 3861. ZPRS2 ORA #$3$0  3167 8D 9A 3103 3862. BSR ZOUT  3169 6C 01 3863. INC 1,X  316B 6F 84 3864. ZPRS3 CLR 0,X  316D 35 82 3865. PULS A,PC  3866. * 3867. . PRINT LITERAL 316F C6 80 3868. ZPRLIT LDB #128  3869. * 3870. . PRINT ST%RING 3171 0F 18 3871. ZPRS CLR DSKFLG2 SET NON-DISK 3173 A6 80 3872. ZPRS1 LDA ,X+  3175 27 05 317C 3873. BEQ ZPRST1  3177 8D C5 313E 3874. BSR ZGOUT 3179 5A 3875. DECB 317A 26 F7 3173 3876. BNE ZPRS1  317C 0D 18 387&7. ZPRST1 TST DSKFLG2 317E 27 09 3189 3878. BEQ ZPRST2  3180 5D 3879. TSTB 3181 27 06 3189 3880. BEQ ZPRST2  3183 17 FF 7B 3101 3881. LBSR ZOUTS FILL STRING WITH SPACES 3186 5A 3882. DECB 3187 20 F3 317C 3883. BRA ZP'RST1  3189 39 3884. ZPRST2 RTS  Page 83 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME OUTPUT SUBROUTINE IMAGES 3885. * 3886. . PRINT NUMBER (DISK) 318A 0F 18 3887. ZPNUMD CLR DSKFLG2 318C 0C 18 3888. INC DSKFLG2 (318E 20 02 3192 3889. BRA ZPRN1  3890. * 3891. . PRINT NUMBER 3190 0F 18 3892. ZPRN CLR DSKFLG2 SET NON-DISK 3192 34 02 3893. ZPRN1 PSHS A 3194 4D 3894. TSTA 3195 2B 07 319E 3895. BMI ZPRN1A  3197 17 FF 67 3101 3)896. LBSR ZOUTS IF POSITIVE LEAVE ROOM FOR SI 319A 35 02 3897. PULS A 319C 20 0A 31A8 3898. BRA ZPRN2  319E 86 2D 3899. ZPRN1A LDA #'-' 31A0 8D 9C 313E 3900. BSR ZGOUT  31A2 35 02 3901. PULS A 31A4 40 3902. NEGA 31A *5 50 3903. NEGB 31A6 82 00 3904. SBCA #0 31A8 30 E3 3905. ZPRN2 LEAX ,--S  31AA 6F 84 3906. CLR 0,X  31AC 6F 01 3907. CLR 1,X  31AE 0D 18 3908. TST DSKFLG2 31B0 27 02 31B4 3909. BEQ ZPRN3  31B2 6C 01 3910. INC 1 +,X SET FOR LEADING ZEROS ON DISK 31B4 83 27 10 3911. ZPRN3 SUBD #10000  31B7 25 04 31BD 3912. BCS ZPRN4  31B9 6C 84 3913. INC 0,X  31BB 20 F7 31B4 3914. BRA ZPRN3  31BD C3 27 10 3915. ZPRN4 ADDD #10000  31C0 8D 99 315B ,3916. BSR ZPRSUB  31C2 83 03 E8 3917. ZPRN5 SUBD #1000  31C5 25 04 31CB 3918. BCS ZPRN6  31C7 6C 84 3919. INC 0,X  31C9 20 F7 31C2 3920. BRA ZPRN5  31CB C3 03 E8 3921. ZPRN6 ADDD #1000  31CE 8D 8B 315B 3922. BSR ZPR-SUB  31D0 83 00 64 3923. ZPRN7 SUBD #100  31D3 25 04 31D9 3924. BCS ZPRN8  31D5 6C 84 3925. INC 0,X  31D7 20 F7 31D0 3926. BRA ZPRN7  31D9 CB 64 3927. ZPRN8 ADDB #100  31DB 17 FF 7D 315B 3928. LBSR ZPRSUB  31DE C0 0.A 3929. ZPRN9 SUBB #10  31E0 25 04 31E6 3930. BCS ZPRN10  31E2 6C 84 3931. INC 0,X  31E4 20 F8 31DE 3932. BRA ZPRN9  31E6 CB 0A 3933. ZPRN10 ADDB #10  31E8 17 FF 70 315B 3934. LBSR ZPRSUB  31EB E7 84 3935. STB 0,X / 31ED 6C 01 3936. INC 1,X  31EF 17 FF 69 315B 3937. LBSR ZPRSUB  31F2 32 62 3938. LEAS 2,S  31F4 39 3939. RTS  Page 84 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME OUTPUT SUBROUTINE IMAGES 3101 3940. OUTLOC EQ0U BEG1 00F4 3941. OUTLEN EQU *-BEG1 Page 85 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME INPUT SUBROUTINE IMAGES 31F5 3943. BEG2 EQU * 3944. * INPUT RESET BUFPTR2 31F5 00 00 00 00 3945. ZINRES FCB 0,0,0,0 SAVE FOUR 1BYTES FOR LEAX xxxx 31F9 9F 22 3946. STX BUFPTR2 31FB 39 3947. RTS  3948. * INPUT NUMBER FROM BUFFER 31FC 4F 3949. ZRNUM CLRA 31FD 5F 3950. CLRB 31FE 34 06 3951. PSHS D 3200 34 06 3952. PSHS D 3202 86 05 3953. LDA 2#5 3204 34 02 3954. PSHS A DIGIT COUNT 3206 1F 41 3955. TFR S,X  3956. * DELETE LEADING SPCES 3208 17 00 83 328E 3957. ZRNUM1 LBSR ZNCHR  320B 81 20 3958. CMPA #$20  320D 27 F9 3208 3959. BEQ ZRNUM1  320F 81 2D 3960. 3 CMPA #'-' NEG SIGN? 3211 26 12 3225 3961. BNE DIGENT  3213 6C 04 3962. INC 4,X BUMP SIGN FLAG 3215 8D 77 328E 3963. ZRNUM2 BSR ZNCHR  3217 24 38 3251 3964. BCC ZRNUM4  3219 81 20 3965. CMPA #$20  321B 27 34 3251 3966. 4 BEQ ZRNUM4  321D 81 0D 3967. CMPA #$0D  321F 27 30 3251 3968. BEQ ZRNUM4  3221 6D 84 3969. TST 0,X  3223 27 41 3266 3970. BEQ ZNMERR TO MANY DIGITS 3971. * CHECK DIGIT 3225 80 30 3972. DIGENT SUBA #$30  3227 25 3D 3 5266 3973. BCS ZNMERR  3229 81 09 3974. CMPA #9 322B 22 39 3266 3975. BHI ZNMERR  3976. * MULT TEMP*10 AND ADD DIGIT 322D A7 01 3977. STA 1,X  322F EC 02 3978. LDD 2,X  3231 58 3979. ASLB 3232 49 3980. ROLA 3233 E6D 02 3981. STD 2,X  3235 58 3982. ASLB 3236 49 3983. ROLA 3237 58 3984. ASLB 3238 49 3985. ROLA 3239 25 2B 3266 3986. BCS ZNMERR OVERFLOW 323B E3 02 3987. ADDD 2,X  323D 25 27 3266 3988. BCS ZNMERR  323F EB 01 73989. ADDB 1,X  3241 89 00 3990. ADCA #0 3243 25 21 3266 3991. BCS ZNMERR  3245 ED 02 3992. STD 2,X  3247 6A 84 3993. DEC 0,X  3249 0D 18 3994. TST DSKFLG2 324B 27 C8 3215 3995. BEQ ZRNUM2 NOT DISK GET ANOTHER 324D 86D 84 3996. TST 0,X  324F 26 C4 3215 3997. BNE ZRNUM2 DISK & NOT DONE YET Page 86 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME INPUT SUBROUTINE IMAGES 3998. * NORMAL CLEAN-UP 3251 A6 E4 3999. ZRNUM4 LDA 0,S  3253 981 05 4000. CMPA #5 3255 27 0F 3266 4001. BEQ ZNMERR  3257 32 62 4002. LEAS 2,S  3259 35 06 4003. PULS A,B  325B 6D 04 4004. TST 4,X CHECK SIGN FLAG 325D 27 04 3263 4005. BEQ ZRNUM5  325F 40 4006. NEGA MAKE NEG 3260 :50 4007. NEGB 3261 82 00 4008. SBCA #0 3263 32 61 4009. ZRNUM5 LEAS 1,S  3265 39 4010. RTS  4011. *ERROR CLEAN-UP 3266 9E 12 4012. ZNMERR LDX ERRADR  3268 27 08 3272 4013. BEQ NOTRAP  326A 86 12 4014. LDA #18  3;26C 97 14 4015. STA ERRTYP  326E 32 67 4016. LEAS 7,S CLEANUP STACK 3270 6E 84 4017. JMP 0,X  3272 32 65 4018. NOTRAP LEAS 5,S  3274 5F 4019. CLRB 3275 4F 4020. CLRA 3276 39 4021. RTS  4022. * MOVE STRING FROM BUFF RTS  4037. * ROUTINE TO GET CHAR FROM BUFFER 328E 9F 20 4038. ZNCHR STX XSAVE  3290 9E 22 4039. LDX BUFPTR2 3292 A6 84 4040. LDA 0,X  3294 27 0B 32A1 4041. BEQ ZNCHR2  3296 81 2C 4042. CMPA #',' 3298 27 05 329F 4043.  ?BEQ ZNCHR1  329A 8D 03 329F 4044. BSR ZNCHR1  329C 1A 01 4045. ORCC #$01  329E 39 4046. RTS  329F 30 01 4047. ZNCHR1 LEAX 1,X BUMP PTR 32A1 9F 22 4048. ZNCHR2 STX BUFPTR2 32A3 9E 20 4049. LDX XSAVE  32A5 1C FE 4050. @ANDCC #$FE  32A7 39 4051. RTS  Page 87 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME INPUT SUBROUTINE IMAGES 4052. * READ STRING FROM DISK BUFFER 32A8 4053. ZRSTRD EQU * 32A8 9F 20 4054. ZRSTD2 STX XSAVE  32AA 9E 22A 4055. LDX BUFPTR2 32AC A6 84 4056. LDA 0,X  32AE 81 0D 4057. CMPA #$D  32B0 27 10 32C2 4058. BEQ ZRSTD4  32B2 30 01 4059. LEAX 1,X  32B4 9F 22 4060. STX BUFPTR2 32B6 9E 20 4061. LDX XSAVE  32B8 A7 84 4062. STA 0,X B 32BA 27 05 32C1 4063. BEQ ZRSTD3  32BC 30 01 4064. LEAX 1,X  32BE 5A 4065. DECB 32BF 26 E7 32A8 4066. BNE ZRSTD2  32C1 39 4067. ZRSTD3 RTS  32C2 8D DD 32A1 4068. ZRSTD4 BSR ZNCHR2  32C4 6F 84 4069. CLR 0,X  32C6C 39 4070. RTS  4071. * READ TERMINAL INPUT LINE 4072. * READ INPUT BUFFER 32C7 86 3F 4073. ZRDLIN LDA #'?' 32C9 BD CD 18 4074. JSR PUTCHR$ 32CC 86 20 4075. LDA #' ' 32CE BD CD 18 4076. JSR PUTCHR$ 4077. * READ INPUT BUFFERD 32D1 8D 3E 3311 4078. ZRDBUF BSR ZLDX2 GET BUFFER ADDERES 32D3 C6 80 4079. LDB #128 SET FOR 128 CHRS MAX 32D5 BD CD 15 4080. ZRBUF2 JSR GETCHR GET A CHR 32D8 81 0F 4081. CMPA #$0F BACKSPACE ? 32DA 26 13 32EF 4082. BNE CHKDEEL 32DC C1 80 4083. CMPB #128 32DE 27 F1 32D1 4084. BEQ ZRDBUF 32E0 5C 4085. INCB 32E1 30 1F 4086. LEAX -1,X 32E3 86 0F 4087. LDA #$0F ECHO A BS 32E5 BD CD 18 4088. JSR PUTCHR$ 32E8 86 20 4089. LDA #$20 AND A SPACE 32EA BDF CD 18 4090. JSR PUTCHR$ 32ED 20 E6 32D5 4091. BRA ZRBUF2 AND GET ANOTHER CHR 32EF 81 18 4092. CHKDEL CMPA #$18 IS IT A DELETE 32F1 26 05 32F8 4093. BNE ZRBUF4 32F3 BD CD 24 4094. JSR PCRLF 32F6 20 CF 32C7 4095. BRA ZRDLIN G32F8 A7 80 4096. ZRBUF4 STA 0,X+ 32FA 81 0D 4097. CMPA #$0D EOL ? 32FC 26 0D 330B 4098. BNE ZRBUF5 32FE 30 1F 4099. LEAX -1,X 3300 6F 84 4100. CLR 0,X MARK EOL 3302 9F 22 4101. STX BUFPTR2 3304 86 01 4102. LDA #$01 3306  H97 26 4103. STA ZONE 3308 7E CD 24 4104. JMP PCRLF CLEANUP AND RETURN 330B 5D 4105. ZRBUF5 TSTB 330C 27 C7 32D5 4106. BEQ ZRBUF2 Page 88 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME INPUT SUBROUTINE IMAGES 330E 5A  I4107. DECB 330F 20 C4 32D5 4108. BRA ZRBUF2 3311 4109. ZLDX2 EQU * 31F9 4110. INLOC EQU BEG2+4 0080 4111. INLEN1 EQU $80 0098 4112. INLEN2 EQU *-BEG2-$80-4 Page 89 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (DISK RUN TIJME I/O ROUTINES 3311 4114. BEG3 EQU * 4115. * 4116. . ROUTINES ARE ENTERED WITH THE XR POINTING 4117. . TO THE FILE'S FCB ADDR EXCEPT FOR AND 4118. . IN WHICH CASE THE XR IS POINTING TO 4119. . THE FILE NAME STRING, THKE FCB ADDERESS 4120. . IS STORED IN . 4121. . OPEN FILE SUBR. 4122. . 4123. . ENTER WITH: FCB ADDR IN 4124. . XR > FILE NAME STRING 4125. . 4126. . OPENS FILE FOR READ OR RANDOM IF IT EXISTS 4127. . OTHERWISE ILT'S OPENED FOR WRITE 3311 8D 60 3373 4128. ZOPEN BSR FILNAM GET FILENAME IN FCB 3313 C6 02 4129. ZOPEN1 LDB #OPNW OPEN-WRITE CODE 3315 9E 10 4130. LDX FCBTMP GET FCB ADDR IN XR 3317 8D 2A 3343 4131. BSR DSKOP TRY TO OPEN 3319 2M7 27 3342 4132. BEQ RET2 IF OK WE'RE DONE 331B C6 03 4133. LDB #OPNU 331D 20 08 3327 4134. BRA FILOPR TRY TO OPEN IT FOR UPDATE THEN 4135. * 4136. . CLOSE FILE SUBR. 4137. . CLOSES A READ, WRITE OR RANDOM FILE 4138. . ENTER WNITH: FCB ADDR IN XR 331F 9F 10 4139. ZCLOSE STX FCBTMP MAKE SURE FCBTMP SET 3321 A6 02 4140. LDA 2,X HAS THE FILE EVER BEEN OPENED 3323 27 1D 3342 4141. BEQ RET2 3325 C6 04 4142. LDB #CLSF GET CODE AND FALL THROUGH TO FILOPR 4143O. * 4144. . DOS INTERFACE/ERROR DETECTION/RECOVERY 4145. . SUBROUTINES 4146. . GENERAL DISK OP CALL WITH ERROR DETECT 3327 9E 10 4147. FILOPR LDX FCBTMP GET FCB ADDR 3329 8D 18 3343 4148. FILOP2 BSR DSKOP DO IT 332B 6D 01 4149.P TST 1,X  332D 27 13 3342 4150. BEQ RET2 332F E6 01 4151. LDB 1,X 3331 C1 08 4152. CMPB #8 3333 26 13 3348 4153. BNE FILERR 3335 17 00 F8 3430 4154. LBSR ZLDX0 3338 9F 22 4155. STX BUFPTR2 333A 9E 16 4156. LDX EOFADD 3Q33C 27 0A 3348 4157. BEQ FILERR NO EOF ADDR 333E 32 64 4158. LEAS 4,S 3340 6E 84 4159. JMP 0,X GO TO EOF TRAP ADDERESS 3342 39 4160. RET2 RTS COMMON RETURN POINT Page 90 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (DISK RUN R TIME I/O ROUTINES 4161. * CALL DFM SUBR 3343 E7 84 4162. DSKOP STB 0,X 3345 7E D4 06 4163. JMP FLEX 4165. * ERROR RECOVERY - SAVE ERROR TYPE, RESTORE 4166. * STACK AND JUMP TO ERROR ADDERESS IF ANY. 3348 9E 10 4167. FILERR LDX S FCBTMP 334A E6 01 4168. LDB 1,X GET ERROR TYPE 334C D7 14 4169. STB ERRTYP SAVE IT 334E 32 62 4170. LEAS 2,S CLEAN UP STACK 3350 9E 12 4171. LDX ERRADR CHECK FOR ERROR TRAP 3352 27 02 3356 4172. BEQ FILER2 3354 6E 84 4173. T JMP 0,X 3356 9E 10 4174. FILER2 LDX FCBTMP 3358 BD CD 3F 4175. JSR RPTERR 335B 7E CD 03 4176. JMP WARMS 4177. * 4178. . 4179. . RESTORE FILE (REWIND) 4180. . CLOSES FILE AND RE-OPENS FOR READ 4181. . ENTER W/XR > FCB ADDR U335E 8D BF 331F 4182. ZREST BSR ZCLOSE CLOSE IT 3360 20 B1 3313 4183. BRA ZOPEN1 OPEN THE FILE FOR READ 4184. * 4185. . 4186. . SCRATCH FILE 4187. . DELETES FILE AND RE-OPENS FOR WRITE 4188. . ENTER W/ XR > FCB ADDR 3362 8DV BB 331F 4189. ZSCR BSR ZCLOSE CLOSE IT PROPERLY 3364 8D 09 336F 4190. BSR DELETE KILL IT 3366 20 AB 3313 4191. BRA ZOPEN1 OPEN FILE FOR WRITE 4192. * 4193. . 4194. . KILL FILE ROUTINE 4195. . DELETE FILE FROM DISK 4196.W . ENTER WITH: FCB ADDR IN FCBTMP 4197. . XR > FILE NAME STRING 3368 CC C8 40 4198. ZKILL LDD #$C840 GET SYS FCB ADDR 336B DD 10 4199. STD FCBTMP AND SAVE IT 336D 8D 04 3373 4200. BSR FILNAM THEN GET THE NAME 336F C6 0C 4201. DXELETE LDB #DELF CODE FOR DELETE FILE 3371 20 B4 3327 4202. BRA FILOPR 4203. * 4204. . 4205. . SUBR TO PUT FILE NAME STRING IN FCB 3373 BF CC 14 4206. FILNAM STX FLXPT 3376 9E 10 4207. LDX FCBTMP 3378 BD CD 2D 4208. JSR GETYFIL 337B 25 CB 3348 4209. BCS FILERR 337D 86 01 4210. LDA #$01 337F 7E CD 33 4211. JMP SETEXT Page 91 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (DISK RUN TIME I/O ROUTINES 4212. * 4213. . 4214. . RECORD READ ROUTINE - ZREAD A RECORD FROM 4215. . FILE SPECIFIED IN FCB TO INPUT BUFFER 4216. . ENTER W/FCB ADDR IN XR 3382 9F 10 4217. ZRECRD STX FCBTMP 3384 17 00 A9 3430 4218. LBSR ZLDX0 3387 10 8E 00 80 4219. LDY #128 SET MAX CHRS TO READ 338B 9F 22[ 4220. ZREAD2 STX BUFPTR2 338D 5F 4221. CLRB 338E 8D 97 3327 4222. BSR FILOPR DO IT 3390 9E 22 4223. LDX BUFPTR2 GET POINTER 3392 A7 80 4224. STA ,X+ SAVE THE BYTE 3394 9F 22 4225. STX BUFPTR2 3396 31 3F 4226. LEAY -1,Y 3 \398 27 04 339E 4227. BEQ ZREAD3A EXIT IF MAX REACHED 339A 81 0D 4228. CMPA #$D END OF RECORD? 339C 26 ED 338B 4229. BNE ZREAD2 339E 6F 84 4230. ZREAD3A CLR 0,X MARK EOL 33A0 39 4231. RTS 4232. * 4233. . 4234. . WRITE R ]ECORD ON FILE SPECIFIED BY FCB. 4235. . ENTER W/FCB ADDR IN FCBTMP 4236. . WRITES I/O BUFFER ON FILE 33A1 9E 22 4237. ZWRITE LDX BUFPTR2 33A3 86 0D 4238. LDA #$0D END OF RECORD BYTE 33A5 30 1F 4239. LEAX -1,X 33A7 A7 84 4240. STA^ 0,X SET END OF RECORD 33A9 17 00 84 3430 4241. BSR ZLDX0 GET I/O BUFFER POINTER 33AC 9F 22 4242. ZWRIT2 STX BUFPTR2 SAVE I/O POINTER 33AE A6 84 4243. LDA 0,X GET A CHR 33B0 34 02 4244. PSHS A 33B2 5F 4245. CLRB 33B3 17 FF 71_ 3327 4246. BSR FILOPR WRITE THE CHR 33B6 35 02 4247. PULS A RESTORE THE CHR 33B8 81 0D 4248. CMPA #$0D EOL ? 33BA 27 06 33C2 4249. BEQ ZWRIT3 IF DONE RETURN 33BC 9E 22 4250. LDX BUFPTR2 RESTORE POINTER 33BE 30 01 4251. LEA`X 1,X NEXT CHR 33C0 20 EA 33AC 4252. BRA ZWRIT2 4253. * 33C2 86 01 4254. ZWRIT3 LDA #1 RESET THE ZONE POINTER 33C4 97 26 4255. STA ZONE 33C6 39 4256. RTS AND RETURN Page 92 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (DaISK RUN TIME I/O ROUTINES 4257. * 4258. . 4259. . BRANCH TABLE TO KEEP ALL ROUTINE ADDRS IN 256 BYTES 33C7 20 08 33D1 4260. X$CHAIN BRA ZXC 33C9 20 1B 33E6 4261. ZFREE BRA ZZF 33CB 20 1A 33E7 4262. ZEOF BRA ZZE 33CD 20 25 b33F4 4263. ZSTAT BRA ZZS 33CF 20 27 33F8 4264. ZCREAT BRA ZZC 4265. * 4266. . 4267. . CHAIN (LOAD + GO) ROUTINE 4268. . ENTER W/XR>STRING (FILE NAME) 4269. . FCB ADDR IN FCBTMP 33D1 30 1F 4270. ZXC LEAX -1,X 33D3 BF CC 1c4 4271. STX FLXPT 33D6 86 3A 4272. LDA #':' 33D8 B7 CC 11 4273. STA LASTERM 33DB 6D 80 4274. ZXC2 TST 0,X+ FIND THE EOL 33DD 26 FC 33DB 4275. BNE ZXC2 33DF 86 0D 4276. LDA #$0D DO A 'CR 33E1 A7 1F 4277. STA -1,X FOR EOL d33E3 7E CD 03 4278. JMP WARMS 4279. * 4280. . 4281. . REPORT FREE SPACE ROUTINE 4282. . RETURNS ROOM IN ACC A, ACC B 33E6 39 4283. ZZF RTS /******************* 4284. * 4285. . 4286. . END OF FILE TEST 4287. . ENTER W/XR>eFCB 33E7 E6 01 4288. ZZE LDB 1,X 33E9 C1 06 4289. CMPB #6 33EB 27 03 33F0 4290. BEQ ZEOF1 33ED 5F 4291. CLRB 33EE 20 02 33F2 4292. BRA ZEOF2 33F0 C6 01 4293. ZEOF1 LDB #1 33F2 4F 4294. ZEOF2 CLRA 33F3 39 4295. RTS 42 f96. * 4297. . 4298. . STATUS TEST 4299. . ENTER W/XR>FCB 4300. . RETURNS 0 FILE NOT OPEN 4301. . 1 SEQUENTIAL READ 4302. . 2 SEQUENTIAL WRITE 33F4 E6 02 4303. ZZS LDB 2,X 33F6 4F 4304. CLRA 33F7 39 4305. RTS Page 93  g07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (DISK RUN TIME I/O ROUTINES 4306. * 4307. . 4308. . ROUTINE TO EXPAND OR CREATE A RANDOM FILE 4309. . CREATE #1,"FILE NAME",# RECORDS,RECORD LENGTH 4310. . XPAND #1,"FILE NAME",# RECORDSh 4311. . ENTER WITH X-REG = STRING ADDERESS OF NAME 4312. . FCB ADDR = FCBTMP 4313. . # OF RECORDS = RECNUM 4314. . RECORD LENGTH = RECLEN 33F8 17 FF 78 3373 4315. ZZC BSR FILNAM GET THE FILE NAME PROCESSED 33FB 9E 10 4316. LDXi FCBTMP GET FCB ADDR AGAIN 33FD C6 05 4317. LDB #5 33FF E7 0C 4318. STB 12,X SET FOR RANDOM BY RECORD 3401 DC 19 4319. LDD RECNUM GET # OF RECORDS 3403 ED 88 14 4320. STD 20,X FOR CREATE 3406 ED 88 1D 4321. STD 29,X FOR EXPANDj 3409 D6 1B 4322. LDB RECLEN GET RECORD LENGTH 340B 5C 4323. INCB ALLOW FOR 'CR' 340C E7 88 16 4324. STB 22,X FOR CREATE 340F 6F 88 20 4325. CLR 32,X 3412 6F 88 21 4326. CLR 33,X SET FILL CHR TO NULL 3415 6C 88 20 4327. INC 3k2,X SET TO FILL FILE 3418 0D 1B 4328. TST RECLEN 341A 27 05 3421 4329. BEQ ZXPAND XPAND IF RECORD LENGTH = 0 341C C6 14 4330. LDB #20 341E 16 FF 08 3329 4331. LBRA FILOP2 CREATE THE FILE 3421 C6 1C 4332. ZXPAND LDB #28 3423 1l6 FF 03 3329 4333. LBRA FILOP2 EXPAND THE FILE 4334. * 4335. . 4336. . ROUTINE TO SET RECORD # FOR RANDOM FILE 4337. . ENTER W/FCB ADDR IN X-REG 3426 DC 19 4338. SETREC LDD RECNUM GET RECORD # 3428 ED 88 20 4339. STD 32,X TEmLL DOS WHICH ONE 342B C6 15 4340. LDB #21 SET RECORD COMMAND 342D 16 FE F7 3327 4341. LBRA FILOPR GO DO IT 3430 4342. ZLDX0 EQU * 3311 4343. DSKLOC EQU BEG3 00FF 4344. DSKLEN EQU $FF 0020 4345. DSKLN2 EQU *-BEG3-$FF Page 9n4 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME MATH ROUTINE LIBRARY 4347. * RUN TIME MATH ROUTINE LIBRARY FOR A/BASIC V1.0 4348. * 4349. * ALL ARE POSITION INDEPENDENT 4350. * 2'S COMPLIMENT REPRESENTATION 4351. * MULTIoPLY SUBROUTINE 4352. * ENTERED WITH MULTIPLIER IN ACC A,B 4353. * AND XR > MULTIPLICAND 4354. * RESULT IN A,B 3430 4355. BEG4 EQU * 3430 34 06 4356. MULT1 PSHS D SAVE THE MULTIPLIER 3432 EC 84 4357. LDD 0,X GET THE MULTIPLICAND  p3434 34 06 4358. PSHS D AND SAVE IT 3436 5F 4359. CLRB CLEAR FLAG(# OF NEGITIVE ARGS 3437 A6 E4 4360. LDA 0,S  3439 2A 08 3443 4361. BPL MULT1A OK IF NOT NEG 343B 5C 4362. INCB COUNT IT 343C 40 4363. NEGA 343D 60 61 4364. q NEG 1,S  343F 82 00 4365. SBCA #$0  3441 A7 E4 4366. STA 0,S  3443 A6 62 4367. MULT1A LDA 2,S  3445 2A 08 344F 4368. BPL MULT1B  3447 5C 4369. INCB 3448 40 4370. NEGA 3449 60 63 4371. NEG 3,S  344B 82 00 4372.r SBCA #$00  344D A7 62 4373. STA 2,S  344F C4 01 4374. MULT1B ANDB #$01  3451 34 04 4375. PSHS B SAVE SIGN FLAG 0=OK 1=NEG 3453 32 7C 4376. LEAS -4,S MAKE ROOM FOR RESULT 3455 6F E4 4377. CLR 0,S  3457 6F 61 4378. CLR 1s,S  3459 A6 68 4379. LDA 8,S  345B E6 66 4380. LDB 6,S L*L 345D 3D 4381. MUL  345E ED 62 4382. STD 2,S SAVE LOWER 16 BITS 3460 EC 66 4383. LDD 6,S L*H 3462 3D 4384. MUL 3463 E3 61 4385. ADDD 1,S ADD IN LO 3465 ED 61 4t386. STD 1,S PUT IT BACK 3467 24 02 346B 4387. BCC MULT2 3469 6C E4 4388. INC 0,S 346B A6 68 4389. MULT2 LDA 8,S 346D E6 65 4390. LDB 5,S 346F 27 12 3483 4391. BEQ MULT3A SKIP IF ZERO 3471 3D 4392. MUL 3472 E3 61 4393. uADDD 1,S 3474 ED 61 4394. STD 1,S 3476 24 02 347A 4395. BCC MULT3 3478 6C E4 4396. INC 0,S 347A E6 67 4397. MULT3 LDB 7,S 347C 27 05 3483 4398. BEQ MULT3A SKIP IF ZERO 347E A6 65 4399. LDA 5,S 3480 3D 4400. MUL 3481 20 v01 3484 4401. BRA MULT3B Page 95 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME MATH ROUTINE LIBRARY 3483 4F 4402. MULT3A CLRA SET VALUE = 0 3484 E3 E1 4403. MULT3B ADDD ,S++ 3486 DD 2B 4404. STD OVERFL SAVE OVERFLOWw 3488 26 0D 3497 4405. BNE MULOVR TEST FOR OVERFLOW 348A 35 06 4406. PULS D GET RESULT 348C 6D E4 4407. TST 0,S CHECK SIGN 348E 27 04 3494 4408. BEQ MULT3C 3490 40 4409. NEGA 3491 50 4410. NEGB 3492 82 00 4411. SBCA #x0 3494 32 65 4412. MULT3C LEAS 5,S CLEAN STACK 3496 39 4413. RTS  3497 6D 62 4414. MULOVR TST 2,S CHECK SIGN 3499 27 11 34AC 4415. BEQ MULOV2 SKIP IF POSITIVE 349B 63 61 4416. COM 1,S  349D 63 E4 4417. COM 0,S  349F 5y3 4418. COMB 34A0 43 4419. COMA 34A1 6C 61 4420. INC 1,S  34A3 26 07 34AC 4421. BNE MULOV2  34A5 6C E4 4422. INC 0,S  34A7 26 03 34AC 4423. BNE MULOV2  34A9 C3 00 01 4424. ADDD #$0001  34AC DD 2B 4425. MULOV2 STD z OVERFL  34AE 35 06 4426. PULS D GET ANSWER 34B0 32 65 4427. LEAS 5,S CLEAN STACK 4428. * CHECK FOR ERROR TRAP 34B2 9E 12 4429. LDX ERRADR  34B4 27 08 34BE 4430. BEQ MULOV3 NO ERROR TRAP 34B6 C6 32 4431. LDB #$32  34B8 D {7 14 4432. STB ERRTYP SET ERROR CODE 34BA 32 62 4433. LEAS 2,S GET RETURN ADDERESS OFF STACK 34BC 6E 84 4434. JMP 0,X GO TO ERROR RECOVERY 34BE 1A 01 4435. MULOV3 ORCC #$01  34C0 39 4436. RTS ERROR RETURN 3430 4437. MULLOC EQ|U BEG4 0091 4438. MULLEN EQU *-BEG4 Page 96 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME MATH ROUTINE LIBRARY 4439. + DIVIDE SUBROUTINE 4440. . DIVIDEND IN ACC A,B 4441. . XR > DIVISOR 4442. . RESULT IN ACC A,B 444}3. . 34C1 4444. BEG5 EQU * 4445. . 34C1 34 06 4446. DIV PSHS A,B  34C3 E6 01 4447. LDB 1,X  34C5 34 04 4448. PSHS B 34C7 5F 4449. CLRB 34C8 A6 84 4450. LDA 0,X  34CA 2A 08 34D4 4451. BPL DIV2  34CC 5C 4452. I~NCB 34CD 1F 41 4453. TFR S,X 34CF 40 4454. NEGA 34D0 60 84 4455. NEG 0,X  34D2 82 00 4456. SBCA #0 34D4 34 02 4457. DIV2 PSHS A 34D6 34 04 4458. PSHS B 34D8 32 7F 4459. LEAS -1,S  34DA 1F 41 4460. TFR S,X  34DC E6 03 4461. LDB 3,X  34DE 26 0F 34EF 4462. BNE DIVOK  34E0 4D 4463. TSTA 34E1 26 0C 34EF 4464. BNE DIVOK  4465. * CHECK FOR ERROR TRAP 34E3 9E 12 4466. LDX ERRADR  34E5 27 51 3538 4467. BEQ DIV15 NO TRAP 34E7 C6 21 4468. LDB #33 ERROR CODE 34E9 D7 14 4469. STB ERRTYP  34EB 32 68 4470. LEAS 8,S CLEAN UP STACK 34ED 6E 84 4471. JMP 0,X  34EF 6D 04 4472. DIVOK TST 4,X  34F1 2A 0A 34FD 4473. BPL DIV4  34F3 60 04 4474. NEG 4,X  34F5 60 05 4475. NEG 5,X  34F7 24 02 34FB 4476. BCC DIV3  34F9 6A 04 4477. DEC 4,X  34FB 6C 01 4478. DIV3 INC 1,X  34FD 86 01 4479. DIV4 LDA #1 34FF 6D 02 4480. TST 2,X  3501 2B 0B 350E 4481. BMI DIV11  3503 4C 4482. DIV10 INCA 3504 68 03 4483. ASL 3,X  3506 69 02 4484. ROL 2,X  3508 2B 04 350E 4485. BMI DIV11  350A 81 11 4486. CMPA #17  350C 26 F5 3503 4487. BNE DIV10  350E A7 84 4488. DIV11 STA 0,X  3510 EC 04 4489.  LDD 4,X  3512 6F 04 4490. CLR 4,X  3514 6F 05 4491. CLR 5,X  3516 A3 02 4492. DIV12 SUBD 2,X  3518 24 06 3520 4493. BCC DIV13  Page 97 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME MATH ROUTINE LIBRARY 351A E 3 02 4494. ADDD 2,X  351C 1C FE 4495. ANDCC #$FE  351E 20 02 3522 4496. BRA DIV14  3520 1A 01 4497. DIV13 ORCC #$01  3522 69 05 4498. DIV14 ROL 5,X  3524 69 04 4499. ROL 4,X  3526 64 02 4500. LSR 2,X  3528 66 03 45 01. ROR 3,X  352A 6A 84 4502. DEC 0,X  352C 26 E8 3516 4503. BNE DIV12  352E EC 04 4504. LDD 4,X  3530 66 01 4505. ROR 1,X  3532 24 04 3538 4506. BCC DIV15  3534 40 4507. NEGA 3535 50 4508. NEGB 3536 82 00 4509. SBCA #0 3538 32 66 4510. DIV15 LEAS 6,S  353A 39 4511. RTS  34C1 4512. DIVLOC EQU BEG5 007A 4513. DIVLEN EQU *-BEG5 Page 98 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME MATH ROUTINE LIBRARY 4514. + RANDOM NUMBER GENERATOR 4515. . XR POINTS TO RANDOM SEED 4516. . RETURNS VALUE 0 <= N <= 23767 4517. . 353B 4518. BEG6 EQU * 4519. . 353B A6 01 4520. RANDOM LDA 1,X 353D 48 4521. ASLA 353E AB 84 4522. ADDA 0,X 3540 E6 01 4523.  LDB 1,X 3542 58 4524. ASLB 3543 49 4525. ROLA 3544 58 4526. ASLB 3545 49 4527. ROLA 3546 E3 84 4528. ADDD 0,X 3548 C3 36 19 4529. ADDD #$3619 354B ED 84 4530. STD 0,X 354D 44 4531. LSRA 354E 56 4532. RORB 354F 39 4533. RTS 4534. . 4535. . 353B 4536. FUNLOC EQU BEG6 0015 4537. FUNLEN EQU *-BEG6 Page 99 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME STRING ROUTINE LIBRA 4539. . A/BASIC V1.0 LIBRARY SUBROUTINES FOR 4540. . STRING OPERATIONS 4541. . 3550 4542. BEG EQU * 4543. . 4544. . SUBR TO PUSH XR ON STACK 4545. . MUST BE PRECEDED BY TWO DES INSTRS 3550 9E 27 4546. PSHX LDX STRPTR  3552 AF 62 4547. STX 2,S  3554 39 4548. RTS  0005 4549. OFF1 EQU *-BEG 4550. . 4551. . 4552. * SUBR TO GET XR ON TOP OF STACK 3555 AE 62 4553. GETXR LDX 2,S  3557 39 4554. RTS  0008 4555. OFF2 EQU *-BEG 4556. * 4557. . 4558. . SUBR TO FIND LENGTH OF STRING, 4559. . LENGTH RET IN ACCB 3558 5F 4560. LEN CLRB 3559 6D 84 4561. LEN2 TST 0,X  355B 27 05 3562 4562. BEQ LEN3  355D 30 01 4563. LEAX 1,X  355F 5C 4564. INCB 3560 20 F7 3559 4565. BRA LEN2  3562 4F 4566. LEN3 CLRA 3563 39 4567. RTS  0014 4568. OFF3 EQU *-BEG 4569. * 4570. . 4571. . SUBR TO REMOVE TRAILING BLANKS 4572. . ENT W/BEG2 POS ON STACK 4573. . 3564 AE 62 4574. TRIM LDX 2,S  3566 8D F0 3558 4575. BSR LEN  3568 5D 4576. TRIM2 TSTB  3569 27 69 35D4 4577. BEQ SRETRN  356B A6 1F 4578. LDA -1,X  356D 81 20 4579. CMPA #$20  356F 26 63 35D4 4580. BNE SRETRN  3571 30 1F 4581. LEAX -1,X  3573 5A 4582. DECB 3574 20 F2 3568 4583. BRA TRIM2  0026 458 4. OFF4 EQU *-BEG Page 100 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME STRING ROUTINE LIBRA 4585. * 4586. . 4587. . SUBR TO MOVE STR BUF TO I/O BUF 4588. . 3576 C6 80 4589. MOVBTB LDB #128  3578 8D 05 357F 4590. BSR MVBTV2  357A 6F 84 4591. CLR 0,X  357C 9F 22 4592. STX BUFPTR2 357E 39 4593. RTS  002F 4594. OFF5 EQU *-BEG 4595. * 4596. . 4597. . SUBR TO MOVE BUFFER TO VARIABLE STORAGE 4598. . XR IS VAR ADDR 4599. . 357F 10 9E 27 4600. MVBTV2 LDY STRPTR  3582 A6 A0 4601. MVBTV LDA ,Y+  3584 A7 84 4602. STA 0,X  3586 27 05 358D 4603. BEQ MVBTV3  3588 30 01 4604. LEAX 1,X  358A 5A 4605. DECB 358B 26 F5 3582 4606. BNE MVBTV  358D 10 9F 27 4607. MVBTV3 STY STRPTR  3590 39 4608. RTS  0041 4609. OFF6 EQU *-BEG 4610. * 4611. . 4612. . SUBR TO REDUCE STRING TO RIGHT N CHARS 4613. . ACCB=N; BEG2 POS ON STACK 4614. . 3591 AE 62 4615. RIGHT LDX 2,S 3593 9F 27 4616. STX STRPTR 3595 34 04 4617. PSHS B 3597 8D BF 3558 4618. BSR LEN 3599 1F 98 4619. TFR B,A 359B 4D 4620. TSTA 359C 35 04 4621. PULS B 359E 27 34 35D4 4622. BEQ SRETRN  35A0 34 04 4623. PSHS B 35A2 A0 E0 4624. SUBA ,S+  35A4 23 2E 35D4 4625. BLS SRETRN  35A6 4C 4626. RIGHT2 INCA 35A7 9E 27 4627. LDX STRPTR  35A9 20 02 35AD 4628. BRA MID2  005B 4629. OFF7 EQU *-BEG Page 101 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6  (RUN TIME STRING ROUTINE LIBRA 4630. * 4631. . 4632. . SUBR TO REDUCE STRING TO MIDDLE M CHARS 4633. . BEGINNING AT N TH POS FROM BEG2 (STACK) 4634. . 35AB AE 62 4635. MID LDX 2,S  35AD 9F 27 4636. MID2 STX STRPTR  35AF 4D 4637. TSTA 35B0 27 22 35D4 4638. BEQ SRETRN  35B2 6D 84 4639. MID3 TST 0,X  35B4 27 2C 35E2 4640. BEQ PULX  35B6 4A 4641. DECA 35B7 27 04 35BD 4642. BEQ MID4  35B9 30 01 4643. LEAX 1,X  35BB 20 F5 35B2 4644. BRA MID3  35BD 5D 4645. MID4 TSTB 35BE 27 22 35E2 4646. BEQ PULX  35C0 8D 24 35E6 4647. BSR MOVE2  35C2 20 14 35D8 4648. BRA RET3  35C4 20 92 3558 4649. GOLEN BRA LEN  0076 4650. OFF8 EQU *-BEG 4651. * 4652. .  4653. . SUBR TO REDUCE STRING TO LEFT N CHRS BEG2 4654. . AT POS ON STACK 4655. . 35C6 AE 62 4656. LEFT LDX 2,S  35C8 5D 4657. LEFT2 TSTB 35C9 27 09 35D4 4658. BEQ SRETRN  35CB A6 84 4659. LDA 0,X  35CD 27 05 35D4 466 0. BEQ SRETRN  35CF 30 01 4661. LEAX 1,X  35D1 5A 4662. DECB 35D2 20 F4 35C8 4663. BRA LEFT2  35D4 9F 27 4664. SRETRN STX STRPTR  35D6 6F 84 4665. CLR 0,X  35D8 35 10 4666. RET3 PULS X 35DA 32 62 4667. LEAS 2,S  35DC 6E 84 4668. JMP 0,X  008E 4669. OFF9 EQU *-BEG 4670. * 4671. . 4672. . SUBR TO MOVE LITERAL STRING TO BUFFER 4673. . 35DE C6 80 4674. MOVLTB LDB #128  35E0 20 04 35E6 4675. BRA MOVE2  0092 4676. OFF10 EQU *-BEG Page 102 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME STRING ROUTINE LIBRA 4677. * 4678. . 4679. . SUBR TO PULL XR OFF STACK 4680. . 35E2 AE 62 4681. PULX LDX 2,S  35E4 20 EE 35D4 4682. BRA SRETRN  0096 4683. OFF11 EQU *-BEG 4684. * 4685. . 4686. . SUBR TO MOVE STR VAR TO STR BUFFER 4687. . 35E6 A6 84 4688. MOVE2 LDA 0,X  35E8 8D 0A 35F4 4689. BSR PUTCHR  35EA 4D 4690. TSTA 35EB 27 15 3602 4691. BEQ PUTCH4  35ED 30 01 4692. MOVE3 LEAX 1,X  35EF 5A 4693. DECB 35F0 26 F4 35E6 4694. BNE MOVE2  35F2 1F 98 4695. MOVE4 TFR B,A  00A4 4696. OFF12 EQU *-BEG 4697. * 4698. . 4699. . SUBR TO MOVE CHAR TO BUFFER 4700. . 35F4 9F 29 4701. PUTCHR STX STRSAV  35F6 9E 27 4702. LDX STRPTR  35F8 A7 84 4703. STA 0,X  35FA 27 02 35FE 4704. BEQ PUTCH3  35FC 30 01 4705. PUTCH2 LEAX 1,X  35FE 9F 27 4706. PUTCH3 STX STRPTR  3600 9E 29 4707. LDX STRSAV  3602 39 4708. PUTCH4 RTS  00B3 4709. OFF13 EQU *-BEG 4710. * 4711. . 4712. . SUBR TO PUT CHAR IN BUFFER 4713. . 3603 8D ED 35F2 4714. CHR BSR MOVE4  3605 4F 4715. CHR2 CLRA 3606 20 EC 35F4 4716. BRA PUTCHR  00B8 4717. OFF14 EQU *-BEG 4718. * 4719. . 4720. . SUBR TO PUT NULL IN BUFFER 4721. . 3608 9E 27 4722. NULL LDX STRPTR  360A 6F 84 4723. CLR 0,X  360C 20 EE 35FC 4724. BRA PUTCH2  00BE 4725. OFF15 EQU *-BEG Page 103 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME STRING ROUTINE LIBRA 4726. * 4727. . 4728. . SUBROUTINE FOR STRING COMPARE 4729. . 360E 10 9E 20 4730. STRCMP LDY XSAVE **** 3611 A6 80 4731. STRCMP1 LDA 0,X+ GET A CHR ****  3613 A1 A0 4732. CMPA 0,Y+ SAME ? **** 3615 26 03 361A 4733. BNE STRCMP2 IF NOT WE ARE DONE **** 3617 4D 4734. TSTA SEE IF AT END OF STRING **** 3618 26 F7 3611 4735. BNE STRCMP1 CONTINUE IF NOT **** 361A 39 4736. STRCMP2 R TS ALL DONE **** 4737. * 4738. . 4739. . 00CB 4740. OFF16 EQU *-BEG 3550 4741. ST1LOC EQU BEG 00CB 4742. ST1LEN EQU *-BEG 4743. * 4744. . STRING FUNCTIONS GROUP 2 4745. . 361B 4746. OFF1A EQU * 361B 4747. BEG8 EQU * 4748. * 4749. . SUBR TO SEARCH FOR SUBSTRING 4750. . 361B C6 01 4751. SUBSTR LDB #1 361D D7 2F 4752. STB POSCNT  361F 9F 27 4753. STX STRPTR SAVE TST POS 3621 8D A1 35C4 4754. BSR GOLEN  3623 5D 4755. TSTB 3624 27 2A 3650 4756. BEQ SUBFND  3626 D7 2C 4757. STB TSTLEN  3628 9E 20 4758. LDX XSAVE  362A 8D 98 35C4 4759. LBSR GOLEN  362C D7 2B 4760. SUBST2 STB OBJLEN  362E D6 2C 4761. LDB TSTLEN  3630 D1 2B 4762. CMPB OBJLEN  3632 23 03 3637 4763. BLS SUBST3  3634 5F 4764. NOTSUB CLRB 3635 4F 4765. CLRA 3636 39 4766. RTS  3637 9E 27 4767. SUBST3 LDX STRPTR  3639 9F 29 4768. STX STRSAV  363B 9E 20 4769. LDX XSAVE  363D 9F 2D 4770. SUBST4 STX XTEMP  363F 9E 29 4771. LDX STRSAV  3641 A6 80 4772. LDA ,X+  3643 9F 29 4773. STX STRSAV  3645 9E 2D 4774. LDX XTEMP  3647 A1 84 4775. CMPA 0,X  3649 26 09 3654 4776. BNE NXTCHK  364B 30 01 4777. LEAX 1,X  364D 5A 4778. DECB 364E 26 ED 363D 4779. BNE SUBST4  3650 D6 2F 4780. SUBFND LDB POSCNT  Page 104 07/18/82 0.ABASIC.SRC A B A S I C V - 1.4:6 (RUN TIME STRING ROUTINE LIBRA 3652 4F 4781. CLRA 3653 39 4782. RTS  3654 9E 20 4783. NXTCHK LDX XSAVE  3656 30 01 4784. LEAX 1,X  3658 9F 20 4785. STX XSAVE  365A 0C 2F 4786. INC POSCNT  365C D6 2B 4787. LDB OBJLEN  365E 5A 4788. DECB 365F 20 CB 362C 4789. BRA SUBST2  0046 4790. OFF2A EQU *-OFF1A 4791. * 4792. . SUBR TO CONVERT NUMBER TO STRING 4793. . 3661 34 02 4794. XSTR PSHS A 3663 8D 26 368B 4795. BSR IOSAVE  3665 9E 27 4796. LDX STRPTR  3667 9F 22 4797. STX BUFPTR2 3669 35 02 4798. PULS A  366B 8D 2C 3699 4799. BSR GOCNVS  366D 9E 22 4800. LDX BUFPTR2 366F 9F 27 4801. STX STRPTR  3671 6F 84 4802. CLR 0,X  3673 20 0A 367F 4803. BRA RESTIO  005A 4804. OFF3A EQU *-OFF1A 4805. * 4806. . SUBR TO CONVERT S TRING TO NUMBER 4807. . 3675 9F 29 4808. XVAL STX STRSAV 3677 8D 12 368B 4809. BSR IOSAVE  3679 9E 29 4810. LDX STRSAV  367B 9F 22 4811. STX BUFPTR2 367D 8D 17 3696 4812. BSR GOCNVN  367F 34 02 4813. RESTIO PSHS A 36 81 96 2B 4814. LDA OBJLEN  3683 97 26 4815. STA ZONE  3685 9E 2D 4816. LDX XTEMP  3687 9F 22 4817. STX BUFPTR2 3689 35 82 4818. PULS A,PC  368B 96 26 4819. IOSAVE LDA ZONE  368D 97 2B 4820. STA OBJLEN  368F 0F 26 4821. CLR ZONE  3691 9E 22 4822. LDX BUFPTR2 3693 9F 2D 4823. STX XTEMP  3695 39 4824. RTS  4825. . 4826. . 007B 4827. OFF4A EQU *-OFF1A 361B 4828. ST2LOC EQU BEG8 007B 4829. ST2LEN EQU *-BEG8 3696 00 00 00 4830. GOCNVN FCB 0,0,0  3699 00 00 00 4831. GOCNVS FCB 0,0,0  369C 00 00 4832. FSTADD FDB 0000 FIRST EXECUTABLE ADDERESS GEN 10 REM PRINT ABASIC SOURCE 20 OPEN OLD "3.AB146.DOC" AS 1 30 ON ERROR GOTO 90 40 OPEN "0.PRINT" AS 0 50 INPUT LINE #1,A$ 60 IF LEFT$(A$,4)="Page" THEN PRINT #0,CHR$(12); 70 PRINT #0,A$ 80 GOTO 50 90 IF ERR<>8 THEN ON ERROR GOTO 0 100 CLOSE 1  RUN TIME OUTPUT SUBROUTINE IMAGES 30FC 00 00 00 00 00 ZLDX1 FCB 0,0,0,0,0 TEMP FOR LEAX 3151 1F 98 DISPNM TFR B,A PUT THE CHR IN A-REG 3153 20 AE 3103 BRA ZOUT AND DISPLAY IT * . PRINT STRING (DISK) 3155 0F 18 ZPSTRD CLR DSKFLG2 3157 0C 18 INC DSKFLG2 SET FOR DISK TYPE 3159 20 18 3173 BRA ZPRS1 * . PRINT DIGIT 315B 34 02 ZPRSUB PSHS A 315D A6 84 LDA 0,X  315F 26 04 3165 BNE ZPRS2  3161 6D 01 TST 1,X  3163 27 06 316  B BEQ ZPRS3  3165 8A 30 ZPRS2 ORA #$30  3167 8D 9A 3103 BSR ZOUT  3169 6C 01 INC 1,X  316B 6F 84 ZPRS3 CLR 0,X  316D 35 82 PULS A,PC  * . PRINT LITERAL 316F C6 80 ZPRLIT LDB #128  * . PRINT STRING 3171 0F 18 Z  PRS CLR DSKFLG2 SET NON-DISK 3173 A6 80 ZPRS1 LDA ,X+  3175 27 05 317C BEQ ZPRST1  3177 8D C5 313E BSR ZGOUT 3179 5A !DECB 317A 26 F7 3173 BNE ZPRS1  317C 0D 18 ZPRST1 TST DSKFLG2 317E 27 09 3189 BEQ ZPRST2  3180 5D !  TSTB 3181 27 06 3189 BEQ ZPRST2  3183 17 FF 7B 3101 LBSR ZOUTS FILL STRING WITH ;SPACES 3186 5A !DECB 3187 20 F3 317C BRA ZPRST1  3189 39 ZPRST2 RTS  RUN TIME OUTPUT SUBROUTINE IMAGES * . PRINT NUMBER (DISK) 318A 0F 18  ZPNUMD CLR DSKFLG2 318C 0C 18 INC DSKFLG2 318E 20 02 3192 BRA ZPRN1  * . PRINT NUMBER 3190 0F 18 ZPRN CLR DSKFLG2 SET NON-DISK 3192 34 02 ZPRN1 PSHS A 3194 4D !TSTA 3195 2B 07 319E BMI ZPRN1A  3197 17 FF 67 3101 LB  SR ZOUTS IF POSITIVE LEAVE ;ROOM FOR SI 319A 35 02 PULS A 319C 20 0A 31A8 BRA ZPRN2  319E 86 2D ZPRN1A LDA #'-' 31A0 8D 9C 313E BSR ZGOUT  31A2 35 02 PULS A 31A4 40 !NEGA 31A5 50 !NEGB 31A6 82 00 SBCA #0 31A8  30 E3 ZPRN2 LEAX ,--S  31AA 6F 84 CLR 0,X  31AC 6F 01 CLR 1,X  31AE 0D 18 TST DSKFLG2 31B0 27 02 31B4 BEQ ZPRN3  31B2 6C 01 INC 1,X SET FOR LEADING ;ZEROS ON DISK 31B4 83 27 10 ZPRN3 SUBD #10000  31B7 25 04 31BD BCS  ZPRN4  31B9 6C 84 INC 0,X  31BB 20 F7 31B4 BRA ZPRN3  31BD C3 27 10 ZPRN4 ADDD #10000  31C0 8D 99 315B BSR ZPRSUB  31C2 83 03 E8 ZPRN5 SUBD #1000  31C5 25 04 31CB BCS ZPRN6  31C7 6C 84 INC 0,X  31C9 20 F7 31C2 BRA  ZPRN5  31CB C3 03 E8 ZPRN6 ADDD #1000  31CE 8D 8B 315B BSR ZPRSUB  31D0 83 00 64 ZPRN7 SUBD #100  31D3 25 04 31D9 BCS ZPRN8  31D5 6C 84 INC 0,X  31D7 20 F7 31D0 BRA ZPRN7  31D9 CB 64 ZPRN8 ADDB #100  31DB 17 FF 7D 3 15B LBSR ZPRSUB  31DE C0 0A ZPRN9 SUBB #10  31E0 25 04 31E6 BCS ZPRN10  31E2 6C 84 INC 0,X  31E4 20 F8 31DE BRA ZPRN9  31E6 CB 0A ZPRN10 ADDB #10  31E8 17 FF 70 315B LBSR ZPRSUB  31EB E7 84 STB 0,X  31ED 6C 01 INC !1,X  31EF 17 FF 69 315B LBSR ZPRSUB  31F2 32 62 LEAS 2,S  31F4 39 !RTS  RUN TIME OUTPUT SUBROUTINE IMAGES 3101 OUTLOC EQU BEG1 00F4 OUTLEN EQU *-BEG1 RUN TIME INPUT SUBROUTINE IMAGES 31F5 BEG2 EQU * * INPUT RESET BUFPTR2 31F!5 00 00 00 00 ZINRES FCB 0,0,0,0 SAVE FOUR BYTES ;FOR LEAX xxxx 31F9 9F 22 STX BUFPTR2 31FB 39 !RTS  * INPUT NUMBER FROM BUFFER 31FC 4F ZRNUM CLRA 31FD 5F !CLRB 31FE 34 06 PSHS D 3200 34 06 PSHS D 3202 86 05 LDA #5 3!204 34 02 PSHS A DIGIT COUNT 3206 1F 41 TFR S,X  * DELETE LEADING SPCES 3208 17 00 83 328E ZRNUM1 LBSR ZNCHR  320B 81 20 CMPA #$20  320D 27 F9 3208 BEQ ZRNUM1  320F 81 2D CMPA #'-' NEG SIGN? 3211 26 12 3225 BNE DI!GENT  3213 6C 04 INC 4,X BUMP SIGN FLAG 3215 8D 77 328E ZRNUM2 BSR ZNCHR  3217 24 38 3251 BCC ZRNUM4  3219 81 20 CMPA #$20  321B 27 34 3251 BEQ ZRNUM4  321D 81 0D CMPA #$0D  321F 27 30 3251 BEQ ZRNUM4  3221 6D 84 TST! 0,X  3223 27 41 3266 BEQ ZNMERR TO MANY DIGITS * CHECK DIGIT 3225 80 30 DIGENT SUBA #$30  3227 25 3D 3266 BCS ZNMERR  3229 81 09 CMPA #9 322B 22 39 3266 BHI ZNMERR  * MULT TEMP*10 AND ADD DIGIT 322D A7 01 STA 1,X  32!2F EC 02 LDD 2,X  3231 58 !ASLB 3232 49 !ROLA 3233 ED 02 STD 2,X  3235 58 !ASLB 3236 49 !ROLA 3237 58 !ASLB 3238 49 !ROLA 3239 25 2B 3266 BCS ZNMERR OVERFLOW 323B E3 02 ADDD 2,X  323D 25 27 3266 BCS ZNMERR  323F !EB 01 ADDB 1,X  3241 89 00 ADCA #0 3243 25 21 3266 BCS ZNMERR  3245 ED 02 STD 2,X  3247 6A 84 DEC 0,X  3249 0D 18 TST DSKFLG2 324B 27 C8 3215 BEQ ZRNUM2 NOT DISK GET ANOTHER 324D 6D 84 TST 0,X  324F 26 C4 3215 BNE !ZRNUM2 DISK & NOT DONE YET RUN TIME INPUT SUBROUTINE IMAGES * NORMAL CLEAN-UP 3251 A6 E4 ZRNUM4 LDA 0,S  3253 81 05 CMPA #5 3255 27 0F 3266 BEQ ZNMERR  3257 32 62 LEAS 2,S  3259 35 06 PULS A,B  325B 6D 04 TST 4,X CHECK S! IGN FLAG 325D 27 04 3263 BEQ ZRNUM5  325F 40 !NEGA MAKE NEG 3260 50 !NEGB 3261 82 00 SBCA #0 3263 32 61 ZRNUM5 LEAS 1,S  3265 39 !RTS  *ERROR CLEAN-UP 3266 9E 12 ZNMERR LDX ERRADR  3268 27 08 3272 BEQ NOTRAP  326A 86 ! 12 LDA #18  326C 97 14 STA ERRTYP  326E 32 67 LEAS 7,S CLEANUP STACK 3270 6E 84 JMP 0,X  3272 32 65 NOTRAP LEAS 5,S  3274 5F !CLRB 3275 4F !CLRA 3276 39 !RTS  * MOVE STRING FROM BUFFER 3277 ZRDSTR EQU * 3277 8D 1"5 328E ZRSTR2 BSR ZNCHR  3279 25 03 327E BCS ZRSTR3  327B 6F 84 CLR 0,X  327D 39 !RTS  327E A7 80 ZRSTR3 STA ,X+  3280 5A !DECB 3281 26 F4 3277 BNE ZRSTR2  3283 81 20 ZPSTR4 CMPA #$20 REMOVE TRAILING ;BLANKS 3285 26 "06 328D BNE ZPSTR5  3287 6F 82 CLR ,-X  3289 A6 1F LDA -1,X  328B 20 F6 3283 BRA ZPSTR4  328D 39 ZPSTR5 RTS  * ROUTINE TO GET CHAR FROM BUFFER 328E 9F 20 ZNCHR STX XSAVE  3290 9E 22 LDX BUFPTR2 3292 A6 84 LDA 0,X  329"4 27 0B 32A1 BEQ ZNCHR2  3296 81 2C CMPA #',' 3298 27 05 329F BEQ ZNCHR1  329A 8D 03 329F BSR ZNCHR1  329C 1A 01 ORCC #$01  329E 39 !RTS  329F 30 01 ZNCHR1 LEAX 1,X BUMP PTR 32A1 9F 22 ZNCHR2 STX BUFPTR2 32A3 9E 20 LD"X XSAVE  32A5 1C FE ANDCC #$FE  32A7 39 !RTS  RUN TIME INPUT SUBROUTINE IMAGES * READ STRING FROM DISK BUFFER 32A8 ZRSTRD EQU * 32A8 9F 20 ZRSTD2 STX XSAVE  32AA 9E 22 LDX BUFPTR2 32AC A6 84 LDA 0,X  32AE 81 0D CMPA #$D  3" 2B0 27 10 32C2 BEQ ZRSTD4  32B2 30 01 LEAX 1,X  32B4 9F 22 STX BUFPTR2 32B6 9E 20 LDX XSAVE  32B8 A7 84 STA 0,X  32BA 27 05 32C1 BEQ ZRSTD3  32BC 30 01 LEAX 1,X  32BE 5A !DECB 32BF 26 E7 32A8 BNE ZRSTD2  32C1 39 Z"!RSTD3 RTS  32C2 8D DD 32A1 ZRSTD4 BSR ZNCHR2  32C4 6F 84 CLR 0,X  32C6 39 !RTS  * READ TERMINAL INPUT LINE * READ INPUT BUFFER 32C7 86 3F ZRDLIN LDA #'?' 32C9 BD CD 18 JSR PUTCHR$ 32CC 86 20 LDA #' ' 32CE BD CD 18 JS""R PUTCHR$ * READ INPUT BUFFER 32D1 8D 3E 3311 ZRDBUF BSR ZLDX2 GET BUFFER ADDERES 32D3 C6 80 LDB #128 SET FOR 128 CHRS MAX 32D5 BD CD 15 ZRBUF2 JSR GETCHR GET A CHR 32D8 81 0F CMPA #$0F BACKSPACE ? 32DA 26 13 32EF BNE CHKDEL 3"#2DC C1 80 CMPB #128 32DE 27 F1 32D1 BEQ ZRDBUF 32E0 5C !INCB 32E1 30 1F LEAX -1,X 32E3 86 0F LDA #$0F ECHO A BS 32E5 BD CD 18 JSR PUTCHR$ 32E8 86 20 LDA #$20 AND A SPACE 32EA BD CD 18 JSR PUTCHR$ 32ED 20 E6 32D5 BRA ZRBUF2 " $AND GET ANOTHER CHR 32EF 81 18 CHKDEL CMPA #$18 IS IT A DELETE 32F1 26 05 32F8 BNE ZRBUF4 32F3 BD CD 24 JSR PCRLF 32F6 20 CF 32C7 BRA ZRDLIN 32F8 A7 80 ZRBUF4 STA 0,X+ 32FA 81 0D CMPA #$0D EOL ? 32FC 26 0D 330B BNE ZRBUF5 3" %2FE 30 1F LEAX -1,X 3300 6F 84 CLR 0,X MARK EOL 3302 9F 22 STX BUFPTR2 3304 86 01 LDA #$01 3306 97 26 STA ZONE 3308 7E CD 24 JMP PCRLF CLEANUP AND RETURN 330B 5D ZRBUF5 TSTB 330C 27 C7 32D5 BEQ ZRBUF2 RUN TIME INPUT SUBROUT&INE IMAGES 330E 5A !DECB 330F 20 C4 32D5 BRA ZRBUF2 3311 ZLDX2 EQU * 31F9 INLOC EQU BEG2+4 0080 INLEN1 EQU $80 0098 INLEN2 EQU *-BEG2-$80-4