QMEG OPERATING SYSTEM V3 ------------------------ By Frankenstein Qmeg is another operating system (OS) for Atari XL/XE computers with at least 256K RAM memory. It's 99% compatible with the normal OS. Compared to the normal OS, some things are removed. This is not a big problem because they are replaced by more useful things.... REMOVED: - routines for the parallel port access - the 'self test' - international character set NEW OPTIONS: - nice ramdisk options - supports happy, speedy, turbo etc. - build in disassembler/monitor BOOTING and RESET ----------------- With the normal OS we're used to boot with the OPTION key hold down (who's still using BASIC these days?). With Qmeg you should not use OPTION! If you do, BASIC will be installed. If you just switch your computer on, it will first try to boot from drive D1: (just like the normal OS). If your drive supports ultra speed, it will always try to boot in ultra speed. THE QMEG MENU ------------- The Qmeg menu looks like this: QMEG-OS V3 (c)'87 S.Dorndorf W A I T I N G -------------------------------- Prg $: Drive 1 2 3 4 8: A B Ram- RAM -: Type - - A B A: M X Disk -------------------------------- There are several ways to enter the Qmeg menu. Here they are.... - when booting hold SELECT - push RESET and hold SELECT - from BASIC type 'BYE' - from the Qmeg monitor enter 'Q' When you use SELECT+RESET, it will never do a coldstart! (this means it won't wipe RAM). RAMDISK CONFIGURATION --------------------- Look at the menu again. The active drive number is inverted. D3: is configured as ramdisk A, D4: as ramdisk B and D8: also revers to ramdisk A. Ramdisks are configured as 'M X'.... Possible configurations are: Config RAMDISK A RAMDISK B ------ ----------- ---------- S S single 90K single 90K M X medium 128K medium 64K D - double 180K -nothing- These configurations can be chosen from the menu by pressing 'S', 'M' or 'D'. Using the spacebar you can 'walk' through the drive numbers. Pressing A or B will assign ramdisk A or B to the active drive. '-' is used to 'undefine' a drive. Press 'N' for normal settings (default). LOAD/SAVE RAMDISK A ------------------- If you like to read a 'real' disk into ramdisk A, you should have D1: activated (1 inverted in the menu) and press 'R' (read). The screen will turn green. Now you should press START to format the ramdisk and the disk in D1: is being transfered into ramdisk A! The screen will display the current sector being read (hexadecimal). If an error occures, there are three options: - START : try again - SELECT : skip sector - OPTION : quit all To write ramdisk A back to D1: again (yes, this will FORMAT D1:!!) press 'W' (write). Now the screen will turn red (danger!). After pressing START it will format D1: and write the ramdisk. If you press SELECT instead of START, it won't format but write the ramdisk directly to D1: instead. With this in mind you can copy from D1: to D2: (for example) or you can copy the contents of ramdisk A to ramdisk B! (or B to A). DISK DIRECTORY -------------- Press 'L' (load) at the Qmeg menu screen and the first eight names from the directory of the active drive will appear. Press 'L' again to see the next eight names.. and so on. SPACE to go back to the Qmeg menu. With a protected ramdisk (more about it later) use SHIFT-L. In that case the contents of $7F00 - $7FFF will be destroyed. LOAD FROM DIRECTORY ------------------- You probably noticed the numbers in the directory. Here's an example.... 1 PACMAN COM 2 DEMO 3 TEST OBJ This is simple, load PACMAN.COM by pressing '1', DEMO by pressing '2' and '3' will load TEST.OBJ. Warning: DON'T use this on programs which have load or save options themself (like wordprocessors or assemblers). Such programs require DOS! However, it's ideal for loading games or demos (in ultra speed!). BASIC or CARTRIDGE ------------------ START-Z switches BASIC on (READY appears). START-C switches the cartridge on. If there's no cartridge it will switch to BASIC. use START-X to switch both BASIC and cartridge off. Watch the menu (beneath Prg). You'll see 'CAR' (cartridge), 'BAS' (BASIC) or 'RAM' (normal RAM). HAPPY/SPEEDY ------------ Here are the option keys: 'U' - Ultra speed 'H' - Happy warp speed '-' - Normal speed These characters (U,H,-) appear beneath the drive number in the Qmeg menu. SHIFT-I - initialize drive SHIFT-O - happy track buffer off BOOT FROM 1 ----------- As you now know, drive 1 can actually be ramdisk A or B. Is it possible to boot from one of these ramdisks? Yes, you can press SHIFT-INVERSE to boot from 1. Ofcourse this is also used for a normal cold-boot from D1:. For example, you can read Mega Magazine issue #1 into ramdisk A, configure drive 1 as ramdisk A, boot from ramdisk A and also load the articles from ramdisk A. PROTECTING THE RAMDISK ---------------------- Sometimes it's nessesary to protect the location for ramdisk access. Some old programs don't accept an installed ramdisk. Just press 'P'.. the screen will turn pink and the ramdisk access location ($D301) will be protected. The Qmeg monitor won't work in this mode. MODE INDICATION --------------- Qmeg sometimes uses colours for indications. You can also look at the character beneath "$" for these indications. '-' - nothing special 'R' - ready to read 'W' - ready to write 'P' - ramdisk is protected LEAVING THE QMEG MENU --------------------- To leave the menu: ESC : back to DOS (if available) CTRL-CAPS : restart DOS from ramdisk C RESET : back to DOS, BASIC or cartridge SHIFT-INVERSE : specified cold-boot RETURN : to the Qmeg monitor START-RESET : normal cold-boot QMEG MENU COMMAND REFERENCE --------------------------- SELECT+RESET : enter Qmeg menu SPACE : move cursor A : ramdisk A B : ramdisk B - : normal mode U : ultra speed on H : happy warp on N : init. drive S : single density M : medium density D : double density R : read in ramdisk A W : write from ramdisk A L : directory 1 - 8 : load file from directory SHIFT-I : reset drive SHIFT-O : trackbuffer off (happy) ESC : jump to DOS CTRL-CAPS : start DOS from ramdisk C SHIFT-INVERSE : specified cold-boot START-Z : BASIC on START-C : cartridge on START-X : RAM on RETURN : jump to Qmeg monitor START-RESET: cold-boot QMEG MONITOR MLM 2.1 -------------------- MLM is a simple machine language monitor. It's very useful when you're debugging your ML program. If you're an experienced user, you can create cheat versions from games using this monitor. Almost all MLM commands start with a certain address (adr). If you don't start with an address, MLM will use the last address you've entered or address 0 when you didn't enter anything. You may not change address $D303 (PBCTL). Interrupt routines in the memory range $5000 - $57FF may not be active when using MLM. MLM MESSAGES ------------ $ hexadecimal address expected # decimal address expected ? command not recognized >xxx error number xxx MLM COMMANDS ------------ N restart MLM Q quit MLM (back to menu) H activate hexadecimal mode Z activate decimal mode MLM ADDRESS MANIPULATIONS ------------------------- adr= show address hex. and dec. adr+adr show sum adr-adr show difference = shows active address MLM MEMORY BLOCKS ----------------- adr; show contents of first 8 adr. adr show contents also in ASCII adr" show contents, ASCII only adr' show contents, keyboard codes adrL disassemble 20 lines Instead of adr you can also use adr1.adr2 to show from adr1 to adr2. * causes endless repeats of the last command. This can be paused by CONTROL-1 or aborted by pressing BREAK. A '^' sign for a command will print the data instead of displaying it. Example: ^6000.60FF" This will print the contents of address 6000 to 60FF in ASCII form. CHANGING CONTENTS ----------------- adr;byte byte byte (etc.) Fill memory at 'adr' with the given bytes. You may also use 'words' instead of 'bytes'. MLM will automaticly place words in the right order in memory (first the lo-byte, then the hi-byte). adr"text Place 'text' at address 'adr' in memory as ATASCII. adr'text Place 'text' at address 'adr' in memory as keyboard codes! COPY, COMPARE AND FILL MEMORY ----------------------------- adr1.adr2 M adr3 Copy memory block 'adr1'- 'adr2' to 'adr3'. adr1.adr2 V adr3 Compare memory block 'adr1'-'adr2' with the contents of the block starting at 'adr3'. Differences will be displayed. adr1.adr2 M adr1+x Fill memory block 'adr1'-'adr2' with bytes starting at 'adr1' and ending at 'adr1+x'. SEARCHING MEMORY ---------------- adr1.adr2;bytebyte etc. Search memory from 'adr1'-'adr2' for bytebyte. When bytebyte is found, the address will be shown. adr1.adr2"text Same as above, but now search for ATASCII text. adr1.adr2'text Also as above, but now search for keyboard codes. READING AND WRITING DISK SECTORS -------------------------------- adrsectornr.amount Write 'amount' sectors from 'adr' to 'sectornr'. Note: the amount may not be more than 255 (0 means 256). Reading and writing also works for double density. SHOWING REGISTERS ----------------- MLM allows you to set the processor registers before executing (or trying) a program. Just after the 'GO' command, MLM will first change the 'real' registers before starting the program. R show the 6502 registers W=byte gives the accumulator (A) the value of 'byte' X=byte gives the X-register the value of 'byte' Y=byte gives the Y-register the value of 'byte' P=byte gives the status register the value of 'byte' STARTING THE PROGRAM -------------------- adrGO This will start the program at 'adr'. For this MLM uses a JSR instruction, so it will return to MLM after an RTS instruction. However, if it encounters a BRK (break) instruction it will also return to MLM plus showing the contents of the registers. ADDRESSES USED BY MLM --------------------- Please don't change the following addresses when using MLM: Zero page: 4, 5, 6, 7, 21, 22, 112, 113, 114, 115, 116, 117, 118, 119, 120 OS-RAM: 583 to 619, 713 to 724 FUNCTION KEYS ------------- SHIFT-HELP function keys on/off CTRL-HELP keyboard on/off CTRL-4 Keyclick on/off CTRL-5 Cursor blinking on/off CTRL-6 Screen off (any other key to turn it on again) CTRL-7 Set the key repeat speed to slow, normal or fast CTRL-8 Activate self defined routine (set vector $238) CTRL-9 Moves the cursor to the left margin. If it's already there the left margin will be set to 0 or 2 CTRL-0 Moves the cursor to the bottom of the screen RESET will always turn the function keys back on. DRIVE #1 CONFIGURATION ---------------------- The following options were already mentioned at the Qmeg menu commands, but can also be activated directly from the MLM. SHIFT-CTRL-N : Set drive #1 to normal speed SHIFT-CTRL-U : Set drive #1 to ultra speed (HAPPY/SPEEDY) SHIFT-CTRL-H : Set drive #1 to warp speed (U.S. doubler) SHIFT-CTRL-/ : Ramdisk A acts like drive #1 SHIFT-CTRL-INVERSE : Ramdisk B acts like drive #1 DISKINTERFACE AND SIO --------------------- For the advanced user known disk interface (DSKINV at 58451) will now work with double density on it's own. It supports the following commands: 34 " format medium density 35 # format double density 63 ? switch to ultra speed and fast write 79 Q stop drive motor 72 H reserved for special HAPPY functions (controlled by DAUX1 at 778 and DAUX2 at 779) 83 S status command. Is also set to the right sectorlength (DSKSLN at 725) SIO AND USIO ------------ The Qmeg OS has two SIO subroutines. USIO which works faster because of the removed I/O interrupts, is used by all fast disk operations (ultra speed etc.). SIO is not changed. USIO can give four error messages: 128 BREAK key pressed 139 illegal command 140 wrong baudrate 144 legal command, but it doesn't work RAMDISK A AND B --------------- Ramdisks can be accessed the same way as real drives. Also the PERCOM command PUT and the STATUS command are legal. The following error messages can occur: 139 sectornumber too low or too high 138 ramdisk B accessed while it's not possible because of the double density state of ramdisk A If you've got a memory expansion of type #1 and you're using the ramdisk, you can't use the area from $4000 to $7FFF for screen data or display lists. There will be errors on screen or the computer can even lock up. When DLIEN (787) contains a value greater than 127, then Qmeg will run a DLI after a ramdisk operation.