09-27-2021, 01:50 PM
(This post was last modified: 09-27-2021, 02:03 PM by maeloterkim.)
Hi
in the original ZX spectrum basic you can do this
goto MyVariable or gosub MyVariable where this variable must be a line number
this way we can goto or gosub to diferents routines that are in diferents line numbers
but i tried this example with the compiler and says error: Syntax Error. Unexpected token 'MyRoutines' <ARRAY_ID>
This is the example you can try:
dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1
@MyRoutine2, _ '' address of my routine 2
@MyRoutine3 _ '' address of my routine 3
}
dim myVariable as uByte = 1
gosub MyRoutines(myVariable) '' you can try goto too
myLoop:
goto myLoop
MyRoutine1:
print "MyRoutine 1"
return
MyRoutine2:
print "MyRoutine 2"
return
MyRoutine3:
print "MyRoutine 3"
return
Is possible do something like that without a lot of ifs ?
I think i found a solution
The solution i found is this:
dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1
@MyRoutine2, _ '' address of my routine 2
@MyRoutine3 _ '' address of my routine 3
}
dim myVariable as uByte = 0
poke uInteger (@pokeGosub1 + 1), MyRoutines(myVariable)
pokeGosub1:
gosub MyRoutine1
myLoop:
goto myLoop
MyRoutine1:
print "MyRoutine 1"
return
MyRoutine2:
print "MyRoutine 2"
return
MyRoutine3:
print "MyRoutine 3"
return
I do a poke with the routine direction just before the gosub
maybe you can implement this with the compiler
this way the behaviour is more like the original ZX spectrum
in the original ZX spectrum basic you can do this
goto MyVariable or gosub MyVariable where this variable must be a line number
this way we can goto or gosub to diferents routines that are in diferents line numbers
but i tried this example with the compiler and says error: Syntax Error. Unexpected token 'MyRoutines' <ARRAY_ID>
This is the example you can try:
dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1
@MyRoutine2, _ '' address of my routine 2
@MyRoutine3 _ '' address of my routine 3
}
dim myVariable as uByte = 1
gosub MyRoutines(myVariable) '' you can try goto too
myLoop:
goto myLoop
MyRoutine1:
print "MyRoutine 1"
return
MyRoutine2:
print "MyRoutine 2"
return
MyRoutine3:
print "MyRoutine 3"
return
Is possible do something like that without a lot of ifs ?
I think i found a solution
The solution i found is this:
dim MyRoutines(2) as uInteger => { @MyRoutine1, _ '' address of my routine 1
@MyRoutine2, _ '' address of my routine 2
@MyRoutine3 _ '' address of my routine 3
}
dim myVariable as uByte = 0
poke uInteger (@pokeGosub1 + 1), MyRoutines(myVariable)
pokeGosub1:
gosub MyRoutine1
myLoop:
goto myLoop
MyRoutine1:
print "MyRoutine 1"
return
MyRoutine2:
print "MyRoutine 2"
return
MyRoutine3:
print "MyRoutine 3"
return
I do a poke with the routine direction just before the gosub
maybe you can implement this with the compiler
this way the behaviour is more like the original ZX spectrum