home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / S / SHAPESFT / MSXMENU2.ZIP / MSXMENU2.MSA / CHAINS / CHAIN5.S < prev    next >
Text File  |  1985-11-20  |  7KB  |  252 lines

  1. *  Budgie UK    chain_5  (cycling) 
  2. *  
  3. *  a chain program which loads a tune, then a picture,
  4. *  waits for a key. When hit, scrolls screen down,
  5. *  cuts out the music interrupt, but stores it in $210
  6. *  waits for key again. When hit, scrolls screen back up 
  7. *  recalls the interrupt: move.l $210,$4ce+4
  8. *  or, in Basic, Loke $4ce+4,leek($210)
  9. *  Some earlier music by Goth was slotted in $4de.
  10. *  This latest bath (August 1990) uses the V/b slot at $4ce+4
  11. *  (ie $4d2) so please note.
  12.  
  13. *  View in medium res *
  14. *  comments (;) always FOLLOW the instructions
  15. *  Devpac 2 required to assemble
  16. *  Aug 2 1990   Music by Goth of The Shapeshifters
  17. * (c) Budgie UK , Camy Maertens and Shapeshifters
  18. *------------------------------------------**
  19.  
  20. * reallocate unused memory to Gemdos
  21. m_shrink
  22.     movea.l    A7,A5    
  23.     move.l     #stack,A7    
  24.     movea.l    4(A5),A5    
  25.     move.l    12(A5),D0    
  26.     add.l    20(A5),D0    
  27.     add.l    28(A5),D0    
  28.     addi.l    #256,D0        
  29.     move.l    D0,-(A7)    
  30.      move.l    A5,-(A7)    
  31.     clr.w    -(A7)        
  32.     move.w    #$4A,-(A7)    
  33.     trap    #1        
  34.     lea    $0C(A7),A7
  35. ; the above is the STANDARD gem start. We will only use the ram
  36. ; space that is strictly required. The rest may go back to gem.
  37.  
  38.     bra.s    start
  39.  
  40. name    dc.b    "a:\chains\wave*.pi1",0  change d to a if necessary
  41. name1    dc.b    "a:\tunes_2\colours.prg",0   this is the tune. 
  42. name2    dc.b    "a:\chains\poir*.prg",0       this is the main prog afterwards
  43.     even
  44. ; bra.s start means 'branch (short) to start'
  45. ; in order to skip the above labels, which are not instructions
  46. ; dc.b  means declare bytes
  47.  
  48. start    clr.l    -(sp)        Budgie progs ALWAYS run in supervisor
  49.      move.w #$20,-(sp)     
  50.      trap #1
  51.      addq.l #6,SP
  52.      move.l d0,super
  53.  
  54.     move.w  #4,-(sp)    get res
  55.     trap    #14
  56.     addq.l  #2,sp
  57.     move.w  d0,res        and save it
  58.  
  59.     movem.l    $ff8240,d0-d7     save palette
  60.     movem.l    d0-d7,palette
  61.  
  62.     move.l    #environment,-(sp)    call program one ie music
  63.     move.l    #environment,-(sp)  
  64.     pea    name1            whatever it is
  65.     move.w    #0,-(sp)    chain this routine
  66.     move.w    #$4b,-(sp)    execute it
  67.     trap    #1        
  68.     adda.l    #$10,sp
  69. ; above 'chained' prog can be anything.
  70.  
  71. setlowrez
  72.     clr.w    -(a7)        0=low res
  73.     move.l    $44e,-(A7)    -1=ignore physbase
  74.     move.l    $44e,-(A7)    -1=ignore logbase
  75.     move.w    #5,-(A7)
  76.     trap    #14        
  77.     lea    12(A7),A7
  78.  
  79.     dc.w    $a000
  80.     movea.l    8(a0),a0
  81.     clr.w    (a0)
  82.     dc.w    $a00a        hidemouse
  83.  
  84.     move.l    $44e,d0
  85.     move.l    d0,physbase    save original 'physbase'
  86.     sub.l    #32768,d0
  87.     move.l    d0,$45e        show blank screen
  88.  
  89. vsync    
  90.     move.w    #37,-(sp)
  91.     trap    #14
  92.     addq.l    #2,sp
  93.  
  94. * load a degas picture at a specific address 
  95.     move.w    #0,-(A7)    0 for open a file
  96.     move.l    #name,-(A7)    name of picture to be loaded
  97.     move.w    #$3D,-(A7)    code for open
  98.     trap    #1        ask o/s to do it
  99.     add.l    #8,sp        adjust stack pointer
  100.     move.w    d0,handle    store 'handle' returned in d0, in a safe place
  101.     tst.w    d0        test if negative by any chance...
  102.     bmi    error        if so: file not found: branch to error
  103.     move.w    #$007,$ff8240
  104.  
  105.     move.l    physbase,d0    load direct to this address
  106.     sub.l    #34,d0        or more precisely, here.
  107.     move.l    d0,-(sp)    pass load address to stack
  108.     move.l    #32066,-(A7)    read 32066 bytes (ie a degas picture)
  109.     move.w    handle,-(A7)    retrieve that handle    
  110.     move.w    #$3F,-(A7)    code for read    
  111.     trap    #1        ask o/s to do it
  112.     adda.l    #$C,A7        adjust stack pointer when all done
  113.  
  114.     move.w     handle,-(SP)    retrieve handle again
  115.     move.w     #$3E,-(SP)    code for close
  116.     trap     #1        ok do it
  117.     addq.l     #4,SP        adjust stack as ususal
  118.  
  119.     move.l    physbase,d0    put physbase address in a0
  120.     sub.l    #32,d0        deduct 16 words from it
  121.     move.l    d0,-(SP)    that's where the palette starts  
  122.     move.w    #6,-(SP)    call 'change palette' routine
  123.     trap    #14        ok
  124.     addq.l    #6,SP        all done
  125.  
  126.     move.l    physbase,$45e
  127.  
  128.     move.l    #r_loop,$4de    insert cycling v/b interrupt
  129.  
  130.     move.w    #37,-(SP)    vsync routine
  131.     trap    #14        ok do it
  132.     addq.l    #2,SP        adjust stack
  133. ; wait for v/b to be certain
  134.     bra    over
  135.  
  136. ************************************************************************
  137. *
  138. *     palette rotator prog
  139. *     rough & ready!
  140. *
  141. *************************************************************************
  142. * interrupt routine starts here
  143. r_loop    
  144.     sub.w    #1,bill
  145.     tst.w    bill
  146.     beq    ok
  147.     rts
  148.  
  149. ok    
  150.     move.w    #1,bill            speed of cycling 1=fast
  151.     move.l    a0,-(sp)
  152.     move.l    a1,-(sp)
  153.     move.l    d1,-(sp)
  154.  
  155.     lea    $ff8240,a0        a0 is hardware palette
  156.     lea    r_palette,a1        a1 is our palette, reserved later
  157.  
  158.     move.w    $00(a0),$00(a1)        border = same on new palette
  159.  
  160.     move.w    $1e(a0),$02(a1)        next one is hardware colour #15
  161.  
  162.     move.w    $02(a0),$04(a1)        the other 14 colours are
  163.     move.w    $04(a0),$06(a1)        shifted one word along
  164.     move.w    $06(a0),$08(a1)
  165.     move.w    $08(a0),$0a(a1)
  166.     move.w    $0a(a0),$0c(a1)
  167.     move.w    $0c(a0),$0e(a1)
  168.     move.w    $0e(a0),$10(a1)
  169.     move.w    $10(a0),$12(a1)
  170.     move.w    $12(a0),$14(a1)
  171.     move.w    $14(a0),$16(a1)
  172.     move.w    $16(a0),$18(a1)
  173.     move.w    $18(a0),$1a(a1)
  174.     move.w    $1a(a0),$1c(a1)
  175.     move.w    $1c(a0),$1e(a1)
  176.  
  177.     move.l    a1,$45a            present new palette at next vbi
  178.  
  179.     move.l    (sp)+,d1
  180.     move.l    (sp)+,a1
  181.     move.l    (sp)+,a0
  182.     rts
  183.  
  184. over    move.w    #$07,-(sp)        getkey
  185.     trap    #1        
  186.     addq.l    #2,sp
  187. error
  188. next    move.w  #1,-(sp)    MEDIUM res
  189.     move.l  #-1,-(sp)    no change in screen locations
  190.     move.l  #-1,-(sp)    physical or otherwise
  191.     move.w  #5,-(sp)
  192.     trap    #14        call o/s
  193.     add.l   #12,sp        ok screen now back as we found it
  194.     
  195.     clr.l    $4de        cycling off
  196.     move.w    #37,-(sp)    wait for vb to deactivate it
  197.     trap    #14
  198.     addq.l    #2,sp
  199.  
  200.     movem.l    palette,d0-d7    get those original palette colours again
  201.     movem.l    d0-d7,$ff8240    and pass them to video chip
  202.  
  203.     move.l    #environment,-(sp)    call program one ie music
  204.     move.l    #environment,-(sp)  
  205.     pea    name2            whatever it is
  206.     move.w    #0,-(sp)    chain this routine
  207.     move.w    #$4b,-(sp)    execute it
  208.     trap    #1        
  209.     adda.l    #$10,sp
  210.  
  211.     move.l    #0,$4ce+4    music off    
  212.     lea    $ff8800,a0    get sound chip 
  213.     move.b    #7,(a0)
  214.     move.b    #%11111111,2(a0) cut out lingering noise
  215.     move.l #$8000000,$ff8800 
  216.     move.l #$9000000,$ff8800 
  217.     move.l #$a000000,$ff8800 
  218.  
  219.     move.w  #-1,-(sp)    
  220.     move.l  #-1,-(sp)    no change in screen locations
  221.     move.l  #-1,-(sp)    physical or otherwise
  222.     move.w  #5,-(sp)
  223.     trap    #14        call o/s
  224.     add.l   #12,sp        ok screen now back as we found it
  225. superout
  226.      move.l     super,-(SP)    retrieve user stack pointer
  227.      move.w     #$20,-(SP)
  228.      trap     #1
  229.      addq.l     #6,SP        we're now back in user mode
  230.  
  231.     clr.w    -(sp)        exit to desktop
  232.     trap    #1
  233.  
  234. *-------------------------------------
  235. bill    dc.w    5
  236. environment
  237.     dc.b    0,0,0,0,0,0 
  238.  
  239.     even
  240.  
  241. res    dc.w    0    the original resolution
  242. handle    dc.l    0    needed for opening files
  243. super    dc.l    0    the original stack pointer
  244. physbase    
  245.     dc.l    0    the original screen address at start of prog
  246. ;    ds.w    256 
  247. palette    ds.w    18
  248.     ds.w     256    512 bytes (more than enough) for our stack
  249. stack    dc.l     0    our private stack
  250. r_palette
  251. ;    ds.w    218
  252.