samsaga2
|
|
« : 04 de Septiembre de 2011, 04:47:33 pm » |
|
Me estoy haciendo la picha un lio y la verdad es que por más que busco no encuentro información clara. Mi idea es en un line split mostrar la pagina 1 para el marcador. El line split lo tengo resuelto pero lo de cambiar la pagina 1 no me acaba de funcionar. Supongo (porque en ningún sitio lo he podido encontrar) que para cambiar la página se han de cambiar las direcciones base de el pattern generator (r#4), el pattern name (r#2) i el color. Para escoger la página 0 sería algo así como: ;; r#4 pattern generator ld a,0 out (0x99),a ld a,4+0x80 out (0x99),a
;; r#2 patter name ld a,6 ; 0x1800 >> 10 out (0x99),a ld a,2+0x80 out (0x99),a
;; r#3 colour ld a,0 ; 0x2000 >> 14 out (0x99),a ld a,10+0x80 out (0x99),a
y para escoger la pagina 1 (poniendo la base como la dirección 0x4000): ;; r#4 pattern generator ld a,8 ; 0x4000>>11 out (0x99),a ld a,4+0x80 out (0x99),a
;; r#2 pattern name ld a,18 ; 0x4800>>10 out (0x99),a ld a,2+0x80 out (0x99),a
;; r#3 colour ld a,1 ; 0x4000>>14 out (0x99),a ld a,10+0x80 out (0x99),a
Estoy seguro que algo hago mal porque me estoy haciendo un lio con las direcciones y los registros.
|
|
« Última modificación: 04 de Septiembre de 2011, 04:49:16 pm por samsaga2 »
|
En línea
|
|
|
|
MsxKun
|
|
« Respuesta #1 : 04 de Septiembre de 2011, 05:26:46 pm » |
|
Hola No es que lo tenga nada fresco porque hace ya tiempo, pero en el Pengo lo hice asi e igual te da alguna idea. La rutina iba EN LA INTERRUPCION (perdona si el codigo es una marranada xD): ; ----------------------------------------------------------------------------- ; Scroll: Rutina de Scroll con interrupcion de linea
~Scroll: xor a ; scroll a 0 out ($99),a nop ld a,128+23 out ($99),a ld a,16 ; pone marcador, q estara en $4000 out ($99),a nop ld a,128+2 out ($99),a
ld a,$27 ; sprites att en $1000 out ($99),a nop ld a,128+5 out ($99),a
ld a,23 call ~VdpLine ; <--- aqui pone la interrupcion de linea, e igual es lo que te falta... ld a,$3f ; sprites att en $1c00 out ($99),a nop ld a,128+5 out ($99),a
nop | nop | nop | nop | nop | nop ; retardo para evitar en lo posible un parpadeo en lin23
ld a,(@LINEA@) ; posicion scrollada sub a,25 out ($99),a nop ld a,128+23 out ($99),a
ld a,6 ; pone tiles en la direccion habitual out ($99),a nop ld a,128+2 out ($99),a ret
~VdpLine: ld de,$8f93 ld hl,$8201
ld c,$99 out (c),a nop nop out (c),e nop nop out (c),l nop nop out (c),d nop nop
.flag: in a,(c) rrca jr nc,~VdpLine.flag
xor a out (c),a nop nop out (c),d ret
|
|
|
En línea
|
-- She Bops!
|
|
|
samsaga2
|
|
« Respuesta #2 : 08 de Septiembre de 2011, 05:06:12 pm » |
|
No acabo de entenderlo Según entiendo para cambiar a la página 1 en screen 4 tengo que cambiar el: - Pattern generator table de 0000h a 4000h - Pattern name table de 1800h a 5800h - Pattern colors de 2000h a 6000h Los registros son: - Para el pattern generator table: r#4 = ((0x4000>>12)<<2)|0b11 - Para el pattern colors: r#3 = (((0x6000>>12)&1)<<7)|0b1111111 r#10 = 0x6000>>13 - Para el pattern name table: r#2 = 0x1800 >> 9 No veo donde está el fallo y no encuentro info sobre el tema en ninguna web. Nota: En el msx red book dice donde dice pattern name table supongo que es el pattern layout del v9938 programmers guide. El red book no me dice la dirección vram por defecto tuve que mirarla en el v9938. Pero el v9938 no me dice los registros que tengo que tocar... menudo lio cerebral :\
|
|
|
En línea
|
|
|
|
SapphiRe_MSX
Visitante
|
|
« Respuesta #3 : 08 de Septiembre de 2011, 05:07:50 pm » |
|
Nota: En el msx red book dice donde dice pattern name table supongo que es el pattern layout del v9938 programmers guide. El red book no me dice la dirección vram por defecto tuve que mirarla en el v9938. Pero el v9938 no me dice los registros que tengo que tocar... menudo lio cerebral :\ Utiliza PORTAR. Una muy buena fuente de información, te lo aseguro
|
|
|
En línea
|
|
|
|
MsxKun
|
|
« Respuesta #4 : 08 de Septiembre de 2011, 07:25:30 pm » |
|
No acabo de entenderlo Según entiendo para cambiar a la página 1 en screen 4 tengo que cambiar el: - Pattern generator table de 0000h a 4000h - Pattern name table de 1800h a 5800h - Pattern colors de 2000h a 6000h Lo unico que recuerdo y te puedo decir es que yo solo necesitaba cambiar la tabla de nombres (y la de sprites). Patrones usaba los mismos para todo.
|
|
|
En línea
|
-- She Bops!
|
|
|
samsaga2
|
|
« Respuesta #5 : 10 de Septiembre de 2011, 08:01:33 am » |
|
Nota: En el msx red book dice donde dice pattern name table supongo que es el pattern layout del v9938 programmers guide. El red book no me dice la dirección vram por defecto tuve que mirarla en el v9938. Pero el v9938 no me dice los registros que tengo que tocar... menudo lio cerebral :\ Utiliza PORTAR. Una muy buena fuente de información, te lo aseguro Pues ciertamente portar está muchisimo más claro, siempre pensé que el red book sería mejor pero parece que no. Creo que me estoy acercando pero pero aún no sale lo que debería: .bios .page 2 .rom .db "TEST",1Ah .start INIT
INIT: ;; screen 4 ld a,4 call 05fh
di
;; border ld a,5 out (099h),a ld a,7+128 out (099h),a
;; set vram write addr xor a out (099h),a ld a,040h | 01000000b out (099h),a ;; draw garbage ld bc,01800h xor a push af fill: pop af out (0x98),a inc a push af inc a dec bc ld a,b or c jr nz,fill pop af
;; page 1 ld a,16 ; 0x4000>>10 out (0x99),a ld a,128+4 out (0x99),a
ld a,0 ; (0x6000>>5)&255 out (0x99),a ld a,128+3 out (0x99),a
ld a,24 ; 0x6000>>10 out (0x99),a ld a,128+10 out (0x99),a
ld a,44 ; 0x5800>>9 out (0x99),a ld a,128+2 out (0x99),a
ei
halt
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #6 : 12 de Septiembre de 2011, 02:20:34 pm » |
|
Por si a alguien le interesa voy haciendo progresos para intentar comprender como va esto de cambiar de página en un msx. Gracías al código fuente del bluemsx entiendo algo más: vdp->chrTabBase = ((((int)vdp->vdpRegs[2] << 10) & ~((int)(vdp->vdpRegs[25] & 1) << 15)) | ~(-1 << 10)) & vdp->vramMask; vdp->chrGenBase = (((int)vdp->vdpRegs[4] << 11) | ~(-1 << 11)) & vdp->vramMask; vdp->colTabBase = (((int)vdp->vdpRegs[10] << 14) | ((int)vdp->vdpRegs[3] << 6) | ~(-1 << 6)) & vdp->vramMask;
Entonces según mis cutrecalulos tendría que ser algo así como: Pattern generator table = 0000-17ff pgt = r#4 << 11 7 6 5 4 3 2 1 0 ----------------------------------------- R#4 | 0 | 0 | A16| A15| A14| A13| 1 | 1 | ----------------------------------------- A12 A11
Pattern colour table = 2000-37ff pct = r#10 << 14 | r#3 << 6 7 6 5 4 3 2 1 0 ----------------------------------------- R#3 | A13| 1 | 1 | 1 | 1 | 1 | 1 | 1 | ----------------------------------------- A12 A11 A10 A9 A8 A7 A6 7 6 5 4 3 2 1 0 ----------------------------------------- R#10 | 0 | 0 | 0 | 0 | 0 | A16| A15| A14| -----------------------------------------
Pattern name table = 1800-01aff pnt = r#2 << 10 7 6 5 4 3 2 1 0 ----------------------------------------- R#2 | 0 | A16| A15| A14| A13| A12| A11| A10| -----------------------------------------
Entonces los registros tendrían que ser: r#4 = 0x0b r#3 = 0x9f r#10 = 0x01 r#2 = 0x20 Entonces tengo que las nuevas direcciones de las tablas son: pgt = 0x0b << 11 = 0x5800 pct = 0x01 << 14 | 0X9F << 6 = 0X67C0 pnt = 0x20 << 10 = 0x8000 Ahora veo algo pero no sé si es correcto. Menudos dolores de cabeza me está dando hacer algo tan aparentemente sencillo como cambiar de página.
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #7 : 12 de Septiembre de 2011, 04:29:30 pm » |
|
Parece que chuta. Al final las formulas para establecer las direcciones de las tablas en screen 4 son: r#4 = pgt_base >> 11 | 0b11 r#3 = (((pct_base >> 13) & 1) << 7) | 127 r#10 = pct_base >> 14 r#2 = pnt_base >> 10
Con lo que si queremos que: pgt base = 0x4000 pct base = 0x6000 pnt base = 0x5800 Nos quedará: r#4 = 0x0b r#3 = 0xff r#10 = 0x01 r#2 = 0x16
|
|
|
En línea
|
|
|
|
manolito74
|
|
« Respuesta #8 : 14 de Septiembre de 2011, 03:14:52 am » |
|
¿Qué es "Portar"....?
|
|
|
En línea
|
|
|
|
theNestruo
|
|
« Respuesta #9 : 14 de Septiembre de 2011, 07:18:50 am » |
|
¿Qué es "Portar"....? ¡Ésta me la sé! -> http://nocash.emubase.de/portar.htm
|
|
|
En línea
|
theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
|
|
|
SapphiRe_MSX
Visitante
|
|
« Respuesta #10 : 14 de Septiembre de 2011, 11:12:40 am » |
|
Cooooorrectoooo, ¡premio para el caballero! Puedes elegir entre: -Una botella de lejía sin casco y vacía... ...o -Un bocata de chorizo añejo, ¡sin pan ni carne ni pellejo!
|
|
|
En línea
|
|
|
|
theNestruo
|
|
« Respuesta #11 : 15 de Septiembre de 2011, 07:40:43 am » |
|
Cooooorrectoooo, ¡premio para el caballero! Puedes elegir entre: -Una botella de lejía sin casco y vacía... ...o -Un bocata de chorizo añejo, ¡sin pan ni carne ni pellejo! ...o -Un cartucho del Eggerland Mystery II con caja y manual Elijo el cartucho
|
|
|
En línea
|
theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
|
|
|
|