
 emu8086 - 8086 assembler and emulator

         Revision History

********************************************

	[*] - stays for fixed bugs.
	[+] - stays for new features.
	
********************************************
Version 1.22
Monday, June 17, 2002

 [+] New sample added: "micro-os.asm" an
     example of micro operating system.
     
 [+] Tutorials are heavily updated.     
 
 [+] emu8086.inc updated, procedure for
     string input is added.
     
 [*] Inner macro string parameters
     are transferred correctly.
     
 [+] Debug log uses correct number of
     spaces between encoded instruction
     and machine code.
     
 [*] Default position of text cursor is
     made more reasonable.

 [+] "Find" dialog is shown with currently
     selected text in the code editor.

 [*] String inside string declaration
     is processed correctly.

 [+] Refresh of the user screen is
     optimized.
 
********************************************
Version 1.21
Friday, June 14, 2002

 [+] Keyboard support is improved,
    INT 16h / 00h / 01h
    return BIOS scan code also.

 [+] "Step delay" can be set to zero.

 [+] Sample "snake.asm" is updated :)

 [*] REPE/REPNE prefix was not decreasing CX
     by one on exit. Fixed.

 [*] String parameters are transferred
     correctly to macro.

 [*] Compiler cares about duplicate
     declarations, and reports about it.

 [+] Several tool tips added.

 [+] Input state can be interrupted by a tiny
     stop button.

 [+] Debug Log added to emulator, choose it
     from Debug menu.
    
 [+] Edit menu added to code editor, it is
     possible to do indent, outdent, find...

********************************************
Version 1.20
Tuesday, June 11, 2002

 [+] New samples added:
 	snake.asm
 	include.asm
 	calc.asm     
 	sort.asm

 [+] It is possible to use shorter "b." and
     "w." instead of "BYTE PTR" and
     "WORD PTR".
     Disassembler always uses short form.

 [*] Command line parameters did not include
     the prefix space (like original DOS).
     It is fixed by adding prefix space.

 [*] There was a problem compiling this
     expression: "WORD PTR  [20h]" when
     there are more then one space after PTR
     keyword. Fixed, also for "BYTE PTR".

 [*] Blue color "0001b" was not as original
     DOS color RGB(0,0,128). Fixed.

 [+] Cursor options are improved, it can
     be made invisible using:
     INT 10h / AH=01.

 [*] Compiler was unable to evaluate
     some immediate expressions. Fixed.     

 [+] Expression Evaluator added (Math menu).

 [+] Arithmetic & Logical Unit updated.

 [+] Other internal optimizations.

 [+] "Compile & Emulate" button added
     (does the same as F5 key).

 [+] "Loading..." is shown while loading
     source files.

 [*] Selection of currently executing macro
     is much better now.

 [+] Emulator "step delay" can be set
     to maximum of 9000 milliseconds
     (9 seconds).

 [+] It is possible to set a breakpoint
     via "Debug" menu.

********************************************
Version 1.19
Thursday, June 06, 2002

 [+] Documentation is updated!
     Better tutorials and reference added.

 [+] Command line parameters option is
     improved for both COM and EXE files.
     (see "param.asm" and "paramexe.asm" in
      samples).

 [+] Double-click on stack list also opens
     hex calculator with selected value
     converted to all possible forms.

 [*] [Load] button renamed to [Open] in
     compiler window, this is more logical.
      
 [+] "BYTE PTR" and "WORD PTR" no longer
     required for immediate offset location:
     MOV [0020h], DL
     MOV BX, [0020h]
     
********************************************
Version 1.18
Monday, June 03, 2002

 [+] User Screen is activated automatically
     after program is terminated (when it is
     opened in the background).

 [+] "Save current emulator state..." from
     "Debug" menu saves registers and memory
     in addition to disassembled code. 

 [+] New function supported INT 10h / AH=13h
     to write string with attributes,
     (see reference.html and "int10_13.asm"
     in Samples).

 [+] Disassembling of 8 bit displacements is
     improved. Previously code:
     MOV AX, [DI-1]
     was disassembled as:
     MOV AX, [DI] + 0FFFFFFFFh
     now it is disassembled as:
     MOV AX, [DI] - 01h

 [*] Segment prefix is compiled correctly:
     MOV BYTE PTR ES:[020h], DL

 [*] "Clear Screen" button forces to update
     memory and disassembled lists when
     required.

 [*] Compiler reports an nice error in
     case of:
              db 1234h
     (previously anything over byte size was
     converted to zero without a warning).

 [+] Emulator asks for a missing ".binf"
     file, when it cannot find it in the
     same folder with a ".bin" file.

 [*] Hex Calculator gets correct word value
     after double clicking memory list.
     (previously instead of FB09h it
      received FB9h).
      
 [*] Error message was shown mistakenly
     on creating new floppy drive and
     writing boot record. Fixed.
 
