HISTORY OF THE QBASIC ASSEMBLER

ADDITION: 2/29/00 added label support.. a little buggy, but works.. ex:
ADDITION: 2/29/00 added size support.. $ex
     FIX: 2/29/00 Fixed the label names so they are fixed.. CS:,DS:,ES:,SS:
                  (comment line 76 to disable this)
     FIX: 3/01/00 Fix label support.. But be careful anyway

     FIX: 3/02/00 Fixed MOV ??,[BX] combinations.. and others, instead of
                  being locked on AX and AL (0)
     FIX: 3/02/00 Fixed ADD functions, so you can use al,cl,dl,bl-
                  ah,ch,dh,bh-ax,cx,dx,bx,cs,ds,es,ss.. but the
                  16 bit registers, use an 8 bit add/minus?, and integer..
ADDITION: 3/02/00 I went though, and put the rest of the jump points on,
                  but some of these don't make sense...
ADDITION: 3/02/00 I added my instruction ERA, to the list.. it is almost
                  identicle to DB, but meant for keeping track of
                  locations, and debugging, specifically so you can print
                  the exact location.. no "'s are needed.. just what's
                  after the ERA... (you don't have to use this...)
                  and all text will be uppercase.. (easier for labels)
     FIX: 3/02/00 Fixed SUB and CMP functions, and put them together in the
                  pattern, 80h, use this new information to make the rest of
                  the codes easy to finnish
ADDITION: 3/03/00 I have added the @.. This works like an EQU instruction
                  Basically, say @test 0000, and the test label becomes
                  0000, or @thing 101F, it's 101F... (useful for some
                  things, have 2 byte values of two things for useful
                  information..
ADDITION: 3/04/00 I have added the @CP.. This option works with the @
                  The main difference, is the location of how many bytes
                  are present in the program. or the local information.
                  also, i changed from MKI and CVI to SVE and SVB (My
                  functions, unsigned) so they support up to 16 bits..
                  The @CP only ADDS that many bytes you put in there..
                  it doesn't set the new amount.. Experts only!!
ADDITION: 3/04/00 Also, the +CP (same as @CP) and -CP (takes away that
                  may bytes) useful for changeing code within your code.
                  ex.. MOV AX,0000
                       -CP 0002 ;(move back to start of set number 0000)
                       NUM:     ;catch location
                       +CP 0002 ;return to normal


NOTE: @CP is unaffected by labels.. +CP is.. so you can use this for more
      Flexible buffering.. -CP is also affected by labels.. :)
NOTE: Do becareful, if you get CP under 0, (negative) you will not compile it
      right..

     FIX: 3/04/00 I went through, and enabled more 32 bit operators, and did
                  some testing.. as well as added a few other instructions.
                  Try out the CPUID :)
  CHANGE: 3/06/00 Due to some programming, the @CP is now a setting, and a
                  Label, which updates to the current spot.. this might be
                  useful later for more advanced programmers.. and i put in
                  a different counter, so +cp and -cp don't mess up the size
                  of the programming.. (Estimated size) Experts only :)
                  (Before, if you put +cp 1000 and nothing else, it would be
                  4096 extra bytes in the estimated size.. even if you didn't
                  add any extra codes.. this is what was fixed..)
                  CP is a label.. but of the current position... careful..
     FIX: 3/06/00 When adding the feature so it has a more exact size estimate
                  i overlooked a little bug, so the last label is always
                  skipped... This has been fixed..
ADDITION: 3/07/00 While making a few small functions, i added more 32-bit
                  support, making it faster and easier to work with.. but
                  make sure all the numbers are there :)
ADDITION: 3/09/00 I added some 'Include' support... it works differently
                  then C and other assemblers.. simply.. there are 3 commands
                  first) *somename.asm
                  this is 'whole library' include..
                  second) #othername.asm
                  this opens the file.. then
                  third) !individual types from othername.asm
                  this is not perfected.. but there is a counterpart in
                  othername.asm.. that holds which lines to copy.. with this,
                  you can also change the order they come in, for simplicity,
                  or for fun :)
                  (Counterpart/ Line numbers)
                  !individual 100(start) 200(end)

NOTE: When making this include support, you must have the functions index
(!) in the order they appear, so my second program and grab the line numbers

ADDITION: 3/09/00 I added more support for options.. you can use more then
                  1 option at a time.. and for files with a LOT of labels,
                  use the Percentage to see how fast it is moving...
                  D/Debug P/Percent X/Default Files
     FIX: 3/10/00 I have fixed the entire section for comments ;
                  from now on, everything after will be erased..
     FIX: 3/15/00 Fixed a few things, i am not sure what i fixed...
                  But there was something about the 2 files only and
                  no options thing...
ADDITION: 3/16/00 I found information on the PUSH for pushing a 8 bit value
                  This may work for other things too.. but i need more
                  information to suceed in the 16 and 32 bit values
     FIX: 3/16/00 When i added the CP label control, i forgot, that CPUID
                  starts with CP.. and therefore destroying my work..
                  New label is CPX.. this is reserved.. use this as needed
     FIX: 3/28/00 I made a little test asm file.. to see how many of which
                  commands were recodnized.. i am happy to say, most.. and
                  a few more extensive tests.. but now i need a dissasembler
                  to make it better.. com/exe to text... we will see..
     FIX: 4/02/00 I noticed certain instructions, like adc weren't all
                  going through.. i have added an extra few lines in, that
                  fix this, but if there are any others, i will need to find
                  them... they may be important
                  and some small bugs
ADDITION: 4/04/00 I noticed that there are 2 different jmp's.. 1 for long and
                  1 for short.. i will add it as JXX and it will use up to
                  127 either way.. for other assemblers, simply change JXX
                  with JMP.. but JMP's will work as well..
     FIX: 4/05/00 I added some more support for Xchg (may be more later..)
     FIX: 4/06/00 I found a problem with the +cp/+cpx and -cp/-cpx and i just
                  fixed it.. careful.. it may still have a fault
ADDITION: 4/06/00 I added some code to test the length of the jumps between
                  the JXX and JMP.. if they are short enough, or too far, it
                  will tell you in part of the debugging information.. and
                  for making smaller, and faster code, you may go by these
                  bits of information :)

-------------------------------------------------------------------------
There are a lot of things to do yet, but i think it is coming pretty well

all these codes i have entered in here i have used debug to help me on..
should you find any errors.. contact me ASAP

Era Scarecrow / 2000
and comments ; will be ignored :).. and if the program stops, use the
Immediate section, and do, PRINT LLN,A$,B$,C$,D$,X$.. this will help
you find your errors.. mainly with LLN (Line in the text file)

BUG LIST:

1) Use full numbers.. especially when working with 16 bit items.. (jmp
mov ax,0000) to go without all the numbers it will think it 8 bit, and
make MAJOR errors (Size and other items..)

2) ADD BX,0010 : This is wrong, it will only accept 1 byte, but the bug,
is the pattern won't accept that without the other byte.. do it this way,
The left half, is minus, and right half is plus.. that way it is easier
to keep track of.. Example.. (the AX uses true 16 bit instead of 8)..
ADD BX,+14 = ADD BX,0014
ADD BX,-42 = ADD BX,4200
ADD BX,4211? The minus is done first, then the plus.. so ADD BX,+11
(If you go over 7f, then it's a minus.. no changes i can control)

3) To get a HEX value, of what was used for the labels, and have them
as a normal text format.. (47h?) Use either DB, and have the label names
in upper case.. or use ERA and it will work just as well.. where
everything is upper case.. (A bug for debugging) :)

4) If you put up labels that don't exsist (something:) or ($something)
or (@something 0000) then you will have problems using the assembler..

    Source: geocities.com/siliconvalley/haven/2635

               ( geocities.com/siliconvalley/haven)                   ( geocities.com/siliconvalley)