Karoshi MSX Community
05 de Julio de 2021, 04:18:44 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 Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Interlaced SC1 with 64 columns  (Leído 15030 veces)
0 Usuarios y 1 Visitante están viendo este tema.
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« : 05 de Marzo de 2006, 04:50:34 pm »

Con esta rutina se pueden obtener 64 columnas en modo SC1 No me parece demasiado útil ya que cuando se trata de leer texto en pantalla, el parpadeo se puede hacer muy molesto, no como cuando se trata de los modos gráficos (como los 105 colores de "MSX Unleashed"), en los que importa menos.

A ver si a alguien se le ocurre algún uso para la rutina (quizás un lector de archivos de texto?)

You can try this to set a "new" SC1 text mode with 64 columns. Pretty useless due to the flickering, that unlike in the graphic modes (see "MSX Unleashed" 105 colors), it's very disturbing when you are reading a lot of text.

Maybe anyone could find some funny use to the routine (a text files reader for example?)

Código:
;------------------------------------------------------
;
; Description: Creates a SC1 based 64 columns mode by mixing two VRAM pages
;
; The new VRAM map is:
; 0000-07FF : Pattern table 1
; 0800-0FFF : Pattern table 2
; 1400-16FF : Name table 1
; 1800-1AFF : Name table 2
;
; Color, sprites & palette (MSX2) tables addresses are untouched
;
; Use asMSX to compile (although is easily adapted to other assemblers)
;
;------------------------------------------------------

        .bios
        .page 1
        .rom
.start MAIN
       
RG2SAV equ     $F3E1
RG4SAV equ     $F3E3

MAIN: ; Initializes SC1 with 15,1,1 colors & 32 columns
ld a,32
ld [$F3AF],a
ld a,15
ld [$F3E9],a
ld a,1
ld [$F3EA],a
ld [$F3EB],a
call INIT32

; fills both name tables with spaces (prolly useless)
ld hl,$1400
ld bc,$0700
ld a,32
call FILVRM

; dump to VRAM a 4 pixels right shifted font, based on the old one
ld hl,$0800+32*8
call SETWRT
ld hl,FONT4x8
ld bc,768
@@LOOP: ld a,[hl]
                and $F0
                rrca
                rrca
                rrca
                rrca           
out ($98),a
inc hl
dec bc
ld a,b
or c
jr nz,@@LOOP

; dump the font to VRAM
ld hl,FONT4x8
ld de,$0000+32*8
ld bc,768
call LDIRVM

                ; Sets active name table to address $1400
ld bc,$0502
call WRTVDP

; installs interupt hook
        call INSTALLISR

; prints an example text
ld hl,TXT1
ld de,$0000 ; X(0-63)Y(0-23)
call PUTS
@@HANG: jp @@HANG


;------------------------------------------------------
;
; Description: Prints a string
; Input: D = coord. X (0-63), E = coord. Y (0-23)
; Output: nothing
; Modifies: AF,HL,DE,BC
;
;------------------------------------------------------
PUTS: push hl
                ld h,0         
                ld l,e          ; Y
                add hl,hl       
                add hl,hl       
                add hl,hl       
                add hl,hl       
                add hl,hl       ; Y*32
ld b,$14
ld a,d
sra a
ld c,a ; X\2
add hl,bc       ; HL=NAME table position
call SETWRT
ex de,hl ; DE=VRAM
pop hl ; HL=TXT1
ld b,2         ; prints even & odd positions
@@LOOP2: push hl
@@LOOP1:        ld a,[hl]
or a
jr z,@@FINTXT
out ($98),a     ; outputs even char
inc hl
ld a,[hl]
or a
jr z,@@FINTXT
inc hl
jr @@LOOP1
@@FINTXT:       ld hl,$400      ; switch to odd chars
add hl,de
call SETWRT
pop hl
inc hl
djnz @@LOOP2
ret

;
; Interrupt routine
;
ISR: di
exx
        in a,($99)
        ld b,5
ld a,[VALUE]
inc a
ld [VALUE],a
; sets flag to 0-1 values
and 1
jr z,@@NOPAGE2
inc b
@@NOPAGE2: out ($99),a
ld [RG4SAV],a
ld a,$84
; sets active pattern table
out ($99),a
ld a,b
out ($99),a
ld [RG2SAV],a
ld a,$82
; sets active name table
out ($99),a
        exx
        ei
        ret