********************************************
Version 1.17
Sunday, June 02, 2002

 [+] Timer function added (INT 15h / 86h),
     (see reference.html and "timer.asm"
     is Samples).

 [+] Enabled compiling of actual offset
     number instead of variables:
     MOV BYTE PTR [82h], 'A'
     (assumed that segment is in DS
      register - DS:[0082h]).

 [+] It is possible to set cursor size:
     INT 10h / 01h (see reference.html).

 [+] Keyboard buffer added, currently it
     can hold up to 8 key-codes.
     Function INT 16h / 00h can be used
     to check if there is something in a
     buffer (see "keybrd.asm" in Samples).

 [*] Major bug with showing memory at
     some address (B800:0000) fixed.

 [*] INT 21h / 0Ah uses the current color
     for each character.

 [+] Decoding unknown bytes as "DB ??"
     instead of "???".

 [*] Compiler did not report an error for
     MOV DI, offset s1
     when "s1" is not defined. Fixed.

 [*] Memory list was updated with physical
     address instead of offset. Fixed.

 [*] Some built in interrupts were unable
     to set Carry Flag (because flag
     register is pushed before interrupt and
     popped on IRET). Fixed.

 [*] Constant evaluation included comment
     in result. Fixed.
 
********************************************
Version 1.16
Friday, May 31, 2002

 [+] More instructions are now
     supported by emulator:
     AAA
     AAS
     AAD
     AAM
     DAA
     DAS
     (see "bcd_add.asm" in Samples).

 [*] Disassembler shows relative jumps
     with correct offset (previously
     physical address was shown).

 [+] "Save current emulator state" from
     "Debug" menu uses logical addresses
     instead of physical.

 [+] Selecting memory value automatically
     selects the disassembled line that
     corresponds to that byte.

 [*] Major bug fixed! BIOS Teletype function
     (INT 10h/0Eh) was not making scroll
     correctly! There also was unnecessary
     moving of current cursor position to
     the bottom of the screen.

********************************************
Version 1.15
Wednesday, May 29, 2002

 [+] Support for 8 video pages added,
     see "pages.asm" in samples.

 [+] Memory list shows only the offset
     of physical address, segment is shown
     in the first text box above it.

 [+] Separate "Help" button added.

********************************************
Version 1.14
Sunday, May 26, 2002

 [+] Text color support added.

 [*] Text-boxes for register values are made
     wider (some systems displayed only part
     of the value on selection).

 [+] It is possible to disassemble up to 1K
     of memory, and to save disassembled
     code into a file (by clicking
     "Save current emulator state" from
     "Debug" menu).

********************************************
Version 1.13
Saturday, May 25, 2002

 [+] New better font options added.

 [+] "Terminal" (OEM/DOS) font is used as
     default for user screen and
     memory list.

 [*] Hex Calculator converts double
     characters correctly, assuming that
     missing character has zero value.

 [+] Memory word at 0040h:004Ah has
     number of columns on screen.
     Memory byte at 0040h:0084h has
     number of rows on screen minus one.
     This value is modified when screen
     window is resized.

 [+] More interrupts are supported:

     INT 10h / AH=06h - scroll up window.

     INT 10h / AH=07h - scroll down window.

     (see "scroll.asm" in Samples).

********************************************
Version 1.12
Thursday, May 23, 2002

 [+] Output file extensions are made more
     reasonable (".BOOT" for a boot sector,
     ".BIN" for files that are loaded at
     specified location by ".BINF" files).

 [+] BIN file can be loaded at any location
     using ".bINF" file,
     startup values for all registers are
     also set by this file.
     See "bintest.asm" in "Samples" for
     more information.

 [*] Actual source line is shown correctly
     for boot sector files.

 [+] "Create new floppy drive" menu is added
     to "Virtual Drive" menu. You can add
     up to 4 floppy drives:
     FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3

 [+] INT 11h returns the correct number of
     floppy drives (total-1).

