
 Intuition Development History:

 Nov. '91
   First work on Z80Monitor begun...

 14.01.92, V0.01:
   Z80 instruction kernal implemented.
   Main body of program constructed.
   It is now possible in theory to run it and only by the registerdump and a listing
   file to test its reliability. First draft guiding lines to dissassembling the
   Z80 instructions.

 15.01.92, V0.02:
   Bugs detected:
   .DecodeZ80Instr     Wrong Routine-address calculation in
                       look-up table Z80instrTable fixed.
   .opcode_203         Wrong Routine-address calculation in
                       look-up table BitInstrTable fixed.
   .opcode_223         Execute buffer wasn't initialized
   .opcode_231         properly. F register wasn't protected
   .opcode_56          Fc (bit 0) wasn't tested - bit 6 was!!!
   .InputCommand       Implemented.

 18.01.92, V0.03
   '.G' command implemented, but not interfaced with with command line routine.

 21.01.92, V0.04
   Manipulation of breakpoints implemented:
       Set / Reset breakpoints
       List Breakpoints
   .G interfaced with command line - programs can now be released from monitoring.
   To execute the next instruction, a '.' followed by ENTER has to be entered.
   This eliminates a possible double ENTER when entering Z88monitor commands.

 29.01.92, V0.05
   Breakpoint search optimized.
   ADD, ADC, SUB, SBC, AND, XOR, OR & CP instructions optimized.
   '.T' toggle trace mode / breakpoint mode command implemented.
   '.R' implemented
   '.Z' implemented

 30.01.92, V0.06
   '.Z' implemented.
   '.B' now automatically displays the updated breakpoints.
   RET [cc] bug fixed: copy of SP wasn't updated.
       Algorithms optimized - uses Opcode_201 as basic algorithm
   POP rr   bug fixed: copy of SP wasn't updated.
   Bug in .RestoreRegisters fixed : HL wasn't restored.

 31.01.92, V0.07
   LD  IY,nn  / LD  IX,nn   bug fixed:
       opcode_221 always reads 3 bytes (fetch displacement operand) -
       when opcode_33 (LD  HL,nn) is called, PC didn't point at low byte
       of <nn>, but at the high byte.
   Bug in Opcode_221 fixed:
       The 3 byte fetch from opcode & PC pointing at next
       instruction wasn't saved. All HL-related instruction use only
       1 byte opcode. IX / IY uses 2 & displacement operand (3 bytes).
       Z80monitor executed the IX / IY variation, but with PC only doing
       a 1 byte step instead of 3!
   Bugs related to above described problems fixed in:
       Opcode_9, Opcode_25, Opcode_34, Opcode_35, Opcode_41, Opcode_42,
       Opcode_43, Opcode_225, Opcode_227, Opcode_229, Opcode_249

 02.02.92, V0.08
   Interrupt related instructions are not executed ( IM 0, IM 1, IM 2, EI, DI).
   RETI, RETN  are executed as a normal RET instruction

 03.02.92, V0.09
   Minor bugs fixed & optimisations on HL related instructions

 04.02.92, V0.10
   LD  (HL), n  Bug fixed: n was loaded at (PC) instead of (HL)!
   Bug fixed in RLD, RRD instruction:
       HL register wasn't installed.

 05.02.92, V0.11
   Error message displayed if an unknown instruction is encountered.
   Bug in Opcode_221 fixed:
       The search in the additional lookup-tables to verify a legal HL-related
       instruction couldn't find the last item instruction) in the list.
       An otherwise legal instruction then became unknown:     LD   SP,IX/IY
                                                               SET  7,(IX/IY+n)
   Bug in LD  HL,(nn) fixed:
       IX IY variation didn't fetch (nn) but just nn!

 07.02.92, V0.12
   Optimizations in all CALL, JP, RET, JR instructions involving test
   of a bit in the F register.
   Bug fixed in .CopyRegisters:
       Several register was saved with wrong 16 bit format - high byte
       first instead of low byte first.
   Bug fixed in LD  (nn),HL:
       The IX / IY variation didn't fetch the indirect address properly.
   CCF instruction optimized.

 08.02.92, V0.13
   Timeout facility re-implemented in ReadKey routine.
   The previous algorithm was too sensitive, often returning double
   letters when a key only was pressed a single time.
   Now, with timeout implemented, the Readkey behaves properly.
   Z80Monitor buffer increased to a 75 byte buffer.
   Bug in EX (SP),HL fixed:
       IX / IY variation made a double swap, resulting in no swap!

 12.02.92, V0.14
   Bug in  ADD  HL,HL fixed:
       IX / IY variation added contents of HL instead of IX /IY.
   ADD  HL,BC  // ADD  HL,DE  optimized.

 13.02.92, V0.15
   Bug in ADC / SBC HL,rr  fixed. Also optimized.
       Registers wasn't installed properly.
   Bug in DEC (HL) // INC (HL) fixed. Also Optimized.
       Registers wasn't installed properly.

 27.05.92, V0.16
   Many optimisations and major rewrite of Z80monitor code:
       1. main monitor loop rewritten. The decode byte algorithm
          now investigates whether it is an 203, 221 or 253 variation
          instruction. Opcode_203, Opcode_221, Opcode_253 removed.
       2. PC is now stored in HL'. This saves considerable processor time
          and space. Most subroutines are already implemented to work
          using the HL register. If necessary the subroutine is surrounded
          with an EXX pair to protect the PC. The main monitor loop swaps
          automatically back to the normal register set when operating in
          command mode.
       3. Escape key interrrupt mode implemented

 13.06.92, V0.17
   Disassembler implemented for local addressing.
   Various routines improved:
       IntHexConv            Proper 8 / 16 bit display format
       Write_msg             Uses new display calls
       DisplayRegisters             - "" -
       Display_flagreg              - "" -
       All output to screen now protects alternate registers before OZ call.

 - 15.06.92
   Disassember improved:
       Now all OZ mnemonics on RST 18H and RST 20H are displayed. If the
       parameter is not known to Intuition, a hex constant is displayed
       instead.

 - 16.06.92
   Input buffer increased to 17 chars.
   Pause timeout buffer moved to (IY+78)
   Disassembler implemented with disassembling into all available banks.
   Minor modifications to Display_instruction). New subroutines implemented:
   Get_DZ_PC : Calculate DZ PC within a bank to justify logical address
               DE' = offset
   Fetch_nn  : Optimzation of Display_instruction - also to obtain DE'
               to be offset register (from base of bank).

 - 25.06.92
   1. Routines to parse input buffer for register references and hex constants
      optimised (700 bytes less code!).
   2. ReadKey now in inverted caps, i.e. the lower case letters are accessed
      using the SHIFT key. Symbols are obtained as normal.
   3. Now it is possible to obtain the alternate registers by referencing a
      lower case letter, i.e. 'bc' for alternate BC.
      The main set is referenced by upper case letters.
   4. '$' now used as hex constant identifier
   5. BIT 6,(IY+29) now used as flag to keep the command line running. Earlier
      versions used Fc = 1 to maintain the command line loop.

 - 27.06.92
   1. 'Get_Hexvalue' renamed to 'Get_Constant' in source.
      The facility now includes 8bit ASCII binary to integer conversion.
   2. The command line now includes the facility to display:
           Hex to Binary conversion
           Binary to hex conversion
      The first char in input buffer as '$' identifies a hex to binary
      conversion. Using the '^' identifies the binary to hex conversion.

 - 29.06.92
   1. Minor Bug fixes on virtual processor:
           LD  HL,nn // LD  HL,(nn) // LD  (nn),HL
      PC wasn't copied into main set when used for adjustment
      IX, IY variations (2 byte opcode instaed of 1).
      The new decode instruction algorithm didn't read the 4. opcode
      byte on index $CB instruction variations.
   2. Optimisation on decode algorithm:
           The <Index> $CB instruction group (all indirect HL bit instructions):
           The algorithm only needs to check for HL indentifier
           (2. Opcode, Bit 210 = ^110). The previos version used a lookup
           table of 31 bytes containing all 2. opcodes for HL bit instructions.
   3. Bug in IN r,(C) fixed:
      Destination register of recived byte from port C was smashed.
      Now properly saved into appropriate register store.

 - 30.06.92
   1. Bug in LD  (HL),n :
       n (fetched into D) wasn't stored into (HL).
       Subroutine rewritten.
   2. Bug in PUSH AF fixed: AF wasn't put on the stack...
   3. Bug In CALL Save_SP saved incorrect SP: fixed
       All CALL Save_SP related virtual instructions updated

   4. Bug in ADC // SBC HL,rr fixed: didn't interface properly to the 16bit
      arithmetic subroutine, Arithm_HL. The result was destruction of IY!!

 - 03.07.92
   1. Bug in POP HL fixed: IX / IY variation didn't adjust PC.
   2. Bug in ADD A,(HL) fixed: B register wasn't transfered to main set...
       The Z80 virtual processor seems now to be free of bugs!

 - 06.07.92
   1. All status flags now displayed as ON / OFF settings...
   2. ASCII byte to hex/binary display.
   3. Get_constant now allowes specification of an ASCII char constant as
      parameter.
   4. Virtual processor main loop optimized to gain speed in breakpoint mode.
   5. Command line now also disassembles the current instruction after
      register dump.


 08.07.92, V0.18
   1. 2 windows implemented for Intuition monitoring. (Both using #6)
   2. New commands implemented for selecting the Intuition windows: '#1', '#2' .
   3. RST  20H now only restores main registers (alternate smashed by OZ anyway)
   4. Linefeed now executed outside 'InputCommand' (when ENTER is pressed). This
      will prevail a vertical scroll on the bottom line, if a change-window
      command is executed.
   5. The OZ keyboard buffer and ESC (acknowledged) now cleared before executing
      the '.G' command (release monitoring).
   6. HALT instruction ignored.
   7. Interrupts disabled to obtain more real Z80 power during virtual processor
      execution. Interrupts are only enabled if:
           1. The command line is activated.
           2. Disassembly during v.p. execution.
           3. Execution of v.p. RST 20H instruction.
           4. Pause timeout between execution of v.p. instructions

 - 09.07.92
   1. Minor bugs in disassembler discovered & fixed:
           a. XOR displayed as OR and reverse...
           b. IM instructions regarded as unknown instructions
           c. $ED instruction lookup didn't check 2. opcode, bits ^76 = ^11 which
              is an unknown bit combination.
   2. Serious bug in RRD, RLD fixed:
      PC register smashed - alternate set was used...
   3. Serious bug in SRL (HL) fixed:
      A POP HL instruction from V0.15 or earlier wasn't removed!

 - 10.07.92
   1. Minor bug in disassembler fixed:
       LD  (nn), HL  didn't display IX/IY variation.

 - 11.07.92
   1. Serious bug in  LD  dd,(nn) // LD  (nn),dd fixed:
      The classic EXX bug; DE' wasn't transfered to main register set. This error
      gave horrible results when SP was saved into the unknown (especially RAM!!!
      not EPROM).

   2. Two versions of Intuition tested for execution speed. One version with interrupts
      enabled - the other with interrupts disabled. The difference is about 2% !
      However, with interrupts disabled, the facility to abort execution by pressing the
      ESC key works without bothering the operating system (the ESC detection error
      handling). Since Intuition needs to have optimum speed, 2^ is better than
      nothing!

   During the speed comparison a testcode containing almost all Z80 instructions
   were used to obtain the general speed difference. This resulted in finding a
   lot of new bugs in the virtual processor! Since 03.07, 8 new bugs were found.
   It seems that the virtual processor is now free of bugs!

 -12.07.92
   1. Decode algorithm optimized: IX / IY variation check removed for std. instructions.
   2. Minor bug in pause mode:
      ESC wasn't acknowledged - resulting in continious ESC condition every time
      pause mode was called; timeout = 0!
   3. Local error handler installed in pause timeout. This prevents activation of the
      applications own error handler, which must not be called!

 -17.07.92
   1. Insert facility & cursor movement implemented in '.Input_comand'
   2. Main loop optimised:
       If no breakpoints are defined, an immediate rel. jump is made to the decode
       algorithm.
       This is testet on bit 7 in the status byte. The appropriate routines are
       modified to set / reset the flag.
   3. The '.Readkey' routine now uses standard codes for special keys, as defined
      in Z88 Developers Notes V2' (currently only cursor keys properly inplemented -
      the rest still returns 0).
   4. The hex identifier, '$', now changed to '&' as this is the original definition
      in BBC BASIC.

 20.07.92, V0.19
   1. Memory View facility implemented for local address space and all available banks.

 23.07.92, V0.19b
   1. Optimisation of Decode_instr:
       Both std. instructions and std. $CB instruction don't need Equalizing of
       alternate & main set.
       Optimisation of GetInstrSubRoutine:
           Pointer calculation now uses HL instead of IX - faster execution...
   2. Optimisation of Findbreakpoint.
   3. Display of Intuition version in status ('.S') .
   4. Implementation of CLI logfiles to be activated / de-activated from the keyboard
      with ^S. Up to 256 logfiles can be created automatically by Intuition.
   5. Readkey improved:
       a. it is now possible to obtain control characters 0 to 31 with ^<letter>.
       b. Interrupts now disabled during keyboard scan to avoid OZ interference.
          It is vital that no keys, especially INDEX and ESC, are not fetched,
          since when activating the CLI logfile, an OS_TIN has to be called to
          execute the CLI. If either key gets activated,Intuition is bypassed by
          OZ, and an installed error handler by the monitored application is called
          at the wrong time!
          It is still possible to squeeze INDEX or ESC into the OZ keyboard
          interface, but it is very difficult. The user of Intuition must be warned
          of this potential disaster. Anyway - the user will be responsible for
          any Z88 crashes if he tries to circumnavigate the Intuition monitor!
       c. Now only returns if valid key is pressed
       d. ^S trapped inside ReadKey to activate CLI logfile.
       e. Timeout facility removed, since this needed interrupts enabled.
       f. Old GetKey removed and ReadKey renamed to GetKey

 27.08.92
   Since version numbers now are created with alphbetics.
   All version numbers have been renamed to V0.XXy

 28.07.92, V0.19c
   1) .Disp_reg have been added with a line feed. The prompt always came on the same
      line as the binary number.
   2) .Release_Program : Keybord Purge & ESC acknowledge removed ince this is
      unecessary because .GetKey executes this each time a key is pressed.
   3) .GetKey : <CAPS LOCK> returns now 0, since this key has no relevance in Intuition.
   4) .InputCommand: Last line Recal implemented. New command prompt: '?>' .
      A new subroutine has been extracted: '.Input_buffer' which processed the input
      buffer.InputCommand now only initialises the pointers to Intuition's input
      buffer. The new subroutine is now standardised to run in any buffer pointed to
      by HL.
   5) .GetKey:
      a. <SQUARE> key algorithm removed with return code table (no use in Intuition).
      b. Screen off facility with both <SHIFT> keys - in interrupts disabled.
      c. All alternate register now saved.
      d. All corresponding calls to save alternate registers when calling GetKey
         are now removed from Intuition.
   6) Decimal to Hex converting implemented.
      Hex to decimal display also implemented.

 03.08.92, V0.20
   1) 'View Stack Pointer' implemented.

 04.08.92, V0.20a
   1) With the View stack feature discovered an unconsistency in the setup of the
      new stack pointer below the Intuition buffer:
           It is only set 1 byte below the beginning of the buffer area, but should in
           fact be 2 bytes (word boundary).
           When Intuition is called now, the return address to the application is defined
           the top element on the stack (Top Of Stack).
   2) Bug in POP IX (opcode_225) fixed:
           SP wasn't updated in Intuition buffer.

 06.08.92, V0.21
   1) Memory search implemented. ('.MS')

 07.08.92, V0.22
   1) View Application Screen implemented.
      Auto disassembly and Screen protection not implemented yet)

 08.08.92, V0.22a
   1) Register dump ('.R') re-written. Registers are now displayed in bold. The
      layout of the register dump is also much better now.

 10.08.92, V0.22b
   1) .CopyRegisters optimised: HL (as pointer) now used to store the register
      values into the monitor area (IY was previously used).
   2) A flashing message, 'Debugger Running', is now displayed in #7 (the OZ command
      window), each time a the RST &20 instruction has finished. A very interactive
      feel of Intuition!
   3) <TAB> now used to toggle between Intuition #1 and #2. The command line is re-
      drawn in the new window. Diamond>C used to clear the window. The command line
      is re-drawn at the top line.

 12.08.92, V0.23
   1) The simulated AF (IY+6,IY+7) is now stored and used in AF' (as PC is in HL').
      The v.p. used a lot of time on fetching the register AF reg. pair from
      IY+6,IY+7) and then installing it into the true AF when using flag
      affected instructions and accumulator related instructions. The overall
      processor time for doing this was 59 clock cycles! Now it only takes 4!
   2) Equalise_EXX redundant in decode instruction algorithm:
      Since its introduction in V0.16, the v.p. has been modified, which has
      removed the need to have a copy of the alternate registers into the main
      set (BC, DE, HL).
   3) The virtual Stack Pointer (SP) is now installed in DE' and updated there on
      related v.p. instructions. The earlier versions used a time-consuming routine
      to fetch and store the real Z80 stack pointer. This routine, Save_SP, is now
      removed. The virtual SP is only stored into (IY+20,IY+21) when the command
      line is entered.
   4) Minor bug found in disassembler: 'ADD' was displayed instead of 'ADC'.

 18.08.92, V0.24
   1) Bank dump to file implemented. The file will be created from the specified
      bank number, e.g. ':RAM.1/bank#7' if bank 7 has been dumped.
   2) Bug fixed in RST $20h:
      The v.p. Stack Pointer smashed before properly saved - this only occurred
      with 2 byte parameters...
      RST $18h rewritten:
      some old code removed from V0.16 - v.p. program was pushed on the stack
      instead of being saved in monitor area (IY+22,IY+23). The routine is now
      faster and more consise.
   3) Minor bug fixed in Disasm_instr:
      Disassembling was executed in Single Step Mode, which is redundant.
   4) Bug in GetKey fixed:
      Diamond>S key press was detected (and displayed in OZ window) when Intuition
      is monitoring an application with true command sequenses. The algorithm
      to fetch the <Diamond>S sequense is now altered to only activate the CLI
      facility when both keys are released. This resolves the problemas with the
      SHIFT> keys (see V0.19c notes)

 23.08.92, V0.24b
   1) Decode-virtual-processor-instruction-algorithm optimised:
      GetInstrSubroutine now copied to each instruction group.
      Algorithm to fetch v.p. subroutine optimised: Now the lookup table is split
      into low and high byte groups.
      1. HL = Base of lookup table, B=0, C = instruction opcode
      2. ADD  HL,BC   , HL = index into low byte table
      3. (HL) = low byte of v.p. instruction subroutine
      4. INC  H
      5. (HL) = high byte of v.p. instruction subroutine

   2) Various v.p. instructions optimised: JP  nn;  PUSH BC,DE,HL

 24.08.92, V0.24c
   1) GetKey optimised:
      There still happened occasional key bounces. <Diamond>S pressed together
      with system were trapped by OZ just before the CLI were called. DANGEROUS!
      OS_PUR now executed before OS_TIN to prevent OZ task switching, if user by
      accident pressed INDEX when CLI was activated. Getkey now only returns the
      key code when the related key(s) are released. This eliminates the previous
      need for last key press (the original code from J.Z.). Key bounces are now
      almost impossible possible!
   2) Bug in CLI rebinding:
      OZ returns a fatal errors when CLI rebinding is activated if a bank other
      than the original application bank has been switched in.
      A new flag is implemented, BIT 4,(IY+76), to indicate application bank has
      been switched out. (IY+30) contains application bank.
      'Bind_bank_to_s03' now stores application bank number and manipulates the
      flag.
   3) 'Debugger Running' message not displayed while CLI active.
   4) RestoreRegisters, CopyRegisters, RST $18, RST $20:
      Original value of IY is not restored, since no OZ calls alter it. IY remains
      to identify registerbase / work area for Intuition. Only ReleaseProgram
      restores the true IY register.

 27.08.92, V0.24d
   1) Cursor movement implemented in View memory:
      <TAB> toggles between Hex area and ASCII area.
   2) OS_Pur executed just before OS_Tin to prevent system key presses between the
      execution timeof GetKey (which enables interrrupts after return) and dummy
      keyread to execute the CLI. It was actually still possible to get a key
      through to OZ. THIS IS NOW ALMOST IMPOSSIBLE!!!!

 29.08.92, V0.25
   1) Edit memory implemented:
       View Memory modified to contain both facilities.

 04.09.92, V0.25a
   1) Bug in Arithm_HL fixed:
      Some old code of Equalise_EXX principle removed, both in Arithm_HL and
      opcode_237 (ADC & SBC) The 2. opcode were fetched in main register set.
      This principle were removed at V0.23. The ADD IY,rr gave strange
      calculation results.

 06.09.92, V0.25b
   1) The OS_PUR removed from main GetKey routine. This is neccessary, since OS_IN
      preemptable OZ calls lost track of system key presses, or command
      definitions. However, removing OS_PUR will allow occasional keypresses to be
      detected from OZ (when GetKey has returned with interrupts enabled).
   2) Keyboard_interrupt (abort running application with ESC) now added with
      No_keypress.
      The previous versions allowed OZ to read the keyboard - this affected the ESC
      error handling, ie. pressing ESC to halt popdown Z80 machine code execution
      also activated the ESC detection, which meant that when continuing the
      execution of the popdown, it will execute the appropriate code to terminate
      it self. This is not supposed to happen with the Keyboard interrupt!

 07.09.92, V0.26
   1) New toggle implemented, .KP  (OZ Keyboard Buffer Purge). V0.25b (1) didn't help
      all possibilities. GetKey cannot unfortunately be better. Occasional keys get
      by to OZ. The user can now decide whether the OZ keyboard should be cleared
      or not while the Intuition Command line is active. This is due to the OS_IN
      problems in applications monitored by Intuition.
   2) Bug in DC_ICL: This OZ call doesn't work in segment 2. The call is now executed
      in Intuitions own execution buffer. The problem was first seen on testing
      Intuition in segment 2. DC_ICL works OK in segment 1. But still unreliable.
   3) New command implemented: '.W [<window ID>]'
      It is now possible to change Intuitions window ID. This was previously set to '6'.
      If an application uses all windows, the user can switch to another window ID
      for Intuition, if it is vital to the monitoring process at a particular moment.
      E.g. if the application uses #6 to display screen driver codes or other
      information, it can get totally destroyed if Intuition uses the same window ID
      and is either using the single step mode or on line disassembling while
      executing the application code.

 09.09.92, V0.26a
   1) New command implemented: '.WS' - display window ID status.
      The current window ID for the application and Intuition is displayed.

 19.11.92, V0.26b
   1) Interrupts restored - too many problems with interrupts off. Keyboards bounces
      occurred anyway. The v.p. is only about 1% slower with interrupts - no big deal!
      With interrupts ON, there might not be problems with intuition CLI and OS_IN
      calls.

 28.11.92, V0.26c
   1) Local error handler removed from pause timeout - not really necessary.
      Escaping of V.P. now by <LSH> <DIAMOND> (Keyboard interrupt).
      CLI facility re-written. Now uses '.T>:RAM.1/log' CLI command .

 29.11.92, V0.26d
   1) Dc_Icl unreliable with string pointer in segment 2. Start CLI call re-written
      - The CLI command string is now copied on the stack. This problem have been
        around since CLI redirection were introduced in V0.19b.

 02.12.92, V0.26e
   1) Stack boundary check implemented on PUSH, POP, CALL, RET, RST $18  &  RST $20
      If stack boundary occur, the virtual processor is stopped. With this facility
      the user will be able to avoid a system crash.
   2) 'Trace until RET' implemented (useful for a 'quick single step' in subroutine)
   3) New algorithms for displaying error message by using an error code.
   4) Intuition Interrupt Enable/Disable subroutines removed.
      GetKey only uses OZ_DI & OZ_EI between Screen Off feature.
   5) New status byte (3) implemented for various new flags.
   6) 1 byte of intuition area uses for runtime error code. (5) and (6) uses the
      previous allocated bytes for interrupt status.

 03.12.92, V0.27
   1) 'Trace until Ret' renamed to 'Trace Subroutine'. The facility is improved by
      controlling additional sub calls inside the traced subroutine.
      To handle this, the Intuition work area is increased by 2 bytes, containing
      the current SP at trace activation. The v.p. RET instruction then performes
      the necessary algorithm to stop tracing at the correct stack level. Additional
      stuff is included to give a warning, if the stack is unbalanced (the RET
      address is located higher than the beginning SP).

   2) '.MD' renamed to '.MDB' (M)emory (D)ump (B)ank .
      New command implemented:  '.MDS' (Dump segment)

 17.12.92
   3) Disassem_asm : Disassemble of RST $20 & RST $18 re-written.
      All OZ parameter lookup tables are removed. A more convenient algorithm
      implemented. Intuition reduced with 166 bytes.

 31.01.93, V0.27a
   1) Getkey modified to allow <SHIFT> keys to be pressed continiously while
      other keys are used
   2) .CopyRegisters improved.
   3) EXX virtual instruction rewritten.
   4) Get_constant improved:
      '&' identifer can now be omitted in as hex constant identifier, as
      this is now defined as default, if no identifier is specified.
      Register names are destinguished from hex constants.

 02.02.93, V0.27b
   1) New command implemented:
       '.X' to allow register dump during Auto Disassemble
      1.1) Keyboard purge facility removed. Purge is now always executed in GetKey.

 18.02.93, V0.27c
   1) CLI logging and memory dump to file are changed to use the default device
      (V0.27b used always ':RAM.1')
   2) Bug fixed in Bank Dump file routine, and local error handler
      installed during OS_MV. This is important since the bank to be
      dumped into the file is bound into segment 3. This segment could
      contain an error handler (in the monitored application bank
      which would have been called inside OS_MV).

 23.02.93, V0.27d
   1) Command line now implemented with with <SHIFT><DEL>.
 24.02.93
   2) Bug in IN A,(C) // OUT (C),A fixed.
   3) Memory search string altered to default hex bytes and explicit string search.

 25.02.93, V0.27e
   1) Instruction decoding optimized with 20 clock cycles
      1.1) Instruction lookup table placed at XX00 address
   2) Various v.p. instructions optimized

 28.02.93, V1 (V0.28)
   1) Major optimisation of RST 18h & RST 20h operating system calls.
      RST 20h: Only main registers (AF,BC,DE,HL,IX) are restored.
      RST 18h: Only Main registers and DE', HL' are restored - the rest are redundant.
   2) Release Intuition (.G command) rewritten.

 02.03.93
   3) Intuition Initialisation rewritten.
      V.P.I. lookup tables moved to offest $100 (256th byte from beginning of segment).

 04.03.93
   4) Disassembler now implemented with additional display of instruction opcodes.

 12.03.93
   5) Main decoding loop & many instructions optimised:
      Virtual processor now uses main register set during execution
      lookup table decoding optimised with JP  (HL) instead of PUSH DE; RET.
      Many instructions improved (no swapping to alternate/main set.
      Size of Intuition reduced with 140 bytes!
      Illegal $ED instructions now sets the runtime error flag (to stop execution)

 19.03.93
   6) Most 8bit arithmetic/logical instr. optimised: Redundant loading of register
      changed to (IY+x)
   7) Bug in LD (nn),SP fixed: SP was taken from (IY+20,21) instead of virtual SP (DE')
   8) Bug in CALL, RST 18h, RST 20h fixed: Stack boundary check performed before any
      addresses, parameters were fetched. If a boundary would occur, PC would be in the
      middle of an instruction!

 23.03.93
   7) Serious bug fixed in virtual processor:
       Many features in the v.p. have been optimised using the SP register (moving the
       SP to another location temporarily, executing some code, then restoring the
       application SP). Since interrupts were enabled, any interrupt routine using the
       stack, would have the possibility to overwrite some memory below the temporary
       stack pointer. The effect was disastrous to Intuition! Very random crashes at
       virtual instructions that otherwise executed correctly.
       Problem is fixed by disabling IM 2 interrupts during v.p. instructions, except
       when calling the operating system (RST 20h, RST 18h).
       Interrupts are also enabled during command line input, auto disassembly and
       instruction pause.
   8) Minor bug in flag altering fixed:
       The '+' or '-' minus option was ignored, which then only inverted the flag.
       The pointer to the current char in the input buffer were smashed.
   9) Minor optimisation in decoding:
       INC H instead of LD H,$81, since H already is set to $81 (or $41).

 28.03.93
   10) .D command improved:
           Pressing <TAB> will automatically begin disassembly in opposite Intuition
           window.
   11) Memory dump cursor movement improved:
           Moving the cursor past the right boundary moves the cursor at the beginning
           of the next line. Scrolling is executed if cursor is at bottom line.
           Moving the cursor past the left boundary moves the cursor at the beginning
           of the previous line. Scrolling is executed if cursor is at top line.
           Altering memory (using the automove of right cursor) is now also improved.

 08.07.93, V0.29
   1)      Number conversion display improved: Now also display as negative number,
           if number is interpreted as a 2. complement integer (if negative).
   2)      CB instruction group size-optimised. Main decoding loop altered.
   3)      Virtual instructions RET, JP, JR and CALL optimized.
           Virtual instructions INC BC, DE, HL, IX, IY, DEC BC, DE, HL, IX and IY optimised
 03.08.93  Register Dump only on breakpoint implemented ( new flag: .BD [+|-] ).
 15.08.93
   1)      Minor bug in Intuition initialisation fixed:
              The old RET address were put below the RTM area before the new Stack Pointer
              were set (T.O.S).
   2)      View Stack command implemented with address parameter option.

 18.09.93, V0.30
   1)      Implementation of a segment 0 version:
              This version contains many '0' versions of the already existing modules which
              contains adjustments needed to call external (bank) procedures.
              Special procedures implemented to swap between the lower & upper half of the
              Intuition bank in segment 0. The virtual processor is kept in the lower 8K,
              together with the command line parsing. All major commands are executed in
              the upper 8K of the Intuition bank.
   2)      New algorithm implemented to activate Intuition commands, which makes it much
           easier to add new commands without adding additional code. Only a few pointers
           are needed and the command definition. This was especially needed because of
           the segment 0 version.
   3)      Bug in the virtual processor found & corrected:
              SET  2,(HL) switched the incorrect bit.
   4)      Pause interrupt facility removed. New facility implemented:
              Break at instruction bit pattern (max 4 bytes).
              This is incredibly useful when analysing code and it is only needed to stop
              at certain instructions (e.g. all 'CALL Read_pointer' instructions).
              This could also be useful during analysing of non-documented OZ system calls.
              This facility is easily combined with normal breakpoints.
   5)      New feature implemented:
              Encountering a breakpoint usually stops the v.p., but with this flag it is
              possible to dump the registers instead and then immediately continue execution.
              This is also very useful during an extensive debugging session where many
              data may be needed at various positions without continously stopping exe-
              cution. Combined the the logfile facility this is one of the most powerful
              tools in Intuition.
   6)      GetKey now uses local error handler during CLI activation. This avoids a system
           crash if the application code containing another (installed) error handler, is
           momentarily paged out by Intuition.


   Based on the V0.29, this version is has been considerably re-arranged, since the segment 0
   version. All constant defintions have been put locally (where originally needed). This makes
   it also more difficult to disassemble Intuition by other programmers (only protecting some
   of the good ideas and trying to hide the watermark).
   Several modules have been split into sub-modules, separating each logical task even
   better. This was also need due to the segment 0 version, which sometimes needed a copy
   in each separate 8K code block (assembled as a logically complete binary file).

   The code of the segment 0 version uses both 8K blocks to the limit. Since consistency must
   be maintained in all segment versions (equal functionality & command facilities),


 02.10.93, V0.31
    1)   input from keyboard completely rewritten. input is now taken from OS_IN (GetKey) and
         Gn_Sip (Inpbuff). An Intuition error handler has also been implemented to avoid
         confict from the application error handler (which always is swapped back during v.p.
         execution).
         The reason for this is a much more interfaced debugger with OZ, but more responsibility
         by the programmer; e.g. KILL'ing the application from within Intuition could cause
         'in use' errors and loss of allocated memory, if the programmer exites without de-
         alocating OZ resources first.
    1a)  last-line-recall facility removed. In stead the previous command is always re-entered
         and the cursor placed at the end. Much more flexible.
    2)   Current windowing facilities also improved due to new input. The Intuition screen
         (during command input) is now also saved (2K) with OS_SR. This is handy if the
         programmer leaves Intuition temporarily. The application window is still preserved by
         Intuition.
    3)   View Application screen code modified as well according to keyboard input changes.
    4)   Due to a very serious bug in OZ with OS_IN, OS_TIN and GN_SIP the new keyboard input
         routines crashed the system if Intuition were activated from a popdown.
         The old keyboard input routines have been used in a special Intuition version used
         preferably for popdowns (could also be used for applications, but other version is
         much better!). This is in fact the best solution, since pressing INDEX or other appli-
         cation hotkeys by accident in Intuition (running a popdown) would KILL the popdown.
         This would not be healthy if things have been allocated by the popdown as they would
         be left open. The following versions of Intuition are now available:

              debug0a
              debug0b        Intuition for segment 0 with improved keyboard input (OS_IN & GN_SIP)

              debug0ap
              debug0bp       Intuition for segment 0, popdown version (hardware keyboard input)

              debug01        Intuition for segment 1 with improved keyboard input (OS_IN & GN_SIP)
              debug02        Intuition for segment 2 with improved keyboard input (OS_IN & GN_SIP)

              debug01p       Intuition for segment 1, popdown version
              debug02p       Intuition for segment 2, popdown version



 17.10.93, V0.32
    1)   New toggle command implemented: .BO - break at OZ error.


 24.10.93, V0.33
    1)   Special version of Intuition implemented named as application, Z80debug.
         The application is defined as bad with default RAM size (8K or 40K RAM).
    2)   Four new commands are implemented:
               .MF       - Estimated free OZ memory
               .MR       - Memory range                     (Z80debug only)
               .ML       - Load file into memory            (Z80debug only)
               .KILL     - Kill application from debugger   (Z80debug only)
               .NMA      - Name application                 (Z80debug only)
    3)   Code to handle address parameters in .D, .MV & .ME and .MS are optimized.


 04.04.94, V0.34
    1)  CLI facility is no longer switched off when Intuition is released by the .G command.
    2)  Bug in .Release_debugger fixed:
          The interrupt enable subroutine were called after the original IY
          were installed, identfying the wrong memory location of the interrupt status.
    3) All relevant source files have been altered to include all Intuition versions using
       contitional assembly statements. The file 'defs_h' identifies which version that is to be
       assembled.
    4) A toggle commands now only displays ON/OFF when altered (all toggles were previously
       displayed)


 The popdown implementation has been skipped for three reasons:
     1. In a debugging / development phase it is just as well to design it as an application.
     2. The keyboard input interface is poor and doesn't allow application switching.
     3. The old keyboard routine was larger.

 Intuition has reached its final version, and will be regarded as V1.0 from on.
 Any corrections will be noted as a single decimal increase, e.g. V1.01.

 17.05.94, V1.01
     1) Intuition versions has been impemented with lookup table for ED instructions.
          The unused subroutine address point at .Unknown_instr to trap instruction opcodes
          that are not documented.
     2) Bit instruction opcodes 48 - 55 are now treated as unknown instructions.

 20.05.94
     1) Memory search: The found string memory dump is now activated in edit mode.
     2) Segment 0 version displayed the RTM error message from the wrong bank.
     3) Disassembler displayed nonsense when an unknown instruction were encountered (the old
          standard error routine used the error code from V0.26d and earlier.

 27.05.94, V1.02
     1) Disassembly of instruction opcodes can now be toggled with new .DO command.
     2) .MDB didn't dump correct bank to file in Z80debug: Missing conditional IF SEGMENT2 ...

 31.05.94, V1.03
     1) .VS changed to .VA (View addresses)
     2) .VA now extended with display of addresses in external banks.
        If no parameters are given, default is display of addresses from current stack pointer.
     3) .Get_addrparameters altered. A default address value is specified in alternate HL before
        the standard address parameter routine is called. All routines that use .Get_addrparameters
        have been altered.
     4) (IY + Oldbank) is longer used, and may be used for other purposes (if needed in a future
        version). All routines that used to save the prev. bank binding in (IY+OldBank), now
        preserves it on the stack.

 14.06.95, V1.04
     1) VERY old bug found in .ViewEditMem: hex input from keyboard during second nibble didn't
        range check, which allowed input of control characters (sometimes spurious output).
     2) .Calc_Reladdress improved.

 20.06.95, V1.1
     1) Virtual main and index instructions separated (also for $CB instructions). Many virtual
        instructions much faster now. IX implemented as runtime virtual HL register (very fast
        during ADD HL,xx & SBC HL,xx). Main loop decoding improved. Undocumented IXL, IXH and
        IYL, IYH instructions used to manipulate the runtime virtual HL register.
        Stack boundary logic removed from stack related instructions.
        All instruction opcodes are now in lookup tables (2.5K). All 'unknown instructions'
        are now error trapped.
        5-10% estimated speed increase of the virtual Z80 processor.

     2) .DispRegisters rewritten, .DispFlagReg rewritten, .FindCommand rewritten. Many small
        optimisations in the code.
        .EX command, .SB command, .Memsrch command and .DumpFile (bank/segment) commands removed.

     3) Segment 0 version re-arranged to fit the new virtual processor code and tables:
        Command line and related modules are now placed in upper 8K. Only the virtual processor
        remains in lower 8K. .ViewStack command is not available, due to space limitations.
