mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2024-06-01 15:41:27 +00:00
0.2.0 updates: Arrays
- Some major bugfixes - more compact commenting - added required.lib, mac and hooks - changed array get routines to copy appropriate element to memory address designated as "return" - created .min versions of each file that has no comments to save space in large projects - reordered catalog alphabetically
This commit is contained in:
parent
e630924865
commit
795dc18833
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,18 +1,18 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DIM81 :: INIT 1D ARRAY *
|
||||
* ADIM81D : INIT 1D ARRAY *
|
||||
*- -*
|
||||
* CREATES AN ARRAY OF LENGTH *
|
||||
* :ASIZE WITH ELEMENTS OF *
|
||||
* LENGTH :ESIZE AT MEMORY *
|
||||
* [:ASIZE] WITH ELEMENTS OF *
|
||||
* LENGTH [:ESIZE] AT MEMORY *
|
||||
* LOCATION POINTED TO BY *
|
||||
* :ALOC. RETURNS ARRAY START *
|
||||
* LOCATION IF SUCCESSFUL IN A, *
|
||||
* OR 0FF IF UNSUCCESSFUL. *
|
||||
* [:ALOC]. RETURNS ARRAY START *
|
||||
* LOCATION IN .A *
|
||||
*- -*
|
||||
* FIRST BYTE OF MEMORY USED *
|
||||
* HOLDS LENGTH OF ARRAY; *
|
||||
* SECOND BYTE HOLDS LENGTH OF *
|
||||
* ELEMENTS. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -23,15 +23,15 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAYLOC *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #10 ; ARRAY SIZE *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEMENT SIZE *
|
||||
* PHA *
|
||||
* JSR DIM81 *
|
||||
* LDA #>$300 ; ARRAYLOC *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #10 ; ARRAY SIZE *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEMENT SIZE *
|
||||
* PHA *
|
||||
* JSR DIM81 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -51,15 +51,18 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LO BYTE OF ARRAY ADDR *
|
||||
* X = HI BYTE OF ARRAY ADDR *
|
||||
* A = TRASH *
|
||||
* .Y = LO BYTE OF ARRAY ADDR *
|
||||
* .X = HI BYTE OF ARRAY ADDR *
|
||||
* .A = ARRAY SIZE *
|
||||
* *
|
||||
* [RETURN] = TOTAL SIZE OF *
|
||||
* ARRAY IN BYTES (WORD) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM81
|
||||
ADIM81
|
||||
*
|
||||
** FIRST, CLEAR BLOCK OF MEM TO BE USED
|
||||
** THEN MUL ASIZE BY ESIZE, AND ADD 2 TO
|
||||
** THEN MUL [:ASIZE] BY [:ESIZE], AND ADD 2 TO
|
||||
** GET TOTAL MEMORY USED BY ARRAY
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
|
@ -82,13 +85,12 @@ DIM81
|
|||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDX #0
|
||||
LDA #0
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
*
|
||||
** MULTIPLY ASIZE AND ESIZE TO GET TOTAL SIZE
|
||||
** OF MEMORY TO CLEAR AND USE
|
||||
** MULTIPLY [:ASIZE] AND [:ESIZE] TO GET
|
||||
** TOTAL SIZE OF MEMORY TO CLEAR AND USE
|
||||
*
|
||||
:DOADD
|
||||
CLC
|
||||
|
@ -112,7 +114,7 @@ DIM81
|
|||
INX
|
||||
INX ; INCREASE BY TWO
|
||||
; TO MAKE ROOM FOR SIZES
|
||||
BCC :NOINY ; IF X ROLLS OVER, INC Y
|
||||
BCC :NOINY ; IF .X ROLLS OVER, INC .Y
|
||||
INY
|
||||
:NOINY
|
||||
STX :MSIZE ; LOW BYTE
|
||||
|
@ -169,6 +171,17 @@ DIM81
|
|||
*
|
||||
LDY ADDR1 ; LOW
|
||||
LDX ADDR1+1 ; HIGH
|
||||
LDA :ASZBAK
|
||||
*
|
||||
** STORE TOTAL ARRAY SIZE IN BYTES
|
||||
** IN MEMORY ALLOCATED FOR RETURN VALUES
|
||||
*
|
||||
LDA :MSIZE
|
||||
STA RETURN
|
||||
LDA :MSIZE+1
|
||||
STA RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN ; 2 BYTE LENGTH
|
||||
*
|
||||
RTS
|
||||
*
|
||||
|
@ -179,3 +192,4 @@ DIM81
|
|||
:ESIZE DS 1
|
||||
:ASZBAK DS 1
|
||||
:ESZBAK DS 1
|
||||
*
|
91
disks/disk3_arrays/T.ADIM81.MIN
Normal file
91
disks/disk3_arrays/T.ADIM81.MIN
Normal file
|
@ -0,0 +1,91 @@
|
|||
SKP 10
|
||||
ADIM81
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :ESIZE
|
||||
STA :ESZBAK
|
||||
PLA
|
||||
STA :ASIZE
|
||||
STA :ASZBAK
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA #0
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :ASIZE
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :ASIZE
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
CLC
|
||||
INX
|
||||
INX
|
||||
|
||||
BCC :NOINY
|
||||
INY
|
||||
:NOINY
|
||||
STX :MSIZE
|
||||
STY :MSIZE+1
|
||||
LDA #0
|
||||
LDX :MSIZE+1
|
||||
BEQ :PART
|
||||
LDY #0
|
||||
:FULL
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULL
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULL
|
||||
:PART
|
||||
LDX :MSIZE
|
||||
BEQ :MFEXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:MFEXIT
|
||||
LDY #0
|
||||
LDA :ASZBAK
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA :ESZBAK
|
||||
STA (ADDR1),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :ASZBAK
|
||||
LDA :MSIZE
|
||||
STA RETURN
|
||||
LDA :MSIZE+1
|
||||
STA RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
RTS
|
||||
:MSIZE DS 2
|
||||
:ASIZE DS 1
|
||||
:ESIZE DS 1
|
||||
:ASZBAK DS 1
|
||||
:ESZBAK DS 1
|
||||
SKP 10
|
|
@ -1,11 +1,12 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* AGET81 :: GET ARRAY ELEMENT *
|
||||
* ADDRESS *
|
||||
* AGET81 : GET ARRAY ELEMENT *
|
||||
* ADDRESS *
|
||||
*- -*
|
||||
* GETS THE ADDRESS LOCATION OF *
|
||||
* AN ELEMENT IN THE SPECIFIED *
|
||||
* ARRAY AT THE SPECIFIED INDEX *
|
||||
* GETS THE SPECIFIED ELEMENT *
|
||||
* OF THE ARRAY AND COPIES IT *
|
||||
* TO MEMORY DEDICATED TO *
|
||||
* RETURN VALUES. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -16,13 +17,13 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ;HI ARADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 ; LOW *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* JSR AGET81 *
|
||||
* LDA #>$300 ;HI ARADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 ; LOW *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* JSR AGET81 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -41,9 +42,12 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE OF ELEMENT ADDR *
|
||||
* X = HIBYTE OF ELEMENT ADDR *
|
||||
* A = TRASH *
|
||||
* .Y = LOBYTE OF ELEMENT ADDR *
|
||||
* .X = HIBYTE OF ELEMENT ADDR *
|
||||
* .A = LENGTH OF RETURN VAL *
|
||||
* *
|
||||
* [RETURN] VALUE FOUND AT *
|
||||
* SPECIFIED INDEX *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
AGET81
|
||||
|
@ -63,13 +67,15 @@ AGET81
|
|||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :IDX+1
|
||||
*
|
||||
** GET ELEMENT SIZE
|
||||
*
|
||||
LDY #1 ; ELEMENT SIZE LOC
|
||||
LDA (ADDR1),Y
|
||||
STA :ESIZE
|
||||
*
|
||||
STA RETLEN ; LENGTH OF RETURN VALUE
|
||||
*
|
||||
** FIRST, MUL INDEX BY ELEMENT SIZE,
|
||||
** THEN ADD TWO TO GET THE PROPER ADDRESS.
|
||||
|
@ -96,7 +102,7 @@ AGET81
|
|||
BCS :DOADD
|
||||
BNE :LP
|
||||
*
|
||||
** ARRAY INDEX STORED IN X (LOW) AND Y (HIGH)
|
||||
** INDEX STORED AT X (LOW) AND Y (HIGH)
|
||||
*
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
|
@ -122,11 +128,22 @@ AGET81
|
|||
ADC ADDR1+1
|
||||
STA :RES+1
|
||||
*
|
||||
** ADDRESS TO ARRAY ELEMENT IS STORED
|
||||
** IN Y (LOW BYTE), X (HIGH BYTE)
|
||||
** NOW MOVE SPECIFIED ELEMENT DATA TO THE
|
||||
** MEMORY LOCATION DEDICATED TO RETURN VALUES
|
||||
*
|
||||
LDY #0
|
||||
LDA :RES
|
||||
STA ADDR1
|
||||
LDA :RES+1
|
||||
STA ADDR1+1
|
||||
:LDLOOP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY RETLEN
|
||||
BCC :LDLOOP ; IF .Y <= RETLEN
|
||||
BEQ :LDLOOP ; KEEP LOOPING
|
||||
*
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
|
@ -135,6 +152,14 @@ AGET81
|
|||
LDA RETADR
|
||||
PHA
|
||||
*
|
||||
** ADDRESS TO ARRAY ELEMENT IS STORED
|
||||
** IN .Y (LOW BYTE), .X (HIGH BYTE)
|
||||
*
|
||||
** LENGTH OF RETURN VALUE IS STORED IN .A
|
||||
*
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
LDA RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
76
disks/disk3_arrays/T.AGET81.MIN
Normal file
76
disks/disk3_arrays/T.AGET81.MIN
Normal file
|
@ -0,0 +1,76 @@
|
|||
AGET81
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :IDX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :IDX+1
|
||||
LDY #1
|
||||
LDA (ADDR1),Y
|
||||
STA :ESIZE
|
||||
STA RETLEN
|
||||
LDY #0
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :IDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :IDX
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
CLC
|
||||
LDA #2
|
||||
ADC :IDX
|
||||
STA :RES
|
||||
LDA #0
|
||||
ADC :IDX+1
|
||||
STA :RES+1
|
||||
CLC
|
||||
LDA :RES
|
||||
ADC ADDR1
|
||||
STA :RES
|
||||
LDA :RES+1
|
||||
ADC ADDR1+1
|
||||
STA :RES+1
|
||||
LDY #0
|
||||
LDA :RES
|
||||
STA ADDR1
|
||||
LDA :RES+1
|
||||
STA ADDR1+1
|
||||
:LDLOOP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY RETLEN
|
||||
BCC :LDLOOP
|
||||
BEQ :LDLOOP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
LDA RETLEN
|
||||
RTS
|
||||
:RES DS 2
|
||||
:IDX DS 2
|
||||
:ESIZE DS 1
|
|
@ -1,10 +1,10 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* AGET82 :: INIT 2D ARRAY *
|
||||
* AGET82 : INIT 2D ARRAY *
|
||||
*- -*
|
||||
* THIS GETS THE ADDRESS OF AN *
|
||||
* ELEMENT AT THE INDEX X,Y IN *
|
||||
* THE SPECIFIED ARRAY. *
|
||||
* ELEMENT AT THE INDEX OF *
|
||||
* [:XIDX],[:YIDX]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -15,15 +15,15 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #2 ; X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; Y INDEX *
|
||||
* PHA *
|
||||
* JSR AGET82 *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #2 ; X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; Y INDEX *
|
||||
* PHA *
|
||||
* JSR AGET82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -43,9 +43,15 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LO BYTE OF ELEM ADDR *
|
||||
* X = HI BYTE OF ELEM ADDR *
|
||||
* A = CLOBBERED; TRASH *
|
||||
* .Y = LO BYTE OF ELEM ADDR *
|
||||
* .X = HI BYTE OF ELEM ADDR *
|
||||
* .A = ELEMENT/RETURN LENGTH *
|
||||
* *
|
||||
* [RETURN] = VALUE FOUND AT *
|
||||
* SPECIFIED INDEX. *
|
||||
* *
|
||||
* [RETLEN] = LENGTH IN BYTES *
|
||||
* OF THE RETURN VALUE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
AGET82
|
||||
|
@ -71,6 +77,8 @@ AGET82
|
|||
LDY #2
|
||||
LDA (ADDR1),Y ; ELEMENT LENGTH
|
||||
STA :MCAND ; ELEMENT LENGTH
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
*
|
||||
** MULTIPLY X AND Y
|
||||
*
|
||||
|
@ -124,9 +132,13 @@ AGET82
|
|||
DEX
|
||||
BNE :SHIFTR
|
||||
*
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
*
|
||||
** NOW ADD BASE ADDRESS OF ARRAY TO GET
|
||||
** THE ADDRESS OF THE INDEX VALUE
|
|
@ -1,18 +1,11 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* APUT81 :: PUT TO ARR ELEMNT *
|
||||
* APUT81 : PUT DATA INTO ARRAY *
|
||||
* ELEMENT *
|
||||
*- -*
|
||||
* COPIES FROM SOURCE LOCATION *
|
||||
* AND PUTS IT IN MEMLOC FOR *
|
||||
* DESIRED ELEMENT. DIRECT *
|
||||
* PUTTING OF ELEMENT DATA *
|
||||
* CAN BE DONE VIA SIMPLE *
|
||||
* LDA/STA OPERATIONS. *
|
||||
*- -*
|
||||
* NOTE THAT THIS DOES NOT *
|
||||
* CHECK FOR OUT OF BOUNDS *
|
||||
* SO THAT CYCLES ARE NOT *
|
||||
* WASTED. *
|
||||
* DESIRED ELEMENT. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -23,16 +16,16 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; SRC ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$300 ;DEST ADDR *
|
||||
* PHA *
|
||||
* STA #<$300 *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* LDA #>$300 ; SRC ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$300 ;DEST ADDR *
|
||||
* PHA *
|
||||
* STA #<$300 *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -53,9 +46,9 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE OF ELEMENT ADDR *
|
||||
* X = HIBYTE OF ELEMENT ADDR *
|
||||
* A = BYTE LENGTH OF ELEMENT *
|
||||
* .Y = LOBYTE OF ELEMENT ADDR *
|
||||
* .X = HIBYTE OF ELEMENT ADDR *
|
||||
* .A = BYTE LENGTH OF ELEMENT *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
APUT81
|
46
disks/disk3_arrays/T.APUT81.MIN
Normal file
46
disks/disk3_arrays/T.APUT81.MIN
Normal file
|
@ -0,0 +1,46 @@
|
|||
APUT81
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA :AIDX
|
||||
PLA
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
LDA ADDR4+1
|
||||
PHA
|
||||
LDA ADDR4
|
||||
PHA
|
||||
LDA :AIDX
|
||||
PHA
|
||||
JSR AGET81
|
||||
STY ADDR2
|
||||
STX ADDR2+1
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :LP
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:RETADR DS 2
|
||||
:ESIZE DS 1
|
||||
:ASIZE DS 1
|
||||
:AIDX DS 1
|
|
@ -1,10 +1,11 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* APUT82 :: PUT DATA INTO ELEM *
|
||||
* APUT82 : PUT DATA INTO ELEM *
|
||||
*- -*
|
||||
* THIS PUTS DATA FROM ONE ADDR *
|
||||
* INTO THE ADDRESS OF AN ARRAY *
|
||||
* WITH THE INDEX OF X,Y. *
|
||||
* WITH THE INDEX OF [:XIDX], *
|
||||
* [:YIDX]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -15,19 +16,19 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; SOURCE DATA *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$3A0 ; DEST ARRAY *
|
||||
* PHA *
|
||||
* LDA #<$3A0 *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEM X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; ELEM Y INDEX *
|
||||
* PHA *
|
||||
* JSR APUT82 *
|
||||
* LDA #>$300 ; SOURCE DATA *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$3A0 ; DEST ARRAY *
|
||||
* PHA *
|
||||
* LDA #<$3A0 *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEM X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; ELEM Y INDEX *
|
||||
* PHA *
|
||||
* JSR APUT82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -49,9 +50,9 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE ELEMENT ADDRESS *
|
||||
* X = HIBYTE ELEMENT ADDRESS *
|
||||
* A = ELEMENT BYTE LENGTH *
|
||||
* .Y = LOBYTE ELEMENT ADDRESS *
|
||||
* .X = HIBYTE ELEMENT ADDRESS *
|
||||
* .A = ELEMENT BYTE LENGTH *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
APUT82
|
|
@ -3,9 +3,9 @@
|
|||
* *
|
||||
* -< ARRAYS DEMO >- *
|
||||
* *
|
||||
* VERSION 00.00.01 *
|
||||
* VERSION 00.02.00 *
|
||||
* *
|
||||
* 03/04/1980 *
|
||||
* 12-DEC-2018 *
|
||||
* *
|
||||
********************************
|
||||
* *
|
||||
|
@ -19,103 +19,132 @@
|
|||
CYC AVE
|
||||
EXP ONLY
|
||||
DSK ARRAYS.DEMO
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (PUTS, MACROS) *
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT DECS
|
||||
USE ARRAYS.MAC
|
||||
*
|
||||
PUT REQUIRED.HOOKS
|
||||
USE REQUIRED.MAC
|
||||
USE ARRAYS.MAC
|
||||
PUT ARRAYS.HOOKS
|
||||
*
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
*
|
||||
** BIG LUMPS -- HIGH LEVEL CODE
|
||||
*
|
||||
ARRAY1 EQU $300
|
||||
ARRAY2 EQU $4000
|
||||
*
|
||||
** DIM81 CLEARS THE MEMORY AT THE SPECIFIED
|
||||
** LOCATION AND SETS UP THE DATA CONFIGURATION
|
||||
** FOR AN ARRAY (ARRAY LENGTH, ELEMENT LENGTH, DATA)
|
||||
** FOR A 1D ARRAY (ARRAY LENGTH, ELEMENT LENGTH, DATA)
|
||||
*
|
||||
** MACRO: _DIM81 $300;#10;#2
|
||||
** MACRO: DIM81 ADDRESS;ARRAY_SIZE;ELEMENT_LENGTH
|
||||
*
|
||||
LDA #>$300 ; HIGH LOCATION FOR ARRAY
|
||||
LDA #>ARRAY1 ; HIGH LOCATION FOR ARRAY
|
||||
PHA
|
||||
LDA #<$300 ; LOW LOCATION
|
||||
LDA #<ARRAY1 ; LOW LOCATION
|
||||
PHA
|
||||
LDA #10 ; ARRAY LENGTH
|
||||
LDA #06 ; ARRAY LENGTH
|
||||
PHA
|
||||
LDA #2 ; ELEMENT LENGTH
|
||||
PHA
|
||||
JSR DIM81
|
||||
JSR ADIM81
|
||||
*
|
||||
** NOW CHECK $300 TO SEE RESULT
|
||||
*
|
||||
*
|
||||
** AGET81 RETURNS THE MEMORY ADDRESS WHERE
|
||||
** AN ELEMENT AT THE SPECIFIED INDEX IN THE
|
||||
** ARRAY AT THE SPECIFIED ADDRESS IS LOCATED
|
||||
*
|
||||
*** MACRO: _GET81 $300;#5
|
||||
*
|
||||
JSR __P
|
||||
HEX 8D8D
|
||||
ASC "1-DIMENSIONAL ARRAY AFTER INITIALIZING"
|
||||
HEX 8D8D
|
||||
ASC " "
|
||||
ASC "0 1 2 3 4 5 "
|
||||
HEX 8D00
|
||||
LDA #>$300
|
||||
PHA
|
||||
LDA #<$300
|
||||
PHA
|
||||
LDA #05 ; INDEX
|
||||
LDA #14 ; ARRAY LENGTH + 2
|
||||
PHA
|
||||
JSR AGET81
|
||||
*
|
||||
*BRK ; X=03 (HI), Y=0C (LOW)
|
||||
JSR __DUMP
|
||||
JSR __W
|
||||
*
|
||||
** NOTE THAT INDEXING STARTS AT 0, SO AN ARRAY
|
||||
** OF TEN ELEMENTS WOULD BE LISTED AS 0..9
|
||||
** SO HERE WE ARE ACTUALLY ASKING FOR THE
|
||||
** ADDRESS OF THE SIXTH ELEMENT!
|
||||
*
|
||||
*
|
||||
** APUT81 COPIES DATA FROM ONE SPECIFIED LOCATION
|
||||
** TO THE ELEMENT INDEXED IN AN ARRAY AT ANOTHER
|
||||
** LOCATION.
|
||||
*
|
||||
*** MACRO: _PUT81 $300;$300;#5 (SRC,ARRAY,INDEX)
|
||||
*** MACRO: PUT81 $SRC_ADDR;ARRAY_ADDR;INDEX
|
||||
*
|
||||
LDA #>$300 ; ADDRESS TO COPY
|
||||
LDA #$44
|
||||
STA ARRAY2
|
||||
LDA #$55
|
||||
STA ARRAY2+1
|
||||
LDA #>ARRAY2 ; ADDRESS TO COPY
|
||||
PHA
|
||||
LDA #<$300
|
||||
LDA #<ARRAY2
|
||||
PHA
|
||||
LDA #>$300 ; ARRAY ADDRESS
|
||||
LDA #>ARRAY1 ; ARRAY ADDRESS
|
||||
PHA
|
||||
LDA #<$300
|
||||
LDA #<ARRAY1
|
||||
PHA
|
||||
LDA #5
|
||||
LDA #2
|
||||
PHA ; INDEX
|
||||
JSR APUT81
|
||||
*BRK
|
||||
JSR __P
|
||||
HEX 8D8D8D
|
||||
ASC "AFTER PUTTING #4455 AT INDEX 2"
|
||||
HEX 8D00
|
||||
LDA #>ARRAY1
|
||||
PHA
|
||||
LDA #<ARRAY1
|
||||
PHA
|
||||
LDA #14
|
||||
PHA
|
||||
JSR __DUMP
|
||||
JSR __W
|
||||
*
|
||||
** NOTE THAT THIS JUST COPIED THE INDEXING DATA
|
||||
** OF THE ARRAY TO ITS SIXTH ELEMENT (#5), SO
|
||||
** THAT NOW 030C CONTAINS A002 (ARRAY LENGTH,
|
||||
** ELEMENT LENGTH).
|
||||
** AGET81 RETURNS THE MEMORY ADDRESS WHERE
|
||||
** AN ELEMENT AT THE SPECIFIED INDEX IN
|
||||
** Y (LOW) AND X (HIGH), AS WELL AS COPIES
|
||||
** THAT ELEMENT TO THE [RETURN] LOCATION
|
||||
*
|
||||
*** MACRO: GET81 $ARRAY_ADDRESS;INDEX
|
||||
*
|
||||
LDA #>ARRAY1
|
||||
PHA
|
||||
LDA #<ARRAY1
|
||||
PHA
|
||||
LDA #02 ; INDEX CONTAINS #4455
|
||||
PHA ; OR "DU" INVERTED
|
||||
JSR AGET81
|
||||
*
|
||||
JSR __P
|
||||
HEX 8D8D
|
||||
ASC "RETURN VALUE OF GET81: "
|
||||
HEX 00
|
||||
LDA RETURN
|
||||
JSR $FDF0 ; COUT1
|
||||
LDA RETURN+1
|
||||
JSR $FDF0
|
||||
JSR __P
|
||||
HEX 8D00
|
||||
JSR __W
|
||||
*
|
||||
** DIM82 CREATES AN 8BIT, 2D ARRAY AT THE
|
||||
** SPECIFIED LOCATION WITH THE LENGTH AND
|
||||
** HEIGHT PASSED VIA THE STACK
|
||||
*
|
||||
** MACRO: _DIM82 $300;#4;#4;#1
|
||||
** MACRO: DIM82 $ARRAY_ADDR;ROWS;COLUMNS;ELEMENT_LENGTH
|
||||
*
|
||||
LDA #>$300
|
||||
LDA #>ARRAY2
|
||||
PHA
|
||||
LDA #<$300 ; ARRAY ADDRESS
|
||||
LDA #<ARRAY2 ; ARRAY ADDRESS
|
||||
PHA
|
||||
LDA #4 ; X-DIMENSION
|
||||
PHA
|
||||
|
@ -123,40 +152,65 @@
|
|||
PHA
|
||||
LDA #1 ; ELEMENT SIZE
|
||||
PHA
|
||||
JSR DIM82
|
||||
*BRK
|
||||
JSR ADIM82
|
||||
*
|
||||
*
|
||||
** AGET82 GETS THE MEMORY LOCATION OF THE ELEMENT
|
||||
** STORED AT INDEX X,Y IN THE GIVEN ARRAYS AND
|
||||
** RETURNS IT IN Y (LOW) AND X (HIGH)
|
||||
*
|
||||
** MACRO: _GET82 $300;#2;#3
|
||||
*
|
||||
LDA #>$300
|
||||
JSR __P
|
||||
HEX 8D8D
|
||||
ASC "2-DIMENSIONAL ARRAY, FIRST INITIALIZED"
|
||||
HEX 8D
|
||||
HEX 00
|
||||
LDA #>ARRAY2
|
||||
PHA
|
||||
LDA #<$300
|
||||
LDA #<ARRAY2
|
||||
PHA
|
||||
LDA #2 ; X INDEX
|
||||
LDA #3
|
||||
PHA
|
||||
LDA #3 ; Y INDEX
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+3
|
||||
PHA
|
||||
JSR AGET82
|
||||
*BRK ; X=03; Y=09
|
||||
*
|
||||
LDA #<ARRAY2+3
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+7
|
||||
PHA
|
||||
LDA #<ARRAY2+7
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+11
|
||||
PHA
|
||||
LDA #<ARRAY2+11
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+15
|
||||
PHA
|
||||
LDA #<ARRAY2+15
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
JSR __W
|
||||
*
|
||||
** APUT82 PUTS THE DATA STORED IN ONE LOCATION
|
||||
** INTO THE ARRAY AT THE SPECIFIED INDEX X,Y.
|
||||
*
|
||||
** MACRO: _PUT82 $300;$300;#2;#3
|
||||
** MACRO: PUT82 SRC_ADDR;ARRAY_ADDR;ROW_INDEX;COLUMN_INDEX
|
||||
*
|
||||
LDA #>$300 ; SRC
|
||||
LDA #180
|
||||
STA ARRAY1
|
||||
|
||||
LDA #>ARRAY1 ; SRC
|
||||
PHA
|
||||
LDA #<$300
|
||||
LDA #<ARRAY1
|
||||
PHA
|
||||
LDA #>$300 ; DEST
|
||||
LDA #>ARRAY2 ; DEST
|
||||
PHA
|
||||
LDA #<$300
|
||||
LDA #<ARRAY2
|
||||
PHA
|
||||
LDA #2 ; X INDEX
|
||||
PHA
|
||||
|
@ -164,24 +218,81 @@
|
|||
PHA ; Y INDEX
|
||||
JSR APUT82
|
||||
*
|
||||
*BRK ; NOW $0309 WILL HOLD 04, THE X-BOUNDARY
|
||||
JSR __P
|
||||
HEX 8D8D
|
||||
ASC "2D ARRAY AFTER PUTTING '04' AT LOCATION 2,3"
|
||||
HEX 8D
|
||||
HEX 00
|
||||
LDA #>ARRAY2
|
||||
PHA
|
||||
LDA #<ARRAY2
|
||||
PHA
|
||||
LDA #3
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+3
|
||||
PHA
|
||||
LDA #<ARRAY2+3
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+7
|
||||
PHA
|
||||
LDA #<ARRAY2+7
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+11
|
||||
PHA
|
||||
LDA #<ARRAY2+11
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
LDA #>ARRAY2+15
|
||||
PHA
|
||||
LDA #<ARRAY2+15
|
||||
PHA
|
||||
LDA #4
|
||||
PHA
|
||||
JSR __DUMP
|
||||
JSR __W
|
||||
*
|
||||
** AGET82 GETS THE MEMORY LOCATION OF THE ELEMENT
|
||||
** STORED AT INDEX X,Y IN THE GIVEN ARRAYS AND
|
||||
** RETURNS IT IN Y (LOW) AND X (HIGH); DATA
|
||||
** IN ELEMENT IS ALSO COPIED TO [RETURN]
|
||||
*
|
||||
** MACRO: GET82 $ARRAY_ADDR;ROW_INDEX;COLUMN_INDEX
|
||||
*
|
||||
LDA #>ARRAY2
|
||||
PHA
|
||||
LDA #<ARRAY2
|
||||
PHA
|
||||
LDA #2 ; X INDEX
|
||||
PHA
|
||||
LDA #3 ; Y INDEX
|
||||
PHA
|
||||
JSR AGET82
|
||||
*
|
||||
*
|
||||
** LITTLE LUMPS -- MID/LOW LEVEL
|
||||
*
|
||||
LDA RETURN
|
||||
JSR __P
|
||||
HEX 8D8D
|
||||
ASC "VALUE AT 2,3 VIA AGET82: "
|
||||
HEX 00
|
||||
LDA RETURN
|
||||
JSR $FDF0
|
||||
JSR __W
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES *
|
||||
* BOTTOM INCLUDES (ROUTINES) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
** BOTTOM INCLUDES
|
||||
*
|
||||
PUT ARRAYS81.LIB
|
||||
PUT ARRAYS82.LIB
|
||||
PUT REQUIRED.LIB
|
||||
*
|
||||
|
|
|
@ -7,17 +7,11 @@
|
|||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 10-DEC-2018 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* *
|
||||
* LICENSE: APACHE 2.0 LICENSE, *
|
||||
* WHERE APPLICABLE. CODE *
|
||||
* INSPIRED BY OR COPIED FROM *
|
||||
* OTHERS MAY FALL UNDER A *
|
||||
* DIFFERENT LICENSE. I WILL *
|
||||
* DO MY BEST TO NOTIFY SUCH *
|
||||
* CASES. *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
|
@ -31,11 +25,21 @@
|
|||
* *
|
||||
* LIST OF MACROS *
|
||||
* *
|
||||
* DIM81: DIM 1D, 8BIT ARRAY *
|
||||
* GET81: GET ELEMENT IN 8BIT, *
|
||||
* 1D ARRAY. *
|
||||
* PUT81: PUT VALUE INTO ARRAY *
|
||||
* AT SPECIFIED INDEX *
|
||||
* DIM82: DIM A 2D, 8BIT ARRAY *
|
||||
* GET82: GET ELEMENT IN 8BIT, *
|
||||
* 2D ARRAY *
|
||||
* PUT82: PUT VALUE INTO ARRAY *
|
||||
* AT SPECIFIED INDEX *
|
||||
* *
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _DIM81 : INIT 1D, 8BIT ARRAY *
|
||||
* DIM81 : INIT 1D, 8BIT ARRAY *
|
||||
*- -*
|
||||
* INITS A 1-DIMENSIONAL ARRAY *
|
||||
* BY CLEARING MEMORY IT WILL *
|
||||
|
@ -46,15 +50,15 @@
|
|||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ARRAY ADDRESS *
|
||||
* PARAM2 = ARRAY BYTE LENGTH *
|
||||
* PARAM3 = ELEMENT BYTE LENGTH *
|
||||
* ]1 = ARRAY ADDRESS *
|
||||
* ]2 = ARRAY BYTE LENGTH *
|
||||
* ]3 = ELEMENT BYTE LENGTH *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _DIM81 $300;#10;#2 *
|
||||
* DIM81 $300;#10;#2 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_DIM81 MAC
|
||||
DIM81 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
|
@ -63,32 +67,31 @@ _DIM81 MAC
|
|||
PHA
|
||||
LDA ]3 ; ELEMENT LENGTH
|
||||
PHA
|
||||
JSR DIM1D
|
||||
JSR ADIM81
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _GET81 : GET ARRAY ELEMENT *
|
||||
* GET81 : GET ARRAY ELEMENT *
|
||||
* FROM 1D, 8BIT ARRAY *
|
||||
*- -*
|
||||
* CALCULATES THE ADDRESS OF AN *
|
||||
* ELEMENT IN THE GIVEN ARRAY *
|
||||
* AND RETURNS THE ADDRESS IN *
|
||||
* Y (LOW) AND X (HIGH), WITH *
|
||||
* THE ELEMENT LENGTH IN A. *
|
||||
* THEN, DATA CAN BE READ VIA *
|
||||
* REGULAR STATEMENTS WITH THAT *
|
||||
* ADDRESS. *
|
||||
* GETS THE VALUE HELD IN AN *
|
||||
* ARRAY AT THE SPECIFIED *
|
||||
* ELEMENT. THAT VALUE IS PUT *
|
||||
* INTO [RETURN], WITH THE *
|
||||
* LENGTH IN [RETLEN]. THE *
|
||||
* ELEMENT ADDRESS IS PUT IN *
|
||||
* .Y (LOW) AND .X (HIGH). *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ARRAY ADDRESS *
|
||||
* PARAM2 = ELEMENT INDEX *
|
||||
* ]1 = ARRAY ADDRESS *
|
||||
* ]2 = ELEMENT INDEX *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _GET81 $300;#5 *
|
||||
* GET81 $300;#5 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_GET81 MAC
|
||||
GET81 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
|
@ -99,25 +102,25 @@ _GET81 MAC
|
|||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PUT81 : PUT ARRAY ELEMENT *
|
||||
* PUT81 : PUT ARRAY ELEMENT *
|
||||
* IN 1D, 8BIT ARRAY *
|
||||
*- -*
|
||||
* COPIES DATA FROM ONE MEMORY *
|
||||
* LOCATION (P1) AND PUTS IT *
|
||||
* IN THE SPECIFIED ARRAY (P2) *
|
||||
* AT THE SPECIFIED INDEX (P3). *
|
||||
* LOCATION (]1) AND PUTS IT *
|
||||
* IN THE SPECIFIED ARRAY (]2) *
|
||||
* AT THE SPECIFIED INDEX (]3). *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = SOURCE ADDRESS *
|
||||
* PARAM2 = ARRAY ADDRESS *
|
||||
* PARAM3 = ELEMENT INDEX *
|
||||
* ]1 = SOURCE ADDRESS *
|
||||
* ]2 = ARRAY ADDRESS *
|
||||
* ]3 = ELEMENT INDEX *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _PUT81 $300;$3A0;#5 *
|
||||
* PUT81 $300;$3A0;#5 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PUT81 MAC
|
||||
PUT81 MAC
|
||||
LDA #>]1
|
||||
PHA ; SRC ADDR
|
||||
LDA #<]1
|
||||
|
@ -132,7 +135,7 @@ _PUT81 MAC
|
|||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _DIM82 : INIT 12, 8BIT ARRAY *
|
||||
* DIM82 : INIT 12, 8BIT ARRAY *
|
||||
*- -*
|
||||
* INITS AN 8BIT 2D ARRAY AT *
|
||||
* SPECIFIED LOCATION WITH THE *
|
||||
|
@ -143,16 +146,16 @@ _PUT81 MAC
|
|||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ARRAY ADDRESS *
|
||||
* PARAM2 = X DIMENSION *
|
||||
* PARAM3 = Y DIMENSION *
|
||||
* PARAM4 = ELEMENT SIZE *
|
||||
* ]1 = ARRAY ADDRESS *
|
||||
* ]2 = X DIMENSION *
|
||||
* ]3 = Y DIMENSION *
|
||||
* ]4 = ELEMENT SIZE *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _DIM82 $300;#4;#4;#1 *
|
||||
* DIM82 $300;#4;#4;#1 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_DIM82 MAC
|
||||
DIM82 MAC
|
||||
LDA #>]1 ; ARRAY ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
|
@ -163,26 +166,24 @@ _DIM82 MAC
|
|||
PHA
|
||||
LDA ]4 ; ELEMENT LENGTH
|
||||
PHA
|
||||
JSR DIM82
|
||||
JSR ADIM82
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _GET82 : GET ARRAY ELEMENT *
|
||||
* GET82 : GET ARRAY ELEMENT *
|
||||
* FROM 2D, 8BIT ARRAY *
|
||||
*- -*
|
||||
* RETURNS THE MEMORY LOCATION *
|
||||
* OF AN X,Y INDEX IN THE ARRAY *
|
||||
* VIA THE REGISTERS: Y (LOW), *
|
||||
* X (HIGH), A (ELEMENT LENGTH) *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ARRAY ADDRESS *
|
||||
* PARAM2 = X INDEX *
|
||||
* PARAM3 = Y INDEX *
|
||||
* ]1 = ARRAY ADDRESS *
|
||||
* ]2 = X INDEX *
|
||||
* ]3 = Y INDEX *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _GET82 $300;#2;#3 *
|
||||
* GET82 $300;#2;#3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_GET82 MAC
|
||||
|
@ -198,8 +199,8 @@ _GET82 MAC
|
|||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PUT82 : PUT ARRAY ELEMENT *
|
||||
* IN 2D, 8BIT ARRAY *
|
||||
* PUT82 : PUT ARRAY ELEMENT *
|
||||
* IN 2D, 8BIT ARRAY *
|
||||
*- -*
|
||||
* COPIES DATA FROM SOURCE LOC *
|
||||
* TO THE MEMLOC OF INDEX X,Y *
|
||||
|
@ -207,13 +208,13 @@ _GET82 MAC
|
|||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = SOURCE ADDRESS *
|
||||
* PARAM2 = DEST ARRAY ADDRESS *
|
||||
* PARAM3 = ELEMENT X INDEX *
|
||||
* PARAM4 = Y INDEX *
|
||||
* ]1 = SOURCE ADDRESS *
|
||||
* ]2 = DEST ARRAY ADDRESS *
|
||||
* ]3 = ELEMENT X INDEX *
|
||||
* ]4 = Y INDEX *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _PUT82 $300;$3A0;#2;#3 *
|
||||
* PUT82 $300;$3A0;#2;#3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PUT82 MAC
|
||||
|
|
|
@ -8,19 +8,15 @@
|
|||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 09-DEC-2018 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* *
|
||||
* LICENSE: APACHE 2.0, WHERE *
|
||||
* APPLICABLE. CODE INSPIRED *
|
||||
* BY THE WORKS OF OTHERS MAY *
|
||||
* FALL UNDER A DIFFERENT *
|
||||
* LICENSE (NOTED IN ROUTINE). *
|
||||
* OS: DOS 3.3 *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* *
|
||||
* THIS IS A STANDARD LIBRARY *
|
||||
* FOR 1-DIMENSIONAL 8-BIT *
|
||||
* ARRAY MANIPUALTION. ARRAYS *
|
||||
* ARRAY MANIPULATION. ARRAYS *
|
||||
* ARE PRECEDED BY LENGTH AND *
|
||||
* INDEXING INFORMATION. *
|
||||
* *
|
||||
|
@ -28,8 +24,8 @@
|
|||
* *
|
||||
* LIST OF ROUTINES *
|
||||
* *
|
||||
* DIM81 : DIM 8BIT,1D ARRAY *
|
||||
* AGET81 : GET ADDR OF ELEMENT *
|
||||
* ADIM81 : DIM 8BIT,1D ARRAY *
|
||||
* AGET81 : GET ARRAY ELEMENT *
|
||||
* APUT81 : COPY DATA FROM MEM *
|
||||
* INTO ELEMENT AT *
|
||||
* SPECIFIED LOCATION *
|
||||
|
@ -37,19 +33,19 @@
|
|||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DIM81D :: INIT 1D ARRAY *
|
||||
* ADIM81D : INIT 1D ARRAY *
|
||||
*- -*
|
||||
* CREATES AN ARRAY OF LENGTH *
|
||||
* :ASIZE WITH ELEMENTS OF *
|
||||
* LENGTH :ESIZE AT MEMORY *
|
||||
* [:ASIZE] WITH ELEMENTS OF *
|
||||
* LENGTH [:ESIZE] AT MEMORY *
|
||||
* LOCATION POINTED TO BY *
|
||||
* :ALOC. RETURNS ARRAY START *
|
||||
* LOCATION IF SUCCESSFUL IN A, *
|
||||
* OR 0FF IF UNSUCCESSFUL. *
|
||||
* [:ALOC]. RETURNS ARRAY START *
|
||||
* LOCATION IN .A *
|
||||
*- -*
|
||||
* FIRST BYTE OF MEMORY USED *
|
||||
* HOLDS LENGTH OF ARRAY; *
|
||||
* SECOND BYTE HOLDS LENGTH OF *
|
||||
* ELEMENTS. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -60,15 +56,15 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAYLOC *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #10 ; ARRAY SIZE *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEMENT SIZE *
|
||||
* PHA *
|
||||
* JSR DIM81 *
|
||||
* LDA #>$300 ; ARRAYLOC *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #10 ; ARRAY SIZE *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEMENT SIZE *
|
||||
* PHA *
|
||||
* JSR DIM81 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -88,15 +84,18 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LO BYTE OF ARRAY ADDR *
|
||||
* X = HI BYTE OF ARRAY ADDR *
|
||||
* A = TRASH *
|
||||
* .Y = LO BYTE OF ARRAY ADDR *
|
||||
* .X = HI BYTE OF ARRAY ADDR *
|
||||
* .A = ARRAY SIZE *
|
||||
* *
|
||||
* [RETURN] = TOTAL SIZE OF *
|
||||
* ARRAY IN BYTES (WORD) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM81
|
||||
ADIM81
|
||||
*
|
||||
** FIRST, CLEAR BLOCK OF MEM TO BE USED
|
||||
** THEN MUL ASIZE BY ESIZE, AND ADD 2 TO
|
||||
** THEN MUL [:ASIZE] BY [:ESIZE], AND ADD 2 TO
|
||||
** GET TOTAL MEMORY USED BY ARRAY
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
|
@ -119,13 +118,12 @@ DIM81
|
|||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDX #0
|
||||
LDA #0
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
*
|
||||
** MULTIPLY ASIZE AND ESIZE TO GET TOTAL SIZE
|
||||
** OF MEMORY TO CLEAR AND USE
|
||||
** MULTIPLY [:ASIZE] AND [:ESIZE] TO GET
|
||||
** TOTAL SIZE OF MEMORY TO CLEAR AND USE
|
||||
*
|
||||
:DOADD
|
||||
CLC
|
||||
|
@ -149,7 +147,7 @@ DIM81
|
|||
INX
|
||||
INX ; INCREASE BY TWO
|
||||
; TO MAKE ROOM FOR SIZES
|
||||
BCC :NOINY ; IF X ROLLS OVER, INC Y
|
||||
BCC :NOINY ; IF .X ROLLS OVER, INC .Y
|
||||
INY
|
||||
:NOINY
|
||||
STX :MSIZE ; LOW BYTE
|
||||
|
@ -206,6 +204,17 @@ DIM81
|
|||
*
|
||||
LDY ADDR1 ; LOW
|
||||
LDX ADDR1+1 ; HIGH
|
||||
LDA :ASZBAK
|
||||
*
|
||||
** STORE TOTAL ARRAY SIZE IN BYTES
|
||||
** IN MEMORY ALLOCATED FOR RETURN VALUES
|
||||
*
|
||||
LDA :MSIZE
|
||||
STA RETURN
|
||||
LDA :MSIZE+1
|
||||
STA RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN ; 2 BYTE LENGTH
|
||||
*
|
||||
RTS
|
||||
*
|
||||
|
@ -218,12 +227,13 @@ DIM81
|
|||
:ESZBAK DS 1
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* AGET81 :: GET ARRAY ELEMENT *
|
||||
* ADDRESS *
|
||||
* AGET81 : GET ARRAY ELEMENT *
|
||||
* ADDRESS *
|
||||
*- -*
|
||||
* GETS THE ADDRESS LOCATION OF *
|
||||
* AN ELEMENT IN THE SPECIFIED *
|
||||
* ARRAY AT THE SPECIFIED INDEX *
|
||||
* GETS THE SPECIFIED ELEMENT *
|
||||
* OF THE ARRAY AND COPIES IT *
|
||||
* TO MEMORY DEDICATED TO *
|
||||
* RETURN VALUES. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -234,13 +244,13 @@ DIM81
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ;HI ARADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 ; LOW *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* JSR AGET81 *
|
||||
* LDA #>$300 ;HI ARADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 ; LOW *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* JSR AGET81 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -259,9 +269,12 @@ DIM81
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE OF ELEMENT ADDR *
|
||||
* X = HIBYTE OF ELEMENT ADDR *
|
||||
* A = TRASH *
|
||||
* .Y = LOBYTE OF ELEMENT ADDR *
|
||||
* .X = HIBYTE OF ELEMENT ADDR *
|
||||
* .A = LENGTH OF RETURN VAL *
|
||||
* *
|
||||
* [RETURN] VALUE FOUND AT *
|
||||
* SPECIFIED INDEX *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
AGET81
|
||||
|
@ -281,13 +294,15 @@ AGET81
|
|||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :IDX+1
|
||||
*
|
||||
** GET ELEMENT SIZE
|
||||
*
|
||||
LDY #1 ; ELEMENT SIZE LOC
|
||||
LDA (ADDR1),Y
|
||||
STA :ESIZE
|
||||
*
|
||||
STA RETLEN ; LENGTH OF RETURN VALUE
|
||||
*
|
||||
** FIRST, MUL INDEX BY ELEMENT SIZE,
|
||||
** THEN ADD TWO TO GET THE PROPER ADDRESS.
|
||||
|
@ -314,7 +329,7 @@ AGET81
|
|||
BCS :DOADD
|
||||
BNE :LP
|
||||
*
|
||||
** ARRAY INDEX STORED IN X (LOW) AND Y (HIGH)
|
||||
** INDEX STORED AT X (LOW) AND Y (HIGH)
|
||||
*
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
|
@ -340,11 +355,22 @@ AGET81
|
|||
ADC ADDR1+1
|
||||
STA :RES+1
|
||||
*
|
||||
** ADDRESS TO ARRAY ELEMENT IS STORED
|
||||
** IN Y (LOW BYTE), X (HIGH BYTE)
|
||||
** NOW MOVE SPECIFIED ELEMENT DATA TO THE
|
||||
** MEMORY LOCATION DEDICATED TO RETURN VALUES
|
||||
*
|
||||
LDY #0
|
||||
LDA :RES
|
||||
STA ADDR1
|
||||
LDA :RES+1
|
||||
STA ADDR1+1
|
||||
:LDLOOP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY RETLEN
|
||||
BCC :LDLOOP ; IF .Y <= RETLEN
|
||||
BEQ :LDLOOP ; KEEP LOOPING
|
||||
*
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
|
@ -353,6 +379,14 @@ AGET81
|
|||
LDA RETADR
|
||||
PHA
|
||||
*
|
||||
** ADDRESS TO ARRAY ELEMENT IS STORED
|
||||
** IN .Y (LOW BYTE), .X (HIGH BYTE)
|
||||
*
|
||||
** LENGTH OF RETURN VALUE IS STORED IN .A
|
||||
*
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
LDA RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
|
@ -362,19 +396,12 @@ AGET81
|
|||
:ESIZE DS 1
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* APUT81 :: PUT TO ARR ELEMNT *
|
||||
* APUT81 : PUT DATA INTO ARRAY *
|
||||
* ELEMENT *
|
||||
*- -*
|
||||
* COPIES FROM SOURCE LOCATION *
|
||||
* AND PUTS IT IN MEMLOC FOR *
|
||||
* DESIRED ELEMENT. DIRECT *
|
||||
* PUTTING OF ELEMENT DATA *
|
||||
* CAN BE DONE VIA SIMPLE *
|
||||
* LDA/STA OPERATIONS. *
|
||||
*- -*
|
||||
* NOTE THAT THIS DOES NOT *
|
||||
* CHECK FOR OUT OF BOUNDS *
|
||||
* SO THAT CYCLES ARE NOT *
|
||||
* WASTED. *
|
||||
* DESIRED ELEMENT. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -385,16 +412,16 @@ AGET81
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; SRC ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$300 ;DEST ADDR *
|
||||
* PHA *
|
||||
* STA #<$300 *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
* LDA #>$300 ; SRC ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$300 ;DEST ADDR *
|
||||
* PHA *
|
||||
* STA #<$300 *
|
||||
* PHA *
|
||||
* LDA #5 ; INDEX *
|
||||
* PHA *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -415,9 +442,9 @@ AGET81
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE OF ELEMENT ADDR *
|
||||
* X = HIBYTE OF ELEMENT ADDR *
|
||||
* A = BYTE LENGTH OF ELEMENT *
|
||||
* .Y = LOBYTE OF ELEMENT ADDR *
|
||||
* .X = HIBYTE OF ELEMENT ADDR *
|
||||
* .A = BYTE LENGTH OF ELEMENT *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
APUT81
|
||||
|
|
216
disks/disk3_arrays/T.ARRAYS81.MIN
Normal file
216
disks/disk3_arrays/T.ARRAYS81.MIN
Normal file
|
@ -0,0 +1,216 @@
|
|||
JMP ARRAYS81X
|
||||
SKP 10
|
||||
ADIM81
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :ESIZE
|
||||
STA :ESZBAK
|
||||
PLA
|
||||
STA :ASIZE
|
||||
STA :ASZBAK
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA #0
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :ASIZE
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :ASIZE
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
CLC
|
||||
INX
|
||||
INX
|
||||
|
||||
BCC :NOINY
|
||||
INY
|
||||
:NOINY
|
||||
STX :MSIZE
|
||||
STY :MSIZE+1
|
||||
LDA #0
|
||||
LDX :MSIZE+1
|
||||
BEQ :PART
|
||||
LDY #0
|
||||
:FULL
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULL
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULL
|
||||
:PART
|
||||
LDX :MSIZE
|
||||
BEQ :MFEXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:MFEXIT
|
||||
LDY #0
|
||||
LDA :ASZBAK
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA :ESZBAK
|
||||
STA (ADDR1),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :ASZBAK
|
||||
LDA :MSIZE
|
||||
STA RETURN
|
||||
LDA :MSIZE+1
|
||||
STA RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
RTS
|
||||
:MSIZE DS 2
|
||||
:ASIZE DS 1
|
||||
:ESIZE DS 1
|
||||
:ASZBAK DS 1
|
||||
:ESZBAK DS 1
|
||||
SKP 10
|
||||
AGET81
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :IDX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :IDX+1
|
||||
LDY #1
|
||||
LDA (ADDR1),Y
|
||||
STA :ESIZE
|
||||
STA RETLEN
|
||||
LDY #0
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :IDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :IDX
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :ESIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :IDX
|
||||
STY :IDX+1
|
||||
CLC
|
||||
LDA #2
|
||||
ADC :IDX
|
||||
STA :RES
|
||||
LDA #0
|
||||
ADC :IDX+1
|
||||
STA :RES+1
|
||||
CLC
|
||||
LDA :RES
|
||||
ADC ADDR1
|
||||
STA :RES
|
||||
LDA :RES+1
|
||||
ADC ADDR1+1
|
||||
STA :RES+1
|
||||
LDY #0
|
||||
LDA :RES
|
||||
STA ADDR1
|
||||
LDA :RES+1
|
||||
STA ADDR1+1
|
||||
:LDLOOP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY RETLEN
|
||||
BCC :LDLOOP
|
||||
BEQ :LDLOOP
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY :RES
|
||||
LDX :RES+1
|
||||
LDA RETLEN
|
||||
RTS
|
||||
:RES DS 2
|
||||
:IDX DS 2
|
||||
:ESIZE DS 1
|
||||
SKP 10
|
||||
APUT81
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA :AIDX
|
||||
PLA
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
LDA ADDR4+1
|
||||
PHA
|
||||
LDA ADDR4
|
||||
PHA
|
||||
LDA :AIDX
|
||||
PHA
|
||||
JSR AGET81
|
||||
STY ADDR2
|
||||
STX ADDR2+1
|
||||
LDY #1
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :LP
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:RETADR DS 2
|
||||
:ESIZE DS 1
|
||||
:ASIZE DS 1
|
||||
:AIDX DS 1
|
||||
ARRAYS81X
|
|
@ -4,19 +4,15 @@
|
|||
* *
|
||||
* ARRAYS82.LIB *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 09-DEC-2018 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* *
|
||||
* LICENSE: APACHE 2.0, WHERE *
|
||||
* APPLICABLE. CODE INSPIRED *
|
||||
* BY THE WORKS OF OTHERS MAY *
|
||||
* FALL UNDER A DIFFERENT *
|
||||
* LICENSE (NOTED IN ROUTINE). *
|
||||
* OS: DOS 3.3 *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* *
|
||||
* THIS IS A STANDARD LIBRARY *
|
||||
* FOR 8BIT, 2 DIMENSIONAL *
|
||||
|
@ -28,9 +24,9 @@
|
|||
* *
|
||||
* LIST OF ROUTINES *
|
||||
* *
|
||||
* DIM82 : DIM A 2D, 8BIT ARRAY *
|
||||
* AGET82: GET ADDRESS OF ELEM *
|
||||
* IN ARRAY AT X,Y *
|
||||
* ADIM82 : DIM 2D, 8BIT ARRAY *
|
||||
* AGET82: GET SPECIFIED INDEX *
|
||||
* ELEMENT; PUT RETURN *
|
||||
* APUT82: PUT CONTENTS OF ONE *
|
||||
* ADDRESS INTO ARRAY *
|
||||
* AT INDEX X,Y *
|
||||
|
@ -38,11 +34,11 @@
|
|||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DIM82 :: INIT 2D ARRAY *
|
||||
* ADIM82 : INIT 2D ARRAY *
|
||||
*- -*
|
||||
* THIS SIMPLY CREATES A 1D *
|
||||
* ARRAY WITH THE DIM OF *
|
||||
* ARRAYX BY ARRAYY. *
|
||||
* [:AXSIZE] BY [:AYSIZE]. *
|
||||
*- -*
|
||||
* FIRST BYTE OF MEMORY USED *
|
||||
* HOLDS LENGTH OF X (ROWS); *
|
||||
|
@ -59,17 +55,17 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #4 ; X DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #4 ; Y DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #1 ; ELEMENT BYTESIZE *
|
||||
* PHA *
|
||||
* JSR DIM82 *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #4 ; X DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #4 ; Y DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #1 ; ELEMENT BYTESIZE *
|
||||
* PHA *
|
||||
* JSR DIM82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -90,12 +86,18 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = ARRAY ADDRESS LO BYTE *
|
||||
* X = ARRAY ADDRESS HI BYTE *
|
||||
* A = CLOBBERED *
|
||||
* .Y = ARRAY ADDRESS LO BYTE *
|
||||
* .X = ARRAY ADDRESS HI BYTE *
|
||||
* .A = ELEMENT SIZE *
|
||||
* *
|
||||
* [RETURN] = TOTAL BYTE SIZE *
|
||||
* OF ARRAY. *
|
||||
* *
|
||||
* [RETLEN] = LENGTH IN BYTES *
|
||||
* OF THE RETURN VALUE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM82
|
||||
ADIM82
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
|
@ -118,6 +120,8 @@ DIM82
|
|||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
*
|
||||
** LOOP THROUGH Y, CLEARING MEMORY
|
||||
** FOR X BYTES TIMES ELEMENT SIZE,
|
||||
|
@ -155,6 +159,8 @@ DIM82
|
|||
** NOW MULTIPLY BY LENGTH OF ELEMENTS
|
||||
*
|
||||
LDA #0
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
|
@ -176,11 +182,13 @@ DIM82
|
|||
DEX
|
||||
BNE :SHIFTR
|
||||
*
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
LDX :PROD
|
||||
LDY :PROD+1
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
*
|
||||
** NOW CLEAR MEMORY BLOCKS, WHOLE PAGES FIRST
|
||||
*
|
||||
|
@ -234,9 +242,21 @@ DIM82
|
|||
PHA
|
||||
*
|
||||
** RETURN POINTER TO STARTING ADDRESS OF ARRAY
|
||||
** AND STORE TOTAL BYTE SIZE IN RETURN MEM
|
||||
*
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :PROD
|
||||
STA RETURN
|
||||
LDA :PROD+1
|
||||
STA RETURN+1
|
||||
LDA :PROD+2
|
||||
STA RETURN+2
|
||||
LDA :PROD+3
|
||||
STA RETURN+3
|
||||
LDA #4 ; SIZE OF RETURN
|
||||
STA RETLEN
|
||||
LDA :MCAND
|
||||
*
|
||||
RTS
|
||||
*
|
||||
|
@ -251,11 +271,11 @@ DIM82
|
|||
:MCAND DS 2
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* AGET82 :: INIT 2D ARRAY *
|
||||
* AGET82 : INIT 2D ARRAY *
|
||||
*- -*
|
||||
* THIS GETS THE ADDRESS OF AN *
|
||||
* ELEMENT AT THE INDEX X,Y IN *
|
||||
* THE SPECIFIED ARRAY. *
|
||||
* ELEMENT AT THE INDEX OF *
|
||||
* [:XIDX],[:YIDX]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -266,15 +286,15 @@ DIM82
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #2 ; X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; Y INDEX *
|
||||
* PHA *
|
||||
* JSR AGET82 *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #2 ; X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; Y INDEX *
|
||||
* PHA *
|
||||
* JSR AGET82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -294,9 +314,15 @@ DIM82
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LO BYTE OF ELEM ADDR *
|
||||
* X = HI BYTE OF ELEM ADDR *
|
||||
* A = CLOBBERED; TRASH *
|
||||
* .Y = LO BYTE OF ELEM ADDR *
|
||||
* .X = HI BYTE OF ELEM ADDR *
|
||||
* .A = ELEMENT/RETURN LENGTH *
|
||||
* *
|
||||
* [RETURN] = VALUE FOUND AT *
|
||||
* SPECIFIED INDEX. *
|
||||
* *
|
||||
* [RETLEN] = LENGTH IN BYTES *
|
||||
* OF THE RETURN VALUE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
AGET82
|
||||
|
@ -322,6 +348,9 @@ AGET82
|
|||
LDY #2
|
||||
LDA (ADDR1),Y ; ELEMENT LENGTH
|
||||
STA :MCAND ; ELEMENT LENGTH
|
||||
STA :ELEN
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
*
|
||||
** MULTIPLY X AND Y
|
||||
*
|
||||
|
@ -375,9 +404,13 @@ AGET82
|
|||
DEX
|
||||
BNE :SHIFTR
|
||||
*
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
*
|
||||
** NOW ADD BASE ADDRESS OF ARRAY TO GET
|
||||
** THE ADDRESS OF THE INDEX VALUE
|
||||
|
@ -394,6 +427,17 @@ AGET82
|
|||
*
|
||||
LDY :PROD
|
||||
LDX :PROD+1
|
||||
STY ADDR1
|
||||
STX ADDR1+1
|
||||
LDY #0
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
INY
|
||||
CPY :ELEN
|
||||
BNE :RLP
|
||||
LDA :ELEN
|
||||
STA RETLEN
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
|
@ -402,6 +446,9 @@ AGET82
|
|||
LDA RETADR
|
||||
PHA
|
||||
*
|
||||
LDA RETLEN
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
|
@ -411,13 +458,15 @@ AGET82
|
|||
:PROD DS 4
|
||||
:MLIER DS 2
|
||||
:MCAND DS 2
|
||||
:ELEN DS 1
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* APUT82 :: PUT DATA INTO ELEM *
|
||||
* APUT82 : PUT DATA INTO ELEM *
|
||||
*- -*
|
||||
* THIS PUTS DATA FROM ONE ADDR *
|
||||
* INTO THE ADDRESS OF AN ARRAY *
|
||||
* WITH THE INDEX OF X,Y. *
|
||||
* WITH THE INDEX OF [:XIDX], *
|
||||
* [:YIDX]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
|
@ -428,19 +477,19 @@ AGET82
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; SOURCE DATA *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$3A0 ; DEST ARRAY *
|
||||
* PHA *
|
||||
* LDA #<$3A0 *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEM X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; ELEM Y INDEX *
|
||||
* PHA *
|
||||
* JSR APUT82 *
|
||||
* LDA #>$300 ; SOURCE DATA *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>$3A0 ; DEST ARRAY *
|
||||
* PHA *
|
||||
* LDA #<$3A0 *
|
||||
* PHA *
|
||||
* LDA #2 ; ELEM X INDEX *
|
||||
* PHA *
|
||||
* LDA #3 ; ELEM Y INDEX *
|
||||
* PHA *
|
||||
* JSR APUT82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -462,9 +511,9 @@ AGET82
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOBYTE ELEMENT ADDRESS *
|
||||
* X = HIBYTE ELEMENT ADDRESS *
|
||||
* A = ELEMENT BYTE LENGTH *
|
||||
* .Y = LOBYTE ELEMENT ADDRESS *
|
||||
* .X = HIBYTE ELEMENT ADDRESS *
|
||||
* .A = ELEMENT BYTE LENGTH *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
APUT82
|
||||
|
|
266
disks/disk3_arrays/T.ARRAYS82.MIN
Normal file
266
disks/disk3_arrays/T.ARRAYS82.MIN
Normal file
|
@ -0,0 +1,266 @@
|
|||
JMP ARRAYS82X
|
||||
********************************
|
||||
DIM82
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MCAND
|
||||
PLA
|
||||
STA :AYSIZE
|
||||
STA :AYBAK
|
||||
PLA
|
||||
STA :AXSIZE
|
||||
STA :AXBAK
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :AXSIZE
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :AXSIZE
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :AYSIZE
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :MLIER
|
||||
STY :MLIER+1
|
||||
LDA #0
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
LDA #$00
|
||||
LDX :PROD+1
|
||||
BEQ :PART
|
||||
LDY #0
|
||||
:FULL
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULL
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULL
|
||||
:PART
|
||||
LDX :PROD
|
||||
BEQ :MFEXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:MFEXIT
|
||||
LDY #0
|
||||
LDA :AXBAK
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA :AYBAK
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA :MCAND
|
||||
STA (ADDR1),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :PROD
|
||||
STA RETURN
|
||||
LDA :PROD+1
|
||||
STA RETURN+1
|
||||
LDA :PROD+2
|
||||
STA RETURN+2
|
||||
LDA :PROD+3
|
||||
STA RETURN+3
|
||||
LDA #4
|
||||
STA RETLEN
|
||||
LDA :MCAND
|
||||
RTS
|
||||
:PROD DS 4
|
||||
:AXSIZE DS 1
|
||||
:AYSIZE DS 1
|
||||
:AXBAK DS 1
|
||||
:AYBAK DS 1
|
||||
:MLIER DS 2
|
||||
:MCAND DS 2
|
||||
********************************
|
||||
AGET82
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :YIDX
|
||||
PLA
|
||||
STA :XIDX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #2
|
||||
LDA (ADDR1),Y
|
||||
STA :MCAND
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
LDA #0
|
||||
TAY
|
||||
STY SCRATCH
|
||||
BEQ :ENTLP
|
||||
:DOADD
|
||||
CLC
|
||||
ADC :XIDX
|
||||
TAX
|
||||
TYA
|
||||
ADC SCRATCH
|
||||
TAY
|
||||
TXA
|
||||
:LP
|
||||
ASL :XIDX
|
||||
ROL SCRATCH
|
||||
:ENTLP
|
||||
LSR :YIDX
|
||||
BCS :DOADD
|
||||
BNE :LP
|
||||
STX :MLIER
|
||||
STY :MLIER+1
|
||||
LDA #0
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
:SHIFTR LSR :MLIER+1
|
||||
ROR :MLIER
|
||||
BCC :ROTR
|
||||
LDA :PROD+2
|
||||
CLC
|
||||
ADC :MCAND
|
||||
STA :PROD+2
|
||||
LDA :PROD+3
|
||||
ADC :MCAND+1
|
||||
:ROTR
|
||||
ROR
|
||||
STA :PROD+3
|
||||
ROR :PROD+2
|
||||
ROR :PROD+1
|
||||
ROR :PROD
|
||||
DEX
|
||||
BNE :SHIFTR
|
||||
CLC
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
CLC
|
||||
LDA :PROD
|
||||
ADC ADDR1
|
||||
STA :PROD
|
||||
LDA :PROD+1
|
||||
ADC ADDR1+1
|
||||
STA :PROD+1
|
||||
LDY :PROD
|
||||
LDX :PROD+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:XIDX DS 2
|
||||
:YIDX DS 2
|
||||
:PROD DS 4
|
||||
:MLIER DS 2
|
||||
:MCAND DS 2
|
||||
********************************
|
||||
APUT82
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA :YIDX
|
||||
PLA
|
||||
STA :XIDX
|
||||
PLA
|
||||
STA ADDR4
|
||||
PLA
|
||||
STA ADDR4+1
|
||||
PLA
|
||||
STA ADDR3
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
LDA ADDR4+1
|
||||
PHA
|
||||
LDA ADDR4
|
||||
PHA
|
||||
LDA :XIDX
|
||||
PHA
|
||||
LDA :YIDX
|
||||
PHA
|
||||
JSR AGET82
|
||||
STY ADDR2
|
||||
STX ADDR2+1
|
||||
LDY #2
|
||||
LDA (ADDR4),Y
|
||||
STA :ESIZE
|
||||
LDY #0
|
||||
:CLP
|
||||
LDA (ADDR3),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
CPY :ESIZE
|
||||
BNE :CLP
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
LDX ADDR2+1
|
||||
LDY ADDR2
|
||||
LDA :ESIZE
|
||||
RTS
|
||||
:RETADR DS 2
|
||||
:ESIZE DS 1
|
||||
:XIDX DS 1
|
||||
:YIDX DS 1
|
||||
ARRAYS82X
|
|
@ -1,10 +1,10 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
* DIM82 :: INIT 2D ARRAY *
|
||||
* DIM82 : INIT 2D ARRAY *
|
||||
*- -*
|
||||
* THIS SIMPLY CREATES A 1D *
|
||||
* ARRAY WITH THE DIM OF *
|
||||
* ARRAYX BY ARRAYY. *
|
||||
* [:AXSIZE] BY [:AYSIZE]. *
|
||||
*- -*
|
||||
* FIRST BYTE OF MEMORY USED *
|
||||
* HOLDS LENGTH OF X (ROWS); *
|
||||
|
@ -21,17 +21,17 @@
|
|||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #4 ; X DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #4 ; Y DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #1 ; ELEMENT BYTESIZE *
|
||||
* PHA *
|
||||
* JSR DIM82 *
|
||||
* LDA #>$300 ; ARRAY ADDR *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #4 ; X DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #4 ; Y DIMENSION BOUND *
|
||||
* PHA *
|
||||
* LDA #1 ; ELEMENT BYTESIZE *
|
||||
* PHA *
|
||||
* JSR DIM82 *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
|
@ -52,9 +52,15 @@
|
|||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = ARRAY ADDRESS LO BYTE *
|
||||
* X = ARRAY ADDRESS HI BYTE *
|
||||
* A = CLOBBERED *
|
||||
* .Y = ARRAY ADDRESS LO BYTE *
|
||||
* .X = ARRAY ADDRESS HI BYTE *
|
||||
* .A = ELEMENT SIZE *
|
||||
* *
|
||||
* [RETURN] = TOTAL BYTE SIZE *
|
||||
* OF ARRAY. *
|
||||
* *
|
||||
* [RETLEN] = LENGTH IN BYTES *
|
||||
* OF THE RETURN VALUE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM82
|
||||
|
@ -80,6 +86,8 @@ DIM82
|
|||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
STA :MCAND+1
|
||||
*
|
||||
** LOOP THROUGH Y, CLEARING MEMORY
|
||||
** FOR X BYTES TIMES ELEMENT SIZE,
|
||||
|
@ -117,6 +125,8 @@ DIM82
|
|||
** NOW MULTIPLY BY LENGTH OF ELEMENTS
|
||||
*
|
||||
LDA #0
|
||||
STA :PROD
|
||||
STA :PROD+1
|
||||
STA :PROD+2
|
||||
STA :PROD+3
|
||||
LDX #$10
|
||||
|
@ -138,11 +148,13 @@ DIM82
|
|||
DEX
|
||||
BNE :SHIFTR
|
||||
*
|
||||
CLC
|
||||
INC :PROD ; INCREASE BY 3
|
||||
INC :PROD
|
||||
INC :PROD
|
||||
LDX :PROD
|
||||
LDY :PROD+1
|
||||
BCC :NOCAR
|
||||
INC :PROD+1
|
||||
:NOCAR
|
||||
*
|
||||
** NOW CLEAR MEMORY BLOCKS, WHOLE PAGES FIRST
|
||||
*
|
||||
|
@ -196,9 +208,21 @@ DIM82
|
|||
PHA
|
||||
*
|
||||
** RETURN POINTER TO STARTING ADDRESS OF ARRAY
|
||||
** AND STORE TOTAL BYTE SIZE IN RETURN MEM
|
||||
*
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
LDA :PROD
|
||||
STA RETURN
|
||||
LDA :PROD+1
|
||||
STA RETURN+1
|
||||
LDA :PROD+2
|
||||
STA RETURN+2
|
||||
LDA :PROD+3
|
||||
STA RETURN+3
|
||||
LDA #4 ; SIZE OF RETURN
|
||||
STA RETLEN
|
||||
LDA :MCAND
|
||||
*
|
||||
RTS
|
||||
*
|
235
disks/disk3_arrays/T.REQUIRED.LIB
Normal file
235
disks/disk3_arrays/T.REQUIRED.LIB
Normal file
|
@ -0,0 +1,235 @@
|
|||
*
|
||||
JMP ENDVARS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* REQUIRED.LIB *
|
||||
*- -*
|
||||
* GLOBAL ROUTINES AND *
|
||||
* VARIABLES EITHER USED BY THE *
|
||||
* LIBRARY OR PROVIDED FOR DEMO *
|
||||
* USE OR DEBUGGING PURPOSES. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* GLOBAL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __GETRET: GET RETURN *
|
||||
*- -*
|
||||
* COPIES THE DATA IN [RETURN] *
|
||||
* TO THE SPECIFIED LOCATION. *
|
||||
* LENGTH IS DETERMINED BY *
|
||||
* VALUE OF RETLEN. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__GETRET
|
||||
*
|
||||
LDY #255
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
:LP
|
||||
INY
|
||||
LDA RETURN,Y
|
||||
STA (ADDR1),Y
|
||||
CPY RETLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __SETPARM: SET PARAMETER *
|
||||
*- -*
|
||||
* COPIES DATA FROM SPECIFIED *
|
||||
* ADDRESS TO THE [PARAM] *
|
||||
* LOCATION FOR PASSING TO *
|
||||
* A ROUTINE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__SETPARM
|
||||
*
|
||||
LDY #255
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __DUMP: DUMP DATA *
|
||||
*- -*
|
||||
* OUTPUTS DATA LOCATED AT THE *
|
||||
* SPECIFIED ADDRESS IN HEX *
|
||||
* FORMAT FOR SPECIFIED NUMBER *
|
||||
* OF BYTES. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__DUMP
|
||||
*
|
||||
PLA
|
||||
STA :RET
|
||||
PLA
|
||||
STA :RET+1
|
||||
PLA
|
||||
STA :LENGTH
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
LDA #$8D
|
||||
JSR $FDF0
|
||||
LDA ADDR1+1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #186 ; :
|
||||
JSR $FDF0
|
||||
LDA #160 ; SPC
|
||||
JSR $FDF0
|
||||
*
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR1),Y
|
||||
AND #$F0 ; MASK RIGHT
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA (ADDR1),Y
|
||||
AND #$0F ; MASK LEFT
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDX :RIGHT
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #160
|
||||
JSR $FDF0
|
||||
INY
|
||||
CPY :LENGTH
|
||||
BNE :LP
|
||||
*
|
||||
*LDA #$8D
|
||||
*JSR $FDF0
|
||||
LDA :RET+1
|
||||
PHA
|
||||
LDA :RET
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
:RET DS 2
|
||||
:RIGHT DS 1
|
||||
:LEFT DS 1
|
||||
:LENGTH DS 1
|
||||
:HEXTAB ASC "0123456789ABCDEF"
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __P: PRINT FOLLOWING ASC *
|
||||
*- -*
|
||||
* THIS IS THE XPRINT ROUTINE *
|
||||
* FROM STDIO.LIB, BUT STRIPPED *
|
||||
* OF COMMENTS. FOR DEBUG. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__P
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #1
|
||||
:LP LDA (ADDR1),Y
|
||||
BEQ :DONE
|
||||
JSR $FDF0
|
||||
INY
|
||||
BNE :LP
|
||||
:DONE CLC
|
||||
TYA
|
||||
ADC ADDR1
|
||||
STA ADDR1
|
||||
LDA ADDR1+1
|
||||
ADC #0
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __W: WAIT FOR KEYPRESS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__W
|
||||
JSR $FD0C
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* GLOBAL VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** 256 BYTES DEDICATED TO RETURN
|
||||
** VALUES OF VARIABLE LENGTH; CAN BE
|
||||
** MODIFIED TO SUIT SMALLER OR LARGER
|
||||
** NEEDS.
|
||||
*
|
||||
*
|
||||
RETLEN DS 1 ; RETURN VALUE BYTE LENGTH
|
||||
RETURN DS 256
|
||||
*
|
||||
** 256 BYTE VALUE DEDICATED TO LARGE
|
||||
** OR VARIABLE LENGTH PARAMETERS. THIS
|
||||
** CAN ALSO BE CHANGED TO FIT SMALLER OR
|
||||
** LARGER BOUNDS.
|
||||
*
|
||||
PARLEN DS 1
|
||||
PARAM DS 256
|
||||
*
|
||||
ENDVARS
|
||||
*
|
72
disks/disk3_arrays/T.REQUIRED.MAC
Normal file
72
disks/disk3_arrays/T.REQUIRED.MAC
Normal file
|
@ -0,0 +1,72 @@
|
|||
********************************
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* REQUIRED.MAC *
|
||||
*- -*
|
||||
* MACROS USED FOR CORE UTILS *
|
||||
* AND LIBRARY ROUTINES. NOTE *
|
||||
* THAT THE LIBRARIES DO NOT *
|
||||
* USE THESE MACROS, BUT MAY *
|
||||
* USE THE ROUTINES. THESE ARE *
|
||||
* MERELY PROVIDED FOR THE SAKE *
|
||||
* OF CONVENIENCE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _GRET: GET RETURN VALUE *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_GRET MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __GETRET
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SPAR: SET PARAMETER *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SPAR MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __SETPARM
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _DUMP: DUMP DATA *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_DUMP MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR __DUMP
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PRNT: PRINT STRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRNT MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _WAIT: WAIT FOR KEYPRESS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
*
|
|
@ -1,122 +0,0 @@
|
|||
*
|
||||
*``````````````````````````````*
|
||||
*- -*
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PRINT INDEXED STRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRS MAC
|
||||
LDA #<]1
|
||||
STA RESULT2
|
||||
LDA #>]1
|
||||
STA RESULT2+1
|
||||
JSR PRNSTR
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CONCATENATE STRINGS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SCAT MAC
|
||||
LDA #<]1
|
||||
STA __S1A
|
||||
LDA #>]1
|
||||
STA __S1A+1
|
||||
LDA #<]2
|
||||
STA __S2A
|
||||
LDA #>]2
|
||||
STA __S2A+1
|
||||
LDA ]3
|
||||
STA __MLEN
|
||||
JSR STRCAT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* FIND SUBSTRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SPOS MAC
|
||||
LDA #<]1
|
||||
STA __SUB
|
||||
LDA #>]1
|
||||
STA __SUB+1
|
||||
LDA #<]2
|
||||
STA __STR
|
||||
LDA #>]2
|
||||
STA __STR+1
|
||||
JSR SUBPOS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SCPY :: SUBSTRING COPY *
|
||||
*- -*
|
||||
* USAGE: _SCPY ]1;]2;]3;]4;]5 *
|
||||
* *
|
||||
* ]1 SRC STRING ADDR *
|
||||
* ]2 DEST STRING ADDRESS *
|
||||
* ]3 STARTING SUBSTRING INDEX *
|
||||
* ]4 SUBSTRING LENGTH *
|
||||
* ]5 MAX LENGTH OF DEST STR *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SCPY MAC
|
||||
LDA #<]1
|
||||
STA __S1A
|
||||
LDA #>]1
|
||||
STA __S1A+1
|
||||
LDA #<]2
|
||||
STA __S2A
|
||||
LDA #>]2
|
||||
STA __S2A+1
|
||||
LDA ]3
|
||||
STA __SINDEX
|
||||
LDA ]4
|
||||
STA __SCNT
|
||||
LDA ]5
|
||||
STA __MLEN
|
||||
JSR SUBCOPY
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SDEL :: DELETE SUBSTRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SDEL MAC
|
||||
LDA #<]1
|
||||
STA __S1A
|
||||
LDA #>]1
|
||||
STA __S1A+1
|
||||
LDA ]2
|
||||
STA __SINDEX
|
||||
LDA ]3
|
||||
STA __SCNT
|
||||
JSR SUBDEL
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SINS :: INSERT SUBSTRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SINS MAC
|
||||
LDA #<]1
|
||||
STA __S1A
|
||||
LDA #>]1
|
||||
STA __S1A+1
|
||||
LDA #<]2
|
||||
STA __S2A
|
||||
LDA #>]2
|
||||
STA __S2A+1
|
||||
LDA ]3
|
||||
STA __SINDEX
|
||||
LDA ]4
|
||||
STA __MLEN
|
||||
JSR SUBINS
|
||||
<<<
|
Loading…
Reference in New Issue
Block a user