40
User's manual Q l I T C D Acorn Computor Limited, 4a Market Hill, Cambridge, r U I CK CB2 3MJ, Telephone (0223) 312772

Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

User's manual

Q l I T C D Acorn Computor Limited, 4a Market Hill, Cambridge,r U I C K CB2 3MJ, Telephone (0223) 312772

Page 2: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal
Page 3: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

CONTENTSPART1CHAPTER 1: AN INTRODUCTION TO THE BINARY NUMBER SYSTEM1.1 BINARY NUMBERS1.2 LOGICAL MANIPULATIONS1.3 ARITHMETIC MANIPULATIONS1.4 BINARY CODED DECIMAL (BCD) ARITHMETICCHAPTER 2: WELCOME TO THE MACHINE2.1 HOW THE ACORN MICROPROCESSOR WORKS2.2 THE MONITOR COMMANDS M, t , I .2.3 AT LAST, A PROGRAM,

2.3.1 ASSEMBLY LANGUAGE, MACHINE LANGUAGE, THE INSTRUCTIONSLOAD, STORE andJUMP

2.3.2 ENTERING A PROGRAM, THE GO COMMAND2.3.3 INSTRUCTIONS JMP,JSR2.3.4 LOGIC INSTRUCTIONS ORA AND EOR.2.3.5 ARITHMETIC OPERATIONS: ADC, SEC, CLC

CHAPTER 3: INSIDE THE 65023.1 THE ACCUMULATOR, PROGRAM COUNTER, STATUS REGISTER3.2 THE STACK POINTER,3.3 THE INTERNAL REGISTERS X & Y3.4 MAKING OUR PROGRAM 'FRIENDLY'CHAPTER 4: THE REMAINDER OF THE INSTRUCTION SET4.1 BRANCHES4.2 INDEXING4.3 INDIRECTION4.4 R E A D - M O D I F Y - W R I T E INSTRUCTIONS4.5 MISCELLANEOUS REMAINING INSTRUCTIONSCHAPTER 5: ACORN HARDWARE5.1 CHIP LAYOUT AND BUS5.2 RESET, INTERRUPT REQUEST AND NON-MASKABLE INTERRUPT5.3 6502 INTERNAL ARCHITECTURE5.4 PROMS, EPROMS, RAM, RAM I/O5.5 THE KEYBOARD AND TAPE INTERFACE5.6 POWER SUPPLYCHAPTER 6: FIRMWARE6.1 THE TAPE STORE AND LOAD6.2 THE BREAKPOINT AND RESTORE COMMAND6.3 THE SINGLE STEPPING FACILITY6.4 THE MONITOR LISTINGPART 2APPLICATION PROGRAMS

APPENDICESAPPENDIX A: 64 CHARACTER ASCI I ON ACORN'S 7 SEGMENT

DISPLAYAPPENDIX B: INSTRUCTION SETAPPENDIX C: HEXADECIMAL TO DECIMAL CONVERSION TABLEAPPENDIX D: ACORN MONITOR ADDRESS INFORMATION

GLOSSARY

Page 4: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

PART1CHAPTER 1: AN INTRODUCTION TO THE BINARY NUMBER SYSTEM1.1 BINARY NUMBERS:NUMBERS IN EVERY DAY USE ARE WRITTEN IN THE DECIMAL SYSTEM, THATIS, TO THE NUMBER BASE 10. A POSITIONAL NOTATION IS USEDREPRESENTING ONE "I00's; TWO "I0's & EIGHT T s AS THE SYMBOL 128. THERIGHTMOST (i.e. LEAST SIGNIFICANT) DIGIT IS IN THE "UNITS" COLUMN, THE2 INTHE 'TENS" COLUMN, THE 1 INTHE "HUNDREDS" COLUMN, AND THEVALUE OF THE SYMBOL '128' IS EVALUATED AS 1x100+2x10 + 8x1 = 128.SIMILARLY '1024' IS EVALUATED AS 1x1000 + 0x100 + 2x10 + 4x1 = 1024, WHICHIS MORE CONVENIENTLY WRITTEN AS 1x103 +0x102 + 2x10* 4x10° = 1024,USING THE MATHEMATICAL SHORTHAND FOR 1000= 10x10x10= 103 ,ANDTHE CONVENTION "ANY NUMBER TO THE POWER ZERO IS 1 " TO GIVE ACONSISTENT METHOD OF EVALUATING SUCH SYMBOLS.SO 1024CAN BE WRITTEN IN COLUMNS

3

1

2

0

1

2

0

4

AND EVALUATED AS 1x103 +0x102 + 2x10* +4x10°TO THE BASE 10.TO THE BASE 8,1024 WOULD MEAN 1x83 + 0x82 + 2x8* +4x8° WHICH IS THEDECIMAL NUMBER 532.TO THE BASE 16,1024 WOULD MEAN 1x163 + 0x162 + 2x161 +4x16° WHICH ISTHE DECIMAL NUMBER 4132.TO DISTINGUISH THE BASE TO WHICH A NUMBER IS WRITTEN WE'LL WRITEITS' BASE AFTER IT AS A SUBSCRIPT: 10241O AND NOW WE CAN WRITE1024* = 5321O|102416 =4132 l 0 |100000002 = 128! oJUST AS BASE TEN HAS THE NAME 'DECIMAL', BASE SIXTEEN HAS THE NAME'HEXADECIMAL', BASE EIGHT HAS THE NAME 'OCTAL' AND BASE TWO'BINARY'. THESE FOUR BASES ARE IN COMMON USE WITH MODERNCOMPUTERS, ESPECIALLY HEXADECIMAL (HEX) AND BINARY. CONVERSIONBETWEEN BINARY, OCTAL & HEX NUMBERS IS VERY SIMPLE. SINCE THEY AREALL POWERS OF TWO, NUMBERS JUST NEED DIVIDING UP:-100000002= 1100011 00001! 6 = 8 0 i 6

= I010||000II000»6 =2008

- EACH HEX DIGIT IS FOUR BINARY DIGITS (BITS) & EACH OCTAL DIGIT IS3 BITS.OCTAL DIGITS ARE 0 , 1 , 2, 3, 4, 5, 6, 7.HEX D I G I T S A R E 0 , 1 , 2 , 3 / 4 , 5 , 6 , 7 , 8 , 9 , A , B , C , D , E / F A....F ARE USEDINSTEAD OF 10....15 TO ALLOW UNRESTRICTED USE OF THE POSITIONALSYSTEM.

Page 5: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

PROGRAM COUNTER: 16 BIT REGISTER WHICH CONTAINS THE ADDRESS OFTHE INSTRUCTION BEING EXECUTED. DURING EXECUTION THEPROGRAM COUNTER ISSTEPPEDUPTOPOINTATTHE NEXT INSTRUCTION.

PROM: PROGRAMMABLE READ ONLY MEMORY. THIS TYPE OF MEMORYARRIVES BLANK. IT CAN BE PROGRAMMED BY THE USER WITH THEHELP OF A SPECIAL PROM BLOWER. ONCE THIS PROGRAM HAS BEEN PUTIN, IT CANNOT BE CHANGED.

RAM: RANDOM ACCESS MEMORY. THIS IS THE STANDARD READ/WRITEMEMORY. DATA (AND PROGRAMS) ARE LOST WHEN THE POWER ISSWITCHED OFF.

REGISTER: STORAGE LOCATION IN THE MICROPROCESSOR ITSELF. THEREARE INTERNAL REGISTERS A, X, Y, PC, S, P.

• ROM: READ ONLY MEMORY. THIS IS MEMORY THAT HAS A PROGRAM PUTIN DURING PRODUCTION. THIS PROGRAM CANNOT EVER BE CHANGED,IT CAN ONLY BE READ.

STORE: TRANSFERS DATA FROM AN INTERNAL REGISTER TO MEMORY.XTAL: THE CRYSTAL IN THE ACORN OSCILLIATES AT 1 MHZ. i.e. ONE

MILLION TIMES A SECOND. IT DOES THIS WITH GREAT ACCURACY. SOYOU CAN BUILD A CLOCK FROM YOUR ACORN.

HEX0123456789ABCDEF

1020406480

100

CONVERSIONDECIMAL

0123456789

101112131415163264

100128256

TABLEOCTAL

01234567

10111213141516172040

100144200400

BINARY01

1011

100101110111

10001001101010111100110111101111

10000100000

10000001100100

10000000100000000

THE ACORN MICROPROCESSOR IS DESIGNED TO DEAL WITH 8 BITS AT A TIME.THE COLLECTION OF 8 BITS IS GIVEN THE SPECIAL NAME 'BYTE', AND ISNORMALLY WRITTEN IN HEXADECIMAL OR BINARY. A BYTE THUS IS 0....FF16;0....111111112 OR 0....255io. THE MICROPROCESSOR CAN CARRY OUT LOGICALAND ARITHMETICAL MANIPULATIONS ON BYTES.1.2 LOGICAL MANIPULATIONSTHE MICROPROCESSOR CAN IMMEDIATELY CARRY OUT THE LOGICAL AND,EXCLUSIVE - OR & OR FUNCTIONS ON ALL 8 BITS SIMULTANEOUSLY, USINGTHE FOLLOWING TRUTH TABLES FOR EACH BIT (SYMBOL V )AND ( A ) EXCLUSIVE - OR ( V ) OR ( V )

bi

0011

b2

0101

result0001

bi0011

b2

0101

result0110

bi0011

b2

01 .01

result0111

EXAMPLEOPERANDS00111100 0011110001011010 AND 01011010

(OPERATOR)00011000 RESULT 01100110

E-OR0011110001011010 OR

01111110

Page 6: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

1.3 ARITHMETIC MANIPULATIONS

BINARY ADDITIONWITH CARRY OUTPUT

BINARY ADDITION WITH CARRY FROM RIGHT

b,0011

b2

0101

SUM0110

CARRY0001

bi00110011

b2

01010101

INPUT CARRY00001111

SUM01101001

OUTPUT CARRY TO LEFT00010111

EXAMPLE: 00111100 3C16 60iO01011010+ 5A16 + 90io +10010110 9616 150,0

IN ORDER TO MAKE LONGER ADDITIONS EASIER TO PROGRAM,THEMICROPROCESSOR HAS A CARRY BIT (FLAG). AT THE START OF ANADDITION THIS IS TREATED AS THE INPUT CARRY, AND AT THE END ITRECEIVES THE CARRY OUT FROM THE SUM AT BIT 7: ASSUMING WE HAVE ACARRY INPUT:

1100001110100101 CARRY IN

C316

A516

- l i e169,6

195,0165,0_Jio+361,0CARRY OUT QJ 01101001

SUBSTRACTION OPERATES IN A SIMILAR MANNER, EXCEPT THAT THECARRY (OR BORROW) FLAG OPERATES UPSIDE DOWN: A 0 CARRY FLAG ISTREATED AS REPRESENTING A BORROW FROM THE PREVIOUS STAGE:

11111111 FF16 25510

00, 6 000,0

J 010510ioQ] 11111110 1FE16

NOT QUITE THE RESULTS ONE MIGHT HAVE WISHED FOR! (SUPERFICIALLY)THIS OCCURS BECAUSE OF THE HARDWARE IMPLEMENTATION OFSUBTRACTION A SUBTRACTION, (P-Q), IS REGARDED BY THE MICRO-PROCESSOR AS THE EQUIVALENT (P+(-Q)), BECAUSE THERE IS A SIMPLEWAY TO GENERATE THE NEGATIVE OF A NUMBER.THE 'ONES-COMPLEMENT'OF A BINARY NUMBER IS SIMPLY GENERATED BYEXCHANGING '0's & Ts :

T s 000011002 0Cie 12,oCOMPLEMENT 111100112 F316 24310

IF THIS ONE'S-COMPLEMENT IS TO BE THE NEGATIVE OF A NUMBER,WE SHOULD GET 0 ON ADDITION:

GLOSSARY- ACCUMULATOR: 8-BIT CENTRAL REGISTER IN THE MICROPROCESSOR.

MOST INFORMATION HAS TO GO THROUGH IT.- ADDRESS: 16 BIT POINTER TO A MEMORY LOCATION. THE 6502 MICRO-

PROCESSOR CAN ADDRESS 65, 536 SUCH LOCATIONS (WHICH IS216).- ARITHMETIC LOGIC UNIT (A.L.U.): A SECTION OF THE MICROPROCESSOR

WHICH CARRIES OUT ARITHMETIC (ADDITION,SUBTRACTION,INCREMENT, DECREMENT & COMPARE) AND LOGIC ("AND","EOR","OR", & BIT SHIFTS) MANIPULATIONS. THIS IS THE ONLY PART OF 'THE MICROPROCESSOR WHICH ALTERS DATA.

- COMMAND: THE MONITOR FUNCTIONS M,G,P,R,L,S,t',l.- DATA: INFORMATION FOR THE PROCESSOR THAT DOES NOT HAVE TO BE

TRANSLATED, e.g. "AD" AS DATA ACTUALLY MEANS 10x16+13x1 = 1731O

WHEREAS THE INSTRUCTION "AD" GETS TRANSLATED INTO THEOPERATION "LOAD ACCUMULATOR ABSOLUTE".

- EPROM: ERASABLE PROGRAMMABLE READ ONLY MEMORY. THIS TYPEOF MEMORY IS LIKE A PROM, BUT CAN AGAIN BE ERASED BYEXPOSING THE CHIP TO ULTRAVIOLET LIGHT.

- FLAGS: ONE BIT INTERNAL REGISTERS. ALL SEVEN FLAGS CAN ALSO BETREATED AS SEPARATE BITS OF THE P REGISTER (PROCESSOR STATUS).

- INDEX REGISTER: A REGISTER WHICH CAN BE USED TO MODIFY ANADDRESS (USED IN REFERRING TO DATA) BY BEING ADDED TO IT, THUSACCESSING A CERTAIN ELEMENT OF A TABLE. THE 6502 HAS TWO INDEXREGISTERS CALLED X & Y .

- INSTRUCTION: A FUNCTION OF THE MICROPROCESSOR LIKE LOAD ANDSTORE.

- I/O: INPUT/OUTPUT. THIS CHIP ALLOWS YOU TO COMMUNICATE WITH THEOUTSIDE WORLD. IN THE ACORN THE I/O CHIP HAS 16 PROGRAMMABLELINES WHICH CAN EITHER BE OUTPUTS OR INPUTS. IT ALSO HAS 128BYTES OF RAM.

- IRQ: INTERRUPT REQUEST. IF FLAG I (INTERRUPT DISABLE) IS CLEAR ANDA REQUEST IS MADE THE PROCESSOR WILL ATTEND TO IT AFTERSETTING FLAG I AND STORING THE PROGRAM COUNTER AND STATUSREGISTER.

- JUMP: THE PROGRAM COUNTER IS LOADED WITH A NEW ADDRESS. THEEXECUTION OF THE PROGRAM, WHICH IS NORMALLY USINGCONSECUTIVE ADDRESSES, CONTINUES (JUMPS) AT THIS NEW ADDRESS.

- LOAD: TRANSFERS THE DATA OF A MEMORY LOCATION TO AN INTERNALREGISTER.

- MNEMONIC: SUGGESTIVE ABBREVIATION OF AN INSTRUCTION e.g. THEINSTRUCTION "LOAD ACCUMULATOR ABSOLUTE" HAS THE MNEMONIC"LDA".

-NMI : NON MASKABLE INTERRUPT WHEN THE NON MASKABLE INTERRUPTIS ACTIVATED THE PROCESS Wl LL SET FLAG I, STORE AWAY ITSPROGRAM COUNTER AND STATUS REGISTER AND THEN IMMEDIATELYATTEND TO THE INTERRUPT. THERE IS NO WAY OF PREVENTING THISINTERRUPT. IT HAS PRIORITY OVER IRQ.

-OPCODE: HEXADECIMAL REPRESENTATION OF AN INSTRUCTION.e.g. THEINSTRUCTION "LOAD ACCUMULATOR ABSOLUTE" HAS THE MNEMONIC"LDA" AND THE OPCODE "AD" .

Page 7: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

0010

0011001200130014-00170018

0019001A

001C001D001E,001F001BFE00FE0C

FE5EFE60FE64FE66FE6FFE7AFE88FEA0

FEA6FEB1FECDFED0FEDDFEF3FF04FFB3

FFEA

D,R4 BASE ADDRESS OF THE EIGHT DISPLAYED MEMORYLOCATIONS, REGISTER 4: TEMPORARILY PCH AFTERBREAK.

R5 REGISTER 5: TEMPORARI LY PCL AFTER BREAKR6 REGISTER 6: TEMPORARI LY 01 AFTER BREAKR7 REGISTER 7: TEMPORARI LY S AFTER BREAK.

LAST 4 DISPLAYED MEMORY LOCATIONS.P SINGLE LEVEL OF STORAGE FOR PREVIOUS DATA AT

BREAKPOINTS.COL COLUMN OF KEY CURRENTLY BEING PROCESSEDTX.TY TEMPORARY STORAGE FOR X (IN DISPLAY) OR Y

(VARIOUS PLACES).USERNMI ADDRESS OF USER'S NMI PROGRAMUSERIRQ ADDRESS OF USER'S IRQ PROGRAMRECAL CONTAINS PC RECALCULATION FACTOR FOR BREAKQUAD DISPLAY X -3 ,X -2 ,X -1 ,X ON THE DISPLAY; THEN IDISPLAY STROBE KEYBOARD, MULTIPLEX DISPLAY, RETURN

WITH KEY INFORMATIONMHEXTD DISPLAY A MEMORY BYTE ON RIGHT OF DISPLAYRDHEXTD DISPLAY A ON RIGHT OF DISPLAYQHEXTD1 DISPLAY X & X+1 ON DISPLAYS 1,2,3 & 4QHEXTD2 DISPLAY X & X+1 ON DISPLAYS Y - 2 , Y - 1 , Y & Y+1DHEXTD DISPLAY A ON DISPLAYS Y & Y+1HEXTD DISPLAY BOTTOM 4 BITS OF A ON DISPLAY YQDATFET FETCH AN ADDRESS INTO LOCATIONS X & X+1COM16 INCREMENT & COMPARE TWO 16 BIT NOS X+6,X+7 &

X+8,X+9NOINC COMPARE X+6,X+7 & X+8,X+9 FOR EQUALITYPUTBYTE A TO TAPE, DO 1 START & 1 STOP BITS, NO PARITYWAIT WAIT FOR CASSETTE TIMING% WAIT HALT^THE WAITGETBYTE TAPE TO A, WAIT FOR START BIT, CENTRE TIMINGRESET ENTRY TO MONITORRESTART RE-ENTRY TO RUNNING MONITORBREAK ENTRY TO MONITOR FROM BRK INSTRUCTION,

DISPLAY CPUFONT SEVEN SEGMENT PICTURES OF THE HEX DIGITSRECAL CONTAINS PC RECALCULATION FACTOR FOR BREAK

000011002 0CF3

16

16

12243

10

10

111111112

WHICH DOESN'T HAPPEN ....000011002111100112

1a

UNTIL WE

+

FF16

ADD AN EXTRA 10C16

F316

1l6 +1 000000002

25510

12io243io

l io25610

16

