home *** CD-ROM | disk | FTP | other *** search
/ The Amiga Demo Collection / TheAmigaDemoCollectionCDCUE.img / S / showtime05 / Bonus / BScreen.lha / Blitterscreen / BScreen.i < prev    next >
Text File  |  1992-12-20  |  17KB  |  726 lines

  1. *Routines:
  2.  
  3. *BScreenInit    inizializza copperlist
  4. *BScreenConvert    converte lo schermo chunky su schermo fisico
  5. *BScreenWait    aspetta che il processo di conversione
  6. *        fatto partire da BScreenConvert o BScreenReStart finisca
  7. *BScreenReStart    rifa' la conversione usando gli schermi usati
  8. *        l'ultima volta da BScreenConvert
  9.  
  10. *mk2xY  usata per inizializzare da BScreenInit
  11. *c2bs    usata per effettuare la conversione da BScreenConvert
  12.  
  13.  
  14. ;Costanti globali
  15. BScreenPlaneW        equ    320
  16. BScreenPlaneH        equ    256
  17. BScreenPlaneSize    equ    (BScreenPlaneW/8)*BScreenPlaneH
  18.  
  19. BScreenChunkyW        equ    160    ;Width of chunky screen
  20. BScreenChunkyH        equ    128    ;Height of chunky screen
  21. BScreenChunkySize    equ    BScreenChunkyW*BScreenChunkyH
  22.  
  23. BScreenYStart        equ    $28
  24.  
  25.  
  26.  
  27. ;**************
  28. ;Little macro to reduce code redundancies
  29. BScreenStartMacro    macro
  30.     move.w    #1,bltbsy    ;in case of calc faster than conversion
  31. .waitblt\@
  32.     btst.b    #6,$dff002
  33.     bne.s    .waitblt\@
  34.     move.w    #$8040,$dff09c    ;activate blit intreq
  35.     endm
  36.  
  37.  
  38. * -----------
  39.  
  40. ;****** Global variables ******
  41. bltpc dc.l 0  ;pointer to blitterinstructions to be done
  42. bltbsy dc.w 0 ;this is 0 if all blitter-passes are done
  43.  
  44.  
  45.  
  46. *******************************
  47. *Inizializza la copperlist (usare quella fatta apposta)
  48. *in base alle variabili settate all'inizio del modulo
  49. BScreenInit
  50.     movem.l    d2-d7/a2-a6,-(sp)
  51.  
  52. *--- Copy the Common Coplist section to the two buffers (do not touch a1)
  53.  
  54.     lea.l    BScreenCoplist,a0
  55.     lea.l    BScreenCoplist0,a2
  56.     lea.l    BScreenCoplist1,a3
  57.     lea.l    BScreenCoplist_End,a4
  58. .coploop
  59.     COLOR0    $a00
  60.     move.w    (a0),(a2)+        ;coplist 0
  61.     move.w    (a0)+,(a3)+        ;coplist 1
  62.     COLOR0    $000
  63.     cmpa.l    a0,a4            ;alla fine???
  64.     bne.s    .coploop
  65.  
  66.     move.l    a2,.cop0free
  67.     move.l    a3,.cop1free
  68.  
  69.  
  70. *--- Initialize the coptable used in Int3
  71.  
  72.     move.l    #BScreenCoplist0,BScreenCopTable
  73.     move.l    #BScreenCoplist1,BScreenCopTable+4
  74.  
  75.  
  76. *--- fill the two copperlists
  77.  
  78.     move.l    #BScreenYStart,d2    ;ystart 
  79.     move.l    #BScreenChunkyH,d3    ;anz lines
  80.     move.l    #BScreenPlaneW/8,d5    ;linesize
  81.  
  82.     move.l    #$01020010,d1        ;value for make bitplanes (first time)
  83.     move.l    .cop0free(PC),a0
  84.     lea.l    BScreenSpriteData0,a1
  85.     lea.l    BScreenSpriteBuffer0,a2    ;buffer per gli sprites di copertura
  86.     bsr    mk2xY            ;effettua i precalcoli e fa partire il blitter
  87.     move.l    #$fffffffe,(a0)+    ;istruzione di fine coplist
  88.  
  89.  
  90.     move.l    #$01020021,d1        ;value for make bitplanes (first time)
  91.     move.l    .cop1free(PC),a0
  92.     lea.l    BScreenSpriteData1,a1
  93.     lea.l    BScreenSpriteBuffer1,a2    ;buffer per gli sprites di copertura
  94.     bsr    mk2xY            ;effettua i precalcoli e fa partire il blitter
  95.     move.l    #$fffffffe,(a0)+    ;istruzione di fine coplist
  96.  
  97.  
  98.     movem.l    (sp)+,d2-d7/a2-a6
  99.     rts
  100.  
  101. .cop0free    ds.l    1
  102. .cop1free    ds.l    1
  103.  
  104.  
  105.  
  106.  
  107. ;**************************
  108. ;Converte schermo chunky su schermo fisico in formato speciale
  109. ;bisogna aver chiamato prima BScreenInit e settato la routine 
  110. ;di interrupt livello 3 predefinita
  111. ;IN:
  112. ;    a0    ^Schermo chunky da convertire
  113. ;    a1    ^Schermo planare su cui convertire inizializzato in BScreenInit
  114. BScreenConvert
  115.     movem.l d0-d7/a0-a6,-(sp)
  116.  
  117.     lea.l    BScreenList,a6
  118.  
  119.     lea.l    BScreenBuffer,a2
  120.     lea.l    BScreenScrambleBuffer,a3
  121.  
  122.     move.l    #BScreenChunkySize,d0
  123.     move.l    #BScreenPlaneSize,d1
  124.  
  125.     jsr c2bs            ;hehehe =:)) adios copperscreen...
  126.     movem.l (sp)+,d0-d7/a0-a6
  127.     rts
  128.  
  129.  
  130.  
  131.  
  132. ******************************************
  133. ;Io la richiamo in BScreenInit con i parametri gia' a posto
  134. *** 2xY: Make a special 2x2 or 2x1 screen ***
  135.  
  136. * NOTE: 2x2 or 2x1 depends on the modulo/doublescan-bit you chose
  137. * in header coplist! Also make sure sprites are 64bit, highest
  138. * pri, and chose the spritebank that got a dark color at offset 1
  139. * (col 1,17,33....)
  140.  
  141. * IN: ALL BUFFERS IN CHIPMEM!!!
  142.  
  143. * ^spritebuffer: A2 (size: 312*4*2*8)
  144. * ^Sprite data to use: A1
  145. * ^Coplist: A0
  146.  
  147. * first value of shift for coplist: D1.l    ($1020001 or $1020021)
  148. * Ystart: D2.l   number of lines (0-127): D3.w
  149. * linesize: D5.w
  150.  
  151.  
  152. mk2xY
  153.  
  154.     bsr    BScreen_mspr    ;gen cover-sprites in (a2)+ and copmoves in (a0)+
  155.  
  156.     bsr    BScreen_mbpl    ;gen planes ptr and lines shifters
  157.  
  158.     rts
  159. *
  160. * installa i puntatori ai bitplanes e tutti i waits sfasati
  161. * IN:
  162. * a0    ^coplist
  163. * d1.l    first value of shift (#$01020010 first time,#$01020021 the second)
  164. * d2.l    YStart
  165. * d3.w    num of lines
  166. * d5.w    linesize
  167. * OUT:
  168. * a0  ^primo byte libero della coplist dopo i dati installati
  169. *
  170. BScreen_mbpl
  171.     movem.l    d0-d7/a1-a6,-(sp)
  172.  
  173.     ext.l    d5 
  174.  
  175. * Generate waits and shifts with $102
  176.     and.l    #$ff,d2     ;maschera Y Start a modulo 256
  177.     sub.b    #1,d2         ;sub #1: prev line 
  178.     ror.l    #8,d2        ; $YY000000 
  179.     move.l    #$00e1fffe,d4     ;last X-Wait valid for copper
  180.     or.l    d2,d4        ; $YYe1fffe  Wait for copper
  181. *
  182.     move.w    d3,d0        ;num of lines
  183.     subq.w    #1,d0        ;ok for cicle
  184. .mf256yanz
  185. ;    move.l    #$01020010,d7    ;costant :  NOW d1 is used as input for this
  186.     move.w    #2-1,d6        ;two times
  187. .mf256do2
  188.     move.l    d4,(a0)+ 
  189.     add.l    #$01000000,d4    ;cwait
  190.     move.l    d1,(a0)+ 
  191.     eor.l    #$00000031,d1    ;horiz shift
  192.                      ;             ^---- 3: 1 -> 2 -> 1 -> 2 ....
  193.     dbra    d6,.mf256do2
  194.  
  195.     dbra    d0,.mf256yanz
  196.  
  197.     movem.l    (sp)+,d0-d7/a1-a6
  198.     rts
  199.  
  200. .mfloffs    dc.l    0
  201.  
  202.  
  203. *
  204. * Sprites that mask out doubleplane-data-rubbish
  205. * IN:
  206. * a0    coplist to cover
  207. * a1    ^ to sprite datas to insert (BScreenSpriteData0 the first time, BScreenSpriteData1 the second)
  208. * a2    sprite buffer (COPLIST: FMODE=$F, $dff104=$003f!)
  209. * OUT:
  210. * a0   first byte clear over the filled coplist
  211. * mksprites into sprbuf=(a2)+ and according coppermoves in (a0)+
  212. *
  213. BScreen_mspr
  214.     movem.l    d0-d7/a1-a6,-(sp)    ;no a0! coz *copl
  215.  
  216.     move.l    #$00968020,(a0)+    ;rehash sprites (for safety)
  217.  
  218.                 ;allinea sprbuf a multiplo di 16
  219.     move.l    a2,d0            ;indirizzo buffers per sprites
  220.     add.l    #15,d0            ;15 bytes dopo
  221.     and.l    #$fffffff0,d0        ;machero
  222.     move.l    d0,a2            ;align
  223.  
  224.     move.w    #$0120,d1        ;spr0pth
  225.  
  226.     move.w    #8-1,d7            ;sprcnt, numero sprites usati
  227. .mf2mkspr
  228. * cmoves for sprptr in copl
  229.  
  230.     move.l    a2,d0            ;indirizzo buffer
  231.     move.w    d1,(a0)+        ;registro in coplist ($120,$124,...)
  232.     addq.w    #2,d1            ;hiptr -> loptr
  233.     swap    d0            ;bit piu' significativi
  234.     move.w    d0,(a0)+        ;in coplist.
  235.     swap    d0            ;hiwd, bit meno significativi
  236.     move.w    d1,(a0)+        ;reg incoplist ($122,$126,...)
  237.     addq.w    #2,d1            ;next sprptr
  238.     move.w    d0,(a0)+        ;indirizzo basso on coplist
  239.  
  240. * make sprbuf    ;a1 ^sprdata    a2 ^coplist
  241.     move.l    (a1)+,(a2)+        ;ctl1    (vstart+hstart+null.w)
  242.     move.l    #0,(a2)+        ;dummy for 64bit fetchmode
  243.     move.l    (a1)+,(a2)+        ;ctl2    (vstop+ctrl+null.w)
  244.     move.l    #0,(a2)+        ;dummy for 64bit fetchmode
  245.  
  246.     move.l    (a1)+,d2        ;plane data 0
  247.     move.l    (a1)+,d3        ;plane data 1
  248.     move.l    d2,d4
  249.     ror.l    #1,d4            ;plane data 0 >> 1
  250.     move.l    d3,d5
  251.     ror.l    #1,d5            ;plane data 1 >> 1 (but!!! is ever 0!!!)
  252.  
  253.     move.w    #128-1,d6        ;number of lines to fill
  254. .mf2mksprdat
  255.     move.l    d2,(a2)+        ;plane data 0
  256.     move.l    d2,(a2)+        ;again (a line is 64 bit wide)
  257.     move.l    d3,(a2)+        ;plane data 1
  258.     move.l    d3,(a2)+        ;again
  259. ;2nd line, now fill the shifted line
  260.     move.l    d4,(a2)+        ;plane data 0
  261.     move.l    d4,(a2)+
  262.     move.l    d5,(a2)+        ;plane data 1
  263.     move.l    d5,(a2)+        ;2nd plane
  264.  
  265.     dbra d6,.mf2mksprdat        ;fill all lines
  266.  
  267.     move.l #$0,(a2)+        ;8 words nulle per fine sprite
  268.     move.l #$0,(a2)+
  269.     move.l #$0,(a2)+
  270.     move.l #$0,(a2)+
  271.  
  272.     dbra    d7,.mf2mkspr        ;do all sprites
  273.  
  274.     movem.l    (sp)+,d0-d7/a1-a6    ;ohne a0! weil *copl
  275.     rts
  276.  
  277. * ctl 1, ctl 2, plane 0, plane 1 (to be lsr'd for 2nd line)
  278. BScreenSpriteData0
  279.    dc.l $28400000,$a7020000,$aaaaaaaa,$00000000
  280.    dc.l $28600000,$a7020000,$aaaaaaaa,$00000000 ;1 & 2 nonattached, col 1 :)
  281.    dc.l $28800000,$a7020000,$aaaaaaaa,$00000000
  282.    dc.l $28800000,$a7820000,$00000000,$00000000
  283.    dc.l $28a00000,$a7020000,$aaaaaaaa,$00000000
  284.    dc.l $28a00000,$a7820000,$00000000,$00000000
  285.    dc.l $28c00000,$a7020000,$aaaaaaaa,$00000000
  286.    dc.l $28c00000,$a7820000,$00000000,$00000000
  287.  
  288. BScreenSpriteData1
  289.    dc.l $28400000,$a7020000,$55555555,$00000000
  290.    dc.l $28600000,$a7020000,$55555555,$00000000 ;1 & 2 nonattached, col 1 :)
  291.    dc.l $28800000,$a7020000,$55555555,$00000000
  292.    dc.l $28800000,$a7820000,$00000000,$00000000
  293.    dc.l $28a00000,$a7020000,$55555555,$00000000
  294.    dc.l $28a00000,$a7820000,$00000000,$00000000
  295.    dc.l $28c00000,$a7020000,$55555555,$00000000
  296.    dc.l $28c00000,$a7820000,$00000000,$00000000
  297.  
  298.  
  299.  
  300.  
  301. **************************************
  302. ;Io la richiamo in BScreenConvert
  303. *** non-scrambled chunky-to-planar ***
  304. * not really c2p (!), destination is special 2x2 or 2x1 screen
  305. *
  306. * IN: ALL BUFFERS IN CHIPMEM *except blitterlist (a6)*  !!!
  307. *
  308. *  a3: scramble-buffer at size of chunky buffer
  309. *
  310. * other regs identical to sc2bs ! they are:
  311. *
  312. *  a6: blitter-list buffer (size: less than 2k)
  313. *  a0: chunky buffer  a1: screen  a2: pass-buffer (half size of chunky buffer)
  314. *  d0.l: number of chunky pixels  d1.l: planeoffset
  315.  
  316. c2bs
  317.     tst.w    bltbsy 
  318.     bne.s    c2bs    ;for the very unlikely case your mapping-
  319.             ;engine renders faster than blitterc2p ;)
  320.                                                       
  321.     move.l    a6,bltpc    ;handler starts at bltpc
  322.  
  323.     movem.l    d0-d1/a0-a3,-(sp)
  324.     move.l    a3,a4        ;well....
  325.  
  326. *** init values
  327.  
  328.    move.l #$04000096,(a6)+
  329.    move.l #$80400096,(a6)+
  330.  
  331.    move.l #$ffff0044,(a6)+
  332.    move.l #$ffff0046,(a6)+
  333.  
  334. *** scrambling passes
  335. ;subpass 1
  336.   lea (a0),a3
  337.    move.l a3,(a6)+ 
  338.  move.w #$004c,-2(a6) ;B
  339.    move.w a3,(a6)+ 
  340.  move.w #$004e,(a6)+
  341.   lea 4(a0),a3
  342.    move.l a3,(a6)+ 
  343.  move.w #$0050,-2(a6) ;A
  344.    move.w a3,(a6)+ 
  345.  move.w #$0052,(a6)+
  346.   lea (a4),a3
  347.    move.l a3,(a6)+ 
  348.  move.w #$0054,-2(a6) ;D
  349.    move.w a3,(a6)+ 
  350.  move.w #$0056,(a6)+
  351.  
  352.    move.l #$8de40040,(a6)+
  353.    move.l #$00000042,(a6)+
  354.    move.l #$00ff0070,(a6)+ ;cdat
  355.  
  356.    move.l #$00060064,(a6)+ 
  357.  move.l #$00060062,(a6)+ ;a/b mod
  358.    move.l #$00060066,(a6)+ ;d mod
  359.  
  360.    move.l d0,d6 
  361.  lsr.l #3,d6 ;1/4 of scr, words => /8
  362.    move.w d6,(a6)+
  363.    move.w #$5C,(a6)+       ;SIZV
  364.  
  365.    move.l #$0001005E,(a6)+ ;SIZH+start
  366.  
  367. ;subpass2
  368.   lea 2(a0),a3
  369.    move.l a3,(a6)+ 
  370.  move.w #$004c,-2(a6) ;B
  371.    move.w a3,(a6)+ 
  372.  move.w #$004e,(a6)+
  373.   lea 6(a0),a3
  374.    move.l a3,(a6)+ 
  375.  move.w #$0050,-2(a6) ;A
  376.    move.w a3,(a6)+ 
  377.  move.w #$0052,(a6)+
  378.   lea 2(a4),a3
  379.    move.l a3,(a6)+ 
  380.  move.w #$0054,-2(a6) ;D
  381.    move.w a3,(a6)+ 
  382.  move.w #$0056,(a6)+
  383.  
  384.    move.l #$8de40040,(a6)+
  385.    move.l #$00000042,(a6)+
  386.    move.l #$00ff0070,(a6)+ ;cdat
  387.  
  388.    move.l #$00060064,(a6)+ 
  389.  move.l #$00060062,(a6)+ ;a/b mod
  390.    move.l #$00060066,(a6)+ ;d mod
  391.  
  392.    move.l d0,d6 
  393.  lsr.l #3,d6 ;1/4 of scr, words => /8
  394.    move.w d6,(a6)+
  395.    move.w #$5C,(a6)+       ;SIZV
  396.  
  397.    move.l #$0001005E,(a6)+ ;SIZH+start
  398.  
  399. ;subpass 3
  400.   lea -4(a0,d0.l),a3
  401.    move.l a3,(a6)+ 
  402.  move.w #$004c,-2(a6) ;B
  403.    move.w a3,(a6)+ 
  404.  move.w #$004e,(a6)+
  405.   lea -8(a0,d0.l),a3
  406.    move.l a3,(a6)+ 
  407.  move.w #$0050,-2(a6) ;A
  408.    move.w a3,(a6)+ 
  409.  move.w #$0052,(a6)+
  410.   lea -4(a4,d0.l),a3
  411.    move.l a3,(a6)+ 
  412.  move.w #$0054,-2(a6) ;D
  413.    move.w a3,(a6)+ 
  414.  move.w #$0056,(a6)+
  415.  
  416.    move.l #$8de40040,(a6)+
  417.    move.l #$00020042,(a6)+
  418.    move.l #$ff000070,(a6)+ ;cdat
  419.  
  420.    move.l #$00060064,(a6)+ 
  421.  move.l #$00060062,(a6)+ ;a/b mod
  422.    move.l #$00060066,(a6)+ ;d mod
  423.  
  424.    move.l d0,d6 
  425.  lsr.l #3,d6 ;1/4 of scr, words => /8
  426.    move.w d6,(a6)+
  427.    move.w #$5C,(a6)+       ;SIZV
  428.  
  429.    move.l #$0001005E,(a6)+ ;SIZH+start
  430.  
  431. ;subpass 4
  432.   lea -2(a0,d0.l),a3
  433.    move.l a3,(a6)+ 
  434.  move.w #$004c,-2(a6) ;B
  435.    move.w a3,(a6)+ 
  436.  move.w #$004e,(a6)+
  437.   lea -6(a0,d0.l),a3
  438.    move.l a3,(a6)+ 
  439.  move.w #$0050,-2(a6) ;A
  440.    move.w a3,(a6)+ 
  441.  move.w #$0052,(a6)+
  442.   lea -2(a4,d0.l),a3
  443.    move.l a3,(a6)+ 
  444.  move.w #$0054,-2(a6) ;D
  445.    move.w a3,(a6)+ 
  446.  move.w #$0056,(a6)+
  447.  
  448.    move.l #$8de40040,(a6)+
  449.    move.l #$00020042,(a6)+
  450.    move.l #$ff000070,(a6)+ ;cdat
  451.  
  452.    move.l #$00060064,(a6)+ 
  453.  move.l #$00060062,(a6)+ ;a/b mod
  454.    move.l #$00060066,(a6)+ ;d mod
  455.  
  456.    move.l d0,d6 
  457.  lsr.l #3,d6 ;1/4 of scr, words => /8
  458.    move.w d6,(a6)+
  459.    move.w #$5C,(a6)+       ;SIZV
  460.  
  461.    move.l #$0001005E,(a6)+ ;SIZH+start
  462.  
  463.  
  464. ***
  465.    movem.l (sp)+,d0-d1/a0-a3
  466.  
  467.    move.l a3,a0                  ;scrambled data is now there
  468.    bra sc2bsenter
  469.  
  470. *** scrambled chunky-to-planar =:) ***
  471.  
  472. sc2bs
  473.  
  474.     tst.w bltbsy 
  475.     bne sc2bs
  476.  
  477.     move.l a6,bltpc
  478.  
  479. sc2bsenter:
  480.  
  481. * IN: IN: ALL BUFFERS IN CHIPMEM *except blitterlist (a6)*  !!!
  482. *
  483. *  a6: blitter-list buffer (size: less than 2k)
  484. *  a0: chunky buffer  a1: screen  a2: pass-buffer (half size of chunky buffer)
  485. *  d0.l: number of chunky pixels  d1.l: planeoffset
  486.  
  487. *** init values
  488.    move.l #$04000096,(a6)+
  489.    move.l #$80400096,(a6)+
  490.  
  491.    move.l #$ffff0044,(a6)+
  492.    move.l #$ffff0046,(a6)+
  493.  
  494. ;offsets to end of buffers for blitter DESCing
  495.    move.l d0,d6                   ;len of chscr
  496.    move.l d6,d5 
  497.  lsr.l #1,d5     ;len of buf2
  498.    move.l d6,d4 
  499.  lsr.l #2,d4     ;len of 1 plane = 320*128/8, ok.
  500.  
  501. *** Pass 1, planes 7654
  502.  
  503.   lea (a0),a3
  504.    move.l a3,(a6)+ 
  505.  move.w #$004c,-2(a6) ;B
  506.    move.w a3,(a6)+ 
  507.  move.w #$004e,(a6)+
  508.   lea 2(a0),a3
  509.    move.l a3,(a6)+ 
  510.  move.w #$0050,-2(a6) ;A
  511.    move.w a3,(a6)+ 
  512.  move.w #$0052,(a6)+
  513.  
  514.    move.l a2,(a6)+ 
  515.  move.w #$0054,-2(a6) ;D
  516.    move.w a2,(a6)+ 
  517.  move.w #$0056,(a6)+
  518.  
  519.    move.l #$4de40040,(a6)+
  520.    move.l #$00000042,(a6)+
  521.    move.l #$0f0f0070,(a6)+ ;cdat
  522.  
  523.    move.l #$00020064,(a6)+ 
  524.  move.l #$00020062,(a6)+ ;a/b mod
  525.    move.l #$00000066,(a6)+ ;d mod
  526.  
  527.    move.w d4,(a6)+         ;d4: nr_pix/4 (words!)
  528.    move.w #$5C,(a6)+       ;SIZV
  529.  
  530.    move.l #$0001005E,(a6)+ ;SIZH+start
  531.  
  532. *** Pass 2, planes 76
  533.  
  534.   lea (a2),a3
  535.    move.l a3,(a6)+ 
  536.  move.w #$004c,-2(a6) ;B
  537.    move.w a3,(a6)+ 
  538.  move.w #$004e,(a6)+
  539.   lea 2(a2),a3
  540.    move.l a3,(a6)+ 
  541.  move.w #$0050,-2(a6) ;A
  542.    move.w a3,(a6)+ 
  543.  move.w #$0052,(a6)+
  544.   lea (a1),a3
  545.    add.w d1,a3 
  546.  add.w d1,a3 
  547.  add.w d1,a3   ;4th "doubleplane"
  548.    move.l a3,(a6)+ 
  549.  move.w #$0054,-2(a6) ;D
  550.    move.w a3,(a6)+ 
  551.  move.w #$0056,(a6)+
  552.  
  553.    move.l #$2de40040,(a6)+
  554.    move.l #$00000042,(a6)+
  555.    move.l #$33330070,(a6)+ ;cdat
  556.  
  557.    move.l #$00020064,(a6)+ 
  558.  move.l #$00020062,(a6)+ ;a/b mod
  559.    move.l #$00000066,(a6)+ ;d mod
  560.  
  561.    move.w d4,d0 
  562.  lsr.w #1,d0
  563.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  564.    move.w #$5C,(a6)+       ;SIZV
  565.  
  566.    move.l #$0001005E,(a6)+ ;SIZH+start
  567.  
  568. *** Pass 2, planes 54
  569.  
  570.   lea -2(a2,d5.l),a3
  571.    move.l a3,(a6)+ 
  572.  move.w #$004c,-2(a6) ;B
  573.    move.w a3,(a6)+ 
  574.  move.w #$004e,(a6)+
  575.   lea -4(a2,d5.l),a3
  576.    move.l a3,(a6)+ 
  577.  move.w #$0050,-2(a6) ;A
  578.    move.w a3,(a6)+ 
  579.  move.w #$0052,(a6)+
  580.   lea -2(a1,d4.l),a3
  581.   add.w d1,a3 
  582.  add.w d1,a3   ;3rd "doubleplane"
  583.    move.l a3,(a6)+ 
  584.  move.w #$0054,-2(a6) ;D
  585.    move.w a3,(a6)+ 
  586.  move.w #$0056,(a6)+
  587.  
  588.    move.l #$2de40040,(a6)+
  589.    move.l #$00020042,(a6)+                ;DESC
  590.    move.l #$cccc0070,(a6)+ ;cdat
  591.  
  592.    move.l #$00020064,(a6)+ 
  593.  move.l #$00020062,(a6)+ ;a/b mod
  594.    move.l #$00000066,(a6)+ ;d mod
  595.  
  596.    move.w d4,d0 
  597.  lsr.w #1,d0
  598.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  599.    move.w #$5C,(a6)+       ;SIZV
  600.  
  601.    move.l #$0001005E,(a6)+ ;SIZH+start
  602.  
  603. *** Pass 1, planes 3210
  604.  
  605.   lea -2(a0,d6.l),a3
  606.    move.l a3,(a6)+ 
  607.  move.w #$004c,-2(a6) ;B
  608.    move.w a3,(a6)+ 
  609.  move.w #$004e,(a6)+
  610.   lea -4(a0,d6.l),a3
  611.    move.l a3,(a6)+ 
  612.  move.w #$0050,-2(a6) ;A
  613.    move.w a3,(a6)+ 
  614.  move.w #$0052,(a6)+
  615.   lea -2(a2,d5.l),a3
  616.    move.l a3,(a6)+ 
  617.  move.w #$0054,-2(a6) ;D
  618.    move.w a3,(a6)+ 
  619.  move.w #$0056,(a6)+
  620.  
  621.    move.l #$4de40040,(a6)+
  622.    move.l #$00020042,(a6)+
  623.    move.l #$f0f00070,(a6)+ ;cdat
  624.  
  625.    move.l #$00020064,(a6)+ 
  626.  move.l #$00020062,(a6)+ ;a/b mod
  627.    move.l #$00000066,(a6)+ ;d mod
  628.  
  629.    move.w d4,(a6)+         ;d4: nr_pix/4 (words!)
  630.    move.w #$5C,(a6)+       ;SIZV
  631.  
  632.    move.l #$0001005E,(a6)+ ;SIZH+start
  633.  
  634. *** Pass 2, planes 32
  635.  
  636.   lea (a2),a3
  637.    move.l a3,(a6)+ 
  638.  move.w #$004c,-2(a6) ;B
  639.    move.w a3,(a6)+ 
  640.  move.w #$004e,(a6)+
  641.   lea 2(a2),a3
  642.    move.l a3,(a6)+ 
  643.  move.w #$0050,-2(a6) ;A
  644.    move.w a3,(a6)+ 
  645.  move.w #$0052,(a6)+
  646.   lea (a1),a3
  647.    add.w d1,a3   ;2nd "doubleplane"
  648.    move.l a3,(a6)+ 
  649.  move.w #$0054,-2(a6) ;D
  650.    move.w a3,(a6)+ 
  651.  move.w #$0056,(a6)+
  652.  
  653.    move.l #$2de40040,(a6)+
  654.    move.l #$00000042,(a6)+
  655.    move.l #$33330070,(a6)+ ;cdat
  656.  
  657.    move.l #$00020064,(a6)+ 
  658.  move.l #$00020062,(a6)+ ;a/b mod
  659.    move.l #$00000066,(a6)+ ;d mod
  660.  
  661.    move.w d4,d0 
  662.  lsr.w #1,d0
  663.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  664.    move.w #$5C,(a6)+       ;SIZV
  665.  
  666.    move.l #$0001005E,(a6)+ ;SIZH+start
  667.  
  668. *** Pass 2, planes 10
  669.  
  670.   lea -2(a2,d5.l),a3
  671.    move.l a3,(a6)+ 
  672.  move.w #$004c,-2(a6) ;B
  673.    move.w a3,(a6)+ 
  674.  move.w #$004e,(a6)+
  675.   lea -4(a2,d5.l),a3
  676.    move.l a3,(a6)+ 
  677.  move.w #$0050,-2(a6) ;A
  678.    move.w a3,(a6)+ 
  679.  move.w #$0052,(a6)+
  680.   lea -2(a1,d4.l),a3
  681.      ;1st "doubleplane"
  682.    move.l a3,(a6)+ 
  683.  move.w #$0054,-2(a6) ;D
  684.    move.w a3,(a6)+ 
  685.  move.w #$0056,(a6)+
  686.  
  687.    move.l #$2de40040,(a6)+
  688.    move.l #$00020042,(a6)+                ;DESC
  689.    move.l #$cccc0070,(a6)+ ;cdat
  690.  
  691.    move.l #$00020064,(a6)+ 
  692.  move.l #$00020062,(a6)+ ;a/b mod
  693.    move.l #$00000066,(a6)+ ;d mod
  694.  
  695.    move.w d4,d0 
  696.  lsr.w #1,d0
  697.    move.w d0,(a6)+         ;d4: nr_pix/8 (words!)
  698.    move.w #$5C,(a6)+       ;SIZV
  699.  
  700.    move.l #$0001005E,(a6)+ ;SIZH+start
  701.  
  702. *** end of initblit
  703.    move.l #0,(a6)+
  704.  
  705.     BScreenStartMacro
  706.     rts
  707.  
  708.  
  709. ;******************************
  710. ;Wait for previous phase of blitscreen to finish
  711. BScreenWait
  712. .loop
  713.     tst.w    bltbsy
  714.     bne.s    .loop
  715.     rts
  716.  
  717. ;******************************
  718. ;Start the conversion inizialized with c2bs another time
  719. ;with the same buffers
  720. BScreenReStart
  721.     move.l    #BScreenList,bltpc
  722.     BScreenStartMacro
  723.     rts
  724.  
  725.