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

quarta-feira, 3 de outubro de 2007

Copy 3

Usando um compilador chamado "pasmo" consegui compilar o código de um copiador para fita cassete chamado copy 3, que "imitava" o estilo do PCTOOLS.

Este copiador foi o primeiro programa "sério" que fiz para o MSX em Assembly. Um detalhe interssante é que os caracteres em fundo inverso eram simulados com caracteres redefinidos.

Seguem abaixo 2 screenshots, rodando no BlueMSX: