mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-25 15:29:37 +00:00
Updated DUMP, TYPE, SPOOL
Updated TYPE, DUMP, SPOOL, with EXEC all share code. Tweek to ROMSELECT to speed up slightly.
This commit is contained in:
parent
835e2327de
commit
94a198059f
220
auxmem.misc.s
220
auxmem.misc.s
|
@ -9,6 +9,7 @@
|
|||
* 26-Oct-2021 Corrected entry parameters to OSRDRM.
|
||||
* 03-Nov-2021 Temp'y fix, if can't find SROM, ignores it.
|
||||
* 13-Nov-2021 ROMSELECT calls mainmem to load ROM.
|
||||
* 08-Oct-2022 ROMSEL doesn't call loder if already paged in.
|
||||
|
||||
|
||||
* OSBYTE $80 - ADVAL
|
||||
|
@ -320,13 +321,13 @@ GSREADOK INY ; Step to next character
|
|||
* Read a byte from sideways ROM
|
||||
* On entry, Y=ROM to read from
|
||||
* On exit, A=byte read, X=current ROM, Y=$00
|
||||
RDROM LDA $F4
|
||||
RDROM LDA ROMID
|
||||
PHA ; Save current ROM
|
||||
TYA
|
||||
TAX ; X=ROM to read from
|
||||
JSR ROMSELECT ; Page in the required ROM
|
||||
LDY #$00
|
||||
LDA ($F6),Y ; Read the byte
|
||||
LDA (ROMPTR),Y ; Read the byte
|
||||
PLX
|
||||
|
||||
* Select a sideways ROM
|
||||
|
@ -335,105 +336,32 @@ RDROM LDA $F4
|
|||
ROMSELECT
|
||||
* Insert code here for faking sideways ROMs by loading or otherwise
|
||||
* fetching code to $8000. All registers must be preserved.
|
||||
:ROMSEL PHP
|
||||
PHP
|
||||
CPX ROMID ; Speed up by checking if
|
||||
BEQ ROMSELOK ; already paged in
|
||||
PHA
|
||||
PHX
|
||||
PHY
|
||||
SEI
|
||||
TXA ; A=ROM to select
|
||||
>>> XF2MAIN,SELECTROM
|
||||
ROMSELDONE >>> ENTAUX
|
||||
PLY
|
||||
PLX
|
||||
PLA
|
||||
PLP
|
||||
:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
STX ROMID ; Set Current ROM number
|
||||
ROMSELOK PLP
|
||||
RTS
|
||||
|
||||
|
||||
ROMXX
|
||||
* CPX $F8
|
||||
* BEQ :ROMSELOK ; Already selected
|
||||
*
|
||||
** Insert code here for faking sideways ROMs by loading or otherwise
|
||||
** fetching code to $8000. All registers must be preserved.
|
||||
* CPX MAXROM
|
||||
* BEQ :ROMSEL
|
||||
* BCS :ROMSELOK ; Out of range, ignore
|
||||
*:ROMSEL PHA
|
||||
* PHX
|
||||
* PHY
|
||||
*
|
||||
* LDA OSLPTR+0
|
||||
* PHA
|
||||
* LDA OSLPTR+1
|
||||
* PHA
|
||||
*
|
||||
* TXA
|
||||
* ASL A
|
||||
* TAX
|
||||
* LDA ROMTAB+0,X ; LSB of pointer to name
|
||||
* STA OSFILECB+0
|
||||
* LDA ROMTAB+1,X ; MSB of pointer to name
|
||||
* STA OSFILECB+1
|
||||
*
|
||||
* LDX #<OSFILECB
|
||||
* LDY #>OSFILECB
|
||||
* LDA #$05 ; Means 'INFO'
|
||||
* JSR OSFILE
|
||||
* CMP #$01
|
||||
* BNE :ROMNOTFND ; File not found
|
||||
*
|
||||
* STZ OSFILECB+2 ; Dest address $8000
|
||||
* LDA #$80
|
||||
* STA OSFILECB+3
|
||||
* STZ OSFILECB+4
|
||||
* STZ OSFILECB+5
|
||||
* STZ OSFILECB+6 ; Load to specified address
|
||||
* LDX #<OSFILECB
|
||||
* LDY #>OSFILECB
|
||||
* LDA #$FF ; Means 'LOAD'
|
||||
* JSR OSFILE
|
||||
*:ROMNOTFND
|
||||
* PLA
|
||||
* STA OSLPTR+1
|
||||
* PLA
|
||||
* STA OSLPTR+0
|
||||
* PLY
|
||||
* PLX
|
||||
* PLA
|
||||
* STX $F8 ; Set ROM loaded
|
||||
*:ROMSELOK STX $F4 ; Set Current ROM number
|
||||
|
||||
EVENT RTS
|
||||
|
||||
*BASICROM ASC 'BASIC2.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*COMALROM ASC 'COMAL.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*LISPROM ASC 'LISP501.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*FORTHROM ASC 'FORTH103.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*PROLOGROM ASC 'MPROLOG310.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*BCPLROM ASC 'BCPL7.0.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*PASCROM1 ASC 'PASC.1.10.1.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
*PASCROM2 ASC 'PASC.1.10.2.ROM'
|
||||
* DB $0D,$00
|
||||
*
|
||||
|
||||
* Initialize ROMTAB according to user selection in menu
|
||||
ROMINIT STZ MAXROM ; One sideways ROM only
|
||||
STA $C002 ; Read main mem
|
||||
LDA USERSEL
|
||||
LDA USERSEL ; *TO DO* Should be actual number of ROMs
|
||||
STA $C003 ; Read aux mem
|
||||
|
||||
CMP #6
|
||||
|
@ -444,105 +372,6 @@ ROMINIT STZ MAXROM ; One sideways ROM only
|
|||
STA MAXROM
|
||||
:X2 RTS
|
||||
|
||||
* ASL ; x2
|
||||
* CLC
|
||||
* ADC #<ROMS
|
||||
* STA OSLPTR+0
|
||||
* LDA #>ROMS
|
||||
* ADC #$00
|
||||
* STA OSLPTR+1
|
||||
* LDY #$00
|
||||
* LDA (OSLPTR),Y
|
||||
* STA ROMTAB+0
|
||||
* INY
|
||||
* LDA (OSLPTR),Y
|
||||
* STA ROMTAB+1
|
||||
* STA $C002 ; Read main mem
|
||||
* LDA USERSEL
|
||||
* STA $C003 ; Read aux mem
|
||||
* CMP #6 ; Menu entry 7 has two ROMs
|
||||
* BNE :S1
|
||||
* LDA #<PASCROM2
|
||||
* STA ROMTAB+2
|
||||
* LDA #>PASCROM2
|
||||
* STA ROMTAB+3
|
||||
* INC MAXROM ; Two ROMs
|
||||
* BRA :DONE
|
||||
*:S1 CMP #7 ; Menu entry 8
|
||||
* BNE :DONE
|
||||
* LDA #<PASCROM1
|
||||
* STA ROMTAB+0
|
||||
* LDA #>PASCROM1
|
||||
* STA ROMTAB+1
|
||||
* LDA #<PASCROM2
|
||||
* STA ROMTAB+2
|
||||
* LDA #>PASCROM2
|
||||
* STA ROMTAB+3
|
||||
* LDA #<LISPROM
|
||||
* STA ROMTAB+4
|
||||
* LDA #>LISPROM
|
||||
* STA ROMTAB+5
|
||||
* LDA #<FORTHROM
|
||||
* STA ROMTAB+6
|
||||
* LDA #>FORTHROM
|
||||
* STA ROMTAB+7
|
||||
* LDA #<PROLOGROM
|
||||
* STA ROMTAB+8
|
||||
* LDA #>PROLOGROM
|
||||
* STA ROMTAB+9
|
||||
* LDA #<BCPLROM
|
||||
* STA ROMTAB+10
|
||||
* LDA #>BCPLROM
|
||||
* STA ROMTAB+11
|
||||
* LDA #<COMALROM
|
||||
* STA ROMTAB+12
|
||||
* LDA #>COMALROM
|
||||
* STA ROMTAB+13
|
||||
* LDA #<BASICROM
|
||||
* STA ROMTAB+14
|
||||
* LDA #>BASICROM
|
||||
* STA ROMTAB+15
|
||||
* LDA #7 ; 8 sideways ROMs
|
||||
* STA MAXROM
|
||||
*:DONE LDA #$FF
|
||||
* STA $F8 ; Force ROM to load
|
||||
* RTS
|
||||
*
|
||||
** Active sideways ROMs
|
||||
*ROMTAB DW $0000 ; ROM0
|
||||
* DW $0000 ; ROM1
|
||||
* DW $0000 ; ROM2
|
||||
* DW $0000 ; ROM3
|
||||
* DW $0000 ; ROM4
|
||||
* DW $0000 ; ROM5
|
||||
* DW $0000 ; ROM6
|
||||
* DW $0000 ; ROM7
|
||||
* DW $0000 ; ROM8
|
||||
* DW $0000 ; ROM9
|
||||
* DW $0000 ; ROMA
|
||||
* DW $0000 ; ROMB
|
||||
* DW $0000 ; ROMC
|
||||
* DW $0000 ; ROMD
|
||||
* DW $0000 ; ROME
|
||||
* DW $0000 ; ROMF
|
||||
*
|
||||
** ROM filenames in same order as in the menu
|
||||
** ROMMENU copies these to ROMTAB upon user selection
|
||||
*ROMS DW BASICROM
|
||||
* DW COMALROM
|
||||
* DW LISPROM
|
||||
* DW FORTHROM
|
||||
* DW PROLOGROM
|
||||
* DW BCPLROM
|
||||
* DW PASCROM1
|
||||
* DW PASCROM2
|
||||
|
||||
*EVENT LDA #<OSEVENM
|
||||
* LDY #>OSEVENM
|
||||
* JMP PRSTR
|
||||
*OSEVENM ASC 'OSEVEN.'
|
||||
* DB $00
|
||||
|
||||
|
||||
**********************************************************
|
||||
* Interrupt Handlers, MOS redirection vectors etc.
|
||||
|
@ -557,41 +386,27 @@ GSBRKAUX >>> IENTAUX ; IENTAUX does not do CLI
|
|||
IRQBRKHDLR PHA
|
||||
* Mustn't enable IRQs within the IRQ handler
|
||||
* Do not use WRTMAIN/WRTAUX macros
|
||||
BIT $C014 ; Set N if aux write active
|
||||
STA $C004 ; Write to main memory
|
||||
STA $45 ; $45=A for ProDOS IRQ handlers
|
||||
BPL :S1 ; If aux write wasn't active, skip
|
||||
STA $C005 ; Write to aux memory
|
||||
|
||||
:S1 LDA GSSPEED ; See if GS was set to 2.8MHz
|
||||
CMP #$80
|
||||
BNE :S2 ; Nope, continue slow
|
||||
TSB $C036 ; GS: Enable 'fast' speed
|
||||
|
||||
:S2 TXA
|
||||
TXA
|
||||
PHA
|
||||
CLD
|
||||
TSX
|
||||
PHX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
LDA $100,X ; Get PSW from stack
|
||||
LDA $103,X ; Get PSW from stack
|
||||
AND #$10
|
||||
BEQ :IRQ ; IRQ
|
||||
SEC
|
||||
INX
|
||||
LDA $0100,X
|
||||
LDA $0104,X
|
||||
SBC #$01
|
||||
STA FAULT+0 ; FAULT=>error block after BRK
|
||||
INX
|
||||
LDA $0100,X
|
||||
LDA $0105,X
|
||||
SBC #$00
|
||||
STA FAULT+1
|
||||
|
||||
LDA $F4 ; Get current ROM
|
||||
STA BYTEVARBASE+$BA ; Set ROM at last BRK
|
||||
PLX
|
||||
STX OSXREG ; Pass stack pointer
|
||||
LDA #$06 ; Service Call 6 = BRK occured
|
||||
JSR SERVICE
|
||||
|
@ -601,6 +416,7 @@ IRQBRKHDLR PHA
|
|||
PLA
|
||||
TAX
|
||||
PLA
|
||||
CLI
|
||||
JMP (BRKV) ; Pass on to BRK handler
|
||||
|
||||
:IRQ >>> XF2MAIN,A2IRQ ; Bounce to Apple IRQ handler
|
||||
|
@ -731,7 +547,3 @@ AUXBLK ASC '**ENDOFCODE**'
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
364
auxmem.oscli.s
364
auxmem.oscli.s
|
@ -10,11 +10,15 @@
|
|||
* 12-Sep-2021 *HELP uses subject lookup, *HELP MOS, *HELP HOSTFS.
|
||||
* 25-Oct-2021 Implemented *BASIC.
|
||||
* 07-Oct-2022 *CLOSE is a host command, fixed *EXEC.
|
||||
* 08-Oct-2022 Rewrote *TYPE, *DUMP, *SPOOL, shares code with *EXEC.
|
||||
|
||||
|
||||
* COMMAND TABLE
|
||||
***************
|
||||
* Table structure is: { string, byte OR $80, destword-1 } $00
|
||||
* Commands are entered with A=command byte with b7=1
|
||||
* if b6=1 (LPTR),Y=>parameters
|
||||
* if b6=0 XY=>parameters
|
||||
* fsc commands
|
||||
CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
||||
DB $85
|
||||
|
@ -79,19 +83,19 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
|||
* filing utilities
|
||||
ASC 'TYPE'
|
||||
DB $80
|
||||
DW TYPE-1 ; TYPE -> (LPTR)=>params
|
||||
DW CMDTYPE-1 ; TYPE -> (LPTR)=>params
|
||||
ASC 'DUMP'
|
||||
DB $80
|
||||
DW DUMP-1 ; DUMP -> (LPTR)=>params
|
||||
DW CMDDUMP-1 ; DUMP -> (LPTR)=>params
|
||||
ASC 'SPOOL'
|
||||
DB $80
|
||||
DW SPOOL-1 ; SPOOL -> (LPTR)=>params
|
||||
DW CMDSPOOL-1 ; SPOOL -> (LPTR)=>params
|
||||
ASC 'EXEC'
|
||||
DB $80
|
||||
DW EXEC-1 ; EXEC -> (LPTR)=>params
|
||||
DW CMDEXEC-1 ; EXEC -> (LPTR)=>params
|
||||
ASC 'CLOSE'
|
||||
DB $80
|
||||
DW STARCLOSE-1 ; CLOSE -> (LPTR)=>params
|
||||
DW CMDCLOSE-1 ; CLOSE -> (LPTR)=>params
|
||||
* BUILD <file>
|
||||
* terminator
|
||||
DB $FF
|
||||
|
@ -166,8 +170,8 @@ CLIMATCH3 JSR SKIPSPC ; (OSLPTR),Y=>parameters
|
|||
PHA ; Push address low
|
||||
TXA ; Command byte
|
||||
PHA
|
||||
ASL A ; Drop bit 7
|
||||
BEQ CLICALL ; If $80 don't convert LPTR
|
||||
ASL A ; Move bit 6 into bit 7
|
||||
BEQ CLICALL ; If $80-&BF don't convert LPTR
|
||||
JSR LPTRtoXY ; XY=>parameters
|
||||
CLICALL PLA ; A=command parameter
|
||||
RTS ; Call command routine
|
||||
|
@ -371,7 +375,7 @@ LPTRtoXY CLC
|
|||
XYtoLPTR STX OSLPTR+0
|
||||
STY OSLPTR+1
|
||||
LDY #0
|
||||
RTS
|
||||
STARHELP9 RTS
|
||||
|
||||
* Print *HELP text
|
||||
STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters
|
||||
|
@ -379,8 +383,9 @@ STARHELP JSR XYtoLPTR ; (OSLPTR),Y=>parameters
|
|||
LDX #<HLPTABLE ; XY=>command table
|
||||
LDY #>HLPTABLE
|
||||
JSR CLILOOKUP ; Look for *HELP subject
|
||||
BEQ STARHELP9 ; Matched
|
||||
LDA $8006 ; Does ROM have service entry?
|
||||
BMI STARHELP6 ; Yes, send service call
|
||||
BMI STARHELP6 ; Yes, skip to send service call
|
||||
JSR OSNEWL
|
||||
LDA #$09 ; Language name
|
||||
LDY #$80 ; *TO DO* make this and BYTE8E
|
||||
|
@ -533,236 +538,179 @@ ECHOLP1 JSR GSREAD
|
|||
JMP ECHOLP1
|
||||
|
||||
* FILING UTILITIES
|
||||
******************
|
||||
* ================
|
||||
|
||||
* *CLOSE
|
||||
********
|
||||
STARCLOSE LDA #$00
|
||||
CMDCLOSE LDA #$00
|
||||
TAY
|
||||
JSR OSFIND ; Close all files
|
||||
STA FXEXEC ; Clear Spool/Exec handles
|
||||
STA FXEXEC ; Ensure Spool/Exec handles cleared
|
||||
STA FXSPOOL
|
||||
RTS
|
||||
|
||||
* Handle *TYPE command
|
||||
* *TYPE <afsp>
|
||||
**************
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
TYPE JSR LPTRtoXY
|
||||
PHX
|
||||
PHY
|
||||
JSR XYtoLPTR
|
||||
JSR PARSLPTR ; Just for error handling
|
||||
BEQ :SYNTAX ; No filename
|
||||
PLY
|
||||
PLX
|
||||
LDA #$40 ; Open for input
|
||||
JSR OSFIND ; Try to open file
|
||||
CMP #$00 ; Was file opened?
|
||||
BEQ :NOTFOUND
|
||||
TAY ; File handle in Y
|
||||
:L1 JSR BGETHND ; Read a byte
|
||||
BCS :CLOSE ; EOF
|
||||
CMP #$0A ; Don't print LF
|
||||
BEQ :S1
|
||||
CMDTYPE
|
||||
LDA (OSLPTR),Y ; TEMP
|
||||
CMP #$0D ; TEMP
|
||||
BEQ ERRTYPE ; No filename
|
||||
JSR LPTRtoXY ; TEMP
|
||||
*
|
||||
JSR OPENINFILE ; Try to open file
|
||||
:LOOP JSR OSBGET ; Read a byte
|
||||
BCS TYPDMPEND ; EOF
|
||||
CMP #$0A
|
||||
BEQ :LOOP ; Ignore <lf>
|
||||
TAX ; Remember last character
|
||||
JSR OSASCI ; Print the character
|
||||
:S1 LDA ESCFLAG
|
||||
BMI :ESC
|
||||
BRA :L1
|
||||
:CLOSE LDA #$00
|
||||
JSR OSFIND ; Close file
|
||||
:DONE RTS
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: TYPE <*objspec*>'
|
||||
BRK
|
||||
:NOTFOUND BRK
|
||||
DB $D6
|
||||
ASC 'Not found'
|
||||
BRK
|
||||
:ESC LDA #$00 ; Close file
|
||||
JSR OSFIND
|
||||
BRK
|
||||
BIT ESCFLAG
|
||||
BPL :LOOP ; No Escape, keep going
|
||||
TYPEESC JSR TYPCLOSE
|
||||
ERRESCAPE BRK
|
||||
DB $11
|
||||
ASC 'Escape'
|
||||
BRK
|
||||
|
||||
TYPDMPEND CPX #$0D
|
||||
BEQ TYPCLOSE
|
||||
JSR OSNEWL
|
||||
TYPCLOSE LDA #$00
|
||||
JMP OSFIND ; Close file
|
||||
ERRTYPE BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: TYPE <afsp>'
|
||||
BRK
|
||||
|
||||
* Handle *DUMP command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
DUMP JSR LPTRtoXY
|
||||
PHX
|
||||
PHY
|
||||
JSR XYtoLPTR
|
||||
JSR PARSLPTR ; Just for error handling
|
||||
BEQ :SYNTAX ; No filename
|
||||
PLY
|
||||
PLX
|
||||
LDA #$40 ; Open for input
|
||||
JSR OSFIND ; Try to open file
|
||||
CMP #$00 ; Was file opened?
|
||||
BEQ :NOTFOUND
|
||||
TAY ; File handle in Y
|
||||
STZ DUMPOFF
|
||||
STZ DUMPOFF+1
|
||||
:L1 JSR BGETHND ; Read a byte
|
||||
BCS :CLOSE ; EOF
|
||||
PHA
|
||||
LDA DUMPOFF+0
|
||||
AND #$07
|
||||
BNE :INC
|
||||
LDA DUMPOFF+1 ; Print file offset
|
||||
JSR PRHEXBYTE
|
||||
LDA DUMPOFF+0
|
||||
JSR PRHEXBYTE
|
||||
LDA #' '
|
||||
JSR OSASCI
|
||||
LDX #$07
|
||||
LDA #' ' ; Clear ASCII buffer
|
||||
:L2 STA DUMPASCI,X
|
||||
DEX
|
||||
BNE :L2
|
||||
:INC INC DUMPOFF+0 ; Increment file offset
|
||||
BNE :S1
|
||||
INC DUMPOFF+1
|
||||
:S1 PLA
|
||||
STA DUMPASCI,X
|
||||
JSR PRHEXBYTE
|
||||
CMDDUMP
|
||||
LDA (OSLPTR),Y ; TEMP
|
||||
CMP #$0D ; TEMP
|
||||
BEQ :ERRDUMP ; No filename
|
||||
JSR LPTRtoXY ; TEMP
|
||||
*
|
||||
JSR OPENINFILE ; Try to open file
|
||||
STZ OSNUM+0 ; Offset = zero
|
||||
STZ OSNUM+1
|
||||
:LOOP1 BIT ESCFLAG
|
||||
BMI TYPEESC ; Escape pressed
|
||||
PHY ; Save handle
|
||||
LDX OSNUM+0 ; Print file offset
|
||||
LDY OSNUM+1
|
||||
JSR PR2HEX
|
||||
JSR PRSPACE
|
||||
PLY ; Get handle back
|
||||
LDA #8 ; 8 bytes to dump
|
||||
STA OSNUM+2
|
||||
TSX ; Reserve bytes on stack
|
||||
TXA
|
||||
SEC
|
||||
SBC OSNUM+2
|
||||
TAX
|
||||
TXS ; X=>space on stack
|
||||
:LOOP2 JSR OSBGET ; Read a byte
|
||||
BCS :DUMPEOF
|
||||
STA $0101,X ; Store on stack
|
||||
JSR PRHEX ; Print as hex
|
||||
JSR PRSPACE
|
||||
INX
|
||||
LDA #' '
|
||||
JSR OSASCI
|
||||
CPX #$08 ; If EOL ..
|
||||
BNE :S2
|
||||
JSR PRCHARS ; Print ASCII representation
|
||||
:S2 LDA ESCFLAG
|
||||
BMI :ESC
|
||||
BRA :L1
|
||||
:CLOSE JSR PRCHARS ; Print ASCII representation
|
||||
DEC OSNUM+2
|
||||
BNE :LOOP2 ; Loop to do 8 bytes
|
||||
CLC ; CLC=Not EOF
|
||||
BCC :DUMPCHRS ; Jump to display characters
|
||||
:DUMPEOF LDA #$2A ; EOF met, pad with '**'
|
||||
JSR OSWRCH
|
||||
JSR OSWRCH
|
||||
JSR PRSPACE
|
||||
LDA #$00
|
||||
JSR OSFIND ; Close file
|
||||
:DONE RTS
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DUMP <*objspec*>'
|
||||
BRK
|
||||
:NOTFOUND BRK
|
||||
DB $D6
|
||||
ASC 'Not found'
|
||||
BRK
|
||||
:ESC LDA #$00 ; Close file
|
||||
JSR OSFIND
|
||||
BRK
|
||||
DB $11
|
||||
ASC 'Escape'
|
||||
BRK
|
||||
DUMPOFF DW $0000
|
||||
DUMPASCI DS 8
|
||||
|
||||
* Print byte in A in hex format
|
||||
PRHEXBYTE PHA
|
||||
LSR A
|
||||
LSR A
|
||||
LSR A
|
||||
LSR A
|
||||
JSR PRHEXNIB
|
||||
PLA
|
||||
JSR PRHEXNIB
|
||||
RTS
|
||||
|
||||
* Print nibble in A in hex format
|
||||
PRHEXNIB AND #$0F
|
||||
CMP #10
|
||||
BPL :LETTER
|
||||
CLC
|
||||
ADC #'0'
|
||||
BRA :PRINT
|
||||
:LETTER CLC
|
||||
ADC #'A'-10
|
||||
:PRINT JSR OSASCI
|
||||
RTS
|
||||
|
||||
* Print ASCII char buffer
|
||||
* with non-printing chars shown as '.'
|
||||
PRCHARS CPX #$00
|
||||
BEQ :DONE
|
||||
CPX #$08 ; Pad final line
|
||||
BEQ :S0
|
||||
LDA #' '
|
||||
JSR OSASCI
|
||||
JSR OSASCI
|
||||
JSR OSASCI
|
||||
STA $0101,X
|
||||
INX
|
||||
BRA PRCHARS
|
||||
:S0 LDX #$00
|
||||
:L2 LDA DUMPASCI,X
|
||||
CMP #$20
|
||||
BMI :NOTPRINT
|
||||
DEC OSNUM+2
|
||||
BNE :DUMPEOF ; Loop to do 8 bytes
|
||||
SEC ; SEC=EOF
|
||||
:DUMPCHRS LDX #8 ; 8 bytes to print
|
||||
:LOOP4 PLA ; Get character
|
||||
PHP ; Save EOF flag
|
||||
CMP #$7F
|
||||
BPL :NOTPRINT
|
||||
JSR OSASCI
|
||||
:S1 INX
|
||||
CPX #$08
|
||||
BNE :L2
|
||||
BEQ :DUMPDOT
|
||||
CMP #$20
|
||||
BCS :DUMPCHR
|
||||
:DUMPDOT LDA #$2E
|
||||
:DUMPCHR JSR OSWRCH ; Print character
|
||||
INC OSNUM+0 ; Increment offset
|
||||
BNE :DUMPNXT
|
||||
INC OSNUM+1
|
||||
:DUMPNXT PLP ; Get EOF flag back
|
||||
DEX
|
||||
BNE :LOOP4 ; Loop to do 8 bytes
|
||||
PHP
|
||||
JSR OSNEWL
|
||||
LDX #$00
|
||||
:DONE RTS
|
||||
:NOTPRINT LDA #'.'
|
||||
JSR OSASCI
|
||||
BRA :S1
|
||||
PLP
|
||||
BCC :LOOP1
|
||||
JMP TYPCLOSE ; Close and finish
|
||||
:ERRDUMP BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DUMP <afsp>'
|
||||
BRK
|
||||
|
||||
|
||||
* Handle *SPOOL command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
SPOOL JSR LPTRtoXY
|
||||
PHX
|
||||
PHY
|
||||
JSR XYtoLPTR
|
||||
JSR PARSLPTR ; Just for error handling
|
||||
BEQ :CLOSE ; No filename - stop spooling
|
||||
LDY FXSPOOL ; Already spooling?
|
||||
BEQ :OPEN
|
||||
LDA #$00 ; If so, close file
|
||||
JSR OSFIND
|
||||
:OPEN PLY
|
||||
PLX
|
||||
LDA #$80 ; Open for writing
|
||||
JSR OSFIND ; Try to open file
|
||||
STA FXSPOOL ; Store SPOOL file handle
|
||||
RTS
|
||||
:CLOSE PLY ; Clean up stack
|
||||
PLX
|
||||
LDY FXSPOOL
|
||||
BEQ :DONE
|
||||
LDA #$00
|
||||
JSR OSFIND ; Close file
|
||||
STZ FXSPOOL
|
||||
CMDSPOOL
|
||||
LDA (OSLPTR),Y ; TEMP
|
||||
CMP #$0D ; TEMP
|
||||
PHP ; TEMP
|
||||
JSR LPTRtoXY ; TEMP
|
||||
*
|
||||
PHY ; Save Y
|
||||
LDY FXSPOOL ; Get SPOOL handle
|
||||
BEQ :SPOOL1 ; Wasn't open, skip closing
|
||||
LDA #$00 ; A=CLOSE
|
||||
STA FXSPOOL ; Clear SPOOL handle
|
||||
JSR OSFIND ; Close SPOOL file
|
||||
:SPOOL1 PLY ; Get Y back, XY=>filename
|
||||
PLP ; Get NE=filename, EQ=no filename
|
||||
BEQ :DONE ; No filename, all done
|
||||
LDA #$80 ; A=OPENOUT, for writing
|
||||
JSR OUTPUTFILE ; Try to open file
|
||||
STA FXSPOOL ; Store SPOOL handle
|
||||
:DONE RTS
|
||||
|
||||
|
||||
* Handle *EXEC command
|
||||
* LPTR=>parameters string
|
||||
*
|
||||
EXEC PHY
|
||||
LDY FXEXEC
|
||||
BEQ :EXEC1
|
||||
LDA #$00
|
||||
STA FXEXEC
|
||||
JSR OSFIND ; If Exec open, close it
|
||||
:EXEC1 PLY
|
||||
LDA (OSLPTR),Y
|
||||
CMP #$0D
|
||||
BEQ :DONE ; No filename, all done
|
||||
JSR LPTRtoXY ; XY=>filename
|
||||
LDA #$40 ; Open for input
|
||||
JSR OSFIND ; Try to open file
|
||||
TAY ; Was file opened?
|
||||
BEQ :NOTFOUND
|
||||
CMDEXEC
|
||||
LDA (OSLPTR),Y ; TEMP
|
||||
CMP #$0D ; TEMP
|
||||
PHP ; TEMP
|
||||
JSR LPTRtoXY ; TEMP
|
||||
*
|
||||
PHY ; Save Y
|
||||
LDY FXEXEC ; Get EXEC handle
|
||||
BEQ :EXEC1 ; Wasn't open, skip closing it
|
||||
LDA #$00 ; A=CLOSE
|
||||
STA FXEXEC ; Clear EXEC handle
|
||||
JSR OSFIND ; Close EXEC file
|
||||
:EXEC1 PLY ; Get Y back, XY=>filename
|
||||
PLP ; Get NE=filename, EQ=no filename
|
||||
BEQ EXECDONE ; No filename, all done
|
||||
JSR OPENINFILE ; Try to open file
|
||||
STA FXEXEC ; Store EXEC file handle
|
||||
:DONE RTS
|
||||
:NOTFOUND BRK
|
||||
DB $D6
|
||||
ASC 'Not found'
|
||||
BRK
|
||||
EXECDONE RTS
|
||||
|
||||
OPENINFILE LDA #$40 ; Open for input
|
||||
OUTPUTFILE JSR OSFIND ; Try to open file
|
||||
TAY ; Was file opened?
|
||||
BNE EXECDONE ; File opened
|
||||
EXECNOTFND LDA #$46
|
||||
JMP MKERROR ; File not found
|
||||
|
||||
|
||||
|
||||
*
|
||||
* Handle *FAST command
|
||||
|
@ -824,9 +772,3 @@ LOCKZIP LDA #$A5
|
|||
STA $C05A
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user