Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por radastan » Dom Dic 16, 2007 6:44 pm

Bueno, en mi afán por dejar las cosas sencilla, allá va un set de caracteres básico para meter en el código del PASMO. Recordemos que al no poder usar la ROM original perdemos la capacidad de usar el set de caracteres original y tenemos que hacernos el nuestro.

Le llamo set de caracteres Moderno Grueso.

Código: Seleccionar todo

; -------------------------------------------
; Set de caracteres para juegos en ROM
; -------------------------------------------

letra   defb 0, 124, 254, 206, 214, 230, 254, 124   ; 0
   defb 0, 28, 60, 124, 28, 28, 28, 28      ; 1
   defb 0, 252, 254, 14, 124, 224, 254, 254   ; 2
   defb 0, 252, 254, 14, 124, 14, 254, 252      ; 3
   defb 0, 198, 198, 198, 254, 126, 6, 6      ; 4
   defb 0, 254, 254, 224, 252, 14, 254, 252   ; 5
   defb 0, 124, 252, 192, 252, 198, 254, 124   ; 6
   defb 0, 254, 254, 6, 14, 28, 56, 112      ; 7
   defb 0, 124, 254, 198, 124, 198, 254, 124   ; 8
   defb 0, 124, 254, 198, 126, 6, 126, 124      ; 9
   defb 0, 124, 254, 198, 198, 254, 198, 198   ; A
   defb 0, 252, 254, 198, 252, 198, 254, 252   ; B
   defb 0, 126, 254, 192, 192, 192, 254, 126   ; C
   defb 0, 248, 252, 206, 198, 206, 252, 248   ; D
   defb 0, 126, 254, 192, 252, 192, 254, 126   ; E
   defb 0, 126, 254, 192, 252, 252, 192, 192   ; F
   defb 0, 124, 254, 192, 222, 198, 254, 124   ; G
   defb 0, 198, 198, 198, 254, 198, 198, 198   ; H
   defb 0,254, 254, 56, 56, 56, 254, 254      ; I
   defb 0, 6, 6, 6, 6, 198, 254, 124      ; J
   defb 0, 198, 206, 220, 248, 220, 206, 198   ; K
   defb 0, 192,192, 192, 192, 192, 254, 126   ; L
   defb 0, 198, 238, 254, 214, 214, 198, 198   ; M
   defb 0, 198, 230, 246, 254, 222, 206, 198   ; N
   defb 0, 254, 0, 230, 246, 254, 222, 206      ; Ñ
   defb 0, 124, 254, 198, 198, 198, 254, 124   ; O
   defb 0, 252, 254, 198, 254, 252, 192, 192   ; P
   defb 0, 124, 254, 198, 214, 204, 254, 118   ; Q
   defb 0, 252, 254, 198, 254, 252, 206, 198   ; R
   defb 0, 126, 254, 224, 124, 14, 254, 252   ; S
   defb 0, 254, 254, 56, 56, 56, 56, 56      ; T
   defb 0, 198, 198, 198, 198, 198, 254, 124   ; U
   defb 0, 198, 198, 198, 198, 238, 124, 56   ; V
   defb 0, 198, 198, 214, 214, 254, 254, 108   ; W
   defb 0, 198, 238, 124, 56, 124, 238, 198   ; X
   defb 0, 198, 198, 254, 126, 6, 126, 124      ; Y
   defb 0, 254, 254, 28, 56, 112, 254, 254      ; Z
   defb 0, 0, 0, 254, 254, 0, 0, 0         ; -
   defb 0, 24, 24, 126, 126, 24, 24, 0      ; +
   defb 0, 254, 254, 0, 0, 0, 254, 254      ; =
   defb 0, 6, 14, 28, 56, 112, 224, 192      ; /
   defb 0, 108, 108, 108, 0, 0, 0, 0      ; "
   defb 0, 0, 0, 0, 0, 0, 96, 96         ; .
   defb 0, 0, 0, 0, 0, 0, 64, 32         ; ,
   defb 0, 0, 96, 96, 0, 0, 96, 96         ; :
   DEFB 0, 0, 192, 192, 0, 0, 128, 64      ; ;
   defb 0, 96, 48, 24, 12, 24, 48, 96      ; >
   defb 0, 12, 24, 48, 96, 48, 24, 12      ; <
   defb 0, 24, 56, 48, 48, 48, 56, 24      ; (
   defb 0, 48, 56, 24, 24, 24, 56, 48      ; )
   defb 0, 24, 24, 24, 24, 0, 24, 24      ; !
   defb 0, 56, 124, 108, 12, 24, 0, 24      ; ?
   defb 0, 198, 206, 28, 56, 112, 230, 198      ; %


Particularidades:

- Sólo en mayúscula (¿hace falta minúscula en el 90% de los juegos?)
- Caracteres de símbolos reducido
- Tipo grueso
- La etiqueta "letra" indica la marca de memoria donde se aloja el set
- Los números van primero por razones de programación (basta sumar letra + número y sale directamente el número)

Si hago nuevos set de caracteres los iré metiendo en este hilo.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por Bubu » Dom Dic 16, 2007 6:54 pm

¡¡ Bien !! ¡¡ Esa EÑE, coño !!

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por radastan » Dom Dic 16, 2007 7:17 pm

Bubu escribió:¡¡ Bien !! ¡¡ Esa EÑE, coño !!


Si, la verdad es que esto nos brinda la posibilidad de arreglar ciertos inconvenientes del set original...
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por mcleod_ideafix » Lun Dic 17, 2007 1:29 pm

De acuerdo con lo de la Ñ. De todas formas, sería recomendable que el set de caracteres respetara el orden del código ASCII, ya que las cadenas en PASMO usan esa codificación. De no hacerlo, una de dos: o la rutina de impresión se complica innecesariamente para trasladar códigos en orden ASCII al orden establecido por este set de caracteres, o las cadenas en PASMO habría que definirlas usando los códigos de este set en lugar de usar el código ASCII estándar.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por radastan » Lun Dic 17, 2007 2:13 pm

mcleod_ideafix escribió:o las cadenas en PASMO habría que definirlas usando los códigos de este set en lugar de usar el código ASCII estándar.


¿Y cómo se hace eso? yo es que soy muy burro y directamente guardo las frases con defb y el código de cada letra... en juegos arcade no hay muchas frases y tampoco es molestia, pero me interesaría saber como redefinir en PASMO la tabla ASCII.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por mcleod_ideafix » Mar Dic 18, 2007 12:52 am

Que yo sepa no se puede: a lo que me refiero es a que tendrías que definir las cadenas como: db 14,27,30,2,... es decir, con los códigos que por su orden en la tabla de caracteres concuerdan con cada letra, cada símbolo. Para poder usar la definición de pasmo: db "cadena" , los caracteres tienen que guardan el orden ASCII, o mejor dicho, la rutina que los imprime debe guardar ese orden. Cuidando un poco el orden, la traducción ASCII-Radastancode no tiene por qué ser muy difícil, pero hay que hacerla...
Web: ZX Projects | Twitter: @zxprojects

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por Bubu » Mar Dic 18, 2007 12:57 am

Posiblemente con una MACRO podrías. Habría que investigarlo un poquillo...

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por radastan » Mar Dic 18, 2007 8:29 am

mcleod_ideafix escribió:Que yo sepa no se puede: a lo que me refiero es a que tendrías que definir las cadenas como: db 14,27,30,2,... es decir, con los códigos que por su orden en la tabla de caracteres concuerdan con cada letra, cada símbolo. Para poder usar la definición de pasmo: db "cadena" , los caracteres tienen que guardan el orden ASCII, o mejor dicho, la rutina que los imprime debe guardar ese orden. Cuidando un poco el orden, la traducción ASCII-Radastancode no tiene por qué ser muy difícil, pero hay que hacerla...


