Karoshi MSX Community
05 de Julio de 2021, 11:52:17 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Megaroms en asMSX: Comprendiendo como hacerlo y como va  (Leído 8192 veces)
0 Usuarios y 1 Visitante están viendo este tema.
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« : 30 de Junio de 2011, 03:14:53 pm »

Mentes privilegiadas del conocimiento de 8 en 8 bits,

Estoy en fase de empezar a subir Level UP y entrar en el oscuro mundo de las megaroms para MSX. Antes de empezar este post, ayer miré de empaparme de conocimientos, lecturas del foros, la odisea de nerlaska para hacerlo en C, bifi.msxnet.org, codigo ejemplo del asMSX y creo que tengo la base del conocimiento.

Me gustaria explicar aquí lo que he entendido a ver si lo tengo claro o me corregiis lo que tenga mal aprendido.

Me ha gustado el konami scc 8ks. Por lo que he entendido, paginar a 8ks  es coger de la direccion 4000h a la BFFFh (32ks) y tratar cada cacho de 8ks como una pagina. Total 4 paginas.
Supongamos que un megarom de ese tipo es como un libro de 64 paginas. Y siguiendo lo que contaba nerlaska, abres las 3 primeras paginas del libro (24ks) y vas cambiando solo la 4arta hoja (8ks). Tonces en esos 24 ks, nerlaska ponia todo su motor de juego, rutinas. Y la "ventana" de 8ks, lo va cambiando para cargar graficos al VDP, poner musicas, etc.
Esto es lo que he entendido a nivel teorico. Corregidme si me equivoco eh!.

Por otra parte, como se mete esto en el asMSX.
Para empezar la cabecera deberia ser tal que así:
.bios
.megarom        KonamiSCC
.start          JUEGO
.db             "Mi juego se llama algo"
JUEGO:
.search

Entiendo de JUEGO estará muy cerca de 4000h, que es donde empieza un cartucho cualquiera. Por tanto esto pertenece a la primera pagina (pagina 0) del MegaRom, no?.
Desde este punto me puedo extender hasta los 24ks, es decir 9FFFh
Tonces, si quiero crear datos o codigo para la cuarta página (la 3) pongo
SUBPAGE 3 AT 0A000h
y meto lo que quiera hasta 8ks.
Para crear otras paginas voy variando el numero de SUBPAGE pero siempre en A000h. Así hasta la pagina 63.

Luego si en el codigo (los 24ks , tres primeras paginas) necesito acceder a datos de una pagina en concreto hago un
SELECT N AT 0A000h
Donde N puede ser un numero o un registro del Z80 y así voy intercambiando las páginas de 8ks.

Pues hasta aquí. Acceder a RAM más allá de los 16ks de 0C000h a 0FFFFh ya pa otro dia. Smiley

¿Me podeis confirmar si he entendido bien como hacerlo hasta aquí?

Por otro lado...el tema del SCC. He leido que está mapeado entre el 9800h y el 98FFh, por tanto en la tercera pagina (la pagina 2).¿Es correcto pensar entonces que ahí no debo tener codigo, que lo tengo que reservar?

Espero vuestros consejos y aprobación si lo he entendido bien.


En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 30 de Junio de 2011, 03:47:20 pm »

El sistema de errores te dará pistas, pero cada página no puede contener más datos o código que el tamaño definido. Es decir, si empleas un mapper de 8KB, deberás usar páginas de 8KB como máximo, incluso aunque el código se ejecute linealmente. Por lo tanto, no puedes meterle 24KB del tirón sin dividir ese código formalmente en 3 páginas diferentes.

Te dejo un ejemplo de código de un megaROM sencillo, en el que hay un menú y un cargador en la página 0, y distintas ROMs cargadas en las páginas siguientes, con lo cual, se puede lanzar el juego que queráis eligiéndolo con los cursores. El código es viejo, feo y probablemente no tan compatible como a mi me gustaría, pero os servirá para haceros una idea:

Código:
;----------------------------------------------------------

; MEGAROM EXAMPLE for asMSX v.0.12e

;----------------------------------------------------------

;---------------------------------------------------------

; (c) KAROSHI CORPORATION, 2006

;     Eduardo Robsy Petrus

;     Jon Cortazar Abraido

;---------------------------------------------------------



;---------------------------------------------------------

; CONSTANTS

