Automation
(Last updated: Thu. Sep 24, 2009)
Keyboard
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)
Joysticks
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
10 REM BINARY LOADER 15 L=10 20 OPEN #1,8,0,"H:OMNIMON.COM" 30 FOR I=1 TO L 40 READ D 50 PUT #1,D 52 ? D;" "; 60 NEXT I 70 CLOSE #1 80 END 90 REM DATA, ASSEMBLY LANGUAGE TO LOAD AT 1536 100 DATA 255,255,0,6,3,6,32,1,192,96 10 REM JUMP TO OMNIMON 20 X=USR(1536) 30 ? "DONE" 0600 jsr $C001 jmp $(FFFC)
Omnimon
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?)
Notes
- 6502 opcodes (local copy)
- http://www.6502.org/tutorials/6502opcodes.html
- BCD (http://www.6502.org/tutorials/decimal_mode.html)
- Mapping the Atari
- Omnimon Manual
- Atari FTP Archive