Vale, pero aún así... qué es lo que relaciona PASMO para que nuestra tabla ASCII sea tomada como propia, aún guardando el mismo orden, porque si hacemos una ROM nueva deberían entonces situarse los caracteres en el mismo espacio de memoria que en la ROM original, ¿no?

De todas formas me parece un desperdicio, tardo menos haciendo un pequeño programa traductor en el que introduzca frases y me devuelva cadenas db.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por mcleod_ideafix » Mar Dic 18, 2007 11:14 am

radastan escribió:Vale, pero aún así... qué es lo que relaciona PASMO para que nuestra tabla ASCII sea tomada como propia, aún guardando el mismo orden

Es que la tabla que has hecho pone por ejemplo los dígitos lo primero, y justo después las letras, cuando en ASCII no van juntos. Por eso cuando más tarde hicieras algo así como: db "A1B2C3D4", PASMO lo compilaría como db 65,49,66,50,67,51,68,52 en lugar de db 10,1,11,2,12,3,13,4 que es el lugar que tú has asignado a esas letras y dígitos.
radastan escribió:porque si hacemos una ROM nueva deberían entonces situarse los caracteres en el mismo espacio de memoria que en la ROM original, ¿no?

No, sólo en el mismo orden relativo (el espacio el primero, luego el !, luego las comillas, etc...)
radastan escribió:De todas formas me parece un desperdicio, tardo menos haciendo un pequeño programa traductor en el que introduzca frases y me devuelva cadenas db.

Vale, pero estás necesitando de ese programa cada vez que cambies algo en los db...
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por radastan » Mar Dic 18, 2007 11:40 am

mcleod_ideafix escribió:
radastan escribió:Vale, pero aún así... qué es lo que relaciona PASMO para que nuestra tabla ASCII sea tomada como propia, aún guardando el mismo orden

Es que la tabla que has hecho pone por ejemplo los dígitos lo primero, y justo después las letras, cuando en ASCII no van juntos. Por eso cuando más tarde hicieras algo así como: db "A1B2C3D4", PASMO lo compilaría como db 65,49,66,50,67,51,68,52 en lugar de db 10,1,11,2,12,3,13,4 que es el lugar que tú has asignado a esas letras y dígitos.


Ya lo cojo... entendido. ¿Y no hay forma humana de decirle a PASMO el orden nuevo?

mcleod_ideafix escribió:
radastan escribió:porque si hacemos una ROM nueva deberían entonces situarse los caracteres en el mismo espacio de memoria que en la ROM original, ¿no?

No, sólo en el mismo orden relativo (el espacio el primero, luego el !, luego las comillas, etc...)


Es decir, pasmo tiene una tabla interna que pasa los caracteres a su código correspondiente según el ZX Spectrum original.

mcleod_ideafix escribió:
radastan escribió:De todas formas me parece un desperdicio, tardo menos haciendo un pequeño programa traductor en el que introduzca frases y me devuelva cadenas db.

Vale, pero estás necesitando de ese programa cada vez que cambies algo en los db...


Ya, pero soy así de cabezón, y pienso más en lenguaje ensamblador que en alto nivel. Lo óptimo es hacerlo a mi manera, no es lo más rápido para nosotros pero si para el compilador y la máquina.

La pena es que en PASMO no se pueda cambiar la tabla.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por Gandulf » Mié Dic 19, 2007 9:19 am

No acabo de ver el problema. Yo siempre uso una tabla de caracteres que no se corresponde con asccii en el orden porque los números y las letras van consecutivos, pero como tengo mi rutina de impresión de texto, para obtener la dirección del gráfico de un caracter determinado tengo en cuenta eso y listo, nunca he tenido ninguna complicación al respecto. Y uso DB "DEFINICION DE TEXTO" también. Simplemente lo que hay que hacer es tenerlo en cuenta a la hora de obtener la dirección del gráfico de cada caracter. Por ejemplo:

DB "HOLA", 0

