Linux Home

(Last updated: Thu. Sep 24, 2009)


F1                   Built in user interface
F2                   Option key
F3                   Select key
F4                   Start key
F5                   Reset key ("warm reset")
Shift+F5             Reboot ("cold reset")
F6                   Help key (XL/XE only)
F7                   Break key
F8                   (not used)
F9                   Exit emulator
F10                  Save screenshot (may not work)
Shift+F10            Save interlaced screenshot (may not work)
LAlt+R               Run Atari program
LAlt+D               Disk management
LAlt+C               Cartridge management
LAlt+Y               Select system
LAlt+O               Sound settings
LAlt+W               Sound recording start/stop
LAlt+S               Save state file
LAlt+L               Load state file
LAlt+A               About the emulator
LAlt+F               Switch fullscreen (not used; always fullscreen)
LAlt+G               Switch WIDTH_MODE (so you can set 320x240)
LAlt+B               Switch BLACK-AND-WHITE
LAlt+J               Swap joysticks 0 and 1
LAlt+E               Switch bpp (for debug only)
LAlt+M               Grab mouse (prevents mouse pointer from leaving the window)
Insert               Insert line (Atari Shift+'>')
Ctrl+Insert          Insert character (Atari Ctrl+'>')
Shift+Ctrl+Insert    Shift+Ctrl+'>'
Delete               Delete line (Atari Shift+Backspace)
Shift+Backspace      Delete line (Atari Shift+Backspace)
Ctrl+Delete          Delete character (Atari Ctrl+Backspace)
Ctrl+Backspace       Delete character (Atari Ctrl+Backspace)
Shift+Ctrl+Delete    Shift+Ctrl+Backspace
Shift+Ctrl+Backspace Shift+Ctrl+Backspace
Home                 Clear (Atari Shift+'<')
Ctrl+Home            Ctrl+'<' (also clears screen)
Shift+Ctrl+Home      Shift+Ctrl+'<'
Up                   Up (Atari Ctrl+'-')
Down                 Down (Atari Ctrl+'=')
Left                 Left (Atari ctrl+'+')
Right                Right (Atari ctrl+'*')
Ctrl+Up              -
Ctrl+Down            =
Ctrl+Left            +
Ctrl+Right           *
Shift+Up             _ (Atari Shift+'-')
Shift+Down           | (Atari Shift+'=')
Shift+Left           \ (Atari Shift+'+')
Shift+Right          ^ (Atari Shift+'*')
Shift+Ctrl+Up        Shift+Ctrl+-
Shift+Ctrl+Down      Shift+Ctrl+=
`                    Atari/Inverse key
CAPSLOCK             CapsToggle (+Shift = CapsLock)


Apart from standard joysticks (handled by the SDL) up to two keyboard joysticks are supported. The keys used for joystick directions and the trigger can be freely defined in the config UI (Controller Config -> Define layout). Keyboard joystick emulation can be enabled/disabled in the Controller Config. By default, joy 0 is enabled and joy 1 is disabled (to not steal normal AWDS keys in the emulator).

Default joystick keys for first joystick device

numeric 8   - stick up
numeric 5   - stick down
numeric 4   - stick left
numeric 6   - stick right
right SHIFT - fire (trigger)

Atari 8-bit executable Header

Atari 8-bit uses 6 bytes executable header ($ff,$ff,startlo,starthi,endlo,endhi) to run from Game Dos menus. An executable which runs from any DOS 2.5 compatble DOS would even required 6 bytes more for the run address specification, i.e. 12 bytes header.

6+128=134 bytes

  20 01 C0 JSR $C001
  60       RTS
  FF FF 00 06 03 06 20 01 C0 60
15 L=10
20 OPEN #1,8,0,"H:OMNIMON.COM"
30 FOR I=1 TO L
50 PUT #1,D
52 ? D;" ";
70 CLOSE #1
80 END
100 DATA 255,255,0,6,3,6,32,1,192,96

20 X=USR(1536)
30 ? "DONE"

0600	jsr $C001
	jmp $(FFFC)


From BASIC: X=USR(49153) REM listed as 49152 but in XL that crashes the Emulator)

  • A: Alter memory A addr byte byte
  • B: Boot disk. Just type B
  • C: View alter CPU regs. Use arrow keys to directly alter the regs
  • D: Display mem D start end
  • E: Execute mem in steps *warning* crashes emulators 99% of the time!
  • F: Fill program buffer F addr Used to teach a set of instructions that get called via the O command
  • G: Get a file G filename addr Used to load a file to a default address or specified address, also doubles a directory lister by just G or G D2: etc
  • H: Hex arithmetic & converter H = operand ie H = 25*2
  • J: Jump to subroutine J addr If you then push START and press the ENTER key it will do a full jump..*warning* this crashes the emulators 99% of the time!
  • L: Link drive L drv Swaps between linked and sequential sector mode
  • M: Move mem M addr0 addr1 addr2 Move memory between the first two addresses to the last address
  • N: Relocate mem N addr0 addr1 addr2 (addr3) (addr4) Moves and creates fully adjusted code
  • O: Operate program buffer O addr Used after a set of commands have been entered in the F command
  • P: Printer toggle
  • R: Read disk R secstart bufferaddr #sectors
  • S: Search mem S addr byte byte
  • T: Toggle between Hex and character mode..Affects the display mem and search commands mainly
  • V: Verify mem V addr0 addr1 addr2 Verifies mem between 1st two with last address and prints diffs
  • W: Write disk W startsec bufferaddr #sectors
  • X: Disassembler X addr0 addr1 Does single address or multiple
  • Y: Assembler Y addr instruction ie Y 600 LDA #$00 <return> then next line

Jump to Omnimon!

We have seen how to enter OMNIMON! by holding down OPTION (F2) and pressing SYSTEM RESET (F5). This causes a normal warmstart followed by a jump subroutine (JSR) to OMNIMON! . When you exit OMNIMON! after entering it in this way (by holding down START (F4) and pressing RETURN), the warmstart goes to completion in a normal fashion. This is fine for some applications but there is another way to enter OMNIMON! which disturbs the program running as little as possible.

SELECT (F3) and SYSTEM RESET (F5) work to get into Omnimon! in the emulator but a SYSTEM RESET (F5) is needed to exit Omnimon back to BASIC.

When you hold down SELECT (F3) and press SYSTEM RESET (F5), the program running at the time is interrupted. However, instead of doing the entire warmstart, parts of it are skipped over so as to preserve the state of the system as much as possible. Specifically, the OS variables and the stack are left undisturbed. Usually this allows you to reenter the program by simply exiting OMNIMON! in the normal fashion (Okay, what's the normal fashion?). For instance, you can pop into OMNIMON! from either DOS or BASIC, execute some OMNIMON! commands, and pop back into the interrupted program almost as if you had never left it. I say 'almost' because the OS is likely to return a bogus value if it was waiting for a keystroke when it was interrupted. For that reason it is best to hit BREAK upon return to the program. Of course, if the program makes use of any graphics other than MODE 0, it is unlikely that you will be able to successfully reenter the program without restarting it. This is also true of programs which alter the interrupt RAM vectors ($200-$224) because OMNIMON! restores them to their original values.

Still trying to figure this out. But BRK sometimes works in the emulator. So I must be doing something wrong. If you call usr(xxxx) then you will need a PLA to remove the arg count (and PLAs to remove the arguements if called). The a START <RETURN> will work to return you to the running program. Also returning values in $D4 & $D5 does work (lo/hi format).

If you dump out of a program with BRK you'll be dumped into Omnimon. The PC will contain an address near the break. Doesn't always seem to be the same each time. Not sure why. But to get back from where you were when you left, first replace the BRK with a NOP (A 2155 EA) and then change the PC to the addr (C 2155) or instead of replacing the break and changing the PC, just change the PC to the next address (C 2156). Then hit <START> and <RETURN>. You should now be back in the program where you left. The changes to the PC are not necessary of you jumped to Omnimon from BASIC (X = USR(49153)) or from assembler (JSR $C001).

  • X = USR(49153) - Jumps straight into Omnimon. START(F4)+RETURN to return
  • JSR $C001 - Jumps straight into Omnimon. START(F4)+RETURN to return
  • BRK - Jumps straight into Omnimon. Fix the PC, START(F4)+RETURN to return
  • OPTION(F2)+RESET(F5) - Jumps to Omnimon, START(F4)+RETURN to return (locks up the emulator ???)
  • SELECT(F3)+RESET(F5) - Jump to Omnimon, RESET(F5) returns to BASIC (or DOS if not installed?)