MULTIPLEXER

;*****************************************************************************
;* MODULE-MUX-V00.ASM
;*****************************************************************************
;* NAME ...................: MUX
;* VERSION ................: V00
;* PURPOSE ................: CONTROL ANALOG MULTIPLEXOR SELECT LINES
;* PROCEDURE ..............: SET/RESET 2 BITS IN PIA0
;* NOTES ..................: 
;* COLOR COMPUTER 3 SERVICE MANUAL PP 9, 
;* FF01:3 SEL 1 LSB OF THE TWO ANALOG MUX SELECT LINES
;* FF03:3 SEL 2 MSB OF THE TWO ANALOG MUX SELECT LINES
;* SNDEN SEL2 SEL1 SELECTS
;* 0     X    X    1-BIT AUDIO
;* 1     0    0    6-BIT DAC   JOYSTICK 0
;* 1     0    1    CASSETTE    JOYSTICK 1
;* 1     1    0    CARTRIDGE   JOYSTICK 2
;* 1     1    1    NO SOUND    JOYSTICK 3
;*****************************************************************************
PIA0AD:     equ    $FF00      ; PIA 0 PORT A DATA
PIA0AC:     equ    $FF01      ; PIA 0 PORT A CONTROL
PIA0BD:     equ    $FF02      ; PIA 0 PORT B DATA
PIA0BC:     equ    $FF03      ; PIA 0 PORT B CONTROL

MUXSEL:     rmb   1           ; MUX SELECT INPUT

MUX:        pshs  A,B,X,CC    ; SAVE REGISTERS BEFORE WE MESS WITH THEM
            lda   PIA0AC      ; GET CURRENT STATE OF PIA0 PORT A CONTROL
            ldb   PIA0BC      ; GET CURRENT STATE OF PIA0 PORT B CONTROL

            ldx   MUXSEL      ; ENTER WITH X FOR MUX CHOICE
            cmpx  #0          ; MUXSEL equal 0?
            beq   SELDAC      ; 6-BIT DAC SOUND / JOYSTICK AXIS 0
            cmpx  #1          ; MUXSEL equal 1?
            beq   SELCASS     ; CASSETTE SOUND / JOYSTICK AXIS 1
            cmpx  #2          ; MUXSEL equal 2?
            beq   SELCART     ; CART SOUND / JOYSTICK AXIS 2
            cmpx  #3          ; MUXSEL equal 3?
            beq   SELNONE     ; NO SOUND / JOYSTICK AXIS 3
            puls  A,B,X,CC    ; MUXSEL EQUAL SOMETHING ELSE? JUST RETURN

SELDAC:     anda  #%11111011  ; SEL LSB = 0
            andb  #%11111011  ; SEL MSB = 0
            bra   ENDMUX      ; GO SET THEM

SELCASS:    ora   #%00000100  ; SEL LSB = 1
            andb  #%11111011  ; SEL MSB = 0
            bra   ENDMUX      ; GO SET THEM

SELCART:    anda  #%11111011  ; SEL LSB = 0
            orb   #%00000100  ; SEL MSB = 1
            bra   ENDMUX      ; GO SET THEM

SELNONE:    ora   #%00000100  ; SEL LSB = 1
            orb   #%00000100  ; SEL MSB = 1
                              ; FALL THROUGH TO
ENDMUX:     sta   PIA0AC      ; SAVE OUT MODIFIED SEL LSB
            stb   PIA0BC      ; SAVE OUT MODIFIED SEL MSB
            puls  A,B,X,CC,PC ; AND DONE

;*****************************************************************************
;* END OF MODULE-MUX-V00.ASM
;*****************************************************************************

RTS

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies