NOTE : See QDEBUG.TXT for the status of the debugger.

New stuff in Qdebug v1.10 Fix #2
  - Update for QDASM v0.95
  - F8 was not properly stepping over REP xxx instructions because
    QDASM works differently than the old disassembler.  So I made
    QDASM now report when it has disassembled a prefix so that Qdebug
    will know to do more disassembling to find where to insert 'INT 3'
    after a REP xxx instruction.

New stuff in Qdebug v1.10 Fix #1
  - Update for QDASM v0.94 (opcode fixes)

New stuff in Qdebug v1.10 *Final*
  - Update for QDASM v0.93 (minor bug fix)
  - Menu Bar cleaned up
  - Added Help (F1) to offer some help I had to remove from menu bar.
  - Bug Fix : Space (goto **memory operand) was assuming DS.

New stuff in Qdebug v1.10 Beta #3
  - Update for QDASM v0.92 (minor bug fixes)
  - When calling DecodeOpcodes() the registers (ECX) were passed in the wrong
    order.  (the ones used in mem-ref calculations).
    I thought it was PUSHAD order but it's reversed PUSHAD format.
  - Major Bug Fix : Decoding (in Qdebug) was assuming the SS==DS which
    is not always true (ie: in Exception handlers)

New stuff in Qdebug v1.10 Beta #2
  - Update for QDASM v0.91 (opcode decoding bug fixes)

New stuff in Qdebug v1.10 Beta #1
  - Now uses QDASM v0.90 for to support a wider range of opcodes
    (8086 - P2 /MMX /FPU)

New stuff in Qdebug v1.06b
  - I3HERE toggle (ALT+I) allows you to set if QDEBUG will respond to
    INT 3.  By Default it's enabled.
  - FIX : Args were not properly setup in last release.

New stuff in Qdebug v1.06a
  - Bug Fix : Would not allow .EXE to be used on command line.  DOS func 60h
    fails if it found 2 '.EXE' in the truename function.

New stuff in Qdebug v1.06
  - now patches _argv[0] to show the apps EXE name instead of QDEBUG.EXE
    This required that a new enviroment segment be created and the old
    one released.  (causes more DOS ram fragmentation)
  - added one small feature on screen that shows the ASCII representation
    of AL just under the flags on screen.

New stuff in Qdebug v1.05
  - works under WinNT now.
    It seems as though WinNT trashes ES sometimes so I must "reset" it
    before using ES.  A simple macro '_winnt' placed
    before each use of ES fixes the problem.  See debug.asm.
    WinNT must work slightly different than Win95 when it comes to exception
    handlers.  This sucks since QLIB now uses exception handlers for
    many things (ie: signal()).
    I love M$!
    The problem is quite wierd though.  It seems as though the invisible
    portion of ES is wrong.  The visible portion is correct according to
    my reg dump.  Gotta love it...

