SO WE CAN WRITE A VERY SHORT PROGRAM TO CLEAR THE DISPLAY. BY MAKING THE LOOP SLIGHTLY LARGER (WITH THE SAME LENGTH OF PROGRAM) 0060 A2 07 LDX #07 0062 B5 48 LOOP: LDA Z, X 48 0064 95 10 STAZ,X10 0066 CA DEX 0067 10 F9 BPLLOOP 0069 4C 04 FF JMP FF04 WE CAN, INSTEAD OF CLEARING THE DISPLAY, CAUSE A BLOCK OF MEMORY, 0048 - 004F, TO BE TRANSFERRED TO THE DISPLAY. THE PROGRAM IS ADDR HEX CODE A2 24 20 66 4C 04 LABEL INSTRUCTION COMMENTS 0240 0242 0245 0247 LDX #24 JSR QHEXTD2 JMP RESTART - SET UP X - PUT NEXT 4 OUT - DISPLAY RESULT FE FF SYSTEM THE DECIMAL TO HEX CONVERTER WILL PROMPT WITH 0XXXX FOR THE FIRST DIGIT OF THE 5 DIGIT DECIMAL NUMBER. THEN X0000.
FOR THE LAST FOUR DIGITS OF THE DECIMAL NUMBER. CLEARLY ANYTHING OVER 65535 Wl LL GIVE THE REMAINDER WHEN DIVIDED BY 10000 HEX. TO ENTER THIS POSITION INDEPENDENT SO YOU CAN WRITE IT INTO MEMORY ANYWHERE. . . EXCEPT LOCATIONS 0010-0017. IF YOU PUT THE PROGRAM IN 0048 IT Wl LL FUNCTION PERFECTLY BUT YOU WON'T BE ABLE TO CHANGE THE DATA WHICH IS MOVED, SINCE THIS IS THE PROGRAM. YOU CAN TRY THE PROGRAM NUMBER YOU WOULD KEY 6, CONTROL KEY, 5535, CONTROL KEY, AND FFFF WILL APPEAR ON THE DISPLAY (AFTER A SLIGHT DELAY!) THE PROGRAM WORKS BY A PROCESS OF DECREMENTING THE DECIMAL USING THIS DATA 0048 00 77 58 5C 50 54 00 00 OR YOU COULD CONSTRUCT YOUR OWN DATA, USING APPENDIX A.
THE INDEXING MECHANISM SHOWN ABOVE IS ONLY CAPABLE OF DEALING WITH 256 (CONSECUTIVE) BYTES, STARTING AT A GIVEN ADDRESS. THUS A9 00 LDA #00 LOAD A IMMEDIATE WITH "00" A8 TAY TRANSFER A TOY 18 LOOP:CLC CLEAR CARRY 79 00 FE ADC, Y FE00 ADD WITH CARRY INDEXED BY Y C8 INY INCREMENTY D0F9 BNE LOOP BRANCH IF NOT EQUAL 20 60FE JSR FE60 JUMP SUBROUTINE 4C04FF JMPFF04 JUMP COMPUTES THE LOWEST BYTE OF THE 256 BYTE ADDITION. (NOTE THAT, SINCE Y IS ZERO WHEN YOU LEAVE THE MONITOR BY THE GO FUNCTION, THE INITIALISATION OF A & Y CAN BE ACCOMPLISHED BY TYA INSTEAD OF NUMBER AND THEN INCREMENTING THE HEX. NUMBER.
DEO*HEX 0200 0201 0203 0205 0207 0209 020C 020F 0211 0214 0215 0217 0219 021A 021C 021E 0220 0221 0222 98 85 85 A2 85 20 20 90 20 F8 84 A6 98 85 A4 85 38 98 20 21 20 22 7A 0C TYA STAZDECL STA Z DECH - CLEAR A - CLEAR NO AGAIN FE FE LDX #DECC STAZDECVH "] JSR HEXTD I JSR DISPLAY y -FETCH THE FIRST DIGIT F6 88 FE BCC AGAIN J JSR QDATFET SED STYZD - AND THEN THE LAST FOUR DIGITS - DECIMAL MODE - CLEAR LEFT DISPLAY - X & Y AS DOUBLE ACCUMULATOR 10 21 LDXZ DECH TYA STA 2 DECH - CLEAR AREA FOR RESULT 21 20 20 LDYZ DECL STAZ DECL SEC N T Y A SBC #01 LDA #00, TAY) HOW COULD THIS BE DONE FOR ALL 65536 MEMORY BYTES? CLEARLY IT IS POSSIBLE TO HAVE AN ADC, Y FOR EACH PAGE: 98 TYA 18 LOOP:
CLC 79 0000 ADC, Y 0000 18 79 00FF NEXT ALSO E9 01 > - DO A DECIMAL SUBTRACT, DOUBLE BYTE 0224 0225 0226 0228 0229 022B A8 8A TAY TXA SBC #00 TAX y CLC ADC, Y 0100 CLC > 256 ADC, Y INSTRUCTION PAIRS E9 AA B0 C6 04 22 00 BCS NODEC DECZDECVH - LAST OF THE DECIMAL SUBTRACT, TO DO 5 DIGITS - IF MINUS THEN FINISHED - DOUBLE HEX INCREMENT 18 79 00FF C8 CLC ADC,YFF00 022D 022F 0231 0233 0235 0236 30 E6 D0 E6 38 B0 09 20 ED 21 NODEC BMI RESULT INC2DECL BNENEXT INC 2 DECH SEC F0 03 4C?? 20 60 FE END 4C04FF INY BEQEND JMP LOOP JSR FE60 JMP FF04 IN ORDER TO SHORTEN THIS PROGRAM WE WILL INTRODUCE THBCONCEPT OF "INDIRECTION".
E9 - CREATE BRANCH ALWAYS, BUT BCS ALSO f DON'T BOTHER TO SET THE CARRY TWICE 0238 023A 023D 023F A2 20 4C 20 64 04 RESULT FE FF LDX #20 JSR QHEXTD JMP RESTART - DISPLAY RESULT