;---------------------------------------------------------

; VRAM addresses

        CHRTBL  equ     0000h   ; Pattern table

        NAMTBL  equ     1800h   ; Name table

        CLRTBL  equ     2000h   ; Colour table

        SPRTBL  equ     3800h   ; Sprite pattern table

        SPRATR  equ     1b00h   ; Sprite attributtes

; System variables

        CLIKSW  equ     0f3dbh  ; Keyboard sound

        FORCLR  equ     0f3e9h  ; Foreground colour

;---------------------------------------------------------

       

;---------------------------------------------------------

; ASSEMBLER DIRECTIVES (asMSX)

;---------------------------------------------------------

        .bios

        .megarom        KonamiSCC

        .start          INIT

        .db             "[asMSX 0.12e] MegaROM example",1Ah



INIT:



        ld      sp,0E800h



; Locate another 32 KB

        .search



; BASIC: COLOR 15,0,0

        ld      hl,FORCLR

        ld      [hl],15

        inc     hl

        ld      [hl],0

        inc     hl

        ld      [hl],0



; BASIC: SCREEN 2

        call    INIT32



; BASIC: SCREEN ,2

        ld      bc,0e201h

        call    WRTVDP



; BASIC: KEY OFF

        call    ERAFNK



; Hide screen

        call    DISSCR



; NAMCO font charset

        ld      hl,RLE_FONT

        ld      de,CHRTBL+33*8

        call    DEPACK_VRAM



; Colour font

        ld      hl,CLRTBL

        ld      bc,16

        ld      a,0F0h

        call    FILVRM



; Draw texts

        ld      hl,TXT_LIST

        ld      de,NAMTBL+6+32*2

        ld      b,9

@@LOOP:

        push    bc

        push    hl

        push    de

        ld      bc,26

        call    LDIRVM

        pop     hl

        ld      bc,32*2

        add     hl,bc

        ex      de,hl

        pop     hl

        ld      bc,26

        add     hl,bc

        pop     bc

        djnz    @@LOOP



; Define sprite

        ld      hl,SPR_HAND

        ld      de,SPRTBL

        ld      bc,24

        call    LDIRVM



; Set sprite

        ld      hl,ATR_HAND

        ld      de,SPRATR

        ld      bc,4

        call    LDIRVM



; Show screen

        call    ENASCR



MAIN:



; Run game

        xor     a

        call    GTTRIG

        jr      nz,LAUNCH



; Move hand

        xor     a

        call    GTSTCK

        cp      1

        jr      nz,@@NO_UP



; Move up

        ld      hl,SPRATR

        call    RDVRM

        cp      14

        jr      z,MAIN

        sub     16

        call    WRTVRM

        jr      DONE



@@NO_UP:

        cp      5

        jr      nz,MAIN



; Move down

        ld      hl,SPRATR

        call    RDVRM

        cp      14+8*16

        jr      z,MAIN

        add     16

        call    WRTVRM



DONE:

        ld      b,15

@@WAIT:

        halt

        djnz    @@WAIT



        jr      MAIN



; Launch a game

LAUNCH:



; Determine cursor position

        ld      hl,SPRATR

        call    RDVRM



        sub     14



        srl     a

        srl     a

        srl     a

        srl     a



        inc     a



; Check if it is a 8 KB game or a 32 KB game

        cp      8



        jr      nc,COPY



; Select 8 KB game page

        SELECT a AT 8000h



; Boot game

        ld      hl,8002h

        ld      e,[hl]

        inc     hl

        ld      d,[hl]

        ex      de,hl

        jp      [hl]





; Copy boot process from ROM to RAM

COPY:

        push    af

        ld      hl,BOOT

        ld      de,0C000h

        ld      bc,END_BOOT-BOOT

        ldir

        jp      0C000h





; 32 KB game boot process



BOOT:



        .phase  0C000h



; Calculate page index

        pop     af

        sub     8

        add     a

        add     a

        add     8



; Select four 8 KB pages

        SELECT  a AT 4000h

        inc     a

        SELECT  a AT 6000h

        inc     a

        SELECT  a AT 8000h

        inc     a

        SELECT a AT 0A000h



; Boot the game

        ld      hl,4002h

        ld      e,[hl]

        inc     hl

        ld      d,[hl]

        ex      de,hl

        jp      [hl]



        .dephase



