sexta-feira, 14 de junho de 2019

Atualizando um post antigo sobre o Paddle Vaus

Quando analisei há um tempo atrás a rotina de leitura do Paddle Vaus pelo jogo Arkanoid deixei passar batido um detalhe: O bit mais significativo da leitura já está na entrada "up" assim que a termina a conversão/contagem do circuito do paddle

Os 9 bits são lidos da seguinte maneira:

  • Lê registro 14 do PSG e salva em H

  • Repete 8 vezes:
    • gera um pulso de clock para deslocar 1 bit
    • lê o bit e salva em C
  • Salva o conteúdo de C para o endereço 0xEOC1
  • Isola o bit 0 de H, que é o bit mais significativo da leitura e salva em 0xE0C2
...
42fc 3e0e      ld      a,0eh       ; seleciona registro 14 do PSG
42fe d3a0      out     (0a0h),a
4300 dba2      in      a,(0a2h)    ; realiza primeira leitura
4302 67        ld      h,a         ; bit mais significativo já esta na saida
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 bits menos significativos
4326 7c        ld      a,h         ; pega primeira leitura
4327 e601      and     01h         ; isola bit 0 (up)
4329 32c2e0    ld      (0e0c2h),a  ; armazena bit mais significativo
 

432c 3e0f      ld      a,0fh       ; gera um pulso para iniciar
432e d3a0      out     (0a0h),a    ; a próxima conversão/contagem
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         ; Testa botão de tiro
4357 c8        ret     z           ; bit 1 -> DOWN do reg 14

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

...



 


quinta-feira, 13 de junho de 2019

Diferentes versões de Arkanoid

Eu montei um clone do controle de Arkanoid e ao testar notei que o jogo não reconhecia o controle. Achei estranho pois me lembrava de ter visto o código e até "desassemblado" um trecho de uma ROM que gerava os sinais para ler o controle da Taito.
Clone do Paddle Arkanoid da TAITO

Pesquisando em alguns sites achei uma versão cujo binário era realmente era diferente, e que funcionou com o Paddle que montei.

Arkanoid 1 (1986) (Taito) (J).rom

Comparando com mais detalhes as duas versões dá pra ver que a ROM em que o Paddle não funciona chama apenas a rotina de leitura de teclado (0x425b - CD 0141H) ao passo em que a outra ROM chama uma função no endereço 0x42FD que é justamente responsável por gerar os sinais e ler os dados vindos do paddle (vide artigo anterior)



Além disso existe uma diferença "visual" entre as ROMS. A que lê o Paddle coloca na tela a mensagem TAITO CORPORATION. Já a ROM que não lê o paddle escreve TAITO IMAGINE LTD.










A última difereça é o último byte do arquivo, que em uma versão tem o valor 0x00 e na outra 0x3F

sábado, 8 de junho de 2019

Diagrama redesenhado do Modulador de RF do Hotbit

Redesenhei o diagrama do modulador de RF do Hotbit. Aproveitei o corrigi o diagrama da placa principal pois a alimentação que vai para o conector do modulador de RF é de 12Volts em vez de 5 Volts.

Arquivos disponíveis no github