home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-25 | 301.5 KB | 20,374 lines |
- 37
- ACE.S
- 1383
- ;ace-128/64 KERNEL BY cRAIG bRUCE, STARTED 04-mAR-1992.
-
- ;* SYSTEM ZERO-PAGE MEMORY USAGE:
- ;* $02-$7F = APPLICATION WORK AREA
- ;* $80-$8F = SYSTEM WORK AREA
- ;* $FA-$FF = SYSTEM PARAMETER AREA
-
- ;* INITIAL ace ram0 ORGANIZATION
- ;* $0000-$0EFF = SYSTEM STORAGE
- ;* $0F00-$0FFF = KERNEL INTERFACE VARIABLES
- ;* $1000-$12FF = SYSTEM STORAGE
- ;* $1300-$1FFF = sHELL PROGRAM (3.25k)
- ;* $2000-$27FF = CHARACTER SET (2k)
- ;* $2800-$5FFF = ace KERNEL AND DEVICE DRIVERS (14k)
- ;* $6000-$BFFF = APPLICATION AREA & STACK (24k)
- ;* $C000-$FFFF = rom AND i/o, ram (16k)
-
- ;* FAR MEMORY TYPES
- ;* $00=NULL, $01=REU, $02=INTERNAL-512k, $06=RL-REU, $07=RL-RAM
-
- COMPUTER = 128
-
- .SEQ ACEHEAD.S
- .ORG $2800
-
- .IF COMPUTER-64
- .OBJ "@0:ACE128"
- .ELSE
- .OBJ "@0:ACE64"
- .IFE
-
- ;***JUMP TABLE
-
- JMP ENTRYpOINT
- JMP ACEoPEN
- JMP ACEcLOSE
- JMP ACErEAD
- JMP ACEwRITE
- JMP ACEiSDIR
- JMP ACEbLOAD
- JMP ACEcMDoPEN
- JMP ACEcMDcLOSE
- JMP ACEcMDsEND
- JMP ACEcMDsTATUS
- JMP ACEdIRoPEN
- JMP ACEcLOSE
- JMP ACEdIRrEAD
- JMP ACEfCBsWAP
- JMP ACErEMOVE
- JMP ACErENAME
- JMP ACEcHdIR
- JMP ACEzPlOAD
- JMP ACEzPsTORE
- JMP ACEfETCH
- JMP ACEsTASH
- JMP ACEpAGEaLLOC
- JMP ACEpAGEfREE
- JMP ACEeXIT
- JMP ACEdEViNFO
- JMP ACEsTOPkEY
- JMP ACEuTOA
- JMP ACEgETdATE
- JMP ACEsETdATE
- JMP ACEeXEC
- JMP ACEcDhOME
- JMP ACEwINMAX
- JMP ACEwINCLS
- JMP ACEwINSET
- JMP ACEwINSIZE
- JMP ACEwINLOAD
- JMP ACEwINSAVE
- JMP ACEwINPUT
- JMP ACEwINCOLOR
- JMP ACEwINPOS
- JMP ACEwINCURSOR
- JMP ACEwINSCROLL
- JMP CONgETKEY
- JMP CONcOLOR
- JMP CONpALETTE
- JMP CONsCREEN
-
- ;***GLOBAL DECLARATIONS
-
- MAXzPuSE = $90
- CONFIGbUF = $800
- BASICzPsAVE = $900
- KEYLINE = $B00
- CDbUFFER = $C00
- RAM0fREEmAP = $D00
- FREEMAP = $E00
-
- .IF COMPUTER-64
- MAXpAGE = $C0
- BKace = $0E
- BKkERNEL = $00
- BKcHARSET = $0F
- BKsELECT = $FF00
- KERNELiRQhANDLER = $FA65
- KERNELbRKhANDLER = $B003
- KERNELnMIhANDLER = $FA40
- .ELSE
- STRINGbUFFER = $A00
- MAXpAGE = $D0
- BKsELECT = $01
- BKace = $76
- BKkERNEL = $77
- KERNELiRQhANDLER = $EA31
- KERNELbRKhANDLER = $FE66
- KERNELnMIhANDLER = $FE47
- .IFE
-
- CIA1 = $DC00
- CHRcr = $0D
- ST = $90
- TRUE = $FF
- FALSE = $00
-
- FCBcOUNT = 16
- LFTABLE .BUF FCBcOUNT
- DEVTABLE .BUF FCBcOUNT
- SATABLE .BUF FCBcOUNT
- EOFTABLE .BUF FCBcOUNT
- PIDTABLE .BUF FCBcOUNT
- LFNULL = $FF
- FCBnULL = $FF
- MINdISK = 8
- REGSAVE .BUF 3
-
- NEWLF .BUF 1
-
- KERNELcLALL = $FFE7
- KERNELsETBNK = $FF68
- KERNELsETMSG = $FF90
- KERNELrEADST = $FFB7
- KERNELsETLFS = $FFBA
- KERNELsETNAM = $FFBD
- KERNELoPEN = $FFC0
- .IF COMPUTER-64
- KERNELcLOSE = $FFC3
- .IFE
- KERNELcHKIN = $FFC6
- KERNELcHKOUT = $FFC9
- KERNELcLRCHN = $FFCC
- KERNELcHRIN = $FFCF
- KERNELcHROUT = $FFD2
- KERNELlOAD = $FFD5
- KERNELsTOP = $FFE1
- KERNELgETIN = $FFE4
- KERNELsCRORG = $FFED
-
- .IF COMPUTER-64
- ;128 NOTHING HERE
- .ELSE
- ;*** KERNEL CLOSE WITH PSEUDO-CLOSE FOR DISK COMMAND CHANNEL FOR THE 64
- KERNELcLOSE = *
- BCS +
- JMP $FFC3
- + LDX $98
- - DEX
- BMI KERNELcLOSEeXIT
- CMP $259,X
- BNE -
- BEQ +
- BRK
- ;** FOUND ENTRY; COPY LAST ENTRY ON TOP IF IT
- + LDY $98
- DEY
- LDA $259,Y ;MOVE LFN
- STA $259,X
- LDA $263,Y ;MOVE DEV NUM
- STA $263,X
- LDA $26D,Y ;MOVE SEC ADDR
- STA $26D,X
- DEC $98
- KERNELcLOSEeXIT = *
- CLC
- RTS
- .IFE
-
- ;*** ENTRYPOINT()
-
- ENTRYpOINT = *
- LDA #0
- PHA
- PLP
- LDA #BKace
- STA BKsELECT
- JMP MAIN
-
- ;*** STARTUP()
-
- ACEbOOTSTRAP = *
- PHP
- SEI
- LDX #2
- - LDA $00,X
- STA BASICzPsAVE,X
- LDA #0
- STA $00,X
- INX
- CPX #MAXzPuSE
- BCC -
- LDA #<IRQiNIThANDLER
- LDY #>IRQiNIThANDLER
- STA $314
- STY $315
- LDA #<BRKhANDLER
- LDY #>BRKhANDLER
- STA $316
- STY $317
- LDA #<NMIhANDLER
- LDY #>NMIhANDLER
- STA $318
- STY $319
- LDX #127
- LDA #0
- - STA ERRNO,X
- DEX
- BPL -
- LDA 186 ;LAST ACCESSED cOMMODORE DEVICE
- CMP #8
- BCS +
- LDA #$04
- + STA ACEcURRENTdEVICE
- LDA #0
- JSR KERNELsETMSG
- .IF COMPUTER-64
- LDA #0
- LDX #0
- JSR KERNELsETBNK
- .IFE
- JSR KERNELcLALL
- PLP
- RTS
-
- ACEcONFIG = *
- LDA #0
- LDX BOOTdEVICE
- LDY #0
- JSR KERNELsETLFS
- LDA #6
- LDX #<ACEcONFIGnAME
- LDY #>ACEcONFIGnAME
- JSR KERNELsETNAM
- LDA #0
- LDX #<ACEaPPaDDRESS
- LDY #>ACEaPPaDDRESS
- JSR KERNELlOAD
- BCC +
- RTS
- + LDA #<CONFIGbUF
- LDY #>CONFIGbUF
- STA 2
- STY 3
- LDA #<ACEsTARTUPmSG
- LDY #>ACEsTARTUPmSG
- STA 4
- STY 5
- LDA #<RAM0fREEmAP
- LDY #>RAM0fREEmAP
- STA 6
- STY 7
- LDX #>ACEbSSeND
- LDA #<ACEbSSeND
- BEQ +
- INX
- + STX 8
- .IF COMPUTER-64
- LDA #128
- .ELSE
- LDA #64
- .IFE
- STA 9
- JSR ACEaPPaDDRESS
- RTS
- ACEcONFIGnAME = *
- .ASC "CONFIG"
-
- ACEsTARTUP = *
- LDX #FCBcOUNT-1
- LDA #LFNULL
- - STA LFTABLE,X
- DEX
- BPL -
- LDA #0
- STA NEWLF
- LDA ACEcURRENTdEVICE
- LSR
- LSR
- ORA #$40
- STA CDbUFFER
- LDA #":"
- STA CDbUFFER+1
- LDA #0
- STA CDbUFFER+2
- LDA #<CDbUFFER
- LDY #>CDbUFFER
- STA ACEcURdIRnAME+0
- STY ACEcURdIRnAME+1
- JSR INITsTACK
- LDA #<SHELLpATHbUF
- LDY #>SHELLpATHbUF
- STA ACEsHELLpATH+0
- STY ACEsHELLpATH+1
- LDX #31
- - LDA CONFIGbUF+$E0,X
- STA SHELLpATHbUF,X
- DEX
- BPL -
- LDA #<SHELLaLIASbUF
- LDY #>SHELLaLIASbUF
- STA ACEsHELLaLIAS+0
- STY ACEsHELLaLIAS+1
- LDA #0
- STA SHELLaLIASbUF
- LDA #1
- STA ACEpROCESSid
- ;JSR ACEiRQiNIT
- RTS
-
- INITsTACK = *
- LDA #$AC
- STA ACEid
- LDA #$E1
- STA ACEid+1
- LDA #0
- .IF COMPUTER-64
- LDY CONFIGbUF+$A8
- .ELSE
- LDY CONFIGbUF+$C6
- .IFE
- CPY #MAXpAGE
- BCC +
- LDY #MAXpAGE
- + STA ACEsTACKtOP+0
- STY ACEsTACKtOP+1
- STA ACEsTACKpTR+0
- STY ACEsTACKpTR+1
- LDA #0 ;PUSH THE zero TRAILER ARGV
- LDY #0
- JSR PUSHay
- LDA #0 ;PUSH ARGC
- LDY #0
- JSR PUSHay
- LDA #$FF ;PUSH FLAGS, RESTORE STDERR
- LDY #$00
- JSR PUSHay
- LDA #$FF ;PUSH RESTORE STDOUT, RESTORE STDIN
- LDY #$FF
- JSR PUSHay
- LDA #$FF ;PUSH PREVIOUS FRAME POINTER
- LDY #$FF
- JSR PUSHay
- LDA ACEsTACKpTR
- LDY ACEsTACKpTR+1
- STA ACEfRAMEpTR
- STY ACEfRAMEpTR+1
- RTS
-
- ZSP = $60
-
- PUSHay = *
- TAX
- SEC
- LDA ACEsTACKpTR
- SBC #2
- STA ACEsTACKpTR
- STA ZSP
- LDA ACEsTACKpTR+1
- SBC #0
- STA ACEsTACKpTR+1
- STA ZSP+1
- TYA
- LDY #1
- STA (ZSP),Y
- DEY
- TXA
- STA (ZSP),Y
- RTS
-
- ;*** SHUTDOWN()
-
- ACEsHUTDOWN = *
- LDX #2
- - LDA BASICzPsAVE,X
- STA $00,X
- INX
- CPX #MAXzPuSE
- BCC -
- LDA #BKkERNEL
- STA BKsELECT
- PHP
- SEI
- LDA #<KERNELiRQhANDLER
- LDY #>KERNELiRQhANDLER
- STA $314
- STY $315
- LDA #<KERNELbRKhANDLER
- LDY #>KERNELbRKhANDLER
- STA $316
- STY $317
- LDA #<KERNELnMIhANDLER
- LDY #>KERNELnMIhANDLER
- STA $318
- STY $319
- .IF COMPUTER-64
- .ELSE
- LDA #%10000001
- STA $DC0D
- LDA #%01111111
- STA $DD0D
- BIT $DC0D
- BIT $DD0D
- LDA #%00000000
- STA VIC+$1A
- .IFE
- PLP
- RTS
-
- LDA #0
- PHA
- PLP
- RTS
-
- ACEsHUTDOWNbASIC = *
- .IF COMPUTER-64
- JSR VDCsHUTDOWN
- JSR VICsHUTDOWN
- .ELSE
- JSR VICsHUTDOWN
- .IFE
- JSR ACEsHUTDOWN
- .IF COMPUTER-64
- LDA #$16
- STA 2604
- STA $D018
- LDA #0
- STA $1C00
- JSR $51D6
- JMP $4DB7
- .ELSE
- LDA #$16
- STA $D018
- LDA #0
- STA $800
- JSR $A642
- JMP $A474
- .IFE
- BRK
-
- NMIhANDLER = *
- .IF COMPUTER-64
- CLD
- LDA #$7F
- STA $DD0D
- LDY $DD0D
- BMI +
- JSR $F63D
- JSR $FFE1
- BNE +
- JSR ACEsHUTDOWN
- JSR $E056
- JSR $E109
- JSR $C000
- LDA #0
- STA $1C00
- JSR $51D6
- JMP ($0A00)
- + JMP $FF33
- .ELSE
- CLD
- PHA
- TXA
- PHA
- TYA
- PHA
- LDA #$7F
- STA $DD0D
- LDY $DD0D
- BMI +
- JSR $F6BC
- JSR $FFE1
- BNE +
- JSR ACEsHUTDOWN
- JSR $FD15
- JSR $FDA3
- JSR $E518
- LDA #0
- STA $800
- JSR $A642
- JMP ($A002)
- + PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- .IFE
-
- IRQiNIThANDLER = *
- CLD
- JMP KERNELiRQhANDLER
-
- ACEiRQiNIT = *
- PHP
- SEI
- LDA #<IRQhANDLER
- LDY #>IRQhANDLER
- STA $314
- STY $315
- LDA #%01111111
- STA $DC0D
- STA $DD0D
- BIT $DC0D
- BIT $DD0D
- LDA VIC+$11
- AND #%01111111
- ORA #%00000000
- STA VIC+$11
- LDA #252
- STA VIC+$12
- LDA #%00000001
- STA VIC+$1A
- PLP
- RTS
-
- IRQhANDLER = * ;(.axy ALREADY SAVED, 128 BANK)
- CLD
- .IF COMPUTER-64
- .ELSE
- LDA BKsELECT
- PHA
- .IFE
- LDA VIC+$19
- BPL +
- AND #1
- BNE SIXTY
- + LDA $DC0D
- JMP IRQeXIT
-
- ;%%%
- SIXTY = *
- STA VIC+$19
- LDA #BKace
- STA BKsELECT
- JSR CONsCREENsAVE
- JSR VICiRQcURSOR
- JSR CONiRQkEYSCAN
- JMP IRQeXIT
-
- .IF COMPUTER-64
- IRQeXIT = $FF33
- .ELSE
- IRQeXIT = *
- PLA
- STA BKsELECT
- PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- .IFE
-
- BRKhANDLER = *
- CLD
- LDX #0
- - LDA $00,X
- STA $0400,X
- DEX
- BNE -
- JSR ACEsHUTDOWN
- .IF COMPUTER-64
- LDA #0
- STA $1C00
- ;JSR $51D6
- .ELSE
- LDA #0
- STA $800
- JSR $A642
- .IFE
- JMP KERNELbRKhANDLER
-
- ;*** GETdEVICE( ZP=FILENAMEz ) : .a=DEVICE, .y=SCANpOS
-
- GETdEVICE = *
- LDY #0
- LDA (ZP),Y
- BEQ USEdEFAULT
- LDY #1
- LDA (ZP),Y
- CMP #":"
- BNE USEdEFAULT
- LDY #0
- LDA (ZP),Y
- LDY #2
- CMP #"."
- BNE +
- LDA ACEcURRENTdEVICE
- JMP GOTdEV
- + AND #$1F
- ASL
- ASL
- JMP GOTdEV
-
- USEdEFAULT = *
- LDA ACEcURRENTdEVICE
- LDY #0
-
- GOTdEV = *
- RTS
-
- GETlFaNDfCB = * ;() : .x=FCB, .a=LF
- OPENlFsEARCH = *
- INC NEWLF
- LDA NEWLF
- AND #$7F
- LDX #FCBcOUNT-1
- - CMP LFTABLE,X
- BEQ OPENlFsEARCH
- DEX
- BPL -
- TAY
- LDX #0
- - LDA LFTABLE,X
- BMI +
- INX
- CPX #FCBcOUNT
- BCC -
- LDA #ACEeRRnOfREEfCBS
- SEC
- RTS
- + LDA ACEpROCESSid
- STA PIDTABLE,X
- TYA
- CLC
- RTS
-
- ;*** ISDIR( (ZP)=fILENAMEz ) : .a=dEV, .x=ISdISK, .y=ISdIR
-
- ACEiSDIR = *
- JSR GETdEVICE
- PHA
- TAX
- LDA CONFIGbUF+0,X
- CMP #1
- BEQ +
- CMP #4
- BEQ +
- LDX #FALSE
- LDY #FALSE
- JMP ISdIReXIT
- LDX #TRUE
- + LDY #255
- - INY
- LDA (ZP),Y
- BNE -
- DEY
- LDA (ZP),Y
- LDY #TRUE
- CMP #":"
- BEQ ISdIReXIT
- LDY #FALSE
-
- ISdIReXIT = *
- PLA
- RTS
-
- ;*** OPEN( ZP=FILENAMEz, .a=MODE["R","W","A"] ) : .a=FCB
-
- OPENfCB = SYSWORK+0
- OPENnAMEsCAN = SYSWORK+1
- OPENmODE = SYSWORK+2
- OPENnAMElENGTH = SYSWORK+3
- OPENdEVICE = SYSWORK+4
- CHECKsTAT .BUF 1
-
- ACEoPEN = *
- STA OPENmODE
- LDA #TRUE
- STA CHECKsTAT
- JSR GETlFaNDfCB
- BCC +
- RTS
- + STA LFTABLE,X
- LDA #$00
- STA EOFTABLE,X
- STX OPENfCB
- JSR GETdEVICE
- STY OPENnAMEsCAN
- LDX OPENfCB
- STA DEVTABLE,X
- STA OPENdEVICE
- TAX
-
- ;GET SA HERE
- LDA CONFIGbUF+0,X
- CMP #0
- BNE +
- LDY CONFIGbUF+2,X
- JMP NONdISKsA
- + LDY #0
- CMP #1
- BNE NONdISKsA
-
- LDY #2
- DISKsAsEARCH = *
- LDX #FCBcOUNT-1
- - LDA LFTABLE,X
- BMI +
- LDA DEVTABLE,X
- CMP OPENdEVICE
- BNE +
- TYA
- CMP SATABLE,X
- BNE +
- INY
- BNE DISKsAsEARCH
- + DEX
- BPL -
-
- NONdISKsA = *
- LDX OPENfCB
- TYA
- STA SATABLE,X
-
- ;SET THE NAME
- LDX #0
- LDY OPENnAMEsCAN
- - LDA (ZP),Y
- STA STRINGbUFFER,X
- BEQ +
- INY
- INX
- BNE -
- + LDY OPENdEVICE
- LDA CONFIGbUF+0,Y
- CMP #1
- BNE NONdISKoPEN
- ;** STICK THE MODE FOR DISK FILES
- CPX #0
- BNE +
- LDA #ACEeRRoPENdIRECTORY
- SEC
- RTS
- + LDA #","
- STA STRINGbUFFER,X
- INX
- LDA OPENmODE
- STA STRINGbUFFER,X
- INX
- JMP OPENgOTnAME
-
- ;** GET RID OF THE FILENAME FOR NON-DISKS
- NONdISKoPEN = *
- LDX #0
-
- OPENgOTnAME = *
- ;** DISPATCH HERE FOR NON-KERNEL DEVICES
- TXA
- LDX #<STRINGbUFFER
- LDY #>STRINGbUFFER
- JSR KERNELsETNAM
-
- ;SET LFS
- LDX OPENfCB
- LDA LFTABLE,X
- PHA
- LDA SATABLE,X
- TAY
- LDA DEVTABLE,X
- TAX
- LDA CONFIGbUF+1,X
- TAX
- PLA
- JSR KERNELsETLFS
-
- ;DO THE OPEN
- JSR KERNELoPEN
- BCS OPENeRROR
- + LDX OPENdEVICE
- LDA CONFIGbUF+0,X
- CMP #1
- BNE +
- LDA CHECKsTAT
- BEQ +
- TXA
- JSR OPENdISKsTATUS
- BCC +
-
- OPENeRROR = *
- STA ERRNO
- LDX OPENfCB
- LDA LFTABLE,X
- CLC
- JSR KERNELcLOSE
- LDX OPENfCB
- LDA #LFNULL
- STA LFTABLE,X
- SEC
- LDA #FCBnULL
- RTS
- + LDA OPENfCB
- CLC
- RTS
-
- OPENdISKsTATUS = * ;( .a=DEVICE ) : ERRNO=.a=ERRCODE, .cs=ERRFLAG
- JSR CMDCHoPEN
- BCS +
- JSR CHECKdISKsTATUS
- PHP
- PHA
- JSR CMDCHcLOSE
- PLA
- PLP
- + RTS
-
- CMDCHoPEN = * ;( .a=DEVICE )
- PHA
- JSR CMDCHcLOSE
- PLA
- TAX
- LDA CONFIGbUF+1,X
- TAX
- LDY #15
- LDA #LFNULL
- JSR KERNELsETLFS
- LDA #0
- JSR KERNELsETNAM
- JSR KERNELoPEN
- BCC +
- STA ERRNO
- + RTS
-
- CMDCHsEND = * ;( STRINGbUFFER )
- LDX #LFNULL
- JSR KERNELcHKOUT
- BCS CMDCHeRR
- LDX #0
- - LDA STRINGbUFFER,X
- BEQ +
- JSR KERNELcHROUT
- BCS CMDCHeRR
- INX
- BNE -
- + JSR KERNELcLRCHN
- CLC
- RTS
-
- CMDCHeRR = *
- STA ERRNO
- PHA
- JSR KERNELcLRCHN
- PLA
- SEC
- RTS
-
- CHECKdISKsTATUScODE .BUF 1
-
- CHECKdISKsTATUS = *
- LDX #LFNULL
- JSR KERNELcHKIN
- BCS CMDCHeRR
- JSR KERNELcHRIN
- BCS CMDCHeRR
- AND #$0F
- STA CHECKdISKsTATUScODE
- ASL
- ASL
- ADC CHECKdISKsTATUScODE
- ASL
- STA CHECKdISKsTATUScODE
- JSR KERNELcHRIN
- BCS CMDCHeRR
- AND #$0F
- CLC
- ADC CHECKdISKsTATUScODE
- STA CHECKdISKsTATUScODE
- - JSR KERNELrEADST
- AND #$80
- BEQ +
- LDA #ACEeRRdEVICEnOTpRESENT
- SEC
- BCS CMDCHeRR
- + JSR KERNELcHRIN
- BCS CMDCHeRR
- CMP #CHRcr
- BNE -
- JSR KERNELcLRCHN
- LDA CHECKdISKsTATUScODE
- CMP #62
- BNE +
- LDA #ACEeRRfILEnOTfOUND
- STA ERRNO
- SEC
- RTS
- + CMP #20
- BCC +
- STA ERRNO
- + RTS
-
- CMDCHcLOSE = *
- SEC
- LDA #LFNULL
- JSR KERNELcLOSE
- BCC +
- STA ERRNO
- + RTS
-
- ;*** CLOSE( .a=FCB )
-
- ACEcLOSE = *
- TAX
- LDA LFTABLE,X
- PHA
- LDA #LFNULL
- STA LFTABLE,X
- PLA
- CLC
- JMP KERNELcLOSE
-
- ;*** READ( .x=FCB, (ZP)=DATA, .ay=MAXlENGTH ) : .ay=LENGTH, .z=EOF
-
- READmAXlEN = SYSWORK+0
- READpTR = SYSWORK+2
- READlENGTH = SYSWORK+4
- READfCB = SYSWORK+6
- READdEVICEdISK = SYSWORK+7
-
- ACErEAD = *
- STA READmAXlEN+0
- STY READmAXlEN+1
- STX READfCB
- LDA ZP+0
- LDY ZP+1
- STA READpTR+0
- STY READpTR+1
- LDA #0
- STA READlENGTH+0
- STA READlENGTH+1
- LDA EOFTABLE,X
- BNE READeOFeXIT
- LDY #0
- LDA DEVTABLE,X
- TAX
- LDA CONFIGbUF+0,X
- CMP #2
- BNE +
- JMP CONrEAD
- + CMP #1
- BNE +
- LDY #$FF
- + LDX READfCB
- STY READdEVICEdISK
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKIN
- BCC READbYTE
- RTS
-
- READbYTE = *
- LDA READlENGTH+0
- CMP READmAXlEN+0
- LDA READlENGTH+1
- SBC READmAXlEN+1
- BCS READeXIT
- JSR KERNELcHRIN
- LDY #0
- STA (READpTR),Y
- INC READpTR+0
- BNE +
- INC READpTR+1
- + INC READlENGTH+0
- BNE +
- INC READlENGTH+1
- + BIT READdEVICEdISK
- BPL READbYTE
- LDA ST
- AND #$40
- BEQ READbYTE
- LDX READfCB
- STA EOFTABLE,X
-
- READeXIT = *
- JSR KERNELcLRCHN
- READeXITnOCLR = *
- LDA READlENGTH+0
- LDY READlENGTH+1
- LDX #$FF
- CLC
- RTS
-
- READeOFeXIT = *
- LDA #0
- LDY #0
- CLC
- RTS
-
- ;*** WRITE( .x=FCB, (ZP)=DATA, .ay=LENGTH )
-
- WRITElENGTH = SYSWORK+0
- WRITEpTR = SYSWORK+2
-
- ACEwRITE = *
- STA WRITElENGTH+0
- STY WRITElENGTH+1
- LDA ZP+0
- LDY ZP+1
- STA WRITEpTR+0
- STY WRITEpTR+1
- STX REGSAVE+1
- LDA DEVTABLE,X
- TAX
- LDA CONFIGbUF+0,X
- CMP #2
- ;BEQ WRITEbYTE
- BNE +
- JMP CONwRITE
- + LDX REGSAVE+1
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKOUT
- BCC WRITEbYTE
- RTS
-
- WRITEbYTE = *
- LDA WRITElENGTH+0
- ORA WRITElENGTH+1
- BEQ WRITEfINISH
- LDY #0
- LDA (WRITEpTR),Y
- JSR KERNELcHROUT
- BCC +
- STA ERRNO
- JSR KERNELcLRCHN
- SEC
- RTS
- + INC WRITEpTR+0
- BNE +
- INC WRITEpTR+1
- + LDA WRITElENGTH+0
- BNE +
- DEC WRITElENGTH+1
- + DEC WRITElENGTH+0
- JMP WRITEbYTE
-
- WRITEfINISH = *
- JSR KERNELcLRCHN
- CLC
- RTS
-
- ;*** CMDOPEN( (ZP)=dEVnAME ) : .a=fCB
-
- GETdISKdEVICE = * ;( (ZP)=DEVNAME ) : .a=DEVICE, .z=ISkERNALdISK
- JSR GETdEVICE
- TAX
- LDA CONFIGbUF+0,X
- CMP #1
- PHP
- TXA
- PLP
- RTS
-
- ACEcMDoPEN = *
- JSR GETdISKdEVICE
- BEQ +
- LDA #ACEeRRdISKoNLYoPERATION
- STA ERRNO
- SEC
- RTS
- + STA OPENdEVICE
- JSR GETlFaNDfCB
- BCC +
- RTS
- + STA LFTABLE,X
- STX OPENfCB
- LDA OPENdEVICE
- STA DEVTABLE,X
- LDA #0
- STA EOFTABLE,X
- LDA #15
- STA SATABLE,X
- STX OPENfCB
- LDA #0
- STA STRINGbUFFER
- LDA #FALSE
- STA CHECKsTAT
- LDX #0
- JSR OPENgOTnAME
- BCC +
- RTS
- + LDA ST
- AND #$80
- BEQ +
- LDA #ACEeRRdEVICEnOTpRESENT
- STA ERRNO
- SEC
- RTS
- + LDA OPENfCB
- RTS
-
- ;*** CMDCLOSE( .a=FCB )
-
- ACEcMDcLOSE = *
- TAX
- LDA LFTABLE,X
- PHA
- LDA #LFNULL
- STA LFTABLE,X
- PLA
- SEC
- JMP KERNELcLOSE
-
- ;*** CMDSEND( .x=fCB, .ay=cMD )
-
- ACEcMDsEND = *
- STA SYSWORK+0
- STY SYSWORK+1
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKOUT
- BCC +
- STA ERRNO
- RTS
- + LDY #0
- - LDA (SYSWORK),Y
- BEQ +
- JSR KERNELcHROUT
- BCS ++
- INY
- BNE -
- + JSR KERNELcLRCHN
- CLC
- RTS
- + STA ERRNO
- JSR KERNELcLRCHN
- SEC
- RTS
-
- ;*** CMDSTATUS( .x=fCB, .ay=sTATUSbUF ) : sTATUSbUF, .a=STATUScODE
-
- ACEcMDsTATUS = *
- STA SYSWORK+0
- STY SYSWORK+1
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKIN
- BCC +
- - STA ERRNO
- JSR KERNELcLRCHN
- SEC
- RTS
- + LDY #0
- - JSR KERNELcHRIN
- BCS --
- CMP #$0D
- BEQ +
- STA (SYSWORK),Y
- INY
- JSR KERNELrEADST
- AND #$40
- BEQ -
- + LDA #0
- STA (SYSWORK),Y
- JSR KERNELcLRCHN
- LDY #0
- LDA (SYSWORK),Y
- AND #$0F
- ASL
- ASL
- ADC (SYSWORK),Y
- ASL
- STA SYSWORK+3
- INY
- LDA (SYSWORK),Y
- AND #$0F
- ADC SYSWORK+3
- CLC
- RTS
-
- .SEQ ACECALL.S
- .SEQ ACEMEM.S
- .SEQ ACECON.S
-
- ;*** SCREEN CALLS
-
- TEXTmODE .BUF 1
-
- .IF COMPUTER-64
- .SEQ ACEVDC.S
- .SEQ ACEVIC.S
- .ELSE
- .SEQ ACEVIC80.S
- .SEQ ACEVIC.S
- .IFE
-
- SCREENiNIT = *
- .IF COMPUTER-64
- JSR VDCiNIT
- JSR VICiNIT
- LDA #80
- BIT $D7
- BMI +
- LDA #40
- + JSR CONSCREEN
- .ELSE
- LDA #40
- ;XX CHECK CONFIG FOR SCREEN
- JSR CONSCREEN
- .IFE
- RTS
-
- ACEwINMAX = *
- BIT TEXTmODE
- BMI +
- JMP VICwINMAX
- + JMP VDCwINMAX
- ACEwINCLS = *
- BIT TEXTmODE
- BMI +
- JMP VICwINCLS
- + JMP VDCwINCLS
- ACEwINSET = *
- BIT TEXTmODE
- BMI +
- JMP VICwINSET
- + JMP VDCwINSET
- ACEwINSIZE = *
- BIT TEXTmODE
- BMI +
- JMP VICwINSIZE
- + JMP VDCwINSIZE
- ACEwINLOAD = *
- BIT TEXTmODE
- BMI +
- JMP VICwINLOAD
- + JMP VDCwINLOAD
- ACEwINSAVE = *
- BIT TEXTmODE
- BMI +
- JMP VICwINSAVE
- + JMP VDCwINSAVE
- ACEwINPUT = *
- BIT TEXTmODE
- BMI +
- JMP VICwINPUT
- + JMP VDCwINPUT
- ACEwINCOLOR = *
- BIT TEXTmODE
- BMI +
- JMP VICwINCOLOR
- + JMP VDCwINCOLOR
- ACEwINPOS = *
- BIT TEXTmODE
- BMI +
- JMP VICwINPOS
- + JMP VDCwINPOS
- ACEwINCURSOR = *
- BIT TEXTmODE
- BMI +
- JMP VICwINCURSOR
- + JMP VDCwINCURSOR
- ACEwINSCROLL = *
- BIT TEXTmODE
- BMI +
- JMP VICwINSCROLL
- + JMP VDCwINSCROLL
-
- ;*** MAIN()
-
- BOOTdEVICE .BUF 1
- TITLEpTR .BUF 2
- TITLElEN .BUF 2
-
- MAIN = *
- LDA #147
- JSR KERNELcHROUT
- LDA #14
- JSR KERNELcHROUT
- LDX #0
- - LDA ACEsTARTUPmSG,X
- BEQ +
- JSR KERNELcHROUT
- INX
- BNE -
- + SEI
- JSR ACEbOOTSTRAP
- LDA ACEcURRENTdEVICE
- STA BOOTdEVICE
- JSR INITmEMORY
- JSR ACEcONFIG
- BCS MAINeXIT
- LDA 2
- LDY 3
- STA TITLEpTR+0
- STY TITLEpTR+1
- LDA 4
- LDY 5
- STA TITLElEN+0
- STY TITLElEN+1
- JSR ACEsTARTUP
- JSR INITmEMORYaLLOC
- SEI
- JSR SCREENiNIT
- JSR CONiNIT
- JSR ACEiRQiNIT
- CLI
-
- ;** OPEN STD FILES
- LDA #<CONFIGbUF+$90
- LDY #>CONFIGbUF+$91
- STA ZP+0
- STY ZP+1
- JSR CHDIR
- LDA #<STDINnAME
- LDY #>STDINnAME
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN ;FCB=0
- LDA #<STDOUTnAME
- LDY #>STDOUTnAME
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN ;FCB=1
- LDA #"W"
- JSR OPEN ;FCB=2
- LDA TITLEpTR+0
- LDY TITLEpTR+1
- STA ZP+0
- STY ZP+1
- LDA TITLElEN+0
- LDY TITLElEN+1
- LDX #STDOUT
- JSR WRITE
- CLI
-
- ;** CALL SHELL
- LDA #<ACEsHELLaDDRESS
- LDY #>ACEsHELLaDDRESS
- JSR EXEC
-
- ;** EXIT
- MAINeXIT = *
- LDA #STDIN
- JSR CLOSE
- LDA #STDOUT
- JSR CLOSE
- LDA #STDERR
- JSR CLOSE
- LDA BOOTdEVICE
- STA 186
- JSR SHUTDOWNmEMORY
- LDA #147
- JSR KERNELcHROUT
- JMP ACEsHUTDOWNbASIC
-
- STDOUTnAME .ASC "S:"
- .BYTE 0
- STDINnAME .ASC "K:"
- .BYTE 0
-
- ACEsTARTUPmSG = *
- .IF COMPUTER-64
- .ASC "ace-128 "
- .ELSE
- .ASC "ace-64 "
- .IFE
- .ASC "kERNEL 0.54.00 - csb 30-nOV-93"
- .BYTE CHRcr,CHRcr,0
-
- ;*** BSS: C128=768 BYTES, C64=512 BYTES
-
- ACEbSS = *
- SHELLaLIASbUF = ACEbSS+0
- SHELLpATHbUF = SHELLaLIASbUF+256
- .IF COMPUTER-64
- STRINGbUFFER = SHELLpATHbUF+256
- ACEbSSeND = STRINGbUFFER+256
- .ELSE
- ACEbSSeND = SHELLpATHbUF+256
- .IFE
- ACECALL.S
- 801
- ;*** DIROPEN( (ZP)=DEVICEnAME ) : .a=FCB
-
- ACEdIRoPEN = *
- LDA #TRUE
- STA CHECKsTAT
- JSR GETdISKdEVICE
- BEQ +
- LDA #ACEeRRdISKoNLYoPERATION
- SEC
- RTS
- + STA OPENdEVICE
- STY OPENnAMEsCAN
- JSR GETlFaNDfCB
- BCC +
- RTS
- + STA LFTABLE,X
- LDA OPENdEVICE
- STA DEVTABLE,X
- LDA #0
- STA EOFTABLE,X
- LDA #0
- STA SATABLE,X
- STX OPENfCB
- LDA #"$"
- STA STRINGbUFFER
- LDA #"0"
- STA STRINGbUFFER+1
- LDA #0
- STA STRINGbUFFER+2
- LDX #2
- JSR DIRoPENsETnAME
- JSR OPENgOTnAME
- BCC +
- RTS
- + LDX OPENfCB
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKIN
- JSR KERNELcHRIN
- JSR KERNELcHRIN
- JSR KERNELcLRCHN
- LDA OPENfCB
- CLC
- RTS
-
- DIRoPENsETnAME = *
- LDY OPENdEVICE
- LDA CONFIGbUF+3,Y
- BMI DIRnAMEdATE
- LDY OPENnAMEsCAN
- LDA (ZP),Y
- BNE +
- RTS
- + LDX #1
-
- DIRnAMEnORMAL = *
- - LDA (ZP),Y
- STA STRINGbUFFER,X
- BEQ +
- INY
- INX
- BNE -
- + DEX
- LDA #":"
- CMP STRINGbUFFER,X
- BEQ +
- INX
- STA STRINGbUFFER,X
- + INX
- LDA #"*"
- STA STRINGbUFFER,X
- INX
- LDA #0
- STA STRINGbUFFER,X
- RTS
-
- DIRnAMEdATE = *
- LDA #"="
- STA STRINGbUFFER+1
- LDA #"T"
- STA STRINGbUFFER+2
- LDX #3
- LDY OPENnAMEsCAN
- JSR DIRnAMEnORMAL
- LDA #"="
- STA STRINGbUFFER,X
- INX
- LDA #"L"
- STA STRINGbUFFER,X
- INX
- LDA #0
- STA STRINGbUFFER,X
- RTS
-
-
- ;*** DIRREAD( .x=FCB ) : .z=EOF, ACEdIRENTbUFFER=DATA
-
- DIRbLOCKS = SYSWORK+0
-
- ACEdIRrEAD = *
- LDA LFTABLE,X
- TAX
- JSR KERNELcHKIN
- BCC +
- LDA #0
- RTS
- ;** READ THE LINK
- + JSR KERNELcHRIN
- STA SYSWORK+4
- JSR KERNELrEADST
- AND #$40
- BNE DIRREADeOFeXIT
- JSR KERNELcHRIN
- ORA SYSWORK+4
- BNE +
-
- DIRREADeOFeXIT = *
- JSR KERNELcLRCHN
- LDX #0
- RTS
- ;** READ THE BLOCK COUNT
- + JSR KERNELcHRIN
- STA DIRbLOCKS
- STA ACEdIRENTbYTES+1
- JSR KERNELcHRIN
- STA DIRbLOCKS+1
- STA ACEdIRENTbYTES+2
- ASL DIRbLOCKS
- ROL DIRbLOCKS+1
- LDA #0
- ROL
- STA DIRbLOCKS+2
- SEC
- LDA #0
- SBC DIRbLOCKS
- STA ACEdIRENTbYTES+0
- LDA ACEdIRENTbYTES+1
- SBC DIRbLOCKS+1
- STA ACEdIRENTbYTES+1
- LDA ACEdIRENTbYTES+2
- SBC DIRbLOCKS+2
- STA ACEdIRENTbYTES+2
- ;** READ THE FILENAME
- LDA #0
- STA ACEdIRENTnAME
- STA ACEdIRENTnAMElEN
- - JSR KERNELcHRIN
- BCS DIRREADeRReXIT
- BIT ST
- BVS DIRREADeRReXIT
- CMP #" "
- BEQ -
- CMP #18
- BEQ -
- CMP #$22
- BNE DIRREADeXIT
- LDX #0
- - JSR KERNELcHRIN
- BCS DIRREADeRReXIT
- BIT ST
- BVS DIRREADeRReXIT
- CMP #$22
- BEQ +
- STA ACEdIRENTnAME,X
- INX
- BNE -
- + LDA #0
- STA ACEdIRENTnAME,X
- STX ACEdIRENTnAMElEN
- - JSR KERNELcHRIN
- CMP #" "
- BEQ -
- ;** READ TYPE AND FLAGS
- LDX #%01100000
- STX ACEdIRENTfLAGS
- CMP #"*"
- BNE +
- LDA ACEdIRENTfLAGS
- ORA #%00001000
- STA ACEdIRENTfLAGS
- JSR KERNELcHRIN
- + LDX #3
- LDY #0
- JMP DIRtYPEfIRST
- - JSR KERNELcHRIN
- DIRtYPEfIRST = *
- STA ACEdIRENTtYPE,Y
- INY
- DEX
- BNE -
- LDA #0
- STA ACEdIRENTtYPE+3
- LDA ACEdIRENTtYPE
- CMP #"D"
- BNE +
- LDA ACEdIRENTfLAGS
- ORA #%10010000
- STA ACEdIRENTfLAGS
- JMP DIRREADeXIT
- + CMP #"P"
- BNE DIRREADeXIT
- LDA ACEdIRENTfLAGS
- ORA #%00010000
- STA ACEdIRENTfLAGS
- JMP DIRREADeXIT
-
- DIRREADeRReXIT = *
- STA ERRNO
- JSR KERNELcLRCHN
- LDX #0
- SEC
- RTS
-
- DIRREADeXIT = *
- JSR KERNELcHRIN
- CMP #0
- BEQ DIRREADrEALeXIT
- CMP #"<"
- BNE +
- LDA ACEdIRENTfLAGS
- AND #%11011111
- STA ACEdIRENTfLAGS
- + LDX #7
- LDA #0
- - STA ACEdIRENTdATE,X
- DEX
- BPL -
- - JSR KERNELcHRIN
- CMP #0
- BEQ DIRREADrEALeXIT
- CMP #"0"
- BCC -
- CMP #"9"+1
- BCS -
-
- DIRREADdATE = *
- JSR DIRgETnUMgOT
- STA ACEdIRENTdATE+2
- JSR DIRgETnUM
- STA ACEdIRENTdATE+3
- JSR DIRgETnUM
- STA ACEdIRENTdATE+1
- LDA CONFIGbUF+$86
- STA ACEdIRENTdATE+0
- JSR DIRgETnUM
- STA ACEdIRENTdATE+4
- JSR DIRgETnUM
- STA ACEdIRENTdATE+5
- JSR KERNELcHRIN
- JSR KERNELcHRIN
- CMP #"A"
- BNE DIRREADpm
-
- DIRREADam = *
- LDA ACEdIRENTdATE+4
- CMP #$12
- BNE +
- LDA #$00
- STA ACEdIRENTdATE+4
- JMP +
-
- DIRREADpm = *
- LDA ACEdIRENTdATE+4
- CMP #$12
- BEQ +
- CLC
- SEI
- SED
- ADC #$12
- CLD
- CLI
- STA ACEdIRENTdATE+4
-
- / JSR KERNELcHRIN
- CMP #0
- BNE -
-
- DIRREADrEALeXIT = *
- JSR KERNELcLRCHN
- LDX #$FF
- CLC
- RTS
-
- DIRgETnUM = *
- - JSR KERNELcHRIN
- DIRgETnUMgOT = *
- CMP #0
- BEQ +
- CMP #"0"
- BCC -
- CMP #"9"+1
- BCS -
- ASL
- ASL
- ASL
- ASL
- STA SYSWORK+6
- JSR KERNELcHRIN
- CMP #0
- BEQ +
- AND #$0F
- ORA SYSWORK+6
- + RTS
-
- ;*** FCBSWAP( .x=fCB1, .y=fCB2 )
-
- ACEfCBsWAP = *
- LDA LFTABLE,X
- PHA
- LDA LFTABLE,Y
- STA LFTABLE,X
- PLA
- STA LFTABLE,Y
- LDA DEVTABLE,X
- PHA
- LDA DEVTABLE,Y
- STA DEVTABLE,X
- PLA
- STA DEVTABLE,Y
- LDA SATABLE,X
- PHA
- LDA SATABLE,Y
- STA SATABLE,X
- PLA
- STA SATABLE,Y
- LDA EOFTABLE,X
- PHA
- LDA EOFTABLE,Y
- STA EOFTABLE,X
- PLA
- STA EOFTABLE,Y
- LDA PIDTABLE,X
- PHA
- LDA PIDTABLE,Y
- STA PIDTABLE,X
- PLA
- STA PIDTABLE,Y
- CLC
- RTS
-
- ;*** BLOAD( (ZP)=nAME, .ay=aDDRESS ) : .ay=eND+1
-
- BLOADaDDRESS = SYSWORK
- BLOADfILENAME = SYSWORK+2
- BLOADdEVICE = SYSWORK+4
-
- ACEbLOAD = *
- STA BLOADaDDRESS+0
- STY BLOADaDDRESS+1
- JSR GETdEVICE
- STA BLOADdEVICE
- TAX
- CLC
- TYA
- ADC ZP+0
- STA BLOADfILENAME+0
- LDA ZP+1
- ADC #0
- STA BLOADfILENAME+1
- LDA CONFIGbUF+1,X
- TAX
- LDA #0
- LDY #0
- JSR KERNELsETLFS
- LDY #0
- - LDA (BLOADfILENAME),Y
- BEQ +
- INY
- BNE -
- + TYA
- LDX BLOADfILENAME+0
- LDY BLOADfILENAME+1
- JSR KERNELsETNAM
- LDA #0
- LDX BLOADaDDRESS+0
- LDY BLOADaDDRESS+1
- JSR KERNELlOAD
- STX BLOADaDDRESS+0
- STY BLOADaDDRESS+1
- BCC BLOADoK
- PHA
- CMP #ACEeRRdEVICEnOTpRESENT
- BEQ +
- LDX BLOADdEVICE
- LDA CONFIGbUF+0,X
- CMP #1
- BNE +
- TXA
- JSR OPENdISKsTATUS
- + PLA
- - STA ERRNO
- LDA #0
- LDA #0
- LDY #0
- SEC
- RTS
-
- BLOADoK = *
- LDX BLOADdEVICE
- LDA CONFIGbUF+0,X
- CMP #1
- BNE +
- TXA
- JSR OPENdISKsTATUS
- BCS -
- + LDA BLOADaDDRESS+0
- LDY BLOADaDDRESS+1
- RTS
-
- ;*** REMOVE( (ZP)=nAME )
-
- REMOVEdEVICE = SYSWORK
-
- ACErEMOVE = *
- JSR GETdISKdEVICE
- STA REMOVEdEVICE
- LDA #"S"
- STA STRINGbUFFER
- LDA #":"
- STA STRINGbUFFER+1
- LDX #1
- LDA (ZP),Y
- CMP #"/"
- BEQ +
- LDX #2
- / LDA (ZP),Y
- STA STRINGbUFFER,X
- BEQ +
- INY
- INX
- BNE -
- + LDA #0
- STA STRINGbUFFER,X
- LDA REMOVEdEVICE
- JSR CMDCHoPEN
- BCS ++
- JSR CMDCHsEND
- BCS +
- JSR CHECKdISKsTATUS
- + PHP
- JSR CMDCHcLOSE
- PLP
- + RTS
-
- ;*** CDHOME( )
-
- ACEcDhOME = *
- LDA #<CONFIGbUF+$90
- LDY #>CONFIGbUF+$90
- STA ZP+0
- STY ZP+1
- ;XX FALL THROUGH
-
- ;*** CHDIR( (ZP)=dIRnAME )
-
- CHDIRdEVICE = SYSWORK+0
- CHDIRsCAN = SYSWORK+1
- CHDIRnAMEsCAN = SYSWORK+2
- CHDIRcMDoPEN = SYSWORK+3
-
- ACEcHdIR = *
- LDA #0
- STA CHDIRcMDoPEN
- JSR GETdISKdEVICE
- BEQ +
- LDA #ACEeRRdISKoNLYoPERATION
- STA ERRNO
- SEC
- RTS
-
- + STY CHDIRnAMEsCAN
- STA CHDIRdEVICE
- + LDA #"C"
- STA STRINGbUFFER+0
- LDA #"P"
- STA STRINGbUFFER+1
- LDX #2
- - LDA (ZP),Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCS +
- STA STRINGbUFFER,X
- INX
- INY
- BNE -
- + CPX #2
- BEQ CHDIRcD
- LDA #0
- STA STRINGbUFFER,X
- STY CHDIRsCAN
- LDA CHDIRdEVICE
- JSR CMDCHoPEN
- BCC +
- RTS
- + LDA #$FF
- STA CHDIRcMDoPEN
- JSR CMDCHsEND
- BCS CHDIRaBORT
- JSR CHECKdISKsTATUS
- BCS CHDIRaBORT
- LDY CHDIRsCAN
-
- CHDIRcD = *
- LDA #"D"
- STA STRINGbUFFER+1
- LDX #2
- - LDA (ZP),Y
- STA STRINGbUFFER,X
- BEQ +
- CMP #":"
- BEQ +
- INY
- INX
- BNE -
- + CPX #2
- BEQ CHDIRsETnAME
- LDA #0
- STA STRINGbUFFER,X
- LDA CHDIRcMDoPEN
- BMI +
- LDA CHDIRdEVICE
- JSR CMDCHoPEN
- BCC +
- RTS
- + JSR CMDCHsEND
- BCS CHDIRaBORT
- JSR CHECKdISKsTATUS
- BCS CHDIRaBORT
- JSR CMDCHcLOSE
-
- CHDIRsETnAME = *
- LDA CHDIRdEVICE
- STA ACEcURRENTdEVICE
- LSR
- LSR
- ORA #$40
- STA CDbUFFER
- LDA #":"
- STA CDbUFFER+1
- LDX #2
- LDY CHDIRnAMEsCAN
- - LDA (ZP),Y
- STA CDbUFFER,X
- BEQ +
- INX
- INY
- BNE -
- + RTS
-
- CHDIRaBORT = *
- JSR CMDCHcLOSE
- SEC
- RTS
-
- ;*** DEVINFO( .x=fCB ) : .a=dEVtYPE(0=CON,1=CHAR,2=DISK), .x=cOLS, .y=rOWS
-
- ACEdEViNFO = *
- LDA DEVTABLE,X
- TAX
- LDA CONFIGbUF+0,X
- CMP #2
- BNE +
- JSR WINSIZE
- TAY
- LDX SYSWORK+0
- LDA #0
- RTS
-
- + LDX #80
- LDY #66
- CMP #1
- BEQ +
- CMP #4
- BEQ +
- LDA #1
- RTS
- + LDA #2
- RTS
-
- ;*** UTOA( $0+x=VALUE32, ($80)=BUF, .a=MINlEN ) : BUF, .a=.y=LEN
-
- UTOAbUF = SYSWORK ;(2)
- UTOAbIN = SYSWORK+2 ;(4)
- UTOAbCD = SYSWORK+6 ;(5)
- UTOAfLAG = SYSWORK+11 ;(1)
- UTOAlEN = SYSWORK+12 ;(1)
- UTOApOS = SYSWORK+13 ;(1)
-
- ACEuTOA = *
- CMP #10
- BCC +
- LDA #10
- + STA UTOAlEN
- SEC
- LDA #10
- SBC UTOAlEN
- STA UTOAlEN
- LDY #0
- - LDA 0,X
- STA UTOAbIN,Y
- INX
- INY
- CPY #4
- BCC -
- LDX #4
- LDA #0
- - STA UTOAbCD,X
- DEX
- BPL -
- STA UTOAfLAG
- LDY #32
- SEI
- SED
-
- UTOAnEXTbIT = *
- ASL UTOAbIN+0
- ROL UTOAbIN+1
- ROL UTOAbIN+2
- ROL UTOAbIN+3
- LDX #4
- - LDA UTOAbCD,X
- ADC UTOAbCD,X
- STA UTOAbCD,X
- DEX
- BPL -
- DEY
- BNE UTOAnEXTbIT
- CLD
- CLI
-
- LDA #10
- STA UTOApOS
- LDX #0
- LDY #0
- - LDA UTOAbCD,X
- JSR UTOApUThEX
- INX
- CPX #5
- BCC -
- LDA #0
- STA (UTOAbUF),Y
- RTS
-
- UTOApUThEX = *
- PHA
- LSR
- LSR
- LSR
- LSR
- JSR UTOApUTdIGIT
- PLA
- AND #$0F
-
- UTOApUTdIGIT = *
- DEC UTOApOS
- BEQ UTOAfORCEdIGIT
- CMP UTOAfLAG
- BNE UTOAfORCEdIGIT
- DEC UTOAlEN
- BMI +
- RTS
- + LDA #$20
- BNE UTOApOKE
- UTOAfORCEdIGIT = *
- ORA #$30
- STA UTOAfLAG
-
- UTOApOKE = *
- STA (UTOAbUF),Y
- INY
- RTS
-
- ;*** DATE( (.ay)=DATEsTRING ) FMT:yy:yy:mm:dd:hh:mm:ss:tw
-
- ACEgETdATE = *
- STA SYSWORK
- STY SYSWORK+1
- LDY #3
- - LDA ACEdATE,Y
- STA (SYSWORK),Y
- DEY
- BPL -
- LDY #4
- LDA CIA1+$B
- BPL +
- AND #$1F
- SEI
- SED
- CLC
- ADC #$12
- CLD
- CLI
- + CMP #$12
- BNE +
- LDA #$00
- + CMP #$24
- BNE +
- LDA #$12
- + STA (SYSWORK),Y
- INY
- LDA CIA1+$A
- STA (SYSWORK),Y
- INY
- LDA CIA1+$9
- STA (SYSWORK),Y
- INY
- LDA CIA1+$8
- ASL
- ASL
- ASL
- ASL
- ORA ACEdow
- STA (SYSWORK),Y
- RTS
-
- ACEsETdATE = *
- STA SYSWORK
- STY SYSWORK+1
- LDY #3
- - LDA (SYSWORK),Y
- STA ACEdATE,Y
- DEY
- BPL -
- LDY #4
- LDA (SYSWORK),Y
- CMP #$13
- BCC +
- SEI
- SED
- SEC
- SBC #$12
- CLD
- CLI
- ORA #$80
- + STA CIA1+$B
- INY
- LDA (SYSWORK),Y
- STA CIA1+$A
- INY
- LDA (SYSWORK),Y
- STA CIA1+$9
- INY
- LDA (SYSWORK),Y
- LSR
- LSR
- LSR
- LSR
- STA CIA1+$8
- LDA (SYSWORK),Y
- AND #$07
- STA ACEdow
- RTS
-
- ;*** RENAME( (ZP)=oLDnAME, (ZW)=nEWnAME )
- ;*** DON'T EVEN THINK ABOUT RENAMING FILES OUTSIDE THE CURRENT DIRECTORY
-
- RENAMEdEVICE = SYSWORK+0
- RENAMEsCAN = SYSWORK+1
-
- ACErENAME = *
- JSR GETdISKdEVICE
- STA RENAMEdEVICE
- STY RENAMEsCAN
- LDA #"R"
- STA STRINGbUFFER+0
- LDA #":"
- STA STRINGbUFFER+1
- ;** COPY NEW NAME
- LDY #0
- LDX #2
- - LDA (ZW),Y
- STA STRINGbUFFER,X
- BEQ +
- INY
- INX
- BNE -
- + LDA #"="
- STA STRINGbUFFER,X
- INX
- ;** COPY OLD NAME
- LDY RENAMEsCAN
- - LDA (ZP),Y
- STA STRINGbUFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA RENAMEdEVICE
- JSR CMDCHoPEN
- BCS ++
- JSR CMDCHsEND
- BCS +
- JSR CHECKdISKsTATUS
- + PHP
- JSR CMDCHcLOSE
- PLP
- + RTS
-
- ;BLANK LINE
-
- ACECON.S
- 991
- ;ace-128/64 KERNEL CONSOLE DRIVER: HIGH LEVEL i/o & KEYBOARD
-
- CONwINsTART .BUF 2
- CONwINrOWS .BUF 1
- CONwINcOLS .BUF 1
- CONrOWiNC .BUF 2
- CONlINEaDDR .BUF 2
- CONcURrOW .BUF 1
- CONcURcOL .BUF 1
-
- CONpUTmASK .BYTE $80 ;.BUF 1
- CONcHARcOLOR .BYTE $0E ;.BUF 1
- CONcURSORcOLOR .BYTE $07 ;.BUF 1
- CHRtAB = $09
-
- KEYLINEpTR .BUF 1
- KEYLINEcOUNT .BUF 1
-
- .IF COMPUTER-64
- SHIFTvALUE = $D3
- .ELSE
- SHIFTvALUE = $28D
- .IFE
-
- CONiNIT = *
- LDA CONFIGbUF+$8E
- STA CONsSmAX
- STA CONsScOUNTDOWN
- LDA #0
- STA KEYLINEcOUNT
- JSR KEYSCANiNIT
-
- CONwINiNIT = *
- JSR WINSIZE
- STA CONwINrOWS
- LDA SYSWORK+0
- STA CONwINcOLS
- LDA SYSWORK+2
- LDY SYSWORK+3
- STA CONwINsTART+0
- STY CONwINsTART+1
- LDA SYSWORK+4
- LDY SYSWORK+5
- STA CONrOWiNC+0
- STY CONrOWiNC+1
-
- CONcLS = *
- LDA #" "
- LDY CONcHARcOLOR
- LDX #$FF
- JSR WINCLS
- JSR CONhOME
- RTS
-
- CONsHUTDOWN = *
- RTS
-
- CONhOME = *
- LDA CONwINsTART+0
- LDY CONwINsTART+1
- STA CONlINEaDDR+0
- STY CONlINEaDDR+1
- LDA #0
- STA CONcURrOW
- STA CONcURcOL
- RTS
-
- CONpUTsAVE .BUF 1
-
- CONpUTCHAR = * ;( .a=CHAR )
- CMP #CHRcr
- BEQ CONnEWLINE
- CMP #147
- BEQ CONcLS
- CMP #CHRtAB
- BNE +
- JMP CONtAB
- + STA CONpUTsAVE
- LDA CONcURcOL
- CMP CONwINcOLS
- BCC +
- JSR CONnEWLINE
- + CLC
- LDA CONlINEaDDR+0
- ADC CONcURcOL
- STA SYSWORK+0
- LDA CONlINEaDDR+1
- ADC #0
- STA SYSWORK+1
- LDA #<CONpUTsAVE
- LDY #>CONpUTsAVE
- STA ZW+0
- STY ZW+1
- LDX #1
- STX SYSWORK+5
- LDA CONpUTmASK
- LDY CONcHARcOLOR
- JSR WINPUT
- INC CONcURcOL
- RTS
-
- CONgETcURSORaDDR = *
- CLC
- LDA CONlINEaDDR+0
- ADC CONcURcOL
- STA SYSWORK+0
- LDA CONlINEaDDR+1
- ADC #0
- STA SYSWORK+1
- RTS
-
- CONsYNCHcURSOR = *
- LDA CONcURcOL
- CMP CONwINcOLS
- BCC +
- JSR CONnEWLINE
- + RTS
-
- CONnEWLINE = *
- - LDA SHIFTvALUE
- AND #$0F
- CMP #$04
- BEQ -
- LDA SCROLLfREEZE
- BNE -
- LDA #0
- STA CONcURcOL
- INC CONcURrOW
- LDA CONcURrOW
- CMP CONwINrOWS
- BCS +
- CLC
- LDA CONlINEaDDR+0
- ADC CONrOWiNC+0
- STA CONlINEaDDR+0
- LDA CONlINEaDDR+1
- ADC CONrOWiNC+1
- STA CONlINEaDDR+1
- CLC
- RTS
- + DEC CONcURrOW
- JSR CONsCROLL
- CLC
- RTS
-
- CONsCROLL = *
- LDA #"+"
- STA SYSWORK+4
- LDA CONpUTmASK
- LDX #1
- LDY CONcHARcOLOR
- JSR WINSCROLL
- RTS
-
- CONtAB = *
- LDA CONcURcOL
- AND #7
- STA SYSWORK+0
- SEC
- LDA #8
- SBC SYSWORK+0
- CLC
- ADC CONcURcOL
- CMP CONwINcOLS
- BCC +
- LDA CONwINcOLS
- + STA CONcURcOL
- RTS
-
- ;*** CONwRITE( WRITEpTR, WRITElENGTH ) **ZW GETS MODIFIED**
-
- CONwRITEpTR = SYSWORK+8
- CONwRITElENGTH = SYSWORK+10
-
- CONwRITE = *
- LDA WRITElENGTH+0
- LDY WRITElENGTH+1
- STA CONwRITElENGTH+0
- STY CONwRITElENGTH+1
- LDA WRITEpTR+0
- LDY WRITEpTR+1
- STA CONwRITEpTR+0
- STY CONwRITEpTR+1
-
- CONwRITEbYTE = *
- LDA CONwRITElENGTH+0
- ORA CONwRITElENGTH+1
- BEQ CONwRITEfINISH
- LDY #0
- LDA (CONwRITEpTR),Y
- JSR CONpUTCHAR
- INC CONwRITEpTR+0
- BNE +
- INC CONwRITEpTR+1
- + LDA CONwRITElENGTH+0
- BNE +
- DEC CONwRITElENGTH+1
- + DEC CONwRITElENGTH+0
- JMP CONwRITEbYTE
-
- CONwRITEfINISH = *
- CLC
- RTS
-
- ;*** CONrEAD( READpTR, READmAXlEN, READlENGTH ) : .ay=LEN, .z
-
- CONrEAD = *
- LDA READlENGTH+0
- CMP READmAXlEN+0
- LDA READlENGTH+1
- SBC READmAXlEN+1
- BCS CONrEADeXIT
- JSR KEYLINEgET
- BCS CONrEADeOFeXIT
- LDY #0
- STA (READpTR),Y
- INC READpTR+0
- BNE +
- INC READpTR+1
- + INC READlENGTH+0
- BNE +
- INC READlENGTH+1
- + CMP #$0D
- BEQ CONrEADeXIT
- JMP CONrEAD
-
- CONrEADeXIT = *
- LDA READlENGTH+0
- LDY READlENGTH+1
- LDX #$FF
- CLC
- RTS
-
- CONrEADeOFeXIT = *
- LDA #0
- LDY #0
- CLC
- RTS
-
- KEYLINEgET = * ;( KEYLINEpTR, KEYLINEcOUNT ) : .a=CHAR, .cs=EOF
- LDA KEYLINEcOUNT
- BNE +
- JSR CONiNPUT
- BCS ++
- + LDX KEYLINEpTR
- INC KEYLINEpTR
- DEC KEYLINEcOUNT
- LDA KEYLINE,X
- CLC
- + RTS
-
- CONpARMsAVE .BUF 8
-
- CONiNPUT = *
- LDX #7
- - LDA SYSWORK,X
- STA CONpARMsAVE,X
- DEX
- BPL -
- LDX #0
- STX KEYLINEpTR
- STX KEYLINEcOUNT
-
- CONiNnEXT = *
- JSR CONsYNCHcURSOR
- JSR CONcURSORoN
- JSR CONgETKEY
- JSR CONcURSORoFF
- CMP #$0D
- BEQ CONiNrETURN
- CMP #$14
- BEQ CONiNbACKSPACE
- CMP #$03
- BEQ CONiNnEXT
- CMP #147
- BEQ CONiNcLEAR
- CMP #$04
- BNE +
- JSR CONrESTOREpARMS
- SEC
- RTS
- + LDX KEYLINEpTR
- CPX #254
- BCS CONiNnEXT
- STA KEYLINE,X
- INC KEYLINEpTR
- JSR CONpUTCHAR
- JMP CONiNnEXT
-
- CONiNrETURN = *
- LDX KEYLINEpTR
- STA KEYLINE,X
- INX
- STX KEYLINEcOUNT
- LDX #0
- STX KEYLINEpTR
- JSR CONpUTCHAR
- JSR CONrESTOREpARMS
- CLC
- RTS
-
- CONiNbACKSPACE = *
- LDX KEYLINEpTR
- BEQ +
- DEC KEYLINEpTR
- JSR CONbACKSPACE
- LDA #" "
- JSR CONpUTCHAR
- JSR CONbACKSPACE
- + JMP CONiNnEXT
-
- CONiNcLEAR = *
- JSR CONpUTCHAR
- LDA #0
- STA KEYLINEpTR
- JMP CONiNnEXT
-
- CONrESTOREpARMS = *
- LDX #7
- - LDA CONpARMsAVE,X
- STA SYSWORK,X
- DEX
- BPL -
- RTS
-
- CONbACKSPACE = *
- DEC CONcURcOL
- BPL +
- LDX CONwINcOLS
- DEX
- STX CONcURcOL
- LDA CONcURrOW
- BEQ +
- DEC CONcURrOW
- SEC
- LDA CONlINEaDDR+0
- SBC CONrOWiNC+0
- STA CONlINEaDDR+0
- LDA CONlINEaDDR+1
- SBC CONrOWiNC+1
- STA CONlINEaDDR+1
- + RTS
-
- CONcURSORoN = * ;( )
- JSR CONgETcURSORaDDR
- LDY CONcURSORcOLOR
- LDA #$FF
- JSR WINCURSOR
- RTS
-
- CONcURSORoFF = * ;( ) ;.a PRESERVED
- PHA
- JSR CONgETcURSORaDDR
- LDA #0
- JSR WINCURSOR
- PLA
- RTS
-
- CONcOLOR = *
- CMP #128
- BCC +
- STX CONcHARcOLOR
- + AND #64
- BEQ +
- STY CONcURSORcOLOR
- + LDX CONcHARcOLOR
- LDY CONcURSORcOLOR
- RTS
-
- CONpALETTE = *
- LDY #0
- BIT TEXTmODE
- BMI +
- LDY #8
- + LDX #0
- - NOP
- .IF COMPUTER-64
- LDA CONFIGbUF+$B0,Y
- .ELSE
- LDA CONFIGbUF+$D0,Y
- .IFE
- STA SYSWORK+0,X
- INY
- INX
- CPX #8
- BCC -
- RTS
-
- CONsCREEN = *
- LDX #$00
- CMP #40+1
- BCC +
- LDX #$80
- + STX TEXTmODE
- .IF COMPUTER-64
- ;** 128-SET FAST/SLOW
- CPX #0
- BEQ +
- LDA VIC+$11
- AND #%11101111
- STA VIC+$11
- LDA #1
- STA VIC+$30
- JMP ++
- + LDA #0
- STA VIC+$30
- LDA VIC+$11
- ORA #%00010000
- STA VIC+$11
- + NOP
- .ELSE
- ;** 64-INITIALIZE SCREEN HARDWARE
- CPX #$00
- BNE +
- JSR VICiNIT
- JMP ++
- + JSR VDCiNIT
- + NOP
- .IFE
- ;** CHANGE COLORS
- JSR CONPALETTE
- LDX SYSWORK+0
- LDY SYSWORK+1
- LDA #$FF
- JSR CONCOLOR
- JSR CONPALETTE
- LDX SYSWORK+7
- LDY SYSWORK+6
- LDA #$FF
- JSR WINCOLOR
- ;** WINDOW PARMS
- JSR WINMAX
- JSR CONwINiNIT
- RTS
-
- ;3-kEY rOLLOVER-128 BY cRAIG bRUCE 18-jUN-93 FROM c= hACKING MAGAZINE
-
- .IF COMPUTER-64
- SCANROWS = 11
- PK = $D02F
- NEWPOS = $CC
- KEYCODE = $D4
- PREVkEYCODE = $D5
- XSAVE = $CD
- MASK = $CC
- CAPSpORT = $0001
- KEYMAPpTR = $CC
- .ELSE
- SCANROWS = 8
- PK .BUF 1 ;DUMMY
- NEWPOS = $F5
- KEYCODE = $CB
- PREVkEYCODE = $C5
- XSAVE = $F6
- MASK = $F5
- CAPSpORT .BYTE $40
- KEYMAPpTR = $F5
- .IFE
- STOPkEYrOW .BUF 1
- ROLLOVER = 3
- NULLkEY = $FF
-
- PA = $DC00
- PB = $DC01
-
- CONiRQkEYSCAN = *
- LDA #0
- STA PA
- STA PK
- - LDA PB
- CMP PB
- BNE -
- CMP #$FF
- BEQ NOkEYpRESSED
-
- JSR CONsCREENuNSAVE
- JSR CHECKjOYSTICK
- BCC NOkEYpRESSED
- JSR KEYSCAN
- JSR CHECKjOYSTICK
- BCC NOkEYpRESSED
- LDA SCANtABLE+7
- STA STOPkEYrOW
- JSR SELECTmOUSE
- JSR SHIFTDECODE
- JSR KEYDECODE
- JSR KEYORDER
- BIT IGNOREkEYS
- BMI +
- LDA PREVkEYS+0
- CMP #NULLkEY
- BEQ +
- STA KEYCODE
- JMP INTERPkEY
-
- NOkEYpRESSED = *
- JSR SELECTmOUSE
- LDA #NULLkEY
- LDX #ROLLOVER-1
- - STA PREVkEYS,X
- DEX
- BPL -
- JSR SCANcAPS
- LDA #0
- STA IGNOREkEYS
- STA STOPkEYrOW
-
- + LDA #NULLkEY
- STA KEYCODE
- STA PREVkEYCODE
- RTS
-
- SELECTmOUSE = *
- LDA #$FF
- STA PK
- LDA #$7F ;SELECTS PADDLE/MOUSE a
- STA PA
- RTS
-
- KEYSCANiNIT = *
- LDA #NULLkEY
- LDX #ROLLOVER-1
- - STA PREVkEYS,X
- DEX
- BPL -
- LDA #0
- STA IGNOREkEYS
- RTS
-
- KEYSCAN = *
- .IF COMPUTER-64
- LDX #$FF
- LDY #$FF
- LDA #$FE
- STA MASK+0
- LDA #$FF
- STA MASK+1
- JMP +
- NEXTrOW = *
- - LDA PB
- CMP PB
- BNE -
- STY PA
- STY PK
- EOR #$FF
- STA SCANtABLE,X
- SEC
- ROL MASK+0
- ROL MASK+1
- + LDA MASK+0
- STA PA
- LDA MASK+1
- STA PK
- INX
- CPX #SCANROWS
- BCC NEXTrOW
- RTS
- .ELSE
- LDX #$FF
- LDY #$FF
- LDA #$FE
- STA MASK
- JMP +
- NEXTrOW = *
- - LDA PB
- CMP PB
- BNE -
- STY PA
- EOR #$FF
- STA SCANtABLE,X
- SEC
- ROL MASK
- + LDA MASK
- STA PA
- INX
- CPX #SCANROWS
- BCC NEXTrOW
- RTS
- .IFE
-
- SHIFTrOWS .BYTE $01,$06,$07,$07,$0A
- SHIFTbITS .BYTE $80,$10,$20,$04,$01
- SHIFTmASK .BYTE $01,$01,$02,$04,$08
-
- SHIFTDECODE = *
- JSR SCANcAPS
- .IF COMPUTER-64
- LDY #4
- .ELSE
- LDY #3
- .IFE
- - LDX SHIFTrOWS,Y
- LDA SCANtABLE,X
- AND SHIFTbITS,Y
- BEQ +
- LDA SHIFTmASK,Y
- ORA SHIFTvALUE
- STA SHIFTvALUE
- LDA SHIFTbITS,Y
- EOR #$FF
- AND SCANtABLE,X
- STA SCANtABLE,X
- + DEY
- BPL -
- RTS
-
- SCANcAPS = *
- - LDA CAPSpORT
- CMP CAPSpORT
- BNE -
- EOR #$FF
- AND #$40
- LSR
- LSR
- STA SHIFTvALUE
- RTS
-
- KEYDECODE = *
- LDX #ROLLOVER-1
- LDA #$FF
- - STA NEWkEYS,X
- DEX
- BPL -
- LDY #0
- STY NEWPOS
- LDX #0
- STX KEYCODE
-
- DECODEnEXTrOW = *
- LDA SCANtABLE,X
- BEQ DECODEcONTINUE
-
- LDY KEYCODE
- - LSR
- BCC ++
- PHA
- STX XSAVE
- LDX NEWPOS
- CPX #ROLLOVER
- BCS +
- TYA
- STA NEWkEYS,X
- INC NEWPOS
- + LDX XSAVE
- PLA
- + INY
- CMP #$00
- BNE -
-
- DECODEcONTINUE = *
- CLC
- LDA KEYCODE
- ADC #8
- STA KEYCODE
- INX
- CPX #SCANROWS
- BCC DECODEnEXTrOW
- RTS
-
- KEYORDER = *
- ;** REMOVE OLD KEYS NO LONGER HELD
- LDY #0
- NEXTrEMOVE = *
- LDA PREVkEYS,Y
- CMP #$FF
- BEQ ++
- LDX #ROLLOVER-1
- - CMP NEWkEYS,X
- BEQ +
- DEX
- BPL -
- TYA
- TAX
- - LDA PREVkEYS+1,X
- STA PREVkEYS+0,X
- INX
- CPX #ROLLOVER-1
- BCC -
- LDA #$FF
- STA PREVkEYS+ROLLOVER-1
- STA IGNOREkEYS
- + INY
- CPY #ROLLOVER
- BCC NEXTrEMOVE
-
- ;** INSERT NEW KEY AT FRONT
- + LDY #0
- NEXTiNSERT = *
- LDA NEWkEYS,Y
- CMP #$FF
- BEQ ++
- LDX #ROLLOVER-1
- - CMP PREVkEYS,X
- BEQ +
- DEX
- BPL -
- PHA
- LDX #ROLLOVER-2
- - LDA PREVkEYS+0,X
- STA PREVkEYS+1,X
- DEX
- BPL -
- LDA #0
- STA IGNOREkEYS
- PLA
- STA PREVkEYS+0
- LDY #ROLLOVER
- + INY
- CPY #ROLLOVER
- BCC NEXTiNSERT
- + RTS
-
- CHECKjOYSTICK = *
- LDA #$FF
- STA PA
- STA PK
- - LDA PB
- CMP PB
- BNE -
- CMP #$FF
- RTS
-
- SCANtABLE .BUF SCANROWS
- NEWkEYS .BUF ROLLOVER
- IGNOREkEYS .BUF 1
- PREVkEYS .BUF ROLLOVER+2
-
- SCROLLfREEZE .BYTE $00
- DELAYcOUNTDOWN .BYTE $00
- REPEATcOUNTDOWN .BYTE $00
-
- INTERPkEY = * ;( KEYCODE )
- LDA KEYCODE
- ;** NOSCROLL
- .IF COMPUTER-64
- CMP #87 ;NOSCROLL
- BNE INTERPcAPS
- .ELSE
- CMP #63 ;RUN/STOP
- BNE INTERPcAPS
- LDA SHIFTvALUE
- AND #%1111
- CMP #4 ;CONTROL
- BNE INTERPcAPS
- LDA KEYCODE
- .IFE
- CMP PREVkEYCODE
- BEQ +
- STA PREVkEYCODE
- LDA SCROLLfREEZE
- EOR #$FF
- STA SCROLLfREEZE
- + RTS
-
- INTERPcAPS = *
- .IF COMPUTER-64
- .ELSE
- LDA KEYCODE
- CMP #63 ;RUN/STOP
- BNE INTERPsHIFTS
- LDA SHIFTvALUE
- AND #%1111
- CMP #2 ;COMMODORE
- BNE INTERPsHIFTS
- LDA KEYCODE
- CMP PREVkEYCODE
- BEQ +
- STA PREVkEYCODE
- LDA CAPSpORT
- EOR #$40
- STA CAPSpORT
- + RTS
- .IFE
-
- INTERPsHIFTS = *
- LDA SHIFTvALUE
- AND #%00011111
- CMP #%00010000
- BNE +
- LDA #5
- JMP HANDLEkEY ;CAPS
- + AND #%1111
- TAX
- LDA SHIFTpRIvEC,X
- JMP HANDLEkEY
-
- SHIFTpRIvEC = *
- .IF COMPUTER-64
- ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- .BYTE $00,$01,$02,$02,$03,$03,$03,$03,$04,$04,$04,$04,$04,$04,$04,$04
- .ELSE
- .BYTE $00,$01,$02,$02,$03,$03,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04
- .IFE
-
- HANDLEkEY = * ;( KEYCODE, .a=SHIFTtABLEnUM )
- ASL
- TAX
- LDA KEYCODE
- CMP PREVkEYCODE
- BEQ HANDLErEPEAT
- JMP HANDLEoRIGkEY
-
- HANDLErEPEAT = *
- STX XSAVE
- LDA DELAYcOUNTDOWN
- BEQ +
- DEC DELAYcOUNTDOWN
- BEQ ++
- RTS
- + DEC REPEATcOUNTDOWN
- BEQ +
- - RTS
- + LDA #3
- STA REPEATcOUNTDOWN
- LDA KEYBUFcOUNT
- BNE -
- LDX XSAVE
- JMP +
-
- HANDLEoRIGkEY = * ;( .x=SHIFTtABoFF )
- LDA #20
- STA DELAYcOUNTDOWN
- LDA #0
- STA SCROLLfREEZE
- + LDA CONkEYMAPiNDIRECT+0,X
- STA KEYMAPpTR+0
- LDA CONkEYMAPiNDIRECT+1,X
- STA KEYMAPpTR+1
- LDY KEYCODE
- STY PREVkEYCODE
- LDA (KEYMAPpTR),Y
- BNE STOREkEY
- RTS
-
- KEYBUFhEAD .BYTE 0
- KEYBUFtAIL .BYTE 0
- KEYBUFcOUNT .BYTE 0
- KEYBUFsIZE = 16 ;POWER OF 2
- KEYBUFdATA .BUF KEYBUFsIZE
-
- STOREkEY = * ;( .a=CHAR )
- LDX KEYBUFcOUNT
- CPX #KEYBUFsIZE
- BCC +
- ;XX RING BELL
- RTS
- + LDX KEYBUFtAIL
- STA KEYBUFdATA,X
- INC KEYBUFtAIL
- LDA KEYBUFtAIL
- AND #KEYBUFsIZE-1
- STA KEYBUFtAIL
- INC KEYBUFcOUNT
- RTS
-
- ;*** GETKEY( ) : .a=KEYcHAR
-
- CONgETKEY = *
- - LDA KEYBUFcOUNT
- BEQ -
- SEI
- LDX KEYBUFhEAD
- DEC KEYBUFcOUNT
- INC KEYBUFhEAD
- LDA KEYBUFhEAD
- AND #KEYBUFsIZE-1
- STA KEYBUFhEAD
- LDA KEYBUFdATA,X
- CLI
- RTS
-
- ;*** STOPKEY( ) : .cc=NOTpRESSED
-
- ACEsTOPkEY = *
- SEI
- LDA STOPkEYrOW
- CMP #$80
- BEQ +
- - CLC
- CLI
- RTS
- + LDA SHIFTvALUE
- AND #$0F
- BNE -
- LDA #0
- STA KEYBUFcOUNT
- STA KEYBUFhEAD
- STA KEYBUFtAIL
- STA SCROLLfREEZE
- LDA #ACEeRRsTOPPED
- STA ERRNO
- SEC
- CLI
- RTS
-
- CONkEYMAPiNDIRECT = *
- .WORD CONkEYMAPnORMAL,CONkEYMAPsHIFT,CONkEYMAPcOMMODORE,CONkEYMAPcONTROL
- .WORD CONkEYMAPaLTERNATE,CONkEYMAPcAPS
-
- CONkEYMAPnORMAL = *
- .BYTE $14,$0D,$1D,$88,$85,$86,$87,$11,$0033,$57,$41,$34,$5A,$53,$45,$01
- .BYTE $35,$52,$44,$36,$43,$46,$54,$58,$0037,$59,$47,$38,$42,$48,$55,$56
- .BYTE $39,$49,$4A,$30,$4D,$4B,$4F,$4E,$002B,$50,$4C,$2D,$2E,$3A,$40,$2C
- .BYTE $5C,$2A,$3B,$13,$01,$3D,$5E,$2F,$0031,$5F,$04,$32,$20,$02,$51,$03
- .BYTE $84,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONkEYMAPsHIFT = *
- .BYTE $94,$8D,$9D,$8C,$89,$8A,$8B,$91,$0023,$D7,$C1,$24,$DA,$D3,$C5,$01
- .BYTE $25,$D2,$C4,$26,$C3,$C6,$D4,$D8,$0027,$D9,$C7,$28,$C2,$C8,$D5,$D6
- .BYTE $29,$C9,$CA,$30,$CD,$CB,$CF,$CE,$00DB,$D0,$CC,$DD,$3E,$5B,$BA,$3C
- .BYTE $A9,$C0,$5D,$93,$01,$3D,$DE,$3F,$0021,$5F,$04,$22,$A0,$02,$D1,$83
- .BYTE $84,$38,$35,$18,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$8D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONkEYMAPcOMMODORE = *
- .BYTE $94,$8D,$9D,$8C,$89,$8A,$8B,$91,$0096,$B3,$B0,$97,$AD,$AE,$B1,$01
- .BYTE $98,$B2,$AC,$99,$BC,$BB,$A3,$BD,$009A,$B7,$A5,$9B,$BF,$B4,$B8,$BE
- .BYTE $29,$A2,$B5,$30,$A7,$A1,$B9,$AA,$00A6,$AF,$B6,$DC,$3E,$5B,$A4,$3C
- .BYTE $A8,$DF,$5D,$93,$01,$3D,$DE,$3F,$0081,$5F,$04,$95,$A0,$02,$AB,$03
- .BYTE $84,$38,$35,$18,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$8D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONkEYMAPcONTROL = *
- .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$001C,$17,$01,$9F,$1A,$13,$05,$00
- .BYTE $9C,$12,$04,$1E,$03,$06,$14,$18,$001F,$19,$07,$9E,$02,$08,$15,$16
- .BYTE $12,$09,$0A,$92,$0D,$0B,$0F,$0E,$00FF,$10,$0C,$00,$00,$1B,$00,$00
- .BYTE $1C,$00,$1D,$00,$00,$1F,$1E,$00,$0090,$06,$00,$05,$00,$00,$11,$00
- .BYTE $84,$38,$35,$18,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$8D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONkEYMAPaLTERNATE = *
- .BYTE $14,$0D,$1D,$88,$85,$86,$87,$11,$0033,$57,$41,$34,$5A,$53,$45,$01
- .BYTE $35,$E2,$44,$36,$43,$46,$54,$58,$0037,$59,$47,$38,$42,$48,$55,$56
- .BYTE $39,$49,$4A,$30,$4D,$4B,$4F,$4E,$002B,$50,$4C,$2D,$2E,$3A,$40,$2C
- .BYTE $5C,$2A,$3B,$13,$01,$3D,$5E,$2F,$0031,$5F,$04,$32,$20,$02,$51,$03
- .BYTE $84,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONkEYMAPcAPS = *
- .BYTE $14,$0D,$1D,$88,$85,$86,$87,$11,$0033,$D7,$C1,$34,$DA,$D3,$C5,$01
- .BYTE $35,$D2,$C4,$36,$C3,$C6,$D4,$D8,$0037,$D9,$C7,$38,$C2,$C8,$D5,$D6
- .BYTE $39,$C9,$CA,$30,$CD,$CB,$CF,$CE,$002B,$D0,$CC,$2D,$2E,$3A,$40,$2C
- .BYTE $5C,$2A,$3B,$13,$01,$3D,$5E,$2F,$0031,$5F,$04,$32,$20,$02,$D1,$03
- .BYTE $84,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CONsScOUNTDOWN .BYTE 1
- CONjIFSpERmIN = 3600+255
- CONsSmINUTE .WORD CONjIFSpERmIN
- CONsSmAX .BYTE 1
- CONsSaCTIVE .BYTE $00
-
- CONsCREENsAVE = *
- LDA CONsScOUNTDOWN
- BNE +
- - RTS
- + DEC CONsSmINUTE+0
- BNE -
- DEC CONsSmINUTE+1
- BNE -
- LDA #<CONjIFSpERmIN
- LDY #>CONjIFSpERmIN
- STA CONsSmINUTE+0
- STY CONsSmINUTE+1
- DEC CONsScOUNTDOWN
- BNE -
- JSR VDCsCREENsAVE
- JSR VICsCREENsAVE
- LDA #$FF
- STA CONsSaCTIVE
- RTS
-
- CONsCREENuNSAVE = *
- LDA CONsSmAX
- STA CONsScOUNTDOWN
- LDA #<CONjIFSpERmIN
- LDY #>CONjIFSpERmIN
- STA CONsSmINUTE+0
- STY CONsSmINUTE+1
- LDA CONsSaCTIVE
- BNE +
- RTS
- + JSR VDCsCREENuNSAVE
- JSR VICsCREENuNSAVE
- LDA #$00
- STA CONsSaCTIVE
- RTS
-
- ;THE END + BLANK LINE
-
- ACEHEAD.S
- 139
- ;===ACE SYSTEM INTERFACE DECLARATIONS===
-
- ZP = $FA ;(4)
- ZW = $FE ;(2)
- SYSWORK = $80 ;(16)
-
- ACEcALLbASE = $2800
- REBOOT = ACEcALLbASE+0 ;( )
- OPEN = ACEcALLbASE+3 ;( (ZP)=nAME, .a=mODE ) : .a=fCB
- CLOSE = ACEcALLbASE+6 ;( .a=fCB )
- READ = ACEcALLbASE+9 ;( .x=fCB, (ZP)=bUF, .ay=lEN ) : .ay=lEN, .z
- WRITE = ACEcALLbASE+12 ;( .x=fCB, (ZP)=bUF, .ay=lEN )
- ISDIR = ACEcALLbASE+15 ;( (ZP)=nAME ) : .a=dEV, .x=ISdISK, .y=ISdIR
- BLOAD = ACEcALLbASE+18 ;( (ZP)=nAME, .ay=aDDRESS ) : .ay=eND+1
- CMDOPEN = ACEcALLbASE+21 ;( (ZP)=dEVnAME ) : .a=fCB
- CMDCLOSE = ACEcALLbASE+24 ;( .a=fCB )
- CMDSEND = ACEcALLbASE+27 ;( .x=fCB, .ay=cMD )
- CMDSTATUS = ACEcALLbASE+30 ;( .x=fCB, .ay=sTATbUFpTR ) : sTATbUF, .a=STATUScODE
- DIROPEN = ACEcALLbASE+33 ;( (ZP)=dEVnAME ) : .a=fCB
- DIRCLOSE = ACEcALLbASE+36 ;( .a=fCB )
- DIRREAD = ACEcALLbASE+39 ;( .x=fCB ) : DIRENTbUFFER, .z=EOF
- FCBSWAP = ACEcALLbASE+42 ;( .x=fCB1, .y=fCB2 )
- REMOVE = ACEcALLbASE+45 ;( (ZP)=nAME )
- RENAME = ACEcALLbASE+48 ;( (ZP)=nAME, (ZW)=nEWnAME )
- CHDIR = ACEcALLbASE+51 ;( (ZP)=dIRnAME )
- ZPLOAD = ACEcALLbASE+54 ;( [ZP]=sOURCE, .x=zPdEST, .y=lENGTH )
- ZPSTORE = ACEcALLbASE+57 ;( .x=zPsOURCE, [ZP]=dEST, .y=lENGTH )
- FETCH = ACEcALLbASE+60 ;( [ZP]=fARsOURCE, (ZW)=rAM0dEST, .ay=lENGTH )
- STASH = ACEcALLbASE+63 ;( (ZW)=rAM0sOURCE, [ZP]=fARdEST, .ay=LENGTH )
- PAGEALLOC = ACEcALLbASE+66 ;( .a=pAGEcOUNT ) : [ZP]=fARpOINTER
- PAGEFREE = ACEcALLbASE+69 ;( [ZP]=fARpOINTER, .a=pAGEcOUNT )
- EXIT = ACEcALLbASE+72 ;( .a=EXITcODE, .x=EXITbUFdATAlEN )
- DEVINFO = ACEcALLbASE+75 ;( .x=fCB ) : .a=dEVtYPE, .x=cOLS, .y=rOWS
- STOPKEY = ACEcALLbASE+78 ;( ) : .cc=NOTpRESSED
- UTOA = ACEcALLbASE+81 ;( $0+x=VALUE32, ($80)=BUF, .a=MINlEN ) :BUF, .y=LEN
- GETDATE = ACEcALLbASE+84 ;( (.ay)=DATEsTRING ) : DATEsTRING
- SETDATE = ACEcALLbASE+87 ;( (.ay)=DATEsTRING )
- EXEC = ACEcALLbASE+90 ;( (.ay)=ADDR ) : .a=EXITcODE
- CDHOME = ACEcALLbASE+93 ;( )
- WINMAX = ACEcALLbASE+96 ;( )
- WINCLS = ACEcALLbASE+99 ;( .a=CHAR, .y=COLOR, .x=CHAR:$80/ATTR:$40 FLAGS )
- WINSET = ACEcALLbASE+102 ;( .y=SCRrOW, .x=SCRcOL, .a=ROWS, SYSWORK=COLS )
- WINSIZE = ACEcALLbASE+105 ;( ) : ^^^,(SW+2)=ADDR,(SW+4)=ROWINC,(SW+6)=SAVESIZE
- WINLOAD = ACEcALLbASE+108 ;( [ZP]=FARaDDR )
- WINSAVE = ACEcALLbASE+111 ;( [ZP]=FARaDDR, .a=ATTRfLAG )
- WINPUT = ACEcALLbASE+114 ;( (SW+0)=ADDR,(ZW)=CHARpTR,.a=ATTR,.y=COLOR,.x=LEN
- ; SW+4=FILLcHAR, SW+5=FIELDlEN )
- WINCOLOR = ACEcALLbASE+117 ;( .x=SCREEN, .y=BORDER, .a=WHICH ) : .x=SCR, .y=BOR
- WINPOS = ACEcALLbASE+120 ;( .a=ROW, .x=COL ) : (SW+0)=ADDR
- WINCURSOR = ACEcALLbASE+123 ;( (SW+0)=ADDR, .y=COLOR, .a=$FF:ON/$00:OFF)
- WINSCROLL = ACEcALLbASE+126 ;( .a=$80/$40:CHAR/ATTR+$01:UP/DOWN, .x=ROWS,
- ; SW+4=FILLcHAR, .y=FILLcOLOR )
- GETKEY = ACEcALLbASE+129 ;( ) : .a=KEY
- CONCOLOR = ACEcALLbASE+132 ;( .a=WHICH, .x=CHAR, .y=CURSOR ) : .x=CHAR,.y=CURSR
- CONPALETTE = ACEcALLbASE+135 ;( ) : SW+0...SW+7=PALETTE [8 COLORS]
- CONSCREEN = ACEcALLbASE+138 ;( .a=COLS )
- CONPOS = ACEcALLbASE+141 ;( .a=ROW, .x=COL ) ;**not implemented
-
- ACEsTATUSbASE = $F00
- ERRNO = ACEsTATUSbASE+0 ;(1)
- ACEid = ACEsTATUSbASE+2 ;(2)
- ACEaRGC = ACEsTATUSbASE+4 ;(2)
- ACEaRGV = ACEsTATUSbASE+6 ;(2)
- ACEsTACKpTR = ACEsTATUSbASE+8 ;(2)
- ACEfRAMEpTR = ACEsTATUSbASE+10 ;(2)
- ACEsTACKtOP = ACEsTATUSbASE+12 ;(2)
- ACEsHELLpATH = ACEsTATUSbASE+14 ;(2)
- ACEsHELLaLIAS = ACEsTATUSbASE+16 ;(2)
- ACEcURRENTdEVICE = ACEsTATUSbASE+18 ;(1)
- ACEcURdIRnAME = ACEsTATUSbASE+20 ;(2)
- ACEdATE = ACEsTATUSbASE+22 ;(4) yyyy:mm:dd
- ACEdow = ACEsTATUSbASE+26 ;(1) 1-7,1=sUN
- ACEpROCESSid = ACEsTATUSbASE+27 ;(1)
- ACEfREEmEMORY = ACEsTATUSbASE+28 ;(4)
- ACEtOTALmEMORY = ACEsTATUSbASE+32 ;(4)
- ACEiNTERNALbANKS = ACEsTATUSbASE+36 ;(1/2WASTED)
- ACEiNTERNALcUR = ACEsTATUSbASE+39 ;(1)
- ACErAM0fREEMAP = ACEsTATUSbASE+40 ;(2)
- ACErAM1fREEMAP = ACEsTATUSbASE+42 ;(1)
- ACErEUsTART = ACEsTATUSbASE+43 ;(1)
- ACErEUbANKS = ACEsTATUSbASE+44 ;(1)
- ACErEUcUR = ACEsTATUSbASE+45 ;(1)
- ACErAMLINKsTART = ACEsTATUSbASE+46 ;(2)
- ACErAMLINKbANKS = ACEsTATUSbASE+48 ;(1)
- ACErAMLINKcUR = ACEsTATUSbASE+49 ;(1)
- ACErAMLINKrEUsTART = ACEsTATUSbASE+50 ;(2)
- ACErAMLINKrEUbANKS = ACEsTATUSbASE+52 ;(1)
- ACErAMLINKrEUcUR = ACEsTATUSbASE+53 ;(1)
- ACEvIRTUALpARTS = ACEsTATUSbASE+54 ;(1)
- ACErESTOREsTACK = ACEsTATUSbASE+55 ;(1)
-
- ;ACEdIRENTbUFFER = ACEsTATUSbASE+92
- ACEjUNK = ACEsTATUSbASE+92
- ACEdIRENTbYTES = ACEjUNK+0 ;(4)
- ACEdIRENTdATE = ACEjUNK+4 ;(8) = yy:yy:mm:dd:hh:mm:ss:tw
- ACEdIRENTtYPE = ACEjUNK+12 ;(4)
- ACEdIRENTfLAGS = ACEjUNK+16 ;(1) = DRWX*-MT
- ACEdIRENTnAMElEN = ACEjUNK+17 ;(1)
- ACEdIRENTnAME = ACEjUNK+18 ;(17)
- ACEdIRENTlENGTH = 35
-
- ACEsHELLaDDRESS = $1300
- ACEaPPaDDRESS = $6000
- ACEid1 = "C"
- ACEid2 = "b"
- ACEid3 = 9
-
- ACEmEMnULL = $00
- ACEmEMreu = $01
- ACEmEMiNTERNAL = $02
- ACEmEMrlreu = $06
- ACEmEMrl = $07
- ACEmEMtYPES = 8
-
- ACEeRRsTOPPED = 0
- ACEeRRtOOmANYfILES = 1
- ACEeRRfILEoPEN = 2
- ACEeRRfILEnOToPEN = 3
- ACEeRRfILEnOTfOUND = 4
- ACEeRRdEVICEnOTpRESENT = 5
- ACEeRRfILEnOTiNPUT = 6
- ACEeRRfILEnOToUTPUT = 7
- ACEeRRmISSINGfILENAME = 8
- ACEeRRiLLEGALdEVICE = 9
- ACEeRRwRITEpROTECT = 26
- ACEeRRfILEeXISTS = 63
- ACEeRRfILEtYPEmISMATCH = 64
- ACEeRRnOcHANNEL = 70
- ACEeRRiNSUFFICIENTmEMORY = 128
- ACEeRRoPENdIRECTORY = 129
- ACEeRRnOfREEfCBS = 130
- ACEeRRdISKoNLYoPERATION = 131
- ACEeRRnULLpOINTER = 132
- ACEeRRiNVALIDfREEpARMS = 133
- ACEeRRfREEnOToWNED = 134
- STDIN = 0
- STDOUT = 1
- STDERR = 2
- ;===END OF ACE INTERFACE DECLARATIONS===
- ACEMEM.S
- 1053
- ;ace-128/64 KERNEL dYNAMIC mEMORY ROUTINE BY cRAIG bRUCE.
-
- ;*** MEMORY ROUTINES ***
-
- COMcODEbUFFER = $200
- TEMP1 = $8F
-
- BKsELECTrAM0 = $FF01
- .IF COMPUTER-64
- BKrAM0 = $3F
- .ELSE
- BKrAM0 = $70
- .IFE
- REU = $DF00
- RL = $DE00
- RLrEGS = $E0A9
- RLeXEC = $FE1E
-
- ;***STARTUP
-
- INITmEMORY = *
- .IF COMPUTER-64
- LDX #0
- - LDA COMcODEsTART,X
- STA COMcODEbUFFER,X
- INX
- CPX #COMcODEeND-COMcODEsTART
- BCC -
- .IFE
- RTS
-
- SHUTDOWNmEMORY = *
- .IF COMPUTER-64
- LDX #0
- LDA #0
- - STA COMcODEbUFFER,X
- INX
- CPX #COMcODEeND-COMcODEsTART
- BNE -
- .IFE
- RTS
-
- INTERNbANKcONFIGS = *
- .IF COMPUTER-64
- .BYTE $3F,$7F,$BF,$FF,$BF,$FF,$BF,$FF,$3F
- .ELSE
- .BYTE $70,$70
- .IFE
-
- INTERNbANKgROUPS = *
- .IF COMPUTER-64
- .BYTE $04,$04,$04,$04,$14,$14,$24,$24,$04
- .IFE
-
- ;***COMMON CODE
-
- COMcODEsTART = *
-
- COMzPlOAD = *
- STY TEMP1
- LDY ZP+2
- .IF COMPUTER-64
- LDA INTERNbANKgROUPS,Y
- STA $D506
- .ELSE
- PHP
- SEI
- .IFE
- LDA INTERNbANKcONFIGS,Y
- STA BKsELECT
- LDY #0
- - LDA (ZP),Y
- STA 0,X
- INX
- INY
- CPY TEMP1
- BCC -
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- COMzPsTORE = *
- STY TEMP1
- LDY ZP+2
- .IF COMPUTER-64
- LDA INTERNbANKgROUPS,Y
- STA $D506
- .ELSE
- PHP
- SEI
- .IFE
- LDA INTERNbANKcONFIGS,Y
- STA BKsELECT
- LDY #0
- - LDA 0,X
- STA (ZP),Y
- INX
- INY
- CPY TEMP1
- BCC -
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- COMcOPYtOrAM0 = *
- LDX ZP+2
- .IF COMPUTER-64
- LDA INTERNbANKgROUPS,X
- STA $D506
- LDA INTERNbANKcONFIGS,X
- TAX
- .ELSE
- PHP
- SEI
- LDA INTERNbANKcONFIGS,X
- STA BKsELECT
- .IFE
- DEY
- BEQ +
- .IF COMPUTER-64
- - STX BKsELECT
- LDA (ZP),Y
- STA BKsELECTrAM0
- .ELSE
- - LDA (ZP),Y
- .IFE
- STA (ZW),Y
- DEY
- BNE -
- .IF COMPUTER-64
- + STX BKsELECT
- LDA (ZP),Y
- STA BKsELECTrAM0
- .ELSE
- + LDA (ZP),Y
- .IFE
- STA (ZW),Y
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- COMcOPYfROMrAM0 = *
- LDX ZP+2
- .IF COMPUTER-64
- LDA INTERNbANKgROUPS,X
- STA $D506
- LDA INTERNbANKcONFIGS,X
- TAX
- .ELSE
- PHP
- SEI
- LDA INTERNbANKcONFIGS,X
- STA BKsELECT
- .IFE
- DEY
- BEQ +
- .IF COMPUTER-64
- - STA BKsELECTrAM0
- LDA (ZW),Y
- STX BKsELECT
- .ELSE
- - LDA (ZW),Y
- .IFE
- STA (ZP),Y
- DEY
- BNE -
- .IF COMPUTER-64
- + STA BKsELECTrAM0
- LDA (ZW),Y
- STX BKsELECT
- .ELSE
- + LDA (ZW),Y
- .IFE
- STA (ZP),Y
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- COMcODEeND = *
-
- ;*** ZPLOAD( [ZP]=sOURCE, .x=zPdEST, .y=lENGTH ) : .cs=ERR, [ZP]PRESERVED
-
- ACEzPlOAD = *
- LDA ZP+3
- BEQ NULLpTReRROR
- CMP #$02
- BCC +
- BNE ZPlOADrl
- .IF COMPUTER-64
- JMP COMzPlOAD-COMcODEsTART+COMcODEbUFFER
- .ELSE
- JMP COMzPlOAD
- .IFE
- + STY REU+7
- LDY #$91
-
- ZEROpAGErEUoP = *
- LDA ZP+2
- STA REU+6
- STX REU+2
- LDA #0
- STA REU+3
- STA REU+8
- LDA ZP
- STA REU+4
- LDA ZP+1
- STA REU+5
- .IF COMPUTER-64
- LDA VIC+$30
- LDX #$00
- STX VIC+$30
- .IFE
- STY REU+1
- .IF COMPUTER-64
- STA VIC+$30
- .IFE
- CLC
- RTS
-
- NULLpTReRROR = *
- LDA #ACEeRRnULLpOINTER
- STA ERRNO
- SEC
- RTS
-
- ZPlOADrl = *
- LDA #$91
- ZEROpAGErLoP = * ;( .a=OPCODE, .x=ZPADDR, .y=LEN, [ZP]=FARpTR )
- STA RAMLINKoPCODE
- LDA #0
- STY RAMLINKlENGTH
- STA RAMLINKlENGTH+1
- STX RAMLINKnEARpTR
- STA RAMLINKnEARpTR+1
- JMP RAMLINKoP
-
- RAMLINKoPCODE .BUF 1
- RAMLINKlENGTH .BUF 2
- RAMLINKnEARpTR .BUF 2
-
- RAMLINKoP = * ;( [ZP]=FARpTR, RAMLINKnEARpTR, RAMLINKlENGTH, RAMLINKoPCODE )
- JSR RLrEGS
- LDA RAMLINKoPCODE
- STA RL+1
- LDA RAMLINKnEARpTR
- LDY RAMLINKnEARpTR+1
- STA RL+2
- STY RL+3
- LDX #0
- LDA ZP+3
- CMP #ACEmEMrl
- BEQ +
- LDX #4
- + LDA ZP
- STA RL+4
- CLC
- LDA ACErAMLINKsTART,X
- ADC ZP+1
- STA RL+5
- LDA ACErAMLINKsTART+1,X
- ADC ZP+2
- STA RL+6
- LDA RAMLINKlENGTH
- LDY RAMLINKlENGTH+1
- STA RL+7
- STY RL+8
- LDA #0
- STA RL+10
- STA RL+16
- JSR RLeXEC
- CLC
- RTS
-
- ;*** ZPSTORE( .x=zPsOURCE, [ZP]=dEST, .y=lENGTH ) : .cs=ERR, [ZP]PRESERVED
-
- ACEzPsTORE = *
- LDA ZP+3
- BEQ NULLpTReRROR
- CMP #$02
- BCC +
- BNE ZPsTORErl
- .IF COMPUTER-64
- JMP COMzPsTORE-COMcODEsTART+COMcODEbUFFER
- .ELSE
- JMP COMzPsTORE
- .IFE
- + STY REU+7
- LDY #$90
- JMP ZEROpAGErEUoP
-
- ZPsTORErl = *
- LDA #$90
- JMP ZEROpAGErLoP
-
- ;*** FETCH( [ZP]=fARsOURCE, (ZW)=rAM0dEST, .ay=lENGTH )
-
- FETCHlENGTH .BUF 2
- FETCHsAVEsOURCE .BUF 1
- FETCHsAVEdEST .BUF 1
-
- ACEfETCH = *
- LDX ZP+3
- BEQ FETCHnULLpTReRROR
- CPX #ACEmEMiNTERNAL
- BCS +
- LDX #$91
- JMP DOrEU
- + BNE FETCHrl
- CPY #0
- BNE FETCHlONG
- TAY
- BNE FETCHpAGE
- CLC
- RTS
-
- FETCHnULLpTReRROR = *
- JMP NULLpTReRROR
-
- FETCHpAGE = * ;( [ZP]=FROM, (ZW)=TO, .y=LEN(0=256) )
- LDX ZP+2
- CPX #0
- BEQ +
- JMP COMcOPYtOrAM0-COMcODEsTART+COMcODEbUFFER
- .IF COMPUTER-64
- + STX BKsELECTrAM0
- .ELSE
- + PHP
- SEI
- LDX #BKrAM0
- STX BKsELECT
- .IFE
- DEY
- BEQ +
- - LDA (ZP),Y
- STA (ZW),Y
- DEY
- BNE -
- + LDA (ZP),Y
- STA (ZW),Y
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- FETCHlONG = *
- STA FETCHlENGTH
- STY FETCHlENGTH+1
- LDA ZP+1
- STA FETCHsAVEsOURCE
- LDA ZW+1
- STA FETCHsAVEdEST
- LDA FETCHlENGTH+1
- BEQ FETCHlONGeXIT
- - LDY #0
- JSR FETCHpAGE
- INC ZP+1
- INC ZW+1
- DEC FETCHlENGTH+1
- BNE -
-
- FETCHlONGeXIT = *
- LDY FETCHlENGTH
- BEQ +
- JSR FETCHpAGE
- + LDA FETCHsAVEsOURCE
- STA ZP+1
- LDA FETCHsAVEdEST
- STA ZW+1
- CLC
- RTS
-
- FETCHrl = *
- LDX #$91
- LARGErLoP = *
- STX RAMLINKoPCODE
- STA RAMLINKlENGTH
- STY RAMLINKlENGTH+1
- LDA ZW
- LDY ZW+1
- STA RAMLINKnEARpTR
- STY RAMLINKnEARpTR+1
- JMP RAMLINKoP
-
- ;*** STASH( (ZW)=rAM0sOURCE, [ZP]=fARdEST, .ay=LENGTH )
-
- STASHlENGTH .BUF 2
- STASHsAVEsOURCE .BUF 1
- STASHsAVEdEST .BUF 1
-
- ACEsTASH = *
- LDX ZP+3
- BEQ STASHnULLpTReRROR
- CPX #ACEmEMiNTERNAL
- BCS +
- LDX #$90
- JMP DOrEU
- + BNE STASHrl
- CPY #0
- BNE STASHlONG
- TAY
- BNE STASHpAGE
- CLC
- RTS
-
- STASHnULLpTReRROR = *
- JMP NULLpTReRROR
-
- STASHpAGE = *
- LDX ZP+2
- CPX #0
- BEQ +
- JMP COMcOPYfROMrAM0-COMcODEsTART+COMcODEbUFFER
- .IF COMPUTER-64
- + STX BKsELECTrAM0
- .ELSE
- + PHP
- SEI
- LDX #BKrAM0
- STX BKsELECT
- .IFE
- DEY
- BEQ +
- - LDA (ZW),Y
- STA (ZP),Y
- DEY
- BNE -
- + LDA (ZW),Y
- STA (ZP),Y
- LDA #BKace
- STA BKsELECT
- .IF COMPUTER-64
- .ELSE
- PLP
- .IFE
- CLC
- RTS
-
- STASHlONG = *
- STA STASHlENGTH
- STY STASHlENGTH+1
- LDA ZW+1
- STA STASHsAVEsOURCE
- LDA ZP+1
- STA STASHsAVEdEST
- LDA STASHlENGTH+1
- BEQ STASHlONGeXIT
- - LDY #0
- JSR STASHpAGE
- INC ZP+1
- INC ZW+1
- DEC STASHlENGTH+1
- BNE -
-
- STASHlONGeXIT = *
- LDY STASHlENGTH
- BEQ +
- LDX ZP+2
- JSR STASHpAGE
- + LDA STASHsAVEsOURCE
- STA ZW+1
- LDA STASHsAVEdEST
- STA ZP+1
- CLC
- RTS
-
- STASHrl = *
- LDX #$90
- JMP LARGErLoP
-
- ;*** RAM0 LOAD/STORE(.x) EXPANSION MEMORY [ZP] <- -> (ZW) FOR .ay BYTES
-
- DOrEU = *
- STA REU+7
- STY REU+8
- LDA ZW
- LDY ZW+1
- STA REU+2
- STY REU+3
- LDA ZP
- LDY ZP+1
- STA REU+4
- STY REU+5
- LDA ZP+2
- STA REU+6
- LDY VIC+$30
- LDA #0
- STA VIC+$30
- STX REU+1
- STY VIC+$30
- CLC
- RTS
-
- ;*** MEMORY ALLOCATION ROUTINES
-
- FREEMAPbANK .BUF 2
- FREEMAPdIRTY .BUF 1
- FREEMAPpAGE .BUF 1
- SEARCHmINfAIL .BUF 8
-
- INITmEMORYaLLOC = *
- LDX #0
- LDY #0
- STX FREEMAPpAGE
- STX FREEMAPdIRTY
- - LDA RAM0fREEmAP,X
- STA FREEMAP,X
- BNE +
- INY
- + INX
- BNE -
- LDA #0
- LDY #ACEmEMiNTERNAL
- STA FREEMAPbANK+0
- STY FREEMAPbANK+1
- LDA #$00
- LDX #0
- - STA SEARCHmINfAIL,X
- INX
- CPX #8
- BCC -
- CLC
- RTS
-
- FREEMAPbANKsAVE .BUF 2
-
- GETfREEMAP = * ;( .ay=BANK )
- CMP FREEMAPbANK+0
- BNE +
- CPY FREEMAPbANK+1
- BNE +
- RTS
-
- ;** SAVE OLD FREEMAP
- + STA FREEMAPbANKsAVE+0
- STY FREEMAPbANKsAVE+1
- LDA FREEMAPdIRTY
- BEQ +
- LDA FREEMAPbANK+0
- LDY FREEMAPbANK+1
- JSR LOCATEbANKfREEMAP
- JSR SETzWfREEMAP
- JSR STASH
-
- ;** LOAD NEW FREEMAP
- + LDA FREEMAPbANKsAVE+0
- LDY FREEMAPbANKsAVE+1
- STA FREEMAPbANK+0
- STY FREEMAPbANK+1
- JSR LOCATEbANKfREEMAP
- JSR SETzWfREEMAP
- JSR FETCH
- LDA #0
- STA FREEMAPdIRTY
- STA FREEMAPpAGE
- RTS
-
- SETzWfREEMAP = * ;() : .ay=#256
- LDA #<FREEMAP
- LDY #>FREEMAP
- STA ZW+0
- STY ZW+1
- LDA #<256
- LDY #>256
- RTS
-
- LOCATEbANKfREEMAP = * ;( .ay=BANK ) : [ZP]
- STA ZP+2
- STY ZP+3
- LDA #<$FF00
- LDX #>$FF00
- STA ZP+0
- STX ZP+1
- CPY #ACEmEMiNTERNAL
- BEQ +
- RTS
- + LDA ZP+2
- BNE +
- ;** RAM0
- LDA ACErAM0fREEMAP+0
- LDY ACErAM0fREEMAP+1
- - STA ZP+0
- STY ZP+1
- RTS
- + CMP #1
- BNE +
- ;** RAM1
- LDA #0
- LDY ACErAM1fREEMAP
- JMP -
- ;** EXP.INT.RAM
- + LDA #<$0400
- LDY #>$0400
- JMP -
-
- SEARCHtYPEsTART .BUF 1
- SEARCHtYPEsTOP .BUF 1
- SEARCHsIZE .BUF 1
- SEARCHtYPEjMP = *
- .WORD 0,PAGEaLLOCreu,PAGEaLLOCiNTERNAL,0,0,0,PAGEaLLOCrlreu,PAGEaLLOCrl
-
- ACEpAGEaLLOC = * ;( .a=PAGES, .x=STtYPE, .y=ENDtYPE ) : [ZP]=FARpTR
- STA SEARCHsIZE
- CMP #0
- BNE +
- JSR PAGEaLLOCfAIL
- CLC
- RTS
- + CPX #ACEmEMreu
- BCS +
- LDX #ACEmEMreu
- + CPY #ACEmEMrl
- BEQ +
- BCC +
- LDY #ACEmEMrl
- + STX SEARCHtYPEsTART
- STY SEARCHtYPEsTOP
- - LDA SEARCHtYPEsTART
- CMP SEARCHtYPEsTOP
- BEQ +
- BCS PAGEaLLOCfAIL
- + LDX SEARCHtYPEsTART
- LDA SEARCHmINfAIL,X
- BEQ +
- CMP SEARCHsIZE
- BEQ PAGEaLLOCnEXT
- BCC PAGEaLLOCnEXT
- + LDA SEARCHtYPEsTART
- ASL
- TAX
- LDA SEARCHtYPEjMP+0,X
- STA ZP+0
- LDA SEARCHtYPEjMP+1,X
- BEQ PAGEaLLOCnEXT
- STA ZP+1
- JSR PAGEaLLOCdISPATCH
- BCC ++
- LDX SEARCHtYPEsTART
- LDA SEARCHmINfAIL,X
- BEQ +
- CMP SEARCHsIZE
- BCC PAGEaLLOCnEXT
- + LDA SEARCHsIZE
- STA SEARCHmINfAIL,X
-
- PAGEaLLOCnEXT = *
- INC SEARCHtYPEsTART
- JMP -
- + LDX ZP+3
- LDA ZP+2
- CMP MINuSEDbANK,X
- BCS +
- STA MINuSEDbANK,X
- + CMP MAXuSEDbANK,X
- BCC +
- STA MAXuSEDbANK,X
- + CLC
- RTS
-
- PAGEaLLOCdISPATCH = *
- JMP (ZP)
-
- PAGEaLLOCfAIL = *
- LDA #ACEeRRiNSUFFICIENTmEMORY
- STA ERRNO
- LDA #$00
- STA ZP+0
- STA ZP+1
- STA ZP+2
- STA ZP+3
- SEC
- RTS
-
- PAGEaLLOCreu = * ;( ) : .x=PAGE, FREEMAPbANK, .cc=OK
- LDA #ACEmEMreu
- STA ZP+3
- LDA ACErEUcUR
- LDX ACErEUsTART
- LDY ACErEUbANKS
- JSR SEARCHtYPE
- STA ACErEUcUR
- RTS
-
- PAGEaLLOCiNTERNAL = *
- LDA #ACEmEMiNTERNAL
- STA ZP+3
- LDA ACEiNTERNALcUR
- LDX #$00
- LDY ACEiNTERNALbANKS
- JSR SEARCHtYPE
- STA ACEiNTERNALcUR
- RTS
-
- PAGEaLLOCrlreu = *
- LDA #ACEmEMrlreu
- STA ZP+3
- LDA ACErAMLINKrEUcUR
- LDX ACErEUsTART
- LDY ACErAMLINKrEUbANKS
- JSR SEARCHtYPE
- STA ACErAMLINKrEUcUR
- RTS
-
- PAGEaLLOCrl = *
- LDA #ACEmEMrl
- STA ZP+3
- LDA ACErAMLINKcUR
- LDX #$00
- LDY ACErAMLINKbANKS
- JSR SEARCHtYPE
- STA ACErAMLINKcUR
- RTS
-
- SEARCHcURRENT .BUF 1
- SEARCHsTART .BUF 1
- SEARCHsTOP .BUF 1
-
- SEARCHtYPE = * ;( ZP+3=TYPE, .a=CURRENT, .x=START, .y=STOP ):[ZP],.cc,.a=CUR,.x
- STA SEARCHcURRENT
- STA ZP+2
- STX SEARCHsTART
- STY SEARCHsTOP
- CPX SEARCHsTOP
- BCC +
- RTS
- / LDA ZP+2
- LDY ZP+3
- JSR GETfREEMAP
- LDY SEARCHsIZE
- JSR SEARCHfREEMAP
- BCS +
- LDA #0
- STA ZP+0
- STX ZP+1
- LDA ZP+2
- CLC
- RTS
- + INC ZP+2
- LDA ZP+2
- CMP SEARCHsTOP
- BCC +
- LDA SEARCHsTART
- STA ZP+2
- + LDA ZP+2
- CMP SEARCHcURRENT
- BNE -
- SEC
- RTS
-
- SEARCHpAGES .BUF 1
- NEWMAX .BUF 1
-
- SEARCHfREEMAP = * ;( .y=PAGES ) : .cc=FOUND, .x=FIRSTpG
- ;** FIRST FREE
- LDX FREEMAPpAGE
- LDA FREEMAP,X
- BEQ +
- - INX
- BEQ FREEMAPfULL
- LDA FREEMAP,X
- BNE -
- STX FREEMAPpAGE
- JMP +
- FREEMAPfULL = *
- SEC
- RTS
-
- ;** SEARCH
- + STY SEARCHpAGES
- CPX #0
- BEQ +
- DEX
- - LDY SEARCHpAGES
- - INX
- BEQ FREEMAPfULL
- + LDA FREEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY SEARCHpAGES
- LDA ACEpROCESSid
- - STA FREEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX FREEMAPpAGE
- BNE +
- LDY NEWMAX
- INY
- STY FREEMAPpAGE
- + LDA #$FF
- STA FREEMAPdIRTY
- SEC
- LDA ACEfREEmEMORY+1
- SBC SEARCHpAGES
- STA ACEfREEmEMORY+1
- LDA ACEfREEmEMORY+2
- SBC #0
- STA ACEfREEmEMORY+2
- BCS +
- DEC ACEfREEmEMORY+3
- + CLC
- RTS
-
- FREEpAGE .BUF 1
- FREElEN .BUF 1
-
- ACEpAGEfREE = * ;( [ZP]=fARpTR, .a=PAGES )
- STA FREElEN
- CMP #0
- BNE +
- JMP PAGEfREEeXIT
- + LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
- LDA #ACEeRRnULLpOINTER
- JMP PAGEfREEfAIL
- + LDA #ACEeRRiNVALIDfREEpARMS
- LDX ZP+0
- BNE PAGEfREEfAIL
- LDA ZP+1
- STA FREEpAGE
- CLC
- ADC FREElEN
- BCC +
- LDA #ACEeRRiNVALIDfREEpARMS
- JMP PAGEfREEfAIL
- + LDA ZP+2
- LDY ZP+3
- JSR GETfREEMAP
- LDA ACEpROCESSid
- LDX FREEpAGE
- LDY FREElEN
- - CMP FREEMAP,X
- BEQ +
- LDA #ACEeRRfREEnOToWNED
- JMP PAGEfREEfAIL
- + INX
- DEY
- BNE -
- LDX FREEpAGE
- LDY FREElEN
- LDA #$00
- - STA FREEMAP,X
- INX
- DEY
- BNE -
- LDA #$FF
- STA FREEMAPdIRTY
- LDA FREEpAGE
- CMP FREEMAPpAGE
- BCS +
- STA FREEMAPpAGE
- ;** ASSUME 2*(MIN-1)+LEN+1 NEW MIN
- + LDX ZP+3
- LDA SEARCHmINfAIL,X
- BEQ ++
- SEC
- SBC #1
- ASL
- BCS +
- SEC
- ADC FREElEN
- BCC ++
- + LDA #0
- + STA SEARCHmINfAIL,X
-
- CLC
- LDA ACEfREEmEMORY+1
- ADC FREElEN
- STA ACEfREEmEMORY+1
- BCC PAGEfREEeXIT
- INC ACEfREEmEMORY+2
- BNE PAGEfREEeXIT
- INC ACEfREEmEMORY+3
-
- PAGEfREEeXIT = *
- CLC
- RTS
-
- PAGEfREEfAIL = *
- STA ERRNO
- SEC
- RTS
-
- RECLAIMmEMtYPE .BUF 1
-
- RECLAIMpROCmEMORY = *
- LDX #0
- - LDA MINuSEDbANK,X
- CMP MAXuSEDbANK,X
- BEQ +
- BCS ++
- + STX RECLAIMmEMtYPE
- LDA MINuSEDbANK,X
- LDY MAXuSEDbANK,X
- TAX
- LDA RECLAIMmEMtYPE
- JSR RECLAIMpROCtYPE
- LDX RECLAIMmEMtYPE
- + INX
- CPX #ACEmEMtYPES
- BCC -
- RTS
-
- RPbANK .BUF 2
- RPeND .BUF 1
-
- RECLAIMpROCtYPE = * ;( .a=TYPE, .x=STARTbANK, .y=ENDbANK )
- STX RPbANK+0
- STA RPbANK+1
- STY RPeND
- - LDA RPbANK+0
- LDY RPbANK+1
- CMP RPeND
- BEQ +
- BCS ++
- + JSR GETfREEMAP
- JSR RECLAIMpROCfREEMAP
- INC RPbANK+0
- BNE -
- + RTS
-
- RECLAIMpROCfREEMAP = * ;( ) : .y=PAGESrEMOVED
- LDY #0
- LDX #0
- LDA ACEpROCESSid
- JMP +
- - INX
- BEQ ++
- + CMP FREEMAP,X
- BNE -
- LDA #0
- STA FREEMAP,X
- INY
- LDA ACEpROCESSid
- JMP -
- + CPY #0
- BEQ +
- LDA #0
- STA FREEMAPpAGE
- LDX FREEMAPbANK+1
- STA SEARCHmINfAIL,X
- LDA #$FF
- STA FREEMAPdIRTY
- TYA
- CLC
- ADC ACEfREEmEMORY+1
- STA ACEfREEmEMORY+1
- BCC +
- INC ACEfREEmEMORY+2
- BNE +
- INC ACEfREEmEMORY+3
- + CLC
- RTS
-
- MINuSEDbANK .BUF ACEmEMtYPES
- MAXuSEDbANK .BUF ACEmEMtYPES ;PLUS 1
-
- CLEARmEMORYiNFO = *
- LDX #ACEmEMtYPES-1
- - LDA #$FF
- STA MINuSEDbANK,X
- LDA #$00
- STA MAXuSEDbANK,X
- DEX
- BPL -
- RTS
-
- ;*** PROCESS PRIMITIVES
-
- EXITcODEsAVE .BUF 1
-
- ACEeXEC = *
- STA SYSWORK+0
- STY SYSWORK+1
- ;XX PUSH OLD MEMORY INFO
- JSR CLEARmEMORYiNFO
- LDA ACErESTOREsTACK
- PHA
- TSX
- STX ACErESTOREsTACK
- INC ACEpROCESSid
- JSR ACEeNTER
- LDA #0
-
- ACErEeNTER = *
- STA EXITcODEsAVE
- PLA
- STA ACErESTOREsTACK
- JSR RECLAIMoPENfILES
- JSR RECLAIMpROCmEMORY
- JSR CLEARmEMORYiNFO ;** MAKE RESTORE MEMORY INFO
- DEC ACEpROCESSid
- LDA EXITcODEsAVE
- CLC
- RTS
-
- ACEeNTER = *
- JMP (SYSWORK)
-
- ACEeXIT = *
- LDX ACErESTOREsTACK
- TXS
- JMP ACErEeNTER
-
- RECLAIMsAVE .BUF 1
-
- RECLAIMoPENfILES = *
- JSR KERNELcLRCHN
- LDX #0
- - LDA LFTABLE,X
- CMP #LFNULL
- BEQ +
- LDA PIDTABLE,X
- CMP ACEpROCESSid
- BNE +
- STX RECLAIMsAVE
- TXA
- JSR CLOSE
- LDX RECLAIMsAVE
- + INX
- CPX #FCBcOUNT
- BCC -
- RTS
-
- ACEVDC.S
- 578
- ;ace-128/64 KERNEL vdc 80-COLUMN SCREEN DRIVER CODE
-
- ;VDC MEMORY LAYOUT: $0000=CHAR,$1000=COLOR,$2000=CHARSET,$3000=ALTCHARSET
-
- VDCcOLORaDDR = $1000
- VDCcHARSETaDDR = $2000
- VDCsELECT = $D600
- VDCsTATUS = $D600
- VDCdATA = $D601
- VDCrOWiNC = 80
-
- VDCwINsCRx .BUF 1
- VDCwINsCRy .BUF 1
- VDCwINrOWS .BUF 1
- VDCwINcOLS .BUF 1
- VDCwINsTART .BUF 2
- VDCwINsAVEsZ .BUF 2
-
- VDCiNIT = *
- ;** CHARSET
- JSR VDCfILLmODE
- JSR VDClOADcHARSET
- ;** INIT SCREEN COLORS
- NOP
- ;** MOVE ATTRIBUTES
- LDA #<VDCcOLORaDDR
- LDY #>VDCcOLORaDDR
- LDX #$14
- JSR VDCwRITE16
- ;** CURSOR HEIGHT
- LDA #8
- LDX #$0B
- JSR VDCwRITE
- ;** WINDOW PARAMETERS
- JSR VDCwINMAX
- RTS
-
- VDCsHUTDOWN = *
- ;** RESTORE CHARSET
- LDA #<$D000
- LDY #>$D000
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<$2000
- LDY #>$2000
- STA SYSWORK+2
- STY SYSWORK+3
- SEI
- LDA #BKcHARSET
- STA BKsELECT
- LDX #8
- LDY #0
- - LDA (SYSWORK+0),Y
- STA (SYSWORK+2),Y
- INY
- BNE -
- INC SYSWORK+1
- INC SYSWORK+3
- DEX
- BNE -
- LDA #BKace
- STA BKsELECT
- CLI
- JSR VDClOADcHARSET
- ;** RESTORE ATTRIBUTES
- LDA #<$800
- LDY #>$800
- LDX #$14
- JSR VDCwRITE16
- ;** RESTORE CURSOR HEIGHT
- LDA #7
- LDX #$0B
- JSR VDCwRITE
- RTS
-
- CHSsOURCE = SYSWORK+0
- CHScOUNT = SYSWORK+2
-
- VDClOADcHARSET = *
- LDA #<VDCcHARSETaDDR
- LDY #>VDCcHARSETaDDR
- JSR VDCaDDRwRITE16
- LDA #<$2000
- LDY #>$2000
- STA CHSsOURCE+0
- STY CHSsOURCE+1
- LDX #0
- STX CHScOUNT
-
- CHARlOOP = *
- LDA #$1F
- STA VDCsELECT
- LDY #0
- - LDA (CHSsOURCE),Y
- - BIT VDCsTATUS
- BPL -
- STA VDCdATA
- INY
- CPY #8
- BCC --
- LDA #$00
- JSR VDCrAMwRITE
- LDX #$1E
- LDA #7
- JSR VDCwRITE
- CLC
- LDA CHSsOURCE+0
- ADC #8
- STA CHSsOURCE+0
- BCC +
- INC CHSsOURCE+1
- + INC CHScOUNT
- BNE CHARlOOP
- RTS
-
- VDCfILLmODE = * ;( )
- LDX #$18
- JSR VDCrEAD
- AND #$7F
- JSR VDCwRITE
- RTS
-
- VDCcOPYmODE = * ;( )
- LDX #$18
- JSR VDCrEAD
- ORA #$80
- JSR VDCwRITE
- RTS
-
- VDCrAMwRITE = * ;( .a=VALUE )
- LDX #$1F
-
- VDCwRITE = * ;( .x=REGISTER, .a=VALUE )
- STX VDCsELECT
- - BIT VDCsTATUS
- BPL -
- STA VDCdATA
- RTS
-
- VDCaDDRwRITE16 = * ;( .ay=VALUE )
- LDX #$12
-
- VDCwRITE16 = * ;( .x=HIrEGISTER, .ay=VALUE )
- STX VDCsELECT
- - BIT VDCsTATUS
- BPL -
- STY VDCdATA
- INX
- STX VDCsELECT
- - BIT VDCsTATUS
- BPL -
- STA VDCdATA
- RTS
-
- VDCrAMrEAD = * ;( ) : .a=VALUE
- LDX #$1F
-
- VDCrEAD = * ;( .x=REGISTER ) : .a=VALUE
- STX VDCsELECT
- - BIT VDCsTATUS
- BPL -
- LDA VDCdATA
- RTS
-
- VDCwINMAX = *
- LDA #0
- STA VDCwINsCRx
- STA VDCwINsCRy
- STA VDCwINsTART+0
- STA VDCwINsTART+1
- LDA #25
- LDX #80
- STA VDCwINrOWS
- STX VDCwINcOLS
- LDA #<2000+2000+16
- LDY #>2000+2000+16
- STA VDCwINsAVEsZ+0
- STY VDCwINsAVEsZ+1
- CLC
- RTS
-
- VDCcLScOLOR .BUF 1
-
- VDCwINCLS = *
- STA VDCfILLbYTE
- STY VDCcLScOLOR
- STX SYSWORK+2
- BIT SYSWORK+2
- BPL +
- JSR VDCwINCLSsETUP
- JSR VDCrOWfILL
- + BIT SYSWORK+2
- BVC +
- JSR VDCwINCLSsETUP
- LDA VDCcLScOLOR
- STA VDCfILLbYTE
- JSR VDCaDDcOLOR
- JSR VDCrOWfILL
- + RTS
-
- VDCwINCLSsETUP = *
- LDA VDCwINsTART+0
- LDY VDCwINsTART+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA VDCwINrOWS
- STA VDCfILLrOWS
- RTS
-
- VDCaDDcOLOR = *
- CLC
- LDA SYSWORK+1
- ADC #>VDCcOLORaDDR
- STA SYSWORK+1
- RTS
-
- VDCfILLbYTE .BUF 1
- VDCfILLrOWS .BUF 1
- VDCfILLcOLS .BUF 1
-
- VDCrOWfILL = * ;( (SW+0)=ADDR++, VDCfILLbYTE, VDCfILLrOWS-- )
- LDA VDCwINcOLS
- STA VDCfILLcOLS
- LDA VDCfILLrOWS
- BNE +
- RTS
- / JSR VDCcOLfILL
- CLC
- LDA SYSWORK+0
- ADC #VDCrOWiNC
- STA SYSWORK+0
- BCC +
- INC SYSWORK+1
- + DEC VDCfILLrOWS
- BNE -
- RTS
-
- VDCcOLfILL = * ;( (SW+0)=ADDR, VDCfILLbYTE, VDCfILLcOLS )
- LDA SYSWORK+0
- LDY SYSWORK+1
- JSR VDCaDDRwRITE16
- VDCcOLfILLgOTaDDR = *
- LDA VDCfILLcOLS
- BEQ +
- LDA VDCfILLbYTE
- JSR VDCrAMwRITE
- LDX VDCfILLcOLS
- DEX
- BEQ +
- TXA
- LDX #$1E
- JSR VDCwRITE
- + RTS
-
- VDCwINSET = *
- RTS
-
- VDCwINSIZE = *
- LDA VDCwINcOLS
- STA SYSWORK
- LDA VDCwINsTART+0
- LDY VDCwINsTART+1
- STA SYSWORK+2
- STY SYSWORK+3
- LDA #<VDCrOWiNC
- LDY #>VDCrOWiNC
- STA SYSWORK+4
- STY SYSWORK+5
- LDA VDCwINsAVEsZ+0
- LDY VDCwINsAVEsZ+1
- STA SYSWORK+6
- STY SYSWORK+7
- LDX VDCwINsCRx
- LDY VDCwINsCRy
- LDA VDCwINrOWS
- CLC
- RTS
-
- VDCwINLOAD = *
- RTS
- VDCwINSAVE = *
- RTS
-
- VDCpUTwHICH .BUF 1
- VDCpUTcOLOR .BUF 1
- VDCpUTlEN .BUF 1
-
- VDCwINPUT = *
- STA VDCpUTwHICH
- STY VDCfILLbYTE
- STX VDCpUTlEN
- BIT VDCpUTwHICH
- BPL VDCwINPUTcOLOR
- LDA SYSWORK+0
- LDY SYSWORK+1
- JSR VDCaDDRwRITE16
- LDY #0
- CPY VDCpUTlEN
- BEQ +
- LDA #$1F
- STA VDCsELECT
- - LDA (ZW),Y
- - BIT VDCsTATUS
- BPL -
- STA VDCdATA
- INY
- CPY VDCpUTlEN
- BCC --
- + SEC
- LDA SYSWORK+5
- SBC VDCpUTlEN
- BEQ VDCwINPUTcOLOR
- TAY
- LDA SYSWORK+4
- JSR VDCrAMwRITE
- DEY
- BEQ VDCwINPUTcOLOR
- TYA
- LDX #$1E
- JSR VDCwRITE
-
- VDCwINPUTcOLOR = *
- BIT VDCpUTwHICH
- BVS +
- RTS
- + LDA SYSWORK+1
- CLC
- ADC #>VDCcOLORaDDR
- TAY
- LDA SYSWORK+0
- JSR VDCaDDRwRITE16
- LDA SYSWORK+5
- STA VDCfILLcOLS
- JSR VDCcOLfILLgOTaDDR
- RTS
-
- VDCwINCOLOR = *
- PHP
- SEI
- CMP #128
- BCC +
- TXA
- LDX #$1A
- JSR VDCwRITE
- + AND #64
- BEQ +
- TYA
- NOP
- + LDX #$1A
- JSR VDCrEAD
- AND #$0F
- TAX
- TAY
- PLP
- RTS
-
- VDCwINPOScOL .BUF 1
-
- VDCwINPOS = *
- STA SYSWORK+0 ;(0 TO 50)
- STX VDCwINPOScOL
- LDX #0
- STX SYSWORK+1
- ASL
- ASL
- ADC SYSWORK+0
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- CLC
- ADC VDCwINPOScOL
- BCC +
- INC SYSWORK+1
- + CLC
- ADC VDCwINsTART+0
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC VDCwINsTART+1
- STA SYSWORK+1
- RTS
-
- VDCcURSORsAVE .BUF 1
- VDCcURSORcOLOR .BUF 1
-
- VDCwINCURSOR = *
- CMP #0
- BEQ VDCcURSORoFF
- STY VDCcURSORcOLOR
- LDA SYSWORK+0
- LDY SYSWORK+1
- LDX #$0E
- JSR VDCwRITE16
- LDX #$0A
- JSR VDCrEAD
- AND #$1F
- ORA #$60
- JSR VDCwRITE
- JSR VDCsETcOLORaDDR
- JSR VDCrAMrEAD
- STA VDCcURSORsAVE
- JSR VDCsETcOLORaDDR
- LDA VDCcURSORsAVE
- AND #$F0
- ORA VDCcURSORcOLOR
- JSR VDCrAMwRITE
- RTS
-
- VDCcURSORoFF = *
- LDX #$0E
- JSR VDCwRITE16
- LDX #$0A
- JSR VDCrEAD
- AND #$1F
- ORA #$20
- JSR VDCwRITE
- JSR VDCsETcOLORaDDR
- LDA VDCcURSORsAVE
- JSR VDCrAMwRITE
- RTS
-
- VDCsETcOLORaDDR = * ;( (SW+0)=ADDR )
- CLC
- LDA SYSWORK+1
- ADC #>VDCcOLORaDDR
- TAY
- LDA SYSWORK+0
- JMP VDCaDDRwRITE16
-
- VDCsCROLLdEST = SYSWORK+0
- VDCsCROLLsOURCE = SYSWORK+2
- VDCsCROLLrOWS .BUF 1
- VDCsCROLLeXTRA .BUF 1
-
- VDCwINSCROLL = *
- STA SYSWORK+5
- STY VDCcLScOLOR
- STX VDCsCROLLeXTRA
- CPX #0
- BNE +
- RTS
- + CPX VDCwINrOWS
- BCC +
- LDA SYSWORK+4
- LDX SYSWORK+5
- LDY VDCcLScOLOR
- JSR VDCwINCLS
- RTS
- + BIT SYSWORK+5
- BPL +
- JSR VDCsCROLLuPsETUP
- JSR VDCrOWsCROLLuP
- LDA #" "
- JSR VDCdOsCROLLeXTRA
- + BIT SYSWORK+5
- BVC +
- JSR VDCsCROLLuPsETUP
- JSR VDCsCROLLaDDcOLOR
- JSR VDCrOWsCROLLuP
- LDA VDCcLScOLOR
- JSR VDCdOsCROLLeXTRA
- + RTS
-
- VDCsCROLLuPsETUP = *
- LDA VDCsCROLLeXTRA
- LDX #0
- JSR VDCwINPOS
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDCsCROLLsOURCE+0
- STY VDCsCROLLsOURCE+1
- LDA VDCwINsTART+0
- LDY VDCwINsTART+1
- STA VDCsCROLLdEST+0
- STY VDCsCROLLdEST+1
- SEC
- LDA VDCwINrOWS
- SBC VDCsCROLLeXTRA
- STA VDCsCROLLrOWS
- RTS
-
- VDCsCROLLaDDcOLOR = *
- CLC
- LDA SYSWORK+1
- ADC #>VDCcOLORaDDR
- STA SYSWORK+1
- LDA SYSWORK+3
- ADC #>VDCcOLORaDDR
- STA SYSWORK+3
- RTS
-
- VDCdOsCROLLeXTRA = * ;( .a=FILLbYTE, (SW+0)=ADDR )
- STA VDCfILLbYTE
- LDA VDCsCROLLeXTRA
- STA VDCfILLrOWS
- LDA VDCwINcOLS
- STA VDCfILLcOLS
- JSR VDCrOWfILL
- RTS
-
- VDCrOWsCROLLuP = * ;( VDCsCROLLsOURCE++, VDCsCROLLdEST++, VDCsCROLLrOWS-- )
- LDA VDCsCROLLrOWS
- BNE +
- RTS
- + JSR VDCcOPYmODE
- - JSR VDCcOLsCROLL
- CLC
- LDA VDCsCROLLsOURCE+0
- ADC #VDCrOWiNC
- STA VDCsCROLLsOURCE+0
- BCC +
- INC VDCsCROLLsOURCE+1
- + CLC
- LDA VDCsCROLLdEST+0
- ADC #VDCrOWiNC
- STA VDCsCROLLdEST+0
- BCC +
- INC VDCsCROLLdEST+1
- + DEC VDCsCROLLrOWS
- BNE -
- JSR VDCfILLmODE
- RTS
-
- VDCcOLsCROLL = * ;( VDCsCROLLsOURCE, VDCsCROLLdEST, VDCwINcOLS )
- LDA VDCsCROLLdEST+0
- LDY VDCsCROLLdEST+1
- JSR VDCaDDRwRITE16
- LDA VDCsCROLLsOURCE+0
- LDY VDCsCROLLsOURCE+1
- LDX #$20
- JSR VDCwRITE16
- LDA VDCwINcOLS
- LDX #$1E
- JSR VDCwRITE
- RTS
-
- ;*** INTERRUPT SCREEN-SAVER CODE: **POTENTIAL VDC-ACCESS CONFLICTS**
-
- VDCsScOLOR .BUF 1
- VDCsSrOWS .BUF 1
- VDCsSaCTIVE .BYTE $00
-
- VDCsCREENsAVE = *
- RTS
- LDX #$06
- JSR VDCrEAD
- STA VDCsSrOWS
- LDX #$1A
- JSR VDCrEAD
- STA VDCsScOLOR
- LDA #$FF
- STA VDCsSaCTIVE
- LDX #$06
- LDA #0
- JSR VDCwRITE
- LDX #$1A
- LDA #$E0
- JSR VDCwRITE
- RTS
-
- VDCsCREENuNSAVE = *
- RTS
- LDX #$06
- LDA VDCsSrOWS
- JSR VDCwRITE
- LDX #$1A
- LDA VDCsScOLOR
- JSR VDCwRITE
- LDA #$00
- STA VDCsSaCTIVE
- RTS
-
- ;THE END + BLANK LINE
-
- ACEVIC.S
- 487
- ;ace-128/64 KERNEL vic 40-COLUMN SCREEN DRIVER CODE
-
- VICcHARaDDR = $0400
- VICcOLORoFF = $D400
- VICrOWiNC = 40
- VIC = $D000
-
- VICwINsCRx .BUF 1
- VICwINsCRy .BUF 1
- VICwINrOWS .BUF 1
- VICwINcOLS .BUF 1
- VICwINsTART .BUF 2
- VICwINsAVEsZ .BUF 2
-
- VICiNIT = *
- LDA #$18
- STA VIC+$18
- ;** WINDOW PARAMETERS
- JSR VICwINMAX
- RTS
-
- VICsHUTDOWN = *
- RTS
-
- VICwINMAX = *
- LDA #0
- STA VICwINsCRx
- STA VICwINsCRy
- LDA #<VICcHARaDDR
- LDY #>VICcHARaDDR
- STA VICwINsTART+0
- STY VICwINsTART+1
- LDA #25
- LDX #40
- STA VICwINrOWS
- STX VICwINcOLS
- LDA #<1000+1000+16
- LDY #>1000+1000+16
- STA VICwINsAVEsZ+0
- STY VICwINsAVEsZ+1
- CLC
- RTS
-
- RGBI2VICtAB .BYTE 0,12,6,14,5,13,11,3,2,10,8,4,9,7,15,1
-
- RGBI2VIC = *
- AND #$0F
- TAX
- LDA RGBI2VICtAB,X
- RTS
-
- VIC2RGBItAB .BYTE 0,15,8,7,11,4,2,13,10,12,9,6,1,5,3,14
-
- VIC2RGBI = *
- AND #$0F
- TAX
- LDA VIC2RGBItAB,X
- RTS
-
- VICcLScOLOR .BUF 1
-
- VICwINCLS = *
- STA VICfILLbYTE
- STY VICcLScOLOR
- STX SYSWORK+2
- BIT SYSWORK+2
- BPL +
- JSR VICwINCLSsETUP
- JSR VICrOWfILL
- + BIT SYSWORK+2
- BVC +
- JSR VICwINCLSsETUP
- LDA VICcLScOLOR
- JSR RGBI2VIC
- STA VICfILLbYTE
- JSR VICaDDcOLOR
- JSR VICrOWfILL
- + RTS
-
- VICwINCLSsETUP = *
- LDA VICwINsTART+0
- LDY VICwINsTART+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA VICwINrOWS
- STA VICfILLrOWS
- RTS
-
- VICaDDcOLOR = *
- CLC
- LDA SYSWORK+1
- ADC #>VICcOLORoFF
- STA SYSWORK+1
- RTS
-
- VICfILLbYTE .BUF 1
- VICfILLrOWS .BUF 1
- VICfILLcOLS .BUF 1
-
- VICrOWfILL = * ;( (SW+0)=ADDR++, VICfILLbYTE, VICfILLrOWS-- )
- LDA VICwINcOLS
- STA VICfILLcOLS
- LDA VICfILLrOWS
- BNE +
- RTS
- / JSR VICcOLfILL
- CLC
- LDA SYSWORK+0
- ADC #VICrOWiNC
- STA SYSWORK+0
- BCC +
- INC SYSWORK+1
- + DEC VICfILLrOWS
- BNE -
- RTS
-
- VICcOLfILL = * ;( (SW+0)=ADDR, VICfILLbYTE, VICfILLcOLS )
- LDY VICfILLcOLS
- BEQ +
- DEY
- LDA VICfILLbYTE
- - STA (SYSWORK),Y
- DEY
- BPL -
- + RTS
-
- VICwINSET = *
- RTS
-
- VICwINSIZE = *
- LDA VICwINcOLS
- STA SYSWORK
- LDA VICwINsTART+0
- LDY VICwINsTART+1
- STA SYSWORK+2
- STY SYSWORK+3
- LDA #<VICrOWiNC
- LDY #>VICrOWiNC
- STA SYSWORK+4
- STY SYSWORK+5
- LDA VICwINsAVEsZ+0
- LDY VICwINsAVEsZ+1
- STA SYSWORK+6
- STY SYSWORK+7
- LDX VICwINsCRx
- LDY VICwINsCRy
- LDA VICwINrOWS
- CLC
- RTS
-
- VICwINLOAD = *
- RTS
- VICwINSAVE = *
- RTS
-
- VICpUTwHICH .BUF 1
- VICpUTlEN .BUF 1
-
- VICwINPUT = *
- STA VICpUTwHICH
- STY VICfILLbYTE
- STX VICpUTlEN
- BIT VICpUTwHICH
- BPL VICwINPUTcOLOR
- LDY #0
- CPY VICpUTlEN
- BEQ +
- - LDA (ZW),Y
- STA (SYSWORK+0),Y
- INY
- CPY VICpUTlEN
- BCC -
- + CPY SYSWORK+5
- BEQ VICwINPUTcOLOR
- LDA SYSWORK+4
- - STA (SYSWORK+0),Y
- INY
- CPY SYSWORK+5
- BCC -
-
- VICwINPUTcOLOR = *
- BIT VICpUTwHICH
- BVS +
- RTS
- + CLC
- LDA SYSWORK+1
- ADC #>VICcOLORoFF
- STA SYSWORK+1
- LDA VICfILLbYTE
- JSR RGBI2VIC
- LDY SYSWORK+5
- DEY
- BMI +
- - STA (SYSWORK),Y
- DEY
- BPL -
- + SEC
- LDA SYSWORK+1
- SBC #>VICcOLORoFF
- STA SYSWORK+1
- RTS
-
- VICwINCOLOR = *
- PHP
- SEI
- CMP #128
- BCC +
- PHA
- TXA
- JSR RGBI2VIC
- STA VIC+$21
- PLA
- + AND #64
- BEQ VICwINCOLOReXIT
- TYA
- JSR RGBI2VIC
- BIT VICsSaCTIVE
- BMI +
- STA VIC+$20
- JMP VICwINCOLOReXIT
- + STA VICsScOLOR
-
- VICwINCOLOReXIT = *
- BIT VICsSaCTIVE
- BMI +
- LDA VIC+$20
- JMP ++
- + LDA VICsScOLOR
- + JSR VIC2RGBI
- TAY
- LDA VIC+$21
- JSR VIC2RGBI
- TAX
- PLP
- RTS
-
- VICwINPOScOL .BUF 1
-
- VICwINPOS = *
- STA SYSWORK+0 ;(0 TO 24)
- STX VICwINPOScOL
- LDX #0
- STX SYSWORK+1
- ASL
- ASL
- ADC SYSWORK+0
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- CLC
- ADC VICwINPOScOL
- BCC +
- INC SYSWORK+1
- + CLC
- ADC VICwINsTART+0
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC VICwINsTART+1
- STA SYSWORK+1
- RTS
-
- VICcURSORcHAR .BUF 1
- VICcURSORcOLOR .BUF 1
- VICcURSORfLASH .BYTE $00 ;$00=INACTIVE, $FF=ACTIVE
- VICcURSORcOUNTDOWN .BUF 1
- VICcURSORaDDR .BUF 2
-
- VICwINCURSOR = *
- CMP #0
- BEQ VICcURSORoFF
- TYA
- JSR RGBI2VIC
- STA VICcURSORcOLOR
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VICcURSORaDDR+0
- STY VICcURSORaDDR+1
- LDY #0
- LDA (SYSWORK+0),Y
- STA VICcURSORcHAR
- JSR VICsETcOLORaDDR
- LDY #0
- LDA (SYSWORK+0),Y
- TAX
- LDA VICcURSORcOLOR
- STA (SYSWORK+0),Y
- STX VICcURSORcOLOR
- JSR VICuNSETcOLORaDDR
- LDA #1
- STA VICcURSORcOUNTDOWN
- JSR VICiRQcURSOR
- LDA #$FF
- STA VICcURSORfLASH
- RTS
-
- VICcURSORoFF = *
- LDA #$00
- STA VICcURSORfLASH
- LDY #0
- LDA VICcURSORcHAR
- STA (SYSWORK+0),Y
- JSR VICsETcOLORaDDR
- LDA VICcURSORcOLOR
- STA (SYSWORK+0),Y
- JSR VICuNSETcOLORaDDR
- RTS
-
- VICiRQwORK = $A0
-
- VICiRQcURSOR = *
- BIT VICcURSORfLASH
- BMI +
- - RTS
- + DEC VICcURSORcOUNTDOWN
- BNE -
- LDA #20
- STA VICcURSORcOUNTDOWN
- LDA VICcURSORaDDR+0
- LDY VICcURSORaDDR+1
- STA VICiRQwORK+0
- STY VICiRQwORK+1
- LDY #0
- LDA (VICiRQwORK),Y
- PHA
- SEC
- SBC #32
- AND #%01000000
- BNE +
- PLA
- SEC
- SBC #64
- JMP ++
- + PLA
- CLC
- ADC #64
- + STA (VICiRQwORK),Y
- RTS
-
- VICsETcOLORaDDR = * ;( (SW+0)=ADDR ) : (SW+0)=COLORaDDR
- CLC
- LDA SYSWORK+1
- ADC #>VICcOLORoFF
- STA SYSWORK+1
- RTS
-
- VICuNSETcOLORaDDR = * ;( (SW+0)=COLORaDDR ) : (SW+0)=ADDR
- SEC
- LDA SYSWORK+1
- SBC #>VICcOLORoFF
- STA SYSWORK+1
- RTS
-
- VICsCROLLdEST = SYSWORK+0
- VICsCROLLsOURCE = SYSWORK+2
- VICsCROLLrOWS .BUF 1
- VICsCROLLeXTRA .BUF 1
-
- VICwINSCROLL = *
- STA SYSWORK+5
- STY VICcLScOLOR
- STX VICsCROLLeXTRA
- CPX #0
- BNE +
- RTS
- + CPX VICwINrOWS
- BCC +
- LDA SYSWORK+4
- LDX SYSWORK+5
- LDY VICcLScOLOR
- JSR VICwINCLS
- RTS
- + BIT SYSWORK+5
- BPL +
- JSR VICsCROLLuPsETUP
- JSR VICrOWsCROLLuP
- LDA #" "
- JSR VICdOsCROLLeXTRA
- + BIT SYSWORK+5
- BVC +
- JSR VICsCROLLuPsETUP
- JSR VICsCROLLaDDcOLOR
- JSR VICrOWsCROLLuP
- LDA VICcLScOLOR
- JSR VICdOsCROLLeXTRA
- + RTS
-
- VICsCROLLuPsETUP = *
- LDA VICsCROLLeXTRA
- LDX #0
- JSR VICwINPOS
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VICsCROLLsOURCE+0
- STY VICsCROLLsOURCE+1
- LDA VICwINsTART+0
- LDY VICwINsTART+1
- STA VICsCROLLdEST+0
- STY VICsCROLLdEST+1
- SEC
- LDA VICwINrOWS
- SBC VICsCROLLeXTRA
- STA VICsCROLLrOWS
- RTS
-
- VICsCROLLaDDcOLOR = *
- CLC
- LDA SYSWORK+1
- ADC #>VICcOLORoFF
- STA SYSWORK+1
- LDA SYSWORK+3
- ADC #>VICcOLORoFF
- STA SYSWORK+3
- RTS
-
- VICdOsCROLLeXTRA = * ;( .a=FILLbYTE, (SW+0)=ADDR )
- STA VICfILLbYTE
- LDA VICsCROLLeXTRA
- STA VICfILLrOWS
- LDA VICwINcOLS
- STA VICfILLcOLS
- JSR VICrOWfILL
- RTS
-
- VICrOWsCROLLuP = * ;( VICsCROLLsOURCE++, VICsCROLLdEST++, VICsCROLLrOWS-- )
- LDA VICsCROLLrOWS
- BNE +
- RTS
- + NOP
- - JSR VICcOLsCROLL
- CLC
- LDA VICsCROLLsOURCE+0
- ADC #VICrOWiNC
- STA VICsCROLLsOURCE+0
- BCC +
- INC VICsCROLLsOURCE+1
- + CLC
- LDA VICsCROLLdEST+0
- ADC #VICrOWiNC
- STA VICsCROLLdEST+0
- BCC +
- INC VICsCROLLdEST+1
- + DEC VICsCROLLrOWS
- BNE -
- RTS
-
- VICcOLsCROLL = * ;( VICsCROLLsOURCE, VICsCROLLdEST, VICwINcOLS )
- LDY VICwINcOLS
- DEY
- - LDA (VICsCROLLsOURCE),Y
- STA (VICsCROLLdEST),Y
- DEY
- BPL -
- RTS
-
- ;*** INTERRUPT SCREEN-SAVE STUFF
-
- VICsScOLOR .BUF 1
- VICsSrOWS .BUF 1
- VICsSaCTIVE .BYTE $00
-
- VICsCREENsAVE = *
- LDA VIC+$11
- STA VICsSrOWS
- LDA VIC+$20
- STA VICsScOLOR
- LDA #$FF
- STA VICsSaCTIVE
- LDA #$00
- STA VIC+$11
- LDA #$00
- STA VIC+$20
- RTS
-
- VICsCREENuNSAVE = *
- LDA VICsSrOWS
- STA VIC+$11
- LDA VICsScOLOR
- STA VIC+$20
- LDA #$00
- STA VICsSaCTIVE
- RTS
-
- ;THE END + BLANK LINE
-
- ACEVIC80.S
- 37
- ;ace-64 KERNEL vic BITMAPPED 80-COLUMN SCREEN DRIVER CODE
-
- VDCiNIT = *
- RTS
-
- VDCsHUTDOWN = *
- RTS
-
- VDCwINMAX = *
- RTS
- VDCwINCLS = *
- RTS
- VDCwINSET = *
- RTS
- VDCwINSIZE = *
- RTS
- VDCwINLOAD = *
- RTS
- VDCwINSAVE = *
- RTS
- VDCwINPUT = *
- RTS
- VDCwINCOLOR = *
- RTS
- VDCwINPOS = *
- RTS
- VDCwINCURSOR = *
- RTS
- VDCwINSCROLL = *
- RTS
- VDCsCREENsAVE = *
- RTS
- VDCsCREENuNSAVE = *
- RTS
-
- ;THE END + BLANK LINE
-
- AS.S
- 630
- ;*** AS PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:AS"
-
- JMP ASMAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
- CHRcr = $0D
- CHRqUOTE = $22
- CHRtAB = $09
- CHReof = $00
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- SOURCEfCB = 2 ;(1)
- BUFPTR = 3 ;(1)
- SOURCElINE = 4 ;(4)
- NUMBER = 8 ;(4)
- STRINGlEN = 12 ;(1)
- PREVcHAR = 13 ;(1)
-
- TOKENiDENTIFIER = 0
- TOKENnUMBER = 1
- TOKENsTRING = 2
- TOKENsPECIAL = 3
-
- CHReRRiDENTtOOlONG = $F0
- CHReRRsTRINGtOOlONG = $F1
- CHReRRnOcLOSEqUOTE = $F2
- CHReRRbADnUMBER = $F3
- CHReRRnUMoVERFLOW = $F4
-
- ASMAIN = *
- LDA ACEaRGC+1
- BEQ +
- ;** USAGE ERROR!
- - RTS
- + LDA ACEaRGC
- CMP #2
- BNE -
- LDA #1
- LDY #0
- JSR GETARG
- LDA #"R"
- JSR OPEN
- BCC +
- ;** SOURCE OPEN ERROR!
- RTS
- + STA SOURCEfCB
- LDA #1
- STA SOURCElINE
- LDA #0
- STA SOURCElINE+1
- STA SOURCElINE+2
- STA SOURCElINE+3
- LDA #255
- STA BUFPTR
- JSR ASdRIVER
- LDA SOURCEfCB
- JSR CLOSE
- RTS
-
- ;=FILL ENTIRE BUFFER, PAD WITH SPACES; .cs=EOF
- FILLBUF = *
- LDA #<SOURCEbUF
- LDY #>SOURCEbUF
- STA ZP
- STY ZP+1
- LDA #0
- LDY #1
- STA BUFPTR
- LDX SOURCEfCB
- JSR READ
- BNE +
- SEC
- RTS
- + CPY #1
- BCC +
- CLC
- RTS
- + TAY
- LDA #" "
- - STA SOURCEbUF,Y
- INY
- BNE -
- CLC
- RTS
-
- GETnEXTcHAR = *
- INC BUFPTR
- BEQ +
- - LDY BUFPTR
- LDA SOURCEbUF,Y
- RTS
- + JSR FILLBUF
- BCC -
- LDA #CHReof
- RTS
-
- EATwHITESPACE = * ;() : .a=nEXTcHAR
- LDA PREVcHAR
- CMP #" "
- BEQ +
- CMP #CHRtAB
- BEQ +
- RTS
- + LDY BUFPTR
- - INY
- BEQ +
- EATwHcONT = *
- LDA SOURCEbUF,Y
- CMP #" "
- BEQ -
- CMP #CHRtAB
- BEQ -
- STY BUFPTR
- RTS
- + JSR FILLBUF
- BCS +
- LDY #0
- JMP EATwHcONT
- + LDA #CHReof
- RTS
-
- ;===TOKEN DISPATCH===
- ;RET: .x=TOKENiDENTIFIER, .a=NEXTcHAR, .y=STRLEN, STRINGlEN, STRINGbUF
- ; .x=TOKENnUMBER, .y=NUMLEN, NUMBER
- ; .x=TOKENsTRING, .a=FIRSTcHAR,.y=STRLEN, STRINGlEN, STRINGbUF
- ; .x=TOKENsPECIAL, .a=CHAR
-
- GETtOKEN = *
- LDA PREVcHAR
- CMP #" "
- BNE +
- - JSR EATwHITESPACE
- + CMP #CHRtAB
- BEQ -
- CMP #"@"
- BCC +
- JMP GETiDENTIFIER
- + CMP #"'"
- BCC CMPmORE1
- BNE +
- JMP GETsTRING
- + CMP #"0"
- BCC TOKsPECIAL
- CMP #":"
- BCS +
-
- TOKnUM = *
- JMP GETnUMBER
-
- + CMP #";"
- BNE +
- JMP EATcOMMENT
-
- TOKsPECIAL = *
- JMP GETsPECIALtOKEN
-
- CMPmORE1 = *
- CMP #"$"
- BCC +
- BEQ TOKnUM
- CMP #"%"
- BEQ TOKnUM
- JMP GETsPECIALtOKEN
-
- + CMP #CHRqUOTE
- BNE TOKsPECIAL
- JMP GETsTRING
-
- ;===COMMENT===
-
- EATcOMMENT = *
- LDY BUFPTR
- - INY
- BEQ +
-
- COMMENTcHAR = *
- LDA SOURCEbUF,Y
- CMP #CHRcr
- BNE -
- STY BUFPTR
- JMP GETsPECIALtOKEN
- + JSR FILLBUF
- BCS +
- LDY #0
- BEQ COMMENTcHAR
- + LDA #CHReof
- JMP GETsPECIALtOKEN
-
- ;===SPECIAL===
-
- GETsPECIALtOKEN = *
- PHA
- CMP #CHRcr
- BNE +
- INC SOURCElINE
- BNE +
- INC SOURCElINE+1
- BNE +
- INC SOURCElINE+2
- BNE +
- INC SOURCElINE+3
- + CMP #CHReof
- BEQ +
- JSR GETnEXTcHAR
- + STA PREVcHAR
- PLA
- LDX #TOKENsPECIAL
- RTS
-
- ;===IDENTIFIER===
-
- GETiDENTIFIER = *
- STA STRINGbUF
- LDY #1
- STY STRINGlEN
- - JSR GETnEXTcHAR
- CMP #"@"
- BCC IDENTeXIT
-
- IDENTgOODcHAR = *
- LDY STRINGlEN
- STA STRINGbUF,Y
- INC STRINGlEN
- BNE -
- STA PREVcHAR
- LDX #TOKENsPECIAL
- LDA #CHReRRiDENTtOOlONG
- RTS
-
- IDENTeXIT = *
- CMP #"."
- BEQ IDENTgOODcHAR
- CMP #"_"
- BEQ IDENTgOODcHAR
- CMP #"0"
- BCC +
- CMP #":"
- BCC IDENTgOODcHAR
- + CMP #" "
- BNE +
- - STA PREVcHAR
- JSR EATwHITESPACE
- + CMP #CHRtAB
- BEQ -
- STA PREVcHAR
- LDA #0
- LDY STRINGlEN
- STA STRINGbUF,Y
- LDA PREVcHAR
- LDY STRINGlEN
- LDX #TOKENiDENTIFIER
- RTS
-
- ;===STRING===
-
- STRdELIMIT = 20
-
- GETsTRING = *
- STA STRdELIMIT
- LDA #0
- STA STRINGlEN
- - JSR GETnEXTcHAR
- STA PREVcHAR
- CMP #CHReof
- BEQ STReOF
- CMP STRdELIMIT
- BEQ STReXIT
- CMP #CHRcr
- BEQ STReOF
- CMP #"\"
- BEQ STReSC
- GETsTRpUT = *
- LDY STRINGlEN
- STA STRINGbUF,Y
- INC STRINGlEN
- BNE -
- STA PREVcHAR
- LDA #CHReRRsTRINGtOOlONG
- LDX #TOKENsPECIAL
- RTS
-
- STReSC = *
- JSR GETnEXTcHAR
- CMP #CHRcr
- BEQ STReOF
- CMP #CHReof
- BEQ STReOF
- LDX #STReSCcHAReND-STReSCcHAR-1
- - CMP STReSCcHAR,X
- BEQ +
- DEX
- BPL -
- JMP GETsTRpUT
- + LDA STReSCtRANS,X
- JMP GETsTRpUT
-
- STReSCcHAR = *
- .ASC "\NBTRAZ'E0"
- .BYTE CHRqUOTE
- STReSCcHAReND = *
- STReSCtRANS = *
- .BYTE 92,13,157,9,13,7,0,39,27,0,34
-
- STReOF = *
- LDA #CHReRRnOcLOSEqUOTE
- LDX #TOKENsPECIAL
- RTS
-
- STReXIT = *
- JSR GETnEXTcHAR
- STA PREVcHAR
- LDA #0 ;BUT MAY CONTAIN \0
- LDY STRINGlEN
- STA STRINGbUF,Y
- LDA STRINGbUF
- LDX #TOKENsTRING
- RTS
-
- NUMbASE = 20 ;(1)
- NUMsAVE = 21 ;(4)
-
- GETnUMBER = *
- PHA
- LDX #3
- LDA #0
- - STA NUMBER,X
- DEX
- BPL -
- PLA
- LDX #16
- CMP #"$"
- BEQ +
- LDX #2
- CMP #"%"
- BEQ +
- LDX #10
- STX NUMbASE
- BNE GOTnEXTdIGIT
- + STX NUMbASE
- JSR GETnEXTcHAR
- STA PREVcHAR
- JSR CHECKdIGIT
- BCC +
- LDA #CHReRRbADnUMBER
- LDX #TOKENsPECIAL
- RTS
- + TXA
- JMP GOTnEXTdIGIT
-
- NEXTdIGIT = *
- JSR GETnEXTcHAR
- STA PREVcHAR
- CMP #"_"
- BEQ NEXTdIGIT
- GOTnEXTdIGIT = *
- JSR CHECKdIGIT
- BCS GETnUMeXIT
- PHA
- JSR SHIFTnUMBER
- BCS OVERFLOWeXITpLA
- PLA
- CLC
- ADC NUMBER
- STA NUMBER
- BCC +
- INC NUMBER+1
- BNE +
- INC NUMBER+2
- BNE +
- INC NUMBER+3
- BEQ OVERFLOWeXIT
- + JMP NEXTdIGIT
-
- OVERFLOWeXITpLA = *
- PLA
- OVERFLOWeXIT = *
- LDX #TOKENsPECIAL
- LDA #CHReRRnUMoVERFLOW
- RTS
-
- GETnUMeXIT = *
- LDX #TOKENnUMBER
- LDY #3
- - LDA NUMBER,Y
- BEQ +
- DEY
- BPL -
- + INY
- RTS
-
- CHECKdIGIT = * ;( .a=ASCIIdIGIT ) : .a=BINdIGIT, .x=ASCIIdIGIT, .cc=OK
- TAX
- CMP #"0"
- BCC CHECKbAD
- CMP #"9"+1
- BCC CHECKaND
- CMP #"A"
- BCC CHECKbAD
- CMP #"F"+1
- BCC +
- CMP #"a"
- BCC CHECKbAD
- CMP #"f"+1
- BCS CHECKbAD
- + SEC
- SBC #7
- CHECKaND = *
- AND #$0F
- CMP NUMbASE
- RTS
- CHECKbAD = *
- SEC
- RTS
-
- SHIFTnUMBER = *
- LDA NUMbASE
- CMP #10
- BNE +
- LDX #3
- - LDA NUMBER,X
- STA NUMsAVE,X
- DEX
- BPL -
- LDX #2
- JSR ROLLnUMBER
- JSR ADDnUMBER
- LDX #1
- JSR ROLLnUMBER
- RTS
- + LDX #1
- CMP #16
- BNE +
- LDX #4
- + JSR ROLLnUMBER
- RTS
-
- ROLLnUMBER = * ;( .x=TIMES )
- ASL NUMBER
- ROL NUMBER+1
- ROL NUMBER+2
- ROL NUMBER+3
- BCS +
- DEX
- BNE ROLLnUMBER
- RTS
- + PLA
- PLA
- SEC
- RTS
-
- ADDnUMBER = *
- LDX #0
- CLC
- - LDA NUMBER,X
- ADC NUMsAVE,X
- STA NUMBER,X
- INX
- TXA
- AND #$03
- BNE -
- BCS +
- RTS
- + PLA
- PLA
- SEC
- RTS
-
- ASdRIVER = *
- LDA #$FF
- STA BUFPTR
- LDA #" "
- STA PREVcHAR
-
- NEXTtOKEN = *
- JSR STOPKEY
- BCC +
- LDA #1
- JMP EXIT
- + JSR GETtOKEN
- CPX #TOKENiDENTIFIER
- BEQ DISPiDENTIFIER
- CPX #TOKENsTRING
- BEQ DISPsTRING
- CPX #TOKENsPECIAL
- BEQ DISPsPECIAL
- CPX #TOKENnUMBER
- BEQ DISPnUMBER
- JMP NEXTtOKEN
-
- DISPiDENTIFIER = *
- PHA
- LDA #"I"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- JSR SHOWsTR
- LDA #","
- JSR PUTCHAR
- PLA
- SHOWcHAR = *
- CMP #CHRcr
- BNE +
- LDA #"_"
- + JSR PUTCHAR
- SHOWcr = *
- LDA #CHRcr
- JSR PUTCHAR
- JMP NEXTtOKEN
-
- DISPsTRING = *
- LDA #"S"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- JSR SHOWsTR
- JMP SHOWcr
-
- SHOWsTR = *
- LDA #<STRINGbUF
- LDY #>STRINGbUF
- STA ZP
- STY ZP+1
- LDA STRINGlEN
- LDY #0
- LDX #STDOUT
- JSR WRITE
- RTS
-
- DISPsPECIAL = *
- CMP #CHReof
- BNE +
- RTS
- + PHA
- LDA #"C"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- PLA
- JMP SHOWcHAR
-
- DISPnUMBER = *
- LDA #"N"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- LDA #<STRINGbUF
- LDY #>STRINGbUF
- STA $80
- STY $81
- LDX #NUMBER
- LDA #1
- JSR UTOA
- STY STRINGlEN
- JSR SHOWsTR
- JMP SHOWcr
-
- SOURCEbUF = *
- STRINGbUF = SOURCEbUF+256
- ASeND = STRINGbUF+256
- BCODE.S
- 1150
- ;*** bcode: BCODE ENCODER VERSION 1.00 - BY cRAIG bRUCE - 17-nOV-93
-
- ;BCODE [-HELP] [-V] [-U] [-M] [-L MAX_LINE_COUNT] FILENAME ...
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:BCODE"
-
- JMP MAIN
- .BYTE ACEid1,ACEid2,ACEid3
-
- ;*** GLOBAL DECLARATIONS
-
- CHRcr = $0D
- CHRlf = $0A
- CHRqUOTE = $22
- TRUE = $FF
- FALSE = $00
- MAXcHUNK = 54
- MAXlINE = 80
- TRpETSCII = 0
- TRaSCIIcRlF = 1
- TRaSCIIlF = 2
-
- ARG = 2 ;(2) ;CURRENT ARGUMENT NUMBER
- NAME = 4 ;(2) ;NAME OF FILE BEING BCODED
- STRING = 8 ;(2) ;TEMP STRING
- MAXLINES = 10 ;(4) ;MAX NUMBER OF LINES PER SEGMENT
- LINELIMIT = 14 ;(1) ;WHETHER THERE IS A RESTRICTION ON LINES/SEG
- ALIAS = 16 ;(2) ;CURRENT ALIAS NAME TO USE
- TRANStO = 18 ;(1) ;OUTPUT FILE TRANSLATION: PETSCII, ASC-CRLF, ASC-LF
- PROGNAME = 19 ;(2) ;POINTER TO ARGV[0]
- VERBOSE = 21 ;(1) ;FLAG FOR GIVING VERBOSE INFORMATION
- FILENAMEuSED = 22;(1) ;FLAG: IF A FILENAME HAS BEEN ENCOUNTERED ON THE CMD LINE
- BUFpTR = 23 ;(2) ;POINTER TO NEXT CHAR IN INPUT BUFFER
- BUFcOUNT = 25 ;(2) ;NUMBER OF BYTES LEFT IN INPUT BUFFER
- INbUFsIZE = 27 ;(2) ;MAXIMUM SIZE OF INPUT BUFFER
- INFILE = 29 ;(1) ;FD OF INPUT BINARY FILE
- OUTFILE = 30 ;(1) ;FD TO OUTPUT BCODED DATA TO
- CHUNKlEN = 31 ;(1) ;LENGTH OF CHUNK FOR ENCODING
- CHUNKpOS = 32 ;(1) ;SCANNING POSITION IN CHUNK DURING ENCODING
- BCTEMP = 33 ;(1) ;TEMPORARY FOR CONVERSION FROM 8 TO 6 BITS
- TRpUTpTR = 34 ;(2) ;POINTER TO TRANSLATED-PUTS STRING
- TRpUTiNDEX = 36 ;(1) ;INDEX INTO TRANSLATED-PUTS STRING
- CRC = 37 ;(4) ;CUMULATIVE CRC-32 OF SEGMENT
- BYTES = 41 ;(4) ;CUMULATIVE BYTES IN SEGMENT
- SEGNUM = 45 ;(4) ;CURRENT SEGMENT NUMBER
- STOPcOUNTDN = 49 ;(1) ;COUNTDOWN TO CHECK STOP KEY
- SCANvAL = 50 ;(4) ;RESULT OF CONVERTING STRING TO 32-BIT NUMBER
- LINENUM = 54 ;(4) ;CURRENT LINE NUMBER BEING ENCODED
- ISlASTsEG = 58 ;(1) ;WHETHER WE HAVE JUST ENCODED THE LAST SEGMENT
- WORK = 112;(16) ;MISC WORK AREA
-
- ;===MAIN===
-
- MAIN = *
- ;** CHECK FOR LARGE ENOUGH tpa
- SEC
- LDA #<BSSeND
- CMP ACEsTACKpTR+0
- LDA #>BSSeND
- SBC ACEsTACKpTR+1
- BCS +
- JMP MAINiNIT
- + LDA #<TPAmSG
- LDY #>TPAmSG
- JSR EPUTS
- DIE = *
- LDA #1
- LDX #0
- JMP EXIT
-
- TPAmSG = *
- .ASC "iNSUFFICIENT PROGRAM SPACE TO RUN BCODE"
- .BYTE CHRcr,0
-
- USAGE = *
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JSR EPUTS
- JMP DIE
-
- USAGEmSG = *
- .ASC "USAGE: BCODE [-HELP] [-V] [-U] [-M] [-L MAX_LINE_COUNT] FILENAME ..."
- .BYTE CHRcr
- .ASC "FLAGS: -V:VERBOSE, -U:UNIX-ASCII, -M:MS-DOS-ASCII"
- .BYTE CHRcr,0
-
- DEFAULTaLIAS = *
- .ASC "STDIN"
- .BYTE 0
-
- MAINiNIT = *
- ;** SET GLOBALS
- LDA #TRUE
- STA VERBOSE
- LDA #0
- LDY #0
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA PROGNAME+0
- STY PROGNAME+1
- LDA #FALSE
- STA FILENAMEuSED
- LDA #0
- STA ARG+0
- STA ARG+1
- LDA #<DEFAULTaLIAS
- LDY #>DEFAULTaLIAS
- STA ALIAS+0
- STY ALIAS+1
- LDA #FALSE
- STA LINELIMIT
- LDA #TRpETSCII
- STA TRANStO
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR+0
- SBC #<INbUF
- STA INbUFsIZE+0
- LDA ACEsTACKpTR+1
- SBC #>INbUF
- STA INbUFsIZE+1
-
- MAINnEXT = *
- JSR CHECKsTOP
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- ORA ZP+1
- BEQ MAINeXIT
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE +
- JMP HANDLEfLAGS
- + JSR ECHO
- JSR BCODE
- JMP MAINnEXT
-
- MAINeXIT = *
- BIT FILENAMEuSED
- BMI +
- ;XX SHOULD READ FROM STDIN IF NO FILES
- NOP
- + RTS
-
- HANDLEfLAGS = *
- INY
- LDA (ZP),Y
- BNE +
- JMP MAINnEXT
- + CMP #"V"
- BEQ FLAGv
- CMP #"M"
- BEQ FLAGm
- CMP #"A"
- BEQ FLAGm
- CMP #"U"
- BEQ FLAGu
- CMP #"L"
- BEQ FLAGl
- CMP #"H"
- BNE +
- JMP USAGE
- + NOP
- ;XX UNRECOGNIZED OPTION
- JMP HANDLEfLAGS
-
- FLAGv = *
- LDA #TRUE
- STA VERBOSE
- JMP HANDLEfLAGS
-
- FLAGm = *
- LDA #TRaSCIIcRlF
- STA TRANStO
- JMP HANDLEfLAGS
-
- FLAGu = *
- LDA #TRaSCIIlF
- STA TRANStO
- JMP HANDLEfLAGS
-
- FLAGl = *
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- ORA ZP+1
- BEQ FLAGlERROR
- LDY #0
- JSR SCANnUM
- BCS FLAGlERROR
- LDX #3
- - LDA SCANvAL,X
- STA MAXLINES,X
- DEX
- BPL -
- LDA MAXLINES+0
- ORA MAXLINES+1
- ORA MAXLINES+2
- ORA MAXLINES+3
- BEQ FLAGlERROR
- LDA #TRUE
- STA LINELIMIT
- JMP MAINnEXT
- FLAGlERROR = *
- LDA #<FLAGlERRORmSG
- LDY #>FLAGlERRORmSG
- JSR EPUTS
- JMP DIE
- FLAGlERRORmSG = *
- .ASC "error: INVALID MAXIMUM LINE LIMIT GIVEN WITH -L OPTION"
- .BYTE CHRcr,0
-
- ECHO = *
- LDA #<ECHOmSG1
- LDY #>ECHOmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ECHOmSG2
- LDY #>ECHOmSG2
- JSR EPUTS
- RTS
-
- ECHOmSG1 = *
- .ASC "BCODING FILE "
- .BYTE CHRqUOTE,0
- ECHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr,0
-
- CHECKsTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- JMP DIE
-
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- BCODE = *
- LDA #TRUE
- STA FILENAMEuSED
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCS OPENeRROR
- STA INFILE
- LDA #0
- STA BUFcOUNT+0
- STA BUFcOUNT+1
- JSR SETbASE64tABLE
- LDA #1
- LDY #0
- STA SEGNUM+0
- STY SEGNUM+1
- STY SEGNUM+2
- STY SEGNUM+3
-
- BCODEnEXTsEGMENT = *
- LDA #STDOUT
- STA OUTFILE
- BIT LINELIMIT
- BPL +
- JSR GEToUTFILE
- + JSR BCODEsEGMENT
- LDA OUTFILE
- CMP #STDOUT
- BEQ +
- JSR CLOSE
- + BIT ISlASTsEG
- BPL +
- LDA INFILE
- JSR CLOSE
- RTS
- + INC SEGNUM+0
- BNE +
- INC SEGNUM+1
- BNE +
- INC SEGNUM+2
- BNE +
- INC SEGNUM+3
- + JMP BCODEnEXTsEGMENT
-
- OPENeRROR = *
- LDA #<OPENeRRORmSG1
- LDY #>OPENeRRORmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<OPENeRRORmSG2
- LDY #>OPENeRRORmSG2
- JSR EPUTS
- RTS
- OPENeRRORmSG1 = *
- .ASC "error: CANNOT OPEN "
- .BYTE CHRqUOTE,0
- OPENeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- OUTFILEfILElEN = WORK+0
- OUTFILEeXTlEN = WORK+1
- OUTFILEtEMP = WORK+2
-
- GEToUTFILE = *
- ;** GET FILENAME
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- JSR BASENAME
- STX OUTFILEfILElEN
- ;** GET SEG NUMBER, 2+ DIGITS
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #1
- LDX #SEGNUM
- JSR UTOA
- CPY #1
- BNE +
- LDA NUMBUF+0
- STA NUMBUF+1
- LDA #"0"
- STA NUMBUF+0
- LDA #0
- STA NUMBUF+2
- INY
- + TYA
- CLC
- ADC #2
- STA OUTFILEeXTlEN
- CLC
- LDA OUTFILEfILElEN
- ADC OUTFILEeXTlEN
- LDY OUTFILEfILElEN
- CMP #17
- BCC +
- SEC
- LDA #16
- SBC OUTFILEeXTlEN ;GIVES ALLOWED FILENAME LEN
- TAY
- + LDA #"."
- STA OUTbUF,Y
- INY
- LDA #"B"
- STA OUTbUF,Y
- INY
- LDX #0
- - LDA NUMBUF,X
- STA OUTbUF,Y
- BEQ +
- INX
- INY
- BNE -
- ;** OPEN THE FILE
- + LDA #<OUTbUF
- LDY #>OUTbUF
- STA ZP+0
- STY ZP+1
- LDA #"W"
- JSR OPENoVERWRITE
- STA OUTFILE
- BCC +
- LDA #<OUTFILEeRRmSG1
- LDY #>OUTFILEeRRmSG1
- JSR EPUTS
- LDA #<OUTbUF
- LDY #>OUTbUF
- JSR EPUTS
- LDA #<OUTFILEeRRmSG2
- LDY #>OUTFILEeRRmSG2
- JSR EPUTS
- JMP DIE
- ;** ECHO OPENING
- + LDA #<OUTFILEmSG
- LDY #>OUTFILEmSG
- JSR EPUTS
- LDA #<OUTbUF
- LDY #>OUTbUF
- JSR EPUTS
- LDA #CHRqUOTE
- JSR EPUTCHAR
- LDA #CHRcr
- JMP EPUTCHAR
-
- OUTFILEmSG = *
- .ASC "OUTPUTTING TO FILE "
- .BYTE CHRqUOTE,0
- OUTFILEeRRmSG1 = *
- .ASC "error: CANNOT OPEN "
- .BYTE CHRqUOTE,0
- OUTFILEeRRmSG2 = *
- .BYTE CHRqUOTE
- .ASC ", ABORTING!"
- .BYTE CHRcr,0
-
- BCODEsEGMENT = * ;( ) : ISlASTsEG
- ;** HEADER LINE
- LDA #<BCODEhEADERmSG
- LDY #>BCODEhEADERmSG
- JSR TRpUTS
- LDX #SEGNUM
- JSR TRpUTNUM
- LDA #" "
- JSR TRpUTCHAR
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- JSR BASENAME
- LDA #<OUTbUF
- LDY #>OUTbUF
- JSR TRpUTS
- LDA #CHRcr
- JSR TRpUTCHAR
- JSR CRCiNIT
- LDA #0
- STA LINENUM+0
- STA LINENUM+1
- STA LINENUM+2
- STA LINENUM+3
- ;** LOOP
- ENCODEnEXT = *
- JSR ENCODElINE
- BCC +
- LDA #TRUE
- STA ISlASTsEG
- JMP ENCODEsEGfINISH
- + BIT LINELIMIT
- BPL ENCODEnEXT
- INC LINENUM+0
- BNE +
- INC LINENUM+1
- BNE +
- INC LINENUM+2
- BNE +
- INC LINENUM+3
- + SEC
- LDY #4
- LDX #0
- - LDA LINENUM,X
- SBC MAXLINES,X
- INX
- DEY
- BNE -
- BCC ENCODEnEXT
- LDA #FALSE
- STA ISlASTsEG
-
- ;** END LINE
- ENCODEsEGfINISH = *
- JSR CRCfINISH
- BIT ISlASTsEG
- BPL +
- LDA #<BCODEeNDmSG
- LDY #>BCODEeNDmSG
- JMP ++
- + LDA #<BCODEcONTINUEDmSG
- LDY #>BCODEcONTINUEDmSG
- + JSR TRpUTS
- LDX #SEGNUM
- JSR TRpUTNUM
- LDA #" "
- JSR TRpUTCHAR
- LDX #BYTES
- JSR TRpUTNUM
- LDA #" "
- JSR TRpUTCHAR
- LDX #CRC
- JSR TRpUTHEX
- LDA #CHRcr
- JSR TRpUTCHAR
- RTS
-
- BCODEhEADERmSG = *
- .ASC "--BCODE-BEGIN "
- .BYTE 0
- BCODEeNDmSG = *
- .ASC "--BCODE-END "
- .BYTE 0
- BCODEcONTINUEDmSG = *
- .ASC "--BCODE-CONTINUED "
- .BYTE 0
-
- BASENAMEsTART .BUF 1
- BASENAME = * ;( (ZP)=INNAME ) : OUTbUF=OUTNAME, .x=BASENAMElEN
- LDY #255
- STY BASENAMEsTART
- - INY
- LDA (ZP),Y
- BEQ BASENAMEdONE
- CMP #":"
- BEQ +
- CMP #"/"
- BNE -
- + STY BASENAMEsTART
- JMP -
- BASENAMEdONE = *
- LDY BASENAMEsTART
- LDX #255
- - INY
- INX
- LDA (ZP),Y
- STA OUTbUF,X
- BNE -
- CPX #2
- BCC +
- LDA OUTbUF-2,X
- CMP #","
- BNE +
- LDA #0
- STA OUTbUF-2,X
- DEX
- DEX
- + RTS
-
- ENCODElINE = *
- INC STOPcOUNTDN
- LDA STOPcOUNTDN
- AND #7
- BNE +
- JSR CHECKsTOP
- ;** GET THE CHUNK
- + JSR READcHUNK
- BCC +
- RTS
- + STX CHUNKlEN
- LDA #0
- STA INcHUNK+0,X
- STA INcHUNK+1,X
- JSR CRCcHUNK
- ;** ENCODE THE CHUNK
- LDX #0 ;CHUNKPOS
- LDY #0 ;LINEPOS
- - JSR ENCODEfOURcHARS
- CPX CHUNKlEN
- BCC -
- ;** FIX NON-INTEGRAL-LENGTH (LAST) LINE
- BEQ +
- LDA #"="
- STA OUTbUF-1,Y
- DEX
- CPX CHUNKlEN
- BEQ +
- STA OUTbUF-2,Y
- ;** OUTPUT THE LINE
- + LDA #CHRcr
- STA OUTbUF,Y
- LDX TRANStO
- CPX #TRpETSCII
- BEQ +
- INY
- LDA #CHRlf
- STA OUTbUF,Y
- CPX #TRaSCIIcRlF
- BEQ +
- DEY
- STA OUTbUF,Y
- + INY
- TYA
- LDA #<OUTbUF
- LDX #>OUTbUF
- STA ZP+0
- STX ZP+1
- TYA
- LDY #0
- LDX OUTFILE
- JSR WRITE
- RTS
-
- ENCODEfOURcHARS = * ;( .x++=CHUNKPOS, .y++=LINEPOS )
- STX CHUNKpOS
- ;** PUT BYTES INTO OUTPUT LINE
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
- ;** FIRST BYTE
- LDA INcHUNK+0,X
- LSR
- LSR
- TAX
- LDA BASE64cHAR,X
- STA OUTbUF,Y
- INY
-
- ;** SECOND BYTE
- LDX CHUNKpOS
- LDA INcHUNK+0,X
- ASL
- ASL
- ASL
- ASL
- STA BCTEMP
- LDA INcHUNK+1,X
- LSR
- LSR
- LSR
- LSR
- ORA BCTEMP
- AND #%00111111
- TAX
- LDA BASE64cHAR,X
- STA OUTbUF,Y
- INY
-
- ;** THIRD BYTE
- LDX CHUNKpOS
- LDA INcHUNK+1,X
- ASL
- ASL
- STA BCTEMP
- LDA INcHUNK+2,X
- ASL
- ROL
- ROL
- AND #%00000011
- ORA BCTEMP
- AND #%00111111
- TAX
- LDA BASE64cHAR,X
- STA OUTbUF,Y
- INY
-
- ;** FOURTH BYTE
- LDX CHUNKpOS
- LDA INcHUNK+2,X
- AND #%00111111
- TAX
- LDA BASE64cHAR,X
- STA OUTbUF,Y
- INY
- LDX CHUNKpOS
- INX
- INX
- INX
- RTS
-
- BASE64iNDEX .BUF 1
- SETbASE64tABLE = *
- LDY #0
- LDX #0
- LDA TRANStO
- CMP #TRpETSCII
- BEQ +
- LDX #BASE64dESCaSC-BASE64dESCpET
- + STX BASE64iNDEX
- - LDX BASE64iNDEX
- LDA BASE64dESCpET+0,X
- BEQ +
- PHA
- LDA BASE64dESCpET+1,X
- TAX
- PLA
- - STA BASE64cHAR,Y
- CLC
- ADC #1
- INY
- DEX
- BNE -
- INC BASE64iNDEX
- INC BASE64iNDEX
- BNE --
- + RTS
-
- BASE64dESCpET = *
- .BYTE "a",26,"A",26,"0",10,"+",1,"/",1,$00
- BASE64dESCaSC = *
- .BYTE $41,26,$61,26,"0",10,"+",1,"/",1,$00
-
- READcHUNK = * ;( ) : .x=LEN
- LDX #0
- - STX CHUNKlEN
- JSR GETbYTE
- LDX CHUNKlEN
- BCS +
- STA INcHUNK,X
- INX
- CPX #MAXcHUNK
- BCC -
- - CLC
- RTS
- + CPX #0
- BNE -
- SEC
- RTS
-
- GETbYTE = *
- LDA BUFcOUNT+0
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR+0
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT+0
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT+0
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- JSR CHECKsTOP
- LDA #<INbUF
- LDY #>INbUF
- STA ZP+0
- STY ZP+1
- STA BUFpTR+0
- STY BUFpTR+1
- LDA INbUFsIZE+0
- LDY INbUFsIZE+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT+0
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- CRCtABLE0 = *
- .BYTE $00,$96,$2C,$BA,$19,$8F,$35,$A3,$32,$A4,$1E,$88,$2B,$BD,$07,$91
- .BYTE $64,$F2,$48,$DE,$7D,$EB,$51,$C7,$56,$C0,$7A,$EC,$4F,$D9,$63,$F5
- .BYTE $C8,$5E,$E4,$72,$D1,$47,$FD,$6B,$FA,$6C,$D6,$40,$E3,$75,$CF,$59
- .BYTE $AC,$3A,$80,$16,$B5,$23,$99,$0F,$9E,$08,$B2,$24,$87,$11,$AB,$3D
- .BYTE $90,$06,$BC,$2A,$89,$1F,$A5,$33,$A2,$34,$8E,$18,$BB,$2D,$97,$01
- .BYTE $F4,$62,$D8,$4E,$ED,$7B,$C1,$57,$C6,$50,$EA,$7C,$DF,$49,$F3,$65
- .BYTE $58,$CE,$74,$E2,$41,$D7,$6D,$FB,$6A,$FC,$46,$D0,$73,$E5,$5F,$C9
- .BYTE $3C,$AA,$10,$86,$25,$B3,$09,$9F,$0E,$98,$22,$B4,$17,$81,$3B,$AD
- .BYTE $20,$B6,$0C,$9A,$39,$AF,$15,$83,$12,$84,$3E,$A8,$0B,$9D,$27,$B1
- .BYTE $44,$D2,$68,$FE,$5D,$CB,$71,$E7,$76,$E0,$5A,$CC,$6F,$F9,$43,$D5
- .BYTE $E8,$7E,$C4,$52,$F1,$67,$DD,$4B,$DA,$4C,$F6,$60,$C3,$55,$EF,$79
- .BYTE $8C,$1A,$A0,$36,$95,$03,$B9,$2F,$BE,$28,$92,$04,$A7,$31,$8B,$1D
- .BYTE $B0,$26,$9C,$0A,$A9,$3F,$85,$13,$82,$14,$AE,$38,$9B,$0D,$B7,$21
- .BYTE $D4,$42,$F8,$6E,$CD,$5B,$E1,$77,$E6,$70,$CA,$5C,$FF,$69,$D3,$45
- .BYTE $78,$EE,$54,$C2,$61,$F7,$4D,$DB,$4A,$DC,$66,$F0,$53,$C5,$7F,$E9
- .BYTE $1C,$8A,$30,$A6,$05,$93,$29,$BF,$2E,$B8,$02,$94,$37,$A1,$1B,$8D
-
- CRCtABLE1 = *
- .BYTE $00,$30,$61,$51,$C4,$F4,$A5,$95,$88,$B8,$E9,$D9,$4C,$7C,$2D,$1D
- .BYTE $10,$20,$71,$41,$D4,$E4,$B5,$85,$98,$A8,$F9,$C9,$5C,$6C,$3D,$0D
- .BYTE $20,$10,$41,$71,$E4,$D4,$85,$B5,$A8,$98,$C9,$F9,$6C,$5C,$0D,$3D
- .BYTE $30,$00,$51,$61,$F4,$C4,$95,$A5,$B8,$88,$D9,$E9,$7C,$4C,$1D,$2D
- .BYTE $41,$71,$20,$10,$85,$B5,$E4,$D4,$C9,$F9,$A8,$98,$0D,$3D,$6C,$5C
- .BYTE $51,$61,$30,$00,$95,$A5,$F4,$C4,$D9,$E9,$B8,$88,$1D,$2D,$7C,$4C
- .BYTE $61,$51,$00,$30,$A5,$95,$C4,$F4,$E9,$D9,$88,$B8,$2D,$1D,$4C,$7C
- .BYTE $71,$41,$10,$20,$B5,$85,$D4,$E4,$F9,$C9,$98,$A8,$3D,$0D,$5C,$6C
- .BYTE $83,$B3,$E2,$D2,$47,$77,$26,$16,$0B,$3B,$6A,$5A,$CF,$FF,$AE,$9E
- .BYTE $93,$A3,$F2,$C2,$57,$67,$36,$06,$1B,$2B,$7A,$4A,$DF,$EF,$BE,$8E
- .BYTE $A3,$93,$C2,$F2,$67,$57,$06,$36,$2B,$1B,$4A,$7A,$EF,$DF,$8E,$BE
- .BYTE $B3,$83,$D2,$E2,$77,$47,$16,$26,$3B,$0B,$5A,$6A,$FF,$CF,$9E,$AE
- .BYTE $C2,$F2,$A3,$93,$06,$36,$67,$57,$4A,$7A,$2B,$1B,$8E,$BE,$EF,$DF
- .BYTE $D2,$E2,$B3,$83,$16,$26,$77,$47,$5A,$6A,$3B,$0B,$9E,$AE,$FF,$CF
- .BYTE $E2,$D2,$83,$B3,$26,$16,$47,$77,$6A,$5A,$0B,$3B,$AE,$9E,$CF,$FF
- .BYTE $F2,$C2,$93,$A3,$36,$06,$57,$67,$7A,$4A,$1B,$2B,$BE,$8E,$DF,$EF
-
- CRCtABLE2 = *
- .BYTE $00,$07,$0E,$09,$6D,$6A,$63,$64,$DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF
- .BYTE $B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3,$6C,$6B,$62,$65,$01,$06,$0F,$08
- .BYTE $6E,$69,$60,$67,$03,$04,$0D,$0A,$B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1
- .BYTE $D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD,$02,$05,$0C,$0B,$6F,$68,$61,$66
- .BYTE $DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8,$07,$00,$09,$0E,$6A,$6D,$64,$63
- .BYTE $6B,$6C,$65,$62,$06,$01,$08,$0F,$B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4
- .BYTE $B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6,$69,$6E,$67,$60,$04,$03,$0A,$0D
- .BYTE $05,$02,$0B,$0C,$68,$6F,$66,$61,$DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA
- .BYTE $B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC,$63,$64,$6D,$6A,$0E,$09,$00,$07
- .BYTE $0F,$08,$01,$06,$62,$65,$6C,$6B,$D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0
- .BYTE $D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2,$0D,$0A,$03,$04,$60,$67,$6E,$69
- .BYTE $61,$66,$6F,$68,$0C,$0B,$02,$05,$BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE
- .BYTE $64,$63,$6A,$6D,$09,$0E,$07,$00,$BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB
- .BYTE $D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7,$08,$0F,$06,$01,$65,$62,$6B,$6C
- .BYTE $0A,$0D,$04,$03,$67,$60,$69,$6E,$D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5
- .BYTE $BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9,$66,$61,$68,$6F,$0B,$0C,$05,$02
-
- CRCtABLE3 = *
- .BYTE $00,$77,$EE,$99,$07,$70,$E9,$9E,$0E,$79,$E0,$97,$09,$7E,$E7,$90
- .BYTE $1D,$6A,$F3,$84,$1A,$6D,$F4,$83,$13,$64,$FD,$8A,$14,$63,$FA,$8D
- .BYTE $3B,$4C,$D5,$A2,$3C,$4B,$D2,$A5,$35,$42,$DB,$AC,$32,$45,$DC,$AB
- .BYTE $26,$51,$C8,$BF,$21,$56,$CF,$B8,$28,$5F,$C6,$B1,$2F,$58,$C1,$B6
- .BYTE $76,$01,$98,$EF,$71,$06,$9F,$E8,$78,$0F,$96,$E1,$7F,$08,$91,$E6
- .BYTE $6B,$1C,$85,$F2,$6C,$1B,$82,$F5,$65,$12,$8B,$FC,$62,$15,$8C,$FB
- .BYTE $4D,$3A,$A3,$D4,$4A,$3D,$A4,$D3,$43,$34,$AD,$DA,$44,$33,$AA,$DD
- .BYTE $50,$27,$BE,$C9,$57,$20,$B9,$CE,$5E,$29,$B0,$C7,$59,$2E,$B7,$C0
- .BYTE $ED,$9A,$03,$74,$EA,$9D,$04,$73,$E3,$94,$0D,$7A,$E4,$93,$0A,$7D
- .BYTE $F0,$87,$1E,$69,$F7,$80,$19,$6E,$FE,$89,$10,$67,$F9,$8E,$17,$60
- .BYTE $D6,$A1,$38,$4F,$D1,$A6,$3F,$48,$D8,$AF,$36,$41,$DF,$A8,$31,$46
- .BYTE $CB,$BC,$25,$52,$CC,$BB,$22,$55,$C5,$B2,$2B,$5C,$C2,$B5,$2C,$5B
- .BYTE $9B,$EC,$75,$02,$9C,$EB,$72,$05,$95,$E2,$7B,$0C,$92,$E5,$7C,$0B
- .BYTE $86,$F1,$68,$1F,$81,$F6,$6F,$18,$88,$FF,$66,$11,$8F,$F8,$61,$16
- .BYTE $A0,$D7,$4E,$39,$A7,$D0,$49,$3E,$AE,$D9,$40,$37,$A9,$DE,$47,$30
- .BYTE $BD,$CA,$53,$24,$BA,$CD,$54,$23,$B3,$C4,$5D,$2A,$B4,$C3,$5A,$2D
-
- ;** CRC = 0Xffffffff;
- ;** WHILE( (C=GETC(FP)) != eof ) {$7b}
- ;** CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ (CRC^C) & 0Xff ];
- ;** {$7d}
- ;** RETURN( CRC^0Xffffffff );
-
- CRCiNIT = *
- LDX #3
- - LDA #$FF
- STA CRC,X
- LDA #0
- STA BYTES,X
- DEX
- BPL -
- RTS
-
- CRCcHUNK = *
- LDY #0
- CPY CHUNKlEN
- BCS +
- - LDA INcHUNK,Y ;.x = (CRC^C) & 0Xff
- EOR CRC+0
- TAX
- LDA CRC+1 ;CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ .x ]
- EOR CRCtABLE0,X
- STA CRC+0
- LDA CRC+2
- EOR CRCtABLE1,X
- STA CRC+1
- LDA CRC+3
- EOR CRCtABLE2,X
- STA CRC+2
- LDA CRCtABLE3,X
- STA CRC+3
- INY
- CPY CHUNKlEN
- BCC -
- + CLC
- LDA BYTES+0
- ADC CHUNKlEN
- STA BYTES+0
- BCC +
- INC BYTES+1
- BNE +
- INC BYTES+2
- BNE +
- INC BYTES+3
- + RTS
-
- CRCfINISH = *
- LDX #3
- - LDA CRC,X
- EOR #$FF
- STA CRC,X
- DEX
- BPL -
- RTS
-
- TRpUTS = *
- STA TRpUTpTR+0
- STY TRpUTpTR+1
- LDY #0
- STY TRpUTiNDEX
- - LDY TRpUTiNDEX
- LDA (TRpUTpTR),Y
- BEQ +
- JSR TRpUTCHAR
- INC TRpUTiNDEX
- BNE -
- + RTS
-
- TRpUTCHAR = *
- LDX TRANStO
- CPX #TRpETSCII
- BEQ +
- CMP #CHRcr
- BEQ ++
- JSR CONVpET2aSC
- + LDX OUTFILE
- JMP PUTC
- + LDX TRANStO
- CPX #TRaSCIIlF
- BEQ +
- LDA #CHRcr
- LDX OUTFILE
- JSR PUTC
- + LDA #CHRlf
- LDX OUTFILE
- JMP PUTC
-
- CONVpET2aSC = *
- CMP #"A"
- BCS +
- RTS
- + TAX
- BPL +
- SBC #$C0-$60
- TAX
- + AND #$1F
- BNE +
- - TXA
- RTS
- + CMP #$1B
- BCS -
- TXA
- EOR #$20
- RTS
-
- TRpUTNUM = * ;( .x=NUMBER32 )
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #1
- JSR UTOA
- TRpUTNUMdUMP = *
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR TRpUTS
- RTS
-
- TRpUTHEX = * ;( .x=NUMBER32 )
- LDA #4
- STA WORK
- LDY #0
- INX
- INX
- INX
- - LDA 0,X
- PHA
- LSR
- LSR
- LSR
- LSR
- JSR TRpUTHEXdIGIT
- PLA
- JSR TRpUTHEXdIGIT
- DEX
- DEC WORK
- BNE -
- LDA #0
- STA NUMBUF,Y
- JMP TRpUTNUMdUMP
-
- TRpUTHEXdIGIT = * ;( .a=DIGIT, .y=NUMBUFiNDEX )
- AND #$0F
- ORA #$30
- CMP #$3A
- BCC +
- ADC #6
- + STA NUMBUF,Y
- INY
- RTS
-
- ;=== STANDARD LIBRARY ===
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- EPUTCHAR = *
- LDX #STDERR
- JMP PUTC
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV+0
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- SCANdIGIT .BUF 1
- SCANsAVE .BUF 4
- SCANtEMP .BUF 1
- SCANiNDEX .BUF 1
- SCANaNYTHING .BUF 1
-
- SCANnUM = * ;( (ZP)=NUMsTR, .y=NUMiNDEX ) : .y=SCAN, [SCANvAL]=NUM, .cs=ERR
- LDX #3
- LDA #0
- - STA SCANvAL,X
- DEX
- BPL -
- LDA #0
- STA SCANaNYTHING
- - LDA (ZP),Y
- CMP #" "
- BNE SCANnUMnEXT
- INY
- BNE -
- SEC
- RTS
-
- SCANnUMnEXT = *
- LDA (ZP),Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCC ++
- + LDA SCANaNYTHING
- BEQ SCANeRROR
- CLC
- RTS
- + AND #$0F
- STA SCANdIGIT
- LDA #$FF
- STA SCANaNYTHING
- ;** TIMES TEN
- STY SCANtEMP
- LDX #3
- - LDA SCANvAL,X
- STA SCANsAVE,X
- DEX
- BPL -
- LDA #2
- STA SCANiNDEX
- - CLC
- LDY #4
- LDX #0
- - ROL SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- DEC SCANiNDEX
- BNE --
- CLC
- LDY #4
- LDX #0
- - LDA SCANvAL,X
- ADC SCANsAVE,X
- STA SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- CLC
- LDY #4
- LDX #0
- - ROL SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- CLC
- LDY #4
- LDX #0
- LDA SCANdIGIT
- - ADC SCANvAL,X
- STA SCANvAL,X
- LDA #0
- INX
- DEY
- BNE -
- BCS SCANeRROR
-
- LDY SCANtEMP
- INY
- BEQ SCANeRROR
- JMP SCANnUMnEXT
-
- SCANeRROR = *
- SEC
- RTS
-
- OPENoVmODE .BUF 1
- OPENoVERWRITE = * ;( (ZP)=NAME, .a=MODE ) : .a=fCB, .cs=ERR
- STA OPENoVmODE
- JSR OPEN
- BCS +
- RTS
- + LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BEQ +
- - SEC
- RTS
- + JSR REMOVE
- LDA OPENoVmODE
- JSR OPEN
- BCS -
- RTS
-
- ;===BSS===
-
- BSS = *
- OUTbUF = BSS
- INcHUNK = OUTbUF+MAXlINE+1
- BASE64cHAR = INcHUNK+MAXcHUNK+5
- NUMBUF = BASE64cHAR+64
- INbUF = NUMBUF+12
- BSSeND = INbUF+64
- BRK.S
- 9
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:BRK"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- BRK
- CONFIG.S
- 1172
- ;*** cONFIGURATION pROGRAM ***
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:CONFIG"
-
- JMP MAIN
- .ASC "Cf"
-
- KERNELsETLFS = $FFBA
- KERNELsETNAM = $FFBD
- KERNELoPEN = $FFC0
- KERNELcLOSE = $FFC3
- KERNELcHKIN = $FFC6
- KERNELcHKOUT = $FFC9
- KERNELcLRCHN = $FFCC
- KERNELcHRIN = $FFCF
- KERNELlOAD = $FFD5
- KERNELsWAPPER = $FF5F
- ST = $90
- TOTALbANKS = ACEtOTALmEMORY+2
- CHRcr = 13
- CHRqUOTE = 34
-
- CONFIGbUF = 2 ;(2)
- SYSnAME = 4 ;(2)
- RAM0fREEmAP = 6 ;(2)
- ACEeNDpAGE = 8 ;(1)
- SYStYPE = 9 ;(1)
- MEMrEAD = 12 ;(2)
- MEMwRITE = 14 ;(2)
- BANKS = 16 ;(1)
- BANKlIMIT = 17 ;(1)
- SAVE0 = 18 ;(2)
- SAVE2 = 20 ;(2)
- SAVEn = 22 ;(2)
- TITLEpTR = $70 ;(2)
-
- MAIN = *
- LDA #<TITLE
- LDY #>TITLE
- STA TITLEpTR+0
- STY TITLEpTR+1
- JSR LOADcONFIG
- BCS +
- JSR LOADcHARSET
- BCS +
- JSR LOADsHELL
- BCS +
- JSR SCREENiNIT
- JSR SETdATE
- JSR DISPLAYdATE
- JSR GETrAMLINKpARMS
- JSR INTERNALmEMORY
- JSR REUmEMORY
- JSR RLREUmEMORY
- JSR RLmEMORY
- JSR TOTALmEMORY
- CLC
- LDA #<TITLE
- LDY #>TITLE
- STA 2
- STY 3
- SEC
- LDA TITLEpTR+0
- SBC #<TITLE
- STA 4
- LDA TITLEpTR+1
- SBC #>TITLE
- STA 5
- CLC
- + RTS
-
- TESTmEMORYtYPE = * ;( .a=TYPE, .x=BANKlIMIT ) : .a=BANKcOUNT
- STA ZP+3
- STX BANKlIMIT
- LDA #$00
- LDY #$80
- LDX #$00
- STA ZP
- STY ZP+1
- STX ZP+2
- LDA #0
- STA BANKS
-
- NEXTbANK = *
- LDA BANKS
- STA ZP+2
- JSR SAVEbANK
- LDA #$FF-$CB
- STA MEMwRITE
- LDA ZP+2
- STA MEMwRITE+1
- LDX #MEMwRITE
- LDY #2
- JSR ZPSTORE
- LDA #$FF-$CB
- LDX ZP+2
- JSR TESTbANK
- BCS BANKfAIL
- LDA #$CB
- STA MEMwRITE
- LDX #MEMwRITE
- LDY #2
- JSR ZPSTORE
- LDA #$CB
- LDX ZP+2
- JSR TESTbANK
- BCS BANKfAIL
- LDA #$CB
- LDX #0
- JSR TESTbANK
- BCS BANKfAIL
- LDA ZP+2
- CMP #2
- BCC +
- LDA #$CB
- LDX #2
- JSR TESTbANK
- BCS BANKfAIL
- + JSR RESTOREbANK
- INC BANKS
- LDA BANKS
- CMP BANKlIMIT
- BCC NEXTbANK
-
- BANKfAIL = *
- JSR RESTOREwRAPbANKS
- LDA BANKS
- RTS
-
- SAVEbANK = * ;()
- LDX #SAVEn
- LDY #2
- LDA ZP+2
- CMP #0
- BNE +
- LDX #SAVE0
- + CMP #2
- BNE +
- LDX #SAVE2
- + JSR ZPLOAD
- RTS
-
- RESTOREbANK = * ;()
- LDA ZP+2
- CMP #0
- BEQ +
- CMP #2
- BEQ +
- LDX #SAVEn
- LDY #2
- JSR ZPSTORE
- + RTS
-
- RESTOREwRAPbANKS = * ;()
- LDA BANKS
- CMP #3
- BCC +
- + LDA #2
- STA ZP+2
- LDX #SAVE2
- LDY #2
- JSR ZPSTORE
- LDA BANKS
- CMP #1
- BCC +
- LDA #0
- STA ZP+2
- LDX #SAVE0
- LDY #2
- JSR ZPSTORE
- + RTS
-
- RDvAL = 10 ;(1)
- RDbANK = 11 ;(1)
-
- TESTbANK = * ;( .a=DATA, .x=BANK ) : .cs=ERR
- STA RDvAL
- LDA ZP+2
- STA RDbANK
- STX ZP+2
- LDA #$FF
- STA MEMrEAD
- STA MEMrEAD+1
- LDX #MEMrEAD
- LDY #2
- JSR ZPLOAD
- LDA MEMrEAD
- CMP RDvAL
- BNE +
- LDA MEMrEAD+1
- CMP ZP+2
- BNE +
- LDA RDbANK
- STA ZP+2
- CLC
- RTS
- + LDA RDbANK
- STA ZP+2
- SEC
- RTS
-
- PUTS = *
- STA $40
- STY $41
- LDY #0
- - LDA ($40),Y
- BEQ +
- JSR CHROUT
- INY
- BNE -
- INC $41
- BNE -
- + RTS
-
- LOADcONFIG = *
- LDA #0
- LDX 186
- LDY #0
- JSR KERNELsETLFS
- LDA #10
- LDX #<LOADcONFIGnAME
- LDY #>LOADcONFIGnAME
- JSR KERNELsETNAM
- LDA #0
- LDX CONFIGbUF
- LDY CONFIGbUF+1
- JSR KERNELlOAD
- BCS +
- CLC
- RTS
- + LDA #<BADcONFIG
- LDY #>BADcONFIG
- JSR PUTS
- SEC
- RTS
-
- LOADcONFIGnAME = *
- .ASC "CONFIG.SYS"
- BADcONFIG = *
- .ASC "eRROR ATTEMPTING TO B-LOAD "
- .BYTE CHRqUOTE
- .ASC "CONFIG.SYS"
- .BYTE CHRqUOTE
- .ASC ", ABORTING."
- .BYTE CHRcr,0
-
- LOADcHARSET = *
- LDA #0
- LDX 186
- LDY #0
- JSR KERNELsETLFS
- LDA #11
- LDX #<LOADcHARSETnAME
- LDY #>LOADcHARSETnAME
- JSR KERNELsETNAM
- LDA #0
- LDX #<$2000
- LDY #>$2000
- JSR KERNELlOAD
- BCS +
- CLC
- RTS
- + LDA #<BADcHARSET
- LDY #>BADcHARSET
- JSR PUTS
- SEC
- RTS
-
- LOADcHARSETnAME = *
- .ASC "ACE-CHARSET"
- BADcHARSET = *
- .ASC "eRROR ATTEMPTING TO B-LOAD "
- .BYTE CHRqUOTE
- .ASC "ACE-CHARSET"
- .BYTE CHRqUOTE
- .ASC ", ABORTING."
- .BYTE CHRcr,0
-
- LOADsHELL = *
- LDA #0
- LDX 186
- LDY #0
- JSR KERNELsETLFS
- LDA #2
- LDX #<LOADsHELLnAME
- LDY #>LOADsHELLnAME
- JSR KERNELsETNAM
- LDA #0
- LDX #<ACEsHELLaDDRESS
- LDY #>ACEsHELLaDDRESS
- JSR KERNELlOAD
- BCS +
- CLC
- RTS
- + LDA #<BADsHELL
- LDY #>BADsHELL
- JSR PUTS
- SEC
- RTS
-
- LOADsHELLnAME = *
- .ASC "SH"
- BADsHELL = *
- .ASC "eRROR ATTEMPTING TO B-LOAD "
- .BYTE CHRqUOTE
- .ASC "SH"
- .BYTE CHRqUOTE
- .ASC ", ABORTING."
- .BYTE CHRcr,0
-
- SCREENiNIT = *
- LDA #147
- JSR $FFD2
- LDA SYSnAME+0
- LDY SYSnAME+1
- JSR PUTS
- RTS
-
- DISPLAYdATE = *
- LDA #<DATEbUF
- LDY #>DATEbUF
- JSR GETDATE
- ;** YEAR
- LDA DATEbUF+0
- LDX #11
- JSR PUTdIGITS
- LDA DATEbUF+1
- LDX #13
- JSR PUTdIGITS
- ;** MONTH
- LDA DATEbUF+2
- CMP #$10
- BCC +
- SEC
- SBC #$10-10
- + TAX
- LDA MONTHsTR+0,X
- STA DATEsTR+7
- LDA MONTHsTR+13,X
- STA DATEsTR+8
- LDA MONTHsTR+26,X
- STA DATEsTR+9
- ;** DAY
- LDA DATEbUF+3
- LDX #4
- JSR PUTdIGITS
- ;** HOUR
- LDA DATEbUF+4
- LDX #"A"
- CMP #$00
- BNE +
- LDA #$12
- JMP PUThOUR
- + CMP #$12
- BCC PUThOUR
- LDX #"P"
- CMP #$12
- BEQ PUThOUR
- SEI
- SED
- SEC
- SBC #$12
- CLD
- CLI
- PUThOUR = *
- STX DATEsTR+26
- LDX #17
- JSR PUTdIGITS
- ;** MINUTE
- LDA DATEbUF+5
- LDX #20
- JSR PUTdIGITS
- ;** SECOND
- LDA DATEbUF+6
- LDX #23
- JSR PUTdIGITS
- ;** DAY OF WEEK
- LDA DATEbUF+7
- AND #$07
- TAX
- LDA DOWsTR+0,X
- STA DATEsTR+0
- LDA DOWsTR+8,X
- STA DATEsTR+1
- LDA DOWsTR+16,X
- STA DATEsTR+2
- LDA #<DATEsTR
- LDY #>DATEsTR
- JSR PUTS
- RTS
-
- PUTdIGITS = * ;( .a=NUM, .x=OFFSET )
- PHA
- LSR
- LSR
- LSR
- LSR
- ORA #$30
- STA DATEsTR,X
- PLA
- AND #$0F
- ORA #$30
- STA DATEsTR+1,X
- RTS
-
- DATEsTR = *
- ;0123456789012345678901234567
- .ASC "tUE-05-mAY-1993 11:34:12 PM"
- .BYTE 13,13,0
- DATEbUF .BUF 10
- DOWsTR = *
- .ASC "*smtwtfs"
- .ASC "*UOUEHRA"
- .ASC "*NNEDUIT"
- MONTHsTR = *
- .ASC "*jfmamjjasond"
- .ASC "*AEAPAUUUECOE"
- .ASC "*NBRRYNLGPTVC"
-
- TRYdATE = 10
-
- SETdATE = *
- LDY #$82
- - STY TRYdATE
- LDA (CONFIGbUF),Y
- CMP #$FF
- BEQ +
- JSR CMDoPEN
- BCS +
- LDA #<QUERYdATEsTR
- LDY #>QUERYdATEsTR
- JSR CMDsEND
- BCS QUERYeRROR
- LDA #<DATEbUF
- LDY #>DATEbUF
- LDX #9
- JSR CMDdATA
- BCS QUERYeRROR
- JSR CMDcLOSE
- JMP CONVERTcMDdATE
-
- QUERYeRROR = *
- JSR CMDcLOSE
- + INC TRYdATE
- LDY TRYdATE
- CPY #$86
- BCC -
-
- SETdEFAULTdATE = *
- LDA CONFIGbUF
- LDY CONFIGbUF+1
- CLC
- ADC #$86
- BCC +
- INY
- + JMP SETDATE
-
- QUERYdATEsTR = *
- .ASC "T-RB"
- .BYTE 13,0
-
- CONVERTcMDdATE = *
- LDA DATEbUF+4
- LDX DATEbUF+7
- BEQ +
- SEI
- SED
- CLC
- ADC #$12
- CLD
- CLI
- + CMP #$12
- BNE +
- LDA #$00
- + CMP #$24
- BNE +
- LDA #$12
- + STA DATEbUF+4
- CLC
- LDA DATEbUF+0
- ADC #$51
- STA DATEbUF+7
- LDX #$19
- LDA DATEbUF+1
- CMP #$70
- BCS +
- LDX #$20
- + STX DATEbUF+0
- LDA #<DATEbUF
- LDY #>DATEbUF
- JSR SETDATE
- RTS
-
- CMDoPEN = * ;( .a=DEVICE ) : .cs=ERR
- TAX
- LDA #6
- LDY #15
- JSR KERNELsETLFS
- LDA #0
- JSR KERNELsETNAM
- JSR KERNELoPEN
- RTS
-
- CMDcLOSE = * ;()
- CLC
- LDA #6
- JSR KERNELcLOSE
- RTS
-
- CMDsEND = * ;( (.ay)=CMDsTRz ) : .cs=ERR
- STA $40
- STY $41
- LDX #6
- JSR KERNELcHKOUT
- BCC +
- RTS
- + LDY #0
- - LDA ($40),Y
- BEQ +
- JSR $FFD2
- INY
- BNE -
- + JSR KERNELcLRCHN
- CLC
- RTS
-
- CMDdATA = * ;( (.ay)=CMDbUF, .x=LEN ) : .cs=ERR
- STA $40
- STY $41
- STX $42
- LDX #6
- JSR KERNELcHKIN
- BCC +
- RTS
- + LDX #0
- JSR KERNELcHRIN
- CMP #"0"
- BCC ++
- CMP #"9"+1
- BCS ++
- BADdATA = *
- - JSR KERNELcHRIN
- BCS +
- BIT ST
- BVS +
- CMP #13
- BNE -
- + JSR KERNELcLRCHN
- SEC
- RTS
- + LDY #0
- STA ($40),Y
- INY
- - JSR KERNELcHRIN
- STA ($40),Y
- INY
- CPY $42
- BCC -
- CMP #13
- BNE BADdATA
- JSR KERNELcLRCHN
- CLC
- RTS
-
- GETrAMLINKpARMS = *
- LDY #$80
- LDA (CONFIGbUF),Y
- JSR CMDoPEN
- BCS RLpARMSeRROR
-
- ;** RAMLINK RAM ACCESS
- LDA #<PARTrLcMD
- LDY #>PARTrLcMD
- JSR CMDsEND
- BCS RLpARMSeRROR
- LDA #<RLiDENT
- LDY #>RLiDENT
- JSR CHECKpARTITION
- BCS +
- STA ACErAMLINKsTART
- STY ACErAMLINKsTART+1
- STX ACErAMLINKbANKS
-
- ;** INDIRECT REU ACCESS
- + LDA #<PARTrLREUcMD
- LDY #>PARTrLREUcMD
- JSR CMDsEND
- BCS RLpARMSeRROR
- LDA #<RLREUiDENT
- LDY #>RLREUiDENT
- JSR CHECKpARTITION
- BCS RLpARMSeRROR
- STA ACErAMLINKrEUsTART
- STY ACErAMLINKrEUsTART+1
- STX ACErAMLINKrEUbANKS
-
- RLpARMSeRROR = *
- JSR CMDcLOSE
- RTS
-
- CHECKpARTITION = * ;( (.ay)=NAME ) : .cs=ERR, .ay=START, .x=BANKS
- STA $44
- STY $45
- LDA #<PARTITIONbUF
- LDY #>PARTITIONbUF
- LDX #31
- JSR CMDdATA
- BCS CHECKeRReXIT
- LDA PARTITIONbUF+0
- CMP #7
- BNE CHECKeRReXIT
- LDY #0
- - LDA ($44),Y
- BEQ +
- CMP PARTITIONbUF+3,Y
- BNE CHECKeRReXIT
- INY
- BNE -
- + LDA PARTITIONbUF+21
- LDY PARTITIONbUF+20
- LDX PARTITIONbUF+28
- CLC
- RTS
-
- CHECKeRReXIT = *
- SEC
- RTS
-
- PARTrLcMD = *
- .ASC "G-P"
- .BYTE 31,0
- RLiDENT = *
- .ASC "RL-RAM"
- .BYTE $A0,0
- PARTrLREUcMD = *
- .ASC "G-P"
- .BYTE 30,0
- RLREUiDENT = *
- .ASC "INDIRECT-REU"
- .BYTE $A0,0
- PARTITIONbUF .BUF 35
-
- PUTNUM = * ;( [$44]=NUM, .a=WIDTH )
- PHA
- LDA #<OUTCHAR
- LDY #>OUTCHAR
- STA $80
- STY $81
- LDX #$44
- PLA
- JSR UTOA
- JSR PUTCOMMA
- LDX #0
- - LDA OUTCHAR,X
- BEQ +
- JSR CHROUT
- INX
- BNE -
- + RTS
- OUTCHAR .BUF 11
-
- PUTCOMMA = * ;( OUTCHAR )
- LDX #$FF
- - INX
- LDA OUTCHAR,X
- BNE -
- - DEX
- DEX
- DEX
- DEX
- CPX #$80
- BCC +
- RTS
- + CPX #0
- BCS +
- RTS
- + LDA OUTCHAR,X
- CMP #" "
- BNE +
- RTS
- + STX $44
- LDY #0
- - LDA OUTCHAR+1,Y
- STA OUTCHAR,Y
- INY
- CPY $44
- BCC -
- LDA #","
- STA OUTCHAR,Y
- JMP --
- RTS
-
- DISPLAYaVAIL = * ;( (.ay)=NAME, (.x,$45)=BANKS )
- STA $40
- STY $41
- STX $44
- LDY #0
- - LDA ($40),Y
- JSR CHROUT
- INY
- CPY #6
- BCC -
- LDA #":"
- JSR CHROUT
- TXA
- CLC
- ADC TOTALbANKS
- STA TOTALbANKS
- LDA $45
- ADC TOTALbANKS+1
- STA TOTALbANKS+1
- LDA #0
- STA $46
- STA $47
- LDX #6
- - ASL $44
- ROL $45
- ROL $46
- ROL $47
- DEX
- BNE -
- LDA #6
- JSR PUTNUM
- LDA #"k"
- JSR CHROUT
- RTS
-
- ADDtOfREE = * ;( [$44]=BYTES )
- CLC
- LDA $44
- ADC ACEfREEmEMORY+0
- STA ACEfREEmEMORY+0
- LDA $45
- ADC ACEfREEmEMORY+1
- STA ACEfREEmEMORY+1
- LDA $46
- ADC ACEfREEmEMORY+2
- STA ACEfREEmEMORY+2
- BCC +
- INC ACEfREEmEMORY+3
- + RTS
-
- DISPLAYfREE = * ;( [$44]=BYTES )
- LDA #<FREEmSG
- LDY #>FREEmSG
- JSR PUTS
- LDA #10
- JSR PUTNUM
- LDA #13
- JSR CHROUT
- RTS
- FREEmSG = *
- .ASC " FREE:"
- .BYTE 0
-
- RESETfREE = *
- LDA #0
- LDX #3
- - STA $44,X
- DEX
- BPL -
- RTS
-
- INTERNALmEMORY = *
- LDA #ACEmEMiNTERNAL
- LDX #255
- SEI
- JSR TESTmEMORYtYPE
- CLI
- STA ACEiNTERNALbANKS
- PHA
- JSR INSTALLiNTERNvECTORS
- PLA
- TAX
- LDA #0
- STA $45
- LDA #<INTERNALnAME
- LDY #>INTERNALnAME
- JSR DISPLAYaVAIL
- JSR RESETfREE
-
- ;** RAM0
- LDA #ACEmEMiNTERNAL
- STA ZP+3
- LDA #0
- STA ACEiNTERNALcUR
- LDA RAM0fREEmAP+0
- LDY RAM0fREEmAP+1
- STA ACErAM0fREEMAP+0
- STY ACErAM0fREEMAP+1
- LDX #0
- STA ZP+0
- STY ZP+1
- STX ZP+2
- LDY #$A3
- BIT SYStYPE
- BMI +
- LDY #$C1
- + LDA (CONFIGbUF),Y
- TAY
- LDA #1
- LDX #>ACEaPPaDDRESS
- JSR INITbANKS
- JSR FREErAM0aFTERkERNEL
-
- ;** RAM1
- BIT SYStYPE
- BPL EXPiNTERNAL64
- LDA #$00
- STA ZP+0
- LDY #$A0
- LDA (CONFIGbUF),Y
- STA ZP+1
- STA ACErAM1fREEMAP
- LDA #1
- STA ZP+2
- LDY #$A1
- LDA (CONFIGbUF),Y
- TAY
- LDA #2
- LDX ZP+1
- INX
- JSR INITbANKS
-
- ;** RAM2-7 C128
- EXPiNTERNAL128 = *
- LDA #2
- STA ZP+2
- LDA #$00
- LDY #$04
- STA ZP+0
- STY ZP+1
- LDY #$A5
- LDA (CONFIGbUF),Y
- LDX ACEiNTERNALbANKS
- JSR MIN
- STA ACEiNTERNALbANKS
- LDX #$05
- LDY #$FF
- JSR INITbANKS
- JSR ADDtOfREE
- JSR DISPLAYfREE
- RTS
-
- ;** RAM1-3 C64
- EXPiNTERNAL64 = *
- LDA #1
- STA ACEiNTERNALbANKS
- JSR ADDtOfREE
- JSR DISPLAYfREE
- RTS
-
- INTERNALnAME = *
- .ASC "INTERN"
-
- RESERVEtpa = *
- LDY #$A8
- BIT SYStYPE
- BMI +
- LDY #$C6
- + LDA (CONFIGbUF),Y
- STA $40
- LDY #>ACEaPPaDDRESS
- LDA #$FE
- CPY $40
- BCS +
- - STA (RAM0fREEmAP),Y
- INY
- CPY $40
- BCC -
- + SEC
- LDA $40
- SBC #>ACEaPPaDDRESS
- STA $40
- SEC
- LDA ACEfREEmEMORY+1
- SBC $40
- STA ACEfREEmEMORY+1
- LDA ACEfREEmEMORY+2
- SBC #0
- STA ACEfREEmEMORY+2
- LDA ACEfREEmEMORY+3
- SBC #0
- STA ACEfREEmEMORY+3
- RTS
-
- FREErAM0aFTERkERNEL = *
- ;** FREE END.KERNEL->ST.SHELL
- LDY ACEeNDpAGE
- CPY #>ACEaPPaDDRESS
- BCS +
- LDA #$00
- - STA (RAM0fREEmAP),Y
- INY
- CPY #>ACEaPPaDDRESS
- BCC -
- + SEC
- LDA #>ACEaPPaDDRESS
- SBC ACEeNDpAGE
- STA $40
- CLC
- LDA $45
- ADC $40
- STA $45
- BCC +
- INC $46
- BNE +
- INC $47
- + RTS
-
- INSTALLiNTERNvECTORS = *
- BIT SYStYPE
- BPL INSTALLvECTORS64
- LDA ACEiNTERNALbANKS
- CMP #2
- BCS +
- RTS
- + SEI
- LDA #2
- LDY #ACEmEMiNTERNAL
- STA ZP+2
- STY ZP+3
- - LDA #$05
- LDY #$FF
- STA ZP+0
- STY ZP+1
- STA ZW+0
- STY ZW+1
- LDA #<251
- LDY #>251
- JSR STASH
- INC ZP+2
- LDA ZP+2
- CMP ACEiNTERNALbANKS
- BCC -
- CLI
- RTS
-
- INSTALLvECTORS64 = *
- LDX #$3F
- - LDA VECTORcODE64,X
- STA $FFC0,X
- DEX
- BPL -
- ;XX COPY TO EXP BANKS
- RTS
-
- VECTORcODE64 = *
- .BYTE $00
- ;XX VECTOR DISPATCH CODE HERE
-
- REUmEMORY = *
- LDA #ACEmEMreu
- LDX #255
- JSR TESTmEMORYtYPE
- STA ACErEUbANKS
- TAX
- BNE +
- LDA ACErAMLINKrEUbANKS
- BEQ +
- RTS
- + LDA #0
- STA $45
- LDA #<REUnAME
- LDY #>REUnAME
- JSR DISPLAYaVAIL
- JSR RESETfREE
- LDA #ACEmEMreu
- STA ZP+3
- LDY #$A6
- BIT SYStYPE
- BMI +
- LDY #$C2
- + LDA (CONFIGbUF),Y
- STA ACErEUsTART
- STA ACErEUcUR
- LDY #$A7
- BIT SYStYPE
- BMI +
- LDY #$C3
- + LDA (CONFIGbUF),Y
- LDX ACErEUbANKS
- JSR MIN
- STA ACErEUbANKS
- LDA #$00
- LDY #$FF
- LDX ACErEUsTART
- STA ZP+0
- STY ZP+1
- STX ZP+2
- LDA ACErEUbANKS
- LDX #$00
- LDY #$FF
- JSR INITbANKS
- JSR ADDtOfREE
- JSR DISPLAYfREE
- RTS
- REUnAME = *
- .ASC "REU "
-
- RLREUmEMORY = *
- LDA ACErEUbANKS
- BEQ +
- LDA #0
- STA ACErAMLINKrEUbANKS
- - RTS
- + LDX ACErAMLINKrEUbANKS
- BEQ -
- LDA #0
- STA $45
- LDA #<RLREUnAME
- LDY #>RLREUnAME
- JSR DISPLAYaVAIL
- JSR RESETfREE
- LDA #ACEmEMrlreu
- STA ZP+3
- LDY #$A6
- BIT SYStYPE
- BMI +
- LDY #$C2
- + LDA (CONFIGbUF),Y
- STA ACErEUsTART ;**SIC
- STA ACErAMLINKrEUcUR
- LDY #$A7
- BIT SYStYPE
- BMI +
- LDY #$C3
- + LDA (CONFIGbUF),Y
- LDX ACErAMLINKrEUbANKS
- JSR MIN
- STA ACErAMLINKrEUbANKS
- LDA #$00
- LDY #$FF
- LDX ACErAMLINKrEUsTART
- STA ZP+0
- STY ZP+1
- STX ZP+2
- LDA ACErAMLINKrEUbANKS
- LDX #$00
- LDY #$FF
- JSR INITbANKS
- JSR ADDtOfREE
- JSR DISPLAYfREE
- RTS
- RLREUnAME = *
- .ASC "RL-REU"
-
- RLmEMORY = *
- LDX ACErAMLINKbANKS
- LDA #0
- STA $45
- LDA #<RLnAME
- LDY #>RLnAME
- JSR DISPLAYaVAIL
- JSR RESETfREE
- LDY #$81
- LDA (CONFIGbUF),Y
- LDX ACErAMLINKbANKS
- JSR MIN
- STA ACErAMLINKbANKS
- LDA #ACEmEMrl
- STA ZP+3
- LDA #$00
- LDY #$FF
- LDX #0
- STX ACErAMLINKcUR
- STA ZP+0
- STY ZP+1
- STX ZP+2
- LDA ACErAMLINKbANKS
- LDX #$00
- LDY #$FF
- JSR INITbANKS
- JSR ADDtOfREE
- JSR DISPLAYfREE
- RTS
- RLnAME = *
- .ASC "RL-RAM"
-
- TOTALmEMORY = *
- LDX TOTALbANKS
- LDA TOTALbANKS+1
- STA $45
- LDA #<TOTALnAME
- LDY #>TOTALnAME
- JSR DISPLAYaVAIL
- LDX #3
- - LDA ACEfREEmEMORY,X
- STA $44,X
- DEX
- BPL -
- JSR DISPLAYfREE
- LDA #13
- JSR CHROUT
- JSR RESERVEtpa
- RTS
- TOTALnAME = *
- .ASC "TOTAL "
- RTS
-
- ENDbANK = 10 ;(1)
- STARTfREE = 11 ;(1)
- ENDfREE = 12 ;(1)
-
- INITbANKS = * ;( [ZP]=FIRSTfREEMAP, .a=ENDbANK+1, .x=STARTfREE, .y=ENDfREE+1 )
- STA ENDbANK
- STX STARTfREE
- STY ENDfREE
- LDA #<FREEMAP
- LDY #>FREEMAP
- STA ZW
- STY ZW+1
- LDX #0
- LDA #$FF
- - STA FREEMAP,X
- INX
- BNE -
- LDX STARTfREE
- CPX ENDfREE
- BCS FREEnEXTbANK
- LDA #$00
- - STA FREEMAP,X
- INX
- CPX ENDfREE
- BCC -
-
- FREEnEXTbANK = *
- LDA ZP+2
- CMP ENDbANK
- BCS +
- LDA #<256
- LDY #>256
- JSR STASH
- INC ZP+2
- SEC
- LDA ENDfREE
- SBC STARTfREE
- CLC
- ADC $45
- STA $45
- BCC FREEnEXTbANK
- INC $46
- BNE FREEnEXTbANK
- INC $47
- JMP FREEnEXTbANK
- + RTS
-
- MIN = * ;( .a=NUM1, .x=NUM2 ) : .a=MIN
- STX $40
- CMP $40
- BCC +
- LDA $40
- + RTS
-
- CHROUTsAVE .BUF 1
-
- CHROUT = *
- JSR $FFD2
- STY CHROUTsAVE
- LDY #0
- STA (TITLEpTR),Y
- INC TITLEpTR+0
- BNE +
- INC TITLEpTR+1
- + LDY CHROUTsAVE
- CLC
- RTS
-
- FREEMAP = *
- TITLE = FREEMAP+256
- CP.S
- 458
- ;*** CP PROGRAM ***
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:CP"
-
- JMP COPYMAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
- CHRcr = $0D
- CHRqUOTE = $22
- OVERWRITEaLLfLAG .BUF 1
- ABORTfLAG .BUF 1
-
- ;******** STANDARD LIBRARY ********
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- ;===COPY LIBRARY===
- COPYbUFFERpTR = 2
- COPYbUFFERlENGTH = 4
-
- GETbUFFERpARMS = *
- LDA #<CPeND
- LDY #>CPeND
- STA COPYbUFFERpTR
- STY COPYbUFFERpTR+1
- SEC
- LDA ACEsTACKpTR
- SBC COPYbUFFERpTR
- STA COPYbUFFERlENGTH
- LDA ACEsTACKpTR+1
- SBC COPYbUFFERpTR+1
- STA COPYbUFFERlENGTH+1
- RTS
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- GETlASTaRG = *
- LDA ACEaRGC
- LDY ACEaRGC+1
- SEC
- SBC #1
- BCS +
- DEY
- + JMP GETARG
-
- ;===COPY===
- COPYiNfILE = 6
- COPYoUTfILE = 7
- COPYiNnAME = 8
- COPYoUTnAME = 10
-
- COPYMAIN = *
- LDA #0
- STA OVERWRITEaLLfLAG
- STA ABORTfLAG
- JSR GETbUFFERpARMS
- ;** CHECK FOR AT LEAST THREE ARGUMENTS
- LDA ACEaRGC+1
- BNE +
- LDA ACEaRGC
- CMP #3
- BCC COPYuSAGEeRROR
- ;** CHECK IF DESTINATION IS A DIRECTORY
- + JSR GETlASTaRG
- JSR ISDIR
- CPY #0
- BEQ +
- JMP COPYtOdIR
- ;** CHECK FOR EXACTLY THREE PARAMETERS
- + LDA ACEaRGC+1
- BNE COPYuSAGEeRROR
- LDA ACEaRGC
- CMP #3
- BNE COPYuSAGEeRROR
- ;** GET BUFFER PARAMETERS
- LDA #1
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPYiNnAME
- STY COPYiNnAME+1
- LDA #2
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPYoUTnAME
- STY COPYoUTnAME+1
- JSR COPYFILE
- RTS
-
- COPYuSAGEeRROR = *
- LDA #<COPYuSAGEeRRORmSG
- LDY #>COPYuSAGEeRRORmSG
- LDX #STDERR
- JSR FPUTS
- RTS
- COPYuSAGEeRRORmSG = *
- .ASC "USAGE: CP FROMFILE TOFILE"
- .BYTE CHRcr
- .ASC " CP FROMFILE1 FROM2 ...FROMn TODIR"
- .BYTE CHRcr,0
-
- COPYFILE = *
- ;** OPEN FILES
- LDA COPYiNnAME
- LDY COPYiNnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- LDA COPYiNnAME
- LDY COPYiNnAME+1
- JMP COPYoPENeRROR
- + STA COPYiNfILE
- COPYFILEoUTPUT = *
- LDA COPYoUTnAME
- LDY COPYoUTnAME+1
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN
- BCC COPYwRITEoK
- LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BEQ +
- - LDA COPYiNfILE
- JSR CLOSE
- LDA COPYoUTnAME
- LDY COPYoUTnAME+1
- JMP COPYoPENeRROR
- + JSR COPYaSKoVERWRITE
- BEQ +
- LDA COPYiNfILE
- JSR CLOSE
- SEC
- RTS
- + JSR COPYrEMOVEoUTFILE
- JMP COPYFILEoUTPUT
-
- COPYwRITEoK = *
- STA COPYoUTfILE
- JSR COPYfILEcONTENTS
- LDA COPYoUTfILE
- JSR CLOSE
- LDA COPYiNfILE
- JSR CLOSE
- RTS
-
- COPYaSKoVERWRITE = * ;() : .cs=QUIT, .eq=YES, .ne=NO
- LDA OVERWRITEaLLfLAG
- BEQ +
- LDA #0
- RTS
- / LDA #<COPYaSKoVERWRITEmSG
- LDY #>COPYaSKoVERWRITEmSG
- JSR PUTS
- LDA COPYoUTnAME
- LDY COPYoUTnAME+1
- JSR PUTS
- LDA #<COPYaSKoVERWRITEmSG2
- LDY #>COPYaSKoVERWRITEmSG2
- JSR PUTS
- JSR GETCHAR
- CMP #CHRcr
- BEQ -
- PHA
- - JSR GETCHAR
- CMP #CHRcr
- BNE -
- PLA
- CMP #"Q"
- BNE +
- - LDA #$FF
- STA ABORTfLAG
- SEC
- RTS
- + CMP #"q"
- BEQ -
- CMP #"A"
- BNE +
- - LDA #$FF
- STA OVERWRITEaLLfLAG
- LDA #"Y"
- + CMP #"a"
- BEQ -
- CMP #"Y"
- BEQ +
- CMP #"y"
- + CLC
- RTS
- COPYaSKoVERWRITEmSG = *
- .ASC "oVERWRITE "
- .BYTE CHRqUOTE,0
- COPYaSKoVERWRITEmSG2 = *
- .BYTE CHRqUOTE
- .ASC " (Y/N/A/Q)? "
- .BYTE 0
-
- COPYrEMOVEoUTFILE = *
- LDA COPYoUTnAME
- LDY COPYoUTnAME+1
- STA ZP
- STY ZP+1
- JSR REMOVE
- RTS
-
- COPYfILEcONTENTS = *
- ;** COPY FILE CONTENTS
- LDA COPYbUFFERpTR
- LDY COPYbUFFERpTR+1
- STA ZP
- STY ZP+1
- - LDA COPYbUFFERlENGTH
- LDY COPYbUFFERlENGTH+1
- LDX COPYiNfILE
- JSR READ
- BCS COPYfILEeRROR
- BEQ +
- LDX COPYoUTfILE
- JSR WRITE
- BCC -
- BCS COPYfILEeRROR
- + RTS
-
- COPYoPENnAME = 14
- COPYoPENeRROR = *
- STA COPYoPENnAME
- STY COPYoPENnAME+1
- LDA #<COPYoPENeRRORmSG1
- LDY #>COPYoPENeRRORmSG1
- LDX #STDERR
- JSR FPUTS
- LDA COPYoPENnAME
- LDY COPYoPENnAME+1
- LDX #STDERR
- JSR FPUTS
- LDA #<COPYoPENeRRORmSG2
- LDY #>COPYoPENeRRORmSG2
- LDX #STDERR
- JSR FPUTS
- RTS
-
- COPYoPENeRRORmSG1 = *
- .ASC "eRROR OPENING FILE "
- .BYTE CHRqUOTE
- .BYTE 0
- COPYoPENeRRORmSG2 = *
- .BYTE CHRqUOTE
- .BYTE CHRcr
- .BYTE 0
-
- COPYfILEeRROR = *
- LDA #<COPYfILEeRRORmSG
- LDY #>COPYfILEeRRORmSG
- LDX #STDERR
- JMP FPUTS
- COPYfILEeRRORmSG = *
- .ASC "fILE DATA ERROR!"
- .BYTE CHRcr
- .BYTE 0
-
- COPYaRG = 12
- LASTaRG = 14
- COPYtOdIR = *
- LDA #1
- LDY #0
- STA COPYaRG
- STY COPYaRG+1
- - LDA ACEaRGC
- LDY ACEaRGC+1
- SEC
- SBC #1
- BCS +
- DEY
- + CMP COPYaRG
- BNE +
- CPY COPYaRG+1
- BEQ COPYtOdIReXIT
- + JSR STOPKEY
- BCS COPYtOdIRsTOPPED
- LDA COPYaRG
- LDY COPYaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPYiNnAME
- STY COPYiNnAME+1
- JSR COPYfILEtOdIR
- LDA ABORTfLAG
- BNE COPYtOdIRsTOPPED
- INC COPYaRG
- BNE +
- INC COPYaRG+1
- + JMP -
-
- COPYtOdIReXIT = *
- RTS
- COPYtOdIRsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- SCANpOS = 6
-
- COPYfILEtOdIR = *
- ;** GENERATE OUTPUT FILE NAME
- JSR GETlASTaRG
- LDY #0
- - LDA (ZP),Y
- BEQ +
- STA COPYnAMEbUF,Y
- INY
- BNE -
- + TYA
- TAX
- ;** EXTRACT BASENAME
- LDY #0
- STY SCANpOS
- - LDA (COPYiNnAME),Y
- BEQ +
- CMP #":"
- BNE BASENAMEnEXT
- INY
- STY SCANpOS
- DEY
- BASENAMEnEXT = *
- INY
- BNE -
-
- + LDY SCANpOS
- - LDA (COPYiNnAME),Y
- STA COPYnAMEbUF,X
- BEQ +
- INX
- INY
- BNE -
- ;** COPY FILE
- + LDA #<COPYnAMEbUF
- LDY #>COPYnAMEbUF
- STA COPYoUTnAME
- STY COPYoUTnAME+1
- JSR COPYtOdIRsTATUS
- JSR COPYFILE
- RTS
-
- NAMEsPACE .BUF 1
-
- COPYtOdIRsTATUS = *
- LDA COPYiNnAME
- LDY COPYiNnAME+1
- JSR PUTS
-
- LDY #255
- - INY
- LDA (COPYiNnAME),Y
- BNE -
- TYA
- - SEC
- SBC #10
- BCS -
- ADC #10
- STA NAMEsPACE
- STA NAMEsPACE
- SEC
- LDA #10
- SBC NAMEsPACE
- STA NAMEsPACE
-
- - LDA #" "
- JSR PUTCHAR
- DEC NAMEsPACE
- BNE -
-
- LDA COPYoUTnAME
- LDY COPYoUTnAME+1
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- ;===THE END===
- CPbSS = *
- COPYnAMEbUF = CPbSS+0
- CPeND = CPbSS+256
- CRC32.S
- 394
- ;*** CRC32B PROGRAM - BY cRAIG bRUCE - 14-oCT-93
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:CRC32B"
-
- JMP CRCmAIN
- .BYTE ACEid1,ACEid2,ACEid3
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- CRCtABLE0 = *
- .BYTE $00,$96,$2C,$BA,$19,$8F,$35,$A3,$32,$A4,$1E,$88,$2B,$BD,$07,$91
- .BYTE $64,$F2,$48,$DE,$7D,$EB,$51,$C7,$56,$C0,$7A,$EC,$4F,$D9,$63,$F5
- .BYTE $C8,$5E,$E4,$72,$D1,$47,$FD,$6B,$FA,$6C,$D6,$40,$E3,$75,$CF,$59
- .BYTE $AC,$3A,$80,$16,$B5,$23,$99,$0F,$9E,$08,$B2,$24,$87,$11,$AB,$3D
- .BYTE $90,$06,$BC,$2A,$89,$1F,$A5,$33,$A2,$34,$8E,$18,$BB,$2D,$97,$01
- .BYTE $F4,$62,$D8,$4E,$ED,$7B,$C1,$57,$C6,$50,$EA,$7C,$DF,$49,$F3,$65
- .BYTE $58,$CE,$74,$E2,$41,$D7,$6D,$FB,$6A,$FC,$46,$D0,$73,$E5,$5F,$C9
- .BYTE $3C,$AA,$10,$86,$25,$B3,$09,$9F,$0E,$98,$22,$B4,$17,$81,$3B,$AD
- .BYTE $20,$B6,$0C,$9A,$39,$AF,$15,$83,$12,$84,$3E,$A8,$0B,$9D,$27,$B1
- .BYTE $44,$D2,$68,$FE,$5D,$CB,$71,$E7,$76,$E0,$5A,$CC,$6F,$F9,$43,$D5
- .BYTE $E8,$7E,$C4,$52,$F1,$67,$DD,$4B,$DA,$4C,$F6,$60,$C3,$55,$EF,$79
- .BYTE $8C,$1A,$A0,$36,$95,$03,$B9,$2F,$BE,$28,$92,$04,$A7,$31,$8B,$1D
- .BYTE $B0,$26,$9C,$0A,$A9,$3F,$85,$13,$82,$14,$AE,$38,$9B,$0D,$B7,$21
- .BYTE $D4,$42,$F8,$6E,$CD,$5B,$E1,$77,$E6,$70,$CA,$5C,$FF,$69,$D3,$45
- .BYTE $78,$EE,$54,$C2,$61,$F7,$4D,$DB,$4A,$DC,$66,$F0,$53,$C5,$7F,$E9
- .BYTE $1C,$8A,$30,$A6,$05,$93,$29,$BF,$2E,$B8,$02,$94,$37,$A1,$1B,$8D
-
- CRCtABLE1 = *
- .BYTE $00,$30,$61,$51,$C4,$F4,$A5,$95,$88,$B8,$E9,$D9,$4C,$7C,$2D,$1D
- .BYTE $10,$20,$71,$41,$D4,$E4,$B5,$85,$98,$A8,$F9,$C9,$5C,$6C,$3D,$0D
- .BYTE $20,$10,$41,$71,$E4,$D4,$85,$B5,$A8,$98,$C9,$F9,$6C,$5C,$0D,$3D
- .BYTE $30,$00,$51,$61,$F4,$C4,$95,$A5,$B8,$88,$D9,$E9,$7C,$4C,$1D,$2D
- .BYTE $41,$71,$20,$10,$85,$B5,$E4,$D4,$C9,$F9,$A8,$98,$0D,$3D,$6C,$5C
- .BYTE $51,$61,$30,$00,$95,$A5,$F4,$C4,$D9,$E9,$B8,$88,$1D,$2D,$7C,$4C
- .BYTE $61,$51,$00,$30,$A5,$95,$C4,$F4,$E9,$D9,$88,$B8,$2D,$1D,$4C,$7C
- .BYTE $71,$41,$10,$20,$B5,$85,$D4,$E4,$F9,$C9,$98,$A8,$3D,$0D,$5C,$6C
- .BYTE $83,$B3,$E2,$D2,$47,$77,$26,$16,$0B,$3B,$6A,$5A,$CF,$FF,$AE,$9E
- .BYTE $93,$A3,$F2,$C2,$57,$67,$36,$06,$1B,$2B,$7A,$4A,$DF,$EF,$BE,$8E
- .BYTE $A3,$93,$C2,$F2,$67,$57,$06,$36,$2B,$1B,$4A,$7A,$EF,$DF,$8E,$BE
- .BYTE $B3,$83,$D2,$E2,$77,$47,$16,$26,$3B,$0B,$5A,$6A,$FF,$CF,$9E,$AE
- .BYTE $C2,$F2,$A3,$93,$06,$36,$67,$57,$4A,$7A,$2B,$1B,$8E,$BE,$EF,$DF
- .BYTE $D2,$E2,$B3,$83,$16,$26,$77,$47,$5A,$6A,$3B,$0B,$9E,$AE,$FF,$CF
- .BYTE $E2,$D2,$83,$B3,$26,$16,$47,$77,$6A,$5A,$0B,$3B,$AE,$9E,$CF,$FF
- .BYTE $F2,$C2,$93,$A3,$36,$06,$57,$67,$7A,$4A,$1B,$2B,$BE,$8E,$DF,$EF
-
- CRCtABLE2 = *
- .BYTE $00,$07,$0E,$09,$6D,$6A,$63,$64,$DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF
- .BYTE $B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3,$6C,$6B,$62,$65,$01,$06,$0F,$08
- .BYTE $6E,$69,$60,$67,$03,$04,$0D,$0A,$B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1
- .BYTE $D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD,$02,$05,$0C,$0B,$6F,$68,$61,$66
- .BYTE $DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8,$07,$00,$09,$0E,$6A,$6D,$64,$63
- .BYTE $6B,$6C,$65,$62,$06,$01,$08,$0F,$B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4
- .BYTE $B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6,$69,$6E,$67,$60,$04,$03,$0A,$0D
- .BYTE $05,$02,$0B,$0C,$68,$6F,$66,$61,$DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA
- .BYTE $B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC,$63,$64,$6D,$6A,$0E,$09,$00,$07
- .BYTE $0F,$08,$01,$06,$62,$65,$6C,$6B,$D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0
- .BYTE $D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2,$0D,$0A,$03,$04,$60,$67,$6E,$69
- .BYTE $61,$66,$6F,$68,$0C,$0B,$02,$05,$BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE
- .BYTE $64,$63,$6A,$6D,$09,$0E,$07,$00,$BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB
- .BYTE $D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7,$08,$0F,$06,$01,$65,$62,$6B,$6C
- .BYTE $0A,$0D,$04,$03,$67,$60,$69,$6E,$D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5
- .BYTE $BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9,$66,$61,$68,$6F,$0B,$0C,$05,$02
-
- CRCtABLE3 = *
- .BYTE $00,$77,$EE,$99,$07,$70,$E9,$9E,$0E,$79,$E0,$97,$09,$7E,$E7,$90
- .BYTE $1D,$6A,$F3,$84,$1A,$6D,$F4,$83,$13,$64,$FD,$8A,$14,$63,$FA,$8D
- .BYTE $3B,$4C,$D5,$A2,$3C,$4B,$D2,$A5,$35,$42,$DB,$AC,$32,$45,$DC,$AB
- .BYTE $26,$51,$C8,$BF,$21,$56,$CF,$B8,$28,$5F,$C6,$B1,$2F,$58,$C1,$B6
- .BYTE $76,$01,$98,$EF,$71,$06,$9F,$E8,$78,$0F,$96,$E1,$7F,$08,$91,$E6
- .BYTE $6B,$1C,$85,$F2,$6C,$1B,$82,$F5,$65,$12,$8B,$FC,$62,$15,$8C,$FB
- .BYTE $4D,$3A,$A3,$D4,$4A,$3D,$A4,$D3,$43,$34,$AD,$DA,$44,$33,$AA,$DD
- .BYTE $50,$27,$BE,$C9,$57,$20,$B9,$CE,$5E,$29,$B0,$C7,$59,$2E,$B7,$C0
- .BYTE $ED,$9A,$03,$74,$EA,$9D,$04,$73,$E3,$94,$0D,$7A,$E4,$93,$0A,$7D
- .BYTE $F0,$87,$1E,$69,$F7,$80,$19,$6E,$FE,$89,$10,$67,$F9,$8E,$17,$60
- .BYTE $D6,$A1,$38,$4F,$D1,$A6,$3F,$48,$D8,$AF,$36,$41,$DF,$A8,$31,$46
- .BYTE $CB,$BC,$25,$52,$CC,$BB,$22,$55,$C5,$B2,$2B,$5C,$C2,$B5,$2C,$5B
- .BYTE $9B,$EC,$75,$02,$9C,$EB,$72,$05,$95,$E2,$7B,$0C,$92,$E5,$7C,$0B
- .BYTE $86,$F1,$68,$1F,$81,$F6,$6F,$18,$88,$FF,$66,$11,$8F,$F8,$61,$16
- .BYTE $A0,$D7,$4E,$39,$A7,$D0,$49,$3E,$AE,$D9,$40,$37,$A9,$DE,$47,$30
- .BYTE $BD,$CA,$53,$24,$BA,$CD,$54,$23,$B3,$C4,$5D,$2A,$B4,$C3,$5A,$2D
-
- ;******** STANDARD LIBRARY ********
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===CRC32===
- CRCaRG = 2
- CRCnAME = 4
- INbUFlEN = 6
-
- CRCmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE CRCeNOUGHaRGS
- LDA ACEaRGC+0
- CMP #2
- BCS CRCeNOUGHaRGS
-
- CRCuSAGE = *
- LDA #<CRCuSAGEmSG
- LDY #>CRCuSAGEmSG
- JMP EPUTS
-
- CRCuSAGEmSG = *
- .ASC "uSAGE: CRC32B FILE1 FILE2 ... FILEn"
- .BYTE CHRcr
- .BYTE 0
-
- CRCeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR+0
- SBC #<CRCiNbUF
- STA INbUFlEN+0
- LDA ACEsTACKpTR+1
- SBC #>CRCiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA CRCaRG+0
- STY CRCaRG+1
- - JSR STOPKEY
- BCS CRCsTOPPED
- LDA CRCaRG+0
- LDY CRCaRG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA CRCnAME
- STY CRCnAME+1
- ORA ZP+1
- BEQ CRCeXIT
- JSR CRC32
- BCC +
- JSR CRCeRROR
- + INC CRCaRG+0
- BNE +
- INC CRCaRG+1
- + JMP -
-
- CRCeXIT = *
- RTS
-
- CRCsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- CRCeRROR = *
- LDA #<CRCeRRORmSG1
- LDY #>CRCeRRORmSG1
- JSR EPUTS
- LDA CRCnAME+0
- LDY CRCnAME+1
- JSR EPUTS
- LDA #<CRCeRRORmSG2
- LDY #>CRCeRRORmSG2
- JMP EPUTS
-
- CRCeRRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
-
- CRCeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 8
- BUFcOUNT = 10
- INFILE = 12
-
- CRC32 = *
- ;** OPEN FILE
- LDA CRCnAME+0
- LDY CRCnAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR CRCbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- CH = 13 ;(1)
- CRCaCCUM = 34 ;(4)
- CRCtEMP = 38 ;(4)
-
- CRCbODY = *
- LDX #3
- LDA #$FF
- - STA CRCaCCUM,X
- DEX
- BPL -
- LDA #0
- STA BUFcOUNT+0
- STA BUFcOUNT+1
-
- ;***SCAN FILE
-
- NEXTcHAR = *
- JSR GETbYTE
- BCS CRCpRINT
- STA CH
-
- ;** CRC = 0Xffffffff;
- ;** WHILE( (C=GETC(FP)) != eof ) {$7b}
- ;** CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ (CRC^C) & 0Xff ];
- ;** {$7d}
- ;** RETURN( CRC^0Xffffffff );
-
- LDA CRCaCCUM+0 ;.x = (CRC^C) & 0Xff
- EOR CH
- TAX
-
- LDA CRCaCCUM+1 ;CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ .x ]
- EOR CRCtABLE0,X
- STA CRCaCCUM+0
- LDA CRCaCCUM+2
- EOR CRCtABLE1,X
- STA CRCaCCUM+1
- LDA CRCaCCUM+3
- EOR CRCtABLE2,X
- STA CRCaCCUM+2
- LDA CRCtABLE3,X
- STA CRCaCCUM+3
- JMP NEXTcHAR
-
- CRCpRINT = *
- LDA #<RESmSG1+8
- LDY #>RESmSG1+8
- STA SYSWORK+0
- STY SYSWORK+1
- LDY #9
- LDX #3
- - LDA CRCaCCUM,X
- EOR #$FF
- PHA
- LSR
- LSR
- LSR
- LSR
- JSR PUThEX
- PLA
- JSR PUThEX
- DEX
- BPL -
- LDA #<RESmSG1
- LDY #>RESmSG1
- JSR PUTS
- LDA CRCnAME+0
- LDY CRCnAME+1
- JSR PUTS
- LDA #<RESmSG2
- LDY #>RESmSG2
- JSR PUTS
- CLC
- RTS
-
- PUThEX = *
- AND #$0F
- ORA #$30
- CMP #$3A
- BCC +
- ADC #6
- + STA RESmSG1,Y
- INY
- RTS
-
- RESmSG1 = *
- .ASC "CRC32B = 12345678 FOR "
- .BYTE CHRqUOTE,0
- RESmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- GETbYTE = *
- LDA BUFcOUNT+0
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT+0
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT+0
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- LDA #<CRCiNbUF
- LDY #>CRCiNbUF
- STA ZP+0
- STY ZP+1
- STA BUFpTR+0
- STY BUFpTR+1
- LDA INbUFlEN+0
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT+0
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- ;===THE END===
- CRCbSS = *
- CRCiNbUF = CRCbSS
- CRC32A.S
- 308
- ;*** CRC32A PROGRAM - BY cRAIG bRUCE
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:CRC32A"
-
- JMP CRCmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===CRC32===
- CRCaRG = 2
- CRCnAME = 4
- INbUFlEN = 6
-
- CRCmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE CRCeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS CRCeNOUGHaRGS
-
- CRCuSAGE = *
- LDA #<CRCuSAGEmSG
- LDY #>CRCuSAGEmSG
- JMP EPUTS
-
- CRCuSAGEmSG = *
- .ASC "uSAGE: CRC32 FILE1 FILE2 ... FILEn"
- .BYTE CHRcr
- .BYTE 0
-
- CRCeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<CRCiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>CRCiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA CRCaRG
- STY CRCaRG+1
- - JSR STOPKEY
- BCS CRCsTOPPED
- LDA CRCaRG
- LDY CRCaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA CRCnAME
- STY CRCnAME+1
- ORA ZP+1
- BEQ CRCeXIT
- JSR CRC32
- BCC +
- JSR CRCeRROR
- + INC CRCaRG
- BNE +
- INC CRCaRG+1
- + JMP -
-
- CRCeXIT = *
- RTS
-
- CRCsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- CRCeRROR = *
- LDA #<CRCeRRORmSG1
- LDY #>CRCeRRORmSG1
- JSR EPUTS
- LDA CRCnAME
- LDY CRCnAME+1
- JSR EPUTS
- LDA #<CRCeRRORmSG2
- LDY #>CRCeRRORmSG2
- JMP EPUTS
-
- CRCeRRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
-
- CRCeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 8
- BUFcOUNT = 10
- INFILE = 12
-
- CRC32 = *
- ;** OPEN FILE
- LDA CRCnAME
- LDY CRCnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR CRCbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- ;CRC32 VERSION 1.0 FOR THE c-128 AND c-64 BY cRAIG bRUCE 23-mAY-92
-
- CH = 13 ;(1)
- CRCaCCUM = 34 ;(4)
-
- CRClOW = $B7
- CRCmID1 = $1D
- CRCmID2 = $C1
- CRChIGH = $04
-
- CRCbODY = *
- LDX #3
- LDA #0
- - STA CRCaCCUM,X
- DEX
- BPL -
- STA BUFcOUNT
- STA BUFcOUNT+1
-
- ;***SCAN FILE
-
- NEXTcHAR = *
- JSR GETbYTE
- BCS CRCpRINT
- STA CH
- LDX #8
-
- NEXTbIT = *
- ASL CH
- ROL CRCaCCUM+0
- ROL CRCaCCUM+1
- ROL CRCaCCUM+2
- ROL CRCaCCUM+3
- BCC +
- LDA CRCaCCUM+0
- EOR #CRClOW
- STA CRCaCCUM+0
- LDA CRCaCCUM+1
- EOR #CRCmID1
- STA CRCaCCUM+1
- LDA CRCaCCUM+2
- EOR #CRCmID2
- STA CRCaCCUM+2
- LDA CRCaCCUM+3
- EOR #CRChIGH
- STA CRCaCCUM+3
- + DEX
- BNE NEXTbIT
- JMP NEXTcHAR
-
- CRCpRINT = *
- LDA #<RESmSG1+9
- LDY #>RESmSG1+9
- STA SYSWORK+0
- STY SYSWORK+1
- LDX #CRCaCCUM
- LDA #10
- JSR UTOA
- LDA #" "
- STA RESmSG1+19
- LDA #<RESmSG1
- LDY #>RESmSG1
- JSR PUTS
- LDA CRCnAME
- LDY CRCnAME+1
- JSR PUTS
- LDA #<RESmSG2
- LDY #>RESmSG2
- JSR PUTS
- CLC
- RTS
-
- RESmSG1 = *
- .ASC "CRC32A = 1234567890 FOR "
- .BYTE CHRqUOTE,0
- RESmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- GETbYTE = *
- LDA BUFcOUNT
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- LDA #<CRCiNbUF
- LDY #>CRCiNbUF
- STA ZP
- STY ZP+1
- STA BUFpTR
- STY BUFpTR+1
- LDA INbUFlEN
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- ;===THE END===
- CRCbSS = *
- CRCiNbUF = CRCbSS
- DATE.S
- 58
- ;DATE PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@:DATE"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA #<DATEbUF
- LDY #>DATEbUF
- JSR GETDATE
- LDY #7
- - LDA DATEbUF,Y
- JSR GETASC
- PHA
- TXA
- LDX DATEnUMfIELDS,Y
- STA DATEnUM+1,X
- PLA
- STA DATEnUM,X
- DEY
- BPL -
- LDA #13
- STA DATEnUM+21
- LDA #<DATEnUM
- LDY #>DATEnUM
- STA ZP
- STY ZP+1
- LDA #22
- LDY #0
- LDX #STDOUT
- JMP WRITE
-
- GETASC = * ;( .a=BCD ) : .a=ASCHI, .x=ASCLO
- PHA
- AND #$0F
- ORA #$30
- TAX
- PLA
- LSR
- LSR
- LSR
- LSR
- ORA #$30
- RTS
-
- DATEnUM = *
- ;0123456789012345678901
- .ASC "1993/05/16-18:04:50.3Z"
- DATEnUMfIELDS = *
- .BYTE 0,2,5,8,11,14,17,20
- DATEsTR = *
- ;0123456789012345678901234567
- .ASC "sUN-16-mAY-1993 06:03:50 PM"
- .BYTE 0
- DATEbUF = *
- EIGHTY.S
- 10
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:EIGHTY"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA #80
- JMP CONSCREEN
- FAST.S
- 14
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:FAST"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA $D011
- AND #%11101111
- STA $D011
- LDA #$01
- STA $D030
- RTS
- FORTY.S
- 10
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:FORTY"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA #40
- JMP CONSCREEN
- GREP.S
- 507
- ;*** GREP PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:GREP"
-
- JMP GREPmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
- MAXlINElEN = 2049
-
- INVERSEfLAG .BUF 1
- IGNOREcASEfLAG .BUF 1
- DISPLAYfILENAMEfLAG .BUF 1
- ANCHORlEFTfLAG .BUF 1
- ANCHORrIGHTfLAG .BUF 1
- STRINGlEN .BUF 1
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===GREP===
- GREPaRG = 2
- GREPnAME = 4
- INbUFlEN = 6
- GREPsTRING = 8
-
- GREPmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA #0
- STA INVERSEfLAG
- STA IGNOREcASEfLAG
- STA DISPLAYfILENAMEfLAG
- STA ANCHORlEFTfLAG
- STA ANCHORrIGHTfLAG
- LDA ACEaRGC+1
- BNE GREPeNOUGHaRGS
- LDA ACEaRGC
- CMP #3
- BCS GREPeNOUGHaRGS
-
- GREPuSAGE = *
- LDA #<GREPuSAGEmSG
- LDY #>GREPuSAGEmSG
- JMP EPUTS
-
- GREPuSAGEmSG = *
- .ASC "USAGE: GREP [-[I][V]] [^]SUBSTR[$] FILES"
- .BYTE CHRcr,0
-
- GREPeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<GREPiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>GREPiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA GREPaRG
- STY GREPaRG+1
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE SUBSTRaRG
- INC GREPaRG
- - INY
- LDA (ZP),Y
- BEQ SUBSTRaRG
- CMP #"I"
- BNE +
- LDA #$FF
- STA IGNOREcASEfLAG
- + CMP #"V"
- BNE +
- LDA #$FF
- STA INVERSEfLAG
- + JMP -
-
- SUBSTRaRG = *
- LDA GREPaRG
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA GREPsTRING
- STY GREPsTRING+1
- BIT IGNOREcASEfLAG
- BPL +
- JSR FOLDsTRING
- + JSR CHECKaNCHORS
- INC GREPaRG
-
- FIRSTaRG = *
- LDA GREPaRG
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BNE +
- JMP GREPuSAGE
- + CLC
- LDA GREPaRG
- ADC #1
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BEQ NEXTaRG
- LDA #$FF
- STA DISPLAYfILENAMEfLAG
-
- NEXTaRG = *
- JSR STOPKEY
- BCS GREPsTOPPED
- LDA GREPaRG
- LDY GREPaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA GREPnAME
- STY GREPnAME+1
- ORA ZP+1
- BEQ GREPeXIT
- JSR GREP
- BCC +
- JSR GREPeRROR
- + INC GREPaRG
- BNE +
- INC GREPaRG+1
- + JMP NEXTaRG
-
- GREPeXIT = *
- RTS
-
- FOLDsTRING = *
- LDY #0
- - LDA (GREPsTRING),Y
- BNE +
- RTS
- + CMP #"a"
- BCC +
- CMP #"z"+1
- BCS +
- SEC
- SBC #"a"-"A"
- STA (GREPsTRING),Y
- + INY
- BNE -
- RTS
-
- CHECKaNCHORS = *
- LDY #0
- LDA (GREPsTRING),Y
- CMP #"^"
- BNE +
- LDA #$FF
- STA ANCHORlEFTfLAG
- INC GREPsTRING
- BNE +
- INC GREPsTRING+1
- + LDY #255
- - INY
- LDA (GREPsTRING),Y
- BNE -
- STY STRINGlEN
- DEY
- CPY #255
- BEQ +
- LDA (GREPsTRING),Y
- CMP #"$"
- BNE +
- LDA #$FF
- STA ANCHORrIGHTfLAG
- LDA #0
- STA (GREPsTRING),Y
- STY STRINGlEN
- + RTS
-
- GREPsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- GREPeRROR = *
- LDA #<GREPeRRORmSG1
- LDY #>GREPeRRORmSG1
- JSR EPUTS
- LDA GREPnAME
- LDY GREPnAME+1
- JSR EPUTS
- LDA #<GREPeRRORmSG2
- LDY #>GREPeRRORmSG2
- JMP EPUTS
-
- GREPeRRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
-
- GREPeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 10
- BUFcOUNT = 12
- INFILE = 14
-
- GREP = *
- ;** OPEN FILE
- LDA GREPnAME
- LDY GREPnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR GREPbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- LINElEN = $40 ;(2)
- LINEpTR = $42 ;(2)
-
- GREPbODY = *
- LDA #0
- STA BUFcOUNT
- STA BUFcOUNT+1
- - JSR GETLINE
- BCC +
- RTS
- + JSR CHECKlINE
- BIT INVERSEfLAG
- BMI +
- BCC -
- JSR WRITElINE
- JMP -
- + BCS -
- JSR WRITElINE
- JMP -
-
- LINErESET = $44 ;(2)
- STRINGpOS = $46 ;(1)
-
- CHECKlINE = * ;() : .cc=NO_MATCH, .cs=MATCH
- BIT ANCHORrIGHTfLAG
- BPL CHECKsUBSTR
- CLC
- LDA LINEpTR
- ADC LINElEN
- STA LINEpTR
- LDA LINEpTR+1
- ADC LINElEN+1
- STA LINEpTR+1
- SEC
- LDA LINEpTR
- SBC STRINGlEN
- STA LINEpTR
- LDA LINEpTR+1
- SBC #0
- STA LINEpTR+1
-
- CHECKsUBSTR = *
- LDA LINEpTR
- LDY LINEpTR+1
- STA LINErESET
- STY LINErESET+1
- INC LINErESET
- BNE +
- INC LINErESET+1
- + LDY #0
- STY STRINGpOS
-
- CHECKcHAR = *
- + LDY STRINGpOS
- LDA (GREPsTRING),Y
- BEQ ENDoFsTRING
- LDY #0
- CMP (LINEpTR),Y
- BNE MISMATCH
- - INC STRINGpOS
- INC LINEpTR
- BNE +
- INC LINEpTR+1
- + JMP CHECKcHAR
-
- MISMATCH = *
- LDY #0
- LDA (LINEpTR),Y
- BEQ ENDoFlINE
- BIT IGNOREcASEfLAG
- BPL +
- CMP #"a"
- BCC +
- CMP #"z"+1
- BCS +
- SEC
- SBC #"a"-"A"
- LDY STRINGpOS
- CMP (GREPsTRING),Y
- BEQ -
- + LDA LINErESET
- LDY LINErESET+1
- STA LINEpTR
- STY LINEpTR+1
- JMP CHECKsUBSTR
-
- ENDoFlINE = *
- CLC
- RTS
-
- ENDoFsTRING = *
- BIT ANCHORlEFTfLAG
- BMI +
- SEC
- RTS
- + LDA LINErESET
- BNE +
- DEC LINErESET+1
- + DEC LINErESET
- LDA LINErESET
- CMP #<GREPlINE
- BNE ENDoFlINE
- LDA LINErESET+1
- CMP #>GREPlINE
- BNE ENDoFlINE
- SEC
- RTS
-
- WRITElINE = *
- LDA DISPLAYfILENAMEfLAG
- BEQ +
- LDA GREPnAME
- LDY GREPnAME+1
- JSR PUTS
- LDA #":"
- JSR PUTCHAR
- + LDA #<GREPlINE
- LDY #>GREPlINE
- STA ZP
- STY ZP+1
- LDA LINElEN
- LDY LINElEN+1
- LDX #STDOUT
- JSR WRITE
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- GETLINE = * ;() : LINElEN, LINEpTR
- ;** IGNORES CHARS BEYOND MAX LINE LEN, IGNORES LAST LINE NOT ENDING IN cr,
- ;** LINE ENDS WITH \0
- LDA #0
- STA LINElEN
- STA LINElEN+1
- LDA #<GREPlINE
- LDY #>GREPlINE
- STA LINEpTR
- STY LINEpTR+1
- - JSR GETbYTE
- BCC +
- RTS
- + CMP #CHRcr
- BNE +
- LDA #0
- LDY #0
- STA (LINEpTR),Y
- LDA #<GREPlINE
- LDY #>GREPlINE
- STA LINEpTR
- STY LINEpTR+1
- CLC
- RTS
- + LDX LINElEN+1
- CPX #>MAXlINElEN
- BCS -
- LDY #0
- STA (LINEpTR),Y
- INC LINEpTR
- BNE +
- INC LINEpTR+1
- + INC LINElEN
- BNE +
- INC LINElEN+1
- + JMP -
-
- GETbYTE = *
- LDA BUFcOUNT
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- LDA #<GREPiNbUF
- LDY #>GREPiNbUF
- STA ZP
- STY ZP+1
- STA BUFpTR
- STY BUFpTR+1
- LDA INbUFlEN
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- ;===THE END===
- GREPbSS = *
- GREPlINE = GREPbSS
- GREPiNbUF = GREPlINE+MAXlINElEN
- INC.S
- 20
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:INC"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA #15
- LDX #255
- LDY #0
- - INC $D020
- INY
- BNE -
- DEX
- BNE -
- SEC
- SBC #1
- BCS -
- RTS
- MEM.S
- 190
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@:MEM"
- JMP MAIN
- .ASC "Cb"
-
- REP = 4
-
- MAIN = *
- LDA #<PROCESSmSG
- LDY #>PROCESSmSG
- JSR PUTS
- LDA ACEpROCESSid
- ORA #$30
- JSR CHROUT
- LDA #13
- JSR CHROUT
- JSR PRINTfREEMAP
- JSR DISPLAYfREE
- JSR DISPLAYtpa
- RTS
-
- PROCESSmSG = *
- .ASC "pROCESSid="
- .BYTE 0
-
- DISPLAYfREE = *
- LDA #<FREEmSG
- LDY #>FREEmSG
- JSR PUTS
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #10
- LDX #$40
- JSR UTOA
- LDX #0
- - LDA NUMBUF,X
- BEQ +
- JSR CHROUT
- INX
- BNE -
- + LDA #13
- JSR CHROUT
- RTS
-
- FREEmSG = *
- .ASC "dYNAMIC fREE ="
- .BYTE 0
-
- NUMBUF .BUF 12
-
- DISPLAYtpa = *
- LDA #<TPAfREE
- LDY #>TPAfREE
- JSR PUTS
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #0
- STA 6
- STA 7
- SEC
- LDA ACEsTACKpTR+0
- SBC #<ACEaPPaDDRESS
- STA 4
- LDA ACEsTACKpTR+1
- SBC #>ACEaPPaDDRESS
- STA 5
- LDA #10
- LDX #4
- JSR UTOA
- LDX #0
- - LDA NUMBUF,X
- BEQ +
- JSR CHROUT
- INX
- BNE -
- + LDA #13
- JSR CHROUT
- RTS
-
- TPAfREE = *
- .ASC "pROGRAM fREE ="
- .BYTE 0
-
- FREEMAP = 2
-
- PRINTfREEMAP = *
- LDA ACErAM0fREEMAP+0
- LDY ACErAM0fREEMAP+1
- INY ;FREEMAP
- STA FREEMAP+0
- STY FREEMAP+1
- LDY #0
- - LDX #"."
- LDA (FREEMAP),Y
- BEQ +
- LDX #"*"
- CMP #$FF
- BEQ +
- LDX #"#"
- CMP #$FE
- BEQ +
- LDX #"+"
- + TXA
- JSR CHROUT
- INY
- BNE -
- LDA #13
- JSR CHROUT
- LDX #3
- - LDA ACEfREEmEMORY,X
- STA $40,X
- DEX
- BPL -
- RTS
-
- PRINTzP = *
- LDX #3
- - LDA ZP,X
- JSR PRINThEX
- DEX
- BPL -
- LDA #13
- JSR CHROUT
- RTS
-
- PRINThEX = *
- PHA
- LSR
- LSR
- LSR
- LSR
- JSR PRINThEXIT
- PLA
- AND #$0F
-
- PRINThEXIT = *
- ORA #$30
- CMP #$3A
- BCC +
- ADC #6
- + JSR CHROUT
- RTS
-
- CHROUT = *
- STX SAVER+0
- STY SAVER+1
- STA CHAR
- LDA ZP
- PHA
- LDA ZP+1
- PHA
- LDA #<CHAR
- LDY #>CHAR
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- LDX #1
- JSR WRITE
- PLA
- STA ZP+1
- PLA
- STA ZP
- LDA CHAR
- LDX SAVER+0
- LDY SAVER+1
- RTS
- CHAR .BUF 1
- SAVER .BUF 2
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
- MV.S
- 223
- ;*** MV (RENAME) PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:MV"
-
- JMP MAIN
- .BYTE ACEid1,ACEid2,ACEid3
-
- ;*** GLOBAL DECLARATIONS
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===RENAME===
-
- ARG = 2
- OLDNAME = 4
- NEWNAME = 6
-
- MAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE ENOUGHaRGS
- LDA ACEaRGC+0
- CMP #3
- BCS ENOUGHaRGS
-
- USAGE = *
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JMP PUTS
-
- USAGEmSG = *
- .ASC "uSAGE: MV OLDNAME NEWNAME ..."
- .BYTE CHRcr
- .ASC " WHERE ... MEANS REPEAT NAMES IN OLD/NEW PAIRS"
- .BYTE CHRcr,0
-
- ENOUGHaRGS = *
- LDA #1
- LDY #0
- STA ARG+0
- STY ARG+1
-
- MAINnEXT = *
- LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA OLDNAME+0
- STY OLDNAME+1
- ORA ZP+1
- BEQ MAINeXIT
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA NEWNAME+0
- STY NEWNAME+1
- ORA ZP+1
- BEQ MAINeXIT
-
- JSR CHECKSTOP
- JSR ECHO
- LDA OLDNAME+0
- LDY OLDNAME+1
- STA ZP+0
- STY ZP+1
- LDA NEWNAME+0
- LDY NEWNAME+1
- STA ZW+0
- STY ZW+1
- JSR RENAME
- BCC +
- JSR ERROR
- + INC ARG+0
- BNE +
- INC ARG+1
- + JMP MAINnEXT
-
- MAINeXIT = *
- RTS
-
- CHECKSTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
-
- STOPPEDmSG = *
- .ASC "<STOPPED>"
- .BYTE CHRcr,0
-
- ERROR = *
- LDA #<ERRORmSG1
- LDY #>ERRORmSG1
- JSR EPUTS
- LDA OLDNAME+0
- LDY OLDNAME+1
- JSR EPUTS
- LDA #<ERRORmSG2
- LDY #>ERRORmSG2
- JMP EPUTS
-
- ERRORmSG1 = *
- .ASC "eRROR ATTEMPTING TO RENAME "
- .BYTE CHRqUOTE,0
-
- ERRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- ECHO = *
- LDA #<ECHOmSG1
- LDY #>ECHOmSG1
- JSR EPUTS
- LDA OLDNAME+0
- LDY OLDNAME+1
- JSR EPUTS
- LDA #<ECHOmSG2
- LDY #>ECHOmSG2
- JSR EPUTS
- LDA NEWNAME+0
- LDY NEWNAME+1
- JSR EPUTS
- LDA #<ECHOmSG3
- LDY #>ECHOmSG3
- JSR EPUTS
- RTS
-
- ECHOmSG1 = *
- .ASC "rENAMING FILE "
- .BYTE CHRqUOTE,0
-
- ECHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC " TO "
- .BYTE CHRqUOTE,0
-
- ECHOmSG3 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- ;===THE END===
- BSS = *
- BSSeND = BSS+0
- READ.S
- 282
- ;*** FILE READER PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@:READ"
-
- JMP CRCmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ITOAbIN = LIBWORK ;(4)
- ITOAbCD = LIBWORK+4 ;(5)
- ITOAfLAG = LIBWORK+9 ;(1)
- ITOAnUMBER .BUF 11
- ITOA = * ;( .x=NUMzPADDR ) : ITOAnUMBER
- LDY #0
- - LDA 0,X
- STA ITOAbIN,Y
- INX
- INY
- CPY #4
- BCC -
- LDX #5
- LDA #0
- - STA ITOAbCD,X ;ZEROS "ITOAfLAG" TOO
- DEX
- BPL -
- LDY #32
- SEI
- SED
-
- ITOAnEXTbIT = *
- ASL ITOAbIN+0
- ROL ITOAbIN+1
- ROL ITOAbIN+2
- ROL ITOAbIN+3
- LDX #4
- - LDA ITOAbCD,X
- ADC ITOAbCD,X
- STA ITOAbCD,X
- DEX
- BPL -
- DEY
- BNE ITOAnEXTbIT
- CLD
- CLI
- LDX #0
- LDY #0
- - LDA ITOAbCD,X
- JSR ITOApUThEX
- INX
- CPX #5
- BCC -
- LDA #0
- STA ITOAnUMBER,Y
- RTS
-
- ITOApUThEX = *
- PHA
- LSR
- LSR
- LSR
- LSR
- JSR ITOApUTdIGIT
- PLA
- AND #$0F
-
- ITOApUTdIGIT = *
- CMP ITOAfLAG
- BNE +
- CPY #7
- BCS +
- LDA #$20
- BNE ITOApOKE
- + ORA #$30
- STA ITOAfLAG
-
- ITOApOKE = *
- STA ITOAnUMBER,Y
- INY
- RTS
-
- ;===CRC32===
- CRCaRG = 2
- CRCnAME = 4
- INbUFlEN = 6
-
- CRCmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE CRCeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS CRCeNOUGHaRGS
-
- CRCuSAGE = *
- LDA #<CRCuSAGEmSG
- LDY #>CRCuSAGEmSG
- JMP EPUTS
-
- CRCuSAGEmSG = *
- .ASC "USAGE: READ FILE1 FILE2 ... FILEn"
- .BYTE CHRcr
- .BYTE 0
-
- CRCeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<CRCiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>CRCiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA CRCaRG
- STY CRCaRG+1
- - JSR STOPKEY
- BCS CRCsTOPPED
- LDA CRCaRG
- LDY CRCaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA CRCnAME
- STY CRCnAME+1
- ORA ZP+1
- BEQ CRCeXIT
- JSR DOrEAD
- BCC +
- JSR CRCeRROR
- + INC CRCaRG
- BNE +
- INC CRCaRG+1
- + JMP -
-
- CRCeXIT = *
- RTS
-
- CRCsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- CRCeRROR = *
- LDA #<CRCeRRORmSG1
- LDY #>CRCeRRORmSG1
- JSR EPUTS
- LDA CRCnAME
- LDY CRCnAME+1
- JSR EPUTS
- LDA #<CRCeRRORmSG2
- LDY #>CRCeRRORmSG2
- JMP EPUTS
-
- CRCeRRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
-
- CRCeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 8
- BUFcOUNT = 10
- INFILE = 12
-
- DOrEAD = *
- ;** OPEN FILE
- LDA CRCnAME
- LDY CRCnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** READ FILE
- JSR READbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- READbODY = *
- LDA #<CRCiNbUF
- LDY #>CRCiNbUF
- STA ZP
- STY ZP+1
- LDA INbUFlEN+0
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- JMP READbODY
- + SEC
- RTS
-
- ;===THE END===
- CRCbSS = *
- CRCiNbUF = CRCbSS
- RM.S
- 190
- ;*** RM PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:RM"
-
- JMP REMOVEmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- ;===REMOVE LIBRARY===
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===REMOVE===
- RMaRG = 2
- RMnAME = 4
-
- REMOVEmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE RMeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS RMeNOUGHaRGS
-
- RMuSAGE = *
- LDA #<RMuSAGEmSG
- LDY #>RMuSAGEmSG
- JMP PUTS
-
- RMuSAGEmSG = *
- .ASC "uSAGE: RM FILE1 FILE2 ... FILEn"
- .BYTE CHRcr
- .BYTE 0
-
- RMeNOUGHaRGS = *
- LDA #1
- LDY #0
- STA RMaRG
- STY RMaRG+1
- - LDA RMaRG
- LDY RMaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA RMnAME
- STY RMnAME+1
- ORA ZP+1
- BEQ RMeXIT
- JSR STOPKEY
- BCS STOPPED
- JSR RMeCHO
- LDA RMnAME
- LDY RMnAME+1
- STA ZP
- STY ZP+1
- JSR REMOVE
- BCC +
- JSR RMeRROR
- + INC RMaRG
- BNE +
- INC RMaRG+1
- + JMP -
-
- RMeXIT = *
- RTS
-
- STOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JMP EPUTS
- STOPPEDmSG = *
- .ASC "<STOPPED>"
- .BYTE CHRcr,0
-
- RMeRROR = *
- LDA #<RMeRRORmSG1
- LDY #>RMeRRORmSG1
- JSR EPUTS
- LDA RMnAME
- LDY RMnAME+1
- JSR EPUTS
- LDA #<RMeRRORmSG2
- LDY #>RMeRRORmSG2
- JMP EPUTS
-
- RMeRRORmSG1 = *
- .ASC "eRROR ATTEMPTING TO REMOVE "
- .BYTE CHRqUOTE
- .BYTE 0
-
- RMeRRORmSG2 = *
- .BYTE CHRqUOTE
- .BYTE CHRcr
- .BYTE 0
-
- RMeCHO = *
- LDA #<RMeCHOmSG1
- LDY #>RMeCHOmSG1
- JSR EPUTS
- LDA RMnAME
- LDY RMnAME+1
- JSR EPUTS
- LDA #<RMeCHOmSG2
- LDY #>RMeCHOmSG2
- JMP EPUTS
-
- RMeCHOmSG1 = *
- .ASC "rEMOVING FILE "
- .BYTE CHRqUOTE,0
-
- RMeCHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr,0
-
- ;===THE END===
- RMeND = *
- SH.S
- 1674
- ;ace COMMAND SHELL BY cRAIG bRUCE
-
- .SEQ ACEHEAD.S
- .ORG ACEsHELLaDDRESS
- .OBJ "@0:SH"
-
- JMP MAIN
- .BYTE "S","h",ACEid3
-
- LIBWORK = $60
- CHRcr = 13
- CHRqUOTE = 34
- CHRtAB = 9
-
- SHELLrEDIRECTsTDIN .BUF 1
- SHELLrEDIRECTsTDOUT .BUF 1
- SHELLrEDIRECTsTDERR .BUF 1
- PARSEaRGC .BUF 2
- SHELLeXITfLAG .BUF 1
- SHELLpROMPTfLAG .BUF 1
- CHECKpROMPTfLAG .BUF 1
- SUPPRESSpROMPTfLAG .BUF 1
- ABORTcOMMANDfLAG .BUF 1
- REGSAVE .BUF 3
-
- ;******** STANDARD LIBRARY ********
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- CLS = *
- LDA #147
- JMP PUTCHAR
-
- ITOAbIN = LIBWORK
- ITOAnUMBER .BUF 11
- ITOA = *
- JSR ITOApREPARE
- JMP UTOA
- ITOAsTRIP = *
- JSR ITOApREPARE
- LDA #1
- JMP UTOA
- ITOApREPARE = *
- STA ITOAbIN+0
- STY ITOAbIN+1
- STX ITOAbIN+2
- LDA #0
- STA ITOAbIN+3
- LDA #<ITOAnUMBER
- LDY #>ITOAnUMBER
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #8
- LDX #ITOAbIN
- RTS
-
- ZSP = LIBWORK
-
- PUSHay = *
- TAX
- SEC
- LDA ACEsTACKpTR+0
- SBC #2
- STA ACEsTACKpTR+0
- STA ZSP
- LDA ACEsTACKpTR+1
- SBC #0
- STA ACEsTACKpTR+1
- STA ZSP+1
- TYA
- LDY #1
- STA (ZSP),Y
- DEY
- TXA
- STA (ZSP),Y
- RTS
-
- ;******** SHELL ********
- ;cOMsHELL
-
- MAIN = *
- LDA #<SHELLtITLE
- LDY #>SHELLtITLE
- JSR PUTS
- JMP SHELL
-
- SHELLtITLE .ASC "ace sHELL VERS 0.54.00 - csb 25-nOV-93"
- .BYTE CHRcr,CHRcr
- .BYTE 0
-
- SHELL = *
- LDA #$FF
- STA CHECKpROMPTfLAG
- STA SHELLrEDIRECTsTDIN
- STA SHELLrEDIRECTsTDOUT
- STA SHELLrEDIRECTsTDERR
- LDA #0
- STA SUPPRESSpROMPTfLAG
-
- GETcOMMAND = *
- LDA #0
- STA ABORTcOMMANDfLAG
- LDA CHECKpROMPTfLAG
- BEQ +
- JSR SHELLcHECKpROMPTABILITY
- + LDA SHELLpROMPTfLAG
- BEQ +
- LDA SUPPRESSpROMPTfLAG
- BNE +
- LDA #"["
- LDX #STDERR
- JSR PUTC
- LDA ACEcURdIRnAME+0
- LDY ACEcURdIRnAME+1
- JSR EPUTS
- LDA #<SHELLrEADY2
- LDY #>SHELLrEADY2
- JSR EPUTS
- + LDA #0
- STA SUPPRESSpROMPTfLAG
- STA SHELLeXITfLAG
- JSR SHELLgETaRGS
- BCS SHELLfINISH
- LDA PARSEaRGC+0
- ORA PARSEaRGC+1
- BEQ +
- LDA ABORTcOMMANDfLAG
- BNE +
- JSR SETUPrEDIRECTS
- JSR SHELLcONSTRUCTfRAME
- JSR SHELLeXECcOMMAND
- JSR SHELLrEMOVEfRAME
- JSR UNSETrEDIRECTS
- + JSR CLOSErEDIRECTS
- BIT SHELLeXITfLAG
- BMI SHELLfINISH
- JMP GETcOMMAND
-
- SHELLfINISH = *
- RTS
-
- SHELLrEADY2 .ASC "] "
- .BYTE 0
-
- SHELLcHECKpROMPTABILITY = *
- LDX #0
- JSR DEVINFO
- LDX #$FF
- CMP #0
- BEQ +
- LDX #0
- + STX SHELLpROMPTfLAG
- LDA #0
- STA CHECKpROMPTfLAG
- RTS
-
- ;=== COMMAND PARSING ===
-
- ARGpTR = $02
- ARGqUOTE = $03
- ARGwASqUOTED = $04
-
- SHELLgETaRGS = *
- LDA #0
- STA PARSEaRGC+0
- STA PARSEaRGC+1
-
- NEWARG = *
- JSR GETCHAR
- BCC +
- JMP ARGeOF
- + CMP #" "
- BEQ NEWARG
- CMP #CHRtAB
- BEQ NEWARG
- CMP #CHRcr
- BNE +
- JMP ARGeNDoFlINE
- + CMP #";"
- BNE +
- LDA #$FF
- STA SUPPRESSpROMPTfLAG
- JMP ARGeNDoFlINE
- + LDX #0
- STX ARGpTR
- STX ARGwASqUOTED
-
- ARGnEWqUOTE = *
- LDX #0
- STX ARGqUOTE
- CMP #$22
- BEQ ARGsTARTqUOTE
- CMP #"'"
- BNE +
- ARGsTARTqUOTE = *
- STA ARGqUOTE
- STA ARGwASqUOTED
- JMP ARGnEXTcHAR
-
- + LDX ARGpTR
- STA ARGbUFFER,X
- INC ARGpTR
-
- ARGnEXTcHAR = *
- JSR GETCHAR
- BCS ARGeOF
- LDX ARGqUOTE
- BNE ARGqUOTEmODE
- CMP #" "
- BEQ ARGpROCESS
- CMP #CHRtAB
- BEQ ARGpROCESS
- - CMP #";"
- BNE +
- LDX ARGwASqUOTED
- BNE +
- LDA #$FF
- STA SUPPRESSpROMPTfLAG
- LDA #CHRcr
- + CMP #CHRcr
- BEQ ARGpROCESS
- LDX ARGpTR
- STA ARGbUFFER,X
- INC ARGpTR
- JMP ARGnEXTcHAR
-
- ARGqUOTEmODE = *
- CMP #0
- BEQ -
- CMP ARGqUOTE
- BNE -
- JSR GETCHAR
- BCS ARGeOF
- CMP #" "
- BEQ ARGpROCESS
- CMP #CHRtAB
- BEQ ARGpROCESS
- CMP #CHRcr
- BEQ ARGpROCESS
- JMP ARGnEWqUOTE
-
- ARGpROCESS = *
- PHA
- LDX ARGpTR
- LDA #0
- STA ARGbUFFER,X
- JSR SHELLhANDLEaRG
- PLA
- CMP #CHRcr
- BEQ ARGeNDoFlINE
- JMP NEWARG
- ARGeNDoFlINE = *
- CLC
- ARGeOF = *
- RTS
-
- SHELLhANDLEaRG = *
- LDA ABORTcOMMANDfLAG
- BEQ +
- RTS
- + LDA ARGwASqUOTED
- BNE +
- LDX #STDIN
- LDY #"R"
- LDA ARGbUFFER
- CMP #"<"
- BEQ SHELLhANDLErEDIRECT
- LDX #STDOUT
- LDY #"W"
- CMP #">"
- BEQ SHELLhANDLErEDIRECT
- JSR CHECKwILDCARDS
- BCC +
- RTS
- + JSR SHELLsTOREaRG
- RTS
-
- SHELLsTOREaRG = *
- LDA ACEsTACKpTR+0
- LDY ACEsTACKpTR+1
- CLC
- SBC ARGpTR
- BCS +
- DEY
- + STA ACEsTACKpTR+0
- STY ACEsTACKpTR+1
- STA ZP+0
- STY ZP+1
- LDY #0
- - LDA ARGbUFFER,Y
- STA (ZP),Y
- BEQ +
- INY
- BNE -
- + LDA PARSEaRGC+1
- STA ZP+1
- LDA PARSEaRGC+0
- ASL
- ROL ZP+1
- CLC
- ADC #<ARGaRGVbUFFER
- STA ZP+0
- LDA ZP+1
- ADC #>ARGaRGVbUFFER
- STA ZP+1
- LDY #0
- LDA ACEsTACKpTR+0
- STA (ZP),Y
- INY
- LDA ACEsTACKpTR+1
- STA (ZP),Y
- INC PARSEaRGC+0
- BNE +
- INC PARSEaRGC+1
- + RTS
-
- SHELLhANDLErEDIRECT = * ;( .x=FD, .y=MODE )
- LDA #<ARGbUFFER+1
- STA ZP
- LDA #>ARGbUFFER+1
- STA ZP+1
- LDA ARGbUFFER+1
- CMP #">"
- BNE +
- JSR SHELLrEDIRiNC
- LDY #"A"
- LDA ARGbUFFER+2
- + CMP #"!"
- BNE +
- - LDX #STDERR
- JSR SHELLrEDIRiNC
- LDA #0
- + CMP #"&"
- BEQ -
- LDA SHELLrEDIRECTsTDIN,X
- CMP #255
- BNE REDIRECTmULTIeRROR
- TYA
- STX CMDbUFFER
- STA REGSAVE
- - JSR OPEN
- BCC ++
- LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BNE +
- JSR REMOVE
- BCS REDIRECTeRROR
- LDA REGSAVE
- JMP -
- + CMP #ACEeRRfILEnOTfOUND
- BNE REDIRECTeRROR
- LDA REGSAVE
- CMP #"A"
- BNE REDIRECTeRROR
- LDA #"W"
- STA REGSAVE
- JMP -
- + LDX CMDbUFFER
- STA SHELLrEDIRECTsTDIN,X
- RTS
-
- REDIRECTeRROR = *
- LDA #<REDIRECTeRRORmSG
- LDY #>REDIRECTeRRORmSG
- REDIRECTeRRORwMSG = *
- PHA
- TYA
- PHA
- LDA #$FF
- STA ABORTcOMMANDfLAG
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- PLA
- TAY
- PLA
- JSR EPUTS
- RTS
-
- REDIRECTeRRORmSG = *
- .ASC ": eRROR OPENING REDIRECTION FILE."
- .BYTE CHRcr,0
-
- REDIRECTmULTIeRROR = *
- LDA #<REDIRECTmULTIeRRORmSG
- LDY #>REDIRECTmULTIeRRORmSG
- JMP REDIRECTeRRORwMSG
-
- REDIRECTmULTIeRRORmSG = *
- .ASC ": eRROR - mULTIPLE REDIRECTIONS OF SAME STREAM."
- .BYTE CHRcr,0
-
- SHELLrEDIRiNC = *
- INC ZP+0
- BNE +
- INC ZP+1
- + RTS
-
- SHELLsETUPrED = 2
-
- SETUPrEDIRECTS = *
- UNSETrEDIRECTS = *
- LDX #0
- STX SHELLsETUPrED
- - LDA SHELLrEDIRECTsTDIN,X
- CMP #255
- BEQ +
- TAY
- JSR FCBSWAP
- + INC SHELLsETUPrED
- LDX SHELLsETUPrED
- CPX #3
- BCC -
- RTS
-
- SHELLcLOSErED = 2
-
- CLOSErEDIRECTS = *
- LDX #0
- STX SHELLcLOSErED
- - LDA SHELLrEDIRECTsTDIN,X
- CMP #$FF
- BEQ +
- JSR CLOSE
- LDX SHELLcLOSErED
- LDA #$FF
- STA SHELLrEDIRECTsTDIN,X
- + INC SHELLcLOSErED
- LDX SHELLcLOSErED
- CPX #3
- BCC -
- RTS
-
- WILDpREFIX = 10
- WILDsUFFIX = 11
-
- CHECKwILDCARDS = *
- LDA #255
- STA WILDpREFIX
- STA WILDsUFFIX
- LDX ARGpTR
- - DEX
- CPX #255
- BEQ +
- LDA ARGbUFFER,X
- CMP #":"
- BEQ +
- CMP #"*"
- BNE -
- LDY WILDsUFFIX
- CPY #255
- BNE -
- STX WILDsUFFIX
- INC WILDsUFFIX
- JMP -
- + INX
- STX WILDpREFIX
- LDA WILDsUFFIX
- CMP #255
- BNE +
- CLC
- RTS
- + JSR HANDLEwILDCARDS
- SEC
- RTS
-
- WILDlENGTH = 12
- WILDsUFFIXlENGTH = 13
- WILDfCB = 14
- WILDmATCH = 15
-
- HANDLEwILDCARDS = *
- LDA #0
- STA WILDmATCH
- LDX ARGpTR
- INX
- - DEX
- LDA ARGbUFFER,X
- STA CMDbUFFER+1,X
- CPX WILDpREFIX
- BNE -
- LDA #0
- STA CMDbUFFER,X
- STA ARGbUFFER,X
- LDX WILDsUFFIX
- STA CMDbUFFER,X
- INC WILDpREFIX
- INC WILDsUFFIX
- LDX #0
- - LDA ARGbUFFER,X
- BEQ +
- STA CMDbUFFER,X
- INX
- BNE -
- + SEC
- LDA ARGpTR
- SBC WILDsUFFIX
- STA WILDsUFFIXlENGTH
- INC WILDsUFFIXlENGTH
- SEC
- LDA ARGpTR
- SBC WILDpREFIX
- STA WILDlENGTH
-
- LDA #<CMDbUFFER
- LDY #>CMDbUFFER
- STA ZP+0
- STY ZP+1
- JSR DIROPEN
- BCS NOmATCH
- STA WILDfCB
- JSR DIRREAD
- BCS +
- BEQ +
- JSR SCANwILDCARD
- + LDA WILDfCB
- JSR DIRCLOSE
- LDA WILDmATCH
- BNE +
- NOmATCH = *
- LDA #$FF
- STA ABORTcOMMANDfLAG
- LDA #<NOmATCHmSG
- LDY #>NOmATCHmSG
- JSR EPUTS
- + RTS
-
- NOmATCHmSG = *
- .ASC "nO MATCH FOR WILDCARD"
- .BYTES CHRcr,0
-
- SCANwILDCARD = *
- LDX WILDfCB
- JSR DIRREAD
- BCS +
- BNE ++
- + RTS
- + LDA ACEdIRENTnAME
- BNE +
- RTS
- + LDA ACEdIRENTnAMElEN
- CMP WILDlENGTH
- BCC SCANwILDCARD
- LDX WILDpREFIX
- LDY #0
- JSR SUBSTRcMP
- BCS SCANwILDCARD
- LDX WILDsUFFIX
- SEC
- LDA ACEdIRENTnAMElEN
- SBC WILDsUFFIXlENGTH
- TAY
- JSR SUBSTRcMP
- BCS SCANwILDCARD
-
- LDX #0
- - LDA CMDbUFFER,X
- BEQ +
- STA ARGbUFFER,X
- INX
- BNE -
- + LDY #0
- - LDA ACEdIRENTnAME,Y
- STA ARGbUFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA ACEdIRENTtYPE
- CMP #"S"
- BEQ +
- STA ARGbUFFER+1,X
- LDA #","
- STA ARGbUFFER,X
- INX
- INX
- LDA #0
- STA ARGbUFFER,X
- + STX ARGpTR
- JSR SHELLsTOREaRG
- LDA #$FF
- STA WILDmATCH
- JMP SCANwILDCARD
-
- SUBSTRcMP = * ;( .x=CMDBUFoFF, .y=DIRENTnAMEoFF ) : .cc=MATCH
- - LDA CMDbUFFER,X
- BNE +
- CLC
- RTS
- + CMP ACEdIRENTnAME,Y
- BNE +
- INY
- INX
- BNE -
- + SEC
- RTS
-
- ;=== STACK MANAGEMENT ===
-
- FRAMEaRGVsOURCE = $02
- FRAMEaRGVdEST = $04
- FRAMEaRGVbYTES = $06
-
- SHELLcONSTRUCTfRAME = *
- ;** PUSH THE zero TRAILER ARGV
- LDA #0
- LDY #0
- JSR PUSHay
- ;** PUSH ARGV[] HERE
- LDA PARSEaRGC
- LDY PARSEaRGC+1
- STY FRAMEaRGVbYTES+1
- ASL
- STA FRAMEaRGVbYTES
- ROL FRAMEaRGVbYTES+1
- SEC
- LDA ACEsTACKpTR
- SBC FRAMEaRGVbYTES
- STA ACEsTACKpTR
- STA FRAMEaRGVdEST
- LDA ACEsTACKpTR+1
- SBC FRAMEaRGVbYTES+1
- STA ACEsTACKpTR+1
- STA FRAMEaRGVdEST+1
- LDA #<ARGaRGVbUFFER
- LDY #>ARGaRGVbUFFER
- STA FRAMEaRGVsOURCE
- STY FRAMEaRGVsOURCE+1
- - LDA FRAMEaRGVbYTES
- ORA FRAMEaRGVbYTES+1
- BEQ FRAMEsETaRGVpTR
- LDY #0
- LDA (FRAMEaRGVsOURCE),Y
- STA (FRAMEaRGVdEST),Y
- INC FRAMEaRGVsOURCE
- BNE +
- INC FRAMEaRGVsOURCE+1
- + INC FRAMEaRGVdEST
- BNE +
- INC FRAMEaRGVdEST+1
- + LDA FRAMEaRGVbYTES
- BNE +
- DEC FRAMEaRGVbYTES+1
- + DEC FRAMEaRGVbYTES
- JMP -
- ;** SET ARGV POINTER
- FRAMEsETaRGVpTR = *
- LDA ACEsTACKpTR
- LDY ACEsTACKpTR+1
- STA ACEaRGV
- STY ACEaRGV+1
- ;** SET AND PUSH ARGC
- LDA PARSEaRGC
- LDY PARSEaRGC+1
- STA ACEaRGC
- STY ACEaRGC+1
- JSR PUSHay
- ;** PUSH UN-REDIRECTION INFO HERE
- LDA SHELLrEDIRECTsTDERR
- LDY #$FF
- JSR PUSHay
- LDA SHELLrEDIRECTsTDIN
- LDY SHELLrEDIRECTsTDOUT
- JSR PUSHay
- ;** PUSH AND SET FRAME POINTER
- LDA ACEfRAMEpTR
- LDY ACEfRAMEpTR+1
- JSR PUSHay
- LDA ACEsTACKpTR
- LDY ACEsTACKpTR+1
- STA ACEfRAMEpTR
- STY ACEfRAMEpTR+1
- RTS
-
- FRAMEfp = $02
- FRAMEnEWfp = $04
-
- SHELLrEMOVEfRAME = *
- ;** GET FRAME POINTER
- LDA ACEfRAMEpTR
- LDY ACEfRAMEpTR+1
- STA FRAMEfp
- STY FRAMEfp+1
- ;** RESTORE THE STD FILES
- LDY #2
- - LDA (FRAMEfp),Y
- STA SHELLrEDIRECTsTDIN-2,Y
- INY
- CPY #5
- BCC -
- ;** BACK UP FRAME POINTER
- LDY #1
- - LDA (FRAMEfp),Y
- STA ACEfRAMEpTR,Y
- STA ACEsTACKpTR,Y
- STA FRAMEnEWfp,Y
- STA ACEaRGV,Y
- DEY
- BPL -
- ;** RESTORE THE ARGC, ARGV VALUES
- LDY #6
- LDA (FRAMEnEWfp),Y
- STA ACEaRGC
- INY
- LDA (FRAMEnEWfp),Y
- STA ACEaRGC+1
- CLC
- LDA ACEaRGV
- ADC #8
- STA ACEaRGV
- BCC +
- INC ACEaRGV+1
- + RTS
-
- ;=== DISPATCH ===
-
- DISPaRGV = $02
- DISPaRGpTR = $04
- DISPvECTOR = $02
-
- SHELLeXECcOMMAND = *
- ;** FETCH THE COMMAND NAME
- LDA ACEaRGV
- LDY ACEaRGV+1
- STA DISPaRGV
- STY DISPaRGV+1
- LDY #1
- - LDA (DISPaRGV),Y
- STA DISPaRGpTR,Y
- DEY
- BPL -
- LDY #0
- - LDA (DISPaRGpTR),Y
- STA ARGbUFFER,Y
- BEQ +
- INY
- BNE -
- ;** SEARCH INTERNAL DISPATCH TABLE FOR NAME
- + LDY #0
-
- DISPcMPcOMMAND = *
- LDA DISPtABLE,Y
- BEQ SHELLlOADeXTERNAL
- LDX #0
- - LDA ARGbUFFER,X
- CMP DISPtABLE,Y
- BNE +
- CMP #0
- BEQ DISPmATCH
- INX
- INY
- BNE -
- BRK
- + DEY
- - INY
- LDA DISPtABLE,Y
- BNE -
- INY
- INY
- INY
- JMP DISPcMPcOMMAND
-
- DISPmATCH = *
- LDA DISPtABLE+1,Y
- STA DISPvECTOR
- LDA DISPtABLE+2,Y
- STA DISPvECTOR+1
- JMP (DISPvECTOR)
-
- ;** LOAD EXTERNAL FILE INTO TRANSIENT PROGRAM AREA
- LOADpATH = 2
- LOADpATHpOS = 4
- LOADgIVEuP = 7
-
- SHELLlOADeXTERNAL = *
- LDA #0
- STA ACEaPPaDDRESS+3
- LDA #0
- STA LOADpATHpOS
- STA LOADgIVEuP
- LDA ACEsHELLpATH
- LDY ACEsHELLpATH+1
- STA LOADpATH
- STY LOADpATH+1
-
- SHELLtRYlOADaGAIN = *
- LDY LOADpATHpOS
- LDA (LOADpATH),Y
- BEQ DISPcMDnOTfOUND
- LDA LOADgIVEuP
- BNE DISPcMDnOTfOUND
- LDA #0
- LDY #0
- JSR GETARG
- JSR GETlOADpATHNAME
- LDA #<ACEaPPaDDRESS
- LDY #>ACEaPPaDDRESS
- JSR BLOAD
- BCS DISPlOADeRROR
- LDA ACEaPPaDDRESS+3
- CMP #"C"
- BNE DISPbADpROG
- LDA ACEaPPaDDRESS+4
- CMP #"b"
- BNE DISPbADpROG
- LDA #<ACEaPPaDDRESS
- LDY #>ACEaPPaDDRESS
- JMP EXEC
-
- DISPbADpROG = *
- LDA #<DISPbADpROGmSG
- LDY #>DISPbADpROGmSG
- JSR EPUTS
- RTS
-
- DISPbADpROGmSG = *
- .ASC "bAD EXTERNAL PROGRAM FORMAT"
- .BYTE CHRcr,0
-
- DISPlOADeRROR = *
- LDA ERRNO
- CMP #ACEeRRfILEnOTfOUND
- BEQ SHELLtRYlOADaGAIN
- CMP #ACEeRRdEVICEnOTpRESENT
- BEQ SHELLtRYlOADaGAIN
- LDA #<DISPlOADeRRORmSG1
- LDY #>DISPlOADeRRORmSG1
- JMP EPUTS
-
- DISPcMDnOTfOUND = *
- LDA #<DISPlOADeRRORmSG2
- LDY #>DISPlOADeRRORmSG2
- JMP EPUTS
- DISPlOADeRRORmSG1 = *
- .ASC "eXTERNAL PROGRAM LOAD ERROR"
- .BYTE CHRcr,0
- DISPlOADeRRORmSG2 = *
- .ASC "cOMMAND NOT FOUND"
- .BYTE CHRcr
- .BYTE 0
-
- GETlOADpATHNAME = *
- LDY LOADpATHpOS
- LDX #0
- - LDA (LOADpATH),Y
- BEQ +
- STA CMDbUFFER,X
- INY
- INX
- BNE -
- + INY
- STY LOADpATHpOS
- LDY #1
- LDA (ZP),Y
- CMP #":"
- BEQ +
- DEY
- LDA (ZP),Y
- CMP #"/"
- BNE GETpATHrEALLY
- + STA LOADgIVEuP
- LDX #0
-
- GETpATHrEALLY = *
- LDY #0
- - LDA (ZP),Y
- STA CMDbUFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA #<CMDbUFFER
- LDY #>CMDbUFFER
- STA ZP
- STY ZP+1
- RTS
-
- ;===INTERNAL COMMAND NAME AND DISPATCH TABLE===
-
- DISPtABLE = *
- .ASC "ECHO"
- .BYTE 0
- .WORD ECHO
- .ASC "SH"
- .BYTE 0
- .WORD SHELLcMD
- .ASC "DIRECTORY"
- .BYTE 0
- .WORD DIRwITHcLS
- .ASC "DIR"
- .BYTE 0
- .WORD DIRwITHcLS
- .ASC "D"
- .BYTE 0
- .WORD DIR
- .ASC "LS"
- .BYTE 0
- .WORD LS
- .ASC "CD"
- .BYTE 0
- .WORD CD
- .ASC "G"
- .BYTE 0
- .WORD CD
- .ASC "CAT"
- .BYTE 0
- .WORD CAT
- .ASC "TYPE"
- .BYTE 0
- .WORD CAT
- .ASC "T"
- .BYTE 0
- .WORD CAT
- .ASC "CLS"
- .BYTE 0
- .WORD CLS
- .ASC "CLEAR"
- .BYTE 0
- .WORD CLS
- .ASC "EXIT"
- .BYTE 0
- .WORD SHELLeXIT
- .ASC "X"
- .BYTE 0
- .WORD SHELLeXIT
- .ASC "CLSL"
- .BYTE 0
- .WORD LSwITHcLS
- .ASC "@"
- .BYTE 0
- .WORD DOS
- .ASC "DOS"
- .BYTE 0
- .WORD DOS
- .ASC "PATH"
- .BYTE 0
- .WORD PATH
-
- .BYTE 0
-
- ;===ECHO===
- ECHOaRGV = $02
- ECHOsPACE = $04
- ECHOtEMP = $06
-
- ECHO = *
- LDA #0
- STA ECHOsPACE
- LDA ACEaRGV
- LDY ACEaRGV+1
-
- ECHOnEWaRG = *
- CLC
- ADC #2
- BCC +
- INY
- + STA ECHOaRGV
- STY ECHOaRGV+1
- LDA #" "
- CMP ECHOsPACE
- BNE +
- JSR PUTCHAR
- + LDA #" "
- STA ECHOsPACE
- LDY #0
- LDA (ECHOaRGV),Y
- STA ECHOtEMP
- INY
- LDA (ECHOaRGV),Y
- TAY
- ORA ECHOtEMP
- BEQ ECHOeXIT
- LDA ECHOtEMP
- JSR PUTS
- LDA ECHOaRGV
- LDY ECHOaRGV+1
- JMP ECHOnEWaRG
-
- ECHOeXIT = *
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- ;===COPY PARAMETERS===
- COPYbUFFERpTR = $02
- COPYbUFFERlENGTH = $04
-
- GETbUFFERpARMS = *
- LDA #<COPYbUFFER
- LDY #>COPYbUFFER
- STA COPYbUFFERpTR
- STY COPYbUFFERpTR+1
- SEC
- LDA ACEsTACKpTR
- SBC COPYbUFFERpTR
- STA COPYbUFFERlENGTH
- LDA ACEsTACKpTR+1
- SBC COPYbUFFERpTR+1
- STA COPYbUFFERlENGTH+1
- RTS
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===DIR===
- DIRfCB = $02
- DIRcOLUMNS = $03
- DIRcURcOL = $04
- DIRlONG = $05
- DIRsPACES = $06
- DIRLINElEN = $07
- DIRcHcOLS = $08
-
- DIRwITHcLS = *
- JSR CLS
- JMP DIR
-
- LSwITHcLS = *
- JSR CLS
- JMP LS
-
- LS = *
- LDX #1
- JSR DEVINFO
- STX DIRcHcOLS
- CMP #0
- BNE +
- TXA
- LDX #$FF
- - INX
- SBC #20
- BCS -
- TXA
- BNE LSsETcOLS
-
- + LDA #1
- LSsETcOLS = *
- STA DIRcOLUMNS
- LDA #0
- STA DIRlONG
- JMP DIRcOMMON
-
- DIR = *
- LDX #1
- JSR DEVINFO
- STX DIRcHcOLS
- LDA #1
- STA DIRcOLUMNS
- LDA #$FF
- STA DIRlONG
-
- DIRcOMMON = *
- LDA #0
- STA DIRcURcOL
- LDA #<DIRdEFAULTdIRECTORY
- LDY #>DIRdEFAULTdIRECTORY
- STA ZP
- STY ZP+1
- LDA ACEaRGC+1
- BNE +
- LDA ACEaRGC
- CMP #2
- BCC DIRgOTnAME
- + LDA #1
- LDY #0
- JSR GETARG
-
- DIRgOTnAME = *
- JSR DIROPEN
- BCC +
- RTS
- + STA DIRfCB
- LDX DIRfCB
- JSR DIRREAD
- BCS DIReXIT
- BEQ DIReXIT
- JSR STOPKEY
- BCS DIReXIT
- LDA DIRlONG
- BPL +
- JSR DIRdISPLAYhEADING
- / LDX DIRfCB
- JSR DIRREAD
- BCS DIReXIT
- BEQ DIReXIT
- JSR STOPKEY
- BCS DIReXIT
- LDA ACEdIRENTnAME
- BEQ DIRtRAILEReXIT
- JSR DIRdISPLAY
- JMP -
-
- DIRtRAILEReXIT = *
- LDA DIRlONG
- BPL DIReXIT
- JSR DIRdISPLAYtRAILER
-
- DIReXIT = *
- LDA DIRcURcOL
- BEQ +
- LDA #CHRcr
- JSR PUTCHAR
- + LDA DIRfCB
- JMP CLOSE
-
- DIRdEFAULTdIRECTORY = *
- .ASC ".:"
- .BYTE 0
-
- DIRdISPLAY = *
- BIT DIRlONG
- BMI +
- JMP DIRdISPLAYsHORT
- + JSR DIRsETUPdIRLINE
- LDA #<DIRLINE
- LDY #>DIRLINE
- STA ZP
- STY ZP+1
- LDA DIRLINElEN
- LDY #0
- LDX #STDOUT
- JMP WRITE
-
- ;* 0000000000111111111122222222223333333333444444444455555555556666
- ;* POS: 0123456789012345678901234567890123456789012345678901234567890123
- DIRLINE .ASC "DRWX*-MT 00-xXX-00 12:00A 12345678 *seq 1234567890123456"
- .BYTE CHRcr,0
- DIRfLAGnAMES .ASC "DRWX*-MT"
- DIRdATEsTR .ASC " 00-xXX-00 12:00A "
- DIRdATEeND = *
-
- DIRsETUPdIRLINE = *
- ;** FLAGS
- LDX #0
- LDA ACEdIRENTfLAGS
- - ASL
- PHA
- LDA #"-"
- BCC +
- LDA DIRfLAGnAMES,X
- + STA DIRLINE+0,X
- PLA
- INX
- CPX #8
- BCC -
- ;** DATE
- LDX #DIRdATEeND-DIRdATEsTR-1
- - LDA DIRdATEsTR,X
- STA DIRLINE+8,X
- DEX
- BPL -
- ;** BYTES
- LDA ACEdIRENTbYTES+0
- LDY ACEdIRENTbYTES+1
- LDX ACEdIRENTbYTES+2
- JSR ITOA
- LDY #28
- LDA DIRcHcOLS
- CMP #59
- BCS +
- LDY #8
- + LDX #0
- - LDA ITOAnUMBER,X
- STA DIRLINE,Y
- INY
- INX
- CPX #8
- BCC -
- LDA #" "
- STA DIRLINE,Y
- INY
- ;** UNCLOSED FLAG
- LDA DIRLINE+4
- CMP #"-"
- BNE +
- LDA #" "
- + STA DIRLINE,Y
- INY
- ;** FILETYPE
- LDX #0
- - LDA ACEdIRENTtYPE,X
- ORA #$80
- STA DIRLINE,Y
- INY
- INX
- CPX #3
- BCC -
- LDA #" "
- STA DIRLINE,Y
- INY
- STA DIRLINE,Y
- INY
- ;** FILENAME
- LDX #0
- - LDA ACEdIRENTnAME,X
- BEQ +
- STA DIRLINE,Y
- INY
- INX
- BNE -
- + LDA #CHRcr
- STA DIRLINE,Y
- INY
- LDA #0
- STA DIRLINE,Y
- STY DIRLINElEN
- RTS
-
- DIRdISPLAYsHORT = *
- LDA #<ACEdIRENTnAME
- LDY #>ACEdIRENTnAME
- JSR PUTS
- INC DIRcURcOL
- LDA DIRcURcOL
- CMP DIRcOLUMNS
- BCC +
- LDA #0
- STA DIRcURcOL
- LDA #CHRcr
- JMP PUTCHAR
- + LDY #$FF
- - INY
- LDA ACEdIRENTnAME,Y
- BNE -
- STY DIRsPACES
- LDA #20
- SBC DIRsPACES
- STA DIRsPACES
- - LDA #" "
- JSR PUTCHAR
- DEC DIRsPACES
- BNE -
- RTS
-
- DIRdISPLAYhEADING = *
- LDA #<DIRhEADINGmSG
- LDY #>DIRhEADINGmSG
- JSR PUTS
- LDA #<ACEdIRENTnAME
- LDY #>ACEdIRENTnAME
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- DIRhEADINGmSG = *
- .ASC "dIR: "
- .BYTE 0
-
- DIRdISPLAYtRAILER = *
- LDA ACEdIRENTbYTES+0
- LDY ACEdIRENTbYTES+1
- LDX ACEdIRENTbYTES+2
- JSR ITOAsTRIP
- LDA #<ITOAnUMBER
- LDY #>ITOAnUMBER
- JSR PUTS
- LDA #<DIRtRAILINGmSG
- LDY #>DIRtRAILINGmSG
- JSR PUTS
- RTS
-
- DIRtRAILINGmSG = *
- .ASC " BYTES FREE"
- .BYTE CHRcr
- .BYTE 0
-
- ;===CD===
- CD = *
- LDA ACEaRGC+0
- CMP #2
- LDA ACEaRGC+1
- SBC #0
- BCS +
- JSR CDHOME
- RTS
-
- + LDA #1
- LDY #0
- JSR GETARG
-
- CDsETdEVICE = *
- LDX #2
- LDY #0
- LDA (ZP),Y
- STA ARGbUFFER+0
- INY
- LDA (ZP),Y
- STA ARGbUFFER+1
- INY
- CMP ":"
- BEQ CDcHECKpATH
- LDX #0
- LDY #0
-
- CDcHECKpATH = *
- LDA (ZP),Y
- STA ARGbUFFER,X
- CMP #0
- BEQ CDoKAY
- CMP #"/"
- BEQ CDpATHoKAY
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCC CDpATHoKAY
- + LDA #"/"
- STA ARGbUFFER,X
- INX
-
- CDpATHoKAY = *
- - LDA (ZP),Y
- STA ARGbUFFER,X
- BEQ CDcHECKeND
- INX
- INY
- BNE -
-
- CDcHECKeND = *
- DEX
- LDA ARGbUFFER,X
- CMP #":"
- BEQ +
- INX
- LDA #":"
- STA ARGbUFFER,X
- LDA #0
- STA ARGbUFFER+1,X
- + DEX
- LDA ARGbUFFER,X
- CMP #"/"
- BEQ CDoKAY
- LDA #"/"
- STA ARGbUFFER+1,X
- LDA #":"
- STA ARGbUFFER+2,X
- LDA #0
- STA ARGbUFFER+3,X
-
- CDoKAY = *
- LDA #<ARGbUFFER
- LDY #>ARGbUFFER
- STA ZP+0
- STY ZP+1
- JSR CHDIR
- BCS +
- RTS
- + LDA #<CDeRRmSG
- LDY #>CDeRRmSG
- JMP EPUTS
-
- CDdEFAULT = *
- .ASC "A:"
- .BYTE 0
- CDeRRmSG = *
- .ASC "eRROR CHANGING DIRECTORY"
- .BYTE CHRcr,0
-
- ;===CAT===
- CATbUFFERpTR = $02
- CATbUFFERlENGTH = $04
- CATaRG = $06
- CATfCB = $08
- CATaBORT = 10
-
- CAT = *
- LDA #0
- STA CATaBORT
- JSR GETbUFFERpARMS
- LDX #STDOUT
- JSR DEVINFO
- CMP #0
- BNE +
- LDA CATbUFFERlENGTH+1
- BEQ +
- LDA #<254
- LDY #>254
- STA CATbUFFERlENGTH+0
- STY CATbUFFERlENGTH+1
- + LDA #1
- LDY #0
- STA CATaRG+0
- STY CATaRG+1
- LDA ACEaRGC+0
- CMP #2
- LDA ACEaRGC+1
- SBC #0
- BCS CATfILES
- LDA #0
- STA CATfCB
- JMP CATfILE
-
- CATfILES = *
- LDA CATaRG+0
- LDY CATaRG+1
- JSR GETARG
- LDA #"R"
- JSR OPEN
- BCC +
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- LDA #<CATeRRmSG
- LDY #>CATeRRmSG
- JSR EPUTS
- JMP ++
- + STA CATfCB
- JSR CATfILE
- LDA CATfCB
- JSR CLOSE
- + INC CATaRG
- BNE +
- INC CATaRG+1
- + LDA CATaBORT
- BNE +
- LDA CATaRG
- CMP ACEaRGC
- LDA CATaRG+1
- SBC ACEaRGC+1
- BCC CATfILES
- + RTS
-
- CATeRRmSG = *
- .ASC ": CANNOT OPEN"
- .BYTE CHRcr,0
-
- CATfILE = *
- LDA CATbUFFERpTR
- LDY CATbUFFERpTR+1
- STA ZP
- STY ZP+1
- - LDA CATbUFFERlENGTH
- LDY CATbUFFERlENGTH+1
- LDX CATfCB
- JSR READ
- BEQ +
- BCS +
- LDX #1
- JSR WRITE
- BCS +
- JSR STOPKEY
- BCS PRINTsTOPPEDmSG
- JMP -
- + RTS
-
- PRINTsTOPPEDmSG = *
- LDA #$FF
- STA CATaBORT
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JMP EPUTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- ;===EXIT===
- SHELLeXIT = *
- LDA #$FF
- STA SHELLeXITfLAG
- RTS
-
- ;===DOS===
- DOSfCB = $02
-
- DOS = *
- ;** OPEN COMMAND CHANNEL
- LDA #<DOScURdEVICE
- LDY #>DOScURdEVICE
- STA ZP
- STY ZP+1
- JSR CMDOPEN
- BCC +
- RTS
- + STA DOSfCB
-
- ;** SEND COMMAND
- LDA #1
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BEQ DOSsTATUSoNLY
- LDA ZP
- LDY ZP+1
- LDX DOSfCB
- JSR CMDSEND
- BCS +
-
- ;** READ STATUS
- DOSsTATUSoNLY = *
- LDA #<CMDbUFFER
- LDY #>CMDbUFFER
- LDX DOSfCB
- JSR CMDSTATUS
- BCS +
- LDA #<CMDbUFFER
- LDY #>CMDbUFFER
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
-
- ;** CLOSE COMMAND CHANNEL
- + LDA DOSfCB
- JMP CMDCLOSE
-
- DOScURdEVICE .ASC ".:"
- .BYTE 0
-
- ;===SHELL===
- SHELLcMD = *
- JSR SHELL
- LDA #0
- STA SHELLeXITfLAG
- LDA #255
- STA CHECKpROMPTfLAG
- RTS
-
- ;===PATH===
- PATHpTR = 2
- PATHpOS = 4
- PATHaRG = 6
- PATHsOURCEpOS = 7
-
- PATH = *
- LDA ACEsHELLpATH
- LDY ACEsHELLpATH+1
- STA PATHpTR
- STY PATHpTR+1
- LDA #0
- STA PATHpOS
- LDA ACEaRGC+1
- BEQ +
- RTS
- + LDA ACEaRGC
- CMP #2
- BCS PATHsET
- LDA #<PATHmSG
- LDY #>PATHmSG
- JSR PUTS
-
- DISPLAYpATH = *
- LDY PATHpOS
- LDA (PATHpTR),Y
- BNE +
- LDA #CHRcr
- JSR PUTCHAR
- RTS
- + LDA #CHRqUOTE
- STA CMDbUFFER
- LDX #1
- - LDA (PATHpTR),Y
- STA CMDbUFFER,X
- BEQ +
- INY
- INX
- BNE -
- + INY
- STY PATHpOS
- LDA #CHRqUOTE
- STA CMDbUFFER,X
- INX
- LDA #" "
- STA CMDbUFFER,X
- INX
- LDA #<CMDbUFFER
- LDY #>CMDbUFFER
- STA ZP
- STY ZP+1
- TXA
- LDY #0
- LDX #1
- JSR WRITE
- JMP DISPLAYpATH
-
- PATHmSG = *
- .ASC "PATH "
- .BYTE 0
-
- PATHsET = *
- LDY #0
- STY PATHpOS
- LDA #1
- STA PATHaRG
-
- PATHnEXTaRG = *
- LDA PATHaRG
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BNE +
- LDA #0
- LDY PATHpOS
- STA (PATHpTR),Y
- RTS
- + LDY #0
- STY PATHsOURCEpOS
- - LDY PATHsOURCEpOS
- INC PATHsOURCEpOS
- LDA (ZP),Y
- LDY PATHpOS
- INC PATHpOS
- STA (PATHpTR),Y
- CMP #0
- BNE -
- INC PATHaRG
- JMP PATHnEXTaRG
-
- BSS = ACEaPPaDDRESS
- CMDbUFFER = BSS+0
- ARGbUFFER = CMDbUFFER+256
- ARGaRGVbUFFER = ARGbUFFER+256
- COPYbUFFER = ARGaRGVbUFFER
- SLOW.S
- 14
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:SLOW"
-
- JMP MAIN
- .ASC "Cb"
-
- MAIN = *
- LDA $D011
- ORA #%00010000
- STA $D011
- LDA #$00
- STA $D030
- RTS
- SORT.S
- 1079
- ;*** SORT PROGRAM - BY cRAIG bRUCE, STARTED 13-jUN-93
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:SORT"
-
- JMP MAIN
- .ASC "Cb"
- .BYTE $06
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
- MAXlINElEN = 2049
- TRUE = $FF
- FALSE = $00
-
- REVERSEfLAG .BUF 1
- IGNOREcASEfLAG .BUF 1
- KEYpOSITION .BUF 1
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===MAIN===
- ARG = 2
- NAME = 4
- STRING = 8
-
- MAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA #0
- STA REVERSEfLAG
- STA IGNOREcASEfLAG
- LDA #1
- STA KEYpOSITION
- LDA ACEaRGC+1
- BNE ENOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS ENOUGHaRGS
-
- USAGE = *
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JMP EPUTS
-
- USAGEmSG = *
- .ASC "USAGE: SORT [-[I][V]] [+COLUMN] FILE ..."
- .BYTE CHRcr,0
-
- ENOUGHaRGS = *
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA ARG+0
- STY ARG+1
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE KEYaRG
- INC ARG
- - INY
- LDA (ZP),Y
- BEQ KEYaRG
- CMP #"I"
- BNE +
- LDA #TRUE
- STA IGNOREcASEfLAG
- + CMP #"V"
- BNE +
- LDA #TRUE
- STA REVERSEfLAG
- + JMP -
-
- KEYaRG = *
- LDA ARG
- LDY #0
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"+"
- BNE FILEaRG
- JSR GETkEYpOSITION
- INC ARG
-
- FILEaRG = *
- JSR SORTiNIT
- - JSR STOPKEY
- BCS STOPPED
- LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- ORA ZP+1
- BEQ MAINeXIT
- JSR SORTrEAD
- BCC +
- JSR ERROR
- + INC ARG+0
- BNE +
- INC ARG+1
- + JMP -
-
- MAINeXIT = *
- JSR SORTrEAL
- JSR SORTpRINT
- JSR SORTcLEAN
- RTS
-
- KEYdIGIT = $71
-
- GETkEYpOSITION = *
- LDA #0
- STA KEYpOSITION
- INY
- - LDA (ZP),Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCS +
- AND #$0F
- STA KEYdIGIT
- LDA KEYpOSITION
- ASL
- ASL
- CLC
- ADC KEYpOSITION
- ASL
- CLC
- ADC KEYdIGIT
- STA KEYpOSITION
- INY
- BNE -
- + RTS
-
- STOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- LDA #1
- JMP EXIT
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- ERROR = *
- LDA #<ERRORmSG1
- LDY #>ERRORmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERRORmSG2
- LDY #>ERRORmSG2
- JMP EPUTS
- ERRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
- ERRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 10 ;(1)
- BUFcOUNT = 12 ;(1)
- INFILE = 14 ;(1)
-
- SORTrEAD = *
- ;** OPEN FILE
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- JSR READbODY
- LDA INFILE
- JSR CLOSE
- RTS
-
- ;===SORT ROUTINES===
-
- SORTHEAD = 30 ;(4)
- SORTp = 34 ;(4)
- SORTq = 38 ;(4)
- HEADER = 42 ;(5)
-
- SORTiNIT = *
- LDA #"S"
- JSR ECHOsTATUS
- JSR MALLOCiNIT
- LDA KEYpOSITION
- CMP #1
- BCC +
- SBC #1
- + STA KEYpOSITION
- LDX #3
- LDA #ACEmEMnULL
- - STA SORTHEAD,X
- DEX
- BPL -
- RTS
-
- READbODY = *
- LDA #"R"
- JSR ECHOsTATUS
- LDA #0
- STA BUFcOUNT
- - JSR GETLINE
- BCS +
- JSR POSITIONlINE
- JSR STORELINE
- BCS +
- LDA #"."
- JSR ECHOsTATUS
- JMP -
- + RTS
-
- SORTrEAL = *
- LDA REVERSEfLAG
- BMI +
- LDA #"V"
- JSR ECHOsTATUS
- JSR REVERSEfILE
- + RTS
-
- SORTpRINT = *
- LDA #"W"
- JSR ECHOsTATUS
- LDA #13
- JSR ECHOsTATUS
- JSR WRITEFILE
- RTS
-
- SORTcLEAN = *
- ;LDA #"F"
- ;JSR ECHOsTATUS
- ;JSR FREEFILE
- ;LDA #13
- ;JSR ECHOsTATUS
- RTS
-
- ;*** FETCHLINE( SORTp=lINEpTR, .ay=rAM0BUF )
-
- FETCHLINE = *
- STA ZW
- STY ZW+1
- LDX #3
- - LDA SORTp,X
- STA ZP,X
- DEX
- BPL -
- LDX #HEADER
- LDY #5
- JSR ZPLOAD
- LDA HEADER+4
- LDY #0
- JMP FETCH
-
- ;*** SORTgtCMP( SORTLINE, CMPLINE ) : .c={$7b}SORTLINE >= CMPLINE{$7d}
-
- SORTgtCMP = *
- LDX #0
- CLC
- LDA KEYpOSITION
- ADC #6
- CMP SORTBUFLEN
- BCC +
- INX
- + CMP CMPBUFLEN
- BCC +
- INX
- INX
- + TXA
- BEQ DOcOMPARE
- CMP #2
- RTS
-
- DOcOMPARE = *
- BIT IGNOREcASEfLAG
- BMI DOcASELESScOMPARE
- LDY KEYpOSITION
- - LDA SORTLINE,Y
- CMP CMPLINE,Y
- BNE +
- CMP #0
- BEQ +
- INY
- BNE -
- + RTS
-
- CASELESScHAR = $72
-
- DOcASELESScOMPARE = *
- LDY KEYpOSITION
- - LDA SORTLINE,Y
- JSR LOWCASE
- PHA
- LDA CMPLINE,Y
- JSR LOWCASE
- STA CASELESScHAR
- PLA
- CMP CASELESScHAR
- BNE +
- CMP #0
- BEQ +
- INY
- BNE -
- + RTS
-
- LOWCASE = *
- CMP #"a"
- BCC +
- CMP #"z"+1
- BCS +
- AND #$7F
- + RTS
-
- ;*** POSITIONlINE( SORTLINE ) : SORTq=PREV, SORTp=NEXT
-
- POSITIONlINE = *
- LDX #3
- - LDA #ACEmEMnULL
- STA SORTq,X
- LDA SORTHEAD,X
- STA SORTp,X
- DEX
- BPL -
-
- POSITIONsEARCH = *
- LDA SORTp+3
- CMP #ACEmEMnULL
- BEQ POSITIONeXIT
- LDA #<CMPBUF
- LDY #>CMPBUF
- JSR FETCHLINE
- JSR SORTgtCMP
- BCS POSITIONeXIT ;** CONTROLS SORT ORDER
- LDX #3
- - LDA SORTp,X
- STA SORTq,X
- LDA CMPBUF,X
- STA SORTp,X
- DEX
- BPL -
- BMI POSITIONsEARCH
-
- POSITIONeXIT = *
- RTS
-
- ;*** STORELINE( SORTLINE ) {$7b}BETWEEN SORTq AND SORTp{$7d}
-
- STORELINE = *
- LDA SORTBUFLEN
- LDY #0
- JSR MALLOC
- BCC +
- RTS
- + LDX #3
- - LDA SORTp,X
- STA SORTBUF,X
- DEX
- BPL -
- LDA #<SORTBUF
- LDY #>SORTBUF
- STA ZW+0
- STY ZW+1
- LDA SORTBUFLEN
- LDY #0
- JSR STASH
- LDA SORTq+3
- CMP #ACEmEMnULL
- BEQ STORELINEfIRST
- LDX #3
- - LDA ZP,X
- LDY SORTq,X
- STA SORTq,X
- STY ZP,X
- DEX
- BPL -
- LDX #SORTq
- LDY #4
- JSR ZPSTORE
- CLC
- RTS
-
- STORELINEfIRST = *
- LDX #3
- - LDA ZP,X
- STA SORTHEAD,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** WRITEFILE()
-
- WRITEFILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA SORTp,X
- DEX
- BPL -
-
- WRITElINE = *
- LDA SORTp+3
- CMP #ACEmEMnULL
- BEQ WRITEeXIT
- LDA #<SORTBUF
- LDY #>SORTBUF
- JSR FETCHLINE
- JSR PUTLINE
- LDX #3
- - LDA SORTBUF,X
- STA SORTp,X
- DEX
- BPL -
- JMP WRITElINE
-
- WRITEeXIT = *
- RTS
-
- ;*** REVERSElIST()
-
- REVERSEfILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA ZP,X
- LDA #ACEmEMnULL
- STA SORTHEAD,X
- DEX
- BPL -
-
- REVERSElINE = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BEQ REVERSEeXIT
- LDX #SORTp
- LDY #4
- JSR ZPLOAD
- LDX #SORTHEAD
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA ZP,X
- STA SORTHEAD,X
- LDA SORTp,X
- STA ZP,X
- DEX
- BPL -
- BMI REVERSElINE
-
- REVERSEeXIT = *
- RTS
-
- ;*** FREEFILE()
-
- FREEFILE = *
- LDX #3
- - LDA SORTHEAD,X
- STA ZP,X
- DEX
- BPL -
-
- FREElINE = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
- RTS
- + LDX #HEADER
- LDY #5
- JSR ZPLOAD
- LDA HEADER+4
- LDY #0
- JSR FREE
- LDX #3
- - LDA HEADER,X
- STA ZP,X
- DEX
- BPL -
- JMP FREElINE
-
- ECHOsTATUS = *
- LDX #STDERR
- JMP PUTC
-
- ;===DYNAMIC MEMORY ROUTINES===
-
- MALLOCwORK = $60
-
- MALLOChEAD .BUF 4
- TPAfREEfIRST .BUF 1
- TPAfREEmIN .BUF 1
- TPAfREEpAGES .BUF 1
- TPAaREAsTART .BUF 1
- TPAaREAeND .BUF 1
-
- ;*** MALLOCiNIT()
-
- MALLOCiNIT = *
- LDA #ACEmEMnULL
- STA MALLOChEAD+3
- LDX #0
- LDA #$FF
- - STA TPAfREEMAP,X
- INX
- BNE -
- LDX #>BSSeND
- LDA #<BSSeND
- BEQ +
- INX
- + STX TPAfREEfIRST
- STX TPAaREAsTART
- LDX ACEsTACKpTR+1
- STX MALLOCwORK
- STX TPAaREAeND
- TXA
- SEC
- SBC TPAfREEfIRST
- BCS +
- LDA #0
- + STA TPAfREEpAGES
- CLC
- ADC #1
- STA TPAfREEmIN
- LDX TPAfREEfIRST
- CPX MALLOCwORK
- BCS +
- LDA #$00
- - STA TPAfREEMAP,X
- INX
- CPX MALLOCwORK
- BCC -
- + RTS
-
- LIBpAGES .BUF 1
-
- LIBpAGEaLLOC = * ;( .a=PAGES ) : [ZP]
- STA LIBpAGES
- LDX #$00
- LDY #ACEmEMiNTERNAL-1
- JSR PAGEALLOC
- BCS +
- RTS
- + JSR TPApAGEaLLOC
- BCS +
- RTS
- + LDA LIBpAGES
- LDX #ACEmEMiNTERNAL
- LDY #$FF
- JSR PAGEALLOC
- BCS +
- RTS
- + LDA #<NOMEMmSG
- LDY #>NOMEMmSG
- JSR EPUTS
- LDA #1
- JMP EXIT
-
- NOMEMmSG = *
- .BYTE CHRcr
- .ASC "iNSUFFICIENT MEMORY, ABORTING."
- .BYTE CHRcr,0
-
- NEWMAX .BUF 1
-
- TPApAGEaLLOC = * ;( LIBpAGES ) : [ZP]
- LDA LIBpAGES
- CMP TPAfREEmIN
- BCS TPAfREEMAPfULL
- ;** FIRST FREE
- LDX TPAfREEfIRST
- LDA TPAfREEMAP,X
- BEQ ++
- - INX
- BEQ TPAfREEMAPfULL
- LDA TPAfREEMAP,X
- BNE -
- STX TPAfREEfIRST
- JMP ++
- TPAfREEMAPfULL = *
- LDA LIBpAGES
- CMP TPAfREEmIN
- BCS +
- STA TPAfREEmIN
- + SEC
- RTS
-
- ;** SEARCH
- + DEX
- - LDY LIBpAGES
- - INX
- BEQ TPAfREEMAPfULL
- LDA TPAfREEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY LIBpAGES
- LDA #$41
- - STA TPAfREEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX TPAfREEfIRST
- BNE +
- LDY NEWMAX
- INY
- STY TPAfREEfIRST
- + SEC
- LDA TPAfREEpAGES
- SBC LIBpAGES
- STA TPAfREEpAGES
- LDA #0
- LDY #ACEmEMiNTERNAL
- STA ZP+0
- STX ZP+1
- STA ZP+2
- STY ZP+3
- CLC
- RTS
-
- MALLOClENsAVE .BUF 3
-
- MALLOC = *
- STA MALLOClENsAVE+0
- STY MALLOClENsAVE+1
- JSR LIBmALLOC
- BCS +
- RTS
- + LDX MALLOClENsAVE+1
- LDA MALLOClENsAVE+0
- BEQ +
- INX
- + TXA
- CPX #>1024
- BCS +
- LDX #>1024
- + TXA
- STA MALLOClENsAVE+2
- JSR LIBpAGEaLLOC
- BCC +
- RTS
- + LDA #0
- LDY MALLOClENsAVE+2
- JSR FREE
- LDA MALLOClENsAVE+0
- LDY MALLOClENsAVE+1
- JMP MALLOC
-
- ;*** MALLOC( .ay=bYTES ) : [ZP]=fARpOINTER
-
- MALLOCmEMnEXTpTR = MALLOCwORK+0 ;(4)
- MALLOCmEMlENGTH = MALLOCwORK+4 ;(2)
- MALLOClENGTH = MALLOCwORK+6 ;(2)
- MALLOCq = MALLOCwORK+8 ;(4)
-
- LIBmALLOC = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA MALLOClENGTH
- STY MALLOClENGTH+1
- LDX #3
- - LDA MALLOChEAD,X
- STA ZP,X
- LDA #ACEmEMnULL
- STA MALLOCq,X
- DEX
- BPL -
-
- MALLOClOOK = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
-
- MALLOCeRROReXIT = *
- LDA #ACEmEMnULL
- STA ZP+3
- LDA #ACEeRRiNSUFFICIENTmEMORY
- STA ERRNO
- SEC
- RTS
-
- + LDX #MALLOCmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- LDA MALLOCmEMlENGTH
- CMP MALLOClENGTH
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- BCS MALLOCgOTbLOCK
- LDX #3
- - LDA ZP,X
- STA MALLOCq,X
- LDA MALLOCmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- JMP MALLOClOOK
-
- MALLOCgOTbLOCK = *
- LDA MALLOCmEMlENGTH
- CMP MALLOClENGTH
- BNE +
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- BEQ MALLOCtAKEwHOLEbLOCK
- + SEC
- LDA MALLOCmEMlENGTH
- SBC MALLOClENGTH
- STA MALLOCmEMlENGTH
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- STA MALLOCmEMlENGTH+1
- LDX #MALLOCmEMnEXTpTR
- LDY #6
- JSR ZPSTORE
- CLC
- LDA ZP+0
- ADC MALLOCmEMlENGTH
- STA ZP+0
- LDA ZP+1
- ADC MALLOCmEMlENGTH+1
- STA ZP+1
- CLC
- RTS
-
- MALLOCtAKEwHOLEbLOCK = *
- LDA MALLOCq+3
- CMP #ACEmEMnULL
- BNE +
- LDX #3
- - LDA MALLOCmEMnEXTpTR,X
- STA MALLOChEAD,X
- DEX
- BPL -
- CLC
- RTS
- + LDX #3
- - LDA ZP,X
- LDY MALLOCq,X
- STA MALLOCq,X
- STY ZP,X
- DEX
- BPL -
- LDX #MALLOCmEMnEXTpTR
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA MALLOCq,X
- STA ZP,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** FREE( [ZP]=fARpOINTER, .ay=lENGTH ) {$7b}ALTERS [ZP]{$7d}
-
- FREEmEMnEXTpTR = MALLOCwORK+0 ;(4)
- FREEmEMlENGTH = MALLOCwORK+4 ;(2)
- FREElENGTH = MALLOCwORK+6 ;(2)
- FREEnEWpTR = MALLOCwORK+8 ;(4)
- FREEq = MALLOCwORK+12 ;(4)
-
- FREE = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA FREElENGTH+0
- STY FREElENGTH+1
- LDX #3
- - LDA ZP,X
- STA FREEnEWpTR,X
- LDA MALLOChEAD,X
- STA ZP,X
- LDA #ACEmEMnULL
- STA FREEq,X
- DEX
- BPL -
-
- FREEsEARCHlOOP = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BEQ FREEcOALESCEqANDnEW
- LDA ZP+0
- CMP FREEnEWpTR+0
- LDA ZP+1
- SBC FREEnEWpTR+1
- LDA ZP+2
- SBC FREEnEWpTR+2
- LDA ZP+3
- SBC FREEnEWpTR+3
- BCS FREEcOALESCEqANDnEW
- + LDX #FREEmEMnEXTpTR
- LDY #4
- JSR ZPLOAD
- LDX #3
- - LDA ZP,X
- STA FREEq,X
- LDA FREEmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- BMI FREEsEARCHlOOP
-
- FREEcOALESCEqANDnEW = *
- LDX #3
- - LDA FREEq,X
- STA ZP,X
- DEX
- BPL -
- LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
- ;** PREV IS HEAD
- LDX #3
- - LDA MALLOChEAD,X
- STA FREEmEMnEXTpTR,X
- LDA FREEnEWpTR,X
- STA MALLOChEAD,X
- DEX
- BPL -
- LDA FREElENGTH+0
- LDY FREElENGTH+1
- STA FREEmEMlENGTH+0
- STY FREEmEMlENGTH+1
- JMP FREEcOALESCEnEWaNDp
-
- ;** PREV IS REAL
- + LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- LDA ZP+3
- CMP FREEnEWpTR+3
- BNE +
- LDA ZP+2
- CMP FREEnEWpTR+2
- BNE +
- CLC
- LDA ZP
- ADC FREEmEMlENGTH
- TAX
- LDA ZP+1
- ADC FREEmEMlENGTH+1
- CMP FREEnEWpTR+1
- BNE +
- CPX FREEnEWpTR
- BNE +
- ;** PREV DOES COALESCE
- CLC
- LDA FREEmEMlENGTH
- ADC FREElENGTH
- STA FREEmEMlENGTH
- LDA FREEmEMlENGTH+1
- ADC FREElENGTH+1
- STA FREEmEMlENGTH+1
- LDX #3
- - LDA FREEq,X
- STA FREEnEWpTR,X
- DEX
- BPL -
- BMI FREEcOALESCEnEWaNDp
-
- ;** PREV DOES NOT COALESCE
- + LDX #FREEnEWpTR
- LDY #4
- JSR ZPSTORE
- LDA FREElENGTH+0
- LDY FREElENGTH+1
- STA FREEmEMlENGTH+0
- STY FREEmEMlENGTH+1
-
- FREEcOALESCEnEWaNDp = *
- LDA FREEnEWpTR+3
- CMP FREEmEMnEXTpTR+3
- BNE +
- LDA FREEnEWpTR+2
- CMP FREEmEMnEXTpTR+2
- BNE +
- CLC
- LDA FREEnEWpTR
- ADC FREEmEMlENGTH
- TAX
- LDA FREEnEWpTR+1
- ADC FREEmEMlENGTH+1
- CMP FREEmEMnEXTpTR+1
- BNE +
- CPX FREEmEMnEXTpTR
- BNE +
-
- ;** NEW AND NEXT COALESCE
- LDX #3
- - LDA FREEmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- LDA FREEmEMlENGTH+1
- PHA
- LDA FREEmEMlENGTH+0
- PHA
- LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- CLC
- PLA
- ADC FREEmEMlENGTH+0
- STA FREEmEMlENGTH+0
- PLA
- ADC FREEmEMlENGTH+1
- STA FREEmEMlENGTH+1
-
- + LDX #3
- - LDA FREEnEWpTR,X
- STA ZP,X
- DEX
- BPL -
- LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPSTORE
- CLC
- RTS
-
- ;=== LINE i/o ROUTINES ===
-
- YSAVE = $70
-
- GETLINE = * ;( INFILE ) : SORTLINE, .cs=EOF
- LDY #0
- - STY YSAVE
- JSR GETbYTE
- LDY YSAVE
- BCS +
- STA SORTLINE,Y
- INY
- CPY #240
- BCS GETLINEeXIT
- CMP #13
- BNE -
- DEY
-
- GETLINEeXIT = *
- LDA #0
- STA SORTLINE,Y
- CLC
- TYA
- ADC #6
- STA SORTBUFLEN
- CLC
- + RTS
-
- PUTLINE = * ;( SORTBUF )
- JSR STOPKEY
- BCC +
- JSR STOPPED
- + LDY SORTBUFLEN
- LDA #13
- STA SORTBUF-1,Y
- LDA #<SORTLINE
- LDY #>SORTLINE
- STA ZP+0
- STY ZP+1
- SEC
- LDA SORTBUFLEN
- SBC #5
- LDY #0
- LDX #STDOUT
- JSR WRITE
- LDY SORTBUFLEN
- LDA #0
- STA SORTBUF-1,Y
- RTS
-
- GETbYTE = *
- LDA BUFcOUNT
- BEQ GETbYTEfILLbUF
- LDY BUFpTR
- LDA INbUF,Y
- INC BUFpTR
- DEC BUFcOUNT
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- JSR STOPKEY
- BCC +
- JSR STOPPED
- + LDA #<INbUF
- LDY #>INbUF
- STA ZP+0
- STY ZP+1
- LDA #254
- LDY #0
- STY BUFpTR
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT
- JMP GETbYTE
- + SEC
- RTS
-
- ;===BSS===
-
- BSS = *
- SORTBUF = BSS+0
- SORTBUFLEN = SORTBUF+4
- SORTLINE = SORTBUF+5
- CMPBUF = SORTBUF+256
- CMPBUFLEN = CMPBUF+4
- CMPLINE = CMPBUF+5
- INbUF = CMPBUF+256
- TPAfREEMAP = INbUF+256
- BSSeND = TPAfREEMAP+256
- TR.S
- 476
- ;*** TRANSLATION PROGRAM - BY cRAIG bRUCE, STARTED 10-jUL-93
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:TR"
-
- JMP MAIN
- .ASC "Cb"
- .BYTE $06
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $40
-
- CHRcr = $0D
- CHRqUOTE = $22
- MAXlINElEN = 2049
- TRUE = $FF
- FALSE = $00
-
- TRpETSCII = 0
- TRaSCIIcRlF = 1
- TRaSCIIlF = 2
- TRaSCIIcR = 3
- TRsPEEDSCRIPT = 4
-
- TRfROM .BUF 1
- TRtO .BUF 1
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===MAIN===
- ARG = 2
- NAME = 4
- STRING = 8
-
- MAIN = *
- LDA #TRaSCIIcRlF
- STA TRfROM
- LDA #TRpETSCII
- STA TRtO
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE ENOUGHaRGS
- LDA ACEaRGC+0
- CMP #2
- BCS ENOUGHaRGS
- JMP USAGE
-
- ENOUGHaRGS = *
- LDA #1
- LDY #0
- STA ARG+0
- STY ARG+1
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE FILEaRG
- INC ARG
- INY
- JSR GETtRtYPE
- STX TRfROM
- INY
- JSR GETtRtYPE
- STX TRtO
-
- FILEaRG = *
- JSR INIToUTbUF
- - JSR STOPKEY
- BCC +
- JMP STOPPED
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- ORA ZP+1
- BEQ MAINeXIT
- JSR TRfILE
- BCC +
- JSR ERROR
- + INC ARG+0
- BNE +
- INC ARG+1
- + JMP -
-
- MAINeXIT = *
- JSR FLUSHoUTbUF
- RTS
-
- GETtRtYPE = * ;( (ZP)+.Y=STR ) : .x=TYPE
- LDA (ZP),Y
- INY
- LDX #TRpETSCII
- CMP #"P"
- BEQ GETtRrET
- LDX #TRsPEEDSCRIPT
- CMP #"S"
- BEQ GETtRrET
- LDX #TRaSCIIlF
- CMP #"U"
- BEQ GETtRrET
- LDX #TRaSCIIcRlF
- CMP #"M"
- BEQ GETtRrET
- LDX #TRpETSCII
- CMP #"C"
- BEQ GETtRrET
- CMP #"A"
- BNE USAGE
- LDA (ZP),Y
- INY
- LDX #TRaSCIIlF
- CMP #"L"
- BEQ GETtRrET
- LDX #TRaSCIIcR
- CMP #"C"
- BEQ GETtRrET
- CMP #"R"
- BEQ GETtRrET
- DEY
- LDX #TRaSCIIcRlF
- GETtRrET = *
- CLC
- RTS
-
- USAGE = *
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JSR EPUTS
- LDA #1
- JMP EXIT
-
- USAGEmSG = *
- .ASC "USAGE: TR [-FROMSET2TOSET] FILE ..."
- .BYTE CHRcr
- .ASC "WHERE FROMSET/TOSET=P,A,AL,AC,S,C,U,M"
- .BYTE CHRcr
- .ASC "(PETSCII,ASC-CRLF,ASC-LF,ASC-CR,"
- .BYTE CHRcr
- .ASC " SPEEDSCRIPT,COMMODORE,UNIX,MS-DOS)"
- .BYTE CHRcr,0
-
- STOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- LDA #1
- JMP EXIT
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- ERROR = *
- LDA #<ERRORmSG1
- LDY #>ERRORmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERRORmSG2
- LDY #>ERRORmSG2
- JMP EPUTS
- ERRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
- ERRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFpTR = 10 ;(2)
- BUFcOUNT = 12 ;(2)
- INFILE = 14 ;(1)
- INbUFlEN = 16 ;(2)
- READtRtAB = 18 ;(2)
- WRITEtRtAB = 20 ;(2)
- OUTbUFcOUNT = 22 ;(1)
-
- TRfILE = *
- JSR INITtR
- JSR INITiNbUF
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- JSR TRbODY
- LDA INFILE
- JSR CLOSE
- RTS
-
- TRbODY = *
- JSR GETbYTE
- BCS BODYeXIT
- LDX TRfROM
- BEQ BODYwRITE
- CMP #13
- BNE +
- CPX #TRaSCIIcRlF
- BEQ TRbODY
- CPX #TRaSCIIcR
- BEQ BODYwRITE
- + TAY
- LDA (READtRtAB),Y
-
- BODYwRITE = *
- LDX TRtO
- BEQ BODYrEP
- CMP #13
- BNE +
- CPX #TRsPEEDSCRIPT
- BEQ +
- CPX #TRaSCIIcR
- BEQ BODYrEP
- CPX #TRaSCIIlF
- BEQ +
- JSR PUTbYTE
- LDA #13
- + TAY
- LDA (WRITEtRtAB),Y
-
- BODYrEP = *
- JSR PUTbYTE
- JMP TRbODY
-
- BODYeXIT = *
- RTS
-
- GETbYTE = *
- LDA BUFcOUNT+0
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR+0
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT+0
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT+0
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- JSR STOPKEY
- BCC +
- JSR STOPPED
- + LDA #<INbUF
- LDY #>INbUF
- STA ZP+0
- STY ZP+1
- STA BUFpTR+0
- STY BUFpTR+1
- LDA INbUFlEN+0
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT+0
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- INITiNbUF = *
- SEC
- LDA ACEsTACKpTR+0
- SBC #<INbUF
- STA INbUFlEN+0
- LDA ACEsTACKpTR+1
- SBC #>INbUF
- STA INbUFlEN+1
- LDA #0
- STA BUFcOUNT+0
- STA BUFcOUNT+1
- LDX #STDOUT
- JSR DEVINFO
- CMP #0
- BNE +
- LDA #<254
- LDY #>254
- STA INbUFlEN+0
- STY INbUFlEN+1
- + RTS
-
- PUTbYTE = *
- LDX OUTbUFcOUNT
- CPX #254
- BCC +
- PHA
- JSR FLUSHoUTbUF
- PLA
- LDX OUTbUFcOUNT
- + STA OUTbUF,X
- INC OUTbUFcOUNT
- RTS
-
- FLUSHoUTbUF = *
- JSR STOPKEY
- BCC +
- JMP STOPPED
- + LDA #<OUTbUF
- LDY #>OUTbUF
- STA ZP+0
- STY ZP+1
- LDA OUTbUFcOUNT
- LDY #0
- LDX #STDOUT
- JSR WRITE
- LDA #0
- STA OUTbUFcOUNT
- RTS
-
- INIToUTbUF = *
- LDA #0
- STA OUTbUFcOUNT
- RTS
-
- INITtR = *
- LDA TRfROM
- ASL
- TAX
- LDA READtR,X
- STA READtRtAB+0
- LDA READtR+1,X
- STA READtRtAB+1
- LDA TRtO
- ASL
- TAX
- LDA WRITEtR,X
- STA WRITEtRtAB+0
- LDA WRITEtR+1,X
- STA WRITEtRtAB+1
- RTS
-
- READtR .WORD 0,ASCtOpET,ASCtOpET,ASCtOpET,SPDtOpET
- WRITEtR .WORD 0,PETtOaSC,PETtOaSC,PETtOaSC,PETtOsPD
-
- ASCtOpET = *
- ;0 1 2 3 4 5 6 7 8 9 A B C D E F
- .BYTE $00,$01,$02,$03,$04,$05,$06,$07,$9D,$09,$0D,$0B,$93,$0A,$0E,$0F ;0
- .BYTE $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F ;1
- .BYTE $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F ;2
- .BYTE $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F ;3
- .BYTE $40,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF ;4
- .BYTE $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$5B,$5C,$5D,$5E,$5F ;5
- .BYTE $C0,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F ;6
- .BYTE $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$DB,$DC,$DD,$DE,$DF ;7
- .BYTE $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F ;8
- .BYTE $90,$91,$92,$0C,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$08,$9E,$9F ;9
- .BYTE $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF ;A
- .BYTE $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF ;B
- .BYTE $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F ;C
- .BYTE $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F ;D
- .BYTE $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF ;E
- .BYTE $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF ;F
-
- SPDtOpET = *
- ;0 1 2 3 4 5 6 7 8 9 A B C D E F
- .BYTE $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F ;0
- .BYTE $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$0D ;1
- .BYTE $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F ;2
- .BYTE $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F ;3
- .BYTE $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF ;4
- .BYTE $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF ;5
- .BYTE $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF ;6
- .BYTE $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF ;7
- .BYTE $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$5F,$0E,$0F ;8
- .BYTE $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F ;9
- .BYTE $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF ;A
- .BYTE $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF ;B
- .BYTE $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F ;C
- .BYTE $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F ;D
- .BYTE $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F ;E
- .BYTE $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F ;F
-
- PETtOaSC = *
- ;0 1 2 3 4 5 6 7 8 9 A B C D E F
- .BYTE $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0D,$0B,$93,$0A,$0E,$0F ;0
- .BYTE $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F ;1
- .BYTE $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F ;2
- .BYTE $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F ;3
- .BYTE $40,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F ;4
- .BYTE $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$5B,$5C,$5D,$5E,$5F ;5
- .BYTE $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF ;6
- .BYTE $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF ;7
- .BYTE $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F ;8
- .BYTE $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F ;9
- .BYTE $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF ;A
- .BYTE $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF ;B
- .BYTE $60,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F ;C
- .BYTE $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$7B,$7C,$7D,$7E,$7F ;D
- .BYTE $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF ;E
- .BYTE $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF ;F
-
- PETtOsPD = *
- ;0 1 2 3 4 5 6 7 8 9 A B C D E F
- .BYTE $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$1F,$8E,$8F ;0
- .BYTE $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F ;1
- .BYTE $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F ;2
- .BYTE $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F ;3
- .BYTE $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F ;4
- .BYTE $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$8D ;5
- .BYTE $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF ;6
- .BYTE $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF ;7
- .BYTE $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF ;8
- .BYTE $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF ;9
- .BYTE $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F ;A
- .BYTE $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F ;B
- .BYTE $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F ;C
- .BYTE $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F ;D
- .BYTE $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF ;E
- .BYTE $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF ;F
-
- ;===BSS===
-
- BSS = *
- OUTbUF = BSS
- INbUF = OUTbUF+256
- UNBCODE.S
- 812
- ;*** unbcode: BCODE DECODER VERSION 1.00 - BY cRAIG bRUCE - 25-nOV-93
-
- ;ASSUMES 1-65535 SEGMENTS, 1-65536 TEMP FILES MAX, 0-4 g FILE LENGTH, 64 FRAGS
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:UNBCODE"
-
- JMP MAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- CHRlf = $0A
- CHRcr = $0D
- CHRqUOTE = $22
- TRUE = $FF
- FALSE = $00
-
- MAXcHUNK = 64
- MAXlINE = 85
- MAXfILENAME = 85
- MAXhAVE = 64
- MAXtEMPNAME = 20
- COPYbUFsIZE = 4096
- VERSION .ASC "1.00"
- .BYTE 0
-
- HRfROMsEG = 0 ;(2)
- HRtOsEG = 2 ;(2)
- HRtEMPfILEnAME = 4 ;(2)
- HRvALIDlENGTH = 6 ;(4)
- HRiSeND = 10 ;(1)
- HRfILENAME = 11 ;(17)
- HRsIZE = 32 ;(REALLY 28)
-
- ASCIIfILE .BUF 1
- TEMP .BUF 1
-
- PROGnAME .BUF 2
- INFORMATIVE .BUF 1
- VERBOSE .BUF 1
- DEBUG .BUF 1
- READfILENAME .BUF 2
- READlINEnUM .BUF 4
- HAVEcOUNT .BUF 1
- STATUSfILEeXISTS .BUF 1
- NEXTtEMPnAME .BUF 2
- FILENAMEuSED .BUF 1
-
- ARG = 2 ;(2)
- NAME = 4 ;(2)
- INbUFlEN = 6 ;(2)
- BUFpTR = 8 ;(2)
- BUFcOUNT = 10 ;(2)
- INFILE = 12 ;(1)
- OUTFILE = 13 ;(1)
- OUTnAME = 14 ;(2)
- SEGNUM = 16 ;(4)
- CONVERTlEN = 20 ;(1)
- GETLINEpOS = 21 ;(1)
- SCANvAL = 22 ;(4)
- CRC = 26 ;(4)
- BYTES = 30 ;(4)
- ISeND = 34 ;(1)
- CURhAVE = 35 ;(1)
- TEMPnAME = 36 ;(4) : REALLY ONLY USES 2
- H = 40 ;(2)
- NEXTh = 42 ;(2)
- HAVErEC = 44 ;(1)
- FIN = 45 ;(1)
- FOUT = 46 ;(1)
- WORK = 112 ;(16)
-
- CRCtABLE0 = *
- .BYTE $00,$96,$2C,$BA,$19,$8F,$35,$A3,$32,$A4,$1E,$88,$2B,$BD,$07,$91
- .BYTE $64,$F2,$48,$DE,$7D,$EB,$51,$C7,$56,$C0,$7A,$EC,$4F,$D9,$63,$F5
- .BYTE $C8,$5E,$E4,$72,$D1,$47,$FD,$6B,$FA,$6C,$D6,$40,$E3,$75,$CF,$59
- .BYTE $AC,$3A,$80,$16,$B5,$23,$99,$0F,$9E,$08,$B2,$24,$87,$11,$AB,$3D
- .BYTE $90,$06,$BC,$2A,$89,$1F,$A5,$33,$A2,$34,$8E,$18,$BB,$2D,$97,$01
- .BYTE $F4,$62,$D8,$4E,$ED,$7B,$C1,$57,$C6,$50,$EA,$7C,$DF,$49,$F3,$65
- .BYTE $58,$CE,$74,$E2,$41,$D7,$6D,$FB,$6A,$FC,$46,$D0,$73,$E5,$5F,$C9
- .BYTE $3C,$AA,$10,$86,$25,$B3,$09,$9F,$0E,$98,$22,$B4,$17,$81,$3B,$AD
- .BYTE $20,$B6,$0C,$9A,$39,$AF,$15,$83,$12,$84,$3E,$A8,$0B,$9D,$27,$B1
- .BYTE $44,$D2,$68,$FE,$5D,$CB,$71,$E7,$76,$E0,$5A,$CC,$6F,$F9,$43,$D5
- .BYTE $E8,$7E,$C4,$52,$F1,$67,$DD,$4B,$DA,$4C,$F6,$60,$C3,$55,$EF,$79
- .BYTE $8C,$1A,$A0,$36,$95,$03,$B9,$2F,$BE,$28,$92,$04,$A7,$31,$8B,$1D
- .BYTE $B0,$26,$9C,$0A,$A9,$3F,$85,$13,$82,$14,$AE,$38,$9B,$0D,$B7,$21
- .BYTE $D4,$42,$F8,$6E,$CD,$5B,$E1,$77,$E6,$70,$CA,$5C,$FF,$69,$D3,$45
- .BYTE $78,$EE,$54,$C2,$61,$F7,$4D,$DB,$4A,$DC,$66,$F0,$53,$C5,$7F,$E9
- .BYTE $1C,$8A,$30,$A6,$05,$93,$29,$BF,$2E,$B8,$02,$94,$37,$A1,$1B,$8D
-
- CRCtABLE1 = *
- .BYTE $00,$30,$61,$51,$C4,$F4,$A5,$95,$88,$B8,$E9,$D9,$4C,$7C,$2D,$1D
- .BYTE $10,$20,$71,$41,$D4,$E4,$B5,$85,$98,$A8,$F9,$C9,$5C,$6C,$3D,$0D
- .BYTE $20,$10,$41,$71,$E4,$D4,$85,$B5,$A8,$98,$C9,$F9,$6C,$5C,$0D,$3D
- .BYTE $30,$00,$51,$61,$F4,$C4,$95,$A5,$B8,$88,$D9,$E9,$7C,$4C,$1D,$2D
- .BYTE $41,$71,$20,$10,$85,$B5,$E4,$D4,$C9,$F9,$A8,$98,$0D,$3D,$6C,$5C
- .BYTE $51,$61,$30,$00,$95,$A5,$F4,$C4,$D9,$E9,$B8,$88,$1D,$2D,$7C,$4C
- .BYTE $61,$51,$00,$30,$A5,$95,$C4,$F4,$E9,$D9,$88,$B8,$2D,$1D,$4C,$7C
- .BYTE $71,$41,$10,$20,$B5,$85,$D4,$E4,$F9,$C9,$98,$A8,$3D,$0D,$5C,$6C
- .BYTE $83,$B3,$E2,$D2,$47,$77,$26,$16,$0B,$3B,$6A,$5A,$CF,$FF,$AE,$9E
- .BYTE $93,$A3,$F2,$C2,$57,$67,$36,$06,$1B,$2B,$7A,$4A,$DF,$EF,$BE,$8E
- .BYTE $A3,$93,$C2,$F2,$67,$57,$06,$36,$2B,$1B,$4A,$7A,$EF,$DF,$8E,$BE
- .BYTE $B3,$83,$D2,$E2,$77,$47,$16,$26,$3B,$0B,$5A,$6A,$FF,$CF,$9E,$AE
- .BYTE $C2,$F2,$A3,$93,$06,$36,$67,$57,$4A,$7A,$2B,$1B,$8E,$BE,$EF,$DF
- .BYTE $D2,$E2,$B3,$83,$16,$26,$77,$47,$5A,$6A,$3B,$0B,$9E,$AE,$FF,$CF
- .BYTE $E2,$D2,$83,$B3,$26,$16,$47,$77,$6A,$5A,$0B,$3B,$AE,$9E,$CF,$FF
- .BYTE $F2,$C2,$93,$A3,$36,$06,$57,$67,$7A,$4A,$1B,$2B,$BE,$8E,$DF,$EF
-
- CRCtABLE2 = *
- .BYTE $00,$07,$0E,$09,$6D,$6A,$63,$64,$DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF
- .BYTE $B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3,$6C,$6B,$62,$65,$01,$06,$0F,$08
- .BYTE $6E,$69,$60,$67,$03,$04,$0D,$0A,$B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1
- .BYTE $D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD,$02,$05,$0C,$0B,$6F,$68,$61,$66
- .BYTE $DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8,$07,$00,$09,$0E,$6A,$6D,$64,$63
- .BYTE $6B,$6C,$65,$62,$06,$01,$08,$0F,$B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4
- .BYTE $B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6,$69,$6E,$67,$60,$04,$03,$0A,$0D
- .BYTE $05,$02,$0B,$0C,$68,$6F,$66,$61,$DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA
- .BYTE $B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC,$63,$64,$6D,$6A,$0E,$09,$00,$07
- .BYTE $0F,$08,$01,$06,$62,$65,$6C,$6B,$D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0
- .BYTE $D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2,$0D,$0A,$03,$04,$60,$67,$6E,$69
- .BYTE $61,$66,$6F,$68,$0C,$0B,$02,$05,$BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE
- .BYTE $64,$63,$6A,$6D,$09,$0E,$07,$00,$BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB
- .BYTE $D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7,$08,$0F,$06,$01,$65,$62,$6B,$6C
- .BYTE $0A,$0D,$04,$03,$67,$60,$69,$6E,$D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5
- .BYTE $BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9,$66,$61,$68,$6F,$0B,$0C,$05,$02
-
- CRCtABLE3 = *
- .BYTE $00,$77,$EE,$99,$07,$70,$E9,$9E,$0E,$79,$E0,$97,$09,$7E,$E7,$90
- .BYTE $1D,$6A,$F3,$84,$1A,$6D,$F4,$83,$13,$64,$FD,$8A,$14,$63,$FA,$8D
- .BYTE $3B,$4C,$D5,$A2,$3C,$4B,$D2,$A5,$35,$42,$DB,$AC,$32,$45,$DC,$AB
- .BYTE $26,$51,$C8,$BF,$21,$56,$CF,$B8,$28,$5F,$C6,$B1,$2F,$58,$C1,$B6
- .BYTE $76,$01,$98,$EF,$71,$06,$9F,$E8,$78,$0F,$96,$E1,$7F,$08,$91,$E6
- .BYTE $6B,$1C,$85,$F2,$6C,$1B,$82,$F5,$65,$12,$8B,$FC,$62,$15,$8C,$FB
- .BYTE $4D,$3A,$A3,$D4,$4A,$3D,$A4,$D3,$43,$34,$AD,$DA,$44,$33,$AA,$DD
- .BYTE $50,$27,$BE,$C9,$57,$20,$B9,$CE,$5E,$29,$B0,$C7,$59,$2E,$B7,$C0
- .BYTE $ED,$9A,$03,$74,$EA,$9D,$04,$73,$E3,$94,$0D,$7A,$E4,$93,$0A,$7D
- .BYTE $F0,$87,$1E,$69,$F7,$80,$19,$6E,$FE,$89,$10,$67,$F9,$8E,$17,$60
- .BYTE $D6,$A1,$38,$4F,$D1,$A6,$3F,$48,$D8,$AF,$36,$41,$DF,$A8,$31,$46
- .BYTE $CB,$BC,$25,$52,$CC,$BB,$22,$55,$C5,$B2,$2B,$5C,$C2,$B5,$2C,$5B
- .BYTE $9B,$EC,$75,$02,$9C,$EB,$72,$05,$95,$E2,$7B,$0C,$92,$E5,$7C,$0B
- .BYTE $86,$F1,$68,$1F,$81,$F6,$6F,$18,$88,$FF,$66,$11,$8F,$F8,$61,$16
- .BYTE $A0,$D7,$4E,$39,$A7,$D0,$49,$3E,$AE,$D9,$40,$37,$A9,$DE,$47,$30
- .BYTE $BD,$CA,$53,$24,$BA,$CD,$54,$23,$B3,$C4,$5D,$2A,$B4,$C3,$5A,$2D
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- EPUTCHAR = *
- LDX #STDERR
- JMP PUTC
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===UNBCODE===
- MAIN = *
- ;** CHECK FOR LARGE ENOUGH tpa
- SEC
- LDA #<BSSeND
- CMP ACEsTACKpTR+0
- LDA #>BSSeND
- SBC ACEsTACKpTR+1
- BCC TPAoK
- LDA #<TPAmSG
- LDY #>TPAmSG
- JSR EPUTS
- DIE = *
- LDA #1
- LDX #0
- JMP EXIT
-
- TPAmSG = *
- .ASC "iNSUFFICIENT PROGRAM SPACE TO RUN UNBCODE"
- .BYTE CHRcr,0
-
- TPAoK = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BEQ +
- JMP ENOUGHaRGS
- + LDA ACEaRGC+0
- CMP #2
- BCC USAGE
- JMP ENOUGHaRGS
-
- USAGE = *
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JSR EPUTS
- JMP DIE
-
- USAGEmSG = *
- .ASC "USAGE: UNBCODE [-V] [-I] [-D] [-HELP] FILENAME ..."
- .BYTE CHRcr
- .ASC " [-V]=VERBOSE, [-I]=INFORMATIVE, [-D]=DEBUGGING INFO"
- .BYTE CHRcr,0
-
- ENOUGHaRGS = *
- ;** SET GLOBALS
- LDA #TRUE
- STA INFORMATIVE
- LDA #FALSE
- STA VERBOSE
- LDA #FALSE
- STA DEBUG
- LDA #0
- LDY #0
- JSR GETARG
- LDA ZP+0
- LDY ZP+1
- STA PROGnAME+0
- STY PROGnAME+1
- LDA #FALSE
- STA FILENAMEuSED
- LDA #0
- STA TEMPpREFIX
- STA TEMPnAME+2
- STA TEMPnAME+3
- JSR LOADsTATUSfILE
-
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR+0
- SBC #<INbUF
- STA INbUFlEN+0
- LDA ACEsTACKpTR+1
- SBC #>INbUF
- STA INbUFlEN+1
- LDA #0
- STA ARG+0
- STA ARG+1
-
- MAINnEXT = *
- JSR CHECKsTOP
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- ORA ZP+1
- BEQ MAINeXIT
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE +
- JSR HANDLEfLAGS
- JMP MAINnEXT
- + JSR ECHO
- JSR UNBCODE
- BCC +
- JSR ERROR
- + JMP MAINnEXT
-
- MAINeXIT = *
- ;XX SHOULD READ FROM STDIN IF NO FILES
- JSR SAVEsTATUSfILE
- RTS
-
- HANDLEfLAGS = *
- INY
- LDA (ZP),Y
- BNE +
- RTS
- + CMP #"D"
- BEQ FLAGd
- CMP #"V"
- BEQ FLAGv
- CMP #"I"
- BEQ FLAGi
- CMP #"H"
- BNE +
- JMP USAGE
- + NOP
- ;XX UNRECOGNIZED OPTION
- JMP HANDLEfLAGS
-
- FLAGd = *
- LDA #TRUE
- STA DEBUG
- STA VERBOSE
- STA INFORMATIVE
- ;XX PRINT STUFF
- JMP HANDLEfLAGS
-
- FLAGv = *
- LDA #TRUE
- STA VERBOSE
- STA INFORMATIVE
- ;XX PRINT VERSION
- JMP HANDLEfLAGS
-
- FLAGi = *
- LDA #TRUE
- STA INFORMATIVE
- JMP HANDLEfLAGS
-
- ERROR = *
- LDA #<ERRORmSG1
- LDY #>ERRORmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERRORmSG2
- LDY #>ERRORmSG2
- JSR EPUTS
- RTS
-
- ERRORmSG1 = *
- .ASC "eRROR ATTEMPTING TO UNBCODE FILE "
- .BYTE CHRqUOTE,0
- ERRORmSG2 = *
- .BYTE CHRqUOTE
- .ASC ", CONTINUING"
- .BYTE CHRcr,0
-
- ECHO = *
- LDA #<ECHOmSG1
- LDY #>ECHOmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ECHOmSG2
- LDY #>ECHOmSG2
- JMP EPUTS
-
- ECHOmSG1 = *
- .ASC "UNBCODING FILE "
- .BYTE CHRqUOTE,0
-
- ECHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr,0
-
- CHECKsTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- JMP DIE
-
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- .SEQ UNBCODEHELP.S
-
- STATfCB .BUF 1
- STAThr .BUF 1
-
- WRITEsTATUSdATA = * ;( STATfCB )
- LDA #255
- STA STAThr
- WRITEsTATUSnEXT = *
- INC STAThr
- LDA STAThr
- CMP HAVEcOUNT
- BCC +
- RTS
- + JSR GETh
- LDY #10
- - LDA (H),Y
- STA WORK,Y
- DEY
- BPL -
- ;** FROM SEGMENT
- LDX #WORK+HRfROMsEG
- JSR WRITEnUM5
- ;** TO SEGMENT
- LDX #WORK+HRtOsEG
- JSR WRITEnUM5
- ;** BEG/MID/END
- LDX #12
- LDA WORK+HRiSeND
- BNE +
- LDX #6
- LDA WORK+HRfROMsEG+0
- CMP #1
- BNE +
- LDA WORK+HRfROMsEG+1
- CMP #0
- BNE +
- LDX #0
- + TXA
- LDY #>BEGmIDeNDmSG
- CLC
- ADC #<BEGmIDeNDmSG
- BCC +
- INY
- + LDX STATfCB
- JSR FPUTS
- ;** LENGTH
- LDX #WORK+HRvALIDlENGTH
- JSR WRITEnUM10
- ;** TEMP NAME
- LDA #<TEMPnAMEpREFIX
- LDY #>TEMPnAMEpREFIX
- LDX STATfCB
- JSR FPUTS
- LDX #WORK+HRtEMPfILEnAME
- JSR WRITEnUM5
- ;** FILENAME
- LDA H+0
- LDY H+1
- CLC
- ADC #HRfILENAME
- BCC +
- INY
- + LDX STATfCB
- JSR FPUTS
- LDA #CHRcr
- LDX STATfCB
- JSR PUTC
- JMP WRITEsTATUSnEXT
-
- BEGmIDeNDmSG = *
- .BYTE "B","E","G"," "," ",0
- .BYTE "M","I","D"," "," ",0
- .BYTE "E","N","D"," "," ",0
- TEMPnAMEpREFIX = *
- .ASC "0bc"
- .BYTE 0
-
- SAVEsTATUSfILE = *
- BIT VERBOSE
- BPL +
- LDA #<SAVEsTATmSG
- LDY #>SAVEsTATmSG
- JSR EPUTS
- + LDA #<STATUSfILENAME
- LDY #>STATUSfILENAME
- STA ZP+0
- STY ZP+1
- LDA HAVEcOUNT
- BNE ++
- LDA STATUSfILEeXISTS
- BNE +
- RTS
- + JSR REMOVE
- RTS
- + LDA #"W"
- JSR OPENoVERWRITE
- BCC +
- LDA #<STATUSwRITEeRRmSG
- LDY #>STATUSwRITEeRRmSG
- JSR EPUTS
- LDA #STDERR
- + STA STATfCB
- JSR WRITEsTATUSdATA
- LDA STATfCB
- CMP #STDERR
- BEQ +
- JSR CLOSE
- + RTS
-
- SAVEsTATmSG = *
- .ASC "SAVING STATUS FILE 0bc-stat"
- .BYTE CHRcr,0
- STATUSfILENAME = *
- .ASC "0bc-stat"
- .BYTE 0
- STATUSwRITEeRRmSG = *
- .ASC "cANNOT OPEN "
- .BYTE CHRqUOTE
- .ASC "0bc-stat"
- .BYTE CHRqUOTE
- .ASC ", WRITING STATUS TO STDERR:"
- .BYTE CHRcr,0
-
- DISCARDsEGMENT = *
- LDA CURhAVE
- JSR GETh
- LDY #HRfROMsEG
- LDA SEGNUM+0
- CMP (H),Y
- BNE DISCARDaPPENDEDsEG
- INY
- LDA SEGNUM+1
- CMP (H),Y
- BNE DISCARDaPPENDEDsEG
-
- ;** THIS IS THE ONLY SEGMENT IN THE FRAGMENT, DELETE IT
- LDA #<DISCmSG
- LDY #>DISCmSG
- JSR EPUTS
- JSR FETCHtEMPnAME
- LDA #TRUE
- JSR GETtEMPnAMEsTR
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- LDA CURhAVE
- JSR REMOVEhAVErEC
-
- DISCARDsEGeXIT = *
- BIT DEBUG
- BPL +
- LDX #STDERR
- STX STATfCB
- JSR WRITEsTATUSdATA
- + RTS
-
- DISCmSG = *
- .ASC "DISCARDING SEGMENT"
- .BYTE CHRcr,0
-
- DISCARDaPPENDEDsEG = *
- LDY #HRtOsEG
- SEC
- LDA SEGNUM+0
- SBC #1
- STA (H),Y
- INY
- LDA SEGNUM+1
- SBC #0
- STA (H),Y
- LDA #<DISCaPPmSG
- LDY #>DISCaPPmSG
- JSR EPUTS
- ;** GET AND OPEN NEW TEMP FILE
- JSR GETtEMPfILEnAMEoNLY
- LDA #"W"
- STA FILEmODE
- JSR OPENtEMPfILE
- LDA OUTFILE
- STA FOUT
- BCS DISCARDsEGeXIT
- ;** OPEN OLD TEMP FILE
- LDA CURhAVE
- JSR GETh
- LDY #HRtEMPfILEnAME
- LDA (H),Y
- PHA
- LDA TEMPnAME+0
- STA (H),Y
- PLA
- STA TEMPnAME+0
- INY
- LDA (H),Y
- PHA
- LDA TEMPnAME+1
- STA (H),Y
- PLA
- STA TEMPnAME+1
- LDA #"R"
- STA FILEmODE
- JSR OPENtEMPfILE
- LDA OUTFILE
- STA FIN
- BCC +
- LDA FOUT
- JSR CLOSE
- JMP DISCARDsEGeXIT
- + STA FIN
- ;** COPY VALID CONTENTS INTO NEW TEMP FILE
- LDX #3
- LDY #HRvALIDlENGTH+3
- - LDA (H),Y
- STA BYTES,X
- DEY
- DEX
- BPL -
- JSR COPYfILE
- ;** REMOVE OLD TEMP FILE
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- JMP DISCARDsEGeXIT
-
- DISCaPPmSG = *
- .ASC "DISCARDING APPENDED SEGMENT"
- .BYTE CHRcr,0
-
- LOADsTATUSfILE = *
- BIT VERBOSE
- BPL +
- LDA #<LOADsTATmSG
- LDY #>LOADsTATmSG
- JSR EPUTS
- + LDA #0
- STA HAVEcOUNT
- LDA #FALSE
- STA STATUSfILEeXISTS
- LDA #1
- LDY #0
- STA NEXTtEMPnAME+0
- STY NEXTtEMPnAME+1
- LDA #<STATUSfILENAME
- LDY #>STATUSfILENAME
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCS +
- STA STATfCB
- LDA #TRUE
- STA STATUSfILEeXISTS
- JSR SCANsTATUSfILE
- LDA STATfCB
- JSR CLOSE
- + RTS
-
- LOADsTATmSG = *
- .ASC "SCANNING STATUS FILE 0bc-stat"
- .BYTE CHRcr,0
-
- SSpOS .BUF 1
-
- SCANsTATUSfILE = *
- ;** READ STATUS LINE
- LDX #0
- STX SSpOS
- - LDX STATfCB
- JSR GETC
- BCC +
- RTS
- + CMP #CHRcr
- BEQ +
- LDX SSpOS
- CPX #MAXlINE-1
- BCS -
- STA INlINE,X
- INC SSpOS
- JMP -
- + LDA #0
- LDX SSpOS
- STA INlINE,X
- CPX #42
- BCC SCANsTATUSfILE
- STA INlINE+52
-
- ;** SCAN STATUS LINE
- BIT DEBUG
- BPL +
- LDA #<INlINE
- LDY #>INlINE
- JSR EPUTS
- LDA #CHRcr
- JSR EPUTCHAR
- + LDX #HRsIZE-1
- LDA #0
- - STA TEMPhAVErEC,X
- DEX
- BPL -
-
- ;0----+----1----+----2----+----3----+----4----+----5----+--
- ;00001 00002 BEG 0000001140 0bc00007 NEW4
- ;00004 00004 END 0000000189 0bc00004 1234567890123456.
- ;00002 00003 END 0000000529 0bc00006 NEW5
-
- ;** FILENAME
- LDX #0
- - LDA INlINE+41,X
- STA TEMPhAVErEC+HRfILENAME,X
- BEQ +
- INX
- BNE -
- ;** ISeND
- + LDX #TRUE
- LDA INlINE+14
- CMP #"E"
- BEQ +
- LDX #FALSE
- + STX TEMPhAVErEC+HRiSeND
- ;** FROMsEG
- LDY #0
- JSR SCANnUM
- BCS SCANeRR
- LDA SCANvAL+0
- LDY SCANvAL+1
- STA TEMPhAVErEC+HRfROMsEG+0
- STY TEMPhAVErEC+HRfROMsEG+1
- ;** TOsEG
- LDY #7
- JSR SCANnUM
- BCS SCANeRR
- LDA SCANvAL+0
- LDY SCANvAL+1
- STA TEMPhAVErEC+HRtOsEG+0
- STY TEMPhAVErEC+HRtOsEG+1
- ;** VALIDlENGTH
- LDY #19
- JSR SCANnUM
- BCS SCANeRR
- LDA SCANvAL+0
- LDY SCANvAL+1
- STA TEMPhAVErEC+HRvALIDlENGTH+0
- STY TEMPhAVErEC+HRvALIDlENGTH+1
- LDA SCANvAL+2
- LDY SCANvAL+3
- STA TEMPhAVErEC+HRvALIDlENGTH+2
- STY TEMPhAVErEC+HRvALIDlENGTH+3
- ;** TEMPfILEnAME
- LDY #34
- JSR SCANnUM
- BCS SCANeRR
- LDA SCANvAL+0
- LDY SCANvAL+1
- STA TEMPhAVErEC+HRtEMPfILEnAME+0
- STY TEMPhAVErEC+HRtEMPfILEnAME+1
-
- ;** STORE STATUS INFO
- LDA HAVEcOUNT
- CMP #MAXhAVE
- BCC +
- LDA #<SCANtOOmANYfRAGS
- LDY #<SCANtOOmANYfRAGS
- JSR EPUTS
- SCANeRR = *
- JMP SCANsTATUSfILE
- + LDA HAVEcOUNT
- INC HAVEcOUNT
- JSR GETh
- LDY #HRsIZE-1
- - LDA TEMPhAVErEC,Y
- STA (H),Y
- DEY
- BPL -
- JMP SCANsTATUSfILE
-
- SCANtOOmANYfRAGS = *
- .ASC "TOO MANY FRAGMENTS IN 0bc-stat, IGNORING FRAGMENT"
- .BYTE CHRcr,0
-
- ;===BSS===
- BSS = *
- INlINE = BSS+0
- TEMPpREFIX = INlINE+MAXlINE
- TEMPnAMEsTR = TEMPpREFIX+20
- HAVES = TEMPnAMEsTR+MAXfILENAME
- COPYbUF = HRsIZE*MAXhAVE+HAVES
- DECODEtABLE = COPYbUF+COPYbUFsIZE
- TEMPhAVErEC = DECODEtABLE+256
- INbUF = TEMPhAVErEC+HRsIZE
- BSSeND = INbUF+64
- UNBCODEHELP.S
- 1598
- 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 UNBCODEbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UNBCODEbODY = *
- LDA #0
- STA BUFcOUNT+0
- STA BUFcOUNT+1
- STA HITlASTlINE
- STA LASTlINEtERMINATOR
-
- ;** SEARCH FOR "BEGIN" LINE
- SEARCHlINE = *
- JSR GETLINE
- BCC +
- CLC
- RTS
- + LDA INlINE
- CMP #"-"
- BNE SEARCHlINE
- JSR CHECKsTOP
- LDX #0
- LDA INlINE+2
- CMP #"B"
- BEQ +
- LDX #ASCIIbEGIN-PETSCIIbEGIN
- + LDY #0
- - LDA INlINE,Y
- CMP PETSCIIbEGIN,X
- BNE SEARCHlINE
- INX
- INY
- CPY #ASCIIbEGIN-PETSCIIbEGIN
- BCC -
- LDY #0
- CPX #ASCIIbEGIN-PETSCIIbEGIN+1
- BCC +
- LDY #$FF
- + STY ASCIIfILE
- JMP PROCESSbEGIN
-
- PETSCIIbEGIN = *
- .ASC "--BCODE-BEGIN "
- ASCIIbEGIN = *
- .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$62,$65,$67,$69,$6E,$20
-
- ;** PROCESS "BEGIN" LINE
- PROCESSbEGIN = *
- ;** EXTRACT THE SEGMENT NUMBER
- LDY #14
- JSR SCANnUM
- BCC +
- JMP BEGINeRROR
- + INY
- LDA SCANvAL+2
- ORA SCANvAL+3
- BEQ +
- LDA #<SEGtOObIGmSG
- LDY #>SEGtOObIGmSG
- JSR EPUTS
- JMP SEARCHlINE
- + LDA SCANvAL+0
- LDX SCANvAL+1
- STA SEGNUM+0
- STX SEGNUM+1
- LDA #0
- STA SEGNUM+2
- STA SEGNUM+3
- LDA SEGNUM+0
- ORA SEGNUM+1
- BNE +
- JMP BEGINeRROR
-
- ;** EXTRACT FILENAME, TRUNC TO 16 CHARS
- + CLC
- TYA
- ADC #<INlINE
- STA OUTnAME+0
- LDA #>INlINE
- ADC #0
- STA OUTnAME+1
- LDY #16
- LDA #0
- STA (OUTnAME),Y
- JSR MAKEpETSCIInAME
- JSR ECHOeXTRACTnAME
-
- ;** OPEN OUTPUT FILE
- JSR GETtEMPfILE
- BCC +
- JMP SEARCHlINE
-
- ;** READ BCODED DATA
- + JSR BUILDdECODEtABLE
- JSR CRCiNIT
- - JSR GETLINE
- BCS UNEXPECTEDeOF
- JSR CONVERTlINE
- BCC +
- ;** CHECK IF SEGMENT-END LINE
- LDA INlINE
- CMP #"-"
- BEQ FINISHfILE
- ;** REPORT INVALID CHARACTERS
- LDA #<BADcHARSmSG
- LDY #>BADcHARSmSG
- JSR EPUTS
- JMP -
- + JSR CRUNCHlINE
- JSR CRClINE
- JSR WRITElINE
- JMP -
-
- ;** FINISH WITH FILE
- FINISHfILE = *
- LDA OUTFILE
- JSR CLOSE
- JSR CRCfINISH
- JSR PROCESSfINISH
- ;** PROCESS FOR ANOTHER FILE
- JMP SEARCHlINE
-
- UNEXPECTEDeOF = *
- LDA #<UNEXeOFmSG
- LDY #>UNEXeOFmSG
- JSR EPUTS
- LDA OUTFILE
- JSR CLOSE
- JSR DISCARDsEGMENT
- SEC
- RTS
-
- UNEXeOFmSG = *
- .ASC "UNEXPECTED eof, IGNORING SEGMENT."
- .BYTE CHRcr,0
-
- SEGtOObIGmSG = *
- .ASC "SEGMENT NUMBER IS LARGER THAN 65535, IGNORING SEGMENT."
- .BYTE CHRcr,0
-
- BADcHARSmSG = *
- .ASC "WARNING: BAD CHARACTERS ON LINE, IGNORING LINE."
- .BYTE CHRcr,0
-
- MAKEpETSCIInAME = *
- BIT ASCIIfILE
- BMI +
- RTS
- + LDY #0
- - LDA (OUTnAME),Y
- BEQ +
- JSR CONVaSC2pET
- STA (OUTnAME),Y
- INY
- BNE -
- + RTS
-
- CONVaSC2pET = *
- 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
-
- ECHOeXTRACTnAME = *
- LDA #<ECHOeXTRACTmSG1
- LDY #>ECHOeXTRACTmSG1
- JSR EPUTS
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #1
- LDX #SEGNUM
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR EPUTS
- LDA #<ECHOeXTRACTmSG2
- LDY #>ECHOeXTRACTmSG2
- JSR EPUTS
- LDA OUTnAME+0
- LDY OUTnAME+1
- JSR EPUTS
- LDA #<ECHOeXTRACTmSG3
- LDY #>ECHOeXTRACTmSG3
- JMP EPUTS
-
- ECHOeXTRACTmSG1 = *
- .ASC "EXTRACTING SEG "
- .BYTE 0
- ECHOeXTRACTmSG2 = *
- .ASC " OF "
- .BYTE CHRqUOTE,0
- ECHOeXTRACTmSG3 = *
- .BYTE CHRqUOTE,CHRcr,0
- NUMBUF .BUF 12
-
- REPORToPENeRROR = *
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- LDA #<REPORToPENeRRORmSG
- LDY #>REPORToPENeRRORmSG
- JSR EPUTS
- RTS
-
- REPORToPENeRRORmSG = *
- .ASC ": CANNOT OPEN, CONTINUING"
- .BYTE CHRcr,0
-
- SCANdIGIT .BUF 1
- SCANsAVE .BUF 4
- SCANtEMP .BUF 1
- SCANiNDEX .BUF 1
- SCANaNYTHING .BUF 1
-
- SCANnUM = * ;( .y=INlINEiNDEX ) : .y=SCAN, [SCANvAL]=NUM, .cs=ERR
- LDX #3
- LDA #0
- - STA SCANvAL,X
- DEX
- BPL -
- LDA #0
- STA SCANaNYTHING
- - LDA INlINE,Y
- CMP #" "
- BNE SCANnUMnEXT
- INY
- BNE -
- SEC
- RTS
-
- SCANnUMnEXT = *
- LDA INlINE,Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCC ++
- + LDA SCANaNYTHING
- BEQ SCANeRROR
- CLC
- RTS
- + AND #$0F
- STA SCANdIGIT
- LDA #$FF
- STA SCANaNYTHING
- ;** TIMES TEN
- STY SCANtEMP
- LDX #3
- - LDA SCANvAL,X
- STA SCANsAVE,X
- DEX
- BPL -
- LDA #2
- STA SCANiNDEX
- - CLC
- LDY #4
- LDX #0
- - ROL SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- DEC SCANiNDEX
- BNE --
- CLC
- LDY #4
- LDX #0
- - LDA SCANvAL,X
- ADC SCANsAVE,X
- STA SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- CLC
- LDY #4
- LDX #0
- - ROL SCANvAL,X
- INX
- DEY
- BNE -
- BCS SCANeRROR
- CLC
- LDY #4
- LDX #0
- LDA SCANdIGIT
- - ADC SCANvAL,X
- STA SCANvAL,X
- LDA #0
- INX
- DEY
- BNE -
- BCS SCANeRROR
-
- LDY SCANtEMP
- INY
- BEQ SCANeRROR
- JMP SCANnUMnEXT
-
- SCANeRROR = *
- SEC
- RTS
-
- BEGINeRROR = *
- LDA #<BEGINeRRORmSG
- LDY #>BEGINeRRORmSG
- JSR EPUTS
- JMP SEARCHlINE
-
- BEGINeRRORmSG = *
- .ASC "INVALID --BCODE-BEGIN LINE FORMAT, IGNORING SEGMENT"
- .BYTE CHRcr,0
-
- CONVERTpADS .BUF 1
- CONVERTcHARS .BUF 1
-
- CONVERTlINE = *
- LDX #0
- STX CONVERTpADS
- - LDA INlINE,X
- BNE +
- STX CONVERTcHARS
- CLC
- RTS
- + CMP #"="
- BNE +
- INC CONVERTpADS
- + TAY
- LDA DECODEtABLE,Y
- BMI +
- STA INlINE,X
- INX
- BNE -
- + SEC
- RTS
-
- CRUNCHbYTES .BUF 1
-
- CRUNCHlINE = *
- LDX #0
- LDY #0
- - JSR CRUNCHqUANTUM
- CPX CONVERTcHARS
- BCC -
- TYA
- SEC
- SBC CONVERTpADS
- STA CRUNCHbYTES
- RTS
-
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
-
- CRUNCHqUANTUM = * ;(.x=iN4BYTESoFFSET, .y=oUT3BYTESoFFSET) : .x++, .y++
- LDA INlINE,X ;*** OUTPUT BYTE 0
- ASL
- ASL
- STA TEMP
- INX
- LDA INlINE,X
- LSR
- LSR
- LSR
- LSR
- AND #%00000011
- ORA TEMP
- STA INlINE,Y
- INY
- LDA INlINE,X ;*** OUTPUT BYTE 1
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- INX
- LDA INlINE,X
- LSR
- LSR
- AND #%00001111
- ORA TEMP
- STA INlINE,Y
- INY
- LDA INlINE,X ;*** OUTPUT BYTE 2
- INX
- ROR
- ROR
- ROR
- AND #%11000000
- STA TEMP
- LDA INlINE,X
- INX
- AND #%00111111
- ORA TEMP
- STA INlINE,Y
- INY
- RTS
-
- WRITElINE = *
- LDA #<INlINE
- LDY #>INlINE
- STA ZP+0
- STY ZP+1
- LDA CRUNCHbYTES
- LDY #0
- LDX OUTFILE
- JSR WRITE
- RTS
-
- ;** CRC = 0Xffffffff;
- ;** WHILE( (C=GETC(FP)) != eof ) {$7b}
- ;** CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ (CRC^C) & 0Xff ];
- ;** {$7d}
- ;** RETURN( CRC^0Xffffffff );
-
- CRCiNIT = *
- LDX #3
- - LDA #$FF
- STA CRC,X
- LDA #0
- STA BYTES,X
- DEX
- BPL -
- RTS
-
- CRClINE = *
- LDY #0
- CPY CRUNCHbYTES
- BCS +
- - LDA INlINE,Y ;.x = (CRC^C) & 0Xff
- EOR CRC+0
- TAX
- LDA CRC+1 ;CRC = (CRC>>8) & 0X00ffffff ^ CRCtABLE[ .x ]
- EOR CRCtABLE0,X
- STA CRC+0
- LDA CRC+2
- EOR CRCtABLE1,X
- STA CRC+1
- LDA CRC+3
- EOR CRCtABLE2,X
- STA CRC+2
- LDA CRCtABLE3,X
- STA CRC+3
- INY
- CPY CRUNCHbYTES
- BCC -
- + CLC
- LDA BYTES+0
- ADC CRUNCHbYTES
- STA BYTES+0
- BCC +
- INC BYTES+1
- BNE +
- INC BYTES+2
- BNE +
- INC BYTES+3
- + RTS
-
- CRCfINISH = *
- LDX #3
- - LDA CRC,X
- EOR #$FF
- STA CRC,X
- DEX
- BPL -
- RTS
-
- HITlASTlINE .BUF 1
- LASTlINEtERMINATOR .BUF 1
-
- GETLINE = *
- LDA HITlASTlINE
- BEQ +
- SEC
- RTS
- + LDX #0
- STX GETLINEpOS
-
- ;** TOSS AN lf THAT FOLLOWS A cr
- JSR GETbYTE
- BCS GETLINEpROCESS
- CMP #CHRlf
- CLC
- BNE GETLINEpROCESS
- LDX LASTlINEtERMINATOR
- CPX #CHRcr
- CLC
- BNE GETLINEpROCESS
-
- GETLINEcHAR = *
- JSR GETbYTE
- GETLINEpROCESS = *
- BCC +
- LDA #$FF
- STA HITlASTlINE
- JMP GETLINEfINISH
- + CMP #CHRcr
- BEQ GETLINEfINISH
- CMP #CHRlf
- BEQ GETLINEfINISH
- LDX GETLINEpOS
- CPX #98
- BCS +
- STA INlINE,X
- INC GETLINEpOS
- + JMP GETLINEcHAR
-
- GETLINEfINISH = *
- STA LASTlINEtERMINATOR
- LDX GETLINEpOS
- LDA #0
- STA INlINE,X
- CPX #0
- BEQ +
- CLC
- RTS
- + LDA HITlASTlINE
- CMP #1
- RTS
-
- GETbYTE = *
- LDA BUFcOUNT+0
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR+0
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT+0
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT+0
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- JSR CHECKsTOP
- LDA #<INbUF
- LDY #>INbUF
- STA ZP+0
- STY ZP+1
- STA BUFpTR+0
- STY BUFpTR+1
- LDA INbUFlEN+0
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT+0
- STY BUFcOUNT+1
- JSR CHECKsTOP
- JMP GETbYTE
- + SEC
- RTS
-
- SETiNDEX .BUF 1
- SETcOUNTDOWN .BUF 1
-
- BUILDdECODEtABLE = *
- LDX #0
- LDA #$FF
- - STA DECODEtABLE,X
- INX
- BNE -
- LDY #0
- LDX #0
- BIT ASCIIfILE
- BPL +
- LDX #ASCtABLEsET-PETtABLEsET
- + STX SETiNDEX
- LDA #5
- STA SETcOUNTDOWN
- - LDX SETiNDEX
- LDA PETtABLEsET+1,X
- STA TEMP
- LDA PETtABLEsET+0,X
- INX
- INX
- STX SETiNDEX
- LDX TEMP
- JSR BUILDsET
- DEC SETcOUNTDOWN
- BNE -
- LDA #0
- STA DECODEtABLE+$3D
- RTS
-
- PETtABLEsET .ASC "azAZ09++//"
- ASCtABLEsET .BYTE $41,$5A,$61,$7A,$30,$39,$2B,$2B,$2F,$2F
-
- SETlIMIT .BUF 1
-
- BUILDsET = *
- INX
- STX SETlIMIT
- TAX
- - TYA
- STA DECODEtABLE,X
- INY
- INX
- CPX SETlIMIT
- BCC -
- RTS
-
- PROCESSfINISH = * ;PROCESS THE BCODE-END LINE
- LDA #TRUE
- STA ISeND
- LDX #ASCeND-PETeND-1
- BIT ASCIIfILE
- BPL +
- LDX #PETcONT-PETeND-1
- + LDY #ASCeND-PETeND-1
- JSR COMPAREfINISH
- LDY #ASCeND-PETeND-1
- BCC FINcHECKsEGMENT
- LDA #FALSE
- STA ISeND
- LDX #ASCcONT-PETeND-1
- BIT ASCIIfILE
- BPL +
- LDX #ASCcONTeND-PETeND-1
- + LDY #ASCcONT-PETcONT-1
- JSR COMPAREfINISH
- LDY #ASCcONT-PETcONT
- BCC FINcHECKsEGMENT
- LDA #0
- JMP BADfINISH
-
- FINcHECKsEGMENT = *
- JSR SCANnUM
- BCC +
- - LDA #1
- JMP BADfINISH
- + LDX #3
- - LDA SCANvAL,X
- CMP SEGNUM,X
- BNE --
- DEX
- BPL -
-
- FINcHECKsIZE = *
- JSR SCANnUM
- BCC +
- - LDA #2
- JMP BADfINISH
- + LDX #3
- - LDA SCANvAL,X
- CMP BYTES,X
- BNE --
- DEX
- BPL -
-
- FINcHECKcRC = *
- INY
- JSR SCANhEX
- BCC +
- - LDA #3
- JMP BADfINISH
- + LDX #3
- - LDA SCANvAL,X
- CMP CRC,X
- BNE --
- DEX
- BPL -
- JSR COMMITsEGMENT
- BIT DEBUG
- BPL +
- LDX #STDERR
- STX STATfCB
- JSR WRITEsTATUSdATA
- + JSR CHECKsTOP
- CLC
- RTS
-
- SCANhEX = *
- LDX #3
- - LDA INlINE,Y
- INY
- JSR HEXtObIN
- BCS +
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- LDA INlINE,Y
- INY
- JSR HEXtObIN
- BCS +
- ORA TEMP
- STA SCANvAL,X
- DEX
- BPL -
- CLC
- + RTS
-
- HEXtObINxSAVE .BUF 1
-
- HEXtObIN = *
- BIT ASCIIfILE
- BPL +
- STX HEXtObINxSAVE
- JSR CONVaSC2pET
- LDX HEXtObINxSAVE
- + 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
-
- COMPAREfINISH = *
- - LDA INlINE,Y
- CMP PETeND,X
- BNE +
- DEX
- DEY
- BPL -
- CLC
- RTS
- + SEC
- RTS
-
- BADfINISH = * ;.a=ERROR [0=TOKEN,1=SEGMENT,2=SIZE,3=CRC]
- PHA
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- PLA
- ASL
- TAX
- LDA BADfINvEC+1,X
- TAY
- LDA BADfINvEC+0,X
- JSR EPUTS
- LDA #<BADfINdISCARD
- LDY #>BADfINdISCARD
- JSR EPUTS
- JSR DISCARDsEGMENT
- JSR CHECKsTOP
- RTS
-
- BADfINvEC = *
- .WORD BADfINtOKEN,BADfINsEGMENT,BADfINsIZE,BADfINcRC
- BADfINtOKEN = *
- .ASC ": INVALID TOKEN ON FINISH LINE"
- .BYTE 0
- BADfINsEGMENT = *
- .ASC ": SEGMENT NUMBER MISMATCH"
- .BYTE 0
- BADfINsIZE = *
- .ASC ": FILE SIZE MISMATCH"
- .BYTE 0
- BADfINcRC = *
- .ASC ": crc-32 CHECKSUM MISMATCH"
- .BYTE 0
- BADfINdISCARD = *
- .ASC ", IGNORING SEGMENT"
- .BYTE CHRcr,0
-
- PETeND .ASC "--BCODE-END "
- ASCeND .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$65,$6E,$64,$20
-
- PETcONT .ASC "--BCODE-CONTINUED "
- ASCcONT .BYTE $2D,$2D,$62,$63,$6F,$64,$65,$2D,$63,$6F,$6E,$74,$69,$6E,$75
- .BYTE $65,$64,$20
- ASCcONTeND = *
-
- GETtEMPnAMEsTR = * ;( TEMPnAME, .a=PUTfILETYPE ) : TEMPnAMEsTR, (ZP)
- PHA
- LDA #"0"
- STA TEMPnAMEsTR+0
- LDA #"b"
- STA TEMPnAMEsTR+1
- LDA #"c"
- STA TEMPnAMEsTR+2
- LDA #<TEMPnAMEsTR+3
- LDY #>TEMPnAMEsTR+3
- STA SYSWORK+0
- STY SYSWORK+1
- STA ZP+0
- STY ZP+1
- LDX #TEMPnAME
- LDA #5
- JSR UTOAZ
- PLA
- CMP #FALSE
- BEQ +
- LDA #","
- STA TEMPnAMEsTR+3,Y
- LDA #"P"
- STA TEMPnAMEsTR+4,Y
- LDA #0
- STA TEMPnAMEsTR+5,Y
- + RTS
-
- UTOAZ = * ;( 0+.x=VAR32, .a=WIDTH, (SYSWORK)=STORE )
- JSR UTOA
- LDY #0
- - LDA (SYSWORK),Y
- BEQ ++
- CMP #" "
- BNE +
- LDA #"0"
- STA (SYSWORK),Y
- + INY
- BNE -
- + RTS
-
- FILEmODE .BUF 1
-
- GETtEMPfILE = * ;( OUTnAME, SEGNUM ) : CURhAVE, CURhAVEnUM, OUTFILE, .cs=ERR
- ;** SEARCH TO APPEND TO EXISTING FILE
- LDA #255
- STA CURhAVE
-
- CHECKnEXT = *
- INC CURhAVE
- LDA CURhAVE
- CMP HAVEcOUNT
- BCC +
- JMP CANNOTaPPEND
- + JSR GETh
- JSR CMPoUTnAMEh
- CMP #0
- BNE CHECKnEXT
- LDY #HRfROMsEG
- LDA SEGNUM+0
- CMP (H),Y
- LDA SEGNUM+1
- INY
- SBC (H),Y
- BCC +
- LDY #HRtOsEG
- LDA (H),Y
- CMP SEGNUM+0
- INY
- LDA (H),Y
- SBC SEGNUM+1
- BCC +
- LDA #<IGNOREdUPmSG
- LDY #>IGNOREdUPmSG
- JSR EPUTS
- SEC
- RTS
- IGNOREdUPmSG = *
- .ASC "IGNORING DUPLICATE SEGMENT"
- .BYTE CHRcr,0
-
- + LDY #HRtOsEG
- LDA (H),Y
- TAX
- INY
- LDA (H),Y
- TAY
- INX
- BNE +
- INY
- + CPX SEGNUM+0
- BNE +
- CPY SEGNUM+1
- BEQ CANaPPEND
- + JMP CHECKnEXT
-
- ;** HERE WE KNOW WE CAN APPEND TO AN EXISTING TEMP FILE
- CANaPPEND = *
- LDA #"A"
- STA FILEmODE
- LDY #HRtEMPfILEnAME
- LDA (H),Y
- STA TEMPnAME+0
- INY
- LDA (H),Y
- STA TEMPnAME+1
- LDY #HRtOsEG
- LDA SEGNUM+0
- STA (H),Y
- INY
- LDA SEGNUM+1
- STA (H),Y
- LDY #HRiSeND
- LDA #FALSE
- STA (H),Y
- JMP OPENtEMPfILE
-
- ;** CANNOT APPEND
- CANNOTaPPEND = *
- JSR GETtEMPfILEnAMEoNLY
-
- ;** CREATE NEW HAVE RECORD
- CREATEnEWhAVErEC = *
- JSR INSERThAVErEC
- BCS +
- LDA #"W"
- STA FILEmODE
- JMP OPENtEMPfILE
- + LDA #<HAVEoVERmSG
- LDY #>HAVEoVERmSG
- JSR EPUTS
- SEC
- RTS
- HAVEoVERmSG = *
- .ASC "FRAGMENT TABLE FULL, IGNORING CURRENT SEGMENT"
- .BYTE CHRcr,0
-
- ;** OPEN TEMPORARY FILE
- OPENtEMPfILE = *
- LDA #TRUE
- JSR GETtEMPnAMEsTR
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- LDA FILEmODE
- JSR OPENoVERWRITE
- BCS +
- STA OUTFILE
- CLC
- RTS
- + LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- JSR EPUTS
- LDA #<OPENeRRmSG
- LDY #>OPENeRRmSG
- JSR EPUTS
- SEC
- RTS
- OPENeRRmSG = *
- .ASC ": CANNOT OPEN, IGNORING SEGMENT"
- .BYTE CHRcr,0
-
- GETtEMPfILEnAMEoNLY = * ;( NEXTtEMPnAME ) : TEMPnAME
- LDA NEXTtEMPnAME+0
- LDY NEXTtEMPnAME+1
- STA TEMPnAME+0
- STY TEMPnAME+1
- INC NEXTtEMPnAME+0
- BNE +
- INC NEXTtEMPnAME+1
- + LDA #0
- STA WORK
- - CMP HAVEcOUNT
- BCC +
- RTS
- + LDA WORK
- JSR GETh
- LDY #HRtEMPfILEnAME
- LDA (H),Y
- CMP TEMPnAME+0
- BNE +
- INY
- LDA (H),Y
- CMP TEMPnAME+1
- BNE +
- JMP GETtEMPfILEnAMEoNLY
- + INC WORK
- LDA WORK
- JMP -
-
- GETh = * ;( .a=HAVErECnUM ) : 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
-
- GETnEXTh = * ;( H ) : NEXTh
- CLC
- LDA H+0
- ADC #HRsIZE
- STA NEXTh+0
- LDA H+1
- ADC #0
- STA NEXTh+1
- RTS
-
- CMPoUTnAMEh = * ;( (OUTnAME)=STR1, (H)=HREC ) : .a=CMPrESULT[0=eq,1=gt,-1=lt]
- LDA H+0
- LDY H+1
- CLC
- ADC #HRfILENAME
- BCC +
- INY
- + STA WORK+0
- STY WORK+1
- LDY #255
- - INY
- LDA (OUTnAME),Y
- CMP (WORK),Y
- BNE +
- CMP #0
- BNE -
- LDA #0
- RTS
- + BCC +
- LDA #1
- RTS
- + LDA #$FF
- RTS
-
- INSERThAVErEC = * ;( SEGNUM, TEMPnAME, OUTnAME ) : CURhAVE
- ;** ALLOCATE NEW RECORD
- LDA HAVEcOUNT
- CMP #MAXhAVE
- BCC +
- RTS
- + STA CURhAVE
- INC HAVEcOUNT
-
- ;** FIND CORRECT POSITION FOR NEW RECORD
- - DEC CURhAVE
- LDA CURhAVE
- CMP #$FF
- BEQ INSERThAVErECiNIT
- JSR GETh
- JSR CMPoUTnAMEh
- CMP #1
- BEQ INSERThAVErECiNIT
- CMP #0
- BNE +
- LDY #HRfROMsEG
- LDA (H),Y
- CMP SEGNUM+0
- INY
- LDA (H),Y
- SBC SEGNUM+1
- BCC INSERThAVErECiNIT
- + JSR GETnEXTh
- LDY #HRsIZE-1
- - LDA (H),Y
- STA (NEXTh),Y
- DEY
- BPL -
- JMP --
-
- ;** INITIALIZE RECORD
- INSERThAVErECiNIT = *
- INC CURhAVE
- LDX #HRsIZE-1
- LDA #0
- - STA TEMPhAVErEC,X
- DEX
- BPL -
- LDA SEGNUM+0
- LDY SEGNUM+1
- STA TEMPhAVErEC+HRfROMsEG+0
- STY TEMPhAVErEC+HRfROMsEG+1
- STA TEMPhAVErEC+HRtOsEG+0
- STY TEMPhAVErEC+HRtOsEG+1
- LDA #FALSE
- STA TEMPhAVErEC+HRiSeND
- LDA TEMPnAME+0
- LDY TEMPnAME+1
- STA TEMPhAVErEC+HRtEMPfILEnAME+0
- STY TEMPhAVErEC+HRtEMPfILEnAME+1
- LDY #0
- - LDA (OUTnAME),Y
- STA TEMPhAVErEC+HRfILENAME,Y
- BEQ +
- INY
- CPY #16
- BCC -
- + LDA CURhAVE
- JSR GETh
- LDY #HRsIZE-1
- - LDA TEMPhAVErEC,Y
- STA (H),Y
- DEY
- BPL -
- CLC
- RTS
-
- WRITEnUM5 = * ;( 0+.x=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 WRITEnUM
-
- WRITEnUM10 = * ;( 0+.x=NUM32 )
- LDA #10
- WRITEnUM = *
- PHA
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA SYSWORK+0
- STY SYSWORK+1
- PLA
- JSR UTOAZ
- LDA #<NUMBUF
- LDY #>NUMBUF
- LDX STATfCB
- JSR FPUTS
- JSR WRITEsPACES
- RTS
-
- WRITEsPACES = *
- LDA #<SPACESmSG
- LDY #>SPACESmSG
- LDX STATfCB
- JSR FPUTS
- RTS
- SPACESmSG = *
- .BYTE $20,$20,0
-
- COMMITsEGMENT = *
- ;** ADD BYTE LENGTH, UPDATE iSeND FLAG IN HAVEREC
- LDA CURhAVE
- JSR GETh
- LDX #4
- LDY #HRvALIDlENGTH
- CLC
- - LDA (H),Y
- ADC BYTES-HRvALIDlENGTH,Y
- STA (H),Y
- INY
- DEX
- BNE -
- LDY #HRiSeND
- LDA ISeND
- STA (H),Y
- JSR CHECKcOALESCE
- JSR CHECKcOMPLETE
- RTS
-
- CHECKfILENAMEpTR .BUF 2
-
- CHECKcOMPLETE = *
- LDA CURhAVE
- JSR GETh
- LDY #HRiSeND
- LDA (H),Y
- BNE +
- - RTS
- + LDY #HRfROMsEG
- LDA (H),Y
- CMP #1
- BNE -
- INY
- LDA (H),Y
- BNE -
- JSR FETCHtEMPnAME
- LDA #FALSE
- JSR GETtEMPnAMEsTR
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- LDA H+0
- LDY H+1
- CLC
- ADC #HRfILENAME
- BCC +
- INY
- + STA ZW+0
- STY ZW+1
- STA CHECKfILENAMEpTR+0
- STY CHECKfILENAMEpTR+1
- JSR RENAMEoVERWRITE
- LDA #<COMPLETEmSG1
- LDY #>COMPLETEmSG1
- JSR EPUTS
- LDA CHECKfILENAMEpTR+0
- LDY CHECKfILENAMEpTR+1
- JSR EPUTS
- LDA #<COMPLETEmSG2
- LDY #>COMPLETEmSG2
- JSR EPUTS
- LDA CURhAVE
- JSR REMOVEhAVErEC
- RTS
-
- COMPLETEmSG1 = *
- .ASC "--rEASSEMBLED "
- .BYTE CHRqUOTE,0
- COMPLETEmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- REMOVEhAVErEC = * ;( .a=HAVErEC )
- DEC HAVEcOUNT
- STA HAVErEC
- - LDA HAVErEC
- CMP HAVEcOUNT
- BCC +
- RTS
- + LDA HAVErEC
- JSR GETh
- JSR GETnEXTh
- LDY #HRsIZE-1
- - LDA (NEXTh),Y
- STA (H),Y
- DEY
- BPL -
- INC HAVErEC
- JMP --
-
- CHECKfROMpLUS1 .BUF 2
-
- CHECKcOALESCE = * ;( CURhAVE )
- LDX CURhAVE
- INX
- CPX HAVEcOUNT
- BCC +
- - RTS
- + LDA CURhAVE
- JSR GETh
- JSR GETnEXTh
- CLC
- LDA NEXTh+0
- ADC #HRfILENAME
- STA OUTnAME+0
- LDA NEXTh+1
- ADC #0
- STA OUTnAME+1
- JSR CMPoUTnAMEh
- CMP #0
- BNE -
- LDY #HRtOsEG
- CLC
- LDA (H),Y
- ADC #1
- STA CHECKfROMpLUS1+0
- INY
- LDA (H),Y
- ADC #0
- STA CHECKfROMpLUS1+1
- LDY #HRfROMsEG
- LDA (NEXTh),Y
- CMP CHECKfROMpLUS1+0
- BNE -
- INY
- LDA (NEXTh),Y
- CMP CHECKfROMpLUS1+1
- BNE -
-
- LDA #<COALESCEmSG1
- LDY #>COALESCEmSG1
- JSR EPUTS
- LDA H+0
- LDY H+1
- JSR EPUTrANGE
- LDA #","
- JSR EPUTCHAR
- LDA #" "
- JSR EPUTCHAR
- LDA NEXTh+0
- LDY NEXTh+1
- JSR EPUTrANGE
- LDA #<COALESCEmSG2
- LDY #>COALESCEmSG2
- JSR EPUTS
- CLC
- LDA H+0
- ADC #HRfILENAME
- LDY H+1
- BCC +
- INY
- + JSR EPUTS
- LDA #CHRqUOTE
- JSR EPUTCHAR
- LDA #CHRcr
- JSR EPUTCHAR
-
- LDX CURhAVE
- INX
- LDA #"R"
- JSR OPENtEMP
- BCC +
- RTS
- + STA FIN
- LDX CURhAVE
- LDA #"A"
- JSR OPENtEMP
- BCC +
- LDA FIN
- JSR CLOSE
- + STA FOUT
- LDA CURhAVE
- JSR GETh
- JSR GETnEXTh
- LDY #HRvALIDlENGTH+3
- LDX #3
- - LDA (NEXTh),Y
- STA BYTES,X
- DEY
- DEX
- BPL -
- JSR COPYfILE
- LDA FOUT
- JSR CLOSE
- LDA FIN
- JSR CLOSE
- LDY #HRiSeND
- LDA (NEXTh),Y
- STA (H),Y
- LDY #HRtOsEG
- LDA (NEXTh),Y
- STA (H),Y
- INY
- LDA (NEXTh),Y
- STA (H),Y
- LDX #4
- LDY #HRvALIDlENGTH
- CLC
- - LDA (H),Y
- ADC (NEXTh),Y
- STA (H),Y
- INY
- DEX
- BNE -
- LDA CURhAVE
- CLC
- ADC #1
- JSR GETh
- JSR FETCHtEMPnAME
- LDA #FALSE
- JSR GETtEMPnAMEsTR
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- BCC +
- NOP ;XX ERROR MSG
- + LDA CURhAVE
- CLC
- ADC #1
- JSR REMOVEhAVErEC
- RTS
-
- COALESCEmSG1 = *
- .ASC "COALESCING SEGS "
- .BYTE 0
- COALESCEmSG2 = *
- .ASC " OF "
- .BYTE CHRqUOTE,0
-
- EPUTrANGE = *
- STA WORK+0
- STY WORK+1
- LDY #HRfROMsEG
- JSR EPUThAVEnUM
- LDA #"-"
- JSR EPUTCHAR
- LDY #HRtOsEG
-
- EPUThAVEnUM = *
- 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 SYSWORK+0
- STY SYSWORK+1
- LDA #1
- LDX #WORK+4
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR EPUTS
- RTS
-
- FETCHtEMPnAME = * ;( H )
- LDY #HRtEMPfILEnAME
- LDA (H),Y
- STA TEMPnAME+0
- INY
- LDA (H),Y
- STA TEMPnAME+1
- RTS
-
- OPENtEMP = * ;( .x=HAVErEC, .a=MODE ) : .a=FCB, .cs=ERR
- PHA
- TXA
- JSR GETh
- JSR FETCHtEMPnAME
- LDA #TRUE
- JSR GETtEMPnAMEsTR
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- STA ZP+0
- STY ZP+1
- PLA
- JSR OPEN
- BCC +
- LDA #<TEMPnAMEsTR
- LDY #>TEMPnAMEsTR
- JSR EPUTS
- LDA #<OPENtEMPmSG
- LDY #>OPENtEMPmSG
- JSR EPUTS
- SEC
- + RTS
-
- OPENtEMPmSG = *
- .ASC ": CANNOT OPEN, SHOULD BE ABLE TO, CONTINUING"
- .BYTE CHRcr,0
-
- COPYsEGlEN .BUF 2
- .BYTE $00,$00
-
- COPYfILE = * ;( FIN, FOUT, BYTES-- )
- LDA #<COPYbUF
- LDY #>COPYbUF
- STA ZP+0
- STY ZP+1
- LDA BYTES+2
- ORA BYTES+3
- BNE +
- LDA BYTES+0
- CMP #<COPYbUFsIZE
- LDA BYTES+1
- SBC #>COPYbUFsIZE
- BCS +
- LDA BYTES+0
- LDY BYTES+1
- JMP ++
- + LDA #<COPYbUFsIZE
- LDY #>COPYbUFsIZE
- + LDX FIN
- JSR READ
- BEQ +
- STA COPYsEGlEN+0
- STY COPYsEGlEN+1
- LDX FOUT
- JSR WRITE
- SEC
- LDY #4
- LDX #0
- - LDA BYTES,X
- SBC COPYsEGlEN,X
- STA BYTES,X
- INX
- DEY
- BNE -
- LDA BYTES+0
- ORA BYTES+1
- ORA BYTES+2
- ORA BYTES+3
- BNE COPYfILE
- RTS
- + LDA BYTES+0
- ORA BYTES+1
- ORA BYTES+2
- ORA BYTES+3
- BNE +
- RTS
- + LDA #<COPYlENmSG
- LDY #>COPYlENmSG
- JSR EPUTS
- RTS
-
- COPYlENmSG = *
- .ASC "iNSUFFICIENT TEMP DATA COALESCED, SHOULDN'T HAPPEN, CONTINUING"
- .BYTE CHRcr,0
-
- OPENoVmODE .BUF 1
-
- OPENoVERWRITE = * ;( (ZP)=NAME, .a=MODE ) : .a=fCB, .cs=ERR
- STA OPENoVmODE
- JSR OPEN
- BCS +
- RTS
- + LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BEQ +
- - JSR REPORToPENeRROR
- SEC
- RTS
- + JSR REMOVE
- LDA OPENoVmODE
- JSR OPEN
- BCS -
- RTS
-
- RENAMEoVnAME .BUF 2
-
- RENAMEoVERWRITE = * ;( (ZP)=NAME, (ZW)=NEWnAME ) : .cs=ERR
- JSR RENAME
- BCS +
- RTS
- + LDA ZP+0
- LDY ZP+1
- STA RENAMEoVnAME+0
- STY RENAMEoVnAME+1
- LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BEQ +
- - JSR REPORTrENAMEeRROR
- SEC
- RTS
- + LDA ZW+0
- LDY ZW+1
- STA ZP+0
- STY ZP+1
- JSR REMOVE
- LDA RENAMEoVnAME+0
- LDY RENAMEoVnAME+1
- STA ZP+0
- STY ZP+1
- JSR RENAME
- BCS -
- RTS
-
- RENAMEoVnEWnAME .BUF 2
-
- REPORTrENAMEeRROR = *
- LDA ZW+0
- LDY ZW+1
- STA RENAMEoVnEWnAME+0
- STY RENAMEoVnEWnAME+1
- LDA #<RENAMEeRRmSG1
- LDY #>RENAMEeRRmSG1
- JSR EPUTS
- LDA RENAMEoVnAME+0
- LDY RENAMEoVnAME+1
- JSR EPUTS
- LDA #<RENAMEeRRmSG2
- LDY #>RENAMEeRRmSG2
- JSR EPUTS
- LDA RENAMEoVnEWnAME+0
- LDY RENAMEoVnEWnAME+1
- JSR EPUTS
- LDA #<RENAMEeRRmSG3
- LDY #>RENAMEeRRmSG3
- JSR EPUTS
- RTS
-
- RENAMEeRRmSG1 = *
- .ASC "cANNOT RENAME "
- .BYTE CHRqUOTE,0
- RENAMEeRRmSG2 = *
- .BYTE CHRqUOTE
- .ASC " TO "
- .BYTE CHRqUOTE,0
- RENAMEeRRmSG3 = *
- .BYTE CHRqUOTE
- .ASC ", CONTINUING."
- .BYTE CHRcr,0
-
- UUDECODE.S
- 660
- ;*** UUDECODE PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:UUDECODE"
-
- JMP UUDECODEmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHRlf = $0A
- CHRcr = $0D
- CHRqUOTE = $22
-
- ASCIIfILE .BUF 1
- TEMP .BUF 1
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===UUDECODE===
- UUDaRG = 2
- UUDnAME = 4
- INbUFlEN = 6
-
- UUDECODEmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE UUDeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS UUDeNOUGHaRGS
-
- UUDuSAGE = *
- LDA #<UUDuSAGEmSG
- LDY #>UUDuSAGEmSG
- JMP PUTS
-
- UUDuSAGEmSG = *
- .ASC "uSAGE: UUDECODE FILE1 FILE2 ... FILEn"
- .BYTE CHRcr,0
-
- UUDeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<UUDiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>UUDiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA UUDaRG
- STY UUDaRG+1
- - LDA UUDaRG
- LDY UUDaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA UUDnAME
- STY UUDnAME+1
- ORA ZP+1
- BEQ UUDeXIT
- JSR UUDeCHO
- JSR UUDECODE
- BCC +
- JSR UUDeRROR
- + INC UUDaRG
- BNE +
- INC UUDaRG+1
- + JMP -
-
- UUDeXIT = *
- RTS
-
- UUDeRROR = *
- LDA #<UUDeRRORmSG1
- LDY #>UUDeRRORmSG1
- JSR EPUTS
- LDA UUDnAME
- LDY UUDnAME+1
- JSR EPUTS
- LDA #<UUDeRRORmSG2
- LDY #>UUDeRRORmSG2
- JMP EPUTS
-
- UUDeRRORmSG1 = *
- .ASC "eRROR ATTEMPTING TO UUDECODE FILE "
- .BYTE CHRqUOTE,0
- UUDeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- UUDeCHO = *
- LDA #<UUDeCHOmSG1
- LDY #>UUDeCHOmSG1
- JSR EPUTS
- LDA UUDnAME
- LDY UUDnAME+1
- JSR EPUTS
- LDA #<UUDeCHOmSG2
- LDY #>UUDeCHOmSG2
- JMP EPUTS
-
- UUDeCHOmSG1 = *
- .ASC "UUDECODING FILE "
- .BYTE CHRqUOTE,0
-
- UUDeCHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr,0
-
- BUFpTR = 8
- BUFcOUNT = 10
- INFILE = 12
- OUTFILE = 13
-
- UUDECODE = *
- ;** OPEN FILE
- LDA UUDnAME
- LDY UUDnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** DECODE FILE
- JSR UUDECODEbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UUDECODEbODY = *
- LDA #0
- STA BUFcOUNT
- STA BUFcOUNT+1
- STA HITlASTlINE
- STA LASTlINEtERMINATOR
-
- ;** SEARCH FOR "BEGIN" LINE
- UUDsEARCHlINE = *
- JSR GETLINE
- BCC +
- RTS
- + LDX #0
- LDA UUDiNlINE
- CMP #"B"
- BEQ +
- LDX #ASCIIbEGIN-PETSCIIbEGIN
- + LDY #0
- - LDA UUDiNlINE,Y
- CMP PETSCIIbEGIN,X
- BNE UUDsEARCHlINE
- INX
- INY
- CPY #6
- BCC -
- LDY #0
- CPX #ASCIIbEGIN-PETSCIIbEGIN+1
- BCC +
- LDY #$FF
- + STY ASCIIfILE
- LDA UUDiNlINE+9
- CMP #" "
- BNE UUDsEARCHlINE
- LDX #0
- - LDA UUDiNlINE+6,X
- CMP #"0"
- BCC UUDsEARCHlINE
- CMP #"8"
- BCS UUDsEARCHlINE
- INX
- CPX #3
- BCC -
- JMP PROCESSbEGIN
-
- PETSCIIbEGIN = *
- .ASC "BEGIN "
- ASCIIbEGIN = *
- .BYTE $62,$65,$67,$69,$6E,$20
-
- ;** PROCESS "BEGIN" LINE
- PROCESSbEGIN = *
- LDA ASCIIfILE
- BEQ +
- ;** JSR CONVERT FILENAME
- + JSR MAKEpETSCIInAME
- JSR DEFAULTpRGfILE
- JSR ECHOeXTRACTnAME
- LDA #<UUDiNlINE+10
- LDY #>UUDiNlINE+10
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN
- BCC OPENoK
- LDA ERRNO
- CMP #ACEeRRfILEeXISTS
- BEQ +
- - JSR REPORToPENeRROR
- JMP UUDsEARCHlINE
- + JSR SCRATCHfILE
- LDA #"W"
- JSR OPEN
- BCS -
-
- OPENoK = *
- STA OUTFILE
-
- ;** READ UUENCODED DATA
- - JSR GETLINE
- BCS UUDfINISHfILE
- JSR UUcONVERTlINE
- BCC +
- ;** REPORT INVALID CHARACTERS
- LDA #<BADcHARSmSG
- LDY #>BADcHARSmSG
- JSR EPUTS
- JMP -
- + LDA UUDiNlINE
- BEQ UUDfINISHfILE
- JSR UUcRUNCHlINE
- JSR UUwRITElINE
- JMP -
-
- ;** FINISH WITH FILE
- UUDfINISHfILE = *
- LDA OUTFILE
- JSR CLOSE
- ;** PROCESS FOR ANOTHER FILE
- JMP UUDsEARCHlINE
-
- BADcHARSmSG = *
- .ASC "WARNING: BAD CHARACTERS IN LINE; IGNORING LINE."
- .BYTE CHRcr,0
-
- ;%%%
- MAKEpETSCIInAME = *
- BIT ASCIIfILE
- BMI +
- RTS
- + LDX #0
- - LDA UUDiNlINE+10,X
- BEQ +
- JSR CONVaSC2pET
- STA UUDiNlINE+10,X
- INX
- BNE -
- + RTS
-
- CONVaSC2pET = *
- AND #$7F
- CMP #$60
- BCC +
- CLC
- ADC #$C0-$60
- + TAY
- AND #$7F
- CMP #"A"
- BCS +
- - TYA
- RTS
- + CMP #"Z"+1
- BCS -
- TYA
- EOR #$80
- RTS
-
- DEFAULTpRGfILE = *
- LDX #0
- - LDA UUDiNlINE+10,X
- BEQ +
- INX
- BNE -
- + LDA UUDiNlINE+8,X
- CMP #","
- BNE +
- RTS
- + LDA #","
- STA UUDiNlINE+10,X
- LDA #"P"
- STA UUDiNlINE+11,X
- LDA #0
- STA UUDiNlINE+12,X
- RTS
-
- ECHOeXTRACTnAME = *
- LDA #<ECHOeXTRACTmSG1
- LDY #>ECHOeXTRACTmSG1
- JSR EPUTS
- LDA #<UUDiNlINE+10
- LDY #>UUDiNlINE+10
- JSR EPUTS
- LDA #<ECHOeXTRACTmSG2
- LDY #>ECHOeXTRACTmSG2
- JMP EPUTS
-
- ECHOeXTRACTmSG1 = *
- .ASC "EXTRACTING FILE "
- .BYTE CHRqUOTE,0
-
- ECHOeXTRACTmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr,0
-
- REPORToPENeRROR = *
- LDA ZP
- LDY ZP+1
- JSR EPUTS
- LDA #<REPORToPENeRRORmSG
- LDY #>REPORToPENeRRORmSG
- JSR EPUTS
- RTS
-
- REPORToPENeRRORmSG = *
- .ASC ": CANNOT OPEN; SKIPPING THIS FILE."
- .BYTE CHRcr,0
-
- SCRATCHfILE = *
- LDA #<SCRATCHfILEmSG1
- LDY #>SCRATCHfILEmSG1
- JSR EPUTS
- LDA #<UUDiNlINE+10
- LDY #>UUDiNlINE+10
- JSR EPUTS
- LDA #<SCRATCHfILEmSG2
- LDY #>SCRATCHfILEmSG2
- JSR EPUTS
- JSR GETCHAR
- PHA
- - CMP #CHRcr
- BEQ +
- JSR GETCHAR
- JMP -
- + LDA #<UUDiNlINE+10
- LDY #>UUDiNlINE+10
- STA ZP
- STY ZP+1
- PLA
- CMP #"Y"
- BEQ +
- CMP #"y"
- BEQ +
- RTS
- + JSR REMOVE
- RTS
-
- SCRATCHfILEmSG1 = *
- .ASC "oVERWRITE EXISTING FILE "
- .BYTE CHRqUOTE,0
- SCRATCHfILEmSG2 = *
- .BYTE CHRqUOTE
- .ASC "? "
- .BYTE 0
-
- CONVERTfILL .BUF 1
- CONVERTlEN = 15
- UUcONVERTlINE = *
- LDA #0
- STA CONVERTfILL
- LDA UUDiNlINE
- BNE +
- CLC
- RTS
- + JSR UUcONVERTcHAR
- BCC +
- RTS
- + STA UUDiNlINE
- LDX #60
- CMP #46
- BCC +
- LDX #84
- + STX CONVERTlEN
- LDX #0
- - CPX CONVERTlEN
- BCC +
- CLC
- RTS
- + BIT CONVERTfILL
- BMI DOcONVERTfILL
- LDA UUDiNlINE+1,X
- BEQ +
- JSR UUcONVERTcHAR
- BCC CONVERTcONT
- RTS
- + LDA #$FF
- STA CONVERTfILL
-
- DOcONVERTfILL = *
- LDA #0
-
- CONVERTcONT = *
- STA UUDiNlINE+1,X
- INX
- BNE -
- RTS
-
- UUcONVERTcHAR = *
- CMP #" "
- BCS +
- SEC
- RTS
- + CMP #"_"+1
- BCS +
- SEC
- SBC #" "
- CLC
- RTS
- + CMP #96
- BNE +
- - CLC
- LDA #0
- RTS
- + CMP #"{$60}"
- BEQ -
- BCS +
- SEC
- RTS
- + CMP #"z"+1
- BCC +
- RTS
- + SEC
- SBC #"a"-33
- CLC
- RTS
-
- UUcRUNCHlINE = *
- LDX #0
- LDY #0
- - JSR UUcRUNCHgROUP
- CPY UUDiNlINE
- BCC -
- RTS
-
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
-
- UUcRUNCHgROUP = * ;(.x=iN4BYTESoFFSET, .y=oUT3BYTESoFFSET) : .x++, .y++
- LDA UUDiNlINE+1,X ;*** OUTPUT BYTE 0
- ASL
- ASL
- STA TEMP
- INX
- LDA UUDiNlINE+1,X
- LSR
- LSR
- LSR
- LSR
- AND #%00000011
- ORA TEMP
- STA UUDiNlINE+1,Y
- INY
- LDA UUDiNlINE+1,X ;*** OUTPUT BYTE 1
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- INX
- LDA UUDiNlINE+1,X
- LSR
- LSR
- AND #%00001111
- ORA TEMP
- STA UUDiNlINE+1,Y
- INY
- LDA UUDiNlINE+1,X ;*** OUTPUT BYTE 2
- INX
- ROR
- ROR
- ROR
- AND #%11000000
- STA TEMP
- LDA UUDiNlINE+1,X
- INX
- AND #%00111111
- ORA TEMP
- STA UUDiNlINE+1,Y
- INY
- RTS
-
- UUwRITElINE = *
- LDA #<UUDiNlINE+1
- LDY #>UUDiNlINE+1
- STA ZP
- STY ZP+1
- LDA UUDiNlINE
- LDY #0
- LDX OUTFILE
- JSR WRITE
- RTS
-
- GETLINEpOS = 14
- HITlASTlINE .BUF 1
- LASTlINEtERMINATOR .BUF 1
-
- GETLINE = *
- LDA HITlASTlINE
- BEQ +
- SEC
- RTS
- + LDX #0
- STX GETLINEpOS
-
- ;** TOSS AN lf THAT FOLLOWS A cr
- JSR GETbYTE
- BCS GETLINEpROCESS
- CMP #CHRlf
- CLC
- BNE GETLINEpROCESS
- LDX LASTlINEtERMINATOR
- CPX #CHRcr
- CLC
- BNE GETLINEpROCESS
-
- GETLINEcHAR = *
- JSR GETbYTE
- GETLINEpROCESS = *
- BCC +
- LDA #$FF
- STA HITlASTlINE
- JMP GETLINEfINISH
- + CMP #CHRcr
- BEQ GETLINEfINISH
- CMP #CHRlf
- BEQ GETLINEfINISH
- LDX GETLINEpOS
- CPX #98
- BCS +
- STA UUDiNlINE,X
- INC GETLINEpOS
- + JMP GETLINEcHAR
-
- GETLINEfINISH = *
- STA LASTlINEtERMINATOR
- LDX GETLINEpOS
- LDA #0
- STA UUDiNlINE,X
- CPX #0
- BEQ +
- CLC
- RTS
- + LDA HITlASTlINE
- CMP #1
- RTS
-
- GETbYTE = *
- LDA BUFcOUNT
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- LDA #<UUDiNbUF
- LDY #>UUDiNbUF
- STA ZP
- STY ZP+1
- STA BUFpTR
- STY BUFpTR+1
- LDA INbUFlEN
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- ;===THE END===
- UUDbSS = *
- UUDiNlINE = UUDbSS+0
- UUDiNbUF = UUDbSS+100
- UUENCODE.S
- 443
- ;*** UUENCODE PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:UUENCODE"
-
- JMP UUENCODEmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- BASENAMEsTART = LIBWORK
-
- BASENAME = * ;( (ZP)=INNAME ) : UUEoUTbUF=OUTNAME
- LDY #255
- STY BASENAMEsTART
- - INY
- LDA (ZP),Y
- BEQ BASENAMEdONE
- CMP #":"
- BEQ +
- CMP #"/"
- BNE -
- + STY BASENAMEsTART
- JMP -
- BASENAMEdONE = *
- LDY BASENAMEsTART
- LDX #255
- - INY
- INX
- LDA (ZP),Y
- STA UUEoUTbUF,X
- BNE -
- CPX #2
- BCC +
- LDA UUEoUTbUF-2,X
- CMP #","
- BNE +
- LDA #0
- STA UUEoUTbUF-2,X
- + RTS
-
- ;===UUENCODE===
- UUEaRG = 2
- UUEnAME = 4
- INbUFlEN = 6
-
- UUENCODEmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE UUEeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS UUEeNOUGHaRGS
-
- UUEuSAGE = *
- LDA #<UUEuSAGEmSG
- LDY #>UUEuSAGEmSG
- JMP PUTS
-
- UUEuSAGEmSG = *
- .ASC "uSAGE: UUENCODE FILE1 FILE2 ... FILEn"
- .BYTE CHRcr
- .BYTE 0
-
- UUEeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<UUEiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>UUEiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA UUEaRG
- STY UUEaRG+1
- - LDA UUEaRG
- LDY UUEaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA UUEnAME
- STY UUEnAME+1
- ORA ZP+1
- BEQ UUEeXIT
- JSR UUEeCHO
- JSR UUENCODE
- BCC +
- JSR UUEeRROR
- + INC UUEaRG
- BNE +
- INC UUEaRG+1
- + JMP -
-
- UUEeXIT = *
- RTS
-
- UUEeRROR = *
- LDA #<UUEeRRORmSG1
- LDY #>UUEeRRORmSG1
- JSR EPUTS
- LDA UUEnAME
- LDY UUEnAME+1
- JSR EPUTS
- LDA #<UUEeRRORmSG2
- LDY #>UUEeRRORmSG2
- JMP EPUTS
-
- UUEeRRORmSG1 = *
- .ASC "eRROR ATTEMPTING TO UUENCODE "
- .BYTE CHRqUOTE
- .BYTE 0
-
- UUEeRRORmSG2 = *
- .BYTE CHRqUOTE
- .BYTE CHRcr
- .BYTE 0
-
- UUEeCHO = *
- LDA #<UUEeCHOmSG1
- LDY #>UUEeCHOmSG1
- JSR EPUTS
- LDA UUEnAME
- LDY UUEnAME+1
- JSR EPUTS
- LDA #<UUEeCHOmSG2
- LDY #>UUEeCHOmSG2
- JMP EPUTS
-
- UUEeCHOmSG1 = *
- .ASC "uUENCODING FILE "
- .BYTE CHRqUOTE
- .BYTE 0
-
- UUEeCHOmSG2 = *
- .BYTE CHRqUOTE
- .ASC "..."
- .BYTE CHRcr
- .BYTE 0
-
- BUFpTR = 8
- BUFcOUNT = 10
- INFILE = 12
-
- UUENCODE = *
- ;** OPEN FILE
- LDA UUEnAME
- LDY UUEnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR UUENCODEbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UUENCODEbODY = *
- LDA #0
- STA BUFcOUNT
- STA BUFcOUNT+1
- ;** HEADER LINE
- LDA #<UUEhEADERmSG
- LDY #>UUEhEADERmSG
- JSR PUTS
- LDA UUEnAME
- LDY UUEnAME+1
- STA ZP
- STY ZP+1
- JSR BASENAME
- LDA #<UUEoUTbUF
- LDY #>UUEoUTbUF
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
- ;** LOOP
- - JSR UUlINE
- BCC -
- ;** END LINE
- LDA #<UUEeNDmSG
- LDY #>UUEeNDmSG
- JSR PUTS
- ;** CRC LINE
- RTS
-
- UUEhEADERmSG = *
- .ASC "BEGIN 640 "
- .BYTE 0
-
- UUEeNDmSG = *
- .ASC "{$60}"
- .BYTE CHRcr
- .ASC "END"
- .BYTE CHRcr,0
-
- GETbYTE = *
- LDA BUFcOUNT
- ORA BUFcOUNT+1
- BEQ GETbYTEfILLbUF
- LDY #0
- LDA (BUFpTR),Y
- INC BUFpTR
- BNE +
- INC BUFpTR+1
- + LDX BUFcOUNT
- BNE +
- DEC BUFcOUNT+1
- + DEC BUFcOUNT
- CLC
- RTS
-
- GETbYTEfILLbUF = *
- LDA #<UUEiNbUF
- LDY #>UUEiNbUF
- STA ZP
- STY ZP+1
- STA BUFpTR
- STY BUFpTR+1
- LDA INbUFlEN
- LDY INbUFlEN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUFcOUNT
- STY BUFcOUNT+1
- JMP GETbYTE
- + SEC
- RTS
-
- DATALEN = 13
- OUTLINELEN = 14
-
- UUlINE = *
- LDA #0
- STA DATALEN
- LDA #1
- STA OUTLINELEN
- ;** GET THE LINE
- - JSR GETfOURcHARS
- BCS +
- LDA DATALEN
- CMP #45
- BCC -
- CLC
- ;** PUT THE LINE
- + PHP
- LDY OUTLINELEN
- LDA #CHRcr
- STA UUEoUTbUF,Y
- INC OUTLINELEN
- LDA DATALEN
- CMP #0
- BEQ +
- JSR GETuUCHAR
- STA UUEoUTbUF
- LDA #<UUEoUTbUF
- LDY #>UUEoUTbUF
- STA ZP
- STY ZP+1
- LDA OUTLINELEN
- LDY #0
- LDX #1
- JSR WRITE
- + PLP
- RTS
-
- UUTEMP = 15
- UUBUF .BUF 3
-
- GETfOURcHARS = *
- LDX #2
- LDA #0
- - STA UUBUF,X
- DEX
- BPL -
- ;** READ THE BYTES
- LDX #0
- - STX UUTEMP
- JSR GETbYTE
- BCS +
- LDX UUTEMP
- STA UUBUF,X
- INC DATALEN
- INX
- CPX #3
- BCC -
- CLC
- ;** PUT BYTES INTO OUTPUT LINE
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
- + PHP
- LDY OUTLINELEN
- ;** FIRST BYTE
- LDA UUBUF
- LSR
- LSR
- JSR GETuUCHAR
- STA UUEoUTbUF,Y
- INY
-
- ;** SECOND BYTE
- LDA UUBUF
- ASL
- ASL
- ASL
- ASL
- STA UUTEMP
- LDA UUBUF+1
- LSR
- LSR
- LSR
- LSR
- ORA UUTEMP
- JSR GETuUCHAR
- STA UUEoUTbUF,Y
- INY
-
- ;** THIRD BYTE
- LDA UUBUF+1
- ASL
- ASL
- STA UUTEMP
- LDA UUBUF+2
- ASL
- ROL
- ROL
- AND #%00000011
- ORA UUTEMP
- JSR GETuUCHAR
- STA UUEoUTbUF,Y
- INY
-
- ;** FOURTH BYTE
- LDA UUBUF+2
- JSR GETuUCHAR
- STA UUEoUTbUF,Y
- INY
- STY OUTLINELEN
- PLP
- RTS
-
- GETuUCHAR = *
- AND #%00111111
- BNE +
- LDA #"{$60}"
- RTS
- + CLC
- ADC #" "
- CMP #"A"
- BCS +
- RTS
- + CMP #"["
- BCS +
- ADC #128
- + RTS
-
- ;===THE END===
- UUEeND = *
- UUEoUTbUF = UUEeND
- UUEiNbUF = UUEoUTbUF+80
- VI.S
- 1084
- ;*** ZED TEXT EDITOR PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:VI"
-
- JMP MAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- WORK1 = $02 ;(16)
- WORK2 = $12 ;(16)
- WORK3 = $22 ;(14)
-
- CHRcr = $0D
- CHRtAB = $09
- CHRqUOTE = $22
-
- ;SCREEN
-
- SCRtOPaDDR = $30 ;(2)
- SCRlINEaDDR = $32 ;(2)
- CURrOW = $34 ;(1)
- CURcOL = $35 ;(1)
- SCRrOWS = $36 ;(1)
- SCRcOLS = $37 ;(1)
- SCRrOWiNC = $38 ;(2)
- CURlEFTmARGIN = $3A ;(1)
- STATUSmARGIN .BUF 1
-
- ;DOCUMENT
-
- LINEpTR = $40 ;(4)
- LINEnUM = $44 ;(4)
- TOSlINEpTR = $48 ;(4)
- TOPlINEpTR = $4C ;(4)
- BOTlINEpTR = $50 ;(4)
- LINEcOUNT = $54 ;(4)
- FILElENGTH = $58 ;(4)
- TARGETlEN = $5C ;(1)
- WRAPfLAG = $5D ;(1) ;128=WRAP,64=SHOWcr
-
- ;MANAGEMENT
-
- MODIFIED = $3B ;(1) ;$00=NO, $FF=MODIFIED
- MODEfLAGS = $3C ;(1) ;$80=INSERT, $40=INDENT
- STATUSuPDATE = $3D ;(1) ;128=LINE,64=COL,32=MOD,16=INS,8=BYT,4=FRE,2=NM,1=MSG
- MARKEDlINEpTR .BUF 4 ;(4)
- MARKEDlINEnUM .BUF 4 ;(4)
- MARKEDcOL .BUF 4 ;(1)
-
- ;LINE FORMAT
-
- HEADbUFFER = $70 ;(11)
- HEADnEXTpTR = $70 ;(4)
- HEADpREVpTR = $74 ;(4)
- HEADlINElEN = $78 ;(1)
- HEADiNDENT = $79 ;(1)
- HEADfLAGS = $7A ;(1) ;$80=CONNECTED, $40=NULLlINE, $3f=INDENT
- HEADlENGTH = $0B
-
- ;KILL BUFFER
-
- BUFFERtOPpTR .BUF 4 ;(4)
- BUFFERbOTpTR .BUF 4 ;(4)
- BUFFERlINEcOUNT .BUF 4 ;(4)
-
- ;DOCUMENT BUFFERS
-
- ;COLORS
-
- CHARcOLOR .BYTE $0C ;$0E
- CURSORcOLOR .BYTE $06
- STATUScOLOR .BYTE $04
- SEPARcOLOR .BYTE $0F ;$03
- HILITEcOLOR .BYTE $0D ;$0C
- ALERTcOLOR .BYTE $0F
- BORDERcOLOR .BYTE $00
- BKGNDcOLOR .BYTE $00
-
- ;=== NEW ===
-
- SCREENiNIT = *
- ;** GET SCREEN PARMS
- JSR WINSIZE
- STA SCRrOWS
- LDA SYSWORK+0
- STA SCRcOLS
- LDA SYSWORK+2
- LDY SYSWORK+3
- STA SCRtOPaDDR+0
- STY SCRtOPaDDR+1
- STA $400
- STY $401
- LDA SYSWORK+4
- LDY SYSWORK+5
- STA SCRrOWiNC+0
- STY SCRrOWiNC+1
- ;** GET COLOR PALETTE
- JSR CONPALETTE
- LDX #7
- - LDA SYSWORK,X
- STA CHARcOLOR,X
- DEX
- BPL -
- ;** CLEAR SCREEN
- LDA #$A0
- LDY CHARcOLOR
- LDX #$FF
- JSR WINCLS
- ;** SET STATUS COLOR
- LDA SCRtOPaDDR+0
- LDY SCRtOPaDDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA SCRcOLS
- STA SYSWORK+5
- LDA #$40
- LDY STATUScOLOR
- LDX #0
- JSR WINPUT
- ;** SET SEPARATOR COLOR
- JSR SETsEPARaDDR
- LDA #$40
- LDY SEPARcOLOR
- LDX #0
- JSR WINPUT
- RTS
-
- JSR DISPLAYsEPARATOR
- LDA #$FF
- STA STATUSuPDATE
- JSR UPDATEsTATUS
- RTS
-
- SETsEPARaDDR = *
- CLC
- LDA SCRtOPaDDR+0
- ADC SCRrOWiNC+0
- STA SYSWORK+0
- LDA SCRtOPaDDR+1
- ADC SCRrOWiNC+1
- STA SYSWORK+1
- RTS
-
- DISPLAYsTATUS = *
- LDA SCRtOPaDDR+0
- LDY SCRtOPaDDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<STATUSlINE
- LDY #>STATUSlINE
- CLC
- ADC STATUSmARGIN
- BCC +
- INY
- + STA ZW+0
- STY ZW+1
- LDA SCRcOLS
- STA SYSWORK+5
- LDA #$80
- LDX SCRcOLS
- JSR WINPUT
- RTS
-
- STATUSlINE = *
- .ASC "l:12345678c:241 * iNS iND b:12345678 f:12345678 "
- ; "0----+----1----+----2----+----3----+----4----+----5-"
- .ASC "1234567890123456789012345678"
- ; "---+----6----+----7----+----"
-
- UPDATEsTATUS = *
- JSR DISPLAYsTATUS
- RTS
-
- DISPLAYsEPARATOR = *
- RTS
-
- ;=== MAIN ===
-
- MAIN = *
- JSR MALLOCiNIT
- JSR MAINiNIT
- JSR SCREENiNIT
- JSR DISPLAYsTATUS
- LDA #1
- LDY #0
- JSR GETARG
- JSR LOADfILE
- JSR DUMPdOC
- RTS
-
- MSG .ASC "zED FOR ace VERSION ace-0.01"
- .BYTE CHRcr,0
-
- MAINiNIT = *
- LDX #$7F-$02
- LDA #0
- - STA 2,X
- DEX
- BPL -
- LDA #$80
- STA WRAPfLAG
- JSR WINSIZE
- LDA SYSWORK+0
- STA TARGETlEN
- RTS
-
- ;*** LOAD FILE: USES WORK2 ***
-
- LOADhEAD = WORK2+0
- LOADtAIL = WORK2+4
- LOADlINES = WORK2+8
- LOADbYTES = WORK2+12
- LOADfCB = WORK3+0
- LOADlINEsCAN = WORK3+1
- LOADlINElEN = WORK3+2
- LOADbUFcOUNT = WORK3+3
- LOADbUFpTR = WORK3+4
-
- LOADfILE = * ;( (ZP)=NAME ) : [W2]=HEAD, [W2]=TAIL, [W2]=LINES, [W2]=BYTES
- JSR SAVEwORK3
- JSR LOADiNIT
- LDA #"R"
- JSR OPEN
- STA LOADfCB
- - JSR LOADlINE
- BCS +
- JSR LOADlINEwRAP
- JSR LOADlINEsTORE
- JSR LOADlINEoVERFLOW
- JMP -
- + LDA LOADlINElEN
- BEQ +
- JSR LOADlINEwRAP
- LDA #$00
- STA HEADfLAGS
- JSR LOADlINEsTORE
- + LDA LOADfCB
- JSR CLOSE
- JSR RESTOREwORK3
- RTS
-
- LOADiNIT = *
- LDA #0
- LDX #16+14-1
- - STA LOADhEAD,X
- DEX
- BPL -
- RTS
-
- LOADlINE = * ;( ) : .cs=END
- ;TAB EXPANSION WILL GO INTO THIS ROUTINE
- LDX LOADbUFpTR
- LDY LOADlINElEN
-
- LOADnEXTbYTE = *
- LDA LOADbUFcOUNT
- BNE ++
- STY LOADlINElEN
- JSR LOADbUF
- BCC +
- RTS
- + LDY LOADlINElEN
- LDX LOADbUFpTR
- + NOP
-
- - LDA FILEBUF,X
- STA LINE,Y
- INX
- INY
- CMP #CHRcr
- BEQ ++
- CPY TARGETlEN
- BEQ + ;DETERMINES IF crS WILL GO BEYOND LEN
- BCS ++
- + DEC LOADbUFcOUNT
- BNE -
- BEQ LOADnEXTbYTE
-
- + DEC LOADbUFcOUNT
- STX LOADbUFpTR
- STY LOADlINElEN
- CLC
- RTS
-
- LOADbUF = * ;( ) : .cs=EOF
- JSR STOPKEY
- BCS +
- LDA #<FILEBUF
- LDY #>FILEBUF
- STA ZP+0
- STY ZP+1
- LDA #<254
- LDY #>254
- LDX LOADfCB
- JSR READ
- BCS +
- BEQ +
- STA LOADbUFcOUNT
- LDA #0
- STA LOADbUFpTR
- CLC
- RTS
- + SEC
- RTS
-
- LOADlINEwRAP = *
- LDX LOADlINElEN
- DEX
- LDY #$00
- LDA LINE,X
- CMP #CHRcr
- BEQ +
- LDY #$80
- + STY HEADfLAGS
- CMP #CHRcr
- BNE +
- - STX HEADlINElEN
- STX LOADlINEsCAN
- STX LOADlINElEN
- RTS
-
- + LDX LOADlINElEN
- CPX TARGETlEN
- BCC -
-
- + BIT WRAPfLAG
- BMI +
- - LDA TARGETlEN
- STA LOADlINEsCAN
- STA HEADlINElEN
- RTS
-
- + LDX TARGETlEN
- - DEX
- CPX #255
- BEQ --
- LDA LINE,X
- CMP #" "
- BNE -
- + INX
- STX LOADlINEsCAN
- STX HEADlINElEN
- RTS
-
- LOADlINEsTORE = *
- INC LOADlINES+0
- BNE +
- INC LOADlINES+1
- BNE +
- INC LOADlINES+2
- BNE +
- INC LOADlINES+3
- + SEC
- BIT HEADfLAGS
- BMI +
- CLC
- + LDA LOADbYTES+0
- ADC HEADlINElEN
- STA LOADbYTES+0
- BCC +
- INC LOADbYTES+1
- BNE +
- INC LOADbYTES+2
- BNE +
- INC LOADbYTES+3
- + LDX #3
- - LDA #ACEmEMnULL
- STA HEADnEXTpTR,X
- LDA LOADtAIL,X
- STA HEADpREVpTR,X
- DEX
- BPL -
- JSR STASHlINE
-
- ;** FIRST LINE TO BE STORED
- LDA LOADhEAD+3
- CMP #ACEmEMnULL
- BNE +
- LDX #3
- - LDA ZP,X
- STA LOADhEAD,X
- STA LOADtAIL,X
- DEX
- BPL -
- RTS
-
- ;** ADDITIONAL LINES
- + LDX #3
- - LDA ZP,X
- LDY LOADtAIL,X
- STA LOADtAIL,X
- STY ZP,X
- DEX
- BPL -
- JSR FETCHhEAD
- LDX #3
- - LDA LOADtAIL,X
- STA HEADnEXTpTR,X
- DEX
- BPL -
- JSR STASHhEAD
- RTS
-
- LOADlINEoVERFLOW = *
- LDX LOADlINEsCAN
- LDY #0
- - CPX LOADlINElEN
- BCS +
- LDA LINE,X
- STA LINE,Y
- INX
- INY
- BNE -
- + STY LOADlINElEN
- RTS
-
- ;=== MANAGEMENT ROUTINES ===
-
- WORK3sAVE .BUF 14
-
- SAVEwORK3 = *
- LDX #13
- - LDA WORK3,X
- STA WORK3sAVE,X
- DEX
- BPL -
- RTS
-
- RESTOREwORK3 = *
- LDX #13
- - LDA WORK3sAVE,X
- STA WORK3,X
- DEX
- BPL -
- RTS
-
- FETCHlINEeXTRA = 6
-
- FETCHlINE = * ;( [ZP]=FARlINE ) : HEAD*, LINEBUF
- LDA #<LINEBUF
- LDY #>LINEBUF
- STA ZW+0
- STY ZW+1
- LDA #HEADlENGTH+FETCHlINEeXTRA
- LDY #0
- JSR FETCH
- LDX #HEADlENGTH-1
- - LDA LINEBUF,X
- STA HEADbUFFER,X
- DEX
- BPL -
- LDA HEADlINElEN
- CMP #FETCHlINEeXTRA+1
- BCC +
- CLC
- ADC #HEADlENGTH
- LDY #0
- JSR FETCH
- + RTS
-
- STASHlINE = * ;( HEAD*, LINEBUF ) : [ZP]=STOREDlINE, .cs=ERR
- LDA #0
- STA HEADiNDENT
- LDX #HEADlENGTH-1
- - LDA HEADbUFFER,X
- STA LINEBUF,X
- DEX
- BPL -
- CLC
- LDA HEADlINElEN
- ADC #HEADlENGTH
- LDY #0
- JSR MALLOC
- BCC +
- RTS
- + LDA #<LINEBUF
- LDY #>LINEBUF
- STA ZW+0
- STY ZW+1
- CLC
- LDA HEADlINElEN
- ADC #HEADlENGTH
- LDY #0
- JSR STASH
- CLC
- RTS
-
- FETCHhEAD = * ;( [ZP]=FARlINEpTR ) : HEADbUFFER
- LDX #HEADbUFFER
- LDY #HEADlENGTH
- JSR ZPLOAD
- RTS
-
- STASHhEAD = * ;( [ZP]=FARlINEpTR, HEADbUFFER )
- LDX #HEADbUFFER
- LDY #HEADlENGTH
- JSR ZPSTORE
- RTS
-
- ;=== DYNAMIC MEMORY ROUTINES ===
-
- MALLOCwORK = WORK1
-
- MALLOChEAD .BUF 4
- TPAfREEfIRST .BUF 1
- TPAfREEmIN .BUF 1
- TPAfREEpAGES .BUF 1
- TPAaREAsTART .BUF 1
- TPAaREAeND .BUF 1
-
- ;*** MALLOCiNIT()
-
- MALLOCiNIT = *
- LDA #ACEmEMnULL
- STA MALLOChEAD+3
- LDX #0
- LDA #$FF
- - STA TPAfREEMAP,X
- INX
- BNE -
- LDX #>BSSeND
- LDA #<BSSeND
- BEQ +
- INX
- + STX TPAfREEfIRST
- STX TPAaREAsTART
- LDX ACEsTACKpTR+1
- STX MALLOCwORK
- STX TPAaREAeND
- TXA
- SEC
- SBC TPAfREEfIRST
- BCS +
- LDA #0
- + STA TPAfREEpAGES
- CLC
- ADC #1
- STA TPAfREEmIN
- LDX TPAfREEfIRST
- CPX MALLOCwORK
- BCS +
- LDA #$00
- - STA TPAfREEMAP,X
- INX
- CPX MALLOCwORK
- BCC -
- + RTS
-
- LIBpAGES .BUF 1
-
- LIBpAGEaLLOC = * ;( .a=PAGES ) : [ZP]
- STA LIBpAGES
- LDX #$00
- LDY #ACEmEMiNTERNAL-1
- JSR PAGEALLOC
- BCS +
- RTS
- + JSR TPApAGEaLLOC
- BCS +
- RTS
- + LDA LIBpAGES
- LDX #ACEmEMiNTERNAL
- LDY #$FF
- JSR PAGEALLOC
- BCS +
- RTS
- + LDA #<NOMEMmSG
- LDY #>NOMEMmSG
- JSR EPUTS
- LDA #1
- JMP EXIT
-
- NOMEMmSG = *
- .BYTE CHRcr
- .ASC "iNSUFFICIENT MEMORY, ABORTING."
- .BYTE CHRcr,0
-
- NEWMAX .BUF 1
-
- TPApAGEaLLOC = * ;( LIBpAGES ) : [ZP]
- LDA LIBpAGES
- CMP TPAfREEmIN
- BCS TPAfREEMAPfULL
- ;** FIRST FREE
- LDX TPAfREEfIRST
- LDA TPAfREEMAP,X
- BEQ ++
- - INX
- BEQ TPAfREEMAPfULL
- LDA TPAfREEMAP,X
- BNE -
- STX TPAfREEfIRST
- JMP ++
- TPAfREEMAPfULL = *
- LDA LIBpAGES
- CMP TPAfREEmIN
- BCS +
- STA TPAfREEmIN
- + SEC
- RTS
-
- ;** SEARCH
- + DEX
- - LDY LIBpAGES
- - INX
- BEQ TPAfREEMAPfULL
- LDA TPAfREEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY LIBpAGES
- LDA #$41
- - STA TPAfREEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX TPAfREEfIRST
- BNE +
- LDY NEWMAX
- INY
- STY TPAfREEfIRST
- + SEC
- LDA TPAfREEpAGES
- SBC LIBpAGES
- STA TPAfREEpAGES
- LDA #0
- LDY #ACEmEMiNTERNAL
- STA ZP+0
- STX ZP+1
- STA ZP+2
- STY ZP+3
- CLC
- RTS
-
- MALLOClENsAVE .BUF 3
-
- MALLOC = *
- QUICKmALLOC = *
- STA MALLOClENsAVE+0
- STY MALLOClENsAVE+1
- JSR LIBmALLOC
- BCS +
- RTS
- + LDX MALLOClENsAVE+1
- LDA MALLOClENsAVE+0
- BEQ +
- INX
- + TXA
- CPX #>1024
- BCS +
- LDX #>1024
- + TXA
- STA MALLOClENsAVE+2
- JSR LIBpAGEaLLOC
- BCC +
- RTS
- + LDA #0
- LDY MALLOClENsAVE+2
- JSR FREE
- LDA MALLOClENsAVE+0
- LDY MALLOClENsAVE+1
- JMP MALLOC
-
- ;*** MALLOC( .ay=bYTES ) : [ZP]=fARpOINTER
-
- MALLOCmEMnEXTpTR = MALLOCwORK+0 ;(4)
- MALLOCmEMlENGTH = MALLOCwORK+4 ;(2)
- MALLOClENGTH = MALLOCwORK+6 ;(2)
- MALLOCq = MALLOCwORK+8 ;(4)
-
- LIBmALLOC = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA MALLOClENGTH
- STY MALLOClENGTH+1
- LDX #3
- - LDA MALLOChEAD,X
- STA ZP,X
- LDA #ACEmEMnULL
- STA MALLOCq,X
- DEX
- BPL -
-
- MALLOClOOK = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
-
- MALLOCeRROReXIT = *
- LDA #ACEmEMnULL
- STA ZP+3
- LDA #ACEeRRiNSUFFICIENTmEMORY
- STA ERRNO
- SEC
- RTS
-
- + LDX #MALLOCmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- LDA MALLOCmEMlENGTH
- CMP MALLOClENGTH
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- BCS MALLOCgOTbLOCK
- LDX #3
- - LDA ZP,X
- STA MALLOCq,X
- LDA MALLOCmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- JMP MALLOClOOK
-
- MALLOCgOTbLOCK = *
- LDA MALLOCmEMlENGTH
- CMP MALLOClENGTH
- BNE +
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- BEQ MALLOCtAKEwHOLEbLOCK
- + SEC
- LDA MALLOCmEMlENGTH
- SBC MALLOClENGTH
- STA MALLOCmEMlENGTH
- LDA MALLOCmEMlENGTH+1
- SBC MALLOClENGTH+1
- STA MALLOCmEMlENGTH+1
- LDX #MALLOCmEMnEXTpTR
- LDY #6
- JSR ZPSTORE
- CLC
- LDA ZP+0
- ADC MALLOCmEMlENGTH
- STA ZP+0
- LDA ZP+1
- ADC MALLOCmEMlENGTH+1
- STA ZP+1
- CLC
- RTS
-
- MALLOCtAKEwHOLEbLOCK = *
- LDA MALLOCq+3
- CMP #ACEmEMnULL
- BNE +
- LDX #3
- - LDA MALLOCmEMnEXTpTR,X
- STA MALLOChEAD,X
- DEX
- BPL -
- CLC
- RTS
- + LDX #3
- - LDA ZP,X
- LDY MALLOCq,X
- STA MALLOCq,X
- STY ZP,X
- DEX
- BPL -
- LDX #MALLOCmEMnEXTpTR
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA MALLOCq,X
- STA ZP,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** FREE( [ZP]=fARpOINTER, .ay=lENGTH ) {$7b}ALTERS [ZP]{$7d}
-
- FREEmEMnEXTpTR = MALLOCwORK+0 ;(4)
- FREEmEMlENGTH = MALLOCwORK+4 ;(2)
- FREElENGTH = MALLOCwORK+6 ;(2)
- FREEnEWpTR = MALLOCwORK+8 ;(4)
- FREEq = MALLOCwORK+12 ;(4)
-
- FREE = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA FREElENGTH+0
- STY FREElENGTH+1
- LDX #3
- - LDA ZP,X
- STA FREEnEWpTR,X
- LDA MALLOChEAD,X
- STA ZP,X
- LDA #ACEmEMnULL
- STA FREEq,X
- DEX
- BPL -
-
- FREEsEARCHlOOP = *
- LDA ZP+3
- CMP #ACEmEMnULL
- BEQ FREEcOALESCEqANDnEW
- LDA ZP+0
- CMP FREEnEWpTR+0
- LDA ZP+1
- SBC FREEnEWpTR+1
- LDA ZP+2
- SBC FREEnEWpTR+2
- LDA ZP+3
- SBC FREEnEWpTR+3
- BCS FREEcOALESCEqANDnEW
- + LDX #FREEmEMnEXTpTR
- LDY #4
- JSR ZPLOAD
- LDX #3
- - LDA ZP,X
- STA FREEq,X
- LDA FREEmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- BMI FREEsEARCHlOOP
-
- FREEcOALESCEqANDnEW = *
- LDX #3
- - LDA FREEq,X
- STA ZP,X
- DEX
- BPL -
- LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
- ;** PREV IS HEAD
- LDX #3
- - LDA MALLOChEAD,X
- STA FREEmEMnEXTpTR,X
- LDA FREEnEWpTR,X
- STA MALLOChEAD,X
- DEX
- BPL -
- LDA FREElENGTH+0
- LDY FREElENGTH+1
- STA FREEmEMlENGTH+0
- STY FREEmEMlENGTH+1
- JMP FREEcOALESCEnEWaNDp
-
- ;** PREV IS REAL
- + LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- LDA ZP+3
- CMP FREEnEWpTR+3
- BNE +
- LDA ZP+2
- CMP FREEnEWpTR+2
- BNE +
- CLC
- LDA ZP
- ADC FREEmEMlENGTH
- TAX
- LDA ZP+1
- ADC FREEmEMlENGTH+1
- CMP FREEnEWpTR+1
- BNE +
- CPX FREEnEWpTR
- BNE +
- ;** PREV DOES COALESCE
- CLC
- LDA FREEmEMlENGTH
- ADC FREElENGTH
- STA FREEmEMlENGTH
- LDA FREEmEMlENGTH+1
- ADC FREElENGTH+1
- STA FREEmEMlENGTH+1
- LDX #3
- - LDA FREEq,X
- STA FREEnEWpTR,X
- DEX
- BPL -
- BMI FREEcOALESCEnEWaNDp
-
- ;** PREV DOES NOT COALESCE
- + LDX #FREEnEWpTR
- LDY #4
- JSR ZPSTORE
- LDA FREElENGTH+0
- LDY FREElENGTH+1
- STA FREEmEMlENGTH+0
- STY FREEmEMlENGTH+1
-
- FREEcOALESCEnEWaNDp = *
- LDA FREEnEWpTR+3
- CMP FREEmEMnEXTpTR+3
- BNE +
- LDA FREEnEWpTR+2
- CMP FREEmEMnEXTpTR+2
- BNE +
- CLC
- LDA FREEnEWpTR
- ADC FREEmEMlENGTH
- TAX
- LDA FREEnEWpTR+1
- ADC FREEmEMlENGTH+1
- CMP FREEmEMnEXTpTR+1
- BNE +
- CPX FREEmEMnEXTpTR
- BNE +
-
- ;** NEW AND NEXT COALESCE
- LDX #3
- - LDA FREEmEMnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- LDA FREEmEMlENGTH+1
- PHA
- LDA FREEmEMlENGTH+0
- PHA
- LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPLOAD
- CLC
- PLA
- ADC FREEmEMlENGTH+0
- STA FREEmEMlENGTH+0
- PLA
- ADC FREEmEMlENGTH+1
- STA FREEmEMlENGTH+1
-
- + LDX #3
- - LDA FREEnEWpTR,X
- STA ZP,X
- DEX
- BPL -
- LDX #FREEmEMnEXTpTR
- LDY #6
- JSR ZPSTORE
- CLC
- RTS
-
- ;=== STANDARD LIBRARY ===
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- STX XSAVE
- STY YSAVE
- LDX #STDOUT
- JSR PUTC
- LDX XSAVE
- LDY YSAVE
- RTS
- XSAVE .BUF 1
- YSAVE .BUF 1
-
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===new functions===
-
- STOPcOUNTDOWN .BYTE 0
-
- DUMPdOC = *
- LDY CHARcOLOR
- LDX #$40
- JSR WINCLS
-
- LDX #3
- - LDA LOADhEAD,X
- STA ZP,X
- DEX
- BPL -
-
- - LDA ZP+3
- CMP #ACEmEMnULL
- BNE +
- RTS
- + JSR FETCHlINE
- LDA #<LINE
- LDY #>LINE
- STA ZP+0
- STY ZP+1
- LDA HEADlINElEN
- LDY #0
- LDX #STDOUT
- JSR WRITE
- LDA HEADfLAGS
- BPL +
- ;LDA #"="
- ;JSR PUTCHAR
- + LDA #CHRcr
- JSR PUTCHAR
- LDX #3
- - LDA HEADnEXTpTR,X
- STA ZP,X
- DEX
- BPL -
- INC STOPcOUNTDOWN
- LDA STOPcOUNTDOWN
- AND #7
- BNE +
- JSR STOPKEY
- BCC +
- LDA #1
- LDX #0
- JMP EXIT
- + JMP --
-
- ;===BSS===
-
- BSS = *
- LINEBUF = BSS+0 ;(256)
- LINE = LINEBUF+HEADlENGTH ;(241)
-
- FILEBUF = LINEBUF+256 ;(256)
- TPAfREEMAP = FILEBUF+256 ;(256)
- BSSeND = TPAfREEMAP+256
- WC.S
- 392
- ;*** WORD COUNTER PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:WC"
-
- JMP WCmAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHRcr = $0D
- CHRqUOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- STX XSAVE
- STY YSAVE
- LDX #STDOUT
- JSR PUTC
- LDX XSAVE
- LDY YSAVE
- RTS
- XSAVE .BUF 1
- YSAVE .BUF 1
-
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- ;===WORD COUNT===
- WCaRG = 2
- WCnAME = 4
- INbUFlEN = 6
- FILES = $50
-
- WCmAIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACEaRGC+1
- BNE WCeNOUGHaRGS
- LDA ACEaRGC
- CMP #2
- BCS WCeNOUGHaRGS
-
- WCuSAGE = *
- LDA #<WCuSAGEmSG
- LDY #>WCuSAGEmSG
- JMP EPUTS
-
- WCuSAGEmSG = *
- .ASC "uSAGE: WC FILE1 FILE2 ... FILEn"
- .BYTE CHRcr,0
-
- WCeNOUGHaRGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACEsTACKpTR
- SBC #<WCiNbUF
- STA INbUFlEN
- LDA ACEsTACKpTR+1
- SBC #>WCiNbUF
- STA INbUFlEN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA WCaRG
- STY WCaRG+1
- STY FILES
- JSR TOTiNIT
- - JSR STOPKEY
- BCS WCsTOPPED
- LDA WCaRG
- LDY WCaRG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA WCnAME
- STY WCnAME+1
- ORA ZP+1
- BEQ WCeXIT
- JSR WCfILE
- BCS +
- LDA FILES
- BMI +
- INC FILES
- + BCC +
- JSR WCeRROR
- + INC WCaRG
- BNE +
- INC WCaRG+1
- + JMP -
-
- WCeXIT = *
- LDA FILES
- CMP #2
- BCC +
- JSR REPORTtOTAL
- + RTS
-
- WCsTOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- RTS
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- WCeRROR = *
- LDA #<WCeRRORmSG1
- LDY #>WCeRRORmSG1
- JSR EPUTS
- LDA WCnAME
- LDY WCnAME+1
- JSR EPUTS
- LDA #<WCeRRORmSG2
- LDY #>WCeRRORmSG2
- JMP EPUTS
-
- WCeRRORmSG1 = *
- .ASC "eRROR READING FILE "
- .BYTE CHRqUOTE,0
-
- WCeRRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- BUFcOUNT = 10
- INFILE = 12
-
- WCfILE = *
- ;** OPEN FILE
- LDA WCnAME
- LDY WCnAME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** COUNT FILE
- JSR WCiNIT
- JSR WCbODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- JSR WCrEPORT
- JSR ADDtOtOTAL
- RTS
-
- WCbODY = *
- - LDA #<WCiNbUF
- LDY #>WCiNbUF+1
- STA ZP
- STY ZP+1
- LDA #254
- LDY #0
- LDX INFILE
- JSR READ
- STA BUFcOUNT
- STY BUFcOUNT+1
- BEQ +
- JSR WCsCANbUFFER
- JMP -
- + RTS
-
- WCiNwORD = $4C ;(1)
- WClINES = $40 ;(3)
- WCwORDS = $44 ;(3)
- WCbYTES = $48 ;(3)
- TOTlINES = $20 ;(3)
- TOTwORDS = $24 ;(3)
- TOTbYTES = $28 ;(3)
-
- WCiNIT = *
- LDA #0
- LDX #11
- - STA WClINES,X
- DEX
- BPL -
- STA WCiNwORD
- RTS
-
- TOTiNIT = *
- LDA #0
- LDX #11
- - STA TOTlINES,X
- DEX
- BPL -
- RTS
-
- WCsCANbUFFER = *
- LDY #0
- CPY BUFcOUNT
- BNE +
- RTS
- + LDX WCiNwORD
- - LDA WCiNbUF,Y
- CMP #CHRcr
- BNE +
- INC WClINES
- BNE +
- INC WClINES+1
- BNE +
- INC WClINES+2
- BNE +
- INC WClINES+3
- + CMP #33
- BCS ISlETTER
- CMP #" "
- BEQ ISdELIMITER
- CMP #CHRcr
- BEQ ISdELIMITER
- CMP #9
- BEQ ISdELIMITER
-
- ISlETTER = *
- CPX #1
- BEQ SCANcONT
- LDX #1
- INC WCwORDS
- BNE SCANcONT
- INC WCwORDS+1
- BNE SCANcONT
- INC WCwORDS+2
- BNE SCANcONT
- INC WCwORDS+3
- JMP SCANcONT
-
- ISdELIMITER = *
- LDX #0
-
- SCANcONT = *
- INY
- CPY BUFcOUNT
- BCC -
- CLC
- LDA WCbYTES
- ADC BUFcOUNT
- STA WCbYTES
- BCC +
- INC WCbYTES+1
- BNE +
- INC WCbYTES+2
- BNE +
- INC WCbYTES+3
- + STX WCiNwORD
- RTS
-
- WCrEPORT = *
- LDX #WClINES
- LDA #6
- JSR PUTNUM
- LDX #WCwORDS
- LDA #6
- JSR PUTNUM
- LDX #WCbYTES
- LDA #7
- JSR PUTNUM
- LDA WCnAME
- LDY WCnAME+1
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- PUTNUM = *
- LDY #<NUMBUF
- STY $80
- LDY #>NUMBUF
- STY $81
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR PUTS
- LDA #" "
- JSR PUTCHAR
- RTS
-
- ADDtOtOTAL = *
- CLC
- LDX #0
- - LDA TOTlINES,X
- ADC WClINES,X
- STA TOTlINES,X
- INX
- TXA
- AND #$03
- BNE -
- CLC
- LDX #0
- - LDA TOTwORDS,X
- ADC WCwORDS,X
- STA TOTwORDS,X
- INX
- TXA
- AND #$03
- BNE -
- CLC
- LDX #0
- - LDA TOTbYTES,X
- ADC WCbYTES,X
- STA TOTbYTES,X
- INX
- TXA
- AND #$03
- BNE -
- RTS
-
- REPORTtOTAL = *
- LDA #<TOTALmSG
- LDY #>TOTALmSG
- STA WCnAME
- STY WCnAME+1
- LDX #11
- - LDA TOTlINES,X
- STA WClINES,X
- DEX
- BPL -
- JSR WCrEPORT
- RTS
- TOTALmSG = *
- .ASC "<TOTAL>"
- .BYTE 0
-
- ;===THE END===
- WCbSS = *
- NUMBUF = WCbSS
- WCiNbUF = NUMBUF+12
- WRAP.S
- 361
- ;*** WRAP PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:WRAP"
-
- JMP MAIN
- .ASC "Cb"
-
- ;*** GLOBAL DECLARATIONS
-
- WORK1 = $02 ;(16)
- WORK2 = $12 ;(16)
- WORK3 = $22 ;(14)
-
- CHRcr = $0D
- CHRtAB = $09
- CHRqUOTE = $22
-
- ;SCREEN
-
- SCRtOPaDDR = $30 ;(2)
- SCRlINEaDDR = $32 ;(2)
- CURrOW = $34 ;(1)
- CURcOL = $35 ;(1)
- SCRrOWS = $36 ;(1)
- SCRcOLS = $37 ;(1)
- SCRrOWiNC = $38 ;(2)
- CURlEFTmARGIN = $3A ;(1)
-
- ;DOCUMENT
-
- LINEpTR = $40 ;(4)
- LINEnUM = $44 ;(4)
- TOSlINEpTR = $48 ;(4)
- TOPlINEpTR = $4C ;(4)
- BOTlINEpTR = $50 ;(4)
- LINEcOUNT = $54 ;(4)
- FILElENGTH = $58 ;(4)
- TARGETlEN = $5C ;(1)
- WRAPfLAG = $5D ;(1) ;128=WRAP,64=SHOWcr
-
- ;MANAGEMENT
-
- MODIFIED = $3B ;(1) ;$00=NO, $FF=MODIFIED
- MODEfLAGS = $3C ;(1) ;$80=INSERT, $40=INDENT
- STATUSuPDATE = $3D ;(1) ;128=LINE,64=COL,32=MOD,16=INS,8=BYT,4=FRE,2=NM,1=MSG
- MARKEDlINEpTR .BUF 4 ;(4)
- MARKEDlINEnUM .BUF 4 ;(4)
- MARKEDcOL .BUF 4 ;(1)
-
- ;LINE FORMAT
-
- HEADnEXTpTR = $70 ;(4)
- HEADpREVpTR = $74 ;(4)
- HEADlINElEN = $78 ;(1)
- HEADiNDENT = $79 ;(1)
- HEADfLAGS = $7A ;(1) ;$80=CONNECTED, $40=NULLlINE
- HEADlENGTH = $0B
-
- ;KILL BUFFER
-
- BUFFERtOPpTR .BUF 4 ;(4)
- BUFFERbOTpTR .BUF 4 ;(4)
- BUFFERlINEcOUNT .BUF 4 ;(4)
-
- ;DOCUMENT BUFFERS
-
- ;=== MAIN ===
-
- MAIN = *
- JSR MAINiNIT
- LDA #1
- LDY #0
- JSR GETARG
- JSR LOADfILE
- RTS
-
- MAINiNIT = *
- LDA #$80
- STA WRAPfLAG
- LDA #75
- STA TARGETlEN
- RTS
-
- ;*** LOAD FILE: USES WORK2 ***
-
- LOADhEAD = WORK2+0
- LOADtAIL = WORK2+4
- LOADlINES = WORK2+8
- LOADbYTES = WORK2+12
- LOADfCB = WORK3+0
- LOADlINEsCAN = WORK3+1
- LOADlINElEN = WORK3+2
- LOADbUFcOUNT = WORK3+3
- LOADbUFpTR = WORK3+4
-
- LOADfILE = * ;( (ZP)=NAME ) : [W2]=HEAD, [W2]=TAIL, [W2]=LINES, [W2]=BYTES
- JSR SAVEwORK3
- JSR LOADiNIT
- LDA #"R"
- JSR OPEN
- STA LOADfCB
- - JSR LOADlINE
- BCS +
- JSR LOADlINEwRAP
- JSR LOADlINEsTORE
- JSR LOADlINEoVERFLOW
- JMP -
- + LDA LOADlINElEN
- BEQ +
- JSR LOADlINEwRAP
- LDA #$00
- STA LINEfLAGS
- JSR LOADlINEsTORE
- + LDA LOADfCB
- JSR CLOSE
- JSR RESTOREwORK3
- RTS
-
- LOADiNIT = *
- LDA #0
- LDX #16+14-1
- - STA LOADhEAD,X
- DEX
- BPL -
- RTS
-
- LOADlINE = * ;( ) : .cs=END
- ;TAB EXPANSION WILL GO INTO THIS ROUTINE
- LDX LOADbUFpTR
- LDY LOADlINElEN
-
- LOADnEXTbYTE = *
- LDA LOADbUFcOUNT
- BNE ++
- STY LOADlINElEN
- JSR LOADbUF
- BCC +
- RTS
- + LDY LOADlINElEN
- LDX LOADbUFpTR
- + NOP
-
- - LDA FILEBUF,X
- STA LINE,Y
- INX
- INY
- CMP #CHRcr
- BEQ ++
- CPY TARGETlEN
- BEQ + ;DETERMINES IF crS WILL GO BEYOND LEN
- BCS ++
- + DEC LOADbUFcOUNT
- BNE -
- BEQ LOADnEXTbYTE
-
- + DEC LOADbUFcOUNT
- STX LOADbUFpTR
- STY LOADlINElEN
- CLC
- RTS
-
- LOADbUF = * ;( ) : .cs=EOF
- JSR STOPKEY
- BCS +
- LDA #<FILEBUF
- LDY #>FILEBUF
- STA ZP+0
- STY ZP+1
- LDA #<254
- LDY #>254
- LDX LOADfCB
- JSR READ
- BCS +
- BEQ +
- STA LOADbUFcOUNT
- LDA #0
- STA LOADbUFpTR
- CLC
- RTS
- + SEC
- RTS
-
- LOADlINEwRAP = *
- LDX LOADlINElEN
- DEX
- LDY #$00
- LDA LINE,X
- CMP #CHRcr
- BEQ +
- LDY #$80
- + STY LINEfLAGS
- CMP #CHRcr
- BNE +
- - STX LINElINElEN
- STX LOADlINEsCAN
- STX LOADlINElEN
- RTS
-
- + LDX LOADlINElEN
- CPX TARGETlEN
- BCC -
-
- + BIT WRAPfLAG
- BMI +
- - LDA TARGETlEN
- STA LOADlINEsCAN
- STA LINElINElEN
- RTS
-
- + LDX TARGETlEN
- - DEX
- CPX #255
- BEQ --
- LDA LINE,X
- CMP #" "
- BNE -
- + INX
- STX LOADlINEsCAN
- STX LINElINElEN
- RTS
-
- LOADlINEsTORE = *
- LDA #<LINE
- LDY #>LINE
- STA ZP+0
- STY ZP+1
- LDA LINElINElEN
- LDY #0
- LDX #STDOUT
- JSR WRITE
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- LOADlINEoVERFLOW = *
- LDX LOADlINEsCAN
- LDY #0
- - CPX LOADlINElEN
- BCS +
- LDA LINE,X
- STA LINE,Y
- INX
- INY
- BNE -
- + STY LOADlINElEN
- RTS
-
- ;=== MANAGEMENT ROUTINES ===
-
- WORK3sAVE .BUF 14
-
- SAVEwORK3 = *
- LDX #13
- - LDA WORK3,X
- STA WORK3sAVE,X
- DEX
- BPL -
- RTS
-
- RESTOREwORK3 = *
- LDX #13
- - LDA WORK3sAVE,X
- STA WORK3,X
- DEX
- BPL -
- RTS
-
- ;=== STANDARD LIBRARY ===
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- STX XSAVE
- STY YSAVE
- LDX #STDOUT
- JSR PUTC
- LDX XSAVE
- LDY YSAVE
- RTS
- XSAVE .BUF 1
- YSAVE .BUF 1
-
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETCbUFFER
- LDY #>GETCbUFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETCbUFFER
- RTS
- + SEC
- RTS
- GETCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP+0
- STA ZP+0
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===BSS===
-
- BSS = *
- LINEBUF = BSS+0 ;(256)
- LINEnEXTpTR = LINEBUF+$0 ;(4)
- LINEpREVpTR = LINEBUF+$4 ;(4)
- LINElINElEN = LINEBUF+$8 ;(1)
- LINEiNDENT = LINEBUF+$9 ;(1)
- LINEfLAGS = LINEBUF+$A ;(1) ;$80=CONNECTED, $40=TAILlINE
- LINE = LINEBUF+$B ;(241)
-
- FILEBUF = LINEBUF+256 ;(256)
- TPAfREEMAP = FILEBUF+256 ;(256)
- BSSeND = TPAfREEMAP+256
- XLS.S
- 611
- ;*** DIRECTORY PROGRAM - BY cRAIG bRUCE
-
- .SEQ ACEHEAD.S
- .ORG ACEaPPaDDRESS
- .OBJ "@0:XLS"
-
- JMP MAIN
- .BYTE ACEid1,ACEid2,ACEid3
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = 80
-
- CHRcr = $0D
- CHRcLS = 147
- CHRqUOTE = $22
- TRUE = $FF
- FALSE = $00
-
- ARG = 2
- NAME = 4
- STRING = 8
- DIRfCB = 16
- DIRcOLUMNS = 17
- DIRcURcOL = 18
- DIRlONG = 19
- DIRsPACES = 20
- DIRLINElEN = 21
- DIRcHcOLS = 22
- DIRpAGED = 23
- DIRsHOWN = 24
- DIRcLS = 25
- DIRfILES = 32
- DIRbYTES = 36
- DIRfREE = 40
- WORK = 64
-
- MAIN = *
- LDA #FALSE
- STA DIRlONG
- STA DIRpAGED
- STA DIRsHOWN
- STA DIRcLS
-
- LDA #0
- LDY #0
- STA ARG+0
- STY ARG+1
-
- NEXTaRG = *
- JSR STOPKEY
- BCC +
- JMP STOPPED
- + INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- LDA ZP+0
- ORA ZP+1
- BEQ MAINeXIT
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE NAMEaRG
- JSR HANDLEoPTION
- JMP NEXTaRG
-
- NAMEaRG = *
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- JSR LS
- LDA #TRUE
- STA DIRsHOWN
- JMP NEXTaRG
-
- MAINeXIT = *
- LDA DIRsHOWN
- BNE +
- LDA #<DEFAULTdIR
- LDY #>DEFAULTdIR
- STA NAME+0
- STY NAME+1
- JSR LS
- + RTS
-
- DEFAULTdIR = *
- .BYTE ".",":",0
-
- HANDLEoPTION = *
- LDY #0
- STY WORK+2
- LDA ZP+0
- LDY ZP+1
- STA WORK+0
- STY WORK+1
-
- NEXToPTION = *
- INC WORK+2
- LDY WORK+2
- LDA (WORK),Y
- BNE +
- RTS
- + CMP #"?"
- BNE +
- LDA #<USAGEmSG
- LDY #>USAGEmSG
- JSR EPUTS
- LDA #0
- LDX #0
- JMP EXIT
- + CMP #"L"
- BNE +
- LDA #TRUE
- STA DIRlONG
- JMP NEXToPTION
- + CMP #"C"
- BNE +
- LDA #TRUE
- STA DIRcLS
- JMP NEXToPTION
- + JMP NEXToPTION
-
- USAGEmSG = *
- .ASC "USAGE: LS [-][L][?][C] [DIRECTORY ...]"
- .BYTE CHRcr
- .ASC "OPTS: L=LONG FORM, ?=HELP, C=CLEAR SCREEN"
- .BYTE CHRcr,0
-
- STOPPED = *
- LDA #<STOPPEDmSG
- LDY #>STOPPEDmSG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
- STOPPEDmSG = *
- .ASC "<sTOPPED>"
- .BYTE CHRcr,0
-
- ERROR = *
- LDA #<ERRORmSG1
- LDY #>ERRORmSG1
- JSR EPUTS
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<ERRORmSG2
- LDY #>ERRORmSG2
- JMP EPUTS
-
- ERRORmSG1 = *
- .ASC "eRROR READING DIRECTORY "
- .BYTE CHRqUOTE,0
- ERRORmSG2 = *
- .BYTE CHRqUOTE,CHRcr,0
-
- ;===DIR===
-
- LS = *
- LDA DIRcLS
- BEQ +
- LDA #CHRcLS
- JSR PUTCHAR
- + LDA DIRlONG
- BNE DIR
-
- TRUElS = *
- LDX #1
- JSR DEVINFO
- STX DIRcHcOLS
- CMP #0
- BNE +
- TXA
- LDX #$FF
- - INX
- SBC #20
- BCS -
- TXA
- BNE LSsETcOLS
-
- + LDA #1
- LSsETcOLS = *
- STA DIRcOLUMNS
- JMP DIRcOMMON
-
- DIR = *
- LDX #1
- JSR DEVINFO
- STX DIRcHcOLS
- LDA #1
- STA DIRcOLUMNS
-
- DIRcOMMON = *
- LDA #0
- STA DIRcURcOL
- LDX #3
- - STA DIRbYTES,X
- STA DIRfILES,X
- DEX
- BPL -
-
- DIRgOTnAME = *
- LDA NAME+0
- LDY NAME+1
- STA ZP+0
- STY ZP+1
- JSR DIROPEN
- BCC +
- JMP ERROR
- + STA DIRfCB
- LDX DIRfCB
- JSR DIRREAD
- BCS DIReXIT
- BEQ DIReXIT
- JSR STOPKEY
- BCC +
- JMP STOPPED
- + LDA DIRlONG
- BPL +
- JSR DIRdISPLAYhEADING
- / LDX DIRfCB
- JSR DIRREAD
- BCS DIReXIT
- BEQ DIReXIT
- JSR STOPKEY
- BCC +
- JSR DIReXIT
- JMP STOPPED
- + LDA ACEdIRENTnAME
- BEQ DIRtRAILEReXIT
- JSR DIRdISPLAY
- JMP -
-
- DIRtRAILEReXIT = *
- LDA DIRlONG
- BPL DIReXIT
- JSR DIRdISPLAYtRAILER
-
- DIReXIT = *
- LDA DIRcURcOL
- BEQ +
- LDA #CHRcr
- JSR PUTCHAR
- + LDA DIRfCB
- JMP DIRCLOSE
-
- DIRdISPLAY = *
- BIT ACEdIRENTfLAGS
- BMI ++
- INC DIRfILES+0
- BNE +
- INC DIRfILES+1
- BNE +
- INC DIRfILES+2
- BNE +
- INC DIRfILES+3
- + LDX #0
- LDY #4
- CLC
- - LDA DIRbYTES,X
- ADC ACEdIRENTbYTES,X
- STA DIRbYTES,X
- INX
- DEY
- BNE -
- + BIT DIRlONG
- BMI +
- JMP DIRdISPLAYsHORT
- + JSR DIRsETUPdIRLINE
- LDA #<DIRLINE
- LDY #>DIRLINE
- STA ZP+0
- STY ZP+1
- LDA DIRLINElEN
- LDY #0
- LDX #STDOUT
- JMP WRITE
-
- ;* 000000000011111111112222222222333333333344444444445555555555
- ;* POS: 012345678901234567890123456789012345678901234567890123456789
- DIRLINE .ASC "DRWX*-MT 00-xXX-00 12:00A 12345678 *seq 1234567890123456"
- .BYTE CHRcr,0
- DIRfLAGnAMES .ASC "DRWX*-MT"
- DIRdATEsTR .ASC " 00-xXX-00 12:00A "
- DIRdATEeND = *
-
- DIRsETUPdIRLINE = *
- ;** FLAGS
- LDX #0
- LDA ACEdIRENTfLAGS
- - ASL
- PHA
- LDA #"-"
- BCC +
- LDA DIRfLAGnAMES,X
- + STA DIRLINE+0,X
- PLA
- INX
- CPX #8
- BCC -
-
- ;** DATE
- JSR PUTiNdATE
- LDX #DIRdATEeND-DIRdATEsTR-1
- - LDA DIRdATEsTR,X
- STA DIRLINE+8,X
- DEX
- BPL -
-
- ;** BYTES
- LDX #3
- - LDA ACEdIRENTbYTES,X
- STA DIRfREE,X
- DEX
- BPL -
- LDA #<UTOAnUMBER
- LDY #>UTOAnUMBER
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #8
- LDX #DIRfREE
- JSR UTOA
- LDY #28
- LDA DIRcHcOLS
- CMP #60
- BCS +
- LDY #8
- + LDX #0
- - LDA UTOAnUMBER,X
- STA DIRLINE,Y
- INY
- INX
- CPX #8
- BCC -
- LDA #" "
- STA DIRLINE,Y
- INY
-
- ;** UNCLOSED FLAG
- LDA DIRLINE+4
- CMP #"-"
- BNE +
- LDA #" "
- + STA DIRLINE,Y
- INY
-
- ;** FILETYPE
- LDX #0
- - LDA ACEdIRENTtYPE,X
- ORA #$80
- STA DIRLINE,Y
- INY
- INX
- CPX #3
- BCC -
- LDA #" "
- STA DIRLINE,Y
- INY
- STA DIRLINE,Y
- INY
-
- ;** FILENAME
- LDX #0
- - LDA ACEdIRENTnAME,X
- BEQ +
- STA DIRLINE,Y
- INY
- INX
- BNE -
- + LDA #CHRcr
- STA DIRLINE,Y
- INY
- LDA #0
- STA DIRLINE,Y
- STY DIRLINElEN
- RTS
-
- DIRdISPLAYsHORT = *
- LDA #<ACEdIRENTnAME
- LDY #>ACEdIRENTnAME
- JSR PUTS
- INC DIRcURcOL
- LDA DIRcURcOL
- CMP DIRcOLUMNS
- BCC +
- LDA #0
- STA DIRcURcOL
- LDA #CHRcr
- JMP PUTCHAR
- + LDY #$FF
- - INY
- LDA ACEdIRENTnAME,Y
- BNE -
- STY DIRsPACES
- LDA #20
- SBC DIRsPACES
- STA DIRsPACES
- - LDA #" "
- JSR PUTCHAR
- DEC DIRsPACES
- BNE -
- RTS
-
- DIRdISPLAYhEADING = *
- LDA #<DIRhEADINGmSG
- LDY #>DIRhEADINGmSG
- JSR PUTS
- LDA #<ACEdIRENTnAME
- LDY #>ACEdIRENTnAME
- JSR PUTS
- LDA #CHRcr
- JSR PUTCHAR
- RTS
-
- DIRhEADINGmSG = *
- .ASC "dIR: "
- .BYTE 0
-
- DIRdISPLAYtRAILER = *
- LDX #3
- - LDA ACEdIRENTbYTES,X
- STA DIRfREE,X
- DEX
- BPL -
- LDX #0
- LDY #0
- - LDA DIRtRAILINGmSG,X
- BEQ +
- CMP #4
- BCC STOREnUM
- STA TRAILbUF,Y
- INX
- INY
- BNE -
- + LDA #<TRAILbUF
- LDX #>TRAILbUF
- STA ZP+0
- STX ZP+1
- TYA
- LDY #0
- LDX #STDOUT
- JMP WRITE
-
- STOREnUM = *
- STX WORK+0
- STY WORK+1
- SEC
- SBC #1
- ASL
- ASL
- ADC #DIRfILES
- TAX
- LDA #<UTOAnUMBER
- LDY #>UTOAnUMBER
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #1
- JSR UTOA
- LDX #0
- LDY WORK+1
- - LDA UTOAnUMBER,X
- BEQ +
- STA TRAILbUF,Y
- INX
- INY
- BNE -
- + LDX WORK+0
- INX
- JMP --
-
- DIRtRAILINGmSG = *
- .ASC "FILES="
- .BYTE 1
- .ASC " BYTES="
- .BYTE 2
- .ASC " FREE="
- .BYTE 3
- .BYTE CHRcr
- .BYTE 0
-
- TRAILbUF .BUF 64
-
- PUTiNdATE = *
- ;** YEAR
- LDA ACEdIRENTdATE+1
- LDX #9
- JSR PUTdIGITS
- ;** MONTH
- LDA ACEdIRENTdATE+2
- CMP #$10
- BCC +
- SEC
- SBC #$10-10
- + TAX
- LDA MONTHsTR+0,X
- STA DIRdATEsTR+5
- LDA MONTHsTR+13,X
- STA DIRdATEsTR+6
- LDA MONTHsTR+26,X
- STA DIRdATEsTR+7
- ;** DAY
- LDA ACEdIRENTdATE+3
- LDX #2
- JSR PUTdIGITS
- ;** HOUR
- LDA ACEdIRENTdATE+4
- LDX #"A"
- CMP #$00
- BNE +
- LDA #$12
- JMP PUThOUR
- + CMP #$12
- BCC PUThOUR
- LDX #"P"
- CMP #$12
- BEQ PUThOUR
- SEI
- SED
- SEC
- SBC #$12
- CLD
- CLI
- PUThOUR = *
- STX DIRdATEsTR+18
- LDX #13
- JSR PUTdIGITS
- ;** MINUTE
- LDA ACEdIRENTdATE+5
- LDX #16
- JSR PUTdIGITS
- RTS
-
- PUTdIGITS = * ;( .a=NUM, .x=OFFSET )
- PHA
- LSR
- LSR
- LSR
- LSR
- ORA #$30
- STA DIRdATEsTR,X
- PLA
- AND #$0F
- ORA #$30
- STA DIRdATEsTR+1,X
- RTS
-
- MONTHsTR = *
- .ASC "xjfmamjjasond"
- .ASC "XAEAPAUUUECOE"
- .ASC "XNBRRYNLGPTVC"
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTCbUFFER
- LDA #<PUTCbUFFER
- LDY #>PUTCbUFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTCbUFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACEaRGV
- ADC ZP
- STA ZP
- LDA ACEaRGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- UTOAnUMBER .BUF 11
-
- ;===BSS===
-
- BSS = *
-