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