Welcome to my personal webpage. | home
Matrix code | Matrix Schematics
Matrix code
*EE 324 LAB 3B
*NIMA MOSHTAGH & RYAN SWANSON
*SEC 6 GROUP #20
*DATE: 3/19/02
*Table Data Lookup
ORG $0000
TEMP0 RMB $1
TEMP1 RMB $1
KEYDAT1 RMB $1
KEYDAT2 RMB $1
TOGGLE RMB $1
RESULT RMB $1
TABLE EQU *
FCB $A ;A
FCB $3 ;3
FCB $2 ;2
FCB $1 ;1
FCB $B ;B
FCB $6 ;6
FCB $5 ;5
FCB $4 ;4
FCB $C ;C
FCB $9 ;9
FCB $8 ;8
FCB $7 ;7
FCB $D ;D
FCB $E ;#
FCB $0 ;0
FCB $F ;*
TABLE2 EQU $B600
PORTB EQU $1004
PORTC EQU $1003
COLCT RMB $1 ;RESERVE COLUMN COUNTER
************INITIALIZE******************************
ORG $0100
LDAA #$80
STAA $1026 ;SET PA7 TO OUTPUT
LDAA #$FF
STAA $1007 ;MAKE PORTC AN OUTPUT
LDAA #$FF
STAA COLCT ;INITIALIZE COLUMN COUNTER
CLR TOGGLE ;INITIALIZE FIRST ENTRY
CLR TEMP0
CLR TEMP1
**************************************************************
**********************MAIN PROGRAM****************************
**************************************************************
START EQU *
JSR CHGCOL ;JUMP TO CHANGE COLUMN
JSR READKEY ;JUMP TO READ KEY
LDAA KEYDAT1 ;CHECK IF KEY IS PRESSED
CMPA #$FF
BNE PRESSED ;IF A IS NOT = $FF, THEN A KEY IS PRESSED
JSR GETFORM ;OTHERWISE DISPLAY THE OLD SHAPE
BRA START ;START OVER AGAIN
PRESSED STAA KEYDAT2 ;STORE VALUE PRESSED
JSR BLDIDX ;IF KEY IS PRESSED BUILD INDEX AND STORE DATA
JSR W5MS ;JUMP TO 5 MS DELAY
READ JSR READKEY
LDAA KEYDAT1
CMPA KEYDAT2 ;COMPARE DATA TO PREVIOUS READ
BEQ READ ;READ AGAIN IF SAME DATA
JSR W5MS ;JUMP TO 5 MS DELAY
LDAA TOGGLE ;CHECK WHICH NUMBER
BRSET TOGGLE #$01 SAVE2
SAVE1 LDAB RESULT ;GET RESULT
STAB TEMP0 ;STORE FIRST NUMBER
COMA
STAA TOGGLE ;TOGGLE TOGGLE
TBA ;PUT ASCII CHARACTER INTO A
BRA START ;BRANCH NEXT
SAVE2 LDAB RESULT ;GET RESULT
STAB TEMP1 ;STORE FIRST NUMBER
CLRA
STAA TOGGLE ;TOGGLE TOGGLE
BRA START ;RETURN TO START
****************************************************************
***********************SUB ROUTINES*****************************
****************************************************************
************************READKEY********************************
READKEY EQU *
LDAB #$10 ;LOAD INITIAL COLUM
LDAA COLCT ;LOAD COLUMN COUNTER
SHIFT CMPA #$0 ;SEE IF SHIFT IS NEEDED
BEQ ONCOL ;IF SHIFT DONE, SET COLUMN HI
LSLB ;SHIFT B
DECA ;DECREMENT A
BRA SHIFT ;BRANCH BACK TO SHIFT
ONCOL STAB $1000 ;SET COLUMN HI IN PORT A
LDY #$100A
LDAA #$00
BRSET 0,Y $10 ROW0
BRSET 0,Y $20 ROW1
BRSET 0,Y $40 ROW2
BRSET 0,Y $80 ROW3
LDAA #$FF
STAA KEYDAT1 ;NO KEY PUSHED
BRA EXIT2
ROW3 INCA
ROW2 INCA
ROW1 INCA
ROW0 STAA KEYDAT1
EXIT2 RTS ;RETURN SUB ROUTINE
**********************BLDIDX**********************************
BLDIDX EQU *
LDX #TABLE ;LOAD X WITH TABLE START
LDAA KEYDAT1 ;LOAD A WITH ROW
LDAB #$4 ;LOAD B WITH 4
MUL ;MULTIPLY A*B
ADDB COLCT ;ADD COLUMN COUNT TO B
ABX ;ADD B TO X FOR LOOKUP
LDAA 0,X ;GET ASCII
STAA RESULT ;STORE RESULT
RTS ;RETURN
***********************GETFORM*****************************
GETFORM EQU *
JSR COMBINE
JSR FINDIT
LDAA RESULT
BEQ BLANKIT ;IF RESULT = 0, THEN SHOW BLANK DISPLAY
BRA SHOW1 ;OTHERWISE SHOW THE ASCII VALUE.
BLANKIT LDAA #$FF
STAA PORTC ;SET ALL COLUMNS HIGH, THEREFORE ALL LEDS ARE OFF,
BRA EXIT5 ;AND THEN EXIT.
SHOW1 JSR SHOWIT ;DISPLAY THE SHAPE
EXIT5 RTS
************************ COMBINE *******************
COMBINE EQU *
LDAA TEMP0
LSLA ;LOGICAL SHIFT A (TEMP0)4 TIMES
LSLA
LSLA
LSLA
ADDA TEMP1 ;TEMP1 IS HIGHER NIBBLE AND TEMP0 IS LOWER NIBBLE
CMPA #$30 ;LOWER LIMIT
BLO BLANK
CMPA #$5A ;HIGHER LIMIT
BHI BLANK
BRA SAVE
BLANK CLRA
SAVE STAA RESULT ;RESULT CONTAIN THE ASCII CODE BETWEEN $30 & $5A OR $00
RTS
************************** FINDIT ***************************
FINDIT EQU *
LDAB #$08
LDAA RESULT
BEQ EXIT3 ;IF RESULT = 0(OUT OF RANGE ENTRY), GET OUT
LDX #TABLE2 ;IN NOT, THEN BUILD AN INDEX
SUBA #$30
MUL
ABX ;MAKE THE INDEX TO THE TABLE
CMPA #$00
BEQ EXIT3
LDAB #$FF ;SINCE THE TABLE IS TOO LONG,
ABX ;ADD THE OFFSET TO X
INX ;GET THE NEXT SET OF DATA IN THE TABLE
EXIT3 RTS
************************* SHOWIT ****************************
SHOWIT EQU *
SEC ;PUT 1 IN THE CARRY TO GET 1 IN THE ROTATIONS
LDAA #$FE ; %11111110 IN ORDER TO SET THE Nth COLUMN LOW
TOP STAA PORTC
LDAB 0,X ;GET THE DATA
STAB PORTB ;Nth COLUMN IS ON
JSR W5MS
ROLA ; ROTATE A TO THE LEFT TO GET THE NEXT COLUMN
BCC EXIT4 ; IF CARRY IS = 0, THEN ALL THE COLUMNS ARE ON
INX ;IF NOT, GET THE NEXT SET OF DATA FOR NEXT COLUMN
BRA TOP ; AND GO TO TOP TO SHOW THE NEXT COLUMN
EXIT4 RTS
**********************W5MS***********************************
org $0018
W5MS EQU *
PSHX
LDX #$682 ;LOAD X WITH 682 HEX
LOOP DEX ;DECREMENT
BNE LOOP ;KEEP LOOPING UNTIL 0
PULX
RTS ;RETURN
*************************CHGCOL********************************
CHGCOL EQU *
LDAA #$03 ;LOAD 3 INTO A
CMPA COLCT ;CHECK IF COLUMN COUNT UP TO 3
BEQ RESETCC ;RESET COLUM COUNTER
INC COLCT ;INCREMENT COLUMN COUNTER
BRA EXIT ;BRANCH TO EXIT
RESETCC CLR COLCT ;CLEAR COLUMN COUNTER
EXIT RTS ;RETURN FROM SUB ROUTINE
|
||