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

  1. *  Budgie UK    chain2.s   last updated Aug 6 1990
  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\sp*.pi1",0  change d to a if necessary
  41. name1    dc.b    "a:\tunes_2\belg*.prg",0   this is the tune. (in $4d2) 
  42. name2    dc.b    "a:\goth*.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.w    #37,-(SP)    vsync routine
  129.     trap    #14        ok do it
  130.     addq.l    #2,SP        adjust stack
  131. ; wait for v/b to be certain
  132.  
  133.     move.w    #$07,-(sp)        getkey code
  134.     trap    #1        call o/s
  135.     addq.l    #2,sp
  136.  
  137.     move.l    $4ce+4,$210    store vector in a safe place like $210
  138.     clr.l    $4ce+4        kill vector: music stops
  139.     lea    $ff8800,a0    get sound chip address
  140.     move.b    #7,(a0)
  141.     move.b    #%11111111,2(a0) cut out any lingering noise...
  142.  
  143.     move.w    #37,-(SP)    vsync routine
  144.     trap    #14        ok do it
  145.     addq.l    #2,SP        adjust stack
  146. ; wait for v/b to be certain
  147.  
  148.     move.l #$8000000,$ff8800 
  149.     move.l #$9000000,$ff8800 
  150.     move.l #$a000000,$ff8800 
  151.  
  152. scrolldown
  153.     move.w    #27,d7        loop: 28 times
  154. .loop    move.l    $44e,a0        $44e is current screen
  155.     add.l    #-1280,a0    1280 is DIVISIBLE by 256 AND 160 !
  156.     move.l    a0,$45e        $45e is NEW screen pointer
  157.     move.w    #37,-(sp)    vsync call: during this interrupt, 
  158.     trap    #14        the value inside $45e will become 
  159.     addq.l    #2,sp        EFFECTIVE.
  160.     dbra    d7,.loop    d7 unlikely to be corrupted by call
  161.  
  162.     move.w    #$07,-(sp)        getkey
  163.     trap    #1        
  164.     addq.l    #2,sp
  165.  
  166.     move.l    $210,$4ce+4    retrieve vector: music restarts 
  167.  
  168. scrollup
  169.     move.w    #27,d7
  170. .loop    move.l    $44e,a0        this time, we scroll
  171.     add.l    #1280,a0    the other way
  172.     move.l    a0,$45e
  173.     move.w    #37,-(sp)    vsync 
  174.     trap    #14    
  175.     addq.l    #2,sp
  176.     dbra    d7,.loop    
  177.  
  178.     move.w    #$07,-(sp)        getkey
  179.     trap    #1        
  180.     addq.l    #2,sp
  181.  
  182.     move.l    #environment,-(sp)    call program one ie music
  183.     move.l    #environment,-(sp)  
  184.     pea    name2            whatever it is
  185.     move.w    #0,-(sp)    chain this routine
  186.     move.w    #$4b,-(sp)    execute it
  187.     trap    #1        
  188.     adda.l    #$10,sp
  189. ; above 'chained' prog can be anything.
  190.  
  191. error
  192. quit
  193.     move.l    #0,$4ce+4    music off    
  194.     lea    $ff8800,a0    get sound chip 
  195.     move.b    #7,(a0)
  196.     move.b    #%11111111,2(a0) cut out lingering noise
  197.     move.l #$8000000,$ff8800 
  198.     move.l #$9000000,$ff8800 
  199.     move.l #$a000000,$ff8800 
  200.  
  201.     move.w  res,-(sp)    old resolution back
  202.     move.l  #-1,-(sp)    no change in screen locations
  203.     move.l  #-1,-(sp)    physical or otherwise
  204.     move.w  #5,-(sp)
  205.     trap    #14        call o/s
  206.     add.l   #12,sp        ok screen now back as we found it
  207.  
  208.     movem.l    palette,d0-d7    get those original palette colours again
  209.     movem.l    d0-d7,$ff8240    and pass them to video chip
  210.     
  211. superout
  212.      move.l     super,-(SP)    retrieve user stack pointer
  213.      move.w     #$20,-(SP)
  214.      trap     #1
  215.      addq.l     #6,SP        we're now back in user mode
  216.  
  217.     clr.w    -(sp)        exit to desktop
  218.     trap    #1
  219.  
  220. *-------------------------------------
  221.  
  222. environment
  223.     dc.b    0,0,0,0,0,0 
  224.  
  225.     even
  226.  
  227. res    dc.w    0    the original resolution
  228. handle    dc.l    0    needed for opening files
  229. super    dc.l    0    the original stack pointer
  230. physbase    
  231.     dc.l    0    the original screen address at start of prog
  232. palette    ds.w    18
  233.     ds.w     256    512 bytes (more than enough) for our stack
  234. stack    dc.l     0    our private stack