EmanueleBonin

GDM Copper!

Feb 1st, 2022 (edited)
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     SECTION GDM_COPPER_MOVE_V0,CODE
  2.  
  3. SYS_DISABLETSK  = -$78
  4. SYS_ENABLETSK   = -$7e
  5. SYS_OPENLIB     = -$198
  6. SYS_CLOSELIB    = -$19e
  7. SYS_GETCOPPER   = $26
  8.  
  9. COLUMN_WIDTH    = 12                ; Must be even
  10. BAR_HEIGHT      = 15
  11. COLOR_G         = $010              ; $RGB
  12. COLOR_D         = $001              ; $RGB
  13. COLOR_M         = $100              ; $RGB
  14.  
  15. RST_START       = $1d               ; $1d
  16. COL_START       = $07
  17.  
  18. BAR_01          = RST_START+BAR_HEIGHT
  19. BAR_02          = BAR_01+BAR_HEIGHT
  20. BAR_03          = BAR_02+BAR_HEIGHT
  21. BAR_04          = BAR_03+BAR_HEIGHT
  22. BAR_05          = BAR_04+BAR_HEIGHT
  23. BAR_06          = BAR_05+BAR_HEIGHT
  24. BAR_07          = BAR_06+BAR_HEIGHT
  25.  
  26. COLUMN_01       = COL_START+COLUMN_WIDTH        ; Must be Odd
  27. COLUMN_02       = COLUMN_01+COLUMN_WIDTH
  28. COLUMN_03       = COLUMN_02+COLUMN_WIDTH
  29. COLUMN_04       = COLUMN_03+COLUMN_WIDTH
  30. COLUMN_05       = COLUMN_04+COLUMN_WIDTH
  31. COLUMN_06       = COLUMN_05+COLUMN_WIDTH
  32. COLUMN_07       = COLUMN_06+COLUMN_WIDTH
  33. COLUMN_08       = COLUMN_07+COLUMN_WIDTH
  34. COLUMN_09       = COLUMN_08+COLUMN_WIDTH
  35. COLUMN_10       = COLUMN_09+COLUMN_WIDTH
  36. COLUMN_11       = COLUMN_10+COLUMN_WIDTH
  37. COLUMN_12       = COLUMN_11+COLUMN_WIDTH
  38. COLUMN_13       = COLUMN_12+COLUMN_WIDTH
  39. COLUMN_14       = COLUMN_13+COLUMN_WIDTH
  40.  
  41. RASTER_COUNT    = 62            ; Number of movements
  42. COPPER_VELOCITY = 2             ; number of raster line to skip from a frame to another must be even
  43.  
  44. RASTER_XCOUNT   = 50            ; Number of x movements
  45.  
  46. Start:
  47.     move.l  4.w,a6              ; Retrieve base address for system's routine, store it into a6
  48.     jsr SYS_DISABLETSK(a6)      ; Disable multitasking
  49.     lea GfxName(PC),a1          ; Retrieve library string's address to open ...
  50.     jsr SYS_OPENLIB(a6)         ; ... Open the library and save address to d0
  51.     move.l  d0,GfxBase          ; Save address to GfxBase
  52.     move.l  d0,a6               ; ... copy to a6
  53.     move.l  SYS_GETCOPPER(a6),SystemCopper  ; Get system copper address and save it to SystemCopper
  54.     move.l  #CustomCopperList,$dff080   ; Place custom copper list's address and store it to actual copper registry
  55.     move.w  d0,$dff088          ; activate the new custom copper list
  56.    
  57.     move.b  #RASTER_COUNT,GfxCopperCounter  ; Set movements counter
  58.     move.l  #COPPER_VELOCITY,GfxCopperDir
  59.  
  60.     move.b  #RASTER_XCOUNT,GfxXCounter  ; Set movements counter
  61.     move.l  #2,GfxXDir
  62.  
  63. Main_Loop:
  64.     cmpi.b  #$ff,$dff006        ; compare actual raster line with 255
  65.     bne.s   Main_Loop           ; ... if actual raster line isn't 255 wait for it ...
  66.  
  67.     sub.b   #1,GfxCopperCounter ; Subtract 1 from movements counter
  68.     bne     ChangeCopperX           ; MoveCopper if counter is not 0 ...
  69.     bsr     MoveCopper_ChangeYDir; else .... if counter has reached 0 then change dir
  70.  
  71. ChangeCopperX
  72.     sub.b   #1,GfxXCounter  ; Subtract 1 from movements counter
  73.     bne     MoveCopper          ; MoveCopper if counter is not 0 ...
  74.     bsr     MoveCopper_ChangeXDir; else .... if counter has reached 0 then change dir
  75.  
  76.  
  77. MoveCopper:
  78.     jsr MoveCopper_Forward                  ; Move copper according to GfxCopperDir
  79.  
  80.  
  81. MoveCopper_End:
  82.     btst    #6,$bfe001          ; left mouse button is pressed ? ...
  83.     bne.s   Main_Loop
  84.  
  85.                                 ; ... else exit from program ...   
  86.  
  87.     move.l  SystemCopper(PC),$dff080    ; Get saved system copper list ...
  88.     move.w  d0,$dff088          ; and reactivate it
  89.  
  90.     move.l  4.w,a6              ; Retrieve base address for system's routine, store it into a6
  91.     jsr SYS_ENABLETSK(a6)       ; Enable multitastink again
  92.    
  93.     move.l  GfxBase(PC),a1      ; get graphic library saved address and store it to a1
  94.     jsr SYS_CLOSELIB(a6)        ; close the graphic library
  95.     rts
  96.  
  97. MoveCopper_ChangeYDir
  98.     subq.l  #1,GfxCopperDir                 ; 2 Complements
  99.     eori.l  #$ffffffff,GfxCopperDir         ; Invert Sign of GfxCopperDir (+1/-1)
  100.  
  101.     move.b  #RASTER_COUNT,GfxCopperCounter  ; Re-Set movements counter
  102.     rts
  103.  
  104. MoveCopper_ChangeXDir
  105.     subq.l  #1,GfxXDir                  ; 2 Complements
  106.     eori.l  #$ffffffff,GfxXDir          ; Invert Sign of GfxXDir (+1/-1)
  107.  
  108.     move.b  #RASTER_XCOUNT,GfxXCounter  ; Re-Set movements counter
  109.     rts
  110.  
  111.  
  112. MoveCopper_Forward:             ; Move Copper list According to GfxCopperDir
  113.     lea     Bars,a0             ; Load into a0 Entire Address of copper list bars definition
  114.  
  115.     move.l  GfxCopperDir,d0     ; store into d0 the direction of YY copper
  116.     move.l  GfxXDir,d1          ; store into d1 the direction of XX copper
  117.  
  118.  
  119.  
  120.     rept    72*BAR_HEIGHT+1     ; assembler repetive directive 72 is the numbers of total consecutive waits on copper list
  121.     add.b   d0,(REPTN-1)*8(a0)  ; Change YY add GfxCopperDir Byte for every line defined on copper list
  122.     add.b   d1,(REPTN-1)*8+1(a0); Change XX add GfxXCopperDir Byte for every line defined on copper list   
  123.     tst.w   (REPTN-1)*8+6(a0)
  124.     beq.s   *+6
  125.     addq.w  #8,(REPTN-1)*8+6(a0); Change colors ....
  126.  
  127.     endr
  128.  
  129.     rts
  130.  
  131. GfxCopperCounter:
  132.     dc.b    0,0
  133. GfxCopperDir:
  134.     dc.w    0
  135.     dc.w    0
  136.  
  137. GfxXCounter:
  138.     dc.b    0,0
  139. GfxXDir:
  140.     dc.w    0
  141.     dc.w    0
  142.  
  143. GfxName:
  144.     dc.b    "graphics.library",0,0 
  145.  
  146. GfxBase:        ; Address for graphic library base address
  147.     dc.l    0  
  148.  
  149. SystemCopper:   ; Address of system copper list
  150.     dc.l    0
  151.  
  152.     SECTION GRAPHIC,DATA_C
  153.  
  154. CustomCopperList:
  155.     dc.w    $100,$200           ; BPLCON0 Only color 0
  156.     dc.w    $180,$000           ; COLOR0 - Start with black
  157.             ; $1b is the first visible raster line
  158.             ; $33 is the first pixel visible column (** odd coordinates only!! **)
  159.             ; Wait          : YYXX,$fffe
  160.             ; Assign color 0: $180,Color ($180 stand for $dff180)  
  161.  
  162. ;   G   G           D   D           M               M   1    8
  163. ;G                  D       D       M   M       M   M   2   10
  164. ;G                  D       D       M       M       M   3   12
  165. ;G                  D       D       M               M   4   10
  166. ;G      G   G       D       D       M               M   5   12
  167. ;G          G       D       D       M               M   6   12
  168. ;   G   G           D   D           M               M   7    8
  169. ;                                                           72
  170. ;1  2   3   4   5   6   7   8   9   0   1   2   3   4
  171. Bars:
  172. ; Bar 1 8 Waits
  173.     rept BAR_HEIGHT
  174.         dc.b    RST_START+REPTN-1
  175.         dc.b    COLUMN_01
  176.         dc.w    $fffe                           ; wait ....
  177.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  178.  
  179.         dc.b    RST_START+REPTN-1
  180.         dc.b    COLUMN_03
  181.         dc.w    $fffe
  182.         dc.w    $180,$000
  183.  
  184.         dc.b    RST_START+REPTN-1
  185.         dc.b    COLUMN_05
  186.         dc.w    $fffe                           ; wait ....
  187.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  188.  
  189.         dc.b    RST_START+REPTN-1
  190.         dc.b    COLUMN_07
  191.         dc.w    $fffe
  192.         dc.w    $180,$000
  193.  
  194.         dc.b    RST_START+REPTN-1
  195.         dc.b    COLUMN_09
  196.         dc.w    $fffe                           ; wait ....
  197.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  198.  
  199.         dc.b    RST_START+REPTN-1
  200.         dc.b    COLUMN_10
  201.         dc.w    $fffe
  202.         dc.w    $180,$000
  203.  
  204.         dc.b    RST_START+REPTN-1
  205.         dc.b    COLUMN_13
  206.         dc.w    $fffe                           ; wait ....
  207.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  208.  
  209.         dc.b    RST_START+REPTN-1
  210.         dc.b    COLUMN_14
  211.         dc.w    $fffe
  212.         dc.w    $180,$000
  213.     endr
  214. ; Bar 2 10 Waits
  215.     rept BAR_HEIGHT
  216.         dc.b    BAR_01+REPTN-1
  217.         dc.b    COL_START
  218.         dc.w    $fffe                           ; wait ....
  219.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  220.  
  221.         dc.b    BAR_01+REPTN-1
  222.         dc.b    COLUMN_01
  223.         dc.w    $fffe
  224.         dc.w    $180,$000
  225.  
  226.         dc.b    BAR_01+REPTN-1
  227.         dc.b    COLUMN_05
  228.         dc.w    $fffe                           ; wait ....
  229.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  230.  
  231.         dc.b    BAR_01+REPTN-1
  232.         dc.b    COLUMN_06
  233.         dc.w    $fffe
  234.         dc.w    $180,$000
  235.  
  236.         dc.b    BAR_01+REPTN-1
  237.         dc.b    COLUMN_07
  238.         dc.w    $fffe                           ; wait ....
  239.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  240.  
  241.         dc.b    BAR_01+REPTN-1
  242.         dc.b    COLUMN_08
  243.         dc.w    $fffe
  244.         dc.w    $180,$000
  245.  
  246.  
  247.         dc.b    BAR_01+REPTN-1
  248.         dc.b    COLUMN_09
  249.         dc.w    $fffe                           ; wait ....
  250.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  251.  
  252.         dc.b    BAR_01+REPTN-1
  253.         dc.b    COLUMN_11
  254.         dc.w    $fffe
  255.         dc.w    $180,$000
  256.  
  257.         dc.b    BAR_01+REPTN-1
  258.         dc.b    COLUMN_12
  259.         dc.w    $fffe                           ; wait ....
  260.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  261.  
  262.         dc.b    BAR_01+REPTN-1
  263.         dc.b    COLUMN_14
  264.         dc.w    $fffe
  265.         dc.w    $180,$000
  266.     endr
  267. ; Bar 3 12 Waits
  268.     rept BAR_HEIGHT
  269.         dc.b    BAR_02+REPTN-1
  270.         dc.b    COL_START
  271.         dc.w    $fffe                           ; wait ....
  272.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  273.  
  274.         dc.b    BAR_02+REPTN-1
  275.         dc.b    COLUMN_01
  276.         dc.w    $fffe
  277.         dc.w    $180,$000
  278.  
  279.         dc.b    BAR_02+REPTN-1
  280.         dc.b    COLUMN_05
  281.         dc.w    $fffe                           ; wait ....
  282.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  283.  
  284.         dc.b    BAR_02+REPTN-1
  285.         dc.b    COLUMN_06
  286.         dc.w    $fffe
  287.         dc.w    $180,$000
  288.  
  289.         dc.b    BAR_02+REPTN-1
  290.         dc.b    COLUMN_07
  291.         dc.w    $fffe                           ; wait ....
  292.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  293.  
  294.         dc.b    BAR_02+REPTN-1
  295.         dc.b    COLUMN_08
  296.         dc.w    $fffe
  297.         dc.w    $180,$000
  298.  
  299.  
  300.         dc.b    BAR_02+REPTN-1
  301.         dc.b    COLUMN_09
  302.         dc.w    $fffe                           ; wait ....
  303.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  304.  
  305.         dc.b    BAR_02+REPTN-1
  306.         dc.b    COLUMN_10
  307.         dc.w    $fffe
  308.         dc.w    $180,$000
  309.  
  310.         dc.b    BAR_02+REPTN-1
  311.         dc.b    COLUMN_11
  312.         dc.w    $fffe                           ; wait ....
  313.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  314.  
  315.         dc.b    BAR_02+REPTN-1
  316.         dc.b    COLUMN_12
  317.         dc.w    $fffe
  318.         dc.w    $180,$000
  319.  
  320.         dc.b    BAR_02+REPTN-1
  321.         dc.b    COLUMN_13
  322.         dc.w    $fffe                           ; wait ....
  323.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  324.  
  325.         dc.b    BAR_02+REPTN-1
  326.         dc.b    COLUMN_14
  327.         dc.w    $fffe
  328.         dc.w    $180,$000
  329.     endr
  330. ; Bar 4 10 Waits
  331.     rept BAR_HEIGHT
  332.         dc.b    BAR_03+REPTN-1
  333.         dc.b    COL_START
  334.         dc.w    $fffe                           ; wait ....
  335.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  336.  
  337.         dc.b    BAR_03+REPTN-1
  338.         dc.b    COLUMN_01
  339.         dc.w    $fffe
  340.         dc.w    $180,$000
  341.  
  342.         dc.b    BAR_03+REPTN-1
  343.         dc.b    COLUMN_05
  344.         dc.w    $fffe                           ; wait ....
  345.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  346.  
  347.         dc.b    BAR_03+REPTN-1
  348.         dc.b    COLUMN_06
  349.         dc.w    $fffe
  350.         dc.w    $180,$000
  351.  
  352.         dc.b    BAR_03+REPTN-1
  353.         dc.b    COLUMN_07
  354.         dc.w    $fffe                           ; wait ....
  355.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  356.        
  357.         dc.b    BAR_03+REPTN-1
  358.         dc.b    COLUMN_08
  359.         dc.w    $fffe
  360.         dc.w    $180,$000
  361.  
  362.  
  363.         dc.b    BAR_03+REPTN-1
  364.         dc.b    COLUMN_09
  365.         dc.w    $fffe                           ; wait ....
  366.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  367.  
  368.         dc.b    BAR_03+REPTN-1
  369.         dc.b    COLUMN_10
  370.         dc.w    $fffe
  371.         dc.w    $180,$000
  372.  
  373.  
  374.         dc.b    BAR_03+REPTN-1
  375.         dc.b    COLUMN_13
  376.         dc.w    $fffe                           ; wait ....
  377.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  378.  
  379.         dc.b    BAR_03+REPTN-1
  380.         dc.b    COLUMN_14
  381.         dc.w    $fffe
  382.         dc.w    $180,$000
  383.     endr
  384. ; Bar 5 12 Waits
  385.     rept BAR_HEIGHT
  386.         dc.b    BAR_04+REPTN-1
  387.         dc.b    COL_START
  388.         dc.w    $fffe                           ; wait ....
  389.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  390.  
  391.         dc.b    BAR_04+REPTN-1
  392.         dc.b    COLUMN_01
  393.         dc.w    $fffe
  394.         dc.w    $180,$000
  395.  
  396.         dc.b    BAR_04+REPTN-1
  397.         dc.b    COLUMN_02
  398.         dc.w    $fffe                           ; wait ....
  399.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  400.  
  401.         dc.b    BAR_04+REPTN-1
  402.         dc.b    COLUMN_04
  403.         dc.w    $fffe
  404.         dc.w    $180,$000
  405.  
  406.         dc.b    BAR_04+REPTN-1
  407.         dc.b    COLUMN_05
  408.         dc.w    $fffe                           ; wait ....
  409.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  410.  
  411.         dc.b    BAR_04+REPTN-1
  412.         dc.b    COLUMN_06
  413.         dc.w    $fffe
  414.         dc.w    $180,$000
  415.  
  416.         dc.b    BAR_04+REPTN-1
  417.         dc.b    COLUMN_07
  418.         dc.w    $fffe                           ; wait ....
  419.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  420.  
  421.         dc.b    BAR_04+REPTN-1
  422.         dc.b    COLUMN_08
  423.         dc.w    $fffe
  424.         dc.w    $180,$000
  425.  
  426.  
  427.         dc.b    BAR_04+REPTN-1
  428.         dc.b    COLUMN_09
  429.         dc.w    $fffe                           ; wait ....
  430.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  431.  
  432.         dc.b    BAR_04+REPTN-1
  433.         dc.b    COLUMN_10
  434.         dc.w    $fffe
  435.         dc.w    $180,$000
  436.  
  437.  
  438.         dc.b    BAR_04+REPTN-1
  439.         dc.b    COLUMN_13
  440.         dc.w    $fffe                           ; wait ....
  441.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  442.  
  443.         dc.b    BAR_04+REPTN-1
  444.         dc.b    COLUMN_14
  445.         dc.w    $fffe
  446.         dc.w    $180,$000
  447.     endr
  448. ; Bar 6 13 Waits
  449.     rept BAR_HEIGHT
  450.         dc.b    BAR_05+REPTN-1
  451.         dc.b    COL_START
  452.         dc.w    $fffe                           ; wait ....
  453.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  454.  
  455.         dc.b    BAR_05+REPTN-1
  456.         dc.b    COLUMN_01
  457.         dc.w    $fffe
  458.         dc.w    $180,$000
  459.  
  460.         dc.b    BAR_05+REPTN-1
  461.         dc.b    COLUMN_03
  462.         dc.w    $fffe                           ; wait ....
  463.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  464.  
  465.         dc.b    BAR_05+REPTN-1
  466.         dc.b    COLUMN_04
  467.         dc.w    $fffe
  468.         dc.w    $180,$000
  469.  
  470.         dc.b    BAR_05+REPTN-1
  471.         dc.b    COLUMN_05
  472.         dc.w    $fffe                           ; wait ....
  473.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  474.  
  475.         dc.b    BAR_05+REPTN-1
  476.         dc.b    COLUMN_06
  477.         dc.w    $fffe
  478.         dc.w    $180,$000
  479.  
  480.         dc.b    BAR_05+REPTN-1
  481.         dc.b    COLUMN_07
  482.         dc.w    $fffe                           ; wait ....
  483.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  484.  
  485.         dc.b    BAR_05+REPTN-1
  486.         dc.b    COLUMN_08
  487.         dc.w    $fffe
  488.         dc.w    $180,$000
  489.  
  490.  
  491.         dc.b    BAR_05+REPTN-1
  492.         dc.b    COLUMN_09
  493.         dc.w    $fffe                           ; wait ....
  494.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  495.  
  496.         dc.b    BAR_05+REPTN-1
  497.         dc.b    COLUMN_10
  498.         dc.w    $fffe
  499.         dc.w    $180,$000
  500.  
  501.  
  502.         dc.b    BAR_05+REPTN-1
  503.         dc.b    COLUMN_13
  504.         dc.w    $fffe                           ; wait ....
  505.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  506.  
  507.         dc.b    BAR_05+REPTN-1
  508.         dc.b    COLUMN_14
  509.         dc.w    $fffe
  510.         dc.w    $180,$000
  511.     endr
  512. ; Bar 7 8 Waits
  513.     rept BAR_HEIGHT
  514.         dc.b    BAR_06+REPTN-1
  515.         dc.b    COLUMN_01
  516.         dc.w    $fffe                           ; wait ....
  517.         dc.w    $180,COLOR_G+(REPTN)*16     ; Color
  518.  
  519.         dc.b    BAR_06+REPTN-1
  520.         dc.b    COLUMN_03
  521.         dc.w    $fffe
  522.         dc.w    $180,$000
  523.  
  524.         dc.b    BAR_06+REPTN-1
  525.         dc.b    COLUMN_05
  526.         dc.w    $fffe                           ; wait ....
  527.         dc.w    $180,COLOR_D+(REPTN)        ; Color
  528.  
  529.         dc.b    BAR_06+REPTN-1
  530.         dc.b    COLUMN_07
  531.         dc.w    $fffe
  532.         dc.w    $180,$000
  533.  
  534.         dc.b    BAR_06+REPTN-1
  535.         dc.b    COLUMN_09
  536.         dc.w    $fffe                           ; wait ....
  537.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  538.  
  539.         dc.b    BAR_06+REPTN-1
  540.         dc.b    COLUMN_10
  541.         dc.w    $fffe
  542.         dc.w    $180,$000
  543.  
  544.  
  545.         dc.b    BAR_06+REPTN-1
  546.         dc.b    COLUMN_13
  547.         dc.w    $fffe                           ; wait ....
  548.         dc.w    $180,COLOR_M+(REPTN)*256        ; Color
  549.  
  550.         dc.b    BAR_06+REPTN-1
  551.         dc.b    COLUMN_14
  552.         dc.w    $fffe
  553.         dc.w    $180,$000
  554.     endr
  555.  
  556.     dc.b    BAR_06+BAR_HEIGHT
  557.     dc.b    COL_START
  558.     dc.w    $fffe                           ; wait ....
  559.     dc.w    $180,$000       ; Color
  560.  
  561.     dc.w    $FFFF,$FFFE                 ; End Of Custom Copper List
  562.  
  563.     end
  564.  
Add Comment
Please, Sign In to add comment