


       NAM HEXCAL
*      WRITTEN BY DAVID HELD
*      ENTER PROGRAM: 0000G
*       P - PLUS
*       M - MINUS
*       E - EQUALS
*       R - RADIX CHANGE
       SPC 1
DISNMI EQU $E084
KEYCL  EQU $E12F
DLY20  EQU $E0DD
KEYCL1 EQU $E13A
KEYTBL EQU $E3DC
DIGTBL EQU $E3CA
DISREG EQU $8020
SCNREG EQU $8022
       SPC 1
       ORG $0000
ENTER  BRA START
DBUF   FCB $11,$11,$11,$11,$11,$11 DISPLAY BUFFER
FDFLG  FCB $01 FIRST DIGIT FLAG
NXOP   FCB 0 NEXT OPERATOR
NNXOP  FCB 0 NEXT NEXT OP
OPRND  FDB 0 OPERAND
SUM    FDB 0 SUM
RADIXW FCB 0 RADIX (WORD)
RADIXB FCB $0A RADIX (BYTE)
TEMP   FDB 0
DIGCTR FCB 0 DIGIT COUNTER
TSUM   FDB 0 TEMP SUM
       SPC 1
START  JSR DISNMI DISABLE NMI
S10    JSR DBOUT OUTPUT TO LED'S
       JSR KEYSCN CK FOR KEYPRESSED
       TSTB
       BLT S10 IF NOT,GO BACK
       CMPB #$10 NUMERIC?
       BGE S20
       BSR NUMKEY
       BRA S10
       SPC 1
S20    CMPB #$16 R?
       BNE S30
       BSR RKEY
       BRA S10
       SPC 1
S30    BSR PMEKEY MUST BE P,M,OR E
       BRA S10
       SPC 1
NUMKEY TST FDFLG 1ST DIGIT?
       BEQ N20
       LDX #$1111 CLEAR DISPLAY
       STX DBUF
       STX DBUF+2
       CLR FDFLG
N20    LDX #DBUF
N30    LDAA 1,X
       STAA 0,X
       INX
       CPX #DBUF+3
       BNE N30
       STAB 0,X INSERT TYPED #
       RTS
       SPC 1
RKEY   LDAA NXOP NEXT OP = E?
       CMPA #$15
       BNE R50 IF NOT,EXIT
       STAA FDFLG
       JSR TOOP
       LDAA RADIXB CHANGE RADIX
       EORA #$1A
       STAA RADIXB
       LDX OPRND MOVE OPERAND
       STX SUM
       JSR TODISP
R50    RTS
       SPC 1
PMEKEY STAB NNXOP
       STAB FDFLG
       BSR TOOP
       LDAB SUM+1
       LDAA SUM
       PSHA
       LDAA NXOP
       CMPA #$10 P?
       BNE P20
       PULA
       ADDB OPRND+1
       ADCA OPRND
       BRA P40
       SPC 1
P20    CMPA #$14 M?
       BNE P30
       PULA
       SUBB OPRND+1
       SBCA OPRND
       BRA P40
       SPC 1
P30    PULA MUST BE E
       LDAA OPRND
       LDAB OPRND+1
P40    STAA SUM
       STAB SUM+1
       JSR TODISP DISPLAY
       LDAA NNXOP
       STAA NXOP
       RTS
       SPC 1
TOOP   LDX #0
       STX OPRND
       LDX #DBUF
T10    LDAA 0,X BLANK?
       CMPA #$11
       BNE T30
       BSR NXTX NEXT X
       BRA T10
       SPC 1
T30    STX TEMP
       LDX RADIXW
       CLRA
       CLRB
T35    ADDB OPRND+1
       ADCA OPRND
       DEX
       BNE T35
       LDX TEMP
       ADDB 0,X
       ADCA #0
       STAA OPRND
       STAB OPRND+1
       BSR NXTX NEXT X
       BRA T30
       SPC 1
NXTX   INX
       CPX #DBUF+4
       BNE NX40
       INS
       INS
NX40   RTS
       SPC 1
TODISP STS TEMP
       LDX SUM
       STX TSUM
       LDS #DBUF+5
       LDAA #6
       LDAB RADIXB
       CMPB #$10
       BEQ TD10
       CLRA
TD10   PSHA SET 0 OR 6
       LDAA #1
       PSHA
       LDAA #$11
       PSHA
       PSHA
       PSHA
       PSHA
       LDS #DBUF+3
       LDAA #4
       STAA DIGCTR
       CMPB #$10 DECIMAL?
       BEQ TD30
       TST SUM
       BGE TD30
       NEG SUM+1
       BCS TD20
       NEG SUM
       BRA TD30
       SPC 1
TD20   COM SUM
TD30   LDAA SUM
       LDAB SUM+1
       LDX #0
       BRA TD40
       SPC 1
TD35   SUBB RADIXB
       SBCA #0
       INX
TD40   TSTA
       BNE TD35
       CMPB RADIXB
       BCC TD35
       PSHB
       STX SUM
       BEQ TD50
       DEC DIGCTR
       BNE TD30
       LDX #$0E0E OVERFLOW
       STX DBUF+4
TD50   LDS TEMP
       LDX TSUM
       STX SUM
       RTS
       SPC 1
KEYSCN JSR KEYCL
       BEQ K50
       JSR DLY20
       LDX #DISREG
       LDAA #1
       STAA 2,X
KEYDC1 JSR KEYCL1
       BNE KEYDC2
       LDAA 2,X
       CMPA #$20
       BEQ K50
       ASL 2,X
       BRA KEYDC1
       SPC 1
KEYDC2 CLRB
       LDX #KEYTBL
KEYDC3 CMPA 0,X
       BEQ KEYDC4
       CPX #KEYTBL+24
       BEQ K50
       INX
       INCB
       BRA KEYDC3
       SPC 1
KEYDC4 JSR KEYCL
       BNE KEYDC4
       JSR DLY20
       RTS
       SPC 1
K50    LDAB #$FF
       RTS
       SPC 1
DBOUT  LDAA #$20
       STAA SCNREG
       STS TEMP
       LDS #DBUF-1
       LDX #DIGTBL
D10    PULA
       STAA D11+1
D11    LDAA 0,X
       STAA DISREG
       CLRA
D20    DECA
       BNE D20
       LSR SCNREG
       BCC D10
       LDS TEMP
       RTS
       END
