mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2026-04-20 07:16:32 +00:00
updated source files
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 03-JUN-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 03-JUN-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
|
||||
@@ -212,10 +212,10 @@ FFWRD MAC
|
||||
REWND MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
ASL ; {2C1B}
|
||||
STA SCRATCH ; {4C3B}
|
||||
STA ZPB1 ; {4C3B}
|
||||
LDA NOTEP ; {4C3B}
|
||||
SEC ; {2C1B}
|
||||
SBC SCRATCH ; {4C3B}
|
||||
SBC ZPB1 ; {4C3B}
|
||||
STA NOTEP ; {4C3B}
|
||||
LDA NOTEP+1 ; {4C3B}
|
||||
SBC #0 ; {3C2B}
|
||||
@@ -287,11 +287,11 @@ PSONG MAC
|
||||
]LP1
|
||||
PNOTE ; {172C3B}
|
||||
LDA NOTEP ; {4C3B}
|
||||
STA ADDR4 ; {4C3B}
|
||||
STA ZPWSYS ; {4C3B}
|
||||
LDA NOTEP+1 ; {4C3B}
|
||||
STA ADDR4+1 ; {4C3B}
|
||||
STA ZPWSYS+1 ; {4C3B}
|
||||
LDY #0 ; {3C2B}
|
||||
LDA (ADDR4),Y ; {5C3B}
|
||||
LDA (ZPWSYS),Y ; {5C3B}
|
||||
BEQ ]EXITSONG ; {3C2B}
|
||||
NEXTN ; {24C17B}
|
||||
JMP ]LP1 ; {3C3B}
|
||||
@@ -317,10 +317,10 @@ PSONG MAC
|
||||
*
|
||||
SFX MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B}
|
||||
STA ZPB1 ; {3C2B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA BPAR2 ; {3C2B}
|
||||
STA ZPB2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B}
|
||||
STA BPAR3 ; {3C2B}
|
||||
STA ZPB3 ; {3C2B}
|
||||
JSR SOUNDFX ; {1941C3B}
|
||||
<<<
|
||||
|
||||
@@ -23,16 +23,16 @@ PLAYNOTE
|
||||
LDA TEMPMUL ; {4C3B} SET TEMPO MULTIPLIER
|
||||
STA DURMUL ; {4C3B}
|
||||
LDA NOTEP ; {4C3B} TRANSFER TO ZERO PAGE
|
||||
STA ADDR4 ; {3C2B}
|
||||
STA ZPW6 ; {3C2B}
|
||||
LDA NOTEP+1 ; {4C3B}
|
||||
STA ADDR4+1 ; {3C2B}
|
||||
LDA (ADDR4),Y ; {6C3B} LOAD CURRENT NOTE INDEX
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDA (ZPW6),Y ; {6C3B} LOAD CURRENT NOTE INDEX
|
||||
BEQ :PLAYDONE ; {3C2B} IF 00, EXIT
|
||||
TAX ; {2C1B} MOVE OFFSET TO .X POINTER
|
||||
LDA NOTETBL,X ; {5C2B} GET NOTE FREQUENCY
|
||||
STA PITCH ; {4C3B}
|
||||
INY ; {2C1B} INCREASE SONG POINTER
|
||||
:NOCARRY LDA (ADDR4),Y ; {6C3B} GET DURATION POINTER
|
||||
:NOCARRY LDA (ZPW6),Y ; {6C3B} GET DURATION POINTER
|
||||
TAX ; {2C1B} MOVE OFFSET TO .X POINTER
|
||||
LDA DURTBL,X ; {5C2B} GET DURATION VALUE
|
||||
STA DURAT ; {4C3B}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = EFFECT NUMBER *
|
||||
* BPAR2 = VARIABLE ONE *
|
||||
* BLAR3 = VARIABLE TWO *
|
||||
* ZPB1 = EFFECT NUMBER *
|
||||
* ZPB2 = VARIABLE ONE *
|
||||
* ZPB3 = VARIABLE TWO *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -28,21 +28,21 @@
|
||||
* SIZE: 287 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]CNTR EQU BPAR2 ; MACHINE GUN BURSTS
|
||||
]PWDTH EQU BPAR3 ; SWOOP PULSE WIDTH--40,80,128,160
|
||||
]PCNT EQU BPAR2 ; SWOOP PULSE COUNT--1
|
||||
]PSTEP EQU BPAR2 ; WORM STEP--1,77,129,179
|
||||
]WWDTH EQU BPAR3 ; WORM PULSE WIDTH--176,88
|
||||
]PLIMIT EQU BPAR4 ; PULSE LIMIT
|
||||
]F1 EQU BPAR2 ; ALERT FIRST FREQUENCY
|
||||
]F2 EQU BPAR3 ; ALERT 2ND FREQUENCY
|
||||
]CNTR EQU ZPB2 ; MACHINE GUN BURSTS
|
||||
]PWDTH EQU ZPB3 ; SWOOP PULSE WIDTH--40,80,128,160
|
||||
]PCNT EQU ZPB2 ; SWOOP PULSE COUNT--1
|
||||
]PSTEP EQU ZPB2 ; WORM STEP--1,77,129,179
|
||||
]WWDTH EQU ZPB3 ; WORM PULSE WIDTH--176,88
|
||||
]PLIMIT EQU ZPB4 ; PULSE LIMIT
|
||||
]F1 EQU ZPB2 ; ALERT FIRST FREQUENCY
|
||||
]F2 EQU ZPB3 ; ALERT 2ND FREQUENCY
|
||||
*
|
||||
]DUR DFB #08 ; {0C1B} ALERT DURATION
|
||||
]WT DFB #10 ; {0C1B} ALERT REST PERIOD
|
||||
*
|
||||
SOUNDFX
|
||||
*
|
||||
LDA BPAR1 ; {3C2B}
|
||||
LDA ZPB1 ; {3C2B}
|
||||
CMP #0 ; {3C2B}
|
||||
BEQ :MGUN ; {3C2B}
|
||||
CMP #1 ; {3C2B}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
@@ -66,21 +66,16 @@
|
||||
*** MEANT TO BE USED IN ACTUAL USER PROGRAMS
|
||||
*** BEYOND THAT CAPACITY.
|
||||
*
|
||||
* THE _PRN MACRO - PRINT
|
||||
** THE _PRN MACRO - PRINT
|
||||
*
|
||||
** THE _PRN MACRO SIMPLY PRINTS A LITERAL STRING
|
||||
** TO THE SCREEN, AND HAS VERY LIMITED USE. WHEN
|
||||
** OUTPUT IS MORE IMPORTANT THAN AN ERROR MESSAGE
|
||||
** OR THE LIKE, USE THE MACROS PROVIDED BY THE
|
||||
** STDIO LIBRARY.
|
||||
*
|
||||
** USAGE:
|
||||
JSR ]HOME
|
||||
_PRN "THE _PRN MACRO",8D
|
||||
_PRN "===============",8D8D
|
||||
** _PRN "THIS IS A TEST.",8D8D
|
||||
*
|
||||
_PRN "THIS IS A TEST.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE _WAIT MACRO - WAIT
|
||||
*
|
||||
@@ -89,9 +84,6 @@
|
||||
** SHOULD BE USED INSTEAD WHENEVER POSSIBLE.
|
||||
** NONETHELESS, THE _WAIT MACRO SIMPLY WAITS
|
||||
** FOR A KEYPRESS BEFORE EXECUTION CONTINUES.
|
||||
*
|
||||
** USAGE:
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE WAIT MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
@@ -102,205 +94,15 @@
|
||||
** UNSURPRISINGLY, THE BEEP MACRO SENDS A STANDARD
|
||||
** NUMBER OF TICKS TO THE SPEAKER TO PRODUCE A BEEP
|
||||
** THAT CAN BE A LENGTH BETWEEN 1 AND 255.
|
||||
*
|
||||
** USAGE:
|
||||
** BEEP #255
|
||||
*
|
||||
_PRN "BEEEEEEEEEEEEEEP",8D8D
|
||||
BEEP #255
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* LONG BRANCHING MACROS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*** LONG BRANCHING ROUTINES ARE PRETTY SELF-
|
||||
*** EXPLANATORY TO ANYONE WHO HAS RUN INTO THE
|
||||
*** PAGE LENGTH PROBLEM WITH BRANCHING INSTRUCTIONS.
|
||||
*** ESSENTIALLY, THESE MACROS TO THE APPROPRIATE TESTS,
|
||||
*** THEN JMP TO THE PARAMETER ADDRESS PASSED. NOTE THAT
|
||||
*** THIS CAN EASILY BREAK CODE THAT IS SUPPOSED TO BE
|
||||
*** RELOCATABLE.
|
||||
*
|
||||
** SINCE ALL OF THE LONG BRANCHING MACROS WORK
|
||||
** EXACTLY THE SAME, IT IS ONLY NECESSARY TO SHOW
|
||||
** HOW ONE OF THEM IS USED. WE WILL USE BCCL HERE,
|
||||
** OR BRANCH CARRY CLEAR LONG.
|
||||
*
|
||||
** USAGE:
|
||||
** CLC
|
||||
** BCCL ]CONTINUE
|
||||
** BRK
|
||||
** ]CONTINUE
|
||||
** _PRN "THE CARRY IS CLEAR.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
_PRN "THE BCCL MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
CLC
|
||||
BCCL ]CONTINUE
|
||||
BRK
|
||||
]CONTINUE
|
||||
_PRN "THE CARRY IS CLEAR.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE BCCL MACRO - BRANCH CARRY CLEAR LONG
|
||||
* THE BCSL MACRO - BRANCH CARRY SET LONG
|
||||
* THE BEQL MACRO - BRANCH IF EQUAL LONG
|
||||
* THE BMIL MACRO - BRANCH IF MINUS LONG
|
||||
* THE BNEL MACRO - BRANCH NOT EQUAL LONG
|
||||
* THE BPLL MACRO - BRANCH IF PLUS LONG
|
||||
* THE BVCL MACRO - BRANCH OVERFLOW CLEAR LONG
|
||||
* THE BVSL MACRO - BRANCH OVERFLOW SET LONG
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* FAKE 65CO2 MACROS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*** THE FAKE 65C02 MACROS ARE APROXIMATIONS
|
||||
*** OF THE RELEVANT INSTRUCTIONS IN THE 65C02
|
||||
*** INSTRUCTION SET WHEN YOU ONLY HAVE A 6502
|
||||
*** TO WORK WITH. OBVIOUSLY, IF A 65C02 PROCESSOR
|
||||
*** IS READILY AVAILABLE, YOU SHOULD USE THE
|
||||
*** REAL INSTRUCTION SET.
|
||||
*
|
||||
* THE CBRA MACRO - 65C02 BRANCH ALWAYS
|
||||
*
|
||||
** THE CBRA MACRO SIMPLY REPLACES THE MACRO WITH
|
||||
** A JMP INSTRUCTION TO EMULATE THE BRANCH ALWAYS (BRA)
|
||||
** 65CO2 INSTRUCTION. IT WORKS LIKE YOU'D EXPECT:
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** CBRA ]CONT
|
||||
** BRK
|
||||
**]CONT _PRN "CBRA WORKED AS EXPECTED.",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE CBRA MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
CBRA ]CONT
|
||||
BRK
|
||||
]CONT _PRN "CBRA WORKED AS EXPECTED.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE CPHX MACRO - 65C02 PUSH .X
|
||||
*
|
||||
** THE CPHX MACRO EMULATES THE 65C02 INSTRUCTION
|
||||
** THAT PUSHES .X TO THE STACK.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDX #$FF
|
||||
** CPHX
|
||||
** _PRN "CONTENT PULLED FROM STACK: "
|
||||
** PLA ; .X IS NOW IN .A
|
||||
** STA $300
|
||||
** DUMP #$300;#1
|
||||
** _PRN " ",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE CPHX MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDX #$FF
|
||||
CPHX
|
||||
_PRN "CONTENT PULLED FROM THE STACK: "
|
||||
PLA
|
||||
STA $300
|
||||
DUMP #$300;#1
|
||||
_PRN " ",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE CPHY MACRO - 65C02 PUSH .Y
|
||||
*
|
||||
** THE CPHY MACRO WORKS THE SAME WAY AS THE CPHX
|
||||
** MACRO, EXCEPT PUSHES .Y INSTEAD OF .X. THUS,
|
||||
** IT WOULD BE REDUNDANT TO SHOW THE EXACT SAME PROCESS--
|
||||
** TREAT THE MACRO THE SAME WAY.
|
||||
*
|
||||
* THE CPLX MACRO - 65C02 PULL .X
|
||||
*
|
||||
** THE CPLX MACRO EMULATES THE PLX INSTRUCTION
|
||||
** FOR THE 65C02. THE VALUE AT THE TOP OF THE STACK
|
||||
** IS PULLED AND THEN STORED IN .X.
|
||||
*
|
||||
** USAGE:
|
||||
** LDA #$EE
|
||||
** PHA
|
||||
** CPLX
|
||||
** STX $300
|
||||
** _PRN "VALUE PULLED FROM STACK:"
|
||||
** DUMP #$300;#1
|
||||
** _WAIT
|
||||
** _PRN " ",8D8D
|
||||
*
|
||||
_PRN "THE CPLX MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDA #$EE
|
||||
PHA
|
||||
CPLX
|
||||
STX $300
|
||||
_PRN "VALUE PULLED FROM STACK:"
|
||||
DUMP #$300;#1
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE CPLY MACRO - 65C02 PULL .Y
|
||||
*
|
||||
** THE CPLY MACRO, OR 65CO2 PULL .Y MACRO,
|
||||
** EMULATES THE 65C02 INSTRUCTION PLY. AGAIN,
|
||||
** THIS WORKS EXACTLY THE SAME AS CPLX, EXCEPT
|
||||
** THE PULL IS STORED IN .Y INSTEAD OF .X.
|
||||
** THEREFORE, WE NEED NOT BE REDUNDANT.
|
||||
*
|
||||
* THE CTXY MACRO - 65C02 TRANSFER .X TO .Y
|
||||
*
|
||||
** THE CTXY MACRO EMULATES THE 65C02 TRANSFER .X TO .Y
|
||||
** INSTRUCTION, TXY. .A IS USED AS AN INTERMEDIARY, AND
|
||||
** THEN ITS ORIGINAL VALUE IS RESTORED.
|
||||
*
|
||||
** USAGE:
|
||||
** LDY #0
|
||||
** LDX #$DD
|
||||
** CTXY
|
||||
** STY $300
|
||||
** _PRN "CONTENT IN .Y:"
|
||||
** DUMP #$300;#1
|
||||
** _WAIT
|
||||
** _PRN " ",8D8D
|
||||
*
|
||||
_PRN "THE CTXY MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDY #0
|
||||
LDX #$DD
|
||||
CTXY
|
||||
STY $300
|
||||
_PRN "CONTENT IN .Y:"
|
||||
DUMP #$300;#1
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE CTYX MACRO - 65C02 TRANSFER .Y TO .X
|
||||
*
|
||||
** LIKE MANY SUBROUTINES BEFORE, THE CTYX MACRO OR
|
||||
** THE TRANSFER .Y TO .X MACRO, WORKS EXACTLY LIKE
|
||||
** ITS RELATED SUBROUTINE, THE CTXY MACRO, AND THUS
|
||||
** ITS USAGE SHOULD BE REFERRED TO IN THAT EXAMLPLE.
|
||||
** THIS MACRO EMULATES THE CYX INSTRUCTION IN 65CO2.
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMORY MANIPULATION MACROS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*** THE MACROS DEDICATED TO MANIPULATING MEMORY
|
||||
*** ARE USED FOR A VARIETY OF REASONS, BUT IF
|
||||
*** YOU ARE A SEASONED PROGRAMMER, YOU ALREADY KNOW
|
||||
*** THAT 99.9% OF THE JOB IS MEMORY MANIPULATION.
|
||||
*** THESE HERE ENCOMPASS THOSE DEDICATED TO MOVING,
|
||||
*** COPYING, AND FILLING MEMORY BLOCKS, AS WELL AS
|
||||
*** VIEWING MEMORY CONTENTS FOR DEBUGGING PURPOSES.
|
||||
*** FOR FUN, A POKE AND PEEK MACRO ARE INCLUDED FOR
|
||||
*** THE APPLESOFT KIDS, AND LOADS OR PULLS THE VALUE INTO .A.
|
||||
*
|
||||
* THE DUMP MACRO - MEMORY DUMP
|
||||
*
|
||||
** THE DUMP MACRO HAS ACTUALLY ALREADY BEEN
|
||||
@@ -308,17 +110,6 @@
|
||||
** OF THE 65C02 EMULATION MACROS. THE MACRO
|
||||
** SIMPLY DUMPS A BLOCK OF MEMORY SPECIFIED BY
|
||||
** THE PARAMETERS PASSED. THEREFORE:
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$BB
|
||||
** STA $300
|
||||
** LDA #$AA
|
||||
** STA $301
|
||||
** _PRN "VALUES IN $301-$302:"
|
||||
** DUMP #$300;#2
|
||||
** _WAIT
|
||||
** _PRN " ",8D8D
|
||||
*
|
||||
_PRN "THE DUMP MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
@@ -331,227 +122,9 @@
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE ERRH MACRO - ERROR HANDLER
|
||||
*
|
||||
** THE ERRH MACRO SETS THE ERROR HANDLING
|
||||
** HOOK FOR SOUBROUTINES THAT RELY ON
|
||||
** APPLESOFT IN SOME WAY. THIS IS PARTICULARLY
|
||||
** USED TO DETECT AN END-OF-FILE WHEN
|
||||
** READING A TEXT FILE, AS THERE IS NO "STANDARD"
|
||||
** WAY TO DETECT THE EOF EXCEPT BY THE ERROR RETURN.
|
||||
*
|
||||
** USAGE:
|
||||
** ERRH #$6000
|
||||
*
|
||||
** SINCE THIS ROUTINE REQUIRES TOO MUCH INTEGRATION
|
||||
** WITH OTHER LIBRARIES, YOU WON'T BE SEEING A
|
||||
** DEMO HERE. HOWEVER, THE CURRENT ITERATION OF THE
|
||||
** FILEIO LIBRARY MAKES EXTENSIVE USE OF THE MACRO,
|
||||
** AND CAN BE REFERRED TO FOR PLENTLY OF EXAMPLES.
|
||||
*
|
||||
* THE GRET MACRO - GET RETURN
|
||||
*
|
||||
** THE GRET MACRO STANDS FOR "GET RETURN," AND
|
||||
** SIMPLY COPIES THE CONTENTS OF THE RETURN
|
||||
** MEMORY BLOCK TO ANOTHER MEMORY BLOCK. THE
|
||||
** LENGTH OF THIS BLOCK IS DETERMINED BY THE
|
||||
** RETLEN VARIABLE, WHICH LOGICALLY PRECEDES THE
|
||||
** RETURN BLOCK AS A BYTE. AS SUCH, NOTE THAT
|
||||
** RETURN CAN ONLY HOLD UP TO 255 BYTES, AND
|
||||
** THUS THIS IS THE MAXIMUM TO BE TRANSFERRED.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$11
|
||||
** STA RETURN
|
||||
** LDA #$12
|
||||
** STA RETURN+1
|
||||
** LDA #$13
|
||||
** STA RETURN+2
|
||||
** LDA #3
|
||||
** STA RETLEN
|
||||
** GRET #$300
|
||||
** _PRN "THE 3 BYTES PUT IN RETURN ARE NOW AT $300:"
|
||||
** DUMP #$300;#3
|
||||
** _WAIT
|
||||
** _"PRN " ",8D8D
|
||||
_PRN "THE GRET MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDA #$11
|
||||
STA RETURN
|
||||
LDA #$12
|
||||
STA RETURN+1
|
||||
LDA #$13
|
||||
STA RETURN+2
|
||||
LDA #3
|
||||
STA RETLEN
|
||||
GRET #$300
|
||||
_PRN "THE 4 BYTES PUT IN RETURN ARE NOW AT $300"
|
||||
DUMP #$300;#3
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE MFILL MACRO - MEMORY FILL
|
||||
*
|
||||
** THE MFILL MACRO FILLS A BLOCK OF MEMORY
|
||||
** FROM A GIVEN STARTING ADDRESS AND A LENGTH
|
||||
** IN BYTES WITH THE SPECIFIED FILL VALUE.
|
||||
** NOTE THAT OVERFLOW ISSUES ARE TAKEN INTO
|
||||
** CONSIDERATION, AND THAT DETERMINES HOW THE
|
||||
** MEMORY LOCATIONS ARE READ AND FILLED (BACKWARDS
|
||||
** OR FORWARDS).
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** MFILL #$300;#$08;#$FF
|
||||
** _PRN "$300-$308 = "
|
||||
** DUMP #$300;#$08
|
||||
** _WAIT
|
||||
** _PRN " ",8D8D
|
||||
*
|
||||
_PRN "THE MFILL MACRO",8D
|
||||
_PRN "===============",8D8D
|
||||
MFILL #$300;#$08;#$FF
|
||||
_PRN "$300-$308 =",8D8D
|
||||
DUMP #$300;#$08
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE MOVB MACRO - MOVE MEMORY BLOCKS
|
||||
*
|
||||
** THE MOVB MACRO, WHICH STANDS FOR MOVE
|
||||
** BLOCK, DOES EXACTLY WHAT IT SAYS: IT MOVES
|
||||
** A BLOCK OF MEMORY TO ANOTHER BLOCK OF
|
||||
** MEMORY, THOUGH THIS SHUOLD BE SEEN MORE AS
|
||||
** A COPY, SINCE THE ORIGINAL DATA IS STILL
|
||||
** IN PLACE AFTER CALLING THE MACRO. NOTE THAT
|
||||
** NO CHECKS FOR OVERLAP ARE MADE, SO ERROR
|
||||
** CONTROL IS IN THAT RESPECT IS LEFT UP TO
|
||||
** THE END PROGRAMMER.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$AA
|
||||
** STA $300
|
||||
** LDA #$BB
|
||||
** STA $301
|
||||
** LDA #$CC
|
||||
** STA $302
|
||||
** MOVB #$300;#$310;#3
|
||||
** _PRN "$310-$312 NOW = $300-$302"
|
||||
** DUMP #$310;#3
|
||||
** _WAIT
|
||||
** _PRN " ",8D8D
|
||||
*
|
||||
_PRN "THE MOVB MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDA #$AA
|
||||
STA $300
|
||||
LDA #$BB
|
||||
STA $301
|
||||
LDA #$CC
|
||||
STA $302
|
||||
MOVB #$300;#$310;#3
|
||||
_PRN "$310-$312 NOW = $300-$302"
|
||||
DUMP #$310;#3
|
||||
_WAIT
|
||||
_PRN " ",8D8D
|
||||
*
|
||||
* THE MSWAP MACRO - SWAP MEMORY BLOCKS
|
||||
*
|
||||
** THE MSWAP MACRO SWAPS THE VALUES HELD IN TWO
|
||||
** BLOCKS OF MEMORY. NOTE THAT NO OVERFLOW CHECKING
|
||||
** IS DONE, SO THE END PROGRAMMER HAS TO BE CAREFUL
|
||||
** WHEN USING THE MACRO.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$66
|
||||
** STA $300
|
||||
** LDA #$77
|
||||
** STA $301
|
||||
** LDA #$88
|
||||
** STA $302
|
||||
** MSWAP #$300;#$310;#4
|
||||
** DUMP #$300;#3
|
||||
** DUMP #$310;#3
|
||||
** _PRN " ",8D8D
|
||||
** _PRN "$300-$302 HAS BEEN SWAPPED WITH $310-$312",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE MSWAP MACRO",8D
|
||||
_PRN "===============",8D8D
|
||||
LDA #$66
|
||||
STA $300
|
||||
LDA #$77
|
||||
STA $301
|
||||
LDA #$88
|
||||
STA $302
|
||||
MSWAP #$300;#$310;#4
|
||||
DUMP #$300;#3
|
||||
DUMP #$310;#3
|
||||
_PRN " ",8D8D
|
||||
_PRN "$300-$302 WAS SWAPPED WITH $310-312.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE PEEK MACRO - PEEK MEMORY
|
||||
*
|
||||
** THE PEEK MACRO EMULATES THE PEEK INSTRUCTION
|
||||
** IN APPLESOFT, KINDA. MOSTLY, IT JUST LOADS
|
||||
** A VELUE FROM MEMORY INTO .A. HOWEVER, MORE
|
||||
** FUNCTIONALITY MAY BE ADDED TO THIS MACRO IN
|
||||
** THE FUTURE IN ORDER TO DIFFERENTIATE IT FROM
|
||||
** SIMPLY LDA ##.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$EE
|
||||
** STA $300
|
||||
** PEEK #$300
|
||||
** STA RETURN
|
||||
** _PRN ".A NOW HOLDS:",8D8D
|
||||
** DUMP #RETURN;#1
|
||||
** _PRN " ",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE PEEK MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
LDA #$EE
|
||||
STA $300
|
||||
PEEK #$300
|
||||
STA RETURN
|
||||
_PRN ".A NOW HOLDS:",8D8D
|
||||
DUMP #RETURN;#1
|
||||
_PRN " ",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE POKE MACRO - POKE MEMORY
|
||||
*
|
||||
** LIKE THE PEEK MACRO, THE POKE MACRO SIMPLY
|
||||
** BEHAVES LIKE THE APPLESOFT EQUIVALENT, PUTTING
|
||||
** THE FIRST PARAMETER VALUE INTO THE SECOND PARAMETER'S
|
||||
** ADDRESSS. LIKE WITH PEEK, MORE MAY BE ADDED TO THE
|
||||
** MACRO'S FUNCTIONALITY IN THE FUTURE.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** POKE #$99;#$300
|
||||
** _PRN "$300 CONTAINS:"
|
||||
** DUMP #$300;#1
|
||||
** _PRN " ",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE POKE MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
POKE #$99;#$300
|
||||
_PRN "$300 CONTAINS:"
|
||||
DUMP #$300;#1
|
||||
_PRN " ",8D8D
|
||||
_WAIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* THE WEIRDOS: CLRHI,DELAY AND *
|
||||
* GBIT MACROS. *
|
||||
* THE WEIRDOS: CLRHI, GBIT AND *
|
||||
* NEGA MACROS. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*** THESE MACROS CAN BE HIGHLY USEFUL,
|
||||
@@ -563,16 +136,6 @@
|
||||
** THE CLRHI MACRO CLEARS THE HIGH NIBBLE IN .A
|
||||
** BYTE TO %0000. THIS HAS VARIOUS USES THAT NEED
|
||||
** NOT BE GONE OVER HERE.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** LDA #$FF
|
||||
** CLRHI
|
||||
** STA $300
|
||||
** DUMP #$300;#1
|
||||
** _PRN "^^ THE HIGH NIBBLE WAS CLEARED"
|
||||
** _PRN " ",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE CLRHI MACRO",8D
|
||||
_PRN "===============",8D8D
|
||||
@@ -584,43 +147,10 @@
|
||||
_PRN " ",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE DELAY MACRO - DELAY
|
||||
*
|
||||
** THE DELAY MACRO SIMPLY DELAYS RXECUTION
|
||||
** FOR A NUMBER OF MILLISECONDS. THIS ACCEPTS
|
||||
** A BYTE VALUE, SO IF YOU WANT A SINGLE SECOND
|
||||
** OF DELAY, YOU NEED TO RUN THE MACRO FOR TIMES
|
||||
** AS SUCH:
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** DELAY #250
|
||||
** DELAY #250
|
||||
** DELAY #250
|
||||
** DELAY #250
|
||||
** _PRN "DONE!",8D8D
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE DELAY MACRO",8D
|
||||
_PRN "===============",8D8D
|
||||
DELAY #250
|
||||
DELAY #250
|
||||
DELAY #250
|
||||
DELAY #250
|
||||
_PRN "DONE!",8D8D
|
||||
_WAIT
|
||||
*
|
||||
* THE GBIT MACRO - GET BIT VALUE
|
||||
*
|
||||
** THE GBIT MACRO RETURNS THE BIT VALUE
|
||||
** OF THE GIVEN POSITION IN THE PARAMETER.
|
||||
*
|
||||
** USAGE:
|
||||
*
|
||||
** GBIT #0;#%00100101
|
||||
** STA $300
|
||||
** DUMP #$300;#1
|
||||
** _WAIT
|
||||
*
|
||||
_PRN "THE GBIT MACRO",8D
|
||||
_PRN "==============",8D8D
|
||||
@@ -628,6 +158,17 @@
|
||||
STA $300
|
||||
DUMP #$300;#1
|
||||
_WAIT
|
||||
*
|
||||
** THE NEGA MACRO
|
||||
*
|
||||
** THE NEGA MACRO SIMPLY RETURNS IN .A THE NEGATIVE
|
||||
** EQUIVALENT OF THE VALUE ALREADY IN .A.
|
||||
*
|
||||
LDA #$80
|
||||
NEGA
|
||||
STA $300
|
||||
DUMP #$300;#1
|
||||
_WAIT
|
||||
*
|
||||
JSR ]HOME
|
||||
*
|
||||
@@ -713,5 +254,5 @@
|
||||
*
|
||||
PUT MIN.LIB.REQUIRED.ASM
|
||||
USE MIN.MAC.ALIAS.8080.ASM
|
||||
*USE MIN.MAC.ALIAS.Z80.ASM
|
||||
USE MIN.MAC.ALIAS.Z80.ASM
|
||||
*
|
||||
|
||||
@@ -11,74 +11,33 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* BYTES: 311 *
|
||||
* SIZE: 305 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
* VARIABLE DECLARATIONS ********
|
||||
*``````````````````````````````*
|
||||
* CONSTANTS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** JUMP TABLE SETUP. THIS IS FOR LOADING
|
||||
** SUBROUTINES INTO MEMORY FOR ACCESS BY
|
||||
** EXTERNAL EXECUTIONS. NOTE THAT THIS
|
||||
** SHOULD ALWAYS START AT SECOND BYTE OF
|
||||
** CODE IN THE PROGRAM SO THAT ITS
|
||||
** LOCATION IN MEMORY IS EASILY KNOWN.
|
||||
** ZERO PAGE WORD LOCATIONS
|
||||
*
|
||||
JUMPTBL JMP MAIN_START ; ** ALWAYS ** START WITH
|
||||
; JUMP TO MAIN_START
|
||||
DS 32 ; 16 MORE ENTRIES
|
||||
ZPW1 EQU $06 ; AND $07
|
||||
ZPW2 EQU $08 ; AND $09
|
||||
ZPW3 EQU $EB ; AND $EC
|
||||
ZPW4 EQU $ED ; AND $EE
|
||||
ZPW5 EQU $FA ; AND $FB
|
||||
ZPW6 EQU $FC ; AND $FD
|
||||
ZPWSYS EQU $FE ; AND $FF
|
||||
*
|
||||
** 20 BYTES FOR VARIABLES
|
||||
** ZERO PAGE BYTE LOCATIONS
|
||||
*
|
||||
VARTAB DS 20
|
||||
*
|
||||
** 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 255
|
||||
*
|
||||
** ADDRESS STORAGE LOCATIONS FOR
|
||||
** INDIRECT ADDRESSING.
|
||||
*
|
||||
ADDR1 EQU $06 ; AND $07
|
||||
ADDR2 EQU $08 ; AND $09
|
||||
ADDR3 EQU $EB ; AND $EC
|
||||
ADDR4 EQU $ED ; AND $EE
|
||||
*
|
||||
** SCRATCHPAD ZERO PAGE LOCATIONS AND
|
||||
** DEDICATED ZERO PAGE ADDRESS TO HOLD
|
||||
** A RETURN ADDRESS PASSED VIA THE STACK
|
||||
*
|
||||
SCRATCH EQU $19 ; USED TO BACKUP .Y
|
||||
SCRATCH2 EQU $1E
|
||||
RETADR EQU $FE ; AND $FF
|
||||
*
|
||||
** ZERO PAGE ADDRESSES DEDICATED TO PASSING
|
||||
** BACK RESULTS WHEN THERE ARE MORE THAN
|
||||
** THREE BYTES BEING PASSED (AXY) AND THE
|
||||
** USE OF THE STACK IS IMPRACTICAL OR TOO SLOW
|
||||
*
|
||||
RESULT EQU $FA
|
||||
RESULT2 EQU $FC
|
||||
*
|
||||
** WORD AND BYTE PARAMETER SPACE USED
|
||||
** BY APPLEIIASM MACROS
|
||||
*
|
||||
WPAR1 EQU $FA
|
||||
WPAR2 EQU $FC
|
||||
WPAR3 EQU $FE
|
||||
BPAR1 EQU $EF
|
||||
BPAR2 EQU $E3
|
||||
BPAR3 EQU $1E
|
||||
BPAR4 EQU $19
|
||||
*
|
||||
** VARIOUS HOOKS USED BY ALL ROUTINES
|
||||
ZPB1 EQU $19 ; USED TO BACKUP .Y
|
||||
ZPB2 EQU $1E
|
||||
ZPB3 EQU $EF
|
||||
ZPB4 EQU $E3
|
||||
*
|
||||
REENTRY EQU $3D0
|
||||
*
|
||||
@@ -99,4 +58,31 @@ BITON5 EQU $20
|
||||
BITON6 EQU $40
|
||||
BITON7 EQU $80
|
||||
*
|
||||
MAIN_START
|
||||
*``````````````````````````````*
|
||||
* DEDICATED MEMORY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
JMP _MAINSTART
|
||||
*
|
||||
** 16 BYTES FOR PASSING VARIABLES. THIS WOULD
|
||||
** NORMALLY HAPPEN WITH ZERO PAGE LOCATIONS, AT
|
||||
** LEAST IDEALLY, BUT SOMETIMES EXTRA SPACE MIGHT
|
||||
** BE NECESSARY.
|
||||
*
|
||||
PASSTAB DS 16
|
||||
*
|
||||
** 30 BYTES FOR DEDICATED VARIABLE STORAGE. AGAIN, NOT
|
||||
** ALWAYS NEEDED SINCE MOST VARIABLES ARE HELD ON THE
|
||||
** ZERO PAGE, BUT SOMETIMES NECESSARY.
|
||||
*
|
||||
VARTAB DS 30
|
||||
*
|
||||
** 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 255
|
||||
*
|
||||
_MAINSTART
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
@@ -18,15 +18,12 @@
|
||||
* SUBROUTINES: *
|
||||
* *
|
||||
* __DUMP : DUMP MEMORY *
|
||||
* __ERRH : HANDLE ERRORS *
|
||||
* __P : PRINT *
|
||||
* DELAYMS : DELAY MLSECS *
|
||||
* MEMFILL : FILL MEM BLOCK *
|
||||
* MEMMOVE : MOVE MEM BLOCK *
|
||||
* MEMSWAP : SWAP MEM BLOCKS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** LIBRARY-SPECIFIC VARIABLES
|
||||
*
|
||||
JMP _ENDMAINLIB
|
||||
*
|
||||
]RIGHT DS 1
|
||||
]LEFT DS 1
|
||||
@@ -71,40 +68,40 @@
|
||||
*
|
||||
__DUMP
|
||||
STY ]LENGTH ; {4C3B} LENGTH PASSED IN .Y
|
||||
STA ADDR1 ; {3C2B} ADDRESS LOBYTE IN .A
|
||||
STX ADDR1+1 ; {3C2B} ADDRESS HIBYTE IN .X
|
||||
STA ZPWSYS ; {3C2B} ADDRESS LOBYTE IN .A
|
||||
STX ZPWSYS+1 ; {3C2B} ADDRESS HIBYTE IN .X
|
||||
LDA #$8D ; {2C2B} LOAD CARRIAGE RETURN {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
|
||||
LDA ADDR1+1 ; {2C2B} GET ADDRESS HIBYTE {NZ}
|
||||
LDA ZPWSYS+1 ; {2C2B} GET ADDRESS HIBYTE {NZ}
|
||||
CLRHI ; {22C13B} CLEAR HIBITS {ZCV,N=0}
|
||||
TAX ; {2C1B} TRANSFER TO .X {NZ}
|
||||
LDA ]HEXTAB,X ; {5C3B} LOAD HEX CHAR FROM TABLE AT .X {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
|
||||
LDA ADDR1+1 ; {2C2B} LOAD ADDRESS HIBYTE AGAIN {NZ}
|
||||
LDA ZPWSYS+1 ; {2C2B} LOAD ADDRESS HIBYTE AGAIN {NZ}
|
||||
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
|
||||
TAX ; {2C1B} TRANSER TO .X {NZ}
|
||||
LDA ]HEXTAB,X ; {5C3B} LOAD CHAR FROM TABLE AT .X {NZ}
|
||||
JSR ]COUT ; {89C3B} SENT TO COUT {NZCV}
|
||||
LDA ADDR1 ; {4C3B} LOAD LOBYTE {NZ}
|
||||
LDA ZPWSYS ; {4C3B} LOAD LOBYTE {NZ}
|
||||
CLRHI ; {22C13B} CLEAR HIBITS {ZCV,N=0}
|
||||
TAX ; {2C1B} TRANSFER TO .X {NZ}
|
||||
LDA ]HEXTAB,X ; {5C3B} LOAD HEXCHAR AT .X {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
|
||||
LDA ADDR1 ; {3C2B} LOAD LOBYTE AGAIN {NZ}
|
||||
LDA ZPWSYS ; {3C2B} LOAD LOBYTE AGAIN {NZ}
|
||||
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
|
||||
TAX ; {2C1B} TRANSFER T .X {NZ}
|
||||
LDA ]HEXTAB,X ; {5C3B} LOAD HEXCHAR AT .X {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
|
||||
LDA #":" ; {2C2B} {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND COLON TO COUT {NZCV}
|
||||
LDA "#" ; {2C2B} {NZ}
|
||||
LDA #"#" ; {2C2B} {NZ}
|
||||
JSR ]COUT ; {89C3B} SEND SPACE TO COUT {NZCV}
|
||||
LDY #0 ; {2C2B} RESET COUNTER {NZ}
|
||||
:LP
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD BYTE FROM ADDRESS {NZ}
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD BYTE FROM ADDRESS {NZ}
|
||||
CLRHI ; {22C13B} AT COUNTER OFFSET; CLEAR HIBITS
|
||||
STA ]LEFT ; {4C3B} SAVE LEFT INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} RELOAD {NZ}
|
||||
LDA (ZPWSYS),Y ; {6C2B} RELOAD {NZ}
|
||||
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
|
||||
STA ]RIGHT ; {4C3B} SAVE RIGHT INDEX
|
||||
LDX ]LEFT ; {4C3B} LOAD LEFT INDEX {NZ}
|
||||
@@ -121,44 +118,6 @@ __DUMP
|
||||
RTS ; {6C1B} ELSE, EXIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __ERRH (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .A = ADDRESS LOBYTE *
|
||||
* .X = ADDRESS HIBYTE *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* SETS NEW ADDRESS FOR THE *
|
||||
* APPLSOFT ERROR HANDLING *
|
||||
* ROUTINE. *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^ *
|
||||
* *
|
||||
* CYCLES: 53 *
|
||||
* SIZE: 32 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__ERRH
|
||||
LDA #1 ; {2C2B} TRICK DOS INTO THINKING {NZ}
|
||||
STA $AAB6 ; {4C3B} IT'S IN APPLESOFT MODE
|
||||
STA $75+1 ; {3C2B} APPLESOFT LINE NUMBER POINTER
|
||||
STA $33 ; {3C2B} APPLESOFT PROMPT CHARACTER
|
||||
STA ADDR1 ; {3C2B} ADDRESS LOBYTE IN .A
|
||||
STX ADDR1+1 ; {3C2B} ADDRESS HIBYTE IN .X
|
||||
LDA #$FF ; {2C2B} TURN ON ERROR HANDLING {NZ}
|
||||
STA $D8 ; {3C3B} BYTE HERE
|
||||
LDY #0 ; {2C2B} CLEAR OFFSET {NZ}
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD ADDRESS LOBYTE {NZ}
|
||||
STA $9D5A ; {4C3B} SET AS ERROR HANDLING LO
|
||||
INY ; {2C1B} INCREASE OFFSET {NZ}
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD ADDRESS HIBYTE {NZ}
|
||||
STA $9D5B ; {4C3B} SET AS ERROR HANDLING HI
|
||||
RTS ; {6C1B} EXIT SUBROUTINE
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __P: (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
@@ -173,333 +132,30 @@ __ERRH
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 72+(155+ WITH COUT) *
|
||||
* CYCLES: 155+ *
|
||||
* SIZE: 35 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__P
|
||||
PLA ; {4C1B} PULL RETURN LOBYTE {NZ}
|
||||
STA ADDR1 ; {3C2B} STORE TO ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} STORE TO ZERO PAGE
|
||||
PLA ; {4C1B} PULL RETURN HIBYTE {NZ}
|
||||
STA ADDR1+1 ; {3C2B} STORE TO ZERO PAGE
|
||||
STA ZPWSYS+1 ; {3C2B} STORE TO ZERO PAGE
|
||||
LDY #1 ; {2C2B} SET OFFSET TO PLUS ONE
|
||||
:LP LDA (ADDR1),Y ; {6C2B} LOAD BYTE AT OFFSET .Y
|
||||
:LP LDA (ZPWSYS),Y ; {6C2B} LOAD BYTE AT OFFSET .Y
|
||||
BEQ :DONE ; {4C2B} IF BYTE = 0, QUIT
|
||||
JSR ]COUT ; {89C3B} OTHERWISE, PRINT BYTE {NZCV}
|
||||
INY ; {2C1B} INCREASE OFFSET {NZ}
|
||||
BNE :LP ; {4C2B} IF .Y <> 0, CONTINUE LOOP
|
||||
:DONE CLC ; {2C1B} CLEAR CARRY FLAG {C=0}
|
||||
TYA ; {2C1B} TRANSFER OFFSET TO .A {NZ}
|
||||
ADC ADDR1 ; {3C2B} ADD OFFSET TO RETURN ADDR {NZCV}
|
||||
STA ADDR1 ; {4C2B} STORE TO RETURN ADDRESS LOBYTE
|
||||
LDA ADDR1+1 ; {4C2B} DO THE SAME WITH THE HIBYTE {NZ}
|
||||
ADC ZPWSYS ; {3C2B} ADD OFFSET TO RETURN ADDR {NZCV}
|
||||
STA ZPWSYS ; {4C2B} STORE TO RETURN ADDRESS LOBYTE
|
||||
LDA ZPWSYS+1 ; {4C2B} DO THE SAME WITH THE HIBYTE {NZ}
|
||||
ADC #0 ; {3C2B} CARRY NOT RESET, SO INC HIBYTE {NZCV}
|
||||
PHA ; {3C1B} IF NEEDED; THEN, PUSH HIBYTE
|
||||
LDA ADDR1 ; {4C2B} LOAD LOBYTE {NZ}
|
||||
LDA ZPWSYS ; {4C2B} LOAD LOBYTE {NZ}
|
||||
PHA ; {3C1B} PUSH LOBYTE
|
||||
RTS ; {6C1B} EXIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAYMS (LEVENTHAL/SEVILLE) *
|
||||
* *
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* SEVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* .Y = NUMBER OF MILLISECS *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* DELAYS FOR X NUMBER OF *
|
||||
* MILLISECONDS BY LOOPING *
|
||||
* THROUGH A PRECISE NUMBER *
|
||||
* OF CYCLES. *
|
||||
* *
|
||||
* DESTROYS: NZCDIV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 39+ *
|
||||
* SIZE: 29 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
]MSCNT EQU $0CA ; LOOP 202 TIMES THROUGH DELAY1
|
||||
; SPECIFIC TO 1.23 MHZ
|
||||
; SPEED OF APPLE II
|
||||
:DELAY
|
||||
CPY #0 ; {2C2B} IF Y = 0, THEN EXIT {NZC}
|
||||
BEQ :EXIT ; {2C|3C2B}
|
||||
NOP ; {2C1B} (MAKE OVERHEAD=25C)
|
||||
*
|
||||
** IF DELAY IS 1MS THEN GOTO LAST1
|
||||
** THIS LOGIC IS DESIGNED TO BE
|
||||
** 5 CYCLES THROUGH EITHER ATH
|
||||
*
|
||||
CPY #1 ; {2C2B} USE 2 CYCLES {NZC}
|
||||
BNE :DELAYA ; {2C|3C2B} 3C IF TAKEN, ELSE 2C
|
||||
JMP :LAST1 ; {3C3B}
|
||||
*
|
||||
** DELAY 1 MILLISENCOND TIMES (Y-1)
|
||||
*
|
||||
:DELAYA
|
||||
DEY ; {2C1B} (PREDEC Y) {NZ}
|
||||
:DELAY0
|
||||
LDX #]MSCNT ; {2C2B} {NZ}
|
||||
:DELAY1
|
||||
DEX ; {2C1B} {NZ}
|
||||
BNE :DELAY1 ; {3C2B}
|
||||
NOP ; {2C1B}
|
||||
NOP ; {2C1B}
|
||||
DEY ; {2C1B} {NZ}
|
||||
BNE :DELAY0 ; {3C2B}
|
||||
:LAST1
|
||||
*
|
||||
** DELAY THE LAST TIME 25 CYCLES
|
||||
** LESS TO TAKE THE CALL, RETURN,
|
||||
** AND ROUTINE OVERHEAD INTO
|
||||
** ACCOUNT.
|
||||
*
|
||||
LDX #]MSCNT-3 ; {2C2B} {NZ}
|
||||
:DELAY2
|
||||
DEX ; {2C1B} {NZ}
|
||||
BNE :DELAY2 ; {3C2B}
|
||||
:EXIT
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMFILL (LEVENTHAL/SAVILLE) *
|
||||
* *
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* SAVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. FILLS A *
|
||||
* SPECIFIED RANGE OF MEMORY *
|
||||
* WITH A FILL VALUE. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = FILL VALUE *
|
||||
* WPAR2 = FILL LENGTH *
|
||||
* WPAR3 = STARTING ADDRESS *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^ *
|
||||
* *
|
||||
* CYCLES: 59+ *
|
||||
* SIZE: 31 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]FILL EQU BPAR1 ; FILL VALUE
|
||||
]SIZE EQU WPAR2 ; RANGE LENGTH IN BYTES
|
||||
]ADDR EQU WPAR1 ; RANGE STARTING ADDRESS
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
** FILL WHOLE PAGES FIRST
|
||||
*
|
||||
LDA ]FILL ; {3C2B} GET VAL FOR FILL {NZ}
|
||||
LDX ]SIZE+1 ; {3C2B} X=# OF PAGES TO DO {NZ}
|
||||
BEQ :PARTPG ; {3C2B} BRANCH IF HIGHBYTE OF SZ = 0
|
||||
LDY #0 ; {2C2B} RESET INDEX {NZ}
|
||||
:FULLPG
|
||||
STA (]ADDR),Y ; {6C2B} FILL CURRENT BYTE
|
||||
INY ; {2C1B} INCREMENT INDEX {NZ}
|
||||
BNE :FULLPG ; {3C2B} BRANCH IF NOT DONE W/ PAGE
|
||||
INC ]ADDR+1 ; {5C2B} ADVANCE TO NEXT PAGE {NZ}
|
||||
DEX ; {2C1B} DECREMENT COUNTER {NZ}
|
||||
BNE :FULLPG ; {3C2B} BRANCH IF NOT DONE W/ PAGES
|
||||
*
|
||||
** DO THE REMAINING PARTIAL PAGE
|
||||
** REGISTER A STILL CONTAINS VALUE
|
||||
*
|
||||
:PARTPG
|
||||
LDX ]SIZE ; {3C2B} GET # OF BYTES IN LAST PAGE {NZ}
|
||||
BEQ :EXIT ; {3C2B} BRANCH IF LOW BYTE = 0
|
||||
LDY #0 ; {2C2B} RESET INDEX {NZ}
|
||||
:PARTLP
|
||||
STA (]ADDR),Y ; {6C2B} STORE VAL
|
||||
INY ; {2C1B} INCREMENT INDEX {NZ}
|
||||
DEX ; {2C1B} DECREMENT COUNTER {NZ}
|
||||
BNE :PARTLP ; {3C2B} BRANCH IF NOT DONE
|
||||
:EXIT
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMMOVE (LEVENTHAL/SEVILLE) *
|
||||
* *
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* SEVILLE'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. COPIES *
|
||||
* SERIES OF BYTES FROM SRCLOC *
|
||||
* TO DESTLOC. *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR3 = LENGTH IN BYTES *
|
||||
* WPAR1 = SOURCE ADDRESS *
|
||||
* WPAR2 = DESTINATION ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 207+ *
|
||||
* BYTES: 117 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SIZE EQU WPAR3 ; LENGTH TO COPY (BYTES)
|
||||
]ADDR1 EQU WPAR1 ; SOURCE ADDRESS
|
||||
]ADDR2 EQU WPAR2 ; DESTINATION ADDRESS
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
** DETERMINE IF DEST AREA IS
|
||||
** ABOVE SRC AREA BUT OVERLAPS
|
||||
** IT. REMEMBER, OVERLAP CAN BE
|
||||
** MOD 64K. OVERLAP OCCURS IF
|
||||
** STARTING DEST ADDRESS MINUS
|
||||
** STARTING SRC ADDRESS (MOD
|
||||
** 64K) IS LESS THAN NUMBER
|
||||
** OF BYTES TO MOVE.
|
||||
*
|
||||
LDA ]ADDR2 ; {3C2B} CALC DEST-SRC {NZ}
|
||||
SEC ; {2C1B} SET CARRY {C=1}
|
||||
SBC ]ADDR1 ; {3C2B} SUBTRACT SOURCE ADDRESS {NZCV}
|
||||
TAX ; {2C1B} HOLD VAL IN .X {NZ}
|
||||
LDA ]ADDR2+1 ; {3C2B} {NZ}
|
||||
SBC ]ADDR1+1 ; {3C2B} MOD 64K AUTOMATIC {NZCV}
|
||||
; -- DISCARD CARRY
|
||||
TAY ; {2C1B} HOLD HIBYTE IN .Y {NZ}
|
||||
TXA ; {2C1B} CMP LOBYTE WITH # TO MOVE {NZ}
|
||||
CMP ]SIZE ; {3C2B} {NZC}
|
||||
TYA ; {2C1B} {NZ}
|
||||
SBC ]SIZE+1 ; {3C2B} SUBTRACT SIZE+1 FROM HIBYTE {NZCV}
|
||||
BCS :DOLEFT ; {3C2B} BRANCH IF NO OVERLAP
|
||||
*
|
||||
** DEST AREA IS ABOVE SRC AREA
|
||||
** BUT OVERLAPS IT.
|
||||
** MOVE FROM HIGHEST ADDR TO
|
||||
** AVOID DESTROYING DATA
|
||||
*
|
||||
JSR :MVERHT ; {3C6B}
|
||||
JMP :MREXIT ; {3C3B}
|
||||
*
|
||||
** NO PROB DOING ORDINARY MOVE
|
||||
** STARTING AT LOWEST ADDR
|
||||
*
|
||||
:DOLEFT
|
||||
JSR :MVELEFT ; {6C3B}
|
||||
:EXIT
|
||||
JMP :MREXIT ; {3C3B}
|
||||
:MVELEFT
|
||||
LDY #0 ; {2C2B} ZERO INDEX {NZ}
|
||||
LDX ]SIZE+1 ; {3C2B} X=# OF FULL PP TO MOVE {NZ}
|
||||
BEQ :MLPART ; {3C2B} IF X=0, DO PARTIAL PAGE
|
||||
:MLPAGE
|
||||
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM SOURCE {NZ}
|
||||
STA (]ADDR2),Y ; {6C2B} MOVE BYTE TO DESTINATION
|
||||
INY ; {2C1B} NEXT BYTE {NZ}
|
||||
BNE :MLPAGE ; {3C2B} CONT UNTIL 256B MOVED
|
||||
INC ]ADDR1+1 ; {5C2B} ADV TO NEXT SRC PAGE {NZ}
|
||||
INC ]ADDR2+1 ; {5C2B} ADV NEXT DEST PAGE {NZ}
|
||||
DEX ; {2C1B} DEC PAGE COUNT {NZ}
|
||||
BNE :MLPAGE ; {3C2B} CONT UNTIL ALL FULL
|
||||
; PAGES ARE MOVED
|
||||
:MLPART
|
||||
LDX ]SIZE ; {3C2B} GET LENGTH OF LAST PAGE {NZ}
|
||||
BEQ :MLEXIT ; {3C2B} BR IF LENGTH OF LAST
|
||||
; PAGE = 0
|
||||
; REG Y IS 0
|
||||
:MLLAST
|
||||
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM SOURCE {NZ}
|
||||
STA (]ADDR2),Y ; {6C2B} MOVE BYTE TO DESTINATION
|
||||
INY ; {2C1B} NEXT BYTE {NZ}
|
||||
DEX ; {2C1B} DEC COUNTER {NZ}
|
||||
BNE :MLLAST ; {3C2B} CONT UNTIL LAST P DONE
|
||||
:MLEXIT
|
||||
JMP :MREXIT ; {3C3B}
|
||||
*
|
||||
********************************
|
||||
*
|
||||
:MVERHT
|
||||
*
|
||||
** -- MOVE THE PARTIAL PAGE FIRST
|
||||
*
|
||||
LDA ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
|
||||
CLC ; {2C1B} CLEAR CARRY {C=0}
|
||||
ADC ]ADDR1+1 ; {3C2B} ADD SOURCE ADDRESS HIBYTE {NZCV}
|
||||
STA ]ADDR1+1 ; {3C2B} POINT TO LAST PAGE OF SRC
|
||||
LDA ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
|
||||
CLC ; {2C1B} CLEAR CARRY {C=0}
|
||||
ADC ]ADDR2+1 ; {3C2B} ADD DESTINATION HIBYTE {NZCV}
|
||||
STA ]ADDR2+1 ; {3C2B} POINT TO LAST P OF DEST
|
||||
*
|
||||
** MOVE THE LAST PARTIAL PAGE FIRST
|
||||
*
|
||||
LDY ]SIZE ; {3C2B} GET LENGTH OF LAST PAGE {NZ}
|
||||
BEQ :MRPAGE ; {3C2B} IF Y=0 DO THE FULL PAGES
|
||||
:MR0
|
||||
DEY ; {2C1B} BACK UP Y TO NEXT BYTE {NZ}
|
||||
LDA (]ADDR1),Y ; {6C2B} LOAD CURRENT SOURCE BYTE {NZ}
|
||||
STA (]ADDR2),Y ; {6C2B} STORE IN CURRENT DESTINATION
|
||||
CPY #0 ; {2C2B} BRANCH IF NOT DONE {NZC}
|
||||
BNE :MR0 ; {3C2B} WITH THE LAST PAGE
|
||||
:MRPAGE
|
||||
LDX ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
|
||||
BEQ :MREXIT ; {3C2B} BR IF HYBYTE = 0 (NO FULL P)
|
||||
:MR1
|
||||
DEC ]ADDR1+1 ; {5C2B} BACK UP TO PREV SRC PAGE {NZ}
|
||||
DEC ]ADDR2+1 ; {5C2B} TO DEST {NZ}
|
||||
:MR2
|
||||
DEY ; {2C1B} BACK UP Y TO NEXT BYTE {NZ}
|
||||
LDA (]ADDR1),Y ; {6C2B} LOAD SOURCE CURRENT BYTE {NZ}
|
||||
STA (]ADDR2),Y ; {6C2B} STORE BYTE IN DESTINATION
|
||||
CPY #0 ; {2C2B} IF NOT DONE WITH PAGE {NZC}
|
||||
BNE :MR2 ; {3C2B} THEN BRANCH OUT
|
||||
DEX ; {2C1B} DECREASE BYTE COUNTER {NZ}
|
||||
BNE :MR1 ; {3C2B} BR IF NOT ALL PAGES MOVED
|
||||
:MREXIT
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMSWAP (NATHAN RIGGS) *
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = SWAP LENGTH *
|
||||
* WPAR1 = 1ST ADDRESS *
|
||||
* WPAR2 = 2ND ADDRESS *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
* SWAPS THE VALUES IN THE *
|
||||
* MEMORY LOCATIONS GIVEN *
|
||||
* FOR THE SPECIFIED LENGTH. *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ *
|
||||
* *
|
||||
* CYCLES: 46+ *
|
||||
* SIZE: 18 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SIZE EQU BPAR1 ; SIZE OF RANGE TO SWAP
|
||||
]ADDR1 EQU WPAR1 ; SOURCE ADDRESS 1
|
||||
]ADDR2 EQU WPAR2 ; SOURCE ADDRESS 2
|
||||
*
|
||||
MEMSWAP
|
||||
LDY #255 ; {2C2B} RESET BYTE INDEX {NZ}
|
||||
:LP
|
||||
INY ; {2C1B} INCREASE BYTE INDEX {NZ}
|
||||
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM FIRST ADDRESS {NZ}
|
||||
TAX ; {2C1B} TRANSFER TO .X {NZ}
|
||||
LDA (]ADDR2),Y ; {6C2B} LOAD BYTE FROM SECOND ADDRESS {NZ}
|
||||
STA (]ADDR1),Y ; {6C2B} STORE IN FIRST ADDRESS
|
||||
TXA ; {2C1B} TRANSFER FIRST BYTE VAL TO .A {NZ}
|
||||
STA (]ADDR2),Y ; {6C2B} NOW STORE THAT IN SECOND ADDRESS
|
||||
CPY ]SIZE ; {3C2B} IF BYTE INDEX < LENGTH, {NZC}
|
||||
BNE :LP ; {3C2B} CONTINUE LOOPING
|
||||
RTS ; {6C1B} OTHERWISE, EXIT
|
||||
*
|
||||
RTS ; {6C1B}
|
||||
_ENDMAINLIB
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
|
||||
@@ -11,14 +11,6 @@
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* JSR EQUIVALENT *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CALL MAC
|
||||
JSR ]1 ; {3B6C}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* INVERT .A BITS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
@@ -52,14 +44,6 @@ POP MAC
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* RTS EQUIVALENT *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
RET MAC
|
||||
RTS ; {1B6C}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* SET CARRY FLAG *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* SUBROUTINE FILES NEEDED *
|
||||
* *
|
||||
* LIB.REQUIRED *
|
||||
* LIB.REQUIRED.ASM *
|
||||
* *
|
||||
* MACROS INCLUDED: *
|
||||
* *
|
||||
@@ -31,34 +31,17 @@
|
||||
* _MSTR : IS STRING? (ZERO) *
|
||||
* _PRN : PRINT STRING *
|
||||
* _WAIT : GET KEYPRESS *
|
||||
* BEEP : BEEP FOR SOME TIME *
|
||||
* BCCL : LONG ADDR BCC *
|
||||
* BCSL : LONG ADDR BCS *
|
||||
* BEEP : BEEP FOR SOME TIME *
|
||||
* BEQL : LONG ADDR BEQ *
|
||||
* BMIL : LONG ADDR BMI *
|
||||
* BNEL : LONG ADDR BNE *
|
||||
* BPLL : LONG ADDR BPL *
|
||||
* BVCL : LONG ADDR BVC *
|
||||
* BVSL : LONG ADDR BVS *
|
||||
* CBRA : BRANCH ALWAYS 65C02 *
|
||||
* CPHX : FAKE 65C02 PUSH X *
|
||||
* CPHY : FAKE 65C02 PUSH Y *
|
||||
* CPLX : FAKE 65C02 PULL X *
|
||||
* CPLY : FAKE 65C02 PULL Y *
|
||||
* CSTZ : FAKE 65C02 STORE Z *
|
||||
* CTXY : TRANSFER .X TO .Y *
|
||||
* CTYX : TRANSFER .Y TO .X *
|
||||
* CLRHI : CLEAR HIGH BYTE *
|
||||
* DELAY : DELAY SET MLSECONDS *
|
||||
* DUMP : DUMP MEMORY *
|
||||
* ERRH : SET ERROR ROUTINE *
|
||||
* GBIT : GET BIT FROM BYTE *
|
||||
* GRET : GET RETURN *
|
||||
* MFILL : FILL MEMORY BLOCK *
|
||||
* MOVB : MOVE MEMORY BLOCK *
|
||||
* MSWAP : SWAP MEMORY BLOCKS *
|
||||
* PEEK : LOAD .A FROM ADDR *
|
||||
* POKE : STORE ADDR VAL IN A *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -70,21 +53,21 @@
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* *
|
||||
* CYCLES: 8, EITHER WAY *
|
||||
* BYTES: 6, EITHER WAY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_AXLIT MAC ; CHECK IF LITERAL
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
_AXLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDX ]1/$100 ; {4C3B} GET HIGH {NZ}
|
||||
LDA ]1 ; {4C3B} GET LOW {NZ}
|
||||
ELSE ; OTHERWISE, ]1 IS AN ADDR
|
||||
ELSE ; OTHERWISE, ]1 IS AN ADDR
|
||||
LDX ]1+1 ; {4C3B} SO GET HIGH VALUE {NZ}
|
||||
LDA ]1 ; {4C3B} THEN LOW VALUE {NZ}
|
||||
FIN ; END IF
|
||||
<<< ; END MACRO
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _AXSTR *
|
||||
@@ -98,23 +81,23 @@ _AXLIT MAC ; CHECK IF LITERAL
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* OR STRING *
|
||||
* *
|
||||
* CYCLES: 11 *
|
||||
* BYTES: 9 + STRING BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_AXSTR MAC ; CHECK IF STRING
|
||||
IF "=]1 ;...... IF ]1 IS A STRING
|
||||
_AXSTR MAC
|
||||
IF "=]1 ; .......IF ]1 IS A STRING
|
||||
JMP __STRCNT2 ; {3C3B} SKIP STRING DEC
|
||||
]STRTMP STR ]1 ; {0C1B+} STR DECLARATION
|
||||
__STRCNT2 ; SKIP TO HERE
|
||||
__STRCNT2 ; SKIP TO HERE
|
||||
LDX #>]STRTMP ; {4C3B} GET HIBYTE OF STRING {NZ}
|
||||
LDA #<]STRTMP ; {4C3B} GET LO BYTE {NZ}
|
||||
ELSE ; OTHERWISE, ]1 IS ADDRESS
|
||||
ELSE ; OTHERWISE, ]1 IS ADDRESS
|
||||
_AXLIT ]1 ; {8C6B} TEST OF LITERAL OR NOT
|
||||
FIN ; END IF
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -127,24 +110,24 @@ __STRCNT2 ; SKIP TO HERE
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* *
|
||||
* CYCLES: 14 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISLIT MAC ; CHECK IF LITERAL
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
_ISLIT MAC
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; {4C3B} GET HIGH BYTE {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
LDA ]1 ; {4C3B} GET LOW BYTE {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
ELSE ; OTHERWISE, ]1 IS ADDRESS
|
||||
ELSE ; OTHERWISE, ]1 IS ADDRESS
|
||||
LDA ]1+1 ; {4C3B} SO GET HIGH NIBBLE {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
LDA ]1 ; {4C3B} THEN GET LOW NIBBLE {NZ}
|
||||
PHA ; {3C1B} AND PUSH TO STACK
|
||||
FIN ; END IF
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -158,25 +141,25 @@ _ISLIT MAC ; CHECK IF LITERAL
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* OR STRING *
|
||||
* *
|
||||
* CYCLES: 13 -OR- 8 *
|
||||
* BYTES: 10+ -OR- 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_ISSTR MAC ; CHECK IF STRING
|
||||
IF "=]1 ;...... IF ]1 IS A STRING
|
||||
JMP __STRCONT ; {3C3B} KIP STRING DEC
|
||||
_ISSTR MAC
|
||||
IF "=]1 ;............. IF ]1 IS A STRING
|
||||
JMP __STRCONT ; {3C3B} SKIP STRING DEC
|
||||
]STRTMP STR ]1 ; {0C1+B} DECLARE STRING
|
||||
__STRCONT
|
||||
LDA #>]STRTMP ; {2C2B} GET HI VAL {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
LDA #<]STRTMP ; {2C2B} GET LO 2C,2B {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
ELSE ; OTHERIWSE ]1 IS AN ADDRESS
|
||||
ELSE ; OTHERIWSE ]1 IS AN ADDRESS
|
||||
_ISLIT ]1 ; {8C6B} CHECK IF LITERAL
|
||||
FIN ; END IF
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -189,25 +172,25 @@ __STRCONT
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]2 = ZERO PAGE ADDRESS *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* ]2 = ZERO PAGE ADDRESS (2B) *
|
||||
* *
|
||||
* CYCLES: 16 *
|
||||
* BYTES: 12 (EITHER WAY) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_MLIT MAC ; CHECK IF LITERAL
|
||||
IF #=]1 ; IF ]1 IS A LITERAL
|
||||
_MLIT MAC
|
||||
IF #=]1 ; .......IF ]1 IS A LITERAL
|
||||
LDA ]1/$100 ; {4C3B} GET HI NIBBLE {NZ}
|
||||
STA ]2+1 ; {4C3B} STORE IN ZP
|
||||
LDA ]1 ; {4C3B} THEN GET LO {NZ}
|
||||
STA ]2 ; {4C3B} STORE IN ZP
|
||||
ELSE ; OTHERIWSE ]1 IS ADDRESS
|
||||
ELSE ; OTHERIWSE ]1 IS ADDRESS
|
||||
LDA ]1+1 ; {4C3B} SO GET HIGH NIB {NZ}
|
||||
STA ]2+1 ; {4C3B} AND STORE IN ZP
|
||||
LDA ]1 ; {4C3B} THEN GET LOW NIB {NZ}
|
||||
STA ]2 ; {4C4B} AND STORE IN ZP
|
||||
FIN ; END IF
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -221,27 +204,27 @@ _MLIT MAC ; CHECK IF LITERAL
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* OR STRING *
|
||||
* ]2 = ZERO PAGE ADDRESS *
|
||||
* ]2 = ZERO PAGE ADDRESS (2B) *
|
||||
* *
|
||||
* CYCLES: 15 -OR- 8 *
|
||||
* BYTES: 14 +STRING BYTES OR 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_MSTR MAC ; CHECK IF STRING
|
||||
IF "=]1 ;...... IF ]1 IS A STRING
|
||||
_MSTR MAC
|
||||
IF "=]1 ;............. IF ]1 IS A STRING
|
||||
JMP __STRCONT ; {3C3B} SKIP STRING DEC
|
||||
]STRTMP STR ]1 ; {OC1+B} DECLARE STRING
|
||||
__STRCONT ; CONTINUE
|
||||
__STRCONT ; CONTINUE
|
||||
LDA #>]STRTMP ; {2C2B} GET HI NIB OF ADDR {NZ}
|
||||
STA ]2+1 ; {4C3B} STORE IN ZP
|
||||
LDA #<]STRTMP ; {2C2B} GET LOW NIB {NZ}
|
||||
STA ]2 ; {4C3B} SPRE ON ZP
|
||||
ELSE ; OTHERWISE ]1 IS ADDRESS
|
||||
ELSE ; OTHERWISE ]1 IS ADDRESS
|
||||
_MLIT ]1;]2 ; {8C6B} CHECK IF LITERAL
|
||||
FIN ; END IF
|
||||
<<< ; END MACRO
|
||||
FIN ; END IF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PRN *
|
||||
@@ -250,20 +233,18 @@ __STRCONT ; CONTINUE
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* OR STRING *
|
||||
* *
|
||||
* CYCLES: 161+ *
|
||||
* BYTES: 9+ *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRN MAC ; PRINT STRING
|
||||
STY SCRATCH ; {3C2B} PRESERVE .Y
|
||||
_PRN MAC
|
||||
JSR __P ; {161C3B} PRINT THE STRING {NZCV}
|
||||
ASC ]1 ; {0C1B+} HOLD STRING HERE
|
||||
HEX 00 ; {0C1B} KILL STRING PRINT
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
ASC ]1 ; {0C1B+} HOLD STRING HERE
|
||||
HEX 00 ; {0C1B} KILL STRING PRINT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _WAIT *
|
||||
@@ -276,48 +257,12 @@ _PRN MAC ; PRINT STRING
|
||||
* BYTES : 10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_WAIT MAC ; WAIT FOR KEYPRESS
|
||||
_WAIT MAC
|
||||
]LP LDA ]KYBD ; {4C3B} CHECK FOR KEYPRESS {NZ}
|
||||
BPL ]LP ; {4C2B} IF NOT, KEEP LOOPING
|
||||
AND #$7F ; {2C2B} SET HIGH BIT {NZ}
|
||||
STA ]STROBE ; {4C3B} RESET KYBD STROBE
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BCCL *
|
||||
* *
|
||||
* BCC TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = ADDR TO BRANCH TO *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BCCL MAC ; LONG BCC
|
||||
BCC ]TOBCC ; {4C2B} IF CARRY CLEAR, BRANCH
|
||||
]NOBCC JMP ]EXIT ; {3C3B} OTHER, RETURN
|
||||
]TOBCC JMP ]1 ; {3C3B} JMP TO BCC BRANCH LOC
|
||||
]EXIT ; CARRY WASN'T CLEAR
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BCSL *
|
||||
* *
|
||||
* BCS TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BCSL MAC ; LONG LCS
|
||||
BCS ]TOBCS ; {4C2B} IF CARRY SET, THEN BRANCH
|
||||
]NOBCS JMP ]EXIT ; {3C3B} OTHERWISE, DON'T BRANCH
|
||||
]TOBCS JMP ]1 ; {3C3B} JMP TO BRANCH
|
||||
]EXIT ; EXIT LABEL
|
||||
<<< ; END MACRO
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BEEP *
|
||||
@@ -328,232 +273,24 @@ BCSL MAC ; LONG LCS
|
||||
* *
|
||||
* ]1 = NUMBER OF RINGS *
|
||||
* *
|
||||
* CYCLES: 108+ *
|
||||
* BYTES: 15 *
|
||||
* CYCLES: 102+ *
|
||||
* BYTES: 11 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BEEP MAC ; ROUTINE BEEP
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y REGISTER
|
||||
BEEP MAC
|
||||
LDX ]1 ; {4C3B} LOAD BEEP LENGTH {NZ}
|
||||
]LP1
|
||||
JSR BELL ; {90C3B} JSR TO BELL ROUTINE
|
||||
DEX ; {2C1B} DECREASE .X COUNTER {NZ}
|
||||
CPX #0 ; {2C2B} CMP .X TO ZERO {NZC}
|
||||
BNE ]LP1 ; {4C2B} IF !=, LOOP
|
||||
LDY SCRATCH ; {3C2B} OTHERWISE, RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BEQL *
|
||||
* *
|
||||
* BEQ TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BEQL MAC ; LONG BEQ
|
||||
BEQ ]TOBEQ ; {4C2B} IF CMP EQUAL OR 0, BRANCH
|
||||
]NOBEQ JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBEQ JMP ]1 ; {3C3B} JUMP TO BRANCH
|
||||
]EXIT ; EXIT LABEL
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BNEL *
|
||||
* *
|
||||
* BNE TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BNEL MAC ; LONG BNE
|
||||
BNE ]TOBNE ; {4C2B} IF CMP != OR !=0, BRANCH
|
||||
]NOBNE JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBNE JMP ]1 ; {3C3B} JUMP TO BRANCH ADDR
|
||||
]EXIT ; QUITTING LABEL
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BMIL *
|
||||
* *
|
||||
* BMI TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BMIL MAC ; LONG BMI
|
||||
BMI ]TOBMI ; {4C2B} IF NEGATIVE SET, BRANCH
|
||||
]NOBMI JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBMI JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
|
||||
]EXIT ; QUIT LABEL
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BPLL *
|
||||
* *
|
||||
* BPL TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BPLL MAC ; LONG BPL
|
||||
BPL ]TOBPL ; {4C2B} IF NOT NEGATIVE, BRANCH
|
||||
]NOBPL JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBPL JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
|
||||
]EXIT ; QUIT
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BVCL *
|
||||
* *
|
||||
* BVC TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BVCL MAC ; LONG BVC
|
||||
BVC ]TOBVC ; {4C2B} IF OVERFLOW CLEAR, BRANCH
|
||||
]NOBVC JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBVC JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
|
||||
]EXIT ; QUIT
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BVSL *
|
||||
* *
|
||||
* BVS TO A FAR AWAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BVSL MAC ; LONG BVS
|
||||
BVS ]TOBVS ; {4C2B} OF OVERFLOW SET, BRANCH
|
||||
]NOBVS JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
|
||||
]TOBVS JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
|
||||
]EXIT ; QUIT
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CBRA *
|
||||
* *
|
||||
* 65C02 BRA FAKE INSTRUCTION *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* BYTES: 8 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CBRA MAC ; BRANCH ALWAYS
|
||||
JMP ]1
|
||||
DEX ; {2C1B} DECREASE .X COUNTER {NZ}
|
||||
CPX #0 ; {2C2B} CMP .X TO ZERO {NZC}
|
||||
BNE ]LP1 ; {4C2B} IF !=, LOOP
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CPHX *
|
||||
* *
|
||||
* FAKE 65C02 PUSH .X TO STACK *
|
||||
* *
|
||||
* CYCLES: 11 *
|
||||
* BYTES: 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CPHX MAC ; PUSH .X TO STACK
|
||||
STA SCRATCH ; {3C2B} BACKUP .A CONTENTS
|
||||
TXA ; {2C1B} TRANSFER .X TO .A {NZ}
|
||||
PHA ; {3C1B} PUSH .A
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CPHY *
|
||||
* *
|
||||
* FAKE 65C02 PUSH .Y TO STACK *
|
||||
* *
|
||||
* CYCLES: 12 *
|
||||
* BYTES: 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CPHY MAC ; PUSH .Y TO STACK
|
||||
STA SCRATCH ; {3C2B} BACKUP .A
|
||||
TYA ; {2C1B} TRANSFER .Y TO .A {NZ}
|
||||
PHA ; {3C1B} PUSH .A TO STACK
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CPLX *
|
||||
* *
|
||||
* FAKE 65C02 PULL .X TO STACK *
|
||||
* *
|
||||
* CYCLES: 11 *
|
||||
* BYTES: 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CPLX MAC ; PULL FROM STACT TO .X
|
||||
STA SCRATCH ; {3C2B} BACKUP .A
|
||||
PLA ; {3C1B} PULL FROM STACK INTO .A {NZ}
|
||||
TAX ; {2C1B} TRANSFER .A TO .X {NZ}
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CPLY *
|
||||
* *
|
||||
* FAKE 65C02 PULL .Y FROM STAK *
|
||||
* *
|
||||
* CYCLES: 11 *
|
||||
* BYTES: 7 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CPLY MAC ; PULL FROM STACK INTO .Y
|
||||
STA SCRATCH ; {3C2B} BACKUP .A
|
||||
PLA ; {3C1B} PULL FROM STACK TO .A {NZ}
|
||||
TAY ; {2C2B} TRANSFER A TO .Y {NZ}
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CTXY *
|
||||
* *
|
||||
* TRANSFER X TO Y (FAKE 65C02) *
|
||||
* *
|
||||
* CYCLES: 10 *
|
||||
* BYTES: 6 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CTXY MAC ; TRANSFER X TO Y
|
||||
STA SCRATCH ; {3C2B} BACKUP .A
|
||||
TXA ; {2C1B} TRANSFER .X TO .A {NZ}
|
||||
TAY ; {2C1B} TRNSFER .A TO .Y {N}
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CTYX *
|
||||
* *
|
||||
* TRANSFER Y TO X (FAKE 65C02) *
|
||||
* *
|
||||
* CYCLES: 10 *
|
||||
* BYTE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CTYX MAC ; TRANSFER .Y TO .X
|
||||
STA SCRATCH ; {3C2B} BACKUP .A
|
||||
TYA ; {2C1B} TRANSFER .Y TO .A {NZ}
|
||||
TAX ; {2C1B} TRANSFER .A TO .X {NZ}
|
||||
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* CLRHI *
|
||||
* *
|
||||
* CLEAR THE HIGH NIBBLE OF A *
|
||||
* BYTE IN **.A**. *
|
||||
* BYTE IN .A REGISTER *
|
||||
* *
|
||||
* CYCLES: 10 *
|
||||
* SIZE: 6 BYTES *
|
||||
@@ -569,26 +306,6 @@ CLRHI MAC
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAY *
|
||||
* *
|
||||
* DELAY FOR PASSED MILLISECS *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = NUM OF MILLISECONDS *
|
||||
* *
|
||||
* CYCLES: 58+ *
|
||||
* BYTES: 10 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAY MAC ; DELAY FOR MILLISECONDS
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
LDY ]1 ; {4C3B} # OF MILLISECONDS {NZ}
|
||||
JSR DELAYMS ; {45C3B} DELAY SUBROUTINE {NZC}
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DUMP *
|
||||
* *
|
||||
* DUMP THE HEX AT A GIVEN *
|
||||
@@ -596,20 +313,18 @@ DELAY MAC ; DELAY FOR MILLISECONDS
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* ]2 = LENGTH IN BYTES *
|
||||
* ]1 = MEMORY ADDRESS (2B) *
|
||||
* ]2 = LENGTH IN BYTES (1B) *
|
||||
* *
|
||||
* CYCLES: 811+ *
|
||||
* BYTES: 16 *
|
||||
* CYCLES: 806+ *
|
||||
* BYTES: 12 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DUMP MAC ; DUMP MEMORY CONTENTS
|
||||
_AXLIT ]1 ; {8C6B} CHECK LITERAL
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y {NZ}
|
||||
LDY ]2 ; {4C3B} LOAD .Y WITH LENGTH {NZ}
|
||||
DUMP MAC
|
||||
_AXLIT ]1 ; {8C6B} CHECK LITERAL
|
||||
LDY ]2 ; {4C3B} LOAD .Y WITH LENGTH {NZ}
|
||||
JSR __DUMP ; {794C3B} DUMP CONTENTS
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* GBIT *
|
||||
@@ -618,13 +333,13 @@ DUMP MAC ; DUMP MEMORY CONTENTS
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = BYTE TO GET BIT FROM *
|
||||
* ]1 = BYTE TO GET BIT (1B) *
|
||||
* *
|
||||
* CYCLES: 14 *
|
||||
* BYTES : 15 *
|
||||
* CYCLES: 15 *
|
||||
* BYTES : 17 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GBIT MAC ; GET A SINGLE BIT FROM BYTE
|
||||
GBIT MAC
|
||||
LDA ]1 ; {3B4C} BYTE TO CHECK {NZ}
|
||||
AND ]2 ; {3B4C} MASK BIT # REQUESTED VIA HOOK {NZ}
|
||||
BEQ ]ZERO ; {2B2C} IF IT'S A MATCH, THEN 0
|
||||
@@ -634,179 +349,18 @@ GBIT MAC ; GET A SINGLE BIT FROM BYTE
|
||||
]EXIT <<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ERRH *
|
||||
* *
|
||||
* SET THE ERROR HANDLING HOOK *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* CYCLES: 73 *
|
||||
* BYTES : 7 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ERRH MAC ; SET ERROR HANDLE
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
_AXLIT ; {8C6B} CHECK IF LITERAL
|
||||
JSR __ERRH ; {59C3B} RUN ERROR HANDLE SET {NZ}
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {ZC}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* GRET *
|
||||
* *
|
||||
* COPY THE VALUE IN RETURN AND *
|
||||
* PLACE IT IN GIVEN ADDRESS. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = MEMORY ADDRESS BYTE *
|
||||
* *
|
||||
* CYCLES: 45+ *
|
||||
* BYTES : 11 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GRET MAC ; GET RETURN VALUE
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
_AXLIT ]1 ; {8C6B} CHECK LITERAL
|
||||
STA ADDR1 ; {3C2B} LOBYTE PASSED IN .A
|
||||
STX ADDR1+1 ; {3C2B} HIBYTE PASSED IN .X
|
||||
LDY #255 ; {2C2B} RESET COUNTER {ZC}
|
||||
]LP
|
||||
INY ; {2C1B} INCREASE COUNTER {ZC}
|
||||
LDA RETURN,Y ; {5C3B} LOAD BYTE IN RETURN AT {ZC}
|
||||
STA (ADDR1),Y ; {6C2B} COUNTER OFFSET; STORE AT
|
||||
CPY RETLEN ; {4C3B} NEW LOCATION {NZC}
|
||||
BNE ]LP ; {4C2B} IF COUNTER < RETLEN, LOOP
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MFILL *
|
||||
* *
|
||||
* FILL BLOCK OF MEMORY WITH *
|
||||
* SPECIFIED VALUE. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = STARTING ADDRESS *
|
||||
* ]2 = LENGTH IN BYTES *
|
||||
* ]3 = FILL VALUE *
|
||||
* *
|
||||
* CYCLES: 110+ *
|
||||
* BYTES: 36 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MFILL MAC ; MEMORY FILL
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y REGISTER
|
||||
_MLIT ]1;WPAR1 ; {16C12B} CHECK LITERAL OF ]1
|
||||
_MLIT ]2;WPAR2 ; {16C12B} CHECK LITERAL OF ]2
|
||||
LDA ]3 ; {4C3B} FILL VALUE {NZ}
|
||||
STA BPAR1 ; {3C2B} STORED IN BPAR1
|
||||
JSR MEMFILL ; {6C3B59+} GOSUB ROUTINE
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MOVB *
|
||||
* *
|
||||
* MOVE A BLOCK OF MEMORY FROM *
|
||||
* A SOURCE TO DESTINATION. *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = SOURCE ADDRESS *
|
||||
* ]2 = DESTINATION ADDRESS *
|
||||
* ]3 = NUMBER OF BYTES *
|
||||
* *
|
||||
* CYCLES: 267+ *
|
||||
* BYTES: 48 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MOVB MAC ; MEMORY MOVE
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
_MLIT ]1;WPAR1 ; {16C12B} CHECK 1ST ADDR AS LITERAL
|
||||
_MLIT ]2;WPAR2 ; {16C12B} CHECK 2ND ADDR AS LITERAL
|
||||
_MLIT ]3;WPAR3 ; {16C12B} CHECK 3RD AS LITERAL
|
||||
JSR MEMMOVE ; {213C3B} GOSUB ROUTINE {NZCV}
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MSWAP *
|
||||
* *
|
||||
* SWAPS THE VALUES STORED IN *
|
||||
* ONE LOCATION WITH ANOTHER *
|
||||
* *
|
||||
* PARAMETERS *
|
||||
* *
|
||||
* ]1 = FIRST ADDRESS *
|
||||
* ]2 = SECOND ADDRESS *
|
||||
* ]3 = LENGTH IN BYTES (BYTE) *
|
||||
* *
|
||||
* CYCLES: 98+ *
|
||||
* BYTES: 36 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MSWAP MAC ; MEMORY SWAP
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
_MLIT ]2;WPAR2 ; {16C12B} TEST AS LITERAL
|
||||
_MLIT ]1;WPAR1 ; {16C12B} TEST AS LITERAL
|
||||
LDA ]3 ; {4C3B} {NZ}
|
||||
STA BPAR1 ; {3C2B} STORE LENGTH IN BYTES
|
||||
JSR MEMSWAP ; {6C3B46+} GOSUB ROUTINE {NZC}
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
|
||||
<<< ; END MAC
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PEEK *
|
||||
* *
|
||||
* LOAD .A WITH VALUE AT ADDR *
|
||||
* *
|
||||
* CYCLES: 28 *
|
||||
* BYTES: 18 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PEEK MAC ; PUT VALUE INTO .A
|
||||
STY SCRATCH ; {3C2B}
|
||||
_AXLIT ]1 ; {8C6B}
|
||||
STA ADDR1 ; {3C2B}
|
||||
STX ADDR1+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} {ZC}
|
||||
LDA (ADDR1),Y ; {6C2B} {ZC}
|
||||
LDY SCRATCH ; {3C2B} {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* POKE *
|
||||
* *
|
||||
* STORE VALUE AT ADDRESS *
|
||||
* *
|
||||
* CYCLES: 32 *
|
||||
* BYTES: 20 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
POKE MAC ; STORE .A INTO MEM LOC
|
||||
STY SCRATCH ; {3C2B}
|
||||
_AXLIT ]2 ; {8C6B}
|
||||
STA ADDR1 ; {3C2B}
|
||||
STX ADDR1+1 ; {3C2B}
|
||||
LDA ]1 ; {3C2B} {ZC}
|
||||
LDY #0 ; {3C2B} {ZC}
|
||||
STA (ADDR1),Y ; {6C2B} {ZC}
|
||||
LDY SCRATCH ; {3C2B} {NZ}
|
||||
<<< ; END MACRO
|
||||
*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* NEGA *
|
||||
* *
|
||||
* GET THE NEGATIVE EQUIVALENT *
|
||||
* OF A BYTE IN .A REGISTER. *
|
||||
* *
|
||||
* CYCLES: 7 *
|
||||
* SIZE: 5 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
NEGA MAC ; STORE .A INTO MEM LOC
|
||||
EOR #$FF
|
||||
CLC
|
||||
ADC #1
|
||||
<<< ; END MACRO
|
||||
NEGA MAC
|
||||
EOR #$FF ; {2C2B}
|
||||
CLC ; {2C1B}
|
||||
ADC #1 ; {3C2B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -465,7 +465,7 @@
|
||||
PRN "TLINE MACRO",8D
|
||||
PRN "===========",8D8D
|
||||
TLINE #5;#5;#15;#10;#"@"
|
||||
TLINE #5;#10;#15;#5;#"#"
|
||||
TLINE #5;#10;#15;#20;#"#"
|
||||
_WAIT
|
||||
*
|
||||
*``````````````````````````````*
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -47,18 +47,18 @@
|
||||
* ]1 = STRING OR ADDRESS *
|
||||
* *
|
||||
* CYCLES: 159+ OR 127+ *
|
||||
* BYTES: 34+ OR 24+ *
|
||||
* BYTES: 2+ OR 15 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PRN MAC
|
||||
IF ",]1 ; {0C0B} IF PARAM IS A STRING
|
||||
JSR XPRINT ; {159C31B} GOSUB TO STACK PRINT ROUTINE
|
||||
ASC ]1 ; {0C1B} PUT STRING HERE FOR STACK
|
||||
HEX 00 ; {0C1B} PRINT TO ACCESS; TERMINATE STRING
|
||||
ELSE ; {0C0B} OTHERWISE, PARAM IS AN ADDRESS
|
||||
_MLIT ]1;WPAR1 ; {16C12B} SO PARSE ADDRESS FOR DIRECT OR
|
||||
JSR DPRINT ; {111C12B} INDIRECT PASSING, THEN GOSUB
|
||||
FIN ; REGULAR PRINT ROUTINE
|
||||
IF ",]1 ; ; {0C0B} IF PARAM IS A STRING
|
||||
JSR XPRINT ; {159C0B} GOSUB TO STACK PRINT ROUTINE
|
||||
ASC ]1 ; {0C1B} PUT STRING HERE FOR STACK
|
||||
HEX 00 ; {0C1B} PRINT TO ACCESS; TERMINATE
|
||||
ELSE ; {0C0B} OTHERWISE, PARAM IS AN ADDRESS
|
||||
_MLIT ]1;ZPW1 ; {16C12B} SO PARSE ADDRESS FOR DIRECT OR
|
||||
JSR DPRINT ; {111C3B} INDIRECT PASSING, THEN GOSUB
|
||||
FIN ; REGULAR PRINT ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -73,12 +73,12 @@ PRN MAC
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* CYCLES: 147+ *
|
||||
* SIZE: 35 BYTES *
|
||||
* SIZE: 9 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SPRN MAC
|
||||
_AXLIT ]1 ; {8C6B} PARSE INTO REGISTERS
|
||||
JSR PRNSTR ; {139C29B} EXECUTE PRNSTR ROUTINE
|
||||
_AXLIT ]1 ; {8C6B} PARSE INTO REGISTERS
|
||||
JSR PRNSTR ; {139C3B} EXECUTE PRNSTR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -91,16 +91,16 @@ SPRN MAC
|
||||
* ]1 = X POSITION *
|
||||
* ]2 = Y POSITION *
|
||||
* *
|
||||
* CYCLES: 10+ *
|
||||
* SIZE: 8 BYTES *
|
||||
* CYCLES: 20+ *
|
||||
* SIZE: 13 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCPOS MAC
|
||||
LDX ]1 ; {2C2B} HORIZONTAL POSITION
|
||||
LDX ]1 ; {4C3B} HORIZONTAL POSITION
|
||||
STX CURSH ; {3C2B}
|
||||
LDX ]2 ; {2C2B} VERTICAL POSITION
|
||||
LDX ]2 ; {4C3B} VERTICAL POSITION
|
||||
STX CURSV ; {3C2B}
|
||||
JSR VTAB ; {????} EXECUTE VTAB ROUTINE
|
||||
JSR VTAB ; {6C3B} EXECUTE VTAB ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -112,14 +112,14 @@ SCPOS MAC
|
||||
* *
|
||||
* ]1 = X POSITION *
|
||||
* *
|
||||
* CYCLES: 4+ *
|
||||
* SIZE: 5 *
|
||||
* CYCLES: 13+ *
|
||||
* SIZE: 8 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SETCX MAC
|
||||
LDX ]1 ; {2C2B} GET HORIZONTAL POS
|
||||
STX CURSH ; {2C3B} AND STORE IN CURSH
|
||||
JSR VTAB ; {????} CALL VTAB ROUTINE
|
||||
LDX ]1 ; {4C3B} GET HORIZONTAL POS
|
||||
STX CURSH ; {3C2B} AND STORE IN CURSH
|
||||
JSR VTAB ; {6C3B} CALL VTAB ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -131,14 +131,14 @@ SETCX MAC
|
||||
* *
|
||||
* ]1 = Y POSITION *
|
||||
* *
|
||||
* CYCLES: 4+ *
|
||||
* SIZE: 5+ *
|
||||
* CYCLES: 13+ *
|
||||
* SIZE: 8 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SETCY MAC
|
||||
LDY ]1 ; {2C2B} VERTICAL POSITION
|
||||
STY CURSV ; {2C3B} INTO CURSV LOCATION
|
||||
JSR VTAB ; {????} CALL VTAB ROUTINE
|
||||
LDY ]1 ; {4C3B} VERTICAL POSITION
|
||||
STY CURSV ; {3C2B} INTO CURSV LOCATION
|
||||
JSR VTAB ; {6C3B} CALL VTAB ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -151,16 +151,16 @@ SETCY MAC
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* CYCLES: 10+ *
|
||||
* SIZE: 7+ BYTES *
|
||||
* CYCLES: 18+ *
|
||||
* SIZE: 11 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURF MAC
|
||||
LDA ]1 ; {2C2B} SPACES TO ADD TO
|
||||
LDA ]1 ; {4C3B} SPACES TO ADD TO
|
||||
CLC ; {2C1B} CURRENT POSITION
|
||||
ADC CURSH ; {3C2B} ADD CURRENT POSITION
|
||||
STA CURSH ; {3C2B} STORE NEW IN CURSH
|
||||
JSR VTAB ; {????} CALL VTAB ROUTINE
|
||||
JSR VTAB ; {6C3B} CALL VTAB ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -173,16 +173,16 @@ CURF MAC
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* CYCLES: 10+ *
|
||||
* SIZE: 7 BYTES *
|
||||
* CYCLES: 17+ *
|
||||
* SIZE: 10 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURB MAC
|
||||
LDA CURSH ; {2C2B} GET CURRENT CURSOR XPOS
|
||||
LDA CURSH ; {3C2B} GET CURRENT CURSOR XPOS
|
||||
SEC ; {2C1B} SET CARRY
|
||||
SBC ]1 ; {3C2B} SUBTRACT # OF SPACES PASSED
|
||||
STA CURSH ; {3C2B} AND STORE BACK IN CURSH
|
||||
JSR VTAB ; {????} EXEC VTAB SUBROUTINE
|
||||
JSR VTAB ; {6C3B} EXEC VTAB SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -195,16 +195,16 @@ CURB MAC
|
||||
* *
|
||||
* ]1 = # OF SPACES TO GO UP *
|
||||
* *
|
||||
* CYCLES: 10+ *
|
||||
* SIZE: 7 BYTES *
|
||||
* CYCLES: 17+ *
|
||||
* SIZE: 10 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURU MAC
|
||||
LDA CURSV ; {2C2B} GET CURRENT YPOS
|
||||
LDA CURSV ; {3C2B} GET CURRENT YPOS
|
||||
SEC ; {2C1B} SET CARRY
|
||||
SBC ]1 ; {3C2B} SUBTRACT GIVEN PARAM
|
||||
STA CURSV ; {3C2B} AND STORE BACK IN CURSV
|
||||
JSR VTAB ; {????} VTAB MONITOR ROUTINE
|
||||
JSR VTAB ; {6C3B} VTAB MONITOR ROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -217,16 +217,16 @@ CURU MAC
|
||||
* *
|
||||
* ]1 = # OF SPACES TO MOVE *
|
||||
* *
|
||||
* CYCLES: 9+ *
|
||||
* SIZE: 8 BYTES *
|
||||
* CYCLES: 17+ *
|
||||
* SIZE: 10 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CURD MAC
|
||||
LDA CURSV ; {2C2B} GET CURRENT YPOS
|
||||
LDA CURSV ; {3C2B} GET CURRENT YPOS
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC ]1 ; {3C2B} ADD GIVEN PARAMETER
|
||||
STA CURSV ; {2C3B} STORE BACK IN CURSV
|
||||
JSR VTAB ; {????} EXEC VTAB SUBROUTINE
|
||||
STA CURSV ; {3C2B} STORE BACK IN CURSV
|
||||
JSR VTAB ; {6C3B} EXEC VTAB SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -246,15 +246,15 @@ CURD MAC
|
||||
* ]3 = LINE PAUSE INTERVAL, *
|
||||
* EVERY NEWLINE IF = 0 *
|
||||
* *
|
||||
* CYCLES: 482+ *
|
||||
* SIZE: 472 BYTES *
|
||||
* CYCLES: 496+ *
|
||||
* SIZE: 22 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TMORE MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE ADDR TO ZERO PAGE
|
||||
LDA ]2 ; {2C2B} LOAD MAX LENGTH
|
||||
STA WPAR2 ; {3C2B} STORE IN ZERO PAGE
|
||||
LDA ]3 ; {2C2B} LOAD LINE INTERVAL
|
||||
STA BPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
JSR TXTMORE ; {????} CALL TXTMORE SUBROUTINE
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE ADDR TO ZERO PAGE
|
||||
LDA ]2 ; {4C3B} LOAD MAX LENGTH
|
||||
STA ZPW2 ; {3C2B} STORE IN ZERO PAGE
|
||||
LDA ]3 ; {4C3B} LOAD LINE INTERVAL
|
||||
STA ZPB1 ; {3C2B} STORE IN ZERO PAGE
|
||||
JSR TXTMORE ; {466C0B} CALL TXTMORE SUBROUTINE
|
||||
<<<
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -35,13 +35,13 @@
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 8+ *
|
||||
* CYCLES: 9+ *
|
||||
* SIZE: 5 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIE80 MAC
|
||||
LDA #21 ; {2C2B} CTRL-U CHARACTER
|
||||
JSR COUT ; {6+C3B} SEND TO SCREEN
|
||||
LDA #21 ; {3C2B} CTRL-U CHARACTER
|
||||
JSR COUT ; {6C3B} SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -53,13 +53,13 @@ DIE80 MAC
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 8+ *
|
||||
* CYCLES: 9+ *
|
||||
* SIZE: 5 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
COL80 MAC
|
||||
LDA #18 ; {2C2B} CTRL-R CHARACTER
|
||||
JSR COUT ; {6+C3B} SEND TO SCREEN
|
||||
LDA #18 ; {3C2B} CTRL-R CHARACTER
|
||||
JSR COUT ; {6C3B} SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -71,13 +71,13 @@ COL80 MAC
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 8+ *
|
||||
* CYCLES: 9+ *
|
||||
* SIZE: 5 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
COL40 MAC
|
||||
LDA #17 ; {2C2B} CTRL-Q CHARACTER
|
||||
JSR COUT ; {6+C3B} SEND TO SCREEN
|
||||
LDA #17 ; {3C2B} CTRL-Q CHARACTER
|
||||
JSR COUT ; {6C3B} SEND TO SCREEN
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -95,14 +95,14 @@ COL40 MAC
|
||||
* ]1 = STRING LENGTH *
|
||||
* ]2 = LINE LENGTH *
|
||||
* *
|
||||
* CYCLES: 47+ *
|
||||
* SIZE: 27 BYTES *
|
||||
* CYCLES: 51+ *
|
||||
* SIZE: 13 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TCTR MAC
|
||||
LDA ]1 ; {2C2B} LOAD STRING LENGTH
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} LOAD LINE LENGTH
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TXTCENT ; {37C19B} CALL TXTCENT SUBROUTINE
|
||||
LDA ]1 ; {4C3B} LOAD STRING LENGTH
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} LOAD LINE LENGTH
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TXTCENT ; {37C3B} CALL TXTCENT SUBROUTINE
|
||||
<<<
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -74,20 +74,20 @@ RCPOS MAC
|
||||
* ]3 = X POSITION OF LINE *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 104+ *
|
||||
* SIZE: 45 BYTES *
|
||||
* CYCLES: 111+ *
|
||||
* SIZE: 23 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TVLIN MAC
|
||||
LDA ]1 ; {2C2B} Y-COORDINATE ORIGIN
|
||||
STA WPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} Y-COORDINATE DESTINATION
|
||||
STA WPAR2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} X-COORDINATE OF LINE
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {3C2B} CHARACTER TO PLOT
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TVLINE ; {83C29B} CALL TVLINE SUBROUTINE
|
||||
LDA ]1 ; {4C3B} Y-COORDINATE ORIGIN
|
||||
STA ZPW2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} Y-COORDINATE DESTINATION
|
||||
STA ZPW2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} X-COORDINATE OF LINE
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} CHARACTER TO PLOT
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TVLINE ; {83C3B} CALL TVLINE SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -103,20 +103,20 @@ TVLIN MAC
|
||||
* ]3 = Y POSITION OF LINE *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 107+ *
|
||||
* SIZE: 38 BYTES *
|
||||
* CYCLES: 115+ *
|
||||
* SIZE: 23 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
THLIN MAC
|
||||
LDA ]1 ; {2C2B} X-COORDINATE ORIGIN
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} X-COORDINATE DESTINATION
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} Y-COORDINATE OF LINE
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {2C2B} CHARACTER TO FILL
|
||||
STA BPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR THLINE ; {87C22B} CALL THLINE SUBROUTINE
|
||||
LDA ]1 ; {4C3B} X-COORDINATE ORIGIN
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} X-COORDINATE DESTINATION
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} Y-COORDINATE OF LINE
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} CHARACTER TO FILL
|
||||
STA ZPB2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR THLINE ; {87C3B} CALL THLINE SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -133,22 +133,22 @@ THLIN MAC
|
||||
* ]4 = VERT END POSITION *
|
||||
* ]5 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 157+ *
|
||||
* SIZE: 77 BYTES *
|
||||
* CYCLES: 168+ *
|
||||
* SIZE: 28 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TRECF MAC
|
||||
LDA ]1 ; {2C2B} X-COORDINATE ORIGIN
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} Y-COORDINATE ORIGIN
|
||||
STA WPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} X-COORDINATE DESTINATION
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {2C2B} Y-COORDINATE DESTINATION
|
||||
STA WPAR2+1 ; {2C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {2C2B} CHARACTER TO PLOT
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TRECTF ; {133C57B} CALL TRECTF SUBROUTINE
|
||||
LDA ]1 ; {4C3B} X-COORDINATE ORIGIN
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} Y-COORDINATE ORIGIN
|
||||
STA ZPW2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} X-COORDINATE DESTINATION
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} Y-COORDINATE DESTINATION
|
||||
STA ZPW2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {4C3B} CHARACTER TO PLOT
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TRECTF ; {133C3B} CALL TRECTF SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -164,15 +164,15 @@ TRECF MAC
|
||||
* ]2 = Y POSITION *
|
||||
* ]3 = CHARACTER TO PLOT *
|
||||
* *
|
||||
* CYCLES: 91+ *
|
||||
* SIZE: 31 BYTES *
|
||||
* CYCLES: 97+ *
|
||||
* SIZE: 12 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CPUT MAC
|
||||
LDX ]1 ; {2C2B} CARRY X-COORD IN .X
|
||||
LDY ]2 ; {2C2B} CARRY Y-COORD IN .Y
|
||||
LDA ]3 ; {2C2B} CARRY FILL CHAR IN .A
|
||||
JSR TXTPUT ; {85C25B} CALL TXTPUT SUBROUTINE
|
||||
LDX ]1 ; {4C3B} CARRY X-COORD IN .X
|
||||
LDY ]2 ; {4C3B} CARRY Y-COORD IN .Y
|
||||
LDA ]3 ; {4C3B} CARRY FILL CHAR IN .A
|
||||
JSR TXTPUT ; {85C3B} CALL TXTPUT SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -190,22 +190,22 @@ CPUT MAC
|
||||
* ]4 = Y-DESTINATION *
|
||||
* ]5 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 411+ *
|
||||
* SIZE: 187 BYTES *
|
||||
* CYCLES: 321+ *
|
||||
* SIZE: 28 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TLINE MAC
|
||||
LDA ]1 ; {2C2B} LOAD X-ORIGIN
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} LOAD Y-ORIGIN
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} LOAD X-DESTINATION
|
||||
STA WPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {2C2B} LOAD Y-DESTINATION
|
||||
STA WPAR2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {2C2B} LOAD FILL CHARACTER
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TBLINE ; {286C167B} CALL TBLINE SUBROUTINE
|
||||
LDA ]1 ; {4C3B} LOAD X-ORIGIN
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} LOAD Y-ORIGIN
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} LOAD X-DESTINATION
|
||||
STA ZPW2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} LOAD Y-DESTINATION
|
||||
STA ZPW2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {4C3B} LOAD FILL CHARACTER
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TBLINE ; {286C3B} CALL TBLINE SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -222,20 +222,20 @@ TLINE MAC
|
||||
* ]3 = RADIUS *
|
||||
* ]4 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 627+ *
|
||||
* SIZE: 290 BYTES *
|
||||
* CYCLES: 635+ *
|
||||
* SIZE: 23 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TCIRC MAC
|
||||
LDA ]1 ; {2C2B} LOAD CENTER X-COORD
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} LOAD CENTER Y-COORD
|
||||
STA WPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} LOAD RADIUS
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {2C2B} LOAD FILL CHARACTER
|
||||
STA BPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TCIRCLE ; {607C374B} CALL TCIRCLE SUBROUTINE
|
||||
LDA ]1 ; {4C3B} LOAD CENTER X-COORD
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} LOAD CENTER Y-COORD
|
||||
STA ZPW2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} LOAD RADIUS
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} LOAD FILL CHARACTER
|
||||
STA ZPB2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TCIRCLE ; {607C3B} CALL TCIRCLE SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -255,22 +255,22 @@ TCIRC MAC
|
||||
* ]4 = Y DESTINATION *
|
||||
* ]5 = BORDER CHARACTER *
|
||||
* *
|
||||
* CYCLES: 362+ *
|
||||
* SIZE: 115 BYTES *
|
||||
* CYCLES: 373+ *
|
||||
* SIZE: 28 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TREC MAC
|
||||
LDA ]1 ; {2C2B} LOAD X-ORIGIN
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} LOAD Y-ORIGIN
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {2C2B} LOAD X-DESTINATION
|
||||
STA WPAR2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {2C2B} LOAD Y-DESTINATION
|
||||
STA WPAR2+1 ; {2C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {2C2B} LOAD FILL CHARACTER
|
||||
STA BPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TRECT ; {338C95B} CALL TRECT SUBROUTINE
|
||||
LDA ]1 ; {4C3B} LOAD X-ORIGIN
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} LOAD Y-ORIGIN
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]3 ; {4C3B} LOAD X-DESTINATION
|
||||
STA ZPW2 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]4 ; {4C3B} LOAD Y-DESTINATION
|
||||
STA ZPW2+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]5 ; {4C3B} LOAD FILL CHARACTER
|
||||
STA ZPB1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
JSR TRECT ; {338C3B} CALL TRECT SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -287,17 +287,17 @@ TREC MAC
|
||||
* ]3 = ADDRESS OF STRING *
|
||||
* TO PRINT ON SCREEN *
|
||||
* *
|
||||
* CYCLES: 124+ *
|
||||
* SIZE: 50 BYTES *
|
||||
* CYCLES: 128+ *
|
||||
* SIZE: 25 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SPUT MAC
|
||||
LDA ]1 ; {2C2B} GET X COORDINATE
|
||||
STA WPAR1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {2C2B} GET Y COORDINATE
|
||||
STA WPAR1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
_MLIT ]3;WPAR2 ; {16C12B} PARSE STRING ADDRESS
|
||||
JSR STRPUT ; {98C30B} CALL STRPUT SUBROUTINE
|
||||
LDA ]1 ; {4C3B} GET X COORDINATE
|
||||
STA ZPW1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
LDA ]2 ; {4C3B} GET Y COORDINATE
|
||||
STA ZPW1+1 ; {3C2B} PASS VIA ZERO PAGE
|
||||
_MLIT ]3;ZPW2 ; {16C12B} PARSE STRING ADDRESS
|
||||
JSR STRPUT ; {98C3B} CALL STRPUT SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -311,11 +311,11 @@ SPUT MAC
|
||||
* *
|
||||
* ]1 = FILL CHARACTER *
|
||||
* *
|
||||
* CYCLES: 50+ *
|
||||
* SIZE: 42 BYTES *
|
||||
* CYCLES: 52+ *
|
||||
* SIZE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
TCLR MAC
|
||||
LDA ]1 ; {2C2B} LOAD FILL CHARACTER
|
||||
JSR TXTCLR ; {48C40B} CALL TXTCLR SUBROUTINE
|
||||
LDA ]1 ; {4C3B} LOAD FILL CHARACTER
|
||||
JSR TXTCLR ; {48C3B} CALL TXTCLR SUBROUTINE
|
||||
<<<
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -37,11 +37,11 @@
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 64+ *
|
||||
* SIZE: 41 BYTES *
|
||||
* SIZE: 3 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
INP MAC
|
||||
JSR SINPUT ; {64C41B}
|
||||
JSR SINPUT ; {64C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -54,14 +54,14 @@ INP MAC
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 11+ *
|
||||
* SIZE: 7 BYTES *
|
||||
* CYCLES: 13+ *
|
||||
* SIZE: 8 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GKEY MAC
|
||||
JSR GETKEY ; {6+C3B} MONITOR GET SUBROUTINE
|
||||
LDY #0 ; {2C2B}
|
||||
STY STROBE ; {3C2B} RESET KBD STROBE
|
||||
LDY #0 ; {3C2B}
|
||||
STY STROBE ; {4C3B} RESET KBD STROBE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -75,12 +75,12 @@ GKEY MAC
|
||||
* *
|
||||
* ]1 = PADDLE # TO READ *
|
||||
* *
|
||||
* CYCLES: 8+ *
|
||||
* SIZE: 5 BYTES *
|
||||
* CYCLES: 10+ *
|
||||
* SIZE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PDL MAC ; GET PADDLE VALUE
|
||||
LDX ]1 ; {2C2B} READ PADDLE # ]1 (USUALLY 0)
|
||||
PDL MAC
|
||||
LDX ]1 ; {4C3B} READ PADDLE # ]1 (USUALLY 0)
|
||||
JSR PREAD ; {6+C3B} PADDLE READING STORED IN Y
|
||||
<<<
|
||||
*
|
||||
@@ -97,15 +97,15 @@ PDL MAC ; GET PADDLE VALUE
|
||||
* PB0: $C061 PB1: $C062 *
|
||||
* PB2: $C063 PB4: $C060 *
|
||||
* *
|
||||
* CYCLES: 8+ *
|
||||
* SIZE: 8 BYTES *
|
||||
* CYCLES: 13+ *
|
||||
* SIZE: 9 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PBX MAC
|
||||
LDX #1 ; {2C2B}
|
||||
LDA ]1 ; {2C2B} IF BTN = PUSHED
|
||||
BMI EXIT ; {2C2B} IF HIBYTE SET, BUTTON PUSHED
|
||||
LDX #0 ; {2C2B} OTHERWISE, BUTTON NOT PUSHED
|
||||
LDX #1 ; {3C2B}
|
||||
LDA ]1 ; {4C3B} IF BTN = PUSHED
|
||||
BMI EXIT ; {3C2B} IF HIBYTE SET, BUTTON PUSHED
|
||||
LDX #0 ; {3C2B} OTHERWISE, BUTTON NOT PUSHED
|
||||
EXIT
|
||||
<<<
|
||||
*
|
||||
@@ -120,13 +120,13 @@ EXIT
|
||||
* *
|
||||
* NONE *
|
||||
* *
|
||||
* CYCLES: 9 *
|
||||
* SIZE: 8 BYTES *
|
||||
* CYCLES: 13 *
|
||||
* SIZE: 9 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
WAIT MAC
|
||||
]WTLP LDA KYBD ; {2C2B} READ KEYBOARD BUFFER
|
||||
BPL ]WTLP ; {2C2B} IF 0, KEEP LOOPING
|
||||
]WTLP LDA KYBD ; {4C3B} READ KEYBOARD BUFFER
|
||||
BPL ]WTLP ; {3C2B} IF 0, KEEP LOOPING
|
||||
AND #$7F ; {2C2B} OTHERWISE, SET HI BIT
|
||||
STA STROBE ; {3C2B} CLEAR STROBE
|
||||
STA STROBE ; {4C2B} CLEAR STROBE
|
||||
<<<
|
||||
|
||||
@@ -14,19 +14,19 @@
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 111+ *
|
||||
* SIZE: 12 BYTES *
|
||||
* CYCLES: 112+ *
|
||||
* SIZE: 13 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR1 EQU WPAR1 ; INDIRECT ADDRESS IS PASSED HERE
|
||||
]ADDR1 EQU ZPW1 ; INDIRECT ADDRESS IS PASSED HERE
|
||||
*
|
||||
DPRINT
|
||||
*
|
||||
LDY #$00 ; {2C2B} RESET COUNTER {NZ}
|
||||
LDY #$00 ; {3C2B} RESET COUNTER {NZ}
|
||||
:LOOP
|
||||
LDA (]ADDR1),Y ; {6C2B} GET NEXT CHARACTER IN STRING {NZ}
|
||||
BEQ :EXIT ; {3C2B} IF CHAR = $00 THEN EXIT
|
||||
JSR COUT1 ; {89C2B} OTHERWISE, PRINT CHAR {NZCV}
|
||||
JSR COUT1 ; {89C3B} OTHERWISE, PRINT CHAR {NZCV}
|
||||
INY ; {2C1B} INCREAS COUNTER {NZ}
|
||||
BNE :LOOP ; {3C2B} IF COUNTER < 256, LOOP
|
||||
:EXIT
|
||||
|
||||
@@ -13,24 +13,24 @@
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 133+ *
|
||||
* SIZE: 26 BYTES *
|
||||
* CYCLES: 129+ *
|
||||
* SIZE: 23 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STRLEN EQU VARTAB ; STRING LENGTH
|
||||
]STRLEN EQU ZPB1 ; STRING LENGTH
|
||||
*
|
||||
PRNSTR
|
||||
*
|
||||
STA ADDR1 ; {3C2B} STORE ADDRESS IN ZERO PAGE
|
||||
STX ADDR1+1 ; {3C2B} STORE ADDRESS IN ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ADDRESS IN ZERO PAGE
|
||||
STX ZPW1+1 ; {3C2B} STORE ADDRESS IN ZERO PAGE
|
||||
LDY #0 ; {2C2B} RESET INDEX {NZ}
|
||||
LDA (ADDR1),Y ; {6C2B} GET STRING LENGTH {NZ}
|
||||
STA ]STRLEN ; {4C3B} AND STORE IT IN MEM
|
||||
LDA (ZPW1),Y ; {6C2B} GET STRING LENGTH {NZ}
|
||||
STA ]STRLEN ; {3C2B} AND STORE IT IN MEM
|
||||
:LP
|
||||
INY ; {3C1B} INCREASE INDEX {NZ}
|
||||
LDA (ADDR1),Y ; {6C2B} GET CHARACTER {NZ}
|
||||
INY ; {2C1B} INCREASE INDEX {NZ}
|
||||
LDA (ZPW1),Y ; {6C2B} GET CHARACTER {NZ}
|
||||
JSR COUT1 ; {89C3B} PRINT CHARACTER TO SCREEN {NZCV}
|
||||
CPY ]STRLEN ; {4C3B} IF Y < LENGTH {NZ}
|
||||
CPY ]STRLEN ; {3C2B} IF Y < LENGTH {NZ}
|
||||
BNE :LP ; {3C2B} THEN LOOP; ELSE
|
||||
LDA ]STRLEN ; {4C3B} LOAD STRING LENGTH {NZ}
|
||||
LDA ]STRLEN ; {3C2B} LOAD STRING LENGTH {NZ}
|
||||
RTS ; {6C1B} RETURN TO CALLING ROUTINE
|
||||
|
||||
@@ -15,35 +15,29 @@
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ *
|
||||
* *
|
||||
* CYCLES: 58+ *
|
||||
* SIZE: 38 BYTES *
|
||||
* CYCLES: 52+ *
|
||||
* SIZE: 32 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STRLEN EQU VARTAB ; STRING LENGTH (1 BYTE)
|
||||
]STRLEN EQU ZPB1 ; STRING LENGTH (1 BYTE)
|
||||
*
|
||||
SINPUT
|
||||
LDX #$00 ; {2C2B} RESET LENGTH {NZ}
|
||||
JSR GETLN ; {6C3B} GOSUB GETLN ROUTINE. AS JOHN ROMERO
|
||||
; HILARIOUSLY POINTED OUT ON FACEBOOK,
|
||||
; COMING OUT OF NOWHERE,
|
||||
; WHICH I AM BOTH ASHAMED AND PROUD OF,
|
||||
; IT'S PRETTY POINTLESS TO CYCLE-COUNT
|
||||
; AN INPUT FUNCTION, SO I WON'T BE DOING
|
||||
; SO HERE, THOUGH I STARTED TO TRY
|
||||
JSR GETLN ; {6C3B} GOSUB GETLN ROUTINE.
|
||||
*
|
||||
STX ]STRLEN ; {4C3B} STRING LENGTH RETURNED IN .X; STORE
|
||||
CPX #0 ; {2C2B} IF LENGTH = 0, EXIT {NZC}
|
||||
STX ]STRLEN ; {3C2B} STRING LENGTH IN .X; STORE
|
||||
CPX #0 ; {3C2B} IF LENGTH = 0, EXIT
|
||||
BNE :INP_CLR ; {3C2B} OTHER, COPY STRING
|
||||
STX RETLEN ; {4C3B} OTHERWISE, STORE IN RETURN LENGTH
|
||||
JMP :EXIT ; {6C5B} JUMP TO EXIT
|
||||
STX RETLEN ; {3C2B} ELSE, STORE RETURN LENGTH
|
||||
JMP :EXIT ; {3C3B} JUMP TO EXIT
|
||||
:INP_CLR
|
||||
STX RETLEN ; {4C3B} STORE STRING LENGTH
|
||||
LDY #255 ; {2C2B} RESET COUNTER TO -1 {NZ}
|
||||
STX RETLEN ; {3C2B} STORE STRING LENGTH
|
||||
LDY #255 ; {2C2B} RESET COUNTER TO -1
|
||||
:LOOP
|
||||
INY ; {2C1B} INCREASE COUNTER BY 1 {NZ}
|
||||
LDA KEYBUFF,Y ; {5C3B} CHAR FROM KEYBOARD BUFFER {NZ}
|
||||
INY ; {2C1B} INCREASE COUNTER BY 1
|
||||
LDA KEYBUFF,Y ; {5C3B} CHAR FROM KEYBOARD BUFFER
|
||||
STA RETURN,Y ; {5C3B} STORE IN RETURN AT INDEX
|
||||
CPY ]STRLEN ; {4C3B} IF COUNTER < STRING LENGTH {NZC}
|
||||
CPY ]STRLEN ; {3C2B} IF COUNTER < STRING LENGTH
|
||||
BNE :LOOP ; {3C2B} LOOP; ELSE, EXIT
|
||||
:EXIT
|
||||
RTS ; {6C1B} RETURN TO CALLING ROUTINE
|
||||
|
||||
@@ -10,24 +10,24 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X COORDINATE *
|
||||
* WPAR1+1 = Y COORDINATE *
|
||||
* WPAR2 = STRING ADDRESS *
|
||||
* ZPW1 = X COORDINATE *
|
||||
* ZPW1+1 = Y COORDINATE *
|
||||
* ZPW2 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 98+ *
|
||||
* SIZE: 30 BYTES *
|
||||
* CYCLES: 111+ *
|
||||
* SIZE: 38 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; X-COORDINATE TO PLOT
|
||||
]Y1 EQU WPAR1+1 ; Y-COORDINATE TO PLOT
|
||||
]ADDR EQU WPAR2 ; ADDRESS OF STRING TO PRINT
|
||||
]X1 EQU ZPW1 ; X-COORDINATE TO PLOT
|
||||
]Y1 EQU ZPW1+1 ; Y-COORDINATE TO PLOT
|
||||
]ADDR EQU ZPW2 ; ADDRESS OF STRING TO PRINT
|
||||
*
|
||||
]LEN EQU VARTAB ; LENGTH OF STRING
|
||||
]CNT EQU VARTAB+2 ; INDEX COUNTER
|
||||
]CHAR EQU VARTAB+4 ; CHARACTER TO PRINT
|
||||
]LEN EQU ZPB1 ; LENGTH OF STRING
|
||||
]CNT EQU ZPB2 ; INDEX COUNTER
|
||||
]CHAR EQU ZPB3 ; CHARACTER TO PRINT
|
||||
*
|
||||
STRPUT
|
||||
*
|
||||
@@ -38,15 +38,15 @@ STRPUT
|
||||
:LP
|
||||
INC ]CNT ; {6C3B} INCREMENT ]CNT BY 1
|
||||
INC ]X1 ; {6C3B} INCREMENT X-COORD BY 1
|
||||
LDY ]CNT ; {2C2B} PASS ]CNT TO .Y
|
||||
LDY ]CNT ; {3C2B} PASS ]CNT TO .Y
|
||||
LDA (]ADDR),Y ; {6C2B} LOAD CHARACTER FROM STRING
|
||||
STA ]CHAR ; {3C2B} WITH Y OFFSET; HOLD IN ]CHAR
|
||||
LDA ]Y1 ; {2C2B} LOAD Y COORDINATE
|
||||
LDY ]X1 ; {2C2B} RELOAD X COORDINATE
|
||||
LDA ]Y1 ; {3C2B} LOAD Y COORDINATE
|
||||
LDY ]X1 ; {3C2B} RELOAD X COORDINATE
|
||||
JSR GBCALC ; {43C3B} CALCULATE SCREEN MEMORY ADDRESS
|
||||
LDA ]CHAR ; {2C2B} LOAD FILL CHARACTER INTO .A
|
||||
LDA ]CHAR ; {3C2B} LOAD FILL CHARACTER INTO .A
|
||||
STA (GBPSH),Y ; {6C2B} STORE CHARACTER IN SCREEN MEMORY
|
||||
LDY ]CNT ; {2C2B} RELOAD COUNTER
|
||||
CPY ]LEN ; {2C2B} IF COUNTER != STRING LENGTH
|
||||
BNE :LP ; {2C2B} THEN KEEP LOOPING
|
||||
LDY ]CNT ; {3C2B} RELOAD COUNTER
|
||||
CPY ]LEN ; {3C2B} IF COUNTER != STRING LENGTH
|
||||
BNE :LP ; {3C2B} THEN KEEP LOOPING
|
||||
RTS ; {6C1B} OTHERWISE, RETURN FROM CALL
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]X0 = X ORIGIN *
|
||||
* ]X1 = X DESTINATION *
|
||||
* ]Y0 = Y ORIGIN *
|
||||
* ]Y1 = Y DESTINATION *
|
||||
* ]F = LINE FILL CHARACTER *
|
||||
* ZPW1 = X ORIGIN *
|
||||
* ZPW2 = X DESTINATION *
|
||||
* ZPW1+1 = Y ORIGIN *
|
||||
* ZPW2+1 = Y DESTINATION *
|
||||
* ZPB1 = LINE FILL CHAR *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
@@ -23,18 +23,18 @@
|
||||
* SIZE: 178 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X0 EQU WPAR1 ; XPOS ORIGIN PASSED VIA ZP
|
||||
]X1 EQU WPAR2 ; XPOS DEST PASSED VIA ZP
|
||||
]Y0 EQU WPAR1+1 ; YPOS ORIGIN PASSED VIA ZP
|
||||
]Y1 EQU WPAR2+1 ; YPOS DEST PASSED VIA ZP
|
||||
]F EQU BPAR1 ; FILL VALUE
|
||||
]X0 EQU ZPW1 ; XPOS ORIGIN PASSED VIA ZP
|
||||
]X1 EQU ZPW2 ; XPOS DEST PASSED VIA ZP
|
||||
]Y0 EQU ZPW1+1 ; YPOS ORIGIN PASSED VIA ZP
|
||||
]Y1 EQU ZPW2+1 ; YPOS DEST PASSED VIA ZP
|
||||
]F EQU ZPB1 ; FILL VALUE
|
||||
*
|
||||
]DX EQU ADDR1 ; CHANGE IN X
|
||||
]DY EQU ADDR1+1 ; CHANGE IN Y
|
||||
]SX EQU ADDR2 ; X POSITION STEP
|
||||
]SY EQU ADDR2+1 ; Y POSITION STEP
|
||||
]ERR EQU ADDR3 ; SLOPE ERROR
|
||||
]ERRX2 EQU ADDR3+1 ; COMPARISON COPY OF ]ERR
|
||||
]DX EQU ZPW3 ; CHANGE IN X
|
||||
]DY EQU ZPW3+1 ; CHANGE IN Y
|
||||
]SX EQU ZPW4 ; X POSITION STEP
|
||||
]SY EQU ZPW4+1 ; Y POSITION STEP
|
||||
]ERR EQU ZPW5 ; SLOPE ERROR
|
||||
]ERRX2 EQU ZPW5+1 ; COMPARISON COPY OF ]ERR
|
||||
*
|
||||
TBLINE
|
||||
LDA ]X1 ; {3C2B} SUBTRACT X0 FROM X1
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X CENTER POS *
|
||||
* WPAR2 = Y CENTER POS *
|
||||
* BPAR1 = RADIUS *
|
||||
* BPAR2 = FILL CHARACTER *
|
||||
* ZPW1 = X CENTER POS *
|
||||
* ZPW2 = Y CENTER POS *
|
||||
* ZPB1 = RADIUS *
|
||||
* ZPB2 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
@@ -36,19 +36,19 @@
|
||||
* BELOW. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]XC EQU WPAR1 ; X CENTER POSITION
|
||||
]YC EQU WPAR2 ; Y CENTER POSITION
|
||||
]R EQU BPAR1 ; RADIUS
|
||||
]F EQU BPAR2 ; FILL CHAR
|
||||
]XC EQU ZPW1 ; X CENTER POSITION
|
||||
]YC EQU ZPW2 ; Y CENTER POSITION
|
||||
]R EQU ZPB1 ; RADIUS
|
||||
]F EQU ZPB2 ; FILL CHAR
|
||||
*
|
||||
]Y EQU VARTAB ; CENTER YPOS
|
||||
]X EQU VARTAB+1 ; CENTER XPOS
|
||||
]DY EQU VARTAB+2 ; CHANGE IN Y
|
||||
]DX EQU VARTAB+4 ; CHANGE IN X
|
||||
]ERR EQU VARTAB+6 ; ERROR VALUE
|
||||
]DIAM EQU VARTAB+8 ; DIAMETER
|
||||
]XT EQU VARTAB+10 ; INVERTED X VALUE
|
||||
]YT EQU VARTAB+12 ; INVERTED Y VALUE
|
||||
]Y EQU ZPW3 ; CENTER YPOS
|
||||
]X EQU ZPW3+1 ; CENTER XPOS
|
||||
]DY EQU ZPW4 ; CHANGE IN Y
|
||||
]DX EQU ZPW4+1 ; CHANGE IN X
|
||||
]ERR EQU ZPW5 ; ERROR VALUE
|
||||
]DIAM EQU ZPW5+1 ; DIAMETER
|
||||
]XT EQU ZPW6 ; INVERTED X VALUE
|
||||
]YT EQU ZPW6+1 ; INVERTED Y VALUE
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X ORIGIN *
|
||||
* WPAR1+1 = X DESTINATION *
|
||||
* BPAR1 = Y POSITION *
|
||||
* BPAR2 = FILL CHARACTER *
|
||||
* ZPW1 = X ORIGIN *
|
||||
* ZPW1+1 = X DESTINATION *
|
||||
* ZPB1 = Y POSITION *
|
||||
* ZPB2 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: HORIZONTAL LINE TO *
|
||||
* SCREEN *
|
||||
@@ -19,23 +19,23 @@
|
||||
* SIZE: 19 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; X POS ORIGIN
|
||||
]X2 EQU WPAR1+1 ; X POS DESTINATION
|
||||
]Y1 EQU BPAR1 ; Y POSITION
|
||||
]F EQU BPAR2 ; FILL CHAR
|
||||
]X1 EQU ZPW1 ; X POS ORIGIN
|
||||
]X2 EQU ZPW1+1 ; X POS DESTINATION
|
||||
]Y1 EQU ZPB1 ; Y POSITION
|
||||
]F EQU ZPB2 ; FILL CHAR
|
||||
*
|
||||
THLINE
|
||||
LDA ]Y1 ; {3C2B} LOAD ROW {NZ}
|
||||
LDY ]X1 ; {3C2B} LOAD X START POS {NZ}
|
||||
LDA ]Y1 ; {3C2B} LOAD ROW
|
||||
LDY ]X1 ; {3C2B} LOAD X START POS
|
||||
:LOOP
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC ROUTINE, {NZCV}
|
||||
; WHICH FINDS MEMLOC FOR
|
||||
; POSITION ON SCREEN
|
||||
LDA ]F ; {3C2B} LOAD FILL CHAR {NZ}
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
LDA ]Y1 ; {3C2B} LOAD Y POSITION {NZ}
|
||||
INY ; {2C1B} INCREASE X POS {NZ}
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END {NZC}
|
||||
BNE :LOOP ; {3C2B} REPEAT UNTIL DONE
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC ROUTINE,
|
||||
; WHICH FINDS MEMLOC FOR
|
||||
; POSITION ON SCREEN
|
||||
LDA ]F ; {3C2B} LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
LDA ]Y1 ; {3C2B} LOAD Y POSITION
|
||||
INY ; {2C1B} INCREASE X POS
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END
|
||||
BNE :LOOP ; {3C2B} REPEAT UNTIL DONE
|
||||
:EXIT
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X ORIGIN *
|
||||
* WPAR1+1 = X DESTINATION *
|
||||
* WPAR2 = Y ORIGIN *
|
||||
* WPAR2+1 = Y DESTINATION *
|
||||
* BPAR1 = FILL CHARACTER *
|
||||
* ZPW1 = X ORIGIN *
|
||||
* ZPW2 = X DESTINATION *
|
||||
* ZPW1+1 = Y ORIGIN *
|
||||
* ZPW2+1 = Y DESTINATION *
|
||||
* ZPB1 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: *
|
||||
* *
|
||||
@@ -22,63 +22,63 @@
|
||||
* SIZE: 92 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; XPOS ORIGIN
|
||||
]X2 EQU WPAR2 ; XPOS DESTINATION
|
||||
]Y1 EQU WPAR1+1 ; YPOS ORIGIN
|
||||
]Y2 EQU WPAR2+1 ; YPOS DESTINATION
|
||||
]F EQU BPAR1 ; FILL CHARACTER (BORDER)
|
||||
]X1 EQU ZPW1 ; XPOS ORIGIN
|
||||
]X2 EQU ZPW2 ; XPOS DESTINATION
|
||||
]Y1 EQU ZPW1+1 ; YPOS ORIGIN
|
||||
]Y2 EQU ZPW2+1 ; YPOS DESTINATION
|
||||
]F EQU ZPB1 ; FILL CHARACTER (BORDER)
|
||||
*
|
||||
]YB1 EQU VARTAB
|
||||
]YB1 EQU ZPB2
|
||||
*
|
||||
TRECT
|
||||
*
|
||||
LDA ]Y1 ; {3C2B} LOAD 1ST ROW {NZ}
|
||||
LDY ]X1 ; {3C2B} LOAD XPOS START {NZ}
|
||||
LDA ]Y1 ; {3C2B} LOAD 1ST ROW
|
||||
LDY ]X1 ; {3C2B} LOAD XPOS START
|
||||
:LP1
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC {NZCV}
|
||||
LDA ]F ; {3C2B} LOAD FILL CHAR {NZ}
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC
|
||||
LDA ]F ; {3C2B} LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
LDA ]Y1 ; {3C2B} LOAD YPOS {NZ}
|
||||
INY ; {2C1B} INCREASE XPOS {NZ}
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END {NZC}
|
||||
LDA ]Y1 ; {3C2B} LOAD YPOS
|
||||
INY ; {2C1B} INCREASE XPOS
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END
|
||||
BNE :LP1 ; {3C2B} REPEAT UNTIL DONE
|
||||
*
|
||||
** NEXT HORIZONTAL LINE ROUTINE
|
||||
*
|
||||
LDA ]Y2 ; {3C2B} LOAD 2ND ROW {NZ}
|
||||
LDY ]X1 ; {3C2B} LOAD XPOS START {NZ}
|
||||
LDA ]Y2 ; {3C2B} LOAD 2ND ROW
|
||||
LDY ]X1 ; {3C2B} LOAD XPOS START
|
||||
:LP2
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC {NZCV}
|
||||
LDA ]F ; {2C2B} LOAD FILL CHAR {NZ}
|
||||
JSR GBCALC ; {49C3B} GOSUB GBASCALC
|
||||
LDA ]F ; {2C2B} LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
LDA ]Y2 ; {3C2B} LOAD YPOS
|
||||
INY ; {2C1B} INCREASE XPOS {NZ}
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END {NZC}
|
||||
INY ; {2C1B} INCREASE XPOS
|
||||
CPY ]X2 ; {3C2B} IF < X DEST THEN END
|
||||
BNE :LP2 ; {3C2B} REPEAT UNTIL DONE
|
||||
*
|
||||
** VERTICAL LINES ROUNTINE
|
||||
*
|
||||
LDA ]Y1 ; {4C3B} LOAD Y ORIGIN
|
||||
STA ]YB1 ; {3C2B} COPY OF Y ORIGIN
|
||||
LDY ]X1 ; {4C3B} LOAD X POSITION {NZ}
|
||||
LDY ]X1 ; {4C3B} LOAD X POSITION
|
||||
:LP3
|
||||
JSR GBCALC ; {49C3B} GET POS SCREEN ADDR {NZCV}
|
||||
JSR GBCALC ; {49C3B} GET POS SCREEN ADDR
|
||||
LDA ]F ; {4C3B} LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
INC ]YB1 ; {6C3B} INCREASE Y POSITION {NZ}
|
||||
LDA ]YB1 ; {4C3B} RELOAD Y POSITION {NZ}
|
||||
CMP ]Y2 ; {4C3B} IF Y1 < Y2 {NZC}
|
||||
INC ]YB1 ; {6C3B} INCREASE Y POSITION
|
||||
LDA ]YB1 ; {4C3B} RELOAD Y POSITION
|
||||
CMP ]Y2 ; {4C3B} IF Y1 < Y2
|
||||
BNE :LP3 ; {3C2B} THEN LOOP; ELSE END
|
||||
*
|
||||
INC ]Y2 ; {6C3B} ADD 1 TO Y2 FOR RECT {NZ}
|
||||
INC ]Y2 ; {6C3B} ADD 1 TO Y2 FOR RECT
|
||||
LDA ]Y1 ; {4C3B} LOAD Y ORIGIN
|
||||
LDY ]X2 ; {4C3B} LOAD X POSITION {NZ}
|
||||
LDY ]X2 ; {4C3B} LOAD X POSITION
|
||||
:LP4
|
||||
JSR GBCALC ; {49C3B} GET SCREEN ADDRESS {NZCV}
|
||||
JSR GBCALC ; {49C3B} GET SCREEN ADDRESS
|
||||
LDA ]F ; {4C3B} LOAD FILL CHAR
|
||||
STA (GBPSH),Y ; {6C2B} PUSH ]F TO SCREEN MEM
|
||||
INC ]Y1 ; {6C3B} INCREASE Y POSITION {NZ}
|
||||
LDA ]Y1 ; {4C3B} RELOAD Y POSITION {NZ}
|
||||
CMP ]Y2 ; {4C3B} IF Y1 < Y2 {NZC}
|
||||
INC ]Y1 ; {6C3B} INCREASE Y POSITION
|
||||
LDA ]Y1 ; {4C3B} RELOAD Y POSITION
|
||||
CMP ]Y2 ; {4C3B} IF Y1 < Y2
|
||||
BNE :LP4 ; {3C2B} THEN LOOP; ELSE EXIT LOOP
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = X ORIGIN *
|
||||
* WPAR1+1 = X DESTINATION *
|
||||
* WPAR2 = Y ORIGIN *
|
||||
* WPAR2+1 = Y DESTINATION *
|
||||
* BPAR1 = FILL CHARACTER *
|
||||
* ZPW1 = X ORIGIN *
|
||||
* ZPW1+1 = X DESTINATION *
|
||||
* ZPW2 = Y ORIGIN *
|
||||
* ZPW2+1 = Y DESTINATION *
|
||||
* ZPB1 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT *
|
||||
* *
|
||||
@@ -21,37 +21,37 @@
|
||||
* SIZE: 54 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; TOP LEFT OF RECTANGLE
|
||||
]X2 EQU WPAR1+1 ; BOTTOM RIGHT OF RECTANGLE
|
||||
]Y1 EQU WPAR2 ; TOP Y POSITION OF RECTANGLE
|
||||
]Y2 EQU WPAR2+1 ; BOTTOM POSITION OF RECTANGLE
|
||||
]F EQU BPAR1 ; FILL CHARACTER
|
||||
]X1 EQU ZPW1 ; TOP LEFT OF RECTANGLE
|
||||
]X2 EQU ZPW1+1 ; BOTTOM RIGHT OF RECTANGLE
|
||||
]Y1 EQU ZPW2 ; TOP Y POSITION OF RECTANGLE
|
||||
]Y2 EQU ZPW2+1 ; BOTTOM POSITION OF RECTANGLE
|
||||
]F EQU ZPB1 ; FILL CHARACTER
|
||||
*
|
||||
]XC EQU VARTAB ; CHANGE IN X
|
||||
]YC EQU VARTAB+1 ; CHANGE IN Y
|
||||
]XC EQU ZPB2 ; CHANGE IN X
|
||||
]YC EQU ZPB3 ; CHANGE IN Y
|
||||
*
|
||||
TRECTF
|
||||
LDA ]X1 ; {4C3B} LOAD TOP LEFT X ORIGIN {NZ}
|
||||
LDA ]X1 ; {4C3B} LOAD TOP LEFT X ORIGIN
|
||||
STA ]XC ; {4C3B} STORE AS INITIAL INDEX
|
||||
LDA ]Y1 ; {3C2B} LOAD TOP LEFT Y ORIGIN {NZ}
|
||||
LDA ]Y1 ; {3C2B} LOAD TOP LEFT Y ORIGIN
|
||||
STA ]YC ; {4C3B} STORE AS INITIAL INDEX
|
||||
:LP1 ; PRINT HORIZONTAL LINE
|
||||
LDA ]YC ; {4C3B} LOAD FIRST Y INDEX {NZ}
|
||||
LDY ]XC ; {4C3B} LOAD FIRST X INDEX IN Y {NZ}
|
||||
JSR GBCALC ; {43C3B} GET SCREEN MEMORY ADDR {NZCV}
|
||||
LDA ]F ; {3C2B} LOAD FILL CHARACTER {NZ}
|
||||
STA (GBPSH),Y ; {6C2B} PUT CHAR IN SCREEN MEMORY {NZ}
|
||||
LDA ]YC ; {4C3B} LOAD Y INDEX {NZ}
|
||||
INY ; {2C1B} INCREASE XPOS INDEX {NZ}
|
||||
:LP1 ; PRINT HORIZONTAL LINE
|
||||
LDA ]YC ; {4C3B} LOAD FIRST Y INDEX
|
||||
LDY ]XC ; {4C3B} LOAD FIRST X INDEX IN Y
|
||||
JSR GBCALC ; {43C3B} GET SCREEN MEMORY ADDR
|
||||
LDA ]F ; {3C2B} LOAD FILL CHARACTER
|
||||
STA (GBPSH),Y ; {6C2B} PUT CHAR IN SCREEN MEMORY
|
||||
LDA ]YC ; {4C3B} LOAD Y INDEX
|
||||
INY ; {2C1B} INCREASE XPOS INDEX
|
||||
STY ]XC ; {4C3B} STORE NEW X INDEX
|
||||
CPY ]X2 ; {4C3B} IF XPOS < XMAX, {NZC}
|
||||
CPY ]X2 ; {4C3B} IF XPOS < XMAX,
|
||||
BNE :LP1 ; {3C2B} KEEP PRINTING LINE
|
||||
*
|
||||
LDA ]X1 ; {4C3B} OTHERWISE, RESET XPOS {NZ}
|
||||
LDA ]X1 ; {4C3B} OTHERWISE, RESET XPOS
|
||||
STA ]XC ; {4C3B} AND STORE IN INDEX
|
||||
INC ]YC ; {6C3B} AND INCREASE YPOS {NZ}
|
||||
LDA ]YC ; {4C3B} RELOAD Y INDEX {NZ}
|
||||
CMP ]Y2 ; {4C3B} IF YPOS < YMAX {NZC}
|
||||
INC ]YC ; {6C3B} AND INCREASE YPOS
|
||||
LDA ]YC ; {4C3B} RELOAD Y INDEX
|
||||
CMP ]Y2 ; {4C3B} IF YPOS < YMAX
|
||||
BNE :LP1 ; {3C2B} PRINT HORIZONTAL LINE
|
||||
:EXIT
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* ]X1 STORED AT WPAR1 *
|
||||
* ]Y1 STORED AT WPAR2 *
|
||||
* ]Y2 STORED AT WPAR2+1 *
|
||||
* ]F STORED AT BPAR1 *
|
||||
* ZPW1 = X POSITION *
|
||||
* ZPW2 = Y ORIGIN *
|
||||
* ZPW2+1 = Y DESTINATION *
|
||||
* ZPB1 = FILL CHARACTER *
|
||||
* *
|
||||
* OUTPUT: VERT LINE TO SCREEN *
|
||||
* *
|
||||
@@ -18,10 +18,10 @@
|
||||
* SIZE: 26 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]X1 EQU WPAR1 ; X COLUMN OF LINE
|
||||
]Y1 EQU WPAR2 ; Y POSITION ORIGIN
|
||||
]Y2 EQU WPAR2+1 ; Y POSITION DESTINATION
|
||||
]F EQU BPAR1 ; LINE FILL CHARACTER
|
||||
]X1 EQU ZPW1 ; X COLUMN OF LINE
|
||||
]Y1 EQU ZPW2 ; Y POSITION ORIGIN
|
||||
]Y2 EQU ZPW2+1 ; Y POSITION DESTINATION
|
||||
]F EQU ZPB1 ; LINE FILL CHARACTER
|
||||
*
|
||||
TVLINE
|
||||
*
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING LENGTH *
|
||||
* WPAR1+1 = LINE LENGTH *
|
||||
* ZPW1 = STRING LENGTH *
|
||||
* ZPW1+1 = LINE LENGTH *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -14,8 +14,8 @@
|
||||
* SIZE: 16 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SLEN EQU WPAR1 ; STRING LENGTH
|
||||
]LNLEN EQU WPAR1+1 ; LINE LENGTH
|
||||
]SLEN EQU ZPW1 ; STRING LENGTH
|
||||
]LNLEN EQU ZPW1+1 ; LINE LENGTH
|
||||
*
|
||||
TXTCENT
|
||||
*
|
||||
|
||||
@@ -20,25 +20,25 @@
|
||||
* SIZE: 37 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]F EQU VARTAB ; FILL CHARACTER
|
||||
]F EQU ZPB1 ; FILL CHARACTER
|
||||
*
|
||||
TXTCLR
|
||||
*
|
||||
STA ]F ; {4C3B} STORE FILL CHAR IN MEM
|
||||
LDY #$78 ; {2C2B} LENGTH OF EACH SCREEN SECTION {NZ}
|
||||
LDY #$78 ; {2C2B} LENGTH OF EACH SCREEN SECTION
|
||||
:LP1
|
||||
STA $400,Y ; {5C3B} 1ST SECTION
|
||||
STA $480,Y ; {5C3B} 2ND SECTION
|
||||
STA $500,Y ; {5C3B} 3RD SECTION
|
||||
STA $580,Y ; {5C3B} 4TH SECTION
|
||||
CPY #120 ; {2C2B} {NZC} -- #80
|
||||
CPY #120 ; {2C2B} -- #80
|
||||
BPL :NDB ; {3C2B}
|
||||
STA $600,Y ; {5C3B} 5TH SECTION
|
||||
STA $680,Y ; {5C3B} 6TH SECTION
|
||||
STA $700,Y ; {5C3B} 7TH SECTION
|
||||
STA $780,Y ; {5C3B} 8TH SECTION
|
||||
:NDB
|
||||
DEY ; {2C1B} DECREASE BYTE COUNTER {NZ}
|
||||
DEY ; {2C1B} DECREASE BYTE COUNTER
|
||||
BPL :LP1 ; {3C2B} IF POSITIVE, KEEP LOOPING
|
||||
RTS ; {6C1B} RETURN TO CALLING ROUTINE
|
||||
*
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS (2B) *
|
||||
* WPAR2 = LINE LENGTH *
|
||||
* BPAR1 = VERTICAL SCROLL *
|
||||
* ZPW1 = STRING ADDRESS (2B) *
|
||||
* ZPW2 = LINE LENGTH *
|
||||
* ZPB1 = VERTICAL SCROLL *
|
||||
* LENGTH TO PAUSE *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
@@ -25,16 +25,16 @@
|
||||
* SIZE: 452 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR EQU WPAR1 ; STRING ADDRESS
|
||||
]LEN EQU WPAR2 ; MAXIMUM LENGTH OF STRING
|
||||
]SCROLL EQU BPAR1 ; MAXIMUM LINES BEFORE PAUSING
|
||||
]ADDR EQU ZPW1 ; STRING ADDRESS
|
||||
]LEN EQU ZPW2 ; MAXIMUM LENGTH OF STRING
|
||||
]SCROLL EQU ZPB1 ; MAXIMUM LINES BEFORE PAUSING
|
||||
*
|
||||
]START EQU VARTAB ; STARTING POINT OF CURRENT LINE
|
||||
]END EQU VARTAB+2 ; ENDING OF CURRENT LINE
|
||||
]PTR EQU WPAR3 ; POINTER BETWEEN START AND END
|
||||
]LAST EQU VARTAB+4 ; LOCATION OF NULL TERMINATION
|
||||
]LINES EQU VARTAB+6 ; LINE COUNTER
|
||||
]LSPACE EQU VARTAB+8 ; LAST SPACE FOUND
|
||||
]START EQU ZPW3 ; STARTING POINT OF CURRENT LINE
|
||||
]END EQU ZPW4 ; ENDING OF CURRENT LINE
|
||||
]PTR EQU ZPW5 ; POINTER BETWEEN START AND END
|
||||
]LAST EQU ZPW6 ; LOCATION OF NULL TERMINATION
|
||||
]LINES EQU VARTAB ; LINE COUNTER
|
||||
]LSPACE EQU VARTAB+2 ; LAST SPACE FOUND
|
||||
*
|
||||
TXTMORE
|
||||
*
|
||||
@@ -147,7 +147,7 @@ TXTMORE
|
||||
*
|
||||
** NOW PRINT THE LINE
|
||||
*
|
||||
:PRNLP ; PRINTING LOOP
|
||||
:PRNLP ; PRINTING LOOP
|
||||
LDA ]PTR+1 ; {2C2B} LOAD HIGH BYTE OF POINTER
|
||||
CMP ]LSPACE+1 ; {2C2B} COMPARE TO HIGH BYTE OF LAST SPACE
|
||||
BNE :PRNLP0 ; {3C2B} IF !=, THEN SKIP TO INNER LOOP
|
||||
@@ -164,7 +164,7 @@ TXTMORE
|
||||
LDA #$8D ; {2C2B} LOAD A LINE FEED CHARACTER
|
||||
JSR COUT ; {6+C3B} SEND TO COUT (PRESS RETURN)
|
||||
JMP :XXX ; {3C3B} SKIP REPRINTING SPACE
|
||||
:PRNLP0 ; INNER PRINT LOOP
|
||||
:PRNLP0 ; INNER PRINT LOOP
|
||||
LDY #0 ; {2C2B} RESET .Y (JUST IN CASE?)
|
||||
LDA (]PTR),Y ; {6C2B} LOAD CHARACTER AT POINTER
|
||||
JSR COUT ; {6+C2B} PRINT CHARACTER
|
||||
@@ -209,7 +209,7 @@ TXTMORE
|
||||
** FINISHED PRINTING LINE, SO NOW SWAP POINTER VARIABLES
|
||||
** TO MOVE ON TO THE NEXT SECTION
|
||||
*
|
||||
:PRNLPX ; END PRINTING
|
||||
:PRNLPX ; END PRINTING
|
||||
LDA ]SCROLL ; {2C2B} LOAD MAX LINES
|
||||
CMP ]LINES ; {2C2B} COMPARE TO CURRENT LINES
|
||||
BNE :SWAPPP ; {3C2B} IF !=, SKIP WAIT
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
* SIZE: 22 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]Y1 EQU VARTAB ; Y COORDINATE (1 BYTE)
|
||||
]X1 EQU VARTAB+1 ; X COORDINATE (1 BYTE)
|
||||
]F EQU VARTAB+3 ; CHARACTER TO PLOT (1 BYTE)
|
||||
]Y1 EQU ZPW1 ; Y COORDINATE (1 BYTE)
|
||||
]X1 EQU ZPW2 ; X COORDINATE (1 BYTE)
|
||||
]F EQU ZPW3 ; CHARACTER TO PLOT (1 BYTE)
|
||||
*
|
||||
TXTPUT
|
||||
*
|
||||
@@ -32,11 +32,11 @@ TXTPUT
|
||||
STA ]F ; {4C3B} STORE CHARACTER TO PLOT
|
||||
STY ]Y1 ; {4C3B} STORE Y POSITION
|
||||
STX ]X1 ; {4C3B} STORE X POSITION
|
||||
LDA ]Y1 ; {4C3B} LOAD Y POS INTO .A AND {NZ}
|
||||
LDY ]X1 ; {4C3B} X POS IN .Y TO CALL GBCALC {NZ}
|
||||
JSR GBCALC ; {43C24B} GET SCREEN ADDRESS TO PLOT {NZCV}
|
||||
LDA ]F ; {4C3B} LOAD .A WITH CHARACTER TO PLOT {NZ}
|
||||
LDA ]Y1 ; {4C3B} LOAD Y POS INTO .A AND
|
||||
LDY ]X1 ; {4C3B} X POS IN .Y TO CALL GBCALC
|
||||
JSR GBCALC ; {43C24B} GET SCREEN ADDRESS TO PLOT
|
||||
LDA ]F ; {4C3B} LOAD .A WITH CHARACTER TO PLOT
|
||||
STA (GBPSH),Y ; {6C3B} PUSH CHARACTER TO SCREEN ADDR
|
||||
:EXIT ; THAT WAS RETURNED BY GBCALC
|
||||
:EXIT ; THAT WAS RETURNED BY GBCALC
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
|
||||
@@ -22,26 +22,26 @@
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
XPRINT
|
||||
PLA ; {4C1B} GET CURRENT EXEC ADDRESS {NZ}
|
||||
STA ADDR1 ; {3C2B} AND STORE IN ZERO PAGE
|
||||
PLA ; {4C1B} GET HIGH BYTE {NZ}
|
||||
STA ADDR1+1 ; {3C2B} AND ALSO STORE AT ZP+1
|
||||
LDY #$01 ; {2C2B} LOAD .Y WITH #1 TO POINT {NZ}
|
||||
; TO INSTRUCTION AFTER ADDRESS
|
||||
PLA ; {4C1B} GET CURRENT EXEC ADDRESS
|
||||
STA ZPW1 ; {3C2B} AND STORE IN ZERO PAGE
|
||||
PLA ; {4C1B} GET HIGH BYTE
|
||||
STA ZPW1+1 ; {3C2B} AND ALSO STORE AT ZP+1
|
||||
LDY #$01 ; {2C2B} LOAD .Y WITH #1 TO POINT
|
||||
; TO INSTRUCTION AFTER ADDRESS
|
||||
:LOOP
|
||||
LDA (ADDR1),Y ; {6C2B} GET CHARACTER FROM NEXT BYTE {NZ}
|
||||
LDA (ZPW1),Y ; {6C2B} GET CHARACTER FROM NEXT BYTE
|
||||
BEQ :EXIT ; {3C2B} IF CHAR = $00 THEN EXIT LOOP
|
||||
JSR COUT1 ; {89C2B} OTHERWISE, PRINT CHAR {NZCV}
|
||||
INY ; {2C1B} INCREASE THE BYTE INDEX {NZ}
|
||||
JSR COUT1 ; {89C2B} OTHERWISE, PRINT CHAR
|
||||
INY ; {2C1B} INCREASE THE BYTE INDEX
|
||||
BNE :LOOP ; {3C2B} IF INDEX < 255, LOOP
|
||||
:EXIT
|
||||
CLC ; {2C1B} CLEAR CARRY {C=0}
|
||||
TYA ; {2C1B} MOVE .Y INDEX TO .A FOR ADDITION {NZ}
|
||||
ADC ADDR1 ; {3C2B} ADD EXECUTION ADDRESS LOW BYTE {NZCV}
|
||||
STA ADDR1 ; {3C2B} SAVE AGAIN ON ZERO PAGE
|
||||
LDA ADDR1+1 ; {3C2B} GET EXECUTION ADDRESS HIGH BYTE {NZ}
|
||||
ADC #$00 ; {2C2B} ADD CARRY (ADD 1 TO HI IF C=1) {NZCV}
|
||||
CLC ; {2C1B}
|
||||
TYA ; {2C1B} MOVE .Y INDEX TO .A FOR ADDITION
|
||||
ADC ZPW1 ; {3C2B} ADD EXECUTION ADDRESS LOW BYTE
|
||||
STA ZPW1 ; {3C2B} SAVE AGAIN ON ZERO PAGE
|
||||
LDA ZPW1+1 ; {3C2B} GET EXECUTION ADDRESS HIGH BYTE
|
||||
ADC #$00 ; {2C2B} ADD CARRY (ADD 1 TO HI IF C=1)
|
||||
PHA ; {3C1B} PUSH TNEW HIGH BYTE TO STACK
|
||||
LDA ADDR1 ; {3C2B} LOAD THE LOW BYTE {NZ}
|
||||
LDA ZPW1 ; {3C2B} LOAD THE LOW BYTE
|
||||
PHA ; {3C1B} PUSH NEW LOW BYTE TO STACK
|
||||
RTS ; {6C1B} RETURN TO NEW EXECUTION ADDRESS
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 18-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 18-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -42,17 +42,17 @@
|
||||
* ]4 = ARRAY FILL VALUE *
|
||||
* *
|
||||
* CYCLES: 271+ *
|
||||
* SIZE: 165 BYTES *
|
||||
* SIZE: 35 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM161 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE BYTE LENGTH
|
||||
LDA ]3 ; {3C2B} ELEMENT LENGTH
|
||||
STA WPAR3 ; {3C2B}
|
||||
LDA ]4 ; {3C2B} FILL VALUE
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR ADIM161 ; {227C133B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE BYTE LENGTH
|
||||
LDA ]3 ; {3C2B} ELEMENT LENGTH
|
||||
STA ZPW3 ; {3C2B}
|
||||
LDA ]4 ; {3C2B} FILL VALUE
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR ADIM161 ; {227C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -69,14 +69,14 @@ DIM161 MAC
|
||||
* ]3 = ELEMENT INDEX *
|
||||
* *
|
||||
* CYCLES: 238+ *
|
||||
* SIZE: 148 BYTES *
|
||||
* SIZE: 39 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT161 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]3;WPAR3 ; {16C12B} PARSE INDEX
|
||||
JSR APUT161 ; {190C112B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]3;ZPW3 ; {16C12B} PARSE INDEX
|
||||
JSR APUT161 ; {190C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -92,12 +92,12 @@ PUT161 MAC
|
||||
* ]2 = ARRAY ADDRESS *
|
||||
* *
|
||||
* CYCLES: 223+ *
|
||||
* SIZE: 130 BYTES *
|
||||
* SIZE: 27 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GET161 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE INDEX
|
||||
JSR AGET161 ; {191C116B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE INDEX
|
||||
JSR AGET161 ; {191C03B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 18-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -42,19 +42,19 @@
|
||||
* ]4 = ELEMENT SIZE *
|
||||
* ]5 = FILL VALUE *
|
||||
* *
|
||||
* CYCLES: 464+ *
|
||||
* SIZE: 373 BYTES *
|
||||
* CYCLES: 466+ *
|
||||
* SIZE: 49 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM162 MAC
|
||||
_MLIT ]1;WPAR3 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]2;WPAR1 ; {16C12B} PARSE X DIMENSION
|
||||
_MLIT ]3;WPAR2 ; {16C12B} PARSE Y DIMENSION
|
||||
LDA ]4 ; {3C2B} ELEMENT LENGTH
|
||||
STA BPAR1 ; {3C2B}
|
||||
LDA ]5 ; {3C2B} FILL VAL
|
||||
STA BPAR2 ; {3C2B}
|
||||
JSR ADIM162 ; {404C229B}
|
||||
_MLIT ]1;ZPW3 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]2;ZPW1 ; {16C12B} PARSE X DIMENSION
|
||||
_MLIT ]3;ZPW2 ; {16C12B} PARSE Y DIMENSION
|
||||
LDA ]4 ; {4C3B} ELEMENT LENGTH
|
||||
STA ZPB1 ; {3C2B}
|
||||
LDA ]5 ; {4C3B} FILL VAL
|
||||
STA ZPB2 ; {3C2B}
|
||||
JSR ADIM162 ; {404C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -72,15 +72,15 @@ DIM162 MAC
|
||||
* ]4 = Y INDEX *
|
||||
* *
|
||||
* CYCLES: 448+ *
|
||||
* SIZE: 271 BYTES *
|
||||
* SIZE: 51 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT162 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]3;WPAR3 ; {16C12B} PARSE X INDEX
|
||||
_MLIT ]4;ADDR1 ; {16C12B} PARSE Y INDEX
|
||||
JSR APUT162 ; {384C223B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
_MLIT ]3;ZPW3 ; {16C12B} PARSE X INDEX
|
||||
_MLIT ]4;ZPW4 ; {16C12B} PARSE Y INDEX
|
||||
JSR APUT162 ; {384C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -97,13 +97,13 @@ PUT162 MAC
|
||||
* ]3 = Y INDEX *
|
||||
* *
|
||||
* CYCLES: 436+ *
|
||||
* SIZE: 263 BYTES *
|
||||
* SIZE: 39 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GET162 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE ARAY ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE X INDEX
|
||||
_MLIT ]3;WPAR3 ; {16C12B} PARSE Y INDEX
|
||||
JSR AGET162 ; {388C227B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE ARAY ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE X INDEX
|
||||
_MLIT ]3;ZPW3 ; {16C12B} PARSE Y INDEX
|
||||
JSR AGET162 ; {388C3B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 18-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -42,19 +42,19 @@
|
||||
* ]3 = ELEMENT BYTE LENGTH *
|
||||
* ]4 = FILL VALUE *
|
||||
* *
|
||||
* CYCLES: 234+ *
|
||||
* SIZE: 146 BYTES *
|
||||
* CYCLES: 237+ *
|
||||
* SIZE: 30 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM81 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE IF LITERAL OR NOT
|
||||
LDA ]2 ; {3C2B} ARRAY LENGTH
|
||||
STA WPAR2 ; {3C2B}
|
||||
LDA ]3 ; {3C2B} ELEMENT LENGTH
|
||||
STA WPAR3 ; {3C2B}
|
||||
LDA ]4 ; {3C2B}
|
||||
STA BPAR1 ; {3C2B} FILL VAL
|
||||
JSR ADIM81 ; {200C132B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE IF LITERAL OR NOT
|
||||
LDA ]2 ; {4C3B} ARRAY LENGTH
|
||||
STA ZPW2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B} ELEMENT LENGTH
|
||||
STA ZPW3 ; {3C2B}
|
||||
LDA ]4 ; {4C3B}
|
||||
STA ZPB1 ; {3C2B} FILL VAL
|
||||
JSR ADIM81 ; {200C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -70,14 +70,14 @@ DIM81 MAC
|
||||
* ]1 = ARRAY ADDRESS *
|
||||
* ]2 = ELEMENT INDEX *
|
||||
* *
|
||||
* CYCLES: 193+ *
|
||||
* SIZE: 125 BYTES *
|
||||
* CYCLES: 194+ *
|
||||
* SIZE: 12 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GET81 MAC
|
||||
_AXLIT ]1 ; {8C6B} PARSE ADDRESS
|
||||
LDY ]2 ; {3C2B} ELEMENT INDEX
|
||||
JSR AGET81 ; {182C117B}
|
||||
LDY ]2 ; {4C3B} ELEMENT INDEX
|
||||
JSR AGET81 ; {182C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -93,15 +93,15 @@ GET81 MAC
|
||||
* ]2 = ARRAY ADDRESS *
|
||||
* ]3 = ELEMENT INDEX *
|
||||
* *
|
||||
* CYCLES: 216+ *
|
||||
* SIZE: 131 BYTES *
|
||||
* CYCLES: 217+ *
|
||||
* SIZE: 32 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT81 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE DEST ADDRESS
|
||||
LDA ]3 ; {3C2B} DEST INDEX
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR APUT81 ; {178C103B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE DEST ADDRESS
|
||||
LDA ]3 ; {4C3B} DEST INDEX
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR APUT81 ; {178C3B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 18-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -42,21 +42,21 @@
|
||||
* ]4 = ELEMENT SIZE *
|
||||
* ]5 = FILL VALUE *
|
||||
* *
|
||||
* CYCLES: 355+ *
|
||||
* SIZE: 228 BYTES *
|
||||
* CYCLES: 359+ *
|
||||
* SIZE: 35 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIM82 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
LDA ]2 ; {3C2B} X DIM
|
||||
STA WPAR2 ; {3C2B}
|
||||
LDA ]3 ; {3C2B} Y DIM
|
||||
STA WPAR3 ; {3C2B}
|
||||
LDA ]4 ; {3C2B} ELEMENT LENGTH
|
||||
STA BPAR2 ; {3C2B}
|
||||
LDA ]5 ; {3C2B} FILL VAL
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR ADIM82 ; {315C200B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE ARRAY ADDRESS
|
||||
LDA ]2 ; {4C3B} X DIM
|
||||
STA ZPW2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B} Y DIM
|
||||
STA ZPW3 ; {3C2B}
|
||||
LDA ]4 ; {4C3B} ELEMENT LENGTH
|
||||
STA ZPB2 ; {3C2B}
|
||||
LDA ]5 ; {4C3B} FILL VAL
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR ADIM82 ; {315C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -72,17 +72,17 @@ DIM82 MAC
|
||||
* ]2 = X INDEX *
|
||||
* ]3 = Y INDEX *
|
||||
* *
|
||||
* CYCLES: 340+ *
|
||||
* SIZE: 222 BYTES *
|
||||
* CYCLES: 342+ *
|
||||
* SIZE: 25 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
GET82 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
LDA ]2 ; {3C2B} X INDEX
|
||||
STA BPAR1 ; {3C2B}
|
||||
LDA ]3 ; {3C2B} Y INDEX
|
||||
STA BPAR2 ; {3C2B}
|
||||
JSR AGET82 ; {312C192B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
LDA ]2 ; {4C3B} X INDEX
|
||||
STA ZPB1 ; {3C2B}
|
||||
LDA ]3 ; {4C3B} Y INDEX
|
||||
STA ZPB2 ; {3C2B}
|
||||
JSR AGET82 ; {312C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -99,17 +99,17 @@ GET82 MAC
|
||||
* ]3 = ELEMENT X INDEX *
|
||||
* ]4 = Y INDEX *
|
||||
* *
|
||||
* CYCLES: 352+ *
|
||||
* SIZE: 223 BYTES *
|
||||
* CYCLES: 354+ *
|
||||
* SIZE: 37 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
PUT82 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE DEST ADDRESS
|
||||
LDA ]3 ; {3C2B} X INDEX
|
||||
STA BPAR1 ; {3C2B}
|
||||
LDA ]4 ; {3C2B} Y INDEX
|
||||
STA BPAR2 ; {3C2B}
|
||||
JSR APUT82 ; {308C191B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE SOURCE ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE DEST ADDRESS
|
||||
LDA ]3 ; {4C3B} X INDEX
|
||||
STA ZPB1 ; {3C2B}
|
||||
LDA ]4 ; {4C3B} Y INDEX
|
||||
STA ZPB2 ; {3C2B}
|
||||
JSR APUT82 ; {308C3B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* WPAR2 = # OF ELEMENTS *
|
||||
* WPAR3 = ELEMENT LENGTH *
|
||||
* BPAR1 = FILL VALUE *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPW2 = # OF ELEMENTS *
|
||||
* ZPW3 = ELEMENT LENGTH *
|
||||
* ZPB1 = FILL VALUE *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -24,14 +24,14 @@
|
||||
* SIZE: 130 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDRD EQU WPAR1 ; ARRAY ADDRESS
|
||||
]ASIZE EQU WPAR2 ; # OF ELEMENTS
|
||||
]ESIZE EQU WPAR3 ; ELEMENT BYTE LENGTH
|
||||
]FILL EQU BPAR1 ; FILL VALUE
|
||||
]ADDRD EQU ZPW1 ; ARRAY ADDRESS
|
||||
]ASIZE EQU ZPW2 ; # OF ELEMENTS
|
||||
]ESIZE EQU ZPW3 ; ELEMENT BYTE LENGTH
|
||||
]FILL EQU ZPB1 ; FILL VALUE
|
||||
*
|
||||
]MSIZE EQU VARTAB ; TOTAL ARRAY BYTES
|
||||
]ASZBAK EQU VARTAB+4 ; BACKUP OF ELEMENT #
|
||||
]ESZBAK EQU VARTAB+7 ; BACKUP
|
||||
]MSIZE EQU ZPW4 ; TOTAL ARRAY BYTES
|
||||
]ASZBAK EQU ZPW5 ; BACKUP OF ELEMENT #
|
||||
]ESZBAK EQU VARTAB ; BACKUP
|
||||
*
|
||||
ADIM161
|
||||
LDA ]ESIZE ; {3C2B} ELEMENT SIZE
|
||||
@@ -40,11 +40,11 @@ ADIM161
|
||||
STA ]ASZBAK ; {3C2B} ARRAY SIZE BACKUP
|
||||
LDA ]ASIZE+1 ; {3C2B}
|
||||
STA ]ASZBAK+1 ; {3C2B} BACKUP
|
||||
STA SCRATCH ; {3C2B} HIBYTE FOR MULTIPLICATION
|
||||
STA ZPB4 ; {3C2B} HIBYTE FOR MULTIPLICATION
|
||||
LDA ]ADDRD ; {3C2B}
|
||||
STA ADDR2 ; {3C2B}
|
||||
STA ZPW6 ; {3C2B}
|
||||
LDA ]ADDRD+1 ; {3C2B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} CLEAR INDEX
|
||||
LDA #0 ; {2C2B} CLEAR ACCUMULATOR
|
||||
BEQ :ENTLP ; {3C2B} IF 0, SKIP TO LOOP
|
||||
@@ -56,12 +56,12 @@ ADIM161
|
||||
ADC ]ASIZE ; {4C3B} ADD ARRAY SIZE
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
TYA ; {2C1B} LOAD HIBYTE
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} HOLD IN .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE
|
||||
:LP
|
||||
ASL ]ASIZE ; {6C3B} MULTIPLY ARRAY SIZE BY 2
|
||||
ROL SCRATCH ; {6C3B} ADJUST HIBYTE
|
||||
ROL ZPB4 ; {6C3B} ADJUST HIBYTE
|
||||
:ENTLP
|
||||
LSR ]ESIZE ; {6C3B} DIVIDE ELEMENT SIZE BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE IN .A,
|
||||
@@ -99,13 +99,13 @@ ADIM161
|
||||
:MFEXIT
|
||||
LDY #0 ; {2C2B} RESET INDEX
|
||||
LDA ]ASZBAK ; {3C2B} STORE ARRAY SIZE IN HEADER
|
||||
STA (ADDR2),Y ; {6C2B}
|
||||
STA (ZPW6),Y ; {6C2B}
|
||||
INY ; {2C1B} INCREASE INDEX
|
||||
LDA ]ASZBAK+1 ; {3C2B} STORE ARRAY SIZE HIBYTE
|
||||
STA (ADDR2),Y ; {6C2B}
|
||||
STA (ZPW6),Y ; {6C2B}
|
||||
INY ; {2C1B} INCREMENT INDEX
|
||||
LDA ]ESZBAK ; {3C2B} STORE ELEMENT SIZE
|
||||
STA (ADDR2),Y ; {6C2B} IN HEADER
|
||||
STA (ZPW6),Y ; {6C2B} IN HEADER
|
||||
LDX ]ADDRD ; {3C2B} .X HOLDS ARRAY ADDRESS LOBYTE
|
||||
LDY ]ADDRD+1 ; {3C2B} .Y HOLDS HIBYTE
|
||||
LDA ]MSIZE ; {3C2B} STORE TOTAL ARRAY SIZE
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = 1ST DIM LENGTH *
|
||||
* WPAR2 = 2ND DIM LENGTH *
|
||||
* WPAR3 = ARRAY ADDRESS *
|
||||
* BPAR1 = ELEMENT LENGTH *
|
||||
* BPAR2 = FILL VALUE *
|
||||
* ZPW1 = 1ST DIM LENGTH *
|
||||
* ZPW2 = 2ND DIM LENGTH *
|
||||
* ZPW3 = ARRAY ADDRESS *
|
||||
* ZPB1 = ELEMENT LENGTH *
|
||||
* ZPB2 = FILL VALUE *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -26,18 +26,18 @@
|
||||
* SIZE: 226 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]AXSIZE EQU WPAR1 ; FIRST DIMENSION LENGTH
|
||||
]AYSIZE EQU WPAR2 ; SECOND DIMENSION LENGTH
|
||||
]ELEN EQU BPAR1 ; ELEMENT BYTE LENGTH
|
||||
]FILL EQU BPAR2 ; FILL VALUE
|
||||
]ADDR EQU WPAR3 ; ARRAY ADDRESS
|
||||
]ADDR2 EQU ADDR1 ; ZERO-PAGE WORKING SPACE
|
||||
]AXSIZE EQU ZPW1 ; FIRST DIMENSION LENGTH
|
||||
]AYSIZE EQU ZPW2 ; SECOND DIMENSION LENGTH
|
||||
]ELEN EQU ZPB1 ; ELEMENT BYTE LENGTH
|
||||
]FILL EQU ZPB2 ; FILL VALUE
|
||||
]ADDR EQU ZPW3 ; ARRAY ADDRESS
|
||||
]ADDR2 EQU ZPW4 ; ZERO-PAGE WORKING SPACE
|
||||
*
|
||||
]PROD EQU VARTAB ; PRODUCT
|
||||
]AXBAK EQU VARTAB+4 ; X SIZE BACKUP
|
||||
]AYBAK EQU VARTAB+6 ; Y SIZE BACKUP
|
||||
]MLIER EQU VARTAB+8 ; MULTIPLIER
|
||||
]MCAND EQU VARTAB+10 ; MULTIPLICAND
|
||||
]PROD EQU VARTAB+8 ; PRODUCT
|
||||
]AXBAK EQU ZPW5 ; X SIZE BACKUP
|
||||
]AYBAK EQU ZPW6 ; Y SIZE BACKUP
|
||||
]MLIER EQU VARTAB ; MULTIPLIER
|
||||
]MCAND EQU VARTAB+4 ; MULTIPLICAND
|
||||
*
|
||||
ADIM162
|
||||
LDA ]AYSIZE ; {3C2B}
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
* *
|
||||
* INPUT *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* WPAR2 = # OF ELEMENTS *
|
||||
* WPAR3 = LENGTH OF ELEMENTS *
|
||||
* BPAR1 = FILL VALUE *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPW2 = # OF ELEMENTS *
|
||||
* ZPW3 = LENGTH OF ELEMENTS *
|
||||
* ZPB1 = FILL VALUE *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -26,14 +26,14 @@
|
||||
* SIZE: 129 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR EQU WPAR1 ; ARRAY ADDRESS
|
||||
]ASIZE EQU WPAR2 ; NUMBER OF ELEMENTS
|
||||
]ESIZE EQU WPAR3 ; ELEMENT SIZE, IN BYTES
|
||||
]FILL EQU BPAR1 ; DEFAULT FILL VALUE
|
||||
]ADDR EQU ZPW1 ; ARRAY ADDRESS
|
||||
]ASIZE EQU ZPW2 ; NUMBER OF ELEMENTS
|
||||
]ESIZE EQU ZPW3 ; ELEMENT SIZE, IN BYTES
|
||||
]FILL EQU ZPB1 ; DEFAULT FILL VALUE
|
||||
*
|
||||
]MSIZE EQU VARTAB ; TOTAL BYTES OF ARRAY
|
||||
]ASZBAK EQU VARTAB+4 ; ARRAY SIZE BACKUP
|
||||
]ESZBAK EQU VARTAB+6 ; ELEMENT SIZE BACKUP
|
||||
]MSIZE EQU ZPW4 ; TOTAL BYTES OF ARRAY
|
||||
]ASZBAK EQU ZPW5 ; ARRAY SIZE BACKUP
|
||||
]ESZBAK EQU ZPW6 ; ELEMENT SIZE BACKUP
|
||||
*
|
||||
ADIM81
|
||||
LDA ]ESIZE ; {2C2B} LOAD ELEMENT SIZE
|
||||
@@ -49,19 +49,19 @@ ADIM81
|
||||
LDY #0 ; {2C2B} RESET HIBYTE FOR MULTIPLY
|
||||
TYA ; {3C2B} RESET LOBYTE FOR MULTIPLY
|
||||
LDY ]ASIZE+1 ; {2C2B}
|
||||
STY SCRATCH ; {3C2B} SAVE HIBYTE IN SCRATCH
|
||||
STY ZPB4 ; {3C2B} SAVE HIBYTE IN ZPB4
|
||||
BEQ :ENTLP ; {3C2B} IF ZERO, SKIP TO LOOP
|
||||
:DOADD
|
||||
CLC ; {2C1B} ADD ASIZE TO LOBYTE
|
||||
ADC ]ASIZE ; {5C3B}
|
||||
TAX ; {3C2B} TEMPORARILY STORE IN .X
|
||||
TYA ; {3C2B} TRANSFER HIBYTE TO .A
|
||||
ADC SCRATCH ; {5C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {5C3B} ADD HIBYTE
|
||||
TAY ; {3C2B} STORE BACK IN .Y
|
||||
TXA ; {3C2B} LOAD LOBYTE IN .A AGAIN
|
||||
:LP ; LOOP START
|
||||
:LP ; LOOP START
|
||||
ASL ]ASIZE ; {6C3B} MULTIPLY ASIZE BY 2
|
||||
ROL SCRATCH ; {6C3B} MULTIPLY HIBYTE BY 2
|
||||
ROL ZPB4 ; {6C3B} MULTIPLY HIBYTE BY 2
|
||||
:ENTLP
|
||||
LSR ]ESIZE ; {6C3B} DIVIDE ESIZE BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE IN .A, ADD AGAIN
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* WPAR2 = 1ST DIM LENGTH *
|
||||
* WPAR3 = 2ND DIM LENGTH *
|
||||
* BPAR1 = FILL VALUE *
|
||||
* BPAR2 = ELEMENT LENGTH *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPW2 = 1ST DIM LENGTH *
|
||||
* ZPW3 = 2ND DIM LENGTH *
|
||||
* ZPB1 = FILL VALUE *
|
||||
* ZPB2 = ELEMENT LENGTH *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -27,17 +27,17 @@
|
||||
* SIZE: 197 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR EQU WPAR1 ; ARRAY ADDRESS
|
||||
]AXSIZE EQU WPAR2 ; FIRST DIM # OF ELEMENTS
|
||||
]AYSIZE EQU WPAR3 ; SECOND DIM # OF ELEMENTS
|
||||
]FILL EQU BPAR1 ; FILL VALUE
|
||||
]ESIZE EQU BPAR2 ; ELEMENT SIZE
|
||||
]ADDR EQU ZPW1 ; ARRAY ADDRESS
|
||||
]AXSIZE EQU ZPW2 ; FIRST DIM # OF ELEMENTS
|
||||
]AYSIZE EQU ZPW3 ; SECOND DIM # OF ELEMENTS
|
||||
]FILL EQU ZPB1 ; FILL VALUE
|
||||
]ESIZE EQU ZPB2 ; ELEMENT SIZE
|
||||
*
|
||||
]PROD EQU VARTAB ; PRODUCT
|
||||
]AXBAK EQU VARTAB+4 ; ARRAY X SIZE BACKUP
|
||||
]AYBAK EQU VARTAB+5 ; ARRAY Y SIZE BACKUP
|
||||
]MLIER EQU VARTAB+6 ; MULTIPLIER
|
||||
]MCAND EQU VARTAB+8 ; MULTIPLICAND, ELEMENT SIZE
|
||||
]AXBAK EQU ZPW4 ; ARRAY X SIZE BACKUP
|
||||
]AYBAK EQU ZPW5 ; ARRAY Y SIZE BACKUP
|
||||
]MLIER EQU ZPW6 ; MULTIPLIER
|
||||
]MCAND EQU VARTAB+4 ; MULTIPLICAND, ELEMENT SIZE
|
||||
*
|
||||
ADIM82
|
||||
LDA ]ESIZE ; {2C2B} ELEMENT LENGTH
|
||||
@@ -52,19 +52,19 @@ ADIM82
|
||||
** MULTIPLY X AND Y
|
||||
*
|
||||
TAY ; {2C1B} AND LOBYTE
|
||||
STY SCRATCH ; {3C2B}
|
||||
STY ZPB4 ; {3C2B}
|
||||
BEQ :ENTLP ; {3C2B} IF ZERO, SKIP TO LOOP
|
||||
:DOADD
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
ADC ]AXSIZE ; {5C3B} ADD X LENGTH
|
||||
TAX ; {2C1B} TEMPORARILY STORE IN .X
|
||||
TYA ; {2C1B} TRANSFER HIBYTE TO .A
|
||||
ADC SCRATCH ; {5C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {5C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} STORE BACK IN .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE INTO .A
|
||||
:LP
|
||||
ASL ]AXSIZE ; {6C3B} MULTIPLY X LENGTH BY 2
|
||||
ROL SCRATCH ; {6C3B} ADJUST HIBYTE
|
||||
ROL ZPB4 ; {6C3B} ADJUST HIBYTE
|
||||
:ENTLP
|
||||
LSR ]AYSIZE ; {6C3B} DIVIDE Y LENGTH BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE IN .A,
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* WPAR2 = ELEMENT INDEX *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPW2 = ELEMENT INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -22,20 +22,20 @@
|
||||
* SIZE: 113 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]AIDX EQU WPAR2 ; ELEMENT INDEX
|
||||
]ADDR EQU WPAR1 ; ARRAY ADDRESS
|
||||
]AIDX EQU ZPW2 ; ELEMENT INDEX
|
||||
]ADDR EQU ZPW1 ; ARRAY ADDRESS
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT LENGTH
|
||||
]ESIZEB EQU VARTAB+1 ; ^BACKUP
|
||||
]ASIZE EQU VARTAB+2 ; NUMBER OF ELEMENTS
|
||||
]IDX EQU VARTAB+6 ; INDEX BACKUP
|
||||
]ESIZE EQU ZPB1 ; ELEMENT LENGTH
|
||||
]ESIZEB EQU ZPB2 ; ^BACKUP
|
||||
]ASIZE EQU ZPW3 ; NUMBER OF ELEMENTS
|
||||
]IDX EQU ZPW4 ; INDEX BACKUP
|
||||
*
|
||||
AGET161
|
||||
LDA ]AIDX ; {3C2B}
|
||||
STA ]IDX ; {3C2B}
|
||||
LDA ]AIDX+1 ; {3C2B} GET INDEX HIBYTE
|
||||
STA ]AIDX+1 ; {3C2B}
|
||||
STA SCRATCH ; {3C2B}
|
||||
STA ZPB3 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET INDEX
|
||||
LDA (]ADDR),Y ; {6C2B} GET NUMBER OF
|
||||
STA ]ASIZE ; {3C2B} ARRAY ELEMENTS
|
||||
@@ -57,12 +57,12 @@ AGET161
|
||||
ADC ]AIDX ; {4C3B} ADD INDEX TO .A
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
TYA ; {2C1B} LOAD HIBYTE
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB3 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} HOLD IN .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE
|
||||
:LPA
|
||||
ASL ]AIDX ; {6C3B} MULTIPLY INDEX BY 2
|
||||
ROL SCRATCH ; {6C3B} ADJUST HIBYTE
|
||||
ROL ZPB3 ; {6C3B} ADJUST HIBYTE
|
||||
:ENTLPA
|
||||
LSR ]ESIZE ; {6C3B} DIVIDE ELEMENT LENGTH BY 2
|
||||
BCS :DOADD ; {3C2B} IF BIT1 SHIFTED IN CARRY +MORE
|
||||
@@ -72,27 +72,27 @@ AGET161
|
||||
LDA #3 ; {2C2B} ADD 3 TO INDEX LOBYTE
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC ]IDX ; {4C3B}
|
||||
STA ADDR2 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW5 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]IDX+1 ; {3C2B} ADJUST HIBYTE
|
||||
ADC #0 ; {2C2B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW5+1 ; {3C2B}
|
||||
*
|
||||
LDA ADDR2 ; {3C2B} ADD ARRAY ADDRESS
|
||||
LDA ZPW5 ; {3C2B} ADD ARRAY ADDRESS
|
||||
CLC ; {2C1B}
|
||||
ADC ]ADDR ; {4C3B} LOBYTE
|
||||
STA ADDR2 ; {3C2B}
|
||||
LDA ADDR2+1 ; {3C2B} HIBYTE
|
||||
STA ZPW5 ; {3C2B}
|
||||
LDA ZPW5+1 ; {3C2B} HIBYTE
|
||||
ADC ]ADDR+1 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW5+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET BYTE INDEX
|
||||
:LP
|
||||
LDA (ADDR2),Y ; {6C2B} GET BYTE FROM ELEMENT
|
||||
LDA (ZPW5),Y ; {6C2B} GET BYTE FROM ELEMENT
|
||||
STA RETURN,Y ; {3C2B} PUT INTO RETURN
|
||||
INY ; {2C1B} INCREASE BYTE INDEX
|
||||
CPY ]ESIZEB ; {4C3B} IF INDEX != ELEMENT LENGTH
|
||||
BNE :LP ; {3C2B} CONTINUE LOOP
|
||||
LDA ]ESIZEB ; {3C2B} .A = ELEMENT SIZE
|
||||
STA RETLEN ; {3C2B} STORE IN RETLEN
|
||||
LDY ADDR2+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ADDR2 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
LDY ZPW5+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ZPW5 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* WPAR2 = 1ST DIM INDEX *
|
||||
* WPAR3 = 2ND DIM INDEX *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPW2 = 1ST DIM INDEX *
|
||||
* ZPW3 = 2ND DIM INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -25,17 +25,17 @@
|
||||
* SIZE: 224 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR EQU WPAR1 ; ARRAY ADDRESS
|
||||
]XIDX EQU WPAR2 ; FIRST DIMENSION LENGTH
|
||||
]YIDX EQU WPAR3 ; SECOND DIMENSION LENGTH
|
||||
]ADDR EQU ZPW1 ; ARRAY ADDRESS
|
||||
]XIDX EQU ZPW2 ; FIRST DIMENSION LENGTH
|
||||
]YIDX EQU ZPW3 ; SECOND DIMENSION LENGTH
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT LENGTH
|
||||
]MCAND EQU VARTAB+2 ; MULTIPLICAND
|
||||
]MLIER EQU VARTAB+4 ; MULTIPLIER
|
||||
]PROD EQU VARTAB+6 ; PRODUCT
|
||||
]PBAK EQU VARTAB+10 ; ^BACKUP
|
||||
]XLEN EQU VARTAB+12 ; X-DIM LENGTH
|
||||
]YLEN EQU VARTAB+14 ; Y-DIM LENGTH
|
||||
]ESIZE EQU ZPW4 ; ELEMENT LENGTH
|
||||
]MCAND EQU ZPW5 ; MULTIPLICAND
|
||||
]MLIER EQU VARTAB+12 ; MULTIPLIER
|
||||
]PROD EQU VARTAB ; PRODUCT
|
||||
]PBAK EQU VARTAB+4 ; ^BACKUP
|
||||
]XLEN EQU VARTAB+8 ; X-DIM LENGTH
|
||||
]YLEN EQU VARTAB+10 ; Y-DIM LENGTH
|
||||
*
|
||||
AGET162
|
||||
LDY #4 ; {2C2B} READ BYTE 4 FROM HEADER
|
||||
@@ -108,7 +108,7 @@ AGET162
|
||||
STA ]PROD ; {3C2B} CLEAR ALL PRODUCT BYTES
|
||||
STA ]PROD+1 ; {3C2B}
|
||||
STA ]PROD+2 ; {3C2B}
|
||||
STA ]PROD+3; ; {3C2B}
|
||||
STA ]PROD+3 ; {3C2B}
|
||||
LDX #$10 ; {2C2B} LOAD #16 IN COUNTER
|
||||
:SHIFTR LSR ]MLIER+1 ; {6C2B} DIVIDE MULTIPLIER HIBYTE BY 2
|
||||
ROR ]MLIER ; {6C2B} ADJUST LOBYTE
|
||||
@@ -151,22 +151,22 @@ AGET162
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
LDA ]PROD ; {3C2B} ADD PRODUCT TO ARRAY
|
||||
ADC ]ADDR ; {4C3B} ADDRESS, LOBYTES
|
||||
STA ADDR2 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPW6 ; {3C2B} STORE IN ZERO PAGE
|
||||
LDA ]PROD+1 ; {3C2B} DO THE SAME WITH HIBYTES
|
||||
ADC ]ADDR+1 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET BYTE INDEX
|
||||
*
|
||||
** COPY FROM SRC ADDR TO DEST ADDR
|
||||
*
|
||||
:CLP
|
||||
LDA (ADDR2),Y ; {6C2B} LOAD BYTE FROM ELEMENT
|
||||
LDA (ZPW6),Y ; {6C2B} LOAD BYTE FROM ELEMENT
|
||||
STA RETURN,Y ; {5C3B} AND STORE IN RETURN
|
||||
INY ; {2C1B} INCREMENT BYTE COUNTER
|
||||
CPY ]ESIZE ; {4C3B} IF != ELEMENT LENGTH,
|
||||
BNE :CLP ; {3C2B} CONTINUE LOOPING
|
||||
LDA ]ESIZE ; {3C2B} .A = ELEMENT SIZE
|
||||
STA RETLEN ; {3C2B} ALSO IN RETLEN
|
||||
LDY ADDR2+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ADDR2 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
LDY ZPW6+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ZPW6 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -27,41 +27,41 @@
|
||||
* SIZE: 114 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]RES EQU VARTAB ; MATH RESULTS
|
||||
]IDX EQU VARTAB+2 ; ELEMENT INDEX
|
||||
]ESIZE EQU VARTAB+4 ; ELEMENT SIZE
|
||||
]ALEN EQU VARTAB+5 ; NUMBER OF ELEMENTS
|
||||
]RES EQU ZPW1 ; MATH RESULTS
|
||||
]IDX EQU ZPW2 ; ELEMENT INDEX
|
||||
]ESIZE EQU ZPW3 ; ELEMENT SIZE
|
||||
]ALEN EQU ZPW4 ; NUMBER OF ELEMENTS
|
||||
*
|
||||
AGET81
|
||||
STA ADDR1 ; {3C2B} .A HOLDS ARRAY ADDRESS LOBYTE
|
||||
STX ADDR1+1 ; {3C2B} .X HOLDS ADDRESS HIBYTE
|
||||
STA ZPW6 ; {3C2B} .A HOLDS ARRAY ADDRESS LOBYTE
|
||||
STX ZPW6+1 ; {3C2B} .X HOLDS ADDRESS HIBYTE
|
||||
STY ]IDX ; {3C2B} .Y HOLDS THE INDEX
|
||||
LDA #0 ; {2C2B} CLEAR INDEX HIBYTE
|
||||
STA ]IDX+1 ; {3C2B}
|
||||
LDY #1 ; {2C2B} GET ELEMENT SIZE FROM ARRAY
|
||||
LDA (ADDR1),Y ; {6C2B} HEADER
|
||||
LDA (ZPW6),Y ; {6C2B} HEADER
|
||||
STA ]ESIZE ; {3C2B}
|
||||
STA RETLEN ; {3C2B} STORE IN RETLEN
|
||||
DEY ; {2C1B} MOVE TO BYTE 0 OF HEADER
|
||||
LDA (ADDR1),Y ; {6C2B} GET NUMBER OF ELEMENTS
|
||||
LDA (ZPW6),Y ; {6C2B} GET NUMBER OF ELEMENTS
|
||||
STA ]ALEN ; {3C2B} FROM THE ARRAY HEADER
|
||||
*
|
||||
** MULTIPLY INDEX BY ELEMENT SIZE, ADD 2
|
||||
*
|
||||
TYA ; {2C1B} Y ALREADY HOLDS ZERO
|
||||
STY SCRATCH ; {3C2B} RESET LO AND HI TO 0
|
||||
STY ZPB4 ; {3C2B} RESET LO AND HI TO 0
|
||||
BEQ :ENTLP ; {3C2B} IF ZERO, SKIP TO LOOP
|
||||
:DOADD
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
ADC ]IDX ; {4C3B} ADD INDEX LOBYTE
|
||||
TAX ; {2C1B} TEMPORARILY STORE IN .X
|
||||
TYA ; {2C1B} TRANSFER HIBYTE TO .A
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} STORE BACK INTO .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE IN .A
|
||||
:LP
|
||||
ASL ]IDX ; {6C3B} MULTIPLY INDEX BY TWO
|
||||
ROL SCRATCH ; {6C3B} ADJUST HIBYTE CARRY
|
||||
ROL ZPB4 ; {6C3B} ADJUST HIBYTE CARRY
|
||||
:ENTLP
|
||||
LSR ]ESIZE ; {6C3B} DIVIDE ELEMENT SIZE BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE IN .A, ADD AGAIN
|
||||
@@ -81,21 +81,21 @@ AGET81
|
||||
*
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
LDA ]RES ; {2C2B} LOAD RESULT FROM EARLIER
|
||||
ADC ADDR1 ; {4C3B} ADD ARRAY ADDRESS LOBYTE
|
||||
ADC ZPW6 ; {4C3B} ADD ARRAY ADDRESS LOBYTE
|
||||
STA ]RES ; {3C2B} STORE BACK IN RESULT
|
||||
LDA ]RES+1 ; {2C2B} LOAD PRIOR RESULT HIBYTE
|
||||
ADC ADDR1+1 ; {4C3B} ADD ARRAY ADDRESS HIBYTE
|
||||
ADC ZPW6+1 ; {4C3B} ADD ARRAY ADDRESS HIBYTE
|
||||
STA ]RES+1 ; {3C2B} STORE BACK IN RESULT HIBYTE
|
||||
*
|
||||
** NOW MOVE ELEMENT DATA TO RETURN LOCATION
|
||||
*
|
||||
LDY #0 ; {2C2B} RESENT INDEX
|
||||
LDA ]RES ; {2C2B} LOAD ADDRESS LOBYTE
|
||||
STA ADDR1 ; {3C2B} PUT IN ZERO PAGE POINTER
|
||||
STA ZPW6 ; {3C2B} PUT IN ZERO PAGE POINTER
|
||||
LDA ]RES+1 ; {2C2B} GET RESULT HIBYTE
|
||||
STA ADDR1+1 ; {3C2B} PUT IN ZERO PAGE POINTER
|
||||
STA ZPW6+1 ; {3C2B} PUT IN ZERO PAGE POINTER
|
||||
:LDLOOP
|
||||
LDA (ADDR1),Y ; {2C2B} LOAD BYTE FROM ELEMENT
|
||||
LDA (ZPW6),Y ; {2C2B} LOAD BYTE FROM ELEMENT
|
||||
STA RETURN,Y ; {3C2B} STORE IN RETURN
|
||||
INY ; {2C1B} INCREASE BYTE INDEX
|
||||
CPY RETLEN ; {4C2B} IF .Y <= ELEMENT SIZE
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = ARRAY ADDRESS *
|
||||
* BPAR1 = 1ST DIM INDEX *
|
||||
* BPAR2 = 2ND DIM INDEX *
|
||||
* ZPW1 = ARRAY ADDRESS *
|
||||
* ZPB1 = 1ST DIM INDEX *
|
||||
* ZPB2 = 2ND DIM INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -28,17 +28,17 @@
|
||||
* SIZE: 189 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDR EQU WPAR1 ; ARRAY ADDRESS
|
||||
]XIDX EQU BPAR1 ; 1ST DIMENSION INDEX
|
||||
]YIDX EQU BPAR2 ; 2ND DIMENSION INDEX
|
||||
]ADDR EQU ZPW1 ; ARRAY ADDRESS
|
||||
]XIDX EQU ZPB1 ; 1ST DIMENSION INDEX
|
||||
]YIDX EQU ZPB2 ; 2ND DIMENSION INDEX
|
||||
*
|
||||
]XLEN EQU VARTAB+0 ; X DIMENSION LENGTH
|
||||
]YLEN EQU VARTAB+2 ; Y DIMENSION LENGTH
|
||||
]PROD EQU VARTAB+4 ; PRODUCT
|
||||
]MLIER EQU VARTAB+8 ; MULTIPLIER
|
||||
]MCAND EQU VARTAB+10 ; MULTIPLICAND
|
||||
]ELEN EQU VARTAB+12 ; ELEMENT LENGTH
|
||||
]PBAK EQU VARTAB+14 ; PRODUCT BACKUP
|
||||
]XLEN EQU ZPW2 ; X DIMENSION LENGTH
|
||||
]YLEN EQU ZPW3 ; Y DIMENSION LENGTH
|
||||
]PROD EQU VARTAB ; PRODUCT
|
||||
]MLIER EQU ZPW4 ; MULTIPLIER
|
||||
]MCAND EQU ZPW5 ; MULTIPLICAND
|
||||
]ELEN EQU ZPW6 ; ELEMENT LENGTH
|
||||
]PBAK EQU VARTAB+4 ; PRODUCT BACKUP
|
||||
*
|
||||
AGET82
|
||||
LDY #0 ; {2C2B} RESET INDEX
|
||||
@@ -55,19 +55,19 @@ AGET82
|
||||
*
|
||||
LDA #0 ; {2C2B} RESET LOBYTE
|
||||
TAY ; {2C1B} RESET HIBYTE
|
||||
STY SCRATCH ; {3C2B} SAVE HIBYTE IN SCRATCH
|
||||
STY ZPB4 ; {3C2B} SAVE HIBYTE IN ZPB4
|
||||
BEQ :ENTLP ; {3C2B} IF ZERO, SKIP TO LOOP
|
||||
:DOADD
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
ADC ]YIDX ; {4C3B} ADD Y-INDEX
|
||||
TAX ; {2C1B} TEMPORARILY STORE IN .X
|
||||
TYA ; {2C1B} LOAD HIBYTE TO .A
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} TRANSFER BACK INTO .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE
|
||||
:LP
|
||||
ASL ]YIDX ; {6C3B} MULTIPLY Y-INDEX BY 2
|
||||
ROL SCRATCH ; {6C3B} DEAL WITH HIBYTE
|
||||
ROL ZPB4 ; {6C3B} DEAL WITH HIBYTE
|
||||
:ENTLP
|
||||
LSR ]YLEN ; {6C3B} DIVIDE Y-LENGTH BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE IN .A, ADD AGAIN
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SOURCE ADDRESS *
|
||||
* WPAR2 = ARRAY ADDRESS *
|
||||
* WPAR3 = ELEMENT INDEX *
|
||||
* ZPW1 = SOURCE ADDRESS *
|
||||
* ZPW2 = ARRAY ADDRESS *
|
||||
* ZPW3 = ELEMENT INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -21,21 +21,21 @@
|
||||
* SIZE: 109 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDRS EQU WPAR1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU WPAR2 ; ARRAY DESTINATION ADDRESS
|
||||
]AIDX EQU WPAR3 ; ELEMENT INDEX
|
||||
]ADDRS EQU ZPW1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU ZPW2 ; ARRAY DESTINATION ADDRESS
|
||||
]AIDX EQU ZPW3 ; ELEMENT INDEX
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT SIZE
|
||||
]ESIZEB EQU VARTAB+1 ; ^BACKUP
|
||||
]ASIZE EQU VARTAB+2 ; NUMBER OF ELEMENTS
|
||||
]IDX EQU VARTAB+6 ; ANOTHER INDEX
|
||||
]ESIZE EQU ZPB1 ; ELEMENT SIZE
|
||||
]ESIZEB EQU ZPB2 ; ^BACKUP
|
||||
]ASIZE EQU VARTAB ; NUMBER OF ELEMENTS
|
||||
]IDX EQU VARTAB+2 ; ANOTHER INDEX
|
||||
*
|
||||
APUT161
|
||||
LDA ]AIDX ; {3C2B}
|
||||
STA ]IDX ; {3C2B}
|
||||
LDA ]AIDX+1 ; {3C2B}
|
||||
STA ]IDX+1 ; {3C2B}
|
||||
STA SCRATCH ; {3C2B}
|
||||
STA ZPB4 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET BYTE COUNTER
|
||||
LDA (]ADDRD),Y ; {6C2B} GET NUMBER OF ELEMENTS
|
||||
STA ]ASIZE ; {3C2B} LOBYTE
|
||||
@@ -57,12 +57,12 @@ APUT161
|
||||
ADC ]AIDX ; {4C3B} ADD INDEX LOBYTE
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
TYA ; {2C1B} LOAD HIBYTE
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} HOLD BACK IN .Y
|
||||
TXA ; {2C1B} RETURN LOBYTE TO .A
|
||||
:LPA
|
||||
ASL ]AIDX ; {6C2B} MULTIPLY INDEX BY 2
|
||||
ROL SCRATCH ; {6C2B} ADJUST HIBYTE
|
||||
ROL ZPB4 ; {6C2B} ADJUST HIBYTE
|
||||
:ENTLPA
|
||||
LSR ]ESIZE ; {6C2B} DIVIDE ELEM LENGTH BY 2
|
||||
BCS :DOADD ; {3C2B} IF 1 SHIFTED TO CARRY, ADD AGAIN
|
||||
@@ -72,29 +72,29 @@ APUT161
|
||||
CLC ; {2C1B}
|
||||
LDA #3 ; {2C2B} ADD 3 TO LOBYTE
|
||||
ADC ]IDX ; {4C3B}
|
||||
STA ADDR2 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW6 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]IDX+1 ; {3C2B} ADJUST HIBYTE
|
||||
ADC #0 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
*
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
LDA ADDR2 ; {3C2B} ADD ARRAY ADDRESS
|
||||
LDA ZPW6 ; {3C2B} ADD ARRAY ADDRESS
|
||||
ADC ]ADDRD ; {4C3B} LOBYTE
|
||||
STA ADDR2 ; {3C2B} ADD ARRAY ADDRESS
|
||||
LDA ADDR2+1 ; {3C2B} HIBYTE
|
||||
STA ZPW6 ; {3C2B} ADD ARRAY ADDRESS
|
||||
LDA ZPW6+1 ; {3C2B} HIBYTE
|
||||
ADC ]ADDRD+1 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B}
|
||||
:LP
|
||||
*
|
||||
** OOPS; NEED TO CONVERT THIS TO 16 BITS
|
||||
*
|
||||
LDA (]ADDRS),Y ; {6C2B} GET BYTE FROM SOURCE
|
||||
STA (ADDR2),Y ; {3C2B} STORE IN ELEMENT
|
||||
STA (ZPW6),Y ; {3C2B} STORE IN ELEMENT
|
||||
INY ; {2C1B} INCREMENT BYTE INDEX
|
||||
CPY ]ESIZEB ; {4C3B} IF INDEX != ELEMENT LENGTH
|
||||
BNE :LP ; {3C2B} KEEP LOOPING
|
||||
LDY ADDR2+1 ; {3C2B} HIBYTE OF ELEMENT ADDRESS
|
||||
LDX ADDR2 ; {3C2B} LOBYTE
|
||||
LDY ZPW6+1 ; {3C2B} HIBYTE OF ELEMENT ADDRESS
|
||||
LDX ZPW6 ; {3C2B} LOBYTE
|
||||
LDA ]ESIZEB ; {3C2B} .A = ELEMENT SIZE
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SOURCE ADDRESS *
|
||||
* WPAR2 = ARRAY ADDRESS *
|
||||
* WPAR3 = 1ST DIM INDEX *
|
||||
* ADDR1 = 2ND DIM INDEX *
|
||||
* ZPW1 = SOURCE ADDRESS *
|
||||
* ZPW2 = ARRAY ADDRESS *
|
||||
* ZPW3 = 1ST DIM INDEX *
|
||||
* ZPW4 = 2ND DIM INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -27,17 +27,17 @@
|
||||
* SIZE: 220 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDRS EQU WPAR1 ; VALUE SOURCE ADDRESS
|
||||
]ADDRD EQU WPAR2 ; ARRAY ADDRESS
|
||||
]XIDX EQU WPAR3 ; FIRST DIMENSION INDEX
|
||||
]YIDX EQU ADDR1 ; SECOND DIMENSION INDEX
|
||||
]ADDRS EQU ZPW1 ; VALUE SOURCE ADDRESS
|
||||
]ADDRD EQU ZPW2 ; ARRAY ADDRESS
|
||||
]XIDX EQU ZPW3 ; FIRST DIMENSION INDEX
|
||||
]YIDX EQU ZPW4 ; SECOND DIMENSION INDEX
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT LENGTH
|
||||
]MCAND EQU VARTAB+6 ; MULTIPLICAND
|
||||
]MLIER EQU VARTAB+8 ; MULTIPLIER
|
||||
]PBAK EQU VARTAB+10 ; PRODUCT BACKUP
|
||||
]XLEN EQU VARTAB+12 ; X-DIMENSION LENGTH
|
||||
]YLEN EQU VARTAB+14 ; Y-DIMENSION LENGTH
|
||||
]ESIZE EQU ZPB1 ; ELEMENT LENGTH
|
||||
]MCAND EQU ZPW5 ; MULTIPLICAND
|
||||
]MLIER EQU VARTAB ; MULTIPLIER
|
||||
]PBAK EQU VARTAB+4 ; PRODUCT BACKUP
|
||||
]XLEN EQU VARTAB+8 ; X-DIMENSION LENGTH
|
||||
]YLEN EQU VARTAB+12 ; Y-DIMENSION LENGTH
|
||||
]PROD EQU VARTAB+16 ; PRODUCT OF MULTIPLICATION
|
||||
*
|
||||
APUT162
|
||||
@@ -153,18 +153,18 @@ APUT162
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
LDA ]PROD ; {3C2B} ADD ARRAY ADDRESS
|
||||
ADC ]ADDRD ; {4C3B} TO PRODUCT TO GET
|
||||
STA ADDR2 ; {3C2B} ELEMENT ADDRESS; STORE
|
||||
STA ZPW6 ; {3C2B} ELEMENT ADDRESS; STORE
|
||||
LDA ]PROD+1 ; {3C2B} ADDRESS ON ZERO PAGE
|
||||
ADC ]ADDRD+1 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET BYTE INDEX
|
||||
:CLP
|
||||
LDA (]ADDRS),Y ; {6C2B} LOAD BYTE FROM SOURCE
|
||||
STA (ADDR2),Y ; {6C2B} STORE AT ELEMENT ADDRESS
|
||||
STA (ZPW6),Y ; {6C2B} STORE AT ELEMENT ADDRESS
|
||||
INY ; {2C1B} INCREASE BYTE INDEX
|
||||
CPY ]ESIZE ; {4C3B} IF != ELEMENT LENGTH, LOOP
|
||||
BNE :CLP ; {3C2B}
|
||||
LDY ADDR2+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ADDR2 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
LDY ZPW6+1 ; {3C2B} .Y = ELEMENT ADDRESS HIBYTE
|
||||
LDX ZPW6 ; {3C2B} .X = ELEMENT ADDRESS LOBYTE
|
||||
LDA ]ESIZE ; {3C2B} .A = ELEMENT LENGTH
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SOURCE ADDRESS *
|
||||
* WPAR2 = DESTINATION ADDRESS *
|
||||
* BPAR1 = ARRAY INDEX *
|
||||
* ZPW1 = SOURCE ADDRESS *
|
||||
* ZPW2 = DESTINATION ADDRESS *
|
||||
* ZPB1 = ARRAY INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -26,16 +26,16 @@
|
||||
* SIZE: 100 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDRS EQU WPAR1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU WPAR2 ; DESTINATION
|
||||
]AIDX EQU BPAR1 ; ARRAY INDEX
|
||||
]SCRATCH EQU ADDR1 ; ZEROED HIBYTE
|
||||
]ADDRS EQU ZPW1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU ZPW2 ; DESTINATION
|
||||
]AIDX EQU ZPB1 ; ARRAY INDEX
|
||||
]SCRATCH EQU ZPW3 ; ZEROED HIBYTE
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT SIZE
|
||||
]ESIZEBK EQU VARTAB+1 ; ^BACKUP
|
||||
]ASIZE EQU VARTAB+2 ; # OF ELEMENTS
|
||||
]IDX EQU VARTAB+5 ; INDEX
|
||||
]RES EQU VARTAB+7 ; MULTIPLICATION RESULT
|
||||
]ESIZE EQU ZPB2 ; ELEMENT SIZE
|
||||
]ESIZEBK EQU ZPB3 ; ^BACKUP
|
||||
]ASIZE EQU ZPW4 ; # OF ELEMENTS
|
||||
]IDX EQU ZPW5 ; INDEX
|
||||
]RES EQU ZPW6 ; MULTIPLICATION RESULT
|
||||
*
|
||||
APUT81
|
||||
LDA ]AIDX ; {2C2B} STORE IN 2 LOCATIONS
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SOURCE ADDRESS *
|
||||
* WPAR2 = ARRAY ADDRESS *
|
||||
* BPAR1 = 1ST DIM INDEX *
|
||||
* BPAR2 = 2ND DIM INDEX *
|
||||
* ZPW1 = SOURCE ADDRESS *
|
||||
* ZPW2 = ARRAY ADDRESS *
|
||||
* ZPB1 = 1ST DIM INDEX *
|
||||
* ZPB2 = 2ND DIM INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -19,18 +19,18 @@
|
||||
* SIZE: 188 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADDRS EQU WPAR1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU WPAR2 ; ARRAY ADDRESS
|
||||
]XIDX EQU BPAR1 ; X INDEX
|
||||
]YIDX EQU BPAR2 ; Y INDEX
|
||||
]ADDRS EQU ZPW1 ; SOURCE ADDRESS
|
||||
]ADDRD EQU ZPW2 ; ARRAY ADDRESS
|
||||
]XIDX EQU ZPB1 ; X INDEX
|
||||
]YIDX EQU ZPB2 ; Y INDEX
|
||||
*
|
||||
]ESIZE EQU VARTAB ; ELEMENT LENGTH
|
||||
]MCAND EQU VARTAB+1 ; MULTIPLICAND
|
||||
]MLIER EQU VARTAB+3 ; MULTIPLIER
|
||||
]PROD EQU VARTAB+5 ; PRODUCT
|
||||
]XLEN EQU VARTAB+9 ; ARRAY X-LENGTH
|
||||
]YLEN EQU VARTAB+13 ; ARRAY Y-LENGTH
|
||||
]PBAK EQU VARTAB+15 ; PRODUCT BACKUP
|
||||
]ESIZE EQU ZPB3 ; ELEMENT LENGTH
|
||||
]MCAND EQU ZPW3 ; MULTIPLICAND
|
||||
]MLIER EQU ZPW4 ; MULTIPLIER
|
||||
]PROD EQU VARTAB ; PRODUCT
|
||||
]XLEN EQU ZPW5 ; ARRAY X-LENGTH
|
||||
]YLEN EQU VARTAB+4 ; ARRAY Y-LENGTH
|
||||
]PBAK EQU VARTAB+8 ; PRODUCT BACKUP
|
||||
*
|
||||
APUT82
|
||||
LDY #0 ; {2C2B} RESET INDEX
|
||||
@@ -47,19 +47,19 @@ APUT82
|
||||
*
|
||||
LDA #0 ; {2C2B} RESET LOBYTE
|
||||
TAY ; {2C1B} RESET HIBYTE
|
||||
STY SCRATCH ; {3C2B} SAVE HIBYTE IN SCRATCH
|
||||
STY ZPB4 ; {3C2B} SAVE HIBYTE IN ZPB4
|
||||
BEQ :ENTLP ; {3C2B} IF ZERO, SKIP TO LOOP
|
||||
:DOADD
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
ADC ]YIDX ; {4C3B} ADD Y-INDEX
|
||||
TAX ; {2C1B} STORE IN .X
|
||||
TYA ; {2C1B} LOAD HIBYTE
|
||||
ADC SCRATCH ; {4C3B} ADD HIBYTE
|
||||
ADC ZPB4 ; {4C3B} ADD HIBYTE
|
||||
TAY ; {2C1B} STORE IN .Y
|
||||
TXA ; {2C1B} RELOAD LOBYTE
|
||||
:LP
|
||||
ASL ]YIDX ; {6C3B} MULTIPLY Y-INDEX BY 2
|
||||
ROL SCRATCH ; {6C3B} DEAL WITH HIBYTE
|
||||
ROL ZPB4 ; {6C3B} DEAL WITH HIBYTE
|
||||
:ENTLP
|
||||
LSR ]YLEN ; {6C3B} DIVIDE Y-LENGTH BY 2
|
||||
BCS :DOADD ; {3C2B} IF >= LOBYTE, ADD AGAIN
|
||||
@@ -128,19 +128,19 @@ APUT82
|
||||
STA ]PROD+1 ; {3C2B} STORE HIBYTE
|
||||
LDX ]PROD ; {3C2B} PUT ELEMENT ADDRESS LOBYTE IN .X
|
||||
LDY ]PROD+1 ; {3C2B} PUT HIBYTE IN Y
|
||||
STX ADDR2 ; {3C2B} STORE IN ZERO PAGE
|
||||
STY ADDR2+1 ; {3C2B}
|
||||
STX ZPW6 ; {3C2B} STORE IN ZERO PAGE
|
||||
STY ZPW6+1 ; {3C2B}
|
||||
LDY #0 ; {2C2B} RESET INDEX
|
||||
*
|
||||
** COPY FROM SRC ADDR TO DEST ADDR
|
||||
*
|
||||
:CLP
|
||||
LDA (]ADDRS),Y ; {6C2B} GET BYTE FROM SOURCE
|
||||
STA (ADDR2),Y ; {3C2B} STORE IN ELEMENT
|
||||
STA (ZPW6),Y ; {3C2B} STORE IN ELEMENT
|
||||
INY ; {2C1B} INCREASE INDEX
|
||||
CPY ]ESIZE ; {4C3B} IF < ELEMENT SIZE,
|
||||
BNE :CLP ; {3C2B} CONTINUE COPYING
|
||||
LDX ADDR2 ; {3C2B} PUT ELEMENT LOBYTE IN .X
|
||||
LDY ADDR2+1 ; {3C2B} PUT HIBYTE IN .Y
|
||||
LDX ZPW6 ; {3C2B} PUT ELEMENT LOBYTE IN .X
|
||||
LDY ZPW6+1 ; {3C2B} PUT HIBYTE IN .Y
|
||||
LDA ]ESIZE ; {3C2B} PUT ELEMENT SIZE IN .A
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 02-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 16-JUL-2019 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 02-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 22-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
* NOVICE, EVEN THOUGH THEY *
|
||||
* LOOK SIMPLE ENOUGH. *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* AUTHOR: THE INTERNET *
|
||||
* (COPIED FROM OMEGAMATRIX) *
|
||||
* *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 29-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -84,14 +84,14 @@ D8BY2 MAC
|
||||
D8BY3 MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
CLC ; {2C2B} CLEAR THE CARRY
|
||||
STA BPAR1 ; {3C2B} STORE ORIG NUM IN Z PAGE
|
||||
STA ZPB1 ; {3C2B} STORE ORIG NUM IN Z PAGE
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
ADC #21 ; {2C2B} ADD 21 AS A CORRECTION
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL VALUE TO NEW
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL VALUE TO NEW
|
||||
ROR ; {2C1B} ROTATE A TO NEXT BIT
|
||||
LSR ; {2C1B} SHIFT RIGHT TO DIVIDE BY 2
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
ROR ; {2C1B} ROTATE .A TO NEXT BIT
|
||||
LSR ; {2C1B} DIVIDE BY 2
|
||||
<<<
|
||||
@@ -130,16 +130,16 @@ D8BY4 MAC
|
||||
*
|
||||
D8BY5 MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B} STORE ORIG ON ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE ORIG ON ZERO PAGE
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC #13 ; {2C2B} ADD 13 AS A CORRECTIVE
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
@@ -162,16 +162,16 @@ D8BY6 MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
CLC ; {2C1B}
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
STA BPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE IN ZERO PAGE
|
||||
LSR ; {2C1B} DIVIDE AGAIN
|
||||
LSR ; {2C1B} DIVIDE AGAIN
|
||||
ADC BPAR1 ; {3C2B} ADD VALUE/2
|
||||
ADC ZPB1 ; {3C2B} ADD VALUE/2
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD VALUE/2
|
||||
ADC ZPB1 ; {3C2B} ADD VALUE/2
|
||||
ROR ; {2C1B} ROTATE RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD VALUE/2
|
||||
ADC ZPB1 ; {3C2B} ADD VALUE/2
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
<<<
|
||||
@@ -192,15 +192,15 @@ D8BY6 MAC
|
||||
D8BY7 MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
STA BPAR1 ; {3C2B} STORE NUMBER IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE NUMBER IN ZERO PAGE
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
LSR ; {2C1B} AGAIN
|
||||
LSR ; {2C1B} AGAIN
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
@@ -242,15 +242,15 @@ D8BY8 MAC
|
||||
D8BY9 MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
STA BPAR1 ; {3C2B} STORE .A IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE .A IN ZERO PAGE
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
LSR ; {2C1B} AGAIN
|
||||
LSR ; {2C1B} AGAIN
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
@@ -274,15 +274,15 @@ D8BY10 MAC
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
LDA ]1 ; {4C3B}
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
STA BPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE IN ZERO PAGE
|
||||
LSR ; {2C1B} DIVIDE .A BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL/2
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL/2
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL/2
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL/2
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL/2
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL/2
|
||||
ROR ; {2C1B} ROTATE BITS RIGHT
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
LSR ; {2C1B} DIVIDE BY TWO
|
||||
|
||||
+105
-105
@@ -24,7 +24,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 25-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -59,11 +59,11 @@
|
||||
MBY2 MAC
|
||||
LDA ]1 ; {4C3B} LOAD LOW BYTE IN .A
|
||||
ASL ; {2C1B} MULTIPLY IT BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} ADJUST FOR CARRY AND MULTIPLY
|
||||
TAX ; {2C1B} TRANSFER HIGH BYTE TO .X REGISTER
|
||||
LDA WPAR1 ; {3C2B} HOLD LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -84,21 +84,21 @@ MBY2 MAC
|
||||
*
|
||||
MBY3 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE IT ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE IT ON ZERO PAGE
|
||||
ASL ; {2C1B} NOW MULTIPLY BY TWO
|
||||
STA WPAR2 ; {3C2B} STORE IN 2ND ZERO PAGE LOC
|
||||
STA ZPW2 ; {3C2B} STORE IN 2ND ZERO PAGE LOC
|
||||
LDA ]1+1 ; {4C3B} GET NUMBER HIGH BYTE
|
||||
STA WPAR1+1 ; {3C2B} STORE HIGH BYTE ON ZERO PAGE
|
||||
STA ZPW1+1 ; {3C2B} STORE HIGH BYTE ON ZERO PAGE
|
||||
ROL ; {2C1B} ADJUST FOR CARRY AND MULTIPLY
|
||||
STA WPAR2+1 ; {3C2B} STORE HIGH BYTE IN 2ND LOCATION
|
||||
LDA WPAR1 ; {4C3B} LOAD ORIGINAL NUMBER IN .A
|
||||
STA ZPW2+1 ; {3C2B} STORE HIGH BYTE IN 2ND LOCATION
|
||||
LDA ZPW1 ; {4C3B} LOAD ORIGINAL NUMBER IN .A
|
||||
CLC ; {2C2B} CLEAR CARRY
|
||||
ADC WPAR2 ; {3C2B} ADD SECOND NUMBER TO ORIGINAL
|
||||
STA WPAR1 ; {3C2B} STORE LOW BYTE IN ZERO PAGE
|
||||
LDA WPAR1+1 ; {3C2B} LOAD NUMBER HIGH BYTE IN .A
|
||||
ADC WPAR2+1 ; {3C2B} ADD 2ND VALUE HIGH BYTE TO IT
|
||||
ADC ZPW2 ; {3C2B} ADD SECOND NUMBER TO ORIGINAL
|
||||
STA ZPW1 ; {3C2B} STORE LOW BYTE IN ZERO PAGE
|
||||
LDA ZPW1+1 ; {3C2B} LOAD NUMBER HIGH BYTE IN .A
|
||||
ADC ZPW2+1 ; {3C2B} ADD 2ND VALUE HIGH BYTE TO IT
|
||||
TAX ; {2C1B} TRANSFER NEW HIGH BYTE TO .X
|
||||
LDA WPAR1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -118,17 +118,17 @@ MBY3 MAC
|
||||
MBY4 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE TO .A
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA BPAR1 ; {3C2B} STORE LOW BYTE TO ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE LOW BYTE TO ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} ADJUST FOR CARRY AND MUL
|
||||
TAX ; {2C1B} TRANSFER HIGH BYTE TO .X
|
||||
LDA BPAR1 ; {4C3B} RELOAD LOW BYTE
|
||||
LDA ZPB1 ; {4C3B} RELOAD LOW BYTE
|
||||
ASL ; {2C1B} MULTIPLY AGAIN
|
||||
STA BPAR1 ; {4C3B} STORE BACK ON ZERO PAGE
|
||||
STA ZPB1 ; {4C3B} STORE BACK ON ZERO PAGE
|
||||
TXA ; {2C1B} TRANSFER HIGH BYTE BACK TO .A
|
||||
ROL ; {2C1B} ADJUST FOR CARRY AND MULTIPLY
|
||||
TAX ; {2C1B} TRANSFER HIGH BYTE BACK TO .X
|
||||
LDA BPAR1 ; {4C3B} RELOAD LOW BYTE IN .A
|
||||
LDA ZPB1 ; {4C3B} RELOAD LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -150,20 +150,20 @@ MBY4 MAC
|
||||
MBY5 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MULTIPLY
|
||||
STA WPAR1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
ASL WPAR1 ; {2C1B} MULTIPLY LOW BYTE BY TWO AGAIN
|
||||
ROL WPAR1+1 ; {2C1B} AND HIGH BYTE AGAIN
|
||||
LDA WPAR1 ; {4C3B} LOAD LOW BYTE INTO .A
|
||||
STA ZPW1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
ASL ZPW1 ; {2C1B} MULTIPLY LOW BYTE BY TWO AGAIN
|
||||
ROL ZPW1+1 ; {2C1B} AND HIGH BYTE AGAIN
|
||||
LDA ZPW1 ; {4C3B} LOAD LOW BYTE INTO .A
|
||||
CLC ; {2C1B} CLEAR THE CARRY
|
||||
ADC ]1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ADC ]1+1 ; {4C3B} ADD ORIGINAL HIGH BYTE
|
||||
TAX ; {2C1B} TRANSFER HIGH BYTE TO .X
|
||||
LDA WPAR1 ; {3C2B} LOAD LOW BYTE BACK IN .A
|
||||
LDA ZPW1 ; {3C2B} LOAD LOW BYTE BACK IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -185,24 +185,24 @@ MBY5 MAC
|
||||
MBY6 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD HIGH BYTE
|
||||
ROL ; {2C1B} ADJUST CARRY AND MULTIPLY
|
||||
STA WPAR1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA WPAR1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
STA ZPW1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ZPW1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
CLC ; {2C1B} CLEAR THE CARRY
|
||||
ADC ]1 ; {4C3B} ADD ORIGINAL LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE BACK ON ZERO PAGE
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE AGAIN
|
||||
STA ZPW1 ; {3C2B} STORE BACK ON ZERO PAGE
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE AGAIN
|
||||
ADC ]1+1 ; {4C3B} ADD ORIGINAL HIGH BYTE
|
||||
STA WPAR1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA WPAR1 ; {3C2B} LOAD LOW BYTE AGAIN
|
||||
STA ZPW1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ZPW1 ; {3C2B} LOAD LOW BYTE AGAIN
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MULTIPLY
|
||||
TAX ; {2C1B} HOLD HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} RELOAD LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -224,29 +224,29 @@ MBY6 MAC
|
||||
MBY7 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE IN .A
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA WPAR2 ; {3C2B} STORE IN 2ND ZP LOCATION
|
||||
STA ZPW1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPW2 ; {3C2B} STORE IN 2ND ZP LOCATION
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MULTIPLY
|
||||
STA WPAR1+1 ; {3C2B} STORE IN 1ST ZP HIGH BYTE LOC
|
||||
STA WPAR2+1 ; {3C2B} STORE IN 2ND ZP HIGH BYTE LOC
|
||||
ASL WPAR1 ; {2C1B} MULTIPLY 1ST LOC BY TWO
|
||||
ROL WPAR1+1 ; {2C1B} ALSO HIGH BYTE
|
||||
STA ZPW1+1 ; {3C2B} STORE IN 1ST ZP HIGH BYTE LOC
|
||||
STA ZPW2+1 ; {3C2B} STORE IN 2ND ZP HIGH BYTE LOC
|
||||
ASL ZPW1 ; {2C1B} MULTIPLY 1ST LOC BY TWO
|
||||
ROL ZPW1+1 ; {2C1B} ALSO HIGH BYTE
|
||||
LDA ]1 ; {4C3B} LOAD ORIGINAL NUMBER
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC WPAR1 ; {3C2B} ADD FIRST LOC TO NUMBER LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE IN 1ST LOC
|
||||
ADC ZPW1 ; {3C2B} ADD FIRST LOC TO NUMBER LOW BYTE
|
||||
STA ZPW1 ; {3C2B} STORE IN 1ST LOC
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ADC WPAR1+1 ; {3C2B} ADD 1ST LOC HIGH BYTE
|
||||
STA WPAR1+1 ; {3C2B} AND STORE IN 1ST LOC
|
||||
LDA WPAR1 ; {3C2B} RELOAD NEW LOW BYTE
|
||||
ADC ZPW1+1 ; {3C2B} ADD 1ST LOC HIGH BYTE
|
||||
STA ZPW1+1 ; {3C2B} AND STORE IN 1ST LOC
|
||||
LDA ZPW1 ; {3C2B} RELOAD NEW LOW BYTE
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC WPAR2 ; {3C2B} ADD SECOND LOC LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE IN 1ST LOC LOW BYTE
|
||||
LDA WPAR1+1 ; {3C2B} LOAD 1ST LOC HIGH BYTE
|
||||
ADC WPAR2+1 ; {3C2B} ADD 2ND LOC HIGH BYTE
|
||||
ADC ZPW2 ; {3C2B} ADD SECOND LOC LOW BYTE
|
||||
STA ZPW1 ; {3C2B} STORE IN 1ST LOC LOW BYTE
|
||||
LDA ZPW1+1 ; {3C2B} LOAD 1ST LOC HIGH BYTE
|
||||
ADC ZPW2+1 ; {3C2B} ADD 2ND LOC HIGH BYTE
|
||||
TAX ; {2C1B} HOLD FINAL HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -266,17 +266,17 @@ MBY7 MAC
|
||||
MBY8 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE IN ZP LOC
|
||||
STA ZPW1 ; {3C2B} STORE IN ZP LOC
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MUL BY 2
|
||||
STA WPAR1+1 ; {3C2B} STORE IN ZP LOC
|
||||
ASL WPAR1 ; {2C1B} MULTIPLY LOW BYTE BY 2
|
||||
ROL WPAR1+1 ; {2C1B} APPLY CARRY, MUL HIGH BY 2
|
||||
ASL WPAR1 ; {2C1B} MUL LOW BYTE BY 2
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
STA ZPW1+1 ; {3C2B} STORE IN ZP LOC
|
||||
ASL ZPW1 ; {2C1B} MULTIPLY LOW BYTE BY 2
|
||||
ROL ZPW1+1 ; {2C1B} APPLY CARRY, MUL HIGH BY 2
|
||||
ASL ZPW1 ; {2C1B} MUL LOW BYTE BY 2
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ROL ; {2C1B} APPLY CARRY AND MUL BY 2
|
||||
TAX ; {2C1B} HOLD HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} HOLD LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -298,22 +298,22 @@ MBY8 MAC
|
||||
MBY9 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MUL BY 2
|
||||
STA WPAR1+1 ; {3C2B} STORE ON ZP
|
||||
ASL WPAR1 ; {5C2B} MUL LOW BYTE BY 2
|
||||
ROL WPAR1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
ASL WPAR1 ; {5C2B} MUL LOW BY 2
|
||||
ROL WPAR1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
LDA WPAR1 ; {3C2B} LOAD LOW BYTE
|
||||
STA ZPW1+1 ; {3C2B} STORE ON ZP
|
||||
ASL ZPW1 ; {5C2B} MUL LOW BYTE BY 2
|
||||
ROL ZPW1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
ASL ZPW1 ; {5C2B} MUL LOW BY 2
|
||||
ROL ZPW1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
LDA ZPW1 ; {3C2B} LOAD LOW BYTE
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC ]1 ; {4C3B} ADD ORIGINAL VALUE
|
||||
STA WPAR1 ; {3C2B} STORE ON ZP
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZP
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE
|
||||
ADC ]1+1 ; {4C3B} ADD ORIGINAL HIGH BYTE
|
||||
TAX ; {2C1B} HOLD FINAL HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -335,24 +335,24 @@ MBY9 MAC
|
||||
MBY10 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER LOW BYTE
|
||||
ASL ; {2C1B} MUL LOW BYTE BY 2
|
||||
STA WPAR1 ; {3C2B} STORE ON ZERO PAGE
|
||||
STA ZPW1 ; {3C2B} STORE ON ZERO PAGE
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} APPLY CARRY AND MUL BY 2
|
||||
STA WPAR1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
ASL WPAR1 ; {5C2B} MUL LOW BY 2
|
||||
ROL WPAR1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
STA ZPW1+1 ; {3C2B} STORE ON ZERO PAGE
|
||||
ASL ZPW1 ; {5C2B} MUL LOW BY 2
|
||||
ROL ZPW1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
LDA ]1 ; {4C3B} LOAD ORIGINAL LOW BYTE
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC WPAR1 ; {3C2B} ADD ZP LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE BACK ON ZP
|
||||
ADC ZPW1 ; {3C2B} ADD ZP LOW BYTE
|
||||
STA ZPW1 ; {3C2B} STORE BACK ON ZP
|
||||
LDA ]1+1 ; {4C3B} LOAD ORIGINAL HIGH BYTE
|
||||
ADC WPAR1+1 ; {3C2B} ADD ZP HIGH BYTE
|
||||
STA WPAR1+1 ; {3C2B} STORE BACK ON ZP
|
||||
ASL WPAR1 ; {5C2B} MULTIPLY NEW VAL LOW BY 2
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ADC ZPW1+1 ; {3C2B} ADD ZP HIGH BYTE
|
||||
STA ZPW1+1 ; {3C2B} STORE BACK ON ZP
|
||||
ASL ZPW1 ; {5C2B} MULTIPLY NEW VAL LOW BY 2
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ROL ; {2C1B} CARRY AND MUL HIGH BY 2
|
||||
TAX ; {2C1B} HOLD FINAL HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -374,42 +374,42 @@ MBY10 MAC
|
||||
MBY1H MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
ASL ; {2C1B} MUL LOW BYTE BY 2
|
||||
STA WPAR2 ; {3C2B} STORE IN ZP LOC 1
|
||||
STA ZPW2 ; {3C2B} STORE IN ZP LOC 1
|
||||
LDA ]1+1 ; {4C3B} LOAD NUMBER HIGH BYTE
|
||||
ROL ; {2C1B} CARRY AND MUL BY 2
|
||||
STA WPAR2+1 ; {3C2B} STORE IN ZP LOC 1
|
||||
ASL WPAR2 ; {5C2B} MUL ZP LOW BYTE BY 2
|
||||
ROL WPAR2+1 ; {5C2B} CARRY AND MUL ZP HIGH BY 2
|
||||
ASL WPAR2 ; {5C2B} MUL LOW BY 2
|
||||
ROL WPAR2+1 ; {5C2B} MUL HIGH BY 2
|
||||
LDA WPAR2 ; {3C2B} LOAD LOW BYTE IN .A
|
||||
STA ZPW2+1 ; {3C2B} STORE IN ZP LOC 1
|
||||
ASL ZPW2 ; {5C2B} MUL ZP LOW BYTE BY 2
|
||||
ROL ZPW2+1 ; {5C2B} CARRY AND MUL ZP HIGH BY 2
|
||||
ASL ZPW2 ; {5C2B} MUL LOW BY 2
|
||||
ROL ZPW2+1 ; {5C2B} MUL HIGH BY 2
|
||||
LDA ZPW2 ; {3C2B} LOAD LOW BYTE IN .A
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE IN 2ND ZP LOC
|
||||
LDA WPAR2+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
STA ZPW1 ; {3C2B} STORE IN 2ND ZP LOC
|
||||
LDA ZPW2+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ROL ; {2C1B} CARRY AND MUL BY 2
|
||||
STA WPAR1+1 ; {3C2B} STORE IN 2ND ZP LOC
|
||||
STA ZPW1+1 ; {3C2B} STORE IN 2ND ZP LOC
|
||||
LDA ]1 ; {4C3B} LOAD ORIGINAL VALUE
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC WPAR1 ; {3C2B} ADD LOW BYTE ZP LOC 1
|
||||
STA WPAR1 ; {3C2B} STORE AT ZP LOC 1
|
||||
ADC ZPW1 ; {3C2B} ADD LOW BYTE ZP LOC 1
|
||||
STA ZPW1 ; {3C2B} STORE AT ZP LOC 1
|
||||
LDA ]1+1 ; {4C3B} LOAD ORIGINAL HIGH BYTE
|
||||
ADC WPAR1+1 ; {3C2B} ADD ZP LOC HIGH
|
||||
STA WPAR1+1 ; {3C2B} STORE BACK AT ZP LOC 1 HIGH
|
||||
LDA WPAR1 ; {3C2B} LOAD LOC 1 LOW BYTE IN .A
|
||||
ADC ZPW1+1 ; {3C2B} ADD ZP LOC HIGH
|
||||
STA ZPW1+1 ; {3C2B} STORE BACK AT ZP LOC 1 HIGH
|
||||
LDA ZPW1 ; {3C2B} LOAD LOC 1 LOW BYTE IN .A
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC WPAR2 ; {3C2B} ADD 2ND ZP LOC LOW BYTE
|
||||
STA WPAR1 ; {3C2B} STORE IN LOC 1 LOW
|
||||
LDA WPAR1+1 ; {3C2B} LOAD ZP LOC 1 HIGH BYTE
|
||||
ADC WPAR2+1 ; {3C2B} ADD 2ND LOC HIGH BYTE
|
||||
STA WPAR1+1 ; {3C2B} STORE BACK IN ZP LOC 1 HIGH
|
||||
ASL WPAR1 ; {5C2B} MULTIPLY THAT VALUE LOW BY 2
|
||||
ROL WPAR1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
LDA WPAR1 ; {3C2B} LOAD LOW BYTE IN .A
|
||||
ADC ZPW2 ; {3C2B} ADD 2ND ZP LOC LOW BYTE
|
||||
STA ZPW1 ; {3C2B} STORE IN LOC 1 LOW
|
||||
LDA ZPW1+1 ; {3C2B} LOAD ZP LOC 1 HIGH BYTE
|
||||
ADC ZPW2+1 ; {3C2B} ADD 2ND LOC HIGH BYTE
|
||||
STA ZPW1+1 ; {3C2B} STORE BACK IN ZP LOC 1 HIGH
|
||||
ASL ZPW1 ; {5C2B} MULTIPLY THAT VALUE LOW BY 2
|
||||
ROL ZPW1+1 ; {5C2B} CARRY AND MUL HIGH BY 2
|
||||
LDA ZPW1 ; {3C2B} LOAD LOW BYTE IN .A
|
||||
ASL ; {2C1B} MULTIPLY AGAIN BY TWO
|
||||
STA WPAR1 ; {3C2B} STORE IN ZP LOC 1 LOW
|
||||
LDA WPAR1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
STA ZPW1 ; {3C2B} STORE IN ZP LOC 1 LOW
|
||||
LDA ZPW1+1 ; {3C2B} LOAD HIGH BYTE IN .A
|
||||
ROL ; {2C1B} CARRY AND MUL HIGH BY 2
|
||||
TAX ; {2C1B} HOLD FINAL HIGH BYTE IN .X
|
||||
LDA WPAR1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
LDA ZPW1 ; {3C2B} HOLD FINAL LOW BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 29-MAR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -76,10 +76,10 @@ M8BY2 MAC
|
||||
*
|
||||
M8BY3 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER
|
||||
STA BPAR1 ; {3C2B} BACKUP IN BPAR1
|
||||
STA ZPB1 ; {3C2B} BACKUP IN ZPB1
|
||||
ASL ; {2C1B} MUL 1ST ARGUMENT BY 2
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {2C2B} ADD ORIGINAL NUMBER
|
||||
ADC ZPB1 ; {2C2B} ADD ORIGINAL NUMBER
|
||||
; ANSWER HELD IN .A REGISTER
|
||||
<<<
|
||||
*
|
||||
@@ -122,11 +122,11 @@ M8BY4 MAC
|
||||
*
|
||||
M8BY5 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
STA BPAR1 ; {3C2B} STORE ORIG VAL IN BPAR1
|
||||
STA ZPB1 ; {3C2B} STORE ORIG VAL IN ZPB1
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
ASL ; {2C1B} MUL BY TWO (SO, FOUR)
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {2C2B} ADD ORIGINAL VALUE TO NEW
|
||||
ADC ZPB1 ; {2C2B} ADD ORIGINAL VALUE TO NEW
|
||||
; ANSWER HELD IN .A
|
||||
<<<
|
||||
*
|
||||
@@ -147,16 +147,16 @@ M8BY5 MAC
|
||||
*
|
||||
M8BY6 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
STA BPAR1 ; {3C2B} STORE ORIG IN BPAR1
|
||||
STA ZPB1 ; {3C2B} STORE ORIG IN ZPB1
|
||||
ASL ; {2C1B} MULTIPLY .A BY TWO
|
||||
ASL ; {2C1B} DO AGAIN TO MUL BY FOUR
|
||||
TAX ; {2C1B} TRANSFER ANSWER INTO .X
|
||||
LDA BPAR1 ; {3C2B} RELOAD ORIGINAL IN .A
|
||||
LDA ZPB1 ; {3C2B} RELOAD ORIGINAL IN .A
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA BPAR1 ; {3C2B} STORE BACK INTO BPAR1
|
||||
STA ZPB1 ; {3C2B} STORE BACK INTO ZPB1
|
||||
TXA ; {2C1B} TRANSFER .X BACK TO .A
|
||||
CLC ; {2C1B} CLEAR THE CARRY
|
||||
ADC BPAR1 ; {2C3B} ADD SECOND ARGUMENT ANSWER
|
||||
ADC ZPB1 ; {2C3B} ADD SECOND ARGUMENT ANSWER
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -176,18 +176,18 @@ M8BY6 MAC
|
||||
*
|
||||
M8BY7 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
STA BPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE IN ZERO PAGE
|
||||
ASL ; {2C1B} MULTIPLY NUM BY TWO
|
||||
ASL ; {2C1B} AND AGAIN, SO BY FOUR
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER TO VALUE
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER TO VALUE
|
||||
TAX ; {2C1B} TEMPORARY TRANSFER TO .X
|
||||
LDA BPAR1 ; {3C2B} LOAD ORIGINAL NUMBER IN .A
|
||||
LDA ZPB1 ; {3C2B} LOAD ORIGINAL NUMBER IN .A
|
||||
ASL ; {2C1B} MULTIPLY BY TWO
|
||||
STA BPAR1 ; {3C2B} STORE IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE IN ZERO PAGE
|
||||
TXA ; {2C1B} TRANSFER .X BACK INTO .A
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {3C2B} ADD OTHER ARGUMENT SAVED IN MEM
|
||||
ADC ZPB1 ; {3C2B} ADD OTHER ARGUMENT SAVED IN MEM
|
||||
; ANSWER IS HELD IN .A REGISTER
|
||||
<<<
|
||||
*
|
||||
@@ -231,12 +231,12 @@ M8BY8 MAC
|
||||
*
|
||||
M8BY9 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
STA BPAR1 ; {3C2B} TEMPORARY HOLD IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} TEMPORARY HOLD IN ZERO PAGE
|
||||
ASL ; {2C1B} MULTIPLY BY 2 (2)
|
||||
ASL ; {2C1B} MULTIPLY BY 2 (4)
|
||||
ASL ; {2C1B} MULTIPLY BY 2 (8)
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL VALUE
|
||||
; ANSWER IS HELD IN .A REGISTER
|
||||
<<<
|
||||
*
|
||||
@@ -257,11 +257,11 @@ M8BY9 MAC
|
||||
*
|
||||
M8BY10 MAC
|
||||
LDA ]1 ; {4C3B} LOAD NUMBER INTO .A
|
||||
STA BPAR1 ; {3C2B} STORE IT IN ZERO PAGE
|
||||
STA ZPB1 ; {3C2B} STORE IT IN ZERO PAGE
|
||||
ASL ; {2C1B} MULTIPLY BY TWO (2)
|
||||
ASL ; {2C1B} MULTIPLY BY TWO (4)
|
||||
CLC ; {2C1B} CLEAR CARRY
|
||||
ADC BPAR1 ; {3C2B} ADD ORIGINAL NUMBER TO VALUE
|
||||
ADC ZPB1 ; {3C2B} ADD ORIGINAL NUMBER TO VALUE
|
||||
ASL ; {2C1B} AND MULTIPLY TOTAL BY TWO
|
||||
; ANSWER IS HELD IN .A REGISTER
|
||||
<<<
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 01-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -43,8 +43,8 @@
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ADD16 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
_MLIT ]2;WPAR2 ; {16C12B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
_MLIT ]2;ZPW2 ; {16C12B}
|
||||
JSR ADDIT16 ; {46C27B}
|
||||
<<<
|
||||
*
|
||||
@@ -65,8 +65,8 @@ ADD16 MAC
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SUB16 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
_MLIT ]2;WPAR2 ; {16C12B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
_MLIT ]2;ZPW2 ; {16C12B}
|
||||
JSR SUBT16 ; {47C27B}
|
||||
<<<
|
||||
*
|
||||
@@ -87,8 +87,8 @@ SUB16 MAC
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MUL16 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
_MLIT ]2;WPAR2 ; {16C12B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
_MLIT ]2;ZPW2 ; {16C12B}
|
||||
JSR MULTU16 ; {112C67B}
|
||||
<<<
|
||||
*
|
||||
@@ -109,8 +109,8 @@ MUL16 MAC
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DIV16 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
_MLIT ]2;WPAR2 ; {16C12B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
_MLIT ]2;ZPW2 ; {16C12B}
|
||||
JSR DIVDU16 ; {101C57B} UNSIGNED
|
||||
FIN
|
||||
<<<
|
||||
@@ -132,7 +132,7 @@ DIV16 MAC
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
CMP16 MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
_MLIT ]2;WPAR2 ; {16C12B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
_MLIT ]2;ZPW2 ; {16C12B}
|
||||
JSR COMP16 ; {59C29B}
|
||||
<<<
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 01-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 03-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -128,13 +128,13 @@ RNDMZ MAC
|
||||
LSR ; {2C1B}
|
||||
TAY ; {2C1B}
|
||||
LDA #]MAGNUM ; {3C2B}
|
||||
STA ADDR1 ; {3C2B}
|
||||
STA ZPW1 ; {3C2B}
|
||||
LDA #]MAGNUM/$100 ; {3C2B}
|
||||
STA ADDR1+1 ; {3C2B}
|
||||
LDA (ADDR1),Y ; {5C2B}
|
||||
STA ZPW1+1 ; {3C2B}
|
||||
LDA (ZPW1),Y ; {5C2B}
|
||||
STA ]MAGEOR ; {4C3B}
|
||||
INY ; {2C1B}
|
||||
LDA (ADDR1),Y ; {5C2B}
|
||||
LDA (ZPW1),Y ; {5C2B}
|
||||
STA ]MAGEOR+1 ; {4C3B}
|
||||
<<<
|
||||
*
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
* SIZE: 24 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]ADD1 EQU WPAR1 ; FIRST ARGUMENT
|
||||
]ADD2 EQU WPAR2 ; SECOND ARGUMENT
|
||||
]ADD1 EQU ZPW1 ; FIRST ARGUMENT
|
||||
]ADD2 EQU ZPW2 ; SECOND ARGUMENT
|
||||
*
|
||||
ADDIT16
|
||||
LDA #2 ; {2C2B} PUT SUMMAND LENGTH
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
* SIZE: 26 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]CMP1 EQU WPAR1 ; COMPARISON VAR 1
|
||||
]CMP2 EQU WPAR2 ; COMPARISON VAR 2
|
||||
]CMP1 EQU ZPW1 ; COMPARISON VAR 1
|
||||
]CMP2 EQU ZPW2 ; COMPARISON VAR 2
|
||||
*
|
||||
COMP16
|
||||
LDA ]CMP1 ; {3C2B} FIRST, COMPARE LOW BYTES
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
* SIZE: 54 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]DVEND EQU WPAR1 ; DIVIDEND
|
||||
]DVSOR EQU WPAR2 ; DIVISOR
|
||||
]REM EQU WPAR3 ; REMAINDER
|
||||
]RESULT EQU WPAR1 ; DIVISION RESULT
|
||||
]DVEND EQU ZPW1 ; DIVIDEND
|
||||
]DVSOR EQU ZPW2 ; DIVISOR
|
||||
]REM EQU ZPW3 ; REMAINDER
|
||||
]RESULT EQU ZPW4 ; DIVISION RESULT
|
||||
*
|
||||
DIVDU16
|
||||
LDA #0 ; {4C3B} RESET REMAINDER
|
||||
|
||||
@@ -16,16 +16,16 @@
|
||||
* SIZE: 34 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]DVEND EQU WPAR1 ; DIVIDEND
|
||||
]DVSOR EQU WPAR2 ; DIVISOR
|
||||
]DVEND EQU ZPW1 ; DIVIDEND
|
||||
]DVSOR EQU ZPW2 ; DIVISOR
|
||||
*
|
||||
DIVDU8
|
||||
STX ]DVEND ; {3C2B} .X HOLDS DIVIDEND
|
||||
STA ]DVSOR ; {3C2B} .A HOLDS DIVISOR
|
||||
LDA #$00 ; {3C2B} CLEAR ACCUMULATOR
|
||||
LDX #8 ; {3C2B} COUNTER
|
||||
ASL ]DVSOR ; {5C2B} SHIFT LEFT DIVISOR
|
||||
:L1 ROL ; {2C1B} ROTATE LEFT .A
|
||||
ASL ]DVSOR ; {5C2B} MUL DIVISOR BY 2
|
||||
:L1 ROL ; {2C1B} (HIGH BYTE TOO)
|
||||
CMP ]DVEND ; {3C2B} COMPARE TO DIVIDEND
|
||||
BCC :L2 ; {3C2B} IF NEXT BIT = 0, BRANCH :L2
|
||||
SBC ]DVEND ; {3C2B} OTHERWISE, SUBTRACT DIVIDEND
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = MULTIPLICAND *
|
||||
* WPAR2 = MULTIPLIER *
|
||||
* ZPW1 = MULTIPLICAND *
|
||||
* ZPW2 = MULTIPLIER *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -20,9 +20,9 @@
|
||||
* SIZE: 64 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]MCAND EQU WPAR1 ; MULTIPLICAND
|
||||
]MLIER EQU WPAR2 ; MULTIPLIER
|
||||
]HPROD EQU WPAR3 ; HIGH BYTES OF PRODUCT
|
||||
]MCAND EQU ZPW1 ; MULTIPLICAND
|
||||
]MLIER EQU ZPW2 ; MULTIPLIER
|
||||
]HPROD EQU ZPW3 ; HIGH BYTES OF PRODUCT
|
||||
*
|
||||
MULTU16
|
||||
LDA #0 ; {3C2B} ZERO OUT TOP TWO
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = MULTIPLIER *
|
||||
* WPAR2 = MULTIPLICAND *
|
||||
* ZPW1 = MULTIPLIER *
|
||||
* ZPW2 = MULTIPLICAND *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -16,8 +16,8 @@
|
||||
* SIZE: 47 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]MUL1 EQU WPAR1 ; MULTIPLIER
|
||||
]MUL2 EQU WPAR2 ; MULTIPLICAND
|
||||
]MUL1 EQU ZPW1 ; MULTIPLIER
|
||||
]MUL2 EQU ZPW2 ; MULTIPLICAND
|
||||
*
|
||||
MULTU8
|
||||
STA ]MUL1 ; {3C2B}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
* SIZE: 60 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SEED EQU WPAR1 ; SEED FOR PRNG
|
||||
]SEED EQU ZPW1 ; SEED FOR PRNG
|
||||
*
|
||||
RAND16
|
||||
LDA RNDL ; {3C2B} GET SEED LOBYTE
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = MINIMUM VALUE *
|
||||
* BPAR2 = MAXIMUM VALUE *
|
||||
* ZPB1 = MINIMUM VALUE *
|
||||
* ZPB2 = MAXIMUM VALUE *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,19 +17,19 @@
|
||||
* SIZE: 162 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]NEWMIN EQU BPAR1 ; MINIMUM PARAMETER
|
||||
]NEWMAX EQU BPAR2 ; MAXIMUM PARAMETER
|
||||
]OLDMIN EQU WPAR1 ; OLD MINIMUM (1)
|
||||
]OLDMAX EQU WPAR1+1 ; OLD MAXIMUM (255)
|
||||
]OLDRNG EQU VARTAB ; OLD RANGE
|
||||
]NEWRNG EQU VARTAB+2 ; NEW RANGE
|
||||
]MULRNG EQU VARTAB+4 ; MULTIPLIED RANGE
|
||||
]DIVRNG EQU VARTAB+6 ; DIVIDED RANGE
|
||||
]VALRNG EQU VARTAB+8 ; VALUE RANGE
|
||||
]OLDVAL EQU VARTAB+10 ; OLD VALUE
|
||||
]NEWVAL EQU VARTAB+12 ; NEW VALUE
|
||||
]NUM1HI EQU VARTAB+14 ; MULTIPLICATION HI BYTE
|
||||
]REMAIN EQU VARTAB+16 ; REMAINDER
|
||||
]NEWMIN EQU ZPB1 ; MINIMUM PARAMETER
|
||||
]NEWMAX EQU ZPB2 ; MAXIMUM PARAMETER
|
||||
]OLDMIN EQU ZPW1 ; OLD MINIMUM (1)
|
||||
]OLDMAX EQU ZPW1+1 ; OLD MAXIMUM (255)
|
||||
]OLDRNG EQU ZPW2 ; OLD RANGE
|
||||
]NEWRNG EQU ZPW3 ; NEW RANGE
|
||||
]MULRNG EQU ZPW4 ; MULTIPLIED RANGE
|
||||
]DIVRNG EQU ZPW5 ; DIVIDED RANGE
|
||||
]VALRNG EQU ZPW6 ; VALUE RANGE
|
||||
]OLDVAL EQU VARTAB ; OLD VALUE
|
||||
]NEWVAL EQU VARTAB+2 ; NEW VALUE
|
||||
]NUM1HI EQU VARTAB+4 ; MULTIPLICATION HI BYTE
|
||||
]REMAIN EQU VARTAB+6 ; REMAINDER
|
||||
*
|
||||
RANDB
|
||||
STX ]NEWMAX ; {4C3B} NEW HIGH VALUE
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
* *
|
||||
* INPUT *
|
||||
* *
|
||||
* WPAR1 = MINUEND *
|
||||
* WPAR2 = SUBTRAHEND *
|
||||
* ZPW1 = MINUEND *
|
||||
* ZPW2 = SUBTRAHEND *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,8 +17,8 @@
|
||||
* SIZE: 24 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]MINU EQU WPAR1 ; MINUEND
|
||||
]SUBT EQU WPAR2 ; SUBTRAHEND
|
||||
]MINU EQU ZPW1 ; MINUEND
|
||||
]SUBT EQU ZPW2 ; SUBTRAHEND
|
||||
*
|
||||
SUBT16
|
||||
LDA #2 ; {3C2B}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 12-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
@@ -206,14 +206,14 @@
|
||||
]STRLEN HEX 0000
|
||||
]COUT1 EQU $FDF0
|
||||
_PS
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
STA ZPWSYS
|
||||
STX ZPWSYS+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDA (ZPWSYS),Y
|
||||
STA ]STRLEN
|
||||
:_LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
LDA (ZPWSYS),Y
|
||||
JSR ]COUT1
|
||||
CPY ]STRLEN
|
||||
BNE :_LP
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 12-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
@@ -189,14 +189,14 @@
|
||||
]STRLEN HEX 0000
|
||||
]COUT1 EQU $FDF0
|
||||
_PS
|
||||
STA ADDR1
|
||||
STX ADDR1+1
|
||||
STA ZPWSYS
|
||||
STX ZPWSYS+1
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
LDA (ZPWSYS),Y
|
||||
STA ]STRLEN
|
||||
:_LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
LDA (ZPWSYS),Y
|
||||
JSR ]COUT1
|
||||
CPY ]STRLEN
|
||||
BNE :_LP
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 19-SEP-2019 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 11-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -52,15 +52,13 @@
|
||||
* ]2 = 2ND STRING TO COMPARE *
|
||||
* *
|
||||
* CYCLES: 110+ *
|
||||
* SIZE: 67 BYTES *
|
||||
* SIZE: 31 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCMP MAC
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y REGISTER
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
_MSTR ]2;WPAR2 ; {15C14B}
|
||||
JSR STRCMP ; {74C26B}
|
||||
LDY SCRATCH ; {3C2B} RELOAD .Y
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
_MSTR ]2;ZPW2 ; {15C14B}
|
||||
JSR STRCMP ; {74C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -74,15 +72,13 @@ SCMP MAC
|
||||
* ]2 = SECOND STRING *
|
||||
* *
|
||||
* CYCLES: 170+ *
|
||||
* SIZE: 113 BYTES *
|
||||
* SIZE: 31 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCAT MAC
|
||||
STY SCRATCH ; {3C2B} BACKUP .Y
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
_MSTR ]2;WPAR2 ; {15C14B}
|
||||
JSR STRCAT ; {134C81B}
|
||||
LDY SCRATCH ; {3C2B} RESTORE .Y
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
_MSTR ]2;ZPW2 ; {15C14B}
|
||||
JSR STRCAT ; {134C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -96,14 +92,14 @@ SCAT MAC
|
||||
* ]2 = DELIMITER *
|
||||
* *
|
||||
* CYCLES: 123+ *
|
||||
* SIZE: 80 BYTES *
|
||||
* SIZE: 22 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRIM MAC
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA WPAR2 ; {3C2B}
|
||||
JSR STRTRIM ; {101C61B}
|
||||
STA ZPW2 ; {3C2B}
|
||||
JSR STRTRIM ; {101C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -117,12 +113,12 @@ STRIM MAC
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* CYCLES: 114+ *
|
||||
* SIZE: 64 BYTES *
|
||||
* SIZE: 17 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRUP MAC
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
JSR STRUPPER ; {99C50B}
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
JSR STRUPPER ; {99C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -136,12 +132,12 @@ STRUP MAC
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* CYCLES: 113+ *
|
||||
* SIZE: 64 BYTES *
|
||||
* SIZE: 17 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STRLO MAC
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
JSR STRLOWER ; {98C50B}
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
JSR STRLOWER ; {98C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -156,12 +152,12 @@ STRLO MAC
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* CYCLES: 192+ *
|
||||
* SIZE: 117 BYTES *
|
||||
* SIZE: 17 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCAP MAC
|
||||
_MSTR ]1;WPAR1 ; {15C14B}
|
||||
JSR STRCAP ; {177C103B}
|
||||
_MSTR ]1;ZPW1 ; {15C14B}
|
||||
JSR STRCAP ; {177C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -173,10 +169,10 @@ SCAP MAC
|
||||
* ]1 = STRING ADDRESS *
|
||||
* *
|
||||
* CYCLES: 70+ *
|
||||
* SIZE: 41 BYTES *
|
||||
* SIZE: 16 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SREV MAC
|
||||
_MSTR ]1;WPAR1 ; {14C13B}
|
||||
JSR STRREV ; {56C28B}
|
||||
_MSTR ]1;ZPW1 ; {14C13B}
|
||||
JSR STRREV ; {56C3B}
|
||||
<<<
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 12-APR-2021 *
|
||||
* DATE: 04-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -44,13 +44,13 @@
|
||||
* ]2 = SUBSTRING *
|
||||
* *
|
||||
* CYCLES: 205+ *
|
||||
* SIZE: 136 BYTES *
|
||||
* SIZE: 20 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SPOS MAC
|
||||
_MSTR ]1;WPAR2 ; {14C13B}
|
||||
_MSTR ]2;WPAR1 ; {14C13B}
|
||||
JSR SUBPOS ; {177C110B}
|
||||
_MSTR ]1;ZPW2 ; {14C13B}
|
||||
_MSTR ]2;ZPW1 ; {14C13B}
|
||||
JSR SUBPOS ; {177C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -65,16 +65,16 @@ SPOS MAC
|
||||
* ]3 = SUBSTRING LENGTH *
|
||||
* *
|
||||
* CYCLES: 91+ *
|
||||
* SIZE: 71 BYTES *
|
||||
* SIZE: 26 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCPY MAC
|
||||
_MSTR ]1;WPAR1 ; {14C13B}
|
||||
_MSTR ]1;ZPW1 ; {14C13B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA BPAR2 ; {3C2B}
|
||||
STA ZPB2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR SUBCOPY ; {63C48B}
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR SUBCOPY ; {63C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -89,16 +89,16 @@ SCPY MAC
|
||||
* ]3 = SUBSTRING LENGTH *
|
||||
* *
|
||||
* CYCLES: 135+ *
|
||||
* SIZE: 79 BYTES *
|
||||
* SIZE: 26 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SDEL MAC
|
||||
_MSTR ]1;WPAR1 ; {14C13B}
|
||||
_MSTR ]1;ZPW1 ; {14C13B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA BPAR2 ; {3C2B}
|
||||
STA ZPB2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR SUBDEL ; {107C56B}
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR SUBDEL ; {107C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -113,15 +113,15 @@ SDEL MAC
|
||||
* ]3 = SUBSTRING INDEX *
|
||||
* *
|
||||
* CYCLES: 177+ *
|
||||
* SIZE: 111 BYTES *
|
||||
* SIZE: 34 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SINS MAC
|
||||
_MSTR ]1;WPAR2 ; {14C13B}
|
||||
_MSTR ]2;WPAR1 ; {14C13B}
|
||||
_MSTR ]1;ZPW2 ; {14C13B}
|
||||
_MSTR ]2;ZPW1 ; {14C13B}
|
||||
LDA ]3 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR SUBINS ; {142C82B}
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR SUBINS ; {142C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -139,16 +139,16 @@ SINS MAC
|
||||
* ]3 = ARGUMENT NUMBER *
|
||||
* *
|
||||
* CYCLES: 182+ *
|
||||
* SIZE: 118 BYTES *
|
||||
* SIZE: 26 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STOK MAC
|
||||
_MLIT ]1;WPAR1 ; {14C13B}
|
||||
_MLIT ]1;ZPW1 ; {14C13B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA WPAR2 ; {3C2B}
|
||||
STA ZPW2 ; {3C2B}
|
||||
LDA ]3 ; {4C3B}
|
||||
STA BPAR2 ; {3C2B}
|
||||
JSR SUBTOK ; {154C95B}
|
||||
STA ZPB2 ; {3C2B}
|
||||
JSR SUBTOK ; {154C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -161,12 +161,12 @@ STOK MAC
|
||||
* ]2 = DELIMITER / TOKEN *
|
||||
* *
|
||||
* CYCLES: 88+ *
|
||||
* SIZE: 57 BYTES *
|
||||
* SIZE: 21 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SCNT MAC
|
||||
_MSTR ]1;WPAR1 ; {14C13B}
|
||||
_MSTR ]1;ZPW1 ; {14C13B}
|
||||
LDA ]2 ; {4C3B}
|
||||
STA WPAR2 ; {3C2B}
|
||||
JSR SUBCHARCNT ; {67C39B}
|
||||
STA ZPW2 ; {3C2B}
|
||||
JSR SUBCHARCNT ; {67C3B}
|
||||
<<<
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -18,9 +18,9 @@
|
||||
* SIZE: 100 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]FLAG EQU WPAR2 ; CAPITALIZATION FLAG
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
]FLAG EQU ZPW2 ; CAPITALIZATION FLAG
|
||||
*
|
||||
STRCAP
|
||||
*
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = 1ST STRING ADDRESS *
|
||||
* WPAR2 = 2ND STRING ADDRESS *
|
||||
* ZPW1 = 1ST STRING ADDRESS *
|
||||
* ZPW2 = 2ND STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -23,11 +23,11 @@
|
||||
* SIZE: 78 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]S1LEN EQU VARTAB+1 ; FIRST STRING LENGTH
|
||||
]S2LEN EQU VARTAB+3 ; SECOND STRING LENGTH
|
||||
]INDEX EQU WPAR3 ; ADDRESS TO PLACE 2ND STRING
|
||||
]STR2 EQU WPAR2 ; POINTER TO 2ND STRING
|
||||
]STR1 EQU WPAR1 ; POINTER TO 1ST STRING
|
||||
]S1LEN EQU ZPW4 ; FIRST STRING LENGTH
|
||||
]S2LEN EQU ZPW5 ; SECOND STRING LENGTH
|
||||
]INDEX EQU ZPW3 ; ADDRESS TO PLACE 2ND STRING
|
||||
]STR2 EQU ZPW2 ; POINTER TO 2ND STRING
|
||||
]STR1 EQU ZPW1 ; POINTER TO 1ST STRING
|
||||
*
|
||||
STRCAT
|
||||
*
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = 1ST STRING ADDRESS *
|
||||
* WPAR2 = 2ND STRING ADDRESS *
|
||||
* ZPW1 = 1ST STRING ADDRESS *
|
||||
* ZPW2 = 2ND STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -29,8 +29,8 @@
|
||||
* SIZE: 32 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR1 EQU WPAR1 ; ZP POINTER TO 1ST STRING
|
||||
]STR2 EQU WPAR2 ; ZP POINTER TO 2ND STRING
|
||||
]STR1 EQU ZPW1 ; ZP POINTER TO 1ST STRING
|
||||
]STR2 EQU ZPW2 ; ZP POINTER TO 2ND STRING
|
||||
*
|
||||
STRCMP
|
||||
*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,9 +17,9 @@
|
||||
* SIZE: 47 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]RET EQU WPAR2 ; REUTURN ADDRESS
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
]RET EQU ZPW2 ; RETURN ADDRESS
|
||||
*
|
||||
STRLOWER
|
||||
*
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -14,9 +14,9 @@
|
||||
* SIZE: 25 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]REV EQU RETLEN ; REVERSE STRING ADDRESS
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
*
|
||||
STRREV
|
||||
LDY #0 ; {3C2B} CLEAR .Y REGISTER
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* WPAR2 = DELIMITER *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* ZPW2 = DELIMITER *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -18,10 +18,10 @@
|
||||
* SIZE: 58 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]DELIM EQU WPAR2 ; DELIMITER
|
||||
]RET EQU WPAR3 ; RETURN AREA
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]DELIM EQU ZPW2 ; DELIMITER
|
||||
]RET EQU ZPW3 ; RETURN AREA
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
*
|
||||
STRTRIM
|
||||
LDY #0 ; {3C2B} RESET .Y COUNTER
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,9 +17,9 @@
|
||||
* SIZE: 47 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]RET EQU WPAR2 ; REUTURN ADDRESS
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
]RET EQU ZPW2 ; RETURN ADDRESS
|
||||
*
|
||||
STRUPPER
|
||||
*
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* WPAR2 = CHARACTER TO FIND *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* ZPW2 = CHARACTER TO FIND *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,9 +17,9 @@
|
||||
* SIZE: 36 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]CHAR EQU WPAR2 ; TOKEN TO FIND
|
||||
]LEN EQU BPAR2 ; LENGTH OF STRING
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]CHAR EQU ZPW2 ; TOKEN TO FIND
|
||||
]LEN EQU ZPB2 ; LENGTH OF STRING
|
||||
*
|
||||
SUBCHARCNT
|
||||
LDA #0 ; {3C2B} CLEAR OUT .A REGISTER
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = SUBSTRING LENGTH *
|
||||
* BPAR2 = SUBSTRING INDEX *
|
||||
* WPAR1 = SOURCE STRING ADDR *
|
||||
* ZPB1 = SUBSTRING LENGTH *
|
||||
* ZPB2 = SUBSTRING INDEX *
|
||||
* ZPW1 = SOURCE STRING ADDR *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,9 +17,9 @@
|
||||
* SIZE: 25 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SUBLEN EQU BPAR1 ; SUBSTRING LENGTH
|
||||
]SUBIND EQU BPAR2 ; SUBSTRING INDEX
|
||||
]STR EQU WPAR1 ; SOURCE STRING
|
||||
]SUBLEN EQU ZPB1 ; SUBSTRING LENGTH
|
||||
]SUBIND EQU ZPB2 ; SUBSTRING INDEX
|
||||
]STR EQU ZPW1 ; SOURCE STRING
|
||||
*
|
||||
SUBCOPY
|
||||
LDY ]SUBIND ; {3C2B} STARTING COPY INDEX
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* BPAR2 = SUBSTRING INDEX *
|
||||
* BPAR1 = SUBSTRING LENGTH *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* ZPB2 = SUBSTRING INDEX *
|
||||
* ZPB1 = SUBSTRING LENGTH *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,9 +17,9 @@
|
||||
* SIZE: 53 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SUBLEN EQU BPAR1
|
||||
]SUBIND EQU BPAR2
|
||||
]STR EQU WPAR1
|
||||
]SUBLEN EQU ZPB1
|
||||
]SUBIND EQU ZPB2
|
||||
]STR EQU ZPW1
|
||||
*
|
||||
SUBDEL
|
||||
DEC ]SUBIND ; {5C2B}
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SUBSTRING ADDRESS *
|
||||
* WPAR2 = STRING ADDRESS *
|
||||
* BPAR1 = INSERTION INDEX *
|
||||
* ZPW1 = SUBSTRING ADDRESS *
|
||||
* ZPW2 = STRING ADDRESS *
|
||||
* ZPB1 = INSERTION INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,12 +17,12 @@
|
||||
* SIZE: 79 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]SUB EQU WPAR1 ; SUBSTRING ADDRESS
|
||||
]STR EQU WPAR2 ; STRING ADDRESS
|
||||
]INDEX EQU BPAR1 ; STRING INDEX
|
||||
]OLDIND EQU VARTAB ; OLD INDEX
|
||||
]TMP EQU VARTAB+2 ; TEMPORARY VARIABLE
|
||||
]SUBLEN EQU VARTAB+4 ; SUBSTRING LENGTH
|
||||
]SUB EQU ZPW1 ; SUBSTRING ADDRESS
|
||||
]STR EQU ZPW2 ; STRING ADDRESS
|
||||
]INDEX EQU ZPB1 ; STRING INDEX
|
||||
]OLDIND EQU ZPW3 ; OLD INDEX
|
||||
]TMP EQU ZPW4 ; TEMPORARY VARIABLE
|
||||
]SUBLEN EQU ZPW5 ; SUBSTRING LENGTH
|
||||
*
|
||||
SUBINS
|
||||
DEC ]INDEX ; {5C2B}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = SUBSTRING (ADDRESS) *
|
||||
* WPAR2 = STRING ADDRESS *
|
||||
* ZPW1 = SUBSTRING (ADDRESS) *
|
||||
* ZPW2 = STRING ADDRESS *
|
||||
* *
|
||||
* DESTROYS: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -19,14 +19,14 @@
|
||||
* SIZE: 107 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STRIND EQU VARTAB ; STRING INDEX
|
||||
]SUBIND EQU VARTAB+1 ; SUBSTRING INDEX
|
||||
]CNT EQU VARTAB+2 ; COUNTER
|
||||
]STRLEN EQU VARTAB+3 ; STRING LENGTH
|
||||
]SUBLEN EQU VARTAB+4 ; SUBSTRING LENGTH
|
||||
]SIDX EQU VARTAB+6 ; STRING INDEX
|
||||
]SUB EQU WPAR1 ; ZP SUBSTRING ADDR PTR
|
||||
]STR EQU WPAR2 ; ZP STRING ADDR POINTER
|
||||
]STRIND EQU ZPB1 ; STRING INDEX
|
||||
]SUBIND EQU ZPB2 ; SUBSTRING INDEX
|
||||
]CNT EQU ZPB3 ; COUNTER
|
||||
]STRLEN EQU ZPB4 ; STRING LENGTH
|
||||
]SUBLEN EQU ZPW3 ; SUBSTRING LENGTH
|
||||
]SIDX EQU ZPW4 ; STRING INDEX
|
||||
]SUB EQU ZPW1 ; ZP SUBSTRING ADDR PTR
|
||||
]STR EQU ZPW2 ; ZP STRING ADDR POINTER
|
||||
*
|
||||
SUBPOS
|
||||
LDY #0 ; {3C2B} RESET INDEX COUNTER
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS *
|
||||
* WPAR2 = DELIMITER *
|
||||
* BPAR2 = ARGUMENT INDEX *
|
||||
* ZPW1 = STRING ADDRESS *
|
||||
* ZPW2 = DELIMITER *
|
||||
* ZPB2 = ARGUMENT INDEX *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -20,15 +20,15 @@
|
||||
* SIZE: 92 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]STR EQU WPAR1 ; STRING ADDRESS
|
||||
]DELIM EQU WPAR2 ; DELIMITER
|
||||
]LEN EQU BPAR1 ; STRING LENGTH
|
||||
]ARG EQU BPAR2 ; ARGUMENT NUMBER
|
||||
]START EQU VARTAB ; START POS OF ARGUMENT
|
||||
]END EQU VARTAB+2 ; END POS OF ARGUMENT
|
||||
]COUNT EQU VARTAB+4 ; ARGUMENT COUNTER
|
||||
]XFLAG EQU VARTAB+6 ; LOOP EXIT FLAG
|
||||
]FOUND EQU VARTAB+8 ; ARGUMENT FOUND FLAG
|
||||
]STR EQU ZPW1 ; STRING ADDRESS
|
||||
]DELIM EQU ZPW2 ; DELIMITER
|
||||
]LEN EQU ZPB1 ; STRING LENGTH
|
||||
]ARG EQU ZPB2 ; ARGUMENT NUMBER
|
||||
]START EQU ZPW3 ; START POS OF ARGUMENT
|
||||
]END EQU ZPW4 ; END POS OF ARGUMENT
|
||||
]COUNT EQU ZPW5 ; ARGUMENT COUNTER
|
||||
]XFLAG EQU ZPB3 ; LOOP EXIT FLAG
|
||||
]FOUND EQU ZPW6 ; ARGUMENT FOUND FLAG
|
||||
*
|
||||
SUBTOK
|
||||
LDY #0 ; {3C2B} CLEAR .Y REGISTER
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 21-APR-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 07-MAY-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
+100
-100
@@ -29,7 +29,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 07-MAY-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN PRO 8 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -56,7 +56,7 @@
|
||||
* RWTS EQUATES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]RWTSPTR EQU ADDR4 ; WORK POINTER FOR RWTS ROUTINES
|
||||
]RWTSPTR EQU ZPWSYS ; WORK POINTER FOR RWTS ROUTINES
|
||||
]RWTSRD EQU 1 ; READ CODE FOR RWTS
|
||||
]RWTSWR EQU 1 ; WRITE CODE FOR RWTS
|
||||
]LOCRPL EQU $3E3 ; LOCATE RWTS PARAMLIST
|
||||
@@ -178,40 +178,40 @@ MVOL DFB $0 ; {0C1B} MASTER VOLUME FOR RWTS
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SETRWTS
|
||||
JSR ]LOCRPL ; {6C3B} LOCATE RWTS PARAMETER LIST
|
||||
STY ]RWTSPTR ; {4C3B} SAVE POINTER LOW AND HIGH
|
||||
JSR ]LOCRPL ; {6C3B} LOCATE RWTS PARAMETER LIST
|
||||
STY ]RWTSPTR ; {4C3B} SAVE POINTER LOW AND HIGH
|
||||
STA ]RWTSPTR+1 ; {4C3B}
|
||||
LDA MSLOT ; {4C3B} GET DEFAULT SLOT
|
||||
ASL ; {2C1B} MULTIPLY BY 16
|
||||
ASL ; {2C1B} TO GET APPROPRIATE VALUE
|
||||
LDA MSLOT ; {4C3B} GET DEFAULT SLOT
|
||||
ASL ; {2C1B} MULTIPLY BY 16
|
||||
ASL ; {2C1B} TO GET APPROPRIATE VALUE
|
||||
ASL ; {2C1B}
|
||||
ASL ; {2C1B}
|
||||
LDY #]RPLSLT ; {3C2B} LOAD IOB SLOT OFFSET
|
||||
LDY #]RPLSLT ; {3C2B} LOAD IOB SLOT OFFSET
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE SLOT VAL AT OFFSET
|
||||
LDA MDRIVE ; {4C3B} LOAD DEFAULT DRIVE
|
||||
LDY #]RPLDRV ; {3C2B} GET IOB DRIVE OFFSET
|
||||
LDA MDRIVE ; {4C3B} LOAD DEFAULT DRIVE
|
||||
LDY #]RPLDRV ; {3C2B} GET IOB DRIVE OFFSET
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE DRIVE IN IOB
|
||||
LDA MTRACK ; {4C3B} GET MASTER TRACK
|
||||
LDY #]RPLTRK ; {3C2B} OFFSET IN PARAM LIST
|
||||
LDA MTRACK ; {4C3B} GET MASTER TRACK
|
||||
LDY #]RPLTRK ; {3C2B} OFFSET IN PARAM LIST
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE TRACK IN IOB
|
||||
LDA MSECTOR ; {4C3B} GET MASTER SECTOR
|
||||
CMP #16 ; {3C2B} BIGGER THAN 16?
|
||||
BCC :SOK ; {3C2B} NOPE, IT'S OKAY
|
||||
LDA #0 ; {3C2B} ELSE YES, SO CLEAR
|
||||
STA MSECTOR ; {4C3B} MASTER SECTOR
|
||||
:SOK LDY #]RPLSEC ; {3C2B} OFFSET IN PARMLIST
|
||||
LDA MSECTOR ; {4C3B} GET MASTER SECTOR
|
||||
CMP #16 ; {3C2B} BIGGER THAN 16?
|
||||
BCC :SOK ; {3C2B} NOPE, IT'S OKAY
|
||||
LDA #0 ; {3C2B} ELSE YES, SO CLEAR
|
||||
STA MSECTOR ; {4C3B} MASTER SECTOR
|
||||
:SOK LDY #]RPLSEC ; {3C2B} OFFSET IN PARMLIST
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE SECTOR IN IOB
|
||||
LDY #]RPLBUF ; {3C2B} OFFSET IN PARAMLIST
|
||||
LDA MBUFFER ; {4C3B} GET LOW BYTE OF BUFFER ADDR
|
||||
LDY #]RPLBUF ; {3C2B} OFFSET IN PARAMLIST
|
||||
LDA MBUFFER ; {4C3B} GET LOW BYTE OF BUFFER ADDR
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE LOW BYTE OF BUFF IN IOB
|
||||
INY ; {2C1B} INCREASE OFFSET
|
||||
LDA MBUFFER+1 ; {4C3B} GET HIGH BYTE
|
||||
INY ; {2C1B} INCREASE OFFSET
|
||||
LDA MBUFFER+1 ; {4C3B} GET HIGH BYTE
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE HIGH BYTE IN IOB
|
||||
LDA MCMD ; {4C3B} GET RWTS MASTER COMMAND
|
||||
LDY #]RPLCMD ; {3C2B} OFFSET OF PARMLIST
|
||||
LDA MCMD ; {4C3B} GET RWTS MASTER COMMAND
|
||||
LDY #]RPLCMD ; {3C2B} OFFSET OF PARMLIST
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE COMMAND IN IOB
|
||||
LDA MVOL ; {4C3B} GET RWTS MASTER VOLUME
|
||||
LDY #]RPLVOL ; {3C2B} OFFSET
|
||||
LDA MVOL ; {4C3B} GET RWTS MASTER VOLUME
|
||||
LDY #]RPLVOL ; {3C2B} OFFSET
|
||||
STA (]RWTSPTR),Y ; {6C2B} STORE VOLUME IN IOB
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
@@ -259,48 +259,48 @@ _FMGETPARM
|
||||
_FMBUFFSCAN
|
||||
*
|
||||
LDA $3D2 ; {4C3B} LOCATE DOS LOAD POINT
|
||||
STA ADDR1+1 ; {3C2B} STORE THIS AS FIRST FNAME BUFF
|
||||
STA ZPWSYS+1 ; {3C2B} STORE THIS AS FIRST FNAME BUFF
|
||||
LDY #0 ; {3C2B} LOW BYTE SHOULD START AT 0
|
||||
STY ADDR1 ; {3C2B}
|
||||
STY ZPWSYS ; {3C2B}
|
||||
:GBUF0
|
||||
LDA (ADDR1),Y ; {6C2B} LOCATE NEXT DOS BUFFER
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOCATE NEXT DOS BUFFER
|
||||
PHA ; {3C1B} TEMPORARILY HOLD
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD HIGH BYTE OF ADDRESS
|
||||
STA ADDR1+1 ; {3C2B} STORE HIGH BYTE IN ZERO PAGE
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD HIGH BYTE OF ADDRESS
|
||||
STA ZPWSYS+1 ; {3C2B} STORE HIGH BYTE IN ZERO PAGE
|
||||
PLA ; {3C1B} PULL BACK EARLIER VALUE
|
||||
STA ADDR1 ; {3C2B} STORE AS LOW BYTE ON ZERO
|
||||
STA ZPWSYS ; {3C2B} STORE AS LOW BYTE ON ZERO
|
||||
BNE :GBUF ; {4C3B} FOUND A BUFFER
|
||||
LDA ADDR1+1 ; {3C2B} ELSE LOAD HIGH BYTE
|
||||
LDA ZPWSYS+1 ; {3C2B} ELSE LOAD HIGH BYTE
|
||||
BEQ :NBUF ; {4C3B} IF ZERO, NO BUFFER
|
||||
:GBUF
|
||||
LDY #0 ; {3C2B} GET FILENAME FIRST CHAR
|
||||
LDA (ADDR1),Y ; {6C2B} FROM THE BUFFER
|
||||
LDA (ZPWSYS),Y ; {6C2B} FROM THE BUFFER
|
||||
BEQ :GOTBUF ; {3C2B} IF 0, THEN BUFFER IS UNUSED
|
||||
LDY #36 ; {3C2B} IF NOT, SKIP TO NEXT LINK
|
||||
BNE :GBUF0 ; {3C2B} AND RERUN THE SEARCH LOOP
|
||||
:GOTBUF
|
||||
LDA ADDR1 ; {3C2B} LOAD FNAME BUFFER LOW BYTE
|
||||
LDA ZPWSYS ; {3C2B} LOAD FNAME BUFFER LOW BYTE
|
||||
STA ]FNBUF ; {4C3B} STORE FILENAME BUFFER ADDRESS
|
||||
LDA ADDR1+1 ; {3C2B} READ THE HIGH BYTE
|
||||
LDA ZPWSYS+1 ; {3C2B} READ THE HIGH BYTE
|
||||
STA ]FNBUF+1 ; {4C3B} AND STORE AS POINTER ADDRESS
|
||||
LDY #30 ; {3C2B} INDEX TO FILE MANAGER WORKAREA
|
||||
LDA (ADDR1),Y ; {6C2B} FOR CONVENIENT STORAGE
|
||||
LDA (ZPWSYS),Y ; {6C2B} FOR CONVENIENT STORAGE
|
||||
STA ]FWORK ; {4C3B} STORE WORKAREA POINTER
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD THE HIGH BYTE
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD THE HIGH BYTE
|
||||
STA ]FWORK+1 ; {4C3B} AND HOLD IT IN ]FWORK
|
||||
INY ; {2C1B} POINTER TO T/S LIST SECTOR BUFF
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD LOW BYTE OF TS BUFFER
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD LOW BYTE OF TS BUFFER
|
||||
STA ]FTSLS ; {4C3B} HOLD POINTER IN MEMORY
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD HIGH BYTE
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD HIGH BYTE
|
||||
STA ]FTSLS+1 ; {4C3B} AND HOLD
|
||||
INY ; {6C2B} INC POINTER TO DATA BUFFER
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD LOW BYTE OF ADDRESS
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD LOW BYTE OF ADDRESS
|
||||
STA ]FDATA ; {4C3B} STORE IN MEMORY
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} LOAD THE HIGH BYTE
|
||||
LDA (ZPWSYS),Y ; {6C2B} LOAD THE HIGH BYTE
|
||||
STA ]FDATA+1 ; {4C3B} AND STORE AS WELL
|
||||
CLC ; {2C1B} CLR CARRY TO INDICATE NO ERR
|
||||
RTS ; {6C1B}
|
||||
@@ -339,33 +339,33 @@ _FMBUFFSCAN
|
||||
_SETPBUFFS
|
||||
*
|
||||
LDA ]FPARM ; {4C3B} GET PARAMATER ADDRESS LOW BYTE
|
||||
STA ADDR1 ; {3C2B} AND HOLD IN ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} AND HOLD IN ZERO PAGE
|
||||
LDA ]FPARM+1 ; {4C3B} LOAD HIGH BYTE
|
||||
STA ADDR1+1 ; {3C2B} INTO ZERO PAGE TOO
|
||||
STA ZPWSYS+1 ; {3C2B} INTO ZERO PAGE TOO
|
||||
LDY #$10 ; {3C2B} POINT TO DATA BUFFER POINTER
|
||||
LDA ]FDATA ; {4C3B} LOAD DATA BUFFER ADDRESS LOW
|
||||
STA (ADDR1),Y ; {6C2B} COPY POINTER TO PARAM LOCATION
|
||||
STA (ZPWSYS),Y ; {6C2B} COPY POINTER TO PARAM LOCATION
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA ]FDATA+1 ; {4C3B} LOAD DATA BUFFER ADDR HIGH BYTE
|
||||
STA (ADDR1),Y ; {6C2B} COPY TO PARAM LOCATION
|
||||
STA (ZPWSYS),Y ; {6C2B} COPY TO PARAM LOCATION
|
||||
LDY #$08 ; {3C2B} POINT TO FILENAME BUFFER
|
||||
LDA ]FNBUF ; {4C3B} LOAD FILENAME BUFFER POINTER ADDR
|
||||
STA (ADDR1),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
STA (ZPWSYS),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
INY ; {2C1B} INCREASE .Y POINTER
|
||||
LDA ]FNBUF+1 ; {4C3B} LOAD THE HIGH BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND COPY AS WELL
|
||||
STA (ZPWSYS),Y ; {6C2B} AND COPY AS WELL
|
||||
LDY #$0E ; {3C2B} T/S LIST SECTOR BUFFER POINTER
|
||||
LDA ]FTSLS ; {4C3B} LOAD CURRENT POINTER LOW BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
STA (ZPWSYS),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA ]FTSLS+1 ; {3C2B} LOAD THE HIGH BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
STA (ZPWSYS),Y ; {6C2B} AND COPY TO PARAM LOCATION
|
||||
LDY #$0C ; {3C2B} WORKAREA BUFFER OFFSET IN PARAM
|
||||
LDA ]FWORK ; {4C3B} LOAD CURRENT WORKAREA POINTER
|
||||
STA (ADDR1),Y ; {6C2B} COPY TO PARAMETER LIST
|
||||
STA (ZPWSYS),Y ; {6C2B} COPY TO PARAMETER LIST
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA ]FWORK+1 ; {4C3B} LOAD HIGH BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND COPY AS WELL
|
||||
STA (ZPWSYS),Y ; {6C2B} AND COPY AS WELL
|
||||
*
|
||||
RTS ; {6C3B}
|
||||
*
|
||||
@@ -392,20 +392,20 @@ _SETPBUFFS
|
||||
_NAMESTR
|
||||
*
|
||||
LDY #0 ; {3C2B}
|
||||
STA ADDR1 ; {3C2B} CLEAR OUT ZERO LOCATION
|
||||
STX ADDR1+1 ; {3C2B}
|
||||
LDA (ADDR1),Y ; {6C2B} GET STRING LENGTH
|
||||
STA BPAR1 ; {3C2B} HOLD TEMP IN ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} CLEAR OUT ZERO LOCATION
|
||||
STX ZPWSYS+1 ; {3C2B}
|
||||
LDA (ZPWSYS),Y ; {6C2B} GET STRING LENGTH
|
||||
STA ZPB1 ; {3C2B} HOLD TEMP IN ZERO PAGE
|
||||
LDY #0 ; {3C2B} RESET .Y INDEX
|
||||
LDX #255 ; {3C2B} SET .X INDEX TO -1
|
||||
:_NSLP1
|
||||
INX ; {2C1B} INCREASE .X INDEX
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} GET CHARACTER
|
||||
LDA (ZPWSYS),Y ; {6C2B} GET CHARACTER
|
||||
STA ]FNAME,X ; {5C3B} STORE AT Y-1 LOC IN HOLD AREA
|
||||
CPX #29 ; {3C2B} COMPARE TO MAX STRING LENGTH
|
||||
BEQ :_NSEXIT ; {3C2B} IF MAX IS REACHED, EXIT
|
||||
CPY BPAR1 ; {3C2B} OTHERWISE COMPARE TO STRING LENGTH
|
||||
CPY ZPB1 ; {3C2B} OTHERWISE COMPARE TO STRING LENGTH
|
||||
BNE :_NSLP1 ; {3C2B} IF NOT EQUAL, RELOOP TO NEXT CHAR
|
||||
:_NSLP2
|
||||
INX ; {2C1B} STILL INCREASE .X INDEX
|
||||
@@ -437,20 +437,20 @@ _NAMESTR
|
||||
_NAMESTR2
|
||||
*
|
||||
LDY #0 ; {3C2B}
|
||||
STA ADDR1 ; {3C2B} CLEAR OUT ZERO LOCATION
|
||||
STX ADDR1+1 ; {3C2B}
|
||||
LDA (ADDR1),Y ; {6C3B} GET STRING LENGTH
|
||||
STA BPAR1 ; {3C2B} HOLD TEMP IN ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} CLEAR OUT ZERO LOCATION
|
||||
STX ZPWSYS+1 ; {3C2B}
|
||||
LDA (ZPWSYS),Y ; {6C3B} GET STRING LENGTH
|
||||
STA ZPB1 ; {3C2B} HOLD TEMP IN ZERO PAGE
|
||||
LDY #0 ; {3C2B} RESET .Y INDEX
|
||||
LDX #255 ; {3C2B} SET .X INDEX TO -1
|
||||
:_NSLP1
|
||||
INX ; {2C1B} INCREASE .X INDEX
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA (ADDR1),Y ; {6C2B} GET CHARACTER
|
||||
LDA (ZPWSYS),Y ; {6C2B} GET CHARACTER
|
||||
STA ]FNAME2,X ; {5C2B} STORE AT Y-1 LOC IN HOLD AREA
|
||||
CPX #29 ; {3C2B} COMPARE TO MAX STRING LENGTH
|
||||
BEQ :_NSEXIT ; {3C2B} IF MAX IS REACHED, EXIT
|
||||
CPY BPAR1 ; {3C2B} OTHERWISE COMPARE TO STRING LENGTH
|
||||
CPY ZPB1 ; {3C2B} OTHERWISE COMPARE TO STRING LENGTH
|
||||
BNE :_NSLP1 ; {3C2B} IF NOT EQUAL, RELOOP TO NEXT CHAR
|
||||
:_NSLP2
|
||||
INX ; {2C1B} STILL INCREASE .X INDEX
|
||||
@@ -482,14 +482,14 @@ _NAMESTR2
|
||||
_FN2BUFF
|
||||
*
|
||||
LDA ]FNBUF ; {4C3B} LOAD FILENAME BUFFER ADDR
|
||||
STA ADDR2 ; {3C2B} STORE LOW IN ZERO
|
||||
STA ZPW6 ; {3C2B} STORE LOW IN ZERO
|
||||
LDA ]FNBUF+1 ; {4C3B}
|
||||
STA ADDR2+1 ; {3C2B} STORE HIGH IN ZERO
|
||||
STA ZPW6+1 ; {3C2B} STORE HIGH IN ZERO
|
||||
LDY #255 ; {3C2B} SET .Y INDEX TO -1
|
||||
:_LPC1
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA ]FNAME,Y ; {5C2B} GET CHAR STORED IN NAME AREA
|
||||
STA (ADDR2),Y ; {6C2B} STORE IN FILENAME BUFFER
|
||||
STA (ZPW6),Y ; {6C2B} STORE IN FILENAME BUFFER
|
||||
CPY #29 ; {2C2B} IS THE END OF STRING REACHED?
|
||||
BNE :_LPC1 ; {3C2B} IF NO, KEEP LOOPING
|
||||
RTS ; {6C1B}
|
||||
@@ -514,18 +514,18 @@ _FN2BUFF
|
||||
_FMNM2
|
||||
LDA #]FNAME2 ; {3C2B}
|
||||
LDX #>]FNAME2 ; {3C2B}
|
||||
STA ADDR2 ; {3C2B} LOW BYTE OF REC ADDRESS IN .A
|
||||
STX ADDR2+1 ; {3C2B} HIGH BYTE IN .X
|
||||
STA ZPW6 ; {3C2B} LOW BYTE OF REC ADDRESS IN .A
|
||||
STX ZPW6+1 ; {3C2B} HIGH BYTE IN .X
|
||||
LDA ]FPARM ; {4C3B} LOAD PARAM ADDRESS
|
||||
STA ADDR1 ; {3C2B} AND HOLD IN ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} AND HOLD IN ZERO PAGE
|
||||
LDA ]FPARM+1 ; {4C3B} ALSO DO FOR HIGH BYTE
|
||||
STA ADDR1+1 ; {3C2B}
|
||||
STA ZPWSYS+1 ; {3C2B}
|
||||
LDY #$02 ; {3C2B} OFFSET TO THE RECORD VARIABLE
|
||||
LDA ADDR2 ; {3C2B} LOAD LOW BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND STORE IN PARAM LIST
|
||||
LDA ZPW6 ; {3C2B} LOAD LOW BYTE
|
||||
STA (ZPWSYS),Y ; {6C2B} AND STORE IN PARAM LIST
|
||||
INY ; {2C1B} INCREASE .Y INDEX
|
||||
LDA ADDR2+1 ; {3C2B} LOAD HIGH BYTE
|
||||
STA (ADDR1),Y ; {6C2B} AND STORE IN PARAM LIST
|
||||
LDA ZPW6+1 ; {3C2B} LOAD HIGH BYTE
|
||||
STA (ZPWSYS),Y ; {6C2B} AND STORE IN PARAM LIST
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -546,12 +546,12 @@ _FMNM2
|
||||
_BUFFCLEAR
|
||||
*
|
||||
LDA ]FNBUF ; {4C3B} GET FILENAME BUFFER ADDR
|
||||
STA ADDR2 ; {3C2B} STORE IN ZERO
|
||||
STA ZPW6 ; {3C2B} STORE IN ZERO
|
||||
LDA ]FNBUF+1 ; {4C3B} DO SAME FOR HIGH BYTE
|
||||
STA ADDR2+1 ; {3C2B}
|
||||
STA ZPW6+1 ; {3C2B}
|
||||
LDA #0 ; {3C2B} RESET .A
|
||||
TAY ; {2C1B} AND .Y
|
||||
STA (ADDR2),Y ; {6C3B} STORE #00 IN FIRST SPOT
|
||||
STA (ZPW6),Y ; {6C3B} STORE #00 IN FIRST SPOT
|
||||
RTS ; {6C1B} TO INDICATE EMPTY BUFFER
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -574,14 +574,14 @@ _BUFFCLEAR
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_FMPSET
|
||||
; .Y HOLDS THE OFFSET
|
||||
; .Y HOLDS THE OFFSET
|
||||
TAX ; {2C1B} .A HOLDS THE VALUE
|
||||
LDA ]FPARM ; {4C3B} LOAD FILE MGR PARAMETER LOW
|
||||
STA ADDR1 ; {3C2B} HOLD ON ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} HOLD ON ZERO PAGE
|
||||
LDA ]FPARM+1 ; {4C3B} LOAD HIGH BYTE
|
||||
STA ADDR1+1 ; {3C2B} ONTO ZERO PAGE
|
||||
STA ZPWSYS+1 ; {3C2B} ONTO ZERO PAGE
|
||||
TXA ; {2C1B} RETURN VALUE BACK TO .A
|
||||
STA (ADDR1),Y ; {6C3B} STORE VALUE AT OFFSET IN PARAMS
|
||||
STA (ZPWSYS),Y ; {6C3B} STORE VALUE AT OFFSET IN PARAMS
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -605,18 +605,18 @@ _FMPSET
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_FMPSETA
|
||||
; .Y HOLDS THE OFFSET
|
||||
STA ADDR2 ; {3C2B} .A HOLDS LOW BYTE OF ADDR
|
||||
STX ADDR2+1 ; {3C2B} .X HOLDS ADDR HIGH BYTE
|
||||
; .Y HOLDS THE OFFSET
|
||||
STA ZPW6 ; {3C2B} .A HOLDS LOW BYTE OF ADDR
|
||||
STX ZPW6+1 ; {3C2B} .X HOLDS ADDR HIGH BYTE
|
||||
LDA ]FPARM ; {4C3B} LOAD FILE MGR PARAMETER LOW
|
||||
STA ADDR1 ; {3C2B} HOLD ON ZERO PAGE
|
||||
STA ZPWSYS ; {3C2B} HOLD ON ZERO PAGE
|
||||
LDA ]FPARM+1 ; {4C3B} LOAD HIGH BYTE
|
||||
STA ADDR1+1 ; {3C2B} ONTO ZERO PAGE
|
||||
LDA ADDR2 ; {3C2B}
|
||||
STA (ADDR1),Y ; {6C3B} STORE VAL AT OFFSET IN PARAMS
|
||||
LDA ADDR2+1 ; {3C2B}
|
||||
STA ZPWSYS+1 ; {3C2B} ONTO ZERO PAGE
|
||||
LDA ZPW6 ; {3C2B}
|
||||
STA (ZPWSYS),Y ; {6C3B} STORE VAL AT OFFSET IN PARAMS
|
||||
LDA ZPW6+1 ; {3C2B}
|
||||
INY ; {2C1B}
|
||||
STA (ADDR1),Y ; {6C3B}
|
||||
STA (ZPWSYS),Y ; {6C3B}
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -640,12 +640,12 @@ _FMPSETA
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_FMPGET
|
||||
; OFFSET IS PASSED IN .Y
|
||||
; OFFSET IS PASSED IN .Y
|
||||
LDA ]FPARM ; {4C3B}
|
||||
STA ADDR1 ; {3C2B}
|
||||
STA ZPWSYS ; {3C2B}
|
||||
LDA ]FPARM+1 ; {4C3B}
|
||||
STA ADDR1+1 ; {3C2B}
|
||||
LDA (ADDR1),Y ; {6C3B} VALUE RETURNED IN .A
|
||||
STA ZPWSYS+1 ; {3C2B}
|
||||
LDA (ZPWSYS),Y ; {6C3B} VALUE RETURNED IN .A
|
||||
RTS ; {6C1B}
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -668,15 +668,15 @@ _FMPGET
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_FMPGETA
|
||||
; OFFSET PASSED IN .Y
|
||||
; OFFSET PASSED IN .Y
|
||||
LDA ]FPARM ; {4C3B}
|
||||
STA ADDR1 ; {3C2B}
|
||||
STA ZPWSYS ; {3C2B}
|
||||
LDA ]FPARM+1 ; {4C3B}
|
||||
STA ADDR1+1 ; {3C2B}
|
||||
LDA (ADDR1),Y ; {6C3B} GET LOW BYTE
|
||||
STA ZPWSYS+1 ; {3C2B}
|
||||
LDA (ZPWSYS),Y ; {6C3B} GET LOW BYTE
|
||||
PHA ; {3C1B} HOLD ON STACK
|
||||
INY ; {2C1B} INCREASE INDEX
|
||||
LDA (ADDR1),Y ; {6C3B} GET HIGH BYTE
|
||||
LDA (ZPWSYS),Y ; {6C3B} GET HIGH BYTE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
PLA ; {3C1B} PASS LOW IN .A
|
||||
RTS ; {6C1B}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 20-APR-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -61,20 +61,20 @@
|
||||
* ]1 = SLOT *
|
||||
* ]2 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 657+ *
|
||||
* SIZE: 348 BYTES *
|
||||
* CYCLES: 587+ *
|
||||
* SIZE: 317 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FCAT MAC
|
||||
*
|
||||
FMFIL #]FC_CAT;]1;]2;#0;#0 ; {603C303B} SET CMD SLOT DRIVE
|
||||
*
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN THE FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C17B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD CODE IN .X
|
||||
JSR _BUFFCLEAR ; {37C20B} CLEAR THE FILE BUFF FOR USE
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN THE FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C3B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD CODE IN .X
|
||||
JSR _BUFFCLEAR ; {37C3B} CLEAR THE FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -88,21 +88,21 @@ FCAT MAC
|
||||
* ]2 = SLOT *
|
||||
* ]3 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 629+ *
|
||||
* SIZE: 353 BYTES *
|
||||
* CYCLES: 692+ *
|
||||
* SIZE: 322 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FULCK MAC
|
||||
*
|
||||
FMFIL #]FC_UNLK;]2;]3;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {4C3B} SET FILENAME
|
||||
LDX #1 ; {4C3B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {4C3B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C17B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {37C20B} CLEAR FILE BUFF FOR USE
|
||||
FMNAM ]1 ; {4C3B} SET FILENAME
|
||||
LDX #1 ; {4C3B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {4C3B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C3B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {37C3B} CLEAR FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*
|
||||
@@ -117,8 +117,8 @@ FULCK MAC
|
||||
* ]2 = SLOT *
|
||||
* ]3 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 172+ *
|
||||
* SIZE: 116 BYTES *
|
||||
* CYCLES: 770+ *
|
||||
* SIZE: 324 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FLOCK MAC
|
||||
@@ -126,13 +126,13 @@ FLOCK MAC
|
||||
*
|
||||
FMFIL #]FC_LOCK;]2;]3;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {117C70B} SET FILENAME
|
||||
LDX #1 ; {4C3B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C17B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {37C20B} CLEAR FILE BUFF FOR USE
|
||||
FMNAM ]1 ; {117C6B} SET FILENAME
|
||||
LDX #1 ; {4C3B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C3B} GET RETURN CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {37C3B} CLEAR FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -147,20 +147,20 @@ FLOCK MAC
|
||||
* ]3 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 791+ *
|
||||
* SIZE: 412 BYTES *
|
||||
* SIZE: 323 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FDEL MAC
|
||||
*
|
||||
FMFIL #]FC_DEL;]2;]3;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {117C70B} SET FILE NAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C14B} GET CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFF FOR USE
|
||||
FMNAM ]1 ; {117C6B} SET FILE NAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C3B} GET CODE FROM PARAMS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -175,20 +175,20 @@ FDEL MAC
|
||||
* ]3 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 791+ *
|
||||
* SIZE: 411 BYTES *
|
||||
* SIZE: 323 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FVFY MAC
|
||||
*
|
||||
FMFIL #]FC_VFY;]2;]3;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {117C70B} SET FILE NAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN THE FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C14B} GET CODE FROM PARAMETERS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFF FOR USE
|
||||
FMNAM ]1 ; {117C6B} SET FILE NAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE A NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN THE FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C3B} GET CODE FROM PARAMETERS
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -203,20 +203,20 @@ FVFY MAC
|
||||
* ]3 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 797+ *
|
||||
* SIZE: 415 BYTES *
|
||||
* SIZE: 323 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FCLOS MAC
|
||||
*
|
||||
FMFIL #]FC_CLOS;]2;]3;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {117C70B} SET FILENAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C17B} GET RETURN CODE
|
||||
TAX ; {2C1B} AND HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFF FOR USE
|
||||
FMNAM ]1 ; {117C6B} SET FILENAME
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {32C3B} GET RETURN CODE
|
||||
TAX ; {2C1B} AND HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFF FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -232,23 +232,23 @@ FCLOS MAC
|
||||
* ]4 = DRIVE *
|
||||
* *
|
||||
* CYCLES: 927+ *
|
||||
* SIZE: 578 BYTES *
|
||||
* SIZE: 335 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FRENM MAC
|
||||
*
|
||||
FMFIL #]FC_REN;]3;]4;#0;#0 ; {603C303B}
|
||||
*
|
||||
FMNAM ]1 ; {117C70B} SET FILENAME
|
||||
FMNAM ]1 ; {117C6B} SET FILENAME
|
||||
_AXLIT ]2 ; {8C6B}
|
||||
JSR _NAMESTR2 ; {64C42B} COPY TO 2ND FILENAME BUFF
|
||||
JSR _FMNM2 ; {64C42B} SET ADDRESS IN PARAMS
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C14B} GET RETURN CODE
|
||||
TAX ; {2C1B} AND HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
JSR _NAMESTR2 ; {64C3B} COPY TO 2ND FILENAME BUFF
|
||||
JSR _FMNM2 ; {64C3B} SET ADDRESS IN PARAMS
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C3B} GET RETURN CODE
|
||||
TAX ; {2C1B} AND HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -266,23 +266,23 @@ FRENM MAC
|
||||
* ]6 = FILE TYPE *
|
||||
* *
|
||||
* CYCLES: 828+ *
|
||||
* SIZE: 433 BYTES *
|
||||
* SIZE: 331 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FOPEN MAC
|
||||
*
|
||||
FMFIL #]FC_OPEN;]2;]3;]4;]5 ; {603C303B}
|
||||
*
|
||||
LDA ]6 ; {4C3B} FILE TYPE IF NEW FILE
|
||||
LDY #]P_TYPE ; {3C2B} SET TYPE FOR WRITING
|
||||
JSR _FMPSET ; {30C16B}
|
||||
FMNAM ]1 ; {117C70B} SET THE FILENAME
|
||||
LDX #0 ; {3C2B} NEW FILE ON OPEN
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C14B} GET RETURN CODE
|
||||
TAX ; {2C1B} HOLD IT IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
LDA ]6 ; {4C3B} FILE TYPE IF NEW FILE
|
||||
LDY #]P_TYPE ; {3C2B} SET TYPE FOR WRITING
|
||||
JSR _FMPSET ; {30C3B}
|
||||
FMNAM ]1 ; {117C6B} SET THE FILENAME
|
||||
LDX #0 ; {3C2B} NEW FILE ON OPEN
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RETC ; {3C2B} SET INDEX TO RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C3B} GET RETURN CODE
|
||||
TAX ; {2C1B} HOLD IT IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
<<<
|
||||
*
|
||||
*
|
||||
@@ -315,19 +315,19 @@ FOPEN MAC
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 3768+ *
|
||||
* SIZE: 2735 BYTES *
|
||||
* SIZE: 42 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BLOAD MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE STRING ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE LOAD ADDRESS
|
||||
LDA ]3 ; {4C3B} LOAD SLOT
|
||||
STA BPAR1 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]4 ; {4C3B} LOAD DRIVE
|
||||
STA BPAR2 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]5 ; {4C3B} LOAD VOLUME
|
||||
STA BPAR3 ; {3C2B} AND STORE ON ZERO
|
||||
JSR FBLOAD ; {3715C2696B} RUN FBLOAD SUBROUTINE
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE STRING ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE LOAD ADDRESS
|
||||
LDA ]3 ; {4C3B} LOAD SLOT
|
||||
STA ZPB1 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]4 ; {4C3B} LOAD DRIVE
|
||||
STA ZPB2 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]5 ; {4C3B} LOAD VOLUME
|
||||
STA ZPB3 ; {3C2B} AND STORE ON ZERO
|
||||
JSR FBLOAD ; {3715C3B} RUN FBLOAD SUBROUTINE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -355,18 +355,18 @@ BLOAD MAC
|
||||
* ^^^ ^ *
|
||||
* *
|
||||
* CYCLES: 5300+ *
|
||||
* SIZE: 2758 BYTES *
|
||||
* SIZE: 53 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BSAVE MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B} PARSE STRING ADDRESS
|
||||
_MLIT ]2;WPAR2 ; {16C12B} PARSE LOAD ADDRESS
|
||||
_MLIT ]3;WPAR3 ; {16C12B}
|
||||
LDA ]4 ; {4C3B} LOAD SLOT
|
||||
STA BPAR1 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]5 ; {4C3B} LOAD DRIVE
|
||||
STA BPAR2 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]6 ; {4C3B} LOAD VOLUME
|
||||
STA BPAR3 ; {3C2B} AND STORE ON ZERO
|
||||
JSR FBSAVE ; {5231C2707B} RUN FBLOAD SUBROUTINE
|
||||
_MLIT ]1;ZPW1 ; {16C12B} PARSE STRING ADDRESS
|
||||
_MLIT ]2;ZPW2 ; {16C12B} PARSE LOAD ADDRESS
|
||||
_MLIT ]3;ZPW3 ; {16C12B}
|
||||
LDA ]4 ; {4C3B} LOAD SLOT
|
||||
STA ZPB1 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]5 ; {4C3B} LOAD DRIVE
|
||||
STA ZPB2 ; {3C2B} AND STORE ON ZERO
|
||||
LDA ]6 ; {4C3B} LOAD VOLUME
|
||||
STA ZPB3 ; {3C2B} AND STORE ON ZERO
|
||||
JSR FBSAVE ; {5231C3B} RUN FBLOAD SUBROUTINE
|
||||
<<<
|
||||
|
||||
@@ -48,13 +48,13 @@ DVER MAC
|
||||
CLC ; {2C1B} CLEAR CARRY FLAG
|
||||
LDA #0 ; {3C2B} CLEAR ACCUMULATOR
|
||||
ADC #$BE ; {2C2B} ADD #$16BE TO DOS LOAD POINT
|
||||
STA ADDR1 ; {3C2B} STORE LOW BYTE
|
||||
STA ZPWSYS ; {3C2B} STORE LOW BYTE
|
||||
LDA $3D2 ; {4C3B} LOAD DOS LOADING POINT
|
||||
ADC #$16 ; {2C2B} ADD OFFSET
|
||||
STA ADDR1+1 ; {3C2B} STORE HIGH BYTE
|
||||
STA ZPWSYS+1 ; {3C2B} STORE HIGH BYTE
|
||||
LDY #0 ; {3C2B} SET INDEX TO 0
|
||||
LDA (ADDR1),Y ; {6C2B} RETURNS #2 OR #3 FOR
|
||||
; THE DOS VERSION IN .A
|
||||
LDA (ZPWSYS),Y ; {6C2B} RETURNS #2 OR #3 FOR
|
||||
; THE DOS VERSION IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -112,7 +112,7 @@ DOSIN MAC
|
||||
*
|
||||
ABAS MAC
|
||||
LDA #$4C ; {4C3B} CODE FOR APPLESOFT
|
||||
; #$20 IS FOR INTEGER BASIC
|
||||
; #$20 IS FOR INTEGER BASIC
|
||||
CMP $E000 ; {4C3B} CORRECT BASIC ALREADY THERE?
|
||||
BEQ ]APPLES ; {3C2B} YES, GOTO RETURN CARRY
|
||||
STA $C080 ; {4C3B} NOW IS IT THERE?
|
||||
@@ -121,7 +121,7 @@ ABAS MAC
|
||||
STA $C081 ; {4C3B} STILL NO, TRY ROM CARD
|
||||
CMP $E000 ; {4C3B} THERE NOW?
|
||||
BEQ ]APPLES ; {3C2B} YEP, GOTO RETURN CARRY
|
||||
; NOPE, DON'T RETURN CARRY
|
||||
; NOPE, DON'T RETURN CARRY
|
||||
CLC ; {2C1B}
|
||||
JMP ]EXIT ; {3C3B}
|
||||
]APPLES
|
||||
@@ -157,7 +157,7 @@ IBEX MAC
|
||||
JMP ]EXIT ; {3C3B} AND EXIT
|
||||
]NO
|
||||
CLC ; {2C1B} NOT RUNNING, SO CLEAR CARRY
|
||||
]EXIT ; AND EXIT
|
||||
]EXIT ; AND EXIT
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
* ]7 = RWTS COMMAND *
|
||||
* *
|
||||
* CYCLES: 228+ *
|
||||
* SIZE: 141 BYTES *
|
||||
* SIZE: 66 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
SRWTS MAC
|
||||
@@ -62,12 +62,12 @@ SRWTS MAC
|
||||
STA MTRACK ; {4C3B}
|
||||
LDA ]5 ; {4C3B} RWTS SECTOR
|
||||
STA MSECTOR ; {4C3B}
|
||||
IF #=]6 ; IF VALUE IS A LITERAL
|
||||
IF #=]6 ; IF VALUE IS A LITERAL
|
||||
LDA ]6 ; {4C3B} THEN STORE LITERAL
|
||||
STA MBUFFER ; {4C3B} LOW AND HIGH BYTES
|
||||
LDA ]6/$100 ; {4C3B}
|
||||
STA MBUFFER+1 ; {4C3B}
|
||||
ELSE ; OTHERWISE,
|
||||
ELSE ; OTHERWISE,
|
||||
LDA ]6 ; {4C3B} LOAD VALUE FROM ADDRESS
|
||||
STA MBUFFER ; {4C3B} AND STORE IN BUFFER
|
||||
LDA ]6+1 ; {4C3B} ADDRESS POINTER
|
||||
@@ -75,7 +75,7 @@ SRWTS MAC
|
||||
FIN
|
||||
LDA ]7 ; {4C3B} RWTS COMMAND
|
||||
STA MCMD ; {4C3B}
|
||||
JSR _SETRWTS ; {148C81B} SET THE PARAMETERS
|
||||
JSR _SETRWTS ; {148C3B} SET THE PARAMETERS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -115,29 +115,29 @@ GRWTS MAC
|
||||
* ]5 = RECORD NUMBER *
|
||||
* *
|
||||
* CYCLES: 603+ *
|
||||
* SIZE: 303 BYTES *
|
||||
* SIZE: 52 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FMFIL MAC
|
||||
JSR _FMGETPARM ; {26C13B} GET FILE PARAMS ADDRESS
|
||||
JSR _FMBUFFSCAN ; {217C120B} SCAN FOR FREE FILE BUFF
|
||||
JSR _SETPBUFFS ; {125C67B} SET PARAMETER BUFFERS
|
||||
LDA ]1 ; {4C3B} COMMAND TO PARAMETERS
|
||||
LDY #]P_CMD ; {3C2B} SET INDEX TO COMMAND OFFSET
|
||||
JSR _FMPSET ; {36C19B} SET COMMAND
|
||||
LDA ]2 ; {4C3B} SLOT TO PARAMETERS
|
||||
LDY #]P_SLOT ; {3C2B} SET INDEX TO SLOT OFFSET
|
||||
JSR _FMPSET ; {36C19B} SET SLOT
|
||||
; VOLUME AND RECORD NUMBER
|
||||
LDA ]3 ; {4C3B} DRIVE TO PARAMETERS
|
||||
LDY #]P_DRV ; {3C2B} SET INDEX TO DRIVE OFFSET
|
||||
JSR _FMPSET ; {36C19B} SET DRIVE
|
||||
LDA ]4 ; {4C3B} VOLUME TO PARAMS, 0 FOR ANY
|
||||
LDY #]P_VOL ; {3C2B} SET INDEX TO VOLUME OFFSET
|
||||
JSR _FMPSET ; {36C19B} SET VOLUME
|
||||
JSR _FMGETPARM ; {26C3B} GET FILE PARAMS ADDRESS
|
||||
JSR _FMBUFFSCAN ; {217C3B} SCAN FOR FREE FILE BUFF
|
||||
JSR _SETPBUFFS ; {125C3B} SET PARAMETER BUFFERS
|
||||
LDA ]1 ; {4C3B} COMMAND TO PARAMETERS
|
||||
LDY #]P_CMD ; {3C2B} SET INDEX TO COMMAND OFFSET
|
||||
JSR _FMPSET ; {36C3B} SET COMMAND
|
||||
LDA ]2 ; {4C3B} SLOT TO PARAMETERS
|
||||
LDY #]P_SLOT ; {3C2B} SET INDEX TO SLOT OFFSET
|
||||
JSR _FMPSET ; {36C3B} SET SLOT
|
||||
; VOLUME AND RECORD NUMBER
|
||||
LDA ]3 ; {4C3B} DRIVE TO PARAMETERS
|
||||
LDY #]P_DRV ; {3C2B} SET INDEX TO DRIVE OFFSET
|
||||
JSR _FMPSET ; {36C3B} SET DRIVE
|
||||
LDA ]4 ; {4C3B} VOLUME TO PARAMS, 0 FOR ANY
|
||||
LDY #]P_VOL ; {3C2B} SET INDEX TO VOLUME OFFSET
|
||||
JSR _FMPSET ; {36C3B} SET VOLUME
|
||||
_AXLIT ]5 ; {8C6B}
|
||||
LDY #]P_REC ; {3C2B} SET INDEX TO RECORD OFFSET
|
||||
JSR _FMPSETA ; {52C29B} SET RECORD LOW AND HIGH
|
||||
LDY #]P_REC ; {3C2B} SET INDEX TO RECORD OFFSET
|
||||
JSR _FMPSETA ; {52C3B} SET RECORD LOW AND HIGH
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -154,13 +154,13 @@ FMFIL MAC
|
||||
* ]1 = ADDRESS OF STRING *
|
||||
* *
|
||||
* CYCLES: 117+ *
|
||||
* SIZE: 70 BYTES *
|
||||
* SIZE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FMNAM MAC
|
||||
_AXLIT ]1
|
||||
JSR _NAMESTR ; {70C45B} COPY STRING TO TEMP BUFF
|
||||
JSR _FN2BUFF ; {47C25B} COPY TEMP BUFF TO FNAME BUFF
|
||||
JSR _NAMESTR ; {70C3B} COPY STRING TO TEMP BUFF
|
||||
JSR _FN2BUFF ; {47C3B} COPY TEMP BUFF TO FNAME BUFF
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -183,27 +183,27 @@ FMNAM MAC
|
||||
* ]8 = BYTE TO WRITE (0 READ) *
|
||||
* *
|
||||
* CYCLES: 779+ *
|
||||
* SIZE: 404 BYTES *
|
||||
* SIZE: 342 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FRWB MAC
|
||||
*
|
||||
FMFIL ]2;]3;]4;]5;]6 ; {603C303B}
|
||||
*
|
||||
LDA ]1 ; {4C3B} READ OR WRITE FLAG
|
||||
LDY #]P_RDWR ; {3C2B} INDEX TO READ/WRITE FLAG
|
||||
JSR _FMPSET ; {30C16B} SET THE READ/WRITE FLAG
|
||||
LDA #]SC_PRWB ; {3C2B} SET POS THEN READ OR WRITE
|
||||
LDY #]P_SUBC ; {3C2B} SET INDEX TO SUBCODE OFFSET
|
||||
JSR _FMPSET ; {30C16B} SET THE SUBCODE
|
||||
LDA ]1 ; {4C3B} READ OR WRITE FLAG
|
||||
LDY #]P_RDWR ; {3C2B} INDEX TO READ/WRITE FLAG
|
||||
JSR _FMPSET ; {30C3B} SET THE READ/WRITE FLAG
|
||||
LDA #]SC_PRWB ; {3C2B} SET POS THEN READ OR WRITE
|
||||
LDY #]P_SUBC ; {3C2B} SET INDEX TO SUBCODE OFFSET
|
||||
JSR _FMPSET ; {30C3B} SET THE SUBCODE
|
||||
_AXLIT ]7 ; {8C6B}
|
||||
LDY #]P_BOFF ; {3C2B} INDEX TO BYTE OFFSET
|
||||
JSR _FMPSETA ; {46C26B} SET TWO BYTE OFFSET VALUE
|
||||
LDA ]8 ; {4C3B} BYTE TO WRITE, IF WRITING
|
||||
LDY #]P_BYTE ; {3C2B} WRITE BYTE
|
||||
JSR _FMPSET ; {30C16B} SET BYTE
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_BOFF ; {3C2B} INDEX TO BYTE OFFSET
|
||||
JSR _FMPSETA ; {46C3B} SET TWO BYTE OFFSET VALUE
|
||||
LDA ]8 ; {4C3B} BYTE TO WRITE, IF WRITING
|
||||
LDY #]P_BYTE ; {3C2B} WRITE BYTE
|
||||
JSR _FMPSET ; {30C3B} SET BYTE
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -220,7 +220,7 @@ FRWB MAC
|
||||
* ]6 = BYTE TO WRITE (0 READ) *
|
||||
* *
|
||||
* CYCLES: 665+ *
|
||||
* SIZE: 337 BYTES *
|
||||
* SIZE: 312 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FWRTB MAC
|
||||
@@ -238,10 +238,10 @@ FWRTB MAC
|
||||
*
|
||||
FRWB #4;#]FC_WRIT;]1;]2;]3;]4;]5;]6 ; {603C303B}
|
||||
*
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C14B} GET THE RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C3B} GET THE RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -259,7 +259,7 @@ FWRTB MAC
|
||||
* ]6 = BYTE TO WRITE (0 READ) *
|
||||
* *
|
||||
* CYCLES: 700+ *
|
||||
* SIZE: 357 BYTES *
|
||||
* SIZE: 321 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FRDB MAC
|
||||
@@ -277,14 +277,14 @@ FRDB MAC
|
||||
*
|
||||
FRWB #3;#]FC_READ;]1;]2;]3;]4;]5;]6 ; {603C303B}
|
||||
*
|
||||
LDY #]P_BYTE ; {3C2B} INDEX TO BYTE TO READ
|
||||
JSR _FMPGET ; {26C14B} GET BYTE IN THE PARAMETERS
|
||||
STA BPAR1 ; {3C2B} HOLD IN ZERO PAGE
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO THE RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C14B} GET THE RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
LDA BPAR1 ; {3C2B} PASS READ BYTE IN .A
|
||||
LDY #]P_BYTE ; {3C2B} INDEX TO BYTE TO READ
|
||||
JSR _FMPGET ; {26C3B} GET BYTE IN THE PARAMETERS
|
||||
STA ZPB1 ; {3C2B} HOLD IN ZERO PAGE
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO THE RETURN CODE OFFSET
|
||||
JSR _FMPGET ; {26C3B} GET THE RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
LDA ZPB1 ; {3C2B} PASS READ BYTE IN .A
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -305,7 +305,7 @@ FRDB MAC
|
||||
* ]TEMP = RANGE LENGTH *
|
||||
* *
|
||||
* CYCLES: 846+ *
|
||||
* SIZE: 451 BYTES *
|
||||
* SIZE: 356 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FRWR MAC
|
||||
@@ -314,24 +314,24 @@ FRWR MAC
|
||||
*
|
||||
FMFIL ]2;]3;]4;]5;]6 ; {603C303B}
|
||||
*
|
||||
LDA ]1 ; {4C3B} LOAD READ OR WRITE FLAG
|
||||
LDY #]P_RDWR ; {3C2B} INDEX TO RD/WRT FLAG OFFSET
|
||||
JSR _FMPSET ; {30C16B} SET READ OR WRITE FLAG
|
||||
LDA #]SC_PRWR ; {3C2B} SUBCODE FOR POS AND READ/WRITE
|
||||
LDY #]P_SUBC ; {3C2B} INDEX TO SUBCODE OFFSET
|
||||
JSR _FMPSET ; {30C16B} SET SUBCODE
|
||||
LDA ]1 ; {4C3B} LOAD READ OR WRITE FLAG
|
||||
LDY #]P_RDWR ; {3C2B} INDEX TO RD/WRT FLAG OFFSET
|
||||
JSR _FMPSET ; {30C3B} SET READ OR WRITE FLAG
|
||||
LDA #]SC_PRWR ; {3C2B} SUBCODE FOR POS AND READ/WRITE
|
||||
LDY #]P_SUBC ; {3C2B} INDEX TO SUBCODE OFFSET
|
||||
JSR _FMPSET ; {30C3B} SET SUBCODE
|
||||
_AXLIT ]7 ; {8C6B}
|
||||
LDY #]P_BOFF ; {3C2B} INDEX TO BYTE OFFSET
|
||||
JSR _FMPSETA ; {46C26B} SET BYTE OFFSET
|
||||
LDY #]P_BOFF ; {3C2B} INDEX TO BYTE OFFSET
|
||||
JSR _FMPSETA ; {46C3B} SET BYTE OFFSET
|
||||
_AXLIT ]8 ; {8C6B}
|
||||
LDY #]P_RADDR ; {3C2B} INDEX TO RANGE ADDR OFFSET
|
||||
JSR _FMPSETA ; {46C26B} SET RANGE ADDRESS
|
||||
LDA ]TEMP ; {4C3B} GET RANGE LENGTH
|
||||
LDX ]TEMP+1 ; {4C3B} LOW BYTE AND HIGH BYTE
|
||||
LDY #]P_RLEN ; {3C2B} INDEX TO RANGE LENGTH OFFSET
|
||||
JSR _FMPSETA ; {46C26B} SET RANGE LENGTH
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
LDY #]P_RADDR ; {3C2B} INDEX TO RANGE ADDR OFFSET
|
||||
JSR _FMPSETA ; {46C3B} SET RANGE ADDRESS
|
||||
LDA ]TEMP ; {4C3B} GET RANGE LENGTH
|
||||
LDX ]TEMP+1 ; {4C3B} LOW BYTE AND HIGH BYTE
|
||||
LDY #]P_RLEN ; {3C2B} INDEX TO RANGE LENGTH OFFSET
|
||||
JSR _FMPSETA ; {46C3B} SET RANGE LENGTH
|
||||
LDX #1 ; {3C2B} DON'T CREATE NEW FILE
|
||||
JSR ]FMRUN ; {6C3B} RUN FILE MANAGER
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -350,7 +350,7 @@ FRWR MAC
|
||||
* ]7 = RANGE LENGTH *
|
||||
* *
|
||||
* CYCLES: 697+ *
|
||||
* SIZE: 361 BYTES *
|
||||
* SIZE: 336 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FRDR MAC
|
||||
@@ -368,10 +368,10 @@ FRDR MAC
|
||||
*
|
||||
FRWR #3;#]FC_READ;]1;]2;]3;]4;]5;]6 ; {603C303B}
|
||||
*
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C14B} GET RETURN CODE
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C3B} GET RETURN CODE
|
||||
TAX ; {2C1B} HOLD IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -390,26 +390,26 @@ FRDR MAC
|
||||
* ]7 = RANGE LENGTH *
|
||||
* *
|
||||
* CYCLES: 940+ *
|
||||
* SIZE: 509 BYTES *
|
||||
* SIZE: 389 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
FWRTR MAC
|
||||
IF #=]7 ; IF RANGE LENGTH IS A LITERAL THEN
|
||||
IF #=]7 ; IF RANGE LENGTH IS A LITERAL THEN
|
||||
LDA ]7/$100 ; {4C3B} LOAD HIGH BYTE
|
||||
STA ]TEMP+1 ; {4C3B} AND STORE IN TEMP
|
||||
LDA ]7 ; {4C3B} LOAD LOW BYTE
|
||||
STA ]TEMP ; {4C3B} AND STORE IN TEMP
|
||||
ELSE ; OTHERWISE
|
||||
ELSE ; OTHERWISE
|
||||
LDA ]7+1 ; {4C3B} LOAD HIGH BYTE
|
||||
STA ]TEMP+1 ; {4C3B} AND STORE IN TEMP
|
||||
LDA ]7 ; {4C3B} LOAD LOW BYTE
|
||||
STA ]TEMP ; {4C3B} AND STORE IN TEMP
|
||||
FIN
|
||||
*
|
||||
FRWR #4;#]FC_WRIT;]1;]2;]3;]4;]5;]6 ; {846C451B}
|
||||
FRWR #4;#]FC_WRIT;]1;]2;]3;]4;]5;]6 ; {846C356B}
|
||||
*
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C14B} GET RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C17B} CLEAR FILE BUFFER FOR USE
|
||||
LDY #]P_RETC ; {3C2B} INDEX TO RETURN CODE
|
||||
JSR _FMPGET ; {26C3B} GET RETURN CODE
|
||||
TAX ; {2C1B} PASS BACK IN .X
|
||||
JSR _BUFFCLEAR ; {31C3B} CLEAR FILE BUFFER FOR USE
|
||||
<<<
|
||||
|
||||
Binary file not shown.
@@ -15,12 +15,12 @@
|
||||
* *
|
||||
* INPUT *
|
||||
* *
|
||||
* WPAR1 = FILENAME STR ADDR *
|
||||
* WPAR2 = LOAD ADDRESS *
|
||||
* WPAR3 = RANGE LENGTH *
|
||||
* BPAR1 = SLOT *
|
||||
* BPAR2 = DRIVE *
|
||||
* BPAR3 = VOLUME *
|
||||
* ZPW1 = FILENAME STR ADDR *
|
||||
* ZPW2 = LOAD ADDRESS *
|
||||
* ZPW3 = RANGE LENGTH *
|
||||
* ZPB1 = SLOT *
|
||||
* ZPB2 = DRIVE *
|
||||
* ZPB3 = VOLUME *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -29,12 +29,12 @@
|
||||
* SIZE: 2707 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]FNSTR EQU WPAR1
|
||||
]LDADDR EQU WPAR2
|
||||
]FLEN EQU WPAR3
|
||||
]SLOT EQU BPAR1
|
||||
]DRIVE EQU BPAR2
|
||||
]VOL EQU BPAR3
|
||||
]FNSTR EQU ZPW1
|
||||
]LDADDR EQU ZPW2
|
||||
]FLEN EQU ZPW3
|
||||
]SLOT EQU ZPB1
|
||||
]DRIVE EQU ZPB2
|
||||
]VOL EQU ZPB3
|
||||
*
|
||||
FBSAVE
|
||||
*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 13-MAY-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 13-MAY-2019 *
|
||||
* DATE: 05-JUN-2019 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* DATE: 13-MAY-2021 *
|
||||
* DATE: 05-JUN-2021 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
@@ -43,12 +43,12 @@
|
||||
* ]1 = VALUE TO CONVERT *
|
||||
* *
|
||||
* CYCLES: 290+ *
|
||||
* SIZE: 172 BYTES *
|
||||
* SIZE: 15 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
I2STR MAC
|
||||
_MLIT ]1;WPAR1 ; {16C12B}
|
||||
JSR HEX2INTASC ; {274C160B}
|
||||
_MLIT ]1;ZPW1 ; {16C12B}
|
||||
JSR HEX2INTASC ; {274C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -62,12 +62,12 @@ I2STR MAC
|
||||
* ]1 = STRING OR ITS ADDRESS *
|
||||
* *
|
||||
* CYCLES: 415+ *
|
||||
* SIZE: 196 BYTES *
|
||||
* SIZE: 15 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STR2I MAC
|
||||
_MSTR ]1;WPAR1 ; {16C12B}
|
||||
JSR INTASC2HEX ; {399C184B}
|
||||
_MSTR ]1;ZPW1 ; {16C12B}
|
||||
JSR INTASC2HEX ; {399C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -82,12 +82,12 @@ STR2I MAC
|
||||
* OR THE ADDRESS *
|
||||
* *
|
||||
* CYCLES: 97+ *
|
||||
* SIZE: 59 BYTES *
|
||||
* SIZE: 6 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
H2STR MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
JSR HEX2HEXASC ; {93C56B}
|
||||
JSR HEX2HEXASC ; {93C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -101,12 +101,12 @@ H2STR MAC
|
||||
* ]1 = STRING OR ITS ADDRESS *
|
||||
* *
|
||||
* CYCLES: 116+ *
|
||||
* SIZE: 71 BYTES *
|
||||
* SIZE: 15 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STR2H MAC
|
||||
_MSTR ]1;WPAR1 ; {16C12B}
|
||||
JSR HEXASC2HEX ; {100C59B}
|
||||
_MSTR ]1;ZPW1 ; {16C12B}
|
||||
JSR HEXASC2HEX ; {100C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -120,13 +120,13 @@ STR2H MAC
|
||||
* ]1 = HEX VALUE OR ADDRESS *
|
||||
* *
|
||||
* CYCLES: 262+ *
|
||||
* SIZE: 167 BYTES *
|
||||
* SIZE: 8 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
B2STR MAC
|
||||
LDA ]1 ; {4C3B}
|
||||
STA BPAR1 ; {3C2B}
|
||||
JSR HEX2BINASC ; {255C162C}
|
||||
STA ZPB1 ; {3C2B}
|
||||
JSR HEX2BINASC ; {255C3B}
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
@@ -140,10 +140,10 @@ B2STR MAC
|
||||
* ]1 = STRING OR ITS ADDRESS *
|
||||
* *
|
||||
* CYCLES: 501+ *
|
||||
* SIZE: 331 BYTES *
|
||||
* SIZE: 15 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
STR2B MAC
|
||||
_MSTR ]1;WPAR1 ; {16C12B}
|
||||
JSR BINASC2HEX ; {485C319B}
|
||||
_MSTR ]1;ZPW1 ; {16C12B}
|
||||
JSR BINASC2HEX ; {485C3B}
|
||||
<<<
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* WPAR1 = STRING ADDRESS PTR *
|
||||
* ZPW1 = STRING ADDRESS PTR *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -17,10 +17,10 @@
|
||||
* SIZE: 329 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]HIGH EQU VARTAB
|
||||
]LOW EQU VARTAB+2
|
||||
]NIB EQU VARTAB+4
|
||||
]STR EQU WPAR1
|
||||
]HIGH EQU ZPW2
|
||||
]LOW EQU ZPW3
|
||||
]NIB EQU ZPW4
|
||||
]STR EQU ZPW1
|
||||
*
|
||||
BINASC2HEX
|
||||
*
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* *
|
||||
* INPUT: *
|
||||
* *
|
||||
* BPAR1 = HEX BYTE TO CONVERT *
|
||||
* ZPB1 = HEX BYTE TO CONVERT *
|
||||
* *
|
||||
* DESTROY: NZCIDV *
|
||||
* ^^^ ^ *
|
||||
@@ -29,9 +29,9 @@
|
||||
ASC "1110" ; E {0C4B}
|
||||
ASC "1111" ; F {0C4B}
|
||||
*
|
||||
]LEFT EQU VARTAB ; LEFT NIBBLE
|
||||
]RIGHT EQU VARTAB+2 ; RIGHT NIBBLE
|
||||
]HBYTE EQU BPAR1 ; HEX BYTE
|
||||
]LEFT EQU ZPW1 ; LEFT NIBBLE
|
||||
]RIGHT EQU ZPW2 ; RIGHT NIBBLE
|
||||
]HBYTE EQU ZPB1 ; HEX BYTE
|
||||
*
|
||||
HEX2BINASC
|
||||
*
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
* SIZE: 53 BYTES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
]LEFT EQU VARTAB ; LEFT NIBBLE
|
||||
]RIGHT EQU VARTAB+2 ; RIGHT NIBBLE
|
||||
]HBYTE EQU VARTAB+4 ; HEX BYTE TO CONVERT
|
||||
]LEFT EQU ZPW1 ; LEFT NIBBLE
|
||||
]RIGHT EQU ZPW2 ; RIGHT NIBBLE
|
||||
]HBYTE EQU ZPW3 ; HEX BYTE TO CONVERT
|
||||
]HEXTAB ASC "0123456789ABCDEF" ; HEX LOOKUP TABLE
|
||||
*
|
||||
HEX2HEXASC
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user