This is a program written in Sinclair BASIC (48 BASIC) for the Sinclair ZX Spectrum. It uses a hardcoded key (null right now) as seen in the bottom and outputs a stream of integers generated with RC4. Is there any way I can improve this particularly to get around 48 BASIC using one-indexed arrays (which makes RC4 hard to do without a lot of integer additions)?

  10 READ L
  20 DIM K(L)
  30 FOR I=1 TO L
  40 READ K(I)
  50 NEXT I
  60 DEF FN M(A,B)=A-INT (A/B)*B
  65 REM KSA
  70 DIM S(256)
  80 FOR I=0 TO 255
  90 LET S(I+1)=I
 100 NEXT I
 110 LET J=0
 120 FOR I=0 TO 255
 130 LET T=S(I+1)+K(FN M(I,L)+1)
 140 LET J=FN M(J+T,256)
 150 GO SUB 250
 160 NEXT I
 170 LET I=0
 180 LET J=0
 190 LET I=FN M(I+1, 256)
 200 LET J=FN M(J+S(I+1),256)
 210 GO SUB 250
 220 LET T=S(I+1)+S(J+1)
 230 PRINT S(FN M(T,256)+1)
 240 GO TO 190
 250 LET T=S(I+1)
 260 LET S(I+1)=S(J+1)
 270 LET S(J+1)=T
 285 REM KEY
 290 DATA 5
 300 DATA 0,0,0,0,0

KSA is the Key Scheduling Algorithm which initializes a 256-element array S with a permutation based on the key K (an array of size L). PRGA is the Pseudo-Random Generator Algorithm which prints a single integer to the screen at a time based on the contents of S.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.