Нашлась еще другая версия Кубиков. В ней и бейсик блок больше и бинарник.
Но не понятно, это улучшения или наоборот ранняя версия.
Здесь можно переназначать клавиши (ВВОД) и менять последовательность перемешивания (Макросы).
[0002] 2 A0 = $4B80:
L0 = 64
[0015] 5 DIM C$(8)
[0020] 10 MGR= 3
[0027] 11 PRINT :
PRINT CHR$ (4)"BLOAD RUBIC.BN"
[0043] 12 DIM CY(1,10),RT$(25):
FOR I = 0 TO 25:
READ RT$(I):
NEXT
[006B] 13 DATA ,(,),F,B,U,D,R,L,F',B',U',D',R',L',MF,MB,MU,MD,MR,ML,AF,AB,AU,AD,AR,AL
[00B7] 15 REM CALL $4A34
[00C7] 18 POKE $C731,0
[00D4] 20 XX = FRE (0):
WAIT $C000,$80:
A$ = CHR$ ( PEEK ($C000)):
POKE $C010,0:
C = PEEK ($4A80 + ASC (A$))
[0114] 21 IF A$ = " " THEN TEXT= 34:
HOME :
GOSUB 500:
GET A$:
GOTO 18
[0133] 22 IF A$ = "0" THEN PRINT :
PRINT CHR$ (4)"RUN GM1"
[0150] 23 IF A$ = CHR$ (141) THEN GOSUB 1000:
GOTO 18
[0169] 25 IF A$ > "0" AND A$ < = "9" THEN GOSUB 700:
GOTO 20
[0186] 26 IF A$ > " " AND A$ < = ")" THEN TEXT= 34:
HOME :
GOSUB 600:
GOTO 18
[01A9] 28 IF A$ = "=" THEN GOSUB 400:
GOTO 20
[01BE] 30 POKE $4940,C:
CALL $4941:
GOTO 20
[01D6] 400 FOR I = 1 TO 100:
C = 3 + INT (24 * RND (1)):
POKE $4940,C:
CALL $4941:
NEXT :
RETURN
[0206] 500 REM
[020C] 510 FOR N = 1 TO 9:
PRINT N":";:
A = A0 + (N - 1) * L0
[022C] 520 C = PEEK (A):
IF C > 25 THEN PRINT :
NEXT :
RETURN
[0243] 530 PRINT " ";RT$(C);:
IF C = 2 THEN A = A + 1:
PRINT "^" PEEK (A);
[0269] 540 A = A + 1:
GOTO 520
[0278] 600 N = ASC (A$) - ASC (" ")
[028B] 610 N0 = N:
GOSUB 500:
N = N0
[029E] 620 XX = FRE (0):
PRINT "ENTER MACRO "N:
INPUT "";MC$:
MC$ = MC$ + " ":
M1$ = MC$:
A = A0 + (N - 1) * L0:
NP = 0:
DA = 0:
POKE A,255
[02F6] 630 IF MC$ = " " THEN 690
[0307] 632 IF LEFT$ (MC$,1) = " " THEN MC$ = RIGHT$ (MC$, LEN (MC$) - 1):
GOTO 630
[0332] 634 L = 1:
FOR I = 25 TO 1 STEP - 1:
IF LEFT$ (MC$, LEN (RT$(I))) > < RT$(I) THEN NEXT
[0361] 635 IF I < 1 THEN PRINT "SYNTAX ERROR":
GOTO 680
[037F] 636 MC$ = RIGHT$ (MC$, LEN (MC$) - LEN (RT$(I)))
[039F] 637 IF I = 1 THEN NP = NP + 1:
GOTO 660
[03B5] 638 IF I = 2 THEN NP = NP - 1:
L = 2:
IF NP < 0 THEN PRINT "TOO MANY " CHR$ (162)")" CHR$ (162):
GOTO 680
[03F1] 639 IF I > < 2 THEN 660
[03FF] 640 D0 = 0:
IF LEFT$ (MC$,1) = " " OR LEFT$ (MC$,1) = "^" THEN MC$ = RIGHT$ (MC$, LEN (MC$) - 1):
GOTO 640
[043C] 642 DD = ASC ( LEFT$ (MC$,1)) - ASC ("0"):
IF DD < 0 OR DD > 9 THEN 650
[0465] 644 D0 = 10 * D0 + DD:
MC$ = RIGHT$ (MC$, LEN (MC$) - 1):
IF D0 < 256 THEN 642
[0495] 650 IF D0 > 255 THEN PRINT "NUMBER OF REPETITIONS MUST BE LESS THAN 256":
GOTO 680
[04D5] 660 IF DA + L > L0 - 1 THEN PRINT "MACRO TOO LONG":
GOTO 680
[04FB] 662 POKE A + DA,I:
DA = DA + 1:
IF L = 2 THEN POKE A + DA,D0:
DA = DA + 1
[0525] 664 POKE A + DA,255:
GOTO 630
[0538] 680 PRINT CHR$ (7);:
PRINT LEFT$ (M1$, LEN (M1$) - LEN (MC$));"(^)";MC$; CHR$ (7):
GOTO 620
[056D] 690 IF NP > 0 THEN PRINT "MORE " CHR$ (162)"(" CHR$ (162)" THAN " CHR$ (162)")" CHR$ (162):
GOTO 680
[05AB] 695 RETURN
[05B1] 700 N = ASC (A$) - ASC ("0")
[05C4] 705 A = A0 + (N - 1) * L0:
LV = 0
[05DB] 710 C = PEEK (A):
A = A + 1:
IF C > 2 AND C < 26 THEN GOSUB 790:
GOTO 710
[0600] 720 IF C > 25 THEN RETURN
[060C] 730 IF C = 1 THEN CY(0,LV) = A:
CY(1,LV) = - 1:
LV = LV + 1:
GOTO 710
[0639] 740 IF C > < 2 THEN STOP
[0645] 750 IF CY(1,LV - 1) < 0 THEN CY(1,LV - 1) = PEEK (A)
[0667] 760 IF CY(1,LV - 1) < 2 THEN A = A + 1:
LV = LV - 1:
GOTO 710
[068C] 770 A = CY(0,LV - 1):
CY(1,LV - 1) = CY(1,LV - 1) - 1:
GOTO 710
[06BA] 790 POKE $4940,C:
CALL $4941:
RETURN
[06D0] 1000 TEXT= 34:
PRINT "Change control keys (Y/N) ? ";:
GET A$:
IF A$ = "Y" THEN GOSUB 1009
[070B] 1002 RETURN
[0711] 1009 C = 0:
FOR I = $4B00 TO $4B7F:
POKE I,255:
NEXT
[0731] 1010 PRINT "ENTER KEYS FOR FUNCTIONS ":
PRINT "INITIAL POSITION ";:
GOSUB 2000
[076E] 1020 PRINT "SAVE POSITION ";:
GOSUB 2000
[078B] 1030 PRINT "RESTORE POSITION ";:
GOSUB 2000
[07AB] 1040 PRINT "ROTATE FIRST LAYER CLOCKWISE":
GOSUB 3000
[07D5] 1050 PRINT "ROTATE COUNTERCLOCKWISE":
GOSUB 3000
[07FA] 1060 PRINT "ROTATE SECOND LAYER":
GOSUB 3000
[081B] 1070 PRINT "ROTATE WHOLE CUBE":
GOSUB 3000
[083A] 1080 RETURN
[0840] 2000 WAIT $C000,$80:
A$ = CHR$ ( PEEK ($C000) - 128):
POKE $C010,0:
D = ASC (A$):
IF D > 48 AND D < 58 OR D > 32 AND D < 42 OR PEEK ($4B00 + D) < 255 THEN PRINT CHR$ (7):
GOTO 2000
[08A3] 2010 POKE ($4B00 + D),C:
PRINT :
C = C + 1:
RETURN
[08BE] 3000 PRINT "FRONT ";:
GOSUB 2000:
PRINT "BACK ";:
GOSUB 2000:
PRINT "UP ";:
GOSUB 2000:
PRINT "DOWN ";:
GOSUB 2000:
PRINT "RIGHT ";:
GOSUB 2000:
PRINT "LEFT ";:
GOSUB 2000:
RETURN
Первый свободный байт по смещению $0926
Неизвестная область с размером $0003
Таблица длинных переменных (начало: $0929, длина: $0045):
14 A0
10 BLOAD не используется
4 BN не используется
26 CDEL300 не используется
3 CUBE не используется
16 CY
23 D0
22 DA
24 DD
1 DH не используется
2 DL не используется
6 ETA не используется
15 L0
12 LI не используется
8 LIS не используется
25 LV
20 M1
19 MC
18 N0
21 NP
9 OA не используется
17 RT
11 RUBIC не используется
13 ST не используется
5 TEST не используется
7 XX