home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2000 January / LCD_01_2000.iso / games / doom / pmdoom / src / m68k / c2p.s < prev    next >
Encoding:
Text File  |  1999-12-17  |  2.1 KB  |  143 lines

  1. |
  2. |    Routine de conversion
  3. |    1 octet/pixel -> 8 plans de bits
  4. |
  5. |    Inspiree de la methode parue dans Stratos Magazine 2
  6. |
  7. |    Patrice Mandin
  8.  
  9. | -------------    Init table C2P
  10.  
  11.     .globl    _init_c2p
  12.  
  13.     .text
  14. _init_c2p:
  15.     movel    d2,sp@-
  16.  
  17.     lea    table_c2p,a0
  18.     movew    #255,d0
  19. c2p_initbcl:
  20.     lea    a0@(0,d0:w:8),a1
  21.     moveq    #7,d1
  22. c2p_initbyte:
  23.     btst    d1,d0
  24.     sne    d2
  25.     negw    d2
  26.     moveb    d2,a1@(0,d1:w)
  27.  
  28.     dbra    d1,c2p_initbyte
  29.  
  30.     dbra    d0,c2p_initbcl
  31.  
  32.     movel    sp@+,d2
  33.     rts
  34.  
  35. | -------------    Conversion C2P
  36.  
  37.     .globl    _convert_c2p
  38.  
  39.     .text
  40. _convert_c2p:
  41.     movel    sp@(4),c2p_source
  42.     movel    sp@(8),c2p_dest
  43.     movel    sp@(12),c2p_width
  44.     movel    sp@(16),c2p_height
  45.     movel    sp@(20),c2p_dblligne
  46.     movel    sp@(24),c2p_linewidth
  47.  
  48.     moveml    d2-d7/a2-a6,sp@-
  49.  
  50.     movel    c2p_source,a0
  51.     movel    c2p_dest,a1
  52.     lea    table_c2p,a2
  53.     movel    #0x000f0001,d3
  54.     moveq    #0,d0
  55.     
  56.     movel    c2p_height,d7
  57.     subql    #1,d7
  58. c2p_bcly:
  59.     movel    a1,a5    | Save start address of line
  60.  
  61.     | Conversion
  62.                  
  63.     movel    c2p_width,d6
  64.     lsrw    #4,d6
  65.     subql    #1,d6
  66. c2p_bclx:
  67.     | Octets 0-7
  68.     
  69.     moveq    #0,d1
  70.     moveq    #0,d2
  71.     moveq    #7,d5
  72. c2p_bcl07:
  73.     moveb    a0@+,d0
  74.     lea    a2@(0,d0:w:8),a3
  75.     lsll    #1,d1
  76.     lsll    #1,d2
  77.     orl    a3@+,d1
  78.     orl    a3@,d2
  79.     dbra    d5,c2p_bcl07
  80.  
  81.     movepl    d1,a1@(0)
  82.     movepl    d2,a1@(8)
  83.     addw    d3,a1
  84.     swap    d3
  85.     
  86.     | Octets 8-15
  87.  
  88.     moveq    #0,d1
  89.     moveq    #0,d2
  90.     moveq    #7,d5
  91. c2p_bcl815:
  92.     moveb    a0@+,d0
  93.     lea    a2@(0,d0:w:8),a3
  94.     lsll    #1,d1
  95.     lsll    #1,d2
  96.     orl    a3@+,d1
  97.     orl    a3@,d2
  98.     dbra    d5,c2p_bcl815
  99.  
  100.     movepl    d1,a1@(0)
  101.     movepl    d2,a1@(8)
  102.     addw    d3,a1
  103.     swap    d3
  104.  
  105.     dbra    d6,c2p_bclx
  106.  
  107.     | Double ligne ?
  108.  
  109.     tstl    c2p_dblligne
  110.     beq    c2p_nodblligne
  111.  
  112.     movel    a5,a6            | src line
  113.     movel    a5,a1            | dest line
  114.     addl    c2p_linewidth,a1
  115.  
  116.     movel    c2p_width,d6
  117.     lsrw    #2,d6
  118.     subql    #1,d6
  119. c2p_copydbl:
  120.     movel    a6@+,a1@+
  121.     dbra    d6,c2p_copydbl
  122.  
  123.     addl    c2p_linewidth,a5
  124. c2p_nodblligne:
  125.     movel    a5,a1
  126.     addl    c2p_linewidth,a1
  127.  
  128.     dbra    d7,c2p_bcly
  129.  
  130.     moveml    sp@+,d2-d7/a2-a6
  131.     rts
  132.  
  133.     .data
  134.  
  135.     .even
  136.     .comm    c2p_source,4
  137.     .comm    c2p_dest,4
  138.     .comm    c2p_width,4
  139.     .comm    c2p_height,4
  140.     .comm    c2p_dblligne,4
  141.     .comm    c2p_linewidth,4
  142.     .comm    table_c2p,2048
  143.