Título: Interlaced SC1 with 64 columns Publicado por: jltursan en 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 Título: Re: Interlaced SC1 with 64 columns Publicado por: WYZ en 05 de Marzo de 2006, 10:26:56 pm Genial ;)
Título: Re: Interlaced SC1 with 64 columns Publicado por: Darth_Fistro en 05 de Marzo de 2006, 10:36:34 pm ¡Genial, JL! ;)
Se trata ahora de pulirlo, pero creo que es algo nunca visto :o Ultimamente la gente se anima a llevar al MSX a las últimas consecuencias (voces digitalizadas, 105 colores, ahora esto...) ¿Qué nos espera después? :o Título: Re: Interlaced SC1 with 64 columns Publicado por: WYZ en 05 de Marzo de 2006, 10:39:49 pm Prueba a hacer 96 caracteres por linea con 3 bancos ;D
Título: Re: Interlaced SC1 with 64 columns Publicado por: pitpan en 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! Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 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 :) 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 :P. 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. Título: Re: Interlaced SC1 with 64 columns Publicado por: SapphiRe en 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 :P. 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 ;D Título: Re: Interlaced SC1 with 64 columns Publicado por: pitpan en 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!
Título: Re: Interlaced SC1 with 64 columns Publicado por: SapphiRe en 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... ::) Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 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 :-\. A falta de mirar con lupa los mapas de la VRAM (¡quiero ese documento de SC2-105! ;D) yo diría que no bastaría con cambiar unos cuantos registros; así sin más... :P Título: Re: Interlaced SC1 with 64 columns Publicado por: SapphiRe en 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 :P Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 06 de Marzo de 2006, 05:14:59 pm ¡Yippeee!, ¡en cuanto vuelva le echo una miradita!
Título: Re: Interlaced SC1 with 64 columns Publicado por: dvik en 26 de Junio de 2006, 08:42:50 pm Very cool :D
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. Título: Re: Interlaced SC1 with 64 columns Publicado por: BiFiMSX en 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. Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 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". :( 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! :P 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 :( 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... Título: Re: Interlaced SC1 with 64 columns Publicado por: Jon_Cortazar en 28 de Junio de 2006, 03:46:29 pm It's hard to fit a good font in only 3 pixels wide! :P I've built a little font with 3px wide, I hope you can make use of it. If you like it I can build the rest of ascii chars. It would be nice to see a new 80columns mode on MSX1!: Karoshi's 3px Font Plain: (http://www.msxgamesbox.com/karoshi/font3px.gif) Italic: (http://www.msxgamesbox.com/karoshi/font3px_it.gif) Caps: (http://www.msxgamesbox.com/karoshi/font3px_caps.gif) Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 28 de Junio de 2006, 05:31:42 pm :o Wow!, that was fast, Jon!. It's cleaner than the font I used for the demo. :)
Citar It would be nice to see a new 80columns mode on MSX1! I'm afraid that it's far away from the MSX1 posibilities. To fit 80 coumns you'll need a 2px wide font (I'm not counting the blank pixel to space the chars) and such font must be a little unreadable. Anyway, to patch the BIOS for 64 columns, how many routines must be modified to cover all the uses of a text mode? ??? Título: Re: Interlaced SC1 with 64 columns Publicado por: BiFiMSX en 28 de Junio de 2006, 05:45:16 pm I think there are about 7 hooks you need to use to add support for that.
Título: Re: Interlaced SC1 with 64 columns Publicado por: dvik en 28 de Junio de 2006, 07:03:52 pm I think it would be very cool and perhaps even somewhat useful. Do you know what hooks needs implementing or where I can find info about it?
Using interlaced screen 1, I think its actually possible to do a width80 for MSX1. The characters will be 6 pixels wide as in MSX2 width 80, but of course interlaced. The question is I guess if its possible to do an interlaced font that will be readable. with 8 interlaced pixels I think its more likely to be readable but then it will only be width 64. width64/80 would fit in an 8kb rom. There are many things I don't know how to do though, like how to hook these calls and make them start executing code in a rom. Título: Re: Interlaced SC1 with 64 columns Publicado por: dvik en 28 de Junio de 2006, 11:51:38 pm I made two test fonts for interlaced screens. The top one is for width 64 and the bottom one for width 80. I haven't tested them on an MSX yet but hope to do it soon.
(http://www.bluemsx.com/sc1int_font.PNG) Título: Re: Interlaced SC1 with 64 columns Publicado por: dvik en 29 de Junio de 2006, 12:58:01 am Hmm.. My idea won't work. I was thinking of being clever and get some pixels being lit in both frames. This would increase readability quite a lot.
But to do that I need a new screen mode.To use the font I need two BG tiles blocks, each 1800h big like in screen 2, but no color table (since I wanted to use most of the VRAM for tiles. Thats unfortunate, so unless I find the screenmode I need I think I need to drop the idea of nice interlaced characters in width 80. The original idea works fine though, but I think its hard to do width 80 with that technique. width64 works fine though. Título: Re: Interlaced SC1 with 64 columns Publicado por: jltursan en 29 de Junio de 2006, 10:06:26 am sub-pixel techniques? (or at least some kind of) ;)
I found enough the 64 column mode; with clear fonts (like the one viejo_archivero shows some posts ago), it could be very readable. About the patching, the hooks must be : Código: FDA4+/scHCHPU 08C0 CHPUT(A-character;SAVE ALL) FDA9+/scHDSPC 09E6 Display cursor (no param.) FDAE+/scHERAC 0A33 Errase cursor (no param.) FDB3+/scHDSPF 0B2B DSPFNK std routine(no param.) FDB8+/scHERAF 0B15 ERAFNK std routine(no param.) FDBD HTOTE 0842 TOTEXT std routine FDC2+ HCHGE 10CE CHGET std routine Only guessing...maybe there're some others to patch of course... Título: Re: Interlaced SC1 with 64 columns Publicado por: BiFiMSX en 30 de Junio de 2006, 08:21:49 am and to handle different widths in a screen: H.WIDT (FF84)
if you want to add screen modes (like the Korean MSX'es have): H.SCRE (FFC0) |