AND THEN TREAT THE OUTPUT CARRY AS INDICATING THE ABSENCE OF ABORROW FROM THE HIGHER ORDERS.THE NUMBER (ONE'S-COMPLEMENT + 1) IS CALLED THE TWO'S-COMPLEMENTOF A NUMBER:

BINARY HEXADECIMAL DECIMAL000000012 01 i6 + 1 1 O

IIIIIIH2111111102

FFFE

16

16

+0i 0 or - 0 ! 0

-ho-2io

111101002100000002

F416 - 1 2 i 0

8016 -128 1 O

0IIIIIH2 7F1 6 +127 l 0

SO A BYTE CAN BE TREATED AS A 'SIGNED BINARY NUMBER' IN THE RANGE+127 0 -128, OR AS A BINARY NUMBER IN THE RANGE 0 +255. NOWTHE SUBTRACTION ABOVE SHOULD BE CLEAR : INTERNALLY, THE MICRO-PROCESSOR ONE'S-COMPLEMENTS ONE OF THE NUMBERS AND THENEXECUTES A NORMAL ADDITON WITH CARRY.

1.4 BINARY CODED DECIMAL (BCD) ARITHMETIC99 1 6 LOOKS VERY LIKE991 0 THEY BEHAVE THE SAME WAY AS THEY AREMOVED AROUND AND UNDERGO LOGICAL OPERATIONS SINCE THEY AREWRITTEN THE SAME WAY. THE BINARY REPRESENTATION OF 991 0 WOULDNORMALLY BE 011000112, AND OF 9 9 i 6 IT WOULD BE 10011001^ WE NOWDEFINE THE BINARY CODED DECIMAL VERSION OF 991 0 AS BEING THEBINARY REPRESENTATION OF THE DECIMAL DIGITS IN THE ORIGINALPOSITIONAL NOTATION, MAKING THE DIFFERENCE BETWEEN THE BINARYREPRESENTATIONS OF 9916 & 991 0 A MATTER OF SUPSCRIPTS:

9916 =100110012

9910 = 10011001 B.C.D.THE B.C.D. AND BINARY NUMBERS DIFFER IN HANDLING ONLY INARITHMETIC:

?9i6 79io221 6 + BUT 221 0 +9B16 10110

THE MICROPROCESSOR CAN BE TOLD' WHICH TYPE OF ARITHMETIC TOCARRY OUT, BY SETTING (PUTTING A ONE INTO) OR CLEARING (PUTTING AZERO INTO) AN INTERNAL BIT, THE 'DECIMAL MODE' FLAG.

Page 8: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

CHAPTER 2: WELCOME TO THE MACHINE2.1 HOW ACORN'S MICROPROCESSOR WORKSTO CARRY OUT THE ABOVE OPERATIONS THE MICROPROCESSOR HAS ANINTERNAL ARITHMETIC LOGIC UNIT (A.L.U.) WHOSE OUTPUT IS SENT TO ANINTERNAL REGISTER OF ONE BYTE LENGTH CALLED THE ACCUMULATOR'A', THIS REGISTER ALSO ACTS AS ONE OF THE OPERANDS; THE OTHER BEINGDRAWN FROM THE MEMORY EXTERNAL TO THE JUPROCESSOR, WHICH IS CON-NECTED TO THE /iP BY 8 LINES CALLED THE DATABUS:

MEMORY

DATABUS

DATA CAN BE TRANSFERRED ALONG THE DATABUS IN EITHER DIRECTION,THIS DIRECTION IS CHOSEN BY THE, /zP AND INDICATED TO THE EXTERNALUNITS BY A SINGLE 'R/W' LINE :WHEN HIGH, T , THE JUP IS RECEIVING DATAFROM THE MEMORY, 'READING'; WHEN LOW, '0', THE JJLP IS SENDING DATA TOTHE MEMORY, 'WRITING'. ALL INFORMATION USED BY THE JUP TRAVELSALONG THE DATABUS, INCLUDING THE INSTRUCTIONS. SO THAT THE JJL?KNOWS WHERE ITS INSTRUCTIONS ARE IT HAS A TWO BYTE (16 l 0 BIT)REGISTER CALLED THE PROGRAM COUNTER, 'PC, WHICH POINTS AT THEINSTRUCTIONS BEING EXECUTED. THE MEMORY CAN BE VIEWED AS A BOOKOF 256 PAGES, THE PARTICULAR PAGE BEING DECIDED BY THE MOSTSIGNIFICANT 8 BITS (BITS 15-8) OF THE 16 BIT ADDRESS, EACH PAGE CON-TAINING 256 BYTES, THE PARTICULAR BYTE BEING DECIDED BY THE LEASTSIGNIFICANT8BITS (BITS7-0) OF THE 16 BIT ADDRESS.

16 BIT ADDRESS > MEMORY ONE BYTE OF DATA

IN THE KIT, PAGES FE16 & FF16 ARE OCCUPIED BY A NON-ERASEABLE PROGRAMTO INTERFACE BETWEEN THE MICROPROCESSOR AND THE KEYBOARD &DISPLAYUNIT.TOSTARTTHE/iPINTHISPROGRAM (ATTHE CORRECT PLACE)THERE IS A RESET BUTTON WHICH INITIALIZES THE PROGRAM COUNTER. INPAGE0016 THERE IS SOME ALTERABLE MEMORY, OF WHICH THE BOTTOM IF1 6

BYTES ARE GIVEN SPECIAL USES BY THE FE16 & FF16 MONITOR PROGRAM, SO,UNLESS PRESSED FOR SPACE, IT'S BEST TO STAY OUT OF THEM.

APPENDIX C HEXADECIMAL TO DECIMAL

1stDIGIT 2nd DIGIT

0123456789ABCDEF

00163248648096112128144160176192208224240

11173349658197113129145161177193209225241

221834b(A668298114130146162178194210226242

33193551678399115131147163179195211227243

442036526884100116132148164180196212228244

552137536985

' 101117133149165181197213229245

662238b470861Cl2118134150166182198214230246

772339557187103119135151167183199215231247

882440567288104120136152168184200216232248

992541b/7389105121137153169185201217233249

A102642587490106122138154170186202218234250

B112743597591107123139155171187203219235251

C122844607692108124140156172188204220236252

D132945617793

1(Z!9125141157173189205221237253

E14

3d46627894

nd126142158174190206222238254

F153147637995111127143159175191207223239255

HEX100200400800100020004000

800010000

DEC2565121024204840968192163843276865536

APPENDIX D ACORN MONITOR ADDRESS INFORMATIONCOMMENTLOW AND HIGH BYTES OF THE M ADDRESSLOW AND HIGH BYTES OF THE GO ADDRESSLOW AND HIGH BYTES OF THE BREAKPOINT ADDRESSLOW AND HIGH BYTES OF THE TAPE FROM ADDRESSLOW AND HIGH BYTES OF THE TAPE TO ADDRESSREGISTER 0: CONTAINS A AFTER BREAK.REGISTER 1: CONTAINS X AFTER BREAK.REGISTER 2: CONTAINS Y AFTER BREAK.REGISTER 3: TEMPORARI LY P AFTER BREAK,CONTAINS LAST PRESSED KEY FOR DISPLAYMSB=1 SETS REPEATEDLY SCANNED DISPLAY,OTHERWISE SINGLE SCAN.EXECUTION STATUS OF THE KEY PROCESSINGROUTINE

ADDRESS0000,00010002,00030004,00050006,00070008,0009000A000B000C000D

LABELMAPGAPPAPFAPTAPR0R1R2R3, KEY

000E

000F

REPEAT

EXEC

Page 9: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

ocx.O<

2O<

Q.

O-JDCcom<N

co

LJJ

ON O N

D C *O3

Si-

DCDQ

Qu

LUDCN

QocZuu<N

I -LZLUCON

Or;

o*DC<

< <

< <

OKDCW

z<N

DC DCCOLLJJN

egOLULUN

DC

°5LJJ <

HI <

u

Ox

LUN

DC>-

OcoQ CD

CJLU

QC

9= Q

< ^

O LLJLL N

Q LJJ

<N

8K< —

DC

Ooc<

8<<

8<N

OXDCI— UJLorn

O<DC

CON

CON

corw

com

lcorw

xgQLU-IN

<DCQLU-IN

DCQ LU-IN

Q

U

OUDCLU LUQfkl

2uru

Q_ LJJ

UN

U 3

U

Q

HI ^\

U <

LLJ ^ \

Qrvi"

I*

U

X

•y LU£N

oCQLUCON

XQ_ HION

00 -CO-3

CO <

co<

CQCON

CO-3

LU

O

<

2.2 THE MONITOR COMMANDS M r t , lTHE FIRST FEATURE OF THE MONITOR IS THE MEMORY INSPECT & MODIFYCONTROL SWITCH ON, AND PRESS THE RESET BUTTON:

MODE DATAADDRESS

THEN PRESS THE MODIFY KEY, M. THIS GETS YOU INTO THE MEMORYINSPECTION AND MODIFY MODE. THE MODE INDICATOR SHOWS'A' FORALTER. THIS Fl RST PHASE OF 'A' ALLOWS YOU TO CHOOSE ANY ADDRESSIN MEMORY.

A. X X X XAPPEARS ON THE DISPLAY, WHERE X REPRESENTS

ANY OF THE 16 HEX CARACTERS SIGNIFYING THE ADDRESS.NOW PRESS THEKEYS F, E, 0, 0 (IF YOU MAKE A MISTAKE, E.G. PRESSED F, D, JUST STARTOFF FROM THE F AGAIN). AS EACH KEY IS PRESSED THE INFORMATIONON THE DISPLAY SHIFTS TO THE LEFT:

A.A.A.A.

X X X FXX F EXF E0FE00

AND SO YOU END UP WITH FE00ONTHE DISPLAY. PRESS ANY OF THE EIGHTCOMMAND KEYS (IT DOES NOT MATTER WHICH) AND YOU CAN INSPECT THECONTENTS OF THIS MEMORY ADDRESS. THIS IS PHASE TWO OF MODE 'A' ANDALLOWS YOU TO INSPECT AND ALTER THE DATA OF THE MEMORY ADDRESSCHOSEN IN PHASE ONE.

A. F E 0 0 A0

THIS ISTHE INFORMATION STORED AT THE VERY BEGINNING OF THEMONITOR. IF YOU PRESS THE t KEY

A. F E 0 1 . 0 6

UP WE GO. NATURALLY THE4, KEY BRINGS BACK

A. F E 0 0 . A0

AND EITHER KEY MAY BE USED ANY NUMBER OF TIMES IN SUCCESSION. NOW,IF, WITHOUT TURNING OFF, YOU PRESS RESET

Page 10: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

AND THENM

A. F E 0 0

THE SYSTEM HAS REMEMBERED THE ADDRESS YOU WERE USING (WHICHDOESN'T HAVE TO BE FE00) TO INSPECT MEMORY NOW ENTER THE ADDRESS0030 AND TERMINATE WITH ANY COMMAND KEY

A. 0 0 3 0 X X

0030 IS AN ADDRESS IN THE ALTERABLE SECTION OF THE MEMORY.PRESSING DIGIT KEYS NOW WILL CAUSE THE INFORMATION IN0030TOCHANGE (WHAT HAPPENS AT FE00?? TRY IT! YOU CANNOT WRITE INTO THEMONITOR PROM, (i.e. THE PROGRAMMABLE READ ONLY MEMORY). PRESS 0, 1.

PRESS 2.3

A.

A.

0030

0030

01

23

AS BEFORE INFORMATION ISSHIFTED IN UNTIL TERMINATED BY ANYCOMMAND KEY. BUT, UNLI KE THE ADDRESS FETCHING PHASE, THE COMMANDKEY Wl LL BE EXECUTED. USEFUL TERMINATORS ARE THE M, t & I KEYS.PRESS t .

A. 0 0 3 1 X X

PR ESS 4,5

A. 0 0 3 1 45

PRESS 4-

A. 0 0 3 0 23

& t AGAIN

0 0 3 1 45

YOU CAN GO UP AND DOWN INSPECTING & MODIFYING THE MEMORYCONTENTS IF THERE IS NO ALTERABLE MEMORY (E.G. A PROM) AT APARTICULAR ADDRESS, THE INFORMATION WILL NOT CHANGE. TO CLOSETHIS SECTION WE'LL MAKE THE MONITOR DO A LITTLE TRICK. M,0,0,0,E, k( k = ANY COMMAND KEY)

cc

o

flU

LA

oO

TH

AN

ccUJI

CO

ccUJ

5UJcc

oDC

QZ

>

<

x̂<

LU

D_ J

OCOCO

*^

N

X.N

ODCUJN

QUJ

I/MlCJ

ESS

IN

DC UJ

Q QQ O

FLA

GS

<DODCLU

>CJ

OIAI3N

I

2.

COLU m

j _ , _

CO K

CO ID

CO • * •

CO ^t

co «?r

CN <tf

CN <3"

CN CO

CN CN

zt

t

t

<<

1

1

1

CJCN

1

1

CN

1

MJZ

CO

)W!T

HE

ST

BIT

I—I LLJ

Z H<Q—1 ^ .

__ iZO coO<

t

CO

1X

1

1

1

uUJ

1

1

LU

UJ

CJruz

XUJDC<CL

Ou

XQ .CJ

1>

1

1

1

0CJ

1

1

CJ

§

CJMJz

LUDC<Q .

OCJ

Q_

CJ

I

t

\( j0 -

t

0CD

1

1

<^

1

1

1

1

1

a.

Q_

—3

Xt

1

UJCO

1

UJ

COCO

1

<

<

MJ

t

1

1

CJCO

CJ<

1

a

t

NJZ

STE

RS

TER

RE

GI

XQ

- I

XQ_ l

RE

GI

Q

_J

Q_ j

tX

1

1

1

LU00

CO

1

CO00

1

ISTE

R

t>

1

1

1

CJ00

1

O)

00

1

ISTE

R

LU LLJDC DC

XLUccO

CO

X

CO

>-LUDCOCO

>

CO

CO \-

UJ

E1

>LL5

1O

UJOC

x<

COCO

<

ZE

RO

ING

COCOUJDC LU

Q QQ O< 2

CO

0

FLA

_J

CODCUJ

>

CJ

ION

3NI/M

CO

CO

CN

CN

CO

CO

LO

1-LL

I

TIC

S

LU

RIT

H

<

AS

L

UJ

UJ0

CO

s

CJ

z

EF

T

—i

LUQ

UJCJ

CDQ

8

MJZ

LU

DEC

R

1—1

INA

R

CO

DE

C

UJLL

LULJJ

CDLL

COUJ

MJZ

EN

T 1

111

NC

RE

DC

zCO

INC

UJin

UJ

s

CJMJZ

h-

SH

IF

<r

OG

ICLS

RIG

HT

cc

UJCO

LUCN

8

CDCN

CJMJZ

LEF

T

UJ

OT

AT

DC

RO

L

LU

HICO

CD

§

CJMJZ

1-

RIG

H

LU

OT

AT

DC

DC

ODC

CJ

zCO

EC

RO

SPA

GE

.VE

S

O

ION

1

<r

DPE

R,

LL

CLE

1

CJ

DC

XUJ

UJ0

a.

%0ccCJ

NC

H&

BR

A

LL

CN

ICJ

BR

Ah

LL

+I

uzDCDO

O

LL

Page 11: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

LLI

DC

OCO

I

DC

liltI8l| DC q

LU - IQ_ _ l

O <I I

8LU

DC

Q

Q

<

DC

O

DCJ

3

LUQCQQ<DCO

D

UO<

COCOLUDCQQ

DCO

D^DCJCJ

O

iEX

I> DC

0- ZO LLJ

I

oDCco

00

t

JUI

u u o oQ_ Q_ Q_ Q. Q-

r-i n t t t t t- L , I . CO CO CO CO CO

1 1 I+ + I

IllllSSSSQ

CO CO CO CO CO

t t t t t x , x < w <

+ + + + + t t t t t tcococococo<<coXX>-

CN(N(NCN<NCNCNJCNCN CM CM CM CM CN CN

Qi OO C D ^ O O O O C D ^

D Q U O I U U ^< CO < < < 00< < CD 00 O) O)

DO

uN ru ru rvi ru

C J O - > Z Z Z Z ZMJ - I

z <uru

uru ru ru ru rtJ ru ru

z z z z z z

CO

LU CO

8

CO CO

LLJDCCO

I

CO

DCDCDCOCcCDCDCCCCJ

LJJLULULuSSSSo_ J _ I _ J _ I ± ± ± ± OCJCJCJCJCOGOCOCO-I

f-coDC

oLU(JODC

HcoDC

oCOCOLUCJo

tDDCDCLU

< 2zo

DC

- co co -J - i

Z O_ Q_ O_ O_

LLLU

ODC

IoDC

LU

5DC

oDC

DCD

I-ODCCODCO

ODCLL

zDCDLUDC

> X < W <

o o o o oh l h h< < co X X >

DC DC DC DC DC DCLU LJJ LU LU LULL LL LL LL LLCO CO CO CO COz z z z z< < <DC DC DC DC DChhhhh

U Q _ > X >J l J J L U L U

<LT

CO U U U U Q Q ± - - l ZQ.Q.Q.Q.

-J DC _O O I-DC DC DC

COHDC

PRESS 1,6. (IF YOU GET BORED, YOU CAN GO THE OTHER WAY BY 1,7)(ESCAPE BY RESET). THE MONITOR SCANS THROUGH ALL MEMORYSUCCESSIVELY SHOWING ITS CONTENTS (DATA). WHERE THERE IS NOMEMORY AT ALL YOU WILL PROBABLY SEE THE FIRST TWO ADDRESSDIGITS.

2.3 AT LAST, A PROGRAM2.3.1 ASSEMBLY LANGUAGE, MACHINE LANGUAGE, THE INSTRUCTIONS

LOAD, STORE AND JUMPA PROGRAM IS THE NAME FOR A SET OF STORED COMMANDS THAT THEMICROPROCESSOR WILL EXECUTE. THESE ARE STORED IN BINARY, SINCETHAT'S ALL THAT ANYTHING CAN BE STORED IN, (ENTERED BY YOU IN HEX)AND ARE INDISTINGUISHABLE FROM ANYTHING ELSE. IF IT GETS THECHANCETHE/xP (MICROPROCESSOR) WILL BUSY ITSELF TREATINGINFORMATION WHICH YOU MEANT AS DATA AS A PROGRAM. IT PROBABLYWONT BE DOING ANYTHING INTELLIGENT AND Wl LL HAVE TO BESUMMONED BACK WITH THE RESET KEY. SOME SORT OF TRANSLATIONBETWEEN THE STORED BINARY/HEX AND YOU IS NEEDED. 101011012 MEANSA GREAT DEAL TO THE/xP BUT LITTLE TO YOU. IT ACTUALLY MEANS "LOADTHE ACCUMULATOR WITH THE CONTENTS OF THE MEMORY ADDRESSDEFINED BY THE FOLLOWING TWO BYTES, OF WHICH THE FIRST IS THELEAST SIGNIFICANT ADDRESS". THIS ISA LITTLE LONG FOR WRITINGSTRAIGHT INTO A PROGRAM AND IS USUALLY ABBREVIATED TO LDAABS,OR JUST LDA.ABSOLUTE MEANS ANYWHERE IN THE 64K. THE 6502 CANADDRESS 64K OF MEMORY WHICH IS DIVIDED INTO PAGES 256 BYTES LONGTHE FIRST PAGE IS CALLED ZERO PAGE. LOCATIONS IN ZERO PAGE CANBE ADDRESSED BY JUST ONE BYTE. THERE ARE SPECIAL INSTRUCTIONS TODO THIS. AT THE END OF THE MANUAL THERE ISA LIST OF ALL THESEMNEMONICS WITH THEIR HEX EQUIVALENTS IN APPENDIX B. SO IF WE WROTETHE PROGRAM IN MNEMOMICS ITW0ULD LOOK LIKE.

LDAFE00AND WE WOULD TRANSLATE IT FOR THE JUP AS THE THREE BYTES

AD LOAD ABSOLUTE00 LOWER BYTE OF ADDRESSFE HIGH BYTE OF ADDRESS

WHICH WOULD CAUSE THE JUP TO PUT A0 (THE DATASTORED IN FE00) IN ITSACCUMULATOR (REMEMBER USING THE MONITOR TO LOOK AT FE00?). THETRANSLATION PROCESS IS CALLED ASSEMBLING AND COMPUTER PROGRAMSWHICH DO IT ARE CALLED ASSEMBLERS. A RESIDENT ASSEMBLER IS ONETHAT RUNS (OPERATES) ON THE SAME MACHINE THAT IT ASSEMBLES FOR;A CROSS ASSEMBLER RUNS ON A DIFFERENT MACHINE. THE MNEMONICSLDA, STA etc ARE OFTEN CALLED ASSEMBLY LANGUAGE, THE GENERATEDBINARY IS CALLED MACHINE CODE.WE CAN LOAD THE ACCUMULATOR IN TEN OTHER WAYS; HERE ARE TWO OFTHEM.

Page 12: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

INSTRUCTIONLENGTHINBYTES TYPE

2 1HEXA9

MNEMONICLDA#

EXECUTIONTIMERS

2BRIEF EXPLANATIONPUT THE NEXT BYTEACCUMULATOR. "LOADIMMEDIATE'.

2 2 A5 LDA Z 3 SHORTENED FORM OFLOAD ABS 00XX 'LOADZERO PAGE'.

3 3 AD LDA 4 LOAD A ABSOLUTE.THE FIRST OF THESE INSTRUCTIONS IS VERY IMPORTANT. IF WE KNOW THATWE WANT A0 IN THE ACCUMULATOR THEN IT IS WASTEFUL TO FIND AMEMORY LOCATION WHICH HAPPENS TO CONTAIN IT, SINCE TWO BYTES ARENEEDED (GENERALLY) TO SPECIFY WHERE IT IS AND SO WE IMPLY, BY THEIMMEDIATE INSTRUCTION, WHEHE IT IS & ACTUALLY ENTER IT IN THEPROGRAM. THERE ARE COMPLEMENTARY STORE ACCUMULATOR 'STA'INSTRUCTIONS TO LDA 2-AND LDA.BYTES

2TYPE

2HEX85

MNEMONICSTAZ

TIMERS2 STORE A ZERO PAGE

(IN THE FIRST 256 BYTES)3 3 8D STA 3 STORE A ABSOLUTE

(ANYWHERE IN MEMORY)WE CAN ALSO LOAD THE PROGRAM COUNTER. THE PROGRAM COUNTER IS ANINTERNAL REGISTER THAT POINTS TO THE NEXT LINE OF THE PROGRAM.THE MNEMONIC FOR THIS IS NOT LDPC BECAUSE WHEN THE P.C. IS LOADEDWITH A NEW VALUE IT GIVES THE MICROPROCESSOR A Dl FFERENT PLACE TOLOOK FOR INSTRUCTIONS: THE PROGRAM JUMPS. SO 'LOAD P.C. WITH NEXTTWO BYTES' (LDPC ) IS JMP, THIS IS REFERRED TO AS JUMP ABSOLUTESINCE THE PROGRAM JUMPS TO A NEW ABSOLUTE ADDRESS. SO IF WE ARENOT IN THE MONITOR ANDWANTTO BE,JMP FF04WILL ENTER THE MONITOR.NOW WHAT HAPPENS IF THE FOLLOWING PROGRAM IS RUN?

LDA FE00STA Z 20JMP FF04

THE FIRST INSTRUCTION GETS THE CONTENTS OF FE00, AND PUTS IT IN THEACCUMULATOR. THE SECOND STORES THE ACCUMULATOR IN LOCATION0020JHE FIRST TWO 0'S REFER TO ZERO PAGE AND ARE ASSUMED BY THEPROCESSOR IN THE ZERO PAGE MODE. THE THIRD GETS BACK TO THEMONITOR, SO THAT YOU CAN INSPECT LOCATION 20. THIS READS AS.00300031003200330034003500360037

AD (OPCODE)00 (DATA)FE (DATA)85 (OPCODE)20 (DATA)4C (OPCODE)04 (DATA)FF (DATA)

LDA

STA

,! JMP

FE00

Z20

FF04

II RELATIVE: RELATIVE ADDRESSING MODE

2 BYTES 2+t CYCLES

MNEMONIC

BCCBCSBEQBMIBNEBPLBVCBVS

VERBAL

BRANCH IF CARRY CLEARBRANCH IF CARRY SETBRANCH IF EQUAL (TO ZERO)BRANCH IF MINUSBRANCH IF NOT EQUALBRANCH IF PLUSBRANCH IF OVERFLOW CLEARBRANCH IF OVERFLOW SET

90B0F030D0105070

BRANCH IFC = 0C=1Z = 1N = 12 = 0N =0V = 0V = 1

Page 13: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

SE

T

AC

CU

MU

LA

TO

R,

OP

ER

AT

ION

, M

EM

OR

Y -•

AC

CU

MU

LA

TO

R

AP

PE

ND

IX B

INS

TRU

CTI

ON

1 A

CC

UM

UL

AT

OR

RE

FE

RE

NC

E: ,

AD

DR

ES

SIN

GM

OD

E

IMM

ED

Z

ER

O

Z,X

A

BS

OL

UT

E

A,X

A

,Y

(I,X

) (|

),Y

VE

RB

AL

MN

EM

ON

IC

BY

TE

SC

YC

LE

S =

SP

EE

D JU

S

2 2

23

33

22

2 3

4

4

4

+4

+6

5+

FL

AG

S I

N P

AF

FE

CT

ED

< <t t

• + t t t +2 2 2 2 <2 2+ t 1 > t > 1< < < < 2 < <

r> co Q incDr- LL

69

65

75

6D

7D

79

6

129

25

35

2D

3D

39

21

C9

C5

D

5

CD

D

D

D9

C

1

49

45

55

4

D

5D

59

4

1A

9 A

5

B5

A

D

BD

B

9

A09

05

1

5

0D

1D

19

01

E9

E5

F5

E

D

FD

F

9

E1

O cj cjN IU ru rw IU rw mz z z z z z z

AD

D W

ITH

CA

RR

YL

OG

ICA

L A

ND

LO

GIC

AL

CO

MP

AR

EL

OG

ICA

L E

XC

LU

SIV

EO

RL

OA

D A

CC

UM

UL

AT

OR

LO

GIC

AL

OR

SU

BT

RA

CT

WIT

HB

OR

RO

W/C

AR

RY

UQlDC < < oQ Z 2 O QO=m< < UUJ -i O c/)

2t<

- 85

95

8D

9D

99

8

1

91

ST

OR

E A

CC

UM

UL

AT

OR

ST

A

THE ADDRESS 0030 IS THE STARTING ADDRESS OF THE PROGRAM. THISPARTICULAR PROGRAM WILL WORK WITH ANY STARTING ADDRESS - IT ISSAID TO BE 'POSITION INDEPENDENT' OR 'RELOCATABLE' - BUT OTHERPROGRAMS MAY NOT. IF YOU ARE NEW TO THE GAME, IT WILL BE EASIER IFYOU ENTER PROGRAMS AT THE STARTING ADDRESS SHOWN IN THE MANUAL.

2.3.2 ENTERING A PROGRAM, THE GO COMMANDTO ENTER THIS PROGRAM, WE'LL GO THROUGH IT STEP BY STEP.I ENTER THE STARTING ADDRESS: PRESS M,0.0,3,0, kII ENTER A BYTE OF DATA A,DI11 USE THE t KEY TO TERMI NATE DATA ENTRY AND STEP UP

- CONTINUE WITH 0/0^F/E/t,8/5,t,2,0,t,4,C,t,0,4,t,F,FIV CHECK THAT THE PROGRAM IS ENTERED CORRECTLY BY, E.G, USING I

TO GO BACK DOWN THROUGH IT.- REMEMBER THAT MISTAKES AT KEY ENTRY (E.G. PRESSED 8,6) MAY BECORRECTED BY CONTINUING (PRESS 8,5) -

NOW THAT THE PROGRAM IS LOADED PRESS ONLY ONCE THE 'GO' (G) KEY

K. XXXX

APPEARS THE K ( R.) REMINDS YOU OF TWO THINGS: X THIS IS A DIFFERENTSTORED ADDRESS TO THE A. ADDRESS.1L YOU CANT GO BACK! (UNLESSYOU EITHER PRESS RESET OR ENTER ADDRESS FF04.THE MONITOR ENTRYADDRESS, AND GO) THE NEXT COMMAND KEY YOU PRESS Wl LL CAUSE THE/zPTO DO A KAMI-KAZE DIVE TO THE ADDRESS SHOWN, SO ITS AS WELL TOGET IT RIGHT!! ENTER 0,0,3,0

K. 0 0 3 0

AND PRESS ANY COMMAND KEY. NOTHING HAPPENED? WELL IT DID, REALLY.IT JUST HAPPENED VERY QUICKLY:

PROGRAM EXECUTION TIMES,juSLDA FE00 4STA Z 20 3JMP FF04 3

TOTAL 101OMSITTOOKTENMILLIONTHSOF A SECOND TO HAPPEN. WE'RE NOW BACK INTHE MONITOR. PRESSING ANY DIGIT KEY WILL CAUSE THE (BY NOW)FAMILIAR DOTS TO REAPPEAR. PRESS M,0,0,2,0 k :

A. 0 0 2 0 A0

WHICH CHECKS THAT THE PROGRAM ACTUALLY DID WORK. YOU COULDCHANGE 0020 AND RUN THE PROGRAM AGAIN BY THE KEYS

F, F, G,G,M, MWHICH SUCCESSIVELY PUT FF IN 0020, RUN THE PROGRAM AND RE-EXAMINE

Page 14: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

LOCATION 0020. A LOT QUICKER FOR YOU THE SECOND TIME, WASN'T IT?THIS ISBECAUSEM&G REMEMBER WHAT THEY WERE POINTING AT. LET'SMAKE THE PROGRAM BETTER. AT THE MOMENT WE HAVE NO IDEA IF IT RAN,AND WE DON'T KNOW IF IT RAN CORRECTLY UNTIL WE LOOK AT 0020. IF THEPROGRAM WROTE OUT THE BYTE ON THE DISPLAY AS WELL AS STORING ITIN 0020, WE'D KNOW THAT IT HAD ALL HAPPENED. INSIDE THE ACORNMONITOR PROGRAM IS A SET OF INSTRUCTIONS TO WRITE A BYTE ONTO THETWO RIGHT HAND DISPLAY DIGITS. THIS PROGRAM IS LOCATED AT FE60 ANDEXPECTS THE BYTE TO BE DISPLAYED TO BE IN THE ACCUMULATOR, WHICHIT IS. THE PROGRAM DESTROYS THIS BYTE AS IT PUTS IT ONTO THE DISPLAYSO WE MUST PUT IT IN 0020 BEFORE USING THE PROGRAM.2.3.3 INSTRUCTIONS JMP, JSRIF WE SIMPLY WENT JMP FE60 THIS WOULD CORRECTLY EXECUTE THEPROGRAM BUT WE WOULD BE LEFT IN THE MIDDLE OF THE MONITOR SOME-WHERE SINCE THE PROGRAM DOES NOT HAVE AN ADDRESS TO JUMP BACKTO. WE CAN GIVE IT SUCH AN ADDRESS WITH THE INSTRUCTION JSR (OPCODE20 HEX) THIS IS EXACTLY LI KE A JUMP BUT IT SAVES THE PROGRAMCOUNTER BEFORE JUMPING. THEN THE SINGLE BYTE INSTRUCTION RTS(OPCODE 60 HEX) RESTORES THE PROGRAM COUNTER AND WE GET BACKAGAIN. JSR IS "JUMP TO SUBROUTINE" AND RTS IS "RETURN FROMSUBROUTINE". THE PROGRAM AT FE60 HAS AN RTS ATTACHED AT ITS END,ANDSOCANTRANSFERCONTROLBACKTOTHE PROGRAM WHICH CALLED IT.OUR NEW PROGRAM IS 3 BYTES LONGER:

APPENDIX A64 CHARACTER ASCII ON ACORN'S 7 SEGMENT DISPLAY

00300031

00330034003500360037

'00380039003A

AD00FE8520

"20"60FE

'4C04FF

LDA FE00

STA Z 20

JSR FE60

JMP FF04

AND WE Wl LL HAVE TO ENTER 6 BYTES FROM 0035 TO 003A WITHM,0,0,3,5, k , 2,0, t,6J3/T,F,E,t,4,C,t,0,4,t,F,F. WE HAVEN'T CHANGED THE STARTOFTHE PROGRAM SO G, G WILL RUN IT.

ASCII CODE0123456789ABCDEF

101112131415161718191A1B1C1D1E1F

DISPLAY

anbdEFGh

i

ZiR

nBpqr~

5.b=i i.

L_l

u95.CHZln

CHARACTER@ABCDEFGH1JKLMN0PQRSTUVwXYz[\]A

HEX5F777C585E79713D34050D753837545C736750ED789C1C7E496EBD39640F2308

ASCII CODE202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F

DISPLAY

I.I I

•c1—

E

C.Zl.H

i—

•1

E3H56"IBg

\i.

H

P.

CHARACTER

1

#£%&

()*+

-

10123456789

<=)?

HE008622633B2D7BffiB98F7642044080523F065B4F666D7D077F6F8284464870D3

K. 0 0 3 0 A0

APPEARS MEAN ING THAT 0020 HAS AGAIN HAD A0 WRITTEN INTO IT.INSTEAD OF STORING THINGS IN 0020, LET'S USE ITS INFORMATION AS PARTOF A LOGICAL OPERATION.

Page 15: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

PROGRAM. THE STRATEGY OF THE PROGRAM IS NOT OBVIOUS, AND IS LEFTAS AN EXERCISE TO THE READER. A SMALL PRIZE Wl LL REWARD THESUBMISSION OF A SHORTER, FASTER PROGRAM; NOTE THAT WORKSPACEREQUIREMENTS CONTRIBUTE TO THE LENGTH!

8 QUEENS PROGRAM

020002010203020502070209020B020E0210021302160218021A021C021E022002220223022502270228022A022C022E022F023002320233023502370238023A023B023D023E024002410243024402470248024A024C024E02500253

F8A28484848420A5204CB5C9D0A56985601515A849F095C89835A8159598150A9598154A95E820CAB54935494C

201F202932161F600400FF071F001F

0912

FFF618

1B

0001

09

0A

12

13

16

01FF1BFF27

MAIN

02

FEFF

TRY

FINISH

LOOP

02

02

SEDLDX #20STY COUNTSTY ROWSTY LEFTSTY RIGHTJSR TRYLDA COUNTJSR RDHEXTDJMP RESTARTLDAZX 00CMP#FFBNE CONTINUELDA COUNTADC #00STA COUNTRTSORAZX09ORAZX 12TAYEOR#FFBEQ FINISHSTA2X 1BINYTAYANDZX 1BTV\YCRAZX 00STAHX 01TYAORAZX 09ASLASTAZX 0ATYAORAZX 12LSRASTAZX 13INXJSR TRYDEXLDAZX 01EOR #FFANDZX 1BEOR#FFJMP LOOP

- CLEAR COUNT- CLEAR ROW OCCUPIED- CLEAR LEFT DIAGONAL ATTACKS- CLEAR RIGHT DIAGONAL ATTACKS- FIND THE NO OF WAYS

- DISPLAY ANSWER

- FINISHED YET?

- FINISHED, SO INCREMENT COUNT

- CURRENT LEFT- CURRENT RIGHT

- NO CHANCE- CURRENT POSSIBLE PLACE

- NEW ROW

- NEW LEFT ATTACK

- NEW RIGHT ATTACK

2.3.4 THE LOGIC INSTRUCTIONS 'ORA', 'AND', 'EOR'.IF WE PUT 601 6 IN LOCATION 0020 (M,0,0,2,0, k, ,6,0 : YOU SHOULD KNOW BYNOW) AND ALTER THE STA Z INSTRUCTION AT 0033 TO, SAY, ORA Z (OPCODE05 HEX) (THE PROGRAM READS LDA FE00

ORA Z20JSR FE60JMP FFQ(4)

WE HAVE A PROGRAM THAT DISPLAYS THE LOGICAL yOR' BETWEEN THECONTENTS OF FE00 (A0) AND 0020, (60). THE HEX FOR ORA Z IS 05 AND ITCARRIES OUT A LOGICAL 'OR' BETWEEN THE ACCUMULATOR AND THESPECIFIED LOCATION IN Z PAGE. M,0,0,3,3, k 0,5 IS THE MODI FICATIONTO THE PROGRAM, THEN SINCE WE STILL START AT 0030, G,G RUNS IT :

K. 0 0 3 0 E0

THE OPERATION WAS 'OR' A060E0

or

1010000001100000 or11100000

TRY CHANGING 0020 TO 40 AND RUNNING THE PROGRAM AGAIN IS THEANSWER WHAT YOU EXPECTED?WE CAN CHANGE 0033 TO MAKE THE PROGRAM DO LOGICAL 'AND' OR'EXCLUSIVE - OR'. THE MNEMONICS AND OPCODES ARE:

LOGICAL AND ACCUMULATOR AND Z PAGEMEMORYLOGICAL EXCLUSIVE-OR ACCUMULATOR ANDZPAGE MEMORY

AND THE PROGRAMS WOULD READ

AND

EOR

Z

Z

251 6

451 6

LDA FE00AND Z 20JSR FE60JMP FF04

LDA FE00EOR Z20JSR FE60JMP FF04

BY NOW YOU MUST BE GETTING TIRED OF THE A0 IN FE00 SO WE'LL CHANGETHE PROGRAM TO READ

LDA Z21EOR Z20JSR FE60JMP FF04

THE SPACE TAKEN UP BY LDA Z 21 IS ONE BYTE LESS THAN THAT USED BYLDA FE00. WE COULD SIMPLY WRITE THE NEW TWO BYTES IN AT LOCATIONS0031 & 0032 AND CHANGE THE GO ADDRESS TO 0031. THIS IS VERY SIMPLEHERE SINCE THAT IS ALL WE HAVE TO DO. BUT IF THERE WERE MANYREFERENCES TO 0030 AS THE START OF THIS PROGRAM IT WOULD TAKE ALONG TIME TO FIND AND CHANGE THEM ALL, AND IF WE DIDN'T CHANGETHEM ALL SOMETHING WOULD GO WRONG. WE CAN'T MOVE THE REST OFTHE PROGRAM DOWN ONE BYTE: SOMETHING MIGHT BE REFERRING TO IT.THE PROBLEM ARISES BECAUSE LDA Z IS SHORTER THAN LDA. WE COULDSIMPLY USE LDA WITH A ZERO PAGE ADDRESS BUT THIS TAKES A WHOLE /iS

Page 16: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

LONGER THAN LDA H! THE SOLUTION IS TO USE LDA Z AND TO INCORPORATEAN EXTRA BYTE IN 0030 AS PADDING. THIS MUST BE A SINGLE-BYTEINSTRUCTION, THAT DOES NOTHING TO AFFECT THE PROGRAM, AND ONE ISSPECIFICALLY PROVIDED

NOP EATHE PROGRAM READS0030 EA0031 A5 21

'NO OPERATION"

0033 45

0038 4C04FF

NOPLDA 2 21EOR Z20JSR FE60JMP FF04

-NOTICE THE MORE COMPACT MODE OF WRITING IT DOWN. THIS IS MORECONSISTENT WITH THE WAY MNEMONICS ARE WRITTEN. IT IS EXACTLYEQUIVALENT TO0030 EA NOP0031 A5 LDA Z 210032 210033 45 EOR 2200034 200035 20 JSR FE600036 600037 FE0038 4C JMP FF040039 04003A FFAND IT WILL BE USED THROUGHOUT THE REST OF THE MANUAL:THIS PROGRAM TAKES THE CONTENTS OF (WHICH MAY BE WRITTEN BYPUTTING BRACKETS AROUND THE PARTICULAR ADDRESS) 0020 & 0021 ANDPRESENTS THEIR LOGICAL EXCLUSIVE - OR ON THE DISPLAY. APART FROMTHEIR LOGICAL FUNCTIONS, THESE OPERATORS ARE OFTEN USED TOMANIPULATE SINGLE BITS. FOR INSTANCE ORA #01 WOULD SET BIT 0 OF THEACCUMULATOR, AND #FE WOULD CLEAR IT AND EOR #01 WOULD COMPLENTIT, ALL WITHOUT AFFECTING ANY OTHER BITS IN THE ACCUMULATOR.

2.3.5 ARITHMETIC INSTRUCTIONS 'ADC, 'SEC, CLC'.FROM LOGIC OPERATIONS WE PROGRESS AGAIN TO ARITHMETIC. LOOKINGAT ORA Z, EOR Z, AND Z WOULD LEAD ONE TO ASSUME THE EXISTENCE OFADD Z. WELL, THERE ISN'T ONE, THERE'S ONLY ADC Z.BYTES: 2 ADC Z 65 "ADD WITH CARRY, ZERO PAGE"

1 SEC 38 "SET CARRY FLAG"1 CLC 18 "CLEAR CARRY FLAG"

THIS IS MOST UNUSUAL AND A TRAP FOR UNWARY PROGRAMMERS,ESPECIALLY THOSE USED TO /iPs WHICH POSSESS AN ADD INSTRUCTION: THECARRY FLAG MUST BE CLEARED BEFORE AN ADC (OR IT MUST BE IN AKNOWN STATE E.G. f SEC = f CLC

1 ADC # 0 0 1 ADC #01 OR'UNEXPECTED' ANSWERS Wl LL APPEAR. WHEN THE juP LEAVES THE MONITORUSING THE GO ROUTINE THE CARRY FLAG IS SET: FAILURE TO CLEAR ITBEFORE AN ADC RESULTS IN AN ANSWER 1 GREATER THAN EXPECTED.

THE METRONOME PRODUCES A PULSE AT THE TAPE OUTPUT PIN, PA6, WITH AREGULAR PERIOD. THE "UP" AND "DOWN" KEYS WILL INCREASE ANDDECREASE THE PERIOD RESPECTIVELY. WITH SUITABLE ADDITIONALCIRCUITRY THIS COULD DRIVE A LOUDSPEAKER OR A 'STROBE' LIGHT. INFACT A SMALL SOUND CAN BE OBTAINED BY SIMPLY CONNECTING A LOUD-SPEAKER ACROSS THE TAPE OUTPUT AND EARTH PINS.THE CONSTANTS USED AT PRESENT MEAN THAT THE PULSE IS OF 1/300 SEC.AND THE DELAY BETWEEN PULSES CAN BE VARIED FROM 1/20 SEC. TOABOUT 13 SECS. YOU CAN DEFINE THE PERIOD BEFORE STARTING THEPROGRAM BY PUTTING THE REQUIRED VALUE INTO MEMORY LOCATION0020. 20 WILL GIVE ABOUT 1 SEC BETWEEN PULSES, AND ANYTHING ELSEPROPORTIONATELY MORE OR LESS. ONCE THE PROGRAM IS RUNNING THE'UP' AND 'DOWN' KEYS WILL INCREMENT AND DECREMENT THE PERIOD BYABOUT 1/20 SEC EACH TIME THEY ARE PRESSED. THEY ALSO RESET THECYCLE. THIS FACILITY COULD USEFULLY BE USED FOR FINE TUNING BUTWOULD BE TEDIOUS FOR LARGE CHANGES OF PERIOD.

METRONOME

\DDR

02000202020402060209020C020F0212021402170219021B021D

021F022102230225

02270229022C022D022F023002320234

HEXCODE

A985A98D8D208DA620C9D0E6B0

C9D0C6B0

A0208810CAD0F0

1F0E402216CD

to200C160420E5

170420DD

0CCD

FA

E2D0

0E0EFE0E

FE

FE

LABEL

PULSE

DELZ

DOWN

DELIDELJ

INSTRUCTION

LDA#1FSTA REPEATLDA #40STA1ADDRSTA SET PI A6JSR WAITSTACLR PIA6LDXZ PERIODJSR DISPLAYCMP #16BNE DOWNINCZ PERIODBCS PULSE

CMP #17BNE DELIDEC^ PERIODBCS PULSE

LDY #0CJSR WAITDEYBPLDELJDEXBNEDEL2BEQ PULSE

COMMENTS

- SET DISPLAY TO SINGLE SCAN

- DEFINE PA6 AS OUTPUT- USE INS8154 SET BIT MODE- USE THE 300 BAND WAIT- USE IN58154 CLEAR BIT MODE

- LOOK AT KEYBOARD- UP KEY?- NO- INCREASE PERIOD- CARRY WAS SET BY THE COMPARE

ALWAYS- DOWN KEY?- NO- DECREASE PERIOD- CARRY WAS SET BY THE COMPARE

ALWAYS- CYCLE TIME OF flYS SEC.

- END OF THIS PERIOD SO PULSE

4THE EIGHT QUEENS PROBLEM IS TO FIND THE NUMBER OF WAYS IN WHICHEIGHT QUEENS MAY BE PLACED ON A CHESS BOARD WITHOUT ATTACKINGEACH OTHER. THE PROGRAM FINDS 92 WAYS SINCE IT COUNTS ROTATIONSAND REFLECTIONS, ALLPOSSIBLE POSITIONS ARE TRIED AS SOLUTIONS INTHIS HIGH SPEED RECURSIVE (I.E. IS DEFINED IN TERMS OF ITSELF)

Page 17: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

COUNTER KEYBOARD

ADDR

001D0020

0022002400260028002A002C002E00300032003500370039003B003E00N0041004300450048004B004D004F005100530056

0058005A005B

005D005D005F

HEXCODE

2090

C9F0C9F0D0C985F020C610302020

D0F02020D0F0A9852090

A960A9

A98560

COUNTER i

ADDF

0060006200640066006700690063006D006F007100730076

0C0A

071F0611F10019ED6019F7E26045

CFF6694FD9F61F0E0C03

00

FF

FF0E

FE

00

m00

0000

FE

LABEL

DISP

CHANGE

MORE

UP

DOWN

ZOOM

SUBROUTINE

\ HEXCODE

F6D0E638B0A5D0C6C6A22060

1A0D1B

081A021B1A1A64

LABEL

INCR

DECR

NOTUPDATE

FE

INSTRUCTION

JSR DISPLAYBCCCHANGE

CMP # ' 0 7BEQ DOWNCMP# 06BEQ UPBNE DISPCMP# 00STA COUNTBEQ DISP ^JSR INCR IDEC COUNT >BPLMOREBMI DISP )JSR INCR >JSR ZOOM

BNE DISP ?BEQ UP JJSR DECR >|JSR ZOOM IBNE DISP fBEQ DOWN JLDA#1FSTA0EJSR DISPLAYBCC STOP

L D A # 00RTSL D A # FF

L D A # FFSTA0ERTS

INSTRUCTION

INCCNTLBNE UPDATEINCCNTHSECBCS UPDATELDACNTLBNE NOTDEC CNTHDECCNTLLDX#IEJSR QHEXTD1RTS

COMMENTS

- START OF 001C- LOOK FOR KEY- CHECK IF CONTROL KEY CARRY

SET IF SO

INCREMENT NO OF TIME OF TEY

RAPID INCREMENT

RAPID INCREMENT

SET FOR ONE SCAN ONLY

CHECK IF KEY DEPRESSED CLEARIF ONE IS

RESET SO THAT JSR DISPLAYWAITS FOR INPUT

COMMENTS

ANOTHER TRAP FOR THOSE USED TO DIFFERENT juPs IS THE DECIMAL FLAG.INSTEAD OF A SINGLE "DECIMAL ADJUST" INSTRUCTION TO ADJUST THERESULT OF BINARY ARITHMETIC ON B.C.D. NUMBERS TO B.C.D. THERE ARETWO INSTRUCTIONSBYTES: 1 SED F8 "SET DECIMAL MODE"

1 CLD D8 "CLEAR DECIMAL MODE"WHICH INSTRUCT THE PROCESSOR TO DO AUTOMATICALLY (OR NOT DO) THEADJUSTMENT AFTER ARITHMETIC OPERATIONS. THIS RESULTS IN SHORTER,FASTER PROGRAMS FOR HANDLING B.C.D. ARITHMETIC WHICH, MERELYBY CHANGING THE DECIMAL MODE FLAG, Wl LL HANDLE BINARY ARITHMETIC.IN ORDER TO FULLY UTILISE THE /zP's POWER THE MONITOR SUBROUTINESFOR FETCHING KEYS & OUTPUTTING DATA TO THE DISPLAY HAVE BEENWRITTEN WITHOUT ARITHMETIC SO THEY MAY BE CALLED WITH THEDECIMAL FLAG SET OR CLEARED & THEY Wl LL NOT AFFECT IT.SO LET'S DO A DECIMAL ADDITION;

SEDCLCLDA Z 21ADC Z 20JSR FE60JMP FF04

OUR STANDARD PROGRAM HAS BEEN EXTENDED BACKWARDS BY ONE BYTE,THE SED INSTRUCTION. THIS SHOULD BE INCLUDED (BY ,0,0,2,F,$T<3-'—••-„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 THAT22 + 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 THEACCUMULATOR ON THE DISPLAY. IT PAYS NO ATTENTION TO THE CARRYFLAG, INDEED IT CHANGES THE STATE OF THE CARRY FLAG ITSELF, SOTHAT WE CANT IMMEDIATELY CALL FE60, HAVE IT WRITE ON THE DISPLAY& RETURN THEN WRITE OUT THE STATE OF THE CARRY SOMEHOW.WHAT WENEED IS:I SAVE THE CARRY FLAGII USE FE60III GET THE CARRY FLAG BACK & WRITE IT OUT SOMEHOWA FRENZIED SEARCH THROUGH THE MNEMONICS REVEALS THAT THERE ARENO MNEMONICS LIKE LDC (LOAD C) OR STC (STORE C)A CLOSER LOOK AT THE MICROPROCESSOR IS REQUIRED.

002 F00300081003300350038

F818A5 2165 2020 60FE4C04 FF

Page 18: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

CHAPTER 3: INSIDE THE 6502SO FAR THE PROCESSOR'S INTERNAL WORKINGS ARE

3.1 THE ACCUMULATOR, PROGRAM COUNTER, STATUS REGISTER

15PC

0 BIT NUMBER

I A I ACCUMULATOR

0| PROGRAM COUNTER

~C~l CARRY FLAG

F D I DECIMAL MODE FLAG

THE CARRY & DECIMAL MODE FLAGS HAVE BEEN TREATED SEPARATELY TODATE. THEY ARE ACTUALLY MEMBERS OF A SPECIAL REGISTER CALLED THEPROCESSOR STATUS REGISTER^.

N V B D

INTERRUPT DISABLE

ZERO (THIS FLAG 1 WHEN0 SOMETHING HAS BECOME 00)

] — CARRY

DECIMAL FLAG

BREAK COMMAND EXECUTED

OVERFLOW

NEGATIVE

CAN WE, THEN, USE LDP & STP? NO, THEY DON'T EXIST EITHER.(FUME). INORDER TO SOLVE THIS PROBLEM WE MUST INTRODUCE THE STACK.DID YOU WONDER JUST WHAT HAPPENED TO PC DURING A JSR? YOU WERETOLD THAT IT WAS'SAVED'. WHERE? HOW? IT WOULD BE TERRIBLE TO HAVETO SPECIFY WHERE IT HAD TO BE STORED. WHAT'S NEEDED IS SOME PLACEWHERE IT CAN BE PUT DOWN AND PICKED UP AGAIN. IT WOULD BE GOOD TOALLOW NESTED SUBROUTINES:

ADDR HEXCODE

0213 95 100215 A9 610217 CA0218 10 02

021A A2 07021C 95 10021E 86 200220 A2 0E

0222 20 0C0225 C5 200227 F0 050229 CA022A D0 F6022C F0 E1022E A9 1C0230 A6 200232 95 100234 A9 FF0236 85 0E0238 20 0C023B 90 C3023D 4C 04023F

LABEL

INSERT

OLDX

FE WAIT

HIT

€>FF \

INSTRUCTION

STAZ X 10LDA#DUCKDEXBPLOLDX

LDX #07STAZ X 10STX Z 20LDX #TIME

JSR DISPLAYCMP Z 20BEQ H1TDEXBNEWAITBEQ REMOVELDA #DEAD DUCKLDX Z 20STAZ X10LDA#F,F.ST&Z 0EJSR DISPLAYBCC BEGINJMP RESTART

COMMENTS

PUT NEW DUCK ONIN NEW POSITIONBUT NOT OVER THE END OF THEDISPLAY

- DISPLAY INTERVAL IS SET BY THEBYTE LOADED INTO X

- HIT?

FINISHED WAITTIMEPUTIN A DEAD DUCK

TEST FOR CONTINUATION

OR BACK TO THE MONITOR

MISCELLANEOUS1THE COUNTER PROGRAM COULD BE USED AS A SUBROUTINE IN A LONGERPROGRAM WHEN "JSR INCR" AND "JSR DECR" WOULD INCREMENT ORDECREMENT THE DISPLAY. IF THE PROGRAM APPENDED IS ALSO ENTEREDTHE DISPLAY WILL INCREASE OR DECREASE RAPIDLY IF "UP" OF "DOWN"KEYS ARE DEPRESSED. THIS Wl LL BE STOPPED BY ANY HEX KEY. IT Wl LLINCREMENT BY THE INDICATED AMOUNT IF KEYS 1-F ARE DEPRESSED ANDWILL IGNORE ALL OTHER KEYS.YOU SHOULD PARTICULARLY NOTICE THAT A JSR DISPLAY RETURNS WITHTHE CARRY BIT CLEAR AND THE ACCUMULATOR HOLDING THE VALUE OFTHE KEY PRESSED FOR THE NUMERICAL KEYS, AND THE CARRY BIT SET ANDTHE VALUES 0-7 IN THE ACCUMULATOR FOR THE CONTROL KEYS. IFMEMORY LOCATION 0E, WHICH IS DEDICATED TO THE MONITOR AND SHOULDNOT NORMALLY BE USED IN PROGRAMS, HAS THE MOST SIGNIFICANT BITCLEAR THEN JSR DISPLAY Wl LL SCAN ONLY ONCE, IF IT IS SET IT Wl LL WAITFOR A KEY TO BE DEPRESSED BEFORE RETURNING TO THE PROGRAM. IT ISA GOOD IDEA TO LOAD IT WITH ' IF' IF YOU WISH TO USE THIS FACILITY ASOTHER VALUES MAY CAUSE YOU DIFFERENT PROBLEMS. AGAIN SEE THEREST OF THIS MANUAL IF YOU REALLY WISH TO UNDERSTAND THE PROCESS.

Page 19: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

\DDR

027C027 E028002820284028602870289028B028D

028 F02910293029402960299029B029D029 F02A002A202A302A502AY02A902AC02AD02AE02 A F02B102B2

HE>C LABELCODE69466946694AB0C6D0A2

B595CA104CA9A295CA10D8A2A0B520

Q£CAD060

002A002B00

BF1FE803

24 BAT20

F900 0200 DSPGAP0710 CLEAR

FB

04mo**1F AROUND7A FEn

F6

INSTRUCTION COMMENTS

ADC #00LSR ANAL + 2ADC #00LSR ANAL+ 3ADC #00LSRABCSONEOFF - NOT A GOOD MOVEDEC COUNTBNECONT - KEEP CHECKING THE MOVELDX#03 - GOOD MOVE, TRANSFER TO

ACTUAL STACKSLDA2X POSSSTAZX STACKDEXBPL BATJMPHUMMOV - OPPONENT.LDA#00LDX #07STAZXD - CLEAR THE DISPLAY FIRSTDEXBPL CLEARCLD - CLEAR DECIMAL MODELDX #04 - DISPLAY STACKSLDY#01 0"?LDAZX STACK - 1JSR HEXTDhNY 3>e VWY T>£ yDEXBNEAROUND

THE DUCKSHOOT GAME IS A SPEED TEST: YOU HAVE TO SHOOT THE FLYINGDUCKS. THEY SUCCESSIVELY ENTER FROM THE RIGHT AND FLY TOWARDSTHE LEFT AT A SET SPEED. YOU SHOOT A DUCK BY PRESSING ITS CURRENTPOSITION ON THE KEYBOARD. THE LEFT MOST DISPLAY IS 0,THE RIGHTMOSTDISPLAY IS 7. WHEN A DUCK IS HIT IT DIES. THE GAME MAY BE RESTARTEDWITH ANY HEX DIGIT KEY

DUCK

ADDR

02000202020402060208020A020C020D020F0211

SHOOT

HEX

CvJucA9 1F85A9A28695CA10A9A6

0E00072010

FB0020

LABEL

BEGIN

CLEAR

REMOVE

INSTRUCTION

LDA#1FSTA Z 0ELDA #00LDX #07STX Z 20STAZX 10DEXBPL CLEARLDA #00LDX H 20

COMMENTS

- SINGLE SCAN DISPLAY ROUTINE

- CLEAR THE DISPLAY

- TAKE THE OLD DUCK OFF

MAIN PROGRAM

JSR ALBERT ALBERT PROGRAM

JSR ALGERNON - ALGERNON PROGRAM

RTS RTS

WE CANT JUST SAY THAT PC IS TO BE SAVED IN LOCATION, SAY, L & M - W EWOULDN'T GET BACK FROM ALBERT SINCE THE CALL TO ALGERNON WOULDHAVE DESTROYED THE NECESSARY INFORMATION IN L & M. (IT IS WORTHNOTING HERE THAT L & M COULD BE " C A L L E D " - 2 " C A L L E D " - 1 . THEN ACALL TO ALBERT AS A SUBROUTINE WOULD STORE THE RETURN ADDRESSJUST BEFORE THE START OF ALBERT ALLOWING NESTED SUBROUTINES ASABOVE. A PROBLEM IS THAT THIS DOES NOT WORK WITH READ ONLYMEMORY, LIKE THE MONITOR).3.2 THE STACK POINTERWE NEED SOMETHING WHICH WILL DECIDE WHAT L & MARE TO BE,DEPENDING ON WHICH SUBROUTINE WE ARE IN.AN OBVIOUS CHOICE IS TOUSE AN ARRAY OF MEMORY LOCATIONS, AND A VARIABLE WHICH POINTS TOTHE CURRENT LOCATION OF L & M.EACH TIME WE DO A JSR WE STEP UP THEPOINTER & EACH TIME WE DO AN RTS WE STEP IT DOWN.

RETURN ADDRESS ARRAY

[POINTER I '

WITH ACORN WE'LL NEED TWO BYTES FOR EACH RETURN ADDRESS. THIS ISNO TROUBLE, WE JUST INCREMENT & DECREMENT THE POINTER TWICE. THEWHOLE PROCESS IS CARRIED OUT BY THE PROCESSOR AUTOMATICALLY ONEACH JSR & RTS, THE POINTER IS CALLED THE STACK POINTER AND IS ASPECIAL8 BIT REGISTER INSIDE THE PROCESSOR. THE ARRAY IS USUALLYCALLED A STACK SINCE IT CAN ALSO BE USED TO STORE THINGS OTHERTHAN RETURN ADDRESSES. THE ACTUAL STACK RUNS FROM 01 FF DOWN TO01)00, AND IT STARTS AT THE TOP: AN EMPTY STACK HAS STACK POINTERAT FF. A BYTE IS PUT ON THE STACK AND THE POINTER IS DECREMENTED TOPOINT AT THE NEXT LOCATION; THE POINTER IS INCREMENTED AND A BYTELOADED FROM THE STACK IN THE REVERSE OPERATION. NO CHECK IS MADEFOR THE 00 TO FF DECREMENT INDICATING AN OVERFLOWED STACK, SOPROGRAMS THAT REQUIRE MORE THAN 256 BYTES OF STACK SPACE Wl LLMYSTERIOUSLY FAIL. SINCE THIS IS 128 CONSECUTIVE JSR'S, THE PROBLEMWONT BE ENCOUNTERED VERY OFTEN.. .NOW THE PROCESSOR STATUS REGISTER CAN BE PUSHED ONTO THE STACK:

Page 20: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

PLP 28 "PULLP"PHP 08 "PUSH P"

AND SO WE MAY SAVE IT BEFORE A SUBROUTINE CALL AND RECOVER IT

AFTERWARDSPHPJSR. . . .PLP

THE SEQUENCE OF STACK OPERATIONS IS

TOPTOP

TOP

PCHPCL

TOP

PCHPCL

TOP

PCHPCL

PHP JSR PROGRAM OPERATES RTS PLP

SO WE HAVE NOW MANAGED TO SAVE THE CARRY FLAG, USE FE60, ANDREGAIN THE CARRY FLAG. WE WISH TO WRITE IT OUT, SO IT WOULD HAVEBEEN BETTER TO WRITE.

PHPJSR FE60PLA PULL BYTE FROM STACK INTO A

SINCETHISGIVESTHE CARRY FLAG IN A, AS THE LEAST SIGNIFICANT BIT,TO GET RID OF THE REST OF THE BITS OF THE RECOVERED STATUSREGISTER, WE CAN SIMPLY AND # 01. NOW A CONTAINS 0 OR 1 DEPENDINGON THE CARRY FROM ORIGINAL SUM. OUR PROGRAM NOW IS

SED SET UP FOR DECIMAL ADDCLCLDA Z 21 DOITADC Z 20PHP SAVE CARRYJSR FE60 WRITE OUT TWO DIGITS

ON DISPLAYS6&7

ADDR

021002120214021502160218021A021C021E021 F0221022202230224022502270229022B022 E023002320235023602380239023B023D023F

HEX LABELCODE29 7F95 11E8E8E0 0790 E9A2 00F0 E5A8 MINUSF0 E88A4AAA38B5 20E5 0D95 2020 99 02 COMMOV84 0EA2 0020 0C FE WAITCAD0 FACA86 0EA0 03A2 03B5 20

0241 95 240243 CA0244 10 F90246 A2 030248 B5 24

NEXTSBLOCK

ONEOFFBRICK

«•

PLAAND #01 A = 0 (NO CARRY FROM SUM)

OR A = 1 (CARRY FROM SUM)

NOW ALL WE NEED TO DO IS WRITE OUT THE ACCUMULATOR ON DISPLAYNO.5. THE WAY WE WROTE OUT THE FIRST TWO DIGITS OF THE RESULT WASTO USE A MONITOR SUBROUTINE WHICH DID JUST THAT. YOU'VE PROBABLYNOTICED THAT THE MONITOR ONLY PUTS A DOT ON DISPLAY 5 (THE 3RD

024A 95 28024C CA024D 10 F9024F A2 030251 B9 24 000254 380255 E9 000257 99 24 00025A 99 28 00025D B0 12025F 880260 10 DB0262 B5 200264 F0 050266 D6 200268 4C 00 02026B CA026C 10 F4026E 4C 04 FF0271 A9 04 CHECK0273 85 1F0275 A9 00 CONT0277 46 280279 2A027A 46 29

o l

TRY

EMPTY

INSTRUCTION

AND#7FSTA2X D + 1INXINXCPX #07BCCSHIFTPTLDX #00BEQSHIFTPTTAYBEQ CHEATTXALSRATAXSECLDAZX STACKSBC KEYSTAHX STACKJSR DSPGAPSTY REPEATLDX #00JSR DISPLAYDEXBNE WAITDEXSTX REPEATLDY #03LDX #03LDAHX STACK

STA2X POSSDEXBPLBLOCKLDX # 0 3LDA2X POSS

STA2X ANALDEXBPLBRICKLDX #03LDA, Y POSSSECSBC #01STA, Y POSSSTA, Y ANALBCSCHECKDEYBPLNEXTSLDAZX STACKBEQ EMPTYDECZX STACKJMP HUMMOVDEXBPLTRYJMP RESTARTLDA #04STA COUNTLDA #00LSR ANALROLALSR ANAL+ 1

COMMENTS

- MOVE FORWARD

- END OF STACKS?

- PREVENT ZERO FROM BEING USED

- ADDRESS OF REQUIRED STACK

- DO THE PLAYER'S MOVE

- SHOW STACKS

- THINKING TIME

- CLEAR REPEAT STATUS

- TRANSFER STACK TO POSS- POSS REPRESENTS THE POSSIBLE

COMPUTER- MOVES

TRANSFER POSS TO ANALANAL REPRESENTS THE MOVEBEINGANALYSED

POSS CONTAINS POSS IB LE MOVEANAL CONTAINS POSSIBLE MOVE

- TRY ALL STACKS- CHECK IF STACK EMPTY

- MAKE DESPERATE MOVE

- LOST.

- EVALUATE MOVE

Page 21: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

ADDR

02070209020B020D020 E

HEX LABELCODEE0 07D0 F785 1760

GAMES PROGRAMS1

INSTRUCTION

CPX #07BNE LOOPSTA Z D + 7RTS.

COMMENTS

- KEEP GOING- NEW DATA

NIM ISATRADITIONALGAME INWHICHTHE PLAYERS ALTERNATIVELY REMOVESTICKS, OR COINS, OR WHATEVER FROM ONE OF SEVERAL STACKS. THEONLY RULES ARE THAT YOU MUST TAKE AT LEAST ONE PIECE PER MOVEAND THAT YOU CAN ONLY REMOVE PIECES FROM ONE STACK PER MOVE.THERE IS A WELL-DEFINED STRATEGY FOR OPTIMAL PLAY BUT THIS DOESNOT GUARANTEE A WIN UNLESS THE OPPONENT MAKES A MISTAKE OR THEINITIAL SITUATION IS AGAINST HIM. THE COMPUTER PLAYS WELL BUT, WITHLUCK, CAN BE BEATEN. THE WINNER IS THE PLAYER WHO REMOVES THELAST PIECE

IN THIS VERSION OF THE GAME THERE ARE FOUR STACKS OF FROM 0-FPIECES. YOU MUST ENTER THE SIZE OF YOUR STACKS IN MEMORYLOCATIONS20-23 BEFORE STARTING THE GAME. THE GAME STARTS AT 002FAND YOUR MOVE OR 0180 AND THE COMPUTER'S MOVE. ON RUNNING, THEDISPLAY WILL SHOW A- B C D WHERE A,B,C,D ARE THE CONTENTS OFTHE STACKS. ANY CONTROL KEY Wl LL MOVE THE POINTER (FULL STOP)AROUND THE STACKS. WHEN IT POINTS TO THE STACK FROM WHICH YOUWISH TO REMOVE PIECES PRESS THE KEY CORRESPONDING TO THE NUMBERYOU WISH TO REMOVE. ZERO IS I LLEGAL AND WILL NOT BE ALLOWED. IFYOU SUBTRACT MORE PIECES THAN ARE IN THE STACK THE GAME WILL GETVERY CONFUSED.AFTER REMOVALOF PIECES THE DISPLAY WILL SHOW THE CURRENTSITUATION AND THE COMPUTER Wl LL MAKE ITS MOVE.CONTINUE UNTIL SOMEONE (SOMETHING?) WINS.YOU MIGHT LIKE TO TRY AND WRITE SUBROUTINES TO PRINT MESSAGESON THE DISPLAY IN THE EVENT OF EITHER A HUMAN OR COMPUTERVICTORY. A CHECK WOULD HAVE TO BE INSERTED TO DECIDE ACOMPUTER WIN BUT THE JUMP FOR A HUMAN WIN IS ALREADY THEREUNDER THE MNEMONIC JMP MESSAGE, THOUGH THE CODE IN FACT JUMPSTO THE HUMAN MOVE.

NIM

02000203020502070209020C020E

20B509952090B5

991180110C1011

02

FE

HUMMOVSHIFTPT

CHEAT

JSR DSPGAPLDZX D + 1ORA#80STAZX D + 1JSR DISPLAYBCC MINUSLDAHX D + 1

NOT RELOCATABLECLEAR DECIMALDISPLAY STACKSSET DECIMAL POINT ON

WAIT FOR INPUT

REMOVE CURRENT DECIMAL POINT

FROM THE RIGHT) AND SUSPECT THAT IT CAN'T PUT ANYTHING ELSE THERE.THIS IS TRUE, BUT IT DOESN'T MEAN THAT THERE ISN'T A MONITOR SUB-ROUTINE THAT CAN DO THE JOB. SUCH A SUBROUTINE LIVES AT FE7A. IT ISDESIGNED TO PUT THE LOWEST FOUR BITS OF THE ACCUMULATOR ONTOANY OF THE DISPLAYS, ASA READABLE CHARACTER. THIS IS JUSTWHATWENEED - BUT HOW DO WE TELL THE SUBROUTINE WHICH DISPLAY TO USE?

3.3 THE INTERNAL REGISTERS X ANDY.WELL, BACK TO THE/iP. THIS IS WHAT IT LOOKS LIKE INSIDE

7

A

BIT NUMBER

ACCUMULATOR

15Y

J X-REGISTER l lNDEX~\ Y-REGISTER /REGISTERS

PC PROGRAM COUNTER

STACK POINTER

PROCESSOR STATUS

TWO NEWCOMERS, YOU'LL NOTICE! X & Y ARE'INDEX REGISTERS', THEY Wl LLBE DEALT WITH MORE THOROUGHLY IN A FEW MORE PAGES, BUT WHATMATTERS NOW IS THE USE FE7A MAKES OF THEM:I FE7A NEITHER CARES ABOUT, NOR CHANGES XII FE7A DOESN'T CHANGE Y, BUT THE DISPLAY IT PUTS A ONTO ISCONTROLLED BY Y THAT IS, THE LOWER 4 BITS OF A ARE TRANSFORMEDINTO THE CORRECT SEQUENCE OF BITS TO REPRESENT THEIR HEXADECIMALCHARACTER AS IT SHOULD APPEAR ON THE 7 SEGMENT DISPLAY. THEN THISIS STORED IN MEMORY TO AWAIT THE SUBROUTINE WHICH ACTUALLY PUTSTHINGS ON DISPLAY.ALTHOUGH FE7A MAKES NO RESTRICTIONS ON THE SIZE OF Y, THE MONITORSUBROUTINE WHICH DISPLAYS THEM ONLY KNOWS ABOUT THE FIRST 8(NUMBERED. OF COURSE, 0-7) OF THEM, IN LINE WITH THE ACTUAL DISPLAYHARDWARE. DISPLAY 0 IS THE LEFTMOST, DISPLAY 7 IS THE RIGHTMOST.TO KEEP THE MONITOR AS EFFICIENT AS POSSIBLE THE SUBROUTINE ATFE60 USES FE7A. IT FOLLOWS THAT IT MUST HAVE LOADED Y WITH 7 & 6,AND SINCE FE7A DOESN'T CHANGE Y, Y IS STI LL SET TO THE LAST USED OFTHESE WHICH IS 6. SO. INSTEAD OF USING

LDY#05 A0 05 "LOAD Y WITH THE NEXT BYTE" (05 HERE)WE CAN USE

DEY 88 "DECREMENT (IN HEXADECIMAL) Y BYONE"

Page 22: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

TO SET Y TO 5, THUS SAVING A WHOLE BYTE! (BUT NO TIME, THE TWOINSTRUCTIONS ARE EXECUTED IN THE SAME TIME, 2/xS). THE COMPLETEPROGRAM IS

SEDCLCLDA £21ADC Z 20PHPJSR FE60PLAAND # 0 1DEYJSR FE7AJMP FF04

002 F F80030 180031 A5 210033 65 200035 080036 20 600039 68003A29 01003C 88003D20 7AFE0040 4C04FF

FE

AND SO, AT LAST, WE FIND THE ANSWER TO501O + 501O IS

K. 002F 100

PERHAPS WE SHOULD HAVE CLEARED THE DISPLAY? OR MADE IT SHOW THENUMBERS TO BE ADDED TOGETHER? OR ACTUALLY FETCHED THE TWONUMBERS USING KEYBOARD AND DISPLAY LIKE THE MONITOR DOES? ORSOME COMBINATION OF THESE?

3.4 MAKING OUR PROGRAM 'FRIENDLY'USING THE MONITOR SUBROUTINE AT FE88 IT IS EASY TO DO THE THIRDOPTION. FE88 IS THE ROUTINE WHICH FETCHES 4 DIGIT NUMBERS,TERMINATED BY ANY COMMAND KEY, INTO THE TWO BYTES IN ZERO PAGEX & X + 1 [i.e. IF X CONTAINS 20, INTO 0020 (LOW BYTE = RH PAIR OFNUMBERS) & 0021] JUST WHAT WE NEED!002A002B002D003000310033003500360039003A003C003D0040

F8A2 2020 88FE18A5 2165 20082060 FE6829 018820 7AFE4C04 FF

SEDLDX# 20JSR FE88CLCLDAZ21ADC Z 20PHPJSR FE60PLAAND#01DEYJSR FE7AJMP FF04

ONCE AGAIN THE PROGRAM HAS BEEN EXTENDED BACKWARDS SINCE THEGREATER PART OF IT HAS ALREADY BEEN ENTERED (UNLESS YOU'VESWITCHED OFF AND LOST IT ALL)RUNNING THIS PROGRAME (G0,0,2,A, k ) PRODUCES

K. 5 05 0 (ON THE ASSUMPTION THAT 0020 &0021 STILLCONTAIN THE 50S ADDED TOGETHER AS BEFORE)

THE Fl RST PROGRAM, TEST, IS TRIVIAL: IT JUST SENDS A PARTICULAR BYTETO TAPE REPETETIVELY. IT MUST BE STOPPED BY RESET. RECORD A FEWMINUTES OF THIS,THEN LOAD IT USING LOAD. DEVIATIONS FROM THESTATIONARY PATTERN ARE EASY TO SEE. THE SECOND PROGRAM, RETAG,IS RELOCATABLE. IT ACTS JUST LIKE THE MONITOR'S STORE ROUTINE,EXCEPT THAT IT ASKS FOR AN EXTRA ADDRESS. THE DATA WHICH ISSTORED IS THAT STARTING AT THIS LAST ADDRESS, IT PRETENDS TO BESITUATED BETWEEN THE FIRST TWO ADDRESSES. INCORPORATE THEREQUIRED STATE OF ZERO PAGE REGISTERS IN FRONT OF YOUR DATA,THEN TOAD AND AUTO RUN' PROGRAMS MAY BE CREATED.

NOT RELOCATABLETAPE PROGRAMS

ADDR HEX LABELCODE

0200 A9 55 TEST0202 20 B1 FE0205 4C 00 020208 A9 F1 RETAG020A 85 10020C A2 06020E 20 88 FE0211 A2 080213 86 100215 20 88 FE0218 A9 46021A 85 10021C A2 20021E 20 88 FE

0221 A2 040223 B5 05 ADRSS0225 20 B1 FE0228 CA0229 D0 F8022B A0 00 DATAS022D B1 20022F E6 20

0231 D0 020233 E6 210235 20 B1 FE NOI1NC0238 20 A0 FE023B D0 EE023D 4C 04 FF0240

INSTRUCTION

LDA #55JSR PUTBYTEJMP TESTLDA#F1STADLDX #06JSR QDATFETLDX #08STX DJSR QDATFETLDA #46STADLDX #20JSR QDATFE7

LDX #04LDA Z,X 05JSR PUTBYTEDEXBNE ADDRSSLDY #00LDA(20),YINC 20

BNENOINCINC 21JSR PUTBYTEJSR COM16BNE DATASJMP RESTART

COMMENTS

- THE TEST BYTE- SEND IT- KEEP SENDING IT- F. PROMPT

FIRST ADDRESS

PROMPTSECOND ADDRESS

PROMPT

- LAST ADDRESS: ACTUAL DATASTART

- SEND FAKE ADDRESSES

PROPER DATAINCREMENT PROPER DATACOUNTER

SEND DATACHECK FAKE ADDRESSES FOR END

THE SCROLL PROGRAM SHIFTS THE WHOLE DISPLAY ONE LEFT, ANDENTERS THE NEW INFORMATION, IN A, ON THE FAR RIGHT.SCROLL

^DDR

0200020202040206

HEXCODEA2 00B4 1194 10E8

LABEL

LOOP

INSTRUCTION

LDX #00LDY ZX D + 1STY ZX DINX

COMMENTS

- MUST GO FORWARDS- PICK-UP DATA ON RIGHT- & MOVE IT ONE LEFT

Page 23: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

025A 00 71025D 50 00025F

77

THE RELOCATOR FIRST FETCHES THE THREE ADDRESSES IT REQUIRES, THEADDRESSES OF THE START & END OF THE MEMORY SECTION TO BE MOVED,AND THE ADDRESS OF THE START OF THE AREA TO WHICH THE MOVE IS TOTAKE PLACE. THE PROMPTS ARE F., & t RESPECTIVELY. AFTERTERMINATING THE LAST ADDRESS, THE MOVE TAKES PLACE. MOVES UP BYLESS THAN THE LENGTH OF THE MATERIAL TO BE USED WILL NOT BESUCCESSFUL (I.E. t - F ., IF POSITIVE, SHOULD BE GREATER THAN - t )

RELOCATORADDR

02000202020402060209020B020D020 F

0212021402160218

021B021D021 F02210222022402260229022B022D

HEXCODEA286A220A286A220

A286A220

A2A191C8D0E620D04C

F110208846102288

78102488

1A0624

0225A0F204

LABEL

FE

FE

FE

MOVE

FE NOINC

FF

INSTRUCTION

LDX #F1STXZ DLDX #20JSR QDATFETLDX #46STXZ DLDX #22JSR QDATFET

LDX #78STXZ DLDX #24JSR QDATFET

LDX #1ALDA (06,X)STA (24,Y)INYBNE NOINCINC 2 25JSR COM16BNE MOVEJMP RESTART

COMMENTS

- SET UP FROM PROMPT F.

- AND GET ADDRESS

- SET UP END PROMPT

- AND GET SECOND ADDRESS-MOVE THE DATA BETWEEN THESEADDRESSES

- SET UP TO PROMPT

- AND GET BASE ADDRESS-MOVETO HERE & SUCCESSIVELOCATIONS

- DO THE MOVE

- INCREMENT THE TO ADDRESS

- USECOM16TO DO THE LIMIT TES1

YOU SHOULD ENTER THE TWO PAIRS OF NUMBERS YOU WISH ADDEDTOGETHER AS IF THEY FORMED AN ADDRESS. TERMINATING YOUR ENTRYWITH k INSTANTLY PRODUCES THE RESULT

K. 5 05 0 100

LOOKING BACK OVER THE PROGRAM, AND EXAMINING THE MONITORLISTING,WILLREVEALTHAT IT TOOK AD 1 6 (OR 1731O) BYTES OF CODE TOACHI EVE THIS. THE ACTUAL OPERATION USED 6 BYTES OF CODE (SED; CLC;LDAZ; ADC Z) WHILE THE OTHER 1671O ARE THERE 'MERELY'TO DISPLAYTHE RESULT& FETCH THE INFORMATION NEATLY(THE CODE CALCULATIONSDO NOT CONSIDER THE 161O BYTES OF CHARACTER FONT OR THE 11 1 O

BYTES OF TEMPORARY STORAGE ALSO USED)

CHAPTER 4: THE REMAINDER OF THE INSTRUCTION SET4.1 BRANCHESTHINKING ABOUT THE FE88 PROGRAM, YOU SHOULD REALIZE THAT IT DOESSOMETHING OF THE FORM

FETCH NEXT KEYi f KEY IS A COMMAND KEY THEN RETURN

THIS IS A CONDITIONAL TRANSFER OF CONTROL AND REPRESENTS SOMENEW INSTRUCTIONS AND A DIFFERENT WAY OF CHANGING THE PROGRAMCOUNTER. AN OPERATION LIKE ADC DOES MORE THAN ADDING TWO BYTESAND THE CARRY FLAG TOGETHER AND OUTPUTTING A CARRY. IT ALSO SET!SOME OF THE OTHER FLAGS IN P:

THE £ FLAG IS SET IF THE RESULTING BYTE WAS ZEROTHE V FLAG IS SET IFTHERE WAS A 2'S COMPLEMENT OVERFLOWTHE N FLAG IS SET IF THE RESULT WAS A NEGATIVE 2'S COMPLEMENTNUMBER - I.E. BECOMES BIT 7 OF THE RESULT.

THESE FLAGS ARE ABLE TO CAUSE CONDITIONAL TRANSFER BY USINGTHE APPROPRIATE ONE OF THE EIGHT 'BRANCH' INSTRUCTIONS. THEMECHANISM EMPLOYED IS TO PERFORM A 2'S COMPLEMENT ADD BETWEENTHE PROGRAM COUNTER AND THE SECOND BYTE OF THE BRANCHINSTRUCTION THUS PERMITTING THE TRANSFER TO BE -128. . . +127 BYTESFROM THE NEXT INSTRUCTION. THIS IS CALLED 'RELATIVE ADDRESSING'AND IS A POSITION INDEPENDENT METHOD OF TRANSFER, THE EIGHTBRANCH INSTRUCTIONS ARE ASSOCIATED TWO TO EACH OF THE C, 2, V &N FLAGS, ONE OF WHICH BRANCHES IF THE FLAG IS SET, THE OTHERBRANCHES IF IT IS CLEAR.

TO CLARIFY THIS LET'S LOOK AT AN EXAMPLE:"BRANCH IF CARRY SET"SET CARRY

* + 0 ^BCS 03* + 2 SEC* + 3 " ^ C S 0 1* + 5 L i C L C CLEAR CARRY* + 6 U(THE ARROWS ARE PUT IN FOR CLARITY)WE'LL NEED TO CONSIDER THIS PROGRAM BOTH WITH THE CARRY SET &WITH IT CLEARI CARRY IS CLEAR

Page 24: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

INSTRUCTION I DOES NOT TRANSFER CONTROL SO WE DO INSTRUCTION I I ,SEC,NOW INSTRUCTION III TRANSFERS CONTROL SINCE THE CARRY IS NOWSET. 01 IS ADDED TO THE PC (= * + 5) TO GIVE* + 6 AS THE ADDRESS OF THENEXT INSTRUCTION.

II CARRY IS SETINSTRUCTION I TRANSFERS CONTROL. 03 IS ADDED TO THE PC (= * + 2) TOGIVE * + 5 AS THE ADDRESS OF THE NEXT INSTRUCTION, INSTRUCTION IV.CLC.

SO IF THE CARRY WAS CLEAR IT IS SET; IF IT WAS SET IT IS CLEARED, SO THEPROGRAM COMPLEMENTS THE CARRY (THERE ARE QUICKER METHODS,INDEED IT CAN BE DONE WITH 3 INSTRUCTIONS IN 4 BYTES)*AND WE CAN GO BACKWARDS:

0235

BCSI SECT BCS

CLCFB

BRANCH IF CARRY SETSET CARRYBRANCH IF CARRY SETCLEAR CARRY

IF THE CARRY IS SET THE PROGRAM IS AS BEFORE IF IT IS CLEARED WE SET IT& BRANCH FB

/ 2's COMPLEMENT ADD * + 5 \_ £ B +

\ *+0 /-BACK TO THE BEGINNING. A RATHER COMPLICATED WAY OF CLEARINGTHE CARRY.MOST OF THE NON-BRANCH INSTRUCTIONS Wl LL CHANGE SOME OF THESE 4TESTABLE FLAGS, USUALLY THE N & Z FLAGS SINCE THEY CONSTANTLYMONITOR THE STATUS OF OPERANDS SO BRANCHES Wl LL APPEAR RATHERFREQUENTLY IN PROGRAMS.

4.2 INDEXINGIF YOU WISHED TO CLEAR (SET EACH BYTE TO 0) A PATCH OF MEMORY, e.g.THE MEMORY USED TO STORE THE DATA WHICH IS TO BE OUTPUT TO THEDISPLAYS, WHICH IS FROM 0010 TO 0017, YOU MIGHT THINK

LDA# 00 LOAD ACCUMULATOR IMMEDIATE WITH 00STAZ10 STORE ACCUMULATOR IN ADDRESS 0010STA Z 11 STORE ACCUMULATOR IN ADDRESS 0011STA 2 12 STORE ACCUMULATOR IN ADDRESS 0012

STA 2 17 STORE ACCUMULATOR IN ADDRESS 0017IS NECESSARY. THIS LOOKS SUFFICIENTLY REGULAR THAT THE COMPUTERSHOULD BE ABLE TO DOT IT. THIS IS WHERE THE INDEX REGISTERSREAPPEAR. WE CAN STORE THE ACCUMULATOR INDEXED BY EITHER INDEXREGISTER

STAZ,X 95 "STORE A INDEXED BY X IN ZEROPAGE"

STAZ,X 10

THE OFFSET CALCULATOR CALCULATES THE OFFSET TO BE ENTERED ASTHE SECOND BYTE OF A BRANCH INSTRUCTION. IT WILL PROMPT WITHXX0000XX AND YOU SHOULD ENTER THE ADDRESS OF THE BRANCHINSTRUCTION. AFTER A CONTROL KEY IT WILL PROMPT AGAIN WITHXX1111XX AND YOU SHOULD ENTER THE ADDRESS YOU WISH TO BRANCHTO. THE REPLY WILL BE EITHER "OFFSET XX" WHERE XX IS THE VALUE TOBE ENTERED, OR "TOO FAR" IF THAT IS THE CASE. A CONTROL KEYRESTARTS THE SEQUENCE.

OFFSET CALCULATOR NOT RELOCATABLEADDR

020002010203020502070209020B020E02100212021402160219

021B021D021 F022102230224022602280229022B022D022F023102320235

0236

0239023C023E

0241024402460248024A024D024E0250025102540257

HE>CODED8A9858484A220A98585A220A5

E985B0C638A5E5AAA5E5D0A9208A49

20

4CA920

4C85A0B1998810605CED78

022122232288112425248822

7E220323

2422

25230E5144

80

60

045744

0120072010

F8

71795C

LABEL

AGAIN

FE

FE

HSUB

02

FE

FFTOOFAR

02

02MESSAGE

LOOP00

71785C

INSTRUCTION

CLDLDA #02STAMESSHSTY FROMHSTY FROMLLDX#FROMLJSR QDATFETLDA #11STA TO LSTA TOHLDX #TOLJSR QDATFETLDAFROML

SBC #7ESTA FROMLBCS HSUBDECFROMHSECLDATOLSBCFROMLTAXLDA TOHSBC FROMHBNETOOFARLDA #51JSR MESSAGETXAEOR #80

JSR RDHEXTD

JMP RESTARTLDA #57JSR MESSAGE

JMP AGAINSTA M ESS LLDY #07LDA (MESSL),YSTA D, YDEYBPL LOOPRTS

COMMENTS

- INITIALIZE MESSAGE POINTER- SET UP PROMPT

- FETCH FIRST ADDRESS- SET UP 2ND PROMPT

- FETCH SECOND ADDRESS- OFFSET TO MAKE OVERLENGTH

C A OS/

LASY- CARRY KNOWN SET BY QDATFET

- DONTSETTHE CARRY AGAIN!

- CALCULATE THE LENGTH

- PRINTOUT

- COMPLEMENT TOP BIT BECAUSE OFTHE OFFSET APPLIED

- PRINTOUT ANSWER, OVERWRITING THE

- FINISHED- WHOOPS- TELL THE PROGRAMMER THAT IT'S

WRONG- AND GET IT DONE AGAIN- MESSAGE DESCRIBED BY A- EIGHT BYTES OF DATA TO DISPLAY- FETCH THEM

- THE DATA

Page 25: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

THE HEXADECIMAL TO DECIMAL CONVERTER PROMPTS WITH XX0000XXAND AFTER A CONTROL KEY IS PRESSED WILL PROVIDE AN ANSWER IN THEFORM ????????, AFTER A WAIT!THE PROGRAM WORKS BY DECREMENTING THE HEX. NUMBER ANDINCREMENTING THE DECIMAL NUMBER UNTILTHE HEX. NUMBER REACHESZERO.THIS PROGRAM, LIKE THE DECIMAL TO HEX. CONVERTER, WHICH USESVIRTUALLY THE SAME METHOD, ILLUSTRATES THE USE OF THEDECIMAL MODE, AN IMPORTANT FACET OF THIS PROCESSOR.THEY ALSO PROVIDE AN EXCELLENT DEMONSTRATION OF THE TRADEOFFFREQUENTLY FOUND BETWEEN PROGRAM LENGTH AND SIMPLICITY, ANDPROGRAM EXECUTION TIME. THE METHOD USED IS BOTH SHORT AND SIMPLE,BUT CAN TAKE UP TO THREE SECONDS FOR SOME CALCULATIONS. A MUCHLONGER AND MORE COMPLEX (RELATIVELY) PROGRAM COULD HAVE BEENWRITTEN BASED ON ABCD = A(16*16*16)+B(16*16)+C(16)+D AND WOULD HAVEBEEN VIRTUALLY INSTANTANEOUS.

HEX-*

ADDR

02000202020402060209020A020C020E02100212021402160218021A021B021C021E021F022002220223022502270229022B022D022F0232023302350238023A

•DEC

HEXCODE8484A220F8A286A5D0A5F0C6C6189869A88A69AA90E6B08486A22088A5204C

20212088

0022200621132120

01

00

E922E520212064

227A04

LABEL

FE

DECRHEX

NODEC

DEAD

FE

FEFF

INSTRUCTION

STYZ HEXLSTY Z HEXHLDX#HEXLJSR QDATFETSEDLDX #00STX Z DECOUTLDAZ HEXLBNE NODELLDA2 HEXHBEQDEADDECZ HEXHDECZ HEXLCLC >TYAADC #01TAYTXAADC #00TAXBCC DECRHEXINC 2 DECOUTBCSDECRHEX >STYZ HEXLSTX Z HEXHLDX #HEXLJSR QHEXTD1DEYLDAZ DECOUTJSR HEXTDJMP RESTART

COMMENTS

- SET UP ZERO PROMPT—

- AND FETCH THE DATA- DECIMAL MODE- SETX & Y & DECOUT TO ZERO

- TEST FOR ZERO,THENDECREMEh

- IFHEXNO.ISZERO,THENFINISHE

ADD 1 TO THE DECIMAL NUMBER' USING X & Y AS TWO BYTE

ACCUMULATOR

- FINISHED,SO STORE X & Y

- DISPLAY 4 DIGITS

- DISPLAY 5 DIGIT

10

X =07, SAY

000F00100011001200130014001500160017

A IS STORED IN 17 WHICH IS 10 THE "BASE ADDRESS"+07 THE "INDEX"

IF WE DOA2 07 LDX # 0795 10 STAZ,X10THE STORE IS TO LOCATION 17 (=10 + X). THE ADDITION IS STRAIGHT-FORWARD BINARY,TRUNCATEDTOA LOCATION IN ZERO PAGE SO

LDX# FFSTAZ,X 10

STORES IN LOCATION 0FWE ALSO HAVE

"STORE A INDEXED BY X""STORE A INDEXED BY Y"

9D99

STA, XSTA, Y

(BUT NO STA Z, Y) WHICH DO NOT NEED TO TRUNCATE THE ADDITIONTHEY EXPECT A TWO BYTE ADDRESS SO

LDX# FFSTA, X 0010

STORES IN LOCATION 010FNOW

DEX CA "DECREMENT (IN HEX) X BY ONE"SETS THEZ FLAG IF X IS ZERO, & THE N FLAG EQUAL TO BIT 7 OF X.

BPL 10 "BRANCH IF PLUS"TAKES THE BRANCH IF THEN FLAG IS CLEAR I.E. IS SAYING'NOT NEGATIVE'I.E. PLUS. IT'S EASY TO SE'E THAT THE COMBINATION

DEXBPL FD

DECREMENTS X ONCE, AND, IF THE RESULT WAS POSITIVE (I.E. IN THERANGE 0 - 7 F ) IT TAKES THE BRANCH AND DECREMENTS X AGAIN ANDAGAIN 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 TIMEAROUND THE LOOP CLEAR THE RELEVANT DISPLAY:CODE LABEL MNEMONICSA9 00 LDA#00A2 07 LDX #0795 10 LOOP: STA Z, X 10——i

CA10 FB

DEXBPL LOOP

COMMENTLOAD ACCUMULATOR IMMEDIATELOADX IMMEDIATESTORE-* IN ZERO PAGE INDEXEDBYX *DECREMENT X BY ONEBRANCH IF PLUS TO "LOOP"

Page 26: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

SO WE CAN WRITE A VERY SHORT PROGRAM TO CLEAR THE DISPLAY. BYMAKING THE LOOP SLIGHTLY LARGER (WITH THE SAME LENGTH OFPROGRAM)0060 A2 07 LDX #070062 B5 48 LOOP: LDA Z, X 480064 95 10 STAZ,X100066 CA DEX0067 10 F9 BPLLOOP0069 4C 04 FF JMP FF04WE CAN, INSTEAD OF CLEARING THE DISPLAY, CAUSE A BLOCK OF MEMORY,0048 - 004F, TO BE TRANSFERRED TO THE DISPLAY. THE PROGRAM ISPOSITION INDEPENDENT SO YOU CAN WRITE IT INTO MEMORY ANYWHERE. . .EXCEPT LOCATIONS 0010-0017. IF YOU PUT THE PROGRAM IN 0048 ITWl LL FUNCTION PERFECTLY BUT YOU WON'T BE ABLE TO CHANGE THE DATAWHICH IS MOVED, SINCE THIS IS THE PROGRAM. YOU CAN TRY THE PROGRAMUSING THIS DATA0048 00 77 58 5C 50 54 00 00OR YOU COULD CONSTRUCT YOUR OWN DATA, USING APPENDIX A.THE INDEXING MECHANISM SHOWN ABOVE IS ONLY CAPABLE OF DEALINGWITH 256 (CONSECUTIVE) BYTES, STARTING AT A GIVEN ADDRESS. THUSA9 00 LDA # 0 0 LOAD A IMMEDIATE WITH "00"A8 TAY TRANSFER A TOY18 LOOP:CLC CLEAR CARRY79 00 FE ADC, Y FE00 ADD WITH CARRY INDEXED BY YC8 INY INCREMENTYD0F9 BNE LOOP BRANCH IF NOT EQUAL20 60FE JSR FE60 JUMP SUBROUTINE4C04FF JMPFF04 JUMPCOMPUTES 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 OFLDA #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 TYA18 LOOP: CLC79 0000 ADC, Y 00001879 00FF

1879 00FFC8F0 034C??20 60 FE END4C04FF

CLCADC, Y 0100

CLCADC,YFF00

CLC> 256 ADC, Y INSTRUCTION PAIRS

INYBEQENDJMP LOOPJSR FE60JMP FF04

IN ORDER TO SHORTEN THIS PROGRAM WE WILL INTRODUCE THBCONCEPTOF "INDIRECTION".

ADDR

0240024202450247

HEXCODE

A2 2420 664C 04

LABEL

FEFF

INSTRUCTION

LDX #24JSR QHEXTD2JMP RESTART

COMMENTS

- SET UP X- PUT NEXT 4 OUT- DISPLAY RESULT

SYSTEMTHE DECIMAL TO HEX CONVERTER WILL PROMPT WITH 0XXXX FOR THEFIRST DIGIT OF THE 5 DIGIT DECIMAL NUMBER. THEN X0000. FOR THE LASTFOUR DIGITS OF THE DECIMAL NUMBER. CLEARLY ANYTHING OVER 65535Wl LL GIVE THE REMAINDER WHEN DIVIDED BY 10000 HEX. TO ENTER THISNUMBER YOU WOULD KEY 6, CONTROL KEY, 5535, CONTROL KEY, AND FFFFWILL APPEAR ON THE DISPLAY (AFTER A SLIGHT DELAY!)THE PROGRAM WORKS BY A PROCESS OF DECREMENTING THE DECIMALNUMBER AND THEN INCREMENTING THE HEX. NUMBER.

DEO*HEX

020002010203020502070209020C020F02110214021502170219021A021C021E022002210222

02240225022602280229022B

022D022F0231023302350236

0238023A023D023F

988585A28520209020F884A69885A4853898E9

A88AE9AAB0C6

30E6D0E638B0

A2204C

202120227A0CF688

1021

212020

01

00

0422

0920ED21

E9

206404

AGAINFEFE

FE

NEXTALSO

NODEC

RESULTFEFF

TYASTAZDECLSTA Z DECHLDX #DECCSTAZDECVH "]JSR HEXTD IJSR DISPLAYBCC AGAIN JJSR QDATFETSEDSTYZDLDXZ DECHT Y ASTA 2 DECHLDYZ DECLSTAZ DECLSEC NT Y ASBC #01

TAYT X ASBC #00TAX y

BCS NODECDECZDECVH

BMI RESULTINC2DECLBNENEXTINC 2 DECHSEC

- CLEAR A- CLEAR NO

y -FETCH THE FIRST DIGIT

- AND THEN THE LAST FOUR DIGITS- DECIMAL MODE- CLEAR LEFT DISPLAY- X & Y AS DOUBLE ACCUMULATOR

- CLEAR AREA FOR RESULT

> - DO A DECIMAL SUBTRACT, DOUBLEBYTE

- LAST OF THE DECIMAL SUBTRACT,TO DO 5 DIGITS

- IF MINUS THEN FINISHED- DOUBLE HEX INCREMENT

- CREATE BRANCH ALWAYS, BUTBCS ALSO f DON'T BOTHER TO SET THE CARRY

LDX #20JSR QHEXTDJMP RESTART

TWICE

- DISPLAY RESULT

Page 27: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

ADDR

0208020A020D020E0210

021202140215

0217021802190213021 D021F02220224

HEXCODEA22098A066

901865

6A88D085662020

2088

0820

03

21

F521206464

DOUBLE BYTE

ADDR

020002010203020502070209020B020D02100212021502770219021B021D021F02210222022402260228022A022C022E023002320233023502370239023B

HEXCODED88484A98585A220A2208484A066669018A56585A56585666688D06666A020

20211122232088228824251023220D

2024242125252524

E623220666

LABEL

FE

LOOP

NAD

FEFF

MULTIPLY

LABEL

1r'

FE

FE

LOOP

NAD

FE

INSTRUCTION

LDX #20JSR QDATFETTYALDY #08ROR £20

BCCNADCLCADC 2 21

ROR ADEYBNE LOOPSTA 2 21ROR 2 20JSR QHEXTDJMP RESTART

INSTRUCTION

CLDSTY 2 20 MPIERSTY-2 21LDA #11STA 2 22 MPICANDSTA 2 23LDX #20JSR QDATFETLDX #22JSR QDATFETSTY 2 24STY 2 25LDY #10ROR 2 23ROR 2 22BCCNADCLCLDA 2 20ADC 2 24STA 2 24LDA 2 21ADC 2 25STA 2 25ROR 2 25ROR 2 24DEYBNE LOOPROR 2 23ROR 2 22LDY #06JSR QHEXTD2

COMMENTS

- FETCH THE NUMBERS- CLEARS A- LOOP COUNTER- SHIFT MULIPLIER (AND HIGH BYTE

OF RESULT)- NO ADD IF NO BIT

- ADD MULTIPLICAND INTO LOWBYTE OF RESULT

- AND SHIFT LOW BYTE OF RESULT

- PUT IN LOW BYTE- FINAL JUSTIFICATION SHIFT- DISPLAY ANSWER

COMMENTS

- BINARY ONLY- FORM PROMPT FOR THE ZERO

INPUT

- FORM PROMPT FOR THE FIRSTINPUT

- FETCH ZERO INPUT

- AND FIRST INPUT- CLEAR WORKING SPACE

- LOOP COUNT INITIALISATION- TWO BYTE SHIFT RIGHT

- NO ADD IF THE O/P BIT ISN'T A ONE

- TWO BYTE ADD

- NO CARRY OUT OF THE ADD- SHIFT AGAIN

- GO ROUND LOOP 16 TIMES- FINAL SHIFT ON RESULT

- SET UP POSITION- X ALREADY POINTING AT

023E A0 02 LDY #02

CORRECT LOCATIONS-PUT 4 HEXOUTNEXT POSITION

4.3.INDIRECTIOIM:YOU'LL NOTICE THAT THE PROGRAM IS NOT POSITION INDEPENDENT: THEADDRESS OF THE CLC INSTRUCTION MUST BE WRITTEN INTO THE PROGRAM.THIS IS ANOTHER DISADVANTAGE OF THIS METHOD: (THERE IS ANADVANTAGE: THIS PROGRAM IS VERY FAST, TAKING ONLY 6JUS PER BYTE).THE INSTRUCTION REQUIRED MUST HAVE A 16 BIT UNFIXED ADDRESS ANDTHIS CAN ONLY GO IN ONE PLACE : MEMORY. A LIMITATION IS THATGENERALLY IT CAN ONLY BE IN ZERO PAGE MEMORY. THE CONCEPT ISKNOWN AS INDIRECTION. THE MOST DIRECT VERSION OF THIS IS THEINDIRECTJUMP.6C02 00 JMP (0002)THIS IS THE ONE VERSION OF INDIRECTION THAT DOESN'T NEED TO REFERTO ZERO PAGE MEMORY. WHAT HAPPENS IS THIS:

DATA6C02

BUS R/W11

TIMERS ADDRESS BUS0 PC1 PC+12 PC+2 00 13 0002 V 14 0003 U 15 UV OPCODE 1

THE MONITOR USES A JUMP INDIRECT FOR THE GO FUNCTION, HAVINGBUI LT THE ADDRESS IN 0002 & 0003 : A JUMP INDIRECT VIA 0002 & 0003,ASSUMING THAT THESE LOCATIONS HAVEN'T BEEN ALTERED, WILL THUSRETURN TO THE START OF THE PROGRAM -WITHOUT KNOWING WHEREIT HAD BEEN ENTERED INTO MEMORY AT THE TIME OF WRITING.INDIRECTJUMP

JUMP INDIRECT

LOWER BYTEHIGHER BYTEOLD 6C COMPLETED

MAIN

JMP

PROGRAM

(0002)

ZERO PAGE

1234 ':

00020003

4ROUTINE

XXXXXX

123412351236

WELL, THAT WAS SIMPLE INDIRECTION. NOW WE'LL MOVE ONTO THE MORECOMPLICATED MODES OF INDIRECTION. HAVING FETCHED THE ADDRESSOUT OF MEMORY WITH THE INDIRECTION STAGE, WE CAN INDEX IT. THIS ISCALLED POST-INDEXED INDIRECTION. WITH THE 65XX SERIES OF MICRO-PROCESSORS YOU MAY ONLY

I INDEX IN THIS MODE WITH THE Y INDEX REGISTERII USE ZERO PAGE MEMORY

Page 28: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

LDA(I),Y

(AN EXTRAMS IS NEEDED IF J+YRESULTS IN A CARRY)

TIMERS ADDRESS BUS DATA BUS R/W0 PC B1 11 PC+1 I 12 001 J 13 001+1 K 14 KJ+Y DATA 15 PC+2 OPCODE 1

THIS IS THE MODE OF ADDRESSING NEEDED TO SOLVE THE 65536 BYTEADDITION PROBLEM. MEANWHILE WHAT ABOUT THE X REGISTER ANDINDIRECTION? HERE WE HAVE PRE-INDEXED INDIRECTIONT I M E R S ADDRESS BUS DATA BUS R/W

LDA (I,X)

NO CARRY TO HIGH ORDER BYTE

PUT I N A

THIS IS THE OPPOSITE TO POST-INDEXED ... HERE THE INDEXING SWITCHESBETWEEN DIFFERENT INDIRECTION LOCATIONS. THE EFFECTS OF THESETWO INDEXING MODES ARE ONLY THE SAME IN THE TRIVIAL CASE OF ZEROINDEXES. HERE IS THE SOLUTION TO THE 65536 BYTE ADDITION:

012

34

CJI

6

PCPC+1001

00I+X00I+X+1KJPC+2

A1 11 1DATA, 1DISCARDEDJ 1K 1DATA 1OPCODE 1

9885 2085 2118 LOOP71 20C8D0FAE6 21D0F62060 FE4C04FF

TYASTA Z 20STA Z 21CLCADC (20), YINYBNE LOOPINC Z 21BNE LOOPJSR FE60JMP FF04

-ZERO Y & A

? SETUP INDIR

THE PROGRAM IS, ONCE AGAIN, POSITION INDEPENDENT. IT IS, AS IMPLIED INTHE FIRST SOLUTION, SLOW : 12;uS PER BYTE. THIS IS MAINLY DUE TO THESMALL SIZE OF THE LOOP : THE 3jLtS 'NEARLY ALWAYS TAKEN' BRANCH ISTAKING A DISPROPORTIONATE AMOUNT OF TIME, IN THE FIRST SOLUTIONTHE EQUIVALENT 5/xS BRANCH AND JUMP COMBINATION OCCURS ONLYEVERY 256 BYTES AND IS THUS IGNORED IN THE TIME CALCULATIONS.THE INSTRUCTION INC Z 21 HAS AN OBVIOUS FUNCTION : INCREMENT (INHEXADECIMAL) LOCATION 0021. IT ACTS JUST LIKE INX OR I N Y - B U T ITTAKES 5MS INSTEAD OF 2/xS.

4.4 READ-MODIFY WRITE INSTRUCTIONSTHERE ARE COMPANION INSTRUCTIONS TO INC Z THAT CAN DIRECTLYALTER MEMORY CONTENTS, THESE ARE CALLED READ-MODIFY-WRITEINSTRUCTIONSJHENEXTOF WHICH IS THE OBVIOUS DEC INSTRUCTION.

ADDR

0217

0219021B021C021D021F022002210223022402260228022A022C022 E02300232023402360238023B023D02400242

HEX LABELCODEA4

A63898E5A88AE9AA9084A56985A5698590A220A5204C

20

21

22

00

102324002425

0025E524 RESULT64 FE2360 FE04 FF

INSTRUCTION COMMENTS

LDY £ 20 - USE Y & X AS DOUBLEACCUMULATOR

LDXZ21SUB SEC >

T Y ASBC 2 22TAYT X ASBC #00

> - SUBTRACT THE DIVISOR

TAX )BCC RESULT - IF NEGATIVE THEN FINISHEDSTY Z 23 - ELSE UPDATE THE REMAINDERLDA Z 24ADC #00STA Z 24LDA 2 25ADC #00STA Z 25 J

> - AND ADD ONE TO THE RESULT(CARRY WAS SET ON INPUT).

BCC SUB - NO CARRY IS POSSIBLE (USUALLY)LDX #24JSR QHEXTDI - DISPLAY RESULTLDA 2 23JSR RDHEXTD - AND REMAINDERJMP RESTART

THE TWO MULTIPLY ROUTINES ARE FOR SINGLE AND DOUBLE BYTE BINARYMULTIPLICATION. THE FIRST PROMPTS XX0011XX AND THE TWO NUMBERSTO BE MULTIPLIED SHOULD BE ENTERED SEQUENTIALLY. (E.G. 1234WOULDGIVE 12X34). THE SECOND PROMPTS XX0000XX FOLLOWED BYXX1111XXFOR THE TWO NUMBERS. ANSWERS ARE, AS USUAL, DISPLAYED AFTER ACONTROL KEY HAS BEEN PRESSED.BOTH ARE BASED ON AN EQUIVALENT TO THE NORMAL METHOD OF LONGMULTIPLICATION.E.G. 11010

001100000000000000000000

1101000110100

-(0X2 4) X 11010-(0X2 3) X 11010-(1X2 2

-(1X2)-(0X2°)

X 11010X 11010X 11010

10011100

SINGLE BYTE MULTIPLY

ADDR

02000202

02040206

HEXCODED884

A985

20

1121

LABEL INSTRUCTION

CLD

STY 2 20

LDA #11STA 2 21

COMMENTS

- SET UP PROMPT FOR ZERO-MULTIPLIER

- PROMPT FOR FIRST- MUIT

Page 29: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

ADDR

020F0211

02130215021602170219021A021B021D021 E0220

0222022402260228022A022C022E02300232

023402360239024B

HEX : LABELCODE84A4

A63898E5A88AE5AA90A9

6585A56985A5698590

A5204C

2320

21NXTSUB

23

24

1400

2222230223240024E1

22 RESULT60 FE04 FF

INSTRUCTION

STY2SUBLLDYZSQL

LDXZSQHSEC 1̂TYASBCZSUBL ITAY >TXASBC2SUBHTAX 'BCC RESULTLDA#00

ADCZ ROOTSTA Z ROOTLDAESUBLADC #02STA2SUBLLDAZSUBHADC #00STA2SUBHBCC NXTSUB

LDA 2 ROOTJSR DHEXTDJMP RESTART

COMMENTS

- SUBTRACT 0001 AT START- USE Y & X AS DOUBLE SIZED

ACCUMULATOR

- SUBTRACT SUB FROM X & Y

- IF NEGATIVE THEN STOP- NOT FINISHED YET. INCREMENT

ROOT

- INCREMENT SUB

- THERE CAN BE NO CARRY:BRANCH ALWAYS

- DISPLAY ANSWER

THE DIVIDE ROUTINE WILL CALCULATE THE INTEGER RESULT ANDREMAINDER OF A FOUR DIGIT NUMBER DIVIDED BY A TWO DIGIT NUMBER.BY ENTERING CLD (FOR HEX.) OR SED (FOR DECIMAL) EITHER BASE MAY BEUSED, SINCE IT WORKS BY SUBTRACTING THE DIVISOR SUCCESSIVELY FROMTHE DIVIDEND. THE ROUTINE PROMPTS WITH XX0000XX FOR THE DIVIDENDAND THEN XXXX11XX FOR THE DIVISOR. THE ANSWER WILL APPEAR INTHE FORM ABCD.EF WHERE ABCD IS THE INTEGER RESULT AND EF IS THEREMAINDER.

DIVIDERADDR

020002010203020502070209020B020E021002130215

HEXCODED88484A985A220A2208484

OR202111

22208822882425

LABEL

F8

FE

FE

INSTRUCTION

CLD OR SEDSTY 2 20 DIVIDEDSTY 2 21LDA #11STA 2 22 DIVISORLDX #20JSR QDATFETLDX #22JSR QDATFETSTY 2 24 RESULTSTY 2 25

COMMENTS

- BINARY (DECIMAL) OPERATION- CLEAR DIVIDEND - PROMPT FOR

NUMBER- PROMPT FOR SECOND NUMBER

- FETCH DIVIDEND

- FETCH DIVISOR- CLEAR RESULT

THE OTHER FOUR ARE NEW,AS AN EXAMPLE0070 A9 55

72 0A73 20 60FE76 4C04FF

THEY ARE SHIFTS AND ROTATES. LET'S USE ASL

LDA #55AS LAJSR FE60JMP FF04

LOAD A IMMEDIATE WITH 55ARITHMETIC SHIFT LEFTJUMP TO SUBROUTINEJUMP

THE RESULT OF RUNNING THIS PROGRAM IS AA ON THE DISPLAY. EACH BITIN THE ACCUMULATOR HAS BEEN SHIFTED ONE BIT LEFT.

BEFOREAFTER

0101010110101010 0

ROLA, ROTATE LEFT ACCUMULATOR, (2A) WILL HAVE THE SAME EFFECT,EXCEPT THAT THE RIGHT INPUT 0 IS REPLACED BY C, IN THIS CASE 1,SOTHE RESULT IS AB.LSRA,LOGICAL SHIFT RIGHT ACCUMULATOR (4A)

CBEFORE ffl 01010101

10101010AFTER LL|RORA, ROTATE RIGHT ACCUMULATOR (6A) WILL REPLACE THE LEFT INPUT 0WITH C TO GIVE AAALL THESE INSTRUCTIONS MAY BE USED DIRECTLY ON MEMORY LIKE INCZ.4.5 MISCELLANEOUS REMAINING INSTRUCTIONSTHERE ARE A FEW INSTRUCTIONS LEFT,WHICH WILL HAVE TO BE DEALTWITH PIECE-MEAL:BRK00 :THE MICROPROCESSOR HAS TWO INTERRUPTS, AS EXPLAINED IN

THE HARDWARE SECTION, AND THE INSTRUCTION SIMULATES ANJRQ, FIRST SETTING THE B FLAG IN THE STATUS REGISTER. THERETURN AFTER A BREAK WILL BE AT THE NEXT BUT ONE BYTE: A COMBINATION OF TWO INSTRUCTIONS

I READ MEMORY BITS 6 & 7 INTO THE OVERFLOW &NEGATIVE FLAGS

II LOGICAL AND ACCUMULATOR AND MEMORY, A ZERORESULT SETTING THE Z FLAG. THE RESULT IS NOTLOADED INTO THE ACCUMULATOR. THE INSTRUCTIONIS USUALLY USED TO TEST THE STATUS OFPERIPHERAL DEVICES, WITHOUT UPSETTING A,X OR Y.

RTI, RTS 40,60 BOTH INSTRUCTIONS PULL THE PROGRAM COUNTER FROM* THE STACK, RTI FIRST PULLS THE PROCESSOR STATUS1 FROM THE STACK.

BIT2C

CHAPTER 5: ACORN HARDWARE5.1 CHIP LAYOUT AND BUSBEFORE PLUNGING DEEPER INTO SOFTWARE WE'LL TAKE A REST AND LOOKAT THE HARDWARE. WE'LL START WITH THE CPU BOARD

Page 30: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

CO

CO

(NDO

00

CO

CM

LL)00

•00QQ

Q

o

CDCOr—

C/)_ l

CNO

DO

<X

aDC

aavoaA3>il UJCO

ROUTINES BY ENTERING THE SECTION OF PROGRAM FROM THE TITLE LABEL(E.G. DIVIDE) TO THE RESULT LABEL AND SUBSTITUTING THE LINE

60 RESULT RTS .ALL ARE RELOCATABLE.

SYSTEM PROGRAMSTHESE PROGRAMS ARE ALL SHORT ROUTINES WHICH CAN PROVE USEFULTIME SAVERS AT THE DEVELOPMENT AND INPUT STAGES OF PROGRAMWRITING.IT MAY BE FOUND USEFUL TO KEEP COPIES OF THEM ON TAPE AND TO HAVETHEM IN THE ACORN AND BESIDE YOU WHILE DEVELOPING PROGRAMS.BRANCH CALCULATIONS IN PARTICULAR ARE A FERTILE SOURCE OFERRORS AND TIME WASTING IN ANY HAND ASSEMBLED PROGRAM.THE RELOCATOR Wl LL MOVE PROGRAMS AROUND MEMORY FOR YOU. AGODSEND TO ANYONE WHO FINDS THEMSELVES WITH THE NEED TOREENTER LARGE CHUNKS OF CODE MANUALLY.

MISCELLANEOUSTHIS IS A SELECTION OF PROGRAMS AND ROUTINES INCLUDED BECAUSETHEY ARE INTERESTING, ELEGANT OR IMPORTANT. THEY SHOW SOME OFOF THE THINGS THAT CAN BE DONE WITH THE SYSTEM, WHICH MAY BE MORETHAN YOU IMAGINE. WE HAVE, FOR INSTANCE, RUN A CHESS GAME IN THE 1KSYSTEM.IN PARTICULAR THE METRONOME AND COUNTER PROGRAMS ARE INTENDEDTO DEMONSTRATE SOME OF THE USES OF THE KEYBOARD. IN ORDER TOUNDERSTAND WHAT IS GOING ON WITH THESE PROGRAMS YOU WOULD BEWELL ADVISED TO STUDY THE MONITOR LISTING AND PART 1 OF THISMANUAL.

MATHEMATICALTHE SQUARE ROOT PROGRAM Wl LL CALCULATE EITHER DECIMAL OR HEXA-DECIMAL SQUARE ROOTS ACCORDING AS CLD (FOR HEX) OR SED (FORDECIMAL) IS ENTERED AS THE FIRST LINE. IN EITHER CASE THE PROMPTWILL BE XX0000XX . THE SQUARE SHOULD BE ENTERED, A CONTROL KEYPRESSED AND THE ROOT WILL APPEAR ON THE DISPLAY.THE PROGRAM IS BASED ON THE EQUALITY

((N+1)*(N+1))-(N*N)=(2*N)+1AND SUCCESIVELY SUBTRACTS 1,3,7,9 ETC. FROM THE SQUARE. WHEN THERESULT OF A SUBTRACTION GOES NEGATIVE THE NUMBER OF SUBTRACTIONSDONE TO DATE IS THE ROOT.HEX/DEC SQ ROOT.ADDR

02000201020302050207

020A

020C020E

HE>r

CODEF88484A220

84

84C8

OR21202088

24

22

LABEL

D8

FE

INSTRUCTION

SED (OR CLD)STY E SQHSTY Z SQLLDX #SQLJSR QDATFET

STYHSUBH

STY 2 ROOTINY

COMMENTS RELOCATABLE

- SETDECIMAL(BINARY)OPERATING- CLEAR SQUARE TO PROMPT

- FETCH THE NO. WHOSE ROOT IS TOBE FOUND

- CLEAR HIGH PART OFSUBTRACTING NO.

- CLEAR ROOT

Page 31: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

PART 2APPLICATION PROGRAMS

MATHEMATICAL1. SQUARE ROOT (HEX. OR DECIMAL)2. DIVIDE (HEX. OR DECIMAL)3. SINGLE BYTE MULTIPLY4. DOUBLE BYTE MULTIPLY

SYSTEM1. DECIMAL TO HEX.2. HEX. TO DECIMAL3. BRANCH OFFSET CALCULATOR4. RELOCATOR5. TAPE USE PROGRAMS6. SCROLL

GAMES1. NIM2. DUCK SHOOT

MISCELLANEOUS1. COUNTER2. KEYBOARD COUNTER ROUTINE3. METRONOME4. EIGHT QUEENS PROBLEM

GENERALTHESE APPLICATIONS PROGRAMS ARE INTENDED TO DEMONSTRATE SOMEOF THE CAPABILITIES OF THE SYSTEM AND OF THE PROCESSOR. THEY HAVEBEEN DESIGNED FOR CLARITY AND SIMPLICITY AND IN MANY CASES ARENOT OPTIMAL EITHER IN TERMS OF LENGTH OF PROGRAM OR OF EXECUTIONTIME. THEY ARE INTENDED SIMPLY TO GIVE YOU A FEEL FOR THE SYSTEMAND SOMEWHERE TO START OFF FROM.ALL PROGRAMS MARKED RELOCATABLE CAN BE ENTERED ANYWHERE INAVAILABLE MEMORY, SUBJECT TO NOT IMPINGING IN VARIABLE STORAGESPACE FOR EITHER THE PROGRAM OR MONITOR AND NOT USING SPACENEEDED BY THE STACK. (FOR STACK USAGE SEE RELEVANT SECTIONS OFPART 1 OF THIS MANUAL.)AS FAR AS HAS PROVED POSSIBLE THE CONVENTION OF A XX 0000 XXPROMPT FOR THE FIRST NUMBER TO BE ENTERED AND XX 1111 XX FOR THESECOND HAS BEEN OBSERVED IN THESE PROGRAMS. AFTER ENTERING ANUMBER CHECK THAT IT IS CORRECT AND THEN PRESS A CONTROL KEY(ANY ONE Wl LL DO) TO PROGRESS THROUGH THE PROGRAM.YOU SHOULD NOW BE READY TO TYPE IN THE PROGRAMS AND RUN THEM#

BOTH TO ASSURE YOURSELF THAT THE SYSTEM IS OPERABLE AND TOFAMILIARISE YOURSELF WITH ITS OPERATION.THROUGHOUT THESE NOTES X INDICATES AN UNDEFINED/UNIMPORTANTCHARACTER.MOST OF THE PROGRAMS WERE WRITTEN BY MARK I'ANSON, THANK YOUMARK I.

MATHEMATICAL PROGRAMSALL THESE ROUTINES RESET THEMSELVES WHEN A CONTROL KEY IS PRESSEDAFTER THE NUMBER HAS BEEN OBTAINEQTHEY MAY ALL BE USED AS SUB

THE OBVIOUS IMPORTANT DEVICE HERE IS A, THE MICROPROCESSOR. THIS ISWHERE A,X,Y,P,S,PC LIVE. FROM HERE COME THE COMMANDS TO RUNEVERYTHING ELSE. THERE ARE TWO PRIMARY BUSSES, CONSISTING OFPARALLEL PATHS OF BINARY DATA, THE BIGGEST BUS IS THE ADDRESS BUS.THIS CONSISTS OF 16 LINES TO TRANSFER THE ADDRESS GENERATED BYTHE PROCESSOR TO THE ADDRESS INPUTS OF ALL OTHER SYSTEM CHIPS.THIS BUS IS UNIDIRECTIONAL : ONLY THE PROCESSOR (IN A NORMALSYSTEM) GENERATES ADDRESSES, AND IT HAS 2 1 6 STATES (=65536,) THESECOND BUS ISTHE DATA BUS. THIS IS8 BI-DIRECTIONAL LINES, ALLOWINGA SINGLE WORD/BYTE TO BE TRANSFERRED EITHER FROM THE PROCESSORTO MEMORY - A W R I T E , OR FROM MEMORY TO PROCESSOR - A READ.THE REMAINING BUS IS THE CONTROL BUS, ITS MEMBERS HAVE NOPARTICULAR RELATIONSHIP WITH EACH OTHER, BUT THEY ARE ALL SUPER-VISORY SIGNALS FOR THE SYSTEM. THE FIRST CONTROL SIGNAL ISTHE R/WLINE. THIS SPECIFIES THE TYPE OF DATA TRANSFER THAT THE PROCESSORWISHES TO MAKE: WHEN THE R/W LINE IS HIGH (LOGIC ONE; > 2.4 V DC) THEPROCESSOR IS READING WHEN THE R/W LINE IS LOW (LOGIC ZERO <0 .8 V DC)THE PROCESSOR IS WRITING/THE NEXT CONTROL LINES ARE THE SYSTEMCLOCK, WHICH CONTROLS THE TIMING OF ALL DATA TRANSFERS. THEPROCESSOR, WITH HELP FROM 1/6 OF A TTL IC, GENERATES THE SYTEMCLOCK AS TWO NON-OVERLAPPING SQUARE WAVES, PHASE ONE (01) & PHASETWO (02) w

DURING 01 THE ADDRESS BUS AND THE R/W LINE CHANGE, AT THE END OF,OR DURING, 02 THE DATA IS TRANSFERRED. OTHER CONTROL SIGNALS ALSOCHANGE AT TIMES SPECIFIED WITH RESPECT TO THE SYSTEM CLOCK, E.G.THE SYNC SIGNAL : THIS GOES HIGH DURING 01 WHEN THE PROCESSOR ISFETCHING AN INSTRUCTION,AND RETURNS LOW WITH THE TRAILING EDGEOF 02.

Page 32: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

5.2 RESET. INTERRUPT REQUEST AND NON-MASKABLE INTERRUPTANOTHER CONTROL LINE IS RESET. THIS IS GENERATED BY SUITABLE HARD-WAREJIN THE ACORNTHE CORNER SWITCH ON THE CPU BOARD, AND THE RE-SET SWITCH ON THE KEYBOARD,) ANDCAUSES ALL PARTS OF THE SYSTEM TOBE RESET TO A SAFE, KNOWN STATE. IN THE PROCESSOR'S CASE RESETINITIALIZES THE PROGRAM COUNTER TO THE CONTENTS OF ADDRESSESFFFC AND FFFD WHICH, FOR ACORN, CONTAIN THE ADDRESS FEF3.EXECUTION OF THE ACORN MONITOR STARTS THERE. PERIPHERAL DEVICESSHOULD BE SET TO THEIR LEAST DANGEROUS STATE BY RESET, E.G.REMOVE INTERRUPT CAPABILITY, SET ALL PROGRAMMABLE INPUT/OUTPUTLINES TO INPUTS.THE TWO PUSH BUTTONS ON THE CPU BOARD ON EITHER SIDE OF THE RESETBUTTON ARE INTERRUPT BUTTONS. THE IDEA OF AN INTERRUPT IS TOPULL THE PROCESSOR AWAY FROM IT'S CURRENT TASK, LET IT BRIEFLY DOSOMETHING IMPORTANT AND THEN RETURN TO IT'S TASK AS IF NOTHINGHAD HAPPENED. THE 6502 HAS TWO DISTINCT INTERRUPT CAPABI LITIESIRQ

WITH AN INTERRUPT REQUEST, IRQ,THE PROCESSOR HAS THE OPTION OFIGNORING IT. AN IRQ IS ONLY GRANTED IF THE FLAG I (INTERRUPTDISABLE) IN THE PROCESSOR STATUS REGISTER IS 0. THE PROCESSORTHEN PUSHES PC & P & THEN SETS I TO 1. (THE STATE OF THE IRQ LINE ISCHECKED BETWEEN INSTRUCTIONS . . . IF IT REMAINS LOW,WE DON'TWANT ANOTHER INTERRUPT). THEN THE PROCESSOR LOADS PC FROMLOCATIONS FFFE & FFFF AND CONTINUES. NOTE THAT AN RTI RETURNSTHE ORIGINAL P, WHICH HAD THEI FLAG 0.

NMIWITH A NON-MASKABLE INTERRUPT, NMI, THE PROCESSOR HAS NOOPTIONS; WHEN THE LINE HAS BEEN LOW FOR AT LEAST TWO CLOCKCYCLES, THE PROCESSOR WILL FINISH ITS CURRENT INSTRUCTION, SAVEITS STATUS & PC, SETIHIGH AND FETCH A NEW PC FROM FFFA & FFFB.TO AVOID RECOGNISING ANOTHER INTERRUPT NMI IS EDGE-SENSITIVE:NO FURTHER INTERRUPTS ARE RECOGNISED UNTIL NMI HAS RETURNEDHIGH.SINCE NMI SETSIHIGH, IRQ Wl LL NOT SUCCEED DURING THENORMAL OPERATION OF AN NMI PROGRAM, BUT NMI Wl LL BE ABLE TOTAKE CONTROL DURING EXECUTION OF AN IRQ PROGRAM; IT HAS AHIGHER PRIORITY.

IRQ, NMI, & RESET ARE OPEN-COLLECTOR LINES ON THE CPU BOARD: MANYINTERRUPTING/RESETTING DEVICES MAY BE CONNECTED.

RST, IRQ, NMI

+5V

DEVICE 1

DEVICE 2

FFB3

B5B7B9BABBBD

BF

C1C3

C6C7C9

CACC

CDD0D1D3D6D8DBDDE0E2

E4FFE7

FFEA

EEF2F6

FFFAFFFCFFFE

85

8684684885A2

A9

8520

BA86C8

84D8

BD38E59D85BDE99D85A2

204C

3F

667F58ADF3B0

0A

0B0C

0D0D

FF

0E00

13

12

02

1?02110300031013

0007

06

6D6F5EFFFEFF

FE

01

•i £

01

01

01

FEFF

5B

7D7779

4F

077C71

BREAK

or** -

FONT

NMIVECRSTVECIRQVEC

STA Z R0

STXZ R1STY Z R2PLAPHASTA Z R3LDX #R3

LDA # FF

STAZ REPEATJSR QUAD

TSXSTX Z R7INY

STY Z R6CLD

LDA, X 0102SECSBC-Z RECALSTA, X 0102STA Z R5LDA, X 0103SBC #00STA, X 0103STA Z R4LDX#R7

JSR QUADJMP RE-ENTER

'0' ' 1 ' '2' '3'

'4' '5' '6' '7''8' '9' 'A' 'b''c' 'd ' 'E' T 'NMIRESETIRQ

- WHEN THE IRQ/BREAK VECTOR

POINTS HERE THEN DISPLAYDISPLAY EVERYTHING - SAVE A

- SAVE X- SAVE Y- GET P OFF STACK- PUT IT BACK FOR FUTURE USE- STORE Q IN REGISTER 3- SET X TO POINT AT REGISTERS

3 ^ 0 FOR QUAD- KILL POSSIBILITY OF DISPLAY

BEING ON SINGLE SCAN

- USE QUAD TO WRITE OUT A X Y P

- GET STACK POINTER

- Y ZERO SINE QUAD ENDED WITHDISPLAY SO THIS FORMS 01

- CLEAR DECIMAL MODE FOR BINARYSUBTRACT - DOESN'T AFFECTUSER SINCE PIS STACKED

- GET PCL OFF STACK

- CORRECT IT BY AMOUNT IN RECAL- PUT IT BACK ON STACK- AND STORE IT FOR QUAD- PCH OFF STACK- REST OF TWO BYTE SUBTRACTION- PUT IT BACK ON STACK- AND STORE IT FOR QUAD- POINT X AT THESE REGISTERS-

QUAD WILL DESTROY THEM- QUAD WRITES OUT PC SP- AND THE WHOLE SHEBARG STARTS

OVER AGAIN- 7 SEGMENT FORMS OF THE HEX

DIGITS

POINT TO THE ADDED INDIRECTIONPOINT TO THE RESET ENTRY POINTPOINT TO THE ADDED INDIRECTION

Page 33: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

FF45484B4D4F505152535557

FF5AFF5CFF5F

6163

6567

FF6AFF6C

6E71

FF72FF74

76797C7E

FF80FF82

85

8788

FF8A8D8F

929597

FF99

9B

2020B0A10A0A0A0A05814CD06CE0F0A2

8620A2B520CAD0A1

2020D0F0A22095

CAD020818D

20D0F0A1

F01

5E0CBC00

00450302043608

10880405B1

F806

(31A0F62A04DD05

F8DD0621

A0F31100

FEFE

& T>

FF

00

FE

FE

FEFE

FE

FE

0E

FE

'MODIFY"

N1"GO"N2

"STORE"

DATAS

"LOAD"ADDRSL

DATAL

"POINT"

JSR MHEXTDJSR DISPLAYBCS SEARCHLDA (00, X)ASLAASLAASLAASLAORA 2 KEYSTA (00, X)JMP "MODIFY"BNE N2JMP (GAP)CPX #04BEQ POINTLDX #08

STXZ DJSR QDATFETLDX #04

J LDA 2,X 05JSR PUTBYTEDEXBNE ADDRESSLDA (06, X)

JSR PUTBYTEJSR COM 16BNE DATASBEQWAYOUTLDX #04JSR GETBYTESTAZ,X05

DEXBNE ADDRSLJSR GETBYTESTA (06, X)STA 1PIB

JSR COM16BNE DATALBEQWAYOUTLDA (00, X)

BEQ SET

9D 85 18

9FA1

FFA3

FFA5

A7

A9 00F0 02A5 18

81 00

20 5E FE

SET

OUT

FFAA 4C 04 FF WAYOUTFFAD 6C 1C 00 NMIFFB0 6C 1E 00 IRQ

STAZP

LDA #00BEQ OUTLDAZ P

STA (00, X)

JSR MHEXTD

JMP RESTARTJMP (USERNMI)JMP (USERIRQ)

DISPLAY THE MEMORYAND GET KEYIF NOT HEX DO OVERHEX SO GET OLD INFO

MOVED ALONGAND PUT IN NEW INFOAND PUT IT BACKTHEN KEEP DOING ITMUST BE 4 OR 6 AS 2 ISTHE VERY SIMPLE GOIS IT 4 OR 6?WELL IT'S NOT 4SO IT MUST BE 6 - X NOW POINTSTO TAPGIVE PROMPTAND GET 2ND STORE INFOLOOP COUNTSEND ADDRESSES TO TAPE

X NEATLY ZEROED ON EXITDATA SEND - GET INFO FROMMEMORYAND SEND IT TO TAPESEE IF PRINTEDNOYES

RESCUE ADDRESSES FROM TAPEPUT THEM IN FAP & TAP, THOUGHIT COULD BE ELSEWHERE

X NEATLY SERVED AGAINGET DATA FROM TAPEAND STORE IT IN MEMORYAND ON THE DISPLAY SO IT CAN BESEENSEE IF FINISHEDNOYESSET/CLEAR BREAK POINT - GETDATA FROM ADDRESSED MEMORYIF ZERO BREAK POINT HASALREADY BEEN SET = MUST CLEARITNOT ZERO SO SAVE THEINFORMATIONAND PUT IN A BREAK POINT

WAS SET SO GET OLDINFORMATION BACKINSERT BREAK POINT OR OLDINFORMATIONNOW READ IT OUT AGAIN TOREVEAL ROMGO BACK & DO IT ALL OVER AGAININDIRECTION ON NMIINDIRECTION ON IRQ

TO DECIDE WHICH DEVICE CAUSED AN INTERRUPT THE PROCESSOR CHECKSA STATUS REGISTER OF EACH DEVICE, USING THE BJT INSTRUCTION TO TESTBIT 7 OF THE DEVICE. AFTER EXECUTING THE PROGRAM REQUIRED FORAPARTICULAR DEVICE THE PROCESSOR RESETS THE DEVICE'S INTERRUPTBEFORE EXECUTING ITS RTJ. IF THE INTERRUPT LINE IS STILL LOW (IRQ) ORMAKES ANOTHER NMI THE WHOLE THING IS REPEATED. THIS PRIORITIES THEINTERRUPTS IN SOFTWARE.

5.3 6502 INTERNAL ARCHITECTURE

REGISTERS

(4)IRQ

(b) I (40) CONTROLNMI RST

ADDRESSBUS

(9)1 -

(10)2 -

(11)3 -

(12)4 -

(13)5 -

(14)6 -

(15)7 "

(16)

8 - * -(17)

9 - * -(18)10 - * -

(19)11 - « -

(20)12 - * -

(22)13 * * -

(23)14 - * -

(24)15 **~

QQ

(25)

RDY (2)TIED HIGH ON ACORN

•-SYNC (7)

S.O.(38)TIED HIGH ON ACORN

CLOCKINPUT

01 (3)02 (39)

- • R/W (34)

0 (37)

= BYTE LINE

= 1 BIT LINE

PIN NUMBER

Page 34: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

5.4 PROMS, EPROM, RAM, RAM I/OTHE NEXT THINGS CONNECTED TO THE CPU ARE DEVICES D. THESE AREPROMS: PROGRAMMABLE READ ONLY MEMORYS. EACH CONTAINS 512 X 4BITS OF INFORMATION WHICH HAS BEEN FIXED AS HALF OF THE ACORNMONITOR. SHORT OF CATASTROPHIC DESTRUCTION THERE IS NO WAY TOMAKE A 'HIGH' PART OF THE MEMORY 'LOW', BUT 'LOW' PARTS CAN BEPROGRAMMED 'HIGH' BY PASSING EXCESS CURRENT THROUGH A FUSE ANDDESTROYING IT. IN NORMAL ACORN OPERATION THESE TWO DEVICES WILLBE ENABLED BY ANY ADDRESS IN THE RANGE F800 TO FFFF: THEY THUSOCCUR IN THE MEMORY FOUR SEPARATE TIMES, MORE ON THIS ANON.AKIN TO D, IS DEVICE E. THIS IS NOT PART OF THE KIT, BUT IS INTENDEDTO BE A2048X8 EPROM: ERASEABLE PROGRAMMABLE READ ONLY MEMORY.LIKE THE PROM, THE EPROM CAN BE PROGRAMMED ALTHOUGH FUSES ARENOT BLOWN BUT CHARGE IS STORED ON THE GATE OF AFIELD EFFECTTRANSISTOR (F.E.T.). THIS CHARGE CAN ONLY LEAK AWAY SLOWLY - ABOUTTEN YEARS, UNLESS THE GATE IS EXPOSED TO ULTRA-VIOLET LIGHT WHICHHAS ENOUGH ENERGY TO SET THE DEVICE BACK TO IT'S STANDBY STATE.(IF YOU MAKE ONE PROGRAM MISTAKE THE WHOLE DEVICE MUST BEERASED TO ALLOW YOU TO CORRECT THE MISTAKE. STI LL, IT'S BETTERTHAN NOT BEING ABLE TO CORRECT A MISTAKE AS WITH THE PROM). ANENABLE SIGNAL IS PROVIDED BETWEEN F000 & F7FF FOR THIS DEVICE, ORELSE IT MAY BE PROGRAMMED WITH A LARGER MONITOR AND ENABLED BYTHE F 8 0 0 - FFFF SIGNAL SMALLER (1024 X 8 or 512 X 8) EPROMS MAY ALSOBE FITTED IN SOCKET E, BUT THESE OLDER DEVICES USUALLY REQUIREADDITIONAL POWER SUPPLIES, AND TWO MODIFICATIONS TO THE CIRCUITBOARD ARE REQUIRED TO ALLOW THIS.THE LAST TYPE OF MEMORY ON THE CPU BOARD IS TYPE C. THIS IS A STATICREAD/WRITE MEMORY: INFORMATION CAN BE CREATED AND DESTROYEDBY THE MICROPROCESSOR ITSELF, BUT ALL IS LOST WHEN THE POWER ISREMOVED. TOGETHER WITH THE DYNAMIC VERSION, THIS TYPE OF DEVICEHAS RECEIVED THE NAME RANDOM ACCESS MEMORY R.A.M., ALTHOUGHTHEY ARE NO MORE RANDOM THAN P.R.O.M.S. OR E.P.R.O.M.S. DEVICES CARE 1024X4 RAMS, TWO ARE REQUIRED LIKETHETWO PROMS TO BUILD UPA WHOLE BYTE, AND THEY ARE ENABLED BY ADDRESSES IN THE RANGE0000 TO 03FF. THEY THUS CONTAIN ZERO PAGE & PAGE 1, THE STACK PAGE,AS WELL AS TWO FURTHER PAGES.THE ENABLE SIGNALS FOR ALL I.C.S. ON THE CPU BOARD ARE PROVIDED BYTHE LOGIC I.C.'S G. THESE I.C.S. DECODE CERTAIN RANGES OF ADDRESSESFROM THE ADDRESS BUS BY RECOGNISING A PATTERN ON HIGH ADDRESSLINES, E.G. FOR THE SIGNALTO THE TWO RAM'S THE TOP 6 (A15-A10)ADDRESS LINES MUST BE LOW (LOGIC ZERO).THE SIGNALS ARE ALLBROUGHTTO THE SOCKET F, WHERE LINKS CAN BE MADE (OR A D.I.L.HEADER USED) TO TAKE THE ENABLE SIGNALS AWAY TO THE CHOSENDEVICES THUS MANY DIFFERENT SYSTEM CONFIGURATIONS CAN BE USED,FROM JUST THE TWO P.R.O.M.S AND DEVICE B1, THROUGH TO BOTH C'S, B2 &E OR ANY COMBINATION.

DEVICES B HAVE TWO FUNCTIONS. IN THE FIRST PLACE EACH CONTAINS A128 X 8 RAM, BRINGING THE CPU BOARD UP TO 1280 BYTES OF R.A.M.SECONDLY EACH HAS THE FACILITIES FOR MAKING TWO WORDS OF MEMORY

EAEDEEEF

FEF1

FEF3F5F6F9

FEFB

FD

FFFF01

FF02

FF04

FF07FF09

0B0D

0F111315

FF17191B1D

FF1E202224

FF26282A

FF2CFF2E

31

FF3436

38FF39

3A3C3E

41

43

0E6A88D0F0

A2

86A0

A2

94CA

D0

20

9029

C990

F0C9F0B0A5A6A440

F6D0F6B0

B5D0D6D6204C

8484

0AAA

498520

E0

B0

20

F6DA

FF

230E80

09

0E

FB

0C

F207

0425

6F06090F0A0B0C

000C0108

000201006445

1617

F71088

02

15

0E

0E

FE

F'F'

FE

RESET

INIT

RO^J>

RESTART

RE-ENTERSEARCH

"RETURN"

"UP"

"DOWN"

NODECENTERM

FETADD

ASL 1PIAROR ADEYBNE INPUTBEQ WAIT

LDX #FFTXSSTX 1BDDRSTX Z REPEATLDY #80

LDX #09

STYZ,X REPEATDEX

BNE ROUND

JSR DISPLAY

BCC INITAND #07

CMP #04BCC FETADD

BEQ LOADCMP #06BEQ "UP"BCS "DOWN"LDAZ R0LDX Z R1LDY Z R2RTI

INCZ,X00BNE ENTERMINCZ,X01BCS ENTERM

LDAZ,X00BNE NODECDECZ,X01DEC Z,X 00JSR QHEXTD1JMP "MODIFY"

STY Z D+6STY Z D+7

ASL ATAX

EOR #F7STAZDJSR QDATFET

CPX #02

BCSNI

GET SAMPLE AUTO CARRYAND AUTO A

KEEP GOINGUSE WAIT TO GET OUT ONTO THETHE SHOP BIT HIGHMAIN PROGRAMINITIALIZE STACKAND B DATA DIRECTION REGISTERMULTI-SCAN DISPLAY MODETHE FAMILIAR DOT ON THEDISPLAYALL EIGHT DISPLAYS ANDINITIALIZE EXECY USED FOR AMUSEMENT

X ZERO ON EXIT, SO UP & DOWNIMMEDIATELY VALIDMARK RETURN TO MONITOR POINTDISPLAY DISPLAY & GET KEYHEX KEY GETS THE DOTS BACKREMOVE ANY STRAY BITS(EFFECTIVELY SUBTRACT 10)

KEYS OF VALUE LESS THAN 4NEED AN ADDRESSKEY 4 IS THE LOAD KEY

KEY 6 IS UP& KEY 7 IS DOWNMUST BE KEY 5 - GET A BACKGET X BACKGET Y BACKGET P & PC BACK & CONTINUEFROM WHERE YOU WERE16 BIT INDEXED INCREMENT

A BRANCH ALWAYS : THE CARRYWAS SET BY THE FF11 COMPARE16 BIT INDEXED DECREMENT

NOW DISPLAY THE VALUEAND GET INTO THE MODIFYSECTIONCLEAR DISPLAYS 6& 7 _ Y WAS ZERO ON EXIT FROMDISPLAYDOUBLE ATHE ZERO PAGE ADDRESSES MAP,GAP, PAP & FAPFIX UP DIGIT 0 COMMAND SYMBOL

FETCH THE ADDRESS, AUTO MAP,GAP, PAP OR FAPCHECK X TO FIND OUT WHICHCOMMAND WE'RE DOINGMUST BE 2, 4 OR 6 - AS 0 IS

Page 35: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

87FE88

8B8E9092939495

FE96

FE97999B9C9E

FEA0

A2A4

FEA6

A8AAACAE

FEB0FEB1

B3B6B8BBBC

FEBDC0G1C4C5C7CA

FECD

FED0D2D4D5DY

D8DADC

FEDD

FEDF

E2E4

FEE7

6020

20B0A00A0A0A0A0A

363688D0F0F6

D0F6B5

D5D0B5D560A0

8CA08C6A6A206A8D8810208C20

84A088D088

D0A460A0

2C

3020

90

64

0C2004

0001

F8E806

020706

(07040709

40

220720

CD

20

F6CD20D0

1A48

FD

FD1A

08

20

FBD0

CD

FE

FE

I

o%

0E

0E

FE

0E

FE0EFE

0E

FE

FF

QDATFE7

SHIFTIN

COM 16

UDINC

RETURNPUTBYTE

AGAIN

WAIT

y2 W A I T

WAIT 1

WAIT 2

GETBYTE

START

INPUT

RTSJSR QHEXTD1

JSR DISPLAYBCS RETURNLDY #04ASLAASLAASLAASLAASLA

ROLZ,X00ROLZ,X01DEYBNE SHIFTINBEQ QDATFETINCZ,X06

BNE NOINCINCZ,X07LDAZ,X06

CMPZ,X08BNE RETURNLDAZ,X07CMPZ,X 09RTSLDY #40

STY1ADDRLDY #07STY 1PIAROR AROR AJSR WAITROR ASTA 1PIADEY ,. '£ f

(BNE^GAINJSR WAITSTY 1PIAJSR 1/2WAIT

STY Z TYLDY #48DEYBNE WAIT 1DEY

BNE WAIT 2LDYZTYRTSLDY #08

BIT 1PIA

BMISTARTJSR 1/2WAIT

JSR WAIT

QUAD DATA FETCH - DISPLAY OLDDATAGET KEYNON HEX RETURNLOOP COUNTER

DIGIT IN A IN CORRECT PLACEMULTI SHIFT TO GET DIGIT INTOMEMORYINDEXED

- KEEPSHIFTING IN- GO AND DO IT ALL AGAIN- INCREMENTS COMPARE 16 BIT

NOS - INCREMENT LOWER- NO HIGH INCREMENT

- LOW BYTE EQUALITY TEST

- NO NEED TO DO HIGH BYTE- HIGH BYTE EQUALITY TEST

- PUT BYTE TO TAPE-CONFIGUREI/O PORT

- LOOP COUNTER- AND SEND THE START BIT

- BACK A UP A COUPLE OF BITS- WAIT TO SEND OUT RESET BIT- SENDING ORDER IS BIT 0->BIT 7- SEND BIT

- KEEP GOING- WAIT FOR THAT BIT TO END- SEND STOP BIT : Y IS FF- 300 BAND WAITING TIME - IN TWO

PARTS- 1/2THE WAITING TIME-SAVE Y- 72X5JUS DELAY- PART ONE OF THE WAIT

- Y WAS ZERO ON ENTRY - 256 x 5/LtSDELAY

- RETRIEVE Y

- GET BYTE FROM TAPE - LOADCOUNTER

- WAIT FOR 1 ~>0TRANSISITON -A START BIT

- WAIT HALF THE TIME, SOSAMPLING IN THE CENTRE

- FULL WAIT TIME BETWEENSAMPLES

(16 BITS) APPEAR IN A USABLE FORM FOR THE OUTSIDE WORLD. THE ACORNMONITOR USES DEVICE B1 TO CONTROL THE DISPLAY, CASSETTE INTERFACEAND KEYBOARD.EACH ONE OF THE 16 LINES MAY BE PROGRAMMED TO BE AN INPUT OR AN

CONTROLLINES

DB7-D80

OutputDefinitionRegister

OutputDefinitionRegister

PA7-PA0

INTR

PB7-PB0

BitOperation

ADG-AD0f[

128x8 RAM

if

8154 RAM I/O

Page 36: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

OUTPUT DEPENDING ON THE STATE OF INTERNAL CONTROL REGISTERS.ONLY A GENERAL DESCRIPTION OF THE DEVICE IS GIVEN HERE, INADDITION TO THE FOLLOWING FUNCTIONS PORT A MAY BE SET TOOPERATE IN A VARIETY OF DIFFERENT HANDSHAKING TRANSFER MODESBY USE OF THE MODE DEFINITION REGISTER. IT SHOULD BE NOTED THATTHESE MODES REQUIRE CONNECTION OF INTERRUPT AND THAT THEINS8154 INTERRUPT LINE IS THE INVERSE OF THAT REQUIRED BY THEPROCESSOR.

THE 16 LINES ARE, AS YOU MIGHT EXPECT, DIVIDED INTO TWO SEPERATEBYTE SECTIONS A & B. A & B BOTH HAVE AN "OUTPUT DEFINITIONREGISTER" ASSOCIATED WITH THEM. EACH BIT IN THE O.D.R. DEFINES THEASSOCIATED BIT IN THE TORT' AS EITHER AN INPUT (0) OR AN OUPUT (1).THUS, IN THE MONITOR WE WRITE FF TO THE SEGMENT O.D.R. TO USE ALLITS LINES AS OUTPUTS, AND 'DISPLAY' WRITES 07 TO THE DIGIT DRIVEO.D.R. TO HAVE 3 OUTPUTS AND 5 INPUTS.NOT ONLY MAY WE READ/WRITE TO THE OUTPUT PORT USING THEPARALLEL READ & WRITE OPERATIONS, BUT WE MAY ALSO READ/WRITESINGLE BITS:

OPERATIONSETSETCLEARCLEARREADREADSETSETCLEARCLEARREAD

BIT0BIT 7BIT0BIT 7BIT0BIT 7BIT1BIT 6BIT 2BIT 5BIT4

PORTPORTPORTPORTPORTPORTPORTPORTPORTPORTPORT

AAAAAABBBBB

ADDRESS LOW1017000700 or 1007 or 17191E0A0D0Cor1C20212223

R/WWWWWRRWWWWRRorWRorWWW

PORT APORTBO.D.R.A.O.D.R.B.

IF YOU READ A SINGLE BIT IT WILL END UP IN BIT 7 OF A BYTE, THUS THEBIT INSTRUCTION WILL ASSIGN IT TO THE TESTABLE N FLAG.THE INS8154 ALSO CONTAINS A USEFUL 128 BYTES OF RAM. THIS ISCONTINUOUS FROM (ADDRESS LOW) 80 TO FF.DEVICE B1 IS ENABLED FOR ADDRESS HIGH OF 0E, DEVICE B2 IS AT 09.

FE3E

4042

4446

48FE4A

4C

4E50

FE52

54

56

585A5D

FE5E

FE60

62FE64

FE666868

FE6C

6D

FE6F

707174

7576777879

FE7A7C7E7F8284

E4

D0C9

90A9

D0C5F0

8549

29

C9

85

A68260A0

A0

D0A0

B5208888

B5

C8

482088

684A4A4A4A

8429A8B9A499

19

F038

0480

E60FE4

0F38

1F

10

0D

1A21

00

06

0B03

006F

01

7A

1A0F

EA1A10

0E

FE

FE

FF

00

BUTTON

PRESSED

OUTPUT

MHEXTD

RDHEXTD

QHEXTD1

QHEXTD2

DHEXTD

HEXTD

CPX

BNECMP

BCCLDA

BNECMPBEQ

2 COL

DELAY#38

PRESSED#80

KEYCLEAR2 EXECDELAY

STAZ EXECEOR #38

AND

CMP

# I F

#10

STA^-KEY

LDXSTYRTSLDA

LDY

BNELDY

LDAJSR IDEY

DEY

LDA

INY

PHAJSR IDEY

PLALSRLSRLSRLSR

STYANDTAYLDALDYSTA,

ZTX1PIB

(00, X)

#06

DHEXTD#03

Z&00DHEXTD

2,X 01

HEXTD

AAAA

2TY#0F

, Y FONTZTY,YD

ARE WE ON THE SAME KEY'SCOLUMN?NOHAS A KEY ACTUALLY BEENPRESSED?YESNO, THEN CLEAR THE EXECUTIONSTATUS - THE KEY HAS BEENPRESSED & RELEASEDALWAYS BRANCHA KEY HAS BEEN PRESSEDBUT IT HAS ALREADY BEENEXECUTEDSET IT AS BEING EXECUTEDJIGGERY POKERY TO ENCODE THEROW INPUTS TO BINARYALSO ENSURE THE KEY IN REPEATWAS OF REASONABLE SIZEA HEX KEY OR NOT? CARRY CLEARIF HEXPUT THE KEY IN A TEMP LOCATIONFOR FURTHER USE (BY "MODIFY")RETRIEVE XTURN THE SEGMENT DRIVES OFFAND RETURNMEMORY HEX TO DISPLAY = GET ABYTE FROM MEMORYRIGHT (OF DISPLAY) DOUBLE HEXTO DISPLAY : SET Y TO RIGHT OFDISPLAYAND USE DHEXTDQUAD HEX TO DISPLAY 1: SET YTO USE POSNS 1,2,3 & 42: USE ANY Y: GET THE DATAAND USE DHEXTD

HAVING DECREMENTED THEPOSITIONGET THE HIGH BYTE OF THE DATA& USE DHEXTDDOUBLE HEX TO DISPLAY : FIRSTHEX ON RIGHTEST POSITIONSAVE AUSE HEX TO DISPLAYGET Y BACK TO CORRECTPOSITIONRETRIEVE A

ORIENTATED FOR OTHER HEXDIGITHEX TO DISPLAY = SAVE YREMOVE SURPLUS BITS FROM A& PUT IT IN 7GET THE 7 SEGMENT FORMRETRIEVE YAND POSITION THE 7 SEG FORM ONTHE DISPLAY

Page 37: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

ACORN MONITOR

ADDR HEXCODE

FE00 A0 06

LABEL

QUAD

FE0204

0708090A

FE0CFE0E

10

FE1315

171A

1D2022

2426

B5 00 STILL20 6F FE

CA888810 F6

86 1A DISPLAYA2 07 R ESC AN8E 22 0E

A0 00B5 10

SCAN

8D 21 0E8E 20 0E

AD 20 0E29 3F24 0F

10 1870 0A

INSTRUCTION

LDY #06

LDA ZX 00JSR DHEXTD

DEXDEYDEYBPLSTILL

STX Z TXLDX #07STX 1 ADDR

LDY #00LDA Z,X D

STA 1PIBSTX 1PIA

LDA 1PIAAND#3FBIT Z EXEC

BPL BUTTONBVS DELAY

28

2A

2C

2E

FE30

FE32

3335

FE36

38

3A3C

C9

B0

86

A9

85

88

D0CA10

A5

3010

38

06

19

40

0F

FD

DB

0E

D214

KEYCLEARDELAY

CMP #38

BCSDELAY

STX Z COL

LDA #40

STA 2 fecEC 'DEY

BNE DELAYDEXBPL SCAN

LDA Z REPEAT

BMI RESCANBPL OUTPUT

COMMENTS

DISPLAY THE 4 BYTES AT X - 3 . X - 2 ,X - 1 & X IN THAT ORDER ON THEDISPLAY- GET THE BYTE POINTED TO BY X- USE DOUBLE HEX TO DISPLAY

ROUTINE- NEXTX- NEXT Y POSITION

- FALL AUTO DISPLAY WHENFINISHED - Y POSITION & ALSOLOOP COUNTER

- SAVE X!!!!- SCAN 8 DIGITS, NO MATTER WHAT- SET UP DATA DIRECTION

REGISTER- CLEAR Y FOR LATER USE- GET DISPLAY DATA FROM THE

ZERO PAGE MEMORY- & PUT IT ONTO SEGMENTS- SET DIGIT DRIVE ON AND THE KEY

COLUMNS- GET KEY DIGIT BACK- REMOVE SURPLUS TOP BITS- CHECK STATUS ='I 'MEANS NOT

PROCESSING A KEY- BUT 0 MEANS THAT WE ARE- THUS CAN BE BLOWN TO AN

ESCAPE FROM THE DISPLAYROUTINE ALTOGETHER ON STATUSC0 AT THE MOMENT IT IGNORESKEYS IF GIVEN THIS STATUS

- CHECK FOR ALL 1'S ROW INPUTFROM KEYBOARD = SET COPY IOFSO

- IF ALL 1's THEN NO KEY HAS BEENPRESSED

- STORE THE PRESSED KEY'SCOLUMN INFORMATION

- SET STATUS TO "WE AREPROCESSING A KEY"

- Y WAS ZERO SO HERE IS A 256X5/JSDELAY

- Y WILL BE ZERO ON EXIT

- IF X WAS STILL TVE,CONTINUETHIS SCAN

- IF WE SHOULD CONTINUESCANNING THEN TOP BIT IS SET

- CONTINUE SCANNING- IF TOP BIT IS ZERO, THEN USE THIS

DATA AS THE KEY ITSELF

ALSO ON THE CPU BOARD ISA5V REGULATOR. THIS PROVIDES THEREGULATED +5V POWER SUPPLY USED BY ALLTHE I.C.S. ON THE BOARD, ANDTHE KEYBOARD/INTERFACE BOARD WHEN CONNECTED. IF THE 2704 OR2708 TYPE OF E.P.R.O.M. IS EMPLOYED IN SOCKET E, EXTRA +12 & - 5 VPOWER SUPPLY LINES ARE REQUIRED, AND TWO TRACKS ON THE P.C.B.NEED CUTTING.

THE TWO CUTS ARE ON THE REAROF THE MPU BOARD IN THE TOPLEFT HAND CORNER. X's MARKTHE SPOTS

(THERE IS NO PROVISION FOR ON-BOARD REGULATORS FOR THESE TWOEXTRA SUPPLIES).OF COURSE, THE 2716 EPROM NEEDS NO EXTRA SUPPLY LINES, AND IS THEDEVICE THAT THE P.C.B. WAS DESIGNED FOR, IT PLUGS STRAIGHT INTOSOCKET E.THE CONNECTOR H CARRIES THE ADDRESS BUS, THE DATA BUS, THECONTROL BUS, POWER SUPPLY LINES AND THE 16 INPUT/OUTPUT LINESFROM B2. THIS Wl LL PLUG INTO A BACKPLANE WHICH TAKES THE BUSSESTO OTHER ACORN CARDS.

5.5 THE KEYBOARD AND TAPE INTERFACEAT THE OTHER END OF THE BOARD, CONNECTOR I CARRIES ALL 16 I/O LINESFROM DEVICE B1, AS WELL AS OV, +5V, 02 & RESET LINES. WITH THEINTELLIGENT ACORN MONITOR AND THE KEYBOARD BOARD, THE I/O LINESARE DEDICATED AS FOLLOWS

SEGMENT DRIVESBINARY ENCODED DIGIT DRIVESKEYBOARD ROW INPUTSFROM COMPUTER TO CASSETTEFROM CASSETTE TO COMPUTER

B1 PORT B0-7A0-2A3-5A6A7

OUTPUTSOUTPUTSINPUTSOUTPUTINPUT

Page 38: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

- A COMMENT FOR THOSE INTERESTED: ALTHOUGH THE KEYBOARD ONLYCONSISTS OF 24 KEYS AT PRESENT, IT IS POSSIBLE, WITH A PRIORITYENCODER ON THE ROW INPUTS, TO USE UP TO 56 KEYS. THE DISPLAYSUBROUTINE Wl LL COPE CORRECTLY WITH THE UNKNOWN KEYS, EXCEPTTHAT, AT THE POINT, OUTPUT, IT THROWS AWAY A SIGNIFICANT BIT OFINFORMATION. HOWEVER, THE ACTUAL KEY VALUE HAS BEEN STORED INLOCATION 000F AND SO CAN BE RECOVERED. THE UNKNOWN KEYS WILL NOTAFFECTTHE MONITOR ITSELF, SINCE AT THE POINT SEARCH MORE ITS OFINFORMATION IS THROWN AWAY, LEAVING THE MONITOR WITH A CHOICEOF EIGHT VALUES.THE SUBROUTINE DISPLAY RUNS THE DISPLAY IN A MULTIPLEXED MANNER,AT THE SAME TIME STROBING AND DEBOUNCING THE MATRIXED KEYBOARDON THE KEYBOARD BOARD. EACH OF THE EIGHT COLUMNS OF THE 8 X 3KEYBOARD IS DRIVEN BY ONE OF THE EIGHT DIGIT DRIVER LINES, THETHREE ROW LINES ARE CONNECTED TO DEVICE B1, AND THEY ARE PULLEDTO LOGIC ONE BY THE 4K7 RESISTORS. IN CONJUNCTION WITH ITS COLUMNBEING DRIVEN LOW, A CLOSED KEY PRODUCES A LOW ON ONE OF THE ROWINPUTS . • . +5V

4K7

M

8

0

G

9

1

P

A

2

S

B

3

L

C

4

R

D

5

t

E

6

F

7

1

ALL THE INTERFACE BETWEEN THE MICROPROCESSOR AND THE KEYBOARDAND DISPLAY IS THUS ACCOMPLISHED BY ONE OCTAL DECODER/DRIVERAND THREE RESISTORS.THE REST OF THE CIRCUITRY ON THE INTERFACEBOARD ALLOWS PROGRAMS TO BE RECORDED ON CASSETTE AT THIRTYBYTES PER SECOND, THE INTERFACE IS SLIGHTLY MORE COMPLICATEDTHAN THE SINGLE I.C. AND THREE RESISTORS USED ABOVE, IT HAS TWOTASKS.

I CONVERTTHE SERIALSTREAM OF INFORMATION PRODUCED BY PUTBYTEINTO TONES SUITABLE FOR AN UNMODIFIED CASSETTE RECORDER TORECORD.THE FREQUENCIES USED ARE 2403.8 HZ FORA LOGIC ONE AND1201.9 HZ FOR A LOGIC ZERO. THE FREQUENCIES ARE PRODUCED BYDIVIDING 02, WHICH IS CRYSTAL CONTROLLED AT 1 MHZ, BY 416 OR 832.

II CONVERT THE PLAYED BACK FREQUENCIES INTO A STREAM OF BINARYINFORMATION. THE PLAYBACK IS 'AMPLIFIED' INTO A SQUARE WAVE, ANDITS PERIOD IS COMPARED WITH THE PERIOD OF A REFERENCE DIGITALMONOSTABLE ON THE CIRCUIT BOARD

BECAUSE OF THE AMPLIFICATION STAGE, THE OUTPUT FROM A TAPERECORDER'S 'LINE' OUTPUT, OR THE 'EAR' JACK SOCKET, SHOULD PERFORMSATISFACTORILY EVEN AT MODEST VOLUME LEVEL. HOWEVER THECOMPUTER OUTPUT IS AT QUITE HIGH LEVEL AND SHOULD BE ATTENUATEDFOR THE TAPE RECORDER. TO PREVENT NOISE PICK-UP THIS SHOULD BE

WITH THE COMPLETE PROCESSOR STATUS RECOVERED. THUS, IF WE FINISHTHE PROGRAM020D 69 19 ADC #19020F 20 60FE JSR RDHEXTD0212 4C04FF JMP RESTART0215

AND PRESS R,THE DISPLAYED ANSWER WILL BE 03

6.3 THE SINGLE STEPPING FACILITYA MORE INTERESTING USE OF THE ROUTINE BREAK AT FFB3 IS IF YOU GENERATEGENERATE A NMI EVERY OPCODE FETCHED NOT IN THE MONITOR, AS DISCUSSEDDISCUSSED IN THE HARDWARE SECTION THE SYNC PULSE ISSUED DURING ANOPCODE FETCH IS LESS THAN 1 CYCLE LONG, WHILE NMI REQUIRES AT LEAST 2CYCLES. A LATCH IS REQUIRED TO STRETCH THE SYNC SIGNAL

V274L574BC 107

SYNC _ T L

PROMENABLESIGNAL

TO NMIOPENCOLLECTOR LINE

SINGLE STEP OPEN./ 4K7

AND IT ALSO ONLY PROVIDES AN NMI WHEN NOT IN THE MONITOR. BEFOREEXECUTING A PROGRAM SET THE NMI VECTOR (LOCATIONS 001C & 001D) TOBREAK (FFB3) THE PROGRAM COUNTER RECALCULATION, IN 001 B, SHOULDBE 00. EACH INSTRUCTION EXECUTED CAUSES THE MONITOR TO DISPLAY THESTATUS OF THE PROCESSOR, PRESSING R CAUSES THE NEXT INSTRUCTION TOBE EXECUTED. YOU MAY USE THE MONITOR TO ALTER A,X,Y (LOCATIONS)000A, B & C) OR P (AT STACK POINTER + 1), BEFORE THE NEXT STEP. IT ISINADVISABLE TO CHANGE PC (STACK POINTER +2 &+3), BUT THIS CAN BEDONE AS WELL. THE SINGLE STEP EXECUTION CAN BE STOPPED IN TWO WAYS1 GROUND NMI LINE/GROUND THE SET INPUT OF THE D FLIP-FLOPJi POINT THE NMI VECTOR AT AN RTI INSTRCTION, SAY THE ONE AT FFID(EXECUTION OF A PROGRAM WILL BE SLOWED DOWN BY A FACTOR OF 5 ORSO DUE TO THE PERSISTENT NMI'S.)AN IMPORTANT NOTE: THE BREAK ROUTINE SETS THE REPEAT LOCATIONTO FF, SO THAT IT, AND THE MONITOR, MAY SAFELY USE THE DISPLAYROUTINE. IF YOU NEED TO USE SINGLE SCANS AND BREAKS TO THE BREAKROUTINE, SOME INGENUITY WILL BE REQUIRED, OR SOME DEDICATEDBUTTON PUSHING.NOW THE COMPLETE MONITOR LISTING. THIS IS WRITTEN TO FIT IN THE TWO512X4 PROMS.

Page 39: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

A F T E R T H E ADDRESS IS SET UP, THEN ANY KEY Wl LL CHANGE THE STATEOF IT'S CONTENTS: IF NOT A BREAK, A BREAK IS INSERTED, THEORIGINAL DATA IS SAVED IN LOCATION 0018. IF A BREAK,THEN THECONTENTS OF 0018 ARE INSERTED. THE RESULTING STATE OF THELOCATION IS DISPLAYED

DONE IN THE PLUG CONNECTING TO THE RECORDER

P. 0 2 0 0 0 0.

WE ARE NOW BACK AT FF04. BUT t & i NOW OPERATE ON THE P ADDRESS.CONTENTS OF A LOCATION MAY BE CHANGED AS IF THIS WERE M.PRESSING P TWICE WILL INSERT A BREAKPOINT (ONLY A SINGLELOCATION'S BACK-UP COPY IS RETAINED) AND SEND YOU BACK TO FF04.THE M KEY WILL RETURN IT'S MEMORY ADDRESS WHEN PRESSED

NOW THE PROGRAM IS SITTING THERE WITH A BREAK AT 0200. EXECUTIONOF THIS BREAK Wl LL CAUSE AN I RQ AND CONTROL IS TRANSFERRED TOTHE ADDRESS IN LOCATION 00IE & 001 F: FOR DIAGNOSTICS THIS ADDRESSSHOULD BE FFB3 (THE B3 IN 00IE&THE FF IN 00TE) ALSO .--•• 1^THE PROGRAM COUNTER REQUIRES RESETTING AFTER A BREAK. THEAMOUNT BY WHICH THIS IS DONE, 02, SHOULD BE STORED IN LOCATION 00IBNOW EXECUTING THE BREAK CAUSES THE STATUS OF THE PROCESSOR TOBE DISPLAYED IN THE FOLLOWING FORM

(HEX PAIRS OF DATA IN EACH)(TWO BYTES EACH, SECOND SET DISPLAYED

AFTER ANY KEY IS PRESSED).

-SET INTERRUPT DISABLE-CLEAR OVERFLOW-CLEAR CARRY-SET DECIMAL MODE11

33-INITIALISE STACK22

FOR THE FIRST DISPLAY SET AND

FOR THE SECOND SET.THE ACTIVE FLAGS ARE THE DECIMAL AND INTERRUPT DISABLE FLAGS,(THE 2 PART OF THE STATUS REGISTER'S 2C IS AN UNUSED FLAG), THEPROGRAM WAS STOPPED AT LOCATION 020D WITH AN EMPTY STACK (THREEBYTES, PCH, PCL, P, WERE AUTOMATICALLY STACKED BY THE BRKINSTRUCTION). YOU MAY NOW CONTINUE TO WRITE (OR CORRECT) THEPROGRAM, USING THE MONITOR AS USUAL (BUT AVOID PRESSING THE RESETKEY SINCE THE STACKED PCH, PCL & P WILL BE DESTROYED) PRESSING THER KEY WILL RETURN YOU TO 0200 TO TRY CONTINUING THE PROGRAM,

FIRST DISPLAY SETSECOND DISPLAY SET:

THIS PROGRAM02000201020202030204020602080209020B020 D020 ECAUSES

78B818F8A9 11A2 FFA0339AAZ2200

1 102

A XPC

SEICLVCLCSEDLDALDXLDYTXSLDXBRK

2 2 30 D0

Y PSP

#11#FF#33

#22

3 3 C1 FC

PLUGSCREENED LEAD

'FROM'TAPEGROUND

BEST RECORDING RESULTS WITH A LEVEL OF ABOUT TWO-THI RDS MAXIMUMLEVEL. THE VERY CHEAPEST TAPE RECORDERS SOMETIMES USE A DC. ERASESYSTEM, AND SUBSTANTIALLY POORER RESULTS MAY OCCUR ON RECORDINGOVER AN ALREADY RECORDED SECTION OF TAPE. HIGH FREQUENCYRESPONSE IS ATAPREMIUM IN THIS APPLICATION, THE TAPE RECORDER'SHEADS SHOULD BE CLEANED FREQUENTLY, AND, PREFERABLY,DEMAGNETISED EVERY'8-10 HOURS. LOW QUALITY TAPES SHOULD BEAVOIDEDSINCETHEYOFTENCAUSEVERY FAST BUILD UP OF DIRT ON THEHEADS. THE SPEED OF THE REPLAYED DATA SHOULD NOT DEVIATE BEYOND±5% OF THE RECORDED SPEED, SO DON'T USE BATTERIES FOR POWER, (OR C12<ZCASSETTES SINCE THE THINNER, HEAVIER TAPE OFTEN GETS STUCK). CLEANTHE EXPOSED CAPSTAN AND PRESSURE WHEEL WHEN YOU CLEAN THEHEADS: A HEAD CLEANING TAPE MAY NOT MANAGE TO REMOVE OXIDEBUILD-UP FROM THE MECHANISM.

5.6 POWER SUPPLYTHETWOBOARDSARESUPPLIEDBYTHE5V REGULATOR ON THE CPU BOARD.IF ALL THE I.C.S. ARE IN PLACE ON THE CPU BOARD, THEN AT LEAST 600 MAIS REQUIRED. PROPER REGULATION IS ENSURED BY NEVER LETTING THEINPUT UNREGULATED SUPPLY DROP BELOW +7V. WHI LE THE REGULATOR ISPERFECTLY HAPPY WITH+27V INPUT, IT WILL NEED TO DISSIPATE 13.2W ANDWILL GET EXTREMELY HOT.. . AND TURN ITSELF OFF DUE TO THERMALOVERLOAD, LOSING YOUR NICE PROGRAM IN THE R.A.M. UNLESS ANADDITIONAL HEAT SINK IS USED,+12V SHOULD BE REGARDED AS ANABSOLUTE MAXIMUM UNREGULATED INPUT, THE REGULATOR WILL NOT GETSO HOT ASTO TURN ITSELF OFF, BUT YOU MIGHT RECEIVE ABURN IF YOUTOUCH IT.

ADDITIONAL HEATSINK

Page 40: Acorn System 1 - MAME · chapter 1: an introduction to the binary number system 1.1 binary numbers 1.2 logical manipulations 1.3 arithmetic manipulations 1.4 binary coded decimal

CHAPTER 6: FIRMWARE6.1 TAPE STORE AND LOADIN THE SOFTWARE SECTION WE USED SOME OF THE FUNCTIONS OF THEACORN MONITOR TO WRITE AND EXECUTE SOME SIMPLE PROGRAMS WHICHDEMONSTRATED FEATURES OF THE MICROPROCESSOR AND PROGRAMMING.THE MONITOR IS MORE POWERFUL THAN DEMONSTRATED IN THAT SECTION,AND HERE WE'LL EXAMINE IT MORE CLOSELY, AND GIVE A COMPLETELISTING OF IT. AFTER THE M# G, t AND I KEYS, THE MOST USEFUL KEYS Wl LLPROBABLY BE S AND L THESE ENABLE YOU TO STORE AND LOADPROGRAMS OF ANY SIZE USING CASSETTE TAPE OR A SIMI LAR RECORDINGMEDIUM. LET'S ASSUME WE WISH TO CREATE A TAPE VERSION OF THE DUCK-SHOOT GAME. THIS WILL HAVE BEEN ENTERED IN MEMORY FROM ADDRESS,SAY, 0200 TO ADDRESS 023F INCLUSIVE. AFTER TESTING THAT THEPROGRAM ACTUALLY DOES WORK, PRESS THE S KEY.

F. XXXX

THE MONITOR IS PROMPTING YOU TO ENTER THE ADDRESS FROM WHICHYOU WANT TO RECORD. THE DISPLAYED ADDRESS IS EITHER GARBAGEOR THE LAST END ADDRESS USED. ENTER THE ADDRESS, TERMINATINGWITH ANY COMMAND KEY

F. 0 2 00XXXX

THE MONITOR IS NOW PROMPTING YOU TO ENTER THE END ADDRESS. THISIS THE ADDRESS OF THE LAST BYTE IN YOUR PROGRAM + 1. THEDISPLAYED ADDRESS IS EITHER GARBAGE OR THE LAST END ADDRESSUSED. ENTER THE ADDRESS, BUT DONT TERMINATE IT YET

0 2 4 0

THE SYSTEM IS NOW READY TO SERIALLY OUTPUT THAT SECTION OFMEMORY. YOU SHOULD RECORD A BRIEF VERBAL DESCRIPTION OF THEPROGRAM - "DUCKSHOOT" - AND ALSO THE ADDRESSES (OR ADDRESS OFSTART AND LENGTH) WHICH THE PROGRAM USES. KEEP A LIST OF WHICHPROGRAMS ARE STORED ON EACH TAPE. NOW CONNECT IN THE COMPUTERAND START RECORDING. AFTER A FEW SECONDS, PRESS ANY COMMANDKEY TO TERMINATE THE ADDRESS ENTRY. THE DISPLAY Wl LL GO BLANK,WHILE THE PROCESSOR DEVOTES ITSELF TO SENDING THE INFORMATIONTO THE TAPE. WHEN THE DISPLAY

0 2 4 0

REAPPEARS, YOU MAY STOP THE TAPE-RECORDER: THE RECORDING ISCOMPLETE, AND YOU ARE BACK AT FF04. ANY HEX KEY HERE Wl LL BRINGBACK THE MONITOR'S DOTS, OR YOU MAY JUST START USING THEMONITOR. THE RECORDING PROCEEDS AT 30 BYTES PER SECOND, THISPROGRAM, AT 68 BYTES (PROGRAM LENGTH + 4 BYTES OF ADDRESSINFORMATION) TOOK ONLY TWO SECONDS TO RECORD.

TO LOAD A PROGRAM FROM THE TAPE YOU SHOULD BE IN A SITUATIONWHERE MONITOR COMMANDS ARE ACCEPTED, NOT WHERE YOU AREALLOWED ANY KEY TO TERMINATE AN ADDRESS ENTRY. PLAY THE TAPE,AND, WHEN THE 2403.8 HZ LEADER IS HEARD, PRESS THE L KEY. THEDISPLAY WILL BE BLANK UNTIL DATA IS ENCOUNTERED ON TAPE, WHENEACH BYTE ENTERED WILL BE DISPLAYED AS A SYMBOL ON THE LEFTMOSTDIGIT. WHEN THE LAST BYTE HAS BEEN READ THE PREVIOUS DISPLAY Wl LLRETURN - YOU'RE AT FF04 AGAIN. THE ADDRESSES INTO WHICH THEPROGRAM IS LOADED WILL BE THOSE WITH WHICH IT WAS STORED ON TAPE,BUT YOU MAY WISH TO DELIBERATELY AVOID THIS. JUST USING THE MONITOR,THE BEST THAT CAN BE DONE IS TO TREAT THE ENTIRE RECORDING AS DATAAND LOAD ENOUGH OF IT TO FIT BETWEEN TWO ADDRESSES: THE FIRSTFOUR BYTES LOADED WILL THUS BE THE ORIGINAL ADDRESSES THEPROCEDURE IS

I SET ADDRESSES 0008 & 0009 TO THE LOW & HIGH BYTE OF THE ADDRESSINTO WHICH YOU WISH TO PUT THE FIRST BYTE.

II SET ADDRESSES 000A&000B TO THE LOW & HIGH BYTE OF THE LASTADDRESS +1 INTO WHICH YOU WANT THE DATA TO BE LOADED.

I11 SET UP THE GO ADDRESS OF FF8A. START THE PLAYBACK, WHEN YOUHEAR THE 2403.8 HZ LEADER, PRESS ANY KEY TO GO. LOADING Wl LLOCCUR BETWEEN THE ADDRESSES SPECIFIED.

THE ABOVE PROCEDURE MAY NOT BE SATISFACTORY: IT LOADS THEPROGRAM'S ADDRESSES AS DATA, AND DESTROYS THE DATA IN REGISTERS0 AND 1 (A & X AFTER A BREAKPOINT) BETTER METHODS ARE GIVEN IN THESYSTEM SECTION OF THE APPLICATION PROGRAMSTHE LAST COMMENT ON LOAD FROM TAPE IS THAT IT IS POSSIBLE TOCREATE A PROGRAM ON TAPE THAT WILL, WHEN LOADED, SEIZE CONTROLAND EXECUTE ITSELF THIS IS IDEAL FOR, SAY, A BASIC INTERPRETER: YOUJUST HAVE TO LOAD IT, AND IT AUTOMATICALLY SETS ITSELF RUNNINGAND PROMPTS READY. THE IDEA IS TO LOAD THE PROGRAM INTO THEMONITOR^ ZERO PAGE REGISTERS, LOADING THE PROGRAM START ADDRESSINTO GAP AND THE GO KEY (II) INTO REPEAT. CARE MUST BE TAKEN WHENYOU LOAD INTOfAPANDTAP: YOU MUST BE SURE TO LOAD WHAT'SALREADY THERE, OR SOMETHING SENSIBLE!

6.2 THE BREAKPOINT AND RESTORE COMMANDTHE FINAL TWO MONITOR FUNCTIONS ARE EMBODIED BY THE KEYS R ANDP. YOU MAY ALREADY HAVE DISCOVERED THAT PRESSING R IS DISASTROUS,AND THAT PIS LIKE M, BUT WITH A PENCHANT FOR INSERTING 00 INTO THEADDRESS SPECIFIED. WITH THESE KEYS YOU ARE EXPECTED TO DEBUG (ABUG IS ANY SMALL MISTAKE PREVENTING A PROGRAM FROMFUNCTIONING) YOUR PROGRAMS. THE P KEY ALLOWS YOU TO INSERT THEBREAK INSTRUCTION ON TOP OF AN INSTRUCTION AT A POINT WHERE YOUSUSPECT SOMETHING SUSPICIOUS IS HAPPENING, SAY 0200:

P. 0 2 0 0