END_BOOT:



;----------------------------------------------------------



;----------------------------------------------------------

DEPACK_VRAM:

; Depacks RLE encoded data directly to VRAM

; Parameters: HL=RLE data source; DE=VRAM destination

;----------------------------------------------------------

; Set VDP to write to the given address

        ex      de,hl

        call    SETWRT

        ex      de,hl

; Depack run-length encoded data

@@LOOP:

        ld      a,[hl]

        inc     hl

; Test if is single byte

        cp      0C0h

        jr      c,@@SINGLE

; Adjust counter

        and     3Fh

        inc     a

        ld      b,a

; Read data byte

        ld      a,[hl]

        inc     hl

; Copy to VRAM

@@COPY:

        out     [98h],a

        djnz    @@COPY

        jr      @@LOOP

@@SINGLE:

        ld      c,a

; Test if end of data code (00h,00h)

        or      [hl]

        ld      a,c

        ret     z

        ld      b,1

        jr      @@COPY

;----------------------------------------------------------





;----------------------------------------------------------

; DATA

;----------------------------------------------------------



; Game list

TXT_LIST:

db      "RKOS01 CLASSIC PONG       "

db      "RKOS02 CLASSIC MINESWEEPER"

db      "RK702 SNAIL MAZE          "

db      "RK703 DUCK HUNT           "

db      "RK704 SOUKOBAN POCKET     "

db      "RK705 FACTORY INFECTION   "

db      "RK706 PICTURE PUZZLE      "

db      "RK708 SAIMAZOOM           "

db      "RK709 GRIEL'S QUEST       "



; Classic arcade font (Namco style)

