S-C Assembler II Disk Version 4.0 for the Apple II(TM) and Apple II PIus(TM) Apple II and Apple II Plus are trademarks of Apple Computer, Inc. S-C Software P.O. Box 280300 Upgrade Kit Dallas, Texas 75228 (214) 324-2050 --------------------------------------------------------------------- The disk included with this package contains DOS 3.2.1, in 13-sector format. It is bootable by both 13-sector and 16-sector controllers. The disk is not protected, and you are free to make as many copies as you like FOR YOUR OWN PERSONAL USE. Since it is a 13-sector disk, you must use a 13-sector copy program to make copies. (Copies made from the original disk will no longer be bootable by a 16-sector controller.) You can make a 16-sector version by INITializing a blank 16-sector disk, and then using MUFFIN to copy every file. (MUFFIN is a program on your DOS 3.3 System Master Diskette.) --------------------------------------------------------------------- TABLE OF CONTENTS 1. Introduction ...........................................1 Summary of New Features.................................2 2. Editing Features .......................................3 Automatic Line Numbering................................3 TAB Stops...............................................3 Cursor Controls (Escape IJKM)...........................4 Escape-L................................................4 3. New Commands............................................5 HIDE and MERGE Commands.................................6 INCREMENT Command ......................................8 MEMORY Command .........................................8 RENUMBER Command .......................................9 RESTORE Command........................................10 USR Command............................................10 PRT Command............................................11 VAL Command............................................11 4. New Directives.........................................12 .BS -- Block Storage ..................................12 .LIST OFF, .LIST ON -- Listing Control.................13 .PG -- Page Control ...................................13 .IN -- Include.........................................14 .TF -- Target File ....................................15 .US -- User Directive .................................15 5. Labels.................................................16 Normal Labels..........................................16 Local Labels...........................................17 6. Memory Usage...........................................18 ROM Usage..............................................19 7. Bibliography...........................................20 This manual and the software product it describes are copyrighted by S-C SOFTWARE. Neither the manual nor the diskette, nor any part thereof, may be copied by any means without prior written consent (except for the personal use of the registered purchaser). Copyright July, 1980 S-C SOFTWARE P.O. Box 280300 Dallas, TX 75228 (214) 324-2050 --------------------------------------------------------------------- INTRODUCTION Version 4.0 of S-C ASSEMBLER II contains many new features which make it easier to use, faster, and more powerful. Now one integrated version runs in any Apple II (with either Integer BASIC or Applesoft ROMs, either old or Autostart monitor ROM). It is compatible with the Apple Language System also. The S-C ASSEMBLER still only requires 24K 6f RAM and one disk drive to operate. If more memory is available, it will be used. Very large programs can now be developed, using the "INCLUDE" and "TARGET FILE" capabilities. These allow assembly of multiple source files, and direct storage of object code on binary files. Sample programs on the disk to illustrate new features as well as being important utilities. They include: 1. Sample printer driver, for printers driven through the game port. 2. Shrink program, to compress blanks in old source programs 3. Binary string search, to search memory for a binary pattern. Includes a "wild card" capability. Blanks are now compressed in source files to conserve memory and disk space. The compression algorithm replaces any string of consecutive blanks with a single coded byte. Old source files are still compatible, but the SHRINK program which is on the disk will convert them if you wish. The savings due to compression usually amounts to about 20 per cent. The Assembler now uses a more memory-efficient method of storing the symbol table, with variable length entries. The symbol table is maintained in alphabetical order, using a high-speed hashing scheme. The symbol table is maintained in memory until a new assembly is begun or the NEW command is typed. This allows the MGO and VAL commands to be more effective. Assembler error messages are now printed with two bells, to call attention to their presence. After an assembly error, the offending line is listed automatically, in a position for easy editing. - 1 - --------------------------------------------------------------------- SUMMARY OF NEW FEATURES New Editing Features: * Ability to append source programs from disk or tape * Automatic line numbering * Parameterized RENUMBER * Memory usage display * Escape IJKM with or without Autostart ROM * Tabs set up for 6-char labels * Star-dash line automatic generation * No conflict with D. C. Hayes New Assembly Features: * Multiple source files, using .IN directive * Object code directly to disk file, using .TF directive * Listing on and off using .LIST OFF and ·LIST ON * ·PG to issue form feeds during listing * .BS to reserve a block of storage * Tremendous speed increase * Labels up to 32 characters * Labels may include period * Local labels * After assembly error, the bad line is listed * Value of .EQ and address of .BS are printed on listing * Assembler and DOS memory is protected during assembly * ASCII literals in address expressions * Symbol table printed in alphabetical order - 2 - --------------------------------------------------------------------- EDITING FEATURES S-C ASSEMBLER II already has the reputation of being one of the easiest editor/assemblers to use. The new features Version 4.0 provides make it even better! Automatic Line Numbering: Perhaps the most common request I have received from owners of the previous versions of S-C ASSEMBLER II is for some method of automatic line numbering. Version 4.0 includes a convenient and powerful method. Any time the cursor is at the beginning of a line, typing a control-I will cause the next line number to be generated. Immediately after loading, the "next line number" will be 1000. The number will be displayed as four digits and a trailing blank. The cursor will be in position for the first character of a label, or the asterisk for a comment line. The "next line number" is always the value of the previously entered line number plus the current "increment". The increment is normally 10, but you can set it to any reasonable value with the INCREMENT command. If you type the control-I in any other position than the beginning of a line, it will cause a tab to the next tab stop. TAB Stops: The standard tab stops have been changed to allow for a six-character label before the opcode. Of course, you may use any length label from 1 to 32 characters, followed by a blank and an opcode; but the use of the tab stops make for nicer looking programs. (Longer labels look nicer when left on a line by themselves, if possible.) If control-I is typed after the last tab stop, a single space will be generated. If control-I is typed at the beginning of a line, rather than a normal tab of all spaces, the next line number and a space will be generated. Some printer interface cards use control-I for setting various modes. This conflicts with the use of control-I for a tab character. If you wish to change the tabbing character, you may do so. It is stored at location $100F. An alternative is to change the printer interface control character, which is usually stored at $06F8+slot#. - 3 - --------------------------------------------------------------------- Cursor Controls: Some previous versions of S-C ASSEMBLER II used control-A through control-F as aliases for the escape-A through escape-F codes. This feature has been replaced by the new Apple standard cursor movement controls: escape-I, -J, -K, and -M. whether or not you have the Autostart ROM, you can use these codes when you are in version 4.0. Escape-L: Version 4.0 uses the escape-L in two ways, depending on the position in the input line. If you are at the beginning of a line, escape-L will cause the first six characters of the line to be changed to " LOAD ". Then the rest of line will be read off the screen, and issued as a command. This mimics a function in the very popular "Program Line Editor", by Neil Konzen. The purpose is to load a source file from the disk, after displaying a CATALOG. If you are at the position in which a comment or label would begin, escape-L will generate an asterisk and a line of dashes across the screen. This is a very commonly used line in setting off blocks of comments. You will find many examples of its use in the sample programs on the version 4.0 disk. If the Escape-L is typed in any other position of the input line, it is ignored. - 4 - --------------------------------------------------------------------- NEW COMMANDS There are seven new commands which have been added to S-C ASSEMBLER II. The JOIN command has been replaced by the new HIDE and MERGE commands. The RENUMBER command has been modified to offer several new options. The PRT command has been changed to make it more generally usable. HIDE Use with LOAD and MERGE to join a source program to one already in memory. INCREMENT # Set the increment for automatic line numbering. MEMORY Display the beginning and ending memory addresses of the source program and the symbol table. MERGE Use with HIDE and LOAD to join a source program to one already in memory. RENUMBER Renumber all lines of the source program: number the first line 1000, and use an increment of 10. RENUMBER # Renumber all lines of the source program: number the first line #, and use an increment of 10. RENUMBER #l,#2 Renumber all lines of the source -program: number the first line #1, and use an increment of *2. RENUMBER #l,#2,#3 Renumber from line #3 through the end of the source program: number line #3 as #1, and use an increment of #2. RESTORE Use after an aborted assembly if within an "included" source file (prompt is "I:") to go back to the root source program. USR User defined command. VAL expression Print the value of the expression - 5 - --------------------------------------------------------------------- HIDE and MERGE Commands: These two commands, when used with the LOAD command, allow you to join a program from disk or tape to a program that is already in memory. (This replaces the tape JOIN command in previous versions of S-C ASSEMBLER II.) HIDE temporarily changes the HIMEM pointer so that it appears as if there were no source program in memory. To remind you that you are HIDE-mg, the prompt symbol changes to "H:". After HIDE-ing a program, you can LOAD another one from disk or tape. Then you type MERGE to join the two programs together. After this sequence of commands, the program which was already in memory will follow after the program just LOADed. If the line numbers are not already as you wish them to be, you can use RENUMBER to assign new ones. For example, suppose that we have two source programs on the disk named "SRCONE" and "SRCTWO". We want to join them together so that "SRCONE" precedes "SRCTWO". - 6 - --------------------------------------------------------------------- :LOAD SRCONE :LIST 1000 * PROGRAM NUMBER ONE 1010 MAIN JSR SUBROUTINE 1020 RTS :LOAD SRCTWO :LIST 1000 * SUBROUTINE TO DO SOMETHING 1010 SUBROUTINE 1020 LDA BLAH.BLAH.BLAH 1030 STA SOMEWHERE 1040 RTS :HIDE H:LIST H:LOAD SRCONE H:LIST 1000 * PROGRAM NUMBER ONE 1010 MAIN JSR SUBROUTINE 1020 RTS H:MERGE :LIST 1000 * PROGRAM NUMBER ONE 1010 MAIN JSR SUBROUTINE 1020 RTS 1000 * SUBROUTINE TO DO SOMETHING 1010 SUBROUTINE 1020 LDA BLAH.BLAH.BLAH 1030 STA SOMEWHERE 1040 RTS :RENUMBER :LIST 1000 * PROGRAM NUMBER ONE 1010 MAIN JSR SUBROUTINE 1020 RTS 1030 * SUBROUTINE TO DO SOMETHING 1040 SUBROUTINE 1050 LDA BLAH.BLAH.BLAH 1060 STA SOMEWHERE 1070 RTS HIDE and MERGE Example - 7 - --------------------------------------------------------------------- INCREMENT Command: Sets the increment used for automatic line number generation. The increment is normally 10, butyou may set it to any value between 0 and 9999. (Of course, an increment of 0 makes no sense. Neither does a large value like 9999. But you can use them if you wish!) :INC 5 (set increment to 5) MEMORY Command: Displays the beginning and ending memory addresses of the source program and of the symbol table. :MEMORY SOURCE PROGRAM: $94F3-9600 SYMBOL TABLE: $2500-2674 Memory between the top of the symbol table and the bottom of the source program is free to be used without clobbering anything. The assembler automatically protects (during assembly) memory from $1000 to the top of the symbol table, and from the bottom of the source program through $FFFF. This insures that your object program will not clobber the assembler, the source program, or DOS. - 8 - --------------------------------------------------------------------- RENUMBER Command: Renumbers all or part of the lines in your source program with the specified starting line number and increment. There are three optional parameters for specifying the line number to assign the first renumbered line (base), the increment, and the place in the program to begin renumbering (start). There are four possible forms of the command: :REN Renumber the whole source program: BASE=1000, INC=10, START=0 :REN # Renumber the whole source program: BASE=#, INC=10, START=0 :REN #l,#2 Renumber the whole source program: BASE=#1, INC=#2, START=0 :REN *l,#2,#3 Renumber all lines from #3 through the end: BASE=#l, INC=#2, START=#3 The last form above is useful for opening up a "hole" in the line numbers for entering a new section of code. :LIST 1000 * LITTLE RENUMBER EXAMPLE 1005 SAMPLE LDA $35 1006 STA $37 1010 RTS :RENUMBER :LIST 1000 * LITTLE RENUMBER EXAMPLE 1010 SAMPLE LDA $35 1020 STA $37 1030 RTS :RENUMBER 100 :LIST 0100 * LITTLE RENUMBER EXAMPLE 0110 SAMPLE LDA $35 0120 STA $37 0130 RTS :RENUMBER 2000,4 :LIST 2000 * LITTLE RENUMBER EXAMPLE 2004 SAMPLE LDA $35 2008 STA $37 2012 RTS :RENUMBER 3000,10,2008 :LIST 2000 * LITTLE RENUMBER EXAMPLE 2004 SAMPLE LDA $35 3000 STA $37 3010 RTS - 9 - --------------------------------------------------------------------- RESTORE Command: Restores the root source program if an assembly is aborted while inside an "included" module. The "root source program" is the source program that is in memory at the time the "ASM" command is issued. If this source program uses the ".IN" directive to include additional source files, it is possible that assembly might be aborted while the "root" program is "hidden". An assembly may be aborted either manually by typing a RETURN key during the listing phase, or automatically due to an error in the source program. If the assembly is aborted during the time that the root program is hidden, the prompt character changes from ":" to "I:". The RESTORE command will reset the memory pointers so that the root program is no longer hidden, and change the prompt character back to ":". You do not have to use the RESTORE command after an abort unless you wish to get back to the root source program for editing purposes. If you type the ASM command, the assembler automatically restores before starting the assembly. If an assembly aborts due to an error in a source line, you may correct the source line, SAVE the module on the appropriate file, and type ASM to restart the assembly. USR Command: This command is provided for the user who wishes to add his own commands to the S-C ASSEMBLER II. When you type the command "USR", a JSR $1006 instruction is executed. If you have not installed a JMP to your own program at $1006, the command is equivalent to a "no operation" command. You can write a program to process your own command, and put a JMP instruction to it at $1006. The S-C ASSEMBLER II command parser scans for up to two numeric (line number) fields following the command. The scan skips over any non-numeric characters until it either finds a digit or the end of line. If any numbers are found, the first one will be stored in $3A-$3B, and the second at $3C-$3D. the contents of the x-register indicates how many numbers were found: X=0 if no numbers found, X=2 if one number found, and X=4 if two numbers found. The entire command line is stored in the monitor input buffer, starting at $0200. An index to the next character after the last digit of the second number (or the end of line if there were less than two numbers) is in $06. - 10 - --------------------------------------------------------------------- PRT Command: In previous versions of S-C ASSEMBLER II, the PRT command turned on a printer driver for a particular printer. This driver was built-in to the assembler, and was designed for the practical Automation DMTP uP-6 printer, using a serial scheme through the game port. Very few customers were able to use the PRT command without modifying the program. Version 4.0 provides a more general technique, without wasting memory for those who have no need for the PRT command. (Those who have an Apple parallel of Serial printer Interface Card may use the PR#slot command.) When you type the command "PRT", a JSR $1009 instruction is executed. If you have not installed a JMP to your own printer driver at this location, the command is equivalent to a "no operation" command. You can write a program to drive your own printer through the game port, or through any interface board which requires special handling. If you have no need for the PRT command, you may use it as a second USR command. VAL command: The VAL command will evaluate any legal operand expression, and print the value in hexadecimal. It may be used to quickly convert decimal numbers to hexadecimal, to determine the ASCII code for a character, or to find the value of a label from the last assembled program. :VAL 12345 3039 :VAL-21846 AAAA :VAL 'X 0058 :VAL LOOPA+3 084E - 11 - --------------------------------------------------------------------- NEW DIRECTIVES Seven new assembler directives have been added to S-C ASSEMBLER II. .BS expression Reserve bytes at the current location in the object program. .LIST OFF Turn off the assembly listing. .LIST ON Turn on the assembly listing. ·PG Page eject. Issues a Form Feed character. .IN file name Include a source program from the specified file. .TF file name Put the object program on the specified file. .US User programmable directive. Block Storage: .BS exp Reserves a block of bytes at the current location in the program. The expression specifies the number of bytes to advance the location counter. If there is a label, it assigned the value at the beginning of the block. The address of the beginning of the block will be printed in the address column of the assembly listing. If the object code is being stored directly into memory, no bytes are stored for the .BS directive. However, if the object code is being written on a file using the .TF directive, the .BS directive will write bytes on the file. All the bytes written will have the value $00. - 12 - --------------------------------------------------------------------- Listing Control: .LIST OFF .LIST ON This pair of directives turns the assembly listing on and off. If .LIST OFF is put at the beginning of the source program, and no .LIST ON is used, no listing at all will be produced. The program will assemble much faster without a listing, as most of the time is consumed in putting characters on the screen and scrolling the screen up. If you put .LIST OFF at the beginning of your source program, and .LIST ON at the end, only the alphabetized symbol table will print. You may also use this pair of directives to bracket any portion of the listing you wish to see or not see. Page Control: .PG Prints an ASCII Form Feed character ($0C). If the assembly listing is being printed on a printer which recognizes this character, a form feed will occur and the next listing line will appear at the top of the next page. The .PG line itself is not listed. - 13 - --------------------------------------------------------------------- Include: .IN file name Causes the contents of the specified source file to be included in the assembly. The program which is in memory at the time the ASM command is typed is called the "root" program. Only the root program may have .IN directives in it. If you attempt to put .IN directives in an included program, the "NESTED .IN" error will print. When the .IN directive is processed, the root program is temporarily "hidden" and the included program is loaded. Assembly then continues through the included program. When the end of the included program is reached, it is deleted from memory and the root program is restored. Assembly then continues with the next line of the root program. If you type the MON C command (a DOS command) before beginning assembly, the LOAD commands issued by the assembler will be printed with the listing. Each included program is loaded in turn during pass one of the assembly, and again during pass two. The .IN directive is useful in assembling extremely large programs, which cannot fit in memory all at once. It is also useful for connecting together a library of subroutines with a main program. The portion of the directive is in standard DOS format, and may include volume, slot, and drive number. - 14 - --------------------------------------------------------------------- Target File: .TF file name Causes the object code generated to be stored on a binary file, rather than in memory. Only the code which follows the .TF directive will be stored on the file. Code will be stored on the file until another .TF directive is encountered, or until a .TA or .OR directive is encountered. The specifier may include volume, drive, and slot numbers if necessary. If you have both .IN and .TF directives in the same assembly, and the files involved are not on the same disk, you will need to specify slot number (and maybe drive number) with every .IN and with every .TF directive. If your program consists of several pieces with different origins, and you want them all to be put on files, each piece will require a separate .TF directive. The object code is written on a binary file, which may only have one origin. During assembly, S-C ASSEMBLER II temporarily patches DOS to allow a binary file to be handled with text file commands. It also creates a text file with your specified name and uses text file techniques to write the object code into the file. When assembly is complete, or when the .TF range is ended by encountering another .TF or .TA or .OR, the text file is transformed into a binary file by modifying the DOS directory entry. If you have typed MON C (a DOS command) before assembly, the DOS commands issued by the assembler for the .TF directive will print on the assembly listing. For each .TF directive, during pass two, you will see the following sequence: OPEN file name DELETE file name OPEN file name WRITE file name User Directive .US To allow for possible expansion of the assembler by users, the .US directive has been included. When the opcode is processed, it will branch to $100C. That location normally contains a JMP instruction, which treats the .US as a comment. If you desire to use the .US directive, you change it to jump to your own program. Details of the steps necessary to implementing your own directives are not available at this time. You may disassemble S-C ASSEMBLER II, if you wish, and examine the existing directives. - 15 - --------------------------------------------------------------------- LABELS There are two types of labels used in Version 4.0 of S-C ASSEMBLER II; normal labels, and local labels. Normal Labels: In previous versions of S-C ASSEMBLER II, labels could be 1-4 or 1-6 characters in length. In version 4.0, labels may be up to 32 characters long. The first character of a normal label must be a letter; subsequent characters may be letters, digits, or the period character ("."). The period is useful for making long labels readable. For example, a subroutine to read the next source line might be named "READ.NEXT.SOURCE.LINE". Tab stops are set up within the editor assuming that most of your labels will be six characters or less. However, since the assembler is relatively free-format, you may type any length label followed by a blank and the opcode, operand, andcomment fields. Or, if you wish, you may type the long label on a line all by itself. In this form, the label is assigned the current value of the location counter, just as if you had appended ".EQ *" to the line. 1000 * SAMPLE PROGRAM WITH LONG LABELS 1010 SOURCE.LINE.POINTER .EQ $13 AND $14 1020 CHAR.POINTER .EQ $12 1030 * 1040 READ.NEXT.CHAR.FROM.LINE 1050 LDY CHAR.POINTER 1060 LDA (SOURCE.LINE.POINTER),Y 1070 INC SOURCE.LINE.POINTER 1080 RTS - 16 - --------------------------------------------------------------------- Local Labels: Version 4.0 introduces a new kind of label, called "local labels". The main purpose for local labels is to make programs more readable by reducing the number of label names you must invent. As a side effect, local labels save considerable space in the symbol table during assembly; they only require two bytes each. The use of local labels also encourages structured programming habits. Local labels have a period as the first character, followed by one or two digits. Any label from ".0" through ".99" may be used. Local labels are defined internally relative to the normal label which comes before it in the source program. The value must be no more than 255 greater than the value of the associated normal label. Since each set of local labels is associated with a particular normal label, you may re-use the same local label names. Here is an example of three little routines in the same source program, using normal and local labels: 1000 PRINT.MESSAGE 1010 PHA SAVE A-REGISTER 1020 .1 JSR PRINT.CHARACTER 1030 INY 1040 LDA MESSAGES,Y 1050 BNE .1 =0 FOR END OF MESSAGE 1060 PLA RESTORE A-REGISTER 1070 RTS 1080 * 1090 GET.NEXT.CHARACTER 1100 LDY CHAR.POINTER 1110 LDA INPUT.BUFFER,Y 1120 CMP #RETURN 1130 BEQ .1 END OF LINE 1140 INC CHAR.POINTER 1150 .1 RTS 1160 * 1170 GET.NEXT.NONBLANK .CHAR 1180 .1 JSR GET.NEXT.CHARACTER 1190 BEQ .2 END OF LINE 1200 CMP #BLANK 1210 BEQ .1 1220 .2 RTS - 17 - --------------------------------------------------------------------- MEMORY USAGE The S-C ASSEMBLER II program is about 5376 bytes long ($1500), and occupies $1000 through $24FF in memory. The symbol table begins at $2500 and extends upward; your source program begins at the bottom of DOS and extends downward. During source program entry or editing, memory usage is monitored so that the source program does not grow so large as to overlap the symbol table. Overlapping will cause the "MEM FULL ERROR" message to print. During assembly, memory required by the symbol table is monitored, to prevent the symbol table from overlapping the source program. Overlapping will generate the "MEM FULL ERROR" message and abort the assembly. In addition, memory usage by the object program is monitored, so that it will not destroy the source program, DOS, the S-C ASSEMBLER II, the symbol table, or switch any I/O addresses. Therefore, if the object program bytes are directed at any memory address between $1000 and the top of the symbol table, or any address above the beginning of the source program, the "MEM PROTECT ERROR" will be printed and assembly aborted. The assembler also uses a many locations in page zero during editing or assembly. However, the only ones which you need to maintain unchanged during execution or testing of your object program are $4A-4D, $CA-CD, $73-74, $D9. Location $D9 is used by DOS as a flag to allow commands to be entered. The other locations are used to point at the beginning and end of your source program and symbol table. Page one ($100-1FF) is used both as a stack and as storage for the symbol table routines. The high addresses in page one are used for the stack. The low end is used for a symbol buffer and for pointers to the 27 hash chains used in storing the symbol table. Page two ($200-2FF) is used as an input buffer. The high end of page three ($3D0-3FF) is used by DOS and by the assembler. You must not change any bytes between $3D0 and $3EF. $300-3CF is free to be used in any way you wish. Locations $400-7FF are used by the Apple II as the screen buffer. There are 32 bytes which are unused by the screen image, which are instead used by certain peripheral boards such as the disk controller or printer interface boards. Locations $800-$FFF are free to be used for storing your object program. Also, with care and planning, you can find space for object program storage between the top of the symbol table and the bottom of the source program. If the space there is too difficult to determine, or insufficient size, you need to use the ".TF" directive to store the object program directly on a binary disk file. - 18 - --------------------------------------------------------------------- ROM USAGE Since Version 4.0 will execute regardless of which set of language ROMs is in force, S-C ASSEMBLER II no longer uses any routines from the Integer BASIC ROMS. The following table is believed to be a complete list of the monitor ROM routines used. F94A Print (X) blanks FBF4 Advance cursor FC10 Backspace cursor FC1A Move cursor up one line FC2B An RTS instruction FC42 Clear to end of page FC66 Move cursor down one line FC9C Clear to end of line FCA8 Delay FD0C Read next input character FD84 Add char to input line FD99 Print (Y,X) in hex with dash FDDA Print (A) in hex FDED,FDF0 Print (A) as ASCII char FE00 Display memory in hex FE2C Move block of memory FECD Write block of memory on tape FEFD Read tape into memory FF2D Print "ERR", ring bell FF3A Ring bell FFA7 Get hex number FFBE Process monitor command FFC7 Clear monitor mode byte FFCC Table of monitor commands - 19 - --------------------------------------------------------------------- BIBLIOGRAPHY At long last, publishers have begun to release some good books for learning how to program the 6502 microprocessor. Some new ones which have been published since the S-C ASSEMBLER II Version 3.2 Reference Manual was written are listed here. Apple Assembly Line, a monthly newsletter published by S-C SOFTWARE. See advertisement inside back cover for details. APPLE-GRAM, newsletter of the Apple Corps of Dallas, Texas. Subscriptions currently $12/year, from Apple Corps, Attn: Membership Chairman, P. 0. Box 5537, Richardson, TX 75080. Contains many useful articles covering every aspect of the Apple II, including assembly language programming. 6502 Software Design, Leo J. Scanlon. One of the Blacksburg Continuing Education Series, published by Howard W. Sams & Co., 1980. 270 pages, paper, $10.50. 6502 Assembly Language Programming, Lance A. Leventhal. Osborne/McGraw-Hill, Inc., 1979. Over 80 programming examples, tested on an Apple II. Programming & Interfacing the 6502, With Experiments, Marvin L. De Jong. One of the Blacksburg Continuing Education Series, published by Howard W. Sams & Co., 1980. 414 pages, paper, $13.95. 6502 Software Gourmet Guide & Cookbook, Robert Findley. Scelbi Publications, 1979. 204 pages, paper, $10.95. Includes listings of conversion routines, search and sort routines, and floating point routines. 6502 Games, Rodney Zaks, SYBEX. The third in the SYBEX series on programming the 6502. Includes listings of games in assembly language, of the type which are usually programmed in BASIC. Wozpak II and Other Assorted Goodies. A collection of Apple II documentation published by the publishers of CALL A.P.P.L.E. It contains many useful programs in assembly language which can be used and/or studied. Practical Microcomputer Programmina: the 6502, W. J. Weller, Northern Technology Books, 1980. 459 pages, $32.95. Includes a listing of a 6502 assembler and of a debugging package. - 20 - --------------------------------------------------------------------- Apple Assembly Line A newsletter dedicated to Apple Assembly Language! * Tutorial articles for beginners! * Advanced hints and techniques which save memory and time! * Ways to modify and improve standard products! * Utility programs, ready to type in and run! * Super subroutines for use in your programs! * Commented assembly listings of code found in DOS and the Apple ROMS! * New features you can add to your copy of the S-C ASSEMBLER II Version 4.0! * A place to publish your handy routines and articles and advertisements! * Editor and principal author is Bob Sander-Cederlof, author of the S-C ASSEMBLER II! * Only $12 per year (12 issued) * All back issues stil in print! * A quarterly disk available to subscribers ($15 each), containing all the source code printed in AAL during the quarter! Partial Table of Contents October, 1980 How to Add and Subtract One General Message Printing Subroutine Lower Case with S-C ASSEMBLER II Hardware Error in ALL 6502 Chips November, 1980 Variable Cross Reference for Applesoft Putting S-C ASSEMBLER II Programs on Text Files A Use for the USR Command A simulated Numeric Key Pad December, 1980 Intelligent Disassemblers Integer BASIC Pretty Lister Listed Expressions with the .DA Directive Block MOVE and COPY for S-C ASSEMBLER II Handling 16 bit Comparisons January, 1981 How to Move Memory Computed GOSUB for Applesoft Putting COPY into S-C ASSEMBLER II EDIT Command for S-C ASSEMBLER II (like Kon-Zen's PLE) TAB Locations in S-C ASSEMBLER II February, 1981 Apple Noises and Other Sounds Simple Tone and Bell Sounds Machine Gun, Laser Swoop, Laser Blast, Inch-Worm Touch-Tone Simulator Morse Code Output Stuffing Object Code into Protected Places Multiplying on the 6502 March, 1981 A Beautiful (Memory) Dump So-Called Unused Opcodes (Secret Things Your 6502 Can Do!) EDIT and COPY on the Language Card Commented Listing of DOS 3.2.1 RWTS & Command Interface for S-C ASSEMBLER II April, 1981 Text File I/O in Assembly Language Programs 80 Columns on your Printer Applesoft Internal Entry Points Modify S-C ASSEMBLER II Error Messages Fast String Input Routine for Applesoft Hiding Things Under DOS Commented Listing of DOS 3.2.1 Formatter Commented Listing of DOS 3.3 Formatter Substring Search for Applesoft May, 1981 Hi-Res SCRN Function for Applesoft Conquering Paddle Jitter Tutorial About Shifting (ASL, LSR, ROL, and ROR Opcodes) 6502 Programming Model Commented Listing of DOS 3.2.1 $B800-BCFF June, 1981 More About 80 Columns on Your Printer Two Fancy Tone Generators More About Multiplying on the 6502 Specialized Multiplications Commented Listing of DOS 3.3 $B800-$BCFF A Review of "Beneath Apple DOS" July, 1981 Using Firmware Card in Slot 4 The Lower Case Apple Screen Printer Restoring Clobbered Page 3 Pointers Step-Trace Debugging Utility Quarterly Disks All source programs printed in the newsletter are available on quarterly disks for $15 per disk. Source code is formatted for the S-C ASSEMBLER II Version 4.0. AAL-QD#1 Oct 1980 thru Dec 1980 (Now) AAL-QD#2 Jan 1981 thru Mar 1981 (Now) AAL-QD#3 Apr 1981 thru Jun 1981 (Now) AAL-QD#4 Jul 1981 thru Sep 1981 (Soon) S-C ASSEMBLER II Version 4.0 Still the easiest Apple assembler for beginners, and powerful enough for experts! Thousands of happy owners! You can purchase it at many local computer stores for $55. If not available at your store, you can order by mail from S.C SOFTWARE (same price, we pay postage in USA, Mexico, and Canada). Apple Assembly Line Subscriptions and Back Issues Only $12 per year in the USA, Mexico, and Canada. Other countries add $12/year for postage. All back issues are available at $1.20 each. (Other countries add $1 postage for each back issue ordered.) S-C SOFTWARE P.O. Box 280300 Dallas, TX 75228 (214) 324-2050 Apple is a trademark of Apple Computer, Inc, ---------------------------------------------------------------------