COUNTER KEYBOARD ANOTHER TRAP FOR THOSE USED TO DIFFERENT juPs IS THE DECIMAL FLAG. ADDR HEX CODE LABEL INSTRUCTION COMMENTS INSTEAD OF A SINGLE "DECIMAL ADJUST" INSTRUCTION TO ADJUST THE RESULT OF BINARY ARITHMETIC ON B.C.D. NUMBERS TO B.C.D. THERE ARE TWO INSTRUCTIONS - START OF 001C - LOOK FOR KEY - CHECK IF CONTROL KEY CARRY SET IF SO BYTES: 1 SED F8 "SET DECIMAL MODE" 1 CLD D8 "CLEAR DECIMAL MODE" WHICH INSTRUCT THE PROCESSOR TO DO AUTOMATICALLY (OR NOT DO) THE ADJUSTMENT AFTER ARITHMETIC OPERATIONS.
THIS RESULTS IN SHORTER, 001D 0020 20 90 0C 0A FE DISP JSR DISPLAY BCCCHANGE 0022 0024 0026 0028 002A 002C 002E 0030 0032 0035 0037 0039 003B 003E 00N 0041 0043 0045 0048 004B 004D 004F 0051 0053 0056 C9 F0 C9 07 1F 06 CMP # ' 0 7 BEQ DOWN CMP# 06 BEQ UP BNE DISP CMP# 00 STA COUNT BEQ DISP ^ JSR INCR I DEC COUNT > BPLMORE BMI DISP ) JSR INCR > JSR ZOOM F0 D0 C9 85 11 F1 00 FASTER PROGRAMS FOR HANDLING B.C.D. ARITHMETIC WHICH, MERELY BY CHANGING THE DECIMAL MODE FLAG, Wl LL HANDLE BINARY ARITHMETIC.
CHANGE IN ORDER TO FULLY UTILISE THE /zP's POWER THE MONITOR SUBROUTINES FOR FETCHING KEYS & OUTPUTTING DATA TO THE DISPLAY HAVE BEEN WRITTEN WITHOUT ARITHMETIC SO THEY MAY BE CALLED WITH THE F0 20 C6 19 ED 60 MORE DECIMAL FLAG SET OR CLEARED & THEY Wl LL NOT AFFECT IT. SO LET'S DO A DECIMAL ADDITION; 10 30 20 20 19 F7 E2 60 45 00 INCREMENT NO OF TIME OF TEY 002 F 0030 0081 0033 0035 0038 F8 18 A5 21 65 20 20 60FE 4C04 FF SED CLC m 00 UP LDA Z 21 ADC Z 20 JSR FE60 JMP FF04 OUR STANDARD PROGRAM HAS BEEN EXTENDED BACKWARDS BY ONE BYTE, THE SED INSTRUCTION. THIS SHOULD BE INCLUDED (BY ,0,0,2,F,$T THE FIRST TIME THE PROGRAM IS RUN, BUT MAY BE OMMITTED (K,0,0,3,0,4) ON SUBSEQUENT RUNS.
THIS LITTLE PROGRAM Wl LL TELL US THAT 22 + 11 = 33, IT Wl LL SAY THAT 35 + 26 = 61 AND THAT 50 + 51 = 01 WHOOPS! THE PROGRAM AT FE60 ONLY DEALS WITH PUTTING THE BYTE IN THE ACCUMULATOR ON THE DISPLAY. IT PAYS NO ATTENTION TO THE CARRY RAPID INCREMENT D0 F0 20 20 D0 F0 A9 85 20 90 CF F6 69 4F BNE DISP ?
BEQ UP J JSR DECR >| JSR ZOOM I BNE DISP f BEQ DOWN J LDA#1F STA0E JSR DISPLAY BCC STOP D9 F6 1F 0E 0C 03 00 00 DOWN RAPID INCREMENT ZOOM FE SET FOR ONE SCAN ONLY CHECK IF KEY DEPRESSED CLEAR IF ONE IS 0058 005A 005B A9 60 A9 00 L D A # 00 RTS LDA# FF FLAG, INDEED IT CHANGES THE STATE OF THE CARRY FLAG ITSELF, SO THAT WE CANT IMMEDIATELY CALL FE60, HAVE IT WRITE ON THE DISPLAY & RETURN THEN WRITE OUT THE STATE OF THE CARRY SOMEHOW.WHAT WE NEED IS:
005D 005D 005F A9 85 60 FF 0E FF LDA# FF STA0E RESET SO THAT JSR DISPLAY WAITS FOR INPUT RTS I SAVE THE CARRY FLAG II USE FE60 III GET THE CARRY FLAG BACK & WRITE IT OUT SOMEHOW A FRENZIED SEARCH THROUGH THE MNEMONICS REVEALS THAT THERE ARE COUNTER i SUBROUTINE ADDF \ HEX CODE LABEL INSTRUCTION COMMENTS NO MNEMONICS LIKE LDC (LOAD C) OR STC (STORE C) A CLOSER LOOK AT THE MICROPROCESSOR IS REQUIRED. 0060 0062 0064 0066 0067 0069 0063 006D 006F 0071 0073 0076 F6 D0 E6 38 B0 A5 1A 0D INCR INCCNTL BNE UPDATE INCCNTH SEC 1B 08 BCS UPDATE LDACNTL BNE NOT DEC CNTH DECCNTL LDX#IE JSR QHEXTD1 D0 C6 C6 A2 20 60 1A 02 DECR 1B 1A 1A 64 NOT UPDATE FE RTS