Karoshi MSX Community
27 de Abril de 2017, 11:00:55 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 Calendario Ingresar Registrarse  
  Mostrar Mensajes
Páginas: [1] 2 3 ... 18
1  Foros de Desarrollo (Español) / Desarrollo / Re:Como Hacer un megarom en C (esto no es una pregunta) : 29 de Enero de 2016, 04:14:15 pm
Así me gusta, Jos'b, volviendo al buen camino: ensamblador, ensamblador y ensamblador.
No solo he vuelto al ensamblador, sino he vuelto al asMSX. Soy un clásico  Magical Stones 
2  Foros de Desarrollo (Español) / Desarrollo / Re:Como Hacer un megarom en C (esto no es una pregunta) : 26 de Enero de 2016, 04:45:46 pm
Hola Alextone,

hace tiempo que no hago nada en C para el MSX, y la última actualización que hice del SDCC no me gustó nada la forma de incluir código en asm. Asi que me he vuelto a pasar al ensamblador Cheesy, a ver si me animo y me da por programar algo. De momento solo estoy recopilando info y recursos para tener un entorno de trabajo cómodo.

En mi opinión el C ofrece tiempos de desarrollo mucho más cortos (a costa de perder eficiencia, obviamente) y además ofrece la posibilidad de generar lógica más compleja sin volverte loco buscando errores. Hacer lo mismo en asm requiere mucha experiencia y talento:).

Y respecto a si las indicaciones que su día hice (hace casi tres años, uff como pasa el tiempo), supongo que es extensible a cualquier compilador, pues básicamente tienes que compilar las diferentes paginas en la misma dirección, juntarlas en un mismo archivo y la selección de subpaginas se hace desde código. Para esto, curiosamente, pienso que es más util trabajar en ensamblador.

De todas formas tampoco he trabajado en MSX-C, me he limitado a usar SDCC y BDS-C (mi compilador favorito para MSX que pese a lo que digan por ahí es el mejor que existe XD)
3  MSXdev Game Development Contest Boards (English) / MSXdev '14 / Re:[[**Entry**]] "World Rally" (by theNestruo) : 30 de Julio de 2015, 12:49:07 pm
Una pena  Cry , aunque es comprensible que cuando se quiere hacer algo tan bien trabajado al final aparezca la desesperanza de parecer no terminarlo jamás.

En cualquier caso ha sido un placer disfrutar de tu trabajo y hubiera merecido sin duda un encartuchamiento para su deleite físico.
4  Asociacion Amigos del MSX (AAMSX) / Información General / Re:Demo Sydney Hunter and the caverns of death : 03 de Julio de 2015, 03:21:09 pm
Citar
Espero vuestros comentarios e impresiones.
Muy buena.

y no puedo decir mucho mas porque no conozco el juego original Smiley
5  Foros de Desarrollo (Español) / Desarrollo / Re:Dudas varias sobre programación en MSX : 21 de Abril de 2014, 10:08:32 am
this is why on emulators it does not work without 5 sprites on one line
http://www.msx.org/forum/development/msx-development/msx1-vdp-statusregister-details?page=3
tomorrow I'll try on real HW
Interesting due to the fact that it can be used for knowing whether you are using a real machine or not. So, it could be easy way for real cartridges in order to avoid emulators.

Am I mistook?
6  MSXdev Game Development Contest Boards (English) / MSXdev '14 / Re:[[**Entry**]] "Mr. Cracksman" (Relevo Videogames) : 13 de Diciembre de 2013, 10:06:44 pm
thanks again Smiley

7  Foros de Desarrollo (Español) / Desarrollo / Re:Documento 'The premise of a rotation (c) [D-Tail] / Bitwise, October 2003' : 25 de Octubre de 2013, 11:53:27 am
bueno ya le he echado un vistazo más profundamente, y aunque no he encontrado el hilo de donde se promovió la discusión original de rotar un patron de 16x16, me parece algo bastante curioso, es más, diría que hasta útil. Aunque el resultado de los programas que acompaña no me termina de convencer mucho, pues quitando los patrones que resultan de aplicar saltos de 90º los demás no son muy reconocibles.

de cualquier manera, gracias otra vez a ambos por darme a conocer el documento, me resulta bastante entretenido Smiley
8  Foros de Desarrollo (Español) / Desarrollo / Re:Documento 'The premise of a rotation (c) [D-Tail] / Bitwise, October 2003' : 24 de Octubre de 2013, 08:10:46 pm
personalmente os doy las gracias por el documento, me gusta mucho echarle un vistazo a este tipo de cosillas Cheesy

