Notes:

FMDetection:
    ld a,($c000)
    or $04             ; Disable I/O chip
    out ($3E),a
    ld bc $0700        ; Counter (7 -> b), plus 0 -> c
-:  ld a,b
    and %00000001      ; Mask to bit 0 only
    out ($f2),a        ; Output to the audio control port
    ld e,a
    in a,($f2)         ; Read back
    and %00000111      ; Mask to bits 0-2 only
    cp e               ; Check low 3 bits are the same as what was written
    jr nz,+
    inc c              ; c = # of times the test was passed
+:  djnz -
    ld a,c
    cp 7               ; Check test was passed 7 times out of 7
    jr z,+
    xor a              ; If not, result is 0
+:  and 1              ; If so, result is 1
    out ($f2),a        ; Output result to audio control port
    ld (HasFM),a       ; Store result in HasFM
    ld a,($c000)
    out ($3e),a        ; Turn I/O chip back on
    ret



Return to top
0.119s