Hablando del CPC464 (el modelo base), digamos que posee 64KBs de RAM (desde #0000 a #FFFF). En el caso de IOTZM, que no usaba el firmware,
el programa empezaba en #0100 (el firmware reside en la ROM baja, que
se página entre #0000 y #3FFF).
En cuanto a la pantalla, por defecto la memoria de video empieza en
#C000,
así que es buena idea poner la pila allí, justo antes de que
comience la pantalla.
Las resoluciones de pantalla estandar son
160x200 16 colores (mode 0), 320x200 4 colores (mode 1) y 640x200 2 colores (mode 2), todos a escoger de una paleta de 27 (aunque puedes cambiar el tamaño en ancho de la pantalla).
Ah, y otra curiosidad es que en el CPC el modo de interrupciones 1 del
z80 es totalmente funcional, pero las interrupciones se producen 6
veces por cada refresco de pantalla (la pantalla internamente tiene un alto de 312, así que se produce una interrupción cada 52 líneas).
En fin, que al final me he ido del tema. Pero vamos, al menos esa
sería un poco el mapa de memoria (a lo bestia y sin entrar en
detalles).
Me gustaría que entrases un poco. :) Me interesa el tema del "cargador" y el formato del binario, etc... :)
Lo cierto es que poco te voy a poder ayudar, voy a hablar un poco a lo burro,
porque mi conocimiento acerca del CPC es bastante limitado.
En
su momentó conté con mucha ayuda al respecto, y yo solo me dediqué a programar: digamos que es como tu rutina de selección de slots y
subslots, que no me detengo a entenderla, la uso y ya... XD
Lo que si tiene el CPC que me dejó alucinado fue el WinAPE: es un emulador/ensamblador/debugger todo en uno *fantástico*, con una
ventana de edición de texto donde puedes tener varios archivos (tus includes) abiertos en pestañas, que modificas y de la misma compilas y ejecutas en el propio emulador. Como herramienta de desarrollo es alucinante, y te aconsejaría que le echaras un ojo.
Es la única
herramienta que utilicé para portar Invasion of the Zombie Monsters: bueno, esa y un conversor de gráficos de Augusto Ruiz (Img2CPC) para convertir mis archivos PNG al formato deseado.
Incluso una vez tenía el binario rulando en el emulador (digamos, en
una especie de "snapshot"),
fueron después David Donaire y Augusto
quienes se encargaron de cogerlo y generar las distribuciones en
cassette y dsk a partir de mi binario. Es que en CPC he recibido mucha ayuda, como cuando me lancé al ZX Spectrum, que sin Javi Peña que me explicó como funcionaba todo y me ayudó con partes del código básicas,
no hubiera podido hacer nada.
Es decir, que dispongo de la información en plan mascada que me han
pasado otros, pero no creo ser el adecuado para dar lecciones de CPC
(ojo, me pasa lo mismo con el MSX y con el Spectrum XD). A mi lo que
me gusta es diseñar, crear el juego, y hacer los gráficos: lo de
programar es circustancial, una vez tengo todo hecho.
A lo que voy es que tengo rutinas para inicializar el modo de la
pantalla, ajustar las columnas, cambiar la paleta, controlar las interrupciones, etc...
de hecho, por ejemplo, te comenté en otro
mensaje que la pila la inicializaba cerca de los datos de pantalla, y revisando el código de IOTZM no es cierto: lo que hago es ponerla en
la zona baja de memoria:
org #0100
GAME_START:
di
ld sp,#00FF
...
A partir de ahí, limpiar la zona de RAM, ajustar la pantalla y los
colores con los parámetros que queramos, poner el replayer en las interrupciones y empezar con el programa.
En fin, que si quieres comparto lo que tengo contigo ;-), pero no
esperes clases maestras de CPC, ya que no puedo darlas, ni de CPC ni
de ninguna máquina de 8 bits me temo ;-)
su momentó conté con mucha ayuda al respecto, y yo solo me dediqué a
programar: digamos que es como tu rutina de selección de slots y
subslots, que no me detengo a entenderla, la uso y ya... XD
Que lujo! La verdad es que está bien, si no te gusta trastear, dedicarte solo
lo importante. Pero es que yo no puedo funcionar así: Necesito saber cómo
includes) abiertos en pestañas, que modificas y de la misma compilas y
ejecutas en el propio emulador. Como herramienta de desarrollo es
alucinante, y te aconsejaría que le echaras un ojo.
Lo miraré, pero es que no uso Windows, tiro de OS X. :/ He visto que hay bueno >emuladores (o por lo menos que cuentan con debugger) para Win. Para OS X nada,
el del bannister (que tiene emulador de todo lo emulable xD).
Tampoco soy de IDEs. Intento evitarlos. Cuando llevas (hablo ya en general) mi
años programando te das cuenta que es perder el tiempo acostumbrarte a un IDE ya que en unos años todo cambiará y tendrás que ir a otro: vi + makefile y a correr. :) Lo se, no es el caso.
GAME_START:Creo que deberías de ponerla en #100. Estás perdiendo un precioso byte. XD
di
ld sp,#00FF
...
La verdad es que normalmente con 256 bytes (ya que si te pasa de #0000 se te meterá en la pantalla) tienes de sobra. Pero ojo! Que tienes el gancho de
De sobra insisto, siendo ASM. Si fuese un lenguaje tipo C que pase parametros en pila y demás, podría ser peligroso.
Pues realmente mis dudas son otras, a ver si las puedes averiguar:
- Como cargar un binario. O de disco. O el formato del mismo (si tiene
A mí me pasa igual. No soporto que me den hecho nada, me siento
agobiado si hay alguna parte de mi código que no controlo.
A veces en
el trabajo he usado librerías o funciones de terceros, pero antes las
he destripado y normalmente modificado a mi antojo antes que usarlas
al estilo "blackbox".
Win. Para OS X nada, el del bannister (que tiene emulador de todo lo
emulable xD).
¿Y recompilando alguno de Linux o usando Wine?
A mí me gustan ciertos IDEs, siempre y cuando:
-Sean eficientes
-El proyecto sea agnóstico del IDE (cosa que no pasa por ejemplo con Eclipse) -Permitan adaptarlos a mi forma de trabajar, y que no tenga
yo que adaptar mi forma de trabajar al IDE.
Pero en 8bits esa idea del ide+emu de CPC me ha gustado mucho, es muy práctica.
pasa de #0000 se te meterá en la pantalla) tienes de sobra. Pero
ojo! Que tienes el gancho de
A mí me da un poco de pánico esto... ¿no es fácil colarse en el #0038-#003A?
Especialmente si tienes alguna rutina con algo de IA.
Tampoco sé si el CPC tiene soporte NMI en cuyo caso ya no se podría
bajar de #0066-#0068.
¿Lo de tomar como punto de partida #0100 es por costumbre CP/Mera?
Cuidado si usas alguna rutina recursiva... en arcade son poco
frecuentes, pero en juegos como la Abadía son la base.
Pues realmente mis dudas son otras, a ver si las puedes averiguar:
- Como cargar un binario. O de disco. O el formato del mismo (si
tiene
Si es de disco es CP/M puro y duro. O sea, igual que si fuese MSX-DOS.
La cuestión es cómo hacerlo de cinta (y cómo invocar BIOS y demases).
A mí me pasa igual. No soporto que me den hecho nada, me sientoA tanto no llego. En 8 bits si, me gusta. Es factible además. En otros sistema
el trabajo he usado librerías o funciones de terceros, pero antes las
he destripado y normalmente modificado a mi antojo antes que usarlas
al estilo "blackbox".
se me escapa. No puedo programar en iOS y saber como va todo el OS. Es
No se si hay para linux. Y el wine... pues no. xD No es problemático. Con teneWin. Para OS X nada, el del bannister (que tiene emulador de todo lo¿Y recompilando alguno de Linux o usando Wine?
emulable xD).
uno que funcione más o menos (el de bannister) y que me permita cambiar el color del borde, como hemos hecho toda la vida para "marcarnos" cosas, me sobra. :) Lo del debugger es para señoritos. xDDDD (es broma, es una tool importántisima que aumenta la productividad).
Es que el Eclipse es como una patada en los huevos. Mas o menos. Malo, lento, ineficiente, difícil, oscuro... Lo tiene todo. Y en PUTO JAVA! Es MALISIMO. El único IDE que uso, y un poco por fuerza, es Xcode. Pero hijo mio... que diferencia con el Eclipse: rapido, limpio, manejable... uff... lo tiene todo.
pasa de #0000 se te meterá en la pantalla) tienes de sobra. PeroA mí me da un poco de pánico esto... ¿no es fácil colarse en el
ojo! Que tienes el gancho de
#0038-#003A?
No. Que va que va. No llegas ni de coña. Con un juego "normal" te sobra pila por todas partes. En un bucle puedes hacer como mucho unas 8 o 10 entradas en
la misma. Piénsalo. ;) (CALL que llama a CALL que llama CALL más unos cuanto
PUSH)
Poruqe viendo el juego de Jon en disco no cargan "antes" el CP/M. Carga directo, como un binario normal desde el BASIC.
Entonces "entiendo" que posiciona la RAM en esa parte #0000-3FFF y que se parchea KEYINT. Pero ... ¿la NMI no? :S
A lo mejor el sistema deja esa zona #0000-#0FF con sus propias rutinas o algo,
no?
Porque si no yo que haría serái hacerme con TODOs los RST para mi. Me pondría las rutinas básicas que se usan mil veces (HL = HL + A, LD HL,(HL), etc..).
No no... que va. xD Que te digo yo que no cargan el CP/M antes y ejecutan "un bat". Es como desde el DISK-BASIC del MSX, para entendernos.Pues realmente mis dudas son otras, a ver si las puedes averiguar:Si es de disco es CP/M puro y duro. O sea, igual que si fuese MSX-DOS.
- Como cargar un binario. O de disco. O el formato del mismo (si
tiene
Armando Perez wrote to Jose Angel Morente <=-
¡Hola Jose!
Eso es lo más cojonudo. Jon... ¿cómo pones el modo 0 y la paleta? Lo
haces con las rutinas de #Bxxx (que he visto por ahi)? Es que si estas llamando a eso desde tu programa en #100 ... ¿ande puñetas está la ROM puesta? Imagino que lo hará a "pincho" accediendo al hierro. Algo que
mola mil ya que el AMS lo permite. :) (puertos fijos, no hay
expansiones, no hay ampliaciones... :D).
Hombre, si son librerías del propio sdk del iOS no, como tampoco suelo destripar las rutinas de la BIOS del MSX. Pero si tomo prestadas
librerías de un tercer desarrollador sí que me gusta chafardearlas.
No se si hay para linux. Y el wine... pues no. xD No es problemático.
Con tene
Para Linux está el propio CPCemu, y seguro que habrá más.
es Xcode. Pero hijo mio... que diferencia con el Eclipse: rapido,
limpio, manejable... uff... lo tiene todo.
Cierto es.
Yo uso Netbeans para algunas cosas, que no cumple el primer punto que
he dicho (la eficiencia) pero sí cumple los otros dos, especialmente
que el proyecto no te lo "estropea", y tal cuál lo puedes compilar a
mano sin tener que reconfigurar nada. Y por supuesto es fácil e intuitivo, lo que no caracteriza precisamente al Eclipse.
unas 8 o 10 entradas en la misma. Piénsalo. ;) (CALL que llama a
CALL que llama CALL más unos cuanto PUSH)
Hostia, pues yo recuerdo haber hecho trazados de pila de juegos de MSX
y te aseguro que se cuelan mucho más... claro que seguramente serían juegos más tochos, tipo SD Snatcher.
parchea KEYINT. Pero ... ¿la NMI no? :S
Igual la NMI no está conectada, como pasa en MSX.
A lo mejor el sistema deja esa zona #0000-#0FF con sus propias
rutinas o algo, no?
En el caso de CP/M ya sabes que así es. Rutinas propias, área de
recogida de parámetros, etc.
La Coleco tiene eso resuelto de puta madre: todos los RST saltan a
zonas definidas previamente en la cabecera del cartucho para que la
propia ROM ya contenga las rutinas RST predefinidas para dicho juego.
ejecutan "un bat". Es como desde el DISK-BASIC del MSX, para
entendernos.
Sí, tienes razón, lo pensé después.
:) (puertos fijos, no hay expansiones, no hay ampliaciones...
:D).
Y parecia que programar en Amstrad era desquiciante !
Yo uso Netbeans para algunas cosas, que no cumple el primer punto que
he dicho (la eficiencia) pero sí cumple los otros dos, especialmente
que el proyecto no te lo "estropea", y tal cuál lo puedes compilar a
mano sin tener que reconfigurar nada. Y por supuesto es fácil e
intuitivo, lo que no caracteriza precisamente al Eclipse.
Es que lo de Eclipse no tiene adjetivos ya.... :/
Hostia, pues yo recuerdo haber hecho trazados de pila de juegos de MSX
y te aseguro que se cuelan mucho más... claro que seguramente serían
juegos más tochos, tipo SD Snatcher.
Seguramente. Ya te digo yo que para uno tipo "arcade" no sueles gastar más de 64 bytes.
Pero por velocidad ninguna. Solo ganas espacio. Porque un CALL directo desde t
propio programa es más rápido. Pero ocupa más bytes.
Vamos que:
RST xx
Y en el RST
LD HL,(GANCHO) ; Seguro
JP (HL)
¡Hola Javi!
El 27 Nov 13 a las 16:25, Javi Lopez le decía a Armando Perez:
Si. Lo es. Pero cuando haces las cosas como reto personal y entretenimiento donde la productividad importa poco pues se puede hacer divertido. ;):) (puertos fijos, no hay expansiones, no hay ampliaciones...Y parecia que programar en Amstrad era desquiciante !
:D).
arreglar no sé cuánto" y el último paso era "Instalar Netbeans".
:-D
Hombre, 64 ya está bien, ya... Aunque hay que tener en cuenta que
sólo el salvado de registro de la rutina de INT se come... ¿cuántos?
Un push por cada par de registros, más set de registros
alternativos...
Vamos que: RST xx Y en el RST LD HL,(GANCHO) ; Seguro JP (HL)
Está claro. Aunque peor es el gancho a H.KEY o H.TIMI después de que
la BIOS haya perdido semana y media en hacer otras cosas que no le has pedido ;-)
Sysop: | Karloch |
---|---|
Location: | Madrid, Spain |
Users: | 74 |
Nodes: | 8 (0 / 8) |
Uptime: | 27:02:19 |
Calls: | 1,495 |
Files: | 17,895 |
Messages: | 65,841 |