domingo, 28 de outubro de 2007

Paddle do NES no Arkanoid do MSX?

Estava investigando o código desassemblado do Arkanoid1 para procurar uma maneira de fazer um "patch" para colocar um paddle, quando me deparei com um trecho de código bem interessante, que sugere que o MSX possa utilizar o mesmo controlador de Arkanoid do NES, mudando apenas o conector.
O pino 6 é utilizado como sinal de clock, o pino 8 como sinal de select/LOAD e os dados vêm pelo sinal UP do joystick.

O trecho de código abaixo ilustra o protocolo.
...
42fc 3e0e      ld      a,0eh
42fe d3a0      out     (0a0h),a
4300 dba2      in      a,(0a2h)
4302 67        ld      h,a
4303 0608      ld      b,08h       ; 8 bits
4305 0e00      ld      c,00h
4307 1e00      ld      e,00h
4309 3e0f      ld      a,0fh
430b d3a0      out     (0a0h),a
430d 3e1e      ld      a,1eh
430f d3a1      out     (0a1h),a    ; clock low
4311 3e1f      ld      a,1fh
4313 d3a1      out     (0a1h),a    ; clock high
4315 3e0e      ld      a,0eh
4317 d3a0      out     (0a0h),a
4319 dba2      in      a,(0a2h)
431b 5f        ld      e,a
431c cb3f      srl     a           ; lê bit
431e cb11      rl      c           ; armazena em C
4320 10e7      djnz    4309h       ; próximo bit
4322 79        ld      a,c
4323 32c1e0    ld      (0e0c1h),a  ; armazena byte recebido 
4326 7c        ld      a,h
4327 e601      and     01h
4329 32c2e0    ld      (0e0c2h),a
432c 3e0f      ld      a,0fh
432e d3a0      out     (0a0h),a
4330 3e1f      ld      a,1fh
4332 d3a1      out     (0a1h),a    ; pino8 high
4334 3e0f      ld      a,0fh
4336 d3a1      out     (0a1h),a    ; pino8 low
4338 3e1f      ld      a,1fh
433a d3a1      out     (0a1h),a    ; pino8 high
433c 3e0e      ld      a,0eh
433e d3a0      out     (0a0h),a
4340 dba2      in      a,(0a2h)
4342 5f        ld      e,a
4343 21c4e0    ld      hl,0e0c4h
4346 7e        ld      a,(hl)
4347 73        ld      (hl),e
4348 e60f      and     0fh
434a a3        and     e
434b ab        xor     e
434c 32c5e0    ld      (0e0c5h),a
434f 47        ld      b,a
4350 3a0be0    ld      a,(0e00bh)
4353 b7        or      a
4354 c0        ret     nz

4355 cb48      bit     1,b
4357 c8        ret     z

4358 3a0ae0    ld      a,(0e00ah)
435b b7        or      a
435c ca7043    jp      z,4370h
435f af        xor     a
4360 320ae0    ld      (0e00ah),a
4363 213ce5    ld      hl,0e53ch
4366 113de5    ld      de,0e53dh
4369 3600      ld      (hl),00h
436b 010700    ld      bc,0007h
436e edb0      ldir 
4370 3e01      ld      a,01h
4372 320ce0    ld      (0e00ch),a
4375 c9        ret  
...

Nenhum comentário: