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:
nathanriggs 2018-12-12 14:29:06 -05:00
parent e630924865
commit 795dc18833
21 changed files with 5152 additions and 2324 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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
*

View 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

View File

@ -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

View 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

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View File

@ -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
*

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View 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

View File

@ -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
*

View 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
*

View 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
<<<
*

View File

@ -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
<<<