Two dimensional arrays?


Results 1 to 13 of 13

Threaded View

  1. #4
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default Ok, Everyone break out their Butterfly Nets. :)

    Code:
    ; -- Working with 2D arrays ---
    
    <font color="#000000"><b>Width      </b><font color="#008000"><b>CON </b></font><font color="#800000"><b>8                      </b></font><font color="#0000FF"><b><i>; Number of bytes in a Row
    </i></b></font><b>Length     </b><font color="#008000"><b>CON </b></font><font color="#800000"><b>10                     </b></font><font color="#0000FF"><b><i>; Number of Rows in the array
    ;---------------------------------------------------------------------------
    </i></b></font><b>ArraySize  </b><font color="#008000"><b>CON </b></font><b>Width </b>* <b>Length         </b><font color="#0000FF"><b><i>; Total size of the array
    </i></b></font><b>MyArray    </b><font color="#008000"><b>VAR BYTE</b></font>[<b>ArraySize</b>]        <font color="#0000FF"><b><i>; The Array
    
    </i></b></font><b>Idx        </b><font color="#008000"><b>VAR BYTE                   </b></font><font color="#0000FF"><b><i>; Index, points to 1D array locations
    </i></b></font><b>Xidx       </b><font color="#008000"><b>VAR BYTE                   </b></font><font color="#0000FF"><b><i>; 2D column Index
    </i></b></font><b>Yidx       </b><font color="#008000"><b>VAR BYTE                   </b></font><font color="#0000FF"><b><i>; 2D row Index
    </i></b></font><b>ArrayData  </b><font color="#008000"><b>VAR BYTE                   </b></font><font color="#0000FF"><b><i>; holding register for array data
    
    ;----[Get a value from the 2D array]----------------------------------------
    </i></b></font><b>Get2D</b>:
        <b>Idx</b>=(<b>Yidx</b>*<b>Width</b>+<b>Xidx</b>) <font color="#008000"><b>MIN </b></font>(<b>ArraySize</b>-<font color="#800000"><b>1</b></font>) <font color="#0000FF"><b><i>; find Index, limit to ArraySize 
        </i></b></font><b>ArrayData </b>= <b>MyArray</b>(<b>Idx</b>)                <font color="#0000FF"><b><i>; retrieve value from the array
    </i></b></font><font color="#008000"><b>RETURN
    
    </b></font><font color="#0000FF"><b><i>;----[Put a value in the 2D array]------------------------------------------
    </i></b></font><b>Put2D</b>:
        <b>Idx</b>=(<b>Yidx</b>*<b>Width</b>+<b>Xidx</b>) <font color="#008000"><b>MIN </b></font>(<b>ArraySize</b>-<font color="#800000"><b>1</b></font>) <font color="#0000FF"><b><i>; find Index, limit to ArraySize 
        </i></b></font><b>MyArray</b>(<b>Idx</b>) = <b>ArrayData                </b><font color="#0000FF"><b><i>; store the value in the array
    </i></b></font><font color="#008000"><b>RETURN
    
    </b></font><font color="#0000FF"><b><i>;----[Set entire array to 0's]----------------------------------------------
    </i></b></font><b>Clear2D</b>:
        <font color="#008000"><b>FOR </b></font><b>Idx </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>TO </b></font><b>ArraySize</b>-<font color="#800000"><b>1
            </b></font><b>MyArray</b>(<b>Idx</b>) = <font color="#800000"><b>0
        </b></font><font color="#008000"><b>NEXT </b></font><b>Idx
    </b><font color="#008000"><b>RETURN
    
    </b></font><font color="#0000FF"><b><i>;----[Turn the Subroutines into Functions]----------------------------------
    </i></b></font><font color="#008000"><b>ASM
    </b></font><font color="#000080">#Get2D macro X, Y
        MOVE?BB   X, _Xidx                      </font><font color="#0000FF"><b><i>; copy users X value to Xidx
        </i></b></font><font color="#000080">MOVE?BB   Y, _Yidx                      </font><font color="#0000FF"><b><i>; copy users Y value to Yidx
        </i></b></font><font color="#000080">L?CALL    _Get2D                        </font><font color="#0000FF"><b><i>; call the Get subroutine
      </i></b></font><font color="#000080">endm                                      </font><font color="#0000FF"><b><i>; value is returned in ArrayData
    </i></b></font><font color="#000080">#define Get2D(X, Y)  #Get2D X, Y            </font><font color="#0000FF"><b><i>; allows paretheses in macro
    ;-----------------------
    </i></b></font><font color="#000080">#Put2D macro X, Y                           </font><font color="#0000FF"><b><i>; value should be in ArrayData
        </i></b></font><font color="#000080">MOVE?BB   X, _Xidx                      </font><font color="#0000FF"><b><i>; copy users X value to Xidx
        </i></b></font><font color="#000080">MOVE?BB   Y, _Yidx                      </font><font color="#0000FF"><b><i>; copy users Y value to Yidx
        </i></b></font><font color="#000080">L?CALL    _Put2D                        </font><font color="#0000FF"><b><i>; call the Put subroutine
      </i></b></font><font color="#000080">endm
    #define Put2D(X, Y)  #Put2D X, Y            </font><font color="#0000FF"><b><i>; allows paretheses in macro
    ;-----------------------
    </i></b></font><font color="#000080">#Clear2D macro
        L?CALL    _Clear2D                      </font><font color="#0000FF"><b><i>; call the Clear subroutine
      </i></b></font><font color="#000080">endm
    #define Clear2D()  #Clear2D
    </font><font color="#008000"><b>ENDASM
    
    </b></font>
    Code:
    <font color="#0000FF"><b><i>;____[The Main Program]_____________________________________________________
    
    </i></b></font><b>X        </b><font color="#008000"><b>VAR BYTE </b></font><b>SYSTEM
    Y        </b><font color="#008000"><b>VAR BYTE </b></font><b>SYSTEM
    
    Main</b>:
        @ <b>Clear2D                       </b><font color="#0000FF"><b><i>; clear the array
        
        </i></b></font><font color="#008000"><b>FOR </b></font><b>Y </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>TO </b></font><b>Length</b>-<font color="#800000"><b>1           </b></font><font color="#0000FF"><b><i>; fill the array with data
          </i></b></font><font color="#008000"><b>FOR </b></font><b>X </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>TO </b></font><b>Width</b>-<font color="#800000"><b>1
              </b></font><b>ArrayData </b>= <b>X             </b><font color="#0000FF"><b><i>; value to put in array
              </i></b></font>@ <b>Put2D</b>(<b>X</b>,<b>Y</b>)
          <font color="#008000"><b>NEXT </b></font><b>X
        </b><font color="#008000"><b>NEXT </b></font><b>Y
        
        </b><font color="#008000"><b>FOR </b></font><b>Y </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>TO </b></font><b>Length</b>-<font color="#800000"><b>1           </b></font><font color="#0000FF"><b><i>; Read data back and send to serial port
          </i></b></font><font color="#008000"><b>FOR </b></font><b>X </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>TO </b></font><b>Width</b>-<font color="#800000"><b>1
              </b></font>@ <b>Get2D</b>(<b>X</b>,<b>Y</b>)
              <font color="#008000"><b>HSEROUT </b></font>[<font color="#008000"><b>HEX2 </b></font><b>ArrayData</b>,<font color="#FF0000">&quot;, &quot;</font>]
          <font color="#008000"><b>NEXT </b></font><b>X
          </b><font color="#008000"><b>HSEROUT </b></font>[<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>]
        <font color="#008000"><b>NEXT </b></font><b>Y 
        </b><font color="#008000"><b>HSEROUT </b></font>[<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>]
    
        <font color="#008000"><b>PAUSE </b></font><font color="#800000"><b>3000
    </b></font><font color="#008000"><b>GOTO </b></font><b>Main</b>
    Code:
    [color=#0000FF][b][i];____[Working with 2D arrays]_____________________________________________________
    Width      CON 8                      ; Number of bytes in a Row
     Length     CON 10                     ; Number of Rows in the array
     ;---------------------------------------------------------------------------
     ArraySize  CON Width * Length         ; Total size of the array
     MyArray    VAR BYTE[ArraySize]        ; The Array
     
    Idx        VAR BYTE                   ; Index, points to 1D array locations
     Xidx       VAR BYTE                   ; 2D column Index
     Yidx       VAR BYTE                   ; 2D row Index
     ArrayData  VAR BYTE                   ; holding register for array data
     
    ;----[Get a value from the 2D array]----------------------------------------
     Get2D:
         Idx=(Yidx*Width+Xidx) MIN (ArraySize-1) ; find Index, limit to ArraySize 
        ArrayData = MyArray(Idx)                ; retrieve value from the array
     RETURN
     
    ;----[Put a value in the 2D array]------------------------------------------
     Put2D:
         Idx=(Yidx*Width+Xidx) MIN (ArraySize-1) ; find Index, limit to ArraySize 
        MyArray(Idx)=ArrayData                ; store the value in the array
     RETURN
     
    ;----[Set entire array to 0's]----------------------------------------------
     Clear2D:
         FOR Idx = 0 TO ArraySize-1
             MyArray(Idx)=0
         NEXT Idx
     RETURN
     
    ;----[Turn the Subroutines into Functions]----------------------------------
     ASM
     #Get2D macro X, Y
         MOVE?BB   X, _Xidx                      ; copy users X value to Xidx
         MOVE?BB   Y, _Yidx                      ; copy users Y value to Yidx
         L?CALL    _Get2D                        ; call the Get subroutine
       endm                                      ; value is returned in ArrayData
     #define Get2D(X, Y)  #Get2D X, Y            ; allows paretheses in macro
     ;-----------------------
     #Put2D macro X, Y                           ; value should be in ArrayData
         MOVE?BB   X, _Xidx                      ; copy users X value to Xidx
         MOVE?BB   Y, _Yidx                      ; copy users Y value to Yidx
         L?CALL    _Put2D                        ; call the Put subroutine
       endm
     #define Put2D(X, Y)  #Put2D X, Y            ; allows paretheses in macro
     ;-----------------------
     #Clear2D macro
         L?CALL    _Clear2D                      ; call the Clear subroutine
       endm
     #define Clear2D()  #Clear2D
     ENDASM
     
    
    Code:
    ;____[The Main Program]_____________________________________________________
    
    X        VAR BYTE SYSTEM
    Y        VAR BYTE SYSTEM
    
    Main:
        @ Clear2D                       ; clear the array
        
        FOR Y = 0 TO Length-1           ; fill the array with data
          FOR X = 0 TO Width-1
              ArrayData = X             ; value to put in array
              @ Put2D(X,Y)
          NEXT X
        NEXT Y
        
        FOR Y = 0 TO Length-1           ; Read data back and send to serial port
          FOR X = 0 TO Width-1
              @ Get2D(X,Y)
              HSEROUT [HEX2 ArrayData,&quot;, &quot;]
          NEXT X
          HSEROUT [13,10]
        NEXT Y 
        HSEROUT [13,10]
    
        PAUSE 3000
    GOTO Main
    Last edited by ScaleRobotics; - 3rd July 2012 at 13:30.
    DT

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts