home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / sources / 8planes / 8bitplane-screen.s next >
Text File  |  1980-01-10  |  5KB  |  291 lines

  1. ùúùúÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—ÿ÷–—    section prg,code_c
  2.     include "df1:sources/registres.s"
  3.  
  4. ;*************** INDEX FONCTIONS ***************
  5.  
  6. openlib=-552
  7. closelib=-414
  8. allocmem=-198
  9. freemem=-210
  10. permit=-138
  11. forbid=-132
  12.  
  13. ;*************** PARAMETRES DE L'ECRAN ***************
  14.  
  15. nbplane=8
  16. sizex=320
  17. sizey=256
  18.  
  19. startx=129                ;depart horizontal du tracé
  20. starty=45                ;depart vertical du tracé
  21.  
  22. tracex=320                ;largeur de l'image a tracer à ...
  23.                     ;... partir de startx
  24.  
  25. displayx=320                ;largeur de l'image a visualiser à ...
  26.                     ;... partir de startdisplayx
  27. displayy=sizey                ;hauteur de l'image a visualiser à ...
  28.                     ;... partir de starty
  29.  
  30. startdisplayx=129            ;debut horizontal visible de l'image
  31.  
  32. stopx=displayx+startdisplayx-256    ;fin horizontale visible de l'image 
  33. stopy=displayy+starty-256        ;fin verticale visible de l'image
  34.  
  35. ddf_strt=(startx-17)/2 
  36. ddf_stop=ddf_strt+(tracex/2-8)
  37.  
  38. modulo_pair=(sizex-tracex)/8
  39. modulo_impair=(sizex-tracex)/8
  40.  
  41. planesize=sizey*sizex/8
  42.  
  43. ;*************** CONSTANTES ***************
  44.  
  45. ;----- pas d'incrementation des couleurs -----
  46.  
  47. step_R=1
  48. step_G=1
  49. step_B=0
  50.  
  51. ;----- divers -----
  52.  
  53. execbase=$4
  54. memory=2+$10000
  55. copsize=8*2*(32+1)*4+10*4+8*nbplane+4
  56.  
  57. ;8*2*(32+1)*4 (palette de 256 couleurs)
  58. ;10*4 (parametres ecran)
  59. ;8*nbplane (adresses bitplanes)
  60. ;4 (FFFFFFFE)
  61.  
  62. ;*************** PROGRAMME PRINCIPAL ***************
  63.  
  64.     bsr.w init
  65.  
  66. ;----- attente -----
  67.  
  68. boucle:
  69.     btst #6,$bfe001
  70.     bne boucle
  71.  
  72.     bsr fin
  73.     rts
  74.  
  75. ;*************** INITIALISATION ***************
  76.  
  77. init:
  78.  
  79. ;----- forbid -----
  80.  
  81.     move.l execbase,a6
  82.     jsr forbid(a6)
  83.  
  84. ;----- reservation de la memoire copper -----
  85.  
  86.     move.l execbase,a6
  87.     move.l #copsize,d0
  88.     move.l #memory,d1
  89.     jsr allocmem(a6)
  90.     move.l d0,copadr
  91.  
  92. ;----- creation de la copperlist -----
  93.  
  94.     move.l copadr,a0
  95.  
  96.     moveq #0,d0        ;R
  97.     moveq #0,d1        ;G
  98.     moveq #0,d2        ;B
  99.     movea.l a0,a1
  100.     add.w #8*(32+1)*4,a0
  101.     moveq #8-1,d7
  102.  
  103. coploop1:
  104.     move.w buffer,d6
  105.     move.w #$0106,(a1)+
  106.     move.w d6,(a1)+
  107.     move.w #$0106,(a0)+
  108.     or.w #$0200,d6
  109.     move.w d6,(a0)+
  110.     add.w #$2000,buffer
  111.     move.w #$0180,d3
  112.     moveq #32-1,d6
  113.  
  114. coploop0:
  115.     move.w d3,(a1)+
  116.     move.w d0,d4
  117.     and.w #$00F0,d4
  118.     lsl.w #4,d4
  119.     move.w d1,d5
  120.     and.w #$00F0,d5
  121.     or.w d5,d4
  122.     move.w d2,d5
  123.     and.w #$00F0,d5
  124.     lsr.w #4,d5
  125.     or.w d5,d4
  126.     move.w d4,(a1)+
  127.  
  128.     move.w d3,(a0)+
  129.     move.w d0,d4
  130.     and.w #$000F,d4
  131.     lsl.w #8,d4
  132.     move.w d1,d5
  133.     and.w #$000F,d5
  134.     lsl.w #4,d5
  135.     or.w d5,d4
  136.     move.w d2,d5
  137.     and.w #$000F,d5
  138.     or.w d5,d4
  139.     move.w d4,(a0)+
  140.  
  141.     addq.w #step_R,d0
  142.     addq.w #step_G,d1
  143. ;    addq.w #step_B,d2
  144.     addq.w #2,d3
  145.  
  146.     dbf d6,coploop0
  147.     dbf d7,coploop1
  148.  
  149.     move.w #$008E,(a0)+        ;DIWSTRT
  150.     move.w #starty*256+startdisplayx,(a0)+
  151.     move.w #$0090,(a0)+        ;DIWSTOP
  152.     move.w #stopy*256+stopx,(a0)+
  153.     move.w #$0100,(a0)+        ;BPLCON0
  154.     moveq #0,d0
  155.     bset #4,d0
  156.     bset #9,d0
  157.     move.w d0,(a0)+
  158.     move.w #$0102,(a0)+        ;BPLCON1
  159.     move.w #$0000,(a0)+
  160.     move.w #$0104,(a0)+        ;BPLCON2
  161.     move.w #$0000,(a0)+
  162.     move.w #$0092,(a0)+        ;DDFSTRT
  163.     move.w #ddf_strt,(a0)+
  164.     move.w #$0094,(a0)+        ;DDFSTOP
  165.     move.w #ddf_stop,(a0)+
  166.     move.w #$0108,(a0)+        ;BPL1MOD
  167.     move.w #modulo_pair,(a0)+
  168.     move.w #$010A,(a0)+        ;BPL2MOD
  169.     move.w #modulo_impair,(a0)+
  170.     move.l #$01FC0000,(a0)+
  171.  
  172.     move.l #plane0adr,d0
  173.     move.w #$E0,(a0)+
  174.     swap d0
  175.     move.w d0,(a0)+
  176.     move.w #$E2,(a0)+
  177.     swap d0
  178.     move.w d0,(a0)+
  179.  
  180.     move.l #plane1adr,d0
  181.     move.w #$E4,(a0)+
  182.     swap d0
  183.     move.w d0,(a0)+
  184.     move.w #$E6,(a0)+
  185.     swap d0
  186.     move.w d0,(a0)+
  187.  
  188.     move.l #plane2adr,d0
  189.     move.w #$E8,(a0)+
  190.     swap d0
  191.     move.w d0,(a0)+
  192.     move.w #$EA,(a0)+
  193.     swap d0
  194.     move.w d0,(a0)+
  195.  
  196.     move.l #plane3adr,d0
  197.     move.w #$EC,(a0)+
  198.     swap d0
  199.     move.w d0,(a0)+
  200.     move.w #$EE,(a0)+
  201.     swap d0
  202.     move.w d0,(a0)+
  203.  
  204.     move.l #plane4adr,d0
  205.     move.w #$F0,(a0)+
  206.     swap d0
  207.     move.w d0,(a0)+
  208.     move.w #$F2,(a0)+
  209.     swap d0
  210.     move.w d0,(a0)+
  211.  
  212.     move.l #plane5adr,d0
  213.     move.w #$F4,(a0)+
  214.     swap d0
  215.     move.w d0,(a0)+
  216.     move.w #$F6,(a0)+
  217.     swap d0
  218.     move.w d0,(a0)+
  219.  
  220.     move.l #plane6adr,d0
  221.     move.w #$F8,(a0)+
  222.     swap d0
  223.     move.w d0,(a0)+
  224.     move.w #$FA,(a0)+
  225.     swap d0
  226.     move.w d0,(a0)+
  227.  
  228.     move.l #plane7adr,d0
  229.     move.w #$FC,(a0)+
  230.     swap d0
  231.     move.w d0,(a0)+
  232.     move.w #$FE,(a0)+
  233.     swap d0
  234.     move.w d0,(a0)+
  235.  
  236.     move.l #$FFFFFFFE,(a0)
  237.  
  238. ;modif DMA,...
  239.     
  240.     move.w #$03F0,dmacon        ;couper tous les DMA
  241.     move.l copadr,cop1lch        ;adresse coplist1
  242.     clr.w copjmp1            ;copjump1
  243.     move.w #$87C0,dmacon        ;COPEN et BPLEN et BLTPRI et BLTEN
  244.  
  245.     rts
  246.  
  247. ;*************** FIN DE PROGRAMME ***************
  248.  
  249. fin:    
  250.  
  251. ;----- restaurer la copperlist dos -----
  252.  
  253.     move.l execbase,a6
  254.     move.l #gfxname,a1
  255.     jsr openlib(a6)
  256.     move.l d0,a1
  257.     move.l 38(a1),cop1lch
  258.     clr.w copjmp1
  259.     jsr closelib(a6)
  260.  
  261. ;----- liberation de la memoire copper -----
  262.  
  263.     move.l copadr,a1
  264.     move.l #copsize,d0
  265.     jsr freemem(a6)
  266.  
  267. ;----- restaurer les canaux DMA -----
  268.  
  269.     move.w #$83F0,dmacon
  270.  
  271. ;----- permit -----
  272.  
  273.     jsr permit(a6)
  274.  
  275.     rts
  276.  
  277. ;*************** VARIABLES ***************
  278.  
  279. buffer:        dc.w 0
  280. plane0adr:    incbin "df1:graphics/plane0.raw"
  281. plane1adr:    incbin "df1:graphics/plane1.raw"
  282. plane2adr:    incbin "df1:graphics/plane2.raw"
  283. plane3adr:    incbin "df1:graphics/plane3.raw"
  284. plane4adr:    incbin "df1:graphics/plane4.raw"
  285. plane5adr:    incbin "df1:graphics/plane5.raw"
  286. plane6adr:    incbin "df1:graphics/plane6.raw"
  287. plane7adr:    incbin "df1:graphics/plane7.raw"
  288. copadr:        dc.l 0
  289. gfxname:    dc.b "graphics.library",0
  290.     even
  291.