;
; Installs interrupt hook
;
INSTALLISR: di
        ld hl,$FD9F
        ld de,HOOK
        ld bc,5
        ldir
        ld a,$C3
        ld hl,ISR
        ld [$FD9F],a
        ld [$FD9F+1],hl
        ei
        ret

;
; Uninstalls interrupt hook (not used in this example! :P)
;
REMOVEISR: di
        ld hl,HOOK
        ld de,$FD9F
        ld bc,5
        ldir
        ei
        ret

;
; Example text
;
TXT1: DB "En un agujero en el suelo, vivia un hobbit."
DB " No un agujero humedo, sucio, repugnante, "
DB "con restos de gusanos y olor a fango, ni "
DB "tampoco un agujero seco, desnudo y arenoso, "
DB "sin nada en que sentarse o que comer: era un "
DB "agujero-hobbit, y eso significa comodidad. Tenia"
DB " una puerta redonda, perfecta como un ojo de "
DB "buey, pintada de verde, con una manilla de bronce"
DB " dorada y brillante, justo en el medio. La puerta"
DB " se abria a un vestibulo cilindrico, como un tunel:"
DB " un tunel muy comodo, sin humos, con paredes "
DB "revestidas de madera y suelos enlosados y "
DB "alfombrados, provisto de sillas barnizadas, y "
DB "montones y montones de perchas para sombreros "
DB "y abrigos; el hobbit era aficionado a las visitas.",0

