mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2025-02-17 09:30:26 +00:00
stdio 0.2.0 updates
- fixed a bunch of bugs - separated common and stdio libraries - commenting upgrades - created min versions of each library
This commit is contained in:
parent
12735da905
commit
875dd80998
Binary file not shown.
BIN
bin/d1_stdio.dsk
Normal file
BIN
bin/d1_stdio.dsk
Normal file
Binary file not shown.
BIN
bin/d2_common.dsk
Normal file
BIN
bin/d2_common.dsk
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
1414
disks/disk2_common/COMMON.DEMO
Normal file
1414
disks/disk2_common/COMMON.DEMO
Normal file
File diff suppressed because it is too large
Load Diff
1919
disks/disk2_common/COMMON.DEMO.S
Normal file
1919
disks/disk2_common/COMMON.DEMO.S
Normal file
File diff suppressed because it is too large
Load Diff
188
disks/disk2_common/T.COMMON.DEMO
Normal file
188
disks/disk2_common/T.COMMON.DEMO
Normal file
@ -0,0 +1,188 @@
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* -< COMMON DEMO )- *
|
||||
* *
|
||||
* VERSION 00.02.00 *
|
||||
* *
|
||||
* 12-DEC-2018 *
|
||||
* *
|
||||
********************************
|
||||
* *
|
||||
* NATHAN D. RIGGS *
|
||||
* NATHAN.RIGGS@OUTLOOK.COM *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** ASSEMBLER DIRECTIVES
|
||||
*
|
||||
CYC AVE
|
||||
EXP ONLY
|
||||
DSK COMMON.DEMO
|
||||
OBJ $BFE0
|
||||
ORG $6000
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* TOP INCLUDES (HOOKS,MACROS) *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
USE REQUIRED.MAC
|
||||
PUT REQUIRED.HOOKS
|
||||
USE COMMON.MAC
|
||||
PUT COMMON.HOOKS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* PROGRAM MAIN BODY *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** MEMFILL DOES ABOUT WHAT ITS NAME
|
||||
** IMPLIES: IT FILLS A BLOCK OF MEMORY
|
||||
** WITH A PARTICULAR CHARACTER.
|
||||
*
|
||||
** MACRO: MFILL ADDRESS_START;BYTE_LENGTH;FILL_VALUE
|
||||
*
|
||||
LDA #>$300 ; AREA TO FILL; HIGH
|
||||
PHA
|
||||
LDA #<$300 ; LOW
|
||||
PHA
|
||||
LDA #>10
|
||||
PHA
|
||||
LDA #<10
|
||||
PHA
|
||||
LDA #0 ; FILL CHARACTER
|
||||
PHA
|
||||
JSR MEMFILL
|
||||
*
|
||||
_PRNT "MEMFILL FILLS A PORTION OF MEMORY WITH",8D
|
||||
_PRNT "A SPECIFIED VALUE. ",8D8D
|
||||
_DUMP $300;#10
|
||||
_WAIT
|
||||
*
|
||||
** MEMMOVE ALSO DOES WHAT IT SAYS: IT MOVES
|
||||
** A BLOCK OF MEMORY FROM A SOURCE LOCATION
|
||||
** TO A DESTINATION LOCATION. WE'LL NOW MOVE
|
||||
** THOSE ZEROES PLACED BY MEMFILL TO ANOTHER
|
||||
** LOCATION.
|
||||
*
|
||||
** MACRO: MMOVE SRC_ADDR;DEST_ADDR;BYTE_LENGTH
|
||||
*
|
||||
LDA #>$300 ; SRC HIGH
|
||||
PHA
|
||||
LDA #<$300 ; SRC LOW
|
||||
PHA
|
||||
LDA #>$320 ; DEST HIGH
|
||||
PHA
|
||||
LDA #<$320 ; DEST LOW
|
||||
PHA
|
||||
LDA #>10 ; # OF BYTES TO MOVE
|
||||
PHA
|
||||
LDA #<10 ; LOW BYTE
|
||||
PHA
|
||||
JSR MEMMOVE
|
||||
*
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "MEMMOVE MOVES COPIES A SPAN OF MEMORY",8D
|
||||
_PRNT "FROM A SOURCE TO A DESTINATION ADDRESS.",8D8D
|
||||
_PRNT "SO MOVING $300 TO $320 RESULTS IN:",8D8D
|
||||
_DUMP $320;#10
|
||||
_WAIT
|
||||
*
|
||||
** DELAYMS RUNS THROUGH CYCLES OF THE
|
||||
** 6502 UNTIL A CERTAIN AMOUNT OF TIME
|
||||
** HAS PASSED.
|
||||
*
|
||||
** MACRO: DELAY #250
|
||||
*
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "DELAYMS DELAYS A SPECIFIED NUMBER OF",8D
|
||||
_PRNT "MILLISECONDS. 250 MILLISECONDS = 1/4 SECOND.",8D8D
|
||||
*
|
||||
LDY #250 ; TIME IN MILLISECONDS
|
||||
; IS PASSED VIA Y
|
||||
; 250 = 1/4 SECOND
|
||||
JSR DELAYMS
|
||||
BEEP 1
|
||||
_PRNT "1/4 SECOND",8D
|
||||
LDY #250
|
||||
JSR DELAYMS
|
||||
BEEP 2
|
||||
_PRNT "1/4 SECOND",8D
|
||||
LDY #250
|
||||
JSR DELAYMS
|
||||
BEEP 3
|
||||
_PRNT "1/4 SECOND",8D
|
||||
LDY #250
|
||||
JSR DELAYMS ; = 1 SECOND DELAY
|
||||
BEEP 4
|
||||
_PRNT "1/4 SECOND",8D
|
||||
*
|
||||
_PRNT " ",8D8D
|
||||
_WAIT
|
||||
*
|
||||
** ZMSAVE BACKS UP THE "FREE" AREAS OF
|
||||
** THE ZERO PAGE TO AN ALTERNATE MEMORY
|
||||
** LOCATION. THIS IS MOSTLY USEFUL WHEN
|
||||
** YOU KNOW A ROUTINE USES THE ZERO PAGE,
|
||||
** BUT YOU WANT TO KEEP THE VALUES CURRENTLY
|
||||
** STORED THERE AFTER CALLING THE ROUTINE.
|
||||
*
|
||||
** NOTE THAT SINCE THE LIBRARY MAKES HEAVY USE
|
||||
** OF THESE MEMORY ADDRESSES, ANY TIME YOUR CODE
|
||||
** MAKES USE OF THE ZERO PAGE, IT IS ADVISED TO
|
||||
** SAVE THE STATE BEFORE CALLING ANY OTHER ROUTINES.
|
||||
*
|
||||
** MACRO: ZSAVE BACKUP_ADDR
|
||||
*
|
||||
LDA #01
|
||||
STA $06
|
||||
LDA #02
|
||||
STA $07
|
||||
LDA #03
|
||||
STA $08
|
||||
LDA #04
|
||||
STA $09
|
||||
LDA #>$300
|
||||
PHA
|
||||
LDA #<$300 ; LOW DEST
|
||||
PHA
|
||||
JSR ZMSAVE
|
||||
*
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "ZMSAVE SAVES THE STATE OF THE ZERO PAGE ",8D
|
||||
_PRNT "ADDRESSES THAT ARE NOT USED BY DOS,",8D
|
||||
_PRNT "APPLESOFT,PRODOS OR INTEGER BASIC.",8D8D
|
||||
_PRNT "SO THE BACKED UP ZERO PAGE AT $300 IS:",8D8D
|
||||
_DUMP $300;#18
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "18 BYTES ARE USED.",8D8D
|
||||
_WAIT
|
||||
*
|
||||
** YOU CAN RESTORE THE ZERO PAGE TO ITS
|
||||
** PRIOR STATE BY THEN CALLING ZMLOAD.
|
||||
*
|
||||
** MACRO: ZLOAD BACKUP_ADDRESS
|
||||
*
|
||||
LDA #>$300 ; HIGH; SOURCE
|
||||
PHA
|
||||
LDA #<$300 ; LOW
|
||||
PHA
|
||||
JSR ZMLOAD
|
||||
*
|
||||
_PRNT " ",8D8D
|
||||
_PRNT "YOU CAN THEN RESTORE THE FREE ZERO PAGE",8D
|
||||
_PRNT "LOCATIONS WITH ZMLOAD. THERE ISN'T ANY",8D
|
||||
_PRNT "MEANINGFUL OUTPUT TO PUT HERE TO ",8D
|
||||
_PRNT "ILLUSTRATE THAT, SO USE YOUR IMAGINATION!",8D8D
|
||||
_WAIT
|
||||
*
|
||||
JMP REENTRY
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BOTTOM INCLUDES *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
** BOTTOM INCLUDES
|
||||
*
|
||||
PUT COMMON.LIB
|
||||
PUT REQUIRED.LIB
|
||||
*
|
14
disks/disk2_common/T.COMMON.HOOKS
Normal file
14
disks/disk2_common/T.COMMON.HOOKS
Normal file
@ -0,0 +1,14 @@
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
* *
|
||||
* COMMON.LIB HOOKS *
|
||||
* *
|
||||
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*
|
||||
*
|
||||
PROMPT EQU $33
|
||||
COLDENT EQU $03D3 ; COLD ENTRY TO DOS
|
||||
SRESET EQU $03F2 ; SOFT RESET
|
||||
PRNTAX EQU $F941 ; PRINT HEX VALS OF A,X REGISTERS
|
||||
BELL EQU $FBE4 ; RING MY BELL
|
||||
IOSAVE EQU $FF4A ; SAVE CURRENT STATE OF REGISTERS
|
||||
IOREST EQU $FF3F ; RESTORE OLD STATE OF REGISTERS
|
||||
*
|
732
disks/disk2_common/T.COMMON.LIB
Normal file
732
disks/disk2_common/T.COMMON.LIB
Normal file
@ -0,0 +1,732 @@
|
||||
JMP COMMONX
|
||||
*
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
* *
|
||||
* COMMON.LIB *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 12-DEC-2018 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
* COMMON ASM ROUTINES *
|
||||
* LIBRARY FOR FUNCTIONS SUCH *
|
||||
* AS MEMORY SWAPPING. *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
* LIST OF ROUTINES *
|
||||
* *
|
||||
* MEMFILL : FILL LOCATION WITH *
|
||||
* A SINGLE VALUE. *
|
||||
* MEMMOVE : MOVE A BLOCK OF *
|
||||
* MEMORY FROM ONE *
|
||||
* LOC TO ANOTHER. *
|
||||
* DELAYMS : DELAY FOR A NUMBER *
|
||||
* OF MILLISECONDS. *
|
||||
* THIS DEPENDS ON *
|
||||
* THE ACTUAL SYSTEM *
|
||||
* BEING USED, SO *
|
||||
* ISN'T AS EASILY *
|
||||
* PORTED TO OTHER *
|
||||
* 6502 SIBLINGS. *
|
||||
* ZMSAVE : SAVE STATE OF FREE *
|
||||
* ZERO PAGE LOCATIONS *
|
||||
* AT MEM LOC SPECIFIED *
|
||||
* ZMLOAD : LOAD PREVIOUS SAVED *
|
||||
* ZERO PAGE VALUES *
|
||||
* BACK INTO PROPER *
|
||||
* LOCATION. *
|
||||
* *
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMFILL :: FILL MEMORY LOC *
|
||||
*- -*
|
||||
* FILLS A BLOCK OF MEMORY WITH *
|
||||
* THE SPECIFIED VALUE; USED *
|
||||
* OFTEN TO CLEAR LARGE BLOCKS. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* LDA #>1024 *
|
||||
* PHA *
|
||||
* LDA #<1024 *
|
||||
* PHA *
|
||||
* LDA #0 *
|
||||
* PHA *
|
||||
* JSR MEMFILL *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* FILL VALUE FOR MEMORY *
|
||||
* ARRAY SIZE *
|
||||
* LOW BYTE OF STARTING POINT *
|
||||
* HIGH BYTE OF STARTING POINT *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :VALUE
|
||||
PLA
|
||||
STA :ARYSZ
|
||||
PLA
|
||||
STA :ARYSZ+1
|
||||
PLA
|
||||
STA ADDR1 ; ZERO PAGE POINTER
|
||||
PLA ; DEFINED IN
|
||||
STA ADDR1+1 ; DECS
|
||||
*
|
||||
** FILL WHOLE PAGES FIRST
|
||||
*
|
||||
LDA :VALUE ; GET VAL FOR FILL
|
||||
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
|
||||
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (ADDR1),Y
|
||||
INY ; INC TO NEXT BYTE
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
|
||||
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
|
||||
DEX
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
|
||||
*
|
||||
** DO THE REMAINING PARTIAL PAGE
|
||||
** REGISTER A STILL CONTAINS VALUE
|
||||
*
|
||||
:PARTPG
|
||||
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
|
||||
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y ; STORE VAL
|
||||
INY ; INCREMENT INDEX
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :PARTLP ; BRANCH IF NOT DONE
|
||||
:EXIT
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:VALUE DS 1 ; FILL VALUE
|
||||
:ARYSZ DS 2 ; ARRAY SIZE
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMMOVE :: MOVE MEM BLOCK *
|
||||
*- -*
|
||||
* MOVES A SPECIFIED BLOCK OF *
|
||||
* MEMORY FROM A SOURCE ADDRESS *
|
||||
* TO A DESTINATION ADDRESS *
|
||||
* RANGE. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* LDA #>$7000 ; DEST *
|
||||
* PHA *
|
||||
* LDA #<$7000 *
|
||||
* PHA *
|
||||
* LDA #>1024 *
|
||||
* PHA *
|
||||
* LDA #<1024 *
|
||||
* PHA *
|
||||
* JSR MEMMOVE *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* NUMBER OF BYTES TO MOVE *
|
||||
* LOW BYTE OF DESTINATION *
|
||||
* HIGH BYTE OF DESTINATION *
|
||||
* LOW BYTE OF SOURCE ADDRESS *
|
||||
* HIGH BYTE OF SOURCE ADDRESS *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :MVELEN
|
||||
PLA
|
||||
STA :MVELEN+1
|
||||
PLA
|
||||
STA ADDR2 ; ZERO PAGE POINTER
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** 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 ;CALC DEST-SRC
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1 ; MOD 64K AUTOMATIC
|
||||
; -- DISCARD CARRY
|
||||
TAY
|
||||
TXA ; CMP WITH # OF BYTES TO MOVE
|
||||
CMP :MVELEN
|
||||
TYA
|
||||
SBC :MVELEN+1
|
||||
BCS :DOLEFT ; BRANCH IF NO OVERLAP
|
||||
*
|
||||
** DEST AREA IS ABOVE SRC AREA
|
||||
** BUT OVERLAPS IT.
|
||||
** MOVE FROM HIGHEST ADDR TO
|
||||
** AVOID DESTROYING DATA
|
||||
*
|
||||
JSR :MVERHT
|
||||
JMP :EXIT
|
||||
*
|
||||
** NO PROB DOING ORDINARY MOVE
|
||||
** STARTING AT LOWEST ADDR
|
||||
*
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
*
|
||||
********************************
|
||||
* SUBROUTINE: MVELEFT *
|
||||
********************************
|
||||
*
|
||||
:MVELEFT
|
||||
LDY #0 ; ZERO INDEX
|
||||
LDX :MVELEN+1 ; X=# OF FULL PP TO MOVE
|
||||
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
|
||||
:MLPAGE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ;MOVE ONE BYTE
|
||||
INY ; NEXT BYTE
|
||||
BNE :MLPAGE ; CONT UNTIL 256B MOVED
|
||||
INC ADDR1+1 ; ADV TO NEXT SRC PAGE
|
||||
INC ADDR2+1 ; ADV NEXT DEST PAGE
|
||||
DEX ; DEC PAGE COUNT
|
||||
BNE :MLPAGE ; CONT UNTIL ALL FULL
|
||||
; PAGES ARE MOVED
|
||||
:MLPART
|
||||
LDX :MVELEN ; GET LENGTH OF LAST PAGE
|
||||
BEQ :MLEXIT ; BR IF LENGTH OF LAST
|
||||
; PAGE = 0
|
||||
; REG Y IS 0
|
||||
:MLLAST
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
INY ; NEXT BYTE
|
||||
DEX ; DEC COUNTER
|
||||
BNE :MLLAST ; CONT UNTIL LAST P DONE
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
*
|
||||
********************************
|
||||
* SUBROUTINE: MVERHT *
|
||||
********************************
|
||||
*
|
||||
:MVERHT
|
||||
*
|
||||
** MOVE THE PARTIAL PAGE FIRST
|
||||
*
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR1+1
|
||||
STA ADDR1+1 ;POINT TO LAST P OF SRC
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR2+1
|
||||
STA ADDR2+1 ; POINT TO LAST P OF DEST
|
||||
*
|
||||
** MOVE THE LAST PARTIAL PAGE FIRST
|
||||
*
|
||||
LDY :MVELEN ;GET LENGTH OF LAST PAGE
|
||||
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
|
||||
:MR0
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR0 ; BR IF NOT DONE W LAST P
|
||||
:MRPAGE
|
||||
LDX :MVELEN+1 ; GET BYTE OF COUNT AS P CT
|
||||
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
|
||||
:MR1
|
||||
DEC ADDR1+1 ; BACK UP TO PREV SRC PAGE
|
||||
DEC ADDR2+1 ; AND DEST
|
||||
:MR2
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR2 ; BR IF NOT DONE W THIS PAGE
|
||||
DEX
|
||||
BNE :MR1 BR IF NOT ALL PAGES MOVED
|
||||
:MREXIT
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:MVELEN DS 2
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAYMS :: DELAY X MILLISECS *
|
||||
*- -*
|
||||
* DELAYS FOR X NUMBER OF *
|
||||
* MILLISECONDS BY LOOPING *
|
||||
* THROUGH PRECISELY CALCULATED *
|
||||
* NUMBER OF CYCLES. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: -XY- *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDY #250 ;1/4 SEC *
|
||||
* JSR DELAYMS *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* Y = NUMBER OF MILLISECONDS *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = UNCHANGED *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
||||
; SPECIFIC TO 1.23 MHZ
|
||||
; SPEED OF APPLE II
|
||||
:DELAY
|
||||
CPY #0 ; 2 CYCLES
|
||||
BEQ :EXIT ; 2C (EXIT IF DEL=0)
|
||||
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
|
||||
*
|
||||
** IF DELAY IS 1MS THEN GOTO LAST1
|
||||
** THIS LOGIC IS DESIGNED TO BE
|
||||
** 5 CYCLES THROUGH EITHER ATH
|
||||
*
|
||||
CPY #1 ; 2 CYCLES
|
||||
BNE :DELAYA ; 3C IF TAKEN, ELSE 2C
|
||||
JMP :LAST1 ; 3C
|
||||
*
|
||||
** DELAY 1 MILLISENCOND TIMES (Y-1)
|
||||
*
|
||||
:DELAYA
|
||||
DEY ; 2C (PREDEC Y)
|
||||
:DELAY0
|
||||
LDX #MSCNT ; 2C
|
||||
:DELAY1
|
||||
DEX ; 2C
|
||||
BNE :DELAY1 ; 3C
|
||||
NOP ; 2C
|
||||
NOP ; 2C
|
||||
DEY ; 2C
|
||||
BNE :DELAY0 ; 3C
|
||||
:LAST1
|
||||
*
|
||||
** DELAY THE LAST TIME 25 CYCLES
|
||||
** LESS TO TAKE THE CALL, RETURN,
|
||||
** AND ROUTINE OVERHEAD INTO
|
||||
** ACCOUNT.
|
||||
*
|
||||
LDX #MSCNT-3 ; 2C
|
||||
:DELAY2
|
||||
DEX ; 2C
|
||||
BNE :DELAY2 ; 3C
|
||||
:EXIT
|
||||
RTS ; 6C
|
||||
*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZMSAVE :: SAVE 0-PAGE FREE *
|
||||
*- -*
|
||||
* STORES THE VALUES IN THE *
|
||||
* LITTLE FREE SPACE ON THE *
|
||||
* ZERO PAGE AT AN ALTERNATE *
|
||||
* MEMORY LOCATION TO BE *
|
||||
* RETRIEVED AND RESTORED AT A *
|
||||
* LATER POINT. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* JSR ZMSAVE *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LOW BYTE OF DESTINATION *
|
||||
* HIGH BYTE OF DESTINATION *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZMSAVE
|
||||
*
|
||||
** LOAD ADDR1 ZERO PAGE AREA FIRST,
|
||||
** SINCE WE'LL BE USING THAT
|
||||
*
|
||||
** NOTE THAT THIS SHOULD ALWAYS BE
|
||||
** $06 AND $07, OR ELSE CODE WILL
|
||||
** HAVE TO CHANGE.
|
||||
*
|
||||
LDX ADDR1
|
||||
LDY ADDR1+1
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA :RETADR ; LOCAL BECAUSE RETADDR
|
||||
PLA ; IS STORED ON ZERO PAGE
|
||||
STA :RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** COPY ZERO PAGE TO SPECIFIED
|
||||
** NON-ZERO LOCATION (ONLY THE
|
||||
** FREE ONES..)
|
||||
*
|
||||
TYA ; STORE ADDR1 VALS
|
||||
LDY #1 ; FIRST
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
TXA
|
||||
STA (ADDR1),Y
|
||||
LDY #2
|
||||
LDA $08
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $09
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $19
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $1E
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $E3
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $ED
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EF
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FA
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FD
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FF
|
||||
STA (ADDR1),Y
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:RETADR DS 2
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZMLOAD :: RESTORE 0-PAGE MEM *
|
||||
*- -*
|
||||
* RESTORES PREVIOUSLY SAVED *
|
||||
* ZERO PAGE VALUES FROM *
|
||||
* HIGHER MEMORY LOCATION. *
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* JSR ZMLOAD *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LOW BYTE OF SOURCE *
|
||||
* HIGH BYTE OF SOURCE *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZMLOAD
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** COPY ZERO PAGE TO SPECIFIED
|
||||
** NON-ZERO LOCATION (ONLY THE
|
||||
** FREE ONES..)
|
||||
*
|
||||
LDY #2 ; START 2 AHEAD
|
||||
LDA (ADDR1),Y ; AND PUT ADDR1
|
||||
STA $08 ; AREA LAST
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $09
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $19
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $1E
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $E3
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $ED
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EF
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FA
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FD
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FF
|
||||
*
|
||||
** NOW GET ZERO PAGE VALUES
|
||||
** FOR SPACE OCCUPIED BY ADDR; RETURN IN X,Y
|
||||
*
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR1+1),Y
|
||||
TAY
|
||||
STX ADDR1
|
||||
STY ADDR1+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:RETADR DS 2
|
||||
*
|
||||
COMMONX RTS
|
174
disks/disk2_common/T.COMMON.MAC
Normal file
174
disks/disk2_common/T.COMMON.MAC
Normal file
@ -0,0 +1,174 @@
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
* *
|
||||
* COMMON.MAC *
|
||||
* *
|
||||
* AUTHOR: NATHAN RIGGS *
|
||||
* CONTACT: NATHAN.RIGGS@ *
|
||||
* OUTLOOK.COM *
|
||||
* *
|
||||
* VERSION: 0.2.0 *
|
||||
* DATE: 12-DEC-2018 *
|
||||
* ASSEMBLER: MERLIN 8 PRO *
|
||||
* LICENSE: APACHE 2.0 *
|
||||
* OS: DOS 3.3 *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
* THIS IS A MACRO LIBRARY FOR *
|
||||
* COMMON.LIB, AND CAN BE USED *
|
||||
* REGARDLESS OF WHETHER A *
|
||||
* SPECIFIC FUNCTION IS *
|
||||
* INCLUDED AS A PUT IN THE *
|
||||
* MAIN SOURCE. *
|
||||
* *
|
||||
*------------------------------*
|
||||
* *
|
||||
* LIST OF MACROS *
|
||||
* *
|
||||
* MFILL :: FILL MEMORY BLOCK *
|
||||
* MMOVE :: MOVE MEMORY BLOCK *
|
||||
* BEEP :: RING MY BELL *
|
||||
* DELAY :: DELAY IN MILLISECS *
|
||||
* ZSAVE :: SAVE FREE ZERO PAGE *
|
||||
* ZLOAD :: LOAD SAVE ZERO PAGE *
|
||||
* *
|
||||
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MFILL :: FILL MEMORY BLOCK *
|
||||
*- -*
|
||||
* FILL BLOCK OF MEMORY WITH *
|
||||
* SPECIFIED VALUE. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = STARTING ADDRESS *
|
||||
* ]2 = LENGTH IN BYTES *
|
||||
* ]3 = FILL VALUE *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* MFILL $300;#256;#0 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MFILL MAC
|
||||
LDA #>]1 ; STARTING POINT
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; # OF BYTES
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
LDA ]3 ; FILL VALUE
|
||||
PHA
|
||||
JSR MEMFILL
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* BEEP :: RING BELL X TIMES *
|
||||
*- -*
|
||||
* RING THE STANDARD BELL. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = NUMBER OF RINGS *
|
||||
*- -*
|
||||
* SAMPLE USAGE: BELL *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
BEEP MAC
|
||||
LUP ]1
|
||||
JSR BELL
|
||||
--^
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MMOVE :: MOVE MEMORY BLOCK *
|
||||
*- -*
|
||||
* MOVE A BLOCK OF MEMORY FROM *
|
||||
* A SOURCE TO DESTINATION. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* ]1 = SOURCE ADDRESS *
|
||||
* ]2 = DESTINATION ADDRESS *
|
||||
* ]3 = NUMBER OF BYTES *
|
||||
*- -*
|
||||
* SAMPLE USAGE: *
|
||||
* *
|
||||
* MMOVE $6A00;$7B00;#1024 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MMOVE MAC
|
||||
LDA #>]1 ; SRC ADDR
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA #>]2 ; DEST ADDR
|
||||
PHA
|
||||
LDA #<]2
|
||||
PHA
|
||||
LDA #>]3 ; # OF BYTES
|
||||
PHA
|
||||
LDA #<]3
|
||||
PHA
|
||||
JSR MEMMOVE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAY :: DELAY X MILLISECS *
|
||||
*- -*
|
||||
* DELAY FOR PASSED MILLISECS *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = NUM OF MILLISECONDS *
|
||||
*- -*
|
||||
* SAMPLE USAGE: DELAY #250 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAY MAC
|
||||
LDY ]1
|
||||
JSR DELAYMS
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZSAVE :: SAVE ZERO PAGE *
|
||||
*- -*
|
||||
* SAVE ZERO PAGE FREE AREAS *
|
||||
* FOR LATER RESTORE. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = ADDRESS TO STORE AT *
|
||||
*- -*
|
||||
* SAMPLE USAGE: ZSAVE $300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZSAVE MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR ZMSAVE
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZLOAD :: LOAD ZERO PAGE *
|
||||
*- -*
|
||||
* RESTORE PREVIOUSLY SAVED *
|
||||
* FREE ZERO PAGE VALUES. *
|
||||
*- -*
|
||||
* PARAMETERS: *
|
||||
* *
|
||||
* ]1 = ADDR TO LOAD FROM *
|
||||
*- -*
|
||||
* SAMPLE USAGE: ZLOAD $300 *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZLOAD MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR ZMLOAD
|
||||
<<<
|
320
disks/disk2_common/T.COMMON.MIN
Normal file
320
disks/disk2_common/T.COMMON.MIN
Normal file
@ -0,0 +1,320 @@
|
||||
JMP COMMONX
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALUE
|
||||
PLA
|
||||
STA :ARYSZ
|
||||
PLA
|
||||
STA :ARYSZ+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA :VALUE
|
||||
LDX :ARYSZ+1
|
||||
BEQ :PARTPG
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULLPG
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULLPG
|
||||
:PARTPG
|
||||
LDX :ARYSZ
|
||||
BEQ :EXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:VALUE DS 1
|
||||
:ARYSZ DS 2
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MVELEN
|
||||
PLA
|
||||
STA :MVELEN+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA ADDR2
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1
|
||||
TAY
|
||||
TXA
|
||||
CMP :MVELEN
|
||||
TYA
|
||||
SBC :MVELEN+1
|
||||
BCS :DOLEFT
|
||||
JSR :MVERHT
|
||||
JMP :EXIT
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
:MVELEFT
|
||||
LDY #0
|
||||
LDX :MVELEN+1
|
||||
BEQ :MLPART
|
||||
:MLPAGE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
BNE :MLPAGE
|
||||
INC ADDR1+1
|
||||
INC ADDR2+1
|
||||
DEX
|
||||
BNE :MLPAGE
|
||||
:MLPART
|
||||
LDX :MVELEN
|
||||
BEQ :MLEXIT
|
||||
:MLLAST
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :MLLAST
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
:MVERHT
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR1+1
|
||||
STA ADDR1+1
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR2+1
|
||||
STA ADDR2+1
|
||||
LDY :MVELEN
|
||||
BEQ :MRPAGE
|
||||
:MR0
|
||||
DEY
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR0
|
||||
:MRPAGE
|
||||
LDX :MVELEN+1
|
||||
BEQ :MREXIT
|
||||
:MR1
|
||||
DEC ADDR1+1
|
||||
DEC ADDR2+1
|
||||
:MR2
|
||||
DEY
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR2
|
||||
DEX
|
||||
BNE :MR
|
||||
:MREXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:MVELEN DS 2
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
MSCNT EQU $0CA
|
||||
:DELAY
|
||||
CPY #0
|
||||
BEQ :EXIT
|
||||
NOP
|
||||
CPY #1
|
||||
BNE :DELAYA
|
||||
JMP :LAST1
|
||||
:DELAYA
|
||||
DEY
|
||||
:DELAY0
|
||||
LDX #MSCNT
|
||||
:DELAY1
|
||||
DEX
|
||||
BNE :DELAY1
|
||||
NOP
|
||||
NOP
|
||||
DEY
|
||||
BNE :DELAY0
|
||||
:LAST1
|
||||
LDX #MSCNT-3
|
||||
:DELAY2
|
||||
DEX
|
||||
BNE :DELAY2
|
||||
:EXIT
|
||||
RTS
|
||||
*
|
||||
ZMSAVE
|
||||
*
|
||||
LDX ADDR1
|
||||
LDY ADDR1+1
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TYA
|
||||
LDY #1
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
TXA
|
||||
STA (ADDR1),Y
|
||||
LDY #2
|
||||
LDA $08
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $09
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $19
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $1E
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $E3
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $ED
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EF
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FA
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FD
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FF
|
||||
STA (ADDR1),Y
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
RTS
|
||||
:RETADR DS 2
|
||||
*
|
||||
ZMLOAD
|
||||
*
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #2
|
||||
LDA (ADDR1),Y
|
||||
STA $08
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $09
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $19
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $1E
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $E3
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $ED
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EF
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FA
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FD
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FF
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR1+1),Y
|
||||
TAY
|
||||
STX ADDR1
|
||||
STY ADDR1+1
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
RTS
|
||||
:RETADR DS 2
|
||||
COMMONX RTS
|
81
disks/disk2_common/T.DELAYMS
Normal file
81
disks/disk2_common/T.DELAYMS
Normal file
@ -0,0 +1,81 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* DELAYMS :: DELAY X MILLISECS *
|
||||
*- -*
|
||||
* DELAYS FOR X NUMBER OF *
|
||||
* MILLISECONDS BY LOOPING *
|
||||
* THROUGH PRECISELY CALCULATED *
|
||||
* NUMBER OF CYCLES. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: -XY- *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDY #250 ;1/4 SEC *
|
||||
* JSR DELAYMS *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* Y = NUMBER OF MILLISECONDS *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = UNCHANGED *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
|
||||
; SPECIFIC TO 1.23 MHZ
|
||||
; SPEED OF APPLE II
|
||||
:DELAY
|
||||
CPY #0 ; 2 CYCLES
|
||||
BEQ :EXIT ; 2C (EXIT IF DEL=0)
|
||||
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
|
||||
*
|
||||
** IF DELAY IS 1MS THEN GOTO LAST1
|
||||
** THIS LOGIC IS DESIGNED TO BE
|
||||
** 5 CYCLES THROUGH EITHER ATH
|
||||
*
|
||||
CPY #1 ; 2 CYCLES
|
||||
BNE :DELAYA ; 3C IF TAKEN, ELSE 2C
|
||||
JMP :LAST1 ; 3C
|
||||
*
|
||||
** DELAY 1 MILLISENCOND TIMES (Y-1)
|
||||
*
|
||||
:DELAYA
|
||||
DEY ; 2C (PREDEC Y)
|
||||
:DELAY0
|
||||
LDX #MSCNT ; 2C
|
||||
:DELAY1
|
||||
DEX ; 2C
|
||||
BNE :DELAY1 ; 3C
|
||||
NOP ; 2C
|
||||
NOP ; 2C
|
||||
DEY ; 2C
|
||||
BNE :DELAY0 ; 3C
|
||||
:LAST1
|
||||
*
|
||||
** DELAY THE LAST TIME 25 CYCLES
|
||||
** LESS TO TAKE THE CALL, RETURN,
|
||||
** AND ROUTINE OVERHEAD INTO
|
||||
** ACCOUNT.
|
||||
*
|
||||
LDX #MSCNT-3 ; 2C
|
||||
:DELAY2
|
||||
DEX ; 2C
|
||||
BNE :DELAY2 ; 3C
|
||||
:EXIT
|
||||
RTS ; 6C
|
||||
*
|
29
disks/disk2_common/T.DELAYMS.MIN
Normal file
29
disks/disk2_common/T.DELAYMS.MIN
Normal file
@ -0,0 +1,29 @@
|
||||
*
|
||||
DELAYMS
|
||||
*
|
||||
MSCNT EQU $0CA
|
||||
:DELAY
|
||||
CPY #0
|
||||
BEQ :EXIT
|
||||
NOP
|
||||
CPY #1
|
||||
BNE :DELAYA
|
||||
JMP :LAST1
|
||||
:DELAYA
|
||||
DEY
|
||||
:DELAY0
|
||||
LDX #MSCNT
|
||||
:DELAY1
|
||||
DEX
|
||||
BNE :DELAY1
|
||||
NOP
|
||||
NOP
|
||||
DEY
|
||||
BNE :DELAY0
|
||||
:LAST1
|
||||
LDX #MSCNT-3
|
||||
:DELAY2
|
||||
DEX
|
||||
BNE :DELAY2
|
||||
:EXIT
|
||||
RTS
|
119
disks/disk2_common/T.MEMFILL
Normal file
119
disks/disk2_common/T.MEMFILL
Normal file
@ -0,0 +1,119 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMFILL :: FILL MEMORY LOC *
|
||||
*- -*
|
||||
* FILLS A BLOCK OF MEMORY WITH *
|
||||
* THE SPECIFIED VALUE; USED *
|
||||
* OFTEN TO CLEAR LARGE BLOCKS. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* LDA #>1024 *
|
||||
* PHA *
|
||||
* LDA #<1024 *
|
||||
* PHA *
|
||||
* LDA #0 *
|
||||
* PHA *
|
||||
* JSR MEMFILL *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* FILL VALUE FOR MEMORY *
|
||||
* ARRAY SIZE *
|
||||
* LOW BYTE OF STARTING POINT *
|
||||
* HIGH BYTE OF STARTING POINT *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :VALUE
|
||||
PLA
|
||||
STA :ARYSZ
|
||||
PLA
|
||||
STA :ARYSZ+1
|
||||
PLA
|
||||
STA ADDR1 ; ZERO PAGE POINTER
|
||||
PLA ; DEFINED IN
|
||||
STA ADDR1+1 ; DECS
|
||||
*
|
||||
** FILL WHOLE PAGES FIRST
|
||||
*
|
||||
LDA :VALUE ; GET VAL FOR FILL
|
||||
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
|
||||
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (ADDR1),Y
|
||||
INY ; INC TO NEXT BYTE
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
|
||||
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
|
||||
DEX
|
||||
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
|
||||
*
|
||||
** DO THE REMAINING PARTIAL PAGE
|
||||
** REGISTER A STILL CONTAINS VALUE
|
||||
*
|
||||
:PARTPG
|
||||
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
|
||||
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y ; STORE VAL
|
||||
INY ; INCREMENT INDEX
|
||||
DEX ; DECREMENT COUNTER
|
||||
BNE :PARTLP ; BRANCH IF NOT DONE
|
||||
:EXIT
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:VALUE DS 1 ; FILL VALUE
|
||||
:ARYSZ DS 2 ; ARRAY SIZE
|
||||
*
|
45
disks/disk2_common/T.MEMFILL.MIN
Normal file
45
disks/disk2_common/T.MEMFILL.MIN
Normal file
@ -0,0 +1,45 @@
|
||||
*
|
||||
MEMFILL
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :VALUE
|
||||
PLA
|
||||
STA :ARYSZ
|
||||
PLA
|
||||
STA :ARYSZ+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA :VALUE
|
||||
LDX :ARYSZ+1
|
||||
BEQ :PARTPG
|
||||
LDY #0
|
||||
:FULLPG
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
BNE :FULLPG
|
||||
INC ADDR1+1
|
||||
DEX
|
||||
BNE :FULLPG
|
||||
:PARTPG
|
||||
LDX :ARYSZ
|
||||
BEQ :EXIT
|
||||
LDY #0
|
||||
:PARTLP
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :PARTLP
|
||||
:EXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:VALUE DS 1
|
||||
:ARYSZ DS 2
|
210
disks/disk2_common/T.MEMMOVE
Normal file
210
disks/disk2_common/T.MEMMOVE
Normal file
@ -0,0 +1,210 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* MEMMOVE :: MOVE MEM BLOCK *
|
||||
*- -*
|
||||
* MOVES A SPECIFIED BLOCK OF *
|
||||
* MEMORY FROM A SOURCE ADDRESS *
|
||||
* TO A DESTINATION ADDRESS *
|
||||
* RANGE. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* LDA #>$7000 ; DEST *
|
||||
* PHA *
|
||||
* LDA #<$7000 *
|
||||
* PHA *
|
||||
* LDA #>1024 *
|
||||
* PHA *
|
||||
* LDA #<1024 *
|
||||
* PHA *
|
||||
* JSR MEMMOVE *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* NUMBER OF BYTES TO MOVE *
|
||||
* LOW BYTE OF DESTINATION *
|
||||
* HIGH BYTE OF DESTINATION *
|
||||
* LOW BYTE OF SOURCE ADDRESS *
|
||||
* HIGH BYTE OF SOURCE ADDRESS *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = COUNTER; TRASH *
|
||||
* X = COUNTER; TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*- -*
|
||||
* ADAPTED FROM LEVANTHAL AND *
|
||||
* WINTHROP'S /6502 ASSEMBLY *
|
||||
* LANGUAGE ROUTINES/. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA :MVELEN
|
||||
PLA
|
||||
STA :MVELEN+1
|
||||
PLA
|
||||
STA ADDR2 ; ZERO PAGE POINTER
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** 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 ;CALC DEST-SRC
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1 ; MOD 64K AUTOMATIC
|
||||
; -- DISCARD CARRY
|
||||
TAY
|
||||
TXA ; CMP WITH # OF BYTES TO MOVE
|
||||
CMP :MVELEN
|
||||
TYA
|
||||
SBC :MVELEN+1
|
||||
BCS :DOLEFT ; BRANCH IF NO OVERLAP
|
||||
*
|
||||
** DEST AREA IS ABOVE SRC AREA
|
||||
** BUT OVERLAPS IT.
|
||||
** MOVE FROM HIGHEST ADDR TO
|
||||
** AVOID DESTROYING DATA
|
||||
*
|
||||
JSR :MVERHT
|
||||
JMP :EXIT
|
||||
*
|
||||
** NO PROB DOING ORDINARY MOVE
|
||||
** STARTING AT LOWEST ADDR
|
||||
*
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
*
|
||||
********************************
|
||||
* SUBROUTINE: MVELEFT *
|
||||
********************************
|
||||
*
|
||||
:MVELEFT
|
||||
LDY #0 ; ZERO INDEX
|
||||
LDX :MVELEN+1 ; X=# OF FULL PP TO MOVE
|
||||
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
|
||||
:MLPAGE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ;MOVE ONE BYTE
|
||||
INY ; NEXT BYTE
|
||||
BNE :MLPAGE ; CONT UNTIL 256B MOVED
|
||||
INC ADDR1+1 ; ADV TO NEXT SRC PAGE
|
||||
INC ADDR2+1 ; ADV NEXT DEST PAGE
|
||||
DEX ; DEC PAGE COUNT
|
||||
BNE :MLPAGE ; CONT UNTIL ALL FULL
|
||||
; PAGES ARE MOVED
|
||||
:MLPART
|
||||
LDX :MVELEN ; GET LENGTH OF LAST PAGE
|
||||
BEQ :MLEXIT ; BR IF LENGTH OF LAST
|
||||
; PAGE = 0
|
||||
; REG Y IS 0
|
||||
:MLLAST
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
INY ; NEXT BYTE
|
||||
DEX ; DEC COUNTER
|
||||
BNE :MLLAST ; CONT UNTIL LAST P DONE
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
*
|
||||
********************************
|
||||
* SUBROUTINE: MVERHT *
|
||||
********************************
|
||||
*
|
||||
:MVERHT
|
||||
*
|
||||
** MOVE THE PARTIAL PAGE FIRST
|
||||
*
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR1+1
|
||||
STA ADDR1+1 ;POINT TO LAST P OF SRC
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR2+1
|
||||
STA ADDR2+1 ; POINT TO LAST P OF DEST
|
||||
*
|
||||
** MOVE THE LAST PARTIAL PAGE FIRST
|
||||
*
|
||||
LDY :MVELEN ;GET LENGTH OF LAST PAGE
|
||||
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
|
||||
:MR0
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR0 ; BR IF NOT DONE W LAST P
|
||||
:MRPAGE
|
||||
LDX :MVELEN+1 ; GET BYTE OF COUNT AS P CT
|
||||
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
|
||||
:MR1
|
||||
DEC ADDR1+1 ; BACK UP TO PREV SRC PAGE
|
||||
DEC ADDR2+1 ; AND DEST
|
||||
:MR2
|
||||
DEY ; BACK UP Y TO NEXT BYTE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y ; MOVE BYTE
|
||||
CPY #0
|
||||
BNE :MR2 ; BR IF NOT DONE W THIS PAGE
|
||||
DEX
|
||||
BNE :MR1 BR IF NOT ALL PAGES MOVED
|
||||
:MREXIT
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:MVELEN DS 2
|
||||
*
|
99
disks/disk2_common/T.MEMMOVE.MIN
Normal file
99
disks/disk2_common/T.MEMMOVE.MIN
Normal file
@ -0,0 +1,99 @@
|
||||
*
|
||||
MEMMOVE
|
||||
*
|
||||
PLA
|
||||
STA RETADR
|
||||
PLA
|
||||
STA RETADR+1
|
||||
PLA
|
||||
STA :MVELEN
|
||||
PLA
|
||||
STA :MVELEN+1
|
||||
PLA
|
||||
STA ADDR2
|
||||
PLA
|
||||
STA ADDR2+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDA ADDR2
|
||||
SEC
|
||||
SBC ADDR1
|
||||
TAX
|
||||
LDA ADDR2+1
|
||||
SBC ADDR1+1
|
||||
TAY
|
||||
TXA
|
||||
CMP :MVELEN
|
||||
TYA
|
||||
SBC :MVELEN+1
|
||||
BCS :DOLEFT
|
||||
JSR :MVERHT
|
||||
JMP :EXIT
|
||||
:DOLEFT
|
||||
JSR :MVELEFT
|
||||
:EXIT
|
||||
JMP :MREXIT
|
||||
:MVELEFT
|
||||
LDY #0
|
||||
LDX :MVELEN+1
|
||||
BEQ :MLPART
|
||||
:MLPAGE
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
BNE :MLPAGE
|
||||
INC ADDR1+1
|
||||
INC ADDR2+1
|
||||
DEX
|
||||
BNE :MLPAGE
|
||||
:MLPART
|
||||
LDX :MVELEN
|
||||
BEQ :MLEXIT
|
||||
:MLLAST
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
INY
|
||||
DEX
|
||||
BNE :MLLAST
|
||||
:MLEXIT
|
||||
JMP :MREXIT
|
||||
:MVERHT
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR1+1
|
||||
STA ADDR1+1
|
||||
LDA :MVELEN+1
|
||||
CLC
|
||||
ADC ADDR2+1
|
||||
STA ADDR2+1
|
||||
LDY :MVELEN
|
||||
BEQ :MRPAGE
|
||||
:MR0
|
||||
DEY
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR0
|
||||
:MRPAGE
|
||||
LDX :MVELEN+1
|
||||
BEQ :MREXIT
|
||||
:MR1
|
||||
DEC ADDR1+1
|
||||
DEC ADDR2+1
|
||||
:MR2
|
||||
DEY
|
||||
LDA (ADDR1),Y
|
||||
STA (ADDR2),Y
|
||||
CPY #0
|
||||
BNE :MR2
|
||||
DEX
|
||||
BNE :MR
|
||||
:MREXIT
|
||||
LDA RETADR+1
|
||||
PHA
|
||||
LDA RETADR
|
||||
PHA
|
||||
RTS
|
||||
:MVELEN DS 2
|
133
disks/disk2_common/T.ZMLOAD
Normal file
133
disks/disk2_common/T.ZMLOAD
Normal file
@ -0,0 +1,133 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZMLOAD :: RESTORE 0-PAGE MEM *
|
||||
*- -*
|
||||
* RESTORES PREVIOUSLY SAVED *
|
||||
* ZERO PAGE VALUES FROM *
|
||||
* HIGHER MEMORY LOCATION. *
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* JSR ZMLOAD *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LOW BYTE OF SOURCE *
|
||||
* HIGH BYTE OF SOURCE *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZMLOAD
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** COPY ZERO PAGE TO SPECIFIED
|
||||
** NON-ZERO LOCATION (ONLY THE
|
||||
** FREE ONES..)
|
||||
*
|
||||
LDY #2 ; START 2 AHEAD
|
||||
LDA (ADDR1),Y ; AND PUT ADDR1
|
||||
STA $08 ; AREA LAST
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $09
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $19
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $1E
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $E3
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $ED
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EF
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FA
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FD
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FF
|
||||
*
|
||||
** NOW GET ZERO PAGE VALUES
|
||||
** FOR SPACE OCCUPIED BY ADDR; RETURN IN X,Y
|
||||
*
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR1+1),Y
|
||||
TAY
|
||||
STX ADDR1
|
||||
STY ADDR1+1
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:RETADR DS 2
|
||||
*
|
72
disks/disk2_common/T.ZMLOAD.MIN
Normal file
72
disks/disk2_common/T.ZMLOAD.MIN
Normal file
@ -0,0 +1,72 @@
|
||||
*
|
||||
ZMLOAD
|
||||
*
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #2
|
||||
LDA (ADDR1),Y
|
||||
STA $08
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $09
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $19
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $1E
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $E3
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $ED
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $EF
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FA
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FB
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FC
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FD
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FE
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA $FF
|
||||
LDY #0
|
||||
LDA (ADDR1),Y
|
||||
TAX
|
||||
LDA (ADDR1+1),Y
|
||||
TAY
|
||||
STX ADDR1
|
||||
STY ADDR1+1
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
RTS
|
||||
:RETADR DS 2
|
145
disks/disk2_common/T.ZMSAVE
Normal file
145
disks/disk2_common/T.ZMSAVE
Normal file
@ -0,0 +1,145 @@
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* ZMSAVE :: SAVE 0-PAGE FREE *
|
||||
*- -*
|
||||
* STORES THE VALUES IN THE *
|
||||
* LITTLE FREE SPACE ON THE *
|
||||
* ZERO PAGE AT AN ALTERNATE *
|
||||
* MEMORY LOCATION TO BE *
|
||||
* RETRIEVED AND RESTORED AT A *
|
||||
* LATER POINT. *
|
||||
*- -*
|
||||
* CLOBBERS: *
|
||||
* *
|
||||
* FLAGS: ????---- REG: AXYM *
|
||||
*- -*
|
||||
* CYCLES: ??? *
|
||||
* SIZE: *
|
||||
*- -*
|
||||
* USAGE: *
|
||||
* *
|
||||
* LDA #>$6A00 *
|
||||
* PHA *
|
||||
* LDA #<$6A00 *
|
||||
* PHA *
|
||||
* JSR ZMSAVE *
|
||||
*- -*
|
||||
* ENTRY *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* LOW BYTE OF DESTINATION *
|
||||
* HIGH BYTE OF DESTINATION *
|
||||
*- -*
|
||||
* EXIT *
|
||||
* *
|
||||
* TOP OF STACK *
|
||||
* *
|
||||
* LOW BYTE OF RETURN ADDRESS *
|
||||
* HI BYTE OF RETURN ADDRESS *
|
||||
* *
|
||||
* Y = TRASH *
|
||||
* X = TRASH *
|
||||
* A = LOW BYTE OF RET ADDR *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
ZMSAVE
|
||||
*
|
||||
** LOAD ADDR1 ZERO PAGE AREA FIRST,
|
||||
** SINCE WE'LL BE USING THAT
|
||||
*
|
||||
** NOTE THAT THIS SHOULD ALWAYS BE
|
||||
** $06 AND $07, OR ELSE CODE WILL
|
||||
** HAVE TO CHANGE.
|
||||
*
|
||||
LDX ADDR1
|
||||
LDY ADDR1+1
|
||||
*
|
||||
** SAVE RETURN ADDRESS
|
||||
*
|
||||
PLA
|
||||
STA :RETADR ; LOCAL BECAUSE RETADDR
|
||||
PLA ; IS STORED ON ZERO PAGE
|
||||
STA :RETADR+1
|
||||
*
|
||||
** GET PARAMETERS
|
||||
*
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
** COPY ZERO PAGE TO SPECIFIED
|
||||
** NON-ZERO LOCATION (ONLY THE
|
||||
** FREE ONES..)
|
||||
*
|
||||
TYA ; STORE ADDR1 VALS
|
||||
LDY #1 ; FIRST
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
TXA
|
||||
STA (ADDR1),Y
|
||||
LDY #2
|
||||
LDA $08
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $09
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $19
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $1E
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $E3
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $ED
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EF
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FA
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FD
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FF
|
||||
STA (ADDR1),Y
|
||||
*
|
||||
** RESTORE RETURN ADDRESS
|
||||
*
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
** DATA
|
||||
*
|
||||
:RETADR DS 2
|
||||
*
|
73
disks/disk2_common/T.ZMSAVE.MIN
Normal file
73
disks/disk2_common/T.ZMSAVE.MIN
Normal file
@ -0,0 +1,73 @@
|
||||
*
|
||||
ZMSAVE
|
||||
*
|
||||
LDX ADDR1
|
||||
LDY ADDR1+1
|
||||
PLA
|
||||
STA :RETADR
|
||||
PLA
|
||||
STA :RETADR+1
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
TYA
|
||||
LDY #1
|
||||
STA (ADDR1),Y
|
||||
LDY #0
|
||||
TXA
|
||||
STA (ADDR1),Y
|
||||
LDY #2
|
||||
LDA $08
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $09
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $19
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $1E
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $E3
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $ED
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $EF
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FA
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FB
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FC
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FD
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FE
|
||||
STA (ADDR1),Y
|
||||
INY
|
||||
LDA $FF
|
||||
STA (ADDR1),Y
|
||||
LDA :RETADR+1
|
||||
PHA
|
||||
LDA :RETADR
|
||||
PHA
|
||||
RTS
|
||||
:RETADR DS 2
|
235
disks/disk4_arrays/T.REQUIRED.LIB
Normal file
235
disks/disk4_arrays/T.REQUIRED.LIB
Normal file
@ -0,0 +1,235 @@
|
||||
*
|
||||
JMP ENDVARS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* REQUIRED.LIB *
|
||||
*- -*
|
||||
* GLOBAL ROUTINES AND *
|
||||
* VARIABLES EITHER USED BY THE *
|
||||
* LIBRARY OR PROVIDED FOR DEMO *
|
||||
* USE OR DEBUGGING PURPOSES. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* GLOBAL ROUTINES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __GETRET: GET RETURN *
|
||||
*- -*
|
||||
* COPIES THE DATA IN [RETURN] *
|
||||
* TO THE SPECIFIED LOCATION. *
|
||||
* LENGTH IS DETERMINED BY *
|
||||
* VALUE OF RETLEN. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__GETRET
|
||||
*
|
||||
LDY #255
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
:LP
|
||||
INY
|
||||
LDA RETURN,Y
|
||||
STA (ADDR1),Y
|
||||
CPY RETLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __SETPARM: SET PARAMETER *
|
||||
*- -*
|
||||
* COPIES DATA FROM SPECIFIED *
|
||||
* ADDRESS TO THE [PARAM] *
|
||||
* LOCATION FOR PASSING TO *
|
||||
* A ROUTINE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__SETPARM
|
||||
*
|
||||
LDY #255
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
:LP
|
||||
INY
|
||||
LDA (ADDR1),Y
|
||||
STA PARAM,Y
|
||||
CPY PARLEN
|
||||
BNE :LP
|
||||
LDA ADDR1+1
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __DUMP: DUMP DATA *
|
||||
*- -*
|
||||
* OUTPUTS DATA LOCATED AT THE *
|
||||
* SPECIFIED ADDRESS IN HEX *
|
||||
* FORMAT FOR SPECIFIED NUMBER *
|
||||
* OF BYTES. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__DUMP
|
||||
*
|
||||
PLA
|
||||
STA :RET
|
||||
PLA
|
||||
STA :RET+1
|
||||
PLA
|
||||
STA :LENGTH
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
*
|
||||
LDA #$8D
|
||||
JSR $FDF0
|
||||
LDA ADDR1+1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1+1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1
|
||||
AND #$F0
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA ADDR1
|
||||
AND #$0F
|
||||
TAX
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #186 ; :
|
||||
JSR $FDF0
|
||||
LDA #160 ; SPC
|
||||
JSR $FDF0
|
||||
*
|
||||
LDY #0
|
||||
:LP
|
||||
LDA (ADDR1),Y
|
||||
AND #$F0 ; MASK RIGHT
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA :LEFT
|
||||
LDA (ADDR1),Y
|
||||
AND #$0F ; MASK LEFT
|
||||
STA :RIGHT
|
||||
LDX :LEFT
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDX :RIGHT
|
||||
LDA :HEXTAB,X
|
||||
JSR $FDF0
|
||||
LDA #160
|
||||
JSR $FDF0
|
||||
INY
|
||||
CPY :LENGTH
|
||||
BNE :LP
|
||||
*
|
||||
*LDA #$8D
|
||||
*JSR $FDF0
|
||||
LDA :RET+1
|
||||
PHA
|
||||
LDA :RET
|
||||
PHA
|
||||
*
|
||||
RTS
|
||||
*
|
||||
:RET DS 2
|
||||
:RIGHT DS 1
|
||||
:LEFT DS 1
|
||||
:LENGTH DS 1
|
||||
:HEXTAB ASC "0123456789ABCDEF"
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __P: PRINT FOLLOWING ASC *
|
||||
*- -*
|
||||
* THIS IS THE XPRINT ROUTINE *
|
||||
* FROM STDIO.LIB, BUT STRIPPED *
|
||||
* OF COMMENTS. FOR DEBUG. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__P
|
||||
PLA
|
||||
STA ADDR1
|
||||
PLA
|
||||
STA ADDR1+1
|
||||
LDY #1
|
||||
:LP LDA (ADDR1),Y
|
||||
BEQ :DONE
|
||||
JSR $FDF0
|
||||
INY
|
||||
BNE :LP
|
||||
:DONE CLC
|
||||
TYA
|
||||
ADC ADDR1
|
||||
STA ADDR1
|
||||
LDA ADDR1+1
|
||||
ADC #0
|
||||
PHA
|
||||
LDA ADDR1
|
||||
PHA
|
||||
RTS
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* __W: WAIT FOR KEYPRESS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
__W
|
||||
JSR $FD0C
|
||||
RTS
|
||||
*
|
||||
********************************
|
||||
* *
|
||||
* GLOBAL VARIABLES *
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
** 256 BYTES DEDICATED TO RETURN
|
||||
** VALUES OF VARIABLE LENGTH; CAN BE
|
||||
** MODIFIED TO SUIT SMALLER OR LARGER
|
||||
** NEEDS.
|
||||
*
|
||||
*
|
||||
RETLEN DS 1 ; RETURN VALUE BYTE LENGTH
|
||||
RETURN DS 256
|
||||
*
|
||||
** 256 BYTE VALUE DEDICATED TO LARGE
|
||||
** OR VARIABLE LENGTH PARAMETERS. THIS
|
||||
** CAN ALSO BE CHANGED TO FIT SMALLER OR
|
||||
** LARGER BOUNDS.
|
||||
*
|
||||
PARLEN DS 1
|
||||
PARAM DS 256
|
||||
*
|
||||
ENDVARS
|
||||
*
|
72
disks/disk4_arrays/T.REQUIRED.MAC
Normal file
72
disks/disk4_arrays/T.REQUIRED.MAC
Normal file
@ -0,0 +1,72 @@
|
||||
********************************
|
||||
* *
|
||||
********************************
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* REQUIRED.MAC *
|
||||
*- -*
|
||||
* MACROS USED FOR CORE UTILS *
|
||||
* AND LIBRARY ROUTINES. NOTE *
|
||||
* THAT THE LIBRARIES DO NOT *
|
||||
* USE THESE MACROS, BUT MAY *
|
||||
* USE THE ROUTINES. THESE ARE *
|
||||
* MERELY PROVIDED FOR THE SAKE *
|
||||
* OF CONVENIENCE. *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _GRET: GET RETURN VALUE *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_GRET MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __GETRET
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _SPAR: SET PARAMETER *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_SPAR MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
JSR __SETPARM
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _DUMP: DUMP DATA *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_DUMP MAC
|
||||
LDA #>]1
|
||||
PHA
|
||||
LDA #<]1
|
||||
PHA
|
||||
LDA ]2
|
||||
PHA
|
||||
JSR __DUMP
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _PRNT: PRINT STRING *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_PRNT MAC
|
||||
JSR __P
|
||||
ASC ]1
|
||||
HEX 00
|
||||
<<<
|
||||
*
|
||||
*``````````````````````````````*
|
||||
* _WAIT: WAIT FOR KEYPRESS *
|
||||
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
||||
*
|
||||
_WAIT MAC
|
||||
JSR __W
|
||||
<<<
|
||||
*
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user