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
