Euphoric is the first Oric Emulator which could claim to be relatively accurate to the point it could be used to develop entire applications using it.

It is a DOS application, but it is usable on Windows - on recent versions of Windows you may have to use DosBox to run it correctly.

Euphoric is still relevant if you want to use relatively old or underpowered machines such a old netbooks, but if you have a recent machine you may want to use Oricutron instead.


In theory you should not have to run Euphoric directly since you can execute your programs by runing the OSDK_EXECUTE.BAT files. Anyway, if you need to do it, you can still go into the osdkuphoric directory where you will be able to locate the emulator.

To access the configuration screen you need to press the F1 key, and F1 again to go back to the emulation.


To access Euphoric's debugger you need to press the F11 key. This will show you this screen:

Pressing F11 again will leave the debugger.


To use Euphoric's debugger, you need to know some keys:

  • F2: step by step tracing (enter in JSR)
  • F3: step by step tracing (do not enter in subroutines)
  • F4: show Oric screen (can crash...)
  • F5: execute up to breakpoint address
  • F6: reset
  • F7: nmi
  • F10: exit Euphoric
  • F11: enter/leave from the debugger
  • F12: abort execution (during F3 or F5)
  • UP & DOWN arrows: scroll zero page window
  • PAGE UP & PAGE DOWN: scroll the memory window
  • A xxxx: assemble code
  • B xxxx: set a breakpoint
  • D xxxx: set the memory window adress
  • E xxxx: edit a value in memory
  • F xxxx: fill memory with a single value
  • M xxxx: copy a block of memory
  • U xxxx: disassemble code
  • P: set PC
  • R: change Register. Type register to change (A,X,Y,S,P), or type N,V,B,D,I,Z,C to change a flag.
Advanced features

Euphoric's debugger has been slightly improved (there's a small assembler now) and made more consistent with existing PC debuggers (like debug :-). Here are the commands:

  • A: Assembler
  • B: set Breakpoint address
  • D: Dump memory
  • E: Enter hex data
  • F: Fill memory block with a single value
  • M: Move memory block
  • P: set PC
  • R: change Register. Type register to change (A,X,Y,S,P), or type N,V,B,D,I,Z,C to change a flag.
  • U: Unassembler


Since the assemblers are compatible with both Euphoric and Oricutron's symbol formats, you should see all the symbols defined in your program directly while debugging.

Known issues

No known problem - please signal any issue on the Cross development tools forum.

comments powered by Disqus
Coverity Scan Build Status
Version 1014
  • it is now possible to manually insert .tap tapes with the menu interface (it was previously only possible to insert .wav tapes when in hardware tape mode).
  • recording a program on a .tap now writes four synchronisation bytes ($16) instead of three. But the emulator is still able to read files with one, two or three synchronisation bytes.
  • in .tap mode, a trap has been added on the 'bit read' routine in rom, so that more programs that use a copy-protection routine can be used in .tap mode without having to resort to .wav tapes.