********************************************
Version 1.11
Wednesday, May 22, 2002

 [+] New file type supported by emulator:
     ".PRE".
     (replaced with ".BIN" in version 1.12)

 [+] You can write a boot sector of
     a virtual floppy (FLOPPY_0) via menu in
     emulator.
     First you should make a ".boot" file and
     load it in emulator (see "micro-os.asm"
     in "Samples" for more info).
     Then, if you are curious, you may write
     the virtual floppy to real floppy and
     boot your computer from it, I recommend
     using "RawWrite for Windows" from:
     http://uranus.it.swin.edu.au/~jn/linux
     (note that "micro-os.asm" isn't MS-DOS
      compatible boot sector, so it's better
      to use and empty floppy, it should be
      IBM/MS-DOS formatted).

 [*] Major bugs with accessing far memory
     is fixed (I hope, since I need to do
     more tests).

 [+] Mouse cursor is updated for URL and
     e-mail on about form (eye & candy).

 [+] Regular menu is added to emulator
     form, previously these options were
     available from right-click on "Load"
     button, and memory list.

********************************************
Version 1.10
Sunday, May 19, 2002

 [*] Major bugs are fixed for instructions:
     CMPSB, CMPSW, SCASB, SCASW
     (zero flag was checked before operation
     instead of after when prefix is used).

 [*] Minor bug fixed: cursor is not advanced
     after INT 10h / AH=09h and
     INT 10h / AH=0Ah even if CX isn't 1.

 [*] Effective address 8 bit displacement
     was always treated as positive.

 [+] Virtual floppy drive is added:
     FLOPPY_0
     (it is blank, but I was able to make
      an image from DOS 6.22 bootable floppy
      currently it boots until
      "Starting MS-DOS..." message - and it
      takes several minutes :) - much to
      investigate!).

 [+] Interrupt 1Eh points to Vector of
     Diskette Controller Parameters.

 [+] More interrupts are supported:

     INT 12h - get memory size
	(returns: AX = kilobytes of contiguous
	memory starting at absolute
	address 00000h,	this call returns
	the contents of the word
	at 0040h:0013h).

     INT 13h / AH = 00h - reset disk system.

     INT 13h / AH = 02h - read disk sectors
                          into memory.

     INT 16h / AH = 00h - get keystroke from
                         keyboard (no echo).

 [+] It's possible to set selected
     memory value from Hex Calculator by
     right clicking the memory list,
     (first left click to select the
       address).       

 [+] Stack memory can be viewed in a
     separate window.

 [+] Segmented values can be used when
     getting memory list and disassembled
     code (example: 0B56:0100).     

 [*] Minor screen bug is fixed,
     (last cursor location was lost
      when screen form was closed).

********************************************
Version 1.09
Thursday, May 16, 2002

 [*] Minor bug fixed: internal CPU flag for
     REP/REPE prefix was not reset after
     some string operations.

 [+] More interrupts are supported:

     INT 10h / AH=02h - set cursor position.

     INT 10h / AH=03h - get cursor position.

     INT 10h / AH=08h - read character and
               attribute at cursor position.

     INT 10h / AH=09h - write character and
               attribute at cursor position.

     INT 10h / AH=0Ah - write character only
               at cursor position.

     INT 10h / AH=0Eh - teletype output.

     (note: currently emulator has no
      support for character attributes or
      cursor size, default white on black
      color mode is used for all operations)

 [+] Screen window is not activated after
     any output operation, making it easier
     to operate with emulator (buttons do
     not stuck).

 [+] A call to BIOS sub-system is
     disassembled  by "BIOS DI" (it doesn't
     use DI  register in any way, it's just
     because of the way the encoding is
     done: we are using "FF /7" for such
     encoding, "FFFFCD10" is used to make
     emulator to emulate interrupt number 10)

 [+] INT 4 and INT 0 are defined and produce
     the expected message, you can re-define
     those for you own needs.

 [+] Sample code that can be compiled and
     emulated is moved to "Samples" folder.

********************************************
Version 1.08
Monday, May 13, 2002

 [*] Major bug fixed: effective address
     calculation "[DI] + d16" was calculated
     with SI segment instead of DI.

 [+] More instructions are now
     supported by emulator:
     LEA (for effective address)
     XLAT
     INT 3 (trap to debugger) - it is not
           used by emulator, so you may
           use for any purpose, you just
           should set the address of
           your sub-program in the interrupt
           vector (at 3*4 = 0Ch).
     INTO  (currently also not defined).

