PORTE   EQU     $0008
PORTS   EQU     $00D6
PORTCAN EQU     $00FE
DDRE    EQU     $0009
DDRS    EQU     $00D7
DDRCAN  EQU     $00FF

        ORG  $080A

;0801 - ALL 1s
;0802 - ALL 0s
;0803 - MAIN LETTER
;0804 - SECONDARY LETTER
;0805 - FIRST SET
;0806 - SECOND SET
;0807 - THIRD SET
;0808 - COUNTER FROM 0 TO 7
;0809 - N/A FOR BIT 7 FOR CAN

MAIN
        JSR  SETUP
        JSR  CRLF
        JSR  ES
        JSR  ECAN
        JMP  FINALCHECK

SETUP
        LDAA #%00000000
        STAA DDRS
        STAA DDRCAN
        STAA $0802
        STAA $0805
        STAA $0806
        STAA $0807
        STAA $0809
        LDAA #%11111100
        STAA DDRE
        STAA $0801
        RTS

ES
        LDAA #%01000101
        STAA $0803
        LDAA #%01010011
        STAA $0804
        LDAA $0801
        STAA PORTE
        LDAB PORTS
        STAB $0805
        JSR  EXECUTION
        LDAA $0805
        JMP  CHECK

ECAN
        LDAA #%01000011
        STAA $0804
        LDAA $0801
        STAA PORTE
        LDAB PORTCAN
        STAB $0806
        JSR  EXECUTION
        LDAA $0801
        STAA $0809
        LDAA $0806
        JMP  CHECK

CHECK
        CMPA $0801
        BEQ  ALLONES
        LDAA $0809
        CMPA $0801
        BEQ  CHECKCAN
        JSR  ERROR
        JSR  CRLF
        RTS

CHECKCAN
        LDAA $0806
        CMPA #%01111100
        BEQ  ALLONES
        JSR  ERROR
        JSR  CRLF
        RTS

ALLONES
        JSR OK
        JSR CRLF
        RTS

EXECUTION
        JSR  PORT
        LDAA $0803
        JSR  TRANSMIT
        JSR  TO
        LDAA $0804
        JSR  TRANSMIT
        JSR  EQUAL
        RTS

CRLF
        LDAA #%00001101
        JSR  TRANSMIT
        LDAA #%00001010
        JSR  TRANSMIT
        RTS

TRANSMIT
        LDAB $00C4
        LDAB $00C4
        STAA $00C7
COMPLETE
        LDAA $00C4
        ANDA #$40
        BEQ  COMPLETE
        RTS

EQUAL
        JSR  SPACE
        LDAA #%00111101
        JSR  TRANSMIT
        JSR  SPACE
        RTS

OK
        LDAA #%01001111
        JSR  TRANSMIT
        LDAA #%01001011
        JSR  TRANSMIT
        RTS

ERROR
        LDAA #%01000010
        JSR  TRANSMIT
        LDAA #%01000001
        JSR  TRANSMIT
        LDAA #%01000100
        JSR  TRANSMIT
        RTS

PORT
        LDAA #%01010000
        JSR  TRANSMIT
        LDAA #%01101111
        JSR  TRANSMIT
        LDAA #%01110010
        JSR  TRANSMIT
        LDAA #%01110100
        JSR  TRANSMIT
        JSR  SPACE
        RTS

SPACE
        LDAA #%00100000
        JSR  TRANSMIT
        RTS

TO
        JSR  SPACE
        LDAA #%01110100
        JSR  TRANSMIT
        LDAA #%01101111
        JSR  TRANSMIT
        JSR  SPACE
        RTS

BIT
        LDAA #%01000010
        JSR  TRANSMIT
        LDAA #%01101001
        JSR  TRANSMIT
        LDAA #%01110100
        JSR  TRANSMIT
        JSR  SPACE
        RTS

FINALCHECK
        LDAA $0805
        ORAA $0806
        ORAA $0807
        STAA $0807
        CMPA $0801
        LBEQ EQUALONE
        LDAA #%00110000
        STAA $0808
        JSR  CRLF
ZEROONE
        JSR  PRINTBIT
        JSR  NA
        LDAA $0808
        INCA
        STAA $0808
        CMPA #%00110010
        BLO  ZEROONE
        LDAB $0807
        RORB
        RORB
        STAB $0807
CONTINUECHECK
        JSR  PRINTBIT
	LDAA $0808
        INCA
        STAA $0808
        LDAB $0807
        ANDB #%00000001
        BNE  PRINTOK
        JSR  ERROR
        JSR  SPACE
        JSR  SPACE
CONTINUE
        LDAA $0808
        LDAB $0807
        RORB
        STAB $0807
        CMPA #%00111000
        BEQ  LINE
        CMPA #%00110100
        BEQ  NEWLINE
        JMP  CONTINUECHECK

PRINTBIT
	JSR  BIT
        LDAA $0808
        JSR  TRANSMIT
        JSR  EQUAL
	RTS

PRINTOK
        JSR  OK
        JSR  SPACE
        JSR  SPACE
        JSR  SPACE
        JMP  CONTINUE

NEWLINE
        JSR CRLF
        JMP CONTINUECHECK

NA
        LDAA #%01001110
        JSR  TRANSMIT
        LDAA #%00101111
        JSR  TRANSMIT
        LDAA #%01000001
        JSR  TRANSMIT
        JSR  SPACE
        JSR  SPACE
        RTS

EQUALONE
        JSR  CRLF
        JSR  PORT
        LDAA #%01000101 ;"E"
        JSR  TRANSMIT
        JSR  EQUAL
        JSR  OK
        JSR  CRLF
        JSR  CRLF
        JMP  DONE

LINE
        JSR  CRLF

DONE
        JMP  DONE