Karoshi MSX Community
06 de Julio de 2021, 12:22:50 am *
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]
  Imprimir  
Autor Tema: cambios de pagina en screen 4  (Leído 5286 veces)
0 Usuarios y 1 Visitante están viendo este tema.
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« : 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:

Código:

;; 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):

Código:
;; 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
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« 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):

Código:

; -----------------------------------------------------------------------------
; 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

--

Cindy Lauper She Bops!
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« Respuesta #2 : 08 de Septiembre de 2011, 05:06:12 pm »

No acabo de entenderlo   Huh

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 Cheesy
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #4 : 08 de Septiembre de 2011, 07:25:30 pm »

No acabo de entenderlo   Huh

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

--

Cindy Lauper She Bops!
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« 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 Cheesy


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:

Código:
.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
Karoshi Fan
**
Mensajes: 76


Email
« 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:

Código:
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:
Código:
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
Karoshi Fan
**
Mensajes: 76


Email
« 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:

Código:
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
Karoshi Maniac
****
Mensajes: 260


« Respuesta #8 : 14 de Septiembre de 2011, 03:14:52 am »

¿Qué es "Portar"....?  Huh
En línea
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #9 : 14 de Septiembre de 2011, 07:18:50 am »

¿Qué es "Portar"....?  Huh
¡Ésta me la sé! Grin -> 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!

Grin Grin Grin Grin Grin
En línea
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« 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 Grin
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
Páginas: [1]
  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!