home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / sourcecode / german / duke.s < prev    next >
Text File  |  1995-03-17  |  6KB  |  281 lines

  1. ; --- New Bitplane Scrollroutine !
  2. ; --- written by Duke of T.L.C
  3. ; --- with many helps from the Mad Thinker
  4.  
  5. org $38000
  6. load $38000
  7.  
  8. ScrPlane1:  equ  $45000
  9.  
  10. ; ---- Special AMIGA Equates
  11. AbsExecBase=4      ; the only absolute address !
  12. Level3Int=$6c
  13. ; ---- Exec Library Vector Offsets
  14. Permit=-138
  15. Forbid=-132
  16. OpenLibrary=-408
  17. CloseLibrary=-414
  18. ; ---- Graphics Library Vector Offsets
  19. Text=-60
  20. SetFont=-66
  21. CloseFont=-78
  22. InitRastPort=-198
  23. InitBitMap=-390
  24. MovePen=-240
  25. ; ---- Diskfont Library Vectors
  26. OpenDiskFont=-30
  27. DMACON=$dff096
  28. ;  Initialize the libraries for system calls
  29. ;
  30.    move.l sp,initialSP  
  31.  
  32.    move.l AbsExecBase,a6         ; ExecLib Base
  33.    lea  GfxName,a1               ; addr. of library name
  34.    jsr  OpenLibrary(a6)          ; open it
  35.    move.l d0,GfxBase             ; store base pointer for use
  36.    move.l d0,d6                  ; save for use
  37. ;
  38. ; Open the Diskfont library
  39. ;
  40.    lea  FontLName,a1             ; name of library
  41.    jsr  OpenLibrary(a6)          ; do a open
  42.    move.l d0,DiskfontBase        ; store pointer
  43.    beq  FontErr
  44. ;
  45. ; Load the special font to in ram
  46. ;
  47.    move.l d0,a6            ; move library pointer
  48.    lea  TextAttr,a0        ; discription of font
  49.    jsr  OpenDiskFont(a6)
  50.    move.l d0,FontBase      ; addr of TextFont structure
  51.    beq  FontErr
  52. ;
  53. ;  Print the text in bit plane
  54. ;
  55.    move.l GfxBase,a6        ;  copy library base pointer
  56.    lea  BitMap,a0           ; addr of BitMap
  57.    moveq #1,d0              ; Depth of BitMap
  58.    move.l #480,d1           ; Width of BitMap
  59.    move.l #40,d2            ; Height of BitMap
  60.    jsr  InitBitMap(a6)      ; setup the structure
  61.  
  62.    move.l #ScrPlane1,a0     ; pointer to memory
  63.    move.l a0,Plane1         ; install in BitMap
  64.    move.l #8000/4-4,d0        ; clear memory 
  65. lok1:   clr.l (a0)+
  66.    dbra d0,lok1
  67.  
  68.    lea  RastPort,a1         ; my RastPort structure
  69.    jsr  InitRastPort(a6)
  70.    move.l #BitMap,R_BitMap  ; install pointer to BitMap
  71.  
  72.    lea  RastPort,a1   
  73.    move.l FontBase,a0       ; addr of TextFont
  74.    jsr  SetFont(a6)         ; install new font in RastPort
  75.  
  76. ; ---- Put text...
  77.  
  78. ;
  79. ; setup the new copper list (will be performed in next VBlank)
  80. ;
  81.    move.l AbsExecBase,a6
  82.    jsr  Forbid(a6)   ; stop multitasking
  83.  
  84.    move.l GfxBase,a0
  85.    add.l #$32,a0    ; point to LOFlist in GfxBase
  86.  
  87.    move.w #$0080,DMACON  ; stop Copper DMA
  88.    move.l (a0),OldCopper  ; pointer to old copper list
  89.    move.l #CopList,(a0)  ; my own Coppers..
  90.    move.w #$8080,DMACON   
  91. ;
  92. ;  blitter scrolling
  93. ;
  94.    move.l #str,c_ptr
  95. next:
  96.    bsr  put_char
  97.  
  98. akt:   btst   #14,$dff002
  99.    bne    akt
  100.  
  101.    move.l #$ffffffff,$dff044   ; first/last word mask
  102.    
  103.    move.l #$45002,$dff050      ; source A
  104.    move.l #buffer,$dff054      ; destination D
  105.  
  106.    move.w #02,$dff064
  107.    move.w #00,$dff066          ;  modulos
  108.  
  109.    move.w #$00,$dff042
  110.    move.w #$09f0,$dff040
  111.  
  112.    bsr    sync
  113.    move.w #25,d0
  114.    lsl.w  #6,d0
  115.    ori.w #29,d0               ; 30 words
  116.    move.w d0,$dff058
  117.  
  118.    move.w #$f,d7
  119. fine:
  120. akt2:  btst   #14,$dff002
  121.    bne    akt2
  122.    move.l #buffer,$dff050      ; source A
  123.    move.l #$45000,$dff054      ; destination D
  124.  
  125.    move.w #00,$dff064
  126.    move.w #02,$dff066          ;  modulos
  127.  
  128.    move.w #$00,$dff042
  129.    move.w d7,d6
  130.    lsl.w  #8,d6
  131.    lsl.w  #4,d6
  132.    ori.w  #$9f0,d6
  133.    move.w d6,$dff040
  134.  
  135.    bsr    sync
  136.    move.w #25,d0
  137.    lsl.w  #6,d0
  138.    ori.w #29,d0               ; 30 words
  139.    move.w d0,$dff058
  140. again:
  141.    move.b $bfe001,d0   ; wait until mouse button
  142.    move.b d0,d1
  143.    and.l #$40,d0
  144.    beq  raus
  145.  
  146.    move.l #$1000,d1
  147. ti1: dbra d1,ti1
  148.    sub.w #$1,d7
  149.    bpl   fine
  150.    bra   next
  151. raus:
  152. ;
  153. ;  reset all resources used!
  154. ;
  155.    move.l GfxBase,a0
  156.    add.l #$32,a0    ; point to LOFlist in GfxBase
  157.  
  158.    move.w #$0080,DMACON  ; stop Copper and Sound
  159.    move.l OldCopper,(a0)  ; restore pointer
  160.    move.w #$8080,DMACON  ; start again ...
  161.  
  162.    move.l AbsExecBase,a6
  163.    jsr  Permit(a6)   ; restart multitasking
  164. ;
  165. ;  Ready to give system back
  166. ;
  167.    move.l GfxBase,a6
  168.    move.l FontBase,a1   ; addr of font
  169.    jsr  CloseFont(a6)  ; font memory back to system
  170.  
  171.    move.l AbsExecBase,a6  ; Exec-Master-Program
  172.    move.l DiskfontBase,a1
  173.    jsr  CloseLibrary(a6) ; no need for Libraries!!
  174.    move.l GfxBase,a1
  175.    jsr  CloseLibrary(a6)
  176. ende:
  177.    move.l initialSP,sp
  178.    clr.l d0     ; E.T. phone home!!
  179.    ILLEGAL
  180. ;   rts
  181. ;
  182. ; ---- syncronize blitter with raster beam
  183. sync:
  184.    move.w $dff006,d4
  185.    lsr.w  #8,d4
  186.    cmp.b #$50,d4
  187.    bls   sync
  188.    rts  
  189. ;
  190. ; ---- put character to screen
  191. ;
  192. put_char:
  193.    move.l GfxBase,a6
  194.    move.l #448,d0             ; x pos
  195.    move.l #15,d1              ; y pos
  196.    lea  RastPort,a1       
  197.    jsr  MovePen(a6)
  198.  
  199.    lea  RastPort,a1          ; addr of structure
  200.  
  201.    move.l c_ptr,a0
  202.    move.l #2,d0              ; num of chars to put
  203.    jsr  Text(a6);
  204.    add.l  #2,c_ptr
  205.    cmp.l #str+250,c_ptr       ;HOW MANY TEXTBYTES ?
  206.    blo.s Duke                 ;jump out
  207.    move.l #str,c_ptr
  208. Duke:  rts
  209.  
  210. ; ---- Error ... assume that you use Intuition's DisplayAlert()
  211. ;
  212. FontErr:
  213.    move.l initialSP,sp
  214.    rts          ; try to escape (without hope!)
  215.  
  216. GfxName: DC.B 'graphics.library',0
  217.    even
  218. FontLName: DC.B 'diskfont.library',0
  219.    even
  220. ;
  221. ;  DISPLAY COPROCCESSOR INSTRUCTION LIST
  222. ;
  223. CopList:
  224.   DC.W $008e,$9c81    ; DIW Start 
  225.   DC.W $0090,$f4c1    ; DIW Stop 
  226.   DC.W $0092,$38      ; DDF Start 
  227.   DC.W $0094,$d0      ; DDF Stop 
  228.   DC.W $00e0,$0004
  229.   DC.W $00e2,$5002
  230.  
  231.   DC.W $0108,20
  232.   DC.W $0180,$28f    ; Background color
  233.   DC.W $0182,$fff
  234.   DC.W $0102,$000    ; Scroll delay 0
  235.   DC.W $0100,$1200   ; 1 Bit Plane
  236.   DC.W $ffff,$fffe
  237.  
  238. ; ---- Demo Text
  239. str: DC.B  'THIS IS A DEMO TEXT TO SHOW YOU THE MIGHTY SCROLL-'
  240.      DC.B  'ROUTINE WITH FULL BLITTER CONTROL!    WRITTEN BY D'
  241.      DC.B  'UKE OF THE LIGHT-CIRCLE ! IF YOU USE THIS ROUTINE,'
  242.      DC.B  ' PLEASE SET IN SOME GREETINGS TO US !!!           '
  243.      DC.B  '{} BY DUKE OF T.L.C IN 1941                       '
  244.  
  245.  
  246.  
  247.  
  248. len: equ *
  249.     even
  250. FontName:  DC.B 'tempfont.font',0
  251.     even
  252. TextAttr:
  253.     DC.L FontName
  254.     DC.W 8          ; hight of Font
  255.     DC.W 0
  256.  
  257. DiskfontBase: blk.l 1,0
  258. GfxBase: blk.l 1,0
  259. initialSP: blk.l 1,0
  260. OldCopper: blk.l 1,0
  261. FontBase: blk.l 1,0
  262. c_ptr:  blk.l 1,0
  263. ; Structures used by graphics.library
  264.  
  265. BitMap:
  266. BytesPerRow: blk.w 1,0
  267. Bytes:    blk.w 1,0
  268. Flags:    blk.b 1,0
  269. Depth:    blk.b 1,0
  270. Pad:      blk.w 1,0
  271. Plane1:   blk.l 1,0
  272. Planes:   blk.l 7,0
  273.  
  274. RastPort:  blk.l 1,0
  275. R_BitMap:  blk.l 1,0
  276.     blk.b 96,0            ; space for laber unused data
  277. buffer: blk.b 60*40,0
  278.  
  279.  
  280.