COMET version 1.5 Manual. 9 February 1992 Edwin Blink samcoupe@designing.myweb.nl use command P ; to print without semicolons * * C O M E T * * , Z80 Assembler for the SAM Coupe I N T R O D U C T I O N COMET is a Z80 assembler designed to make full use of the SAM Coupe's screen and memory capabilities, on both 256K and 512K machines, with at least one disk drive. COMET works with SAMDOS or MASTERDOS. Features: - Very fast full screen editor. - Uses no linenumbers for source. - Can handle sourcefiles over 400K (512K SAM). - Objectcode can be put everewere in the 512K internal memory. - Code files over 400K can be merged from disk in to the objectcode on assembling. - Source files up to 24K can be included from disk on assembling. - On line command handler and calculator. T H E E D I T O R The editor works just like a word processor and uses screen mode 3, with 64 characters on a line. There are no line numbers used so you can make full use of each line. On the screen is a flashing cursor to mark your position. You can only move vertically with the cursor when there is a sourcefile in memory. You are allowed to go one line past the source to extend your source. This method prevents invisible blank lines at the end of the source. Which only take up extra memory. When the cursor is at the first line of the screen and cursor up is pressed, the screen will scroll down by one line and a previous line is printed. Unless that line is the first source line. This also works for cursor down but then the other way around. There are a number of keys to make editing easier for you. Look at the following list which shows them all. * * C O N T R O L K E Y S * * ARROW KEYS movement of the cursor the arrow points to. CAPS toggle caps lock DELETE backspace SYM DELETE delete character. Characters after the cursor are moved left by one position. CTRL DELETE delete a complete line INV insert a character EDIT clear the current line SYMBOL EDIT restore the current line TAB tabulate to the right SYM TAB tabulate to the left SYMBOL N find next item (see find command) SYMBOL E insert the instruction EX AF,AF' SYMBOL I toggle insert mode SYMBOL C enter command/calculator mode SYMBOL S Swap location F7 first source page F4 page up F1 page down F0 last source page F3 insert blankline F2 insert blockmarker (see block commands) F9 ")" close bracket F8 "(" open bracket F6 "&" Hexadecimal sign F5 "%" Binairy sign All other keys work in the same way as in BASIC. The EDIT key will clear the line and move the cursor to the beginning of the line. If a line is accedently changed or cleared, don't worry if the cursor is still on that line. It's not stored in memory yet. If SYMBOL EDIT is pressed then the line will be restored. However if the cursor has left that line already, SYMBOL EDIT can not restore the line as the old line has already been changed in memory. example: Enter the following line followed by RETURN. ;This is a remark ;move the cursor back on that line with the cursor keys and press EDIT. The line is now cleared. Press SYMBOL EDIT and the line is restored.ie the same as it was before. If you have left the line after you pressed EDIT and go back to the line and then pressed SYMBOL EDIT,the line is not restored. There are a lot of ways to leave a line and each one of them firstly checks if the line was altered. And the standard proce- dure of tokenising and space stripping is executed then. With this method it is not required to press RETURN each time. a line is changed. PAGE KEYS Every page control key. Will move the cursor to the top left corner. Unless the page holds less the 24 source lines. The cursor then is moved to the left side after the last line. If 'F7' is pressed the 1st 24 lines of the source are printed. on the screen.'F0' displays the last 24 lines of the source. PAGE UP 'F4' will go back by 24 lines unless the start of the source has been reached.PAGE DOWN 'F1' will advance by 24 lines unless the end of the source has been reached. INSERT MODE When insert mode is active a line will be inserted if the RETURN key is pressed. This allowes you to extend or insert instructions easely. The SYMBOL I key-combination toggles this mode. example: Enter the following lines. ;First line ;Second line Go back to the first line. Press RETURN and the cursor will be at the second line. Go back again and press SYM I and then RETURN. A blank line is inserted between the two lines and the cursor is at that line. Each time RETURN is pressed a line is inserted until SYMBOL I is pressed again. SWAP The swap function can be usefull if you are working in a large source. It allowes you to switch between different locations in the source. When SYMBOL S is pressed a marker is set at the 1st line on the screen (not visible). Then a search is made for a swapmarker. If There are no other swapmarkers. The display stays the same If a swap marker was found then it removed and 24 lines are printed starting at the line the marker wa found. If SYMBOL S is pressed again the display looks the same as it was when SYMBOL S was pressed for the second last time. Example: Enter 48 lines (2 pages) of text. Doesn't matter what. Press 'F7' to go to the 1st page and press SYMBOL S. Nothing seems to happen. But there has. The cursor is printed at the top left corner and a swap marker is put at the first line on the screen (never visible). Now move to the last page by pressing F0 and then SYMBOL S You're now looking at the last page. Press SYMBOL S again and the first page is displayed. The swap function will not work if there is no source or when the first line on the screen is at the end of the source. Please note that when swap is used and the first line of the screen you where looking at is altered, then the swap marker is removed. Also when the source is saved, swap markers are removed. The command 'Z' can also be used to remove them. E N T E R I N G S O U R C E When you enter a source statement correctly. Lower case char- acters of instructions and hexadecimal numbers are changed into uppercase characters, spaces are removed and the line will be automatically be tabulated to give a neat impression on the screen. Enter the the following line to see what happens. label:ORG 50000 ;set origin at 50000 Will be reprinted like this: label: ORG 50000 ;set origin at 50000 The first 15 characters of a line are called the label field. The next 5 characters of the line are called the opcode field. The following 47 characters, the operand field. * * L A B E L S * * Labels can be up to 14 characters long and are followed with a ":" in the label field. labels must start with a alpha character. All other characters may be any character except a space,dollar sign '$',percent '%' ampersand '&',brackets '()',minus '-',plus '+',asterix'*', slash '/',back slash '\',comma ',' accent ''',double point ':' semicollon ';' and quote '"' character. Please note that lower case characters are not the same as upper case characters. ie LABEL is not the same as label Labels may not be equal to a token like 'RET' or 'ret'. An example of good and bad labels: label_14_chars:EQU 12 ;good. start: EQU 12345 ;good. Command_one: EQU 1 ;good. rst: EQU 207 ;wrong.The label is equal to the 'RST label_is_too_long:EQU14 ;wrong.Label is too long. token. When a label is entered incorrectly the line will not be tabu- lated. Like these: 1label:EQU1 ;wrong.The label starts with a number label$:DEFM"string" ;wrong.A symbol which is used by the assembler is used. endEQU$ ;wrong. Missing ":" REMARKS When you want to enter a remark on a line or after a source statement, you have to start with a semicollon followed with your remark. The number of spaces before the semicolon are counted and the result is stored after the semicolon (not visible) to keep the same distance between whatever is before the remark and the remark. C O M M A N D S Before you can use a command, SYMBOL C has to be pressed first. The line will be cleared and a '>' character is printed at the left side of the line to indicate you are in the command mode Now you can enter one of the command characters with eventually some parameters. If you wish to leave the command mode then simply press return with no command entered. If an error occures a message is printed.The first key hit then will bring you back to a blank command line with the key which was hit, printed.If the key was RETURN then the command mode will be left. If a command is executed with no errors the com - mand mode is also left. summary of commands: A assemble B go to basic C copy block of source (see block commands) D directory E erase file F find next item (same as SYMBOL N) F B find block marker F E find error F word find word in label field or operand field F label: find label in labelfield G go to menu I view initial control string I num1,..,num15 define initial control string. Num1 is the number of control bytes. num2 to num15 are the control bytes. L Load source M Merge source N New source O Save objectcode P print block of source or complete source P ; as above but remark markers (semicolons) are printed as a space. Semicolons which do not represent a remark are printed. This option can be used to print simple letters. Q Quit. The assembler markers in the page allocation table are removed and the disk will be re-booted R relocate block of source S save source T num1,..,num15 send data to printer. Max.15 bytes U Undo (delete) block V view all labels in 2 columns V 1 or 2 view all labels in 1 or 2 colums V symbol view all labels starting with 'symbol' V 1 or 2,lab same as above but in 1 or 2 columns V symbol: view label 'symbol' only V * same as above but to the printer V *1 to 5 " " " " " " " V *symbol " " " " " " " V *1 to 5,lab " " " " " " " v *symbol: " " " " " " " W view workspace W p1,o1,p2,o2 define workspace p1 start page o1 start offset p2 end page o2 end offset X address execute code at'addres' and return to editor X page,address same as above but HIMEM set to 'page'. 'address' may be a number from 0 to 65535 Z Remove swap markers from sourcefile. Note. Swap markers are also removed before the sourcefile is saved. Numbers may be decimal, hexadecimal, binair or one character strings. Like: 65, &41, %01000001 or "A" CALCULATOR If you wish to make calculations or convert a number to decimal hexadecimal or binair. Enter the command mode and enter the number or calculation and press return. The number or result will be printed like this: 00000 000=Hi 000=Lo &0000 %00000000=Hi %00000000=Lo ASCII' '=Lo The first number is a 16 bit decimal word of the number/result, the second the high order byte the third the low order byte, the fourth number is hexadecimal notation of the number/result, the fifth the high order biniary notation of the number/result, the sixth the low order binairy notation of the number/result and then the ASCII character. The code for the character is taken from bits 0 to 6 of the number.ie MOD 128. A space is printed for codes <=32. Numbers can be entered in decimal,hexadecimal or binair.Decimal numbers are entered like normal, hexadecimal numbers must start with a ampersand '&' and binairy numbers with a percent '%'. Also one character string are allowed.The character must be put between two quotes. If the quote itselve is required then only two quotes must be used. Negative two complements numbers can be entered by putting a minus sign before the number, like -1. examples: 99 =99 decimal &1F =31 hexadecimal %1100 =12 binair "A" =65 character "" =34 quote -1 =255 or 65535 negative two complements number You can use additions,substractions,divisions,multiplecations and modulus in the following way. 8+88 =96 addition 48-16 =32 substraction 12*24 =288 multiplecation 96/16 =6 division 98\9 =8 modulus All these numbers and calculations are also allowed in source statements. If you want to use the high byte of a label only then do this: LD H,label/256 or if you want to use the low byte only: LD L,label\256 Please note: All calculations have the same priority. 10+10/10 will be two and not eleven. BLOCK COMMANDS Before you can use a block command you have to define a block first. To define a block move the cursor to the line which should be the first line in the block and press 'F2'. Key 'F2' will insert a line with a blockmarker on it. Do not alter this line as the blockmarker will not be reconized anymore as a blockmarker. Then move the cursor bolow the line which should be the last line of the block and press 'F2' again. All lines between the two blockmarkers are then the block. ** Block ** this is a block marker **Block** line was altered.Will not be reconized Enter the following lines ;line 1 ;line 2 ;line 3 Move the cursor to the first line and press F2. The blockmarker is inserted and line one stands below the block marker. Move the cursor below line three and press F2 again.The display looks like this: ** Block ** ;line 1 ;line 2 ;line 3 ** Block ** The lines one to three are the block. Enter after the second block marker the following line followed by RETURN. ;line 0 Press SYMBOL C to enter command mode. Press R for Relocate block followed by RETURN. The lines which where replaced and following lines(in this case none) are displayed at the top of the screen. If you press CUR- SOR UP the display looks like this: ;line 0 ;line 1 ;line 2 ;line 3 COPY BLOCK to the current line To copy a block, move the cursor to the line where the block has to be copied to and enter command 'C'. The block is then duplicated and copied to the line the cursor was at. After that the first and folowing lines of the block are printed from the top of the screen. During this command You might see the screen changing a bit. This is normal as the screen is used as a temporary buffer. This also counts for the move command. RELOCATE BLOCK to the current line The relocate command 'R', works almost like the copy command. Instead of duplicating the block, the old block is deleted and moved to the lines where the relocate command was entered. After the command has completed the first 24 lines of the new position of the block in the soure are printed. DELETE (UNDO) BLOCK To delete a block, just enter the command 'U' and the block is deleted from the source. The first line and following lines after the deleted block are printed on the screen. On delete,copy or replace block command an invalid block error can be given if the block is to big (>16384). The block then needs to be cut into smaller pieces. PRINTING SOURCE To print a part of the source, make a block first and use the 'P' command. If you want to print the complete source you don't need to use block markers. You can can use the print command at once. During printing each printed line will be printed at the line the command was given. If you press a key you will be asked to abort printing. Note. All commands which uses blockmarkers. Will remove the blockmarkers afterwards. INITIAL CONTROL STRING This string of control codes is send to the printer when the print source command is used. These control codes can be viewed by using the 'I' command. This string can be defined in the installation program and can be changed in the editor by using the 'I' command followed with numbers. The first number represents the number of control bytes. Use zero if no bytes should be send. If you want control bytes send then use a number from 1 to 14 followed by the control bytes. FIND COMMAND To find your way to a surtain part of your source. You can use the find command 'F' which can be used in different ways. The find command on its on will search a earlier defined item From the current line. If the item is found it is printed at the first line following the lines after that line. If it was the last item the 'Not found' message is printed. You can also use SYMBOL N to find the next item,which is easier to use. To define what you want to find, just type it after the command You can use a 'B' to find blockmarkers, 'E' to find errors (which are inserted if there were errors during assembling), strings or numbers which are longer then one character or a label in the labelfield, if a ":" is added to the label. When RETURN is pressed the editor will search for the item from the start of the source. If the item is found it is printed at the first line following the lines after that line.Use SYMBOL N to find the next item. VIEW SYMBOLS Simply enter V and all labels are printed on the screen in two columns. With their values in decimal and hexadecimal numbers. You can also follow a number or a label or both after the command. The number indicates the number of columns the labels are printed in and the labels starting with 'label' are printed If you add a ':' after the label, then that label will be printed only. Put a '*' before the parameters if you want to use the printer If you select condensed elite on your printer you can print in five columns. However if the screen is used as output. Don't use other columns then one or two. When the ESCape key is pressed, the command is aborted. W O R K S P A C E The source and symbol table are in a flexible workspace which can be from as small as 3 bytes and as big as 400 K. The pages which are used as workspace are marked in the page allocation table at &5100 (&AF for a source page and &AC for the assembler page). So that it is not corrupted when you use some basic commands like COPY or if you use a RAMDISK with MDOS Enter command W only to view the start and end of the workspace The line will look like this: W 007,00000,011,16383. The first number is the start page and the second is the offset in that page. The third number is the end page and the fourth the end offset in that page. If you press RETURN the workspace is set. If the values are the same as they were. The source stays in memory. However if the start of the new workspace is different from the start of the current workspace or if the end of the new work- space is smaller then the end of the sourcefile. The sourcefile is deleted !!! The symbol table is always cleared when the workspace is set. NEW SOURCE When this command is executed you will be asked if you really want to delete the complete source. You have to press 'Y' to do so or 'N' to abort. EXECUTE CODE The command 'X' allowes you to run your assembled code. If a single number is given then the addresses 0 to 16383 hold the ROM0, 16384 to 32767 hold page zero (system page), page 1 at 32768 and page 2 at 49152. Just like in basic. If two numbers are given then the first number has to be the page to select at 32768(HIMEM)and the second number the address The lower 32K are the same as before. But 32768 to 49151 holds page 'page' and 49152 to 65535, holds page 'page+1'. During execution of objectcode, the break button may be pressed When your code is executed it will return to the editor. If you wish to return to basic or the menu afterwards, then insert this as the end of your source: exit: POP BC ;drop switch routine address POP BC ;drop assembler page POP BC ;drop re-entry address POP BC ;drop switch routine POP BC ;drop switch routine LD BC,1 ;1=signal goto basic 6=signal menu RET THE ASSEMBLER The assembler works just like any other Z80 assembler. It conv- erts source into objectcode. But some things are different, which I will explain. ASSEMBLER DIRECTIVES: You can use some assembler directives. Also known as pseudo op- codes. ORG address set origin at 'address' The source that is going to be assembled will be made to run at this address. If you don't use this directive. The assem- bler will use 32768 as default. DUMP address The code of the source will be assembled at this addres.'Adress' has to be a value from 16384 to 65535. DUMP page,offset same as above but allows code been put over 65535.'Page' has to be a value from 0 to 31 Be careful with the page choice to prevent corruption of the Basic system,DOS and assembler. Offset is the address within a page and has to be a value from 0 to 16383. DEFB num,..,num define bytes (0-255) This directive allowes you to include data The data is followed after the directive. DEFM "string" define message. This directive allowes you to include text in ASCII form in the objectcode. Note. Don't use quotes inside quotes !!! DEFS number define storage This directive allowes you to create a gap of 'number' bytes. 'number' has to be a value from 1 to 16383. For buffers tables etc. DEFW numb,..numb define word (0-65535) like DEFB but now for numbers from 0 - 65535 EQU number equal or equate This directive can only be used after a label. It allowes you to give a value to a to a label. LIST ON/OFF this directive can be used to print a part or the complete source to the printer during assembling. The line printed will start with the current instruction address followed with the number of instruction bytes and the sourceline. The numbers are printed in hex. Directives do not have instruction bytes. When assembling has completed. Remove this directive from the source. This might save troubles if you assemble again later on. MDAT "file name" This directive will Merge a code file (or screen$ file) from disk into the objectcode. There is no limit of the length of this file INC "file name" Include source file "file name". This directive allowes a source file which is on the disk to be assembled at the pos- ition the directive was put in the source file which is in memory. No INCludes are allowed inside a INClude file.also the include file must be less than 24K. The include files are loaded into the screen memory so if you might see some strange things on the screen don't worry this is normal. Note. both MDAT and INC work only with disk or RAMdisk (MasterDos). Thera are certain instructions which may be entered in other forms. The instructions ADD A,.., ADC A,.. and SBC A,.. may also be entered as ADD .., ADC .. or SBC .. ..=B,C,D,E,H,L,(HL),A,etc. The directives DEFB,DEFM,DEFS and DEFW may also be entered as DB,DM,DS and DW they are changed into the above form. Undocumented instructions are not implemented (except SLL). if you want to use them then they should be entered like this: DEFB 221 for IX or 251 for IY HL version of the instruction. example: the instuction 'LD IXL,123' becomes: DEFB 221 LD L,123 If you want to give a label the current instruction addres, without a instruction following, you can do it like this: label: EQU $ or without the EQU $: label: NUMBERS You can include numbers and calculations in the same way as the calculator can handle. You can also use labels and the dollar sign to use the current instruction address. Example: ORG 30000 ;make code to run at 30000 DUMP $ ;put code at 30000 start: LD A,-2 ;channel -2 (=254) CALL &0112 ;open the channel LD DE,mes1 ;DE = start of message LD BC,mes2-mes1 ;BC = length JP &0013 ;print message and exit mes1: DEFM "Just an example" mes2: EQU $ length: EQU $-start ;get lenght To assemble enter command 'A' in command mode (SYMBOL C). During assembling the screen is deactivated so the screen will go black and the Z80 runs on the full 6 MHz. When assembling has been completed. You will look at the same screen as when you first entered COMET. Only in the middle of the screen is some extra information. when assembling has completed succesfully the message 'assembly completed'isprinted.The message 'object code xxxxx Bytes' tells how many bytes are assembled. if more than 65535 bytes where assembled then this number the MODulus 65536 of the real number If you didn't used multiple DUMP's which can cause gaps then this is also the length of the objectcode. Finally there is the message 'XXXXX Labels used' which tells You how many labels are defined during assembling. If the message 'Assembling aborted' apears then there has been an error or more. When there are errors in the source you can use SYMBOL N to find them. When you corrected an error don't forget to remove the error line. Because when you don't you might wonder whats wrong with the line later on. an error looks like this: ** Error ** Bad source statement There are no limits to store objectcode or symbols as long as There is memory free to store it. EDITOR ERRORS Out of memory there is not enough memory to insert a line. Not understood Parameters are incorrect. Invalid block Block is empty, undefined or too large. Inside block The editor can not copy or relo- cate a block inside the block. Number out of range Number bigger than 255 or 65535. String too long string has more than 14 characters or more then 15 numbers are used. Not found Item not found. Invalid Workspace start bigger than end or memory pages are allready used. ASSEMBLER ERRORS The following errors are printed on the screen if assembling has aborted. Assembly aborted Indication that something has gone wrong. Out of symbol space Not enough memory to define a label. Assembling was immediately aborted Check source for errors Errors have been found during assembling. Assembling was aborted after the first pass or immediately if more then 10 errors are found or error was found on the second pass Escape pressed ESC key was pressed. Assembling was immediately aborted Out of memory There is not enough memory left. Assembling was immediately aborted. SOURCE ERRORS If a error is found in the source during assembling, the error is inserted in the source. If an error occured during INCluding the errors occured are put above the INClude statement. Bad source statement a source statement was entered incorrectly. Bad expression Numberic expresion is incorrect or a label is too long. Number out of range Number must be smaller than 256 or smaller then 65536. Label not found Label is not defined. Multiple label Label is used more then once. Displacement out of range relative displacement of DJNZ,JR or Index is too large. File not found file not found. Wrong file type the file is not a code/screen file Invalid device Disk only. Disk error Error during a disk operation. File too large Include file must be smaller than 24K (24576 bytes). Include in Include No includes are allowed inside a include file. WARNING: Do not press the break button when you are in the editor or during assembling. Pointers will not be updated on re-entry and may be fatal for your sourcefile. However you are allowed to press the break button during execution of objectcode. CONVERTERS On the disk are some converters which can be used to convert sources from different assemblers to a COMET source. SC CONVERTER If have used the SC_Assembler or have sources of this assembler you can use the program 'SC convert' to make a COMET file of it Please note that Undocumented instructions are converted but will not be reconized by COMET. Also those assembler commands which start with a asterix will will be converted into a blank line. LERM CONVERTER Also on the disk is a converter to convert LERM source files Multi statements are also converted but each statement will have its on line. The token ENT will be converted into a question mark as this instruction has no use. BASIC MENU When you look at the menu there are 5 windows. The upper window holds the PATH of subdirectories if MasterDos is booted else this window is not used. At the right middle side are two small windows the upper one holds the version number. The window beneath that one gives information of the current device, Which filename is used the length of the source file in memory, the length of the symbol table and how many memory is left in the workspace. The bottom window holds the copyright message. the window at the middle of the screen holds all possible options which you can access with the coresponding keys. B go to Basic ,will do just that C Change directory. Can only be used if masterdos is booted D directory,will print a detailed directory of the current drive E Erase, will give a directory and ask for the file to erase. use D to reprint the directory or press return to return to the menu. If the filename entered ends with a full stop '.' then '.S' is added. L load ,will give a directory and asks which file you want to load. Press return to use the current name. If the file name is shorter then 9 characters then the extension '.S' is added. M merge,will merge a file at the end of the source in memory. S Save,will save the source in memory. Like load and merge A filename extension '.S' will be added if the filename is less than 9 characters. If the file already exist then the file on disk will be renamed as a backup version by using the extention '.B'. If there was also a backup version on the disk then that one will be erased. Swap markers (see swap) will be removed before the source is saved. N new device,enter the device character followed with the device number. Devices can be Tape Disk or if MasterDos was booted also Network or ramdisk. O save object code, if the file name is less then 9 characters the extention '.O' is added. The start and length of the object code needs to be given after the filename is defined. Q quit, Will remove the assembler and workspace markers from the page allocation table,restore the palette and reboot the disk. R return, returns to the editor. I N S T A L L A T I O N On the COMET disk is also a file called 'COMET inst'. This pro- gram allowes some alternations to be made to suit your wishes. These changes will be put in the machine code of COMET. When the 'COMET inst' file has loaded you will be asked several Questions to answer. SELECT FONT Press C,A or O C for current font. This is the font currently in memory. Normaly the standard SAM font. A for assembler font. This font is displayed on the screen above the question. O for other This option allowes you to load your own font from disk. When you choose C or O you will have to wait for a while. The font will be POKEd in an expanded version in the assembler. ERROR BEEPS This option gives a beep (actually a soft ping) when you make an error in the editor (when selected of course). Default: on TABULATIONS When you want to alter the tabulations of the TAB key. Then Press 'Y' and enter four numbers from 1 to 62. Default: 15,20,26,35 ENABLE PRINTER If you don't have or don't want to use the printer commands (LIST ON, commands 'P','V*','T' and 'I'), then press 'N'. The printer commands will then be disabled. Default: Printer enabled LINEFEEDS When your printer needs linefeeds after cariage returns. Then press 'Y' Default: Linefeed after cariage return CONTROL CODES This option allowes you to send a string of control codes to the printer, each time you use the 'P' command. This string can also be changed in the editor. Using the 'I' Command. Enter your control codes as decimal numbers seperated by commas Up to a maximum of 14 numbers. Default: undefined. COLOURS If you wish to use different colours then this option allowes the colours been changed. For each pen colour a palette value from 0 to 127 has to be given. If no flashing colours are required then enter the same number for the second colour as the first number. Press a key and COMET will be saved as an auto file at your disk. Default: col0:0,0 col1:17,85(Flash) col2:34,34 col3:127,127 LABEL JUSTIFY The labels in the source can be justified to the left side.ie start: EQU $ Or to the right side of the label field.ie start:EQU $ Default: left justify WORKSPACE SIZE When COMET has been loaded a workspace will be created.Normally a workspace of 5 pages (80K) is created. If you wish to have a different size then enter a new size in pages. LOADING COMET Insert the COMET disk and press F9.When COMET has loaded, COMET will be relocated to the first free page at the end of memory the workspace will be put on the pages below that. COMET will normally be at page 28 on a 512K SAM or page 12 on a 256K SAM. The workspace will normally be in the pages 23 to 27 on a 512K SAM or pages 7 to 11 on a 256K SAM. (workspace 80K). Finally there are some short demo sources following. Have a look at them. They can be usefull in some way. The programmer, Edwin Blink. =============================================================== MDAT demomstration. To demonstrate the MDAT (Merge DATa) instruction, this source will merge a screen into the objectcode. When this code is executed the screen will be displayed untill a key is pressed. Before you assemble this source insert a disk with a screen on it and enter the file name of a screen in the MDAT statement. ORG 33000 code must be above 32767 DUMP $ start: IN A,(250) save LOMEM EX AF,AF' press SYMBOL E for this one LD HL,screen_start+24576 point to palette data LD DE,&55D8 palette table LD BC,40 40 palettes LDIR move the palette colours HALT DI IN A,(252) get screen page PUSH AF AND 31 keep the page only OR 32 RAM at 0 to 16383 OUT (250),A select screen page at LOMEM OR 64 MODE 4 OUT (252),A set VPAGE LD HL,screen_start LD DE,0 LD BC,24576 LDIR move screen data into screen EX AF,AF' restore LOMEM OUT (250),A EI LD HL,&5C3B FLAGS waitkey: BIT 5,(HL) has a key been pressed ? JR Z,waitkey repeat if not RES 5,(HL) reset key POP AF get VPAGE back OUT (252),A and restore VPAGE RET screen_start: MDAT "screen name" Enter a screen name here length: EQU $-start =============================================================== INClude demonstraction Firstly we create an include file. Enter this source and save it as 'square I' This include file hold the subroutines 'drawsquare' to draw a square at C,B with width L and depth H and the subroutine 'draw line' to draw a line to B,C drawsquare: INC C PUSH BC plot pixel at B,C PUSH HL CALL &0139 Jp table PLOT POP HL POP BC DEC C LD A,C add width to obtain top- ADD L right corner LD C,A CALL drawline LD A,B add depth to obtain Bottom- ADD H right corner LD B,A CALL drawline LD A,C sub width to obtain Bottom- SUB L left corner LD C,A CALL drawline LD A,B sub depth to obtain Top-left SUB H corner LD B,A drawline: PUSH BC save coords and depth/width PUSH HL CALL &013F JP table DrawTo POP HL POP BC RET =============================================================== Include demo square. Includes file "square I.S" ORG 30000 DUMP $ XOR A signal cls entire screen CALL &014E Jp table CLs BlocK LD A,1 LD (&5A4D),A set fatpix LD (&5A55),A set over 'XOR' repeat: LD BC,0 B=y=0,C=x=0 LD HL,&BFFF H=depth=191,L=width=255 nextsquare: CALL drawsquare INC C x=x+2 INC C INC B y=y+2 INC B LD DE,-&0404 depth=depth-4,width=width-4 ADD HL,DE LD A,B Halfway the screen ? CP 96 JR C,nextsquare another square if not LD HL,&5C3B FLAGS BIT 5,(HL) key pressed ? JR Z,repeat repeat sequence not RES 5,(HL) reset key RET INC "square I.S" include. CALL routines: drawsquare drawline =============================================================== Include demo square2. Includes file "square I.S" works in MODE 3 ORG 30000 DUMP $ XOR A signal cls entire screen CALL &014E Jp table CLs BlocK LD A,-2 channel 'S' CALL &0112 open channel LD A,1 LD (&5A4D),A set fatpix LD BC,5*256+2 B=y=5,C=x=6 repeat: PUSH BC LD HL,13*256+23 H=depth=13,L=width=23 CALL drawsquare LD A,22 print AT: RST 16 LD A,B line INT (b/8)+1 RRCA RRCA RRCA AND 31 INC A RST 16 LD A,C column int (C/4)+1 RRCA RRCA AND 63 INC A RST 16 LD DE,message LD BC,messend-message CALL &0013 print string 'message' POP BC LD A,C next column (7 chars) ADD 28 LD C,A CP 254 line full ? JR NZ,repeat jp if not LD C,2 left column LD A,B next line (2 chars) ADD 16 LD B,A CP 181 out of lines ? JR C,repeat jp if not LD HL,&5C3B FLAGS wait: BIT 5,(HL) key pressed ? JR Z,wait wait for key RES 5,(HL) reset key RET INC "square I.S" include. CALL routines: drawsquare drawline message: DEFM "COMET" messend: