Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
DTP's EMulator FIles Runner

divIDE version

- All is done in NMI menu.
- Own detection of IDE devices.
- Works with iso9660 (CD-ROM image) directly from CD-ROM device or stored on ZIP
  drive, HDD or CompactFlash. Image is automatically detected only if is stored
  from beginning of the medium. If image is not stored from the beginning you
  have to use "search" function.
- Search for ISO image function. Start of the image can be detected by
  sequential medium read. It's not too fast so don't store your images too far
  from start of the medium.
- Ability to browse whole directory tree (integrated file browser).
- Search for files in directory by name
- Everything is remembered (actual directory, cursor position, .TAP data etc.).
- Filetype autodetect. Screens by filelen, emulator files by extension.
- View of coloured (6912 B) or monochrome (6144 B) pictures with detection of
  border colour.
- Running SNA snapshots (48K and 128K). 
- Running Z80 snapshots (versions 1.x, 2.x and 3.x).
- Running MFC snapshots (48K and 128K).
- Tape emulator for TAP files (read only = save is not supported). After you
  select TAP file in browser content is presented as "virtual" directory and
  you can set "load cursor". If your program reads data with ROM rutines and
  there is some active TAP file in DEMFIR (selected) all data is readed from
  IDE device. If TAP file is not active, data is readed from standard tape
  input (with default ROM routines).
- Tape emulation for TZX files, like TAP above. Only blocks with ID=10h are
  taken. Others are shown in browser but skipped during tape emulation.
- POK file read and easy way to turn on and off any cheat (cheat is group of
  POKEs applied together).
- Screensaver
- Modular architecture - some parts can be turned off at compile time and there
  will be space for some other modules.

NMI menu controls (keys are emphasised):
D = device  - device change (master/slave)
M = medium  - reread of medium and image detection
R = reset   - software reset (JP 0), with 'SYMBOL SHIFT' clears DEMFIR's RAM too
I = init    - new devices detection, with 'SYMBOL SHIFT' bypasses detected
              device size and set maximum size (128 GB for LBA and c. 8 GB for
              CHS). For CHS in addition get default geometry instead of actual
              (may help with old or nonstandard hdds).
              If build with WITH_WDC and hdd tells invalid actual geometry
              (some Western Digital hdds) DEMFIR try initialize CHS
              translation. After that instead of device name is text "CHS
              translation:" and three numbers (actual CHS). Then you HAVE TO
              detect devices AGAIN. If next detection will have the same
              result ("CHS translation:" etc.), your hdd is not able remember
              new geometry. Then use detection with 'SYMBOL SHIFT', it bypasses
              initialization of geometry too and hdd should be usable.
Q = quit    - exit from NMI menu, switch to selected VRAM (see 'V' key)
F = find    - finds ISO image on any place on medium (can't be performed on real
              CD-ROM). Searching for the image starts from actual position +
              size of selected image (if any) + offset of Primary Volume
              Descriptor (16 sectors of 2 KB). If you wanna start searching
              from actual position press key 'F' together with 'SYMBOL SHIFT'.
              Searching can be interrupted by key 'SPACE'.
S = sector  - with this function you can specify sector where ISO image is
              expected or where you want to start searching. For input controls
              see "Input controls" :). Number is in hexa, accepts characters
              0-9 and A-F (case insensitive). At input end new sector number is
              used to read new ISO image (when you get 'No ISO image found'
              message, try searching).
V = VRAM    - shows actual Video RAM (always 1st after NMI), next press of 'V'
              key swaps 1st and 2nd VRAM. If there is no keypress within two
              seconds after last keypress, displayed VRAM is set for Quit and
              DEMFIR returns to NMI menu. In 48K mode only shows 1st VRAM,
              switching doesn't work.
P = paging  - disable 128K paging (out 32765,48), only hardware reset enable it.
C = cheat   - (only if builded with PokeManager) shows list and state of actual
              cheats (readed from .POK file), if there is no actual cheat it
              starts manual POKE entry (can be escaped with CS+1).
Enter       - starts file browser

File browser controls:
up          - move cursor to previous file
down        - move cursor to next file
left        - skip to begin of the page, if cursor is already on the beginning
              skip to previous page
right       - skip to end of the page, if cursor is already on the and, skip to
              next page
Enter       - action = view of the picture (waits for any key), snapshot run,
              walk through directories or TAP files (depends on circumstances)
Enter+SS    - sets "load cursor" when TAP file is active
Space       - exits file browser
Other keys are used for file searching by name. Search is by ASCII and case
sensitive (it's due to limitation of iso9660). For jump to start of directory
search for dot, for jump to end of directory search for "pipe" (SS+S).
Speccyal characters (e.g. numbers below cursors) can be inserted by "dead key"
TRUE VIDEO (CS+3). Its press change border to blue and next key will be used for
search and not in its original meaning. Cursor is moved to first matched
filename in direction of searching. If there is no exact match, cursor is moved
to proximate filename. Search is canceled by any of speccyal keys (e.g.
cursor move).

Input controls:
CS+1 (EDIT)  - exit without value store
CS+2 (CAPSL) - whole input clear
CS+4 (INV.V) - insert space behalf cursor
CS+5 ( <- )  - cursor left
CS+6 ( ^ )   - cursor to begin of line
CS+7 ( v )   - cursor to end of line
CS+8 ( -> )  - cursor right
CS+9 (GRAPH) - delete char on the right of cursor (delete)
CS+0 (DEL)   - delete char on the left of cursor (backspace)
Enter        - exit with value store
Input is in overwrite mode (old char is replaced with new one), for insertion
of chars before existing string use CS+4. If there is an illegal character,
after exit cursor will be placed AFTER it. If there is number out of range,
cursor will be placed after whole number.

When you working with TAP files, cursor goes green (everything is ok), red
(broken TAP file) or yellow (TAP file is ok, but contains too many files and
DEMFIR can't index it => you can't use these unindexed files). This is the same
for TZX. In addition, when cursor goes magenta it's a sign that there is block
which probably cause malfunction of whole TZX file.

When LOADing from TAP/TZX file and "load cursor" come to file end, TAP/TZX file
is automatically "rewinded" to start. Position of "load cursor" can be anytime
determined/changed by file browser.

First line in NMI menu shows (left to right)
- interrupt status (IM1/IM2, EI/DI)
- actual mode (48K/128K)
- active 128K page
- selected VRAM (can't be detected)

Second line shows list of supported formats
- Z80 = Z80 snaps, all versions, enabled by WITH_Z80 in config.a80
- SNA = SNA snaps, enabled by WITH_SNA in config.a80
- MFC = MFC snaps, enabled by WITH_MFC in config.a80
- SCR = picture viewer, enabled by WITH_SCR in config.a80
- POK = PokeManager, enabled by WITH_POK in config.a80
- DFW = DivIDE FirmWare, file for other firmware MAPRAM installation

Third line shows other modules and settings
- CHS = support for HDD without LBA, enabled by WITH_CHS in config.a80
- WDC = automatic geometry pre-set during device detection, required for some
        Western Caviar disks, enabled by WITH_WDC in config.a80
- +3R = changes ROM of +2A/+3 via port 8189, enabled by ROM_2A_3 in config.a80
- MTF = more TZX features (support for nontap blocks in TZX), enabled by
        WITH_MTF in config.a80
- SSv = screensaver, enabled by WITH_SS in config.a80

Logo can be selected by USELOGO (range 0-3, see config.a80).
If you don't like standard zx font, enable BOLD_FONT in config.a80 and you will
get bold font from Didaktik M (czech speccy clone).

- Controls are the same as in browser, in addition there are this keys:
  A = Add    - adds POKE (manual entry).
  D = Delete - deletes POKE or cheat which is LAST in the list.
  C = Clear  - deletes all cheats and starts manual entry of POKE.
- For all cheat shows name and YES (active) or NO (inactive) for state cheats
  or actual memory value for value required cheats.
- Colour of cursor have this meaning:
  Green   - original value is known and it or cheat value is in the memory.
            It's safe to turn this cheat on and off.
  Yellow  - original value is unknown and check can't be perfomed. If you're
            sure you have right POK file should be safe to turn cheat on but
            turn off can be dangerous.
  Red     - original value is known and it nor cheat value is not in the
            memory. It's VERY DANGEROUS turn this cheat on or off and this will
            probably cause crash of game or application.
- When setting value for value requred cheats works standard input keys (see
  Input controls). ORIGINAL value is offered (not actual and displayed memory
  value). Is possible to turn off cheat with simple Enter.
- Recommended use of PokeManager: load game or application (snap or with tape
  emulator). Enter DEMFIR's NMI menu and select relevant POK file in browser.
  Set required cheats and quit to interrupted program. PokeManager can be used
  to change state of the cheats anytime from NMI menu via key 'C'.
- Manual entry allows enter any POKE you want. This mode is entered when there
  is no cheats or via key 'A' in PokeManager. Input buffer is filled with
  string which should help with entering (use overwrite mode of input). POKE
  entry is three numbers divided by space. First number is 128K RAM page number
  (0-7 or 8 for ignore paging). Second number is memory address (23552-65535)
  and third is value to store to address (0-255). There is string instead name
  after successful entry. It's format:
  "page:address,value (original RAM value)".
  It confirms that all values was interpreted right. Now this POKE can be used
  as any other cheat.
- PokeManager limitations:
  - Max POK file size: 2048 bytes
  - Max number of cheats or manual entered POKEs: 24 (one screen)
    Due POK file characteristics can be this number lower - some cheats use
    more values to change.
  - Only first value of value required cheats can be entered (I never found POK
    file which breaks this rule).
  - All values are checked every time PokeManager is entered. If you turn on or
    off any "red" cheat another PokeManager call it turns to "green" one
    because values in RAM will be alright.

Firmware installation file (.dfw) description
Each line started with letter P mean one divIDE RAM page together with file
name which should be loaded into it (file is searched in actual directory and
path can't be specified). Line must have this format:
Ppagenumber filename
Line started with letter E means end of list.
See firmwares/*.dfw



DTP's EMulator FIles Runner. WARNING! This is not the official repository! For studying purposes only!







No packages published