****************************************************************************** **** THE BEST APPLE'S ASSEMBLY TUTORIAL **** ****************************************************************************** **** PART 1: THE ASSEMBLER **** ****************************************************************************** **** WRITTEN BY THE BEST APPLE AND EDITED BY NOWHERE MAN **** ****************************************************************************** THIS SERIES IS FOR BEGINNERS. YOU WILL NEED AN ASSEMBLER AND A THOROUGH KNOWLEDGE OF APPLESOFT BASIC. PREFACE: ASSEMBLY LANGUAGE IS THE FASTEST AND MOST FLEXIBLE OF ALL PROGRAMMING LANGUAGES ON ANY COMPUTER, BECAUSE YOU ARE ACTUALLY TELLING THE COMPUTER WHAT TO DO DIRECTLY, WITHOUT A LOT OF "MIDDLEMEN" LIKE THE APPLESOFT BASIC INTERPRETER. ALSO FOR THIS REASON, ASSEMBLY IS A VERY HARD LANGUAGE TO LEARN. I HOPE THIS TUTORIAL WILL MAKE THE JOB A BIT EASIER. ******************************************************************************* THE ASSEMBLER: THIS TUTORIAL WILL CENTER MAINLY ON THE S-C MACRO ASSEMBLER, BUT IF YOU HAVE A DIFFERENT BRAND (MERLIN/BIG MAC, ORCA/M, LISA, ETC.) YOU SHOULD BE ABLE TO FOLLOW ALONG. IT HELPS IF YOU HAVE A MANUAL SO YOU CAN SEE IF THERE ARE ANY DIFFERENCES IN YOUR ASSEMBLER AND THE ONE I USE. MOST ASSEMBLERS HAVE TWO PARTS I WILL DISCUSS EACH AND THE MAKEUP IN THIS ARTICLE. PART 1: THE EDITOR THE EDITOR IS USALLY A TEXT EDITOR FOR CREATING YOUR PROGRAMS IT WILL HAVE FEATURES FOR EDIT, DELETE, INSERT AND IF IT'S GOOD MUCH MORE. PART 2: THE ASSEMBLER THIS PART ASSEMBLES THE TEXT INTO MACHINE LANGUAGE CODE. ******************************************************************************** THE VARIABLES: JUST AS IN APPLESOFT, ASSEMBLY LANGUAGE HAS VARIABLES. BUT, WHERE IN BASIC YOU HAD THOUSANDS TO PLAY AROUND WITH, HERE YOU ONLY HAVE A FEW AND YOU ARE RESTRICTED IN THEIR USES. WHAT FOLLOWS IS A DESCRIPTION OF EACH VARIABLE AND IT'S FUNCTION. THE 6502 HAS 5 REGISTERS, WHICH ARE USED SIMILARLY TO VARIABLES IN HIGHER LEVEL PROGRAMMING LANGUAGES. 1. THE ACCUMULATOR ("A-REGISTER")- IS THE MAIN VARIABLE FOR GENERAL FUNCTIONS. 2. THE X REGISTER- USED FOR COUNTING 3. THE Y REGISTER- USED FOR COUNTING 4. THE STACK ("S-REGISTER")- CONTAINS THE STACK POINTERS FOR APPLESOFT AND ASSEMBLY LANGUAGE PROGRAMS 5. THE P REGISTER- KEEPS TRACK OF THE SYSTEM STATUS. IT IS DIVIDED INTO BITS, LIKE THIS: 7 6 5 4 3 2 1 0 > ^ ^ ^ ^ ^ ^ ^ ^ > ALL OF THIS > IS CONTAINED IN > THE "P-REGISTER" N V * B D I Z C > N. THE NEGITIVE BIT-0 IF THE LAST COMPARE WAS + 1 IF IT WAS - V. THE OVERFLOW BIT-0 IF THE LAST RESULT DID NOT OVERFLOW *. UNUSED B. BREAK STATUS-1 AFTER A BRK COMMAND D. DECIMAL MODE-0 AFTER CLD COMMAND 1 AFTER SED I. INTERRUPT-0 AFTER CLI 1 AFTER SEI Z. ZERO-0 IF LAST RESULT WAS NON-ZERO 1 IF IT WAS 0 C. CARRY-0 IF THE LAST RESULT DID NOT CARRY OR A CLC AND 0 AFTER A CARRY OR SEC IF THIS ALL SOUNDS CONFUSING, YOU'RE ABSOLUTELY RIGHT. THIS WILL BE EXPLAINED MORE THOROUGHLY IN A LATER CHAPTER OF TUTORIAL ****************************************************************************** THE LINE: THE LINE IN ASSEMBLY HAS 5 PARTS: 1. THE LINE NUMBER, THIS IS FOR EDITING PURPOSES ONLY AND YOU CAN'T GOTO A LINE BY LINE NUMBER. 2. THE LABEL, THIS IS FOR BRANCHING YOU CAN IN SENSE GOTO A LINE BY IT'S LABEL. 3. INSTRUCTIONS THESE ARE THE COMMANDS AND THERE ARE 56 OF THEM DEVIDED INTO 10 GROUPS: 1. TRANSFER:LDA, STA, LDX, STX, LDY, STY, TXA, TAX, TYA, TAY, TXS, TSX PLA, PHA, PLP, PHP 2. ARITHMETIC:ADC, SBC, INC, INX, INY, DEC, DEX, DEY 3. LOGICAL:AND, ORA, EOR, BIT 4. SHIFT:ASL, LSR, ROL, ROR 5. COMPARE:CMP, CPX, CPY 6. STATUS:SEC, SED, SEI, CLC, CLV,, CLD, CLI 7. BRANCH:BCC, BVC, BNE, BPL, BCS, BVS, BEQ, BMI 8. JUMP:JMP, JSR 9. RETURN:RTS, RTI 10. OTHER:NOP, BRK YES, YOU MAY HAVE NOTICED THEY ARE ALL 3 LETTERS. THERE ARE ALSO ASSEMBLER COMMANDS THAT ARE DIFFERENT FOR EACH ASSEMBLER. NEXT WEEK I'LL LIST AND EXPLAIN THESE AND THE ASSEMBLER COMMANDS FOR S-C MACRO ASSEMBLER. 4. THE OPCODE: IS THE NUMBER USALLY FOUND AFTER THE COMMAND THERE ARE 4 TYPES: 1. $00-MEANS WHATS IN THE LOCATION $00 2. #00-MEANS THE DECIMAL NUMBER 0 3. #$00-MEANS THE HEX NUMBER $00 4. $300,Y-MEANS THE VALUE OF THE ADDRESS $300+Y SO $300,Y WHEN Y=2 IS $302'S VALUE 5. THE REM FIELD FOR REMARKS GET THE IDEA? IT'S EASY! NEXT TIME: THE COMMANDS ****************************************************************************** CREATED AND WRITTEN BY: THE BBB B B BBB B B BBB EST APPLE (OF SADISTIC SOFTWARE AND THE BLACK HOLE BANDITS) EDITED BY: // / / / / / / / / // OWHERE MAN (OF SADISTIC SOFTWARE AND THE BLACK HOLE BANDITS) ****************************************************************************** ORIGINALLY WRITTEN IN 80 COLUMNS, UPPER CASE ONLY, ON TUESDAY NOVEMBER 20 1984 THIS MAY BE DISTRIBUTED AND POSTED ON BBS'S *AS LONG AS IT IS NOT CHANGED* *******************************************************************************