********************************************
Version 1.07
Sunday, May 12, 2002

 [+] Interrupt vector is added to emulator,
     now I'm really approaching the real PC
     emulation. BIOS ROM is loaded
     at location F400:0000.
     Both files can be modified by the user,
     so you may alter the original version.

 [+] More instructions are now
     supported by emulator:
     RETF
     CALL (full support)
     IRET
     LOOPE / LOOPZ
     LOOPNE / LOOPNZ
     STOSB
     STOSW
     SCASB
     SCASW
     CMPSB
     CMPSW
     LES
     LDS

 [+] ".BIN" files are loaded at 07C0h:0000
     (just like a boot sector).

 [+] Disassembler is improved:
     (automatic re-disassemble after JMP,
      CALL, RET instructions).

 [+] Horizontal scroll bar added to
     disassembled list.

 [*] Memory list update fixed.

********************************************
Version 1.06
Saturday, May 04, 2002

 [+] More instructions are now
     supported by emulator:
     SHL
     SAL
     ROL
     RCL
     SHR
     SAR
     ROR
     RCR
     SAHF
     LAHF
     ADC
     SBB

 [+] You can double click a memory value
     to open HEX calculator.

 [*] Bug with current byte selection in list
     when starting address not zero,
     is fixed.

 [+] Disassembler is improved (commands are
     shown before they are executed).

********************************************
Version 1.05
Monday, April 22, 2002

 [+] Support for command line parameters
     (currently only for COM files).
     Right click "Load" button in emulator
     to set them. This line is loaded at
     the address of 80h at PSP.

 [*] Temporary files are saved into EMU_TEMP
     folder. This way we avoid accidental
     overwriting of executable files.
     Thanks to Starman.

 [+] Every time you compile your file,
     a backup file with ".~asm" extension is
     saved, along with ".debug" file that
     contains information required for
     emulator to select lines in your source
     code while executing.
     When not specified EMU_TEMP directory
     is used.

 [+] HEX Calculator is added, with its help
     you can convert binary numbers to
     hexadecimal, octal to decimal, or see
     an ASCII characters and vice versa...
     Double click a register value in
     emulator to load its value to
     calculator, or click "Calculator" in
     the main menu of source editor.

 [+] More instructions are now
     supported by emulator:
	     JCXZ
	     CMC
	     STC
	     CLC
	     CLD
	     STD
	     CLI
	     STI
	     CBW
	     CWD  
	     INC (full support)
	     DEC (full support)
	     XCHG
             JMP (full support)

********************************************
Version 1.04
Friday, April 19, 2002

 [+] The command that is going to be
     executed next is selected in actual 
     source window (previously command 
     was shown only after it is executed).
 
 [+] Corresponding line is selected when
     clicking on error message.
 
 [+] Support for ".BIN" files added, the only
     difference from ".COM" files that they
     are not loaded at 100H prefix, and thus
     do not require "ORG 100H" line in the
     beginning of the file.

 [*] "MOV AL, -5" caused a critical 
      compilation error.

 [+] When showing registers prefix zeros are
     added.

 [+] More instructions are now
     supported by emulator:
     	  DIV
          IDIV
          IMUL
          MUL
          NEG
          NOT
          TEST (now full support)

 [*] Overflow is reported correctly
     on compile.

********************************************
Version 1.03
Sunday, March 31, 2002

 [+] More instructions are now
     supported by emulator:
          PUSH CS
          PUSH DS
          PUSH ES
          PUSH SS
          POP DS
          POP ES
          POP SS
          PUSHF
          POPF

 [+] Hourglass mouse pointer is shown
     while loading files in emulator.

 [+] Emulator shows decimal and char
     representation of memory (previously
     it was hexadecimal only).

 [*] Bug with INT 21h, AH=0Ah (line input)
     is fixed, last new line char was
     added one byte after required
     position.

 [+] INT 21h/AH=01h is supported,
     write character to standard output,
     with echo, result is stored in AL.

 [+] INT 21h/AH=02h is supported,
     read character from standard input,
     DL = character to write,
     after execution AL = DL.

 [*] TAB key is works again when
     typed in editor.

********************************************
Version 1.02
Saturday, March 30, 2002

 [*] COM files are loaded at 100h prefix!
     (as they really should).

 [*] A few other bugs fixed.

 [+] INT 20 added (exit to OS), the same
     as INT 21, AH=4Ch.

 [+] INT 21h, AH=0Ah is now supported,
     (string input, fist byte is buffer
     size, second byte is number of chars
     actually read).

 [+] Disassembler uses HEX for numbers.

 [*] INCLUDE directive looks for files in
     the same folder where the source is
     (in case full path is not specified),
     and there is a regular error message
     when file not found.

 [+] Emulator window is now re-sizeable.

********************************************
Version 1.01
Tuesday, March 26, 2002

 [+] Support for COM files added.

********************************************
Version 1.00
Wednesday, February 13, 2002

 [+] The very first release!

********************************************
