Ethan Dicks wrote:
On 5/12/05, lee davison <leeedavison at
yahoo.co.uk> wrote:
>Even
BASIC has a call stack that will eventually overflow.
On a 6502 (PET, Apple II...) it's not that
deep because of
the 1-page stack. ISTR about 5 levels of GOSUBs were possible
before you ran the risk of stack overflow, but it might have
been as deep as 8.
Assuming the stack is cleared by RUN then you can nest 40 to
50 levels of GOSUBs in most 6502 BAISCs.
FOR ... NEXT is the stack hog, you can usually only nest that
15 deep or less.
With C= BASIC you have lass room as the top 10 bytes or so of
the stack are reserved for float to ASCII conversion.
Maybe that was it... MS BASIC on a C= PET, with subroutine calls and
FOR/NEXT nested deep enough that one _could_ see the bottom. I never
did a GOSUB-only test, but ISTR having to design some stuff with stack
depth in mind (I did a lot of stuff with Interactive Fiction/Adventure
Games in the late 1970s in BASIC, then I learned 6502 assembly ;-)
Since we are about vintage computers here, I tried the following on a
few emulators and real machines:
10 I=0
20 PRINT I:I=I+1:GOSUB 20
10 I=0
20 FOR J=1 TO 10:I=I+1:PRINT I:GOTO 20
Wang 2200 BASIC: 45 GOSUBs, 54 FOR loops
Wang 2200 BASIC-2: 61 GOSUBs, 61 FOR loops
Applesoft BASIC: 25 GOSUBs, 11 FOR loops*
TRS-80 48K Model III: 9596 GOSUBs, **
HP87-XM BASIC: 255 GOSUBs, **
Sol-20 BASIC/5: 33 GOSUBs, 6 FOR loops
Sol-20 Extended BASIC (48K): 11223 GOSUBs, 1978 FOR loops
IBM 5120: 20 GOSUBs, ***
* Applesoft: The test program for FOR loops didn't fail. I had to nest
11 FOR loops deep to find the limit.
** TRS-80, HP-87: BASIC apparently doesn't allow stacking FOR loops
using the same index variable. The program just runs forever, and I
didn't feel like attempting hundreds/thousands of nested FOR loops manually.
*** IBM 5120: refused to run program and I didn't attempt to nest dozens
manually