1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*!
# Conversions and Compatibility

64K BASIC aims for compatibility with a time when BASIC usually came on ROM.
Instead of keeping your compiler up to date as we do today, you would adjust
the source code. Here's some tips.

## RANDOMIZE X
Old computers often didn't have useful entropy, not even a real-time clock.
Many implementations would reset the random number generator to the same state
on ever run, but almost all would reset to the same state every boot.
`RANDOMIZE` was used to get around this by asking the user for a seed.
64K BASIC reseeds the random number generator with good entropy on every run,
so in most cases you simply delete the unneeded code.

`RANDOMIZE` without an X will prompt the user for a seed value.
This allowed someone to replay the same game if they wanted.
To emulate this behavior, here's a replacement.

```text
INPUT "Random Number Seed";A:RND=RND(-ABS(A))
```

Probably the most common way to seed the random number generator is to time
how long it takes the user to respond to a prompt. This is not necessary
in 64K BASIC so if you see something similar to the following, you can
delete it.

```text
PRINT "Press any key to continue":WHILE INKEY$="":RND=RND():WEND
```

## GET A$

To get a single keypress and store it in A$, 64K BASIC uses the newer style:
```text
A$ = INKEY$
```

## Integer BASIC
Some versions of BASIC didn't support floating point types. Use `DEFINT`
to change the default variable type to integer. The RND function needed
to work without floats so we'll `DEF FN` a new one. Replace every `RND`
with `FNRND`.
```text
10 DEFINT A-Z:DEF FNRND(X)=INT(RND()*X+1)
```

## LOCATE ROW,COL

This is probably a GW-BASIC program so it might use graphics and sound.
However, in many cases it is simply used to center text on the screen.
Use `STRING$` to get a bunch of newlines and `SPC(X)` to move to the column.
```text
REM CLS:LOCATE 5,20:PRINT "TITLE"
CLS:PRINT STRING$(5,10)SPC(20)"TITLE"
```

## SOUND and BEEP

64K BASIC does not support sound. Your terminal might beep with:
```text
PRINT CHR$(7)
```

## KEY OFF/ON

This controls display of the status line in GW-BASIC. Usually a program turns
it off at the start and back on at the end. You can delete these.

## OPTION BASE

This selects if arrays start at 0 or 1. This isn't needed since memory isn't scarce.
Also, 64K BASIC arrays are sparse so by simply not using 0 it won't be allocated.

*/