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

PROGRAM. THE STRATEGY OF THE PROGRAM IS NOT OBVIOUS, AND IS LEFT AS AN EXERCISE TO THE READER. A SMALL PRIZE Wl LL REWARD THE SUBMISSION OF A SHORTER, FASTER PROGRAM; NOTE THAT WORKSPACE 2.3.4 THE LOGIC INSTRUCTIONS 'ORA', 'AND', 'EOR'. IF WE PUT 60 16 IN LOCATION 0020 (M,0,0,2,0, k, ,6,0 : YOU SHOULD KNOW BY NOW) AND ALTER THE STA Z INSTRUCTION AT 0033 TO, SAY, ORA Z (OPCODE 05 HEX) (THE PROGRAM READS LDA FE00 ORA Z20 JSR FE60 JMP FFQ(4) WE HAVE A PROGRAM THAT DISPLAYS THE LOGICAL y OR' BETWEEN THE CONTENTS OF FE00 (A0) AND 0020, (60). THE HEX FOR ORA Z IS 05 AND IT CARRIES OUT A LOGICAL 'OR' BETWEEN THE ACCUMULATOR AND THE SPECIFIED LOCATION IN Z PAGE.

M,0,0,3,3, k 0,5 IS THE MODI FICATION TO THE PROGRAM, THEN SINCE WE STILL START AT 0030, G,G RUNS IT : REQUIREMENTS CONTRIBUTE TO THE LENGTH! 8 QUEENS PROGRAM 0200 0201 0203 0205 0207 0209 020B 020E 0210 0213 0216 0218 021A 021C 021E 0220 0222 0223 0225 0227 0228 022A 022C 022E 022F 0230 0232 0233 0235 0237 0238 023A 023B 023D 023E 0240 0241 0243 0244 0247 0248 024A 024C 024E 0250 0253 F8 A2 84 84 84 84 20 A5 20 4C 20 1F 20 29 32 MAIN SED LDX #20 STY COUNT STY ROW STY LEFT STY RIGHT JSR TRY - CLEAR COUNT - CLEAR ROW OCCUPIED - CLEAR LEFT DIAGONAL ATTACKS - CLEAR RIGHT DIAGONAL ATTACKS - FIND THE NO OF WAYS 16 1F 60 04 00 FF 07 02 FE FF LDA COUNT JSR RDHEXTD JMP RESTART - DISPLAY ANSWER K.

0 0 3 0 E0 B5 C9 D0 A5 69 85 60 TRY LDAZX 00 CMP#FF BNE CONTINUE LDA COUNT ADC #00 STA COUNT - FINISHED YET? 10100000 01100000 or 11100000 TRY CHANGING 0020 TO 40 AND RUNNING THE PROGRAM AGAIN IS THE ANSWER WHAT YOU EXPECTED? WE CAN CHANGE 0033 TO MAKE THE PROGRAM DO LOGICAL 'AND' OR THE OPERATION WAS 'OR' A0 60 1F 00 - FINISHED, SO INCREMENT COUNT E0 or 15 15 A8 49 F0 95 C8 98 35 A8 09 1F FINISH RTS ORAZX09 ORAZX 12 TAY 12 LOOP - CURRENT LEFT - CURRENT RIGHT FF F6 18 EOR#FF BEQ FINISH STA2X 1B - NO CHANCE - CURRENT POSSIBLE PLACE 'EXCLUSIVE - OR'. THE MNEMONICS AND OPCODES ARE:

AND Z 25 16 LOGICAL AND ACCUMULATOR AND Z PAGE MEMORY INY TAY ANDZX 1B TV\Y CRAZX 00 STAHX 01 TYA 1B LOGICAL EXCLUSIVE-OR ACCUMULATOR AND ZPAGE MEMORY AND THE PROGRAMS WOULD READ EOR Z 45 16 15 95 98 00 01 - NEW ROW LDA FE00 EOR Z20 JSR FE60 JMP FF04 BY NOW YOU MUST BE GETTING TIRED OF THE A0 IN FE00 SO WE'LL CHANGE THE PROGRAM TO READ LDA FE00 AND Z 20 JSR FE60 JMP FF04 15 0A 95 98 09 ORAZX 09 ASLA STAZX 0A TYA ORAZX 12 0A - NEW LEFT ATTACK 15 4A 95 12 E8 20 CA B5 49 35 49 4C 13 LSRA STAZX 13 - NEW RIGHT ATTACK LDA Z21 EOR Z20 JSR FE60 JMP FF04 THE SPACE TAKEN UP BY LDA Z 21 IS ONE BYTE LESS THAN THAT USED BY 16 02 INX JSR TRY DEX LDAZX 01 EOR #FF ANDZX 1B EOR#FF JMP LOOP 01 FF 1B FF 27 LDA FE00.

WE COULD SIMPLY WRITE THE NEW TWO BYTES IN AT LOCATIONS 0031 & 0032 AND CHANGE THE GO ADDRESS TO 0031. THIS IS VERY SIMPLE 02 HERE SINCE THAT IS ALL WE HAVE TO DO. BUT IF THERE WERE MANY REFERENCES TO 0030 AS THE START OF THIS PROGRAM IT WOULD TAKE A LONG TIME TO FIND AND CHANGE THEM ALL, AND IF WE DIDN'T CHANGE THEM ALL SOMETHING WOULD GO WRONG. WE CAN'T MOVE THE REST OF THE PROGRAM DOWN ONE BYTE: SOMETHING MIGHT BE REFERRING TO IT. THE PROBLEM ARISES BECAUSE LDA Z IS SHORTER THAN LDA. WE COULD SIMPLY USE LDA WITH A ZERO PAGE ADDRESS BUT THIS TAKES A WHOLE /iS