Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: samsaga2 en 04 de Septiembre de 2011, 04:47:33 pm



Título: cambios de pagina en screen 4
Publicado por: samsaga2 en 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.


Título: Re: cambios de pagina en screen 4
Publicado por: MsxKun en 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



Título: Re: cambios de pagina en screen 4
Publicado por: samsaga2 en 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 :\



Título: Re: cambios de pagina en screen 4
Publicado por: SapphiRe_MSX en 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 :D


Título: Re: cambios de pagina en screen 4
Publicado por: MsxKun en 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.


Título: Re: cambios de pagina en screen 4
Publicado por: samsaga2 en 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 :D


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


Título: Re: cambios de pagina en screen 4
Publicado por: samsaga2 en 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.


Título: Re: cambios de pagina en screen 4
Publicado por: samsaga2 en 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


Título: Re: cambios de pagina en screen 4
Publicado por: manolito74 en 14 de Septiembre de 2011, 03:14:52 am
¿Qué es "Portar"....?  ???


Título: Re: cambios de pagina en screen 4
Publicado por: theNestruo en 14 de Septiembre de 2011, 07:18:50 am
¿Qué es "Portar"....?  ???
¡Ésta me la sé! ;D -> http://nocash.emubase.de/portar.htm


Título: Re: cambios de pagina en screen 4
Publicado por: SapphiRe_MSX en 14 de Septiembre de 2011, 11:12:40 am
¿Qué es "Portar"....?  ???
¡Ésta me la sé! ;D -> http://nocash.emubase.de/portar.htm

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!

;D ;D ;D ;D ;D


Título: Re: cambios de pagina en screen 4
Publicado por: theNestruo en 15 de Septiembre de 2011, 07:40:43 am
¿Qué es "Portar"....?  ???
¡Ésta me la sé! ;D -> http://nocash.emubase.de/portar.htm
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 ;D