home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff274.lzh / Snap / snapasm.s < prev    next >
Text File  |  1989-11-16  |  6KB  |  190 lines

  1.         XREF    _interpret       ; Bitmap-to-Ascii function
  2.         XREF    _CopyFont        ; Copies a font and aligns it to 16 bit.
  3.         XREF    _CharData        ; Font data
  4.         XREF    _SrcData
  5.         XREF    _CharLoc
  6.         XREF    _Modulo
  7.         XREF    _FontWidth
  8.         XREF    _FontHeight
  9.         XREF    _LoChar
  10.         XREF    _HiChar
  11.  
  12. _interpret:
  13.         link    a5,#0
  14.         movem.l d1-d6/a1,-(sp)   ; Free a couple of registers
  15.         move.l  8(a5),a1         ; Bitmap
  16.         move.w  (a1),d2          ; First row
  17.         moveq   #0,d4            ; Code
  18.         move.b  _LoChar,d4       ; First char
  19.         move.w  _FontWidth,d0
  20.         asl.w   #1,d0            ; Times two for words
  21.         lea     MaskTable,a0
  22.         adda.w  d0,a0
  23.         move.w  (a0),d3          ; d3 := mask
  24.         move.l  _CharData,a0     ; Char image data
  25. .Search
  26.         cmp.w   (a0),d2          ; Compare first word
  27.         bne     .tryinverted     ; Not this one
  28.         moveq   #1,d0            ; current word
  29.         moveq   #0,d6            ; Modulo
  30. .morerows
  31.         addq    #2,d6            ; Add modulo - next bit row in image data
  32.         move.w  (a0,d6.w),d1     ; Character row
  33.         cmp.w   (a1,d6.w),d1
  34.         bne     .tryinverted     ; Rows didn't match
  35.         addq    #1,d0            ; Next row in bitmap
  36.         cmp.w   _FontHeight,d0   ; Are we done?
  37.         bne     .morerows        ; Not yet
  38.         bra     .interpreted     ; Got it
  39.  
  40. .tryinverted
  41.         move.w  d2,d1            ; Copy first row
  42.         eor.w   d3,d1            ; and invert the bits
  43.         cmp.w   (a0),d1          ; Compare inverted rows
  44.         bne     .trybold         ; No match
  45.         moveq   #1,d0            ; current row
  46.         moveq   #0,d6            ; Modulo
  47. .moreinverted
  48.         addq    #2,d6
  49.         move.w  (a0,d6.w),d1     ; Character row
  50.         eor.w   d3,d1            ; and invert the bits
  51.         cmp.w   (a1,d6.w),d1
  52.         bne     .trybold         ; Rows didn't match
  53.         addq    #1,d0            ; Next row in bitmap
  54.         cmp.w   _FontHeight,d0   ; Are we done?
  55.         bne     .moreinverted    ; Not yet
  56.         bra     .interpreted     ; Got it
  57.  
  58. .trybold
  59.         move.w  d2,d1            ; Copy first row
  60.         lsr.w   #1,d1            ; Shift one step left
  61.         or.w    d2,d1            ; Make bold
  62.         and.w   d3,d1            ; and mask out unwanted bits
  63.         cmp.w   (a0),d1          ; Compare bold rows
  64.         bne     .trynext         ; No match
  65.         moveq   #1,d0            ; current row
  66.         moveq   #0,d6            ; Modulo
  67. .morebold
  68.         addq    #2,d6
  69.         move.w  (a0,d6.w),d1     ; Character row
  70.         lsr.w   #1,d1            ; Shift one step left
  71.         or.w    (a0,d6.w),d1     ; Make bold
  72.         and.w   d3,d1            ; and mask out unwanted bits
  73.         cmp.w   (a1,d6.w),d1
  74.         bne     .trynext         ; Rows didn't match
  75.         addq    #1,d0            ; Next row in bitmap
  76.         cmp.w   _FontHeight,d0   ; Are we done?
  77.         bne     .morebold        ; Not yet
  78.         bra     .interpreted     ; Got it
  79.  
  80. .trynext
  81.         adda.l  #32,a0           ; Try next character, 32 bytes/char
  82.         addq    #1,d4            ;
  83.         cmp.b   _HiChar,d4       ; Tried all chars?
  84.         bne     .Search          ; More to try
  85.         move.l  #255,d4          ; Not found
  86.  
  87. .interpreted
  88.         move.l  d4,d0
  89.         movem.l (sp)+,d1-d6/a1
  90.         unlk    a5
  91.         rts
  92.  
  93.  
  94. _CopyFont:
  95.         movem.l d2-d5/a2-a3,-(sp)   ; Free a couple of registers
  96.         moveq   #0,d0
  97.         move.l  _CharData,a2        ; a2 := Destination area
  98.         move.l  _CharLoc,a3
  99.         move.b  _LoChar,d5
  100.         move.w  _Modulo,d3
  101.  
  102. .NextChar
  103.         move.w  (a3),d0             ; Get char location
  104.         adda.w  #4,a3               ; To next, and skip width
  105.         move.w  d0,d1
  106.         and.w   #15,d1              ; Shift amount
  107.         eori.b  #15,d1              ; Negate shift value
  108.         addq.b  #1,d1               ; d1 := Shift Amount
  109.  
  110.         move.l  _SrcData,a0
  111.         lsr.w   #3,d0               ; Byte offset
  112.         bclr    #0,d0               ; But we deal in words
  113.         adda.w  d0,a0               ; a0 := chardata
  114.  
  115.         move.w  _FontWidth,d0
  116.         asl.w   #1,d0               ; Times two for words
  117.         lea     MaskTable,a1
  118.         adda.w  d0,a1
  119.         move.w  (a1),d2             ; d2 := mask
  120.  
  121.         moveq   #0,d4
  122.         move.w  _FontHeight,d4
  123.         move.l  a2,a1               ; a1 := Destination area
  124.         adda.w  #32,a2              ; a2 to next dest area
  125.         bra     .loop
  126. .copyrow
  127.         move.l  (a0),d0             ; Get character row
  128.         adda.w  d3,a0               ; Add modulo -- To next row
  129.         lsr.l   d1,d0               ; Shift data to bit 0 alignment
  130.         and.w   d2,d0               ; Mask out unwanted bits
  131.         move.w  d0,(a1)+            ; Save row
  132. .loop
  133.         dbra    d4,.copyrow         ; Do all rows
  134.  
  135.         addq    #1,d5               ; Next char
  136.         cmp.b   _HiChar,d5          ; Finished?
  137.         bne     .NextChar           ; Nope -- do next.
  138.         movem.l (sp)+,d2-d5/a2-a3
  139.         rts
  140.  
  141. MaskTable
  142.         dc.w    $0000
  143.         dc.w    $8000
  144.         dc.w    $c000
  145.         dc.w    $e000
  146.         dc.w    $f000
  147.         dc.w    $f800
  148.         dc.w    $fc00
  149.         dc.w    $fe00
  150.         dc.w    $ff00
  151.         dc.w    $ff80
  152.         dc.w    $ffc0
  153.         dc.w    $ffe0
  154.         dc.w    $fff0
  155.         dc.w    $fff8
  156.         dc.w    $fffc
  157.         dc.w    $fffe
  158.         dc.w    $ffff
  159.  
  160.  
  161.         dseg
  162.         XREF   _LVOActivateWindow
  163.         XREF   _LVOWindowToFront
  164.         XREF   _LVOWindowToBack
  165.         XREF   _lvoActivateWindow
  166.         XREF   _lvoWindowToFront
  167.         XREF   _lvoWindowToBack
  168.  
  169. ; Find out offsets for functions. Anybody know of a better way?
  170. _lvoActivateWindow   dc.w _LVOActivateWindow
  171. _lvoWindowToFront    dc.w _LVOWindowToFront
  172. _lvoWindowToBack     dc.w _LVOWindowToBack
  173.  
  174.         cseg
  175.  
  176.         XREF   _myActivateWindow
  177.         XREF   _myWindowToFront
  178.         XREF   _myWindowToBack
  179.  
  180. _myActivateWindow:
  181.         rts
  182.  
  183. _myWindowToFront:
  184.         rts
  185.  
  186. _myWindowToBack:
  187.         rts
  188.  
  189.         END
  190.