Mounting a 16kb asm+16kb BASIC ROM (Development MSX Fora)MSX Resource Center PassionMSX MSX2 contest           
            
English Nederlands Español Português Russian         
 Nieuws
   Voorpagina
  Nieuws archief
  Nieuws onderwerpen

 Informatie
   MSX Fora
  Artikelen
  Recensies
  Beursverslagen
  Fotoreportages
  Beurzen en meetings
  Enquêtes
  Links
  Zoek

 Software
   Downloads
  Webshop

 MRC
   Wie we zijn
  Kom bij ons team
  Doneren
  Policies
  Contact met het MRC
  Link naar Ons
  Statistieken

 Zoek
 
  

  

 Login
 

Gebruikersnaam

Wachtwoord




Ben je nog niet lid? Klik hier en word MSX vriend!


 Statistieken
 

Er zijn 43 gasten en 2 MSX vrienden online

Je bent een anonieme bezoeker.
 

MSX Fora


MSX Fora

Development - Mounting a 16kb asm+16kb BASIC ROM

Schrijver

Mounting a 16kb asm+16kb BASIC ROM

Ada
msx novice
Berichten: 29
Geplaatst: 07 Mei 2005, 16:52   
Hi everyone!


ld hl,ENABLE_BASIC
ld de,51000
ld bc,100
ldir ;Copy the routine to 51000

ld hl,DISABLE_BASIC
ld de,52000
ld bc,100
ldir ;Copy the routine to 52000

ld hl,ENABLE_BASIC_FIRST
ld de,53000
ld bc,100
ldir ;Copy the routine to 53000

jp 53000 ;Jump to the MSX Program, disabling first
;the ROM, enabling the BASIC and executing

ENABLE_BASIC:
call RSLREG
res 2,a
res 3,a
call WSLREG ;Enables the BASIC interpreter

ld a,1
ld [fbb1h],a ;Indicates it's executing a BASIC ROM

call RSLREG
set 4,a
res 5,a
call WSLREG ;Enables page 2 (the cartridge) which contains
;the basic program
ret


ENABLE_BASIC_FIRST:

call RSLREG
res 2,a
res 3,a
call WSLREG ;Enables the BASIC interpreter

call RSLREG
set 4,a
res 5,a
call WSLREG ;Enables page 2 (the cartridge) which contains
;the basic program

ld a,1
ld [fbb1h],a ;Indicates it's executing a BASIC program

jp 73ACh ;Execute RUN instruction (launches BAS program)
ret


DISABBLE_BASIC:
call RSLREG
set 2,a
res 3,a
call WSLREG ;Enables the cartridge (page 1) which contains
;the asm routines
jp ROUTINES


;---------------------------------------------
;Insert asm routines here
;---------------------------------------------
ROUTINES:

ld hl,MESSAGE ;Just for testing
call PRINT_MESSAGE
jp 51000 ;Enables BASIC interpreter again



I'm trying to make a 32kb rom containing 16kb of asm in page 1 and 16kb of BASIC in page 2.

I pretend to execute the rom, execute some routines and then it executes the basic program (which is the main program) and call later some routines contained in the asm part using some defusr's.

I mount the rom using an hex editor. It executes the BASIC program (shows 'HELLO') and is fine.

Here's the problem. I define defusr1=52000. It disables the BASIC, enables the cartridge, executes anything and returns to BASIC, enabling the interpreter. If I use u=usr1(0) once, it runs great (it shows'HELLO AGAIN',g.e.). But if I use it twice, the computer hangs.

Surprisingly, if I execute run between the instructions, it works fine.

G.e.:

u=usr1(0)
'HELLO AGAIN'
run
u=usr1(0)
'HELLO AGAIN'

But that's something I don't want. If I omit the run, the computer hangs

When I have no BASIC program (I have mounted only the asm part) and execute the u=usr1(0), everything is fine and I can do it as many times as I want.

I have indicated the interpreter it is executing a BASIC ROM, but it fails anyway.

I think it's quite interesting as it helps to overcome the problem of having only 16kb BASIC ROMs.

Please help me with any kind of info

Many thanks!



 
 







(c) 1994 - 2008 Stichting MSX Resource Center. MSX is een trademark van MSX Licensing Corporation.