;
; Guess what?. It's a 4x8 font...
;
FONT4x8:
DB $00,$00,$00,$00,$00,$00,$00,$00
DB $40,$40,$40,$40,$40,$00,$40,$00
DB $A0,$A0,$00,$00,$00,$00,$00,$00
DB $A0,$A0,$F0,$A0,$F0,$A0,$A0,$00
DB $40,$E0,$80,$40,$20,$E0,$40,$00
DB $A0,$20,$40,$40,$40,$80,$A0,$00
DB $40,$A0,$40,$80,$C0,$A0,$50,$00
DB $40,$40,$00,$00,$00,$00,$00,$00
DB $40,$80,$80,$80,$80,$80,$40,$00
DB $40,$20,$20,$20,$20,$20,$40,$00
DB $00,$00,$A0,$40,$A0,$00,$00,$00
DB $00,$00,$40,$E0,$40,$00,$00,$00
DB $00,$00,$00,$00,$00,$20,$40,$00
DB $00,$00,$00,$E0,$00,$00,$00,$00
DB $00,$00,$00,$00,$00,$00,$40,$00
DB $20,$20,$40,$40,$40,$80,$80,$00
DB $40,$A0,$A0,$A0,$A0,$A0,$40,$00
DB $40,$C0,$40,$40,$40,$40,$E0,$00
DB $40,$A0,$20,$40,$80,$80,$E0,$00
DB $40,$A0,$20,$40,$20,$A0,$40,$00
DB $A0,$A0,$A0,$E0,$20,$20,$20,$00
DB $E0,$80,$80,$C0,$20,$A0,$40,$00
DB $40,$A0,$80,$C0,$A0,$A0,$40,$00
DB $E0,$20,$20,$40,$40,$40,$40,$00
DB $40,$A0,$A0,$40,$A0,$A0,$40,$00
DB $40,$A0,$A0,$60,$20,$A0,$40,$00
DB $00,$00,$00,$40,$00,$00,$40,$00
DB $00,$00,$00,$20,$00,$20,$40,$00
DB $00,$20,$40,$80,$40,$20,$00,$00
DB $00,$00,$E0,$00,$E0,$00,$00,$00
DB $00,$80,$40,$20,$40,$80,$00,$00
DB $40,$A0,$A0,$20,$40,$00,$40,$00
DB $40,$A0,$A0,$C0,$80,$A0,$40,$00
DB $40,$A0,$A0,$E0,$A0,$A0,$A0,$00
DB $C0,$A0,$A0,$C0,$A0,$A0,$C0,$00
DB $40,$A0,$80,$80,$80,$A0,$40,$00
DB $C0,$A0,$A0,$A0,$A0,$A0,$C0,$00
DB $E0,$80,$80,$C0,$80,$80,$E0,$00
DB $E0,$80,$80,$C0,$80,$80,$80,$00
DB $40,$A0,$80,$A0,$A0,$A0,$40,$00
DB $A0,$A0,$A0,$E0,$A0,$A0,$A0,$00
DB $40,$40,$40,$40,$40,$40,$40,$00
DB $20,$20,$20,$20,$20,$A0,$40,$00
DB $A0,$A0,$A0,$C0,$A0,$A0,$A0,$00
DB $80,$80,$80,$80,$80,$80,$E0,$00
DB $A0,$E0,$E0,$A0,$A0,$A0,$A0,$00
DB $E0,$A0,$A0,$A0,$A0,$A0,$A0,$00
DB $40,$A0,$A0,$A0,$A0,$A0,$40,$00
DB $C0,$A0,$A0,$C0,$80,$80,$80,$00
DB $40,$A0,$A0,$A0,$A0,$C0,$20,$00
DB $C0,$A0,$A0,$C0,$A0,$A0,$A0,$00
DB $40,$A0,$80,$40,$20,$A0,$40,$00
DB $E0,$40,$40,$40,$40,$40,$40,$00
DB $A0,$A0,$A0,$A0,$A0,$A0,$60,$00
DB $A0,$A0,$A0,$A0,$A0,$A0,$40,$00
DB $A0,$A0,$A0,$A0,$E0,$E0,$A0,$00
DB $A0,$A0,$A0,$40,$A0,$A0,$A0,$00
DB $A0,$A0,$A0,$40,$40,$40,$40,$00
DB $E0,$20,$20,$40,$80,$80,$E0,$00
DB $60,$40,$40,$40,$40,$40,$60,$00
DB $80,$80,$40,$40,$40,$20,$20,$00
DB $60,$20,$20,$20,$20,$20,$60,$00
DB $40,$A0,$00,$00,$00,$00,$00,$00
DB $00,$00,$00,$00,$00,$00,$E0,$00
DB $40,$20,$00,$00,$00,$00,$00,$00
DB $00,$00,$00,$40,$A0,$A0,$60,$00
DB $00,$80,$80,$C0,$A0,$A0,$40,$00
DB $00,$00,$00,$60,$80,$80,$60,$00
DB $00,$20,$20,$60,$A0,$A0,$40,$00
DB $00,$00,$00,$60,$A0,$C0,$60,$00
DB $00,$20,$40,$E0,$40,$40,$40,$00
DB $00,$00,$00,$40,$A0,$60,$C0,$00
DB $00,$80,$80,$C0,$A0,$A0,$A0,$00
DB $00,$00,$40,$00,$40,$40,$40,$00
DB $00,$00,$40,$00,$40,$40,$80,$00
DB $00,$80,$A0,$C0,$A0,$A0,$A0,$00
DB $00,$40,$40,$40,$40,$40,$40,$00
DB $00,$00,$00,$A0,$E0,$A0,$A0,$00
DB $00,$00,$00,$E0,$A0,$A0,$A0,$00
DB $00,$00,$00,$40,$A0,$A0,$40,$00
DB $00,$00,$00,$C0,$A0,$C0,$80,$00
DB $00,$00,$00,$40,$A0,$60,$20,$00
DB $00,$00,$00,$A0,$C0,$80,$80,$00
DB $00,$00,$00,$20,$40,$20,$C0,$00
DB $00,$40,$40,$E0,$40,$40,$40,$00
DB $00,$00,$00,$A0,$A0,$A0,$60,$00
DB $00,$00,$00,$A0,$A0,$A0,$40,$00
DB $00,$00,$00,$A0,$A0,$E0,$A0,$00
DB $00,$00,$00,$A0,$40,$40,$A0,$00
DB $00,$00,$00,$A0,$A0,$40,$C0,$00
DB $00,$00,$00,$E0,$60,$80,$E0,$00
DB $20,$40,$40,$80,$40,$40,$20,$00
DB $40,$40,$40,$40,$40,$40,$40,$00
DB $80,$40,$40,$20,$40,$40,$80,$00
DB $40,$F0,$20,$00,$00,$00,$00,$00

;
; RAM variables
;
.page 3

VALUE: DS 1
HOOK: DS 5
En línea

Doom dee doom dee doom
WYZ
Visitante
« Respuesta #1 : 05 de Marzo de 2006, 10:26:56 pm »

Genial  Wink
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #2 : 05 de Marzo de 2006, 10:36:34 pm »

¡Genial, JL!  Wink