RLE_FONT:

 db 00Ch,0C2h,01Eh,00Ch,000h,00Ch,000h,0C1h

 db 036h,024h,0C4h,000h,036h,07Fh,0C2h,036h

 db 07Fh,036h,000h,00Ch,01Fh,02Ch,01Eh,00Dh

 db 03Eh,00Ch,0C1h,000h,063h,066h,00Ch,018h

 db 033h,063h,000h,038h,0C1h,064h,038h,04Dh

 db 046h,03Bh,000h,0C1h,00Ch,008h,0C4h,000h

 db 006h,00Ch,0C2h,018h,00Ch,006h,000h,018h

 db 00Ch,0C2h,006h,00Ch,018h,0C1h,000h,00Ch

 db 02Dh,0C1h,01Eh,02Dh,00Ch,0C1h,000h,0C1h

 db 00Ch,03Fh,0C1h,00Ch,0C5h,000h,0C1h,00Ch

 db 004h,008h,0C2h,000h,03Eh,0C8h,000h,0C1h

 db 00Ch,0C1h,000h,003h,006h,00Ch,018h,030h

 db 060h,000h,01Ch,026h,0C2h,063h,032h,01Ch

 db 000h,00Ch,01Ch,0C3h,00Ch,03Fh,000h,03Eh

 db 063h,007h,01Eh,03Ch,070h,07Fh,000h,03Fh

 db 006h,00Ch,01Eh,003h,063h,03Eh,000h,00Eh

 db 01Eh,036h,066h,07Fh,0C1h,006h,000h,07Eh

 db 060h,07Eh,0C1h,003h,063h,03Eh,000h,01Eh

 db 030h,060h,07Eh,0C1h,063h,03Eh,000h,07Fh

 db 063h,006h,00Ch,0C2h,018h,000h,03Eh,0C1h

 db 063h,03Eh,0C1h,063h,03Eh,000h,03Eh,0C1h

 db 063h,03Fh,003h,006h,03Ch,0C1h,000h,0C1h

 db 00Ch,000h,0C1h,00Ch,0C2h,000h,0C1h,00Ch

 db 000h,0C1h,00Ch,004h,008h,006h,00Ch,018h

 db 030h,018h,00Ch,006h,0C2h,000h,03Eh,000h

 db 03Eh,0C2h,000h,030h,018h,00Ch,006h,00Ch

 db 018h,030h,000h,03Eh,063h,003h,00Eh,018h

 db 000h,018h,000h,03Ch,042h,099h,0C1h,0A1h

 db 099h,042h,03Ch,01Ch,036h,0C1h,063h,07Fh

 db 0C1h,063h,000h,07Eh,0C1h,063h,07Eh,0C1h

 db 063h,07Eh,000h,01Eh,033h,0C2h,060h,033h

 db 01Eh,000h,07Ch,066h,0C2h,063h,066h,07Ch

 db 000h,07Fh,0C1h,060h,07Ch,0C1h,060h,07Fh

 db 000h,07Fh,0C1h,060h,07Ch,0C2h,060h,000h

 db 01Fh,030h,060h,067h,063h,033h,01Fh,000h

 db 0C2h,063h,07Fh,0C2h,063h,000h,03Fh,0C4h

 db 00Ch,03Fh,000h,0C4h,003h,063h,03Eh,000h

 db 063h,066h,06Ch,078h,07Ch,06Eh,067h,000h

 db 0C5h,060h,07Fh,000h,063h,077h,0C1h,07Fh

 db 06Bh,0C1h,063h,000h,063h,073h,07Bh,07Fh

 db 06Fh,067h,063h,000h,03Eh,0C4h,063h,03Eh

 db 000h,07Eh,0C2h,063h,07Eh,0C1h,060h,000h

 db 03Eh,0C2h,063h,06Fh,066h,03Bh,000h,07Eh

 db 0C1h,063h,067h,07Ch,06Eh,067h,000h,03Ch

 db 066h,060h,03Eh,003h,063h,03Eh,000h,03Fh

 db 0C5h,00Ch,000h,0C5h,063h,03Eh,000h,0C2h

 db 063h,077h,03Eh,01Ch,008h,000h,0C1h,063h

 db 06Bh,0C1h,07Fh,036h,022h,000h,063h,077h

 db 03Eh,01Ch,03Eh,077h,063h,000h,0C2h,033h

 db 01Eh,0C2h,00Ch,000h,07Fh,007h,00Eh,01Ch

 db 038h,070h,07Fh,000h,07Ch,0C4h,060h,07Ch

 db 0C1h,000h,040h,020h,010h,008h,004h,0C1h

 db 000h,07Ch,0C4h,00Ch,07Ch,0C2h,000h,010h

 db 028h,044h,0C9h,000h,07Ch,0C1h,0FFh,0C5h

 db 000h,0C1h,0FFh,003h,000h,0C2h,003h,000h

 db 0C2h,003h,000h,0C2h,003h,0C6h,000h,0C1h

 db 0FFh,0C2h,003h,000h,0C1h,003h,0C1h,0FFh

 db 0C1h,00Fh,0C5h,01Fh,0C0h,0C0h,0C0h,0E7h

 db 0C4h,0FFh,0C0h,0FEh,0C5h,0FFh,08Fh,007h

 db 080h,0C0h,0E0h,0C0h,0F0h,0C0h,0F8h,0C0h

 db 0FCh,0C0h,0FEh,0C1h,0FFh,0C2h,000h,001h

 db 003h,0C1h,007h,00Fh,007h,03Fh,0C4h,0FFh

 db 0C1h,0FEh,0C4h,0FFh,00Fh,007h,000h,0C0h

 db 0C0h,0C0h,0F0h,0C0h,0F8h,0C0h,0FCh,0C1h

 db 0FEh,0C0h,0FFh,00Fh,0C6h,01Fh,0C0h,0C1h

 db 0C0h,0E7h,0C4h,0FFh,0C0h,0FCh,0C5h,0FFh

 db 01Fh,00Fh,000h,0C0h,0C0h,0C1h,0F0h,0C1h

 db 0F8h,0C1h,0FCh,000h,003h,00Fh,01Fh,0C1h

 db 03Fh,0C1h,07Fh,0C5h,0FFh,0C0h,0F8h,0C0h

 db 0E0h,083h,0C0h,0E7h,0C4h,0FFh,07Fh,0C1h

 db 0F0h,0C5h,0F8h,0C7h,01Fh,0C0h,0FCh,0C2h

 db 0F8h,0C3h,0F0h,003h,0C1h,001h,0C4h,000h

 db 0C7h,0FFh,00Fh,0C6h,09Fh,0C0h,0FCh,0C1h

 db 0F8h,0C4h,0F0h,003h,0C1h,001h,0C4h,000h

 db 0C7h,0FFh,01Fh,0C6h,09Fh,0C1h,0F8h,0C5h

 db 0F0h,00Fh,0C6h,007h,0C7h,0FCh,07Fh,0C6h

 db 0FFh,0C0h,0E0h,0C1h,0C0h,0C4h,080h,03Fh

 db 0C1h,01Fh,0C4h,00Fh,0C7h,0F8h,0C7h,01Fh

 db 0C2h,0F8h,0C0h,0FCh,0C0h,0FEh,0C2h,0FFh

 db 000h,0C1h,001h,003h,007h,08Fh,0C6h,0FFh

 db 0C1h,0FEh,0C0h,0FCh,0C2h,09Fh,0C1h,00Fh

 db 0C1h,007h,003h,0C0h,0F0h,0C1h,0F8h,0C0h

 db 0FCh,0C0h,0FEh,0C2h,0FFh,000h,0C1h,001h

 db 003h,007h,00Fh,0C6h,0FFh,0C1h,0FEh,0C0h

 db 0FCh,0C2h,09Fh,0C4h,01Fh,0C7h,0F0h,0C7h

 db 007h,0C7h,0FCh,0C2h,0FFh,0C2h,07Fh,03Fh

 db 01Fh,080h,0C1h,0C0h,0C1h,0E0h,0C0h,0F8h

 db 0C1h,0FFh,00Fh,0C1h,01Fh,03Fh,07Fh,0C2h

 db 0FFh,0C7h,0F8h,0C7h,01Fh,0C1h,0FFh,0C0h

 db 0F7h,0C0h,0F1h,0C3h,0F0h,0C3h,0FFh,0C3h

 db 000h,0C0h,0F8h,0C0h,0F0h,0C0h,0E0h,080h

 db 0C3h,000h,001h,0C6h,000h,0C1h,0FFh,03Fh

 db 007h,0C3h,000h,0C2h,0FFh,0C0h,0FEh,0C3h

 db 000h,0C0h,0F8h,0C0h,0F0h,0C0h,0C0h,0C4h

 db 000h,0C1h,01Fh,00Fh,007h,0C3h,000h,0C1h

 db 0F0h,0C0h,0E0h,0C0h,0C0h,0C3h,000h,0C1h

 db 007h,003h,001h,0C3h,000h,0C1h,0FCh,0C0h

 db 0F8h,0C0h,0F0h,0C3h,000h,01Fh,00Fh,003h

 db 000h,03Fh,0C2h,07Fh,0C3h,0FFh,000h,0C1h

 db 080h,0C0h,0C0h,0C1h,0FFh,0C0h,0EFh,08Fh

 db 00Fh,0C1h,01Fh,03Fh,0C6h,0F8h,0C0h,0F0h

 db 0C4h,01Fh,0C1h,00Fh,000h,0C4h,0F0h,0C0h

 db 0E0h,0C0h,0C0h,0FFh,000h,0D0h,000h,0C1h

 db 07Fh,03Fh,01Fh,00Fh,003h,0C1h,000h,0C0h

 db 0F0h,0C4h,0FFh,07Fh,000h,0C5h,0FFh,0C0h

 db 0F8h,000h,0C1h,0F0h,0C0h,0E0h,0C0h,0C0h

 db 080h,0C2h,000h,000h,000h





