home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 23.4 KB | 1,670 lines |
- ;┴├┼ COMMAND SHELL BY ├RAIG ┬RUCE
-
- .SEQ ACEHEAD.S
- ACE╙HELL┴DDRESS = $1300 ;╦╠╒╟┼
- .ORG ACE╙HELL┴DDRESS
- .OBJ "@0:SH"
-
- JMP MAIN
- .BYTE "S","╚",ACE╔─3
- .BYTE 64,0 ;*STACK,RESERVED
-
- LIBWORK = $60
- CHR├╥ = 13
- CHR╤UOTE = 34
- CHR╘AB = 9
- CHR├╠╥ = 147
-
- STACK╨TR = $60
- NAME = $62
- SHELL╥EDIRECT╙TDIN .BUF 1
- SHELL╥EDIRECT╙TDOUT .BUF 1
- SHELL╥EDIRECT╙TDERR .BUF 1
- PARSE┴RGC .BUF 2
- PARSE┴RGV .BUF 2
- SHELL┼XIT╞LAG .BUF 1
- SHELL╨ROMPT╞LAG .BUF 1
- CHECK╨ROMPT╞LAG .BUF 1
- SUPPRESS╨ROMPT╞LAG .BUF 1
- ABORT├OMMAND╞LAG .BUF 1
- REGSAVE .BUF 3
-
- ;******** SHELL ********
-
- MAIN = *
- LDA #<SHELL╘ITLE
- LDY #>SHELL╘ITLE
- JSR PUTS
- JMP SHELL
-
- SHELL╘ITLE .ASC "┴├┼ ╙HELL VERS 0.71.00 - ├╙┬ 25-┴PR-94"
- .BYTE CHR├╥,CHR├╥,0
-
- SHELL = *
- LDA #$FF
- STA CHECK╨ROMPT╞LAG
- STA SHELL╥EDIRECT╙TDIN
- STA SHELL╥EDIRECT╙TDOUT
- STA SHELL╥EDIRECT╙TDERR
- LDA #0
- STA SUPPRESS╨ROMPT╞LAG
-
- GET├OMMAND = *
- LDA #0
- STA ABORT├OMMAND╞LAG
- LDA CHECK╨ROMPT╞LAG
- BEQ +
- JSR SHELL├HECK╨ROMPTABILITY
- + LDA SHELL╨ROMPT╞LAG
- BEQ +
- LDA SUPPRESS╨ROMPT╞LAG
- BNE +
- LDA #"["
- LDX #STDERR
- JSR PUTC
- LDA #<ACE├UR─IR╬AME
- LDY #>ACE├UR─IR╬AME
- JSR EPUTS
- LDA #<SHELL╥EADY2
- LDY #>SHELL╥EADY2
- JSR EPUTS
- + LDA #0
- STA SUPPRESS╨ROMPT╞LAG
- STA SHELL┼XIT╞LAG
- LDA ACE═EM╘OP+0
- LDY ACE═EM╘OP+1
- STA STACK╨TR+0
- STY STACK╨TR+1
- JSR SHELL╟ET┴RGS
- BCS SHELL╞INISH
- LDA PARSE┴RGC+0
- ORA PARSE┴RGC+1
- BEQ +
- LDA ABORT├OMMAND╞LAG
- BNE +
- JSR SETUP╥EDIRECTS
- JSR SHELL├ONSTRUCT╞RAME
- JSR SHELL┼XEC├OMMAND
- JSR SHELL╥EMOVE╞RAME
- JSR UNSET╥EDIRECTS
- + JSR CLOSE╥EDIRECTS
- BIT SHELL┼XIT╞LAG
- BMI SHELL╞INISH
- JMP GET├OMMAND
-
- SHELL╞INISH = *
- RTS
-
- SHELL╥EADY2 .ASC "] "
- .BYTE 0
-
- SHELL├HECK╨ROMPTABILITY = *
- LDX #0
- JSR DEVINFO
- LDX #$FF
- CMP #0
- BEQ +
- LDX #0
- + STX SHELL╨ROMPT╞LAG
- LDA #0
- STA CHECK╨ROMPT╞LAG
- RTS
-
- ;=== COMMAND PARSING ===
-
- ARG╨TR = $02
- ARG╤UOTE = $03
- ARG╫AS╤UOTED = $04
-
- SHELL╟ET┴RGS = *
- LDA #0
- STA PARSE┴RGC+0
- STA PARSE┴RGC+1
-
- NEWARG = *
- JSR GETCHAR
- BCC +
- JMP ARG┼OF
- + CMP #" "
- BEQ NEWARG
- CMP #CHR╘AB
- BEQ NEWARG
- CMP #CHR├╥
- BNE +
- JMP ARG┼ND╧F╠INE
- + CMP #";"
- BNE +
- LDA #$FF
- STA SUPPRESS╨ROMPT╞LAG
- JMP ARG┼ND╧F╠INE
- + LDX #0
- STX ARG╨TR
- STX ARG╫AS╤UOTED
-
- ARG╬EW╤UOTE = *
- LDX #0
- STX ARG╤UOTE
- CMP #$22
- BEQ ARG╙TART╤UOTE
- CMP #"'"
- BNE +
- ARG╙TART╤UOTE = *
- STA ARG╤UOTE
- STA ARG╫AS╤UOTED
- JMP ARG╬EXT├HAR
-
- + LDX ARG╨TR
- STA ARG┬UFFER,X
- INC ARG╨TR
-
- ARG╬EXT├HAR = *
- JSR GETCHAR
- BCS ARG┼OF
- LDX ARG╤UOTE
- BNE ARG╤UOTE═ODE
- CMP #" "
- BEQ ARG╨ROCESS
- CMP #CHR╘AB
- BEQ ARG╨ROCESS
- - CMP #";"
- BNE +
- LDX ARG╫AS╤UOTED
- BNE +
- LDA #$FF
- STA SUPPRESS╨ROMPT╞LAG
- LDA #CHR├╥
- + CMP #CHR├╥
- BEQ ARG╨ROCESS
- LDX ARG╨TR
- STA ARG┬UFFER,X
- INC ARG╨TR
- JMP ARG╬EXT├HAR
-
- ARG╤UOTE═ODE = *
- CMP #0
- BEQ -
- CMP ARG╤UOTE
- BNE -
- JSR GETCHAR
- BCS ARG┼OF
- CMP #" "
- BEQ ARG╨ROCESS
- CMP #CHR╘AB
- BEQ ARG╨ROCESS
- CMP #CHR├╥
- BEQ ARG╨ROCESS
- JMP ARG╬EW╤UOTE
-
- ARG╨ROCESS = *
- PHA
- LDX ARG╨TR
- LDA #0
- STA ARG┬UFFER,X
- JSR SHELL╚ANDLE┴RG
- PLA
- CMP #CHR├╥
- BEQ ARG┼ND╧F╠INE
- JMP NEWARG
- ARG┼ND╧F╠INE = *
- CLC
- ARG┼OF = *
- RTS
-
- SHELL╚ANDLE┴RG = *
- LDA ABORT├OMMAND╞LAG
- BEQ +
- RTS
- + LDA ARG╫AS╤UOTED
- BNE +
- LDX #STDIN
- LDY #"R"
- LDA ARG┬UFFER
- CMP #"<"
- BEQ SHELL╚ANDLE╥EDIRECT
- LDX #STDOUT
- LDY #"W"
- CMP #">"
- BEQ SHELL╚ANDLE╥EDIRECT
- JSR CHECK╫ILDCARDS
- BCC +
- RTS
- + JSR SHELL╙TORE┴RG
- RTS
-
- SHELL╙TORE┴RG = *
- LDA STACK╨TR+0
- LDY STACK╨TR+1
- CLC
- SBC ARG╨TR
- BCS +
- DEY
- + STA STACK╨TR+0
- STY STACK╨TR+1
- STA ZP+0
- STY ZP+1
- LDY #0
- - LDA ARG┬UFFER,Y
- STA (ZP),Y
- BEQ +
- INY
- BNE -
- + LDA PARSE┴RGC+1
- STA ZP+1
- LDA PARSE┴RGC+0
- ASL
- ROL ZP+1
- CLC
- ADC #<ARG┴RGV┬UFFER
- STA ZP+0
- LDA ZP+1
- ADC #>ARG┴RGV┬UFFER
- STA ZP+1
- LDY #0
- LDA STACK╨TR+0
- STA (ZP),Y
- INY
- LDA STACK╨TR+1
- STA (ZP),Y
- INC PARSE┴RGC+0
- BNE +
- INC PARSE┴RGC+1
- + RTS
-
- SHELL╚ANDLE╥EDIRECT = * ;( .╪=FD, .┘=MODE )
- LDA #<ARG┬UFFER+1
- STA ZP
- LDA #>ARG┬UFFER+1
- STA ZP+1
- LDA ARG┬UFFER+1
- CMP #">"
- BNE +
- JSR SHELL╥EDIR╔NC
- LDY #"A"
- LDA ARG┬UFFER+2
- + CMP #"!"
- BNE +
- - LDX #STDERR
- JSR SHELL╥EDIR╔NC
- LDA #0
- + CMP #"&"
- BEQ -
- LDA SHELL╥EDIRECT╙TDIN,X
- CMP #255
- BNE REDIRECT═ULTI┼RROR
- TYA
- STX CMD┬UFFER
- STA REGSAVE
- - JSR OPEN
- BCC ++
- LDA ERRNO
- CMP #ACE┼RR╞ILE┼XISTS
- BNE +
- JSR REMOVE
- BCS REDIRECT┼RROR
- LDA REGSAVE
- JMP -
- + CMP #ACE┼RR╞ILE╬OT╞OUND
- BNE REDIRECT┼RROR
- LDA REGSAVE
- CMP #"A"
- BNE REDIRECT┼RROR
- LDA #"W"
- STA REGSAVE
- JMP -
- + LDX CMD┬UFFER
- STA SHELL╥EDIRECT╙TDIN,X
- RTS
-
- REDIRECT┼RROR = *
- LDA #<REDIRECT┼RROR═SG
- LDY #>REDIRECT┼RROR═SG
- REDIRECT┼RROR╫MSG = *
- PHA
- TYA
- PHA
- LDA #$FF
- STA ABORT├OMMAND╞LAG
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- PLA
- TAY
- PLA
- JSR EPUTS
- RTS
-
- REDIRECT┼RROR═SG = *
- .ASC ": ┼RROR OPENING REDIRECTION FILE."
- .BYTE CHR├╥,0
-
- REDIRECT═ULTI┼RROR = *
- LDA #<REDIRECT═ULTI┼RROR═SG
- LDY #>REDIRECT═ULTI┼RROR═SG
- JMP REDIRECT┼RROR╫MSG
-
- REDIRECT═ULTI┼RROR═SG = *
- .ASC ": ┼RROR - ═ULTIPLE REDIRECTIONS OF SAME STREAM."
- .BYTE CHR├╥,0
-
- SHELL╥EDIR╔NC = *
- INC ZP+0
- BNE +
- INC ZP+1
- + RTS
-
- SHELL╙ETUP╥ED = 2
-
- SETUP╥EDIRECTS = *
- UNSET╥EDIRECTS = *
- LDX #0
- STX SHELL╙ETUP╥ED
- - LDA SHELL╥EDIRECT╙TDIN,X
- CMP #255
- BEQ +
- TAY
- JSR FDSWAP
- + INC SHELL╙ETUP╥ED
- LDX SHELL╙ETUP╥ED
- CPX #3
- BCC -
- RTS
-
- SHELL├LOSE╥ED = 2
-
- CLOSE╥EDIRECTS = *
- LDX #0
- STX SHELL├LOSE╥ED
- - LDA SHELL╥EDIRECT╙TDIN,X
- CMP #$FF
- BEQ +
- JSR CLOSE
- LDX SHELL├LOSE╥ED
- LDA #$FF
- STA SHELL╥EDIRECT╙TDIN,X
- + INC SHELL├LOSE╥ED
- LDX SHELL├LOSE╥ED
- CPX #3
- BCC -
- RTS
-
- WILD╨REFIX = 10
- WILD╙UFFIX = 11
-
- CHECK╫ILDCARDS = *
- LDA #255
- STA WILD╨REFIX
- STA WILD╙UFFIX
- LDX ARG╨TR
- - DEX
- CPX #255
- BEQ +
- LDA ARG┬UFFER,X
- CMP #":"
- BEQ +
- CMP #"*"
- BNE -
- LDY WILD╙UFFIX
- CPY #255
- BNE -
- STX WILD╙UFFIX
- INC WILD╙UFFIX
- JMP -
- + INX
- STX WILD╨REFIX
- LDA WILD╙UFFIX
- CMP #255
- BNE +
- CLC
- RTS
- + JSR HANDLE╫ILDCARDS
- SEC
- RTS
-
- WILD╠ENGTH = 12
- WILD╙UFFIX╠ENGTH = 13
- WILD╞CB = 14
- WILD═ATCH = 15
-
- HANDLE╫ILDCARDS = *
- LDA #0
- STA WILD═ATCH
- LDX ARG╨TR
- INX
- - DEX
- LDA ARG┬UFFER,X
- STA CMD┬UFFER+1,X
- CPX WILD╨REFIX
- BNE -
- LDA #0
- STA CMD┬UFFER,X
- STA ARG┬UFFER,X
- LDX WILD╙UFFIX
- STA CMD┬UFFER,X
- INC WILD╨REFIX
- INC WILD╙UFFIX
- LDX #0
- - LDA ARG┬UFFER,X
- BEQ +
- STA CMD┬UFFER,X
- INX
- BNE -
- + SEC
- LDA ARG╨TR
- SBC WILD╙UFFIX
- STA WILD╙UFFIX╠ENGTH
- INC WILD╙UFFIX╠ENGTH
- SEC
- LDA ARG╨TR
- SBC WILD╨REFIX
- STA WILD╠ENGTH
-
- LDA #<CMD┬UFFER
- LDY #>CMD┬UFFER
- STA ZP+0
- STY ZP+1
- JSR DIROPEN
- BCS NO═ATCH
- STA WILD╞CB
- LDX WILD╞CB
- JSR DIRREAD
- BCS +
- BEQ +
- JSR SCAN╫ILDCARD
- + LDA WILD╞CB
- JSR DIRCLOSE
- LDA WILD═ATCH
- BNE +
- NO═ATCH = *
- LDA #$FF
- STA ABORT├OMMAND╞LAG
- LDA #<NO═ATCH═SG
- LDY #>NO═ATCH═SG
- JSR EPUTS
- + RTS
-
- NO═ATCH═SG = *
- .ASC "╬O MATCH FOR WILDCARD"
- .BYTES CHR├╥,0
-
- SCAN╫ILDCARD = *
- LDX WILD╞CB
- JSR DIRREAD
- BCS +
- BNE ++
- + RTS
- + LDA ACE─IRENT╬AME
- BNE +
- RTS
- + LDA ACE─IRENT╒SAGE
- AND #%00010000
- BNE SCAN╫ILDCARD
- LDA ACE─IRENT╬AME╠EN
- CMP WILD╠ENGTH
- BCC SCAN╫ILDCARD
- LDX WILD╨REFIX
- LDY #0
- JSR SUBSTR├MP
- BCS SCAN╫ILDCARD
- LDX WILD╙UFFIX
- SEC
- LDA ACE─IRENT╬AME╠EN
- SBC WILD╙UFFIX╠ENGTH
- TAY
- JSR SUBSTR├MP
- BCS SCAN╫ILDCARD
-
- LDX #0
- - LDA CMD┬UFFER,X
- BEQ +
- STA ARG┬UFFER,X
- INX
- BNE -
- + LDY #0
- - LDA ACE─IRENT╬AME,Y
- STA ARG┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA ACE─IRENT╘YPE
- CMP #"S"
- BEQ +
- STA ARG┬UFFER+1,X
- LDA #","
- STA ARG┬UFFER,X
- INX
- INX
- LDA #0
- STA ARG┬UFFER,X
- + STX ARG╨TR
- JSR SHELL╙TORE┴RG
- LDA #$FF
- STA WILD═ATCH
- JMP SCAN╫ILDCARD
-
- SUBSTR├MP = * ;( .╪=CMDBUF╧FF, .┘=DIRENT╬AME╧FF ) : .├├=MATCH
- - LDA CMD┬UFFER,X
- BNE +
- CLC
- RTS
- + CMP ACE─IRENT╬AME,Y
- BNE +
- INY
- INX
- BNE -
- + SEC
- RTS
-
- ;=== STACK MANAGEMENT ===
-
- FRAME┴RGV╙OURCE = $02
- FRAME┴RGV─EST = $04
- FRAME┴RGV┬YTES = $06
-
- SHELL├ONSTRUCT╞RAME = *
- ;** PUSH THE ┌┼╥╧ TRAILER ARGV
- SEC
- LDA STACK╨TR+0
- SBC #2
- STA STACK╨TR+0
- BCS +
- DEC STACK╨TR+1
- + LDY #0
- LDA #0
- STA (STACK╨TR),Y
- INY
- STA (STACK╨TR),Y
-
- ;** PUSH ARGV[] ARRAY HERE
- LDA PARSE┴RGC+0
- LDY PARSE┴RGC+1
- STY FRAME┴RGV┬YTES+1
- ASL
- STA FRAME┴RGV┬YTES+0
- ROL FRAME┴RGV┬YTES+1
- SEC
- LDA STACK╨TR+0
- SBC FRAME┴RGV┬YTES+0
- STA STACK╨TR+0
- STA FRAME┴RGV─EST+0
- LDA STACK╨TR+1
- SBC FRAME┴RGV┬YTES+1
- STA STACK╨TR+1
- STA FRAME┴RGV─EST+1
- LDA #<ARG┴RGV┬UFFER
- LDY #>ARG┴RGV┬UFFER
- STA FRAME┴RGV╙OURCE+0
- STY FRAME┴RGV╙OURCE+1
- - LDA FRAME┴RGV┬YTES+0
- ORA FRAME┴RGV┬YTES+1
- BEQ FRAME╙ET┴RGV╨TR
- LDY #0
- LDA (FRAME┴RGV╙OURCE),Y
- STA (FRAME┴RGV─EST),Y
- INC FRAME┴RGV╙OURCE+0
- BNE +
- INC FRAME┴RGV╙OURCE+1
- + INC FRAME┴RGV─EST+0
- BNE +
- INC FRAME┴RGV─EST+1
- + LDA FRAME┴RGV┬YTES+0
- BNE +
- DEC FRAME┴RGV┬YTES+1
- + DEC FRAME┴RGV┬YTES+0
- JMP -
-
- ;** SET ARGV POINTER
- FRAME╙ET┴RGV╨TR = *
- LDA STACK╨TR+0
- LDY STACK╨TR+1
- STA PARSE┴RGV+0
- STY PARSE┴RGV+1
- ;** PUT UN-REDIRECTION INFO INTO [MP]
- LDA SHELL╥EDIRECT╙TDIN
- LDX SHELL╥EDIRECT╙TDOUT
- LDY SHELL╥EDIRECT╙TDERR
- STA MP+0
- STX MP+1
- STY MP+2
- RTS
-
- SHELL╥EMOVE╞RAME = *
- ;** RECOVER UN-REDIRECTION INFO FROM [MP]
- LDA MP+0
- LDX MP+1
- LDY MP+2
- STA SHELL╥EDIRECT╙TDIN
- STX SHELL╥EDIRECT╙TDOUT
- STY SHELL╥EDIRECT╙TDERR
- RTS
-
- ;=== DISPATCH ===
-
- DISP┴RGV = $02
- DISP┴RG╨TR = $04
- DISP╓ECTOR = $02
-
- SHELL┼XEC├OMMAND = *
- ;** FETCH THE COMMAND NAME
- LDA PARSE┴RGV+0
- LDY PARSE┴RGV+1
- STA DISP┴RGV+0
- STY DISP┴RGV+1
- LDY #1
- - LDA (DISP┴RGV),Y
- STA DISP┴RG╨TR,Y
- DEY
- BPL -
- LDY #0
- - LDA (DISP┴RG╨TR),Y
- STA ARG┬UFFER,Y
- BEQ +
- INY
- BNE -
-
- ;** SEARCH INTERNAL DISPATCH TABLE FOR NAME
- + LDY #0
- DISP├MP├OMMAND = *
- LDA DISP╘ABLE,Y
- BEQ SHELL╠OAD┼XTERNAL
- LDX #0
- - LDA ARG┬UFFER,X
- CMP DISP╘ABLE,Y
- BNE +
- CMP #0
- BEQ DISP═ATCH
- INX
- INY
- BNE -
- BRK
- + DEY
- - INY
- LDA DISP╘ABLE,Y
- BNE -
- INY
- INY
- INY
- JMP DISP├MP├OMMAND
-
- DISP═ATCH = *
- LDA DISP╘ABLE+1,Y
- PHA
- LDA DISP╘ABLE+2,Y
- TAY
- PLA
- JSR DISP╙ETUP
- JMP EXECSUB
-
- DISP╙ETUP = * ;( (.┴┘)=ZP CONTENTS ) : ZP, ZW, .┴┘=ARGC
- STA ZP+0
- STY ZP+1
- LDA PARSE┴RGV+0
- LDY PARSE┴RGV+1
- STA ZW+0
- STY ZW+1
- LDA PARSE┴RGC+0
- LDY PARSE┴RGC+1
- RTS
-
- ;** LOAD EXTERNAL FILE INTO TRANSIENT PROGRAM AREA
- LOAD╨ATH = 2
- LOAD╨ATH╨OS = 4
- LOAD╟IVE╒P = 7
-
- SHELL╠OAD┼XTERNAL = *
- LDA #0
- STA ACE┴PP┴DDRESS+3
- LDA #0
- STA LOAD╨ATH╨OS
- STA LOAD╟IVE╒P
- LDA #<ACE╙HELL╨ATH
- LDY #>ACE╙HELL╨ATH
- STA LOAD╨ATH+0
- STY LOAD╨ATH+1
-
- SHELL╘RY╠OAD┴GAIN = *
- LDY LOAD╨ATH╨OS
- LDA (LOAD╨ATH),Y
- BEQ DISP├MD╬OT╞OUND
- LDA LOAD╟IVE╒P
- BNE DISP├MD╬OT╞OUND
- LDA PARSE┴RGV+0
- LDY PARSE┴RGV+1
- STA ZW+0
- STY ZW+1
- LDY #0
- LDA (ZW),Y
- STA ZP+0
- STA NAME+0
- INY
- LDA (ZW),Y
- STA ZP+1
- STA NAME+1
- JSR GET╠OAD╨ATHNAME
- LDA #<ACE┴PP┴DDRESS
- LDY #>ACE┴PP┴DDRESS
- JSR BLOAD
- BCS DISP╠OAD┼RROR
- LDA ACE┴PP┴DDRESS+3
- CMP #ACE╔─1
- BNE DISP┬AD╨ROG
- LDA ACE┴PP┴DDRESS+4
- CMP #ACE╔─2
- BNE DISP┬AD╨ROG
- LDA ACE┴PP┴DDRESS+5
- CMP #ACE╔─3
- BNE DISP┬AD╨ROG
- LDA #<ACE┴PP┴DDRESS
- LDY #>ACE┴PP┴DDRESS
- JSR DISP╙ETUP
- JMP EXECSUB
-
- DISP┬AD╨ROG = *
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<DISP┬AD╨ROG═SG
- LDY #>DISP┬AD╨ROG═SG
- JSR EPUTS
- RTS
-
- DISP╠OAD┼RROR = *
- LDA ERRNO
- CMP #ACE┼RR╞ILE╬OT╞OUND
- BEQ SHELL╘RY╠OAD┴GAIN
- CMP #ACE┼RR─EVICE╬OT╨RESENT
- BEQ SHELL╘RY╠OAD┴GAIN
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<DISP╠OAD┼RROR═SG1
- LDY #>DISP╠OAD┼RROR═SG1
- JMP EPUTS
-
- DISP├MD╬OT╞OUND = *
- LDA NAME+0
- LDY NAME+1
- JSR EPUTS
- LDA #<DISP╠OAD┼RROR═SG2
- LDY #>DISP╠OAD┼RROR═SG2
- JMP EPUTS
- DISP╠OAD┼RROR═SG1 = *
- .ASC ": ┼XTERNAL PROGRAM LOAD ERROR"
- .BYTE CHR├╥,0
- DISP╠OAD┼RROR═SG2 = *
- .ASC ": ├OMMAND NOT FOUND"
- .BYTE CHR├╥,0
- DISP┬AD╨ROG═SG = *
- .ASC ": ┬AD EXTERNAL PROGRAM FORMAT"
- .BYTE CHR├╥,0
-
- GET╠OAD╨ATHNAME = *
- LDY LOAD╨ATH╨OS
- LDX #0
- - LDA (LOAD╨ATH),Y
- BEQ +
- STA CMD┬UFFER,X
- INY
- INX
- BNE -
- + INY
- STY LOAD╨ATH╨OS
- LDY #1
- LDA (ZP),Y
- CMP #":"
- BEQ +
- DEY
- LDA (ZP),Y
- CMP #"/"
- BNE GET╨ATH╥EALLY
- + STA LOAD╟IVE╒P
- LDX #0
-
- GET╨ATH╥EALLY = *
- LDY #0
- - LDA (ZP),Y
- STA CMD┬UFFER,X
- BEQ +
- INX
- INY
- BNE -
- + LDA #<CMD┬UFFER
- LDY #>CMD┬UFFER
- STA ZP+0
- STY ZP+1
- RTS
-
- ;===INTERNAL COMMAND NAME AND DISPATCH TABLE===
-
- DISP╘ABLE = *
- .ASC "ECHO"
- .BYTE 0
- .WORD ECHO
- .ASC "SH"
- .BYTE 0
- .WORD SHELL├MD
- .ASC "DIR"
- .BYTE 0
- .WORD DIR╫ITH├LS
- .ASC "D"
- .BYTE 0
- .WORD DIR
- .ASC "LS"
- .BYTE 0
- .WORD LS
- .ASC "CD"
- .BYTE 0
- .WORD CD
- .ASC "CAT"
- .BYTE 0
- .WORD CAT
- .ASC "CLS"
- .BYTE 0
- .WORD CLS
- .ASC "CLEAR"
- .BYTE 0
- .WORD CLS
- .ASC "EXIT"
- .BYTE 0
- .WORD SHELL┼XIT
- .ASC "X"
- .BYTE 0
- .WORD SHELL┼XIT
- .ASC "CLSL"
- .BYTE 0
- .WORD LS╫ITH├LS
- .ASC "@"
- .BYTE 0
- .WORD DOS
- .ASC "DOS"
- .BYTE 0
- .WORD DOS
- .ASC "PATH"
- .BYTE 0
- .WORD PATH
-
- .BYTE 0
-
- ;===ECHO===
- ECHO┴RGV = $02
- ECHO╙PACE = $04
- ECHO╘EMP = $06
-
- ECHO = *
- LDA #0
- STA ECHO╙PACE
- LDA ACE┴RGV+0
- LDY ACE┴RGV+1
-
- ECHO╬EW┴RG = *
- CLC
- ADC #2
- BCC +
- INY
- + STA ECHO┴RGV+0
- STY ECHO┴RGV+1
- LDY #0
- LDA (ECHO┴RGV),Y
- STA ECHO╘EMP+0
- INY
- LDA (ECHO┴RGV),Y
- STA ECHO╘EMP+1
- ORA ECHO╘EMP+0
- BEQ ECHO┼XIT
- LDA #" "
- CMP ECHO╙PACE
- BNE +
- JSR PUTCHAR
- + LDA #" "
- STA ECHO╙PACE
- LDA ECHO╘EMP+0
- LDY ECHO╘EMP+1
- JSR PUTS
- LDA ECHO┴RGV+0
- LDY ECHO┴RGV+1
- JMP ECHO╬EW┴RG
-
- ECHO┼XIT = *
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
-
- ;===COPY PARAMETERS===
- COPY┬UFFER╨TR = $02
- COPY┬UFFER╠ENGTH = $04
-
- GET┬UFFER╨ARMS = *
- LDA #<COPY┬UFFER
- LDY #>COPY┬UFFER
- STA COPY┬UFFER╨TR+0
- STY COPY┬UFFER╨TR+1
- SEC
- LDA ACE═EM╘OP+0
- SBC COPY┬UFFER╨TR+0
- STA COPY┬UFFER╠ENGTH+0
- LDA ACE═EM╘OP+1
- SBC COPY┬UFFER╨TR+1
- STA COPY┬UFFER╠ENGTH+1
- RTS
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACE┴RGV+0
- ADC ZP+0
- STA ZP+0
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- RTS
-
- ;===DIR===
- DIR╞CB = $02
- DIR├OLUMNS = $03
- DIR├UR├OL = $04
- DIR╠ONG = $05
- DIR╙PACES = $06
- DIRLINE╠EN = $07
- DIR├H├OLS = $08
-
- DIR╫ITH├LS = *
- JSR CLS
- JMP DIR
-
- LS╫ITH├LS = *
- JSR CLS
- JMP LS
-
- LS = *
- LDX #1
- JSR DEVINFO
- STX DIR├H├OLS
- CMP #0
- BNE +
- TXA
- LDX #$FF
- - INX
- SBC #20
- BCS -
- TXA
- BNE LS╙ET├OLS
-
- + LDA #1
- LS╙ET├OLS = *
- STA DIR├OLUMNS
- LDA #0
- STA DIR╠ONG
- JMP DIR├OMMON
-
- DIR = *
- LDX #1
- JSR DEVINFO
- STX DIR├H├OLS
- LDA #1
- STA DIR├OLUMNS
- LDA #$FF
- STA DIR╠ONG
-
- DIR├OMMON = *
- LDA #0
- STA DIR├UR├OL
- LDA #<DIR─EFAULT─IRECTORY
- LDY #>DIR─EFAULT─IRECTORY
- STA ZP
- STY ZP+1
- LDA ACE┴RGC+1
- BNE +
- LDA ACE┴RGC+0
- CMP #2
- BCC DIR╟OT╬AME
- + LDA #1
- LDY #0
- JSR GETARG
-
- DIR╟OT╬AME = *
- JSR DIROPEN
- BCC +
- RTS
- + STA DIR╞CB
- LDX DIR╞CB
- JSR DIRREAD
- BCS DIR┼XIT
- BEQ DIR┼XIT
- JSR STOPKEY
- BCS DIR┼XIT
- LDA DIR╠ONG
- BPL +
- JSR DIR─ISPLAY╚EADING
- / LDX DIR╞CB
- JSR DIRREAD
- BCS DIR┼XIT
- BEQ DIR┼XIT
- JSR STOPKEY
- BCS DIR┼XIT
- LDA ACE─IRENT╬AME
- BEQ DIR╘RAILER┼XIT
- LDA ACE─IRENT╒SAGE
- AND #%00010000
- BNE -
- JSR DIR─ISPLAY
- JMP -
-
- DIR╘RAILER┼XIT = *
- LDA DIR╠ONG
- BPL DIR┼XIT
- JSR DIR─ISPLAY╘RAILER
-
- DIR┼XIT = *
- LDA DIR├UR├OL
- BEQ +
- LDA #CHR├╥
- JSR PUTCHAR
- + LDA DIR╞CB
- JMP CLOSE
-
- DIR─EFAULT─IRECTORY = *
- .ASC ".:"
- .BYTE 0
-
- DIR─ISPLAY = *
- BIT DIR╠ONG
- BMI +
- JMP DIR─ISPLAY╙HORT
- + JSR DIR╙ETUP─IRLINE
- LDA #<DIRLINE
- LDY #>DIRLINE
- STA ZP
- STY ZP+1
- LDA DIRLINE╠EN
- LDY #0
- LDX #STDOUT
- JMP WRITE
-
- ;* 0000000000111111111122222222223333333333444444444455555555556666
- ;* POS: 0123456789012345678901234567890123456789012345678901234567890123
- DIRLINE .ASC "DRWX*E-T 00-╪XX-00 12:00A 12345678 *╙┼╤ 1234567890123456"
- .BYTE CHR├╥,0
- DIR╞LAG╬AMES .ASC "DRWX*E-T"
- DIR─ATE╙TR .ASC " 00-╪XX-00 12:00A "
- DIR─ATE┼ND = *
-
- DIR╙ETUP─IRLINE = *
- ;** FLAGS
- LDX #0
- LDA ACE─IRENT╞LAGS
- - ASL
- PHA
- LDA #"-"
- BCC +
- LDA DIR╞LAG╬AMES,X
- + STA DIRLINE+0,X
- PLA
- INX
- CPX #8
- BCC -
- ;** DATE
- LDX #DIR─ATE┼ND-DIR─ATE╙TR-1
- - LDA DIR─ATE╙TR,X
- STA DIRLINE+8,X
- DEX
- BPL -
- ;** BYTES
- LDA ACE─IRENT┬YTES+0
- LDY ACE─IRENT┬YTES+1
- LDX ACE─IRENT┬YTES+2
- JSR ITOA
- LDY #28
- LDA DIR├H├OLS
- CMP #59
- BCS +
- LDY #8
- + LDX #0
- - LDA ITOA╬UMBER,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 ACE─IRENT╘YPE,X
- ORA #$80
- STA DIRLINE,Y
- INY
- INX
- CPX #3
- BCC -
- LDA #" "
- STA DIRLINE,Y
- INY
- STA DIRLINE,Y
- INY
- ;** FILENAME
- LDX #0
- - LDA ACE─IRENT╬AME,X
- BEQ +
- STA DIRLINE,Y
- INY
- INX
- BNE -
- + LDA #CHR├╥
- STA DIRLINE,Y
- INY
- LDA #0
- STA DIRLINE,Y
- STY DIRLINE╠EN
- RTS
-
- DIR─ISPLAY╙HORT = *
- LDA #<ACE─IRENT╬AME
- LDY #>ACE─IRENT╬AME
- JSR PUTS
- INC DIR├UR├OL
- LDA DIR├UR├OL
- CMP DIR├OLUMNS
- BCC +
- LDA #0
- STA DIR├UR├OL
- LDA #CHR├╥
- JMP PUTCHAR
- + LDY #$FF
- - INY
- LDA ACE─IRENT╬AME,Y
- BNE -
- STY DIR╙PACES
- LDA #20
- SBC DIR╙PACES
- STA DIR╙PACES
- - LDA #" "
- JSR PUTCHAR
- DEC DIR╙PACES
- BNE -
- RTS
-
- DIR─ISPLAY╚EADING = *
- LDA #<DIR╚EADING═SG
- LDY #>DIR╚EADING═SG
- JSR PUTS
- LDA #<ACE─IRENT╬AME
- LDY #>ACE─IRENT╬AME
- JSR PUTS
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
-
- DIR╚EADING═SG = *
- .ASC "─IR: "
- .BYTE 0
-
- DIR─ISPLAY╘RAILER = *
- LDA ACE─IRENT┬YTES+0
- LDY ACE─IRENT┬YTES+1
- LDX ACE─IRENT┬YTES+2
- JSR ITOA╙TRIP
- LDA #<ITOA╬UMBER
- LDY #>ITOA╬UMBER
- JSR PUTS
- LDA #<DIR╘RAILING═SG
- LDY #>DIR╘RAILING═SG
- JSR PUTS
- RTS
-
- DIR╘RAILING═SG = *
- .ASC " BYTES FREE"
- .BYTE CHR├╥
- .BYTE 0
-
- ;===CD===
- CD╙CAN╙AVE .BUF 1
-
- CD = *
- LDA ACE┴RGC+0
- CMP #2
- LDA ACE┴RGC+1
- SBC #0
- BCS +
- JSR CDHOME
- RTS
- + LDA #1
- LDY #0
- JSR GETARG
-
- CD╙ET─EVICE = *
- LDX #2
- LDY #0
- LDA (ZP),Y
- STA ARG┬UFFER+0
- INY
- LDA (ZP),Y
- STA ARG┬UFFER+1
- INY
- CMP ":"
- BNE +
- LDA ARG┬UFFER+0
- CMP #$40
- BCC +
- CMP #$60
- BCC CD├HECK╨ATH
- + LDX #0
- LDY #0
-
- CD├HECK╨ATH = *
- STY CD╙CAN╙AVE
- - LDA (ZP),Y
- CMP #"0"
- BCC +
- CMP #"9"+1
- BCS +
- INY
- BNE -
- + STA ARG┬UFFER,X
- CMP #0
- BNE +
- CPY CD╙CAN╙AVE
- BEQ CD╧KAY
- + LDY CD╙CAN╙AVE
- CMP #"/"
- BEQ CD╨ATH╧KAY
- CMP #":"
- BEQ CD╨ATH╧KAY
- + LDA #"/"
- STA ARG┬UFFER,X
- INX
-
- CD╨ATH╧KAY = *
- - LDA (ZP),Y
- STA ARG┬UFFER,X
- BEQ CD├HECK┼ND
- INX
- INY
- BNE -
-
- CD├HECK┼ND = *
- DEX
- LDA ARG┬UFFER,X
- CMP #":"
- BEQ +
- INX
- LDA #":"
- STA ARG┬UFFER,X
- LDA #0
- STA ARG┬UFFER+1,X
- + DEX
- LDA ARG┬UFFER,X
- CMP #"/"
- BEQ CD╧KAY
- LDA #"/"
- STA ARG┬UFFER+1,X
- LDA #":"
- STA ARG┬UFFER+2,X
- LDA #0
- STA ARG┬UFFER+3,X
-
- CD╧KAY = *
- LDA #<ARG┬UFFER
- LDY #>ARG┬UFFER
- STA ZP+0
- STY ZP+1
- JSR CHDIR
- BCS +
- RTS
- + LDA #<CD┼RR═SG
- LDY #>CD┼RR═SG
- JMP EPUTS
-
- CD┼RR═SG = *
- .ASC "┼RROR CHANGING DIRECTORY"
- .BYTE CHR├╥,0
-
- ;===CAT===
- CAT┬UFFER╨TR = $02
- CAT┬UFFER╠ENGTH = $04
- CAT┴RG = $06
- CAT╞CB = $08
- CAT┴BORT = 10
-
- CAT = *
- LDA #0
- STA CAT┴BORT
- JSR GET┬UFFER╨ARMS
- LDX #STDOUT
- JSR DEVINFO
- CMP #0
- BNE +
- LDA CAT┬UFFER╠ENGTH+1
- BEQ +
- LDA #<254
- LDY #>254
- STA CAT┬UFFER╠ENGTH+0
- STY CAT┬UFFER╠ENGTH+1
- + LDA #1
- LDY #0
- STA CAT┴RG+0
- STY CAT┴RG+1
- LDA ACE┴RGC+0
- CMP #2
- LDA ACE┴RGC+1
- SBC #0
- BCS CAT╞ILES
- LDA #0
- STA CAT╞CB
- JMP CAT╞ILE
-
- CAT╞ILES = *
- LDA CAT┴RG+0
- LDY CAT┴RG+1
- JSR GETARG
- LDA #"R"
- JSR OPEN
- BCC +
- LDA ZP+0
- LDY ZP+1
- JSR EPUTS
- LDA #<CAT┼RR═SG
- LDY #>CAT┼RR═SG
- JSR EPUTS
- JMP ++
- + STA CAT╞CB
- JSR CAT╞ILE
- LDA CAT╞CB
- JSR CLOSE
- + INC CAT┴RG
- BNE +
- INC CAT┴RG+1
- + LDA CAT┴BORT
- BNE +
- LDA CAT┴RG
- CMP ACE┴RGC
- LDA CAT┴RG+1
- SBC ACE┴RGC+1
- BCC CAT╞ILES
- + RTS
-
- CAT┼RR═SG = *
- .ASC ": CANNOT OPEN"
- .BYTE CHR├╥,0
-
- CAT╞ILE = *
- LDA CAT┬UFFER╨TR
- LDY CAT┬UFFER╨TR+1
- STA ZP
- STY ZP+1
- - LDA CAT┬UFFER╠ENGTH
- LDY CAT┬UFFER╠ENGTH+1
- LDX CAT╞CB
- JSR READ
- BEQ +
- BCS +
- LDX #1
- JSR WRITE
- BCS +
- JSR STOPKEY
- BCS PRINT╙TOPPED═SG
- JMP -
- + RTS
-
- PRINT╙TOPPED═SG = *
- LDA #$FF
- STA CAT┴BORT
- LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JMP EPUTS
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- ;===EXIT===
- SHELL┼XIT = *
- LDA #$FF
- STA SHELL┼XIT╞LAG
- RTS
-
- ;===DOS===
- DOS╞CB = $02
-
- DOS = *
- ;** OPEN COMMAND CHANNEL
- LDA #<DOS├UR─EVICE
- LDY #>DOS├UR─EVICE
- STA ZP
- STY ZP+1
- JSR CMDOPEN
- BCC +
- RTS
- + STA DOS╞CB
-
- ;** SEND COMMAND
- LDA #1
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BEQ DOS╙TATUS╧NLY
- LDA ZP
- LDY ZP+1
- LDX DOS╞CB
- JSR CMDSEND
- BCS +
-
- ;** READ STATUS
- DOS╙TATUS╧NLY = *
- LDA #<CMD┬UFFER
- LDY #>CMD┬UFFER
- LDX DOS╞CB
- JSR CMDSTATUS
- BCS +
- LDA #<CMD┬UFFER
- LDY #>CMD┬UFFER
- JSR PUTS
- LDA #CHR├╥
- JSR PUTCHAR
-
- ;** CLOSE COMMAND CHANNEL
- + LDA DOS╞CB
- JMP CMDCLOSE
-
- DOS├UR─EVICE .ASC ".:"
- .BYTE 0
-
- ;===SHELL===
- SHELL├MD = *
- JSR SHELL
- LDA #0
- STA SHELL┼XIT╞LAG
- LDA #255
- STA CHECK╨ROMPT╞LAG
- RTS
-
- ;===PATH===
- PATH╨TR = 2
- PATH╨OS = 4
- PATH┴RG = 6
- PATH╙OURCE╨OS = 7
-
- PATH = *
- LDA #<ACE╙HELL╨ATH
- LDY #>ACE╙HELL╨ATH
- STA PATH╨TR+0
- STY PATH╨TR+1
- LDA #0
- STA PATH╨OS
- LDA ACE┴RGC+1
- BEQ +
- RTS
- + LDA ACE┴RGC
- CMP #2
- BCS PATH╙ET
- LDA #<PATH═SG
- LDY #>PATH═SG
- JSR PUTS
-
- DISPLAY╨ATH = *
- LDY PATH╨OS
- LDA (PATH╨TR),Y
- BNE +
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
- + LDA #CHR╤UOTE
- STA CMD┬UFFER
- LDX #1
- - LDA (PATH╨TR),Y
- STA CMD┬UFFER,X
- BEQ +
- INY
- INX
- BNE -
- + INY
- STY PATH╨OS
- LDA #CHR╤UOTE
- STA CMD┬UFFER,X
- INX
- LDA #" "
- STA CMD┬UFFER,X
- INX
- LDA #<CMD┬UFFER
- LDY #>CMD┬UFFER
- STA ZP
- STY ZP+1
- TXA
- LDY #0
- LDX #1
- JSR WRITE
- JMP DISPLAY╨ATH
-
- PATH═SG = *
- .ASC "PATH "
- .BYTE 0
-
- PATH╙ET = *
- LDY #0
- STY PATH╨OS
- LDA #1
- STA PATH┴RG
-
- PATH╬EXT┴RG = *
- LDA PATH┴RG
- LDY #0
- JSR GETARG
- LDA ZP
- ORA ZP+1
- BNE +
- LDA #0
- LDY PATH╨OS
- STA (PATH╨TR),Y
- RTS
- + LDY #0
- STY PATH╙OURCE╨OS
- - LDY PATH╙OURCE╨OS
- INC PATH╙OURCE╨OS
- LDA (ZP),Y
- LDY PATH╨OS
- INC PATH╨OS
- STA (PATH╨TR),Y
- CMP #0
- BNE -
- INC PATH┴RG
- JMP PATH╬EXT┴RG
-
- ;******** 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 PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETC┬UFFER
- LDY #>GETC┬UFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETC┬UFFER
- RTS
- + SEC
- RTS
- GETC┬UFFER .BUF 1
-
- CLS = *
- LDA #CHR├╠╥
- JMP PUTCHAR
-
- ITOA┬IN = LIBWORK
- ITOA╬UMBER .BUF 11
- ITOA = *
- JSR ITOA╨REPARE
- JMP UTOA
- ITOA╙TRIP = *
- JSR ITOA╨REPARE
- LDA #1
- JMP UTOA
- ITOA╨REPARE = *
- STA ITOA┬IN+0
- STY ITOA┬IN+1
- STX ITOA┬IN+2
- LDA #0
- STA ITOA┬IN+3
- LDA #<ITOA╬UMBER
- LDY #>ITOA╬UMBER
- STA ZP+0
- STY ZP+1
- LDA #8
- LDX #ITOA┬IN
- RTS
-
- ;*** BSS ***
-
- BSS = ACE┴PP┴DDRESS
- CMD┬UFFER = BSS+0
- ARG┬UFFER = CMD┬UFFER+256
- ARG┴RGV┬UFFER = ARG┬UFFER+256
- COPY┬UFFER = ARG┴RGV┬UFFER
-