home *** CD-ROM | disk | FTP | other *** search
- ;*****************************
- ;* *
- ;* COMMODORE *
- ;* MACRO ASSEMBLER FIXES *
- ;* *
- ;* FIXES AND ADDITIONS BY *
- ;* DAVE DIXON *
- ;* *
- ;* VERSION : 06/05/85 *
- ;*****************************
- ;
- BLANK = 0 ;SET TO 1 TO BLANK SCREEN DURING
- ;ASSEMBLY (SOME PRINTERS NEED)
- LONGLB = 1 ;ALLOW 12 CHAR LABELS
- GENPRG = 1 ;GEN PRG FILE INSTEAD OF SEQ
- LINEPP = 80 ;LINES PER PAGE
- RECUR = $0400 ;LEN OF AREA FOR MACRO RECURSION
- MACARE = $0400 ;LEN OF AREA FOR MACRO STROAGE
- ENDMEM = $6FFF ;END OF USABLE MEMORY
- ;
- ; FIX MACRO COMMAND
- ;
- *=$2AB7
- ;
- LDY $0976 ;FIX BUG
- STY $097C
- LDY $0977
- STY $097D
- ;
- *=$2ADD
- ;
- BNE $2AA8 ;FIX BRANCH
- ;
- ; MAKE COLON MACRO PARAM SEPERATOR.
- ; THIS ALLOWS ADDRESSING MODES TO BE PASSED
- ; AS MACRO PARAMETERS.
- ;
- *=$2C20
- ;
- CMP #':'
- ;
- ; ALLOW . AND # IN LABELS
- ;
- *=$1682
- JMP CHKCOL ;CHECK FOR COLON
- CHKRTS CMP #$2E ;ALLOW . IN LABEL
- ;
- ; SET START/END OF MACRO STACK,MEMORY,RECURSION STACK
- ;
- STRTTM =ENDMEM-MACARE+1 ;LOC TO STORE MACRO DEF AT
- ENDMAC =STRTTM-1
- START =STRTTM-RECUR ;LOC TO STORE PARAMETERS OF
- ;MACRO CALLS DURING RECURSION
- ENDSYM =START-1
- ;
- *=$09D0
- ;
- LDY #>ENDSYM
- LDX #<ENDSYM
- ;
- *=$09D8
- ;
- LDY #>START
- LDX #<START
- ;
- *=$2B55
- ;
- LDA #<START
- ;
- *=$2B59
- ;
- LDA #>START
- ;
- *=$29E2
- ;
- SBC #<ENDMAC
- ;
- *=$29E7
- ;
- SBC #>ENDMAC
- ;
- *=$0C48
- ;
- LDY #>STRTTM
- LDX #<STRTTM
- ;
- ; SET START OF SYMBOLS
- ;
- *=$09C3
- ;
- LDY #>PROGND ;LOCATION OF END OF NEW
- LDX #<PROGND ;FIX CODE
- ;
- *=$2D89
- SBC #<START
- *=*+3
- SBC #>START
- *=$2D98
- LDA #<ENDMAC
- *=*+3
- LDA #>ENDMAC
- *=$2A0D
- SBC #<ENDMEM
- *=*+3
- SBC #>ENDMEM
- .IFE BLANK <
- ;
- ; STOP BLANKING OF SCREEN
- ;
- *=$0B64
- ;
- RTS
- >
- ;
- ; KILL HARD COPY PROMPT
- ; (POKE 2679,78 FOR ON SCREEN LISTING)
- ;
- *=$0A7A
- ;
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- ;
- ; KILL CROSS REFERENCE PROMPT
- ; (POKE 2719,89 FOR CROSS REF)
- ;
- *=$0AA2
- ;
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- ;
- ; SHORTEN OBJECT FILE NAME PROMPT
- ;
- *=$2396
- ;
- .BYT 7,7,7,7,7,7
- .IFN GENPRG <
- ;
- ; CREATE PRG FILE INSTEAD OF SEQ
- ;
- *=$0A61
- ;
- LDA #'P'
- ;
- *=$2930
- ;
- LDX #$03
- STX $05
- LDA $0946
- BEQ PRG100
- ;
- CLC
- ADC #$03
- STA $04
- JMP DOPRG ;GO TO PATCH
- ;
- PRG100 RTS
- ;
- ; INITIALIZE PATCH IN FOR PRG
- ;
- *=$0996
- ;
- JSR INIT
- >
- .IFN LONGLB <
- ;
- ; MAKE LABELS 12 CHAR LONG
- ;
- *=$0D4D
- CPY #$0C
- *=$1692
- CPY #$0B
- *=$1759
- CMP #$0D
- *=$1EC9
- CPY #$0D ;MNE COLUMN
- *=$1EF6
- CPY #$2D ;COMMENT COLUMN
- ;
- *=$16AF
- JSR MASHLB ;PATCH TO CRUNCH LABEL
- ;
- ; ELIMINATE SYMBOL TABLE
- ;
- *=$0C43
- ;
- LDA #$9C ;CHANGE DEFAULT TO NOS
- ;
- ; FIX SYMBOL TABLE LISTING
- ;
- *=$1C47
- JMP $1C4A ;NEXT INS
- *=$1C56
- JSR $1F38
- *=$1C6A
- ;THIS IS FOR 132 COLUMNS
- ;DROP PATCH FOR 80 COL
- CMP #$0B ;# ACROSS PAGE
- *=$1C6E
- JSR $1F38
- >
- ;
- ; # LINES PER PAGE
- ;
- *=$1C2B
- CMP #LINEPP-6
- *=$1C40
- CMP #LINEPP
- *=$1CC3
- CPY #LINEPP
- *=$1D5E
- CMP #LINEPP
- *=$1E11
- CMP #LINEPP
- *=$1F50
- CMP #LINEPP
- ;
- ; FIX SYMBOL TABLE LISTING
- ;
- *=$1C47
- JMP $1C4A ;NEXT INS
- *=$1C56
- JSR $1F38
- *=$1C6A
- CMP #$0B ;# ACROSS PAGE
- *=$1C6E
- JSR $1F38
- ;
- ; FIX BYT,WORD,DBYT
- ; THIS IS SO A LINE SUCH AS .BYT 1,2,3
- ; ONLY PRODUCES ONE LINE ON THE LISTING
- ;
- *=$0F4F
- JSR BYTFX1
- *=$1008
- JMP BYTFX2
- *=$101C
- JMP BYTFX3
- NOP
- ;
- ; ADDITIONAL CODE AT END
- ;
- *=$2DF1
- ;
- ; INITIALIZE EXTENTIONS
- ;
- INIT STA $0838
- STA FIRST
- RTS
- .IFN LONGLB <
- ;
- ;MAKE 12 CHAR LABELS INTO 6
- ;
- SAVEY .BYT $00
- ;
- MASHLB STY SAVEY ;Y IS THE CURRENT LABEL LENGTH
- CPY #$06 ;IF > 6 THEN FLIP
- BCS MSH100
- STA $0908,Y ;NO JUST SAVE
- RTS
- ;
- MSH100 PHA ;7TH CHAR GOES OVER 6TH
- TYA ;8 TH CHAR GOES OVER 5TH
- SEC
- SBC #$06
- EOR #$07
- SEC
- SBC #$02
- TAY
- PLA
- CLC ;SHIFT THE BITS SO THE LABELS
- ROL A ;MASHL050 AND MASHL500
- ROL A ;DO NOT COLLIDE
- ROL A
- ROL A
- EOR $0908,Y
- CMP #$0D ;REPLACE RETURN WITH GARBAGE
- BNE MSH200
- LDA #$71
- MSH200 STA $0908,Y
- LDY SAVEY
- RTS
- >
- ; CHECK FOR COMMA (USED BY . AND # LABEL
- ; EXTENTION )
- ;
- CHKCOL LDA $0880,X
- CMP #'#'
- BEQ CHKC10
- JMP CHKRTS
- ;
- CHKC10 JMP $1689
- .IFN GENPRG <
- ;
- ; SAVE OBJ AS PRG FILE
- ; IF A GAP IN ADDRESSES IS GREATER THAN
- ; 700 BYTES THEN THE GAP IS IGNORED
- ; ELSE THAT MANY $00 AREA SENT OUT
- ;
- FIRST .BYT $00
- LOC .WORD $0000
- ;
- DOPRG LDA FIRST ;IF FIRST TIME HERE?
- BEQ PRG700 ;YES THEN SEND OUT LOAD ADDR
- SEC ;CALC GAP FROM LAST BYTE TO THIS BYTE
- LDA $0948
- SBC LOC
- STA LOC
- LDA $0947
- SBC LOC+1
- STA LOC+1
- BCC PRG500 ;BACKWARD JUMP IN ADDRESS - IGNOR
- ;
- CMP #$03 ;MIN GAP TO SKIP 3*256
- BCS PRG500
- PRG200 LDA LOC ;IS THERE ANY GAP?
- ORA LOC+1
- BEQ PRG500 ;NO - SO OUTPUT BYTE
- LDA #$00 ; CHAR TO FILL WITH
- JSR $297A ;SEND OUT CHAR
- LDA LOC ;DEC COUNT BY ONE
- BNE PRG300
- DEC LOC+1
- PRG300 DEC LOC
- JMP PRG200 ;LOOP UNTIL NO MORE GAP
- ;
- PRG500 CLC ;CALC END LOC OF THIS
- LDA $0946 ;SEQUENCE OF BYTES
- ADC $0948
- STA LOC
- LDA $0947
- ADC #$00
- STA LOC+1
- ;
- LDX $05 ;SEND OUT SEQUENCE OF BYTES
- PRG600 LDA $0946,X
- JSR $297A ;OUTPUT
- INC $05
- PRG650 LDX $05
- CPX $04
- BNE PRG600
- RTS
- ;
- PRG700 LDA $0948 ;SEND OUT LOAD ADDR
- JSR $297A
- LDA $0947
- JSR $297A
- DEC FIRST ;RESET FLAG
- CLC
- LDA $0946
- ADC $0948
- STA LOC
- LDA $0947
- ADC #$00
- STA LOC+1
- JMP PRG650 ;SEND OUT SEQUNCE OF BYTES
- >
- ;
- ; CODE TO FIX BYTE TO ONLY USE ONE LINE
- ;
- SAVFLG .BYT $00
- WHTLIN .BYT $00
- ;
- BYTFX1 STA $0865
- LDY #$00
- STY WHTLIN
- LDY $0874
- STY SAVFLG
- RTS
- ;
- BYTFX2 PHA
- LDA SAVFLG
- STA $0874
- PLA
- JMP $15CB
- ;
- BYTFX3 BIT WHTLIN
- BPL BYT300
- CMP #$2C
- BEQ BYT200
- PHA
- INC WHTLIN
- BYT100 LDA SAVFLG
- STA $0874
- PLA
- JMP $1020
- ;
- BYT200 PHA
- LDA $0880,X
- CMP #$3B
- BCS BYT100
- BCC BYT350
- ;
- BYT300 CMP #$2C
- BNE BYT400
- DEC WHTLIN
- LDA $0874
- STA SAVFLG
- AND #$FB
- STA $0874
- LDA #$2C
- BYT350 JMP $1020
- BYT400 JMP $1003
- ;
- PROGND .END
-
-
- ─╠ 6: