updated source files

This commit is contained in:
Nathan D Riggs
2021-06-05 21:40:51 -04:00
parent b12e67bd4f
commit 747aeeb812
124 changed files with 1821 additions and 3187 deletions
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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 *
* *
+8 -8
View File
@@ -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}
<<<
+4 -4
View File
@@ -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}
+12 -12
View File
@@ -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}
+17 -476
View File
@@ -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
*
+46 -60
View File
@@ -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
+21 -365
View File
@@ -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
+1 -1
View File
@@ -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 *
* *
-16
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
+76 -522
View File
@@ -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}
<<<
*
+1 -1
View File
@@ -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
*
*``````````````````````````````*
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+53 -53
View File
@@ -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
<<<
+17 -17
View File
@@ -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
<<<
+91 -91
View File
@@ -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
<<<
+22 -22
View File
@@ -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
<<<
+5 -5
View File
@@ -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
+11 -11
View File
@@ -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
+13 -19
View File
@@ -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
+18 -18
View File
@@ -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
+16 -16
View File
@@ -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
+16 -16
View File
@@ -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
*
********************************
* *
+19 -19
View File
@@ -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}
+35 -35
View File
@@ -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}
+27 -27
View File
@@ -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}
+8 -8
View File
@@ -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 -4
View File
@@ -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
*
+4 -4
View File
@@ -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
*
+15 -15
View File
@@ -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
+8 -8
View File
@@ -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}
*
+16 -16
View File
@@ -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
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+18 -18
View File
@@ -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}
<<<
*
+22 -22
View File
@@ -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}
<<<
*
+22 -22
View File
@@ -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}
<<<
*
+30 -30
View File
@@ -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}
<<<
*
+19 -19
View File
@@ -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
+16 -16
View File
@@ -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}
+15 -15
View File
@@ -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
+17 -17
View File
@@ -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,
+20 -20
View File
@@ -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}
+19 -19
View File
@@ -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}
+16 -16
View File
@@ -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
+16 -16
View File
@@ -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
+22 -22
View File
@@ -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}
+19 -19
View File
@@ -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}
+12 -12
View File
@@ -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
+23 -23
View File
@@ -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}
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+24 -24
View File
@@ -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
View File
@@ -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
<<<
*
+18 -18
View File
@@ -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
<<<
+11 -11
View File
@@ -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}
<<<
+1 -1
View File
@@ -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 *
* *
+5 -5
View File
@@ -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}
<<<
*
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
+4 -4
View File
@@ -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
+4 -4
View File
@@ -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
+5 -5
View File
@@ -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
+4 -4
View File
@@ -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}
+1 -1
View File
@@ -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
+15 -15
View File
@@ -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
+4 -4
View File
@@ -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}
+5 -5
View File
@@ -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
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+25 -29
View File
@@ -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}
<<<
+29 -29
View File
@@ -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}
<<<
+4 -4
View File
@@ -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
*
+7 -7
View File
@@ -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
*
+4 -4
View File
@@ -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
*
+4 -4
View File
@@ -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
*
+3 -3
View File
@@ -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
+6 -6
View File
@@ -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
+4 -4
View File
@@ -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
*
+5 -5
View File
@@ -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 -6
View File
@@ -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 -6
View File
@@ -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}
+9 -9
View File
@@ -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}
+10 -10
View File
@@ -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
+12 -12
View File
@@ -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
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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
View File
@@ -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}
+93 -93
View File
@@ -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
<<<
+7 -7
View File
@@ -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
<<<
*
*``````````````````````````````*
+84 -84
View File
@@ -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.
+12 -12
View File
@@ -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
*
+1 -1
View File
@@ -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 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
+1 -1
View File
@@ -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 *
+18 -18
View File
@@ -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}
<<<
+5 -5
View File
@@ -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
*
+4 -4
View File
@@ -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
*
+3 -3
View File
@@ -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