Hello Gentilmens Users MSX of the world,
Unfortunately in my big project in question I have little RAM memory
both first two banks of 16K RAM in total are available
only 32K.
That's why, I think it would be better to put all these 18 levels
gameplay as a scenario on MEMORY MAPPER with OUT&HFE,3
and retrieve them using POKE from BASIC from the MSX2 system area.
Here under you find the two routines as an example so
map them with OUT&HFE,3 and then recall them from BASIC
with POKE and DEFUSR=addrr:A=USR(0)
First part
; ; DOOR KEY LEVELS 1-9 ; ; Prog: LEVELS VIDEOGAME FOR DOOR KEY ; FIRST PART FROM 1 UNTIL 9 LEVELS ; Code: EDIZIONI DATAPRINT MAGAZINE (C) 2018 ; Date: 1/9/2018 ; ; ************************************************************** ; LAST TIME DATA 15/9/2018 in UPDATE SOURCE ASSEMBLER ZILOG Z80 ; FOR MSX2 in MODE SCREEN 4 IN SCREEN 1 ; ************************************************************** ; ; File name DOORLEV.BIN ; ; Coded in TeddyWareZ' Chaos Assembler 3 ; ; (C) 2018 EDIZIONI DATAPRINT MAGAZINE LDIRVM .equ $005C ; routine del BIOS usata per riempire la VRAM CHRPUT .equ $1800 ; CHAR PUT (PRINT BASIC) .org $B000 - 7 .db $fe .dw startProgram,endProgram,startProgram startProgram: jr main sel: .db 0 ; SELECT LEVEL OF THE SCENE IN GAMEPLAY main: ld ix,table ld a,(sel) add a,a ld c,a ld b,0 add ix,bc ld l,(ix+0) ld h,(ix+1) ld de,CHRPUT+64 ld bc,32*22 call LDIRVM RET table: .DW LEVEL1,LEVEL2,LEVEL3,LEVEL4,LEVEL5 .DW LEVEL6,LEVEL7,LEVEL8,LEVEL9 LEVEL1: ......... ......... LEVEL2: ......... ......... LEVEL3: ......... ......... LEVEL4: ......... ......... LEVEL5: ......... ......... LEVEL6: ......... ......... LEVEL7: ......... ......... LEVEL8: ......... ......... LEVEL9: ......... ......... endProgram: .end
Second part
; ; DOOR KEY LEVELS 10-18 ; ; Prog: LEVELS VIDEOGAME FOR DOOR KEY ; SECOND PART FROM 10 UNITL 18 LEVELS ; Code: EDIZIONI DATAPRINT MAGAZINE (C) 2018 ; Date: 16/9/2018 ; ; ************************************************************** ; LAST TIME DATA 16/9/2018 in UPDATE SOURCE ASSEMBLER ZILOG Z80 ; FOR MSX2 in MODE SCREEN 4 IN SCREEN 1 ; ************************************************************** ; ; File name DOORLEV2.BIN ; ; Coded in TeddyWareZ' Chaos Assembler 3 ; ; (C) 2018 EDIZIONI DATAPRINT MAGAZINE LDIRVM .equ $005C ; routine del BIOS usata per riempire la VRAM CHRPUT .equ $1800 ; CHAR PUT (PRINT BASIC) .org $C900 - 7 .db $fe .dw startProgram,endProgram,startProgram startProgram: jr main sel: .db 0 ; SELECT LEVEL OF THE SCENE IN GAMEPLAY main: ld ix,table ld a,(sel) add a,a ld c,a ld b,0 add ix,bc ld l,(ix+0) ld h,(ix+1) ld de,CHRPUT+64 ld bc,32*22 call LDIRVM RET table: .DW LEVEL10,LEVEL11,LEVEL12,LEVEL13,LEVEL14 .DW LEVEL15 LEVEL10: ......... ......... LEVEL11: ......... ......... LEVEL12: ......... ......... LEVEL13: ......... ......... LEVEL14: ......... ......... LEVEL15: ......... ......... endProgram: .end
Here under there is a example of as must to be the loader for manage memory
mapper in OUT&HFE,3 for to memorize 18 LEVELS SCENE GAME in 2 files BINARY from BASIC for MSX2.
10 IF PEEK(&HF677)=128 THEN POKE &HC000,0:POKE&HF677,&HC0:RUN"RAM16K.BAS" 20 OUT &HFE,2:BLOAD"MUSIC.BIN":OUT &HFE,1:REM start music at 4000h 22 PS=(INP(&HA8)AND192)/64:S=PS+PEEK(&HFCC1+PS)+(PEEK(&HFCC5+PS)AND192)/16:REM calculate slot ID 24 POKE &HFA00,&HF7:POKE &HFA01,S:POKE &HFA02,&H0:POKE &HFA03,&H40:POKE &HFA04,&HC9:DEFUSR0=&HFA00 : REM Poke insterslot call to START 26 POKE &HFA05,&HF7:POKE &HFA06,S:POKE &HFA07,&H20:POKE &HFA08,&H40:POKE &HFA09,&HC9:DEFUSR1=&HFA05 : REM Poke insterslot call to INTON 28 POKE &HFA0A,&HF7:POKE &HFA0B,S:POKE &HFA0C,&H50:POKE &HFA0D,&H40:POKE &HFA0E,&HC9:DEFUSR2=&HFA0A : REM Poke insterslot call to INTOFF 29 U=USR(0):U=USR1(0): REM start and play 30 REM poke &Hf677,128:RUN"GAMEBOOT.BAS"
I really hope that some of you are kind and able
to solve my problem of software development.
For the moment it's all, thanks in advance
Best Regards and Happy MSX
(^_^)
Andrea Gasparrini from Italy