Getting started

From Atari Wiki
Revision as of 20:36, 2 May 2009 by Admin (talk | contribs) (Added category)
Jump to navigation Jump to search
                     Assembly language, in Devpac, Tutorial

                                       by

                          John Cove (Tronic of EfFeCt)

                                     for

                                    ICTARI

                       Series 1, part 1, Getting started

     ----------------------------------------------------------------------
     In the first part I am going  to tackle very simple but very necessary
     things  like  supervisor  mode,   exits,   colours,   move  and  movem
     commands...

       _____________________________________________
       Section 1.1 - Supervisor mode using the -(sp)
       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

     Here is the very standard routine to "get your machine into supervisor
     mode".

     You are able to add things  before  the following routine to calculate
     how much memory you have, etc, but I will not go into this. Also, some
     routines do not need supervisor mode to run, but more about his later.

       Here is how to enter supervisor mode:

     --------------------------------------------------------------------
     clr.l  -(sp)                                           ...  line 1.1
     move.w #$20,-(sp)                                      ...  line 1.2
     trap   #1                                              ...  line 1.3
     addq.l #6,sp                                           ...  line 1.4
     --------------------------------------------------------------------

     At this point (after line 4) you  are  able  to save the value in your
     stack so you can restore the value  when you end your program but more
     about that later.

     You are now in supervisor mode!!   You  can  now play around with  the
     colours, hertz, CPU (!) etc....

     The following piece of code is how  you end your programs, i.e. to end
     supervisor mode  and  return  control  to  the  C(entral) P(rocessing)
     U(nit).

     ----------------------------------------------------------------------
     clr.l -(sp)                                             ... line 3.1
     trap  #1                                                ... line 3.2
     ----------------------------------------------------------------------

     This will return the  control  to  the  CPU  and  effectively end your
     program!!!

     So if you were to add  the  previous  bits  of code together, all that
     would happen is, you would simply  return  to Devpac and nothing would
     change or have happened!!!

     It is surprising that most  people,  who  use  68000  to do intros and
     people who want to figure out 68000 do not know about this!!

       ___________________________________________________________
       Section 1.2 - Colour, using the move.w and movem.l commands
       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

     Right, first off I will list the pitiful 16 colour registers:-

                $ffff8240       -       The background colour
                $ffff8242       -       Colour 2
                $ffff8244       -       Colour 3
                $ffff8246       -       Colour 4
                $ffff8248       -       Colour 5
                $ffff824a       -       Colour 6
                $ffff824c       -       Colour 7
                $ffff824e       -       Colour 8
                $ffff8250       -       Colour 9
                $ffff8252       -       Colour 10
                $ffff8254       -       Colour 11
                $ffff8256       -       Colour 12
                $ffff8258       -       Colour 13
                $ffff825a       -       Colour 14
                $ffff825c       -       Colour 15
                $ffff825e       -       Background colour


       Now I will list the simple colour palettes:-

                     $000       -       Black
                     $001       -       Dark Blue
                     $007       -       Light Blue
                     $010       -       Dark Green
                     $070       -       Light Green
                     $110       -       Dark Yellow
                     $770       -       Light Yellow
                     $100       -       Dark Red
                     $700       -       Light Red
                     $101       -       Dark Purple
                     $707       -       Light Purple
                     $011       -       Dark Cyan
                     $077       -       Light Cyan
                     $111       -       Grey ... Scale 1
                     $222       -       Grey ... Scale 2
                     $333       -       Grey ... Scale 3
                     $444       -       Grey ... Scale 4
                     $555       -       Grey ... Scale 5
                     $666       -       Grey ... Scale 6
                     $777       -       White

                     $704       -       Magenta (in red/purple scale)

     So, if you wanted to  change  the  background  colour to red, then you
     would  write the following line:-

                        move.w  $700,$ffff8240.w
                        ||||||  |||| |||||||||||
                        111111  2222 33333333333

     Sequence  one is the move command  that  will effectively move what is
     defined in sequence two, and implement it into sequence three!!  Yes??
     So, sequence one is the move command, sequence two is the data you are
     moving to sequence three, and sequence  three is the background colour
     register,or what you want to be changed  by what is in sequence two!!!
     Easy really!!!

     So, you can change sequence two,  for  different colours and  you  can
     change sequence three for other colour registers!!   You can also move
     sequence two into a data bank,  so  you  can use it, for restoring, or
     whatever, later on...

        =============------------------------------
        program start - for example SUPERVISOR MODE
        =============------------------------------

        move.w  $700,red_colour_bank

        =======
        program
        =======

        move.w  red_colour_bank,$ffff8240.w

        ===========--------------------------------------
        program end - for example clr.l -(sp) ... trap #1
        ===========--------------------------------------

       red_colour_bank      dc.w    0


     Now it gets a little more  complicated.  You  are moving $700 into the
     data bank called  red_colour_bank,  which  incidentally  you  can call
     whatever  you   wanted,  but  you  MUST  define  what  kind  of  store
     red_colour_bank  is!!!!   For  example :-

       you are using a "move.w" command, so  the  bank MUST be defined as a
     "dc.w"....

     You get different  kinds  of  stores,  they  are  "dc.w",  "dc.b"  and
     "dc.l", plus the "dc.b" and others which  I will go into later!!   You
     MUST  NOT  mix  and match the ".w" with the ".l" with the ".b"!!!   If
     you are using the "move.b" command to  move data into a bank, then you
     MUST have a "dc.b" store!!!!!!!!!!

     The same when you are  using  the  banks,  if  you  have used a "dc.b"
     store,  then you must using the  "move.b"  (or whatever)to use what is
     in the store correctly!

     I hope I have explained this  so  it  is  easy to understand, it  is a
     very  easy concept which MUST be obeyed!!

     So, if you have understood this, then you  can see what it can be used
     for  in say  an  intro...you  can  save  the  contents  of  the colour
     registers into sixteen banks  and  then  restore  then,  by moving the
     contents of each store  into their respective colour registers......oh
     god, this is getting complicated!!!!!!!!

     There is a far easier way  of  does  this, though........you can use a
     "movem.l" command!!!  For example:-

     If you wanted to store and  restore  the  ST  palette, you would do it
     like this:-

        =============------------------------------
        program start - for example SUPERVISOR MODE
        =============------------------------------

        movem.l    $ffff8240,d0-d7
        movem.l    d0-d7,sts_colour_bank

        ===========--------------------------------------
        program end - for example clr.l -(sp) ... trap #1
        ===========--------------------------------------

       sts_colour_bank      dc.l     16


     Now, you should be  able  to  see  you  this works instantly........it
     simple moves the sixteen colour datas into the register d0-d7 and then
     moves  the  contents of d0-d7 into  the  bank, which  can  hold  up to
     sixteen  different  data  bits, sts_colour_bank.  You can then restore
     the palette with the following routine:-

        =============------------------------------
        program start - for example SUPERVISOR MODE
        =============------------------------------

        movem.l    sts_colour_bank,d0-d7
        movem.l    d0-d7,$ffff8240

        ===========--------------------------------------
        program end - for example clr.l -(sp) ... trap #1
        ===========--------------------------------------

       sts_colour_bank      dc.l     16


     See, it is very easy!!   You  can  then  use this routine to store any
     value you want, for example, the  vbl  values and mfg values......no I
     will  not  explain  these,  yet....I  do  not  fully  understand  them
     myself!!!

     Anyway, I think that is enough for this  part, as there is quite a lot
     here to get to grips  with!!    You  must  try  these routines out for
     yourself and mess around with them to  see  what you can do!! Have fun
     and good luck!

     It is a very good  idea  to  get  a  reset  resident version of Devpac
     too!!!!!!

     ----------------------------------------------------------------------
     Tronic of Effect, aka John Cove,  [C]opyright 1995 ... started: 04-11-
     1995  finished: 05-11-1995


            "I reserve the right to publish these tutorial series
             wherever  I  choose...   Only,  with express written
             confirmation,  is  this  to  be  published by anyone
             other than myself.   These  series  were written for
             ST WORLD, but if I feel that the series is not being
             taken advantage of in the way that most ST USERS are
             able  to read  the  series, then  I will publish the
             series in my own, and other  peoples, disk magazines
             and products."

Back to ASM_Tutorial