Version 1013
  • thanks to Dbug who spotted a bug when timers reach zero (a fraction of last instruction's cycles were not counted). This should now be fixed. There's also a simple fix of the duration of the initial countdown of VIA timers.
Version 1012
  • thanks to Chema's latest game, we discovered a hardware bug of the real Telestrat's specific ULAs (HCS3119 and HCS3120) that affects the FDC access.This hardware bug is now emulated in Euphoric.
Version 1011
  • now emulates the PSG IO-port direction bit. This is not useful (it prevents the keyboard to work), but it removes a difference between the emulator and the real thing.
  • also emulates the propagation of ground voltage through the keyboard matrix intersections when several keys are pressed simultaneously. Again it's not really useful (it will even make wrong key detection in some conditions), but at least it behaves like the real thing.
  • Euphoric was so strongly emulating the crash of a 6502 executing a column 2 opcode, that it was stucked in a tight loop... Now the reset key allows to regain control...
Version 1010
  • added a specific option for the Pravetz (-p). Also, euphoric.ini has a specific Pravetz rom line: 'PravetzRom=...', and 'Computer=Pravetz' can be used. Last but not least, windows shortcuts for Pravetz with and without disk interface are provided.
  • added emulation of Borislav Zahariev's Overlay Ram Access add-on. This add-on enables access to the 16 KB of ram, as does the Microdisc controller. Borislav (aka. Bobby) has also tied this interface to his Apple DiskII Interface, allowing Bobby RDOS 2.10 to be loaded in the overlay ram, thus freeing the 48 KB of the Pravetz 8D.
  • updated the Configuratoric tool to select a rom for the pravetz and to use the Overlay Ram Access add-on. Also, two Pravetz shortcuts have been added to the Euphoric menu, and double-clicking .nib disks automatically starts a Pravetz with a DiskII interface. Thanks to Georges and the great Pravetz-8D fans for all the information on this computer, and the nice icons.
Version 1009
  • I had inadvertantly broken the pravetz disk interface soon after adding it. It is back again : add line 'DiskController=Apple' to euphoric.ini, and don't forget to provide the disk interface eprom with line 'AppleInterfaceEprom=eprom8d.rom', and also use pravetzt.rom or pravetzd.rom as the internal oric rom. If you use the pravetzt rom, it won't automatically boot the floppy, you will have to issue a CALL#320.
  • also I only have partial information on the Apple interface hardware used by the Pravetz, so writing to disk didn't work. I have modified the value returned by a register, it seems it works now...
Version 1008
  • modified the 6502 emulator in order to be able to detect a timer countdown before an interrupt is raised. Thanks to Simon for having spotted a bug in M.A.R.C that exploits this 'feature'... Also, quite heavily changed the 6502 emulator at the same time to simplify it, and found that some undocumented opcodes are bogged... (not fixed yet)
Version 1007
  • only a bugfix that caused Euphoric to crash under DOS when accessing the environment screen (F1).
Version 1006
  • added a third ram pattern type: Simon sent me a very neat picture of his Oric boot screen demonstrating this pattern type.
  • added a 'video dump' feature. Two new options are now recognized in the euphoric.ini file. FrameDump=Y enables the frame dump feature : video frames are dumped as long as the F12 key is pressed. Screenshot files with names frame0000, frame0001, etc. are created. Beware that pressing the F12 key in this mode can quickly fill up your hard disk. You can adjust the framerate with option FrameSkip=... FrameSkip=0 dumps 50 images per second. FrameSkip=1 skips every other frame, and thus dumps 25 images per second. FrameSkip=9 skips 9 frames out of 10, and thus dumps 5 images per second, etc.
Version 1005
  • the debugger has been slightly improved (there's a small assembler now) and made more consistent with existing PC debuggers (like debug :-)
Version 1.004a
  • correction of a small bug in ULA emulation. Switching from hires to text was reseting the inverse vidéo register.
Version 1.003
  • thanks to Dom and his joystick, an 'electrical' bug has been discovered in Euphoric: the joystick status was forcing the state of VIA's port A, when it can only force high level lines to ground. This is now fixed.
  • a new way of using the unused PB5 line has been added: instead of acting as the A14 line of a 27256 eprom, PB5 can be connected to the CLK line of a 74LS273, so that this chip stores the contents of port A and thus acts as a bank register allowing to use (very) big eproms (e.g I have a 4Mb flash eeprom in an Oric). The handling of PB5 is the same as PB4, you have to send a negative pulse (strobe) on one of these outputs in order to send a byte to (respectively) the bank register or the printer.
  • two printer-related options have been added in order to get proper listings when sending the output of the Oric printer to a file. This is because the oric firmware sends unusual bytes to the printer in several places. The Oric-1 and Atmos roms have a bug in the initialization of the VIA which cause a STROBE to be emitted and thus a byte to be sent to the printer. The rom can be easily fixed, but if you still use one of the original rom, Euphoric printer options allow you to get a clean listing. The LLIST command of Telestrat's HyperBasic has a different behavior: it sends many NUL bytes to the printer as part of the listing, it's not due to a VIA handling bug. So, option PrintNULs=No allows to not print the ASCII NUL bytes that are sent to the printer. This is mainly interesting when sending the output of the printer to a file in order to further edit that file (real printers ignore those NUL bytes). PrintNULs option is set to 'No' by default, so you will have to set it to PrintNULs=Yes if you want to get those NUL bytes. Also, another 'feature' of HyperBasic's LLIST command is that it sends Carriage Return and Line Feed bytes in the unusual order : LF+CR instead of the usual CR+LF sequence. This confuses a lot of text editors, so I have included a FixCRs option : it is on by default (FixCRs=Yes), and has the following behavior : every Carriage Return printed by the Oric is removed, and a CR+LF sequence is sent each time the Oric prints a Line Feed.
  • oops, I don't remember why I removed the SYNC-to-TAPEIN option in the environment screen (maybe because I had not enough space). So, it is back again, with a slight modification of the environment screen.
Version 1.002
  • I've removed a difference between Telestrat drives and Microdisc drives that doesn't exist...
  • A display bug has been fixed, I thought I had fixed it some time ago, but the fix was not complete.
  • Enabling PB5-switch in euphoric.ini had an effect on the Telestrat, which it shouldn't have. This is fixed now, and it's also easier to use the PB5-switch because if you use a 16K rom instead of a 32K one, the rom will appear whatever the state of PB5 (ie there's no A14 address line on a 16K rom).
  • I've added a 6502 trace to the log file when running under the debugger screen. Beware if you enable the log file in euphoric.ini, and run under the debugger screen: the log file will quickly fill up your hard disk.
Version 1.001
  • Thanks to Luc Buisson who sent me BD-DOS disks, I have tried to include a BD500 emulation in Euphoric.
    It's still a very approximative emulation, because I haven't put my hand on a real BD500 controller yet.
    Anyway, it allows to boot BD-DOS, with a small boot eprom I have written (of course it's not the real eprom contents : if someone has it, please send me its image).