mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2024-11-27 12:49:27 +00:00
9849dbb5ea
items in disk folder will be updated automatically, whereas items in the source folder will be updated periodically due to having to manually sort through files to copy and paste
131 lines
3.5 KiB
Plaintext
131 lines
3.5 KiB
Plaintext
*``````````````````````````````*
|
|
* MEMFILL :: FILL MEMORY LOC *
|
|
*- -*
|
|
* FILLS A BLOCK OF MEMORY WITH *
|
|
* THE SPECIFIED VALUE; USED *
|
|
* OFTEN TO CLEAR LARGE BLOCKS. *
|
|
*- -*
|
|
* CLOBBERS: *
|
|
* *
|
|
* FLAGS: ????---- REG: AXYM *
|
|
*- -*
|
|
* CYCLES: ??? *
|
|
* SIZE: *
|
|
*- -*
|
|
* USAGE: *
|
|
* *
|
|
* LDA #>$6A00 *
|
|
* PHA *
|
|
* LDA #<$6A00 *
|
|
* PHA *
|
|
* LDA #>1024 *
|
|
* PHA *
|
|
* LDA #<1024 *
|
|
* PHA *
|
|
* LDA #0 *
|
|
* PHA *
|
|
* JSR MEMFILL *
|
|
*- -*
|
|
* ENTRY *
|
|
* *
|
|
* TOP OF STACK *
|
|
* *
|
|
* LOW BYTE OF RETURN ADDRESS *
|
|
* HI BYTE OF RETURN ADDRESS *
|
|
* FILL VALUE FOR MEMORY *
|
|
* ARRAY SIZE *
|
|
* LOW BYTE OF STARTING POINT *
|
|
* HIGH BYTE OF STARTING POINT *
|
|
*- -*
|
|
* EXIT *
|
|
* *
|
|
* TOP OF STACK *
|
|
* *
|
|
* LOW BYTE OF RETURN ADDRESS *
|
|
* HI BYTE OF RETURN ADDRESS *
|
|
* *
|
|
* Y = COUNTER; TRASH *
|
|
* X = COUNTER; TRASH *
|
|
* A = LOW BYTE OF RET ADDR *
|
|
*- -*
|
|
* 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. *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
MEMFILL
|
|
*
|
|
** SAVE RETURN ADDRESS
|
|
*
|
|
PLA
|
|
STA :RETADR
|
|
PLA
|
|
STA :RETADR+1
|
|
*
|
|
** GET PARAMETERS
|
|
*
|
|
PLA
|
|
STA :VALUE
|
|
PLA
|
|
STA :ARYSZ
|
|
PLA
|
|
STA :ARYSZ+1
|
|
PLA
|
|
STA ADDR1 ; ZERO PAGE POINTER
|
|
PLA ; DEFINED IN
|
|
STA ADDR1+1 ; DECS
|
|
*
|
|
** FILL WHOLE PAGES FIRST
|
|
*
|
|
LDA :VALUE ; GET VAL FOR FILL
|
|
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
|
|
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
|
|
LDY #0
|
|
:FULLPG
|
|
STA (ADDR1),Y
|
|
INY ; INC TO NEXT BYTE
|
|
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
|
|
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
|
|
DEX
|
|
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
|
|
*
|
|
** DO THE REMAINING PARTIAL PAGE
|
|
** REGISTER A STILL CONTAINS VALUE
|
|
*
|
|
:PARTPG
|
|
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
|
|
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
|
|
LDY #0
|
|
:PARTLP
|
|
STA (ADDR1),Y ; STORE VAL
|
|
INY ; INCREMENT INDEX
|
|
DEX ; DECREMENT COUNTER
|
|
BNE :PARTLP ; BRANCH IF NOT DONE
|
|
:EXIT
|
|
*
|
|
** RESTORE RETURN ADDRESS
|
|
*
|
|
LDA :RETADR+1
|
|
PHA
|
|
LDA :RETADR
|
|
PHA
|
|
RTS
|
|
*
|
|
** DATA
|
|
*
|
|
:VALUE DS 1 ; FILL VALUE
|
|
:ARYSZ DS 2 ; ARRAY SIZE
|
|
:RETADR DS 2
|