Página 1 de 1

Creando cartucho IF2 con Pasmo 2 - Set de caracteres

NotaPublicado: Dom Dic 16, 2007 7:44 pm
por radastan
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.

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

NotaPublicado: Dom Dic 16, 2007 7:54 pm
por Bubu
¡¡ Bien !! ¡¡ Esa EÑE, coño !!

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

NotaPublicado: Dom Dic 16, 2007 8:17 pm
por radastan
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...

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

NotaPublicado: Lun Dic 17, 2007 2:29 pm
por mcleod_ideafix
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.

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

NotaPublicado: Lun Dic 17, 2007 3:13 pm
por radastan
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.

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

NotaPublicado: Mar Dic 18, 2007 1:52 am
por mcleod_ideafix
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...

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

NotaPublicado: Mar Dic 18, 2007 1:57 am
por Bubu
Posiblemente con una MACRO podrías. Habría que investigarlo un poquillo...

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

NotaPublicado: Mar Dic 18, 2007 9:29 am
por radastan
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.

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

NotaPublicado: Mar Dic 18, 2007 12:14 pm
por mcleod_ideafix
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...

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

NotaPublicado: Mar Dic 18, 2007 12:40 pm
por radastan
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.

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

NotaPublicado: Mie Dic 19, 2007 10:19 am
por Gandulf
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.

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

NotaPublicado: Mie Dic 19, 2007 10:37 am
por mcleod_ideafix
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)

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

NotaPublicado: Mie Dic 19, 2007 10:43 am
por Gandulf
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.

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

NotaPublicado: Dom Feb 03, 2008 4:10 pm
por Z80user
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.

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

NotaPublicado: Dom Feb 17, 2008 2:57 am
por NotFound
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.