
 1000  *  S.ARRAYS
 1010  *--------------------------------
 1020  CHRGET   .EQ $B1
 1030  CHKCOM   .EQ $DEBE
 1040  SYNCHR   .EQ $DEC0
 1050  PTRGET   .EQ $DFE3
 1060  GETARYPT .EQ $F7D9
 1070  PRNTAX   .EQ $F941
 1080  CROUT    .EQ $FD8E
 1090  PRHEX    .EQ $FDDA
 1100  COUT     .EQ $FDED
 1110  *--------------------------------
 1120  LENGTH       .EQ 0
 1130  STRING.ADDR  .EQ 1,2
 1140  ELEMENT.PNTR .EQ 3,4
 1150  ARRAY.END    .EQ 5,6
 1160  *--------------------------------
 1170         .OR $300
 1180  
 1190  START  LDA #X
 1200         STA $3F6
 1210         LDA /X
 1220         STA $3F7
 1230         RTS
 1240  *--------------------------------
 1250  *  GET ONE ARRAY ELEMENT
 1260  *--------------------------------
 1270  X      CMP #'X
 1280         BNE Y
 1290         JSR CHRGET
 1300         JSR CHKCOM      BE SURE COMMA IS NEXT
 1310         JSR PTRGET
 1320  *--------------------------------
 1330  *   NOW $83,84 POINTS AT A$(3,5)
 1340  *--------------------------------
 1350         LDY #0          FIRST BYTE IS STRING LENGTH
 1360         LDA ($83),Y     GET LENGTH
 1370         STA LENGTH
 1380         INY             NEXT TWO BYTES POINT
 1390         LDA ($83),Y     AT STRING VALUE
 1400         STA STRING.ADDR
 1410         INY
 1420         LDA ($83),Y
 1430         STA STRING.ADDR+1
 1440  *--------------------------------
 1450  *   NOW LET'S PRINT THE STRING, JUST FOR FUN
 1460  *--------------------------------
 1470         LDY #0
 1480  .1     CPY LENGTH
 1490         BCS .2          FINISHED
 1500         LDA (STRING.ADDR),Y
 1510         ORA #$80
 1520         JSR COUT
 1530         INY
 1540         BNE .1          ...ALWAYS
 1550  .2     JMP CROUT
 1560  *--------------------------------
 1570  *  GET ENTIRE ARRAY
 1580  *--------------------------------
 1590  Y      LDA #'Y
 1600         JSR SYNCHR
 1610         JSR CHKCOM
 1620         JSR GETARYPT
 1630  *--------------------------------
 1640  *   NOW $9B,9C HAVE ADDRESS OF START OF ARRAY
 1650  *   NEED TO MOVE POINTER UP TO FIRST ELEMENT
 1660  *--------------------------------
 1670         LDY #4       POINT AT LSB OF # DIMENSIONS
 1680         LDA ($9B),Y
 1690         ASL          DOUBLE IT (IGNORE MSB, #<120)
 1700         ADC #5       POINT AT FIRST ELEMENT
 1710         STA $9D
 1720         LDY #2       POINT AT LSB OF OFFSET
 1730         CLC          COMPUTE ADDRESS JUST PAST END OF ARRAY
 1740         LDA $9B
 1750         ADC ($9B),Y
 1760         STA ARRAY.END
 1770         LDA $9C      MSB
 1780         INY
 1790         ADC ($9B),Y
 1800         STA ARRAY.END+1
 1810  *--------------------------------
 1820  *      NOW COMPUTE FULL ADDRESS OF FIRST ELEMENT
 1830  *--------------------------------
 1840         CLC
 1850         LDA $9D
 1860         ADC $9B
 1870         STA ELEMENT.PNTR
 1880         LDA $9C
 1890         ADC #0
 1900         STA ELEMENT.PNTR+1
 1910  *--------------------------------
 1920  *      NOW WALK THROUGH STRINGS
 1930  *--------------------------------
 1940  .1     LDY #0                POINT AT FIRST ELEMENT
 1950         LDA (ELEMENT.PNTR),Y  GET LENGTH
 1960         STA LENGTH
 1970         INY
 1980         LDA (ELEMENT.PNTR),Y  GET ADDRESS
 1990         TAX
 2000         INY
 2010         LDA (ELEMENT.PNTR),Y
 2020         JSR PRNTAX
 2030         LDA #':+$80
 2040         JSR $FDED
 2050         LDA #' +$80
 2060         JSR $FDED
 2070         JSR $FDED
 2080         LDA LENGTH
 2090         JSR PRHEX
 2100         JSR CROUT
 2110  *--------------------------------
 2120         CLC
 2130         LDA #3
 2140         ADC ELEMENT.PNTR
 2150         STA ELEMENT.PNTR
 2160         LDA ELEMENT.PNTR+1
 2170         ADC #0
 2180         STA ELEMENT.PNTR+1
 2190  *--------------------------------
 2200         LDA ELEMENT.PNTR
 2210         CMP ARRAY.END
 2220         LDA ELEMENT.PNTR+1
 2230         SBC ARRAY.END+1
 2240         BCC .1
 2250         RTS

