(05-22-2021, 09:58 AM)Duefectu Wrote: There are no magic and universal anwser!
The first thing is what's the platform target: ZX Spectrum 128K or ZX Spectrum Next?
Also the addresses are not fixed at $6000, $8000, etc., every program has his own demands.
1.a.- I have several variables that are set up as CONST and set a value, e.g. CONST printwidth as UBYTE = 42 but this can't can't be used due to compiling errors but DIM can be used so not a major problem.
There should be no problem using CONST in Vars.bas. What error are you getting?
1.b.- I would need to assign all 100+ variables as $7ff0 but having to start $8000 - 100bytes to enable each variable to be allocated a unique address?
It's only a sample, you can also reserve the space in the main module:
Put it at the end of the code, or at the start with a GOTO before, avoid the program runs over MySpaceVarsCode:MyVarsSpace:
asm
defs 1024 ; Put here the desired space
end asm
Then, in Vars:
Take a look at the + value, byte/ubyte add 1, integer/uinteger add 2, etc...Code:DIM moduleLoad as ubyte AT @MyVarsSpace
DIM moduleParameter1 as ubyte at @MyVarsSpace+1
DIM moduleParameter2 as ubyte at @MyVarsSpace+2
DIM Lives as ubyte at @MyVarsSpace+3
DIM Score as uinteger at @MyVarSpace+4
DIM Level as ubyte at @MYVarSpace+6
DIM HighScore as uinteger at @MyVarSpace+7
2.a.- Are you saying that the above sub routine should be in the Main.bas or in a module-nnn.bas or both?
The ExecModule must be only in Main.bas
2.b.- What is LoadSD () ? I don't have this but I do get what this is trying to do i.e. load in the Module.1.bin into $8000, with 16384k
The LoadSD is a command form NextLib library for ZX Spectrum Next, and you must replace by memory bank swtich or tape/disk load on Spectrum 128K.
2.c.- The last bit seems to be a mixture of two things.
The point are to set moduleLoad and moduleParameterX before to call the next module. Then you must set before returning to main.bas from moduleX.bas
moduleLoad = Next module to load
moduleParameterX = Optional values for the Next module.
3.a - How to return variables or just use the vars.bas as shared anyway?
Set at least "moduleLoad" before return to main module in MOduleX.bas
3.b.- the setting of the next module to load and parameter - This bit I am not sure how this all fits in with my Main.bas , VARS.bas and Module.nnn.bas ?
This is architecture, not coding!
A sample of all:
Sample program:
All modules includes Vars:
- Main.bas: Main module with ExecModule method. Apart from system initialisation, his only funcion is to load and execute the module.
- Module1.bas: Intro of the game. IN: moduleLoad=1, OUT: moduleLoad=2 (menu)
- Module2.bas: Menu of the game. IN: moduleLoad=2, OUT: moduleLoad=depending on the selected option (3-New game, 4-Define keys, 5-Help)
- Module3.bas: Game Phase 1. IN: moduleLoad=3, OUT: moduleLoad=depending on action (6-Game Phase 2, 10-Game over)
- Module4.bas: Define keys. IN: moduleLoad=4, OUT: moduleLoad=2
- Module5.bas: Help of the game. IN: moduleLoad=5, moduleParameter1=module to return (menu or phase if is called inside a gameplay)
- Module6.bas: Game Phase 2. IN: moduleLoad=6, OUT: moduleLoad=depending on action (7-Game Phase 7, 10-Game over)
- Module7.bas: Game Phase 3. IN: moduleLoad=7, OUT: moduleLoad=depending on action (8-Game Phase 8, 10-Game over)
- ....
- Module10.bas: Game over. IN: moduleLoad=10, OUT: moduleLoad=2 (load menu of the game)
Code:#include "Vars.bas"
And all modules set at least moduleLoad value before return, moduleParameters are optional.
Hope it helps!
Than you very much for the detailed explanation which makes things clearer for me now.
The target platform is ZX Spectrum 128K
Have a great weekend