; Hand sprite

SPR_HAND:

 db      0,$0f,$1f,$ff,$ff,$ff,$ff,$0f

 db      0,0,0,0,0,0,0,0

 db      0,0,$fe,$e0,$e0,$c0,$c0,$80



; Hand attributes

ATR_HAND:

 db 14,24,0,15

;---------------------------------------------------------



;---------------------------------------------------------

; INCLUDE ALL GAMES

;---------------------------------------------------------

; Includes all games in corresponding megaROM subpages





; Include CLASSIC PONG

SUBPAGE 1 AT 8000h



.incbin "PONG.ROM"



; Include MINE SWEEPER

SUBPAGE 2 AT 8000h



.incbin "MINE.ROM"



; Include SNAIL MAZE

SUBPAGE 3 AT 8000h



.incbin "MAZE.ROM"



; Include DUCK HUNT

SUBPAGE 4 AT 8000h



.incbin "DUCKHUNT.ROM"



; Include SOUKOBAN POCKET EDITION

SUBPAGE 5 AT 8000h



.incbin "SOUKOBAN.ROM"



; Include FACTORY INFECTION

SUBPAGE 6 AT 8000h



.incbin "FACTORY.ROM"



; Include PICTURE PUZZLE

SUBPAGE 7 AT 8000h