Leo los caracteres de la cadena, en este caso el código ASCII de la H. Par aimprimir la H, necesito saber la dirección del gráfico de esa letra. OK. Lo único que tengo que hacer es restar a #48 (código ascci de la H may) el código ascii de la A may, y en función a este valor calcular la dirección en mi set de caracteres y llamar a la rutina de impresión. Por lo general sólo uso números y letras mayúsculas y van todos seguidos.
Un saludo,

Gandulf

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por mcleod_ideafix » Mié Dic 19, 2007 9:37 am

Tu ejemplo de restar sólo es válido si en la cadena hay letras mayúsculas. En el momento en que hay números, ya hay que mirar más cosas.
Pero ¿y si en la cadena hay letras, números y símbolos de puntuación? Es a eso a lo que me refiero: que la traducción de ASCII a loquesea ya consume más ciclos de reloj (a no ser que se reordenen los códigos de un db con el programa que menciona Radastan)
Web: ZX Projects | Twitter: @zxprojects

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por Gandulf » Mié Dic 19, 2007 9:43 am

Sí, hombre, lo ideal sería tener toda la tabla ascci y no tener que hacer ningún cálculo, pero para mi es peor tener memoria ocupada con gráficos que no utilizo. Lo que hago es no utilizar en las cadenas de caracteres los símbolos que no tengo. Suelo usar sólo espacios en blanco, puntos y a veces tengo la coma también. En el caso de arcades/videoaventuras, el tiempo perdido en calcular la dirección del caracter es totalmente despreciable. Si fuera un parser de una conversacional con salida de texto a pantalla, etc, habría que valorarlo y estudiarlo de otra forma.
Un saludo,

Gandulf

Z80user
Manic Miner
Mensajes: 215
Registrado: Vie Jun 08, 2007 9:42 am
Ubicación: En un lugar de la mancha
Contactar:

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por Z80user » Dom Feb 03, 2008 3:10 pm

conversion_ASCII
LD A,[HL]
SUB A,'A'+10
JR NC, convertida
LD A,[HL]
  SUB A,'0'
convertida
INC HL
RET
asi le podemos meter texto ASCII y usar la rutina de Radastan, yo aun uno una forma de meter textos parecida, pero usando solo letras, para un compresor de textos
DB ' ','A','B','C','D','E',.....'Z',' '
El primer caracter de la tabla es un FIN DE LINEA, y usar solo el punto y la coma, limitacion de usar 5 bits, los numeros son caso aparte, no son para textos.

El problema puede estar en necesitar hasta el ultimo ciclo del Z80 pare realizar tareas, que en ese caso, esto se debe de hacer antes, como si fuese un descodificador previo, acelerando futuros accesos.

Si se usasen codigos ASCII, la tabla ocuparia mas memoria, y los codigos intermedios entre el 57='9' y el 65='A' se desperdiciarian " : ; < = > ? @ ", aunque se pueden usar com GDUs.

NOTA: 256*8 = 2048 bytes = el tamaño que ocuparian los 256 UDG, sin codigos de control, necesarios para algunas tareas, como dejar de escribir una cadena.
Si vas a tirar Hardware, primero pregunta si alguien lo puede recuperar.
No abandones un ordenador en un vertedero, donalo a alguien.

NotFound
rst 0
Mensajes: 16
Registrado: Dom Feb 17, 2008 1:46 am

Re: Creando cartucho IF2 con Pasmo 2 - Set de caracteres

Mensaje por NotFound » Dom Feb 17, 2008 1:57 am

Hola.

Lo de usar algún tipo de tabla de traducción de caracteres en Pasmo es algo que me ha pasado por la cabeza alguna vez, pensando sobre todo en el ZX-81 que usa unos códigos nada parecidos al ascii, pero no ha estado lo bastante alto en la lista de prioridades.

Algo se podría hacer con macros, pero la directiva útil para manipulación de literales de caracter es IRPC que solo está disponible en la versión en desarrollo, y esa versión aún no está lo bastante pulida como para que recomiende usarla.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados