Changeset 4f508e6 in buchla-68k for vlib/vsetav.s


Ignore:
Timestamp:
07/01/2017 02:34:46 PM (7 years ago)
Author:
Thomas Lopatic <thomas@…>
Branches:
master
Children:
08e1da1
Parents:
f40a309
Message:

Converted assembly language files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vlib/vsetav.s

    rf40a309 r4f508e6  
    1 * ------------------------------------------------------------------------------
    2 * vsetav.s -- set a character's attributes in video RAM
    3 * Version 1 -- 1988-10-11 -- D.N. Lynx Crowe
    4 * (c) Copyright 1988 -- D.N. Lynx Crowe
    5 * ------------------------------------------------------------------------------
    6 *
    7 *       vsetav(adr, row, col, atr, len)
    8 *       unsigned int *adr, row, col, atr, len;
    9 *
    10 *               Sets attribute 'atr' at ('row', 'col') in the
    11 *               full attribute text object at 'adr'
    12 *               using a line length of 'len'.
    13 * ------------------------------------------------------------------------------
     1| ------------------------------------------------------------------------------
     2| vsetav.s -- set a character's attributes in video RAM
     3| Version 1 -- 1988-10-11 -- D.N. Lynx Crowe
     4| (c) Copyright 1988 -- D.N. Lynx Crowe
     5| ------------------------------------------------------------------------------
     6
     7|       vsetav(adr, row, col, atr, len)
     8|       unsigned int |adr, row, col, atr, len;
     9
     10|               Sets attribute 'atr' at ('row', 'col') in the
     11|               full attribute text object at 'adr'
     12|               using a line length of 'len'.
     13| ------------------------------------------------------------------------------
    1414                .text
    15 *
     15
    1616                .xdef   _vsetav
    17 *
    18 P_ADR           .equ    8
    19 P_ROW           .equ    12
    20 P_COL           .equ    14
    21 P_ATR           .equ    16
    22 P_LEN           .equ    18
    23 *
    24 _vsetav:        link    a6,#0           * Link stack frame pointer
    25                 move.w  P_ROW(a6),d0    * Get row
    26                 mulu    P_LEN(a6),d0    * Multiply by len
    27                 clr.l   d1              * Clear out d1
    28                 move.w  P_COL(a6),d1    * Get col
    29                 add.l   d1,d0           * Add col into d0 to get char. #
    30                 move.l  d0,d1           * Develop cw = (cn/2)*6 in d1
    31                 andi.l  #$FFFFFFFE,d1   * ...
    32                 move.l  d1,d2           * ...
    33                 add.l   d1,d1           * ...
    34                 add.l   d2,d1           * ...
    35                 add.l   P_ADR(a6),d1    * Add sbase to cw
    36                 movea.l d1,a0           * a0 points at the word with the char.
    37                 btst.l  #0,d0           * Odd char. location ?
    38                 bne     vsetav1         * Jump if so
    39 *
    40                 addq.l  #2,a0           * Point at the attribute word
    41                 bra     vsetavx         * Go set attribute
    42 *
    43 vsetav1:        addq.l  #4,a0           * Point at the attribute word
    44 *
    45 vsetavx:        move.w  P_ATR(a6),d0    * Get new attributes
    46                 or.w    d0,(a0)         * Set new attributes in video RAM
    47                 unlk    a6              * Unlink the stack frame
    48                 rts                     * Return to caller
    49 *
     17
     18P_ADR           =       8
     19P_ROW           =       12
     20P_COL           =       14
     21P_ATR           =       16
     22P_LEN           =       18
     23
     24_vsetav:        link    a6,#0           | Link stack frame pointer
     25                move.w  P_ROW(a6),d0    | Get row
     26                mulu    P_LEN(a6),d0    | Multiply by len
     27                clr.l   d1              | Clear out d1
     28                move.w  P_COL(a6),d1    | Get col
     29                add.l   d1,d0           | Add col into d0 to get char. #
     30                move.l  d0,d1           | Develop cw = (cn/2)|6 in d1
     31                andi.l  #0xFFFFFFFE,d1  | ...
     32                move.l  d1,d2           | ...
     33                add.l   d1,d1           | ...
     34                add.l   d2,d1           | ...
     35                add.l   P_ADR(a6),d1    | Add sbase to cw
     36                movea.l d1,a0           | a0 points at the word with the char.
     37                btst.l  #0,d0           | Odd char. location ?
     38                bne     vsetav1         | Jump if so
     39
     40                addq.l  #2,a0           | Point at the attribute word
     41                bra     vsetavx         | Go set attribute
     42
     43vsetav1:        addq.l  #4,a0           | Point at the attribute word
     44
     45vsetavx:        move.w  P_ATR(a6),d0    | Get new attributes
     46                or.w    d0,(a0)         | Set new attributes in video RAM
     47                unlk    a6              | Unlink the stack frame
     48                rts                     | Return to caller
     49
    5050                .end
Note: See TracChangeset for help on using the changeset viewer.