mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2025-02-08 12:30:31 +00:00
Strings 0.2.0 update
- bugfixes - implemented required library - commenting updates - .min of every routine
This commit is contained in:
parent
1b182844cc
commit
16c1731e54
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -14,10 +14,6 @@
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; DESTINATION *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>11111 ; VALUE TO *
|
||||
* PHA ; CONVERT *
|
||||
* LDA #<11111 *
|
||||
@ -30,8 +26,6 @@
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LO BYTE DESTINATION ADDRESS *
|
||||
* HI BYTE DESTINATION ADDRESS *
|
||||
* LO BYTE VALUE TO CONVERT *
|
||||
* HI BYTE VALUE TO CONVERT *
|
||||
*- -*
|
||||
@ -42,18 +36,16 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
* .Y = COUNTER; TRASH *
|
||||
* .X = COUNTER; TRASH *
|
||||
* .A = LOW BYTE OF RET ADDR *
|
||||
* *
|
||||
* [RETURN] = STRING VALUE *
|
||||
* [RETLEN] = LENGTH OF STRING *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
NUM2STR
|
||||
@ -83,9 +75,9 @@ NUM2STR
|
||||
STA :VALSTR+1
|
||||
*
|
||||
:GETBP
|
||||
PLA
|
||||
LDA #<RETURN
|
||||
STA ADDR1 ; ADDRESS TO STORE STRING
|
||||
PLA
|
||||
LDA #>RETURN+1
|
||||
STA ADDR1+1
|
||||
LDA #0 ; SET BUFFER TO EMPTY
|
||||
LDY #0
|
||||
@ -148,7 +140,7 @@ NUM2STR
|
||||
:EXIT
|
||||
LDA :NGFLAG
|
||||
BPL :POS ; BR IF ORIG VAL POS
|
||||
LDA #'-' ; ELSE
|
||||
LDA #173 ; ELSE
|
||||
JSR :CONCAT ; PUT A MINUS SIGN IN FRONT
|
||||
*
|
||||
:POS
|
98
disks/disk5_strings/T.NUM2STR.MIN
Normal file
98
disks/disk5_strings/T.NUM2STR.MIN
Normal file
@ -0,0 +1,98 @@
|
||||
*
|
||||
NUM2STR
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALSTR
|
||||
PLA
|
||||
STA :VALSTR+1
|
||||
STA :NGFLAG
|
||||
BPL :GETBP
|
||||
LDA #0
|
||||
SEC
|
||||
SBC :VALSTR
|
||||
STA :VALSTR
|
||||
LDA #0
|
||||
SBC :VALSTR+1
|
||||
STA :VALSTR+1
|
||||
:GETBP
|
||||
LDA #<RETURN
|
||||
STA ADDR1
|
||||
LDA #>RETURN+1
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
:CNVERT
|
||||
LDA #0
|
||||
STA :MOD10
|
||||
STA :MOD10+1
|
||||
LDX #16
|
||||
CLC
|
||||
:DVLOOP
|
||||
ROL :VALSTR
|
||||
ROL :VALSTR+1
|
||||
ROL :MOD10
|
||||
ROL :MOD10+1
|
||||
SEC
|
||||
LDA :MOD10
|
||||
SBC #10
|
||||
TAY
|
||||
LDA :MOD10+1
|
||||
SBC #0
|
||||
BCC :DECCNT
|
||||
STY :MOD10
|
||||
STA :MOD10+1
|
||||
:DECCNT
|
||||
DEX
|
||||
BNE :DVLOOP
|
||||
ROL :VALSTR
|
||||
ROL :VALSTR+1
|
||||
:CONCH
|
||||
LDA :MOD10
|
||||
CLC
|
||||
ADC #$B0
|
||||
JSR :CONCAT
|
||||
LDA :VALSTR
|
||||
ORA :VALSTR+1
|
||||
BNE :CNVERT
|
||||
:EXIT
|
||||
LDA :NGFLAG
|
||||
BPL :POS
|
||||
LDA #173
|
||||
JSR :CONCAT
|
||||
:POS
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:CONCAT
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAY
|
||||
BEQ :EXITMR
|
||||
:MVELP
|
||||
LDA (ADDR1),Y
|
||||
INY
|
||||
STA (ADDR1),Y
|
||||
DEY
|
||||
DEY
|
||||
BNE :MVELP
|
||||
:EXITMR
|
||||
PLA
|
||||
LDY #1
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CLC
|
||||
ADC #1
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:NGFLAG DS 1
|
||||
:VALSTR DS 2
|
||||
:MOD10 DS 2
|
@ -36,9 +36,9 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOW BYTE STRING ADDR *
|
||||
* X = HI BYTE STRING ADDR *
|
||||
* A = STRING LENGTH *
|
||||
* .Y = LOW BYTE STRING ADDR *
|
||||
* .X = HI BYTE STRING ADDR *
|
||||
* .A = STRING LENGTH *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PRNSTR
|
||||
@ -88,4 +88,3 @@ PRNSTR
|
||||
*
|
||||
:S1LEN DS 1
|
||||
*
|
||||
*
|
32
disks/disk5_strings/T.PRNSTR.MIN
Normal file
32
disks/disk5_strings/T.PRNSTR.MIN
Normal file
@ -0,0 +1,32 @@
|
||||
*
|
||||
PRNSTR
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
JSR SCOUT1
|
||||
CPY :S1LEN
|
||||
BNE :LP
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
RTS
|
||||
:S1LEN DS 1
|
235
disks/disk5_strings/T.REQUIRED.LIB
Normal file
235
disks/disk5_strings/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 ADDR3
|
||||
PLA
|
||||
STA ADDR3+1
|
||||
*
|
||||
LDA #$8D
|
||||
JSR $FDF0
|
||||
LDA ADDR3+1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR3+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR3
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR3
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #186 ; :
|
||||
JSR $FDF0
|
||||
LDA #160 ; SPC
|
||||
JSR $FDF0
|
||||
*
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR3),Y
|
||||
AND #$F0 ; MASK RIGHT
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA (ADDR3),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
|
||||
*
|
134
disks/disk5_strings/T.REQUIRED.MAC
Normal file
134
disks/disk5_strings/T.REQUIRED.MAC
Normal file
@ -0,0 +1,134 @@
|
||||
********************************
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* 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. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _ISLIT: DETERMINES WHETHER A *
|
||||
* PARAM IS LITERAL OR *
|
||||
* NOT, AND CHANGES *
|
||||
* APPROPRIATELY. FOR *
|
||||
* MACRO USE ONLY. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; GET HI
|
||||
PHA
|
||||
LDA ]1 ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA ]1+1 ; SO GET HIGH VAL FROM ADDR
|
||||
PHA
|
||||
LDA ]1 ; THEN LO VAL
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _ISSTR: DETERMINES WHETHER A *
|
||||
* PARAM IS A STRING OR *
|
||||
* NOT, AND CHANGES *
|
||||
* APPROPRIATELY. FOR *
|
||||
* MACRO USE ONLY. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISSTR MAC
|
||||
IF "=]1 ; IF ]1 IS A STRING
|
||||
*
|
||||
** STORE STRING AT TEMP ADDRESS, THEN
|
||||
** PUSH TEMP ADDRESS
|
||||
*
|
||||
JMP STRCONT
|
||||
]STRTMP STR ]1
|
||||
STRCONT
|
||||
LDY #0
|
||||
LDA ]STRTMP
|
||||
STA PARLEN
|
||||
STA PARAM
|
||||
]STRLP1
|
||||
INY
|
||||
LDA ]STRTMP,Y
|
||||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE ]STRLP1
|
||||
*
|
||||
LDA #>PARAM ; GET HI
|
||||
PHA
|
||||
LDA #<PARAM ; GET LO
|
||||
PHA
|
||||
ELSE ; ]1 IS ADDRESS
|
||||
LDA #>]1 ; SO GET HIBYTE OF ADDR
|
||||
PHA
|
||||
LDA #<]1 ; THEN LOBYTE
|
||||
PHA
|
||||
FIN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _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
|
||||
<<<
|
||||
*
|
@ -36,21 +36,18 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = HI BYTE OF NUMBER *
|
||||
* X = LO BYTE OF NUMBER *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
* .Y = LO BYTE OF NUMBER *
|
||||
* .X = HI BYTE OF NUMBER *
|
||||
* .A = LOW BYTE OF RET ADDR *
|
||||
* *
|
||||
* [RETURN] = NUMBER VALUE WORD *
|
||||
* [RETLEN] = 2 (NUM OF BYTES) *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
STR2NUM
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
@ -89,7 +86,7 @@ STR2NUM
|
||||
:INIT1
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
CMP #'-'
|
||||
CMP #173
|
||||
BNE :PLUS ; BR IF NOT -
|
||||
LDA #$0FF
|
||||
STA :SNGFLAG ; ELSE SIGN IS NEGATIVE
|
||||
@ -170,8 +167,6 @@ STR2NUM
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
|
||||
; Y IS ALREADY LOW BYTE
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
@ -182,6 +177,10 @@ STR2NUM
|
||||
*
|
||||
LDX :NACCUM+1
|
||||
LDY :NACCUM
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA :NINDEX
|
||||
*
|
||||
RTS
|
105
disks/disk5_strings/T.STR2NUM.MIN
Normal file
105
disks/disk5_strings/T.STR2NUM.MIN
Normal file
@ -0,0 +1,105 @@
|
||||
*
|
||||
STR2NUM
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA #1
|
||||
STA :NINDEX
|
||||
LDA #0
|
||||
STA :NACCUM
|
||||
STA :NACCUM+1
|
||||
STA :SNGFLAG
|
||||
TXA
|
||||
BNE :INIT1
|
||||
JMP :EREXIT
|
||||
:INIT1
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
CMP #173
|
||||
BNE :PLUS
|
||||
LDA #$0FF
|
||||
STA :SNGFLAG
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BEQ :EREXIT
|
||||
JMP :CNVERT
|
||||
:PLUS
|
||||
CMP #'+'
|
||||
BNE :CHKDIG
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BEQ :EREXIT
|
||||
:CNVERT
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
:CHKDIG
|
||||
CMP #$B0 ; "0"
|
||||
BMI :EREXIT
|
||||
CMP #$BA
|
||||
BPL :EREXIT
|
||||
PHA
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
LDA :NACCUM
|
||||
LDY :NACCUM+1
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
CLC
|
||||
ADC :NACCUM
|
||||
STA :NACCUM
|
||||
TYA
|
||||
ADC :NACCUM+1
|
||||
STA :NACCUM+1
|
||||
PLA
|
||||
SEC
|
||||
SBC #$B0
|
||||
CLC
|
||||
ADC :NACCUM
|
||||
STA :NACCUM
|
||||
BCC :D2B1
|
||||
INC :NACCUM+1
|
||||
:D2B1
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BNE :CNVERT
|
||||
LDA :SNGFLAG
|
||||
BPL :OKEXIT
|
||||
LDA #0
|
||||
SEC
|
||||
SBC :NACCUM
|
||||
STA :NACCUM
|
||||
LDA #0
|
||||
SBC :NACCUM+1
|
||||
STA :NACCUM+1
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX :NACCUM+1
|
||||
LDY :NACCUM
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA :NINDEX
|
||||
RTS
|
||||
:NACCUM DS 2
|
||||
:SNGFLAG DS 1
|
||||
:NINDEX DS 1
|
@ -4,7 +4,9 @@
|
||||
*- -*
|
||||
* CONCATENATE TWO STRINGS INTO *
|
||||
* A SINGLE STRING STORE WHERE *
|
||||
* THE FIRST STRING IS LOCATED *
|
||||
* THE FIRST STRING IS LOCATED. *
|
||||
* ADDITIONALLY COPIES CONCAT'D *
|
||||
* STRING TO [RETURN]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
@ -50,18 +52,15 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = CLOBBERED; TRASH *
|
||||
* X = LENGTH OF FINAL STRING *
|
||||
* A = 1 OF OVERFLOW, 0 IF NO *
|
||||
* .Y = CLOBBERED; TRASH *
|
||||
* .X = LENGTH OF FINAL STRING *
|
||||
* .A = 1 IF OVERFLOW, 0 IF NO *
|
||||
* [RETURN] = CONCAT'D STRING *
|
||||
* [RETLEN] = LENGTH OF NEW STR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRCAT
|
||||
@ -74,6 +73,7 @@ STRCAT
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :MLEN ; MAXIMUM CONCAT LENGTH
|
||||
*
|
||||
@ -155,9 +155,16 @@ STRCAT
|
||||
DEC :SCNT ; DECREMENT COUNTER
|
||||
BNE :CATLP ; CONT UNTIL __SCNT = 0
|
||||
*
|
||||
*
|
||||
:EXIT
|
||||
*
|
||||
** UPDATE STRING1 LENGTH
|
||||
*
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
@ -165,11 +172,22 @@ STRCAT
|
||||
LDA RETADR
|
||||
PHA
|
||||
*
|
||||
LDA :S1LEN
|
||||
** COPY TO [RETURN]
|
||||
*
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; LENGTH OF STRING
|
||||
STA RETLEN
|
||||
LDA #1
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
CPY RETLEN
|
||||
INY
|
||||
BNE :RLP
|
||||
LDA RETLEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A ; CARRY = 1 IF OVERFLOW, 0 IF NOT
|
||||
*
|
||||
LDX :S3LEN ; RETURN FINAL LENGTH
|
||||
*
|
||||
RTS
|
||||
@ -185,4 +203,3 @@ STRCAT
|
||||
:SCNT DS 1
|
||||
:SOVF DS 1
|
||||
*
|
||||
*
|
96
disks/disk5_strings/T.STRCAT.MIN
Normal file
96
disks/disk5_strings/T.STRCAT.MIN
Normal file
@ -0,0 +1,96 @@
|
||||
*
|
||||
STRCAT
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
STA :S1IND
|
||||
INC :S1IND
|
||||
LDA (ADDR2),Y
|
||||
STA :S2LEN
|
||||
LDA #1
|
||||
STA :S2IND
|
||||
LDA :S2LEN
|
||||
CLC
|
||||
ADC :S1LEN
|
||||
STA :S3LEN
|
||||
BCS :TOOLONG
|
||||
CMP :MLEN
|
||||
BEQ :LENOK
|
||||
BCC :LENOK
|
||||
:TOOLONG
|
||||
LDA #$0FF
|
||||
STA :SOVF
|
||||
LDA :MLEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EXIT
|
||||
STA :SCNT
|
||||
LDA :MLEN
|
||||
STA :S1LEN
|
||||
JMP :DOCAT
|
||||
:LENOK
|
||||
STA :S1LEN
|
||||
LDA #0
|
||||
STA :SOVF
|
||||
LDA :S2LEN
|
||||
STA :SCNT
|
||||
:DOCAT
|
||||
LDA :SCNT
|
||||
BEQ :EXIT
|
||||
:CATLP
|
||||
LDY :S2IND
|
||||
LDA (ADDR2),Y
|
||||
LDY :S1IND
|
||||
STA (ADDR1),Y
|
||||
INC :S1IND
|
||||
INC :S2IND
|
||||
DEC :SCNT
|
||||
BNE :CATLP
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA RETLEN
|
||||
LDA #1
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
CPY RETLEN
|
||||
INY
|
||||
BNE :RLP
|
||||
LDA RETLEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDX :S3LEN
|
||||
RTS
|
||||
:S3LEN DS 1
|
||||
:S1LEN DS 1
|
||||
:S1IND DS 1
|
||||
:S2LEN DS 1
|
||||
:S2IND DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SOVF DS 1
|
@ -1,6 +1,6 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* STRCMP :: STRING COMPARE *
|
||||
* STRCMP :: STRING COMPARE *
|
||||
*- -*
|
||||
* COMPARE TWO STRINGS AND *
|
||||
* DETERMINE IF THEY ARE *
|
||||
@ -53,27 +53,15 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LENGTH OF STRING 2 *
|
||||
* X = LENGTH OF STRING 1 *
|
||||
* A = CLOBBERED; TRASH *
|
||||
* *
|
||||
* - SEE DESCRIPTION FOR FLAG *
|
||||
* CHANGES *
|
||||
* .Y = LENGTH OF STRING 2 *
|
||||
* .X = LENGTH OF STRING 1 *
|
||||
* .A = CLOBBERED; TRASH *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. NOT *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
* *
|
||||
* THAT SAID, LEVENTHAL WROTE *
|
||||
* THAT THE PURPOSE OF THE BOOK *
|
||||
* WAS TO COPY THE SOURCE CODE, *
|
||||
* AS REINVENTING THE WHEEL IS *
|
||||
* TEDIOUS, AND HE PLACED NO *
|
||||
* RESTRICTIONS ON ITS USE. *
|
||||
* LANGUAGE ROUTINES/. MAY NOT *
|
||||
* FALL UNDER APACHE 2.0 UNTIL *
|
||||
* SUBSTANTIALLY ALTERED. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRCMP
|
46
disks/disk5_strings/T.STRCMP.MIN
Normal file
46
disks/disk5_strings/T.STRCMP.MIN
Normal file
@ -0,0 +1,46 @@
|
||||
*
|
||||
STRCMP
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
BCC :BEGCMP
|
||||
LDA (ADDR2),Y
|
||||
:BEGCMP
|
||||
TAX
|
||||
BEQ :TSTLEN
|
||||
LDY #1
|
||||
:CMPLP
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
BNE :EXIT
|
||||
INY
|
||||
DEX
|
||||
BNE :CMPLP
|
||||
:TSTLEN
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR2),Y
|
||||
TAY
|
||||
RTS
|
@ -3,9 +3,9 @@
|
||||
* *
|
||||
* -< STRINGS DEMO >- *
|
||||
* *
|
||||
* VERSION 00.00.01 *
|
||||
* VERSION 00.02.00 *
|
||||
* *
|
||||
* 03/04/1980 *
|
||||
* 21-DEC-2018 *
|
||||
* *
|
||||
********************************
|
||||
* *
|
||||
@ -19,237 +19,177 @@
|
||||
CYC AVE
|
||||
EXP ONLY
|
||||
DSK STRINGS.DEMO
|
||||
*
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (PUTS, MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT DECS
|
||||
USE STRINGS.MAC
|
||||
USE REQUIRED.MAC
|
||||
PUT REQUIRED.HOOKS
|
||||
*
|
||||
USE STRINGS.MAC
|
||||
PUT STRINGS.HOOKS
|
||||
*
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
*
|
||||
** BIG LUMPS -- HIGH LEVEL CODE
|
||||
*
|
||||
*
|
||||
** STRCMP COMPARES TWO STRINGS, THEN
|
||||
** SETS THE STATUS REGISTER AS FOLLOWS:
|
||||
*
|
||||
** Z=1 IF STRINGS ARE IDENTICAL
|
||||
** Z=0 IF STRINGS NOT IDENTICAL
|
||||
** C=1 IF STRING2 LENGTH IS >
|
||||
** C=0 IF STRING1 LENGTH IS >
|
||||
*
|
||||
** MACRO:
|
||||
*
|
||||
_PRNT " ",8D8D8D8D
|
||||
_PRNT "STRINGS LIBRARY DEMO",8D
|
||||
_PRNT "--------------------",8D
|
||||
_PRNT " ",8D
|
||||
_PRNT "THE SCMP MACRO COMPARES TWO ",8D
|
||||
_PRNT "STRINGS AND SETS THE FLAGS",8D
|
||||
_PRNT "ACCORDINGLY. IF THE TWO ARE EQUAL,",8D
|
||||
_PRNT "THEN .Z IS SET TO ZERO; IF NOT, 1.",8D8D
|
||||
_PRNT "IF STRING1 LENGTH > STRING2 LENGTH,",8D
|
||||
_PRNT ".C(ARRY) = 0; ELSE, .C = 1.",8D8D
|
||||
_PRNT "SO, WE CAN COMPARE THE LITERAL 'A'",8D
|
||||
_PRNT "TO THE VALUE STORED IN ASTR, WHICH",8D
|
||||
_PRNT "HOLDS THE SAME STRING, THEN USE BNE TO",8D
|
||||
_PRNT "TEST IF THEY ARE EQUAL.",8D8D
|
||||
SCMP "A";ASTR
|
||||
BNE PE ; IS ZERO FLAG 1? BRANCH IF SO
|
||||
JMP CONT
|
||||
STR1 STR "THIZ IS STRING1"
|
||||
STR2 STR "THIS IS STRING 2"
|
||||
PE
|
||||
_PRNT "THE LITERAL A AND THE A STRING ARE",8D
|
||||
_PRNT "EQUAL.",8D8D8D
|
||||
CONT
|
||||
LDA #>STR1
|
||||
PHA
|
||||
LDA #<STR1
|
||||
PHA
|
||||
LDA #>STR2
|
||||
PHA
|
||||
LDA #<STR2
|
||||
PHA
|
||||
JSR STRCMP
|
||||
* BRK ; P = 31 = 00110001; Z=0,C=1
|
||||
_WAIT
|
||||
_PRNT "NOTE THAT ONLY A SINGLE PARAMETER",8D
|
||||
_PRNT "MAY BE A LITERAL STRING IN SCMP;",8D
|
||||
_PRNT "THIS SAME RULE APPLIES TO ALL MACROS",8D
|
||||
_PRNT "THAT ACCEPT STRINGS AS PARAMETERS.",8D8D
|
||||
_PRNT "YOU CAN ALSO USE SCMP TO COMPARE",8D
|
||||
_PRNT "THE LENGTHS OF TWO DIFFERENT STRINGS.",8D8D
|
||||
_PRNT "THE CARRY FLAG IS SET TO 0 IF THE",8D
|
||||
_PRNT "FIRST STRING HAS A LENGTH > THAN THE ",8D
|
||||
_PRNT "SECOND STRING'S LENGTH. THIS CAN THEN",8D
|
||||
_PRNT "BE TESTED WITH BCS.",8D8D
|
||||
_PRNT "SO IF WE COMPARE THE LITERAL 'AA' ",8D
|
||||
_PRNT "TO THE SAME ASTR, WE WILL FIND THAT",8D
|
||||
_PRNT "THE LITERAL HAS A GREATER LENGTH.",8D8D
|
||||
*
|
||||
SCMP "AA";ASTR
|
||||
BCS LE
|
||||
JMP CONT2
|
||||
LE
|
||||
_PRNT "THE LITERAL 'AA' IS GREATER THAN ",8D
|
||||
_PRNT "ASTR, WHICH HOLDS 'A'.",8D8D8D
|
||||
CONT2
|
||||
_WAIT
|
||||
*
|
||||
** STRCAT CONCATENATES TWO STRINGS AND RETURNS
|
||||
** THE CONCATENATED STRING WHERE THE FIRST
|
||||
** STRING WAS STORED.
|
||||
_PRNT " ",8D8D8D8D
|
||||
_PRNT "THE SCAT MACRO CONCATENATES",8D
|
||||
_PRNT "A SECOND GIVEN STRING TO A ",8D
|
||||
_PRNT "FIRST GIVEN STRING. EITHER PARAMETER",8D
|
||||
_PRNT "MAY BE A LITERAL STRING, BUT NEVER BOTH.",8D8D
|
||||
_PRNT "SCAT 'WTF IS ';ASTR;#50 RETURNS: ",8D8D
|
||||
SCAT "WTF IS ";ASTR;#50
|
||||
SPRN RETURN
|
||||
_PRNT " ",8D8D8D
|
||||
_WAIT
|
||||
*
|
||||
** MACRO:
|
||||
_PRNT "TO SHOW THE RESULT OF SCAT,",8D
|
||||
_PRNT "WE USED THE SPRN MACRO, WHICH",8D
|
||||
_PRNT "SIMPLY PRINTS A STRING. THIS",8D
|
||||
_PRNT "WORKS DIFFERENTLY THAN THE PRINT",8D
|
||||
_PRNT "ROUTINES IN STDIO OR THE _PRNT",8D
|
||||
_PRNT "ROUTINE, AS IT CAN ONLY HANDLE",8D
|
||||
_PRNT "A STRING ADDRESS.",8D8D
|
||||
_PRNT "SPRN BSTR RETURNS: "
|
||||
SPRN BSTR
|
||||
_PRNT " ",8D8D8D
|
||||
_WAIT
|
||||
_PRNT " ",8D8D8D
|
||||
_PRNT "TOSTR CONVERTS A 16-BIT INTEGER INTO",8D
|
||||
_PRNT "ITS STRING EQUIVALENT. THIS CAN",8D
|
||||
_PRNT "EITHER BE A LITERAL OR AN ADDRESS."
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "TOSTR #5000 RETURNS: "
|
||||
TOSTR #5000
|
||||
SPRN RETURN
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "TOSTR $300 RETURNS "
|
||||
LDA #$FF
|
||||
STA $300
|
||||
STA $301
|
||||
TOSTR $300
|
||||
SPRN RETURN
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "NOTE THAT $FFFF RETURNS -1 BECAUSE",8D
|
||||
_PRNT "THE TOSTR ROUTINE ASSUMES A ",8D
|
||||
_PRNT "SIGNED VALUE. "
|
||||
_PRNT " ",8D8D8D
|
||||
_WAIT
|
||||
*
|
||||
JMP CATCON
|
||||
CATSTR STR "ABC"
|
||||
BLANK STR " "
|
||||
CATSTR2 STR "DEF"
|
||||
_PRNT " ",8D8D8D
|
||||
_PRNT "AND THE TONUM MACRO DOES THE",8D
|
||||
_PRNT "OPPOSITE: IT RETURNS A 16-BIT ",8D
|
||||
_PRNT "INTEGER VALUE CONERTED FROM ITS",8D
|
||||
_PRNT "STRING EQUIVALENT. THUS:",8D8D
|
||||
_PRNT "TONUM '255' RETURNS:",8D
|
||||
TONUM "255"
|
||||
_DUMP RETURN;RETLEN
|
||||
_PRNT " ",8D8D8D
|
||||
_WAIT
|
||||
*
|
||||
CATCON
|
||||
LDA #>CATSTR
|
||||
PHA
|
||||
LDA #<CATSTR
|
||||
PHA
|
||||
LDA #>CATSTR2
|
||||
PHA
|
||||
LDA #<CATSTR2
|
||||
PHA
|
||||
LDA #7 ; MAX SIZE OF CAT
|
||||
PHA
|
||||
JSR STRCAT
|
||||
LDX #>CATSTR
|
||||
LDY #<CATSTR
|
||||
* BRK ; X,Y HOLDS LOW AND HIGH BYTES OF
|
||||
* THE ADDRESS TO THE CONCATENATED STRING.
|
||||
* IF YOU LIST THAT ADDRESS, YOU SHOULD SEE
|
||||
* THAT THE FIRST LOCATION HOLDS THE LENGTH
|
||||
* OF THE NEW STRING (06), FOLLOWED BY THE
|
||||
* HEXADECIMAL CODES FOR THE CHARACTERS
|
||||
* ABCDEF: C1 C2 C3 C4 C5 C6
|
||||
_PRNT " ",8D8D8D8D
|
||||
_PRNT "SUBSTRING ROUTINES/MACROS",8D
|
||||
_PRNT "-------------------------",8D8D
|
||||
_PRNT "SPOS FINDS THE POSITION OF",8D
|
||||
_PRNT "A SUBSTRING WITHIN ANOTHER",8D
|
||||
_PRNT "STRING.",8D8D
|
||||
_PRNT "SPOS 'THIS IS A STRING';ASTR RETURNS: "
|
||||
SPOS "THIS IS A STRING";ASTR
|
||||
STA $300
|
||||
LDA #0
|
||||
STA $301 ; CLEAR HI BYTE
|
||||
TOSTR $300
|
||||
SPRN RETURN
|
||||
_PRNT " ",8D8D8D
|
||||
*
|
||||
_PRNT " ",8D8D8D
|
||||
_PRNT "THE SCPY MACRO COPIES A ",8D
|
||||
_PRNT "SUBSTRING FROM ANOTHER STRING",8D
|
||||
_PRNT "AT THE SPECIFIED INDEX, HOLDING",8D
|
||||
_PRNT "THE SUBSTRING IN [RETURN].",8D8D
|
||||
_PRNT "SCPY 'ABCDEFGHIJK';#2;#4;#50 RETURNS: "
|
||||
SCPY "ABCDEFGHIJK";#2;#4;#$FF
|
||||
SPRN RETURN
|
||||
_PRNT " ",8D8D8D
|
||||
_WAIT
|
||||
*
|
||||
_PRNT " ",8D8D8D8D8D
|
||||
_PRNT "THE SDEL MACRO DELETES A SUBSTRING",8D
|
||||
_PRNT "FROM THE GIVEN SOURCE STRING. NOTE ",8D
|
||||
_PRNT "THAT THE SOURCE STRING MUST NOT",8D
|
||||
_PRNT "BE A LITERAL BECAUSE THIS ROUTINE",8D
|
||||
_PRNT "ALTERS THE STRING PASSED TO IT.",8D8D
|
||||
_PRNT "IF LSTR HOLDS 'THIS IS A STRING.'",8D
|
||||
_PRNT "THEN SDEL LSTR;#1;#7 RETURNS: ",8D8D
|
||||
SDEL LSTR;#1;#7
|
||||
SPRN LSTR
|
||||
_PRNT " ",8D8D8D8D
|
||||
_WAIT
|
||||
*
|
||||
** PRNSTR PRINTS THE STRING AT THE SPECIFIED
|
||||
** MEMORY ADDRESS TO COUT1.
|
||||
*
|
||||
** MACRO:
|
||||
*
|
||||
LDA #>CATSTR ; FROM PREVIOUS EXAMPLE
|
||||
PHA
|
||||
LDA #<CATSTR
|
||||
PHA
|
||||
JSR PRNSTR
|
||||
* BRK ; YOU SHOULD SEE
|
||||
* "ABCDEF" APPENDED TO THE LINE WHERE YOU
|
||||
* TYPED "BRUN STRINGS.DEMO." USE ROUTINES FROM
|
||||
* STDIO FOR PLACEMENT OF THE TEXT.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
JMP NUMSTRX
|
||||
NUMSTR HEX 2B67 ;11111
|
||||
NUMSTRX
|
||||
*
|
||||
LDA #>$300 ; DESTINATION
|
||||
PHA
|
||||
LDA #<$300
|
||||
PHA
|
||||
LDA #>11111 ; VALUE TO CONVERT
|
||||
PHA
|
||||
LDA #<11111
|
||||
PHA
|
||||
JSR NUM2STR
|
||||
*BRK
|
||||
*
|
||||
* $300 SHOULD NOW HOLD 05,B1,B1,B1,B1,B1
|
||||
*
|
||||
*
|
||||
*
|
||||
** STR2NUM DOES THE OPPOSITE OF NUM2STR: IT
|
||||
** RETURNS THE NUMBER EQUIVALENT OF A STRING
|
||||
** AND HOLDS THEM IN X (HIGH) AND Y (LOW)
|
||||
*
|
||||
LDA #>$300 ; STRING FROM PREVIOUS
|
||||
PHA
|
||||
LDA #<$300
|
||||
PHA
|
||||
JSR STR2NUM
|
||||
*BRK ; X,Y HOLDS 2B67, #11111
|
||||
*
|
||||
*
|
||||
** SUBPOS RETURNS THE POSITION OF A SUBSTRING
|
||||
** WITHIN A PARENT STRING.
|
||||
*
|
||||
LDA #>STR ; STRING ADDRESS
|
||||
PHA
|
||||
LDA #<STR
|
||||
PHA
|
||||
LDA #>SUB ; SUBSTRING ADDRESS
|
||||
PHA
|
||||
LDA #<SUB
|
||||
PHA
|
||||
JSR SUBPOS
|
||||
JMP SUBPOSX
|
||||
STR STR "THIS IS A TEST"
|
||||
SUB STR "IS A TEST"
|
||||
SUBPOSX
|
||||
*BRK ; A = 06
|
||||
*
|
||||
*
|
||||
** SUBCOPY COPIES A SUBSTRING AT THE SPECIFIED
|
||||
** POSITION TO A PARTICULAR MEMORY ADDRESS
|
||||
*
|
||||
LDA #>STR11 ; SOURCE STRING
|
||||
PHA
|
||||
LDA #<STR11
|
||||
PHA
|
||||
LDA #5 ; INDEX TO START COPY
|
||||
PHA
|
||||
LDA #5 ; LENGTH TO COPY
|
||||
PHA
|
||||
LDA #>STR21
|
||||
PHA
|
||||
LDA #<STR21
|
||||
PHA
|
||||
LDA #15 ; MAX LENGTH OF STRING 2
|
||||
PHA
|
||||
JSR SUBCOPY
|
||||
JMP STRCOPYX
|
||||
STR11 STR "0123456789012345"
|
||||
STR21 STR "000000000000000000"
|
||||
STRCOPYX
|
||||
LDX #>STR21
|
||||
LDY #<STR21 ; ADDRESS OF STR2
|
||||
*BRK ; LOCATION FOR STR21 SHOULD NOW START WITH
|
||||
* 4,5,6,7,8
|
||||
*
|
||||
*
|
||||
** SUBDEL DELETES A SUBSTRING FROM A GIVEN STRING
|
||||
** AND CHANGES THE STRING SIZE ACCORDINGLY.
|
||||
** MIN POSITION IS 1, NOT 0
|
||||
*
|
||||
LDA #>STR11 ; STRING LOCATION
|
||||
PHA
|
||||
LDA #<STR11
|
||||
PHA
|
||||
LDA #1 ; STARTING INDEX FOR DELETE
|
||||
PHA
|
||||
LDA #5 ; LENGTH TO DELETE
|
||||
PHA
|
||||
JSR SUBDEL
|
||||
LDX #>STR11
|
||||
LDY #<STR11
|
||||
*BRK ; FIRST 5 DIGITS ARE DELETED, REMAINING STRING
|
||||
* STORED ANEW
|
||||
*
|
||||
*
|
||||
** SUBINS INSERTS A SOURCE STRING
|
||||
** INTO ANOTHER DESTINATION STRING, MOVING THE
|
||||
** CONTENTS AND ADJUSTING LENGTH AS NECESSARY.
|
||||
*
|
||||
LDA #>INS1 ; DESTINATION
|
||||
PHA
|
||||
LDA #<INS1
|
||||
PHA
|
||||
LDA #3 ; INDEX
|
||||
PHA
|
||||
LDA #200 ; MAXLEN OF NEW STRING
|
||||
PHA
|
||||
LDA #>INS2 ; SOURCE SUBSTRING
|
||||
PHA
|
||||
LDA #<INS2
|
||||
PHA
|
||||
JSR SUBINS
|
||||
LDY #<INS1
|
||||
LDX #>INS1
|
||||
*BRK ; MEMLOC IN XY NOW HAS INS2 INSERTED INTO INS1
|
||||
* AT LOCATION 3
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
INS1 STR "XXXXXXXXX"
|
||||
ZZZ STR "999999999"
|
||||
INS2 STR "111111111"
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
** LITTLE LUMPS -- MID/LOW LEVEL
|
||||
*
|
||||
_PRNT "THE SINS MACRO DOES THE ",8D
|
||||
_PRNT "OPPOSITE OF SDEL: IT INSERTS",8D
|
||||
_PRNT "A SUBSTRING INTO A PARENT STRING",8D
|
||||
_PRNT "AT THE GIVEN INDEX. NOTE THAT",8D
|
||||
_PRNT "WHILE THE PARENT STRING CANNOT BE ",8D
|
||||
_PRNT "A LITERAL, THE SUBSTRING ITSELF CAN BE.",8D8D
|
||||
_PRNT "THUS SINS LSTR;#1;#50;'THIS IS NOT'",8D
|
||||
_PRNT "RETURNS: ",8D
|
||||
SINS LSTR;#1;#50;"THIS IS NOT"
|
||||
SPRN LSTR
|
||||
_PRNT " ",8D8D8D8D
|
||||
_WAIT
|
||||
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
@ -257,9 +197,12 @@ INS2 STR "111111111"
|
||||
* BOTTOM INCLUDES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
** BOTTOM INCLUDES
|
||||
*
|
||||
PUT STRINGS.LIB
|
||||
PUT SUBSTRINGS.LIB
|
||||
PUT REQUIRED.LIB
|
||||
*
|
||||
ASTR STR "A"
|
||||
BSTR STR "B"
|
||||
LSTR STR "THIS IS A STRING."
|
||||
|
@ -9,28 +9,14 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 30-OCT-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 STRING MANIPULATION. *
|
||||
* STRINGS ARE MOSTLY JUST 1-D *
|
||||
* ARRAYS PRECEDED BY A LENGTH *
|
||||
* BYTE. THIS DIFFERS FROM THE *
|
||||
* USE OF STRING IN THE PRINT *
|
||||
* ROUTINES OF STDIO (THOUGH *
|
||||
* NOT THE SINPUT ROUTINE) IN *
|
||||
* THAT THOSE "STRINGS" ARE *
|
||||
* TERMINATED WITH A #00 TO *
|
||||
* INDICATE AN END, RATHER THAN *
|
||||
* USING A LENGTH BYTE. *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
@ -38,8 +24,6 @@
|
||||
* *
|
||||
* STRCOMP : STRING COMPARE *
|
||||
* STRCAT : CONCATENATE STRING *
|
||||
* ASC2STR : NUL TO INDEXED STR *
|
||||
* STR2ASC : INDEXED TO NUL STR *
|
||||
* PRNSTR : PRINT STRING *
|
||||
* NUM2STR : NUMBER TO STRING *
|
||||
* STR2NUM : STRING TO NUMBER *
|
||||
@ -47,7 +31,7 @@
|
||||
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* STRCMP :: STRING COMPARE *
|
||||
* STRCMP :: STRING COMPARE *
|
||||
*- -*
|
||||
* COMPARE TWO STRINGS AND *
|
||||
* DETERMINE IF THEY ARE *
|
||||
@ -100,27 +84,15 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LENGTH OF STRING 2 *
|
||||
* X = LENGTH OF STRING 1 *
|
||||
* A = CLOBBERED; TRASH *
|
||||
* *
|
||||
* - SEE DESCRIPTION FOR FLAG *
|
||||
* CHANGES *
|
||||
* .Y = LENGTH OF STRING 2 *
|
||||
* .X = LENGTH OF STRING 1 *
|
||||
* .A = CLOBBERED; TRASH *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. NOT *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
* *
|
||||
* THAT SAID, LEVENTHAL WROTE *
|
||||
* THAT THE PURPOSE OF THE BOOK *
|
||||
* WAS TO COPY THE SOURCE CODE, *
|
||||
* AS REINVENTING THE WHEEL IS *
|
||||
* TEDIOUS, AND HE PLACED NO *
|
||||
* RESTRICTIONS ON ITS USE. *
|
||||
* LANGUAGE ROUTINES/. MAY NOT *
|
||||
* FALL UNDER APACHE 2.0 UNTIL *
|
||||
* SUBSTANTIALLY ALTERED. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRCMP
|
||||
@ -202,7 +174,9 @@ STRCMP
|
||||
*- -*
|
||||
* CONCATENATE TWO STRINGS INTO *
|
||||
* A SINGLE STRING STORE WHERE *
|
||||
* THE FIRST STRING IS LOCATED *
|
||||
* THE FIRST STRING IS LOCATED. *
|
||||
* ADDITIONALLY COPIES CONCAT'D *
|
||||
* STRING TO [RETURN]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
@ -248,18 +222,15 @@ STRCMP
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = CLOBBERED; TRASH *
|
||||
* X = LENGTH OF FINAL STRING *
|
||||
* A = 1 OF OVERFLOW, 0 IF NO *
|
||||
* .Y = CLOBBERED; TRASH *
|
||||
* .X = LENGTH OF FINAL STRING *
|
||||
* .A = 1 IF OVERFLOW, 0 IF NO *
|
||||
* [RETURN] = CONCAT'D STRING *
|
||||
* [RETLEN] = LENGTH OF NEW STR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRCAT
|
||||
@ -272,6 +243,7 @@ STRCAT
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :MLEN ; MAXIMUM CONCAT LENGTH
|
||||
*
|
||||
@ -353,9 +325,16 @@ STRCAT
|
||||
DEC :SCNT ; DECREMENT COUNTER
|
||||
BNE :CATLP ; CONT UNTIL __SCNT = 0
|
||||
*
|
||||
*
|
||||
:EXIT
|
||||
*
|
||||
** UPDATE STRING1 LENGTH
|
||||
*
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
@ -363,11 +342,22 @@ STRCAT
|
||||
LDA RETADR
|
||||
PHA
|
||||
*
|
||||
LDA :S1LEN
|
||||
** COPY TO [RETURN]
|
||||
*
|
||||
LDY #0
|
||||
LDA (ADDR1),Y ; LENGTH OF STRING
|
||||
STA RETLEN
|
||||
LDA #1
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
CPY RETLEN
|
||||
INY
|
||||
BNE :RLP
|
||||
LDA RETLEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A ; CARRY = 1 IF OVERFLOW, 0 IF NOT
|
||||
*
|
||||
LDX :S3LEN ; RETURN FINAL LENGTH
|
||||
*
|
||||
RTS
|
||||
@ -420,9 +410,9 @@ STRCAT
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = LOW BYTE STRING ADDR *
|
||||
* X = HI BYTE STRING ADDR *
|
||||
* A = STRING LENGTH *
|
||||
* .Y = LOW BYTE STRING ADDR *
|
||||
* .X = HI BYTE STRING ADDR *
|
||||
* .A = STRING LENGTH *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PRNSTR
|
||||
@ -487,10 +477,6 @@ PRNSTR
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$300 ; DESTINATION *
|
||||
* PHA *
|
||||
* LDA #<$300 *
|
||||
* PHA *
|
||||
* LDA #>11111 ; VALUE TO *
|
||||
* PHA ; CONVERT *
|
||||
* LDA #<11111 *
|
||||
@ -503,8 +489,6 @@ PRNSTR
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LO BYTE DESTINATION ADDRESS *
|
||||
* HI BYTE DESTINATION ADDRESS *
|
||||
* LO BYTE VALUE TO CONVERT *
|
||||
* HI BYTE VALUE TO CONVERT *
|
||||
*- -*
|
||||
@ -515,18 +499,16 @@ PRNSTR
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
* .Y = COUNTER; TRASH *
|
||||
* .X = COUNTER; TRASH *
|
||||
* .A = LOW BYTE OF RET ADDR *
|
||||
* *
|
||||
* [RETURN] = STRING VALUE *
|
||||
* [RETLEN] = LENGTH OF STRING *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
NUM2STR
|
||||
@ -556,9 +538,9 @@ NUM2STR
|
||||
STA :VALSTR+1
|
||||
*
|
||||
:GETBP
|
||||
PLA
|
||||
LDA #<RETURN
|
||||
STA ADDR1 ; ADDRESS TO STORE STRING
|
||||
PLA
|
||||
LDA #>RETURN+1
|
||||
STA ADDR1+1
|
||||
LDA #0 ; SET BUFFER TO EMPTY
|
||||
LDY #0
|
||||
@ -621,7 +603,7 @@ NUM2STR
|
||||
:EXIT
|
||||
LDA :NGFLAG
|
||||
BPL :POS ; BR IF ORIG VAL POS
|
||||
LDA #'-' ; ELSE
|
||||
LDA #173 ; ELSE
|
||||
JSR :CONCAT ; PUT A MINUS SIGN IN FRONT
|
||||
*
|
||||
:POS
|
||||
@ -712,21 +694,18 @@ NUM2STR
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = HI BYTE OF NUMBER *
|
||||
* X = LO BYTE OF NUMBER *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
* .Y = LO BYTE OF NUMBER *
|
||||
* .X = HI BYTE OF NUMBER *
|
||||
* .A = LOW BYTE OF RET ADDR *
|
||||
* *
|
||||
* [RETURN] = NUMBER VALUE WORD *
|
||||
* [RETLEN] = 2 (NUM OF BYTES) *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*
|
||||
STR2NUM
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
@ -765,7 +744,7 @@ STR2NUM
|
||||
:INIT1
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
CMP #'-'
|
||||
CMP #173
|
||||
BNE :PLUS ; BR IF NOT -
|
||||
LDA #$0FF
|
||||
STA :SNGFLAG ; ELSE SIGN IS NEGATIVE
|
||||
@ -846,8 +825,6 @@ STR2NUM
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
|
||||
; Y IS ALREADY LOW BYTE
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
@ -858,6 +835,10 @@ STR2NUM
|
||||
*
|
||||
LDX :NACCUM+1
|
||||
LDY :NACCUM
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA :NINDEX
|
||||
*
|
||||
RTS
|
||||
|
@ -7,17 +7,11 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 21-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. *
|
||||
* OS: DOS 3.3 *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
@ -29,52 +23,46 @@
|
||||
* *
|
||||
* LIST OF MACROS *
|
||||
* *
|
||||
* _SCMP : STRING COMPARE *
|
||||
* _SCAT : STRING CONCATENATE *
|
||||
* _SPRN : PRINT STRING *
|
||||
* _2STR : NUMBER TO STRING *
|
||||
* _2NUM : STRING TO NUMBER *
|
||||
* _SPOS : FIND SUBSTRING POS *
|
||||
* _SCOP : SUBSTRING COPY *
|
||||
* _SDEL : SUBSTRING DELETE *
|
||||
* _SINS : SUBSTRING INSERT *
|
||||
* SCMP : STRING COMPARE *
|
||||
* SCAT : STRING CONCATENATE *
|
||||
* SPRN : PRINT STRING *
|
||||
* TOSTR : NUMBER TO STRING *
|
||||
* TONUM: STRING TO NUMBER *
|
||||
* SPOS : FIND SUBSTRING POS *
|
||||
* SCOP : SUBSTRING COPY *
|
||||
* SDEL : SUBSTRING DELETE *
|
||||
* SINS : SUBSTRING INSERT *
|
||||
* *
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SCMP : STRING COMPARE *
|
||||
* SCMP : STRING COMPARE *
|
||||
*- -*
|
||||
* COMPARE TWO STRINGS AND *
|
||||
* DETERMINE IF IDENTICAL, OR *
|
||||
* LONGER AND SHORTER. *
|
||||
* *
|
||||
* Z = 1 IF IDENTICAL; 0 IF NOT *
|
||||
* C = 1 IF STR2 > STR1 *
|
||||
* C = 0 IF STR1 > STR2 LENGTH *
|
||||
* .Z=1 IF IDENTICAL; 0 IF NOT *
|
||||
* .C=1 IF STR2 > STR1 *
|
||||
* .C=0 IF STR1 > STR2 LENGTH *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = STRING 1 ADDRESS *
|
||||
* PARAM2 = STRING 2 ADDRESS *
|
||||
* ]1 = STRING 1 ADDRESS *
|
||||
* ]2 = STRING 2 ADDRESS *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SCMP $300;$320 *
|
||||
* SCMP $300;$320 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SCMP MAC
|
||||
LDA #>]1 ; STRING 1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; STRING 2
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
SCMP MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR STRCMP
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SCAT : CONCATENATE STRINGS *
|
||||
* SCAT : CONCATENATE STRINGS *
|
||||
*- -*
|
||||
* CONCATENATES STRING 1 AND *
|
||||
* STRING 2, STORED AT THE *
|
||||
@ -82,31 +70,24 @@ _SCMP MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ADDR OF STRING 1 *
|
||||
* PARAM2 = ADDR OF STRING 2 *
|
||||
* PARAM3 = MAX LENGTH OF NEW *
|
||||
* STRING *
|
||||
* ]1 = ADDR OF STRING 1 *
|
||||
* ]2 = ADDR OF STRING 2 *
|
||||
* ]3 = MAX LEN OF NEW STRING *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SCAT $300;$320;#18 *
|
||||
* SCAT $300;$320;#18 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SCAT MAC
|
||||
LDA #>]1 ; STRING 1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; STRING 2 ADDR
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
SCAT MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
LDA ]3 ; MAX SIZE; BYTE
|
||||
PHA
|
||||
JSR STRCAT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SPRN : PRINT STRING *
|
||||
* SPRN : PRINT STRING *
|
||||
*- -*
|
||||
* PRINTS THE STRING LOCATED AT *
|
||||
* THE SPECIFIED ADDRESS, WHICH *
|
||||
@ -114,13 +95,13 @@ _SCAT MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = STRING ADDRESS *
|
||||
* ]1 = STRING ADDRESS *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SPRN $300 *
|
||||
* SPRN $300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRS MAC
|
||||
SPRN MAC
|
||||
LDA #>]1 ; ADDRESS OF STRING
|
||||
PHA
|
||||
LDA #<]1
|
||||
@ -129,36 +110,26 @@ _PRS MAC
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _2STR : NUMBER TO STRING *
|
||||
* TOSTR : NUMBER TO STRING *
|
||||
*- -*
|
||||
* CONVERTS A 16BIT NUMBER TO *
|
||||
* ITS STRING EQUIVALENT. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ADDR TO STORE STRNG *
|
||||
* PARAM2 = VALUE TO CONVERT *
|
||||
* ]1 = VALUE TO CONVERT *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _2STR $300; #11111 *
|
||||
* TOSTR #11111 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_2STR MAC
|
||||
LDA #>]1 ; DEST ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; NUMBER VAL
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
TOSTR MAC
|
||||
_ISLIT ]1
|
||||
JSR NUM2STR
|
||||
<<<
|
||||
*
|
||||
** NOTE: HOW TO DO ADDRESS WHERE NUM IS STORED?
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _2NUM : STRING TO NUMBER *
|
||||
* TONUM : STRING TO NUMBER *
|
||||
*- -*
|
||||
* CONVERTS A STRING TO A 16BIT *
|
||||
* NUMBER EQUIVALENT; RETURNS *
|
||||
@ -166,22 +137,19 @@ _2STR MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = ADDR TO STORE VALUE *
|
||||
* ]1 = ADDR TO STORE VALUE *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _2NUM $300;#11111 *
|
||||
* TONUM ????????????? *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_2NUM MAC
|
||||
LDA #>]1 ; STRING ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
TONUM MAC
|
||||
_ISSTR ]1
|
||||
JSR STR2NUM
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SPOS : FIND SUBSTRING POS *
|
||||
* SPOS : FIND SUBSTRING POS *
|
||||
*- -*
|
||||
* POSITION OF SUBSTRING WITHIN *
|
||||
* ANOTHER STRING IS RETURNED *
|
||||
@ -189,27 +157,21 @@ _2NUM MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = PARENT STRING ADDR *
|
||||
* PARAM2 = SUBSTRING ADDR *
|
||||
* ]1 = PARENT STRING ADDR *
|
||||
* ]2 = SUBSTRING ADDR *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SPOS $300;$320 *
|
||||
* SPOS $300;$320 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SPOS MAC
|
||||
LDA #>]1 ; PARENT
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; SUBSTRING
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
SPOS MAC
|
||||
_ISSTR ]1
|
||||
_ISSTR ]2
|
||||
JSR SUBPOS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SCPY :: SUBSTRING COPY *
|
||||
* SCPY :: SUBSTRING COPY *
|
||||
*- -*
|
||||
* COPY A SUBSTRING FROM A *
|
||||
* SOURCE STRING TO ANOTHER *
|
||||
@ -217,35 +179,28 @@ _SPOS MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = SOURCE STRING *
|
||||
* PARAM2 = STARTING INDEX *
|
||||
* PARAM3 = SUBSTRING LENGTH *
|
||||
* PARAM4 = SUBSTRING ADDRESS *
|
||||
* PARAM5 = MAX LENGTH *
|
||||
* ]1 = SOURCE STRING *
|
||||
* ]2 = STARTING INDEX *
|
||||
* ]3 = SUBSTRING LENGTH *
|
||||
* ]4 = MAX LENGTH *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* $300;#1;#10;$320;#20 *
|
||||
* SCPY $300;#1;#10;#20 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SCPY MAC
|
||||
LDA #>]1 ; SOURCE STRING
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
SCPY MAC
|
||||
_ISSTR ]1
|
||||
LDA ]2 ; STARTING INDEX
|
||||
PHA
|
||||
LDA ]3 ; SUBSTRING LENGTH
|
||||
PHA
|
||||
LDA #>]4 ; SUBSTRING ADDR
|
||||
LDA ]4 ; MAX LENGTH OF SUBSTR
|
||||
PHA
|
||||
LDA #<]4
|
||||
PHA
|
||||
LDA ]5 ; MAX LENGTH OF SUBSTR
|
||||
JSR SUBCOPY
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SDEL :: DELETE SUBSTRING *
|
||||
* SDEL :: DELETE SUBSTRING *
|
||||
*- -*
|
||||
* DELETE A SUBSTRING FROM A *
|
||||
* PARENT STRING. ADJUSTS THE *
|
||||
@ -253,15 +208,15 @@ _SCPY MAC
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = PARENT STRING ADDR *
|
||||
* PARAM2 = STARTING INDEX *
|
||||
* PARAM3 = DELETION LENGTH *
|
||||
* ]1 = PARENT STRING ADDR *
|
||||
* ]2 = STARTING INDEX *
|
||||
* ]3 = DELETION LENGTH *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SDEL $300;#3;#10 *
|
||||
* SDEL $300;#3;#10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SDEL MAC
|
||||
SDEL MAC
|
||||
LDA #>]1 ; STRING ADDRESS
|
||||
PHA
|
||||
LDA #<]1
|
||||
@ -274,23 +229,23 @@ _SDEL MAC
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SINS :: INSERT SUBSTRING *
|
||||
* SINS :: INSERT SUBSTRING *
|
||||
*- -*
|
||||
* INSERT A SUBSTRING INTO A *
|
||||
* PARENT STRING. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* PARAM1 = PARENT STRING *
|
||||
* PARAM2 = INDEX *
|
||||
* PARAM3 = MAX LENGTH OF NEW *
|
||||
* PARAM4 = SUBSTRING *
|
||||
* ]1 = PARENT STRING *
|
||||
* ]2 = INDEX *
|
||||
* ]3 = MAX LENGTH OF NEW *
|
||||
* ]4 = SUBSTRING *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* _SINS $300;#1;#254;$6000 *
|
||||
* SINS $300;#1;#254;$6000 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SINS MAC
|
||||
SINS MAC
|
||||
LDA #>]1 ; PARENT STRING
|
||||
PHA
|
||||
LDA #<]1
|
||||
@ -299,9 +254,6 @@ _SINS MAC
|
||||
PHA
|
||||
LDA ]3 ; MAXIMUM LENGTH
|
||||
PHA
|
||||
LDA #>]4 SUBSTR TO INSERT
|
||||
PHA
|
||||
LDA #<]4
|
||||
PHA
|
||||
_ISSTR ]4
|
||||
JSR SUBINS
|
||||
<<<
|
||||
|
379
disks/disk5_strings/T.STRINGS.MIN
Normal file
379
disks/disk5_strings/T.STRINGS.MIN
Normal file
@ -0,0 +1,379 @@
|
||||
JMP STRINGSX
|
||||
*
|
||||
STRCMP
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
BCC :BEGCMP
|
||||
LDA (ADDR2),Y
|
||||
:BEGCMP
|
||||
TAX
|
||||
BEQ :TSTLEN
|
||||
LDY #1
|
||||
:CMPLP
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
BNE :EXIT
|
||||
INY
|
||||
DEX
|
||||
BNE :CMPLP
|
||||
:TSTLEN
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CMP (ADDR2),Y
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR2),Y
|
||||
TAY
|
||||
RTS
|
||||
*
|
||||
STRCAT
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
STA :S1IND
|
||||
INC :S1IND
|
||||
LDA (ADDR2),Y
|
||||
STA :S2LEN
|
||||
LDA #1
|
||||
STA :S2IND
|
||||
LDA :S2LEN
|
||||
CLC
|
||||
ADC :S1LEN
|
||||
STA :S3LEN
|
||||
BCS :TOOLONG
|
||||
CMP :MLEN
|
||||
BEQ :LENOK
|
||||
BCC :LENOK
|
||||
:TOOLONG
|
||||
LDA #$0FF
|
||||
STA :SOVF
|
||||
LDA :MLEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EXIT
|
||||
STA :SCNT
|
||||
LDA :MLEN
|
||||
STA :S1LEN
|
||||
JMP :DOCAT
|
||||
:LENOK
|
||||
STA :S1LEN
|
||||
LDA #0
|
||||
STA :SOVF
|
||||
LDA :S2LEN
|
||||
STA :SCNT
|
||||
:DOCAT
|
||||
LDA :SCNT
|
||||
BEQ :EXIT
|
||||
:CATLP
|
||||
LDY :S2IND
|
||||
LDA (ADDR2),Y
|
||||
LDY :S1IND
|
||||
STA (ADDR1),Y
|
||||
INC :S1IND
|
||||
INC :S2IND
|
||||
DEC :SCNT
|
||||
BNE :CATLP
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDA :SOVF
|
||||
ROR A
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA RETLEN
|
||||
LDA #1
|
||||
:RLP
|
||||
LDA (ADDR1),Y
|
||||
STA RETURN,Y
|
||||
CPY RETLEN
|
||||
INY
|
||||
BNE :RLP
|
||||
LDA RETLEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
LDX :S3LEN
|
||||
RTS
|
||||
:S3LEN DS 1
|
||||
:S1LEN DS 1
|
||||
:S1IND DS 1
|
||||
:S2LEN DS 1
|
||||
:S2IND DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SOVF DS 1
|
||||
*
|
||||
PRNSTR
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
JSR SCOUT1
|
||||
CPY :S1LEN
|
||||
BNE :LP
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDY ADDR1
|
||||
LDX ADDR1+1
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
*
|
||||
NUM2STR
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALSTR
|
||||
PLA
|
||||
STA :VALSTR+1
|
||||
STA :NGFLAG
|
||||
BPL :GETBP
|
||||
LDA #0
|
||||
SEC
|
||||
SBC :VALSTR
|
||||
STA :VALSTR
|
||||
LDA #0
|
||||
SBC :VALSTR+1
|
||||
STA :VALSTR+1
|
||||
:GETBP
|
||||
LDA #<RETURN
|
||||
STA ADDR1
|
||||
LDA #>RETURN+1
|
||||
STA ADDR1+1
|
||||
LDA #0
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
:CNVERT
|
||||
LDA #0
|
||||
STA :MOD10
|
||||
STA :MOD10+1
|
||||
LDX #16
|
||||
CLC
|
||||
:DVLOOP
|
||||
ROL :VALSTR
|
||||
ROL :VALSTR+1
|
||||
ROL :MOD10
|
||||
ROL :MOD10+1
|
||||
SEC
|
||||
LDA :MOD10
|
||||
SBC #10
|
||||
TAY
|
||||
LDA :MOD10+1
|
||||
SBC #0
|
||||
BCC :DECCNT
|
||||
STY :MOD10
|
||||
STA :MOD10+1
|
||||
:DECCNT
|
||||
DEX
|
||||
BNE :DVLOOP
|
||||
ROL :VALSTR
|
||||
ROL :VALSTR+1
|
||||
:CONCH
|
||||
LDA :MOD10
|
||||
CLC
|
||||
ADC #$B0
|
||||
JSR :CONCAT
|
||||
LDA :VALSTR
|
||||
ORA :VALSTR+1
|
||||
BNE :CNVERT
|
||||
:EXIT
|
||||
LDA :NGFLAG
|
||||
BPL :POS
|
||||
LDA #173
|
||||
JSR :CONCAT
|
||||
:POS
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:CONCAT
|
||||
PHA
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAY
|
||||
BEQ :EXITMR
|
||||
:MVELP
|
||||
LDA (ADDR1),Y
|
||||
INY
|
||||
STA (ADDR1),Y
|
||||
DEY
|
||||
DEY
|
||||
BNE :MVELP
|
||||
:EXITMR
|
||||
PLA
|
||||
LDY #1
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
CLC
|
||||
ADC #1
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:NGFLAG DS 1
|
||||
:VALSTR DS 2
|
||||
:MOD10 DS 2
|
||||
*
|
||||
STR2NUM
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA #1
|
||||
STA :NINDEX
|
||||
LDA #0
|
||||
STA :NACCUM
|
||||
STA :NACCUM+1
|
||||
STA :SNGFLAG
|
||||
TXA
|
||||
BNE :INIT1
|
||||
JMP :EREXIT
|
||||
:INIT1
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
CMP #173
|
||||
BNE :PLUS
|
||||
LDA #$0FF
|
||||
STA :SNGFLAG
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BEQ :EREXIT
|
||||
JMP :CNVERT
|
||||
:PLUS
|
||||
CMP #'+'
|
||||
BNE :CHKDIG
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BEQ :EREXIT
|
||||
:CNVERT
|
||||
LDY :NINDEX
|
||||
LDA (ADDR1),Y
|
||||
:CHKDIG
|
||||
CMP #$B0 ; "0"
|
||||
BMI :EREXIT
|
||||
CMP #$BA
|
||||
BPL :EREXIT
|
||||
PHA
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
LDA :NACCUM
|
||||
LDY :NACCUM+1
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
ASL :NACCUM
|
||||
ROL :NACCUM+1
|
||||
CLC
|
||||
ADC :NACCUM
|
||||
STA :NACCUM
|
||||
TYA
|
||||
ADC :NACCUM+1
|
||||
STA :NACCUM+1
|
||||
PLA
|
||||
SEC
|
||||
SBC #$B0
|
||||
CLC
|
||||
ADC :NACCUM
|
||||
STA :NACCUM
|
||||
BCC :D2B1
|
||||
INC :NACCUM+1
|
||||
:D2B1
|
||||
INC :NINDEX
|
||||
DEX
|
||||
BNE :CNVERT
|
||||
LDA :SNGFLAG
|
||||
BPL :OKEXIT
|
||||
LDA #0
|
||||
SEC
|
||||
SBC :NACCUM
|
||||
STA :NACCUM
|
||||
LDA #0
|
||||
SBC :NACCUM+1
|
||||
STA :NACCUM+1
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDX :NACCUM+1
|
||||
LDY :NACCUM
|
||||
STY RETURN
|
||||
STX RETURN+1
|
||||
LDA #2
|
||||
STA RETLEN
|
||||
LDA :NINDEX
|
||||
RTS
|
||||
:NACCUM DS 2
|
||||
:SNGFLAG DS 1
|
||||
:NINDEX DS 1
|
||||
STRINGSX
|
@ -3,8 +3,7 @@
|
||||
* SUBCOPY :: COPY SUBSTRING *
|
||||
*- -*
|
||||
* COPY A SUBSTRING FROM A *
|
||||
* STRING TO A DESTINATION *
|
||||
* ADDRESS. *
|
||||
* STRING TO [RETURN]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
@ -23,10 +22,6 @@
|
||||
* PHA *
|
||||
* LDA LEN ; LENGTH OF SUBSTR *
|
||||
* PHA *
|
||||
* LDA #>SUB ; SUBSTRING ADDR *
|
||||
* PHA *
|
||||
* LDA #<SUB *
|
||||
* PHA *
|
||||
* LDA MLEN ; MAX LENGTH *
|
||||
* PHA *
|
||||
* JSR SUBCOPY *
|
||||
@ -38,8 +33,6 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* MAX LENGTH OF DEST STRING *
|
||||
* LO BYTE OF DEST STR ADDRESS *
|
||||
* HI BYTE OF DEST STRING ADDR *
|
||||
* NUMBER OF BYTES TO COPY *
|
||||
* STARTING INDEX TO COPY FROM *
|
||||
* LO BYTE OF SRC STRING ADDR *
|
||||
@ -52,9 +45,9 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* CARRY FLAG WILL BE 0 IF NO *
|
||||
* ERRORS; ELSE, CARRY = 1 *
|
||||
@ -62,11 +55,6 @@
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBCOPY
|
||||
@ -83,17 +71,19 @@ SUBCOPY
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA :SCNT
|
||||
STA RETLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
LDA #<RETURN
|
||||
STA ADDR2
|
||||
LDA #>RETURN
|
||||
STA ADDR2+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
@ -208,6 +198,7 @@ SUBCOPY
|
||||
LDA :S2LEN
|
||||
LDY #0
|
||||
STA (ADDR2),Y
|
||||
STA RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
100
disks/disk5_strings/T.SUBCOPY.MIN
Normal file
100
disks/disk5_strings/T.SUBCOPY.MIN
Normal file
@ -0,0 +1,100 @@
|
||||
*
|
||||
SUBCOPY
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SCNT
|
||||
STA RETLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #<RETURN
|
||||
STA ADDR2
|
||||
LDA #>RETURN
|
||||
STA ADDR2+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA #0
|
||||
STA :S2LEN
|
||||
STA :SCERR
|
||||
LDA :SCNT
|
||||
BEQ :OKEXIT
|
||||
LDA :MLEN
|
||||
BEQ :EREXIT
|
||||
LDA :SINDEX
|
||||
BEQ :EREXIT
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCC :EREXIT
|
||||
LDA :SINDEX
|
||||
CLC
|
||||
ADC :SCNT
|
||||
BCS :RECALC
|
||||
TAX
|
||||
DEX
|
||||
CPX :S1LEN
|
||||
BCC :CNT10K
|
||||
BEQ :CNT10K
|
||||
:RECALC
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
STA :SCNT
|
||||
INC :SCNT
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:CNT10K
|
||||
LDA :SCNT
|
||||
CMP :MLEN
|
||||
BCC :CNT20K
|
||||
BEQ :CNT20K
|
||||
LDA :MLEN
|
||||
STA :SCNT
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:CNT20K
|
||||
LDX :SCNT
|
||||
BEQ :EREXIT
|
||||
LDA #1
|
||||
STA :S2LEN
|
||||
:MVLP
|
||||
LDY :SINDEX
|
||||
LDA (ADDR1),Y
|
||||
LDY :S2LEN
|
||||
STA (ADDR2),Y
|
||||
INC :SINDEX
|
||||
INC :S2LEN
|
||||
DEX
|
||||
BNE :MVLP
|
||||
DEC :S2LEN
|
||||
LDA :SCERR
|
||||
BNE :EREXIT
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S2LEN
|
||||
LDY #0
|
||||
STA (ADDR2),Y
|
||||
STA RETLEN
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SINDEX DS 1
|
||||
:SCERR DS 1
|
@ -42,9 +42,9 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* IF NO ERRORS, CARRY = 0; *
|
||||
* ELSE, CARRY = 1 *
|
||||
@ -52,11 +52,6 @@
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBDEL
|
83
disks/disk5_strings/T.SUBDEL.MIN
Normal file
83
disks/disk5_strings/T.SUBDEL.MIN
Normal file
@ -0,0 +1,83 @@
|
||||
*
|
||||
SUBDEL
|
||||
*
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
STA :SCNT
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TXA
|
||||
PHA
|
||||
TYA
|
||||
PHA
|
||||
LDY #0
|
||||
STY :SCERR
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
LDA :SCNT
|
||||
BEQ :OKEXIT
|
||||
LDA :SINDEX
|
||||
BEQ :ERREXIT
|
||||
LDA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCC :ERREXIT
|
||||
LDA :SINDEX
|
||||
CLC
|
||||
ADC :SCNT
|
||||
BCS :TRUNC
|
||||
STA :SIDX
|
||||
TAX
|
||||
DEX
|
||||
CPX :S1LEN
|
||||
BCC :CNTOK
|
||||
BEQ :TRUNC
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:TRUNC
|
||||
LDX :SINDEX
|
||||
DEX
|
||||
STX :S1LEN
|
||||
LDA :SCERR
|
||||
BEQ :OKEXIT
|
||||
BNE :ERREXIT
|
||||
:CNTOK
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SIDX
|
||||
TAX
|
||||
INX
|
||||
BEQ :OKEXIT
|
||||
:MVLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SINDEX
|
||||
STA (ADDR1),Y
|
||||
INC :SINDEX
|
||||
INC :SIDX
|
||||
DEX
|
||||
BNE :MVLP
|
||||
LDX :SINDEX
|
||||
DEX
|
||||
STX :S1LEN
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:ERREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:SCNT DS 1
|
||||
:SINDEX DS 1
|
||||
:SIDX DS 1
|
||||
:SCERR DS 1
|
@ -48,9 +48,9 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* CARRY = 0 IF NO ERRORS; ELSE *
|
||||
* CARRY = 1 *
|
||||
@ -58,11 +58,6 @@
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBINS
|
121
disks/disk5_strings/T.SUBINS.MIN
Normal file
121
disks/disk5_strings/T.SUBINS.MIN
Normal file
@ -0,0 +1,121 @@
|
||||
*
|
||||
SUBINS
|
||||
*
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TXA
|
||||
PHA
|
||||
TYA
|
||||
PHA
|
||||
LDA #0
|
||||
STA :SCERR
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
LDA (ADDR2),Y
|
||||
STA :S2LEN
|
||||
BNE :IDX0
|
||||
JMP :OKEXIT
|
||||
:IDX0
|
||||
LDA :SINDEX
|
||||
BNE :CHKLEN
|
||||
JMP :EREXIT
|
||||
:CHKLEN
|
||||
LDA :S2LEN
|
||||
CLC
|
||||
ADC :S1LEN
|
||||
BCS :TRUNC
|
||||
CMP :MLEN
|
||||
BCC :IDXLEN
|
||||
BEQ :IDXLEN
|
||||
:TRUNC
|
||||
LDA :MLEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EREXIT
|
||||
BEQ :EREXIT
|
||||
STA :S2LEN
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:IDXLEN
|
||||
LDA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCS :LENOK
|
||||
LDX :S1LEN
|
||||
INX
|
||||
STX :SINDEX
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
LDA :S1LEN
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :S1LEN
|
||||
JMP :MVESUB
|
||||
:LENOK
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
TAX
|
||||
INX
|
||||
LDA :S1LEN
|
||||
STA :SIDX
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :SBIDX
|
||||
STA :S1LEN
|
||||
:OPNLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SBIDX
|
||||
STA (ADDR1),Y
|
||||
DEC :SIDX
|
||||
DEC :SBIDX
|
||||
DEX
|
||||
BNE :OPNLP
|
||||
:MVESUB
|
||||
LDA #1
|
||||
STA :SIDX
|
||||
LDX :S2LEN
|
||||
:MVELP
|
||||
LDY :SIDX
|
||||
LDA (ADDR2),Y
|
||||
LDY :SINDEX
|
||||
STA (ADDR1),Y
|
||||
INC :SIDX
|
||||
INC :SINDEX
|
||||
DEX
|
||||
BNE :MVELP
|
||||
LDA :SCERR
|
||||
BNE :EREXIT
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:MLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SIDX DS 1
|
||||
:SBIDX DS 1
|
||||
:SCERR DS 1
|
@ -41,26 +41,20 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = CLOBBERED; TRASH *
|
||||
* X = CLOBBERED; TRASH *
|
||||
* A = INDEX OF SUBSTRING IF *
|
||||
* .Y = CLOBBERED; TRASH *
|
||||
* .X = CLOBBERED; TRASH *
|
||||
* .A = INDEX OF SUBSTRING IF *
|
||||
* FOUND; OTHERWISE, 0 *
|
||||
* *
|
||||
* [RETURN] = INDEX OF SUBSTR; *
|
||||
* 0 IF NOT FOUND *
|
||||
* [RETLEN] = 1 (INDEX LENGTH) *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
* *
|
||||
* THAT SAID, LEVENTHAL WROTE *
|
||||
* THAT THE PURPOSE OF THE BOOK *
|
||||
* WAS TO COPY THE SOURCE CODE, *
|
||||
* AS REINVENTING THE WHEEL IS *
|
||||
* TEDIOUS, AND HE PLACED NO *
|
||||
* RESTRICTIONS ON ITS USE. *
|
||||
* LANGUAGE ROUTINES/. MAY NOT *
|
||||
* FALL UNDER APACHE 2.0 UNTIL *
|
||||
* HEAVILY MODIFIED. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBPOS
|
||||
@ -160,8 +154,10 @@ SUBPOS
|
||||
*
|
||||
:NOTFND
|
||||
LDA #0 ; SUB NOT FOUND, A=0
|
||||
STA RESULT
|
||||
:EXIT
|
||||
STA RETURN
|
||||
LDY #1
|
||||
STY RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
78
disks/disk5_strings/T.SUBPOS.MIN
Normal file
78
disks/disk5_strings/T.SUBPOS.MIN
Normal file
@ -0,0 +1,78 @@
|
||||
*
|
||||
SUBPOS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
:POS
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
BEQ :NOTFND
|
||||
STA :SLEN
|
||||
LDA (ADDR2),Y
|
||||
BEQ :NOTFND
|
||||
STA :SUBLEN
|
||||
LDA :SUBLEN
|
||||
CMP :SLEN
|
||||
BEQ :LENOK
|
||||
BCS :NOTFND
|
||||
:LENOK
|
||||
LDA #1
|
||||
STA :SINDEX
|
||||
LDA :SLEN
|
||||
SEC
|
||||
SBC :SUBLEN
|
||||
STA :SCOUNT
|
||||
INC :SCOUNT
|
||||
:SLP1
|
||||
LDA :SINDEX
|
||||
STA :SIDX
|
||||
LDA #1
|
||||
STA :SUBIDX
|
||||
:CMPLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SUBIDX
|
||||
CMP (ADDR2),Y
|
||||
BNE :SLP2
|
||||
LDY :SUBIDX
|
||||
CPY :SUBLEN
|
||||
BEQ :FOUND
|
||||
INY
|
||||
STY :SUBIDX
|
||||
INC :SIDX
|
||||
JMP :CMPLP
|
||||
:SLP2
|
||||
INC :SINDEX
|
||||
DEC :SCOUNT
|
||||
BNE :SLP1
|
||||
BEQ :NOTFND
|
||||
:FOUND
|
||||
LDA :SINDEX
|
||||
JMP :EXIT
|
||||
:NOTFND
|
||||
LDA #0
|
||||
:EXIT
|
||||
STA RETURN
|
||||
LDY #1
|
||||
STY RETLEN
|
||||
RTS
|
||||
:SLEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SUBIDX DS 1
|
||||
:SCOUNT DS 1
|
||||
:SIDX DS 1
|
@ -9,23 +9,14 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.1.2 *
|
||||
* DATE: 30-OCT-2018 *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 30-OCT-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 LIBRARY FOR USING *
|
||||
* SUBSTRING OPERATIONS. THIS *
|
||||
* IS SEPARATE FROM THE MAIN *
|
||||
* STRINGS LIBRARY BY VIRTUE OF *
|
||||
* DEALING WITH FULL MEMORY *
|
||||
* ERRORS IN THE ASSEMBLER. *
|
||||
* YEEEEE. *
|
||||
* SUBSTRING OPERATIONS. *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
@ -80,26 +71,20 @@
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = CLOBBERED; TRASH *
|
||||
* X = CLOBBERED; TRASH *
|
||||
* A = INDEX OF SUBSTRING IF *
|
||||
* .Y = CLOBBERED; TRASH *
|
||||
* .X = CLOBBERED; TRASH *
|
||||
* .A = INDEX OF SUBSTRING IF *
|
||||
* FOUND; OTHERWISE, 0 *
|
||||
* *
|
||||
* [RETURN] = INDEX OF SUBSTR; *
|
||||
* 0 IF NOT FOUND *
|
||||
* [RETLEN] = 1 (INDEX LENGTH) *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
* *
|
||||
* THAT SAID, LEVENTHAL WROTE *
|
||||
* THAT THE PURPOSE OF THE BOOK *
|
||||
* WAS TO COPY THE SOURCE CODE, *
|
||||
* AS REINVENTING THE WHEEL IS *
|
||||
* TEDIOUS, AND HE PLACED NO *
|
||||
* RESTRICTIONS ON ITS USE. *
|
||||
* LANGUAGE ROUTINES/. MAY NOT *
|
||||
* FALL UNDER APACHE 2.0 UNTIL *
|
||||
* HEAVILY MODIFIED. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBPOS
|
||||
@ -199,8 +184,10 @@ SUBPOS
|
||||
*
|
||||
:NOTFND
|
||||
LDA #0 ; SUB NOT FOUND, A=0
|
||||
STA RESULT
|
||||
:EXIT
|
||||
STA RETURN
|
||||
LDY #1
|
||||
STY RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
@ -216,8 +203,7 @@ SUBPOS
|
||||
* SUBCOPY :: COPY SUBSTRING *
|
||||
*- -*
|
||||
* COPY A SUBSTRING FROM A *
|
||||
* STRING TO A DESTINATION *
|
||||
* ADDRESS. *
|
||||
* STRING TO [RETURN]. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
@ -236,10 +222,6 @@ SUBPOS
|
||||
* PHA *
|
||||
* LDA LEN ; LENGTH OF SUBSTR *
|
||||
* PHA *
|
||||
* LDA #>SUB ; SUBSTRING ADDR *
|
||||
* PHA *
|
||||
* LDA #<SUB *
|
||||
* PHA *
|
||||
* LDA MLEN ; MAX LENGTH *
|
||||
* PHA *
|
||||
* JSR SUBCOPY *
|
||||
@ -251,8 +233,6 @@ SUBPOS
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* MAX LENGTH OF DEST STRING *
|
||||
* LO BYTE OF DEST STR ADDRESS *
|
||||
* HI BYTE OF DEST STRING ADDR *
|
||||
* NUMBER OF BYTES TO COPY *
|
||||
* STARTING INDEX TO COPY FROM *
|
||||
* LO BYTE OF SRC STRING ADDR *
|
||||
@ -265,9 +245,9 @@ SUBPOS
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* CARRY FLAG WILL BE 0 IF NO *
|
||||
* ERRORS; ELSE, CARRY = 1 *
|
||||
@ -275,11 +255,6 @@ SUBPOS
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBCOPY
|
||||
@ -296,17 +271,19 @@ SUBCOPY
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA :SCNT
|
||||
STA RETLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
LDA #<RETURN
|
||||
STA ADDR2
|
||||
LDA #>RETURN
|
||||
STA ADDR2+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
@ -421,6 +398,7 @@ SUBCOPY
|
||||
LDA :S2LEN
|
||||
LDY #0
|
||||
STA (ADDR2),Y
|
||||
STA RETLEN
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
@ -475,9 +453,9 @@ SUBCOPY
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* IF NO ERRORS, CARRY = 0; *
|
||||
* ELSE, CARRY = 1 *
|
||||
@ -485,11 +463,6 @@ SUBCOPY
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBDEL
|
||||
@ -677,9 +650,9 @@ SUBDEL
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = TRASH *
|
||||
* .Y = TRASH *
|
||||
* .X = TRASH *
|
||||
* .A = TRASH *
|
||||
* *
|
||||
* CARRY = 0 IF NO ERRORS; ELSE *
|
||||
* CARRY = 1 *
|
||||
@ -687,11 +660,6 @@ SUBDEL
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* AS SUCH, THIS MAY NOT FALL *
|
||||
* UNDER THE APACHE 2.0 LICENSE *
|
||||
* AGREEMENT, SINCE THE BOOK *
|
||||
* WAS WRITTEN BEFORE THE *
|
||||
* LICENSE! *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUBINS
|
||||
|
384
disks/disk5_strings/T.SUBSTRINGS.MIN
Normal file
384
disks/disk5_strings/T.SUBSTRINGS.MIN
Normal file
@ -0,0 +1,384 @@
|
||||
JMP SUBSTRINGSX
|
||||
*
|
||||
SUBPOS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
:POS
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
BEQ :NOTFND
|
||||
STA :SLEN
|
||||
LDA (ADDR2),Y
|
||||
BEQ :NOTFND
|
||||
STA :SUBLEN
|
||||
LDA :SUBLEN
|
||||
CMP :SLEN
|
||||
BEQ :LENOK
|
||||
BCS :NOTFND
|
||||
:LENOK
|
||||
LDA #1
|
||||
STA :SINDEX
|
||||
LDA :SLEN
|
||||
SEC
|
||||
SBC :SUBLEN
|
||||
STA :SCOUNT
|
||||
INC :SCOUNT
|
||||
:SLP1
|
||||
LDA :SINDEX
|
||||
STA :SIDX
|
||||
LDA #1
|
||||
STA :SUBIDX
|
||||
:CMPLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SUBIDX
|
||||
CMP (ADDR2),Y
|
||||
BNE :SLP2
|
||||
LDY :SUBIDX
|
||||
CPY :SUBLEN
|
||||
BEQ :FOUND
|
||||
INY
|
||||
STY :SUBIDX
|
||||
INC :SIDX
|
||||
JMP :CMPLP
|
||||
:SLP2
|
||||
INC :SINDEX
|
||||
DEC :SCOUNT
|
||||
BNE :SLP1
|
||||
BEQ :NOTFND
|
||||
:FOUND
|
||||
LDA :SINDEX
|
||||
JMP :EXIT
|
||||
:NOTFND
|
||||
LDA #0
|
||||
:EXIT
|
||||
STA RETURN
|
||||
LDY #1
|
||||
STY RETLEN
|
||||
RTS
|
||||
:SLEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SUBIDX DS 1
|
||||
:SCOUNT DS 1
|
||||
:SIDX DS 1
|
||||
*
|
||||
SUBCOPY
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SCNT
|
||||
STA RETLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA #<RETURN
|
||||
STA ADDR2
|
||||
LDA #>RETURN
|
||||
STA ADDR2+1
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
LDA #0
|
||||
STA :S2LEN
|
||||
STA :SCERR
|
||||
LDA :SCNT
|
||||
BEQ :OKEXIT
|
||||
LDA :MLEN
|
||||
BEQ :EREXIT
|
||||
LDA :SINDEX
|
||||
BEQ :EREXIT
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCC :EREXIT
|
||||
LDA :SINDEX
|
||||
CLC
|
||||
ADC :SCNT
|
||||
BCS :RECALC
|
||||
TAX
|
||||
DEX
|
||||
CPX :S1LEN
|
||||
BCC :CNT10K
|
||||
BEQ :CNT10K
|
||||
:RECALC
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
STA :SCNT
|
||||
INC :SCNT
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:CNT10K
|
||||
LDA :SCNT
|
||||
CMP :MLEN
|
||||
BCC :CNT20K
|
||||
BEQ :CNT20K
|
||||
LDA :MLEN
|
||||
STA :SCNT
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:CNT20K
|
||||
LDX :SCNT
|
||||
BEQ :EREXIT
|
||||
LDA #1
|
||||
STA :S2LEN
|
||||
:MVLP
|
||||
LDY :SINDEX
|
||||
LDA (ADDR1),Y
|
||||
LDY :S2LEN
|
||||
STA (ADDR2),Y
|
||||
INC :SINDEX
|
||||
INC :S2LEN
|
||||
DEX
|
||||
BNE :MVLP
|
||||
DEC :S2LEN
|
||||
LDA :SCERR
|
||||
BNE :EREXIT
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S2LEN
|
||||
LDY #0
|
||||
STA (ADDR2),Y
|
||||
STA RETLEN
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:MLEN DS 1
|
||||
:SCNT DS 1
|
||||
:SINDEX DS 1
|
||||
:SCERR DS 1
|
||||
*
|
||||
SUBDEL
|
||||
*
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
STA :SCNT
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TXA
|
||||
PHA
|
||||
TYA
|
||||
PHA
|
||||
LDY #0
|
||||
STY :SCERR
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
LDA :SCNT
|
||||
BEQ :OKEXIT
|
||||
LDA :SINDEX
|
||||
BEQ :ERREXIT
|
||||
LDA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCC :ERREXIT
|
||||
LDA :SINDEX
|
||||
CLC
|
||||
ADC :SCNT
|
||||
BCS :TRUNC
|
||||
STA :SIDX
|
||||
TAX
|
||||
DEX
|
||||
CPX :S1LEN
|
||||
BCC :CNTOK
|
||||
BEQ :TRUNC
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:TRUNC
|
||||
LDX :SINDEX
|
||||
DEX
|
||||
STX :S1LEN
|
||||
LDA :SCERR
|
||||
BEQ :OKEXIT
|
||||
BNE :ERREXIT
|
||||
:CNTOK
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SIDX
|
||||
TAX
|
||||
INX
|
||||
BEQ :OKEXIT
|
||||
:MVLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SINDEX
|
||||
STA (ADDR1),Y
|
||||
INC :SINDEX
|
||||
INC :SIDX
|
||||
DEX
|
||||
BNE :MVLP
|
||||
LDX :SINDEX
|
||||
DEX
|
||||
STX :S1LEN
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:ERREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:SCNT DS 1
|
||||
:SINDEX DS 1
|
||||
:SIDX DS 1
|
||||
:SCERR DS 1
|
||||
*
|
||||
SUBINS
|
||||
*
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA :MLEN
|
||||
PLA
|
||||
STA :SINDEX
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TXA
|
||||
PHA
|
||||
TYA
|
||||
PHA
|
||||
LDA #0
|
||||
STA :SCERR
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
STA :S1LEN
|
||||
LDA (ADDR2),Y
|
||||
STA :S2LEN
|
||||
BNE :IDX0
|
||||
JMP :OKEXIT
|
||||
:IDX0
|
||||
LDA :SINDEX
|
||||
BNE :CHKLEN
|
||||
JMP :EREXIT
|
||||
:CHKLEN
|
||||
LDA :S2LEN
|
||||
CLC
|
||||
ADC :S1LEN
|
||||
BCS :TRUNC
|
||||
CMP :MLEN
|
||||
BCC :IDXLEN
|
||||
BEQ :IDXLEN
|
||||
:TRUNC
|
||||
LDA :MLEN
|
||||
SEC
|
||||
SBC :S1LEN
|
||||
BCC :EREXIT
|
||||
BEQ :EREXIT
|
||||
STA :S2LEN
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
:IDXLEN
|
||||
LDA :S1LEN
|
||||
CMP :SINDEX
|
||||
BCS :LENOK
|
||||
LDX :S1LEN
|
||||
INX
|
||||
STX :SINDEX
|
||||
LDA #$0FF
|
||||
STA :SCERR
|
||||
LDA :S1LEN
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :S1LEN
|
||||
JMP :MVESUB
|
||||
:LENOK
|
||||
LDA :S1LEN
|
||||
SEC
|
||||
SBC :SINDEX
|
||||
TAX
|
||||
INX
|
||||
LDA :S1LEN
|
||||
STA :SIDX
|
||||
CLC
|
||||
ADC :S2LEN
|
||||
STA :SBIDX
|
||||
STA :S1LEN
|
||||
:OPNLP
|
||||
LDY :SIDX
|
||||
LDA (ADDR1),Y
|
||||
LDY :SBIDX
|
||||
STA (ADDR1),Y
|
||||
DEC :SIDX
|
||||
DEC :SBIDX
|
||||
DEX
|
||||
BNE :OPNLP
|
||||
:MVESUB
|
||||
LDA #1
|
||||
STA :SIDX
|
||||
LDX :S2LEN
|
||||
:MVELP
|
||||
LDY :SIDX
|
||||
LDA (ADDR2),Y
|
||||
LDY :SINDEX
|
||||
STA (ADDR1),Y
|
||||
INC :SIDX
|
||||
INC :SINDEX
|
||||
DEX
|
||||
BNE :MVELP
|
||||
LDA :SCERR
|
||||
BNE :EREXIT
|
||||
:OKEXIT
|
||||
CLC
|
||||
BCC :EXIT
|
||||
:EREXIT
|
||||
SEC
|
||||
:EXIT
|
||||
LDA :S1LEN
|
||||
LDY #0
|
||||
STA (ADDR1),Y
|
||||
RTS
|
||||
:S1LEN DS 1
|
||||
:S2LEN DS 1
|
||||
:SUBLEN DS 1
|
||||
:MLEN DS 1
|
||||
:SINDEX DS 1
|
||||
:SIDX DS 1
|
||||
:SBIDX DS 1
|
||||
:SCERR DS 1
|
||||
SUBSTRINGSX
|
Loading…
x
Reference in New Issue
Block a user