Observations from the comments to date and other questions:

  *   The first 2 bytes corruption may not affect all files. (Does the file 
size matter?)
  *   Brian’s testing seems to indicate that the issue isn’t restricted to 
SD2TPDD.
  *   I tried Dans suggestion of adding the ‘break’ around line 191. It has not 
solved the trailing null problem.
  *   I have noticed references to DOS100.CO in the comments and on GitHub. 
Under what circumstances does it need to be there?
  *   How can we check that we are using the same version of TS-DOS?
  *   Is capitalisation of the filename important on the SD card?
  *   Is file size important, i.e., does the final packet of file data sent 
have to be a particular size or power of 2 or buffer rollover point to trigger 
this?
  *   Is it possible that there is also a bug in TS-DOS?

More details of my configuration:

  *   The file I am using is 2 levels down on the SD card i.e., zzzzzz -> games 
-> dice2.do
  *   The file is 2379 bytes long.
  *   The M100 has a REX fitted with TS-DOS ROM loaded.

The file I have been using follows…

1 '**** Dice Program ****
2 'Dice rolling program for Model 100,102,200
3 'Gary Hammond 2016
4 '[email protected]
10 '*** Initialisation ***
30 DIM DR(5)     ' Dice roll
40 PP=41         ' Print Position
50 DT$="*"       ' Dice dot symbol
100 '*** Main Program ***
110 GOSUB 200 'Get the number of die to roll
120 GOSUB 1000 'Randomise the random number
130 CLS
140 PRINT@292,"Roll or Quit (R/Q)?";
150 GOSUB 300 'Wait for roll/quit command
150 IF AN = 1 THEN GOSUB 400 ELSE GOTO 170 'Either roll the dice or quit
160 GOTO 140
170 CLS
180 PRINT"Goodbye!"
199 END
200 '*** Get the number of die to roll ***
210 CLS
220 PRINT@285,"How many die to roll (1-4)";
230 A$ = INKEY$
240 IF A$ = "1" OR A$ = "2" OR A$ = "3" OR A$ = "4" THEN 260
250 GOTO 230
260 DN = VAL(A$)
299 RETURN
300 '*** Wait for roll/quit command ***
310 A$ = INKEY$
320 IF A$ = "" THEN 310
330 IF A$ = "R" OR A$ = "r" OR A$ = " " THEN AN = 1:RETURN
340 IF A$ = "Q" OR A$ = "q" THEN AN = 0:RETURN
350 GOTO 310
399 RETURN
400 '*** Roll the dice ****
410 CLS:PP=41 ' Print position for die
420 FOR RN = 1 TO DN
430   Y = RND(1)
440   LET Z=(RND(Y)*6+1)
450   LET DR(RN)=INT(Z)
460   GOSUB 500 'Draw the dice
470   PP = PP + 10
480 NEXT RN
499 RETURN
500 '*** Draw the dice ***
510 PRINT@PP,CHR$(235)+STRING$(5,231)+CHR$(236)
520 FOR X = 1 TO 3
530   PRINT@PP+(40*X),CHR$(233)+STRING$(5," ")+CHR$(234)
540 NEXT X
550 PRINT@PP+160,CHR$(237)+STRING$(5,232)+CHR$(238)
560 ON DR(RN) GOSUB 650,700,750,800,850,900
570 RETURN
650 '*** Draw the 1 dice face ***
660 PRINT@PP+83,DT$
670 RETURN
700 '*** Draw the 2 dice face ***
710 PRINT@PP+44,DT$
720 '
730 PRINT@PP+122,DT$
740 RETURN
750 '*** Draw the 3 dice face ***
760 PRINT@PP+44,DT$
770 PRINT@PP+83,DT$
780 PRINT@PP+122,DT$
790 RETURN
800 '*** Draw the 4 dice face ***
810 PRINT@PP+42,DT$+" "+DT$
820 '
830 PRINT@PP+122,DT$+" "+DT$
840 RETURN
850 '*** Draw the 5 dice face ***
860 PRINT@PP+42,DT$+" "+DT$
870 PRINT@PP+83,DT$
880 PRINT@PP+122,DT$+" "+DT$
890 RETURN
900 '*** Draw the 6 dice face ***
910 PRINT@PP+42,DT$+" "+DT$
920 PRINT@PP+82,DT$+" "+DT$
930 PRINT@PP+122,DT$+" "+DT$
940 RETURN
1000 REM **** RANDONMISE THE RANDOM VALUE ****
1010 TS = VAL(RIGHT$(TIME$,2))
1020 TM = VAL(MID$(TIME$(4,2))
1030 FOR N = 1 TO (TM * TS) + 13
1040   Y = RND(1)
1050 NEXT N
1060 RETURN


Reply via email to