mirror of https://github.com/markpmlim/EdAsm.git
2080 lines
60 KiB
ArmAsm
2080 lines
60 KiB
ArmAsm
Name : EDITOR3.S
|
|
End of file : 34,353
|
|
This file was generated using the DiskBrowser utility with minimal editing.
|
|
It is meant for viewing purposes only.
|
|
|
|
ORG $9900
|
|
;
|
|
; Parse cmd line for dec string
|
|
; Convert to a 16-bit unsigned val
|
|
; Stops process on a non-dec char
|
|
;
|
|
; Output
|
|
; C=0 - Conversion was done and
|
|
; (Reg11)=16-bit value
|
|
; C=1 - No conversion
|
|
;
|
|
L9900 LDA #0
|
|
STA Reg11
|
|
STA Reg11+1
|
|
LDA Z12 ;Get char
|
|
JSR L996D ;Convert if dec digit
|
|
BCS L9958 ;Not dec
|
|
STA Reg11
|
|
STA L996C
|
|
L9912 JSR XB274 ;Get next non-blank char
|
|
JSR L996D
|
|
BCS L9957 ;Not a dec digit
|
|
;
|
|
STA Reg4 ;(A)=0-9
|
|
ORA L996C
|
|
STA L996C
|
|
LDA Reg11
|
|
STA Reg0
|
|
CMP #$98 ;Max val < 65520
|
|
LDA Reg11+1
|
|
STA Reg0+1
|
|
SBC #$19
|
|
BCS L99A5 ;Overflow
|
|
;
|
|
ROL Reg0 ;x4
|
|
ROL Reg0+1
|
|
ROL Reg0
|
|
ROL Reg0+1
|
|
;
|
|
LDA Reg0 ;x5
|
|
CLC
|
|
ADC Reg11
|
|
STA Reg11
|
|
LDA Reg0+1
|
|
ADC Reg11+1
|
|
STA Reg11+1
|
|
ROL Reg11 ;x2
|
|
ROL Reg11+1 equi to mulby10
|
|
;
|
|
CLC ;Add incoming digit
|
|
LDA Reg4
|
|
ADC Reg11
|
|
STA Reg11
|
|
BCC L9954
|
|
INC Reg11+1
|
|
L9954 JMP L9912 ;Next digit
|
|
;
|
|
L9957 CLC
|
|
L9958 RTS
|
|
;=================================================
|
|
L9959 JSR L9900 ;Convert dec string
|
|
BCS L9964
|
|
LDA L996C ;Was a string of 0's entered?
|
|
BEQ L9965 ;Yes
|
|
CLC
|
|
L9964 RTS
|
|
;
|
|
L9965 LDX #$58 ;Bad Line #/Range
|
|
PLA
|
|
PLA
|
|
JMP XB290 ;err msg
|
|
;
|
|
L996C DB $C0 ;Flag
|
|
;=================================================
|
|
; Input
|
|
; (A) char
|
|
; Output
|
|
; C=0 if decimal char and (A)= 0-9
|
|
; C=1 not a decimal char
|
|
;
|
|
L996D CMP #'9'+1 ;Is char '0'-'9'?
|
|
BCS L9979
|
|
CMP #'0'
|
|
BCC L9979 ;No
|
|
AND #$0F ; --> 0-9
|
|
CLC
|
|
RTS
|
|
L9979 SEC
|
|
RTS
|
|
;=================================================
|
|
; Save (Reg11) into $BD00/$BD80 buf
|
|
;
|
|
L997B LDA Reg11
|
|
JSR L9982
|
|
LDA Reg11+1
|
|
L9982 EQU *
|
|
LDY #0
|
|
STA (Reg12),Y
|
|
INC Reg12
|
|
BNE L998C
|
|
INC Reg12+1
|
|
L998C RTS
|
|
;=================================================
|
|
; If there is no dec/hexdec str issued with cmd
|
|
; then ($BD00-$01)=$0000
|
|
;
|
|
L998D JSR L9959 ;Convert &
|
|
L9990 JSR L997B ; store
|
|
DEX
|
|
JMP XB211
|
|
;
|
|
L9997 JSR L9900 ;Convert dec string
|
|
JMP L99A0 ;Chk if parm is mandatory
|
|
;
|
|
L999D JSR L9959 ;Get mandatory dec #
|
|
L99A0 BCC L9990 ;Yes, proceed to store it
|
|
;
|
|
L99A2 LDX #$1C ;Parms omitted
|
|
DB $2C
|
|
L99A5 LDX #$0B
|
|
L99A7 JMP XB290
|
|
;=================================================
|
|
L99AA JSR L99CD ;(Reg12)=ptr to $BD80 buf
|
|
;
|
|
L99AD JSR L9A18 ;Copy parm as it
|
|
JMP XB211
|
|
;=================================================
|
|
L99B3 JSR L9A18 ;Copy 1st reqd parm
|
|
BCC L99A2 ;Err if not parm's not passed
|
|
JSR L9A1E ;Copy 2nd optional parm
|
|
JMP XB211
|
|
;=================================================
|
|
L99BE LDA #CR ;Set CR to be
|
|
STA Z12 ; the end
|
|
DEX
|
|
LDY #33
|
|
STY Z10
|
|
JSR L9A22 ;Copy parm as is
|
|
JMP XB211
|
|
;=================================================
|
|
; Output
|
|
; (Reg12) - ptr to $BD80
|
|
;
|
|
L99CD LDA #>XBD80 ;SET R12,$BD80
|
|
STA Reg12
|
|
LDA #<XBD80
|
|
STA Reg12+1
|
|
RTS
|
|
;=================================================
|
|
; Parse cmd line for pathname and store it
|
|
; @ the $BD80 buf
|
|
;
|
|
L99D6 LDA Z12
|
|
CMP #CR
|
|
BEQ L99A2
|
|
L99DC CMP #','
|
|
BEQ L99A2
|
|
JSR L99CD ;Set (Reg12)=$BD80
|
|
L99E3 LDY #63
|
|
STY Z10 ;cnt down
|
|
LDY #','
|
|
STY Z12 ;Stop on this delimiter
|
|
DEX
|
|
JSR L9A22 ;Save next part of input line to buf @ $BD80
|
|
BCC L99F2
|
|
DEX ;Push back
|
|
L99F2 JMP XB211
|
|
;=================================================
|
|
L99F5 LDA Z12
|
|
CMP #CR
|
|
BNE L99DC
|
|
;
|
|
JSR L99CD ;Set (Reg12)=$BD80
|
|
L99FE JSR L9A38 ;Store 0 as delimiter into $BD80 buf
|
|
JMP XB211
|
|
;
|
|
L9A04 LDA Z12
|
|
CMP #CR
|
|
BEQ L99FE
|
|
BNE L99E3 ;always
|
|
;=================================================
|
|
; Char must be CR
|
|
;
|
|
L9A0C LDA Z12
|
|
CMP #CR
|
|
BNE L9A15
|
|
JMP L99A2 ;err
|
|
L9A15 JMP L99E3
|
|
;=================================================
|
|
; Copy parm fr Inbuf to $BD80 buf
|
|
; (X)-curr index in InBuf
|
|
; Z10-max # of chars to copy
|
|
;
|
|
L9A18 LDA Z12
|
|
CMP #CR
|
|
BEQ L9A38
|
|
L9A1E LDY #0
|
|
STY Z10
|
|
L9A22 LDA InBuf,X
|
|
INX
|
|
CMP #CR
|
|
BEQ L9A38 ;EO cmd
|
|
CMP Z12 ;Delimiter (either comma or CR)
|
|
BEQ L9A3A ;Stop on this
|
|
JSR L9982 ;Store char in buf
|
|
DEC Z10
|
|
BNE L9A22
|
|
;
|
|
L9A35 JMP XB28E ;Cmd Syntax
|
|
;
|
|
L9A38 DEX ;Push back
|
|
CLC
|
|
L9A3A LDA #0 ;Terminate w/zero
|
|
JMP L9982
|
|
;=================================================
|
|
; For parsing several intervals of line #'s
|
|
; Z7D = -1,0,1
|
|
;
|
|
L9A3F LDA #32 ;Max cnt
|
|
STA Z10
|
|
LDY #1
|
|
STY Z7D
|
|
BNE L9A50 ;always
|
|
;
|
|
L9A49 LDY #0
|
|
L9A4B STY Z7D
|
|
JSR XB274 ;Get next non-blank
|
|
;
|
|
L9A50 JSR L9959 ;Convert if a dec str
|
|
BCC L9A59 ;There was a conversion
|
|
LDY Z7D ;
|
|
BEQ L9A70
|
|
;
|
|
L9A59 DEC Z10
|
|
BEQ L9A35 ;Err
|
|
JSR L9A7F
|
|
CMP #$FF ;Is char a ','?
|
|
BEQ L9A49 ;Yes, another interval
|
|
CMP #$00 ;Is it a '-'?
|
|
BNE L9A70 ;No
|
|
LDY Z7D ;Was an interval?
|
|
BMI L9A35 ;Yes->err
|
|
LDY #-1 ;Flag an interval
|
|
BMI L9A4B ;always
|
|
;
|
|
L9A70 LDA #-1 ;Store a couple of $FF
|
|
JSR L9982 ; to mark end of interval
|
|
JSR L9982
|
|
DEX
|
|
JSR L99CD
|
|
JMP XB211 ;Continue parsing cmd line
|
|
;=================================================
|
|
; (Z12)-char
|
|
; Output
|
|
; (Z12) (A)
|
|
; , $FF
|
|
; - $00
|
|
; CR $E0
|
|
;
|
|
L9A7F JSR L997B ;Save Reg11 to buffer
|
|
LDA Z12 ;Get char
|
|
SEC
|
|
SBC #'-'
|
|
JMP L9982
|
|
;=================================================
|
|
; Parse for L$/A$ parms
|
|
;
|
|
L9A8A LDA #'L'
|
|
BNE L9A93 ;always
|
|
L9A8E JSR L9AA5
|
|
LDA #'A'
|
|
L9A93 CMP Z12
|
|
BNE L9A9F
|
|
JSR XB274
|
|
JSR L9AC4
|
|
BCC L9AA2
|
|
L9A9F JMP L99A2
|
|
L9AA2 JMP L9990
|
|
;=================================================
|
|
; Set ptr to buf for storing A$ and L$ 16-bit
|
|
; values which are separated by a 0
|
|
;
|
|
L9AA5 EQU * ;ENTRY
|
|
LDA #>XBD00
|
|
STA Reg12 ;SET R12,XBD00
|
|
LDA #<XBD00
|
|
STA Reg12+1
|
|
RTS
|
|
;=================================================
|
|
; Parse for L$/A$ parms
|
|
;
|
|
L9AAE LDA #'L' ;Length
|
|
BNE L9AB7 ;always
|
|
;
|
|
L9AB2 JSR L9AA5 ;Set ptr to $BD00 buf
|
|
LDA #'A' ;Addr
|
|
L9AB7 CMP Z12
|
|
BNE L9ABE
|
|
JSR XB274 ;Get next non-blank char
|
|
L9ABE JSR L9AC4
|
|
JMP L9990
|
|
;=================================================
|
|
; Parse a string, convert its value and
|
|
; store binary result @ $BD00 buf
|
|
;
|
|
L9AC4 LDA Z12
|
|
CMP #'$'
|
|
BEQ L9ACD
|
|
JMP L9959 ;Convert dec string
|
|
;
|
|
L9ACD JSR XB274 ;Get next non-blank char
|
|
LDA #$00
|
|
STA Reg11
|
|
STA Reg11+1
|
|
LDA Z12
|
|
JSR L9B04 ;Is char hexdec digit?
|
|
BCC L9ADE ;Yes
|
|
RTS
|
|
;
|
|
; (A) has the converted value which is $00-$0F
|
|
;
|
|
L9ADE STA Reg11
|
|
L9AE0 JSR XB274 ;Get next non-blank char
|
|
JSR L9B04
|
|
BCS L9B15 ;No, a hexdec digit
|
|
;
|
|
L9AE8 ASL Reg11 ;Mul16
|
|
ROL Reg11+1
|
|
ASL Reg11 ;Shift to make way
|
|
ROL Reg11+1
|
|
ASL Reg11
|
|
ROL Reg11+1 ; for incoming digit
|
|
ASL Reg11
|
|
ROL Reg11+1
|
|
BCS L9B01 ;Overflow
|
|
ORA Reg11
|
|
STA Reg11
|
|
JMP L9AE0 ;Get next char
|
|
L9B01 JMP L99A5
|
|
;=================================================
|
|
; Input
|
|
; (A) - ASCII char to be converted
|
|
; Output
|
|
; C=0 if char is hexdec and
|
|
; (A) - $00-$0F
|
|
; C=1 if char is not hexdec
|
|
;
|
|
L9B04 JSR L996D ;Try dec conversion first
|
|
BCC L9B16 ;If char is dec, conversion is done
|
|
CMP #'F'+1 ;Is char a hexdec digit?
|
|
BCS L9B18 ;No
|
|
CMP #'A'
|
|
BCC L9B17 ;No
|
|
SBC #$07 ;$41-$46 -> $3A-$3F
|
|
AND #$0F ; -> $0A-$0F
|
|
L9B15 CLC
|
|
L9B16 RTS
|
|
;
|
|
L9B17 SEC
|
|
L9B18 RTS
|
|
;=================================================
|
|
; XLOAD cmd
|
|
; This cmd is only valid if edit is not split
|
|
;
|
|
L9B19 RTN
|
|
JSR L9C4F ;Chk if swap is in effect
|
|
JSR NEWSW16 ;No
|
|
L9B20 SET R4,XBD80 ;Point @ PN
|
|
SET R0,$0006
|
|
ADD R5 ;TxtBgn
|
|
ST R3
|
|
ST R9 ;=TxtBgn+6 ($807)
|
|
L9B29 LDD R12 ;Is a Load addr specified?
|
|
BZ L9B36 ;No
|
|
CPR R9 ;Addr must not be < this
|
|
BNC L9B32
|
|
CPR R6 ;Is it < HiMem?
|
|
BNC L9B35 ;Yes
|
|
L9B32 BRL LD541 ;Invalid parm err
|
|
;
|
|
L9B35 ST R9 ;=Specified LoadAdr
|
|
L9B36 LD R5 ;Ptr to TxtBgn ($801)
|
|
ST R2
|
|
SUB R0 ;Zero ACC and
|
|
STD R2 ; locations $801-$802
|
|
RTN
|
|
LDA #BINtype
|
|
JSR XB883
|
|
BCC L9B45
|
|
JMP XB602
|
|
;
|
|
L9B45 LDY #5
|
|
L9B47 LDA XBAC8,Y ;Copy Access bits, filetype
|
|
STA (Reg5),Y ; & auxtype to $803-$806
|
|
DEY
|
|
CPY #1
|
|
BNE L9B47
|
|
;
|
|
LDX XBACB ;Is file of type TXT?
|
|
CPX #TXTtype
|
|
BEQ L9B60 ;Yes
|
|
CPX #$02
|
|
BCC L9B60
|
|
CPX #$0F ;DIRtype
|
|
BNE L9B65
|
|
L9B60 LDA #$11 ;File type mismatch
|
|
JMP XB602
|
|
;
|
|
L9B65 JSR NEWSW16
|
|
LD R3
|
|
ST R7 ;TxtEnd
|
|
RTN
|
|
JMP LD9C6 ;(X)=filetype -> go loadfile
|
|
;=================================================
|
|
; XSAVE cmd
|
|
; An XLOAD must precede an XSAVE; this cmd will not
|
|
; be executed if this rule is not obeyed. Internal
|
|
; control info will be properly setup by the
|
|
; XLOAD cmd.
|
|
; If no addr is specified, (Reg9) may not be
|
|
; computed correctly unless an XLOAD cmd is
|
|
; immediately followed by an XSAVE cmd. For
|
|
; this case, Reg5 and Reg7 must be set correctly
|
|
; For this multiple cmd (w/o A$, L$ parms)
|
|
; XLOAD <pathname1>: XSAVE <pathname2>
|
|
; to work correctly, Reg9 and Reg10 must
|
|
; be setup properly
|
|
; Reg12 - ptr to $BD00 buf
|
|
;
|
|
L9B6E SET R0,$0006
|
|
ADD R5 ;TxtBgn
|
|
CPR R7 ;TxtEnd
|
|
BNZ L9B78
|
|
BRL LD6EC ;Just do a FILE cmd
|
|
;
|
|
L9B78 SET R4,XBD80 ;Ptr to PN
|
|
ST R10 ;=TxtBgn+6
|
|
LDD R12 ;Did user specify an addr?
|
|
BZ L9B89 ;No
|
|
ST R10
|
|
LDD R12 ;Did user specify a len?
|
|
BNZ L9B86 ;Yes
|
|
BRL LD541 ;Invalid parm
|
|
;
|
|
L9B86 ST R9
|
|
BR L9B8F
|
|
L9B89 LD R7 ;XLOAD should have set this
|
|
ST R9 ; correctly to last byte of
|
|
INR R9 ; file's data in mem
|
|
LD R9 ;Compute # of bytes
|
|
SUB R10
|
|
ST R9 ; to write
|
|
L9B8F RTN
|
|
;
|
|
JSR L9C4F ;Must not have a split buf
|
|
LDY #0
|
|
LDA (Reg5),Y ;Chk for a double zero
|
|
INY
|
|
ORA (Reg5),Y
|
|
BEQ L9BA1 ;Got 'em
|
|
L9B9C LDA #$11
|
|
JMP XB602
|
|
;
|
|
L9BA1 LDY #3
|
|
LDA (Reg5),Y ;filetype
|
|
JSR LDA65 ;Write the file
|
|
LDA FileType
|
|
L9BAA JSR XB883
|
|
LDY #3
|
|
L9BAF LDA XBAD1,Y ;Date/Time
|
|
STA XBAE3,Y ; last mod
|
|
DEY
|
|
BPL L9BAF
|
|
;
|
|
LDY #2
|
|
L9BBA LDA (Reg5),Y ;Copy access,filetype
|
|
STA XBADA,Y ;and auxtype @ $803-$806
|
|
INY
|
|
CPY #6
|
|
BCC L9BBA
|
|
;
|
|
LDA XBAC8 ;PN ptr
|
|
STA XBADA
|
|
LDA XBAC8+1
|
|
STA XBADA+1
|
|
JSR XB904 ;Set file's attrib
|
|
JMP XB1CB
|
|
;=================================================
|
|
; BLOAD cmd
|
|
;
|
|
L9BD6 RTN
|
|
JSR L9C4F
|
|
JSR NEWSW16
|
|
SET R4,XBD80 ;Ptr to PN
|
|
LDD R12 ;Get load addr
|
|
CPR R5 ;Is it >= TxtBgn?
|
|
BC L9BE7 ;Yes
|
|
L9BE4 BRL LD541
|
|
;
|
|
L9BE7 CPR R6 ;Is it >= HiMem?
|
|
BC L9BE4 ;Yes, err
|
|
ST R9
|
|
RTN
|
|
LDX #BINtype
|
|
JSR LoadFile
|
|
L9BF1 BCC L9BF6
|
|
JMP XB602
|
|
L9BF6 JMP XB1CB
|
|
;=================================================
|
|
; BSAVE cmd
|
|
;
|
|
L9BF9 SET R4,XBD80 ;Ptr to PN
|
|
LDD R12
|
|
ST R10 ;adr
|
|
LDD R12
|
|
ST R9 ;len
|
|
RTN
|
|
LDA #BINtype
|
|
JSR LDA65 ;Save the file
|
|
LDA #BINtype
|
|
STA XBADD
|
|
JSR XB883 ;Get info on freshly-created file
|
|
;
|
|
LDY #3
|
|
L9C10 LDA XBAD1,Y ;Date&Time of
|
|
STA XBAE3,Y ; last modification
|
|
DEY
|
|
BPL L9C10
|
|
;
|
|
LDA XBA92 ;Ptr to data buf
|
|
STA XBADE
|
|
LDA XBA92+1
|
|
STA XBADE+1
|
|
LDA #$C3 ;Access bits
|
|
STA XBADC
|
|
LDA XBAC8 ;Ptr to PN
|
|
STA XBADA
|
|
LDA XBAC8+1
|
|
STA XBADA+1
|
|
JSR XB904 ;Set file's attributes
|
|
JMP XB1CB
|
|
;=================================================
|
|
L9C3C LDA LA5B4,Y ;Get char
|
|
INY
|
|
JMP XB343 ; and print it
|
|
;=================================================
|
|
; PrByte
|
|
;
|
|
L9C43 JSR XB99B ;Convert (A) into 2-char str
|
|
PHA
|
|
TXA
|
|
JSR XB343
|
|
PLA
|
|
JMP XB343
|
|
;=================================================
|
|
L9C4F LDA SwapMode ;Is txt buf split?
|
|
BEQ L9C56 ;No
|
|
JMP XB6EA ;Show err & don't ret to caller
|
|
L9C56 RTS
|
|
;=================================================
|
|
; Move contents of txtbuf down in mem
|
|
;
|
|
L9C57 JSR NEWSW16
|
|
SET R1,Z7E
|
|
LD R9
|
|
STD R1 ;src addr
|
|
LD R7 ;TxtEnd
|
|
STD R1 ;=$80
|
|
LD R10
|
|
STD R1 ;=$82 (dest addr)
|
|
ADD R7 ;Compute the final addr
|
|
SUB R9 ; of last char of txtbuf
|
|
RTN
|
|
;
|
|
LDY #0
|
|
L9C68 LDA (Z7E),Y
|
|
STA (Z82),Y
|
|
INC Z82
|
|
BNE L9C72
|
|
INC Z82+1
|
|
L9C72 LDA Z7E
|
|
CMP Z80
|
|
LDA Z7E+1
|
|
SBC Z80+1
|
|
;
|
|
INC Z7E
|
|
BNE L9C80
|
|
INC Z7E+1
|
|
L9C80 BCC L9C68
|
|
;
|
|
L9C82 JSR NEWSW16 ;Is new TxtEnd
|
|
CPR R5 ; >= new TxtBgn?
|
|
BC L9C89 ;Yes
|
|
LD R5
|
|
L9C89 ST R7 ;TxtEnd
|
|
RTN
|
|
RTS
|
|
;=================================================
|
|
; Print error msg table
|
|
; (X)-index into err msg table
|
|
;
|
|
L9C8C LDA L9CA0,X
|
|
BEQ L9C97
|
|
JSR XB343
|
|
INX
|
|
BNE L9C8C
|
|
L9C97 RTS
|
|
;=================================================
|
|
; Editor's error message printer
|
|
;
|
|
L9C98 EQU * ;ENTRY
|
|
JSR L9C8C
|
|
LDX #$68 ;ERROR
|
|
JMP L9C8C
|
|
;=================================================
|
|
;
|
|
L9CA0 ASC 'CMD SYNTAX'
|
|
DB $00
|
|
ASC 'NUMERIC OVERFLOW'
|
|
DB $00
|
|
ASC 'PARAMETER(S) OMITTED'
|
|
DB $00
|
|
ASC 'UNKNOWN COMMAND'
|
|
DB $00
|
|
ASC 'MULTI BUFFER'
|
|
DB $00
|
|
ASC 'EXEC NEST'
|
|
DB $00
|
|
ASC 'BAD LINE#/RANGE'
|
|
DB $00
|
|
ASC ' ERROR'
|
|
DB $07,CR,$00
|
|
;=================================================
|
|
; Editor's Default Tab table
|
|
;
|
|
L9D11 EQU * ;ENTRY
|
|
DB 32,36,48
|
|
L9D14 EQU * ;ENTRY
|
|
ASC 'EDASM.AUTOST'
|
|
DB $00
|
|
;=================================================
|
|
; $9D21
|
|
; This 'JMP via RTS' table is utilised by the EI's
|
|
; code ($B20F-$B262) for further processing of
|
|
; the command line stored at InBuf
|
|
;
|
|
JMPTBL EQU * ;ENTRY
|
|
DW XB659-1 ;0 - Chk for a CR
|
|
DW L999D-1 ;2
|
|
DW L9A3F-1 ;4
|
|
DW L99AD-1 ;6
|
|
DW L99B3-1 ;8
|
|
DW L99D6-1 ;A
|
|
DW L9A04-1 ;C
|
|
DW L99BE-1 ;E
|
|
DW L998D-1 ;10
|
|
DW L99F5-1 ;12
|
|
DW L998D-1 ;14
|
|
DW L9997-1 ;16
|
|
DW L99AA-1 ;18
|
|
DW L99D6-1 ;1A
|
|
DW L9A0C-1 ;1C
|
|
DW L9AB2-1 ;1E
|
|
DW L9AAE-1 ;20
|
|
DW L9A8E-1 ;22
|
|
DW L9A8A-1 ;24
|
|
DW L9AB2-1 ;26
|
|
;
|
|
; Ptr to the various messages. This table must
|
|
; be arranged in 1:1 corr with the table above
|
|
;
|
|
L9D49 DW XB289 ;0
|
|
DW L9D7D ;2
|
|
DW L9D8F ;4
|
|
DW L9DA2 ;6
|
|
DW L9DAD ;8
|
|
DW L9DBD ;A
|
|
DW L9DC7 ;C
|
|
DW L9DD6 ;E
|
|
DW L9D85 ;10
|
|
DW L9D71 ;12
|
|
DW L9DDF ;14
|
|
DW L9DE3 ;16
|
|
DW L9DA2 ;18
|
|
DW L9DE7 ;1A
|
|
DW L9DF4 ;1C
|
|
DW L9E0C ;1E
|
|
DW L9E16 ;20
|
|
DW L9E20 ;22
|
|
DW L9E29 ;24
|
|
DW L9E01 ;26
|
|
;=================================================
|
|
; ERROR FRAGMENTS
|
|
;
|
|
L9D71 ASC ' <PATHNAME>'
|
|
DB $00
|
|
L9D7D ASC ' LINE# '
|
|
DB $00
|
|
L9D85 ASC ' <LINE#> '
|
|
DB $00
|
|
L9D8F ASC ' <BEGIN# <-END#>> '
|
|
DB $00
|
|
L9DA2 ASC ' .STRING. '
|
|
DB $00
|
|
L9DAD ASC '.OLDSTR.NEWSTR.'
|
|
DB $00
|
|
L9DBD ASC ' PATHNAME'
|
|
DB $00
|
|
L9DC7 ASC '<OBJ-PATHNAME>'
|
|
DB $00
|
|
L9DD6 ASC '<DEVCTL>'
|
|
DB $00
|
|
L9DDF ASC '<#>'
|
|
DB $00
|
|
L9DE3 ASC ' # '
|
|
DB $00
|
|
L9DE7 ASC ' OLDPATHNAME'
|
|
DB $00
|
|
L9DF4 ASC ' NEWPATHNAME'
|
|
DB $00
|
|
L9E01 ASC '[A<$>ADRS]'
|
|
DB $00
|
|
L9E0C ASC '[A<$>ADRS'
|
|
DB $00
|
|
L9E16 ASC 'L<$>LGTH]'
|
|
DB $00
|
|
L9E20 ASC 'A<$>ADRS'
|
|
DB $00
|
|
L9E29 ASC 'L<$>LGTH'
|
|
DB $00
|
|
;=================================================
|
|
; Convert (A) into BCD and return
|
|
; 2-byte dec string in (X,A)
|
|
;
|
|
L9E32 TAX
|
|
CPX #100
|
|
BCC L9E3B
|
|
LDA #'*'
|
|
TAX
|
|
RTS
|
|
;
|
|
L9E3B LDA #0
|
|
SED
|
|
L9E3E CLC
|
|
ADC #1
|
|
DEX
|
|
BNE L9E3E
|
|
;
|
|
CLD
|
|
PHA
|
|
AND #$F0 ;Isolate ten's digit
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
ORA #'0' ;-> ASCII
|
|
TAX
|
|
PLA
|
|
AND #$0F ;Isolate unit's digit
|
|
ORA #'0'
|
|
RTS
|
|
;=================================================
|
|
; Convert ProDOS Date/Time into ASCII format
|
|
;
|
|
L9E55 EQU * ;ENTRY
|
|
LDA #'-'
|
|
STA DateTime+2
|
|
STA DateTime+6
|
|
LDA #':'
|
|
STA DateTime+13
|
|
LDA #SPACE
|
|
STA DateTime+10
|
|
STA DateTime+9
|
|
LDA P8TIME
|
|
ORA P8TIME+1
|
|
BNE L9E7E
|
|
;
|
|
LDX #5 ;No Time
|
|
LDA #SPACE
|
|
L9E76 STA DateTime+10,X
|
|
DEX
|
|
BNE L9E76
|
|
BEQ L9E9A ;always
|
|
;
|
|
L9E7E LDA P8TIME
|
|
AND #%00111111 ;xxMM MMMM
|
|
JSR L9E32
|
|
STX DateTime+14
|
|
STA DateTime+15
|
|
LDA P8TIME+1
|
|
AND #%00011111 ;xxxH HHHH
|
|
JSR L9E32
|
|
STX DateTime+11
|
|
STA DateTime+12
|
|
;
|
|
L9E9A LDA P8DATE+1 ;YYYY YYYM
|
|
LSR ;0YYY YYYY
|
|
PHP ;Save M-bit in C
|
|
JSR L9E32
|
|
STX DateTime+7
|
|
STA DateTime+8
|
|
LDA P8DATE ;MMMD DDDD
|
|
PHA
|
|
AND #%00011111 ;000D DDDD
|
|
JSR L9E32
|
|
STX DateTime
|
|
STA DateTime+1
|
|
PLA
|
|
AND #%11100000 ;MMM0 0000
|
|
PLP ;M-bit
|
|
ROR ;MMMM 0000
|
|
LSR ;Index in Months table
|
|
LSR
|
|
LSR ;000M MMM0 (div8)
|
|
STA DateTime+3 ;Use as tmp
|
|
LSR ;0000 MMMM (div16)
|
|
CLC
|
|
ADC DateTime+3
|
|
TAX
|
|
DEX
|
|
LDY #3
|
|
L9ECB LDA MonthsT,X
|
|
STA DateTime+2,Y ;Month in ASCII
|
|
DEX
|
|
DEY
|
|
BNE L9ECB
|
|
RTS
|
|
;=================================================
|
|
L9ED6 ASC 'BYTES USED'
|
|
DB CR
|
|
L9EE1 ASC 'BYTES REMAINING'
|
|
DB CR
|
|
L9EF1 ASC 'BYTES USED BY NON TEXT DATA'
|
|
DB CR
|
|
L9F0D ASC ' = XSAVE FILE TYPE'
|
|
DB CR
|
|
L9F21 ASC ' = XSAVE AUX TYPE'
|
|
DB CR
|
|
;=================================================
|
|
L9F34 JSR PRODOS8 ;Newline
|
|
DB $C9
|
|
DW XBAA0
|
|
RTS
|
|
;
|
|
L9F3B JSR PRODOS8
|
|
DB $CA
|
|
DW L9F42
|
|
RTS
|
|
;
|
|
; Read text file parm block
|
|
; Used by the TYPE cmd
|
|
;
|
|
L9F42 DB $04
|
|
L9F43 DB $A0 ;Ref #
|
|
DW XBD00 ;read data buf
|
|
L9F46 DW 255 ;max val
|
|
L9F48 DW $A0A0
|
|
;=================================================
|
|
; CREATE cmd
|
|
;
|
|
L9F4A SET R4,XBD80 ;Ptr to PN
|
|
RTN
|
|
LDA #$0F ;DIRtype
|
|
JSR XB883 ;Does file exist?
|
|
BCS L9F5A ;No
|
|
LDA #$47 ;Err
|
|
L9F57 JMP XB602
|
|
;
|
|
L9F5A LDA FileType
|
|
STA XBAEB
|
|
LDA #$0D ;sub-DIR
|
|
STA XBAEE
|
|
LDA #$C3 ;Access bits
|
|
STA XBAEA
|
|
LDA XBAC8 ;Re-use
|
|
STA XBAE8
|
|
LDA XBAC8+1 ; ptr to PN
|
|
STA XBAE8+1
|
|
JSR XB919 ;Create subdir
|
|
LDX #$01
|
|
STX XBAEE ;Reset this
|
|
TAX
|
|
BNE L9F57 ;Err
|
|
JMP XB1CB
|
|
;=================================================
|
|
CPYRIGHTS EQU * ;ENTRY
|
|
DB CR,CR,CR,CR,CR,CR,CR
|
|
ASC ' PRODOS EDITOR-ASSEMBLER // '
|
|
DB CR,CR
|
|
ASC ' RELEASE 1.1 '
|
|
MSB ON
|
|
ASC "01-MAY-85"
|
|
MSB OFF
|
|
DB CR,CR
|
|
ASC ' BY JOHN ARKLEY'
|
|
DB CR,CR,CR
|
|
ASC ' '
|
|
MSB ON
|
|
ASC "COPYRIGHT (C) 1983-85"
|
|
MSB OFF
|
|
DB CR,CR
|
|
ASC ' '
|
|
MSB ON
|
|
ASC " APPLE COMPUTER INC."
|
|
MSB OFF
|
|
DB CR
|
|
;=================================================
|
|
; PTRON cmd
|
|
;
|
|
LA024 RTN
|
|
LDA DevCtlS ;Slot # (0000 0sss)
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
AND #$70 ;0sss 0000
|
|
BEQ LA042 ;Slot 0
|
|
;
|
|
STA LA1A0 ;Unit #
|
|
JSR PRODOS8
|
|
DB $C5
|
|
DW LA19F
|
|
BEQ LA03F ;Printers should not ret 0
|
|
CMP #$28 ;No device connected?
|
|
BEQ LA042 ;Yes
|
|
LA03F JMP LD53E ;Invalid parm
|
|
;
|
|
LA042 LDA #$80
|
|
LA044 STA PtrMode ;PTRON flag
|
|
JMP XB1CB
|
|
;=================================================
|
|
; PTROFF cmd
|
|
;
|
|
LA049 RTN
|
|
LDA #$00
|
|
BEQ LA044 ;always
|
|
;=================================================
|
|
; Print name of file in active txtbuf
|
|
;
|
|
LA04E LDA SwapMode
|
|
CMP #$02
|
|
BNE LA054 ;Useless instr
|
|
LA054 LDA XBE00
|
|
BEQ LA066
|
|
;
|
|
LDY #0
|
|
LA05B LDA XBE00,Y
|
|
BEQ LA066
|
|
JSR XB343 ;Output char
|
|
INY
|
|
BPL LA05B
|
|
;
|
|
LA066 JMP XB339 ;Do a cr
|
|
;=================================================
|
|
LA069 JSR NEWSW16
|
|
LA06C SET R9,XB50D ;Dir not found
|
|
BRL LD33F
|
|
;=================================================
|
|
; CATALOG cmd
|
|
;
|
|
LA072 SET R0,80 ;# of cols
|
|
BR LA07A
|
|
;
|
|
; CAT
|
|
;
|
|
LA077 SET R0,40
|
|
;
|
|
LA07A SET R4,LA5B3
|
|
STI R4
|
|
SET R4,XBD80 ;Point @ PN
|
|
LDI R4 ;Did user include PN?
|
|
BNZ LA090 ;Yes
|
|
SET R4,XBB80 ;No, try curr pfx
|
|
LDI R4 ;Get len byte
|
|
BZ LA06C ;No prefix set
|
|
ADD R4 ;Compute EO pfx
|
|
ST R1
|
|
SUB R0 ;Zero ACC
|
|
STI R1 ;Append a 0 to pfx
|
|
BR LA091
|
|
;
|
|
LA090 DCR R4
|
|
LA091 RTN
|
|
;
|
|
; Reg4-ptr to PN
|
|
;
|
|
LA092 LDA #$0F ;DIRtype
|
|
JSR XB883 ;Chk file's info
|
|
BCS LA0C6 ;Not found
|
|
JSR XB339 ;Do a cr
|
|
LA09C LDA XBACE ;Storage type
|
|
CMP #$0D ;Linked dir file?
|
|
BEQ LA0AC ;Yes
|
|
CMP #$0F ;Vol Dir?
|
|
BNE LA069 ;No
|
|
LDA #'/'
|
|
JSR XB343
|
|
;
|
|
LA0AC LDX #>XA900 ;1024-byte I/O buf
|
|
LDY #<XA900
|
|
JSR XB8CE ;Open Dir file
|
|
STA XBAA5 ;Ref #
|
|
STA XBAAD
|
|
LDA #$27+4 ;# of bytes to read
|
|
STA XBAA8 ; incl 4-byte header
|
|
JSR PRODOS8
|
|
DB $CA
|
|
DW XBAA4
|
|
BEQ LA0C9
|
|
LA0C6 JMP XB602
|
|
;
|
|
LA0C9 LDA LA8D1+$23 ;Entry Len (=$27)
|
|
STA XBAA8 ;# of bytes to read
|
|
LDY #0
|
|
LA0D1 LDA LA8D1+4,Y ;Move contents of dir header left over-
|
|
STA LA8D1,Y ; writing 4-byte next/prev block ptrs
|
|
INY
|
|
CPY #$27
|
|
BCC LA0D1
|
|
;
|
|
JSR LA251
|
|
LA0DF JSR XB339 ;Do a cr
|
|
JSR LA232
|
|
JSR XB339
|
|
JSR XB339
|
|
;
|
|
LDA #$00
|
|
STA Z64
|
|
LA0EF JSR LA26D ;Read a file entry
|
|
BCS LA10D
|
|
LDA LA8D1
|
|
AND #$F0
|
|
BEQ LA0EF ;Deleted entry
|
|
CMP #$E0 ;Subdir/vol dir header entry
|
|
BCS LA0EF
|
|
;
|
|
JSR LA396
|
|
JSR LA116 ;Display
|
|
JSR XB339
|
|
JSR KeyPress
|
|
BCC LA0EF ;Not ctrl-C
|
|
;
|
|
LA10D JSR XB8EF ;Close file
|
|
JSR LA12A
|
|
JMP XB1CB
|
|
;=================================================
|
|
; Display info
|
|
;
|
|
LA116 LDY LA5B3 ;# of cols
|
|
DEY
|
|
STY Z66
|
|
LDY #0
|
|
LA11E LDA InBuf,Y
|
|
JSR XB343
|
|
INY
|
|
DEC Z66
|
|
BNE LA11E
|
|
RTS
|
|
;=================================================
|
|
LA12A LDA LASTDEV
|
|
STA LA1A0
|
|
JSR PRODOS8
|
|
DB $C5
|
|
DW LA19F
|
|
BNE LA19E
|
|
;
|
|
LDA LA8D1
|
|
BEQ LA19E
|
|
AND #$0F ;Isolate len byte
|
|
TAY
|
|
LDA #0
|
|
STA LA8D1+1,Y
|
|
LDA #'/' ;Precede name
|
|
STA LA8D1 ; with a slash
|
|
LDA #>LA8D1
|
|
STA Reg4
|
|
LDA #<LA8D1
|
|
STA Reg4+1
|
|
LDA #$0F ;DIRtype
|
|
JSR XB883 ;Get info
|
|
BCS LA19E ;Not found
|
|
JSR LA554
|
|
;
|
|
LDY #62
|
|
LA15E LDA LA1F4-1,Y
|
|
STA InBuf-1,Y
|
|
DEY
|
|
BNE LA15E
|
|
;
|
|
STY LA5AC+2 ;=0
|
|
LDA XBACC ;Size of vol (auxtype)
|
|
LDX XBACC+1
|
|
LDY #61
|
|
JSR LA50F
|
|
LDA XBACF ;Blocks used
|
|
LDX XBACF+1
|
|
LDY #38
|
|
JSR LA50F
|
|
;
|
|
LDA XBACC ;Compute free blocks
|
|
SEC
|
|
SBC XBACF
|
|
PHA
|
|
LDA XBACC+1
|
|
SBC XBACF+1
|
|
TAX
|
|
PLA
|
|
LDY #16
|
|
JSR LA50F
|
|
;
|
|
JSR XB339
|
|
JSR LA116
|
|
JSR XB339
|
|
LA19E RTS
|
|
;=================================================
|
|
; Online parm block for PTRON cmd
|
|
;
|
|
LA19F DB $02
|
|
LA1A0 DB $00
|
|
DW LA8D1
|
|
;
|
|
LA1A3 ASC ' NAME TYPE BLOCKS MODIFIED'
|
|
DB $00
|
|
ASC ' CREATED ENDFILE SUBTYPE'
|
|
DB $00
|
|
LA1F4 ASC 'BLOCKS FREE: BLOCKS USED: '
|
|
ASC ' TOTAL BLOCKS: '
|
|
;=================================================
|
|
; Print Catalog Col headers
|
|
;
|
|
LA232 LDY #0
|
|
LA234 LDA LA1A3,Y
|
|
BEQ LA23F
|
|
JSR XB343
|
|
INY
|
|
BNE LA234
|
|
;
|
|
LA23F BIT LA5B3 ;=$50 or $28
|
|
BVC LA250
|
|
INY
|
|
LA245 LDA LA1A3,Y
|
|
BEQ LA250
|
|
JSR XB343
|
|
INY
|
|
BNE LA245
|
|
LA250 RTS
|
|
;=================================================
|
|
; Show directory name
|
|
;
|
|
LA251 LDA LA8D1
|
|
PHA
|
|
AND #$0F ;Isolate len byte
|
|
STA LA8D1
|
|
LDY #0
|
|
LA25C LDA LA8D1+1,Y ;Show dir name
|
|
LA25F JSR XB343
|
|
INY
|
|
CPY LA8D1
|
|
BNE LA25C
|
|
PLA
|
|
STA LA8D1 ;Restore stortype/len byte
|
|
RTS
|
|
;=================================================
|
|
; Input
|
|
; (Z64) Read a file entry if cnt is +ve
|
|
; else skip last 5 bytes of dir block
|
|
; Each dir block has at most 13 entries
|
|
; which takes up 27;13=507 bytes
|
|
;
|
|
LA26D BIT Z64 ;File entry cnt
|
|
BPL LA27E
|
|
JSR PRODOS8 ;Skip last 5 bytes
|
|
DB $CA
|
|
DW XBAAC ; of dir block
|
|
STA RDBANK2
|
|
BEQ LA27E
|
|
LA27C SEC
|
|
RTS
|
|
;
|
|
LA27E JSR PRODOS8
|
|
DB $CA
|
|
DW XBAA4
|
|
STA RDBANK2
|
|
BEQ LA290
|
|
CMP #$4C ;EOF
|
|
BEQ LA27C
|
|
JMP XB5F8
|
|
;
|
|
LA290 INC Z64
|
|
LDA Z64
|
|
CMP #12
|
|
BCC LA29C
|
|
LDA #-1 ;Prepare to skip
|
|
STA Z64 ; 5 bytes on next read
|
|
LA29C CLC
|
|
RTS
|
|
;=================================================
|
|
; PREFIX cmd
|
|
;
|
|
LA29E RTN
|
|
LDA XBD80 ;Is PN included w/cmd?
|
|
BEQ LA2E1 ;No
|
|
CMP #'/'
|
|
PHP
|
|
LDA XBD80+1
|
|
BNE LA2BD ;Yes
|
|
PLP ;Just a single /?
|
|
BNE LA2BE ;No
|
|
JSR XB836 ;Set pfx to EdAsm's dir
|
|
BEQ LA2B7
|
|
JMP XB602
|
|
LA2B7 JMP LA2E1
|
|
JMP XB1CB
|
|
;
|
|
LA2BD PLP ;Full or partial PN
|
|
LA2BE LDY #-1
|
|
LDX #0
|
|
LA2C2 INY
|
|
LDA XBD80,Y
|
|
BEQ LA2D3
|
|
CMP #SPACE+1
|
|
BCC LA2C2
|
|
STA XBD80,X
|
|
INX
|
|
BPL LA2C2
|
|
DEX ;=$7F
|
|
LA2D3 STX XBD80-1
|
|
JSR PRODOS8 ;Make this PN the
|
|
DB $C6
|
|
DW LA2EF ; default prefix
|
|
BEQ LA2E1
|
|
JMP XB86F
|
|
;
|
|
LA2E1 JSR PRODOS8 ;Make it our currpfx
|
|
DB $C7
|
|
DW XBABC
|
|
STA RDBANK2
|
|
BEQ LA2F2
|
|
JMP XB602
|
|
;
|
|
; Set Prefix
|
|
;
|
|
LA2EF DB $01
|
|
DW XBD80-1
|
|
;=================================================
|
|
; Display curr prefix
|
|
;
|
|
LA2F2 LDY #-1
|
|
LA2F4 INY
|
|
CPY XBB80
|
|
BCS LA303
|
|
LDA XBB80+1,Y
|
|
JSR XB343
|
|
JMP LA2F4
|
|
LA303 JSR XB339
|
|
JMP XB1CB
|
|
;=================================================
|
|
; ONLINE cmd
|
|
;
|
|
LA309 RTN
|
|
LA30A LDA #$00 ;All online vols
|
|
STA XBAFE
|
|
JSR PRODOS8
|
|
DB $C5
|
|
DW XBAFD
|
|
STA RDBANK2
|
|
BEQ LA325
|
|
;
|
|
CMP #$27
|
|
BEQ LA325
|
|
CMP #$52
|
|
BEQ LA325
|
|
JMP XB602
|
|
;
|
|
LA325 JSR XB339
|
|
LDY #0
|
|
LA32A LDA XA900,Y ;Get vol's len byte
|
|
AND #$0F
|
|
STY Z64
|
|
BEQ LA383
|
|
STA Z66 ; and store here
|
|
LDA #'S'
|
|
JSR XB343
|
|
LDY Z64
|
|
LDA XA900,Y ;DSSS LLLL (D=0 for dr 1)
|
|
CMP #$80
|
|
PHP
|
|
AND #$70 ;0SSS 0000
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
ORA #'0' ;slot # in ASCII
|
|
JSR XB343
|
|
LDA #','
|
|
JSR XB343
|
|
LDA #'D'
|
|
JSR XB343
|
|
LDA #'1'
|
|
PLP ;Is it drive 1?
|
|
BCC LA35E ;Yes
|
|
LDA #'2'
|
|
LA35E JSR XB343
|
|
LDA #SPACE
|
|
JSR XB343
|
|
LDA #'='
|
|
JSR XB343
|
|
LDA #SPACE
|
|
JSR XB343
|
|
;
|
|
LDA #'/'
|
|
JSR XB343
|
|
LA375 LDA XA900+1,Y
|
|
JSR XB343
|
|
INY
|
|
DEC Z66
|
|
BNE LA375
|
|
;
|
|
JSR XB339
|
|
LA383 LDY Z64
|
|
LDA XA900,Y
|
|
AND #$7F
|
|
BEQ LA393
|
|
TYA
|
|
CLC
|
|
ADC #16
|
|
TAY
|
|
BNE LA32A ;Next online vol
|
|
LA393 JMP XB1CB
|
|
;=================================================
|
|
; Format a catalog entry line
|
|
;
|
|
LA396 JSR LA554 ;Blank buf
|
|
LDA LA8D1
|
|
AND #$0F ;Get entry len
|
|
TAY
|
|
LA39F LDA LA8D1,Y
|
|
STA InBuf,Y
|
|
DEY
|
|
BNE LA39F
|
|
;
|
|
STY LA5AC+2 ;Zero it
|
|
LDA LA8D1+$10 ;ftype
|
|
JSR LA440
|
|
BEQ LA3C3 ;Got a hit
|
|
;
|
|
LDY #$13
|
|
JSR LA4F2
|
|
BIT LA5B3 ;80-cols?
|
|
BVC LA41F ;No
|
|
LDY #78
|
|
LDA #'?'
|
|
BNE LA3F3 ;always
|
|
;
|
|
LA3C3 LDX #2
|
|
PHA ;filetype
|
|
LA3C6 LDA LA5B4,Y ;ASCII rep
|
|
STA InBuf+17,X
|
|
DEY
|
|
DEX
|
|
BPL LA3C6
|
|
;
|
|
PLA
|
|
BIT LA5B3 ;80-col display?
|
|
BVC LA41F ;No
|
|
LDY #78
|
|
CMP #BINtype
|
|
BEQ LA3F1
|
|
CMP #TXTtype
|
|
BNE LA407
|
|
;
|
|
LDA #'R' ;TXT
|
|
STA InBuf+72
|
|
LDA LA8D1+$1F ;auxtype
|
|
LDX LA8D1+$20
|
|
JSR LA50F
|
|
JMP LA402
|
|
;
|
|
LA3F1 LDA #'A' ;BIN
|
|
LA3F3 STA InBuf+72
|
|
LDA LA8D1+$1F
|
|
JSR LA4F2
|
|
LDA LA8D1+$20
|
|
JSR LA4F2
|
|
;
|
|
LA402 LDA #'='
|
|
STA InBuf+73
|
|
LA407 LDA LA8D1+$17
|
|
STA LA5AC+2 ;Should be 0
|
|
LDA LA8D1+$15 ;EOF
|
|
LDX LA8D1+$16
|
|
LDY #70
|
|
JSR LA50F
|
|
LDX #$18 ;Creation
|
|
LDY #61
|
|
JSR LA450
|
|
LA41F LDY #27
|
|
LDA LA8D1+$13 ;Blocks used
|
|
LDX LA8D1+$14
|
|
JSR LA50F
|
|
LDA LA8D1+$1E ;Access
|
|
AND #$C2
|
|
CMP #$C2
|
|
BEQ LA438
|
|
LDA #'*'
|
|
STA InBuf
|
|
LA438 LDX #$21 ;Last Mod
|
|
LDY #44
|
|
JSR LA450
|
|
RTS
|
|
;=================================================
|
|
; Input
|
|
; (A)-filetype
|
|
; Output
|
|
; Z=1 - Match
|
|
; (X)-index into filetypes table
|
|
; (Y)-index into ASCII representation table
|
|
;
|
|
LA440 LDX #31
|
|
LDY #0
|
|
LA444 INY
|
|
INY
|
|
CMP FTypesT,X
|
|
BEQ LA44F
|
|
INY
|
|
DEX
|
|
BPL LA444
|
|
LA44F RTS
|
|
;=================================================
|
|
; Convert Date & Time of file entry - 4 bytes
|
|
; Byte 0,1 yyyy yyym mmmd dddd
|
|
; Byte 2,3 000h hhhh 00mm mmmm
|
|
;
|
|
LA450 LDA LA8D1+1,X
|
|
LSR ;0yyy yyyy
|
|
STA LA5B2
|
|
LDA LA8D1,X
|
|
PHA
|
|
AND #%00011111 ;000d dddd
|
|
STA LA5B1
|
|
PLA ;mmmd dddd C=m
|
|
ROL ;mmdd dddm C=m
|
|
ROL ;mddd ddmm C=m
|
|
ROL ;dddd dmmm C=m
|
|
ROL ;dddd mmmm C=d
|
|
AND #$0F ;0000 mmmm
|
|
BEQ LA483
|
|
CMP #13 ;12 months
|
|
BCS LA483
|
|
STA LA5B0 ;month
|
|
ASL ;Form an index which
|
|
ADC LA5B0 ; is a multiple of 3
|
|
STA LA5B0 ; with it
|
|
LDA LA5B1 ;Day
|
|
BEQ LA483
|
|
LDA LA5B2 ;Year
|
|
CMP #100
|
|
BCC LA495
|
|
;
|
|
; Invalid date - show as nodate
|
|
;
|
|
LA483 TYA
|
|
SEC
|
|
SBC #6
|
|
TAY
|
|
LDX #8
|
|
LA48A LDA NoDateS,X
|
|
STA InBuf,Y
|
|
DEY
|
|
DEX
|
|
BPL LA48A
|
|
RTS
|
|
;
|
|
LA495 LDA LA8D1+3,X ;000h hhhh
|
|
PHA
|
|
LDA LA8D1+2,X ;00mm mmmm
|
|
LDX #0
|
|
CMP #60
|
|
BCC LA4A3
|
|
TXA
|
|
LA4A3 JSR LA4EA ;Format mins
|
|
LDA #':'
|
|
STA InBuf,Y
|
|
DEY
|
|
PLA
|
|
LDX #0
|
|
CMP #24
|
|
BCC LA4B4
|
|
TXA
|
|
LA4B4 CMP #10
|
|
PHP
|
|
JSR LA50F ;Format hour
|
|
PLP
|
|
BCS LA4BE
|
|
DEY
|
|
LA4BE DEY
|
|
LDA LA5B2 ;Format year
|
|
JSR LA4EA
|
|
DEY
|
|
LDX LA5B0 ;Index to month table
|
|
INX
|
|
INX
|
|
INX
|
|
LA4CC LDA LA57B,X
|
|
STA InBuf,Y
|
|
DEY
|
|
DEX
|
|
CPX LA5B0
|
|
BNE LA4CC
|
|
;
|
|
LDA #'-'
|
|
STA InBuf,Y
|
|
STA InBuf+4,Y
|
|
DEY
|
|
LDA LA5B1
|
|
LDX #$00
|
|
JMP LA50F
|
|
;=================================================
|
|
LA4EA CLC
|
|
ADC #100
|
|
JSR LA50F ;Convert to dec str
|
|
INY
|
|
RTS
|
|
;=================================================
|
|
LA4F2 PHA
|
|
AND #$0F
|
|
JSR LA4FD
|
|
PLA
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LA4FD ORA #'0'
|
|
CMP #'9'+1
|
|
BCC LA505
|
|
ADC #$06
|
|
LA505 STA InBuf,Y
|
|
DEY
|
|
LDA #'$'
|
|
STA InBuf,Y
|
|
RTS
|
|
;=================================================
|
|
; Convert (X,A) into dec string
|
|
; (Y)=index into InBuf
|
|
;
|
|
LA50F STX LA5AC+1
|
|
STA LA5AC
|
|
LA515 JSR LA52F
|
|
LDA LA5AC+3
|
|
ORA #'0'
|
|
STA InBuf,Y
|
|
DEY
|
|
LDA LA5AC
|
|
ORA LA5AC+1
|
|
ORA LA5AC+2
|
|
BEQ LA52E
|
|
BNE LA515 ;always
|
|
LA52E RTS
|
|
;=================================================
|
|
; NB: A5AC+2,+3 should be zeroed
|
|
;
|
|
LA52F LDX #24
|
|
LDA #0
|
|
STA LA5AC+3
|
|
LA536 ASL LA5AC
|
|
ROL LA5AC+1
|
|
ROL LA5AC+2
|
|
ROL LA5AC+3
|
|
SEC
|
|
LDA LA5AC+3
|
|
SBC #10
|
|
BCC LA550
|
|
STA LA5AC+3
|
|
INC LA5AC
|
|
LA550 DEX
|
|
BNE LA536
|
|
RTS
|
|
;=================================================
|
|
LA554 LDA #SPACE
|
|
LDX #79
|
|
LA558 STA InBuf,X
|
|
DEX
|
|
BPL LA558
|
|
RTS
|
|
;=================================================
|
|
; Filetype table
|
|
;
|
|
FTypesT DB $FF,$FE,$FD,$FC,$FB,$FA,$F9,$F8
|
|
DB $F7,$F6,$F5,$F4,$F3,$F2,$F1,$F0
|
|
DB $0F,$0E,$0D,$0C,$0B,$0A,$09,$08
|
|
DB $07,$06,$05,$04
|
|
LA57B DB $03,$02,$01,$00
|
|
MonthsT ASC 'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
|
|
NoDateS ASC '<NO DATE>'
|
|
;
|
|
LA5AC DB $A0,$A0,$B0,$C0
|
|
LA5B0 DB $C5 ;month
|
|
LA5B1 DB $A0 ;day
|
|
LA5B2 DB $A0 ;year
|
|
LA5B3 DB 40 ;# of cols
|
|
;
|
|
; ASCII representation of filetypes
|
|
;
|
|
LA5B4 ASC 'UNK' ;$00
|
|
ASC 'BAD' ;$01
|
|
ASC 'PCD' ;$02
|
|
ASC 'PTX' ;$03
|
|
ASC 'TXT' ;$04
|
|
ASC 'PDA' ;$05
|
|
ASC 'BIN' ;$06
|
|
ASC 'FNT' ;$07
|
|
ASC 'GRF' ;$08
|
|
ASC 'BA3' ;$09
|
|
ASC 'DA3' ;$0A
|
|
ASC 'WPF' ;$0B
|
|
ASC 'SOS' ;$0C
|
|
ASC '$0D' ;$0D
|
|
ASC '$0E' ;$0E
|
|
ASC 'DIR' ;$0F
|
|
ASC '$U0' ;$F0-CMD
|
|
ASC '$U1' ;$F1
|
|
ASC '$U2' ;$F2
|
|
ASC '$U3' ;$F3
|
|
ASC '$U4' ;$F4
|
|
ASC '$U5' ;$F5
|
|
ASC '$U6' ;$F6
|
|
ASC '$U7' ;$F7
|
|
ASC '$U8' ;$F8
|
|
ASC '$U9' ;$F9-OS
|
|
ASC 'INT' ;$FA
|
|
ASC 'IVR' ;$FB
|
|
ASC 'BAS' ;$FC
|
|
ASC 'VAR' ;$FD
|
|
ASC 'REL' ;$FE
|
|
ASC 'SYS' ;$FF
|
|
;=================================================
|
|
LA614 LDY CH
|
|
LDA (BASL),Y
|
|
BIT RDROM2
|
|
JSR LA653 ;Get key via I/O hooks
|
|
AND #$7F
|
|
BIT RDBANK2
|
|
RTS
|
|
;=================================================
|
|
; Editor's KSW entry point
|
|
; Input
|
|
; (A)=char under cursor
|
|
;
|
|
LA624 PHA
|
|
PHA
|
|
LDA (BASL),Y ;Get char fr screen location
|
|
CMP #UNDERSCORE+$80
|
|
BEQ LA631 ;Yes
|
|
PLA ;char
|
|
LDA #UNDERSCORE+$80
|
|
BMI LA632 ;Always
|
|
LA631 PLA
|
|
LA632 STA (BASL),Y ;Replace it
|
|
PLA
|
|
LA635 INC Z4E ;Delay
|
|
BNE LA645
|
|
INC Z4E+1
|
|
PHA
|
|
LDA #$3F
|
|
AND Z4E+1
|
|
CMP #$01
|
|
PLA
|
|
BCC LA624
|
|
LA645 BIT KBD
|
|
BPL LA635
|
|
;
|
|
STA (BASL),Y ;Got a key, store it @ screen location
|
|
LDA KBD
|
|
BIT KBDSTROBE
|
|
RTS
|
|
;
|
|
LA653 JMP (KSWL)
|
|
;=================================================
|
|
; (A)= $80 - set ucase
|
|
; = $40
|
|
; = $7F - clear ucase
|
|
; = $00
|
|
;
|
|
; Output
|
|
; CaseMode - 1000 0000 - ucase only
|
|
; - 0100 0000 - disable lcase
|
|
; - 0000 0000 - lcase
|
|
;
|
|
LA656 AND CaseMode
|
|
DB $2C
|
|
LA659 ORA CaseMode
|
|
STA CaseMode
|
|
RTS
|
|
;=================================================
|
|
; Get char and do some char mapping if necessary
|
|
;
|
|
LA65E JSR RDCHAR
|
|
JSR LA668 ;Chk the key
|
|
BCS LA65E
|
|
RTS
|
|
;
|
|
LA667 DB $00 ;Keyed in char
|
|
;
|
|
; If //e, //c or later, /// emulation just return
|
|
; with C=0 and (A)= char keyed in
|
|
; For ][/][+, map the char and save in InBuf if char is valid
|
|
; Input
|
|
; (A)= char
|
|
; Output
|
|
; C=1 - ignore key
|
|
; C=0 - accept key
|
|
; (A) - modified char
|
|
;
|
|
LA668 AND #$7F
|
|
CMP #$5F ;Underscore _
|
|
BCS LA6CB ;If $5F-$7F, ret w/C=0, (A)=key
|
|
STA LA667
|
|
LDA #%00001000
|
|
BIT MACHID ;//c or later?
|
|
BNE LA6C8 ;Yes
|
|
BMI LA6C8 ;//e
|
|
;
|
|
; ][/][+
|
|
;
|
|
LDA VideoSlt ;Is there a video card?
|
|
BNE LA6C8 ;Yes
|
|
LDA LA667
|
|
CMP #']'
|
|
BCS LA6A2 ;$5D -> $4D
|
|
CMP #'['
|
|
BCS LA6CB ; [ or \
|
|
CMP #$1E
|
|
BEQ LA69D ;ctrl-^ -> ^
|
|
CMP #$00
|
|
BEQ LA69D ;ctrl-@ -> @
|
|
CMP #$1D
|
|
BEQ LA69B ;ctrl-] -> ]
|
|
CMP #'@'
|
|
BEQ LA6A2 ;->$50 (P)
|
|
BNE LA6A5 ;always
|
|
;
|
|
LA69B LDA #'|'
|
|
LA69D ORA #$40
|
|
JMP LA6B2
|
|
;
|
|
LA6A2 EOR #$10
|
|
CLC
|
|
LA6A5 BCC LA6B2
|
|
BIT CaseMode ;Is case disabled?
|
|
BVS LA6CB ;Yes
|
|
BIT BUTN2 ;1-wire shift down?
|
|
BPL LA6CB ;No
|
|
ORA #$20
|
|
LA6B2 CMP #CTRLE ;Enable lcase?
|
|
BEQ LA6C1 ;Yes
|
|
CMP #CTRLW ;Disable lcase?
|
|
BNE LA6CB
|
|
LDA #$40 ;Yes
|
|
JSR LA659
|
|
SEC
|
|
RTS
|
|
;
|
|
LA6C1 LDA #$00
|
|
JSR LA656
|
|
SEC
|
|
RTS
|
|
;
|
|
LA6C8 LDA LA667
|
|
LA6CB CLC
|
|
RTS
|
|
;
|
|
LA6CD CMP #DEL
|
|
BEQ LA6D5
|
|
CMP #BS
|
|
BNE LA6E6
|
|
;
|
|
LA6D5 DEX
|
|
CPX #-1 ;Was cursor @ BOL?
|
|
BEQ LA708 ;Yes
|
|
LDA InBuf,X
|
|
AND #$7F
|
|
INX
|
|
CMP #SPACE ;ctrl-chars?
|
|
BCC LA712 ;Yes
|
|
LDA #BS ;Printable chars so do BS
|
|
;
|
|
LA6E6 CMP #TAB ;CTRLI
|
|
BCC LA6EE
|
|
CMP #SPACE
|
|
BCC LA6F1
|
|
LA6EE JSR XB343 ;Printable char
|
|
;
|
|
LA6F1 CMP #CTRLX
|
|
BEQ LA703
|
|
CMP #BS
|
|
BEQ LA712
|
|
CPX #248
|
|
BCC LA700
|
|
JSR XB33D ;Sound the alarm
|
|
LA700 INX
|
|
BPL LA716
|
|
LA703 LDA #'\' ;Cancel input
|
|
JSR XB343
|
|
LA708 JSR XB339 ;Display a CR i.e. start entry on a new line
|
|
;=================================================
|
|
; Input cmd line
|
|
;
|
|
LA70B EQU * ;ENTRY
|
|
LDA Prompt ;prompt
|
|
JSR XB343
|
|
LA710 LDX #1
|
|
LA712 TXA
|
|
BEQ LA708
|
|
DEX
|
|
LA716 BIT RDROM2
|
|
LDA #%00001000
|
|
BIT MACHID
|
|
BNE LA729 ;//c or later
|
|
BMI LA729 ;//e or /// emulation
|
|
JSR LA65E ;Get char fr ][ kbd
|
|
ORA #$80
|
|
BMI LA72C ;always
|
|
;
|
|
LA729 JSR RDCHAR
|
|
LA72C BIT RDBANK2
|
|
CMP #CTRLU+$80
|
|
BNE LA73B
|
|
;
|
|
LDY CH
|
|
LDA (BASL),Y ;Pick char fr screen location
|
|
BMI LA73B
|
|
ORA #$E0
|
|
LA73B STA InBuf,X
|
|
AND #$7F
|
|
CMP #CR
|
|
BNE LA6CD
|
|
;
|
|
TXA ;Got a CR
|
|
PHA
|
|
LA746 LDA InBuf,X ;Remove msb fr all
|
|
AND #$7F
|
|
STA InBuf,X ; preceding chars
|
|
DEX
|
|
BPL LA746
|
|
;
|
|
PLA
|
|
TAX
|
|
LDA #$1D ;ctrl-] -> $9D (clrEOL)
|
|
JSR XB343
|
|
JMP XB339 ;Do a CR
|
|
;=================================================
|
|
; Checks for an 80-col card
|
|
; Output
|
|
; (X)=$C3 80-col card detected in slot 3
|
|
; (X)=$00 no 80-col card
|
|
;
|
|
LA75B EQU * ;ENTRY
|
|
LDX #$C3
|
|
LDA #%00000010 ;Is 80-col card present?
|
|
BIT MACHID
|
|
BEQ LA76B ;Maybe
|
|
LDA SLTBYT
|
|
AND #%00001000 ;Is there a ROM in slot 3?
|
|
BNE LA787 ;Yes (NB. (X)=$C3)
|
|
;
|
|
LA76B LDA #$01 ;Pascal v1.1 Protocol?
|
|
CMP XC30B
|
|
BNE LA785 ;No
|
|
CMP XC30B ;Useless instructions
|
|
BNE LA785
|
|
CMP XC30B
|
|
BNE LA785
|
|
;
|
|
; Device signature byte=$8x if 80-col card
|
|
;
|
|
LDA XC30C ;Get Device Signature byte
|
|
AND #$F0 ;=$x0
|
|
CMP #$80 :80-column card?
|
|
BEQ LA787 ;Yes
|
|
LA785 LDX #$00 ;No 80-col card
|
|
LA787 RTS
|
|
;=================================================
|
|
; Reset I/O hooks
|
|
;
|
|
LA788 EQU * ;ENTRY
|
|
LDX VideoSlt ;=$Cs
|
|
;
|
|
; If you enter here, set (X)=$Cs or $00
|
|
;
|
|
LA78A EQU * ;ENTRY
|
|
TXA
|
|
STX VideoSlt
|
|
BEQ LA7AB ;If (X)=0, init video
|
|
;
|
|
CPX CSWL+1
|
|
BEQ LA7AA ;Already setup
|
|
;
|
|
LDA #$00
|
|
STA CSWL
|
|
STX CSWL+1 ;=$Cs00
|
|
LDA #CR
|
|
JSR XB343 ;Init the card
|
|
LDX VideoSlt
|
|
CPX KSWL+1
|
|
BEQ LA7AA
|
|
STX KSWL+1 ;=$C300
|
|
LDA #$00
|
|
STA KSWL
|
|
LA7AA RTS
|
|
;
|
|
LA7AB LDA CSWL+1
|
|
CMP #$C3
|
|
BNE LA7E0
|
|
;
|
|
LDA XC30C ;Device signature byte
|
|
CMP #$81 ;ALS Smarterm card?
|
|
BNE LA7D0
|
|
;
|
|
LDA #CTRLT+$80
|
|
BIT RDROM2
|
|
JSR COUT
|
|
LDA #'A'+$80
|
|
JSR COUT
|
|
LDA #'1'+$80
|
|
JSR COUT
|
|
BIT RDBANK2
|
|
JMP LA7E0
|
|
;
|
|
LA7D0 LDA #CTRLU+$80
|
|
BIT RDROM2 ;Read ROM
|
|
JSR COUT
|
|
BIT RDBANK2 ;Read only RAM bank 2
|
|
LDA #$40 ;LCase off
|
|
JSR LA656
|
|
;
|
|
; Setup Editor's I/O Hooks (Apple ][)
|
|
;
|
|
LA7E0 LDA #>XB3D9 ;Use CmdInt's CSW
|
|
LDX #<XB3D9
|
|
STA CSWL
|
|
STX CSWL+1
|
|
LDA #>LA624 ; but use Editor's KSW
|
|
STA KSWL
|
|
LDA #<LA624
|
|
STA KSWL+1
|
|
RTS
|
|
;=================================================
|
|
; Display help
|
|
;
|
|
DoHelp EQU * ;ENTRY
|
|
LDY XB286+1 ;Pointer to cmd table
|
|
LDX XB286+2
|
|
LDA #>LDE18
|
|
CLC
|
|
ADC #1 ;Skip 1st byte
|
|
STA Reg0
|
|
LDA #<LDE18
|
|
ADC #0
|
|
STA Reg0+1
|
|
JSR XB339 ;Do a CR
|
|
LA807 JSR LA837 ;Print Help on this cmd
|
|
TYA
|
|
SEC
|
|
ADC Reg0
|
|
STA Reg0
|
|
LDX Reg0+1
|
|
BCC LA815
|
|
INX
|
|
LA815 STX Reg0+1
|
|
;
|
|
LDY #0
|
|
LDA (Reg0),Y
|
|
CMP #$54 ;XLOAD
|
|
BEQ LA823
|
|
CMP #$0A
|
|
BNE LA826
|
|
;
|
|
LA823 JSR LDCB8
|
|
LA826 JSR KeyPress ;Was ctrl-C down?
|
|
BCC LA82E ;No
|
|
JMP XB1CB ;Yes, abort
|
|
;
|
|
LA82E INC Reg0
|
|
BNE LA834
|
|
INC Reg0+1
|
|
LA834 JMP LA807
|
|
;=================================================
|
|
LA837 LDY #-1
|
|
LA839 INY
|
|
LDA (Reg0),Y ;Get token
|
|
BEQ LA86F ;End of this cmd
|
|
BPL LA848
|
|
AND #$7F ;Cmd char
|
|
JSR XB343 ;Print char
|
|
JMP LA839
|
|
;
|
|
LA848 CMP #$28 ;Sentinel value
|
|
BNE LA84F
|
|
JMP LDCA9
|
|
;
|
|
LA84F TAX
|
|
LDA L9D49,X ;Get ptr to msg fragment
|
|
STA Reg1
|
|
LDA L9D49+1,X
|
|
STA Reg1+1
|
|
TYA
|
|
PHA
|
|
;
|
|
LDY #0
|
|
LA85E LDA (Reg1),Y
|
|
BEQ LA86A ;EO msg fragment
|
|
AND #$7F
|
|
JSR XB343 ;Print char
|
|
INY
|
|
BNE LA85E ;always
|
|
;
|
|
LA86A PLA
|
|
TAY
|
|
JMP LA839
|
|
LA86F JMP XB339 ;Do a CR
|
|
;=================================================
|
|
; Load EdAsm.Swap
|
|
;
|
|
LA872 EQU * ;ENTRY
|
|
JSR XB836
|
|
BCS LA8A9
|
|
LDX #>LA8C6
|
|
LDY #<LA8C6
|
|
LDA #$00
|
|
STA XBA8A ;Load addr
|
|
LDA #$20
|
|
STA XBA8A+1
|
|
LDA #$00
|
|
STA XBA8C ;Len
|
|
LDA #$10
|
|
STA XBA8C+1
|
|
JSR XB844 ;Load the Quit code
|
|
BCS LA8A9
|
|
BNE LA8C0
|
|
;
|
|
LDA #>X2000
|
|
STA A1
|
|
LDA #<X2000 ;Start addr
|
|
STA A1+1
|
|
LDA #>X2000+$1000-1
|
|
STA A2
|
|
LDA #<X2000+$1000-1
|
|
STA A2+1 ;End addr
|
|
JSR XB7AB ;Move code back to LC Bank2
|
|
;
|
|
LA8A9 BIT RDBANK2
|
|
LDA #$00
|
|
STA BITMAP+$13
|
|
STA BITMAP+$14
|
|
STA BITMAP+$15
|
|
STA BITMAP+$16
|
|
LDA #$01
|
|
STA BITMAP+$17
|
|
RTS
|
|
;
|
|
LA8C0 BIT RDBANK2
|
|
JMP LDD09
|
|
;=================================================
|
|
LA8C6 ASC 'EDASM.SWAP'
|
|
DB $00
|
|
;
|
|
; Data buf for vol/sub dir header ($A8D1-$A8FB)
|
|
; File Entry ($A8D1-$A8F7)
|
|
; Also used for Online call
|
|
; $A8D1-$A8F7
|
|
; $A8F1-$A8F5 - temporary 5-byte buffer
|
|
;
|
|
LA8D1 DS 4+$27,0 ;ENTRY
|
|
DS 2,0
|
|
DB $21 |