Se trata ahora de pulirlo, pero creo que es algo nunca visto  Shocked

Ultimamente la gente se anima a llevar al MSX a las últimas consecuencias (voces digitalizadas, 105 colores, ahora esto...) ¿Qué nos espera después?  Shocked
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
WYZ
Visitante
« Respuesta #3 : 05 de Marzo de 2006, 10:39:49 pm »

Prueba a hacer 96 caracteres por linea con 3 bancos  Grin
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 06 de Marzo de 2006, 11:45:10 am »

Está muy bien la rutina, sí señor. Pregunta preguntosa: la fuente de letra es la del eBook reader de Gameboy? Lo digo porque tienen un look muy parecido. O del intérprete de Infocom para Gameboy de NO$CASH? Bueno, en realidad supongo que en ese tamaño no hay mucho que hacer y todas las fuentes se parecen necesariamente.

En cuanto a aplicaciones, desde luego iría muy bien para aventuras conversacionales, salvo por el inconveniente del parpadeo, claro. Si no recuerdo mal, el procesador de textos TASSWORD utilizaba un modo de 60 columnas, pero sin parpadeos. Supongo que lo que hacía era redefinir a saco en SCREEN 2, lo cual lo aleja bastante de la técnica que utilizas.

Como utilidad directa, sí podrías crear la siguiente: EpilepticAttackLauncher v.1.0. Es el problema de todo lo que sea entrelazado: el parpadeo puede desatar crisis epilépticas en personas susceptibles. Es decir, no te provoca epilepsia si no la tienes, pero si la tienes y no se te ha diagnosticado, te puede provocar una crisis: ver el incidente de Pokemon en Japón. Aparte de esto, hay una diferencia muy grande entre entrelazado a 60 Hz y a 50 Hz. A 50 Hz el parpadeo es demasiado evidente. También tiene mucho que ver con el tipo de monitor/televisor que estéis empleando.

Más snippets!
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #5 : 06 de Marzo de 2006, 12:28:16 pm »

Citar
la fuente de letra es la del eBook reader de Gameboy?

Nop, es una conversión a bitmap de una TTF que rula para PC, creo recordar que llamada "Micro clean".
Como tú dices a ese tamaño poco se puede hacer; de esa fuente existe una variante, "Micro Tech" que le da a las letras un cierto giro futurista; pero resulta poco práctico cuando el objetivo es que sea lo más legible y serio posible Smiley

Citar
Supongo que lo que hacía era redefinir a saco en SCREEN 2, lo cual lo aleja bastante de la técnica que utilizas.

Claro, si es que en la práctica creo que tiene poco uso. Si haces un conversacional y metes gráficos; pues compensa usar SC2 y si solo hay texto tampoco vas a ir tan pillado de velocidad como para necesitar este modo. Como ya digo la principal ventaja es el ahorro de memoria y la velocidad; poco más.

Citar
EpilepticAttackLauncher v.1.0

¡La idea es cojonuda!. Ahora, además de medirte la tensión, sangre y electros, te tendrían que tener mirando un rato un modo de pantalla entrelazado, ¡a ver quien aguanta eso! :guitar:
Fuera bromas, se me ha pasado por la cabeza el rizar el rizo y hacer un screensplit entre las 64 columnas y SC2; pero me temo que el follón con la VRAM sería cósmico Tongue.

Citar
Aparte de esto, hay una diferencia muy grande entre entrelazado a 60 Hz y a 50 Hz. A 50 Hz el parpadeo es demasiado evidente. También tiene mucho que ver con el tipo de monitor/televisor que estéis empleando.

Donde he conseguido un resultado muy bueno es a 60hz y con un TFT de 25ms de respuesta. Por supuesto con tinta blanca y fondo negro, claro.
En línea

Doom dee doom dee doom
SapphiRe
Visitante
« Respuesta #6 : 06 de Marzo de 2006, 01:16:29 pm »

Fuera bromas, se me ha pasado por la cabeza el rizar el rizo y hacer un screensplit entre las 64 columnas y SC2; pero me temo que el follón con la VRAM sería cósmico Tongue.

Aquí te lanzo el reto:

Screen split en MSX1 (usando detección de Sprites) poniendo un gráfico SC2 a 105 colores y luego entrelazando SC1 a 64 colores. También si los separas con una línea a pantalla completa (cambiando el color del borde, se entiende) quedaría bastante chulo.

