progloaderで「PushBon」をダウンロードすると、
PushBon.bas
と必要データファイルが追加されます。
オリジナルは Oh!X 1989-11掲載のS-OS TTI(TinyTinyInterpreter)用です。
以下のリストはオリジナルのもの。動作確認はしてないので打ち込み間違いがあるかも。
これとX-BASIC版を見比べると、構造化の効果がわかるかも。
; ; PUSH BON FOR TTI ; ; 'C' WIDCH 40 ;MAIN ROUTINE .R=0 9 GOSUB 975 .G=5 GOSUB 980 GOSUB 965 GOSUB 970 10 LOCATE 25,15 "PUSH ANY KEY!!" LOCATE 25,15 " " IF (G=0,10 11 .T=0 .X=0 .Y=0 .D=0 .S=0 GOSUB 980 BELL 1 12 .B=0 GOSUB 900 GOSUB 953 GOSUB 993 .B=6 GOSUB 953 13 .K=(G IF K=0,13 IF K='4,455 IF K='6,456 IF K='8,458 IF K='2,457 IF K='G,20 IF K#' ,13 GOSUB 300 INC S .A=0 ADC A IF A#0,20 GOSUB 899 GOSUB 250 IF O#0,23 GOSUB 255 IF O#0,23 14 GOSUB 1000 GOTO 13 ;GIVE UP!!! 20 LOCATE 6,11 " " LOCATE 6,12 " GIVE UP!! " LOCATE 6,13 " " DEC G GOSUB 980 BELL 2 25 GOSUB 990 IF G=0,21 GOSUB 965 GOSUB 970 GOTO 11 ;GAME OVER 21 LOCATE 6,11 "* * * * * * *" LOCATE 6,12 " *GAME OVER* " LOCATE 6,13 "* * * * * * *" BELL 3 22 IF (G#' ,22 .R=0 GOTO 9 ;ROUND CLEAR 23 LOCATE 6,11 "* * * * * * *" LOCATE 6,12 " ROUND CLEAR " LOCATE 6,13 "* * * * * * *" BELL 3 24 IF (G#' ,24 INC R IF R<10,25 .R=0 GOTO 25 ;* BLOCK YOKO CHECK 250 .H=$9F .I=00 .O=00 .A=7 REPEAT .C=5 REPEAT WIND2 H,I .J=] @IF J=4 PUSH I PUSH H GOSUB 251 POP H POP I DEC C .I=I+1 ADC H UNTIL C=0 .I=I+2 ADC H DEC A UNTIL A=0 RETURN 251 .L=2 252 .I=I+1 ADC H WIND2 H,I .J=] IF J#4,254 DEC L IF L#0,252 .O=10 254 RETURN ;* BLOCK TATE CHECK 255 .H=$9F .I=00 .O=00 .A=7 REPEAT PUSH H PUSH I .C=5 REPEAT WIND2 H,I .J=] @IF J=4 PUSH I PUSH H GOSUB 256 POP H POP I DEC C .I=I+7 ADC H UNTIL C=0 POP I POP H .I=I+1 ADC H DEC A UNTIL A=0 RETURN 256 .L=2 257 .I=I+7 ADC H WIND2 H,I .J=] IF J#4,258 DEC L IF L#0,257 .O=10 258 RETURN ;BLOCK PUSH 300 .T=0 PUSH X PUSH Y PUSH D @GOSUB D*5+150 POP D POP Y POP X BELL 1 RETURN ;BLOCK UP PUSH 150 @IF Y<2 RETURN DEC Y GOSUB 952 .J=B @IF J=5 RETURN @IF J=0 DEC S RETURN 151 .Q=Y DEC Y IF Q<1,352 GOSUB 952 IF B#0,162 GOSUB 390 GOTO 151 352 .Y=Q .B=J GOSUB 953 RETURN ;BLOCK RIGHT PUSH 155 @IF X>4 GOSUB 952 .J=B INC X GOSUB 952 .J=B @IF J=5 RETURN @IF J=0 DEC S RETURN 156 .P=X INC X IF X>6,357 GOSUB 952 IF B#0,167 GOSUB 391 GOTO 156 357 .X=P .B=J GOSUB 953 RETURN ;BLOCK DOWN PUSH 160 @IF Y>4 RETURN INC Y GOSUB 952 .J=B @IF J=5 RETURN @IF J=0 DEC S RETURN 161 .Q=Y INC Y IF Y>6,352 GOSUB 952 IF B#0,162 GOSUB 390 GOTO 161 162 .W=Y .V=X .U=B .Y=Q .B=J GOSUB 953 GOTO 370 ;BLOCK LEFT PUSH 165 @IF X<2 RETURN DEC X GOSUB 952 .J=B @IF J=5 RETURN @IF J=0 DEC S RETURN 166 .P=X DEC X IF P<1,357 GOSUB 952 IF B#0,167 GOSUB 391 GOTO 166 167 .W=Y .V=X .U=B .X=P .B=J GOSUB 953 GOTO 370 ;BLOCK WO HAJIKU 370 @IF T>10 .T=0 RETURN INC T @IF U>4 RETURN IF J=2,371 IF J=3,376 IF U=2,374 IF U=3,377 RETURN ;LEFT BLOCK 371 GOSUB 385 372 .J=U .X=V .Y=W @GOTO D*5+151 374 GOSUB 385 @GOTO D*5+151 ;RIGHT BLOCK 376 GOSUB 386 GOTO 372 377 GOSUB 386 @GOTO D*5+151 ;DIR LEFT TURN 385 DEC D @IF D>121 .D=3 RETURN ;DIR RIGHT TURN 386 INC D @IF D=4 .D=0 RETURN ;BLOCK ERASE MOVE 390 PUSH Y .B=0 .Y=Q GOSUB 900 .B=0 GOSUB 953 POP Y .B=J GOSUB 900 RETURN 391 PUSH X .B=0 .X=P GOSUB 900 .B=0 GOSUB 953 POP X .B=J GOSUB 900 RETURN ;CURSOR LEFT 455 .D=3 IF X=0,12 PUSH X .X=X-1 GOSUB 952 @IF B#0 POP X GOTO 12 454 .Q=X POP X .B=0 GOSUB 900 .B=0 GOSUB 953 .X=Q GOSUB 993 .B=6 GOSUB 953 GOTO 14 ;CURSOR RIGHT 456 .D=1 IF X=6,12 PUSH X .X=X+1 GOSUB 952 IF B=0,454 POP X GOTO 12 ;CURSOR DOWN 457 .D=2 IF Y=6,12 PUSH Y .Y=Y+1 GOSUB 952 @IF B#0 POP Y GOTO 12 453 .Q=Y POP Y .B=0 GOSUB 900 .B=0 GOSUB 953 .Y=Q GOSUB 993 .B=6 GOSUB 953 GOTO 14 ;CURSOR UP 458 .D=0 IF Y=0,12 PUSH Y .Y=Y-1 GOSUB 952 IF B=0,453 POP Y GOTO 12 ;BLOCK PRINT 900 .A=X*3+2 .C=Y*3+2 LOCATE A,C @IF B>5 .B=0 IF B#5,902 "." CHR $7B "." 'DLLL' CHR $7B CHR $7B CHR $7B 'DLLL' "." CHR $7B "." RETURN 902 IF B#0,901 " " 'DLLL' " " 'DLLL' " " RETURN 901 "+-+" 'DLLL' "I I" 'DLLL' "+-+" LOCATE A+1,C+1 @GOTO B+59 RETURN 60 " " RETURN 61 "L" RETURN 62 "R" RETURN 63 "*" RETURN ;KVRAM ADDRESS 950 .A=$9F .C=00 .F=Y .C=C+X ADC A IF F=0,951 REPEAT .C=C+7 ADC A DEC F UNTIL F=0 951 WIND2 A,C RETURN ;KVRAM READ 952 GOSUB 950 .B=] RETURN ;KVRAM WRITE 953 GOSUB 950 .]=B RETURN ;MEN ADDRESS 960 .H=$A0 .I=00 IF R=0,961 .D=R REPEAT .I=I+49 ADC H DEC D UNTIL D=0 961 RETURN ;MEN TENSOU READ 965 GOSUB 960 .A=$9F .C=00 .F=50 REPEAT WIND2 H,I .B=] WIND2 A,C .]=B .I=I+1 ADC H .C=C+1 ADC A DEC F UNTIL F=0 RETURN ;MEN PRINT 970 .Y=0 REPEAT .X=0 REPEAT GOSUB 950 .B=] GOSUB 900 INC X UNTIL X=7 INC Y UNTIL Y=7 RETURN ;WAKU PRINT 975 LOCATE 1,1 .A=23 REPEAT "*" DEC A UNTIL A=0 .Y=2 REPEAT LOCATE 1,Y "*" DEC A .A=21 REPEAT " " DEC A UNTIL A=0 "*" INC Y UNTIL Y=23 LOCATE 1,23 .A=23 REPEAT "*" DEC A UNTIL A=0 RETURN ;SCREEN PRINT 980 GOSUB 990 GOSUB 899 GOSUB 992 GOSUB 991 RETURN ;TITLE PRINT 990 LOCATE 25,2 " @@ @@@ @@ " LOCATE 25,3 "@ @" LOCATE 25,4 "@ PUSH BON! @" LOCATE 25,5 "@ @" LOCATE 25,6 " @@ @@@ @@ " LOCATE 25,21 "FOR TTI" LOCATE 27,23 "BY J.YAMADA" RETURN ;STEP PRINT 899 LOCATE 26,8 "STEP " PRT1 S RETURN ;ROUNT PRINT 991 LOCATE 26,12 "ROUND " PRT1 R RETURN ;LIFE PRINT 992 LOCATE 26,10 "LIFE " PRT1 G RETURN ;DIRECTION PRINT 993 LOCATE X*3+2,Y*3+2 @GOSUB 50+D RETURN 50 'R' "^" 'DL' "I" 'DL' "V" RETURN 51 'D' "-->" RETURN 52 'R' "I" 'DL' "I" 'DL' "V" RETURN 53 'D' "<--" RETURN ;WAIT 1000 .W=100 REPEAT .W=W-1 UNTIL W=0 RETURN END
0 件のコメント:
コメントを投稿