home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Loadstar 206
/
206.d81
/
z.gozo3+
(
.txt
)
< prev
Wrap
Commodore BASIC
|
2022-08-26
|
16KB
|
629 lines
1 rem "z.gozo3+" 2001.06.26 creates gozo ml02
2 rem gozo ml01 var @ (sc-1)*2+149*256 gozo ml03 var @ (sc-1)*2+192*256
3 rem =================================
10 l=3:v=24320
12 x=32+38144:y=x+2:z=32+49152
14 gosub364:rem q
15 u=10+38144
16 f=peek(u)
18 iff>0then28
20 p=v+11
21 u=2+38144
22 h=peek(u)
24 gosub134:rem update play patterns
26 goto38
28 iff>1then34
30 gosub100:rem lookup pattern
32 goto38
34 iff>2then38
36 gosub276:rem log pattern
38 end
100 rem ******************************** lookup pattern
102 rem in-l,q out-f,j,n,q,s,t
104 f=0:s=l
106 e=peek(q)
108 q=q+1:e=e-1:j=e*2
110 x=j+26268:y=x+2:z=26+49152
112 gosub364:rem n
114 x=j+26318:y=x+2:z=38+49152
116 gosub364:rem t
118 ifn=0then132:none
120 c=1
122 gosub210:rem sets f
124 iff=1then132:found
126 ifc=8then132:none
128 c=c+1:q=q+s
130 goto122
132 return
134 rem ******************************** update play patterns
136 rem in-h,l,p,q
138 s=l
140 rem --- move #
142 e=peek(q)
144 e=e+1
146 pokeq,e
148 rem --- square
150 r=h/8:c=r*8:c=h-c:r=r-1:c=c-1
152 u=q+1:u=u-s
154 gosub178
156 gosub186
158 r=6-r
160 gosub178
162 gosub186
164 c=6-c
166 gosub178
168 gosub186
170 r=6-r
172 gosub178
174 gosub186
176 return
178 rem ******************************** square index = row,col
180 h=r*7:h=h+c:h=h/2
182 gosub194
184 return
186 rem ******************************** square index = col,row
188 h=c*7:h=h+r:h=h/2
190 gosub194
192 return
194 rem ******************************** update pattern byte
195 u=u+s
196 ifh=24then208:bit implied by move#
197 b=h/8:e=b*8:e=h-e
198 y=u+b:z=p+e
200 b=peek(y)
202 e=peek(z)
204 b=bore
206 pokey,b
208 return
210 rem ******************************** match found: yes(f=1), no(f=0)
212 rem in-l*,n,q*,s*,t* out-f
214 g=0:m=n-1
216 k=g+m:k=k/2
218 gosub244
220 iff=1then242
222 iff=2then232
224 ifk>mthen240
226 ifk=mthen240
228 g=k+1
230 goto216
232 ifk<gthen240
234 ifk=gthen240
236 m=k-1
238 goto216
240 f=0
242 return
244 rem ******************************** compare: =(f=1), <(f=2), >(f=3)
246 rem in-k,l,q,s,t out-f,o
248 f=1:d=0
250 e=k*l:o=t+e
252 u=q+d
254 b=peek(u)
256 u=o+d
258 e=peek(u)
260 ifb>ethen270
262 ifb<ethen272
264 d=d+1
266 ifd=sthen274:done
268 goto252
270 f=f+1
272 f=f+1
274 return
276 rem ******************************** log pattern
278 rem in-l,q,v
280 x=v+881:y=x+2:z=49152
282 gosub364:rem a
284 ifa=3925then362:full
286 gosub100:rem lookup (sets f,j,n,q,s,t)
288 iff>0then362:match
290 o=t:e=a*l:z=e+26368
292 ifa=0then322:empty (uses z)
294 ifn=0then312:none (uses o,z)
296 k=0:m=n-1
298 gosub244:rem compare (sets f,o)
300 iff=1then362:match
302 iff=2then312:insert @ o
304 o=o+l
306 ifk=mthen312:insert @ o
308 k=k+1
310 goto298
312 rem --- shift
314 ifz=othen322:append
316 x=o:y=z:z=o+l
318 gosub364
320 z=o
322 rem --- add pattern
324 x=q:y=q+s
326 gosub364
328 rem --- update move count/address
330 n=n+1
332 x=26+49152:y=x+2:z=j+26268
334 gosub364
336 u=j+26318:k=j/2:k=k+1:h=38+49152
338 ifk=25then354
340 k=k+1:u=u+2
342 x=u:y=x+2:z=h
344 gosub364:rem t
346 t=t+l
348 x=h:y=x+2:z=u
350 gosub364
352 goto338
354 rem --- update table count
356 a=a+1
358 x=49152:y=x+2:z=v+881
360 gosub364
362 return
364 rem ******************************** copy: x=start y=end+1 z=dest
366 rem - copy mem @ 16528(144+64*256) - x,y,z @ (sc-1)*2+192*256
368 poke781,46
370 poke782,192
372 sys16528
374 return
376 rem ================================
1000 poke55,0:poke56,160:clr:bs=194*256:fl$="gozo ml03":goto1630
1010 b=peek(ad):ad=ad+1:ifb=32then1010
1020 return
1030 aa=ad
1040 b=peek(aa):aa=aa+1:ifb=32then1040
1050 return
1060 gosub1010:ifb<>0thenprintb:goto1730
1070 return
1080 n=0
1090 gosub1010:ifb<48 or b>57 then return
1100 n=n*10+(b-48):goto1090
1110 nh=int(nn/256):nl=nn-(nh*256):return
1120 gosub1110:print mid$(hx$,(nhand240)/16+1,1);mid$(hx$,(nhand15)+1,1);
1130 printmid$(hx$,(nland240)/16+1,1);mid$(hx$,(nland15)+1,1);:return
1140 bx=bx+1:ifp<>3 then ml=ml+1:return
1150 poke ml,z:ml=ml+1:return
1160 ifp<>1thensp=sp+1:sl=sl+1:return
1170 pokesp,z:sp=sp+1:sl=sl+1:return
1180 ifp<>3thenreturn
1190 dx=dx+1:poke dw,nl:poke dw+1,nh:dw=dw+2:return
1200 gosub1010:ifb>64then1220
1210 g=1:ad=ad-1:gosub1080:ad=ad-1:nn=n:goto1240
1220 gosub1250
1230 g=0:b=b-65:nn=(b*2)+zv
1240 b=peek(ad):gosub1110:return
1250 if(b<65 or b>90)then5360
1260 return
1270 z=173:gosub1140:z=nl:gosub1140:z=nh:goto1140
1280 z=173:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1290 z=141:gosub1140:z=nl:gosub1140:z=nh:goto1140
1300 z=141:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1310 z=169:gosub1140:z=nl:goto1140
1320 z=169:gosub1140:z=nh:goto1140
1330 z=173:gosub1140:z=vl:gosub1140:z=vh:goto1140
1340 z=173:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
1350 z=141:gosub1140:z=vl:gosub1140:z=vh:goto1140
1360 z=141:gosub1140:z=vl+1:gosub1140:z=vh:goto1140
1370 nl=ms(h,0):nh=ms(h,1):return
1380 gosub1140:z=nl:gosub1140:z=nh:goto1140
1390 gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1400 gosub1140:z=nl:goto1140
1410 gosub1140:z=nh:goto1140
1420 z=165:gosub1140:z=y:goto1140
1430 z=162:gosub1140:z=y:goto1140
1440 z=161:gosub1140:z=y:goto1140
1450 z=145:gosub1140:z=y:goto1140
1460 z=160:gosub1140:z=y:goto1140
1470 z=133:gosub1140:z=y:goto1140
1480 z=56:goto1140
1490 z=24:goto1140
1500 z=32:gosub1140:z=yl:gosub1140:z=yh:goto1140
1510 z=76:gosub1140:z=yl:gosub1140:z=yh:goto1140
1520 z=233:gosub1140:z=nl:goto1140
1530 z=233:gosub1140:z=nh:goto1140
1540 z=105:gosub1140:z=nl:goto1140
1550 z=105:gosub1140:z=nh:goto1140
1560 z=237:gosub1140:z=nl:gosub1140:z=nh:goto1140
1570 z=237:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1580 z=109:gosub1140:z=nl:gosub1140:z=nh:goto1140
1590 z=109:gosub1140:z=nl+1:gosub1140:z=nh:goto1140
1600 z=y1:gosub1140:z=y2:goto1140
1610 z=y1:gosub1140:z=y2:gosub1140:z=y3:goto1140
1620 z=169:gosub1140:z=y:goto1140
1630 lx=3:xx=0:zp=bs+80:p=1:zm=zp:sk=-1
1635 zv=192*256:rem variable's start address, for original set zv=679
1640 dim ll(255,1),fs(6,4),li%(lx,5),ms(5,3),oc%(3,1)
1650 gosub5440:sys828,232,3
1660 fori=0tolx:forj=0to5:readli%(i,j):next:next:bx=0:dx=0:f2=0
1670 ad=peek(43)+peek(44)*256:print"[147] ***** pass";p;" *****"
1680 sp=zp:ml=zm
1690 nm=peek(ad)+peek(ad+1)*256
1700 ln=peek(ad+2)+peek(ad+3)*256:ifln>999then1740
1710 print" compiling line #"mid$(str$(ln),2)
1720 ifp=2thenll(xx,0)=ln:ll(xx,1)=ml:xx=xx+1
1730 ad=ad+4:gosub1010:goto1790
1740 ifp=1thenp=2:zm=sp:r1=zm:la=sp:u1=bx:bx=0:goto1670
1750 ifp=2thenp=3:zm=la:r2=zm:gosub5420:db=la+bx+4:dw=db:u2=bx:bx=0:goto1670
1760 u3=bx:gosub4760:print"done!":print:gosub4580
1770 ifpeek(ml-1)<>96thenz=96:gosub1140
1780 goto4450
1790 ifb=136then3610:rem let
1800 ifb=153then2020:rem print
1810 ifb=128then2300:rem end
1820 ifb=137then2170:rem goto
1830 ifb=141then2230:rem gosub
1840 ifb=142then2300:rem return
1850 ifb=139then2320:rem if
1860 ifb=151then2600:rem poke
1870 ifb=129then2710:rem for
1880 ifb=130then2960:rem next
1890 ifb=135then3320:rem read
1900 ifb=140then3420:rem restore
1910 ifb=131then3470:rem data
1920 ifb=156then3510:rem clr
1930 ifb=143then2000:rem rem
1940 ifb=161then3530:rem get
1950 ifb=158then4300:rem sys
1960 rem this line assumes let
1970 ad=ad-1:goto3610
1980 sysbs:end
1990 fori=0toxx-1:printll(i,0),ll(i,1):next
2000 ad=nm:goto1690
2010 rem handle print
2020 gosub1010:ifb=199then3250
2030 ifb>64 then2110
2040 ifb<>34then2150
2050 sl=0:nn=sp:gosub1110
2060 b=peek(ad):ad=ad+1:if((b=0)or(b=34))then2080
2070 z=b:gosub1160:goto2060
2080 gosub1310:y=34:gosub1470:gosub1320:y=35:gosub1470
2090 y=sl:gosub1430:yl=37:yh=171:gosub1500:gosub1010:ifb<>59then2150
2095 goto2000
2100 rem handle print <var>
2110 ifb<65 or b>91 then5360
2120 b=b-65:nn=(b*2)+zv:gosub1110:gosub1010:w=b
2130 gosub1280:z=174:gosub1380:yl=205:yh=189:gosub1500:ifw<>59then2150
2135 goto2000
2140 rem handle print <cr>
2150 yl=215:yh=170:gosub1500:goto2000
2160 rem handle goto <line number>
2170 gosub1080:if p<>3 then2210
2180 ifxx=0then5380
2190 f2=0:fori=0to(xx-1):ifll(i,0)=nthenf2=1:nn=ll(i,1)
2200 next:iff2=0then5380
2210 gosub1110:yl=nl:yh=nh:gosub1510:goto2000
2220 rem handle gosub <line number>
2230 gosub1080:if p<>3 then2210
2240 ifxx=0then5380
2250 f2=0