Por supuesto con 16K de VRAM... tiene que funcionar en mi HX-10 Grin
« Última modificación: 06 de Marzo de 2006, 02:27:18 pm por SapphiRe » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #7 : 06 de Marzo de 2006, 01:59:49 pm »

Pero si el Toshiba HX-10 tiene 64 KB! Lo que sucede es que tiene la RAM en el slot 2 en lugar del 3 y eso lo hace un poco especial. Peor es el HX-20, que tiene 32 KB en un slot y 32 KB en otro. Encuentra la RAM!
En línea
SapphiRe
Visitante
« Respuesta #8 : 06 de Marzo de 2006, 02:27:35 pm »

Pero si el Toshiba HX-10 tiene 64 KB! Lo que sucede es que tiene la RAM en el slot 2 en lugar del 3 y eso lo hace un poco especial. Peor es el HX-20, que tiene 32 KB en un slot y 32 KB en otro. Encuentra la RAM!

Me faltaba una V...  Roll Eyes
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #9 : 06 de Marzo de 2006, 02:36:14 pm »

Citar
Screen split en MSX1 (usando detección de Sprites) poniendo un gráfico SC2 a 105 colores y luego entrelazando SC1 a 64 colores. También si los separas con una línea a pantalla completa (cambiando el color del borde, se entiende) quedaría bastante chulo.

Ese era el formato que tenía en mente; pero ni reto, ni leches; sospecho que no se puede hacer Undecided. A falta de mirar con lupa los mapas de la VRAM (¡quiero ese documento de SC2-105! Grin) yo diría que no bastaría con cambiar unos cuantos registros; así sin más... Tongue
En línea

Doom dee doom dee doom
SapphiRe
Visitante
« Respuesta #10 : 06 de Marzo de 2006, 04:26:15 pm »

¡quiero ese documento de SC2-105!

Le he preguntado a Daniel si puedo mandar la presentación PPT y me ha dicho que sin problemas, revisa tu correo Tongue
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #11 : 06 de Marzo de 2006, 05:14:59 pm »

¡Yippeee!, ¡en cuanto vuelva le echo una miradita!
En línea

Doom dee doom dee doom
dvik
Karoshi Fan
**
Mensajes: 80


WWW Email
« Respuesta #12 : 26 de Junio de 2006, 08:42:50 pm »

Very cool  Cheesy

Would it be possible to patch the width command in basic so you can get a width 64 mode? I know some external 80 column video cards patches something so that you get something like an 80 column screen 0. I think it would be possible to do a "SCREEN 0: WIDTH 64" feature that will use the interlaced screen 1 to achieve this. Not sure how hard it would be but I guess its not too hard.

I was also thinking about a good font. I think the C64 font is better suited for interlaced screen 1 because its a bold font with 2 pixel wide lines.
En línea
BiFiMSX
Karoshi Newbie
*
Mensajes: 23


« Respuesta #13 : 28 de Junio de 2006, 06:59:21 am »

a similar trick was used to get 64 characters on a line in the word processing program Tasword, though that was in SCREEN2... it's a neat trick to do...

and it should be possible to do something like this for a WIDTH 64 in BASIC. It's wouldn't be fast, but it would be possible.
En línea

jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #14 : 28 de Junio de 2006, 11:38:08 am »

Citar
Would it be possible to patch the width command in basic so you can get a width 64 mode?

I guess that it could be possible as BiFi says; but with a lot of work for sure. You must to patch all the BIOS routines that work with the name table, as CHPUT or scroll routines, some could have hooks to use anyway; but some others could be very tricky to patch. I'm not really a BIOS "connoisseur". Sad
The fake screen 1 map is very easy to implement, one page for even chars and other for odd ones, every charset with his own pattern table, the first one shifted 4 pixels to the left. It's hard to fit a good font in only 3 pixels wide! Tongue

Citar
I know some external 80 column video cards patches something so that you get something like an 80 column screen 0.

But prolly all  this external video cards have a 9938 built-in. I'm not sure about none of them using software tricks to achieve the 80 columns mode Sad

Citar
I was also thinking about a good font. I think the C64 font is better suited for interlaced screen 1 because its a bold font with 2 pixel wide lines.

But are you thinking in a 64 colums mode?. I'm afraid that C64 font is way too big to fit in...
En línea

Doom dee doom dee doom
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!