Acorn Computer Limited Acorn (6502) — Acorn Computer (6502) User & Service Manual PDF (EN)

THE HEXADECIMAL TO DECIMAL CONVERTER PROMPTS WITH XX0000XX AND AFTER A CONTROL KEY IS PRESSED WILL PROVIDE AN ANSWER IN THE 10 000F 0010 0011 0012 0013 0014 0015 0016 0017 FORM ????????, AFTER A WAIT! THE PROGRAM WORKS BY DECREMENTING THE HEX. NUMBER AND INCREMENTING THE DECIMAL NUMBER UNTILTHE HEX. NUMBER REACHES ZERO. THIS PROGRAM, LIKE THE DECIMAL TO HEX. CONVERTER, WHICH USES VIRTUALLY THE SAME METHOD, ILLUSTRATES THE USE OF THE DECIMAL MODE, AN IMPORTANT FACET OF THIS PROCESSOR. THEY ALSO PROVIDE AN EXCELLENT DEMONSTRATION OF THE TRADEOFF X =07, SAY FREQUENTLY FOUND BETWEEN PROGRAM LENGTH AND SIMPLICITY, AND PROGRAM EXECUTION TIME.

THE METHOD USED IS BOTH SHORT AND SIMPLE, BUT CAN TAKE UP TO THREE SECONDS FOR SOME CALCULATIONS. A MUCH LONGER AND MORE COMPLEX (RELATIVELY) PROGRAM COULD HAVE BEEN WRITTEN BASED ON ABCD = A(16*16*16)+B(16*16)+C(16)+D AND WOULD HAVE A IS STORED IN 17 WHICH IS 10 THE "BASE ADDRESS"+07 THE "INDEX" IF WE DO A2 07 LDX # 07 95 10 STAZ,X10 THE STORE IS TO LOCATION 17 (=10 + X). THE ADDITION IS STRAIGHT- BEEN VIRTUALLY INSTANTANEOUS.

HEX-* •DEC LDX# FF STAZ,X 10 STORES IN LOCATION 0F WE ALSO HAVE FORWARD BINARY,TRUNCATEDTOA LOCATION IN ZERO PAGE SO ADDR HEX CODE 84 84 A2 20 F8 A2 86 A5 D0 A5 LABEL INSTRUCTION COMMENTS 0200 0202 0204 0206 0209 020A 020C 020E 0210 0212 0214 0216 0218 021A 021B 021C 021E 021F 0220 0222 0223 0225 0227 0229 022B 022D 022F 0232 0233 0235 0238 023A 20 21 20 88 STYZ HEXL STY Z HEXH - SET UP ZERO PROMPT FE LDX#HEXL JSR QDATFET SED - AND FETCH THE DATA - DECIMAL MODE - SETX & Y & DECOUT TO ZERO "STORE A INDEXED BY X" "STORE A INDEXED BY Y" 9D 99 STA, X STA, Y (BUT NO STA Z, Y) WHICH DO NOT NEED TO TRUNCATE THE ADDITION THEY EXPECT A TWO BYTE ADDRESS SO 00 22 20 06 21 LDX #00 STX Z DECOUT DECRHEX LDAZ HEXL BNE NODEL - TEST FOR ZERO,THENDECREMEh LDX# FF STA, X 0010 STORES IN LOCATION 010F NOW LDA2 HEXH BEQDEAD DECZ HEXH DECZ HEXL CLC > TYA ADC #01 TAY TXA ADC #00 TAX BCC DECRHEX INC 2 DECOUT BCSDECRHEX > STYZ HEXL STX Z HEXH - IFHEXNO.ISZERO,THENFINISHE F0 C6 C6 13 21 20 NODEC DEX CA "DECREMENT (IN HEX) X BY ONE" SETS THEZ FLAG IF X IS ZERO, & THE N FLAG EQUAL TO BIT 7 OF X.

18 98 69 A8 8A 69 AA 90 BPL 10 "BRANCH IF PLUS" TAKES THE BRANCH IF THEN FLAG IS CLEAR I.E. IS SAYING'NOT NEGATIVE' 01 I.E. PLUS. IT'S EASY TO SE'E THAT THE COMBINATION 00 ADD 1 TO THE DECIMAL NUMBER ' USING X & Y AS TWO BYTE ACCUMULATOR DEX BPL FD DECREMENTS X ONCE, AND, IF THE RESULT WAS POSITIVE (I.E. IN THE RANGE 0 - 7 F ) IT TAKES THE BRANCH AND DECREMENTS X AGAIN AND AGAIN UNTIL IT REACHES A NON-POSITIVE NUMBER, WHICH Wl LL BE FF, WHEN IT DOESN'T TAKE THE BRANCH.

IF WE START AT 7 AND EACH TIME E6 B0 84 86 A2 20 88 A5 20 4C E9 22 E5 20 21 20 64 DEAD - FINISHED,SO STORE X & Y LDX #HEXL JSR QHEXTD1 DEY LDAZ DECOUT JSR HEXTD JMP RESTART FE - DISPLAY 4 DIGITS AROUND THE LOOP CLEAR THE RELEVANT DISPLAY: CODE LABEL MNEMONICS A9 00 LDA#00 A2 07 LDX #07 95 10 LOOP: STA Z, X 10——i COMMENT 22 7A 04 FE FF - DISPLAY 5 DIGIT LOAD ACCUMULATOR IMMEDIATE LOADX IMMEDIATE STORE-* IN ZERO PAGE INDEXED BYX * DECREMENT X BY ONE BRANCH IF PLUS TO "LOOP" CA DEX BPL LOOP 10 FB