.incbin "PICTURE.ROM"



; Include SAIMAZOOM

SUBPAGE 8 AT 4000h



.incbin "SAIMAZOOM.ROM" SIZE 8192



SUBPAGE 9 AT 6000h



.incbin "SAIMAZOOM.ROM" SKIP 8192 SIZE 8192



SUBPAGE 10 AT 8000h



.incbin "SAIMAZOOM.ROM" SKIP 8192*2 SIZE 8192



SUBPAGE 11 AT 0A000h



.incbin "SAIMAZOOM.ROM" SKIP 8192*3 SIZE 8192



; Include GRIEL'S QUEST EXTENDED

SUBPAGE 12 AT 4000h



.incbin "GRIELEX.ROM" SIZE 8192



SUBPAGE 13 AT 6000h



.incbin "GRIELEX.ROM" SKIP 8192 SIZE 8192



SUBPAGE 14 AT 8000h



.incbin "GRIELEX.ROM" SKIP 8192*2 SIZE 8192



SUBPAGE 15 AT 0A000h



.incbin "GRIELEX.ROM" SKIP 8192*3 SIZE 8192



;---------------------------------------------------------
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #2 : 30 de Junio de 2011, 06:38:16 pm »

Gracias Edu.
Si, así entendí que el codigo manque sume 24ks, ha de estar partido en bloques de 8ks.
El codigo que adjuntas, diria que es el mismo codigo ejemplo que viene con el asMSX, que ya observé y analicé.

Entiendo que si no hay comentarios del resto de cosas que explicaba, ¿he entendido correctamente como hacer una megarom ?

P.D: Este es mi mensaje 256 !, Overflow ! Wink
« Última modificación: 30 de Junio de 2011, 06:42:11 pm por j4mk3 » En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #3 : 30 de Junio de 2011, 07:05:32 pm »

Efectivamente. Las primeras 8KB, que corresponden a la página 0, van directamente detrás de la instrucción MEGAROM [TIPO_MAPPER], como tú hacías. Si te pasas de las 8KB, ya te lo dirá el propio ensamblador, así que no te preocupes. A partir de ahí, sea código o datos, hay que definir siempre la página a la que pertenezcan y la dirección de ensamblado con SUBPAGE. Y para activarlo, SELECT.

Por defecto, el mapper Konami SCC arrancará con las páginas 0, 1, 2 y 3 sucesivas, aunque tendrás que convencer al MSX para que pille 32 KB y no sólo 16 KB, usando para ello la directiva SEARCH del propio asMSX.

En cualquier caso, mucha suerte con tu proyecto. Si tienes cualquier pega, trataré de ayudarte, aunque lo cierto es que no he llegado a usar nunca en serio la función de desarrollo de megaROMs del asMSX, me limité a diseñarla e implementarla de la forma que me pareció más intuitiva y transparente para el programador...
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #4 : 02 de Julio de 2011, 03:45:00 pm »

He eleborado una pequeña prueba... algo muy sencillo.
Simplemente carga en el Registro C el valor en la posicion 0A000h. Y va de 0 a 4.
Lo he evaluado con el Debugger del BlueMSX.
He creado varias paginas en 0A000h con numeros diferentes y voy cambiandolas para ver si leo bien ese dato.
Y funciona. Hay por eso unos detalles a comentar que he descubierto.

- Este codigo genera con asMSX una ROM de 73728 bytes. Pero el BlueMSX la detecta bien como una konami SCC
- Me he visto obligado a poner una pagina extra, que no uso, la 8 en 0A00h para que cruzara la barrera de los 65535 bytes de longitud del fichero ROM. Por qué? pues porque si la dejo en 65535 bytes , el BlueMSX la detecta como unas ASCII16 y no hace los cambios de página. No funciona.
- He definido las páginas 1 y 2 en 6000h y 8000h respectivamente, ya que sino el asMSX me daba un warning de que faltaban 2 páginas.
- He pensado que a lo mejor tambien faltaria definirle una página 0 en 4000h, pero me ha dado un error al compilar. Así que no lo hagais Smiley No es necesario, la asigna el asMSX automáticamente.
- El fichero .sym que genera el asMSX ya no es util para el debugger del BlueMSX. Las etiquetas @@LOOP y @@CONT no son detectadas por el emulador. En el .sym, al lado de su posición de memoria le antecede un 00h: que supongo que es la página donde está esa etiqueta. Parece ser que esto hace que el BlueMSX no asigne esa etiqueta y en el Debugger, el en Dissasembly, vemos la posición de memoria en los JP.
- No se puede crear el mismo nombre de posición de salto aunque esten en paginas diferentes. asMSX dice que eso es una etiqueta duplicada. De ahí que utilice un EQU para coger el DATO.
Esto no vale, da error:
SUBPAGE 3 AT 0A000h
DATO:
   db   0,0,0,0
