home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-02-12 | 22.8 KB | 1,597 lines |
- UNBCODE = *
- ;** OPEN FILE
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** DECODE FILE
- JSR UNBCODE┬ODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UNBCODE┬ODY = *
- LDA #0
- STA BUF├OUNT+0
- STA BUF├OUNT+1
- STA HIT╠AST╠INE
- STA LAST╠INE╘ERMINATOR
-
- ;** SEARCH FOR "BEGIN" LINE
- SEARCH╠INE = *
- JSR GETLINE
- BCC +
- CLC
- RTS
- + LDA IN╠INE
- CMP #"-"
- BNE SEARCH╠INE
- JSR CHECK╙TOP
- LDX #0
- LDA IN╠INE+2
- CMP #"B"
- BEQ +
- LDX #ASCII┬EGIN-PETSCII┬EGIN
- + LDY #0
- - LDA IN╠INE,Y
- CMP PETSCII┬EGIN,X
- BNE SEARCH╠INE
- INX
- INY
- CPY #ASCII┬EGIN-PETSCII┬EGIN
- BCC -
- LDY #0
- CPX #ASCII┬EGIN-PETSCII┬EGIN+1
- BCC +
- LDY #$FF
- + STY ASCII╞ILE
- JMP PROCESS┬EGIN
-
- PETSCII┬EGIN = *
- .ASC "--BCODE-BEGIN "
- ASCII┬EGIN = *
- .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$62,$65,$67,$69,$6E,$20
-
- ;** PROCESS "BEGIN" LINE
- PROCESS┬EGIN = *
- ;** EXTRACT THE SEGMENT NUMBER
- LDY #14
- JSR SCAN╬UM
- BCC +
- JMP BEGIN┼RROR
- + INY
- LDA SCAN╓AL+2
- ORA SCAN╓AL+3
- BEQ +
- LDA #<SEG╘OO┬IG═SG
- LDY #>SEG╘OO┬IG═SG
- JSR EPUTS
- JMP SEARCH╠INE
- + LDA SCAN╓AL+0
- LDX SCAN╓AL+1
- STA SEGNUM+0
- STX SEGNUM+1
- LDA #0
- STA SEGNUM+2
- STA SEGNUM+3
- LDA SEGNUM+0
- ORA SEGNUM+1
- BNE +
- JMP BEGIN┼RROR
-
- ;** EXTRACT FILENAME, TRUNC TO 16 CHARS
- + CLC
- TYA
- ADC #<IN╠INE
- STA OUT╬AME+0
- LDA #>IN╠INE
- ADC #0
- STA OUT╬AME+1
- LDY #16
- LDA #0
- STA (OUT╬AME),Y
- JSR MAKE╨ETSCII╬AME
- JSR ECHO┼XTRACT╬AME
-
- ;** OPEN OUTPUT FILE
- JSR GET╘EMP╞ILE
- BCC +
- JMP SEARCH╠INE
-
- ;** READ BCODED DATA
- + JSR BUILD─ECODE╘ABLE
- JSR CRC╔NIT
- - JSR GETLINE
- BCS UNEXPECTED┼OF
- JSR CONVERT╠INE
- BCC +
- ;** CHECK IF SEGMENT-END LINE
- LDA IN╠INE
- CMP #"-"
- BEQ FINISH╞ILE
- ;** REPORT INVALID CHARACTERS
- LDA #<BAD├HARS═SG
- LDY #>BAD├HARS═SG
- JSR EPUTS
- JMP -
- + JSR CRUNCH╠INE
- JSR CRC╠INE
- JSR WRITE╠INE
- JMP -
-
- ;** FINISH WITH FILE
- FINISH╞ILE = *
- LDA OUTFILE
- JSR CLOSE
- JSR CRC╞INISH
- JSR PROCESS╞INISH
- ;** PROCESS FOR ANOTHER FILE
- JMP SEARCH╠INE
-
- UNEXPECTED┼OF = *
- LDA #<UNEX┼OF═SG
- LDY #>UNEX┼OF═SG
- JSR EPUTS
- LDA OUTFILE
- JSR CLOSE
- JSR DISCARD╙EGMENT
- SEC
- RTS
-
- UNEX┼OF═SG = *
- .ASC "UNEXPECTED ┼╧╞, IGNORING SEGMENT."
- .BYTE CHR├╥,0
-
- SEG╘OO┬IG═SG = *
- .ASC "SEGMENT NUMBER IS LARGER THAN 65535, IGNORING SEGMENT."
- .BYTE CHR├╥,0
-
- BAD├HARS═SG = *
- .ASC "WARNING: BAD CHARACTERS ON LINE, IGNORING LINE."
- .BYTE CHR├╥,0
-
- MAKE╨ETSCII╬AME = *
- BIT ASCII╞ILE
- BMI +
- RTS
- + LDY #0
- - LDA (OUT╬AME),Y
- BEQ +
- JSR CONV┴SC2╨ET
- STA (OUT╬AME),Y
- INY
- BNE -
- + RTS
-
- CONV┴SC2╨ET = *
- AND #$7F
- CMP #$60
- BCC +
- CLC
- ADC #$C0-$60
- + TAX
- AND #$7F
- CMP #"A"
- BCS +
- - TXA
- RTS
- + CMP #"Z"+1
- BCS -
- TXA
- EOR #$80
- RTS
-
- ECHO┼XTRACT╬AME = *
- LDA #<ECHO┼XTRACT═SG1
- LDY #>ECHO┼XTRACT═SG1
- JSR EPUTS
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA ZP+0
- STY ZP+1
- LDA #1
- LDX #SEGNUM
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR EPUTS
- LDA #<ECHO┼XTRACT═SG2
- LDY #>ECHO┼XTRACT═SG2
- JSR EPUTS
- LDA OUT╬AME+0
- LDY OUT╬AME+1
- JSR EPUTS
- LDA #<ECHO┼XTRACT═SG3
- LDY #>ECHO┼XTRACT═SG3
- JMP EPUTS
-
- ECHO┼XTRACT═SG1 = *
- .ASC "EXTRACTING SEG "
- .BYTE 0
- ECHO┼XTRACT═SG2 = *
- .ASC " OF "
- .BYTE CHR╤UOTE,0
- ECHO┼XTRACT═SG3 = *
- .BYTE CHR╤UOTE,CHR├╥,0
- NUMBUF .BUF 12
-
- REPORT╧PEN┼RROR = *
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- LDA #<REPORT╧PEN┼RROR═SG
- LDY #>REPORT╧PEN┼RROR═SG
- JSR EPUTS
- RTS
-
- REPORT╧PEN┼RROR═SG = *
- .ASC ": CANNOT OPEN, CONTINUING"
- .BYTE CHR├╥,0
-
- SCAN─IGIT .BUF 1
- SCAN╙AVE .BUF 4
- SCAN╘EMP .BUF 1
- SCAN╔NDEX .BUF 1
- SCAN┴NYTHING .BUF 1
-
- SCAN╬UM = * ;( .┘=IN╠INE╔NDEX ) : .┘=SCAN, [SCAN╓AL]=NUM, .├╙=ERR
- LDX #3
- LDA #0
- - STA SCAN╓AL,X
- DEX
- BPL -
- LDA #0
- STA SCAN┴NYTHING
- - LDA IN╠INE,Y
- CMP #" "
- BNE SCAN╬UM╬EXT
- INY
- BNE -
- SEC
- RTS
-
- SCAN╬UM╬EXT = *
- LDA IN╠INE,Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCC ++
- + LDA SCAN┴NYTHING
- BEQ SCAN┼RROR
- CLC
- RTS
- + AND #$0F
- STA SCAN─IGIT
- LDA #$FF
- STA SCAN┴NYTHING
- ;** TIMES TEN
- STY SCAN╘EMP
- LDX #3
- - LDA SCAN╓AL,X
- STA SCAN╙AVE,X
- DEX
- BPL -
- LDA #2
- STA SCAN╔NDEX
- - CLC
- LDY #4
- LDX #0
- - ROL SCAN╓AL,X
- INX
- DEY
- BNE -
- BCS SCAN┼RROR
- DEC SCAN╔NDEX
- BNE --
- CLC
- LDY #4
- LDX #0
- - LDA SCAN╓AL,X
- ADC SCAN╙AVE,X
- STA SCAN╓AL,X
- INX
- DEY
- BNE -
- BCS SCAN┼RROR
- CLC
- LDY #4
- LDX #0
- - ROL SCAN╓AL,X
- INX
- DEY
- BNE -
- BCS SCAN┼RROR
- CLC
- LDY #4
- LDX #0
- LDA SCAN─IGIT
- - ADC SCAN╓AL,X
- STA SCAN╓AL,X
- LDA #0
- INX
- DEY
- BNE -
- BCS SCAN┼RROR
-
- LDY SCAN╘EMP
- INY
- BEQ SCAN┼RROR
- JMP SCAN╬UM╬EXT
-
- SCAN┼RROR = *
- SEC
- RTS
-
- BEGIN┼RROR = *
- LDA #<BEGIN┼RROR═SG
- LDY #>BEGIN┼RROR═SG
- JSR EPUTS
- JMP SEARCH╠INE
-
- BEGIN┼RROR═SG = *
- .ASC "INVALID --BCODE-BEGIN LINE FORMAT, IGNORING SEGMENT"
- .BYTE CHR├╥,0
-
- CONVERT╨ADS .BUF 1
- CONVERT├HARS .BUF 1
-
- CONVERT╠INE = *
- LDX #0
- STX CONVERT╨ADS
- - LDA IN╠INE,X
- BNE +
- STX CONVERT├HARS
- CLC
- RTS
- + CMP #"="
- BNE +
- INC CONVERT╨ADS
- + TAY
- LDA DECODE╘ABLE,Y
- BMI +
- STA IN╠INE,X
- INX
- BNE -
- + SEC
- RTS
-
- CRUNCH┬YTES .BUF 1
-
- CRUNCH╠INE = *
- LDX #0
- LDY #0
- - JSR CRUNCH╤UANTUM
- CPX CONVERT├HARS
- BCC -
- TYA
- SEC
- SBC CONVERT╨ADS
- STA CRUNCH┬YTES
- RTS
-
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
-
- CRUNCH╤UANTUM = * ;(.╪=╔N4BYTES╧FFSET, .┘=╧UT3BYTES╧FFSET) : .╪++, .┘++
- LDA IN╠INE,X ;*** OUTPUT BYTE 0
- ASL
- ASL
- STA TEMP
- INX
- LDA IN╠INE,X
- LSR
- LSR
- LSR
- LSR
- AND #%00000011
- ORA TEMP
- STA IN╠INE,Y
- INY
- LDA IN╠INE,X ;*** OUTPUT BYTE 1
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- INX
- LDA IN╠INE,X
- LSR
- LSR
- AND #%00001111
- ORA TEMP
- STA IN╠INE,Y
- INY
- LDA IN╠INE,X ;*** OUTPUT BYTE 2
- INX
- ROR
- ROR
- ROR
- AND #%11000000
- STA TEMP
- LDA IN╠INE,X
- INX
- AND #%00111111
- ORA TEMP
- STA IN╠INE,Y
- INY
- RTS
-
- WRITE╠INE = *
- LDA #<IN╠INE
- LDY #>IN╠INE
- STA ZP+0
- STY ZP+1
- LDA CRUNCH┬YTES
- LDY #0
- LDX OUTFILE
- JSR WRITE
- RTS
-
- ;** CRC = 0X╞╞╞╞╞╞╞╞;
- ;** WHILE( (C=GETC(FP)) != ┼╧╞ ) █
- ;** CRC = (CRC>>8) & 0X00╞╞╞╞╞╞ ^ CRC╘ABLE[ (CRC^C) & 0X╞╞ ];
- ;** ▌
- ;** RETURN( CRC^0X╞╞╞╞╞╞╞╞ );
-
- CRC╔NIT = *
- LDX #3
- - LDA #$FF
- STA CRC,X
- LDA #0
- STA BYTES,X
- DEX
- BPL -
- RTS
-
- CRC╠INE = *
- LDY #0
- CPY CRUNCH┬YTES
- BCS +
- - LDA IN╠INE,Y ;.╪ = (CRC^C) & 0X╞╞
- EOR CRC+0
- TAX
- LDA CRC+1 ;CRC = (CRC>>8) & 0X00╞╞╞╞╞╞ ^ CRC╘ABLE[ .╪ ]
- EOR CRC╘ABLE0,X
- STA CRC+0
- LDA CRC+2
- EOR CRC╘ABLE1,X
- STA CRC+1
- LDA CRC+3
- EOR CRC╘ABLE2,X
- STA CRC+2
- LDA CRC╘ABLE3,X
- STA CRC+3
- INY
- CPY CRUNCH┬YTES
- BCC -
- + CLC
- LDA BYTES+0
- ADC CRUNCH┬YTES
- STA BYTES+0
- BCC +
- INC BYTES+1
- BNE +
- INC BYTES+2
- BNE +
- INC BYTES+3
- + RTS
-
- CRC╞INISH = *
- LDX #3
- - LDA CRC,X
- EOR #$FF
- STA CRC,X
- DEX
- BPL -
- RTS
-
- HIT╠AST╠INE .BUF 1
- LAST╠INE╘ERMINATOR .BUF 1
-
- GETLINE = *
- LDA HIT╠AST╠INE
- BEQ +
- SEC
- RTS
- + LDX #0
- STX GETLINE╨OS
-
- ;** TOSS AN ╠╞ THAT FOLLOWS A ├╥
- JSR GET┬YTE
- BCS GETLINE╨ROCESS
- CMP #CHR╠╞
- CLC
- BNE GETLINE╨ROCESS
- LDX LAST╠INE╘ERMINATOR
- CPX #CHR├╥
- CLC
- BNE GETLINE╨ROCESS
-
- GETLINE├HAR = *
- JSR GET┬YTE
- GETLINE╨ROCESS = *
- BCC +
- LDA #$FF
- STA HIT╠AST╠INE
- JMP GETLINE╞INISH
- + CMP #CHR├╥
- BEQ GETLINE╞INISH
- CMP #CHR╠╞
- BEQ GETLINE╞INISH
- LDX GETLINE╨OS
- CPX #98
- BCS +
- STA IN╠INE,X
- INC GETLINE╨OS
- + JMP GETLINE├HAR
-
- GETLINE╞INISH = *
- STA LAST╠INE╘ERMINATOR
- LDX GETLINE╨OS
- LDA #0
- STA IN╠INE,X
- CPX #0
- BEQ +
- CLC
- RTS
- + LDA HIT╠AST╠INE
- CMP #1
- RTS
-
- GET┬YTE = *
- LDA BUF├OUNT+0
- ORA BUF├OUNT+1
- BEQ GET┬YTE╞ILL┬UF
- LDY #0
- LDA (BUF╨TR),Y
- INC BUF╨TR+0
- BNE +
- INC BUF╨TR+1
- + LDX BUF├OUNT+0
- BNE +
- DEC BUF├OUNT+1
- + DEC BUF├OUNT+0
- CLC
- RTS
-
- GET┬YTE╞ILL┬UF = *
- JSR CHECK╙TOP
- LDA #<IN┬UF
- LDY #>IN┬UF
- STA ZP+0
- STY ZP+1
- STA BUF╨TR+0
- STY BUF╨TR+1
- LDA IN┬UF╠EN+0
- LDY IN┬UF╠EN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUF├OUNT+0
- STY BUF├OUNT+1
- JSR CHECK╙TOP
- JMP GET┬YTE
- + SEC
- RTS
-
- SET╔NDEX .BUF 1
- SET├OUNTDOWN .BUF 1
-
- BUILD─ECODE╘ABLE = *
- LDX #0
- LDA #$FF
- - STA DECODE╘ABLE,X
- INX
- BNE -
- LDY #0
- LDX #0
- BIT ASCII╞ILE
- BPL +
- LDX #ASC╘ABLE╙ET-PET╘ABLE╙ET
- + STX SET╔NDEX
- LDA #5
- STA SET├OUNTDOWN
- - LDX SET╔NDEX
- LDA PET╘ABLE╙ET+1,X
- STA TEMP
- LDA PET╘ABLE╙ET+0,X
- INX
- INX
- STX SET╔NDEX
- LDX TEMP
- JSR BUILD╙ET
- DEC SET├OUNTDOWN
- BNE -
- LDA #0
- STA DECODE╘ABLE+$3D
- RTS
-
- PET╘ABLE╙ET .ASC "┴┌AZ09++//"
- ASC╘ABLE╙ET .BYTE $41,$5A,$61,$7A,$30,$39,$2B,$2B,$2F,$2F
-
- SET╠IMIT .BUF 1
-
- BUILD╙ET = *
- INX
- STX SET╠IMIT
- TAX
- - TYA
- STA DECODE╘ABLE,X
- INY
- INX
- CPX SET╠IMIT
- BCC -
- RTS
-
- PROCESS╞INISH = * ;PROCESS THE BCODE-END LINE
- LDA #TRUE
- STA IS┼ND
- LDX #ASC┼ND-PET┼ND-1
- BIT ASCII╞ILE
- BPL +
- LDX #PET├ONT-PET┼ND-1
- + LDY #ASC┼ND-PET┼ND-1
- JSR COMPARE╞INISH
- LDY #ASC┼ND-PET┼ND-1
- BCC FIN├HECK╙EGMENT
- LDA #FALSE
- STA IS┼ND
- LDX #ASC├ONT-PET┼ND-1
- BIT ASCII╞ILE
- BPL +
- LDX #ASC├ONT┼ND-PET┼ND-1
- + LDY #ASC├ONT-PET├ONT-1
- JSR COMPARE╞INISH
- LDY #ASC├ONT-PET├ONT
- BCC FIN├HECK╙EGMENT
- LDA #0
- JMP BAD╞INISH
-
- FIN├HECK╙EGMENT = *
- JSR SCAN╬UM
- BCC +
- - LDA #1
- JMP BAD╞INISH
- + LDX #3
- - LDA SCAN╓AL,X
- CMP SEGNUM,X
- BNE --
- DEX
- BPL -
-
- FIN├HECK╙IZE = *
- JSR SCAN╬UM
- BCC +
- - LDA #2
- JMP BAD╞INISH
- + LDX #3
- - LDA SCAN╓AL,X
- CMP BYTES,X
- BNE --
- DEX
- BPL -
-
- FIN├HECK├RC = *
- INY
- JSR SCAN╚EX
- BCC +
- - LDA #3
- JMP BAD╞INISH
- + LDX #3
- - LDA SCAN╓AL,X
- CMP CRC,X
- BNE --
- DEX
- BPL -
- JSR COMMIT╙EGMENT
- BIT DEBUG
- BPL +
- LDX #STDERR
- STX STAT╞CB
- JSR WRITE╙TATUS─ATA
- + JSR CHECK╙TOP
- CLC
- RTS
-
- SCAN╚EX = *
- LDX #3
- - LDA IN╠INE,Y
- INY
- JSR HEX╘O┬IN
- BCS +
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- LDA IN╠INE,Y
- INY
- JSR HEX╘O┬IN
- BCS +
- ORA TEMP
- STA SCAN╓AL,X
- DEX
- BPL -
- CLC
- + RTS
-
- HEX╘O┬IN╪SAVE .BUF 1
-
- HEX╘O┬IN = *
- BIT ASCII╞ILE
- BPL +
- STX HEX╘O┬IN╪SAVE
- JSR CONV┴SC2╨ET
- LDX HEX╘O┬IN╪SAVE
- + CMP #"0"
- BCS +
- - SEC
- RTS
- + CMP #"9"+1
- BCC +
- AND #$7F
- CMP #"A"
- BCC -
- CMP #"F"+1
- BCS -
- SEC
- SBC #"A"-$0A
- + AND #$0F
- CLC
- RTS
-
- COMPARE╞INISH = *
- - LDA IN╠INE,Y
- CMP PET┼ND,X
- BNE +
- DEX
- DEY
- BPL -
- CLC
- RTS
- + SEC
- RTS
-
- BAD╞INISH = * ;.┴=ERROR [0=TOKEN,1=SEGMENT,2=SIZE,3=CRC]
- PHA
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- PLA
- ASL
- TAX
- LDA BAD╞IN╓EC+1,X
- TAY
- LDA BAD╞IN╓EC+0,X
- JSR EPUTS
- LDA #<BAD╞IN─ISCARD
- LDY #>BAD╞IN─ISCARD
- JSR EPUTS
- JSR DISCARD╙EGMENT
- JSR CHECK╙TOP
- RTS
-
- BAD╞IN╓EC = *
- .WORD BAD╞IN╘OKEN,BAD╞IN╙EGMENT,BAD╞IN╙IZE,BAD╞IN├RC
- BAD╞IN╘OKEN = *
- .ASC ": INVALID TOKEN ON FINISH LINE"
- .BYTE 0
- BAD╞IN╙EGMENT = *
- .ASC ": SEGMENT NUMBER MISMATCH"
- .BYTE 0
- BAD╞IN╙IZE = *
- .ASC ": FILE SIZE MISMATCH"
- .BYTE 0
- BAD╞IN├RC = *
- .ASC ": ├╥├-32 CHECKSUM MISMATCH"
- .BYTE 0
- BAD╞IN─ISCARD = *
- .ASC ", IGNORING SEGMENT"
- .BYTE CHR├╥,0
-
- PET┼ND .ASC "--BCODE-END "
- ASC┼ND .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$65,$6E,$64,$20
-
- PET├ONT .ASC "--BCODE-CONTINUED "
- ASC├ONT .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$63,$6F,$6E,$74,$69,$6E,$75
- .BYTE $65,$64,$20
- ASC├ONT┼ND = *
-
- GET╘EMP╬AME╙TR = * ;( TEMP╬AME, .┴=PUT╞ILETYPE ) : TEMP╬AME╙TR, (ZP)
- PHA
- LDA #"0"
- STA TEMP╬AME╙TR+0
- LDA #"┬"
- STA TEMP╬AME╙TR+1
- LDA #"├"
- STA TEMP╬AME╙TR+2
- LDA #<TEMP╬AME╙TR+3
- LDY #>TEMP╬AME╙TR+3
- STA ZP+0
- STY ZP+1
- LDX #TEMP╬AME
- LDA #5
- JSR UTOAZ
- PLA
- CMP #FALSE
- BEQ +
- LDA #","
- STA TEMP╬AME╙TR+3,Y
- LDA #"P"
- STA TEMP╬AME╙TR+4,Y
- LDA #0
- STA TEMP╬AME╙TR+5,Y
- + RTS
-
- UTOAZ = * ;( 0+.╪=VAR32, .┴=WIDTH, (ZP)=STORE )
- JSR UTOA
- LDY #0
- - LDA (ZP),Y
- BEQ ++
- CMP #" "
- BNE +
- LDA #"0"
- STA (ZP),Y
- + INY
- BNE -
- + RTS
-
- FILE═ODE .BUF 1
-
- GET╘EMP╞ILE = * ;( OUT╬AME, SEGNUM ) : CUR╚AVE, CUR╚AVE╬UM, OUTFILE, .├╙=ERR
- ;** SEARCH TO APPEND TO EXISTING FILE
- LDA #255
- STA CUR╚AVE
-
- CHECK╬EXT = *
- INC CUR╚AVE
- LDA CUR╚AVE
- CMP HAVE├OUNT
- BCC +
- JMP CANNOT┴PPEND
- + JSR GET╚
- JSR CMP╧UT╬AME╚
- CMP #0
- BNE CHECK╬EXT
- LDY #HR╞ROM╙EG
- LDA SEGNUM+0
- CMP (H),Y
- LDA SEGNUM+1
- INY
- SBC (H),Y
- BCC +
- LDY #HR╘O╙EG
- LDA (H),Y
- CMP SEGNUM+0
- INY
- LDA (H),Y
- SBC SEGNUM+1
- BCC +
- LDA #<IGNORE─UP═SG
- LDY #>IGNORE─UP═SG
- JSR EPUTS
- SEC
- RTS
- IGNORE─UP═SG = *
- .ASC "IGNORING DUPLICATE SEGMENT"
- .BYTE CHR├╥,0
-
- + LDY #HR╘O╙EG
- LDA (H),Y
- TAX
- INY
- LDA (H),Y
- TAY
- INX
- BNE +
- INY
- + CPX SEGNUM+0
- BNE +
- CPY SEGNUM+1
- BEQ CAN┴PPEND
- + JMP CHECK╬EXT
-
- ;** HERE WE KNOW WE CAN APPEND TO AN EXISTING TEMP FILE
- CAN┴PPEND = *
- LDA #"A"
- STA FILE═ODE
- LDY #HR╘EMP╞ILE╬AME
- LDA (H),Y
- STA TEMP╬AME+0
- INY
- LDA (H),Y
- STA TEMP╬AME+1
- LDY #HR╘O╙EG
- LDA SEGNUM+0
- STA (H),Y
- INY
- LDA SEGNUM+1
- STA (H),Y
- LDY #HR╔S┼ND
- LDA #FALSE
- STA (H),Y
- JMP OPEN╘EMP╞ILE
-
- ;** CANNOT APPEND
- CANNOT┴PPEND = *
- JSR GET╘EMP╞ILE╬AME╧NLY
-
- ;** CREATE NEW HAVE RECORD
- CREATE╬EW╚AVE╥EC = *
- JSR INSERT╚AVE╥EC
- BCS +
- LDA #"W"
- STA FILE═ODE
- JMP OPEN╘EMP╞ILE
- + LDA #<HAVE╧VER═SG
- LDY #>HAVE╧VER═SG
- JSR EPUTS
- SEC
- RTS
- HAVE╧VER═SG = *
- .ASC "FRAGMENT TABLE FULL, IGNORING CURRENT SEGMENT"
- .BYTE CHR├╥,0
-
- ;** OPEN TEMPORARY FILE
- OPEN╘EMP╞ILE = *
- LDA #TRUE
- JSR GET╘EMP╬AME╙TR
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- LDA FILE═ODE
- JSR OPEN╧VERWRITE
- BCS +
- STA OUTFILE
- CLC
- RTS
- + LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- JSR EPUTS
- LDA #<OPEN┼RR═SG
- LDY #>OPEN┼RR═SG
- JSR EPUTS
- SEC
- RTS
- OPEN┼RR═SG = *
- .ASC ": CANNOT OPEN, IGNORING SEGMENT"
- .BYTE CHR├╥,0
-
- GET╘EMP╞ILE╬AME╧NLY = * ;( NEXT╘EMP╬AME ) : TEMP╬AME
- LDA NEXT╘EMP╬AME+0
- LDY NEXT╘EMP╬AME+1
- STA TEMP╬AME+0
- STY TEMP╬AME+1
- INC NEXT╘EMP╬AME+0
- BNE +
- INC NEXT╘EMP╬AME+1
- + LDA #0
- STA WORK
- - CMP HAVE├OUNT
- BCC +
- RTS
- + LDA WORK
- JSR GET╚
- LDY #HR╘EMP╞ILE╬AME
- LDA (H),Y
- CMP TEMP╬AME+0
- BNE +
- INY
- LDA (H),Y
- CMP TEMP╬AME+1
- BNE +
- JMP GET╘EMP╞ILE╬AME╧NLY
- + INC WORK
- LDA WORK
- JMP -
-
- GET╚ = * ;( .┴=HAVE╥EC╬UM ) : H
- LDX #0
- STX H+1
- LDX #5
- - ASL
- ROL H+1
- DEX
- BNE -
- CLC
- ADC #<HAVES
- STA H+0
- LDA H+1
- ADC #>HAVES
- STA H+1
- RTS
-
- GET╬EXT╚ = * ;( H ) : NEXT╚
- CLC
- LDA H+0
- ADC #HR╙IZE
- STA NEXT╚+0
- LDA H+1
- ADC #0
- STA NEXT╚+1
- RTS
-
- CMP╧UT╬AME╚ = * ;( (OUT╬AME)=STR1, (H)=HREC ) : .┴=CMP╥ESULT[0=┼╤,1=╟╘,-1=╠╘]
- LDA H+0
- LDY H+1
- CLC
- ADC #HR╞ILENAME
- BCC +
- INY
- + STA WORK+0
- STY WORK+1
- LDY #255
- - INY
- LDA (OUT╬AME),Y
- CMP (WORK),Y
- BNE +
- CMP #0
- BNE -
- LDA #0
- RTS
- + BCC +
- LDA #1
- RTS
- + LDA #$FF
- RTS
-
- INSERT╚AVE╥EC = * ;( SEGNUM, TEMP╬AME, OUT╬AME ) : CUR╚AVE
- ;** ALLOCATE NEW RECORD
- LDA HAVE├OUNT
- CMP #MAX╚AVE
- BCC +
- RTS
- + STA CUR╚AVE
- INC HAVE├OUNT
-
- ;** FIND CORRECT POSITION FOR NEW RECORD
- - DEC CUR╚AVE
- LDA CUR╚AVE
- CMP #$FF
- BEQ INSERT╚AVE╥EC╔NIT
- JSR GET╚
- JSR CMP╧UT╬AME╚
- CMP #1
- BEQ INSERT╚AVE╥EC╔NIT
- CMP #0
- BNE +
- LDY #HR╞ROM╙EG
- LDA (H),Y
- CMP SEGNUM+0
- INY
- LDA (H),Y
- SBC SEGNUM+1
- BCC INSERT╚AVE╥EC╔NIT
- + JSR GET╬EXT╚
- LDY #HR╙IZE-1
- - LDA (H),Y
- STA (NEXT╚),Y
- DEY
- BPL -
- JMP --
-
- ;** INITIALIZE RECORD
- INSERT╚AVE╥EC╔NIT = *
- INC CUR╚AVE
- LDX #HR╙IZE-1
- LDA #0
- - STA TEMP╚AVE╥EC,X
- DEX
- BPL -
- LDA SEGNUM+0
- LDY SEGNUM+1
- STA TEMP╚AVE╥EC+HR╞ROM╙EG+0
- STY TEMP╚AVE╥EC+HR╞ROM╙EG+1
- STA TEMP╚AVE╥EC+HR╘O╙EG+0
- STY TEMP╚AVE╥EC+HR╘O╙EG+1
- LDA #FALSE
- STA TEMP╚AVE╥EC+HR╔S┼ND
- LDA TEMP╬AME+0
- LDY TEMP╬AME+1
- STA TEMP╚AVE╥EC+HR╘EMP╞ILE╬AME+0
- STY TEMP╚AVE╥EC+HR╘EMP╞ILE╬AME+1
- LDY #0
- - LDA (OUT╬AME),Y
- STA TEMP╚AVE╥EC+HR╞ILENAME,Y
- BEQ +
- INY
- CPY #16
- BCC -
- + LDA CUR╚AVE
- JSR GET╚
- LDY #HR╙IZE-1
- - LDA TEMP╚AVE╥EC,Y
- STA (H),Y
- DEY
- BPL -
- CLC
- RTS
-
- WRITE╬UM5 = * ;( 0+.╪=NUM16 )
- LDA 0,X
- STA WORK+12
- LDA 1,X
- STA WORK+13
- LDA #0
- STA WORK+14
- STA WORK+15
- LDX #WORK+12
- LDA #5
- JMP WRITE╬UM
-
- WRITE╬UM10 = * ;( 0+.╪=NUM32 )
- LDA #10
- WRITE╬UM = *
- PHA
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA ZP+0
- STY ZP+1
- PLA
- JSR UTOAZ
- LDA #<NUMBUF
- LDY #>NUMBUF
- LDX STAT╞CB
- JSR FPUTS
- JSR WRITE╙PACES
- RTS
-
- WRITE╙PACES = *
- LDA #<SPACES═SG
- LDY #>SPACES═SG
- LDX STAT╞CB
- JSR FPUTS
- RTS
- SPACES═SG = *
- .BYTE $20,$20,0
-
- COMMIT╙EGMENT = *
- ;** ADD BYTE LENGTH, UPDATE ╔S┼ND FLAG IN HAVEREC
- LDA CUR╚AVE
- JSR GET╚
- LDX #4
- LDY #HR╓ALID╠ENGTH
- CLC
- - LDA (H),Y
- ADC BYTES-HR╓ALID╠ENGTH,Y
- STA (H),Y
- INY
- DEX
- BNE -
- LDY #HR╔S┼ND
- LDA IS┼ND
- STA (H),Y
- JSR CHECK├OALESCE
- JSR CHECK├OMPLETE
- RTS
-
- CHECK╞ILENAME╨TR .BUF 2
-
- CHECK├OMPLETE = *
- LDA CUR╚AVE
- JSR GET╚
- LDY #HR╔S┼ND
- LDA (H),Y
- BNE +
- - RTS
- + LDY #HR╞ROM╙EG
- LDA (H),Y
- CMP #1
- BNE -
- INY
- LDA (H),Y
- BNE -
- JSR FETCH╘EMP╬AME
- LDA #FALSE
- JSR GET╘EMP╬AME╙TR
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- LDA H+0
- LDY H+1
- CLC
- ADC #HR╞ILENAME
- BCC +
- INY
- + STA ZW+0
- STY ZW+1
- STA CHECK╞ILENAME╨TR+0
- STY CHECK╞ILENAME╨TR+1
- JSR RENAME╧VERWRITE
- LDA #<COMPLETE═SG1
- LDY #>COMPLETE═SG1
- JSR EPUTS
- LDA CHECK╞ILENAME╨TR+0
- LDY CHECK╞ILENAME╨TR+1
- JSR EPUTS
- LDA #<COMPLETE═SG2
- LDY #>COMPLETE═SG2
- JSR EPUTS
- LDA CUR╚AVE
- JSR REMOVE╚AVE╥EC
- RTS
-
- COMPLETE═SG1 = *
- .ASC "--╥EASSEMBLED "
- .BYTE CHR╤UOTE,0
- COMPLETE═SG2 = *
- .BYTE CHR╤UOTE,CHR├╥,0
-
- REMOVE╚AVE╥EC = * ;( .┴=HAVE╥EC )
- DEC HAVE├OUNT
- STA HAVE╥EC
- - LDA HAVE╥EC
- CMP HAVE├OUNT
- BCC +
- RTS
- + LDA HAVE╥EC
- JSR GET╚
- JSR GET╬EXT╚
- LDY #HR╙IZE-1
- - LDA (NEXT╚),Y
- STA (H),Y
- DEY
- BPL -
- INC HAVE╥EC
- JMP --
-
- CHECK╞ROM╨LUS1 .BUF 2
-
- CHECK├OALESCE = * ;( CUR╚AVE )
- LDX CUR╚AVE
- INX
- CPX HAVE├OUNT
- BCC +
- - RTS
- + LDA CUR╚AVE
- JSR GET╚
- JSR GET╬EXT╚
- CLC
- LDA NEXT╚+0
- ADC #HR╞ILENAME
- STA OUT╬AME+0
- LDA NEXT╚+1
- ADC #0
- STA OUT╬AME+1
- JSR CMP╧UT╬AME╚
- CMP #0
- BNE -
- LDY #HR╘O╙EG
- CLC
- LDA (H),Y
- ADC #1
- STA CHECK╞ROM╨LUS1+0
- INY
- LDA (H),Y
- ADC #0
- STA CHECK╞ROM╨LUS1+1
- LDY #HR╞ROM╙EG
- LDA (NEXT╚),Y
- CMP CHECK╞ROM╨LUS1+0
- BNE -
- INY
- LDA (NEXT╚),Y
- CMP CHECK╞ROM╨LUS1+1
- BNE -
-
- LDA #<COALESCE═SG1
- LDY #>COALESCE═SG1
- JSR EPUTS
- LDA H+0
- LDY H+1
- JSR EPUT╥ANGE
- LDA #","
- JSR EPUTCHAR
- LDA #" "
- JSR EPUTCHAR
- LDA NEXT╚+0
- LDY NEXT╚+1
- JSR EPUT╥ANGE
- LDA #<COALESCE═SG2
- LDY #>COALESCE═SG2
- JSR EPUTS
- CLC
- LDA H+0
- ADC #HR╞ILENAME
- LDY H+1
- BCC +
- INY
- + JSR EPUTS
- LDA #CHR╤UOTE
- JSR EPUTCHAR
- LDA #CHR├╥
- JSR EPUTCHAR
-
- LDX CUR╚AVE
- INX
- LDA #"R"
- JSR OPEN╘EMP
- BCC +
- RTS
- + STA FIN
- LDX CUR╚AVE
- LDA #"A"
- JSR OPEN╘EMP
- BCC +
- LDA FIN
- JSR CLOSE
- + STA FOUT
- LDA CUR╚AVE
- JSR GET╚
- JSR GET╬EXT╚
- LDY #HR╓ALID╠ENGTH+3
- LDX #3
- - LDA (NEXT╚),Y
- STA BYTES,X
- DEY
- DEX
- BPL -
- JSR COPY╞ILE
- LDA FOUT
- JSR CLOSE
- LDA FIN
- JSR CLOSE
- LDY #HR╔S┼ND
- LDA (NEXT╚),Y
- STA (H),Y
- LDY #HR╘O╙EG
- LDA (NEXT╚),Y
- STA (H),Y
- INY
- LDA (NEXT╚),Y
- STA (H),Y
- LDX #4
- LDY #HR╓ALID╠ENGTH
- CLC
- - LDA (H),Y
- ADC (NEXT╚),Y
- STA (H),Y
- INY
- DEX
- BNE -
- LDA CUR╚AVE
- CLC
- ADC #1
- JSR GET╚
- JSR FETCH╘EMP╬AME
- LDA #FALSE
- JSR GET╘EMP╬AME╙TR
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- BCC +
- NOP ;XX ERROR MSG
- + LDA CUR╚AVE
- CLC
- ADC #1
- JSR REMOVE╚AVE╥EC
- RTS
-
- COALESCE═SG1 = *
- .ASC "COALESCING SEGS "
- .BYTE 0
- COALESCE═SG2 = *
- .ASC " OF "
- .BYTE CHR╤UOTE,0
-
- EPUT╥ANGE = *
- STA WORK+0
- STY WORK+1
- LDY #HR╞ROM╙EG
- JSR EPUT╚AVE╬UM
- LDA #"-"
- JSR EPUTCHAR
- LDY #HR╘O╙EG
-
- EPUT╚AVE╬UM = *
- LDA (WORK),Y
- STA WORK+4
- INY
- LDA (WORK),Y
- STA WORK+5
- LDA #0
- STA WORK+6
- STA WORK+7
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA ZP+0
- STY ZP+1
- LDA #1
- LDX #WORK+4
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR EPUTS
- RTS
-
- FETCH╘EMP╬AME = * ;( H )
- LDY #HR╘EMP╞ILE╬AME
- LDA (H),Y
- STA TEMP╬AME+0
- INY
- LDA (H),Y
- STA TEMP╬AME+1
- RTS
-
- OPEN╘EMP = * ;( .╪=HAVE╥EC, .┴=MODE ) : .┴=FCB, .├╙=ERR
- PHA
- TXA
- JSR GET╚
- JSR FETCH╘EMP╬AME
- LDA #TRUE
- JSR GET╘EMP╬AME╙TR
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- STA ZP+0
- STY ZP+1
- PLA
- JSR OPEN
- BCC +
- LDA #<TEMP╬AME╙TR
- LDY #>TEMP╬AME╙TR
- JSR EPUTS
- LDA #<OPEN╘EMP═SG
- LDY #>OPEN╘EMP═SG
- JSR EPUTS
- SEC
- + RTS
-
- OPEN╘EMP═SG = *
- .ASC ": CANNOT OPEN, SHOULD BE ABLE TO, CONTINUING"
- .BYTE CHR├╥,0
-
- COPY╙EG╠EN .BUF 2
- .BYTE $00,$00
-
- COPY╞ILE = * ;( FIN, FOUT, BYTES-- )
- LDA #<COPY┬UF
- LDY #>COPY┬UF
- STA ZP+0
- STY ZP+1
- LDA BYTES+2
- ORA BYTES+3
- BNE +
- LDA BYTES+0
- CMP #<COPY┬UF╙IZE
- LDA BYTES+1
- SBC #>COPY┬UF╙IZE
- BCS +
- LDA BYTES+0
- LDY BYTES+1
- JMP ++
- + LDA #<COPY┬UF╙IZE
- LDY #>COPY┬UF╙IZE
- + LDX FIN
- JSR READ
- BEQ +
- STA COPY╙EG╠EN+0
- STY COPY╙EG╠EN+1
- LDX FOUT
- JSR WRITE
- SEC
- LDY #4
- LDX #0
- - LDA BYTES,X
- SBC COPY╙EG╠EN,X
- STA BYTES,X
- INX
- DEY
- BNE -
- LDA BYTES+0
- ORA BYTES+1
- ORA BYTES+2
- ORA BYTES+3
- BNE COPY╞ILE
- RTS
- + LDA BYTES+0
- ORA BYTES+1
- ORA BYTES+2
- ORA BYTES+3
- BNE +
- RTS
- + LDA #<COPY╠EN═SG
- LDY #>COPY╠EN═SG
- JSR EPUTS
- RTS
-
- COPY╠EN═SG = *
- .ASC "╔NSUFFICIENT TEMP DATA COALESCED, SHOULDN'T HAPPEN, CONTINUING"
- .BYTE CHR├╥,0
-
- OPEN╧V═ODE .BUF 1
-
- OPEN╧VERWRITE = * ;( (ZP)=NAME, .┴=MODE ) : .┴=╞CB, .├╙=ERR
- STA OPEN╧V═ODE
- JSR OPEN
- BCS +
- RTS
- + LDA ERRNO
- CMP #ACE┼RR╞ILE┼XISTS
- BEQ +
- - JSR REPORT╧PEN┼RROR
- SEC
- RTS
- + JSR REMOVE
- LDA OPEN╧V═ODE
- JSR OPEN
- BCS -
- RTS
-
- RENAME╧V╬AME .BUF 2
-
- RENAME╧VERWRITE = * ;( (ZP)=NAME, (ZW)=NEW╬AME ) : .├╙=ERR
- JSR RENAME
- BCS +
- RTS
- + LDA ZP+0
- LDY ZP+1
- STA RENAME╧V╬AME+0
- STY RENAME╧V╬AME+1
- LDA ERRNO
- CMP #ACE┼RR╞ILE┼XISTS
- BEQ +
- - JSR REPORT╥ENAME┼RROR
- SEC
- RTS
- + LDA ZW+0
- LDY ZW+1
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- LDA RENAME╧V╬AME+0
- LDY RENAME╧V╬AME+1
- STA ZP+0
- STY ZP+1
- JSR RENAME
- BCS -
- RTS
-
- RENAME╧V╬EW╬AME .BUF 2
-
- REPORT╥ENAME┼RROR = *
- LDA ZW+0
- LDY ZW+1
- STA RENAME╧V╬EW╬AME+0
- STY RENAME╧V╬EW╬AME+1
- LDA #<RENAME┼RR═SG1
- LDY #>RENAME┼RR═SG1
- JSR EPUTS
- LDA RENAME╧V╬AME+0
- LDY RENAME╧V╬AME+1
- JSR EPUTS
- LDA #<RENAME┼RR═SG2
- LDY #>RENAME┼RR═SG2
- JSR EPUTS
- LDA RENAME╧V╬EW╬AME+0
- LDY RENAME╧V╬EW╬AME+1
- JSR EPUTS
- LDA #<RENAME┼RR═SG3
- LDY #>RENAME┼RR═SG3
- JSR EPUTS
- RTS
-
- RENAME┼RR═SG1 = *
- .ASC "├ANNOT RENAME "
- .BYTE CHR╤UOTE,0
- RENAME┼RR═SG2 = *
- .BYTE CHR╤UOTE
- .ASC " TO "
- .BYTE CHR╤UOTE,0
- RENAME┼RR═SG3 = *
- .BYTE CHR╤UOTE
- .ASC ", CONTINUING."
- .BYTE CHR├╥,0
-
-