aunque no alcanzo a comprender la importancia del mismo, y sin querer ser pedante, ya que hacer una rotación de un objeto es sencillo si se conoce algo de trigonometria y cálculo matricial  con la siguiente formula (C)=(Rot)(C'), quedando unas expresiones bien sencillas del tipo, y con sentido positivo de la rotación el antihorario:

x= x'cos(a)+y'sen(a)
y=-x'sen(a)+y'cos(a)

para que sea más rapido se pueden hacer tablas con los diferentes valores del seno y coseno

¿se me pasa algo importante del documento?

edit: de todas forma lo miraré más detenidamente
9  MSXdev Game Development Contest Boards (English) / MSXdev '14 / Re:[[**Entry**]] "Pakupaku no Daibouken - パクパクの大冒険" (Relevo Videogames) : 10 de Octubre de 2013, 08:38:47 pm
this year seems we are able to see lots of games Cheesy
10  Foros de Desarrollo (Español) / Desarrollo / Re:Foolish Graphic Editor in Language MSX-Basic : 10 de Octubre de 2013, 08:31:51 pm
Gracias por compartir, Jos'b! Pero ya lo podías haber publicado en .dsk, que lo he copiado y pegado en el meisei, y cuando por fin ha acabado de pegar y lo he ido a ejecutar... SCREEN 5 Grin
gracias a tí por molestarte en probarlo Cheesy

la idea original era pasar titles a C o ASM, ya que hay grafistas que trabajan directamente en el MSX, y la idea final es usarlo en un emulador acelerando la velocidad (aunque parezca una herejía Magical Stones)

A modo de cuirosidad, yo empecé a hacer uno para sprites, en SCREEN 1 y aprovechándome del BASIC a saco: redefiní los patrones del 0 y del 1 para que fueran más cuadrados y el del 1 estuviera relleno, y entonces pintaba con algo así como PRINT RIGHT$("0000000"+BIN$(VPEEK(Y)),8). Para marcar la posición del cursor usaba el LOCATE,,1. Y para cargar/grabar, pues BLOAD/SAVE,S.
Al final... me harté y acabé programando el PCX2SPR Grin Y es que la comodidad del cross-development (copiar, pegar, mover, deshacer...) pesó más que el poder dibujar píxel a píxel con los cursores (que es lo que realmente echo de menos en los editores gráficos).
yo tengo un editor de mapas empezado (en MSX-Basic, of course) que puede imprimir titles de cualquier tamaño, pero no tengo las cosas muy claras todavía Sad

En fin, esto es un poco por divertimento y darle uso a la máquina, pero como quedó curioso (aunque no intuitivo) pues ahí está, para el que lo quiera ver.
11  Foros de Desarrollo (Español) / Desarrollo / Foolish Graphic Editor in Language MSX-Basic : 10 de Octubre de 2013, 03:42:43 pm
Esta es una pequeña herramienta casera para titles en basic, no es muy intuitivo, pero me sirve para exportar los titles a cualquier lenguaje de programación moderno.

Código:
10 '--------------------

20 '

30 ' Editor Grafico

40 ' NONAME 0.02

50 '

60 ' 26/08/13

70 '

80 '--------------------

90 SCREEN0,,0:KEYOFF:WIDTH40:COLOR2,1,1

100 '

110 ' define variables

120 '

130 AS=0:'CODICO ASCII

140 CL=2:'COLOR ACTUAL

150 XT=0:YT=0:'COORDENADAS TABLA PATRONES

160 XR=12:YR=82:'COORDENAS REJILLA

170 O=0: ' AREA DE TRABAJO 0=TABLA PATRONES 1=REJILLA

180 DIM P(8,8): ' MATRIZ DE APOYO

190 DIM U(8,8): ' SOLO PARA RESTABLECER, OPCION N

200 '

210 ' lanza programa

220 '

230 SCREEN 5,,0

240 OPEN "GRP:" FOR OUTPUT AS #1

250 LINE (0,70)-(255,211),13,B

260 COLOR 13:PRESET (10,67):PRINT #1, "EDITOR GRAFICO NONAME v0.02"

270 '

280 'dibuja rejilla

290 '

300 FOR I=0 TO 8:LINE (10,80+I*10)-(90,80+I*10),2:NEXT I

310 FOR I=0 TO 8:LINE (10+I*10,80)-(10+I*10,160),2:NEXT I

320 GOSUB 1190

330 '

340 'dibuja informacion sobre caracter

350 '

360 PRESET(10,166): PRINT #1, "ASCII"

370 COLOR 15:PRESET(64,166): PRINT #1, AS

380 '

390 'dibuja paleta colores

400 '

410 LINE (8,176)-(92,198),2,B

420 FOR I=0 TO 15: LINE (10+I*5,178)-(15+I*5,187),I,BF:NEXT I

430 LINE (10,188)-(90,196),CL,BF

440 '

450 'define SPRITE

460 SPRITE$(0)=CHR$(254)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(254)+CHR$(0)

470 '

480 ' imprime opciones del programa

490 '

500 COLOR 15:PRESET(95, 80):PRINT#1,"CUR y Z=QUITA X=PONE"

510 COLOR 14:PRESET(95, 88):PRINT#1,"<1,2> COLOR"

520 COLOR 15:PRESET(95, 96):PRINT#1,"Ir a set grafico   T"

530 COLOR 14:PRESET(95,104):PRINT#1,"Ir a rejilla trabj R"

540 COLOR 15:PRESET(95,112):PRINT#1,"Giro antihorario   G"

550 COLOR 14:PRESET(95,120):PRINT#1,"Invierte Hor-Ver H,V"

560 COLOR 15:PRESET(95,128):PRINT#1,"Desplaza Izquierda D"

570 COLOR 14:PRESET(95,136):PRINT#1,"Desplaza Arriba    U"

580 COLOR 15:PRESET(95,144):PRINT#1,"Llena Obj,Linea  F,I"

590 COLOR 14:PRESET(95,152):PRINT#1,"ReSet Caracter     N"

600 COLOR 15:PRESET(95,160):PRINT#1,"Copia-Pega       C,P"

610 COLOR 14:PRESET(95,168):PRINT#1,"Borra rejilla      E"

620 COLOR 15:PRESET(95,176):PRINT#1,"Save-Load        S,L"

630 COLOR 14:PRESET(95,184):PRINT#1,"to C,Asm,Basic B,J,Y"

640 COLOR 15:PRESET(95,192):PRINT#1,"SALIR=K"

650 '

660 'menu principal

670 '

680 A$=INKEY$:D=STICK(0)

690 IF O=1 THEN GOTO 750

700 IF D=1 AND YT>0 THEN YT=YT-8:AS=AS-32

710 IF D=3 AND XT<247 THEN XT=XT+8:AS=AS+1

720 IF D=5 AND YT<56 THEN YT=YT+8:AS=AS+32

730 IF D=7 AND XT>0 THEN XT=XT-8:AS=AS-1

740 GOTO 790

750 IF D=1 AND YR>82 THEN YR=YR-10

760 IF D=3 AND XR<82 THEN XR=XR+10

770 IF D=5 AND YR<152 THEN YR=YR+10

780 IF D=7 AND XR>12 THEN XR=XR-10

790 IF A$<>"" AND D=0 THEN GOSUB 850

800 IF O=1 THEN X=XR:Y=YR

810 IF O=0 AND D>0 THEN X=XT:Y=YT:LINE(54,166)-(94,165),1,BF:COLOR 15:PRESET(54,166): PRINT #1, AS

820 PUT SPRITE 0,(X,Y),CL,0

830 GOTO 680

840 '

850 'gestion opciones

860 '

870 GOSUB 1130

880 IF A$="x" OR A$="X" AND O=1 THEN LINE (XR,YR)-(XR+6,YR+6),CL,BF:GOTO 1190

890 IF A$="z" OR A$="Z" AND O=1 THEN LINE (XR,YR)-(XR+6,YR+6),0,BF:GOTO 1190

900 IF A$="r" OR A$="R" THEN O=1:GOTO 1260

910 IF A$="t" OR A$="T" THEN O=0:GOTO 1340

920 IF A$="1" THEN CL=CL-1: IF CL=-1 THEN CL=15

930 IF A$="2" THEN CL=CL+1: IF CL=16 THEN CL=0

940 IF A$="1" OR A$="2" THEN LINE (10,188)-(90,196),CL,BF:GOTO 1190

950 IF A$="c" OR A$="C" THEN GOTO 1410

960 IF A$="p" OR A$="P" THEN GOTO 1480

970 IF A$="g" OR A$="G" THEN GOTO 1550

980 IF A$="e" OR A$="E" THEN GOTO 1620

990 IF A$="h" OR A$="H" THEN GOTO 1690

1000 IF A$="v" OR A$="V" THEN GOTO 1760

1010 IF A$="u" OR A$="U" THEN GOTO 1830

1020 IF A$="d" OR A$="D" THEN GOTO 1910

1030 IF A$="f" OR A$="F" THEN GOTO 1990

1040 IF A$="i" OR A$="I" THEN GOTO 2070

1050 IF A$="n" OR A$="N" THEN GOTO 2150

1060 IF A$="b" OR A$="B" THEN GOTO 2220

1070 IF A$="j" OR A$="J" THEN GOTO 2690

1080 IF A$="y" OR A$="Y" THEN GOTO 3160

1090 IF A$="s" OR A$="S" THEN BSAVE "GRAFICO",&H0,&H2000,S:GOTO 1190

1100 IF A$="l" OR A$="L" THEN BLOAD "GRAFICO",S:GOTO 1190

1110 IF A$="k" OR A$="K" THEN END

1120 GOTO 1190

1130 '

1140 ' activa luz de trabajo en proceso

1150 '

1160 LINE (2,80)-(8,90),6,B

1170 LINE (3,81)-(7,89),9,BF

1180 RETURN

1190 '

1200 ' des-activa luz de trabajo en proceso (BLACKHOLE)

1210 ' (All GOSUBs must re-send to here)

1220 '

1230 LINE (2,80)-(8,90),2,B

1240 LINE (3,81)-(7,89),3,BF

1250 RETURN

1260 '

1270 ' actualiza datos rejilla

1280 '

1290 FOR J=0 TO 7:FOR I=0 TO 7

1300 H=POINT(XT+I,YT+J):LINE (12+I*10,82+J*10)-(18+I*10,88+J*10),H,BF

1310 U(I,J)=H

1320 NEXT I,J

1330 GOTO 1190

1340 '

1350 ' actualiza area tabla patrones y colores

1360 '

1370 FOR J=0 TO 7:FOR I=0 TO 7

1380 H=POINT(12+I*10,82+J*10):PSET (XT+I,YT+J),H:'LINE (XT+I,YT+J)-(XT+I,YT+J),H

1390 NEXT I,J

1400 GOTO 1190

1410 '

1420 ' copia contenido rejilla al portapapeles

1430 '

1440 FOR J=0 TO 7:FOR I=0 TO 7

1450 H=POINT(12+I*10,82+J*10):P(I,J)=H

1460 NEXT I,J

1470 GOTO 1190

1480 '

1490 ' pega contenido portapapeles a rejilla

1500 '

1510 FOR J=0 TO 7:FOR I=0 TO 7

1520 H=P(I,J):LINE (12+I*10,82+J*10)-(18+I*10,88+J*10),H,BF

1530 NEXT I,J

1540 GOTO 1190

1550 '

1560 ' gira 90 grados en sentido antihorario

1570 '

1580 FOR J=0 TO 7:FOR I=0 TO 7

1590 H=POINT(12+I*10,82+J*10):P(J,7-I)=H

1600 NEXT I,J

1610 GOTO 1480

1620 '

1630 ' borrar rejilla

1640 '

1650 FOR J=0 TO 7:FOR I=0 TO 7

1660 LINE (12+I*10,82+J*10)-(18+I*10,88+J*10),0,BF

1670 NEXT I,J

1680 GOTO 1190

1690 '

1700 ' voltea horizontalmente

1710 '

1720 FOR J=0 TO 7:FOR I=0 TO 7

1730 H=POINT(12+I*10,82+J*10):P(7-I,J)=H

1740 NEXT I,J

1750 GOTO 1480

1760 '

1770 ' voltea verticalmente

1780 '

1790 FOR J=0 TO 7:FOR I=0 TO 7

1800 H=POINT(12+I*10,82+J*10):P(I,7-J)=H

1810 NEXT I,J

1820 GOTO 1480

1830 '

1840 ' desplaza verticalmente

1850 '

1860 FOR J=1 TO 7:FOR I=0 TO 7

1870 H=POINT(12+I*10,82+J*10):P(I,J-1)=H

1880 NEXT I,J

1890 FOR I=0 TO 7:H=POINT(12+I*10,84):P(I,7)=H:NEXT I

1900 GOTO 1480

1910 '

1920 ' desplaza horizontalmente

1930 '

1940 FOR J=0 TO 7:FOR I=1 TO 7

1950 H=POINT(12+I*10,82+J*10):P(I-1,J)=H

1960 NEXT I,J

1970 FOR J=0 TO 7:H=POINT(14,82+J*10):P(7,J)=H:NEXT J

1980 GOTO 1480

1990 '

2000 ' rellena con color activo el objeto

2010 '

2020 H=POINT(XR+2,YR+2):

2030 FOR J=0 TO 7:FOR I=0 TO 7

2040 IF POINT(12+I*10,82+J*10)=H THEN LINE (12+I*10,82+J*10)-(18+I*10,88+J*10),CL,BF

2050 NEXT I,J

2060 GOTO 1190

2070 '

2080 ' rellena linea con color activo

2090 '

2100 H=POINT(XR+2,YR+2):

2110 FOR I=0 TO 7

2120 IF POINT(12+I*10,YR)=H THEN LINE (12+I*10,YR)-(18+I*10,YR+6),CL,BF

2130 NEXT I

2140 GOTO 1190

2150 '

2160 ' RESET CHAR (recupera char original)

2170 '

2180 FOR J=0 TO 7:FOR I=0 TO 7

2190 H=U(I,J):LINE (12+I*10,82+J*10)-(18+I*10,88+J*10),H,BF

2200 NEXT I,J

2210 GOTO 1190

2220 '

2230 ' graba dos ficheros .c para patrones y colores

2240 ' (set_pt.c y set_cl.c)

2250 '

2260 XS=X:YS=Y:CO=0:CLOSE#1:OPEN "set_pt.c" FOR OUTPUT AS #1

2270 PRINT #1, "/*-------------------------------------*/"

2280 PRINT #1, "/* ONLY PATTERN TABLE                  */"

2290 PRINT #1, "/*-------------------------------------*/"

2300 PRINT #1, "const char PATTERN[] = {"

2310 FOR Y=0 TO 63 STEP 8

2320 FOR X=0 TO 255 STEP 8

2330 PRINT #1,"          ";

2340 FOR K=0 TO 7 STEP 1

2350 B=0

2360 H=POINT(X,K+Y)

2370 FOR L=0 TO 7

2380 A=POINT(X+L,K+Y): IF A<>H THEN B=B+2^(7-L)

2390 NEXT L

2400 IF B>15 THEN PRINT #1, "0x"+HEX$(B)+","; ELSE PRINT #1,"0x0"+HEX$(B)+",";

2410 NEXT K

2420 PRINT #1,"   /* ASCII CODE "+STR$(CO)+"*/"

2430 CO=CO+1

2440 NEXT X,Y

2450 PRINT #1,"};"

2460 CO=0:CLOSE#1:OPEN "set_cl.c" FOR OUTPUT AS #1

2470 PRINT #1, "/*-------------------------------------*/"

2480 PRINT #1, "/* ONLY COLOUR TABLE                   */"

2490 PRINT #1, "/*-------------------------------------*/"

2500 PRINT #1, "const char COLOUR[] = {"

2510 FOR Y=0 TO 63 STEP 8

2520 FOR X=0 TO 255 STEP 8

2530 PRINT #1,"          ";

2540 FOR K=0 TO 7 STEP 1

2550 B=0

2560 H1=POINT(X,K+Y):H2=0

2570 L=0:'FOR L=0 TO 7

2580 H2=POINT(X+L,K+Y): IF H2<>H1 THEN GOTO 2610 ELSE L=L+1

2590 IF L=8 THEN GOTO 2610:'SALE DEL BUCLE

2600 GOTO 2580

2610 PRINT #1, "0x"+HEX$(H2)+HEX$(H1)+",";

2620 NEXT K

2630 PRINT #1,"   /* ASCII CODE "+STR$(CO)+"*/"

2640 CO=CO+1

2650 NEXT X,Y

2660 PRINT #1,"};"

2670 CLOSE #1:OPEN "GRP:" FOR OUTPUT AS #1

2680 X=XS:Y=YS:GOTO 1190

2690 '

2700 ' graba dos ficheros .asm para patrones y colores

2710 ' (set_pt.asm y set_cl.asm)

2720 '

2730 XS=X:YS=Y:CO=0:CLOSE#1:OPEN "set_pt.asm" FOR OUTPUT AS #1

2740 PRINT #1, ";-------------------------------------"

2750 PRINT #1, "; ONLY PATTERN TABLE                  "

2760 PRINT #1, ";-------------------------------------"

2770 PRINT #1, "PATTERN:"

2780 FOR Y=0 TO 63 STEP 8

2790 FOR X=0 TO 255 STEP 8

2800 PRINT #1,"db ";

2810 FOR K=0 TO 7 STEP 1

2820 B=0

2830 H=POINT(X,K+Y)

2840 FOR L=0 TO 7

2850 A=POINT(X+L,K+Y): IF A<>H THEN B=B+2^(7-L)

2860 NEXT L

2870 IF B>15 THEN PRINT #1, HEX$(B)+"h"; ELSE PRINT #1,"0"+HEX$(B)+"h";

2880 IF K<>7 THEN PRINT #1,",";

2890 NEXT K

2900 PRINT #1,"   ; ASCII CODE "+STR$(CO)

2910 CO=CO+1

2920 NEXT X,Y

2930 CO=0:CLOSE#1:OPEN "set_cl.asm" FOR OUTPUT AS #1

2940 PRINT #1, ";-------------------------------------"

2950 PRINT #1, "; ONLY COLOUR TABLE                   "

2960 PRINT #1, ";-------------------------------------"

2970 PRINT #1, "COLLOUR:"

2980 FOR Y=0 TO 63 STEP 8

2990 FOR X=0 TO 255 STEP 8

3000 PRINT #1,"db ";

3010 FOR K=0 TO 7 STEP 1

3020 B=0

3030 H1=POINT(X,K+Y):H2=0

3040 L=0:'FOR L=0 TO 7

3050 H2=POINT(X+L,K+Y): IF H2<>H1 THEN GOTO 3080 ELSE L=L+1

3060 IF L=8 THEN GOTO 3080:'SALE DEL BUCLE

3070 GOTO 3050

3080 PRINT #1, HEX$(H2)+HEX$(H1)+"h";

3090 IF K<>7 THEN PRINT #1,",";

3100 NEXT K

3110 PRINT #1,"   ; ASCII CODE "+STR$(CO)

3120 CO=CO+1

3130 NEXT X,Y

3140 CLOSE #1:OPEN "GRP:" FOR OUTPUT AS #1

3150 X=XS:Y=YS:GOTO 1190

3160 '

3170 ' graba un solo fichero .asc para patrones y colores

3180 ' (set.asc) para BASIC

3190 '

3200 XS=X:YS=Y:LN=10000:CO=0:CLOSE#1:OPEN "set.asc" FOR OUTPUT AS #1

3210 PRINT #1,LN ; "'------------------------------":LN=LN+10

3220 PRINT #1,LN ; "' ONLY PATTERN TABLE           ":LN=LN+10

3230 PRINT #1,LN ; "'------------------------------":LN=LN+10

3240 FOR Y=0 TO 63 STEP 8

3250 FOR X=0 TO 255 STEP 8

3260 PRINT #1,LN ; "DATA ";

3270 FOR K=0 TO 7 STEP 1

3280 B=0

3290 H=POINT(X,K+Y)

3300 FOR L=0 TO 7

3310 A=POINT(X+L,K+Y): IF A<>H THEN B=B+2^(7-L)

3320 NEXT L

3330 IF B>15 THEN PRINT #1, "&h"+HEX$(B); ELSE PRINT #1,"&h" + "0"+HEX$(B);

3340 IF K<>7 THEN PRINT #1,",";

3350 NEXT K

3360 PRINT#1,"":CO=CO+1:LN=LN+10

3370 NEXT X,Y

3380 CO=0

3390 PRINT #1,LN ; "'------------------------------":LN=LN+10

3400 PRINT #1,LN ; "' ONLY COLOUR TABLE            ":LN=LN+10

3410 PRINT #1,LN ; "'------------------------------":LN=LN+10

3420 FOR Y=0 TO 63 STEP 8

3430 FOR X=0 TO 255 STEP 8

3440 PRINT #1,LN ; "DATA ";

3450 FOR K=0 TO 7 STEP 1

3460 B=0

3470 H1=POINT(X,K+Y):H2=0

3480 L=0:'FOR L=0 TO 7

3490 H2=POINT(X+L,K+Y): IF H2<>H1 THEN GOTO 3520 ELSE L=L+1

3500 IF L=8 THEN GOTO 3520:'SALE DEL BUCLE

3510 GOTO 3490

3520 PRINT #1, "&h"+HEX$(H2)+HEX$(H1);

3530 IF K<>7 THEN PRINT #1,",";

3540 NEXT K

3550 PRINT#1,"":LN=LN+10

3560 CO=CO+1

3570 NEXT X,Y

3580 CLOSE #1:OPEN "GRP:" FOR OUTPUT AS #1

3590 X=XS:Y=YS:GOTO 1190

y para que sirva de curiosidad, y entretenimiento de los presentes, ahí lo comparto con todos Vds.
12  Foros de Desarrollo (Español) / Desarrollo / Re:Xyzolog (Lunaria) : 01 de Octubre de 2013, 07:16:21 pm
TileStudio parece ir bastante bien usando Wine. Y el formato al exportar deberia ser el mismo.

El TileStudio lo tengo y uso con wine, quizas un poco lento en algunas cosillas, pero si se puede utilizar para esta tarea y puedo ayudar en algo, pues aquí estoy  Smiley
13  Foros de Desarrollo (Español) / Desarrollo / Re:Xyzolog (Lunaria) : 30 de Septiembre de 2013, 08:32:08 pm
no conocía el juego y me parece muy interesante la idea de generar nuevas pantallas. una pena que no haya sido capaz de instalar el tiled en mi linux de lo contrario me hubiera apuntado Sad
14  Foros de Desarrollo (Español) / Desarrollo / Re: Como Hacer un megarom en C (esto no es una pregunta) : 16 de Septiembre de 2013, 08:53:03 pm
Un ejemplo:
./Hex2bin.exe -e bin -l 2000 subpage13.ihx

No hagas caso de esto. Estoy teniendo problemas en algunos casos.  Tongue
no suelo estar muy al día (por eso soy usuario de MSX  Tongue), y como funcionaba bien nunca me he molestado en saber si había otras versiones.

Por mi parte , quiero publicar esta semana un pequeño tutorial para compilar ROMs (de 16, 32k) sin la necesidad de aplicaciones externas al SDCC y al hex2bin. He tenido que hacer unas startups (CRTs) ya que la que conseguí a través de la WEB de Avelino Herrera no acaba de funcionar bien...
Pues sería un detalle ya que yo no he encontrado mucha información (o no la he sabido buscar), y la que he encontrado estaba muy dispersa.

Creo que el tema C para MSX está muy verde (ni siquiera existe una minilibrería para imprimir un sprite en pantalla) tal vez por la tendencia de programar en ASM como herramienta más optima, pero aún así, el C puede dar mucho de sí y se pueden hacer cosas muy dignas.


15  Foros de Desarrollo (Español) / Desarrollo / Como Hacer un megarom en C (esto no es una pregunta) : 09 de Septiembre de 2013, 09:13:44 pm
Con el beneplácito de la  afición me permito dar unas breves indicaciones para que el quiera y le apetezca pueda hacer una megarom con el SDCC.

El motivo de abrir este hilo es que yo no he encontrado informacion al respecto más allá del mini tutorial que en su día hizo Nerlaska para hacer ROMs de 32 kb, y como complemento al mismo (siempre que tenga su permiso, of course), me permito compartir lo poco que he podido descubrir por mis propios haberes y saberes.

En primer lugar he creado un fichero .sh (el equivalente a los .bat del DOS pero en Linux) con el siguiente contenido

Código:
#!/bin/sh -e

#
# ...compiler at last (take note about '--data-loc' must be changed for each subpage)
#
echo "--------------------------------------------------------------"
echo "Compiling C file"
echo "--------------------------------------------------------------"
sdcc -mz80 --no-std-crt0 --code-loc 0x4010 --data-loc 0xC000 main.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage03.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage04.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage05.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage06.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage07.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage08.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage09.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage10.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage11.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage12.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage13.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage14.c
sdcc -mz80 --no-std-crt0 --code-loc 0xA000 --data-loc 0xC000 subpage15.c

echo " "
echo "* Building MEGAROM 128K"
echo "-------------------------------------------------------------"
echo "** running hex2bin"
./Hex2bin.exe -e bin main.ihx
./Hex2bin.exe -e bin subpage03.ihx
./Hex2bin.exe -e bin subpage04.ihx
./Hex2bin.exe -e bin subpage05.ihx
./Hex2bin.exe -e bin subpage06.ihx
./Hex2bin.exe -e bin subpage07.ihx
./Hex2bin.exe -e bin subpage08.ihx
./Hex2bin.exe -e bin subpage09.ihx
./Hex2bin.exe -e bin subpage10.ihx
./Hex2bin.exe -e bin subpage11.ihx
./Hex2bin.exe -e bin subpage12.ihx
./Hex2bin.exe -e bin subpage13.ihx
./Hex2bin.exe -e bin subpage14.ihx
./Hex2bin.exe -e bin subpage15.ihx

echo "-------------------------------------------------------------"
echo "** adding header..."
echo "-------------------------------------------------------------"
cat rom_header.b > megarom.rom
cat main.bin >> megarom.rom
echo "-------------------------------------------------------------"
echo "** running fillfile with main module"
echo "-------------------------------------------------------------"
./FillFile.exe megarom.rom 24576

echo "-------------------------------------------------------------"
echo "** running fillfile with subpages"
echo "-------------------------------------------------------------"
./FillFile.exe subpage03.bin 8192
./FillFile.exe subpage04.bin 8192
./FillFile.exe subpage05.bin 8192
./FillFile.exe subpage06.bin 8192
./FillFile.exe subpage07.bin 8192
./FillFile.exe subpage08.bin 8192
./FillFile.exe subpage09.bin 8192
./FillFile.exe subpage10.bin 8192
./FillFile.exe subpage11.bin 8192
./FillFile.exe subpage12.bin 8192
./FillFile.exe subpage13.bin 8192
./FillFile.exe subpage14.bin 8192
./FillFile.exe subpage15.bin 8192

echo "-------------------------------------------------------------"
echo "** creating ASCII8 MEGAROM at last"
echo "-------------------------------------------------------------"
cat subpage03.bin >> megarom.rom
cat subpage04.bin >> megarom.rom
cat subpage05.bin >> megarom.rom
cat subpage06.bin >> megarom.rom
cat subpage07.bin >> megarom.rom
cat subpage08.bin >> megarom.rom
cat subpage09.bin >> megarom.rom
cat subpage10.bin >> megarom.rom
cat subpage11.bin >> megarom.rom
cat subpage12.bin >> megarom.rom
cat subpage13.bin >> megarom.rom
cat subpage14.bin >> megarom.rom
cat subpage15.bin >> megarom.rom
echo " "
echo "... Job was finished"
echo " "

El código compila cada bloque por separado, el primero de todos es de 24 kb (8 kb x 3), y el resto son de 8 kb que se ensamblan en la dirección A000h, pero que nada impide hacerlo en otra, y donde la idea es incluir datos (no código), aunque al igual que antes tampoco hay impedimento para usar código siempre que se sepa a que dirección hay que llamar. Luego pasa del formato .ihx al binario y se termina de rellenar con basura hasta los 8kb para finalmente concatenar todos los archivos que generan la megarom final

lo siguiente que he hecho es cambiar la línea que Nerlaska añadió para detectar los 32 kb

g_slotPort = (g_slotPort & 0xCF) | ((g_slotPort & 0x0C) << 2);   

por una llamada a la siguiente función, que fue PLAGIADA directamente del ASMSX, el motivo principal es que no pierdo el contacto con la máquina, pasando además de las opciones del compilador

Código:
void search(void)
{
    /* ensambla pagina 2 para ROM y MEGAROM que arrancan en la página 1 */
    /* solo hay que llamarla una vez */
    /* PLAGIADO del asmsx */

    _asm
        call 0x0138 ;RSLREG
        rrca
        rrca
        and #0x03
        ; Secondary Slot
        ld c,a
        ld hl,#0x0FCC1
        add a,l
        ld l,a
        ld a,(hl)
        and #0x80
        or c
        ld c,a
        inc l
        inc l
        inc l
        inc l
        ld a,(hl)
        ; Define slot ID
        and #0x0C
        or c
        ld h,#0x80
        ; Enable
        call 0x0024 ;ENASLT
    _endasm;
}

y por último me hice con una funcion para la seleccion de los bancos, tal como la que sigue, donde subpage indica la subpagina de la megarom (que como todos ya sabeis va de la 0 a la 15 en Megaroms de 128 kb)

Código:
void select(unsigned char subpage, int adress)

{

    /*

        Es importante saber que las MEGAROM usan solo las 32 kb intermedias, por tanto en el formato ASCII8

        el banco 0 = 0x4000 (8kb)

        el banco 1 = 0x6000 (8kb)

        el banco 2 = 0x8000    (8kb)

        el banco 3 = 0xA000    (8kb)

    */



    subpage=subpage;

   

    if (adress==0xA000) {       

        _asm

        ld a,4(ix)

        ld (0x7800),a

        _endasm;

    } else if (adress==0x8000) {

        _asm

        ld a, 4(ix)

        ld (0x7000),a

        _endasm;

    } else if (adress==0x6000) {

        _asm

        ld a, 4(ix)

        ld (0x6800),a

        _endasm;

    } else if (adress==0x4000) {

        _asm

        ld a, 4(ix)

        ld (0x6000),a

        _endasm;

    }

}


voila!!,

tenemos una megarom de 128 kb en formato ASCII8kb

Por supuesto admito críticas y mejoras, (hasta aclaraciones)

La idea es simplemente mostrar que es muy sencillo hacer una megarom en C, a pesar de que con el AsMSX es incluso mas sencillo, pero siempre es bonito que haya variedad.
Páginas: [1] 2 3 ... 18
Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!