SUBPAGE 4 AT 0A000h
DATO:
   db   1,1,1,1


Espero que estos detalles os sean utiles a la hora de crear megaroms con el asMSX.
(Nota: Compilado con la versión 0.15a)
Código:
.bios
.megarom        KonamiSCC
.start          JUEGO
.db             "Mi juego se llama algo"

DATO equ 0A000h

JUEGO:
.search
.break
ld B,3
@@LOOP:
ld A,B
SELECT A AT 0A000h
ld A,[DATO]
ld C,A
ld A,B
inc A
and 111b
cp 3
jp nc,@@CONT
ld A,3
@@CONT:
ld B,A
jp @@LOOP

SUBPAGE 1 AT 06000h
db 0
SUBPAGE 2 AT 08000h
db 0
SUBPAGE 3 AT 0A000h
db 0,0,0,0
SUBPAGE 4 AT 0A000h
db 1,1,1,1
SUBPAGE 5 AT 0A000h
db 2,2,2,2
SUBPAGE 6 AT 0A000h
db 3,3,3,3
SUBPAGE 7 AT 0A000h
db 4,4,4,4
SUBPAGE 8 AT 0A000h
db 5,5,5,5


Proximamente...a por los 64ks de RAM Smiley
Añado el .sym para que veais como hace ahora las etiquetas de salto al tener páginas
Código:
; Symbol table from megatest.asm
; generated by asMSX v.0.15a

; global and local labels
00h:401Ah JUEGO
00h:403Eh @@LOOP
00h:4051h @@CONT
; other identifiers
A000h DATO
« Última modificación: 02 de Julio de 2011, 03:50:54 pm por j4mk3 » En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #5 : 02 de Julio de 2011, 03:57:03 pm »

Emmm...acabo de hacer una prueba de ver cual era el limite de paginas posibles a hacer y me ha admitido esto:
SUBPAGE 64 AT 0A000h
   db   60,60,60,60

Pero esto...no deberia dejarmelo hacer. Ya que el máximo son 64 páginas pero empezando por la Página 0.
Al compilar ha generado una rom de 532480 bytes (520 ks).
¿No deberia dejar hacer hasta la 63 (0-63)? Así la rom seria de 512ks como mandan los canones.
¿Es un bug del asMSX?
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 02 de Julio de 2011, 05:20:28 pm »

Pues sí, tiene toda la pinta de ser un bug. Como ya dije, no hice pruebas exhaustivas en cuanto al soporte nativo para megaROMs. En cualquier caso, desde BlueMSX puedes especificar manualmente el tipo de mapeador para las ROMs, así que no hay problema en generar megaROMs de 40, 48, 56 o 64 KB para Konami SCC.
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #7 : 03 de Julio de 2011, 01:26:48 pm »

Bueno, no pasa nada. El asMSX es genial y ahora mismo no lo cambiaria por nada. Smiley
Seguiré experimentando ysi encuentro algún otro detalle a tener en cuenta para crear megaroms con él, lo postearé en este hilo para futuros creadores.

A parte, como so preguntaba,
¿Alguien tiene info para detectar el SCC? Y al hacer páginas...¿el mapeado de sus registros siguen igual? Pistas, iniciaciones, welcome. Wink
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #8 : 03 de Julio de 2011, 03:39:26 pm »

Todo lo que he hecho con el SCC, que ha sido bien poco, ha sido siguiendo este documento.
En línea
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #9 : 03 de Julio de 2011, 07:32:54 pm »

que easy en asMSX! Mu bueno!   Shocked

yo tendré que seguir el manual de nerlaska para hacer megaROMs con el SDCC!

veo un futuro con muchos proyectos interesantes!!  Cheesy
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!