Título: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: j4mk3 en 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. :) ¿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. Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: pitpan en 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 ;--------------------------------------------------------- Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: j4mk3 en 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 ! ;) Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: pitpan en 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... Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: j4mk3 en 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 :) 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 :) 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 Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: j4mk3 en 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? Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: pitpan en 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.
Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: j4mk3 en 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. :)
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. ;) Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: pitpan en 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 (http://bifi.msxnet.org/msxnet/tech/scc.html).
Título: Re: Megaroms en asMSX: Comprendiendo como hacerlo y como va Publicado por: aorante en 03 de Julio de 2011, 07:32:54 pm que easy en asMSX! Mu bueno! :o
yo tendré que seguir el manual de nerlaska para hacer megaROMs con el SDCC! veo un futuro con muchos proyectos interesantes!! :D |