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">", "</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 ENDASMCode:;____[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,", "] NEXT X HSEROUT [13,10] NEXT Y HSEROUT [13,10] PAUSE 3000 GOTO Main




Bookmarks