XMEM ASSEMBLER v3.1 --------------------- by Tron/Flt in sept -91 This expansion memory assembler is based upon the Turbo Assembler v5.0, modded by Tycoon. The main mods are that all memory accessing commands now instead work in the expansion memory. Files to follow this package: XMEMASS v3.1 XASS(!!) XASS(!) TRONMON v1.0 The three xmem files are all needed to make the assembler work, but the TRONMON may be used and spread separately (You may choose also to include the "xass(!)" file for safety reasons) LINE OF ACTION ---------------- To start this up, just plug in your expansion mem and do the following: LOAD these files: XMEMASS v3.1 XASS(!!) TRONMON v1.0 Start the assembler with SYS 4096*6. Once in it you may start to write a new source as usual or load an old one. If you earlier used a Turbo Ass version higher v5.1, the old source may not work. In this case, load the Turbo Ass, load the source and save it with "<- w", which will store it on disk in SEQ format, readable by ALL assemblers. Then reload the XMEM ASS v3.1 and load the source with "<- e" To start the source, use the assemble command "<- 3" as usual or press F4. If you wish to move the "RETURN" routine to another address than $0800, use the "<- P" to change the page. If you for example specify $CF00, you return to the assembler with JMP $CF00 from your program. THE "RETURN" ROUTINE ---------------------- Once in it, you choose whether to store the current RAM in a bank or to return to the ASSEMBLER without storing the changes your program may have made to the memory. 0-7 will specify what bank to store in. (DO NOT use bank 0. This is the bank where the assembler, source and monitor lies when you have "banked" the object bank.) RETURN will store in the current specifyed object bank. N will continue to the Assembler without storing the object bank at all. Q will quit the return routine, staying in the object bank. If the return routine should fuck up due to software error (in YOUR program, not the assembler) you may load the XASS(!) file as a replacement. This works like the normal RETURN routine, with the difference that pressing return here will do the same action as pressing N. ASSEMBLER COMMANDS -------------------- The standard set of the TURBO ASS v5.0 with the difference that the "L", "S", "F", "6", "i" and "j" commands work in expansion mem. The three new commands are: "M" - Go to the TRONMON "B" - Select what bank to use as object bank. (DO NOT use 0 unless you are completely sure about what you are doing.) "P" - Specify what page to use for the RETURN routine. THE TRONMON v1.0 ------------------ Is called upon with SYS 8192, or by pressing "<- M" in the assembler. It works about the same as a normal monitor, with the difference that you may choose what bank to work in with the O command. After the O you enter a number (0-9). 0-7 will enter the expansion mem banks (or only 0-3 if you've got a 1764 memory) Specifying 8 will access the current RAM in the computer and 9 will do the same as 8, with the difference that the BASIC ROM, KERNAL and I/O ROM are switched in. Another difference (due to my own lazy- ness) is that you may not use commas as separators in the command. What usually looks like: .L "filename",08,1000 would have to be: .L "filename" 08 1000 Not that hard to remember eh ? And the same goes for the save command. SPECIFICS about the GO command: The G command will store the current RAM (assembler+source+monitor) in bank 0, and then switching in the current bank (selected with O), performing the JUMP specifyed after the G command. To get back to monitor, you may do three things, either BRK, RTS or JMP $0380. All these are quite unsafe, due to the fact that a common JSR $FF8A will destroy the routin at $0380. If this happens, you just simply load the XASS(!) file and return to the assembler. Commands that differ from the "normal" monitors: LOAD: The thing that's new (except from the SPACE instead of comma) is the possibility of specifying a third operator. For example: .L "filename" 08 1000 1300 This would then start the load as usual at $1000, and END it at $1300. This limitation of the load may be pretty handy sometimes. TRANSFER: You may specify what bank to transfer to like this: .T 1000 2000 -5 6000 ---- This would transfer area $1000-$1FFF in the current bank to bank 5, area $6000-$6FFF A weakness that will be corrected in a later version is that you may not give the destination address within the range of the source area. the command ".T 1000 2000 1200" would give a real ugly result. But the command ".T 1000 2000 0F00" would give no trouble. To solve this problem you first transfer it to a 2nd area, and then back into the first at the correct destination address. COMPARE: The same syntax as for the T command, you may specify the destination bank. A command worth to notice is the N com. The same as in the Action Replay ! After the N, enter a decimal number (either without prefix or with the # symbol), a hexadecimal number ($ as prefix) or a binary number (% as pfx.) The answer will be given in DEC, HEX, BIN and screencode character. If you run in to DEEP trouble with this, you may call the FLT sweden HQ WAREZ AQUARIUM (+46 660 77355) and leave me feedback. I'll answer your questions the best I can.. _______________