New stuff in Qdebug v1.04
  - to overcome a PMODE/W bug I've made Qdebug's detection
    slightly different.
      New detection code:
        .data
          qdebug_str db 'QDEBUG',0
        .code
          mov esi,offset qdebug_str
          mov ax,0a00h
          int 31h
          jc qdebug_not_present
          cmp eax,'QBUG'
          jne qdebug_not_present
          ;QDebug is present
            ...
          qdebug_not_present:
          ;QDebug is not present
            ...
    It seems as though PMODE/W always returns int 31h/0a00h
    successful regardless of what ES:ESI says.  So QLIB's
    new startup code [v2.11Beta#2] always thinks that QDebug
    was present based on the old Qdebug detection code.
  - now uses selectors properly instead of assuming selcode or
    seldata.  Now you can see what is in the stack, code, etc.
    even if you are running under funny systems (ie: Win95) that
    may provide other stacks, etc. that do not have a base of
    zero.
  - removed check for seldata/selcode when printing MOD field
  - made %e print many more decimals on float point numbers
    Note : print_float() is not 100% accurate do to all the
           dividing and such needed to print numbers.
  - changed 'wait' to 'fwait' cause I prefer it this way
  - QDEBUG seems to be causing exceptions again! -> Beta testing!

New stuff in Qdebug v1.03b
  - Fixed an opcode bug 'fstp Real4 PTR[?]' was not working
  - changed Real32,Real64,Tbyte to Real4,Real8,Real10

New stuff in Qdebug v1.03a
  - Made my print_float take care of +/-INF and +/-NAN instead
    of just printing 'Nan or infinity'

New stuff in Qdebug v1.03
  - replaced print_float() with some code from QLIB.
    Now floats are printed much more clearly.
    Before they were using the special font that I'm not using anymore.
  - made sure that if there is an invalid address that EIP
    is incremented during plot instructions (this was
    not happening in the last release)

New stuff in Qdebug v1.02
  - fixed 'illegal address' message from appearing in
    black on black which no one can see
  - now space works as follows:
    SPACE + SHIFT = move the data window to the current EA.
    SPACE = move the data window to the DWORD at the current EA.
    Just something else I needed, hope it's useful to you too.
  - the back step (ALT+F4) was fixed (and a lot of other
    functions too that were modifying EIP or CS).
  - KNOWN BUG : The debugged program will appear as though
    it's filename is QDEBUG.EXE.  I don't really know how to
    change this.  I know this filename is in the enviroment
    but the size of the enviroment will have to change if
    I need to change this filename.  How?
  - The QDEBUG detection code shown below in v1.00 Beta #5
    was wrong.  I've fixed it, check it out if you need.
    It should have been 'jnc' not 'jc'.

New stuff in Qdebug v1.01
  - fixed terminate message from freezing (kbd was not yet init)
  - also fixed this same problem in Close_the_fatal_fault()
  - fixed insert_key() again

New stuff in Qdebug v1.00 *Final*
  - nothing changed since Beta #6

New stuff in Qdebug v1.00 Beta #6
  - Fixed bugs that did not allow data to be changed. (I made
    the bug when I changed tables without knowing how they worked)
  - It seems as though exc#13 can occur while testing for
    valid locations so I've fixed the exc handler to take care
    of location testing, fixed lots of problems.
  - Fixed the kbd interface, before the IF flag was kept off
    in fear of problems, but I've installed a smart kbd
    ISR handler and allow the IF flag to be enabled.  I have
    to change the IRQ masks during debugging to prevent
    other IRQs from triggering.
    So now I use IRQ1 for the kbd instead of polling port 60h
    which was not working well under Win95.
    LOG : I've spent weeks working on this damn thing and it
      caused so many bugs.  The things I had to do to track down
      my bug.  S-ice thru Windoze and so much more.  Finally I
      tracked it down to my kbd handler and a misplaced 'dec'
      instruction.  I had to place hardware memory breakpts
      to catch the evil bug.  It was very tough cause
      the damn thing kept crashing the system.
      Anyways, it's finally fixed.
  - you can now use SHIFT+TAB which windows does not intercept
    since we catch it before windoze does I guess.
    CTRL+TAB is still available if you like.
  - fixed instruction decoder from looking at non-valid memory
    by having the decoder check each byte it gets.
  - fixed another bug in kbd handler where values were not
    properly inserted into the kbd buffer
  - new kbd handler allows you to use any CTL\ALT keys under
    Win95 (bug fixed).

New stuff in Qdebug v1.00 Beta #5
  - QDebug is now an EXE program, I got some LE-EXE loading
    source code and incorporated it into Qdebug.  It was
    tough and took forever, but it's done and works great.
  - I removed more cosmetic features from the source that
    were interfereing with it operating properly under Win95.
    All font changing has been removed.
  - all ints/irqs/excs handlers are now properly restored on
    exit which fixed some problems
  - detection code has been added.  To detect QDEBUG do the
    following:
      .data
        qdebug_str db 'QDEBUG',0
      .code
        mov esi,offset qdebug_str
        mov ax,0a00h
        int 31h
        jnc qdebug_present
    QLIB's startup already does this and sets _debugger
    if Qdebug or if WD is present.

New stuff in Qdebug v1.00 Beta #4
  - many bug fixes
  - video no longer stuck in fucked up mode!
  - changing regs/flags works
  - "goto start" works (CTRL+F2)
  - and much more
  - key repeating has been added
  - Debugger always pops up on INT 21h/4c00h            
  - SHIFT key has been disabled due to problems with it
  - use CTL+TAB to move back thru windows (not SHIFT+TAB)
  - a new func has been added that must be called after
    qdebug_run() is called to save the "goto start" info
    qdebug_save_restart()
    without calling it CTRL+F2 will do nothing
  - cleaned up a lot of code since the base of all sregs
    is always zero and other things
  - all instruction decoding tests 16 bytes before accessing
    memory that could cause a page fault.  Now you can safely
    modify the selected_EIP without faults.
  - PROBLEMS:
      - do not use the right CTRL/ALT keys when under Windoze
        since it really screws things up.  I think it must be
        some sort of buggy Windoze95 kbd emulator.
      - some things still seem to cause exceptions eratically
        from the debugger itself.  I'll have to work on them
        later, too busy moving currently and I wanna release
        this before then.  This version works A LOT better
        than the last (it's actually useable now).

New stuff in Qdebug v1.00 Beta #3
  - fixed lots of errors (actually fully works now)
  - note : the SS:ESP is not used if you change it after
           using CTRL+BRK or when the program terminates
           No big deal.

New stuff in Qdebug v1.00 Beta #2
  - now switches stacks during exception handlers since
    Win95 was not providing enough
  - now fully operates under Win95 (although the contents of
    the debug registers (DRx) are not shown)
  - works on WDOSX and PMODE/W now

New stuff in Qdebug v1.00 Beta #1
  - 1st release, only worked on WDOSX
  - did not work under Win95 cause it was accessing DRx registers
    and using other privledged instructions
