mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-17 09:30:37 +00:00
SCMASM.SYSTEM 3.0 & BASIC.SYSTEM 1.5 source code......many bugfxes & enh, new commands.....
This commit is contained in:
parent
6d85a16ad1
commit
1cbc954f7f
@ -24,6 +24,45 @@ exists, thus return value is limited to
|
|||||||
whether or not a valid argument was
|
whether or not a valid argument was
|
||||||
given.
|
given.
|
||||||
|
|
||||||
|
# SEQ
|
||||||
|
Prints sequences of numbers.
|
||||||
|
*
|
||||||
|
|
||||||
|
## Arguments
|
||||||
|
**<first>**
|
||||||
|
Starting number for the sequence of numbers.
|
||||||
|
*
|
||||||
|
**<incr>**
|
||||||
|
Count in increments of <incr>. Default is 1 if omitted.
|
||||||
|
*
|
||||||
|
**<last>**
|
||||||
|
Last number to count to. If <last> is less than <first>, then the default <incr> is -1.
|
||||||
|
*
|
||||||
|
|
||||||
|
## Return Value
|
||||||
|
N/A
|
||||||
|
*
|
||||||
|
|
||||||
|
### Author
|
||||||
|
2021-11-17, Brian J. Bernstein <brian@dronefone.com>.
|
||||||
|
|
||||||
|
# XMASTREE
|
||||||
|
Displays a Christmas Tree of user defined height. Ho Ho Ho.
|
||||||
|
*
|
||||||
|
|
||||||
|
## Arguments
|
||||||
|
**<height>**
|
||||||
|
Height of the tree. A positive number up to about 41 is realistic, beyond that you're on your own...
|
||||||
|
*
|
||||||
|
|
||||||
|
## Return Value
|
||||||
|
N/A
|
||||||
|
*
|
||||||
|
|
||||||
|
### Author
|
||||||
|
Original algorithm Jan 2012, Brian J. Bernstein.
|
||||||
|
Updated for A2osx 2021-07-02.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
A2osX is licensed under the GNU General Public License.
|
A2osX is licensed under the GNU General Public License.
|
||||||
|
|
||||||
|
@ -79,15 +79,15 @@ CC = OK, CS = ERROR
|
|||||||
Y,A = FD
|
Y,A = FD
|
||||||
X = hFD
|
X = hFD
|
||||||
|
|
||||||
# GetDevStatus
|
# MkFD
|
||||||
|
|
||||||
## C
|
## C
|
||||||
`int getdevstatus(short int DevID, S.DIB *dstat);`
|
`short int mkfd(short int type, );`
|
||||||
|
|
||||||
## ASM
|
## ASM
|
||||||
`>PUSHB DevID`
|
`>PUSHB DevID`
|
||||||
`>PUSHW S.DIB`
|
`>PUSHW S.DIB`
|
||||||
`>SYSCALL GetDevStatus`
|
`>SYSCALL MkFD`
|
||||||
|
|
||||||
## RETURN VALUE
|
## RETURN VALUE
|
||||||
|
|
||||||
@ -317,7 +317,7 @@ CC
|
|||||||
Initialize a MD5 computation
|
Initialize a MD5 computation
|
||||||
|
|
||||||
# C
|
# C
|
||||||
`hMD5 md5init ();`
|
`short int md5init();`
|
||||||
|
|
||||||
# ASM
|
# ASM
|
||||||
`>SYSCALL MD5Init`
|
`>SYSCALL MD5Init`
|
||||||
@ -430,10 +430,49 @@ Y,A = PTR to MemBlock
|
|||||||
CS : error
|
CS : error
|
||||||
A = EC
|
A = EC
|
||||||
|
|
||||||
|
# ChTyp
|
||||||
|
Change The type of a ProDOS File
|
||||||
|
|
||||||
|
## C
|
||||||
|
`int chtyp(const char *filepath, short int filetype);`
|
||||||
|
|
||||||
|
## ASM
|
||||||
|
`>PUSHW filepath`
|
||||||
|
`>PUSHB filetype`
|
||||||
|
`>SYSCALL ChTyp`
|
||||||
|
|
||||||
|
## RETURN VALUE
|
||||||
|
|
||||||
|
# ChAux
|
||||||
|
Change The type of a ProDOS File
|
||||||
|
|
||||||
|
## C
|
||||||
|
`int chaux(const char *filepath, int auxtype);`
|
||||||
|
|
||||||
|
## ASM
|
||||||
|
`>PUSHW filepath`
|
||||||
|
`>PUSHB filetype`
|
||||||
|
`>SYSCALL ChAux`
|
||||||
|
|
||||||
|
## RETURN VALUE
|
||||||
|
|
||||||
|
# SetAttr
|
||||||
|
Change Attributes of a ProDOS File
|
||||||
|
|
||||||
|
## C
|
||||||
|
`int setattr(const char *filepath, short int attributes);`
|
||||||
|
|
||||||
|
## ASM
|
||||||
|
`>PUSHW filepath`
|
||||||
|
`>PUSHB attributes`
|
||||||
|
`>SYSCALL setattr`
|
||||||
|
|
||||||
|
## RETURN VALUE
|
||||||
|
|
||||||
# ExecL
|
# ExecL
|
||||||
|
|
||||||
## C / CSH
|
## C / CSH
|
||||||
`int execl(const char *cmdline, short int flags);`
|
`short int execl(const char *cmdline, short int flags);`
|
||||||
|
|
||||||
## ASM
|
## ASM
|
||||||
`>PUSHW cmdline`
|
`>PUSHW cmdline`
|
||||||
@ -446,7 +485,7 @@ A = Child PSID
|
|||||||
# ExecV
|
# ExecV
|
||||||
|
|
||||||
## C / CSH
|
## C / CSH
|
||||||
`int execv(const char* argv[], short int flags);`
|
`short int execv(const char* argv[], short int flags);`
|
||||||
|
|
||||||
## ASM
|
## ASM
|
||||||
`>PUSHW argv`
|
`>PUSHW argv`
|
||||||
@ -729,29 +768,29 @@ CS : not found
|
|||||||
## RETURN VALUE
|
## RETURN VALUE
|
||||||
A=hSList
|
A=hSList
|
||||||
|
|
||||||
# ChTyp
|
# ChMod
|
||||||
Change The type of a ProDOS File
|
change permissions of a file
|
||||||
|
|
||||||
## C
|
## C
|
||||||
`int chtyp(const char *filepath, short int filetype);`
|
`int chmod(const char *pathname, int mode);`
|
||||||
|
|
||||||
## ASM
|
## ASM
|
||||||
`>PUSHW filepath`
|
`>PUSHW pathname`
|
||||||
`>PUSHB filetype`
|
`>PUSHW mode`
|
||||||
`>SYSCALL chtyp`
|
`>SYSCALL chmod`
|
||||||
|
|
||||||
## RETURN VALUE
|
## RETURN VALUE
|
||||||
|
|
||||||
# SetAttr
|
# FStat
|
||||||
Change Attributes of a ProDOS File
|
Return information about a hFILE
|
||||||
|
|
||||||
## C
|
## C
|
||||||
`int setattr(const char *filepath, short int attributes);`
|
`int fstat(short int hFILE, struct stat *statbuf);`
|
||||||
|
|
||||||
## ASM
|
## ASM
|
||||||
`>PUSHW filepath`
|
`>PUSHB hFILE`
|
||||||
`>PUSHB attributes`
|
`>PUSHW statbuf`
|
||||||
`>SYSCALL setattr`
|
`>SYSCALL fstat`
|
||||||
|
|
||||||
## RETURN VALUE
|
## RETURN VALUE
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
1300
BASIC.15/BASIC.S.A.txt
Normal file
1300
BASIC.15/BASIC.S.A.txt
Normal file
File diff suppressed because it is too large
Load Diff
1687
BASIC.15/BASIC.S.B.txt
Normal file
1687
BASIC.15/BASIC.S.B.txt
Normal file
File diff suppressed because it is too large
Load Diff
1506
BASIC.15/BASIC.S.C.txt
Normal file
1506
BASIC.15/BASIC.S.C.txt
Normal file
File diff suppressed because it is too large
Load Diff
659
BASIC.15/BASIC.S.D.txt
Normal file
659
BASIC.15/BASIC.S.D.txt
Normal file
@ -0,0 +1,659 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
BS.SYSIOVECTS .DA BS.IO.OUT
|
||||||
|
.DA BS.IO.IN
|
||||||
|
.DA BS.IO.OUT.TRACE
|
||||||
|
.DA BS.IO.IN0
|
||||||
|
.DA BS.IO.OUT.CAT
|
||||||
|
.DA BS.IO.IN0
|
||||||
|
BS.VSYSO.LO .DA #$A7
|
||||||
|
BS.VSYSO.HI .DA #$9D
|
||||||
|
BS.ParamLByte .DA #$A0
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$CB
|
||||||
|
.DA #$D1
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$DD
|
||||||
|
.DA #$DD
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
BS.BYTES .DA #$80
|
||||||
|
.DA #$81
|
||||||
|
.DA #$82
|
||||||
|
.DA #$83
|
||||||
|
.DA #$84
|
||||||
|
.DA #$85
|
||||||
|
.DA #$86
|
||||||
|
.DA #$87
|
||||||
|
.DA #$88
|
||||||
|
.DA #$89
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$8B
|
||||||
|
.DA #$19
|
||||||
|
.DA #$8D
|
||||||
|
.DA #$8E
|
||||||
|
.DA #$8F
|
||||||
|
.DA #$90
|
||||||
|
.DA #$91
|
||||||
|
.DA #$92
|
||||||
|
.DA #$93
|
||||||
|
.DA #$94
|
||||||
|
.DA #$95
|
||||||
|
.DA #$96
|
||||||
|
.DA #$97
|
||||||
|
.DA #$98
|
||||||
|
.DA #$99
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$23
|
||||||
|
.DA #$28
|
||||||
|
.DA #$5A
|
||||||
|
.DA #$5A
|
||||||
|
.DA #$56
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$A1
|
||||||
|
.DA #$A2
|
||||||
|
.DA #$A3
|
||||||
|
.DA #$A4
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$34
|
||||||
|
.DA #$A7
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$1F
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$00
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$B0
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$B2
|
||||||
|
.DA #$B3
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$B5
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$B7
|
||||||
|
.DA #$B8
|
||||||
|
.DA #$B9
|
||||||
|
.DA #$00
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$13
|
||||||
|
.DA #$BD
|
||||||
|
.DA #$BE
|
||||||
|
BS.KW.LEN .DA #$BF
|
||||||
|
.DA #$47
|
||||||
|
.DA #$5F
|
||||||
|
.DA #$18
|
||||||
|
.DA #$30
|
||||||
|
.DA #$15
|
||||||
|
.DA #$BD
|
||||||
|
.DA #$3D
|
||||||
|
.DA #$28
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$41
|
||||||
|
.DA #$20
|
||||||
|
.DA #$50
|
||||||
|
.DA #$84
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$04
|
||||||
|
.DA #$46
|
||||||
|
.DA #$6A
|
||||||
|
.DA #$4C
|
||||||
|
.DA #$5C
|
||||||
|
.DA #$35
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$70
|
||||||
|
.DA #$2D
|
||||||
|
.DA #$12
|
||||||
|
.DA #$65
|
||||||
|
.DA #$39
|
||||||
|
.DA #$41
|
||||||
|
.DA #$88
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$B5
|
||||||
|
.DA #$D8
|
||||||
|
BS.KW.TABLE .AS "BSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND"
|
||||||
|
BS.KW.JMP .DA BS.JMP.XTRNADDR
|
||||||
|
.DA BS.KW.PR
|
||||||
|
.DA BS.KW.IN
|
||||||
|
.DA BS.KW.CAT
|
||||||
|
.DA BS.KW.01
|
||||||
|
.DA BS.KW.BYE
|
||||||
|
.DA BS.KW.02
|
||||||
|
.DA BS.KW.BRUN
|
||||||
|
.DA BS.KW.EXEC
|
||||||
|
.DA BS.KW.RESTORE
|
||||||
|
.DA BS.KW.LOCK
|
||||||
|
.DA BS.KW.03
|
||||||
|
.DA BS.KW.X04
|
||||||
|
.DA BS.KW.STORE
|
||||||
|
.DA BS.KW.BLOAD
|
||||||
|
.DA BS.KW.BSAVE
|
||||||
|
.DA BS.KW.X05
|
||||||
|
.DA BS.KW.X06
|
||||||
|
.DA BS.KW.FLUSH
|
||||||
|
.DA BS.KW.X07
|
||||||
|
.DA BS.KW.SAVE
|
||||||
|
.DA BS.KW.X08
|
||||||
|
.DA BS.KW.X09
|
||||||
|
.DA BS.KW.CREATE
|
||||||
|
.DA BS.KW.DELETE
|
||||||
|
.DA BS.KW.PREFIX
|
||||||
|
.DA BS.KW.RENAME
|
||||||
|
.DA BS.KW.UNLOCK
|
||||||
|
.DA BS.KW.X10
|
||||||
|
.DA BS.KW.CATALOG
|
||||||
|
.DA BS.KW.LOAD
|
||||||
|
.DA BS.KW.CLOSE
|
||||||
|
.DA BS.KW.APPEND
|
||||||
|
BS.KW.PBITS .DA $8040
|
||||||
|
.DA $8040
|
||||||
|
.DA $0495
|
||||||
|
.DA $0000
|
||||||
|
.DA $0000
|
||||||
|
.DA $0C11
|
||||||
|
.DA $F401
|
||||||
|
.DA $0701
|
||||||
|
.DA $0401
|
||||||
|
.DA $0401
|
||||||
|
.DA $142D
|
||||||
|
.DA $5321
|
||||||
|
.DA $0409
|
||||||
|
.DA $F405
|
||||||
|
.DA $F40D
|
||||||
|
.DA $0C01
|
||||||
|
.DA $0001
|
||||||
|
.DA $0001
|
||||||
|
.DA $0000
|
||||||
|
.DA $0409
|
||||||
|
.DA $4321
|
||||||
|
.DA $142D
|
||||||
|
.DA $040D
|
||||||
|
.DA $0401
|
||||||
|
.DA $0491
|
||||||
|
.DA $0403
|
||||||
|
.DA $0401
|
||||||
|
.DA $0411
|
||||||
|
.DA $0495
|
||||||
|
.DA $0401
|
||||||
|
.DA $0321
|
||||||
|
.DA $0401
|
||||||
|
BS.KW.OPT .AS "ABELSDFRV@"
|
||||||
|
BS.KW.OPT.PBITSLO
|
||||||
|
.DA #$80
|
||||||
|
.DA #$40
|
||||||
|
.DA #$20
|
||||||
|
.DA #$10
|
||||||
|
.DA #$04
|
||||||
|
.DA #$04
|
||||||
|
.DA #$02
|
||||||
|
.DA #$01
|
||||||
|
.DA #$00
|
||||||
|
.DA #$08
|
||||||
|
BS.KW.OPT.PBITSHI
|
||||||
|
.DA #$05
|
||||||
|
.DA #$12
|
||||||
|
.DA #$19
|
||||||
|
.DA #$21
|
||||||
|
.DA #$24
|
||||||
|
.DA #$28
|
||||||
|
.DA #$31
|
||||||
|
.DA #$39
|
||||||
|
.DA #$40
|
||||||
|
.DA #$45
|
||||||
|
BS.PRODOSTYPES.H
|
||||||
|
.DA #$FF
|
||||||
|
.DA #$FE
|
||||||
|
.DA #$FD
|
||||||
|
.DA #$FC
|
||||||
|
.DA #$FB
|
||||||
|
.DA #$FA
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$0F
|
||||||
|
.DA #$06
|
||||||
|
.DA #$04
|
||||||
|
.DA #$EF
|
||||||
|
.DA #$1A
|
||||||
|
.DA #$1B
|
||||||
|
.DA #$19
|
||||||
|
.DA #$B3
|
||||||
|
BS.PRODOSTYPES.ASC
|
||||||
|
.AS -"S16ADBASPAWPPASTXTBINDIRCMDINTIVRBASVARRELSYS"
|
||||||
|
BS.MONTHS .AS -"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
|
||||||
|
BS.NODATE .AS -"<NO DATE>"
|
||||||
|
BS.MLIERTBL .DA #$28
|
||||||
|
.DA #$2B
|
||||||
|
.DA #$40
|
||||||
|
.DA #$41
|
||||||
|
.DA #$42
|
||||||
|
.DA #$43
|
||||||
|
.DA #$44
|
||||||
|
.DA #$45
|
||||||
|
.DA #$46
|
||||||
|
.DA #$47
|
||||||
|
.DA #$48
|
||||||
|
.DA #$49
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$4C
|
||||||
|
.DA #$4D
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$50
|
||||||
|
.DA #$53
|
||||||
|
.DA #$56
|
||||||
|
BS.BIERRTBL .DA #$03
|
||||||
|
.DA #$04
|
||||||
|
.DA #$10
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$12
|
||||||
|
.DA #$06
|
||||||
|
.DA #$06
|
||||||
|
.DA #$07
|
||||||
|
.DA #$13
|
||||||
|
.DA #$09
|
||||||
|
.DA #$11
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$05
|
||||||
|
.DA #$02
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$14
|
||||||
|
.DA #$0B
|
||||||
|
.DA #$0C
|
||||||
|
BS.ERRCODES .DA #$08
|
||||||
|
.DA #$54
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$66
|
||||||
|
.DA #$6F
|
||||||
|
.DA #$75
|
||||||
|
.DA #$75
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$84
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$91
|
||||||
|
.DA #$9B
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$C9
|
||||||
|
.DA #$D1
|
||||||
|
.DA #$D9
|
||||||
|
.DA #$E1
|
||||||
|
.DA #$EC
|
||||||
|
BS.TBL6 .DA #$F3
|
||||||
|
.DA #$C1
|
||||||
|
.DA #$C3
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$C5
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C9
|
||||||
|
.DA #$CC
|
||||||
|
.DA #$CD
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$CF
|
||||||
|
.DA #$D2
|
||||||
|
.DA #$D4
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$00
|
||||||
|
.DA #$00
|
||||||
|
.DA #$C2
|
||||||
|
.DA #$C7
|
||||||
|
.DA #$C8
|
||||||
|
.DA #$CB
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$D3
|
||||||
|
.DA #$D6
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$D8
|
||||||
|
.DA #$D9
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$BA
|
||||||
|
BS.TBL7 .DA #$2A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$02
|
||||||
|
.DA #$03
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$10
|
||||||
|
.DA #$50
|
||||||
|
.DA #$57
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$2A
|
||||||
|
.DA #$80
|
||||||
|
.DA #$5D
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$18
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$10
|
||||||
|
.DA #$C0
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$54
|
||||||
|
.DA #$EE
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$1E
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$36
|
||||||
|
.DA #$56
|
||||||
|
.DA #$43
|
||||||
|
.DA #$00
|
||||||
|
.DA #$2F
|
||||||
|
.DA #$2B
|
||||||
|
.DA #$41
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$3E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$40
|
||||||
|
.DA #$49
|
||||||
|
.DA #$35
|
||||||
|
.DA #$67
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$06
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$4F
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$44
|
||||||
|
.DA #$0F
|
||||||
|
.DA #$00
|
||||||
|
.DA #$16
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$64
|
||||||
|
.DA #$30
|
||||||
|
.DA #$FE
|
||||||
|
.DA #$00
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$CA
|
||||||
|
.DA #$C1
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$60
|
||||||
|
.DA #$FF
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$90
|
||||||
|
.DA #$24
|
||||||
|
.DA #$E4
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$E3
|
||||||
|
.DA #$40
|
||||||
|
.DA #$76
|
||||||
|
.DA #$24
|
||||||
|
.DA #$E2
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$94
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$43
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$08
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$42
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$3F
|
||||||
|
.DA #$49
|
||||||
|
.DA #$3E
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$E3
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$1F
|
||||||
|
.DA #$05
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$03
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$AD
|
||||||
|
.DA #$93
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$60
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$E4
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$36
|
||||||
|
.DA #$06
|
||||||
|
.DA #$04
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$7F
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E7
|
||||||
|
.DA #$A2
|
||||||
|
.DA #$04
|
||||||
|
.DA #$43
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$69
|
||||||
|
.DA #$07
|
||||||
|
.DA #$17
|
||||||
|
.DA #$63
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$51
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$84
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$1D
|
||||||
|
.DA #$55
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$06
|
||||||
|
.DA #$E1
|
||||||
|
.DA #$07
|
||||||
|
.DA #$16
|
||||||
|
.DA #$71
|
||||||
|
.DA #$01
|
||||||
|
.DA #$74
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$EC
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$86
|
||||||
|
.DA #$06
|
||||||
|
.DA #$81
|
||||||
|
.DA #$C2
|
||||||
|
.DA #$03
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$05
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$02
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$8E
|
||||||
|
.DA #$CA
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$71
|
||||||
|
.DA #$B0
|
||||||
|
.DA #$24
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$36
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$E2
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$81
|
||||||
|
.DA #$93
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$9C
|
||||||
|
.DA #$10
|
||||||
|
.DA #$9E
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$36
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$7F
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$EA
|
||||||
|
.DA #$05
|
||||||
|
.DA #$49
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$3D
|
||||||
|
.DA #$05
|
||||||
|
.DA #$76
|
||||||
|
.DA #$21
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$67
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$91
|
||||||
|
.DA #$84
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$1D
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$6C
|
||||||
|
.DA #$67
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$54
|
||||||
|
.DA #$9F
|
||||||
|
|
||||||
|
XBBB5 .BS 2
|
||||||
|
XBBB7 .BS 1
|
||||||
|
XBBB8 .BS 1
|
||||||
|
BS.IsIntCmdMTR ldy #$02
|
||||||
|
LBBBB lda BS.CMDBUF,y
|
||||||
|
cmp BS.MTR,y
|
||||||
|
bne LBBCF
|
||||||
|
dey
|
||||||
|
bpl LBBBB
|
||||||
|
jsr BS.SetState0
|
||||||
|
jsr MON.CLREOL
|
||||||
|
jmp MON.ENTERMON
|
||||||
|
LBBCF jmp BS.IsIntCmd
|
||||||
|
|
||||||
|
BS.MTR .AS "MTR"
|
||||||
|
BS.IVERSION .DA #5
|
||||||
|
|
||||||
|
BS.AS.HIMEMSave .BS 1
|
||||||
|
XBBD7 .BS 1
|
||||||
|
XBBD8 .BS 1
|
||||||
|
|
||||||
|
XBBD9 .DA #4
|
||||||
|
XBBDA .BS 1
|
||||||
|
XBBDB .BS 1
|
||||||
|
XBBDC .BS 1
|
||||||
|
XBBDD .BS 1
|
||||||
|
|
||||||
|
BS.TXTTAB .DA $0800
|
||||||
|
BS.MEMSIZE .DA $9600
|
||||||
|
|
||||||
|
XBBE2 .BS 1
|
||||||
|
XBBE3 .BS 1
|
||||||
|
|
||||||
|
BS.BAS.HDR .BS 5
|
||||||
|
XBBE9 .BS 1
|
||||||
|
XBBEA .BS 1
|
||||||
|
XBBEB .BS 1
|
||||||
|
XBBEC .BS 1
|
||||||
|
XBBED .BS 1
|
||||||
|
XBBEE .BS 1
|
||||||
|
XBBEF .BS 7
|
||||||
|
XBBF6 .BS 1
|
||||||
|
XBBF7 .BS 7
|
||||||
|
XBBFE .BS 1
|
||||||
|
XBBFF .BS 1
|
||||||
|
XBC00 .BS 3
|
||||||
|
BS.CALLX .BS 1
|
||||||
|
BS.GetCharSep .BS 1
|
||||||
|
BS.GetCharMax .BS 1
|
||||||
|
BS.KW.JMPADDR .BS 2
|
||||||
|
XBC08 .BS 1
|
||||||
|
XBC09 .BS 1
|
||||||
|
|
||||||
|
BS.TMPBUF4 .BS 4
|
||||||
|
|
||||||
|
XBC0E .BS 1
|
||||||
|
XBC0F .BS 1
|
||||||
|
XBC10 .BS 1
|
||||||
|
|
||||||
|
BS.CATWIDTH .BS 1
|
||||||
|
|
||||||
|
XBC12 .BS 1
|
||||||
|
XBC13 .BS 1
|
||||||
|
XBC14 .BS 1
|
||||||
|
XBC15 .BS 1
|
||||||
|
XBC16 .BS 1
|
||||||
|
|
||||||
|
BS.CMDBUF.LEN .BS 1
|
||||||
|
BS.CMDBUF .BS 65
|
||||||
|
|
||||||
|
XBC59 .BS 1
|
||||||
|
XBC5A .BS 1
|
||||||
|
XBC5B .BS 165
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.15/basic.s.d
|
||||||
|
LOAD usr/src/basic.15/basic.s
|
||||||
|
ASM
|
155
BASIC.15/BASIC.S.GP..txt
Normal file
155
BASIC.15/BASIC.S.GP..txt
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
GP.ENTRY jmp BS.ENTRY
|
||||||
|
GP.DOSCMD jmp BS.DOSCMD
|
||||||
|
GP.EXTRNCMD jmp GP.RTS
|
||||||
|
GP.ERROUT jmp BS.ERROUT
|
||||||
|
GP.PRINTERR jmp BS.PRINTERR
|
||||||
|
GP.ERRCODE .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
GP.OUTVECT0 .DA MON.COUT1
|
||||||
|
GP.OUTVECT1 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT2 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT3 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT4 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT5 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT6 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT7 .DA BS.NODEVERR
|
||||||
|
GP.INVECT0 .DA MON.KEYIN
|
||||||
|
GP.INVECT1 .DA BS.NODEVERR
|
||||||
|
GP.INVECT2 .DA BS.NODEVERR
|
||||||
|
GP.INVECT3 .DA BS.NODEVERR
|
||||||
|
GP.INVECT4 .DA BS.NODEVERR
|
||||||
|
GP.INVECT5 .DA BS.NODEVERR
|
||||||
|
GP.INVECT6 .DA BS.NODEVERR
|
||||||
|
GP.INVECT7 .DA BS.NODEVERR
|
||||||
|
GP.VECTOUT .DA MON.COUT1
|
||||||
|
GP.VECTIN .DA MON.KEYIN
|
||||||
|
GP.VDOSO .DA BS.JMP.GP.VSYSO
|
||||||
|
GP.VDOSI .DA BS.JMP.GP.VSYSI
|
||||||
|
GP.VSYSO .BS 2
|
||||||
|
GP.VSYSI .BS 2
|
||||||
|
GP.VDEFSLT .DA #6
|
||||||
|
GP.VDEFDRV .DA #1
|
||||||
|
GP.PREGA .BS 1
|
||||||
|
GP.PREGX .BS 1
|
||||||
|
GP.PREGY .BS 1
|
||||||
|
GP.DTRACE .BS 1
|
||||||
|
GP.STATE .BS 1
|
||||||
|
GP.EXECACTV .BS 1
|
||||||
|
GP.IFILACTV .BS 1
|
||||||
|
GP.OFILACTV .BS 1
|
||||||
|
GP.PFXACTV .BS 1
|
||||||
|
GP.DIRFLG .BS 1
|
||||||
|
GP.EDIRFLG .BS 1
|
||||||
|
GP.STRINGS .BS 1
|
||||||
|
GP.TBUFPTR .BS 1
|
||||||
|
GP.INPTR .BS 1
|
||||||
|
GP.CHRLAST .BS 1
|
||||||
|
GP.OPENCNT .BS 1
|
||||||
|
GP.EXECFILE .BS 1
|
||||||
|
GP.CATFLAG .BS 1
|
||||||
|
GP.XTRNADDR .BS 2
|
||||||
|
GP.XLEN .BS 1
|
||||||
|
GP.XCNUM .BS 1
|
||||||
|
GP.AllowedBITS .BS 2
|
||||||
|
GP.FoundBITS .BS 2
|
||||||
|
GP.ParamA .BS 2
|
||||||
|
GP.ParamB .BS 3
|
||||||
|
GP.ParamE .BS 2
|
||||||
|
GP.ParamL .BS 2
|
||||||
|
GP.ParamS .BS 1
|
||||||
|
GP.ParamD .BS 1
|
||||||
|
GP.ParamF .BS 2
|
||||||
|
GP.ParamR .BS 2
|
||||||
|
GP.ParamV .BS 1
|
||||||
|
GP.ParamAT .BS 2
|
||||||
|
GP.ParamT .BS 1
|
||||||
|
GP.ParamINPR .BS 1
|
||||||
|
GP.VPATH1 .DA BS.CMDBUF.LEN
|
||||||
|
GP.VPATH2 .DA MLI.PATHBUF
|
||||||
|
*--------------------------------------
|
||||||
|
GP.GOSYSTEM sta GP.GOSYSTEM.C
|
||||||
|
stx BS.CALLX
|
||||||
|
and #$1F
|
||||||
|
tax
|
||||||
|
lda BS.ParamLByte,x
|
||||||
|
sta GP.GOSYSTEM.P
|
||||||
|
ldx BS.CALLX
|
||||||
|
jsr MLI
|
||||||
|
GP.GOSYSTEM.C .BS 1
|
||||||
|
GP.GOSYSTEM.P .DA GP.GOSYSTEM.P
|
||||||
|
bcs GP.BADCALL
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.BADCALL ldx #$12
|
||||||
|
|
||||||
|
LBE8D cmp BS.MLIERTBL,x
|
||||||
|
beq LBE97
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl LBE8D
|
||||||
|
|
||||||
|
ldx #$13
|
||||||
|
|
||||||
|
LBE97 lda BS.BIERRTBL,x
|
||||||
|
ldx BS.CALLX
|
||||||
|
sec
|
||||||
|
|
||||||
|
GP.RTS rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.CISPARE1 .BS 1
|
||||||
|
GP.SCREATE .DA #7
|
||||||
|
GP.SCREATEPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.CRACCESS .DA #$C3
|
||||||
|
GP.CRTYPE .BS 1
|
||||||
|
GP.CRAUXTYPE .BS 2
|
||||||
|
GP.CRSTTYPE .BS 1
|
||||||
|
GP.DATETIME .BS 4
|
||||||
|
GP.SDSTROY .DA #1
|
||||||
|
GP.SDSTROYPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.SRECNAME .DA #2
|
||||||
|
GP.SRECNAMEOLD .DA BS.CMDBUF.LEN
|
||||||
|
GP.SRECNAMENEW .DA MLI.PATHBUF
|
||||||
|
GP.SSGINFO .BS 1
|
||||||
|
GP.SSGINFOPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.FIACCESS .BS 1
|
||||||
|
GP.FITYPE .BS 1
|
||||||
|
GP.FIAUXTYPE .BS 2
|
||||||
|
GP.STTYPE .BS 1
|
||||||
|
GP.FIBLOKS .BS 2
|
||||||
|
GP.FIMDATE .BS 2
|
||||||
|
GP.FICDATE .BS 2
|
||||||
|
|
||||||
|
.BS 4
|
||||||
|
|
||||||
|
GP.MLIMRKEOFBUF .DA #2
|
||||||
|
GP.MLIMRKEOFBUF.REFNUM
|
||||||
|
.BS 1
|
||||||
|
GP.SBUFADR .BS 3
|
||||||
|
GP.SOPEN .DA #3
|
||||||
|
GP.TXTBUF .DA BS.CMDBUF.LEN
|
||||||
|
GP.OSYSBUF .BS 2
|
||||||
|
GP.OREFNUM .BS 1
|
||||||
|
GP.SNEWLIN .DA #3
|
||||||
|
GP.NEWLREF .BS 1
|
||||||
|
GP.NLINEMASK .DA #$7F
|
||||||
|
GP.NLINECHAR .DA #13
|
||||||
|
GP.MLIRW .DA #4
|
||||||
|
GP.MLIRW.REFNUM .BS 1
|
||||||
|
GP.MLIRW.DATAPTR .BS 2
|
||||||
|
GP.MLIRW.COUNT .BS 2
|
||||||
|
GP.MLIRW.TRANS .BS 2
|
||||||
|
GP.MLICF .DA #1
|
||||||
|
GP.MLICF.REFNUM .BS 1
|
||||||
|
GP.CCCSPARE .BS 1
|
||||||
|
GP.COPYRIGHT .AS -"COPYRIGHT APPLE, 1983"
|
||||||
|
GP.GETBUFR jmp BS.GETBUFR
|
||||||
|
GP.FREEBUFR jmp BS.FREEBUFR
|
||||||
|
GP.RSHIMEM .BS 5
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.15/basic.s.gp
|
||||||
|
LOAD usr/src/basic.15/basic.s
|
||||||
|
ASM
|
310
BASIC.15/BASIC.S.LDR.txt
Normal file
310
BASIC.15/BASIC.S.LDR.txt
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
LDR.START jmp LDR.START1
|
||||||
|
LDR.SIG .DA $EEEE
|
||||||
|
.DA #MLI.MAXPATH+1
|
||||||
|
LDR.STARTUP.LEN .DA #7
|
||||||
|
LDR.STARTUP .AS "STARTUP"
|
||||||
|
.BS MLI.MAXPATH-7
|
||||||
|
LDR.START1 lda #$9A
|
||||||
|
sta Ptr2+1
|
||||||
|
lda #$24
|
||||||
|
sta Ptr1+1
|
||||||
|
lda #$00
|
||||||
|
sta Ptr1
|
||||||
|
sta Ptr2
|
||||||
|
ldx #$23
|
||||||
|
tay
|
||||||
|
jsr LDR.MoveXpages
|
||||||
|
ldx #$01
|
||||||
|
lda #$BE
|
||||||
|
sta Ptr2+1
|
||||||
|
jsr LDR.MoveXpages
|
||||||
|
lda #$15
|
||||||
|
jsr MON.COUT
|
||||||
|
jsr MON.SETNORM
|
||||||
|
jsr MON.INIT
|
||||||
|
jsr MON.MON
|
||||||
|
ldx #$17
|
||||||
|
lda #$00
|
||||||
|
|
||||||
|
L2076 sta MLI.MEMTABL,x
|
||||||
|
dex
|
||||||
|
bne L2076
|
||||||
|
|
||||||
|
lda #$CF
|
||||||
|
sta MLI.MEMTABL
|
||||||
|
lda #$3F
|
||||||
|
sta MLI.MEMTABL+19
|
||||||
|
lda #$FF
|
||||||
|
sta MLI.MEMTABL+20
|
||||||
|
sta MLI.MEMTABL+21
|
||||||
|
sta MLI.MEMTABL+22
|
||||||
|
lda #$C3
|
||||||
|
sta MLI.MEMTABL+23
|
||||||
|
lda AS.COLDBOOT
|
||||||
|
cmp #$4C
|
||||||
|
bne L20B1
|
||||||
|
|
||||||
|
lda MLI.MACHID
|
||||||
|
and #$20
|
||||||
|
beq L20B1
|
||||||
|
|
||||||
|
ldx #$03
|
||||||
|
|
||||||
|
L20A6 lda LDR.CSWVECT,x
|
||||||
|
sta ZP.CSW,x
|
||||||
|
dex
|
||||||
|
bpl L20A6
|
||||||
|
|
||||||
|
jmp AS.COLDBOOT
|
||||||
|
|
||||||
|
L20B1 ldx #$27
|
||||||
|
|
||||||
|
L20B3 lda LDR.UNABLE,x
|
||||||
|
sta $628,x
|
||||||
|
dex
|
||||||
|
bpl L20B3
|
||||||
|
|
||||||
|
sta MON.POWERUPBYTE
|
||||||
|
sta MON.POWERUP+1
|
||||||
|
|
||||||
|
L20C2 bmi L20C2
|
||||||
|
|
||||||
|
LDR.MoveXpages dey
|
||||||
|
lda (Ptr1),y
|
||||||
|
sta (Ptr2),y
|
||||||
|
tya
|
||||||
|
bne LDR.MoveXpages
|
||||||
|
|
||||||
|
inc Ptr1+1
|
||||||
|
inc Ptr2+1
|
||||||
|
dex
|
||||||
|
bne LDR.MoveXpages
|
||||||
|
|
||||||
|
L20D3 rts
|
||||||
|
|
||||||
|
LDR.CSW cmp #$DD
|
||||||
|
bne L20D3
|
||||||
|
|
||||||
|
lda GP.OUTVECT0
|
||||||
|
sta ZP.CSW
|
||||||
|
lda GP.OUTVECT0+1
|
||||||
|
sta ZP.CSW+1
|
||||||
|
lda MLI.DEVNUM
|
||||||
|
sta LDR.ONLINE.P.DEVNUM
|
||||||
|
ldx #$01
|
||||||
|
asl
|
||||||
|
bcc L20EE
|
||||||
|
|
||||||
|
inx
|
||||||
|
|
||||||
|
L20EE stx GP.VDEFDRV
|
||||||
|
asl
|
||||||
|
rol
|
||||||
|
rol
|
||||||
|
rol
|
||||||
|
and #$07
|
||||||
|
sta GP.VDEFSLT
|
||||||
|
ldx #$C1
|
||||||
|
ldy #$02
|
||||||
|
lda MLI.SLTBYT
|
||||||
|
lsr
|
||||||
|
|
||||||
|
L2102 lsr
|
||||||
|
pha
|
||||||
|
bcc L2115
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta GP.OUTVECT0,y
|
||||||
|
sta GP.INVECT0,y
|
||||||
|
txa
|
||||||
|
sta GP.OUTVECT0+1,y
|
||||||
|
sta GP.INVECT0+1,y
|
||||||
|
|
||||||
|
L2115 iny
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
pla
|
||||||
|
bne L2102
|
||||||
|
|
||||||
|
lda #$96
|
||||||
|
sta AS.HIMEM+1
|
||||||
|
sta AS.STRINGSTART+1
|
||||||
|
sta GP.RSHIMEM
|
||||||
|
lda MLI.PFIXPTR
|
||||||
|
beq L214E
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.GETPREFIX
|
||||||
|
.DA LDR.GETSETPFX2.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
ldx MLI.PATHBUF
|
||||||
|
lda #$2F
|
||||||
|
|
||||||
|
L2136 cmp MLI.PATHBUF,x
|
||||||
|
bne L213E
|
||||||
|
|
||||||
|
inc LDR.PFXLEN
|
||||||
|
|
||||||
|
L213E dex
|
||||||
|
bne L2136
|
||||||
|
|
||||||
|
lda LDR.PFXLEN
|
||||||
|
cmp #$03
|
||||||
|
bcs L216F
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX1.P
|
||||||
|
|
||||||
|
L214E jsr MLI
|
||||||
|
.DA #MLI.C.ONLINE
|
||||||
|
.DA LDR.ONLINE.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
lda MLI.PATHBUF+1
|
||||||
|
and #$0F
|
||||||
|
beq L218B
|
||||||
|
|
||||||
|
tax
|
||||||
|
inx
|
||||||
|
stx MLI.PATHBUF
|
||||||
|
lda #$2F
|
||||||
|
sta MLI.PATHBUF+1
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX2.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
L216F jsr MLI
|
||||||
|
.DA #MLI.C.GETFILEINFO
|
||||||
|
.DA LDR.GFINFO.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
ldx LDR.STARTUP.LEN
|
||||||
|
stx LDR.STARTUP.LEN1
|
||||||
|
|
||||||
|
L217D lda LDR.STARTUP.LEN,x
|
||||||
|
sta IO.LINEBUF,x
|
||||||
|
dex
|
||||||
|
bne L217D
|
||||||
|
|
||||||
|
lda #$AD
|
||||||
|
sta IO.LINEBUF
|
||||||
|
|
||||||
|
L218B lda LDR.PFXLEN
|
||||||
|
cmp #$03
|
||||||
|
bcs L2198
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX1.P
|
||||||
|
|
||||||
|
L2198 lda LDR.STARTUP.LEN1
|
||||||
|
bne L21C1
|
||||||
|
|
||||||
|
jsr LDR.KSW
|
||||||
|
ldx #$1C
|
||||||
|
|
||||||
|
L21A2 lda LDR.PRODOSBASIC,x
|
||||||
|
sta $400,x
|
||||||
|
dex
|
||||||
|
bpl L21A2
|
||||||
|
|
||||||
|
ldx #$1F
|
||||||
|
|
||||||
|
L21AD lda LDR.COPYRIGHT,x
|
||||||
|
sta $480,x
|
||||||
|
dex
|
||||||
|
bpl L21AD
|
||||||
|
|
||||||
|
lda #$8D
|
||||||
|
jsr MON.COUT1
|
||||||
|
jsr MON.COUT1
|
||||||
|
jsr MON.COUT1
|
||||||
|
|
||||||
|
L21C1 ldx #$02
|
||||||
|
L21C3 lda LDR.JMP.GP.ENTRY,x
|
||||||
|
sta DOS.WARMSTART,x
|
||||||
|
sta DOS.COLDSTART,x
|
||||||
|
sta MON.USRJMP,x
|
||||||
|
lda LDR.AMPERSANDJMP,x
|
||||||
|
sta MON.AMPERSANDJMP,x
|
||||||
|
dex
|
||||||
|
bpl L21C3
|
||||||
|
|
||||||
|
lda LDR.BRKVECT
|
||||||
|
sta MON.BRKVECT
|
||||||
|
lda LDR.BRKVECT+1
|
||||||
|
sta MON.BRKVECT+1
|
||||||
|
lda LDR.POWERUP
|
||||||
|
sta MON.POWERUP
|
||||||
|
lda LDR.POWERUP+1
|
||||||
|
sta MON.POWERUP+1
|
||||||
|
eor #$A5
|
||||||
|
sta MON.POWERUPBYTE
|
||||||
|
lda #$A5
|
||||||
|
sta AS.TRCFLG
|
||||||
|
lda BS.IVERSION
|
||||||
|
sta MLI.IVERSION
|
||||||
|
|
||||||
|
LDR.JMP.GP.ENTRY
|
||||||
|
jmp GP.ENTRY
|
||||||
|
|
||||||
|
LDR.BRKVECT .DA MON.BREAKV
|
||||||
|
LDR.POWERUP .DA GP.ENTRY
|
||||||
|
|
||||||
|
LDR.AMPERSANDJMP
|
||||||
|
jmp GP.DOSCMD
|
||||||
|
|
||||||
|
LDR.KSW lda GP.INVECT0
|
||||||
|
sta ZP.KSW
|
||||||
|
lda GP.INVECT0+1
|
||||||
|
sta ZP.KSW+1
|
||||||
|
ldx LDR.STARTUP.LEN
|
||||||
|
inx
|
||||||
|
lda #$8D
|
||||||
|
rts
|
||||||
|
|
||||||
|
LDR.CSWVECT .DA LDR.CSW
|
||||||
|
LDR.KSWVECT .DA LDR.KSW
|
||||||
|
LDR.GFINFO.P .DA #10
|
||||||
|
LDR.GFINFO.P.PATHBUF
|
||||||
|
.DA LDR.STARTUP.LEN
|
||||||
|
|
||||||
|
.BS 16
|
||||||
|
|
||||||
|
LDR.GETSETPFX1.P
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX1.P.BUF
|
||||||
|
.DA LDR.GETSETPFX1.SLASHLEN
|
||||||
|
LDR.GETSETPFX1.SLASHLEN
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX1.SLASH
|
||||||
|
.AS "/"
|
||||||
|
LDR.STARTUP.LEN1
|
||||||
|
.DA #0
|
||||||
|
LDR.ONLINE.P
|
||||||
|
.DA #2
|
||||||
|
LDR.ONLINE.P.DEVNUM
|
||||||
|
.DA #$70
|
||||||
|
LDR.ONLINE.P.BUF
|
||||||
|
.DA MLI.PATHBUF+1
|
||||||
|
LDR.GETSETPFX2.P
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX2.P.BUF
|
||||||
|
.DA MLI.PATHBUF
|
||||||
|
LDR.PFXLEN .DA #0
|
||||||
|
|
||||||
|
LDR.UNABLE .AS -"*** UNABLE TO EXECUTE BASIC SYSTEM ***"
|
||||||
|
LDR.PRODOSBASIC .AS -" PRODOS BASIC 1.5 "
|
||||||
|
LDR.COPYRIGHT .AS -" COPYRIGHT APPLE 1983-92"
|
||||||
|
.BS $2400-*
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.15/basic.s.ldr
|
||||||
|
LOAD usr/src/basic.15/basic.s
|
||||||
|
ASM
|
163
BASIC.15/BASIC.S.txt
Normal file
163
BASIC.15/BASIC.S.txt
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
.OP 6502
|
||||||
|
.OR $2000
|
||||||
|
.TF BASIC.15,TSYS
|
||||||
|
*--------------------------------------
|
||||||
|
Ptr1 .EQ 0
|
||||||
|
Ptr2 .EQ 2
|
||||||
|
|
||||||
|
ZP.WNDLFT .EQ $20
|
||||||
|
ZP.WNDWDT .EQ $21
|
||||||
|
ZP.WNDTOP .EQ $22
|
||||||
|
ZP.WNDBOT .EQ $23
|
||||||
|
ZP.CH .EQ $24
|
||||||
|
ZP.CV .EQ $25
|
||||||
|
ZP.BASL .EQ $28
|
||||||
|
ZP.BASH .EQ $29
|
||||||
|
|
||||||
|
ZP.PROMPT .EQ $33
|
||||||
|
|
||||||
|
ZP.CSW .EQ $36
|
||||||
|
ZP.KSW .EQ $38
|
||||||
|
|
||||||
|
ZP.PCL .EQ $3A
|
||||||
|
ZP.PCH .EQ $3B
|
||||||
|
ZP.A1L .EQ $3C
|
||||||
|
ZP.A1H .EQ $3D
|
||||||
|
ZP.A2L .EQ $3E
|
||||||
|
ZP.A2H .EQ $3F
|
||||||
|
|
||||||
|
AS.LINNUM .EQ $50
|
||||||
|
AS.PGRMSTART .EQ $67
|
||||||
|
AS.VARSTART .EQ $69
|
||||||
|
AS.ARRAYSTART .EQ $6B
|
||||||
|
AS.ARRAYEND .EQ $6D
|
||||||
|
AS.STRINGSTART .EQ $6F
|
||||||
|
AS.STRINGPTR .EQ $71
|
||||||
|
AS.HIMEM .EQ $73
|
||||||
|
AS.CURLINE .EQ $75
|
||||||
|
AS.LOWTR .EQ $9B
|
||||||
|
AS.PGRMEND .EQ $AF
|
||||||
|
AS.TXTPTR .EQ $B8
|
||||||
|
AS.ERRFLG .EQ $D8
|
||||||
|
AS.ERRNUM .EQ $DE
|
||||||
|
AS.TRCFLG .EQ $F2
|
||||||
|
AS.REMSTK .EQ $F8
|
||||||
|
*--------------------------------------
|
||||||
|
IO.LINEBUF .EQ $200
|
||||||
|
*--------------------------------------
|
||||||
|
DIRENTBUF .EQ $259
|
||||||
|
DIRENTBUF.STNL .EQ $25D
|
||||||
|
DIRENTBUF.TYPE .EQ $269
|
||||||
|
|
||||||
|
DIRENTBUF.UBLK .EQ $26C
|
||||||
|
DIRENTBUF.EOF .EQ $26E
|
||||||
|
|
||||||
|
DIRENTBUF.ACCESS .EQ $277
|
||||||
|
DIRENTBUF.AUXT .EQ $278
|
||||||
|
|
||||||
|
MLI.PATHBUF .EQ $280
|
||||||
|
*--------------------------------------
|
||||||
|
DOS.WARMSTART .EQ $03D0
|
||||||
|
DOS.COLDSTART .EQ $03D3
|
||||||
|
DOS.FILEMGR .EQ $03D6
|
||||||
|
DOS.RWTS .EQ $03D9
|
||||||
|
DOS.FILEMGRPARM .EQ $03DC
|
||||||
|
DOS.RWTSPARM .EQ $03E3
|
||||||
|
DOS.RECONNECT .EQ $03DA
|
||||||
|
DOS.JMPBRKVECT .EQ $03EF
|
||||||
|
|
||||||
|
MON.AMPERSANDJMP .EQ $03F5
|
||||||
|
MON.USRJMP .EQ $03F8
|
||||||
|
MON.NMIJMP .EQ $03FB
|
||||||
|
MON.IRQVECT .EQ $03FE
|
||||||
|
MON.BRKVECT .EQ $03F0
|
||||||
|
MON.POWERUP .EQ $03F2
|
||||||
|
MON.POWERUPBYTE .EQ $03F4
|
||||||
|
*--------------------------------------
|
||||||
|
MLI.MAXPATH .EQ 64
|
||||||
|
MLI.C.ALLOCIRQ .EQ $40
|
||||||
|
MLI.C.DEALLOCIRQ .EQ $41
|
||||||
|
MLI.C.ATALK .EQ $42
|
||||||
|
MLI.C.QUIT .EQ $65
|
||||||
|
MLI.C.READBLOCK .EQ $80
|
||||||
|
MLI.C.WRITEBLOCK .EQ $81
|
||||||
|
MLI.C.GETTIME .EQ $82
|
||||||
|
MLI.C.CREATE .EQ $C0
|
||||||
|
MLI.C.DESTROY .EQ $C1
|
||||||
|
MLI.C.RENAME .EQ $C2
|
||||||
|
MLI.C.SETFILEINFO .EQ $C3
|
||||||
|
MLI.C.GETFILEINFO .EQ $C4
|
||||||
|
MLI.C.ONLINE .EQ $C5
|
||||||
|
MLI.C.SETPREFIX .EQ $C6
|
||||||
|
MLI.C.GETPREFIX .EQ $C7
|
||||||
|
MLI.C.OPEN .EQ $C8
|
||||||
|
MLI.C.NEWLINE .EQ $C9
|
||||||
|
MLI.C.READ .EQ $CA
|
||||||
|
MLI.C.WRITE .EQ $CB
|
||||||
|
MLI.C.CLOSE .EQ $CC
|
||||||
|
MLI.C.FLUSH .EQ $CD
|
||||||
|
MLI.C.SETMARK .EQ $CE
|
||||||
|
MLI.C.GETMARK .EQ $CF
|
||||||
|
MLI.C.SETEOF .EQ $D0
|
||||||
|
MLI.C.GETEOF .EQ $D1
|
||||||
|
MLI.C.SETBUF .EQ $D2
|
||||||
|
MLI.C.GETBUF .EQ $D3
|
||||||
|
*--------------------------------------
|
||||||
|
MLI .EQ $BF00
|
||||||
|
MLI.DEVNUM .EQ $BF30
|
||||||
|
MLI.DEVCNT .EQ $BF31
|
||||||
|
MLI.DEVLST .EQ $BF32
|
||||||
|
MLI.MEMTABL .EQ $BF58
|
||||||
|
MLI.LEVEL .EQ $BF94
|
||||||
|
MLI.MACHID .EQ $BF98
|
||||||
|
MLI.SLTBYT .EQ $BF99
|
||||||
|
MLI.PFIXPTR .EQ $BF9A
|
||||||
|
MLI.MLIACTV .EQ $BF9B
|
||||||
|
MLI.IVERSION .EQ $BFFD
|
||||||
|
*--------------------------------------
|
||||||
|
IO.KBD .EQ $C000
|
||||||
|
IO.KSTROBE .EQ $C010
|
||||||
|
*--------------------------------------
|
||||||
|
AS.RESTART .EQ $D43C
|
||||||
|
AS.RESTART1 .EQ $D43F
|
||||||
|
AS.FINDLINE .EQ $D61A
|
||||||
|
AS.CLEAR1 .EQ $D665
|
||||||
|
AS.NEXTSTMT .EQ $D7D2
|
||||||
|
AS.EXECSTMT .EQ $D820
|
||||||
|
AS.BITERRFLG .EQ $D865
|
||||||
|
AS.NORMAL .EQ $F273
|
||||||
|
AS.COLDBOOT .EQ $E000
|
||||||
|
AS.INTPRINTAX .EQ $ED24
|
||||||
|
*--------------------------------------
|
||||||
|
MON.BREAKV .EQ $FA59
|
||||||
|
MON.INIT .EQ $FB2F
|
||||||
|
MON.MON .EQ $FC58
|
||||||
|
MON.CLREOL .EQ $FC9C
|
||||||
|
MON.RDKEY .EQ $FD0C
|
||||||
|
MON.KEYIN0 .EQ $FD10
|
||||||
|
MON.KEYIN .EQ $FD1B
|
||||||
|
MON.GETLN .EQ $FD6A
|
||||||
|
MON.COUT .EQ $FDED
|
||||||
|
MON.COUT1 .EQ $FDF0
|
||||||
|
MON.IIGSID .EQ $FE1F
|
||||||
|
MON.SETINV .EQ $FE80
|
||||||
|
MON.SETNORM .EQ $FE84
|
||||||
|
MON.ENTERMON .EQ $FF69
|
||||||
|
*--------------------------------------
|
||||||
|
.INB usr/src/basic.15/basic.s.ldr
|
||||||
|
LDR.9A00.CODE .PH $9A00
|
||||||
|
.INB usr/src/basic.15/basic.s.a
|
||||||
|
.INB usr/src/basic.15/basic.s.b
|
||||||
|
.INB usr/src/basic.15/basic.s.c
|
||||||
|
.INB usr/src/basic.15/basic.s.d
|
||||||
|
.EP
|
||||||
|
LDR.BE00.CODE .PH $BE00
|
||||||
|
.INB usr/src/basic.15/basic.s.gp
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.15/basic.s
|
||||||
|
ASM
|
1300
BASIC.FX/BASIC.S.A.txt
Normal file
1300
BASIC.FX/BASIC.S.A.txt
Normal file
File diff suppressed because it is too large
Load Diff
1687
BASIC.FX/BASIC.S.B.txt
Normal file
1687
BASIC.FX/BASIC.S.B.txt
Normal file
File diff suppressed because it is too large
Load Diff
1506
BASIC.FX/BASIC.S.C.txt
Normal file
1506
BASIC.FX/BASIC.S.C.txt
Normal file
File diff suppressed because it is too large
Load Diff
659
BASIC.FX/BASIC.S.D.txt
Normal file
659
BASIC.FX/BASIC.S.D.txt
Normal file
@ -0,0 +1,659 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
BS.SYSIOVECTS .DA BS.IO.OUT
|
||||||
|
.DA BS.IO.IN
|
||||||
|
.DA BS.IO.OUT.TRACE
|
||||||
|
.DA BS.IO.IN0
|
||||||
|
.DA BS.IO.OUT.CAT
|
||||||
|
.DA BS.IO.IN0
|
||||||
|
BS.VSYSO.LO .DA #$A7
|
||||||
|
BS.VSYSO.HI .DA #$9D
|
||||||
|
BS.ParamLByte .DA #$A0
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$CB
|
||||||
|
.DA #$D1
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$DD
|
||||||
|
.DA #$DD
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C6
|
||||||
|
BS.BYTES .DA #$80
|
||||||
|
.DA #$81
|
||||||
|
.DA #$82
|
||||||
|
.DA #$83
|
||||||
|
.DA #$84
|
||||||
|
.DA #$85
|
||||||
|
.DA #$86
|
||||||
|
.DA #$87
|
||||||
|
.DA #$88
|
||||||
|
.DA #$89
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$8B
|
||||||
|
.DA #$19
|
||||||
|
.DA #$8D
|
||||||
|
.DA #$8E
|
||||||
|
.DA #$8F
|
||||||
|
.DA #$90
|
||||||
|
.DA #$91
|
||||||
|
.DA #$92
|
||||||
|
.DA #$93
|
||||||
|
.DA #$94
|
||||||
|
.DA #$95
|
||||||
|
.DA #$96
|
||||||
|
.DA #$97
|
||||||
|
.DA #$98
|
||||||
|
.DA #$99
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$23
|
||||||
|
.DA #$28
|
||||||
|
.DA #$5A
|
||||||
|
.DA #$5A
|
||||||
|
.DA #$56
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$A1
|
||||||
|
.DA #$A2
|
||||||
|
.DA #$A3
|
||||||
|
.DA #$A4
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$34
|
||||||
|
.DA #$A7
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$1F
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$00
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$B0
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$B2
|
||||||
|
.DA #$B3
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$B5
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$B7
|
||||||
|
.DA #$B8
|
||||||
|
.DA #$B9
|
||||||
|
.DA #$00
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$13
|
||||||
|
.DA #$BD
|
||||||
|
.DA #$BE
|
||||||
|
BS.KW.LEN .DA #$BF
|
||||||
|
.DA #$47
|
||||||
|
.DA #$5F
|
||||||
|
.DA #$18
|
||||||
|
.DA #$30
|
||||||
|
.DA #$15
|
||||||
|
.DA #$BD
|
||||||
|
.DA #$3D
|
||||||
|
.DA #$28
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$41
|
||||||
|
.DA #$20
|
||||||
|
.DA #$50
|
||||||
|
.DA #$84
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$04
|
||||||
|
.DA #$46
|
||||||
|
.DA #$6A
|
||||||
|
.DA #$4C
|
||||||
|
.DA #$5C
|
||||||
|
.DA #$35
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$70
|
||||||
|
.DA #$2D
|
||||||
|
.DA #$12
|
||||||
|
.DA #$65
|
||||||
|
.DA #$39
|
||||||
|
.DA #$41
|
||||||
|
.DA #$88
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$B5
|
||||||
|
.DA #$D8
|
||||||
|
BS.KW.TABLE .AS "BSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND"
|
||||||
|
BS.KW.JMP .DA BS.JMP.XTRNADDR
|
||||||
|
.DA BS.KW.PR
|
||||||
|
.DA BS.KW.IN
|
||||||
|
.DA BS.KW.CAT
|
||||||
|
.DA BS.KW.01
|
||||||
|
.DA BS.KW.BYE
|
||||||
|
.DA BS.KW.02
|
||||||
|
.DA BS.KW.BRUN
|
||||||
|
.DA BS.KW.EXEC
|
||||||
|
.DA BS.KW.RESTORE
|
||||||
|
.DA BS.KW.LOCK
|
||||||
|
.DA BS.KW.03
|
||||||
|
.DA BS.KW.X04
|
||||||
|
.DA BS.KW.STORE
|
||||||
|
.DA BS.KW.BLOAD
|
||||||
|
.DA BS.KW.BSAVE
|
||||||
|
.DA BS.KW.X05
|
||||||
|
.DA BS.KW.X06
|
||||||
|
.DA BS.KW.FLUSH
|
||||||
|
.DA BS.KW.X07
|
||||||
|
.DA BS.KW.SAVE
|
||||||
|
.DA BS.KW.X08
|
||||||
|
.DA BS.KW.X09
|
||||||
|
.DA BS.KW.CREATE
|
||||||
|
.DA BS.KW.DELETE
|
||||||
|
.DA BS.KW.PREFIX
|
||||||
|
.DA BS.KW.RENAME
|
||||||
|
.DA BS.KW.UNLOCK
|
||||||
|
.DA BS.KW.X10
|
||||||
|
.DA BS.KW.CATALOG
|
||||||
|
.DA BS.KW.LOAD
|
||||||
|
.DA BS.KW.CLOSE
|
||||||
|
.DA BS.KW.APPEND
|
||||||
|
BS.KW.PBITS .DA $8040
|
||||||
|
.DA $8040
|
||||||
|
.DA $0495
|
||||||
|
.DA $0000
|
||||||
|
.DA $0000
|
||||||
|
.DA $0C11
|
||||||
|
.DA $F401
|
||||||
|
.DA $0701
|
||||||
|
.DA $0401
|
||||||
|
.DA $0401
|
||||||
|
.DA $142D
|
||||||
|
.DA $5321
|
||||||
|
.DA $0409
|
||||||
|
.DA $F405
|
||||||
|
.DA $F40D
|
||||||
|
.DA $0C01
|
||||||
|
.DA $0001
|
||||||
|
.DA $0001
|
||||||
|
.DA $0000
|
||||||
|
.DA $0409
|
||||||
|
.DA $4321
|
||||||
|
.DA $142D
|
||||||
|
.DA $040D
|
||||||
|
.DA $0401
|
||||||
|
.DA $0491
|
||||||
|
.DA $0403
|
||||||
|
.DA $0401
|
||||||
|
.DA $0411
|
||||||
|
.DA $0495
|
||||||
|
.DA $0401
|
||||||
|
.DA $0321
|
||||||
|
.DA $0401
|
||||||
|
BS.KW.OPT .AS "ABELSDFRV@"
|
||||||
|
BS.KW.OPT.PBITSLO
|
||||||
|
.DA #$80
|
||||||
|
.DA #$40
|
||||||
|
.DA #$20
|
||||||
|
.DA #$10
|
||||||
|
.DA #$04
|
||||||
|
.DA #$04
|
||||||
|
.DA #$02
|
||||||
|
.DA #$01
|
||||||
|
.DA #$00
|
||||||
|
.DA #$08
|
||||||
|
BS.KW.OPT.PBITSHI
|
||||||
|
.DA #$05
|
||||||
|
.DA #$12
|
||||||
|
.DA #$19
|
||||||
|
.DA #$21
|
||||||
|
.DA #$24
|
||||||
|
.DA #$28
|
||||||
|
.DA #$31
|
||||||
|
.DA #$39
|
||||||
|
.DA #$40
|
||||||
|
.DA #$45
|
||||||
|
BS.PRODOSTYPES.H
|
||||||
|
.DA #$FF
|
||||||
|
.DA #$FE
|
||||||
|
.DA #$FD
|
||||||
|
.DA #$FC
|
||||||
|
.DA #$FB
|
||||||
|
.DA #$FA
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$0F
|
||||||
|
.DA #$06
|
||||||
|
.DA #$04
|
||||||
|
.DA #$EF
|
||||||
|
.DA #$1A
|
||||||
|
.DA #$1B
|
||||||
|
.DA #$19
|
||||||
|
.DA #$B3
|
||||||
|
BS.PRODOSTYPES.ASC
|
||||||
|
.AS -"S16ADBASPAWPPASTXTBINDIRCMDINTIVRBASVARRELSYS"
|
||||||
|
BS.MONTHS .AS -"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
|
||||||
|
BS.NODATE .AS -"<NO DATE>"
|
||||||
|
BS.MLIERTBL .DA #$28
|
||||||
|
.DA #$2B
|
||||||
|
.DA #$40
|
||||||
|
.DA #$41
|
||||||
|
.DA #$42
|
||||||
|
.DA #$43
|
||||||
|
.DA #$44
|
||||||
|
.DA #$45
|
||||||
|
.DA #$46
|
||||||
|
.DA #$47
|
||||||
|
.DA #$48
|
||||||
|
.DA #$49
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$4C
|
||||||
|
.DA #$4D
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$50
|
||||||
|
.DA #$53
|
||||||
|
.DA #$56
|
||||||
|
BS.BIERRTBL .DA #$03
|
||||||
|
.DA #$04
|
||||||
|
.DA #$10
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$12
|
||||||
|
.DA #$06
|
||||||
|
.DA #$06
|
||||||
|
.DA #$07
|
||||||
|
.DA #$13
|
||||||
|
.DA #$09
|
||||||
|
.DA #$11
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$05
|
||||||
|
.DA #$02
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$14
|
||||||
|
.DA #$0B
|
||||||
|
.DA #$0C
|
||||||
|
BS.ERRCODES .DA #$08
|
||||||
|
.DA #$54
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$66
|
||||||
|
.DA #$6F
|
||||||
|
.DA #$75
|
||||||
|
.DA #$75
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$84
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$91
|
||||||
|
.DA #$9B
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$C9
|
||||||
|
.DA #$D1
|
||||||
|
.DA #$D9
|
||||||
|
.DA #$E1
|
||||||
|
.DA #$EC
|
||||||
|
BS.TBL6 .DA #$F3
|
||||||
|
.DA #$C1
|
||||||
|
.DA #$C3
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$C5
|
||||||
|
.DA #$C6
|
||||||
|
.DA #$C9
|
||||||
|
.DA #$CC
|
||||||
|
.DA #$CD
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$CF
|
||||||
|
.DA #$D2
|
||||||
|
.DA #$D4
|
||||||
|
.DA #$D5
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$00
|
||||||
|
.DA #$00
|
||||||
|
.DA #$C2
|
||||||
|
.DA #$C7
|
||||||
|
.DA #$C8
|
||||||
|
.DA #$CB
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$D3
|
||||||
|
.DA #$D6
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$D8
|
||||||
|
.DA #$D9
|
||||||
|
.DA #$AF
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$BA
|
||||||
|
BS.TBL7 .DA #$2A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$02
|
||||||
|
.DA #$03
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$10
|
||||||
|
.DA #$50
|
||||||
|
.DA #$57
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$2A
|
||||||
|
.DA #$80
|
||||||
|
.DA #$5D
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$18
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$10
|
||||||
|
.DA #$C0
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$54
|
||||||
|
.DA #$EE
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$1E
|
||||||
|
.DA #$8A
|
||||||
|
.DA #$36
|
||||||
|
.DA #$56
|
||||||
|
.DA #$43
|
||||||
|
.DA #$00
|
||||||
|
.DA #$2F
|
||||||
|
.DA #$2B
|
||||||
|
.DA #$41
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$3E
|
||||||
|
.DA #$00
|
||||||
|
.DA #$40
|
||||||
|
.DA #$49
|
||||||
|
.DA #$35
|
||||||
|
.DA #$67
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$06
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$4F
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$44
|
||||||
|
.DA #$0F
|
||||||
|
.DA #$00
|
||||||
|
.DA #$16
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$6E
|
||||||
|
.DA #$D0
|
||||||
|
.DA #$64
|
||||||
|
.DA #$30
|
||||||
|
.DA #$FE
|
||||||
|
.DA #$00
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$CA
|
||||||
|
.DA #$C1
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$01
|
||||||
|
.DA #$7A
|
||||||
|
.DA #$20
|
||||||
|
.DA #$40
|
||||||
|
.DA #$60
|
||||||
|
.DA #$FF
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$90
|
||||||
|
.DA #$24
|
||||||
|
.DA #$E4
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$E3
|
||||||
|
.DA #$40
|
||||||
|
.DA #$76
|
||||||
|
.DA #$24
|
||||||
|
.DA #$E2
|
||||||
|
.DA #$A9
|
||||||
|
.DA #$94
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$43
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$08
|
||||||
|
.DA #$B6
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$5B
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$42
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$3F
|
||||||
|
.DA #$49
|
||||||
|
.DA #$3E
|
||||||
|
.DA #$A5
|
||||||
|
.DA #$E3
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$1F
|
||||||
|
.DA #$05
|
||||||
|
.DA #$1C
|
||||||
|
.DA #$03
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$AD
|
||||||
|
.DA #$93
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$60
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$E4
|
||||||
|
.DA #$BB
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$36
|
||||||
|
.DA #$06
|
||||||
|
.DA #$04
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$7F
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E7
|
||||||
|
.DA #$A2
|
||||||
|
.DA #$04
|
||||||
|
.DA #$43
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$69
|
||||||
|
.DA #$07
|
||||||
|
.DA #$17
|
||||||
|
.DA #$63
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$51
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$84
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$1D
|
||||||
|
.DA #$55
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$06
|
||||||
|
.DA #$E1
|
||||||
|
.DA #$07
|
||||||
|
.DA #$16
|
||||||
|
.DA #$71
|
||||||
|
.DA #$01
|
||||||
|
.DA #$74
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$EC
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$05
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$86
|
||||||
|
.DA #$06
|
||||||
|
.DA #$81
|
||||||
|
.DA #$C2
|
||||||
|
.DA #$03
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$05
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$02
|
||||||
|
.DA #$B1
|
||||||
|
.DA #$8E
|
||||||
|
.DA #$CA
|
||||||
|
.DA #$AE
|
||||||
|
.DA #$71
|
||||||
|
.DA #$B0
|
||||||
|
.DA #$24
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$9A
|
||||||
|
.DA #$CE
|
||||||
|
.DA #$36
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$E2
|
||||||
|
.DA #$A8
|
||||||
|
.DA #$81
|
||||||
|
.DA #$93
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$9C
|
||||||
|
.DA #$10
|
||||||
|
.DA #$9E
|
||||||
|
.DA #$4B
|
||||||
|
.DA #$BA
|
||||||
|
.DA #$BF
|
||||||
|
.DA #$36
|
||||||
|
.DA #$B4
|
||||||
|
.DA #$2C
|
||||||
|
.DA #$AB
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$D7
|
||||||
|
.DA #$7F
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E9
|
||||||
|
.DA #$AC
|
||||||
|
.DA #$EA
|
||||||
|
.DA #$05
|
||||||
|
.DA #$49
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$3D
|
||||||
|
.DA #$05
|
||||||
|
.DA #$76
|
||||||
|
.DA #$21
|
||||||
|
.DA #$C4
|
||||||
|
.DA #$E5
|
||||||
|
.DA #$67
|
||||||
|
.DA #$4E
|
||||||
|
.DA #$91
|
||||||
|
.DA #$84
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$1D
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0A
|
||||||
|
.DA #$F0
|
||||||
|
.DA #$56
|
||||||
|
.DA #$74
|
||||||
|
.DA #$0C
|
||||||
|
.DA #$06
|
||||||
|
.DA #$0D
|
||||||
|
.DA #$E0
|
||||||
|
.DA #$6C
|
||||||
|
.DA #$67
|
||||||
|
.DA #$7E
|
||||||
|
.DA #$A0
|
||||||
|
.DA #$54
|
||||||
|
.DA #$9F
|
||||||
|
|
||||||
|
XBBB5 .BS 2
|
||||||
|
XBBB7 .BS 1
|
||||||
|
XBBB8 .BS 1
|
||||||
|
BS.IsIntCmdMTR ldy #$02
|
||||||
|
LBBBB lda BS.CMDBUF,y
|
||||||
|
cmp BS.MTR,y
|
||||||
|
bne LBBCF
|
||||||
|
dey
|
||||||
|
bpl LBBBB
|
||||||
|
jsr BS.SetState0
|
||||||
|
jsr MON.CLREOL
|
||||||
|
jmp MON.ENTERMON
|
||||||
|
LBBCF jmp BS.IsIntCmd
|
||||||
|
|
||||||
|
BS.MTR .AS "MTR"
|
||||||
|
BS.IVERSION .DA #5
|
||||||
|
|
||||||
|
BS.AS.HIMEMSave .BS 1
|
||||||
|
XBBD7 .BS 1
|
||||||
|
XBBD8 .BS 1
|
||||||
|
|
||||||
|
XBBD9 .DA #4
|
||||||
|
XBBDA .BS 1
|
||||||
|
XBBDB .BS 1
|
||||||
|
XBBDC .BS 1
|
||||||
|
XBBDD .BS 1
|
||||||
|
|
||||||
|
BS.TXTTAB .DA $0800
|
||||||
|
BS.MEMSIZE .DA $9600
|
||||||
|
|
||||||
|
XBBE2 .BS 1
|
||||||
|
XBBE3 .BS 1
|
||||||
|
|
||||||
|
BS.BAS.HDR .BS 5
|
||||||
|
XBBE9 .BS 1
|
||||||
|
XBBEA .BS 1
|
||||||
|
XBBEB .BS 1
|
||||||
|
XBBEC .BS 1
|
||||||
|
XBBED .BS 1
|
||||||
|
XBBEE .BS 1
|
||||||
|
XBBEF .BS 7
|
||||||
|
XBBF6 .BS 1
|
||||||
|
XBBF7 .BS 7
|
||||||
|
XBBFE .BS 1
|
||||||
|
XBBFF .BS 1
|
||||||
|
XBC00 .BS 3
|
||||||
|
BS.CALLX .BS 1
|
||||||
|
BS.GetCharSep .BS 1
|
||||||
|
BS.GetCharMax .BS 1
|
||||||
|
BS.KW.JMPADDR .BS 2
|
||||||
|
XBC08 .BS 1
|
||||||
|
XBC09 .BS 1
|
||||||
|
|
||||||
|
BS.TMPBUF4 .BS 4
|
||||||
|
|
||||||
|
XBC0E .BS 1
|
||||||
|
XBC0F .BS 1
|
||||||
|
XBC10 .BS 1
|
||||||
|
|
||||||
|
BS.CATWIDTH .BS 1
|
||||||
|
|
||||||
|
XBC12 .BS 1
|
||||||
|
XBC13 .BS 1
|
||||||
|
XBC14 .BS 1
|
||||||
|
XBC15 .BS 1
|
||||||
|
XBC16 .BS 1
|
||||||
|
|
||||||
|
BS.CMDBUF.LEN .BS 1
|
||||||
|
BS.CMDBUF .BS 65
|
||||||
|
|
||||||
|
XBC59 .BS 1
|
||||||
|
XBC5A .BS 1
|
||||||
|
XBC5B .BS 165
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.fx/basic.s.d
|
||||||
|
LOAD usr/src/basic.fx/basic.s
|
||||||
|
ASM
|
155
BASIC.FX/BASIC.S.GP..txt
Normal file
155
BASIC.FX/BASIC.S.GP..txt
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
GP.ENTRY jmp BS.ENTRY
|
||||||
|
GP.DOSCMD jmp BS.DOSCMD
|
||||||
|
GP.EXTRNCMD jmp GP.RTS
|
||||||
|
GP.ERROUT jmp BS.ERROUT
|
||||||
|
GP.PRINTERR jmp BS.PRINTERR
|
||||||
|
GP.ERRCODE .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
GP.OUTVECT0 .DA MON.COUT1
|
||||||
|
GP.OUTVECT1 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT2 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT3 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT4 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT5 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT6 .DA BS.NODEVERR
|
||||||
|
GP.OUTVECT7 .DA BS.NODEVERR
|
||||||
|
GP.INVECT0 .DA MON.KEYIN
|
||||||
|
GP.INVECT1 .DA BS.NODEVERR
|
||||||
|
GP.INVECT2 .DA BS.NODEVERR
|
||||||
|
GP.INVECT3 .DA BS.NODEVERR
|
||||||
|
GP.INVECT4 .DA BS.NODEVERR
|
||||||
|
GP.INVECT5 .DA BS.NODEVERR
|
||||||
|
GP.INVECT6 .DA BS.NODEVERR
|
||||||
|
GP.INVECT7 .DA BS.NODEVERR
|
||||||
|
GP.VECTOUT .DA MON.COUT1
|
||||||
|
GP.VECTIN .DA MON.KEYIN
|
||||||
|
GP.VDOSO .DA BS.JMP.GP.VSYSO
|
||||||
|
GP.VDOSI .DA BS.JMP.GP.VSYSI
|
||||||
|
GP.VSYSO .BS 2
|
||||||
|
GP.VSYSI .BS 2
|
||||||
|
GP.VDEFSLT .DA #6
|
||||||
|
GP.VDEFDRV .DA #1
|
||||||
|
GP.PREGA .BS 1
|
||||||
|
GP.PREGX .BS 1
|
||||||
|
GP.PREGY .BS 1
|
||||||
|
GP.DTRACE .BS 1
|
||||||
|
GP.STATE .BS 1
|
||||||
|
GP.EXECACTV .BS 1
|
||||||
|
GP.IFILACTV .BS 1
|
||||||
|
GP.OFILACTV .BS 1
|
||||||
|
GP.PFXACTV .BS 1
|
||||||
|
GP.DIRFLG .BS 1
|
||||||
|
GP.EDIRFLG .BS 1
|
||||||
|
GP.STRINGS .BS 1
|
||||||
|
GP.TBUFPTR .BS 1
|
||||||
|
GP.INPTR .BS 1
|
||||||
|
GP.CHRLAST .BS 1
|
||||||
|
GP.OPENCNT .BS 1
|
||||||
|
GP.EXECFILE .BS 1
|
||||||
|
GP.CATFLAG .BS 1
|
||||||
|
GP.XTRNADDR .BS 2
|
||||||
|
GP.XLEN .BS 1
|
||||||
|
GP.XCNUM .BS 1
|
||||||
|
GP.AllowedBITS .BS 2
|
||||||
|
GP.FoundBITS .BS 2
|
||||||
|
GP.ParamA .BS 2
|
||||||
|
GP.ParamB .BS 3
|
||||||
|
GP.ParamE .BS 2
|
||||||
|
GP.ParamL .BS 2
|
||||||
|
GP.ParamS .BS 1
|
||||||
|
GP.ParamD .BS 1
|
||||||
|
GP.ParamF .BS 2
|
||||||
|
GP.ParamR .BS 2
|
||||||
|
GP.ParamV .BS 1
|
||||||
|
GP.ParamAT .BS 2
|
||||||
|
GP.ParamT .BS 1
|
||||||
|
GP.ParamINPR .BS 1
|
||||||
|
GP.VPATH1 .DA BS.CMDBUF.LEN
|
||||||
|
GP.VPATH2 .DA MLI.PATHBUF
|
||||||
|
*--------------------------------------
|
||||||
|
GP.GOSYSTEM sta GP.GOSYSTEM.C
|
||||||
|
stx BS.CALLX
|
||||||
|
and #$1F
|
||||||
|
tax
|
||||||
|
lda BS.ParamLByte,x
|
||||||
|
sta GP.GOSYSTEM.P
|
||||||
|
ldx BS.CALLX
|
||||||
|
jsr MLI
|
||||||
|
GP.GOSYSTEM.C .BS 1
|
||||||
|
GP.GOSYSTEM.P .DA GP.GOSYSTEM.P
|
||||||
|
bcs GP.BADCALL
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.BADCALL ldx #$12
|
||||||
|
|
||||||
|
LBE8D cmp BS.MLIERTBL,x
|
||||||
|
beq LBE97
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl LBE8D
|
||||||
|
|
||||||
|
ldx #$13
|
||||||
|
|
||||||
|
LBE97 lda BS.BIERRTBL,x
|
||||||
|
ldx BS.CALLX
|
||||||
|
sec
|
||||||
|
|
||||||
|
GP.RTS rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.CISPARE1 .BS 1
|
||||||
|
GP.SCREATE .DA #7
|
||||||
|
GP.SCREATEPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.CRACCESS .DA #$C3
|
||||||
|
GP.CRTYPE .BS 1
|
||||||
|
GP.CRAUXTYPE .BS 2
|
||||||
|
GP.CRSTTYPE .BS 1
|
||||||
|
GP.DATETIME .BS 4
|
||||||
|
GP.SDSTROY .DA #1
|
||||||
|
GP.SDSTROYPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.SRECNAME .DA #2
|
||||||
|
GP.SRECNAMEOLD .DA BS.CMDBUF.LEN
|
||||||
|
GP.SRECNAMENEW .DA MLI.PATHBUF
|
||||||
|
GP.SSGINFO .BS 1
|
||||||
|
GP.SSGINFOPATH .DA BS.CMDBUF.LEN
|
||||||
|
GP.FIACCESS .BS 1
|
||||||
|
GP.FITYPE .BS 1
|
||||||
|
GP.FIAUXTYPE .BS 2
|
||||||
|
GP.STTYPE .BS 1
|
||||||
|
GP.FIBLOKS .BS 2
|
||||||
|
GP.FIMDATE .BS 2
|
||||||
|
GP.FICDATE .BS 2
|
||||||
|
|
||||||
|
.BS 4
|
||||||
|
|
||||||
|
GP.MLIMRKEOFBUF .DA #2
|
||||||
|
GP.MLIMRKEOFBUF.REFNUM
|
||||||
|
.BS 1
|
||||||
|
GP.SBUFADR .BS 3
|
||||||
|
GP.SOPEN .DA #3
|
||||||
|
GP.TXTBUF .DA BS.CMDBUF.LEN
|
||||||
|
GP.OSYSBUF .BS 2
|
||||||
|
GP.OREFNUM .BS 1
|
||||||
|
GP.SNEWLIN .DA #3
|
||||||
|
GP.NEWLREF .BS 1
|
||||||
|
GP.NLINEMASK .DA #$7F
|
||||||
|
GP.NLINECHAR .DA #13
|
||||||
|
GP.MLIRW .DA #4
|
||||||
|
GP.MLIRW.REFNUM .BS 1
|
||||||
|
GP.MLIRW.DATAPTR .BS 2
|
||||||
|
GP.MLIRW.COUNT .BS 2
|
||||||
|
GP.MLIRW.TRANS .BS 2
|
||||||
|
GP.MLICF .DA #1
|
||||||
|
GP.MLICF.REFNUM .BS 1
|
||||||
|
GP.CCCSPARE .BS 1
|
||||||
|
GP.COPYRIGHT .AS -"COPYRIGHT APPLE, 1983"
|
||||||
|
GP.GETBUFR jmp BS.GETBUFR
|
||||||
|
GP.FREEBUFR jmp BS.FREEBUFR
|
||||||
|
GP.RSHIMEM .BS 5
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.fx/basic.s.gp
|
||||||
|
LOAD usr/src/basic.fx/basic.s
|
||||||
|
ASM
|
310
BASIC.FX/BASIC.S.LDR.txt
Normal file
310
BASIC.FX/BASIC.S.LDR.txt
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
LDR.START jmp LDR.START1
|
||||||
|
LDR.SIG .DA $EEEE
|
||||||
|
.DA #MLI.MAXPATH+1
|
||||||
|
LDR.STARTUP.LEN .DA #7
|
||||||
|
LDR.STARTUP .AS "STARTUP"
|
||||||
|
.BS MLI.MAXPATH-7
|
||||||
|
LDR.START1 lda #$9A
|
||||||
|
sta Ptr2+1
|
||||||
|
lda #$24
|
||||||
|
sta Ptr1+1
|
||||||
|
lda #$00
|
||||||
|
sta Ptr1
|
||||||
|
sta Ptr2
|
||||||
|
ldx #$23
|
||||||
|
tay
|
||||||
|
jsr LDR.MoveXpages
|
||||||
|
ldx #$01
|
||||||
|
lda #$BE
|
||||||
|
sta Ptr2+1
|
||||||
|
jsr LDR.MoveXpages
|
||||||
|
lda #$15
|
||||||
|
jsr MON.COUT
|
||||||
|
jsr MON.SETNORM
|
||||||
|
jsr MON.INIT
|
||||||
|
jsr MON.MON
|
||||||
|
ldx #$17
|
||||||
|
lda #$00
|
||||||
|
|
||||||
|
L2076 sta MLI.MEMTABL,x
|
||||||
|
dex
|
||||||
|
bne L2076
|
||||||
|
|
||||||
|
lda #$CF
|
||||||
|
sta MLI.MEMTABL
|
||||||
|
lda #$3F
|
||||||
|
sta MLI.MEMTABL+19
|
||||||
|
lda #$FF
|
||||||
|
sta MLI.MEMTABL+20
|
||||||
|
sta MLI.MEMTABL+21
|
||||||
|
sta MLI.MEMTABL+22
|
||||||
|
lda #$C3
|
||||||
|
sta MLI.MEMTABL+23
|
||||||
|
lda AS.COLDBOOT
|
||||||
|
cmp #$4C
|
||||||
|
bne L20B1
|
||||||
|
|
||||||
|
lda MLI.MACHID
|
||||||
|
and #$20
|
||||||
|
beq L20B1
|
||||||
|
|
||||||
|
ldx #$03
|
||||||
|
|
||||||
|
L20A6 lda LDR.CSWVECT,x
|
||||||
|
sta ZP.CSW,x
|
||||||
|
dex
|
||||||
|
bpl L20A6
|
||||||
|
|
||||||
|
jmp AS.COLDBOOT
|
||||||
|
|
||||||
|
L20B1 ldx #$27
|
||||||
|
|
||||||
|
L20B3 lda LDR.UNABLE,x
|
||||||
|
sta $628,x
|
||||||
|
dex
|
||||||
|
bpl L20B3
|
||||||
|
|
||||||
|
sta MON.POWERUPBYTE
|
||||||
|
sta MON.POWERUP+1
|
||||||
|
|
||||||
|
L20C2 bmi L20C2
|
||||||
|
|
||||||
|
LDR.MoveXpages dey
|
||||||
|
lda (Ptr1),y
|
||||||
|
sta (Ptr2),y
|
||||||
|
tya
|
||||||
|
bne LDR.MoveXpages
|
||||||
|
|
||||||
|
inc Ptr1+1
|
||||||
|
inc Ptr2+1
|
||||||
|
dex
|
||||||
|
bne LDR.MoveXpages
|
||||||
|
|
||||||
|
L20D3 rts
|
||||||
|
|
||||||
|
LDR.CSW cmp #$DD
|
||||||
|
bne L20D3
|
||||||
|
|
||||||
|
lda GP.OUTVECT0
|
||||||
|
sta ZP.CSW
|
||||||
|
lda GP.OUTVECT0+1
|
||||||
|
sta ZP.CSW+1
|
||||||
|
lda MLI.DEVNUM
|
||||||
|
sta LDR.ONLINE.P.DEVNUM
|
||||||
|
ldx #$01
|
||||||
|
asl
|
||||||
|
bcc L20EE
|
||||||
|
|
||||||
|
inx
|
||||||
|
|
||||||
|
L20EE stx GP.VDEFDRV
|
||||||
|
asl
|
||||||
|
rol
|
||||||
|
rol
|
||||||
|
rol
|
||||||
|
and #$07
|
||||||
|
sta GP.VDEFSLT
|
||||||
|
ldx #$C1
|
||||||
|
ldy #$02
|
||||||
|
lda MLI.SLTBYT
|
||||||
|
lsr
|
||||||
|
|
||||||
|
L2102 lsr
|
||||||
|
pha
|
||||||
|
bcc L2115
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta GP.OUTVECT0,y
|
||||||
|
sta GP.INVECT0,y
|
||||||
|
txa
|
||||||
|
sta GP.OUTVECT0+1,y
|
||||||
|
sta GP.INVECT0+1,y
|
||||||
|
|
||||||
|
L2115 iny
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
pla
|
||||||
|
bne L2102
|
||||||
|
|
||||||
|
lda #$96
|
||||||
|
sta AS.HIMEM+1
|
||||||
|
sta AS.STRINGSTART+1
|
||||||
|
sta GP.RSHIMEM
|
||||||
|
lda MLI.PFIXPTR
|
||||||
|
beq L214E
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.GETPREFIX
|
||||||
|
.DA LDR.GETSETPFX2.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
ldx MLI.PATHBUF
|
||||||
|
lda #$2F
|
||||||
|
|
||||||
|
L2136 cmp MLI.PATHBUF,x
|
||||||
|
bne L213E
|
||||||
|
|
||||||
|
inc LDR.PFXLEN
|
||||||
|
|
||||||
|
L213E dex
|
||||||
|
bne L2136
|
||||||
|
|
||||||
|
lda LDR.PFXLEN
|
||||||
|
cmp #$03
|
||||||
|
bcs L216F
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX1.P
|
||||||
|
|
||||||
|
L214E jsr MLI
|
||||||
|
.DA #MLI.C.ONLINE
|
||||||
|
.DA LDR.ONLINE.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
lda MLI.PATHBUF+1
|
||||||
|
and #$0F
|
||||||
|
beq L218B
|
||||||
|
|
||||||
|
tax
|
||||||
|
inx
|
||||||
|
stx MLI.PATHBUF
|
||||||
|
lda #$2F
|
||||||
|
sta MLI.PATHBUF+1
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX2.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
L216F jsr MLI
|
||||||
|
.DA #MLI.C.GETFILEINFO
|
||||||
|
.DA LDR.GFINFO.P
|
||||||
|
bne L218B
|
||||||
|
|
||||||
|
ldx LDR.STARTUP.LEN
|
||||||
|
stx LDR.STARTUP.LEN1
|
||||||
|
|
||||||
|
L217D lda LDR.STARTUP.LEN,x
|
||||||
|
sta IO.LINEBUF,x
|
||||||
|
dex
|
||||||
|
bne L217D
|
||||||
|
|
||||||
|
lda #$AD
|
||||||
|
sta IO.LINEBUF
|
||||||
|
|
||||||
|
L218B lda LDR.PFXLEN
|
||||||
|
cmp #$03
|
||||||
|
bcs L2198
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLI.C.SETPREFIX
|
||||||
|
.DA LDR.GETSETPFX1.P
|
||||||
|
|
||||||
|
L2198 lda LDR.STARTUP.LEN1
|
||||||
|
bne L21C1
|
||||||
|
|
||||||
|
jsr LDR.KSW
|
||||||
|
ldx #$1C
|
||||||
|
|
||||||
|
L21A2 lda LDR.PRODOSBASIC,x
|
||||||
|
sta $400,x
|
||||||
|
dex
|
||||||
|
bpl L21A2
|
||||||
|
|
||||||
|
ldx #$1F
|
||||||
|
|
||||||
|
L21AD lda LDR.COPYRIGHT,x
|
||||||
|
sta $480,x
|
||||||
|
dex
|
||||||
|
bpl L21AD
|
||||||
|
|
||||||
|
lda #$8D
|
||||||
|
jsr MON.COUT1
|
||||||
|
jsr MON.COUT1
|
||||||
|
jsr MON.COUT1
|
||||||
|
|
||||||
|
L21C1 ldx #$02
|
||||||
|
L21C3 lda LDR.JMP.GP.ENTRY,x
|
||||||
|
sta DOS.WARMSTART,x
|
||||||
|
sta DOS.COLDSTART,x
|
||||||
|
sta MON.USRJMP,x
|
||||||
|
lda LDR.AMPERSANDJMP,x
|
||||||
|
sta MON.AMPERSANDJMP,x
|
||||||
|
dex
|
||||||
|
bpl L21C3
|
||||||
|
|
||||||
|
lda LDR.BRKVECT
|
||||||
|
sta MON.BRKVECT
|
||||||
|
lda LDR.BRKVECT+1
|
||||||
|
sta MON.BRKVECT+1
|
||||||
|
lda LDR.POWERUP
|
||||||
|
sta MON.POWERUP
|
||||||
|
lda LDR.POWERUP+1
|
||||||
|
sta MON.POWERUP+1
|
||||||
|
eor #$A5
|
||||||
|
sta MON.POWERUPBYTE
|
||||||
|
lda #$A5
|
||||||
|
sta AS.TRCFLG
|
||||||
|
lda BS.IVERSION
|
||||||
|
sta MLI.IVERSION
|
||||||
|
|
||||||
|
LDR.JMP.GP.ENTRY
|
||||||
|
jmp GP.ENTRY
|
||||||
|
|
||||||
|
LDR.BRKVECT .DA MON.BREAKV
|
||||||
|
LDR.POWERUP .DA GP.ENTRY
|
||||||
|
|
||||||
|
LDR.AMPERSANDJMP
|
||||||
|
jmp GP.DOSCMD
|
||||||
|
|
||||||
|
LDR.KSW lda GP.INVECT0
|
||||||
|
sta ZP.KSW
|
||||||
|
lda GP.INVECT0+1
|
||||||
|
sta ZP.KSW+1
|
||||||
|
ldx LDR.STARTUP.LEN
|
||||||
|
inx
|
||||||
|
lda #$8D
|
||||||
|
rts
|
||||||
|
|
||||||
|
LDR.CSWVECT .DA LDR.CSW
|
||||||
|
LDR.KSWVECT .DA LDR.KSW
|
||||||
|
LDR.GFINFO.P .DA #10
|
||||||
|
LDR.GFINFO.P.PATHBUF
|
||||||
|
.DA LDR.STARTUP.LEN
|
||||||
|
|
||||||
|
.BS 16
|
||||||
|
|
||||||
|
LDR.GETSETPFX1.P
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX1.P.BUF
|
||||||
|
.DA LDR.GETSETPFX1.SLASHLEN
|
||||||
|
LDR.GETSETPFX1.SLASHLEN
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX1.SLASH
|
||||||
|
.AS "/"
|
||||||
|
LDR.STARTUP.LEN1
|
||||||
|
.DA #0
|
||||||
|
LDR.ONLINE.P
|
||||||
|
.DA #2
|
||||||
|
LDR.ONLINE.P.DEVNUM
|
||||||
|
.DA #$70
|
||||||
|
LDR.ONLINE.P.BUF
|
||||||
|
.DA MLI.PATHBUF+1
|
||||||
|
LDR.GETSETPFX2.P
|
||||||
|
.DA #1
|
||||||
|
LDR.GETSETPFX2.P.BUF
|
||||||
|
.DA MLI.PATHBUF
|
||||||
|
LDR.PFXLEN .DA #0
|
||||||
|
|
||||||
|
LDR.UNABLE .AS -"*** UNABLE TO EXECUTE BASIC SYSTEM ***"
|
||||||
|
LDR.PRODOSBASIC .AS -" PRODOS BASIC 1.5 "
|
||||||
|
LDR.COPYRIGHT .AS -" COPYRIGHT APPLE 1983-92"
|
||||||
|
.BS $2400-*
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.fx/basic.s.ldr
|
||||||
|
LOAD usr/src/basic.fx/basic.s
|
||||||
|
ASM
|
163
BASIC.FX/BASIC.S.txt
Normal file
163
BASIC.FX/BASIC.S.txt
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
.OP 6502
|
||||||
|
.OR $2000
|
||||||
|
.TF BASIC.FX,TSYS
|
||||||
|
*--------------------------------------
|
||||||
|
Ptr1 .EQ 0
|
||||||
|
Ptr2 .EQ 2
|
||||||
|
|
||||||
|
ZP.WNDLFT .EQ $20
|
||||||
|
ZP.WNDWDT .EQ $21
|
||||||
|
ZP.WNDTOP .EQ $22
|
||||||
|
ZP.WNDBOT .EQ $23
|
||||||
|
ZP.CH .EQ $24
|
||||||
|
ZP.CV .EQ $25
|
||||||
|
ZP.BASL .EQ $28
|
||||||
|
ZP.BASH .EQ $29
|
||||||
|
|
||||||
|
ZP.PROMPT .EQ $33
|
||||||
|
|
||||||
|
ZP.CSW .EQ $36
|
||||||
|
ZP.KSW .EQ $38
|
||||||
|
|
||||||
|
ZP.PCL .EQ $3A
|
||||||
|
ZP.PCH .EQ $3B
|
||||||
|
ZP.A1L .EQ $3C
|
||||||
|
ZP.A1H .EQ $3D
|
||||||
|
ZP.A2L .EQ $3E
|
||||||
|
ZP.A2H .EQ $3F
|
||||||
|
|
||||||
|
AS.LINNUM .EQ $50
|
||||||
|
AS.PGRMSTART .EQ $67
|
||||||
|
AS.VARSTART .EQ $69
|
||||||
|
AS.ARRAYSTART .EQ $6B
|
||||||
|
AS.ARRAYEND .EQ $6D
|
||||||
|
AS.STRINGSTART .EQ $6F
|
||||||
|
AS.STRINGPTR .EQ $71
|
||||||
|
AS.HIMEM .EQ $73
|
||||||
|
AS.CURLINE .EQ $75
|
||||||
|
AS.LOWTR .EQ $9B
|
||||||
|
AS.PGRMEND .EQ $AF
|
||||||
|
AS.TXTPTR .EQ $B8
|
||||||
|
AS.ERRFLG .EQ $D8
|
||||||
|
AS.ERRNUM .EQ $DE
|
||||||
|
AS.TRCFLG .EQ $F2
|
||||||
|
AS.REMSTK .EQ $F8
|
||||||
|
*--------------------------------------
|
||||||
|
IO.LINEBUF .EQ $200
|
||||||
|
*--------------------------------------
|
||||||
|
DIRENTBUF .EQ $259
|
||||||
|
DIRENTBUF.STNL .EQ $25D
|
||||||
|
DIRENTBUF.TYPE .EQ $269
|
||||||
|
|
||||||
|
DIRENTBUF.UBLK .EQ $26C
|
||||||
|
DIRENTBUF.EOF .EQ $26E
|
||||||
|
|
||||||
|
DIRENTBUF.ACCESS .EQ $277
|
||||||
|
DIRENTBUF.AUXT .EQ $278
|
||||||
|
|
||||||
|
MLI.PATHBUF .EQ $280
|
||||||
|
*--------------------------------------
|
||||||
|
DOS.WARMSTART .EQ $03D0
|
||||||
|
DOS.COLDSTART .EQ $03D3
|
||||||
|
DOS.FILEMGR .EQ $03D6
|
||||||
|
DOS.RWTS .EQ $03D9
|
||||||
|
DOS.FILEMGRPARM .EQ $03DC
|
||||||
|
DOS.RWTSPARM .EQ $03E3
|
||||||
|
DOS.RECONNECT .EQ $03DA
|
||||||
|
DOS.JMPBRKVECT .EQ $03EF
|
||||||
|
|
||||||
|
MON.AMPERSANDJMP .EQ $03F5
|
||||||
|
MON.USRJMP .EQ $03F8
|
||||||
|
MON.NMIJMP .EQ $03FB
|
||||||
|
MON.IRQVECT .EQ $03FE
|
||||||
|
MON.BRKVECT .EQ $03F0
|
||||||
|
MON.POWERUP .EQ $03F2
|
||||||
|
MON.POWERUPBYTE .EQ $03F4
|
||||||
|
*--------------------------------------
|
||||||
|
MLI.MAXPATH .EQ 64
|
||||||
|
MLI.C.ALLOCIRQ .EQ $40
|
||||||
|
MLI.C.DEALLOCIRQ .EQ $41
|
||||||
|
MLI.C.ATALK .EQ $42
|
||||||
|
MLI.C.QUIT .EQ $65
|
||||||
|
MLI.C.READBLOCK .EQ $80
|
||||||
|
MLI.C.WRITEBLOCK .EQ $81
|
||||||
|
MLI.C.GETTIME .EQ $82
|
||||||
|
MLI.C.CREATE .EQ $C0
|
||||||
|
MLI.C.DESTROY .EQ $C1
|
||||||
|
MLI.C.RENAME .EQ $C2
|
||||||
|
MLI.C.SETFILEINFO .EQ $C3
|
||||||
|
MLI.C.GETFILEINFO .EQ $C4
|
||||||
|
MLI.C.ONLINE .EQ $C5
|
||||||
|
MLI.C.SETPREFIX .EQ $C6
|
||||||
|
MLI.C.GETPREFIX .EQ $C7
|
||||||
|
MLI.C.OPEN .EQ $C8
|
||||||
|
MLI.C.NEWLINE .EQ $C9
|
||||||
|
MLI.C.READ .EQ $CA
|
||||||
|
MLI.C.WRITE .EQ $CB
|
||||||
|
MLI.C.CLOSE .EQ $CC
|
||||||
|
MLI.C.FLUSH .EQ $CD
|
||||||
|
MLI.C.SETMARK .EQ $CE
|
||||||
|
MLI.C.GETMARK .EQ $CF
|
||||||
|
MLI.C.SETEOF .EQ $D0
|
||||||
|
MLI.C.GETEOF .EQ $D1
|
||||||
|
MLI.C.SETBUF .EQ $D2
|
||||||
|
MLI.C.GETBUF .EQ $D3
|
||||||
|
*--------------------------------------
|
||||||
|
MLI .EQ $BF00
|
||||||
|
MLI.DEVNUM .EQ $BF30
|
||||||
|
MLI.DEVCNT .EQ $BF31
|
||||||
|
MLI.DEVLST .EQ $BF32
|
||||||
|
MLI.MEMTABL .EQ $BF58
|
||||||
|
MLI.LEVEL .EQ $BF94
|
||||||
|
MLI.MACHID .EQ $BF98
|
||||||
|
MLI.SLTBYT .EQ $BF99
|
||||||
|
MLI.PFIXPTR .EQ $BF9A
|
||||||
|
MLI.MLIACTV .EQ $BF9B
|
||||||
|
MLI.IVERSION .EQ $BFFD
|
||||||
|
*--------------------------------------
|
||||||
|
IO.KBD .EQ $C000
|
||||||
|
IO.KSTROBE .EQ $C010
|
||||||
|
*--------------------------------------
|
||||||
|
AS.RESTART .EQ $D43C
|
||||||
|
AS.RESTART1 .EQ $D43F
|
||||||
|
AS.FINDLINE .EQ $D61A
|
||||||
|
AS.CLEAR1 .EQ $D665
|
||||||
|
AS.NEXTSTMT .EQ $D7D2
|
||||||
|
AS.EXECSTMT .EQ $D820
|
||||||
|
AS.BITERRFLG .EQ $D865
|
||||||
|
AS.NORMAL .EQ $F273
|
||||||
|
AS.COLDBOOT .EQ $E000
|
||||||
|
AS.INTPRINTAX .EQ $ED24
|
||||||
|
*--------------------------------------
|
||||||
|
MON.BREAKV .EQ $FA59
|
||||||
|
MON.INIT .EQ $FB2F
|
||||||
|
MON.MON .EQ $FC58
|
||||||
|
MON.CLREOL .EQ $FC9C
|
||||||
|
MON.RDKEY .EQ $FD0C
|
||||||
|
MON.KEYIN0 .EQ $FD10
|
||||||
|
MON.KEYIN .EQ $FD1B
|
||||||
|
MON.GETLN .EQ $FD6A
|
||||||
|
MON.COUT .EQ $FDED
|
||||||
|
MON.COUT1 .EQ $FDF0
|
||||||
|
MON.IIGSID .EQ $FE1F
|
||||||
|
MON.SETINV .EQ $FE80
|
||||||
|
MON.SETNORM .EQ $FE84
|
||||||
|
MON.ENTERMON .EQ $FF69
|
||||||
|
*--------------------------------------
|
||||||
|
.INB usr/src/basic.fx/basic.s.ldr
|
||||||
|
LDR.9A00.CODE .PH $9A00
|
||||||
|
.INB usr/src/basic.fx/basic.s.a
|
||||||
|
.INB usr/src/basic.fx/basic.s.b
|
||||||
|
.INB usr/src/basic.fx/basic.s.c
|
||||||
|
.INB usr/src/basic.fx/basic.s.d
|
||||||
|
.EP
|
||||||
|
LDR.BE00.CODE .PH $BE00
|
||||||
|
.INB usr/src/basic.fx/basic.s.gp
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/basic.fx/basic.s
|
||||||
|
ASM
|
@ -232,7 +232,9 @@ CC.F.CallRetV sec
|
|||||||
lda #0 Expected T/Q = 0 if VARIADIC
|
lda #0 Expected T/Q = 0 if VARIADIC
|
||||||
tay
|
tay
|
||||||
|
|
||||||
.4 jsr CC.EXP.Eval
|
.4 and #$F0 CONST+VOLATILE+FUNC+FASTCALL
|
||||||
|
|
||||||
|
jsr CC.EXP.Eval
|
||||||
bcs .93
|
bcs .93
|
||||||
|
|
||||||
jsr CC.SYM.GetYASizeOfInAXC
|
jsr CC.SYM.GetYASizeOfInAXC
|
||||||
|
361
BIN/CHAUX.S.txt
Normal file
361
BIN/CHAUX.S.txt
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
.OR $2000
|
||||||
|
.TF bin/chaux
|
||||||
|
*--------------------------------------
|
||||||
|
.INB inc/macros.i
|
||||||
|
.INB inc/a2osx.i
|
||||||
|
.INB inc/mli.i
|
||||||
|
.INB inc/mli.e.i
|
||||||
|
*--------------------------------------
|
||||||
|
X.ENTER.SUBDIR .EQ 0
|
||||||
|
X.COPY.TO.DEST .EQ 0
|
||||||
|
X.DELETE.SOURCE .EQ 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Zero Page Segment, up to 32 bytes
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR ZPBIN
|
||||||
|
ZS.START
|
||||||
|
|
||||||
|
ZPPtr1 .BS 2
|
||||||
|
ZPPtr2 .BS 2
|
||||||
|
ZPFileName .BS 2
|
||||||
|
ZPFileStat .BS 2
|
||||||
|
|
||||||
|
ZPFullPath .BS 2
|
||||||
|
|
||||||
|
ArgIndex .BS 1
|
||||||
|
bAuxFileType .BS 1
|
||||||
|
AuxFileType .BS 2
|
||||||
|
|
||||||
|
hSrcFullPath .BS 1
|
||||||
|
bPause .BS 1
|
||||||
|
|
||||||
|
bContinue .BS 1
|
||||||
|
bRecurse .BS 1
|
||||||
|
|
||||||
|
ZS.END .ED
|
||||||
|
*--------------------------------------
|
||||||
|
* File Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.START cld
|
||||||
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA #0 S.PS.F.EVENT
|
||||||
|
.DA #0
|
||||||
|
.DA CS.END-CS.START Code Size (without Constants)
|
||||||
|
.DA DS.END-DS.START Data SegmentSize
|
||||||
|
.DA #16 Stack Size
|
||||||
|
.DA #ZS.END-ZS.START Zero Page Size
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
*--------------------------------------
|
||||||
|
L.MSG.USAGE .DA MSG.USAGE
|
||||||
|
L.MSG.FILE .DA MSG.FILE
|
||||||
|
L.MSG.OK .DA MSG.OK
|
||||||
|
L.MSG.ERR .DA MSG.ERR
|
||||||
|
L.SSCANF.D .DA SSCANF.D
|
||||||
|
L.SSCANF.H .DA SSCANF.H
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN inc ArgIndex
|
||||||
|
lda ArgIndex
|
||||||
|
>SYSCALL ArgV
|
||||||
|
bcs .7
|
||||||
|
|
||||||
|
>STYA ZPPtr1
|
||||||
|
lda (ZPPtr1)
|
||||||
|
cmp #'-'
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
|
||||||
|
ldx #OptionVars-OptionList-1
|
||||||
|
.2 cmp OptionList,x
|
||||||
|
beq .3
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
.99 >PUSHW L.MSG.USAGE
|
||||||
|
>PUSHBI 0
|
||||||
|
>SYSCALL PrintF
|
||||||
|
lda #E.SYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.3 ldy OptionVars,x
|
||||||
|
lda #$80
|
||||||
|
sta $0,y
|
||||||
|
bra CS.RUN
|
||||||
|
*--------------------------------------
|
||||||
|
.4 bit bAuxFileType
|
||||||
|
bmi .5
|
||||||
|
|
||||||
|
jsr GetAuxType
|
||||||
|
bcs .99
|
||||||
|
bra CS.RUN
|
||||||
|
|
||||||
|
.5 >LDA.G hSrcBasePath
|
||||||
|
bne .99
|
||||||
|
|
||||||
|
>LDYA ZPPtr1
|
||||||
|
jsr InitSrcDirYA
|
||||||
|
bcs .99
|
||||||
|
bra CS.RUN
|
||||||
|
*--------------------------------------
|
||||||
|
.7 >LDA.G hSrcBasePath
|
||||||
|
beq .99 no src ? ERROR
|
||||||
|
|
||||||
|
bit bAuxFileType
|
||||||
|
bpl .99 we also have a TYPE
|
||||||
|
|
||||||
|
>LDYAI 256
|
||||||
|
>SYSCALL GetMem
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>STYA ZPFullPath
|
||||||
|
stx hSrcFullPath
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.LOOP ldy #S.PS.hStdIn
|
||||||
|
lda (pPS),y
|
||||||
|
>SYSCALL FEOF
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
tay
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
>SYSCALL GetChar
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
cmp #$03 Ctrl-C
|
||||||
|
beq .99 Abort....
|
||||||
|
|
||||||
|
cmp #$13 Ctrl-S
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda bPause
|
||||||
|
eor #$ff
|
||||||
|
sta bPause
|
||||||
|
bne CS.RUN.LOOP
|
||||||
|
|
||||||
|
.1 bit bPause
|
||||||
|
bmi CS.RUN.LOOP Pause...
|
||||||
|
*--------------------------------------
|
||||||
|
jsr GetEntry
|
||||||
|
bcs CS.RUN.LEAVE
|
||||||
|
|
||||||
|
jsr FilterMatch
|
||||||
|
bcs CS.RUN.NEXT no match, skip....
|
||||||
|
|
||||||
|
ldy #S.STAT.MODE+1
|
||||||
|
lda (ZPFileStat),y
|
||||||
|
and #$70
|
||||||
|
bne .5 REG file ?
|
||||||
|
|
||||||
|
jsr CS.RUN.FILE
|
||||||
|
bcc CS.RUN.NEXT
|
||||||
|
rts
|
||||||
|
|
||||||
|
.5 cmp /S.STAT.MODE.DIR DIR ?
|
||||||
|
bne .6
|
||||||
|
|
||||||
|
jsr CS.RUN.DIR
|
||||||
|
bcc CS.RUN.NEXT
|
||||||
|
rts
|
||||||
|
|
||||||
|
.6 lda #MLI.E.UNSUPST
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.NEXT jsr GetNextEntry
|
||||||
|
bcc CS.RUN.LOOP
|
||||||
|
|
||||||
|
CS.RUN.LEAVE jsr LeaveSubDir
|
||||||
|
bcs .90
|
||||||
|
|
||||||
|
jsr BasePath..
|
||||||
|
|
||||||
|
jmp CS.RUN.NEXT
|
||||||
|
|
||||||
|
.90 lda #0
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.DIR bit bRecurse
|
||||||
|
bpl .8
|
||||||
|
|
||||||
|
lda (ZPFileName)
|
||||||
|
cmp #'.'
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
lda (ZPFileName),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
cmp #'.'
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ZPFileName),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
.1 jsr CS.RUN.GetFilePath
|
||||||
|
|
||||||
|
>LDYA ZPFileName
|
||||||
|
jmp EnterSubDirYA
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.FILE jsr FilterMatch
|
||||||
|
bcs .8 no match, skip....
|
||||||
|
|
||||||
|
jsr CS.RUN.GetFilePath
|
||||||
|
|
||||||
|
>PUSHW L.MSG.FILE
|
||||||
|
>PUSHW ZPFullPath
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL PrintF
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>PUSHW ZPFullPath
|
||||||
|
|
||||||
|
>PUSHW AuxFileType
|
||||||
|
|
||||||
|
>SYSCALL ChAux
|
||||||
|
jsr CS.RUN.CheckErr
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.CheckErr bcs .1
|
||||||
|
|
||||||
|
>LDYA L.MSG.OK
|
||||||
|
>SYSCALL PutS
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 pha
|
||||||
|
>PUSHW L.MSG.ERR
|
||||||
|
pla
|
||||||
|
pha
|
||||||
|
>PUSHA
|
||||||
|
>PUSHBI 1
|
||||||
|
>SYSCALL PrintF
|
||||||
|
|
||||||
|
lda bContinue
|
||||||
|
eor #$80
|
||||||
|
asl
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.GetFilePath
|
||||||
|
>PUSHW ZPFullPath
|
||||||
|
>LDA.G hSrcBasePath
|
||||||
|
>SYSCALL GetMemPtr
|
||||||
|
>PUSHYA
|
||||||
|
>SYSCALL StrCpy
|
||||||
|
|
||||||
|
>PUSHW ZPFullPath
|
||||||
|
>PUSHW ZPFileName
|
||||||
|
>SYSCALL StrCat
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT jsr LeaveSubDir
|
||||||
|
bcc CS.QUIT
|
||||||
|
|
||||||
|
>LDA.G hFilter
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
>SYSCALL FreeMem
|
||||||
|
|
||||||
|
.1 lda hSrcFullPath
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
>SYSCALL FreeMem
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GetAuxType lda (ZPPtr1)
|
||||||
|
cmp #'0'
|
||||||
|
bcc .1
|
||||||
|
|
||||||
|
cmp #'9'+1
|
||||||
|
bcs .1
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
bra .7
|
||||||
|
|
||||||
|
.1 cmp #'x'
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
cmp #'X'
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
inc ZPPtr1
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
inc ZPPtr1+1
|
||||||
|
|
||||||
|
.2 ldx #2
|
||||||
|
|
||||||
|
.7 >PUSHW ZPPtr1
|
||||||
|
>PUSHW L.SSCANF.D,x
|
||||||
|
>PUSHWI AuxFileType
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL SScanF
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
cpy #1
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
dec bAuxFileType
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
.INB usr/src/shared/x.fileenum.s
|
||||||
|
*--------------------------------------
|
||||||
|
CS.END
|
||||||
|
*--------------------------------------
|
||||||
|
OptionList .AS "CRcr"
|
||||||
|
OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse
|
||||||
|
*--------------------------------------
|
||||||
|
MSG.USAGE .AS "Usage : CHTYP auxtype [File *,? wildcards allowed]\r\n"
|
||||||
|
.AS " auxtype : 12345 (Decimal word) ,xABCD (Hexadecimal word)\r\n"
|
||||||
|
.AS " -C : Continue on error\r\n"
|
||||||
|
.AZ " -R : Recurse subdirectories\r\n"
|
||||||
|
MSG.OK .AZ "[OK]"
|
||||||
|
MSG.ERR .AZ "[%h]\r\n"
|
||||||
|
MSG.FILE .AZ "CHAUX File:%S..."
|
||||||
|
SSCANF.D .AZ "%D"
|
||||||
|
SSCANF.H .AZ "%H"
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START .INB usr/src/shared/x.fileenum.g
|
||||||
|
DS.END .ED
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/bin/chaux.s
|
||||||
|
ASM
|
165
BIN/IRC.S.txt
165
BIN/IRC.S.txt
@ -4,12 +4,17 @@ NEW
|
|||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF bin/irc
|
.TF bin/irc
|
||||||
|
*--------------------------------------
|
||||||
|
TLS .EQ 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB inc/macros.i
|
.INB inc/macros.i
|
||||||
.INB inc/a2osx.i
|
.INB inc/a2osx.i
|
||||||
.INB inc/mli.i
|
.INB inc/mli.i
|
||||||
.INB inc/eth.i
|
.INB inc/eth.i
|
||||||
.INB inc/libtcpip.i
|
.INB inc/libtcpip.i
|
||||||
|
.DO TLS=1
|
||||||
|
.INB inc/net.tls.i
|
||||||
|
.FIN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TIMEOUT.MAX .EQ 250 25 sec.
|
TIMEOUT.MAX .EQ 250 25 sec.
|
||||||
MSGSIZE .EQ 4096
|
MSGSIZE .EQ 4096
|
||||||
@ -21,12 +26,11 @@ TEXTMAX .EQ 240
|
|||||||
.OR ZPBIN
|
.OR ZPBIN
|
||||||
ZS.START
|
ZS.START
|
||||||
ZPPtr1 .BS 2
|
ZPPtr1 .BS 2
|
||||||
|
ZPPtr2 .BS 2
|
||||||
bEscMode .BS 1
|
bEscMode .BS 1
|
||||||
bJoin .BS 1
|
bJoin .BS 1
|
||||||
TimeOut .BS 1
|
TimeOut .BS 1
|
||||||
hSocket .BS 1
|
hSocket .BS 1
|
||||||
TextPtr .BS 1
|
|
||||||
TextLen .BS 1
|
|
||||||
|
|
||||||
ZPRespPtr .BS 2
|
ZPRespPtr .BS 2
|
||||||
ZPMsg .BS 2
|
ZPMsg .BS 2
|
||||||
@ -42,6 +46,9 @@ BufPtr .BS 1
|
|||||||
BufLen .BS 1
|
BufLen .BS 1
|
||||||
ZPBufPtr .BS 2
|
ZPBufPtr .BS 2
|
||||||
|
|
||||||
|
TextPtr .BS 1
|
||||||
|
TextLen .BS 1
|
||||||
|
|
||||||
bPendingMsg .BS 1
|
bPendingMsg .BS 1
|
||||||
|
|
||||||
ZS.END .ED
|
ZS.END .ED
|
||||||
@ -111,6 +118,12 @@ J.ESC .DA CS.RUN.CHARIN.LEFT
|
|||||||
.DA CS.RUN.CHARIN.DOWN
|
.DA CS.RUN.CHARIN.DOWN
|
||||||
.DA CS.RUN.CHARIN.UP
|
.DA CS.RUN.CHARIN.UP
|
||||||
.DA CS.RUN.CHARIN.RIGHT
|
.DA CS.RUN.CHARIN.RIGHT
|
||||||
|
.DO TLS=1
|
||||||
|
L.MSG.TLS .DA MSG.TLS
|
||||||
|
L.MSG.TLS.1 .DA MSG.TLS.1
|
||||||
|
L.TLS.CHELLO .DA TLS.CHELLO
|
||||||
|
L.TLS.CHELLO.UT .DA TLS.CHELLO.UT
|
||||||
|
.FIN
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LDYA L.LIBTCPIP
|
CS.INIT >LDYA L.LIBTCPIP
|
||||||
@ -128,11 +141,16 @@ CS.RUN jsr CS.RUN.CheckTCPIP
|
|||||||
jsr CS.RUN.CheckArgs
|
jsr CS.RUN.CheckArgs
|
||||||
bcs CS.INIT.RTS
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
|
jsr CS.RUN.GetBuffers
|
||||||
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
jsr CS.RUN.Connect
|
jsr CS.RUN.Connect
|
||||||
bcs CS.INIT.RTS
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
jsr CS.RUN.GetBuffers
|
.DO TLS=1
|
||||||
|
jsr CS.RUN.TLS
|
||||||
bcs CS.INIT.RTS
|
bcs CS.INIT.RTS
|
||||||
|
.FIN
|
||||||
|
|
||||||
jsr CS.RUN.SCRSETUP
|
jsr CS.RUN.SCRSETUP
|
||||||
bcs CS.INIT.RTS
|
bcs CS.INIT.RTS
|
||||||
@ -263,6 +281,41 @@ CS.RUN.CheckArgs
|
|||||||
>SYSCALL PrintF
|
>SYSCALL PrintF
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CS.RUN.GetBuffers
|
||||||
|
>LDYAI 2048
|
||||||
|
>SYSCALL GetMem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPBufPtr
|
||||||
|
txa
|
||||||
|
>STA.G hBufBuf
|
||||||
|
|
||||||
|
>LDYAI MSGSIZE
|
||||||
|
>SYSCALL GetMem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPMsg
|
||||||
|
txa
|
||||||
|
>STA.G hMsgBuf
|
||||||
|
|
||||||
|
>LDYAI 384
|
||||||
|
>SYSCALL GetMem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPRespPtr
|
||||||
|
txa
|
||||||
|
>STA.G hRespBuf
|
||||||
|
|
||||||
|
>LDYAI 256
|
||||||
|
>SYSCALL GetMem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPOutputBufPtr
|
||||||
|
txa
|
||||||
|
>STA.G hOutputBuf
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM
|
CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM
|
||||||
>PUSHBI 0 no protocol
|
>PUSHBI 0 no protocol
|
||||||
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
|
||||||
@ -300,41 +353,64 @@ CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM
|
|||||||
>SYSCALL PrintF
|
>SYSCALL PrintF
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.GetBuffers
|
.DO TLS=1
|
||||||
>LDYAI 256
|
CS.RUN.TLS jsr CS.RUN.TLS.init
|
||||||
>SYSCALL GetMem
|
|
||||||
|
>PUSHB hSocket
|
||||||
|
>PUSHW L.TLS.CHELLO
|
||||||
|
>PUSHWI TLS.CHELLO.L
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPBufPtr
|
.1 >SLEEP
|
||||||
txa
|
|
||||||
>STA.G hBufBuf
|
|
||||||
|
|
||||||
>LDYAI MSGSIZE
|
lda TimeOut
|
||||||
>SYSCALL GetMem
|
bne .1
|
||||||
|
|
||||||
|
>PUSHB hSocket
|
||||||
|
>PUSHW ZPBufPtr
|
||||||
|
>PUSHWI 2048
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPMsg
|
>STYA ZPPtr2 RCVD len
|
||||||
txa
|
>PUSHW L.MSG.TLS.1
|
||||||
>STA.G hMsgBuf
|
>PUSHW ZPPtr2
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL PrintF
|
||||||
|
|
||||||
>LDYAI 384
|
sec
|
||||||
>SYSCALL GetMem
|
rts
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPRespPtr
|
|
||||||
txa
|
|
||||||
>STA.G hRespBuf
|
|
||||||
|
|
||||||
>LDYAI 256
|
|
||||||
>SYSCALL GetMem
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPOutputBufPtr
|
|
||||||
txa
|
|
||||||
>STA.G hOutputBuf
|
|
||||||
|
|
||||||
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CS.RUN.TLS.init >LDYA L.MSG.TLS
|
||||||
|
>SYSCALL PutS
|
||||||
|
|
||||||
|
lda A2osX.RANDOM16
|
||||||
|
sta ZPPtr1
|
||||||
|
lda A2osX.RANDOM16+1
|
||||||
|
and #$7F
|
||||||
|
sta ZPPtr1+1
|
||||||
|
|
||||||
|
>LDYA L.TLS.CHELLO.UT
|
||||||
|
>STYA ZPPtr2
|
||||||
|
|
||||||
|
ldy #31
|
||||||
|
|
||||||
|
.10 lda (ZPPtr1),y
|
||||||
|
sta (ZPPtr2),y
|
||||||
|
dey
|
||||||
|
bpl .10
|
||||||
|
|
||||||
|
lda #50
|
||||||
|
sta TimeOut
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.FIN
|
||||||
|
*--------------------------------------
|
||||||
CS.RUN.Register >LDYA L.MSG.REGISTER
|
CS.RUN.Register >LDYA L.MSG.REGISTER
|
||||||
jsr CS.RUN.STATUSMSG
|
jsr CS.RUN.STATUSMSG
|
||||||
|
|
||||||
@ -732,8 +808,7 @@ CS.RUN.TXTCLR.RTS
|
|||||||
CS.RUN.TOPUPDATE
|
CS.RUN.TOPUPDATE
|
||||||
>PUSHW ZPOutputBufPtr
|
>PUSHW ZPOutputBufPtr
|
||||||
>PUSHW L.MSG.TOPBAR
|
>PUSHW L.MSG.TOPBAR
|
||||||
>PUSHB #K.VER
|
>PUSHW A2osX.KVER
|
||||||
>PUSHB /K.VER
|
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
>SYSCALL ArgV
|
>SYSCALL ArgV
|
||||||
@ -1017,6 +1092,10 @@ MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d:%D (%s)..."
|
|||||||
MSG.SKTKO .AZ "Failed to Open Socket."
|
MSG.SKTKO .AZ "Failed to Open Socket."
|
||||||
MSG.SKTOK .AZ "Connected\r\n(Exit key is Ctrl-T)\r\n"
|
MSG.SKTOK .AZ "Connected\r\n(Exit key is Ctrl-T)\r\n"
|
||||||
MSG.SKTERR .AZ "Socket Error : $%h\r\n"
|
MSG.SKTERR .AZ "Socket Error : $%h\r\n"
|
||||||
|
.DO TLS=1
|
||||||
|
MSG.TLS .AZ "TLS:Negociation..."
|
||||||
|
MSG.TLS.1 .AZ "TLS:Received %D bytes.\r\n"
|
||||||
|
.FIN
|
||||||
MSG.REGISTER .AZ "Registering User..."
|
MSG.REGISTER .AZ "Registering User..."
|
||||||
MSG.JOIN .AZ "Joining Channel..."
|
MSG.JOIN .AZ "Joining Channel..."
|
||||||
MSG.TOPBAR .AZ "A2osX IRC %d.%d Server:%s:%s Nick:%s"
|
MSG.TOPBAR .AZ "A2osX IRC %d.%d Server:%s:%s Nick:%s"
|
||||||
@ -1071,6 +1150,30 @@ SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
|
|||||||
.BS 1
|
.BS 1
|
||||||
.BS 4 S.SOCKADDR.ADDR
|
.BS 4 S.SOCKADDR.ADDR
|
||||||
.DA 6667
|
.DA 6667
|
||||||
|
*--------------------------------------
|
||||||
|
.DO TLS=1
|
||||||
|
TLS.CHELLO .DA #TLS.CT.HS
|
||||||
|
.DA TLS.LV.TLS10
|
||||||
|
.DA /TLS.CHELLO.L1,#TLS.CHELLO.L1
|
||||||
|
TLS.CHELLO.1 .DA #TLS.HS.MT.CH
|
||||||
|
.DA #0,/TLS.CHELLO.L2,#TLS.CHELLO.L2
|
||||||
|
TLS.CHELLO.2 .DA TLS.LV.TLS12
|
||||||
|
TLS.CHELLO.UT .BS 4
|
||||||
|
TLS.CHELLO.R .BS 28
|
||||||
|
.DA #0 SID
|
||||||
|
.DA #0,#2 CSL
|
||||||
|
.DA #0,#TLS.HS.CH.CS.RSAAES128GCMSHA256
|
||||||
|
.DA TLS.HS.CH.CM.NONE
|
||||||
|
.DA /TLS.CHELLO.LE,#TLS.CHELLO.LE
|
||||||
|
TLS.CHELLO.E .HS 000D T=sig alg
|
||||||
|
.HS 0004 sig alg Len
|
||||||
|
.HS 0002 sig hash alg len
|
||||||
|
.HS 0401 RSA PKCS1 SHA256
|
||||||
|
TLS.CHELLO.L .EQ *-TLS.CHELLO
|
||||||
|
TLS.CHELLO.L1 .EQ *-TLS.CHELLO.1
|
||||||
|
TLS.CHELLO.L2 .EQ *-TLS.CHELLO.2
|
||||||
|
TLS.CHELLO.LE .EQ *-TLS.CHELLO.E
|
||||||
|
.FIN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
|
@ -55,7 +55,7 @@ Dev.Detect >STYA ARGS
|
|||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
lda L91C96.BSR+1,x
|
lda L91C96.BSR+1,x
|
||||||
cmp #DEVID
|
cmp #L91C96.DEVID
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
.2 dec FD.DEV.NAME+3
|
.2 dec FD.DEV.NAME+3
|
||||||
|
@ -7,10 +7,12 @@ NEW
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB inc/macros.i
|
.INB inc/macros.i
|
||||||
.INB inc/a2osx.i
|
.INB inc/a2osx.i
|
||||||
|
.INB inc/kernel.i
|
||||||
.INB inc/mli.e.i
|
.INB inc/mli.e.i
|
||||||
.INB inc/nic.i
|
.INB inc/nic.i
|
||||||
.INB inc/nic.w5100.i
|
.INB inc/nic.w5100.i
|
||||||
.INB inc/eth.i
|
.INB inc/eth.i
|
||||||
|
.INB inc/net.tcpip.i
|
||||||
.INB inc/libtcpip.i
|
.INB inc/libtcpip.i
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPArgPtr .EQ ZPBIN
|
ZPArgPtr .EQ ZPBIN
|
||||||
@ -278,6 +280,15 @@ OPEN.I jsr CLOSE
|
|||||||
lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND
|
lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND
|
||||||
sta W5100.MR,x
|
sta W5100.MR,x
|
||||||
|
|
||||||
|
>AR.SELECT SHAR
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.1 lda DCB+S.DCB.NIC.MAC,y
|
||||||
|
sta W5100.DR,x
|
||||||
|
iny
|
||||||
|
cpy #6
|
||||||
|
bne .1
|
||||||
|
|
||||||
>AR.SELECT GAR
|
>AR.SELECT GAR
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
@ -298,16 +309,7 @@ OPEN.I jsr CLOSE
|
|||||||
cpy #4
|
cpy #4
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
* >AR.SELECT SHAR
|
>AR.SELECT SIPR
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda DCB+S.DCB.NIC.MAC,y
|
|
||||||
sta W5100.DR,x
|
|
||||||
iny
|
|
||||||
cpy #6
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
* >AR.SELECT SIPR
|
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
@ -329,7 +331,7 @@ OPEN.I jsr CLOSE
|
|||||||
>AR.SELECT S0.CR
|
>AR.SELECT S0.CR
|
||||||
lda #W5100.AR.Sn.CR.OPEN
|
lda #W5100.AR.Sn.CR.OPEN
|
||||||
sta W5100.DR,x
|
sta W5100.DR,x
|
||||||
|
*--------------------------------------
|
||||||
lda /W5100.AR.S1.MR
|
lda /W5100.AR.S1.MR
|
||||||
sta Sn.IO
|
sta Sn.IO
|
||||||
|
|
||||||
@ -361,11 +363,11 @@ OPEN.SnY >AR.Sn.SELECT S0.MR
|
|||||||
sta W5100.DR,x
|
sta W5100.DR,x
|
||||||
|
|
||||||
* >AR.Sn.SELECT Sn.TOS
|
* >AR.Sn.SELECT Sn.TOS
|
||||||
stz W5100.DR,x
|
* stz W5100.DR,x
|
||||||
|
|
||||||
* >AR.Sn.SELECT Sn.TTL
|
* >AR.Sn.SELECT Sn.TTL
|
||||||
lda #K.IP.TTL
|
* lda #K.IP.TTL
|
||||||
sta W5100.DR,x
|
* sta W5100.DR,x
|
||||||
|
|
||||||
>AR.Sn.SELECT S0.CR
|
>AR.Sn.SELECT S0.CR
|
||||||
lda #W5100.AR.Sn.CR.OPEN
|
lda #W5100.AR.Sn.CR.OPEN
|
||||||
@ -400,7 +402,9 @@ READ php
|
|||||||
|
|
||||||
ldx DEVSLOTx0
|
ldx DEVSLOTx0
|
||||||
|
|
||||||
lda /W5100.AR.S1.MR
|
ldy #Sn.Cnt-1
|
||||||
|
|
||||||
|
.1 lda Sn.IO.BASE,y
|
||||||
sta Sn.IO
|
sta Sn.IO
|
||||||
sta W5100.AR,x
|
sta W5100.AR,x
|
||||||
lda #W5100.AR.S0.RX.RSR
|
lda #W5100.AR.S0.RX.RSR
|
||||||
@ -408,29 +412,122 @@ READ php
|
|||||||
|
|
||||||
lda W5100.DR,x get the received size HI
|
lda W5100.DR,x get the received size HI
|
||||||
ora W5100.DR,x LO
|
ora W5100.DR,x LO
|
||||||
bne READ.ICMP
|
beq .2
|
||||||
|
|
||||||
|
jmp READ.IPRAW
|
||||||
|
|
||||||
|
.2 dey
|
||||||
|
bne .1
|
||||||
|
|
||||||
lda /W5100.AR.S0.RX.RSR
|
lda /W5100.AR.S0.RX.RSR
|
||||||
sta Sn.IO
|
|
||||||
sta W5100.AR,x
|
sta W5100.AR,x
|
||||||
lda #W5100.AR.S0.RX.RSR
|
lda #W5100.AR.S0.RX.RSR
|
||||||
sta W5100.AR+1,x
|
sta W5100.AR+1,x
|
||||||
|
|
||||||
lda W5100.DR,x get the received size HI
|
lda W5100.DR,x get the received size HI
|
||||||
ora W5100.DR,x LO
|
ora W5100.DR,x LO
|
||||||
beq .9
|
bne READ.RAW
|
||||||
|
|
||||||
jmp READ.RAW
|
|
||||||
|
|
||||||
.9 jmp READWRITE.NODATA
|
.9 jmp READWRITE.NODATA
|
||||||
|
*--------------------------------------
|
||||||
|
READ.RAW >AR.SELECT S0.RX.RD
|
||||||
|
lda W5100.DR,x get the received ptr HI
|
||||||
|
sta Offset+1
|
||||||
|
ldy W5100.DR,x get the received ptr LO
|
||||||
|
sty Offset
|
||||||
|
|
||||||
READ.ICMP lda #S.IP.PROTOCOL.ICMP
|
and /$7FF
|
||||||
|
ora /RX.BASE
|
||||||
|
sta W5100.AR,x
|
||||||
|
tya
|
||||||
|
sta W5100.AR+1,x
|
||||||
|
|
||||||
|
lda W5100.DR,x get RX.Size HI (Frame size + 2)
|
||||||
|
sta RXTX.Size+1
|
||||||
|
lda W5100.DR,x get RX.Size LO
|
||||||
|
sta RXTX.Size
|
||||||
|
|
||||||
|
ldy #S.IOCTL.BYTECNT
|
||||||
|
sec
|
||||||
|
sbc #2 MACRAW:strip 2 bytes Header from Size
|
||||||
|
sta (ZPIOCTL),y
|
||||||
|
sta BUF.Size
|
||||||
|
eor #$ff
|
||||||
|
sta Counter
|
||||||
|
|
||||||
|
lda RXTX.Size+1
|
||||||
|
sbc #0
|
||||||
|
iny
|
||||||
|
sta (ZPIOCTL),y
|
||||||
|
sta BUF.Size+1
|
||||||
|
eor #$ff
|
||||||
|
sta Counter+1
|
||||||
|
|
||||||
|
>LDYA BUF.Size
|
||||||
|
>SYSCALL2 GetMem
|
||||||
|
bcc .14
|
||||||
|
|
||||||
|
jmp READWRITE.9
|
||||||
|
|
||||||
|
.14 >STYA ZPBufPtr
|
||||||
|
phx
|
||||||
|
|
||||||
|
phy
|
||||||
|
ldy #S.IOCTL.BUFPTR+1
|
||||||
|
sta (ZPIOCTL),y
|
||||||
|
dey
|
||||||
|
pla
|
||||||
|
sta (ZPIOCTL),y
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
ldx DEVSLOTx0
|
||||||
|
|
||||||
|
.2 inc Counter
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
inc Counter+1
|
||||||
|
beq .4
|
||||||
|
|
||||||
|
.3 lda W5100.DR,x
|
||||||
|
sta (ZPBufPtr),y
|
||||||
|
iny
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
inc ZPBufPtr+1
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.4 >AR.SELECT S0.RX.RD
|
||||||
|
|
||||||
|
lda Offset
|
||||||
|
clc
|
||||||
|
adc RXTX.Size
|
||||||
|
pha save LO
|
||||||
|
|
||||||
|
lda Offset+1
|
||||||
|
adc RXTX.Size+1
|
||||||
|
sta W5100.DR,x write HI
|
||||||
|
pla
|
||||||
|
sta W5100.DR,x write LO
|
||||||
|
|
||||||
|
>AR.SELECT S0.CR
|
||||||
|
lda #W5100.AR.Sn.CR.RCVD
|
||||||
|
sta W5100.DR,x
|
||||||
|
|
||||||
|
pla hMem
|
||||||
|
|
||||||
|
plp
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
READ.IPRAW lda Sn.IP.PROTOCOL,y
|
||||||
sta FRM.HDR.PROTO
|
sta FRM.HDR.PROTO
|
||||||
lda Sn.RX.BASE+1
|
|
||||||
sta Sn.BASE
|
|
||||||
lda Sn.RXTX.MASK+1
|
|
||||||
sta Sn.MASK
|
|
||||||
|
|
||||||
|
lda Sn.RX.BASE+1,y
|
||||||
|
sta Sn.BASE
|
||||||
|
lda Sn.RXTX.MASK+1,y
|
||||||
|
sta Sn.MASK
|
||||||
|
>DEBUG
|
||||||
>AR.Sn.SELECT S0.RX.RD
|
>AR.Sn.SELECT S0.RX.RD
|
||||||
lda W5100.DR,x get the received ptr HI
|
lda W5100.DR,x get the received ptr HI
|
||||||
sta Offset+1
|
sta Offset+1
|
||||||
@ -469,11 +566,11 @@ READ.ICMP lda #S.IP.PROTOCOL.ICMP
|
|||||||
ldy #S.IOCTL.BYTECNT
|
ldy #S.IOCTL.BYTECNT
|
||||||
sta (ZPIOCTL),y
|
sta (ZPIOCTL),y
|
||||||
|
|
||||||
iny
|
|
||||||
|
|
||||||
lda RXTX.Size+1
|
lda RXTX.Size+1
|
||||||
adc /S.IP
|
adc /S.IP
|
||||||
sta BUF.Size+1
|
sta BUF.Size+1
|
||||||
|
iny
|
||||||
|
sta (ZPIOCTL),y
|
||||||
|
|
||||||
lda RXTX.Size
|
lda RXTX.Size
|
||||||
clc
|
clc
|
||||||
@ -574,96 +671,6 @@ READ.ICMP lda #S.IP.PROTOCOL.ICMP
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
READ.RAW >AR.SELECT S0.RX.RD
|
|
||||||
lda W5100.DR,x get the received ptr HI
|
|
||||||
sta Offset+1
|
|
||||||
ldy W5100.DR,x get the received ptr LO
|
|
||||||
sty Offset
|
|
||||||
|
|
||||||
and /$7FF
|
|
||||||
ora /RX.BASE
|
|
||||||
sta W5100.AR,x
|
|
||||||
tya
|
|
||||||
sta W5100.AR+1,x
|
|
||||||
|
|
||||||
lda W5100.DR,x get RX.Size HI (Frame size + 2)
|
|
||||||
sta RXTX.Size+1
|
|
||||||
lda W5100.DR,x get RX.Size LO
|
|
||||||
sta RXTX.Size
|
|
||||||
|
|
||||||
ldy #S.IOCTL.BYTECNT
|
|
||||||
sec
|
|
||||||
sbc #2 MACRAW:strip 2 bytes Header from Size
|
|
||||||
sta (ZPIOCTL),y
|
|
||||||
sta BUF.Size
|
|
||||||
eor #$ff
|
|
||||||
sta Counter
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda RXTX.Size+1
|
|
||||||
sbc #0
|
|
||||||
sta (ZPIOCTL),y
|
|
||||||
sta BUF.Size+1
|
|
||||||
eor #$ff
|
|
||||||
sta Counter+1
|
|
||||||
|
|
||||||
>LDYA BUF.Size
|
|
||||||
>SYSCALL2 GetMem
|
|
||||||
bcc .14
|
|
||||||
|
|
||||||
jmp READWRITE.9
|
|
||||||
|
|
||||||
.14 >STYA ZPBufPtr
|
|
||||||
phx
|
|
||||||
|
|
||||||
phy
|
|
||||||
ldy #S.IOCTL.BUFPTR+1
|
|
||||||
sta (ZPIOCTL),y
|
|
||||||
dey
|
|
||||||
pla
|
|
||||||
sta (ZPIOCTL),y
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
ldx DEVSLOTx0
|
|
||||||
|
|
||||||
.2 inc Counter
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc Counter+1
|
|
||||||
beq .4
|
|
||||||
|
|
||||||
.3 lda W5100.DR,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.4 >AR.SELECT S0.RX.RD
|
|
||||||
|
|
||||||
lda Offset
|
|
||||||
clc
|
|
||||||
adc RXTX.Size
|
|
||||||
pha save LO
|
|
||||||
|
|
||||||
lda Offset+1
|
|
||||||
adc RXTX.Size+1
|
|
||||||
sta W5100.DR,x write HI
|
|
||||||
pla
|
|
||||||
sta W5100.DR,x write LO
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.RCVD
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
pla hMem
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
READWRITE.NODATA
|
READWRITE.NODATA
|
||||||
lda #E.NODATA
|
lda #E.NODATA
|
||||||
|
|
||||||
@ -698,11 +705,12 @@ WRITE php
|
|||||||
ldy #S.IP.PROTOCOL
|
ldy #S.IP.PROTOCOL
|
||||||
lda (ZPBufPtr),y
|
lda (ZPBufPtr),y
|
||||||
|
|
||||||
ldx #Sn.cnt-1
|
ldy #Sn.cnt-1
|
||||||
|
|
||||||
.10 cmp Sn.IP.PROTOCOL,x
|
.10 cmp Sn.IP.PROTOCOL,y
|
||||||
beq .11
|
beq .11
|
||||||
dex
|
|
||||||
|
dey
|
||||||
bne .10
|
bne .10
|
||||||
|
|
||||||
plp
|
plp
|
||||||
@ -710,11 +718,11 @@ WRITE php
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.11 lda Sn.IO.BASE,x
|
.11 lda Sn.IO.BASE,y
|
||||||
sta Sn.IO
|
sta Sn.IO
|
||||||
lda Sn.TX.BASE,x
|
lda Sn.TX.BASE,y
|
||||||
sta Sn.BASE
|
sta Sn.BASE
|
||||||
lda Sn.RXTX.MASK,x
|
lda Sn.RXTX.MASK,y
|
||||||
sta Sn.MASK
|
sta Sn.MASK
|
||||||
|
|
||||||
ldx DEVSLOTx0
|
ldx DEVSLOTx0
|
||||||
|
@ -58,17 +58,20 @@ Dev.Detect >STYA ZPArgPtr
|
|||||||
|
|
||||||
.1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!!
|
.1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!!
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
lda /PP.ID
|
lda /PP.ID
|
||||||
sta PacketPagePTR+1,x
|
sta PacketPagePTR+1,x
|
||||||
lda #PP.ID
|
lda #PP.ID
|
||||||
sta PacketPagePTR,x
|
sta PacketPagePTR,x
|
||||||
|
|
||||||
lda PacketPageDATA+1,x
|
lda PacketPageDATA+1,x
|
||||||
cmp /DEVID
|
cmp /CS8900A.DEVID
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
lda PacketPageDATA,x
|
lda PacketPageDATA,x
|
||||||
cmp #DEVID
|
cmp #CS8900A.DEVID
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
.2 dec FD.DEV.NAME+3
|
.2 dec FD.DEV.NAME+3
|
||||||
txa
|
txa
|
||||||
sec
|
sec
|
||||||
@ -76,6 +79,7 @@ Dev.Detect >STYA ZPArgPtr
|
|||||||
tax
|
tax
|
||||||
dey
|
dey
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
>LDYA L.MSG.DETECT.KO
|
>LDYA L.MSG.DETECT.KO
|
||||||
>SYSCALL PutS
|
>SYSCALL PutS
|
||||||
|
|
||||||
@ -261,6 +265,7 @@ STATUS.9 lda #MLI.E.BADCTL
|
|||||||
OPEN lda #S.DIB.S.OPENED
|
OPEN lda #S.DIB.S.OPENED
|
||||||
bit DIB+S.DIB.S
|
bit DIB+S.DIB.S
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
jsr CLOSE
|
jsr CLOSE
|
||||||
|
|
||||||
* ldx DEVSLOTx0 Done by CLOSE
|
* ldx DEVSLOTx0 Done by CLOSE
|
||||||
@ -279,16 +284,31 @@ OPEN lda #S.DIB.S.OPENED
|
|||||||
lda #PP.MAC
|
lda #PP.MAC
|
||||||
sta PacketPagePTR,x
|
sta PacketPagePTR,x
|
||||||
|
|
||||||
>LDYA DCB+S.DCB.NIC.MAC
|
lda DCB+S.DCB.NIC.MAC+1
|
||||||
>STYA PacketPageDATA,x
|
sta PacketPageDATA+1,x
|
||||||
>LDYAI PP.MAC+2
|
lda DCB+S.DCB.NIC.MAC+0
|
||||||
>STYA PacketPagePTR,x
|
sta PacketPageDATA,x
|
||||||
>LDYA DCB+S.DCB.NIC.MAC+2
|
|
||||||
>STYA PacketPageDATA,x
|
lda /PP.MAC+2
|
||||||
>LDYAI PP.MAC+4
|
sta PacketPagePTR+1,x
|
||||||
>STYA PacketPagePTR,x
|
lda #PP.MAC+2
|
||||||
>LDYA DCB+S.DCB.NIC.MAC+4
|
sta PacketPagePTR,x
|
||||||
>STYA PacketPageDATA,x
|
|
||||||
|
lda DCB+S.DCB.NIC.MAC+3
|
||||||
|
sta PacketPageDATA+1,x
|
||||||
|
lda DCB+S.DCB.NIC.MAC+2
|
||||||
|
sta PacketPageDATA,x
|
||||||
|
|
||||||
|
lda /PP.MAC+4
|
||||||
|
sta PacketPagePTR+1,x
|
||||||
|
lda #PP.MAC+4
|
||||||
|
sta PacketPagePTR,x
|
||||||
|
|
||||||
|
lda DCB+S.DCB.NIC.MAC+5
|
||||||
|
sta PacketPageDATA+1,x
|
||||||
|
lda DCB+S.DCB.NIC.MAC+4
|
||||||
|
sta PacketPageDATA,x
|
||||||
|
|
||||||
lda /PP.LineCTL
|
lda /PP.LineCTL
|
||||||
sta PacketPagePTR+1,x
|
sta PacketPagePTR+1,x
|
||||||
lda #PP.LineCTL
|
lda #PP.LineCTL
|
||||||
@ -302,6 +322,7 @@ OPEN lda #S.DIB.S.OPENED
|
|||||||
tsb DIB+S.DIB.S
|
tsb DIB+S.DIB.S
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #MLI.E.OPEN
|
.9 lda #MLI.E.OPEN
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
@ -320,13 +341,17 @@ CLOSE ldx DEVSLOTx0
|
|||||||
sta PacketPagePTR+1,x
|
sta PacketPagePTR+1,x
|
||||||
lda #PP.SelfST
|
lda #PP.SelfST
|
||||||
sta PacketPagePTR,x
|
sta PacketPagePTR,x
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
.1 lda PacketPageDATA+1,x
|
.1 lda PacketPageDATA+1,x
|
||||||
lda PacketPageDATA,x
|
lda PacketPageDATA,x
|
||||||
and #PP.SelfST.InitDone
|
and #PP.SelfST.InitDone
|
||||||
bne .8
|
bne .8
|
||||||
|
|
||||||
iny
|
iny
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.8 lda #S.DIB.S.OPENED
|
.8 lda #S.DIB.S.OPENED
|
||||||
trb DIB+S.DIB.S
|
trb DIB+S.DIB.S
|
||||||
clc
|
clc
|
||||||
@ -374,6 +399,7 @@ READ php
|
|||||||
pla
|
pla
|
||||||
>SYSCALL2 GetMem
|
>SYSCALL2 GetMem
|
||||||
bcs READWRITE.99
|
bcs READWRITE.99
|
||||||
|
|
||||||
>STYA ZPBufPtr
|
>STYA ZPBufPtr
|
||||||
phx
|
phx
|
||||||
phy
|
phy
|
||||||
@ -388,8 +414,10 @@ READ php
|
|||||||
|
|
||||||
.2 inc Counter
|
.2 inc Counter
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
inc Counter+1
|
inc Counter+1
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
.3 lda RTDATA,x
|
.3 lda RTDATA,x
|
||||||
sta (ZPBufPtr),y
|
sta (ZPBufPtr),y
|
||||||
iny
|
iny
|
||||||
@ -397,8 +425,10 @@ READ php
|
|||||||
sta (ZPBufPtr),y
|
sta (ZPBufPtr),y
|
||||||
iny
|
iny
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
inc ZPBufPtr+1
|
||||||
bra .2
|
bra .2
|
||||||
|
|
||||||
.8 pla hMem
|
.8 pla hMem
|
||||||
|
|
||||||
plp
|
plp
|
||||||
@ -449,14 +479,17 @@ WRITE php
|
|||||||
ldy PacketPageDATA,x
|
ldy PacketPageDATA,x
|
||||||
bit /PP.BusST.Rdy4TxNOW
|
bit /PP.BusST.Rdy4TxNOW
|
||||||
beq READWRITE.9
|
beq READWRITE.9
|
||||||
|
|
||||||
ldy #S.IOCTL.BUFPTR
|
ldy #S.IOCTL.BUFPTR
|
||||||
lda (ZPIOCTL),y
|
lda (ZPIOCTL),y
|
||||||
sta ZPBufPtr
|
sta ZPBufPtr
|
||||||
iny
|
iny
|
||||||
lda (ZPIOCTL),y
|
lda (ZPIOCTL),y
|
||||||
sta ZPBufPtr+1
|
sta ZPBufPtr+1
|
||||||
|
|
||||||
ldx #5
|
ldx #5
|
||||||
ldy #S.ETH.SRCMAC+5
|
ldy #S.ETH.SRCMAC+5
|
||||||
|
|
||||||
.10 lda DCB+S.DCB.NIC.MAC,x
|
.10 lda DCB+S.DCB.NIC.MAC,x
|
||||||
sta (ZPBufPtr),y
|
sta (ZPBufPtr),y
|
||||||
dey
|
dey
|
||||||
@ -469,19 +502,25 @@ WRITE php
|
|||||||
|
|
||||||
.1 inc Counter
|
.1 inc Counter
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
inc Counter+1
|
inc Counter+1
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
.2 lda (ZPBufPtr),y
|
.2 lda (ZPBufPtr),y
|
||||||
sta RTDATA,x
|
sta RTDATA,x
|
||||||
iny
|
iny
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
inc ZPBufPtr+1
|
||||||
|
|
||||||
.3 lda (ZPBufPtr),y
|
.3 lda (ZPBufPtr),y
|
||||||
sta RTDATA+1,x
|
sta RTDATA+1,x
|
||||||
iny
|
iny
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
inc ZPBufPtr+1
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.8 plp
|
.8 plp
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
@ -7,6 +7,7 @@ NEW
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB inc/macros.i
|
.INB inc/macros.i
|
||||||
.INB inc/a2osx.i
|
.INB inc/a2osx.i
|
||||||
|
.INB inc/kernel.i
|
||||||
.INB inc/mli.e.i
|
.INB inc/mli.e.i
|
||||||
.INB inc/nic.i
|
.INB inc/nic.i
|
||||||
.INB inc/nic.w5100.i
|
.INB inc/nic.w5100.i
|
||||||
|
@ -171,7 +171,7 @@ SEEK.END .EQ $02
|
|||||||
* A2osX.SYSCALL Functions Indexes
|
* A2osX.SYSCALL Functions Indexes
|
||||||
*--------------------------------------D1
|
*--------------------------------------D1
|
||||||
* STAT
|
* STAT
|
||||||
SYS.ChTyp .EQ $00
|
* .EQ $00
|
||||||
SYS.ChMod .EQ $02
|
SYS.ChMod .EQ $02
|
||||||
SYS.FStat .EQ $04
|
SYS.FStat .EQ $04
|
||||||
SYS.Stat .EQ $06
|
SYS.Stat .EQ $06
|
||||||
@ -222,15 +222,15 @@ SYS.SScanF .EQ $4E
|
|||||||
* .EQ $54
|
* .EQ $54
|
||||||
* .EQ $56
|
* .EQ $56
|
||||||
|
|
||||||
* .EQ $58
|
SYS.Online .EQ $58
|
||||||
* .EQ $5A
|
SYS.ChTyp .EQ $5A
|
||||||
* .EQ $5C
|
SYS.ChAux .EQ $5C
|
||||||
SYS.SetAttr .EQ $5E
|
SYS.SetAttr .EQ $5E
|
||||||
*--------------------------------------D2
|
*--------------------------------------D2
|
||||||
* MOUNT
|
* MOUNT
|
||||||
SYS.Mount .EQ $60
|
SYS.Mount .EQ $60
|
||||||
SYS.UMount .EQ $62
|
SYS.UMount .EQ $62
|
||||||
SYS.Online .EQ $64
|
* .EQ $64
|
||||||
SYS.GetStkObj .EQ $66
|
SYS.GetStkObj .EQ $66
|
||||||
* ARG
|
* ARG
|
||||||
SYS.Shift .EQ $68
|
SYS.Shift .EQ $68
|
||||||
|
@ -69,7 +69,6 @@ ERR.DNS.ERROR .EQ $B8
|
|||||||
|
|
||||||
ERR.ARP.PENDING .EQ $B5
|
ERR.ARP.PENDING .EQ $B5
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
UDP.PORT.DNS .EQ 53
|
|
||||||
UDP.PORT.PMAP .EQ 111
|
UDP.PORT.PMAP .EQ 111
|
||||||
UDP.PORT.NTP .EQ 123
|
UDP.PORT.NTP .EQ 123
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -198,103 +197,6 @@ S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+32
|
|||||||
*
|
*
|
||||||
S.SOCKET.TCP .EQ S.SOCKET+34
|
S.SOCKET.TCP .EQ S.SOCKET+34
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ARP.HTYPE .EQ S.ETH.EII+0 $0001
|
|
||||||
S.ARP.PTYPE .EQ S.ETH.EII+2 $0800
|
|
||||||
S.ARP.HLEN .EQ S.ETH.EII+4 $06
|
|
||||||
S.ARP.PLEN .EQ S.ETH.EII+5 $04
|
|
||||||
S.ARP.OPERATION .EQ S.ETH.EII+6 REQ=$0001,REPLY=$0002
|
|
||||||
S.ARP.OPERATION.REQ .EQ 1
|
|
||||||
S.ARP.OPERATION.REP .EQ 2
|
|
||||||
S.ARP.SHA .EQ S.ETH.EII+8 Sender MAC
|
|
||||||
S.ARP.SPA .EQ S.ETH.EII+14 Sender IP
|
|
||||||
S.ARP.THA .EQ S.ETH.EII+18 Target MAC
|
|
||||||
S.ARP.TPA .EQ S.ETH.EII+24 Target IP
|
|
||||||
*
|
|
||||||
S.ARP .EQ S.ETH.EII+28
|
|
||||||
*--------------------------------------
|
|
||||||
S.IP.V.IHL .EQ S.ETH.EII+0 $45, IPV4,HDR=5DWORDs
|
|
||||||
S.IP.DSCP.ECN .EQ S.ETH.EII+1
|
|
||||||
S.IP.TOTAL.LENGTH .EQ S.ETH.EII+2
|
|
||||||
S.IP.IDENTIFICATION .EQ S.ETH.EII+4
|
|
||||||
S.IP.FRAGMENT.FLAGS .EQ S.ETH.EII+6
|
|
||||||
S.IP.TTL .EQ S.ETH.EII+8
|
|
||||||
S.IP.PROTOCOL .EQ S.ETH.EII+9
|
|
||||||
S.IP.PROTOCOL.ICMP .EQ 1
|
|
||||||
S.IP.PROTOCOL.TCP .EQ 6
|
|
||||||
S.IP.PROTOCOL.UDP .EQ 17
|
|
||||||
S.IP.HDR.CHECKSUM .EQ S.ETH.EII+10
|
|
||||||
S.IP.SRC .EQ S.ETH.EII+12
|
|
||||||
S.IP.DST .EQ S.ETH.EII+16
|
|
||||||
*
|
|
||||||
S.IP .EQ S.ETH.EII+20
|
|
||||||
*--------------------------------------
|
|
||||||
S.ICMP.TYPE .EQ S.IP+0
|
|
||||||
S.ICMP.TYPE.ECHOREP .EQ 0
|
|
||||||
S.ICMP.TYPE.UNREACH .EQ 3
|
|
||||||
S.ICMP.TYPE.ECHOREQ .EQ 8
|
|
||||||
S.ICMP.CODE .EQ S.IP+1
|
|
||||||
S.ICMP.CHECKSUM .EQ S.IP+2
|
|
||||||
S.ICMP.IDENTIFIER .EQ S.IP+4
|
|
||||||
S.ICMP.SEQUENCE .EQ S.IP+6
|
|
||||||
*
|
|
||||||
S.ICMP .EQ S.IP+8
|
|
||||||
*--------------------------------------
|
|
||||||
S.TCPUDP.SRCPORT .EQ S.IP+0
|
|
||||||
S.TCPUDP.DSTPORT .EQ S.IP+2
|
|
||||||
*--------------------------------------
|
|
||||||
S.UDP.LENGTH .EQ S.IP+4
|
|
||||||
S.UDP.CHECKSUM .EQ S.IP+6 $0000 = DISABLE
|
|
||||||
*
|
|
||||||
S.UDP .EQ S.IP+8
|
|
||||||
*--------------------------------------
|
|
||||||
S.TCP.SEQNUM .EQ S.IP+4
|
|
||||||
S.TCP.ACKNUM .EQ S.IP+8
|
|
||||||
S.TCP.DATAOFFSET .EQ S.IP+12
|
|
||||||
S.TCP.OPTIONS .EQ S.IP+13
|
|
||||||
S.TCP.OPTIONS.URG .EQ %00100000
|
|
||||||
S.TCP.OPTIONS.ACK .EQ %00010000
|
|
||||||
S.TCP.OPTIONS.PSH .EQ %00001000
|
|
||||||
S.TCP.OPTIONS.RST .EQ %00000100
|
|
||||||
S.TCP.OPTIONS.SYN .EQ %00000010
|
|
||||||
S.TCP.OPTIONS.FIN .EQ %00000001
|
|
||||||
S.TCP.WINDOW .EQ S.IP+14
|
|
||||||
S.TCP.CHECKSUM .EQ S.IP+16
|
|
||||||
S.TCP.URGPTR .EQ S.IP+18
|
|
||||||
*
|
|
||||||
S.TCP .EQ S.IP+20
|
|
||||||
*--------------------------------------
|
|
||||||
S.DNS.ID .EQ S.UDP+0
|
|
||||||
S.DNS.F .EQ S.UDP+2
|
|
||||||
S.DNS.F.QR .EQ %10000000.00000000
|
|
||||||
S.DNS.F.OPCODE.I .EQ %01000000.00000000
|
|
||||||
S.DNS.F.OPCODE.S .EQ %00100000.00000000
|
|
||||||
S.DNS.F.AA .EQ %00000100.00000000
|
|
||||||
S.DNS.F.TC .EQ %00000010.00000000
|
|
||||||
S.DNS.F.RD .EQ %00000001.00000000
|
|
||||||
S.DNS.F.RA .EQ %00000000.10000000
|
|
||||||
S.DNS.F.RCODE.FRMT .EQ %00000000.00000001
|
|
||||||
S.DNS.F.RCODE.SRVR .EQ %00000000.00000010
|
|
||||||
S.DNS.F.RCODE.UKWN .EQ %00000000.00000011
|
|
||||||
S.DNS.F.RCODE.NIMP .EQ %00000000.00000100
|
|
||||||
S.DNS.F.RCODE.DENY .EQ %00000000.00000101
|
|
||||||
S.DNS.QDCOUNT .EQ S.UDP+4
|
|
||||||
S.DNS.ANCOUNT .EQ S.UDP+6
|
|
||||||
S.DNS.NSCOUNT .EQ S.UDP+8
|
|
||||||
S.DNS.ARCOUNT .EQ S.UDP+10
|
|
||||||
*
|
|
||||||
S.DNS .EQ S.UDP+12
|
|
||||||
*--------------------------------------
|
|
||||||
S.DNS.QTYPE.A .EQ 1
|
|
||||||
S.DNS.QTYPE.NS .EQ 2
|
|
||||||
S.DNS.QTYPE.CNAME .EQ 5
|
|
||||||
S.DNS.QTYPE.SOA .EQ 6
|
|
||||||
S.DNS.QTYPE.WKS .EQ 11
|
|
||||||
S.DNS.QTYPE.PTR .EQ 12
|
|
||||||
S.DNS.QTYPE.MX .EQ 15
|
|
||||||
S.DNS.QTYPE.SRV .EQ 33
|
|
||||||
S.DNS.QTYPE.ANY .EQ 255
|
|
||||||
S.DNS.QCLASS.IN .EQ 1
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE inc/libtcpip.i
|
SAVE inc/libtcpip.i
|
||||||
LOAD usr/src/lib/libtcpip.s
|
LOAD usr/src/lib/libtcpip.s
|
||||||
|
42
INC/NET.DNS.I.txt
Normal file
42
INC/NET.DNS.I.txt
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
*--------------------------------------
|
||||||
|
UDP.PORT.DNS .EQ 53
|
||||||
|
*--------------------------------------
|
||||||
|
S.DNS.ID .EQ S.UDP+0
|
||||||
|
S.DNS.F .EQ S.UDP+2
|
||||||
|
S.DNS.F.QR .EQ %10000000.00000000
|
||||||
|
S.DNS.F.OPCODE.I .EQ %01000000.00000000
|
||||||
|
S.DNS.F.OPCODE.S .EQ %00100000.00000000
|
||||||
|
S.DNS.F.AA .EQ %00000100.00000000
|
||||||
|
S.DNS.F.TC .EQ %00000010.00000000
|
||||||
|
S.DNS.F.RD .EQ %00000001.00000000
|
||||||
|
S.DNS.F.RA .EQ %00000000.10000000
|
||||||
|
S.DNS.F.RCODE.FRMT .EQ %00000000.00000001
|
||||||
|
S.DNS.F.RCODE.SRVR .EQ %00000000.00000010
|
||||||
|
S.DNS.F.RCODE.UKWN .EQ %00000000.00000011
|
||||||
|
S.DNS.F.RCODE.NIMP .EQ %00000000.00000100
|
||||||
|
S.DNS.F.RCODE.DENY .EQ %00000000.00000101
|
||||||
|
S.DNS.QDCOUNT .EQ S.UDP+4
|
||||||
|
S.DNS.ANCOUNT .EQ S.UDP+6
|
||||||
|
S.DNS.NSCOUNT .EQ S.UDP+8
|
||||||
|
S.DNS.ARCOUNT .EQ S.UDP+10
|
||||||
|
*
|
||||||
|
S.DNS .EQ S.UDP+12
|
||||||
|
*--------------------------------------
|
||||||
|
S.DNS.QTYPE.A .EQ 1
|
||||||
|
S.DNS.QTYPE.NS .EQ 2
|
||||||
|
S.DNS.QTYPE.CNAME .EQ 5
|
||||||
|
S.DNS.QTYPE.SOA .EQ 6
|
||||||
|
S.DNS.QTYPE.WKS .EQ 11
|
||||||
|
S.DNS.QTYPE.PTR .EQ 12
|
||||||
|
S.DNS.QTYPE.MX .EQ 15
|
||||||
|
S.DNS.QTYPE.SRV .EQ 33
|
||||||
|
S.DNS.QTYPE.ANY .EQ 255
|
||||||
|
S.DNS.QCLASS.IN .EQ 1
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE inc/net.dns.i
|
||||||
|
LOAD usr/src/lib/libtcpip.s
|
||||||
|
ASM
|
73
INC/NET.TCPIP.I.txt
Normal file
73
INC/NET.TCPIP.I.txt
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
*--------------------------------------
|
||||||
|
S.ARP.HTYPE .EQ S.ETH.EII+0 $0001
|
||||||
|
S.ARP.PTYPE .EQ S.ETH.EII+2 $0800
|
||||||
|
S.ARP.HLEN .EQ S.ETH.EII+4 $06
|
||||||
|
S.ARP.PLEN .EQ S.ETH.EII+5 $04
|
||||||
|
S.ARP.OPERATION .EQ S.ETH.EII+6 REQ=$0001,REPLY=$0002
|
||||||
|
S.ARP.OPERATION.REQ .EQ 1
|
||||||
|
S.ARP.OPERATION.REP .EQ 2
|
||||||
|
S.ARP.SHA .EQ S.ETH.EII+8 Sender MAC
|
||||||
|
S.ARP.SPA .EQ S.ETH.EII+14 Sender IP
|
||||||
|
S.ARP.THA .EQ S.ETH.EII+18 Target MAC
|
||||||
|
S.ARP.TPA .EQ S.ETH.EII+24 Target IP
|
||||||
|
*
|
||||||
|
S.ARP .EQ S.ETH.EII+28
|
||||||
|
*--------------------------------------
|
||||||
|
S.IP.V.IHL .EQ S.ETH.EII+0 $45, IPV4,HDR=5DWORDs
|
||||||
|
S.IP.DSCP.ECN .EQ S.ETH.EII+1
|
||||||
|
S.IP.TOTAL.LENGTH .EQ S.ETH.EII+2
|
||||||
|
S.IP.IDENTIFICATION .EQ S.ETH.EII+4
|
||||||
|
S.IP.FRAGMENT.FLAGS .EQ S.ETH.EII+6
|
||||||
|
S.IP.TTL .EQ S.ETH.EII+8
|
||||||
|
S.IP.PROTOCOL .EQ S.ETH.EII+9
|
||||||
|
S.IP.PROTOCOL.ICMP .EQ 1
|
||||||
|
S.IP.PROTOCOL.TCP .EQ 6
|
||||||
|
S.IP.PROTOCOL.UDP .EQ 17
|
||||||
|
S.IP.HDR.CHECKSUM .EQ S.ETH.EII+10
|
||||||
|
S.IP.SRC .EQ S.ETH.EII+12
|
||||||
|
S.IP.DST .EQ S.ETH.EII+16
|
||||||
|
*
|
||||||
|
S.IP .EQ S.ETH.EII+20
|
||||||
|
*--------------------------------------
|
||||||
|
S.ICMP.TYPE .EQ S.IP+0
|
||||||
|
S.ICMP.TYPE.ECHOREP .EQ 0
|
||||||
|
S.ICMP.TYPE.UNREACH .EQ 3
|
||||||
|
S.ICMP.TYPE.ECHOREQ .EQ 8
|
||||||
|
S.ICMP.CODE .EQ S.IP+1
|
||||||
|
S.ICMP.CHECKSUM .EQ S.IP+2
|
||||||
|
S.ICMP.IDENTIFIER .EQ S.IP+4
|
||||||
|
S.ICMP.SEQUENCE .EQ S.IP+6
|
||||||
|
*
|
||||||
|
S.ICMP .EQ S.IP+8
|
||||||
|
*--------------------------------------
|
||||||
|
S.TCPUDP.SRCPORT .EQ S.IP+0
|
||||||
|
S.TCPUDP.DSTPORT .EQ S.IP+2
|
||||||
|
*--------------------------------------
|
||||||
|
S.UDP.LENGTH .EQ S.IP+4
|
||||||
|
S.UDP.CHECKSUM .EQ S.IP+6 $0000 = DISABLE
|
||||||
|
*
|
||||||
|
S.UDP .EQ S.IP+8
|
||||||
|
*--------------------------------------
|
||||||
|
S.TCP.SEQNUM .EQ S.IP+4
|
||||||
|
S.TCP.ACKNUM .EQ S.IP+8
|
||||||
|
S.TCP.DATAOFFSET .EQ S.IP+12
|
||||||
|
S.TCP.OPTIONS .EQ S.IP+13
|
||||||
|
S.TCP.OPTIONS.URG .EQ %00100000
|
||||||
|
S.TCP.OPTIONS.ACK .EQ %00010000
|
||||||
|
S.TCP.OPTIONS.PSH .EQ %00001000
|
||||||
|
S.TCP.OPTIONS.RST .EQ %00000100
|
||||||
|
S.TCP.OPTIONS.SYN .EQ %00000010
|
||||||
|
S.TCP.OPTIONS.FIN .EQ %00000001
|
||||||
|
S.TCP.WINDOW .EQ S.IP+14
|
||||||
|
S.TCP.CHECKSUM .EQ S.IP+16
|
||||||
|
S.TCP.URGPTR .EQ S.IP+18
|
||||||
|
*
|
||||||
|
S.TCP .EQ S.IP+20
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE inc/net.tcpip.i
|
||||||
|
LOAD usr/src/lib/libtcpip.s
|
||||||
|
ASM
|
46
INC/NET.TLS.I.txt
Normal file
46
INC/NET.TLS.I.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
TLS.CT .EQ 0
|
||||||
|
TLS.CT.CCS .EQ 20
|
||||||
|
TLS.CT.ALERT .EQ 21
|
||||||
|
TLS.CT.HS .EQ 22
|
||||||
|
TLS.CT.APP .EQ 23
|
||||||
|
TLS.CT.HEATBEAT .EQ 24
|
||||||
|
TLS.LV .EQ 1
|
||||||
|
TLS.LV.SSL30 .EQ $0003
|
||||||
|
TLS.LV.TLS10 .EQ $0103
|
||||||
|
TLS.LV.TLS11 .EQ $0203
|
||||||
|
TLS.LV.TLS12 .EQ $0303
|
||||||
|
TLS.LV.TLS13 .EQ $0403
|
||||||
|
TLS.LENGTH .EQ 3
|
||||||
|
|
||||||
|
TLS.HS.MT .EQ 5
|
||||||
|
TLS.HS.MT.HR .EQ 0
|
||||||
|
TLS.HS.MT.CH .EQ 1
|
||||||
|
TLS.HS.MT.SH .EQ 2
|
||||||
|
TLS.HS.MT.NST .EQ 4
|
||||||
|
TLS.HS.MT.EXT .EQ 8
|
||||||
|
TLS.HS.MT.CERT .EQ 11
|
||||||
|
TLS.HS.MT.SKX .EQ 12
|
||||||
|
TLS.HS.MT.CR .EQ 13
|
||||||
|
TLS.HS.MT.SHD .EQ 14
|
||||||
|
TLS.HS.MT.CV .EQ 15
|
||||||
|
TLS.HS.MT.CKX .EQ 16
|
||||||
|
TLS.HS.MT.FIN .EQ 20
|
||||||
|
TLS.HS.LENGTH .EQ 6
|
||||||
|
TLS.HS.CH.V .EQ 8
|
||||||
|
|
||||||
|
TLS.HS.CH.UTIME .EQ 10
|
||||||
|
TLS.HS.CH.RND .EQ 14
|
||||||
|
TLS.HS.CH.SID .EQ 36
|
||||||
|
TLS.HS.CH.CSL .EQ 37
|
||||||
|
TLS.HS.CH.CS .EQ 39
|
||||||
|
TLS.HS.CH.CS.RSAAES128CBCSHA .EQ $2F
|
||||||
|
TLS.HS.CH.CS.RSAAES128GCMSHA256 .EQ $9C
|
||||||
|
TLS.HS.CH.CM .EQ 41
|
||||||
|
TLS.HS.CH.CM.NONE .EQ 1 Len=1, value=0
|
||||||
|
TLS.HS.CH.EXTL .EQ 43
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE inc/net.tls.i
|
@ -5,7 +5,7 @@ AUTO 4,1
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* CS8900A IO Registers
|
* CS8900A IO Registers
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVID .EQ $630E
|
CS8900A.DEVID .EQ $630E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
RTDATA .EQ $C080 Receive/Transmit Data (DWORD)
|
RTDATA .EQ $C080 Receive/Transmit Data (DWORD)
|
||||||
TxCMD .EQ $C084 Transmit Command
|
TxCMD .EQ $C084 Transmit Command
|
||||||
|
@ -5,7 +5,7 @@ AUTO 4,1
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* SMSC L91C96 IO Registers
|
* SMSC L91C96 IO Registers
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVID .EQ $33
|
L91C96.DEVID .EQ $33
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
L91C96.0.TCR .EQ $C080
|
L91C96.0.TCR .EQ $C080
|
||||||
L91C96.0.TCR.FDSE .EQ %10000000.00000000
|
L91C96.0.TCR.FDSE .EQ %10000000.00000000
|
||||||
|
@ -499,7 +499,10 @@ SKT.GetDataFromSktIn
|
|||||||
jsr SKT.SubDataInLenAtSktX
|
jsr SKT.SubDataInLenAtSktX
|
||||||
|
|
||||||
jsr SKT.StoreTCB
|
jsr SKT.StoreTCB
|
||||||
jsr TCP.SetSocketTCPO.ACK ACK=1 -> send WSIZE
|
* jsr TCP.SetSocketTCPO.ACK ACK=1 -> send WSIZE
|
||||||
|
|
||||||
|
lda #S.TCP.OPTIONS.ACK
|
||||||
|
jsr TCP.OUT.SendOptA
|
||||||
|
|
||||||
>LDYA ZPDataInLen
|
>LDYA ZPDataInLen
|
||||||
clc
|
clc
|
||||||
@ -569,12 +572,14 @@ SKT.AddDataToSktIn
|
|||||||
lda SKT.Cache+S.SOCKET.TCP.INHEAD+1
|
lda SKT.Cache+S.SOCKET.TCP.INHEAD+1
|
||||||
cmp /K.TCP.WSIZE
|
cmp /K.TCP.WSIZE
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
stz SKT.Cache+S.SOCKET.TCP.INHEAD+1
|
stz SKT.Cache+S.SOCKET.TCP.INHEAD+1
|
||||||
lda ZPTmpPtr1+1
|
lda ZPTmpPtr1+1
|
||||||
* sec
|
* sec
|
||||||
sbc /K.TCP.WSIZE
|
sbc /K.TCP.WSIZE
|
||||||
sta ZPTmpPtr1+1
|
sta ZPTmpPtr1+1
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -227,6 +227,7 @@ TCP.IN.JMP.ESTBLSH
|
|||||||
jsr TCP.AddAYToSktCacheAtX
|
jsr TCP.AddAYToSktCacheAtX
|
||||||
|
|
||||||
jsr SKT.StoreTCB update socket
|
jsr SKT.StoreTCB update socket
|
||||||
|
bra .7
|
||||||
|
|
||||||
.70 jsr TCP.SetSocketTCPO.ACK ...and ack data
|
.70 jsr TCP.SetSocketTCPO.ACK ...and ack data
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@ AUXPIPE .EQ 1
|
|||||||
.INB inc/mli.e.i
|
.INB inc/mli.e.i
|
||||||
.INB inc/nic.i
|
.INB inc/nic.i
|
||||||
.INB inc/eth.i
|
.INB inc/eth.i
|
||||||
|
.INB inc/net.tcpip.i
|
||||||
|
.INB inc/net.dns.i
|
||||||
.INB inc/lib.net.i
|
.INB inc/lib.net.i
|
||||||
.INB inc/libtcpip.i
|
.INB inc/libtcpip.i
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -306,15 +306,12 @@ CS.RUN ldx #IOCTL.READ
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DO DBG=1
|
.DO DBG=1
|
||||||
CS.RUN.FILTER lda (pBuf)
|
CS.RUN.FILTER lda (pBuf)
|
||||||
cmp #$ff
|
* cmp #$ff
|
||||||
beq .9
|
* beq .9
|
||||||
|
|
||||||
dec
|
* ldy #S.ETH.EII.TYPE+1
|
||||||
beq .9
|
* lda (pBuf),y
|
||||||
|
* bne .9
|
||||||
ldy #S.ETH.EII.TYPE+1
|
|
||||||
lda (pBuf),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
337
SBIN/VEDD.S.txt
Normal file
337
SBIN/VEDD.S.txt
Normal file
@ -0,0 +1,337 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1 Enable MASM3 auto line num
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02 Target CPU, must match CPU level in header
|
||||||
|
.OR $2000 usualy $2000, but any value > $100 allowed
|
||||||
|
.TF sbin/vedd
|
||||||
|
*--------------------------------------
|
||||||
|
.INB inc/macros.i
|
||||||
|
.INB inc/a2osx.i
|
||||||
|
.INB inc/mli.e.i
|
||||||
|
.INB inc/eth.i
|
||||||
|
.INB inc/libtcpip.i
|
||||||
|
*--------------------------------------
|
||||||
|
ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope
|
||||||
|
TIMEOUT.MAX .EQ 250 25 sec.
|
||||||
|
*--------------------------------------
|
||||||
|
* Zero Page Segment, up to 32 bytes
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR ZPBIN
|
||||||
|
ZS.START
|
||||||
|
ZPIPCfgPtr .BS 2
|
||||||
|
ZPFrameBase .BS 2
|
||||||
|
hSocket .BS 1
|
||||||
|
TimeOut .BS 1
|
||||||
|
hFrame .BS 1
|
||||||
|
ZS.END .ED
|
||||||
|
*--------------------------------------
|
||||||
|
* File Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.START cld
|
||||||
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA #S.PS.F.EVENT
|
||||||
|
.DA #0
|
||||||
|
.DA CS.END-CS.START Code Size (without Constants)
|
||||||
|
.DA DS.END-DS.START Data SegmentSize
|
||||||
|
.DA #64 Stack Size
|
||||||
|
.DA #ZS.END-ZS.START Zero Page Size
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
|
L.MSG.USAGE .DA MSG.USAGE
|
||||||
|
L.MSG.TCPIPERR .DA MSG.TCPIPERR
|
||||||
|
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||||
|
L.MSG.CONNECTED .DA MSG.CONNECTED
|
||||||
|
L.MSG.NOCONN .DA MSG.NOCONN
|
||||||
|
L.MSG.NOPING .DA MSG.NOPING
|
||||||
|
L.MSG.MOUNTED .DA MSG.MOUNTED
|
||||||
|
L.ADT.REQ .DA ADT.REQ
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Called once at process creation
|
||||||
|
* Put code for loading LIB here
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT >LDYA L.LIBTCPIP
|
||||||
|
>SYSCALL LoadLib
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
sta hLIBTCPIP
|
||||||
|
|
||||||
|
* clc
|
||||||
|
.9
|
||||||
|
CS.INIT.RTS rts
|
||||||
|
*--------------------------------------
|
||||||
|
* Called until exit with CS
|
||||||
|
* if RUN exits with CC, RUN entered again
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN lda hSocket
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 jsr CS.RUN.CheckTCPIP
|
||||||
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
|
jsr CS.RUN.CheckArgs
|
||||||
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
|
jsr CS.RUN.Connect
|
||||||
|
bcs CS.INIT.RTS
|
||||||
|
|
||||||
|
>PUSHB hSocket
|
||||||
|
>PUSHW L.ADT.REQ
|
||||||
|
>PUSHWI ADT.REQ.LEN
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
jsr CS.RUN.RECV
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
>PUSHW L.MSG.NOPING
|
||||||
|
lda #1
|
||||||
|
>SYSCALL ArgV
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL PrintF
|
||||||
|
|
||||||
|
.8
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sec
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.CheckTCPIP
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPIPCfgPtr
|
||||||
|
lda (ZPIPCfgPtr) Configured ?
|
||||||
|
bmi .1
|
||||||
|
|
||||||
|
>LDYA L.MSG.TCPIPERR
|
||||||
|
>SYSCALL PutS
|
||||||
|
|
||||||
|
lda #E.SYN
|
||||||
|
sec
|
||||||
|
.9 rts
|
||||||
|
|
||||||
|
.1 lda #AF.INET
|
||||||
|
>STA.G SA.LOCAL
|
||||||
|
>STA.G SA.REMOTE
|
||||||
|
|
||||||
|
ldy #S.IPCFG.IP+3
|
||||||
|
|
||||||
|
.3 lda (ZPIPCfgPtr),y
|
||||||
|
pha
|
||||||
|
dey
|
||||||
|
cpy #S.IPCFG.IP-1
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
ldy #SA.LOCAL+S.SOCKADDR.ADDR
|
||||||
|
|
||||||
|
.4 pla
|
||||||
|
sta (pData),y
|
||||||
|
iny
|
||||||
|
cpy #SA.LOCAL+S.SOCKADDR.ADDR+4
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
lda #6502
|
||||||
|
>STA.G SA.REMOTE+S.SOCKADDR.PORT
|
||||||
|
iny
|
||||||
|
lda /6502
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.CheckArgs
|
||||||
|
ldy #S.PS.ARGC
|
||||||
|
lda (pPS),y
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
>LDYA L.MSG.USAGE
|
||||||
|
>SYSCALL PutS
|
||||||
|
lda #E.SYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 lda #TIMEOUT.MAX
|
||||||
|
sta TimeOut
|
||||||
|
|
||||||
|
.2 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
|
||||||
|
lda #1
|
||||||
|
>SYSCALL ArgV
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
|
||||||
|
bcc .3
|
||||||
|
|
||||||
|
>SLEEP
|
||||||
|
lda TimeOut
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>PUSHW L.MSG.UNKNOWN
|
||||||
|
lda #1
|
||||||
|
>SYSCALL ArgV
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL PrintF
|
||||||
|
lda #ERR.SKT.NOCONN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.3 lda #2
|
||||||
|
>SYSCALL ArgV
|
||||||
|
bcc .4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.4
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
CS.RUN.CheckArgs.RTS
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.Connect >PUSHBI S.SOCKET.T.DGRAM
|
||||||
|
>PUSHBI 0 no protocol
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
sta hSocket
|
||||||
|
|
||||||
|
>PUSHA
|
||||||
|
>PUSHEA.G SA.LOCAL
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
lda #TIMEOUT.MAX
|
||||||
|
sta TimeOut
|
||||||
|
|
||||||
|
.1 >SLEEP
|
||||||
|
|
||||||
|
>PUSHB hSocket
|
||||||
|
>PUSHEA.G SA.REMOTE
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
ldx TimeOut
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 pha
|
||||||
|
|
||||||
|
>PUSHW L.MSG.NOCONN
|
||||||
|
lda #1
|
||||||
|
>SYSCALL ArgV
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHBI 2
|
||||||
|
|
||||||
|
pla
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 >PUSHW L.MSG.CONNECTED
|
||||||
|
lda #1
|
||||||
|
>SYSCALL ArgV
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHBI 2
|
||||||
|
>SYSCALL PrintF
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN.RECV lda #TIMEOUT.MAX
|
||||||
|
sta TimeOut
|
||||||
|
|
||||||
|
.1 >SLEEP
|
||||||
|
|
||||||
|
lda hSocket
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
cmp #E.NODATA
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
lda TimeOut
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 sta hFrame
|
||||||
|
|
||||||
|
>SYSCALL GetMemPtr
|
||||||
|
>STYA ZPFrameBase
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT lda (pEvent)
|
||||||
|
bpl .9 is it a TIMER event?
|
||||||
|
|
||||||
|
lda TimeOut
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
dec TimeOut
|
||||||
|
|
||||||
|
.9 sec do not discard TIMER event
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT
|
||||||
|
|
||||||
|
.1 lda hSocket
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
|
||||||
|
|
||||||
|
.2
|
||||||
|
|
||||||
|
lda hLIBTCPIP
|
||||||
|
.7 beq .8
|
||||||
|
|
||||||
|
>SYSCALL UnloadLib
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.END
|
||||||
|
*--------------------------------------
|
||||||
|
* Initialized DATA
|
||||||
|
*--------------------------------------
|
||||||
|
LIBTCPIP .AZ "libtcpip"
|
||||||
|
hLIBTCPIP .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
MSG.USAGE .AZ "Usage : VEDD <ip|host> [port]"
|
||||||
|
MSG.TCPIPERR .AZ "VEDD:TCP/IP Not initialized properly."
|
||||||
|
MSG.UNKNOWN .AZ "VEDD:%s: Unknown host\r\n"
|
||||||
|
MSG.NOCONN .AZ "VEDD:No Connection To %s\r\n"
|
||||||
|
MSG.CONNECTED .AZ "VEDD:Connected To %s\r\n"
|
||||||
|
MSG.NOPING .AZ "VEDD:No response from %s\r\n"
|
||||||
|
MSG.MOUNTED .AZ "VEDD:%s Mounted As %s\r\n"
|
||||||
|
*--------------------------------------
|
||||||
|
ADT.REQ .DA #ADT.CMD.VSD
|
||||||
|
.HS 030000C6 READ D1, BLK 0
|
||||||
|
ADT.REQ.LEN .EQ *-ADT.REQ
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
|
SA.LOCAL .BS 1 S.SOCKADDR.AF
|
||||||
|
.BS 1
|
||||||
|
.BS 4 S.SOCKADDR.ADDR
|
||||||
|
.BS 2 S.SOCKADDR.PORT
|
||||||
|
SA.REMOTE .BS 1 S.SOCKADDR.AF
|
||||||
|
.BS 1
|
||||||
|
.BS 4 S.SOCKADDR.ADDR
|
||||||
|
.BS 2 S.SOCKADDR.PORT
|
||||||
|
DS.END
|
||||||
|
.ED
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/sbin/vedd.s
|
||||||
|
ASM
|
991
SCMASM.30/ASM65816.S..txt
Normal file
991
SCMASM.30/ASM65816.S..txt
Normal file
@ -0,0 +1,991 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR $A700
|
||||||
|
ASM65816.SEARCH.TABLE .BS 3
|
||||||
|
ASM65816.GNC .BS 3
|
||||||
|
ASM65816.GNC.UC .BS 3
|
||||||
|
ASM65816.GNNB .BS 3
|
||||||
|
ASM65816.EXPR .BS 10
|
||||||
|
ASM65816.EXP1 .BS 10
|
||||||
|
ASM65816.ASM.ERROR .BS 3
|
||||||
|
ASM65816.EMIT .BS 10
|
||||||
|
*--------------------------------
|
||||||
|
.OR $F0 F0-FF is ASM private ZeroPage
|
||||||
|
LEVEL.MASK .BS 1
|
||||||
|
OPBASE .BS 1
|
||||||
|
MODE.BYTE .BS 1
|
||||||
|
FORCE.ADDR.SIZE .BS 1
|
||||||
|
.ED
|
||||||
|
*--------------------------------
|
||||||
|
ERR.BAD.OPCODE .EQ 0
|
||||||
|
ERR.BAD.ADDRESS .EQ 1
|
||||||
|
ERR.RANGE .EQ 2
|
||||||
|
ERR.UNDEFINED .EQ 3
|
||||||
|
*--------------------------------
|
||||||
|
JMP ASM65816.ASM.INIT
|
||||||
|
JMP ASM65816.ASM.LINE
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
JMP DIR.OP
|
||||||
|
*--------------------------------
|
||||||
|
.AS -/FOR THE 6502, 65C02, 65R02, 65816/
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.ASM.INIT
|
||||||
|
LDA #0 MASK FOR 6502
|
||||||
|
STA LEVEL.MASK
|
||||||
|
LDA #15 MARGIN FOR 6502
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.ASM.LINE
|
||||||
|
LDA SEARCH.KEY 1ST LETTER
|
||||||
|
CMP #'A'
|
||||||
|
BCC .5 ...NOT A LETTER, SO BADOP
|
||||||
|
CMP #'Z'+1
|
||||||
|
BCS .5 ...NOT A LETTER, SO BADOP
|
||||||
|
AND #$1F MAKE 01...1A
|
||||||
|
TAX
|
||||||
|
LDA FIRST.LETTER.TABLE-1,X
|
||||||
|
BNE .8 ...UNUSED LETTER
|
||||||
|
.5 JMP BADOPERR
|
||||||
|
*---BUILD OPTBL.PNTR INTO TABLE--------
|
||||||
|
.8 ADC #OPCODE.TABLE CARRY CLEAR ALREADY
|
||||||
|
STA OPTBL.PNTR
|
||||||
|
LDY /OPCODE.TABLE
|
||||||
|
BCC .1
|
||||||
|
INY
|
||||||
|
.1 CPX #'R'-$40 WHICH HALF OF TABLE?
|
||||||
|
BCC .2 ...FIRST HALF
|
||||||
|
INY ...SECOND HALF
|
||||||
|
.2 CLC INITIAL SEARCH
|
||||||
|
.3 JSR ASM65816.SEARCH.TABLE
|
||||||
|
BCC .5 ...NOT FOUND
|
||||||
|
*---FOUND IT!--------------------
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
STA OPBASE
|
||||||
|
INY
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
AND #$E1 ISOLATE LEVEL BITS
|
||||||
|
BEQ .7 ...PLAIN 6502 LEVEL
|
||||||
|
AND LEVEL.MASK
|
||||||
|
BNE .7 ...ALLOWS 'STP' FOR BOTH 65816 & SWEET-16
|
||||||
|
SEC CONTINUE SEARCH
|
||||||
|
BCS .3 ...ALWAYS
|
||||||
|
*---BRANCH TO PROCESS OPCODE-----
|
||||||
|
.7 LDA (OPTBL.PNTR),Y
|
||||||
|
AND #$1E
|
||||||
|
TAY
|
||||||
|
LDA OP.MODE+1,Y
|
||||||
|
PHA
|
||||||
|
LDA OP.MODE,Y
|
||||||
|
PHA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.MA MODE
|
||||||
|
O..]1 .EQ *-OP.MODE
|
||||||
|
.DA OP.]1-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
OP.MODE
|
||||||
|
>MODE SNGL 0 -- SINGLE BYTE OPCODES
|
||||||
|
>MODE COPS 2 -- LDA GROUP
|
||||||
|
>MODE SHIFTS 4 -- ASL GROUP
|
||||||
|
>MODE REL16 6 -- BRL & PER
|
||||||
|
>MODE REL8 8 -- RELATIVE BRANCHES
|
||||||
|
>MODE BITS A -- BIT GROUP
|
||||||
|
>MODE MOVES C -- MVP & MVN
|
||||||
|
>MODE JUMPS E -- JUMP GROUP
|
||||||
|
>MODE ROCKB 10 -- ROCKWELL BIT OPS
|
||||||
|
>MODE ROCKC 12 -- ROCKWELL BIT OPS
|
||||||
|
>MODE XN 14 -- SWEET 16 REGISTER OPS
|
||||||
|
>MODE POP 16 -- SWEET 16 POP & POPD
|
||||||
|
>MODE SET 18 -- SWEET 16 SET
|
||||||
|
>MODE CRS 1A -- COP, REP, SEP
|
||||||
|
*--------------------------------
|
||||||
|
OP.SNGL
|
||||||
|
EMIT.OPBASE
|
||||||
|
LDA OPBASE
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
OP.CRS JSR ASM65816.GNNB
|
||||||
|
CMP #'#'
|
||||||
|
BNE ERBA.E2
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
JMP EMIT.OP.AND.EXP.BYTE
|
||||||
|
ERBA.E2
|
||||||
|
JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
OP.COPS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
LDA MODE.BYTE ALL INDIRECT MODES <<<12-16-85>>>
|
||||||
|
AND #$04 REQUIRE ZP VALUE <<<12-16-85>>>
|
||||||
|
BEQ .1 ...NOT INDIRECT <<<12-16-85>>>
|
||||||
|
CPY #14
|
||||||
|
BCC .4 ...MODES 0...13
|
||||||
|
DEC ADDR.LENGTH SHORTEN >(ZP) AND >(ZP),Y
|
||||||
|
.4 JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE ERBA.E2 ...MUST BE DIRECT VALUE
|
||||||
|
.1 LDA ADDR.MODE.BITS.CLASS.1,Y
|
||||||
|
BPL .2 VALID MODE
|
||||||
|
INC ADDR.LENGTH ...DIRECT,Y NOT VALID
|
||||||
|
LDA ADDR.MODE.BITS.CLASS.1+1,Y
|
||||||
|
.2 EOR OPBASE
|
||||||
|
CMP #$89 STA IMMED?
|
||||||
|
BEQ ERBA.E2 ...YES, NO SUCH ANIMAL
|
||||||
|
* FALL INTO EMIT.OP.AND.VALUE ***
|
||||||
|
*--------------------------------
|
||||||
|
EMIT.OP.AND.VALUE
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
ASM65816.EMIT.VALUE
|
||||||
|
JSR EMIT.EXP.BYTE
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
OP.BITS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
CPY #7 ONLY MODES 0...6 LEGAL
|
||||||
|
BCS .2 ...NOT VALID MODE
|
||||||
|
LDX OPBASE
|
||||||
|
BNE .0 ...NOT BIT OPCODE
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
AND #$20
|
||||||
|
BNE .0 ...AT LEAST 65C02
|
||||||
|
LDA #$60 ONLY ZP AND ABS LEGAL
|
||||||
|
BNE .7 ...ALWAYS
|
||||||
|
.0 LDA CLASS.5.LEGAL.MODES,X
|
||||||
|
.7 AND CLASS.5.MODE.MASKS,Y
|
||||||
|
BNE .4 ...LEGAL
|
||||||
|
LDA PASS
|
||||||
|
BEQ .1 ...IN PASS 1
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .2 ...TOO BIG FOR ZP
|
||||||
|
.1 DEY CHANGE ABS TO ZP MODE
|
||||||
|
BMI .2 ...WASN'T ABS
|
||||||
|
TYA
|
||||||
|
LSR
|
||||||
|
BCC .2 ...WASN'T ABS
|
||||||
|
LDA CLASS.5.LEGAL.MODES,X
|
||||||
|
AND CLASS.5.MODE.MASKS,Y
|
||||||
|
BNE .3 ...LEGAL AFTERALL
|
||||||
|
.2 JMP ERBA.EMIT.TWO INVALID ADDRESS MODE
|
||||||
|
.3 DEC ADDR.LENGTH
|
||||||
|
*---FORM OPCODE------------------
|
||||||
|
.4 LDA ADDR.MODE.BITS.CLASS.5,Y
|
||||||
|
EOR CLASS.5.OPS,X
|
||||||
|
LDY #$89
|
||||||
|
CMP #$20
|
||||||
|
BEQ .5
|
||||||
|
LDY #$9C
|
||||||
|
CMP #$6C
|
||||||
|
BEQ .5
|
||||||
|
LDY #$9E
|
||||||
|
CMP #$7C
|
||||||
|
BNE .6
|
||||||
|
.5 TYA
|
||||||
|
.6 JMP EMIT.OP.AND.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
OP.SHIFTS
|
||||||
|
JSR ASM65816.GNC CHECK FOR ACCUMULATOR MODE
|
||||||
|
BNE .2 NOT ACCUM MODE
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BNE .2 NOT ACCUM MODE
|
||||||
|
*---ACCUMULATOR MODE-------------
|
||||||
|
LDA OPBASE
|
||||||
|
EOR #$08 MAKE ACCUM MODE OPCODE
|
||||||
|
BPL .1 NOT INC OR DEC
|
||||||
|
PHA
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
AND #$20 ONLY IN 65C02 AND ABOVE
|
||||||
|
BEQ .5
|
||||||
|
PLA
|
||||||
|
EOR #$F0 CHANGE EA-->1A, CA-->3A
|
||||||
|
.1 JMP ASM65816.EMIT
|
||||||
|
*---MODES WITH OPERAND FIELD-----
|
||||||
|
.2 DEC CHAR.PNTR
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
CPY #5 ONLY MODES 1...4 LEGAL
|
||||||
|
BCS .5
|
||||||
|
TYA
|
||||||
|
BEQ .5 ...NO IMMEDIATE MODE ALLOWED
|
||||||
|
LDA ADDR.MODE.BITS.CLASS.1,Y
|
||||||
|
EOR OPBASE
|
||||||
|
JMP EMIT.OP.AND.VALUE
|
||||||
|
.5 JMP ERBA.EMIT.TWO INVALID ADDRESS MODE
|
||||||
|
*--------------------------------
|
||||||
|
OP.REL8
|
||||||
|
.DO SWEET.16
|
||||||
|
LDA OPBASE CHECK FOR 'BNM1' SWEET-16 OP
|
||||||
|
CMP #$09
|
||||||
|
BNE .1 ...NOT 'BNM1'
|
||||||
|
JSR ASM65816.GNC CHECK FOR '1'
|
||||||
|
CMP #'1'
|
||||||
|
BNE BADOPERR ...NO, SO BAD OP
|
||||||
|
.FIN
|
||||||
|
.1 JSR ASM65816.EXPR
|
||||||
|
LDA OPBASE
|
||||||
|
OP.REL8.A
|
||||||
|
JSR ASM65816.EMIT EMIT OPCODE
|
||||||
|
LDA EXP.UNDEF
|
||||||
|
BMI GOEMIT ...UNDEFINED
|
||||||
|
LDY EXP.VALUE+1
|
||||||
|
CLC COMPUTE RELATIVE OFFSET
|
||||||
|
LDA EXP.VALUE
|
||||||
|
SBC ORGN
|
||||||
|
STA EXP.VALUE
|
||||||
|
BPL .2
|
||||||
|
INY
|
||||||
|
.2 TYA
|
||||||
|
SBC ORGN+1
|
||||||
|
BNE ERR.RANGE.EMIT.ONE
|
||||||
|
EMIT.EXP.BYTE
|
||||||
|
LDA EXP.VALUE
|
||||||
|
GOEMIT JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
BADOPERR
|
||||||
|
LDA #ERR.BAD.OPCODE
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* BRL & PER, 16-bit relative
|
||||||
|
*--------------------------------
|
||||||
|
OP.REL16
|
||||||
|
JSR ASM65816.EXPR Get value of expression
|
||||||
|
JSR EMIT.OPBASE Emit the opcode, bumping origin once
|
||||||
|
LDA EXP.UNDEF If undefined, say so
|
||||||
|
BMI .3 (If we didn't, might be RANGE ERR)
|
||||||
|
CLC ADD 2 MORE TO ORIGIN
|
||||||
|
LDY ORGN+2
|
||||||
|
LDA ORGN
|
||||||
|
ADC #2
|
||||||
|
STA EXP.VALUE+3 (TEMP)
|
||||||
|
LDA ORGN+1
|
||||||
|
ADC #0
|
||||||
|
BCC .2
|
||||||
|
INY BANK BYTE
|
||||||
|
.2 CPY EXP.VALUE+2 IN SAME BANK AS TARGET?
|
||||||
|
BNE ERR.RANGE.EMIT.TWO ...NO, ERR RANGE
|
||||||
|
STA EXP.VALUE+2 YES, SAVE IN ANOTHER TEMP
|
||||||
|
LDA EXP.VALUE TARGET-ORGN+3
|
||||||
|
SBC EXP.VALUE+3
|
||||||
|
STA EXP.VALUE
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
SBC EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
.3 LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
ERR.RANGE.EMIT.TWO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ERR.RANGE.EMIT.ONE
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ASM65816.RAER
|
||||||
|
LDA #ERR.RANGE
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
OP.MOVES
|
||||||
|
JSR EMIT.OPBASE
|
||||||
|
JSR ASM65816.EXPR GET SOURCE BANK
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
PHA
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #',' MUST HAVE COMMA HERE
|
||||||
|
BNE .1 ...ILLEGAL
|
||||||
|
JSR ASM65816.EXP1 GET DESTINATION BANK
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
PLA
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
.1 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
OP.JUMPS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
LDA LEGAL.JUMP.MODES,Y
|
||||||
|
BMI .4 ...ILLEGAL
|
||||||
|
ORA OPBASE
|
||||||
|
TAY
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
BMI .1 65816, ALLOW ALL MODES
|
||||||
|
CPY #5 DISALLOW JML, JSL, AND PEA
|
||||||
|
BCS .4 ...ONE OF THOSE
|
||||||
|
CPY #1 DISALLOW JMP LONG
|
||||||
|
BEQ .4
|
||||||
|
AND #$20 SEE IF 65C02
|
||||||
|
BNE .1 ...YES
|
||||||
|
CPY #3 ...NO, DISALLOW JMP (ABS,X)
|
||||||
|
BEQ .4 ...THAT'S WHAT IT IS...
|
||||||
|
.1 LDA JUMP.OPCODES,Y
|
||||||
|
BEQ .4 ...ILLEGAL
|
||||||
|
LDY #2 ASSUME TWO BYTE ADDRESS
|
||||||
|
CMP #$5C CHECK FOR "JMP LONG"
|
||||||
|
BEQ .2 ...YES, 3 BYTES OF ADDRESS
|
||||||
|
CMP #$22 CHECK FOR "JSL"
|
||||||
|
BNE .3 ...NO, ONLY 2 BYTES OF ADDRESS
|
||||||
|
.2 INY 3 BYTE ADDRESS
|
||||||
|
.3 STY ADDR.LENGTH
|
||||||
|
JMP EMIT.OP.AND.VALUE
|
||||||
|
.4 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
LONG.INDIRECT
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #']'
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BEQ .1 ...[EXP]
|
||||||
|
CMP #','
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.GNC.UC
|
||||||
|
CMP #'Y'
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
LDA #$47 ...[EXP],Y
|
||||||
|
.HS 2C
|
||||||
|
.1 LDA #$44 ...[EXP],Y
|
||||||
|
STA MODE.BYTE
|
||||||
|
LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP CHECK.IF.SUFFIX.LEGAL
|
||||||
|
*--------------------------------
|
||||||
|
IMMEDIATE
|
||||||
|
JSR ASM65816.GNC.UC
|
||||||
|
CMP DLIM 16-BIT IMMEDIATE?
|
||||||
|
BNE .1 ...NO, BACKUP
|
||||||
|
LDA LEVEL.MASK 16-BIT IMMEDIATE OKAY?
|
||||||
|
BPL ERBA.EMIT.TWO ...NOT AT 65816 LEVEL
|
||||||
|
INC ADDR.LENGTH ...YES, INCREASE LENGTH
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.1 DEC CHAR.PNTR
|
||||||
|
.2 JSR ASM65816.EXP1
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BNE ERBA.EMIT.TWO ILLEGAL
|
||||||
|
LDA DLIM
|
||||||
|
CMP #'/' #=23, /=2F, ^=5E
|
||||||
|
BCC .4 ...#
|
||||||
|
BEQ .3 .../
|
||||||
|
JSR ASM65816.EXP.OVER.256 ...^
|
||||||
|
.3 JSR ASM65816.EXP.OVER.256
|
||||||
|
.4 LDY #0 SIGNAL IMMEDIATE MODE
|
||||||
|
STY MODE.BYTE COPS NEEDS THIS <<<12-16-85>>>
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ERBA.EMIT.THREE
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ASM65816.ERBA
|
||||||
|
LDA #ERR.BAD.ADDRESS
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
ASM65816.EMIT.ZERO LDA #0
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN:
|
||||||
|
* # BYTES IN ADDRESS IN ADDR.LENGTH
|
||||||
|
* (Y) = INDEX TO ADDR.MODE.BITS
|
||||||
|
*--------------------------------
|
||||||
|
GENERAL.OPERAND
|
||||||
|
JSR ASM65816.GNNB GET NEXT NON-BLANK
|
||||||
|
BCS ERBA.EMIT.TWO ...NO OPERAND
|
||||||
|
*---PARSE PREFIX-----------------
|
||||||
|
LDY #1
|
||||||
|
STY ADDR.LENGTH
|
||||||
|
STA DLIM
|
||||||
|
CMP #'('
|
||||||
|
BEQ .3 ...indirect, must be ZP
|
||||||
|
CMP #'['
|
||||||
|
BEQ LONG.INDIRECT
|
||||||
|
CMP #'#'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'/'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'^'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'<'
|
||||||
|
BEQ .3 MAKE FORCE SIZE = 1
|
||||||
|
DEY Y=0
|
||||||
|
CMP #'>'
|
||||||
|
BNE .2 ...SIZE NOT FORCED
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
LDY #3 Y=3
|
||||||
|
CMP DLIM IS IT ">>"?
|
||||||
|
BEQ .3 ...YES
|
||||||
|
DEY Y=2
|
||||||
|
STA DLIM CHANGE DLIM TO NEW VALUE
|
||||||
|
CMP #'(' IS IT (?
|
||||||
|
BEQ .3 ...YES, >(
|
||||||
|
.2 DEC CHAR.PNTR ...NO, SO BACKUP
|
||||||
|
.3 STY FORCE.ADDR.SIZE
|
||||||
|
*---PARSE THE EXPRESSION---------
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
*---FIGURE # OF BYTES------------
|
||||||
|
LDX FORCE.ADDR.SIZE
|
||||||
|
BNE .6 ...FORCED WITH <, >, OR >>
|
||||||
|
LDX #2 ASSUME 2-BYTE ADDRESS
|
||||||
|
LDA EXP.UNDEF
|
||||||
|
BMI .6
|
||||||
|
LDA PASS IGNORE FWD REF FLAG IN PASS 1
|
||||||
|
BEQ .4 ...PASS 1
|
||||||
|
LDA EXP.FWDREF ...PASS 2, DEFINED
|
||||||
|
BNE .4 ...BUT NOT FWD REF
|
||||||
|
LDA EXP.VALUE+3 ...FWD REF MUST BE ONLY
|
||||||
|
ORA EXP.VALUE+2 16 BITS
|
||||||
|
BEQ .6 ...IT FITS!
|
||||||
|
BNE ERBA.1 ...ALWAYS, ERBA
|
||||||
|
.4 LDA EXP.VALUE+3 DO NOT ALLOW 32-BITS
|
||||||
|
BNE ERBA.1 ...BAD ADDR
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
BNE .5 ...3-BYTE ADDRESS
|
||||||
|
DEX X=1
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
BEQ .6 ...ZP
|
||||||
|
.5 INX
|
||||||
|
.6 STX ADDR.LENGTH
|
||||||
|
*---PARSE SUFFIX-----------------
|
||||||
|
DEX MAKE 0, 1, OR 2
|
||||||
|
STX MODE.BYTE
|
||||||
|
LDX #6
|
||||||
|
.7 JSR ASM65816.GNC.UC
|
||||||
|
.8 CMP MODE.CHARS,X
|
||||||
|
BEQ .9
|
||||||
|
CLC
|
||||||
|
ROL MODE.BYTE
|
||||||
|
DEX
|
||||||
|
BPL .8
|
||||||
|
BMI ERBA.1
|
||||||
|
.9 CMP #' ' BLANK?
|
||||||
|
BEQ CHECK.IF.SUFFIX.LEGAL ...YES, END OF OPERAND
|
||||||
|
CMP #')' RIGHT PAREN?
|
||||||
|
BNE .10 ...NO
|
||||||
|
LDA DLIM WAS THERE A LEFT PAREN?
|
||||||
|
CMP #'('
|
||||||
|
BNE ERBA.1 ...NO
|
||||||
|
.10 SEC
|
||||||
|
ROL MODE.BYTE
|
||||||
|
DEX
|
||||||
|
BPL .7
|
||||||
|
ERBA.1 JMP ERBA.EMIT.TWO ILLEGAL
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.IF.SUFFIX.LEGAL
|
||||||
|
LDY #0 SEARCH FORWARD FOR VARIOUS REASONS
|
||||||
|
LDA MODE.BYTE
|
||||||
|
.13 INY
|
||||||
|
CPY #MODE.TABLE.SIZE+1
|
||||||
|
BCS ERBA.1 ...END OF TABLE
|
||||||
|
CMP MODE.TABLE-1,Y
|
||||||
|
BNE .13 ...KEEP LOOKING
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
BMI .15 ...65816 LEVEL, ALL LEGAL
|
||||||
|
CPY #9
|
||||||
|
BCC .15 ...6502 MODES
|
||||||
|
BEQ .14 ...65C02 MODE
|
||||||
|
CPY #16
|
||||||
|
BNE ERBA.1
|
||||||
|
.14 AND #$20 AT C02 LEVEL?
|
||||||
|
BEQ ERBA.1 ...NO
|
||||||
|
.15 RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.EXP.OVER.256
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
STA EXP.VALUE
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
STA EXP.VALUE+2
|
||||||
|
LDA #0
|
||||||
|
STA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
.DO ROCKWELL
|
||||||
|
*--------------------------------
|
||||||
|
* ROCKWELL 65C02 EXCLUSIVES
|
||||||
|
*
|
||||||
|
* RMB bit#,zp
|
||||||
|
* SMB bit#,zp
|
||||||
|
* BBR bit#,zp,reladdr
|
||||||
|
* BBS bit#,zp,reladdr
|
||||||
|
*--------------------------------
|
||||||
|
OP.ROCKB
|
||||||
|
JSR OP.ROCKWELL
|
||||||
|
JSR ASM65816.GNC REQUIRE A COMMA
|
||||||
|
CMP #','
|
||||||
|
BNE .1 ...NO COMMA
|
||||||
|
LDA EXP.VALUE
|
||||||
|
PHA SAVE ZP VALUE
|
||||||
|
JSR ASM65816.EXP1 GET BRANCH EXPRESSION
|
||||||
|
JSR EMIT.OPBASE <<<12-16-85>>>
|
||||||
|
PLA
|
||||||
|
JMP OP.REL8.A
|
||||||
|
.1 JMP ERBA.EMIT.THREE
|
||||||
|
*--------------------------------
|
||||||
|
OP.ROCKC
|
||||||
|
JSR OP.ROCKWELL
|
||||||
|
.FIN
|
||||||
|
EMIT.OP.AND.EXP.BYTE
|
||||||
|
JSR EMIT.OPBASE <<<12-16-85>>>
|
||||||
|
JMP EMIT.EXP.BYTE <<<12-16-85>>>
|
||||||
|
*--------------------------------
|
||||||
|
.DO ROCKWELL
|
||||||
|
OP.ROCKWELL
|
||||||
|
JSR ASM65816.EXPR GET BIT #
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .1 ...MUST BE SMALL NUMBER!
|
||||||
|
LDA EXP.VALUE
|
||||||
|
CMP #8 MUST BE 0...7
|
||||||
|
BCS .1 ...TOO LARGE
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ORA OPBASE MERGE INTO OPCODE
|
||||||
|
STA OPBASE
|
||||||
|
JSR ASM65816.GNC NEED A COMMA NOW
|
||||||
|
CMP #','
|
||||||
|
BNE .1
|
||||||
|
JSR ASM65816.EXP1 GET ZP VALUE
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .1 MUST BE ZERO PAGE
|
||||||
|
RTS
|
||||||
|
.1 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
.ELSE
|
||||||
|
OP.ROCKB
|
||||||
|
OP.ROCKC
|
||||||
|
JMP BADOPERR
|
||||||
|
.FIN
|
||||||
|
|
||||||
|
.DO SWEET.16
|
||||||
|
*--------------------------------
|
||||||
|
* SWEET-16 OPCODES
|
||||||
|
*--------------------------------
|
||||||
|
OP.POP
|
||||||
|
JSR ASM65816.GNC.UC SEE WHICH: POP OR POPD
|
||||||
|
BEQ OP.XN ...POP
|
||||||
|
CMP #'D'
|
||||||
|
BEQ .1
|
||||||
|
JMP BADOPERR
|
||||||
|
.1 LDA #$A2 ...POP
|
||||||
|
STA OPBASE
|
||||||
|
*--------------------------------
|
||||||
|
OP.XN
|
||||||
|
JSR ASM65816.GNNB
|
||||||
|
BCS SWEET.ERBA
|
||||||
|
CMP #'@'
|
||||||
|
BNE .1 ...NOT '@N'
|
||||||
|
LDA OPBASE ...'@N', SEE IF LEGAL
|
||||||
|
AND #2
|
||||||
|
BEQ SWEET.ERBA ...NOT LEGAL WITH THIS OP
|
||||||
|
LDA OPBASE ...LEGAL, ADD $20
|
||||||
|
ADC #$1F .CS., SO 1F IS 20
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.1 DEC CHAR.PNTR Backup character pointer
|
||||||
|
LDA OPBASE
|
||||||
|
LSR
|
||||||
|
BCC SWEET.ERBA 'N' NOT LEGAL FOR THIS OP
|
||||||
|
LDA OPBASE
|
||||||
|
.2 AND #$F0 CLEAR AWAY LEGALITY FLAGS
|
||||||
|
STA OPBASE
|
||||||
|
JSR ASM65816.EXP1 GET REGISTER NUMBER
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE SWEET.RAER
|
||||||
|
LDA EXP.VALUE
|
||||||
|
CMP #$10
|
||||||
|
BCS SWEET.RAER
|
||||||
|
ORA OPBASE
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
SWEET.ERBA JMP ASM65816.ERBA
|
||||||
|
SWEET.RAER JMP ASM65816.RAER
|
||||||
|
*--------------------------------
|
||||||
|
OP.SET
|
||||||
|
JSR OP.XN
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #','
|
||||||
|
BNE SWEET.ERBA
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.ELSE
|
||||||
|
OP.POP
|
||||||
|
OP.XN
|
||||||
|
OP.SET
|
||||||
|
JMP BADOPERR
|
||||||
|
.FIN
|
||||||
|
*--------------------------------
|
||||||
|
LEGAL.JUMP.MODES
|
||||||
|
.HS FF.00.00.FF.FF.FF
|
||||||
|
.HS FF.FF.03.02.FF.FF
|
||||||
|
.HS 01.FF.02.FF.03
|
||||||
|
*--------------------------------
|
||||||
|
JUMP.OPCODES
|
||||||
|
.HS 4C.5C.6C.7C JMP
|
||||||
|
.HS 20.22.00.FC JSR
|
||||||
|
.HS 00.00.DC.00 JML
|
||||||
|
.HS 22.22.00.00 JSL
|
||||||
|
.HS F4.00.00.00 PEA
|
||||||
|
*--------------------------------
|
||||||
|
MODE.CHARS
|
||||||
|
.AS / Y,)SX,/
|
||||||
|
*--------------------------------
|
||||||
|
MODE.TABLE
|
||||||
|
.HS 00 1 -- DIRECT
|
||||||
|
.HS 40 2 -- ABSOLUTE
|
||||||
|
.HS 30 3 -- DIRECT,X
|
||||||
|
.HS 70 4 -- ABSOLUTE,X
|
||||||
|
.HS 21 5 -- DIRECT,Y
|
||||||
|
.HS 61 6 -- ABSOLUTE,Y
|
||||||
|
.HS 07 7 -- (DIRECT),Y
|
||||||
|
.HS 34 8 -- (DIRECT,X)
|
||||||
|
*---IN 65C02, 802, 816-----------
|
||||||
|
.HS 04 9 -- (DIRECT)
|
||||||
|
*---IN 65802, 816----------------
|
||||||
|
.HS 28 A -- ...,S
|
||||||
|
.HS 2F B -- (...,S),Y
|
||||||
|
*---ONLY IN 65816----------------
|
||||||
|
.HS 80 C -- LONG
|
||||||
|
.HS B0 D -- LONG,X
|
||||||
|
.HS 44 E -- >(DIRECT)
|
||||||
|
.HS 47 F -- >(DIRECT),Y
|
||||||
|
*---SPECIAL FOR JMP,JSR (A,X)----
|
||||||
|
.HS 74 10 -- (ABSOLUTE,X)
|
||||||
|
MODE.TABLE.SIZE .EQ *-MODE.TABLE
|
||||||
|
*--------------------------------
|
||||||
|
ADDR.MODE.BITS.CLASS.1
|
||||||
|
.HS 08 0 -- IMMEDIATE
|
||||||
|
.HS 04 1 -- DIRECT
|
||||||
|
.HS 0C 2 -- ABSOLUTE
|
||||||
|
.HS 14 3 -- DIRECT,X
|
||||||
|
.HS 1C 4 -- ABSOLUTE,X
|
||||||
|
.HS FF 5 -- DIRECT,Y <<<NOT LEGAL>>>
|
||||||
|
.HS 18 6 -- ABSOLUTE,Y
|
||||||
|
.HS 10 7 -- (DIRECT),Y
|
||||||
|
.HS 00 8 -- (DIRECT,X)
|
||||||
|
*---IN 65C02, 802, 816-----------
|
||||||
|
.HS 13 9 -- (DIRECT)
|
||||||
|
*---IN 65802, 816----------------
|
||||||
|
.HS 02 A -- ...,S
|
||||||
|
.HS 12 B -- (...,S),Y
|
||||||
|
*---ONLY IN 65816----------------
|
||||||
|
.HS 0E C -- LONG
|
||||||
|
.HS 1E D -- LONG,X
|
||||||
|
.HS 06 E -- >(DIRECT)
|
||||||
|
.HS 16 F -- >(DIRECT),Y
|
||||||
|
*--------------------------------
|
||||||
|
ADDR.MODE.BITS.CLASS.5
|
||||||
|
.HS 00 0 -- IMMEDIATE
|
||||||
|
.HS 04 1 -- DIRECT
|
||||||
|
.HS 0C 2 -- ABSOLUTE
|
||||||
|
.HS 14 3 -- DIRECT,X
|
||||||
|
.HS 1C 4 -- ABSOLUTE,X
|
||||||
|
.HS 14 5 -- DIRECT,Y
|
||||||
|
.HS 1C 6 -- ABSOLUTE,Y
|
||||||
|
*--------------------------------
|
||||||
|
CLASS.5.MODE.MASKS
|
||||||
|
.HS 80.40.20.10.08.04.02
|
||||||
|
*--------------------------------
|
||||||
|
FIRST.LETTER.TABLE
|
||||||
|
.DA #LTR.A-OPCODE.TABLE
|
||||||
|
.DA #LTR.B-OPCODE.TABLE
|
||||||
|
.DA #LTR.C-OPCODE.TABLE
|
||||||
|
.DA #LTR.D-OPCODE.TABLE
|
||||||
|
.DA #LTR.E-OPCODE.TABLE
|
||||||
|
.DA #LTR.F-OPCODE.TABLE
|
||||||
|
.DA #LTR.G-OPCODE.TABLE
|
||||||
|
.DA #LTR.H-OPCODE.TABLE
|
||||||
|
.DA #LTR.I-OPCODE.TABLE
|
||||||
|
.DA #LTR.J-OPCODE.TABLE
|
||||||
|
.DA #LTR.K-OPCODE.TABLE
|
||||||
|
.DA #LTR.L-OPCODE.TABLE
|
||||||
|
.DA #LTR.M-OPCODE.TABLE
|
||||||
|
.DA #LTR.N-OPCODE.TABLE
|
||||||
|
.DA #LTR.O-OPCODE.TABLE
|
||||||
|
.DA #LTR.P-OPCODE.TABLE
|
||||||
|
.DA #LTR.Q-OPCODE.TABLE
|
||||||
|
.DA #LTR.R-OPCODE.TABLE
|
||||||
|
.DA #LTR.S-OPCODE.TABLE
|
||||||
|
.DA #LTR.T-OPCODE.TABLE
|
||||||
|
.DA #LTR.U-OPCODE.TABLE
|
||||||
|
.DA #LTR.V-OPCODE.TABLE
|
||||||
|
.DA #LTR.W-OPCODE.TABLE
|
||||||
|
.DA #LTR.X-OPCODE.TABLE
|
||||||
|
.DA #LTR.Y-OPCODE.TABLE
|
||||||
|
.DA #LTR.Z-OPCODE.TABLE
|
||||||
|
*--------------------------------
|
||||||
|
* TWO KINDS OF ENTRIES, DISTINGUISHED BY FIRST BIT:
|
||||||
|
* 8-BIT ENTRIES: FIRST BIT = 0
|
||||||
|
* 24-BIT ENTRIES: FIRST BIT = 1
|
||||||
|
*
|
||||||
|
* FIRST ENTRY AT EACH LETTER IS AN 8-BIT ENTRY.
|
||||||
|
* EACH 8-BIT ENTRY IS FOLLOWED BY ONE OR MORE
|
||||||
|
* 24-BIT ENTRIES.
|
||||||
|
* THE SUB-LIST OF 24-BIT ENTRIES IS TERMINATED
|
||||||
|
* BY THE NEXT 8-BIT ENTRY.
|
||||||
|
* THE LIST OF 8-BIT ENTRIES IS TERMINATED BY
|
||||||
|
* AN 8-BIT ENTRY WITH BIT 6 = 1.
|
||||||
|
*
|
||||||
|
* THE VALUE OF BITS 5-0 IN AN 8-BIT ENTRY
|
||||||
|
* IS THE DIMINISHED ASCII CODE FOR THE
|
||||||
|
* SECOND LETTER OF AN OPCODE.
|
||||||
|
* THE VALUE OF BITS 5-0 OF A 24-BIT ENTRY
|
||||||
|
* IS THE DIMINISHED ASCII CODE FOR THE
|
||||||
|
* THIRD LETTER OF AN OPCODE.
|
||||||
|
* A...Z = $81...9A
|
||||||
|
* BLANK = $E0
|
||||||
|
* '1' = $F1
|
||||||
|
* THE VALUE OF THE SECOND BYTE OF A 24-BIT
|
||||||
|
* ENTRY IS AN OPCODE BASE.
|
||||||
|
* THE THIRD BYTE OF A 24-BIT ENTRY HAS TWO PARTS:
|
||||||
|
* BITS 4-1 ARE AN INDEX TO THE OP.MODE
|
||||||
|
* JUMP TABLE IN ASM.65816
|
||||||
|
* BITS 7-5 AND 0 ARE LEVEL MASK BITS.
|
||||||
|
* 000XXXX0 = 6502 OPCODE
|
||||||
|
* 000XXXX1 = SWEET-16
|
||||||
|
* 001XXXX0 = 65C02
|
||||||
|
* 010XXXX0 = ROCKWELL SPECIALS
|
||||||
|
* 100XXXX0 = 65816
|
||||||
|
*
|
||||||
|
* LEVEL.MASK = $00 FOR 6502
|
||||||
|
* = $20 FOR 65C02
|
||||||
|
* = $60 FOR ROCKWELL C02
|
||||||
|
* = $A0 FOR 65816
|
||||||
|
*--------------------------------
|
||||||
|
OP..1 .SE 0
|
||||||
|
OP..2 .SE 0
|
||||||
|
.MA OP
|
||||||
|
.DO "]1"=OP..1=0
|
||||||
|
LTR.]1 .DA #"]2"-$80 bits 76 = 01
|
||||||
|
OP..1 .SE "]1"
|
||||||
|
OP..2 .SE "]2"
|
||||||
|
.ELSE
|
||||||
|
.DO "]2"=OP..2=0
|
||||||
|
.DA #"]2"-$C0 bits 76 = 00
|
||||||
|
OP..2 .SE "]2"
|
||||||
|
.FIN
|
||||||
|
.FIN
|
||||||
|
.DA #"]3"^$40,#$]4,#O..]5!O..]6 bits 76 = 10 or 11
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
O..65816 .EQ $80
|
||||||
|
O..65R02 .EQ $40
|
||||||
|
O..65C02 .EQ $20
|
||||||
|
O..SWEET .EQ $01
|
||||||
|
O.. .EQ $00
|
||||||
|
*--------------------------------
|
||||||
|
OPCODE.TABLE
|
||||||
|
LTR.F
|
||||||
|
LTR.G
|
||||||
|
LTR.H
|
||||||
|
LTR.K
|
||||||
|
LTR.Q
|
||||||
|
LTR.U
|
||||||
|
LTR.V
|
||||||
|
LTR.Y
|
||||||
|
LTR.Z .HS 00
|
||||||
|
*--------------------------------
|
||||||
|
>OP A,D,C,61,COPS
|
||||||
|
>OP A,D,D,A1,XN,SWEET
|
||||||
|
>OP A,N,D,21,COPS
|
||||||
|
>OP A,S,L,02,SHIFTS
|
||||||
|
>OP B,C,C,90,REL8
|
||||||
|
>OP B,C,S,B0,REL8
|
||||||
|
>OP B,C," ",03,REL8,SWEET
|
||||||
|
>OP B,E,Q,F0,REL8
|
||||||
|
>OP B,G,E,B0,REL8
|
||||||
|
>OP B,I,T,00,BITS
|
||||||
|
>OP B,L,T,90,REL8
|
||||||
|
>OP B,M,I,30,REL8
|
||||||
|
>OP B,M," ",05,REL8,SWEET
|
||||||
|
>OP B,M,1,08,REL8,SWEET
|
||||||
|
>OP B,N,E,D0,REL8
|
||||||
|
>OP B,N,C,02,REL8,SWEET
|
||||||
|
>OP B,N,M,09,REL8,SWEET (BNM1)
|
||||||
|
>OP B,N,Z,07,REL8,SWEET
|
||||||
|
>OP B,P,L,10,REL8
|
||||||
|
>OP B,P," ",04,REL8,SWEET
|
||||||
|
>OP B,R,A,80,REL8,65C02
|
||||||
|
>OP B,R,K,00,SNGL
|
||||||
|
>OP B,R,L,82,REL16,65816
|
||||||
|
>OP B,R," ",01,REL8,SWEET
|
||||||
|
>OP B,V,C,50,REL8
|
||||||
|
>OP B,V,S,70,REL8
|
||||||
|
>OP B,B,R,0F,ROCKB,65R02
|
||||||
|
>OP B,B,S,8F,ROCKB,65R02
|
||||||
|
>OP B,K," ",0A,SNGL,SWEET
|
||||||
|
>OP B,S," ",0C,REL8,SWEET
|
||||||
|
>OP B,Z," ",06,REL8,SWEET
|
||||||
|
>OP C,L,C,18,SNGL
|
||||||
|
>OP C,L,D,D8,SNGL
|
||||||
|
>OP C,L,I,58,SNGL
|
||||||
|
>OP C,L,V,B8,SNGL
|
||||||
|
>OP C,M,P,C1,COPS
|
||||||
|
>OP C,O,P,02,CRS,65816
|
||||||
|
>OP C,P,X,04,BITS
|
||||||
|
>OP C,P,Y,03,BITS
|
||||||
|
>OP C,P,R,D1,XN,SWEET
|
||||||
|
>OP D,E,C,C2,SHIFTS
|
||||||
|
>OP D,E,X,CA,SNGL
|
||||||
|
>OP D,E,Y,88,SNGL
|
||||||
|
>OP D,C,R,F1,XN,SWEET
|
||||||
|
>OP E,O,R,41,COPS
|
||||||
|
>OP I,N,C,E2,SHIFTS
|
||||||
|
>OP I,N,X,E8,SNGL
|
||||||
|
>OP I,N,Y,C8,SNGL
|
||||||
|
>OP I,N,R,E1,XN,SWEET
|
||||||
|
>OP J,M,L,08,JUMPS,65816
|
||||||
|
>OP J,M,P,00,JUMPS
|
||||||
|
>OP J,S,L,0C,JUMPS,65816
|
||||||
|
>OP J,S,R,04,JUMPS
|
||||||
|
>OP L,D,A,A1,COPS
|
||||||
|
>OP L,D,X,02,BITS
|
||||||
|
>OP L,D,Y,01,BITS
|
||||||
|
>OP L,D," ",23,XN,SWEET
|
||||||
|
>OP L,D,D,42,XN,SWEET
|
||||||
|
>OP L,S,R,42,SHIFTS
|
||||||
|
>OP M,V,N,54,MOVES,65816
|
||||||
|
>OP M,V,P,44,MOVES,65816
|
||||||
|
>OP N,O,P,EA,SNGL
|
||||||
|
>OP O,R,A,01,COPS
|
||||||
|
>OP P,E,A,10,JUMPS,65816
|
||||||
|
>OP P,E,I,0A,BITS,65816
|
||||||
|
>OP P,E,R,62,REL16,65816
|
||||||
|
>OP P,H,A,48,SNGL
|
||||||
|
>OP P,H,B,8B,SNGL,65816
|
||||||
|
>OP P,H,D,0B,SNGL,65816
|
||||||
|
>OP P,H,K,4B,SNGL,65816
|
||||||
|
>OP P,H,P,08,SNGL
|
||||||
|
>OP P,H,X,DA,SNGL,65C02
|
||||||
|
>OP P,H,Y,5A,SNGL,65C02
|
||||||
|
>OP P,L,A,68,SNGL
|
||||||
|
>OP P,L,B,AB,SNGL,65816
|
||||||
|
>OP P,L,D,2B,SNGL,65816
|
||||||
|
>OP P,L,P,28,SNGL
|
||||||
|
>OP P,L,X,FA,SNGL,65C02
|
||||||
|
>OP P,L,Y,7A,SNGL,65C02
|
||||||
|
>OP P,O,P,62,POP,SWEET (POP,POPD)
|
||||||
|
>OP R,E,P,C2,CRS,65816
|
||||||
|
>OP R,O,L,22,SHIFTS
|
||||||
|
>OP R,O,R,62,SHIFTS
|
||||||
|
>OP R,T,I,40,SNGL
|
||||||
|
>OP R,T,L,6B,SNGL,65816
|
||||||
|
>OP R,T,S,60,SNGL
|
||||||
|
>OP R,T,N,00,SNGL,SWEET
|
||||||
|
>OP R,M,B,07,ROCKC,65R02
|
||||||
|
>OP R,S," ",0B,SNGL,SWEET
|
||||||
|
>OP S,B,C,E1,COPS
|
||||||
|
>OP S,E,C,38,SNGL
|
||||||
|
>OP S,E,D,F8,SNGL
|
||||||
|
>OP S,E,I,78,SNGL
|
||||||
|
>OP S,E,P,E2,CRS,65816
|
||||||
|
>OP S,E,T,11,SET,SWEET
|
||||||
|
>OP S,T,A,81,COPS
|
||||||
|
>OP S,T,P,DB,SNGL,65816
|
||||||
|
>OP S,T,P,72,XN,SWEET
|
||||||
|
>OP S,T,X,06,BITS
|
||||||
|
>OP S,T,Y,05,BITS
|
||||||
|
>OP S,T,Z,07,BITS,65C02
|
||||||
|
>OP S,T," ",33,XN,SWEET
|
||||||
|
>OP S,T,D,52,XN,SWEET
|
||||||
|
>OP S,U,B,B1,XN,SWEET
|
||||||
|
>OP S,M,B,87,ROCKC,65R02
|
||||||
|
>OP T,A,X,AA,SNGL
|
||||||
|
>OP T,A,Y,A8,SNGL
|
||||||
|
>OP T,C,D,5B,SNGL,65816
|
||||||
|
>OP T,C,S,1B,SNGL,65816
|
||||||
|
>OP T,D,C,7B,SNGL,65816
|
||||||
|
>OP T,R,B,09,BITS,65C02
|
||||||
|
>OP T,S,B,08,BITS,65C02
|
||||||
|
>OP T,S,C,3B,SNGL,65816
|
||||||
|
>OP T,S,X,BA,SNGL
|
||||||
|
>OP T,X,A,8A,SNGL
|
||||||
|
>OP T,X,S,9A,SNGL
|
||||||
|
>OP T,X,Y,9B,SNGL,65816
|
||||||
|
>OP T,Y,A,98,SNGL
|
||||||
|
>OP T,Y,X,BB,SNGL,65816
|
||||||
|
>OP W,A,I,CB,SNGL,65816
|
||||||
|
>OP W,D,M,42,SNGL,65816
|
||||||
|
>OP X,B,A,EB,SNGL,65816
|
||||||
|
>OP X,C,E,FB,SNGL,65816
|
||||||
|
.HS 40 <<<TERMINATOR>>>
|
||||||
|
*--------------------------------
|
||||||
|
CLASS.5.OPS
|
||||||
|
* BIT LDY LDX CPY CPX STY STX STZ
|
||||||
|
.HS 20..A0..A2..C0..E0..80..82..60
|
||||||
|
*
|
||||||
|
* TSB TRB PEI
|
||||||
|
.HS 00..10..D0
|
||||||
|
*
|
||||||
|
CLASS.5.LEGAL.MODES
|
||||||
|
.HS F8..F8..E6..E0..E0..70..64..78
|
||||||
|
.HS 60..60..40
|
||||||
|
*
|
||||||
|
* 80 -- IMMEDIATE
|
||||||
|
* 40 -- DIRECT
|
||||||
|
* 20 -- ABSOLUTE
|
||||||
|
* 10 -- DIRECT,X
|
||||||
|
* 08 -- ABSOLUTE,X
|
||||||
|
* 04 -- DIRECT,Y
|
||||||
|
* 02 -- ABSOLUTE,Y
|
||||||
|
* 01 -- <<<NOT USED>>>
|
||||||
|
*--------------------------------
|
||||||
|
* OPCODE TABLE SELECTION
|
||||||
|
* .OP 6502/65C02/R65C02/65816/SWEET16,...
|
||||||
|
*--------------------------------
|
||||||
|
DIR.OP LDA #0
|
||||||
|
STA LEVEL.MASK
|
||||||
|
LDA #15
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
.1 JSR ASM65816.GNC.UC GET NEXT CHARACTER
|
||||||
|
BCS .5 END
|
||||||
|
LDY #-2
|
||||||
|
.2 INY
|
||||||
|
INY
|
||||||
|
LDA PSOP.TABLE,Y
|
||||||
|
BEQ .1 ...END OF TABLE, TRY NEXT CHARACTER
|
||||||
|
CMP CURRENT.CHAR
|
||||||
|
BNE .2 ...NOT THIS ONE
|
||||||
|
.3 LDA PSOP.TABLE+1,Y
|
||||||
|
STA LEVEL.MASK
|
||||||
|
BPL .5
|
||||||
|
LDA #18
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
.5 RTS RETURN TO ASSEMBLER
|
||||||
|
*--------------------------------
|
||||||
|
PSOP.TABLE
|
||||||
|
.DA #'8',#$A0 65816 = $A0
|
||||||
|
.DA #'C',#$20 65C02 = $20
|
||||||
|
.DO ROCKWELL
|
||||||
|
.DA #'R',#$60 ROCKWELL= $60
|
||||||
|
.FIN
|
||||||
|
.DO SWEET.16
|
||||||
|
.DA #'S',#$01 SWEET-16= $01
|
||||||
|
.FIN
|
||||||
|
.DA #0
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/asm65816.s
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
137
SCMASM.30/IO.S.IIE..txt
Normal file
137
SCMASM.30/IO.S.IIE..txt
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP IIE.INIT
|
||||||
|
JMP IIE.WARM
|
||||||
|
JMP IIE.RDKEY
|
||||||
|
JMP S.GET.HORIZ.POSN
|
||||||
|
JMP MON.HOME
|
||||||
|
JMP MON.CLREOL
|
||||||
|
JMP MON.CLREOP
|
||||||
|
JMP MON.UP
|
||||||
|
JMP MON.LF
|
||||||
|
JMP IIE.LEFT
|
||||||
|
JMP IIE.RIGHT
|
||||||
|
JMP IIE.COUT
|
||||||
|
JMP IIE.PICK.SCREEN
|
||||||
|
JMP IIE.HTABX
|
||||||
|
JMP IIE.HTAB
|
||||||
|
JMP IIE.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
IIE.INIT
|
||||||
|
LDA $BF98
|
||||||
|
AND #2
|
||||||
|
BEQ IO.HOME
|
||||||
|
LDA #$99 CTRL-Y
|
||||||
|
JMP $C300
|
||||||
|
*--------------------------------
|
||||||
|
IIE.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR IIE.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.HTAB
|
||||||
|
BIT $C01F
|
||||||
|
BPL .1
|
||||||
|
STA $57B
|
||||||
|
RTS
|
||||||
|
.1 STA CH
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
S.GET.HORIZ.POSN
|
||||||
|
LDA $57B
|
||||||
|
BIT $C01F
|
||||||
|
BMI .1
|
||||||
|
LDA CH
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV SAVE CV
|
||||||
|
JSR MON.INIT
|
||||||
|
TXA GET CV, FALL INTO VTAB
|
||||||
|
IIE.VTAB
|
||||||
|
STA CV
|
||||||
|
JMP MON.VTAB
|
||||||
|
*--------------------------------
|
||||||
|
IIE.RDKEY
|
||||||
|
LDA #40
|
||||||
|
BIT $C01F
|
||||||
|
BPL .1
|
||||||
|
ASL
|
||||||
|
.1 STA SCREEN.WIDTH
|
||||||
|
JSR MON.RDKEY
|
||||||
|
CMP #$FF
|
||||||
|
BNE .2
|
||||||
|
LDA #$88
|
||||||
|
.2 ASL $C061 SET CARRY IF "OPEN APPLE" PRESSED
|
||||||
|
ORA #$80
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.COUT
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .2 ...NORMAL
|
||||||
|
BIT $C01F ...INVERSE; 40- OR 80-COLUMNS?
|
||||||
|
BPL .2 ...40-COLUMN
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR MON.COUT
|
||||||
|
PLA
|
||||||
|
CMP #$20 CONTROL CHAR?
|
||||||
|
BCS .1 ...NO
|
||||||
|
ORA #$40 MAKE PRINTABLE CHARACTER
|
||||||
|
.1 ORA #$80
|
||||||
|
JSR MON.COUT
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.2 JMP MON.COUT
|
||||||
|
*--------------------------------
|
||||||
|
IIE.PICK.SCREEN
|
||||||
|
BIT $C01F
|
||||||
|
BMI .1
|
||||||
|
LDA (BASL),Y
|
||||||
|
RTS
|
||||||
|
.1 TYA
|
||||||
|
LSR
|
||||||
|
TAY
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
LDA $C055
|
||||||
|
BCC .2
|
||||||
|
LDA $C054
|
||||||
|
.2 LDA (BASL),Y
|
||||||
|
BIT $C054
|
||||||
|
PLP
|
||||||
|
PHA SAVE CHAR FROM SCREEN
|
||||||
|
TYA RESTORE Y-REG
|
||||||
|
ROL
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.RIGHT
|
||||||
|
BIT $C01F IN 80-COLUMN MODE?
|
||||||
|
BMI .1 ...YES
|
||||||
|
JMP MON.ADVANC
|
||||||
|
.1 LDA #$9C FORWARD SPACE
|
||||||
|
.HS 2C SKIP TWO BYTES
|
||||||
|
*--------------------------------
|
||||||
|
IIE.LEFT
|
||||||
|
LDA #$88 BACKSPACE
|
||||||
|
JMP MON.COUT
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/io.s.iie
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
270
SCMASM.30/IO.S.IIE.ULTRA.txt
Normal file
270
SCMASM.30/IO.S.IIE.ULTRA.txt
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
* VIDEX ULTRATERM DRIVER -- ASSUME SLOT 3
|
||||||
|
ULTRA.SLOT .EQ 3
|
||||||
|
SKMOD .EQ 1 SHIFT KEY MOD (=0 FOR //E VERSION)
|
||||||
|
*--------------------------------
|
||||||
|
* TO MAKE THE EDIT COMMAND USE MORE THAN 24 LINES,
|
||||||
|
* CHANGE $17 TO $1F OR $2F AT $803A
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.CARD .EQ ULTRA.SLOT*256+$C000
|
||||||
|
ULTRA.COUT1 .EQ ULTRA.SLOT*256+$C007
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.REG .EQ ULTRA.SLOT*16+$C080
|
||||||
|
ULTRA.DATA .EQ ULTRA.SLOT*16+$C081
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.HORIZ .EQ $0578+ULTRA.SLOT
|
||||||
|
ULTRA.START .EQ $06F8+ULTRA.SLOT TOP-OF-SCREEN ADDRESS / 16
|
||||||
|
ULTRA.CHPG .EQ $0678
|
||||||
|
ULTRA.TEMPX .EQ $0778
|
||||||
|
ULTRA.TEMPY .EQ $07F8
|
||||||
|
ULTRA.FLAGS .EQ $07F8+ULTRA.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP ULTRA.INIT
|
||||||
|
JMP ULTRA.WARM
|
||||||
|
JMP ULTRA.READ.KEY.WITH.CASE
|
||||||
|
JMP ULTRA.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP ULTRA.PICK.SCREEN
|
||||||
|
JMP ULTRA.HTABX
|
||||||
|
JMP ULTRA.HTAB
|
||||||
|
JMP ULTRA.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
LDA ULTRA.FLAGS
|
||||||
|
EOR #$40
|
||||||
|
STA ULTRA.FLAGS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR ULTRA.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.GET.HORIZ.POSN
|
||||||
|
LDA ULTRA.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA ULTRA.HORIZ
|
||||||
|
ULTRA.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR ULTRA.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
JSR .1
|
||||||
|
LDA CV
|
||||||
|
|
||||||
|
.1 CLC ADD $A0 OFFSET
|
||||||
|
ADC #$A0
|
||||||
|
JMP ULTRA.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.INIT
|
||||||
|
LDA #80
|
||||||
|
STA ULTRA.SCREEN.WIDTH
|
||||||
|
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||||||
|
STA $C00B SWITCH OFF //E C3 ROM
|
||||||
|
STA $C006 SWITCH OFF //E C100-C7FF ROM
|
||||||
|
JSR ULTRA.CARD
|
||||||
|
ULTRA.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA ULTRA.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA ULTRA.SLOT*2+$BE10,X
|
||||||
|
LDA ULTRA.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA ULTRA.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.VECTORS
|
||||||
|
.DA ULTRA.COUT
|
||||||
|
.DA ULTRA.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP ULTRA.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||||||
|
STA ULTRA.REG
|
||||||
|
LDA #$67
|
||||||
|
STA ULTRA.DATA
|
||||||
|
LDA #$0B
|
||||||
|
STA ULTRA.REG
|
||||||
|
LDA #$08
|
||||||
|
STA ULTRA.DATA
|
||||||
|
.1 LDA $C000
|
||||||
|
BPL .1
|
||||||
|
STA $C010
|
||||||
|
PHA
|
||||||
|
LDA #$06 HIDE THE CURSOR
|
||||||
|
STA ULTRA.DATA
|
||||||
|
PLA
|
||||||
|
CMP #$8D
|
||||||
|
BNE .2
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDA #$8D
|
||||||
|
.DO SKMOD
|
||||||
|
.2 PHA CHECK SHIFT LOCK FLAG
|
||||||
|
LDA ULTRA.FLAGS
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
PLA
|
||||||
|
BCC .5 ...SHIFT LOCK IS ON
|
||||||
|
CMP #$C0
|
||||||
|
BCC .5 NOT IN ALPHA RANGE
|
||||||
|
BEQ .3 ...@ IS CAPITAL P
|
||||||
|
ORA #$20 ADJUST TO LOWER CASE
|
||||||
|
BIT $C063 TEST SHIFT KEY (PB3)
|
||||||
|
BMI .5 ...NOT PRESSED, LOWER CASE
|
||||||
|
CMP #$FB
|
||||||
|
BCC .4 ...NORMAL A-Z
|
||||||
|
.3 EOR #$10 CHANGE @ to P, [\]^_ to KLMNO
|
||||||
|
.4 AND #$DF UPPER CASE
|
||||||
|
.5 RTS
|
||||||
|
.ELSE
|
||||||
|
.2 RTS
|
||||||
|
.FIN
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.COUT
|
||||||
|
CLD
|
||||||
|
PHA
|
||||||
|
STA MON.INVFLG BIT 7 CONTROLS INV/NORM
|
||||||
|
CMP #$20 CATCH INV CTRL CHARS
|
||||||
|
BCS .1 ...NOT ONE
|
||||||
|
ORA #$40 MAKE CTRL VISIBLE
|
||||||
|
.1 JSR ULTRA.COUT1
|
||||||
|
LDA #$FF
|
||||||
|
STA MON.INVFLG
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
W16TBL .DA #80/16
|
||||||
|
.DA #96/16
|
||||||
|
.DA #160/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #160/16
|
||||||
|
.DA #128/16
|
||||||
|
*--------------------------------
|
||||||
|
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.PICK.SCREEN
|
||||||
|
STY ULTRA.TEMPY
|
||||||
|
STX ULTRA.TEMPX
|
||||||
|
BIT $CFFF
|
||||||
|
BIT ULTRA.CARD TURN ON SCREEN
|
||||||
|
*--------------------------------
|
||||||
|
LDA ULTRA.FLAGS GET MODE (0...7)
|
||||||
|
AND #$07
|
||||||
|
TAY Y = MODE INDEX (0...7)
|
||||||
|
*--------------------------------
|
||||||
|
LDA ULTRA.TEMPY HORIZ. POSN
|
||||||
|
CPY #$06 132 COL MODE?
|
||||||
|
BNE .1 ...NOT 132 COLUMNS
|
||||||
|
ADC #14 ADJUST FOR 132 COLUMN MODE
|
||||||
|
.1 STA ULTRA.CHPG
|
||||||
|
*--------------------------------
|
||||||
|
LDX W16TBL,Y GET WIDTH/16
|
||||||
|
LDA ULTRA.START CV*(WIDTH/16) + START
|
||||||
|
.2 CLC INCLUDE 'CLC' IN LOOP ON PURPOSE
|
||||||
|
ADC CV TO FORCE WRAP-AROUND
|
||||||
|
DEX
|
||||||
|
BNE .2
|
||||||
|
*--------------------------------
|
||||||
|
PHA
|
||||||
|
LSR *16
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TAX SAVE PAGE VALUE IN X-REG
|
||||||
|
PLA
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
*--------------------------------
|
||||||
|
CLC + CH (or CH+15 if 132 columns)
|
||||||
|
ADC ULTRA.CHPG
|
||||||
|
STA ULTRA.CHPG
|
||||||
|
BCC .3
|
||||||
|
INX ADD CARRY TO PAGE VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.3 TXA GET PAGE VALUE
|
||||||
|
AND #$0F
|
||||||
|
ORA MODETBL,Y
|
||||||
|
STA ULTRA.REG+2
|
||||||
|
*--------------------------------
|
||||||
|
ASL
|
||||||
|
AND #$0C
|
||||||
|
TAY
|
||||||
|
LDA ULTRA.REG,Y
|
||||||
|
TXA GET PAGE VALUE AGAIN
|
||||||
|
LSR SET CARRY IF IN 2ND PAGE
|
||||||
|
*--------------------------------
|
||||||
|
LDY ULTRA.CHPG
|
||||||
|
LDA $CC00,Y
|
||||||
|
BCC .4
|
||||||
|
LDA $CD00,Y
|
||||||
|
.4 ORA #$80 MAKE HIGH ASCII
|
||||||
|
LDY ULTRA.TEMPY RESTORE REGS
|
||||||
|
LDX ULTRA.TEMPX
|
||||||
|
RTS ALL DONE
|
||||||
|
*--------------------------------
|
||||||
|
MODETBL .HS 40 80X24 (VIDEOTERM EMULATION)
|
||||||
|
.HS 50 96X24
|
||||||
|
.HS 70 160X24
|
||||||
|
.HS 50 80X24 INTERLACE
|
||||||
|
.HS 50 80X32 INTERLACE
|
||||||
|
.HS 50 80X48 INTERLACE
|
||||||
|
.HS 70 132X24 INTERLACE
|
||||||
|
.HS 70 128X32 INTERLACE
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/io.s.ultra
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
219
SCMASM.30/IO.S.IIE.VIDEX.txt
Normal file
219
SCMASM.30/IO.S.IIE.VIDEX.txt
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.SLOT .EQ 3 ASSUME SLOT 3
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.CARD .EQ VIDEX.SLOT*256+$C000
|
||||||
|
VIDEX.COUT1 .EQ VIDEX.SLOT*256+$C007
|
||||||
|
VIDEX.REG .EQ VIDEX.SLOT*16+$C080
|
||||||
|
VIDEX.DATA .EQ VIDEX.SLOT*16+$C081
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.BASEL .EQ $0478+VIDEX.SLOT
|
||||||
|
VIDEX.BASEH .EQ $04F8+VIDEX.SLOT
|
||||||
|
VIDEX.HORIZ .EQ $0578+VIDEX.SLOT
|
||||||
|
VIDEX.CHAR .EQ $0678+VIDEX.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP VIDEX.INIT
|
||||||
|
JMP VIDEX.WARM
|
||||||
|
JMP VIDEX.READ.KEY.WITH.CASE
|
||||||
|
JMP VIDEX.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP VIDEX.PICK.SCREEN
|
||||||
|
JMP VIDEX.HTABX
|
||||||
|
JMP VIDEX.HTAB
|
||||||
|
JMP VIDEX.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
LDA CASEFLG
|
||||||
|
EOR #$80
|
||||||
|
STA CASEFLG
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR VIDEX.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.GET.HORIZ.POSN
|
||||||
|
LDA VIDEX.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA VIDEX.HORIZ
|
||||||
|
VIDEX.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
CLC
|
||||||
|
ADC #$A0
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
LDA CV
|
||||||
|
ORA #$A0
|
||||||
|
JMP VIDEX.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.INIT
|
||||||
|
LDA #80
|
||||||
|
STA VIDEX.SCREEN.WIDTH
|
||||||
|
STA CASEFLG CLEAR CASEFLG (BIT7=0)
|
||||||
|
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||||||
|
JSR VIDEX.CARD
|
||||||
|
VIDEX.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA VIDEX.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA VIDEX.SLOT*2+$BE10,X
|
||||||
|
LDA VIDEX.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA VIDEX.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.VECTORS
|
||||||
|
.DA VIDEX.COUT
|
||||||
|
.DA VIDEX.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP VIDEX.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$67
|
||||||
|
STA VIDEX.DATA
|
||||||
|
LDA #$0B
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$08
|
||||||
|
STA VIDEX.DATA
|
||||||
|
.1 LDA $C000
|
||||||
|
BPL .1
|
||||||
|
STA $C010
|
||||||
|
PHA
|
||||||
|
LDA #$0A HIDE THE CURSOR
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$09
|
||||||
|
STA VIDEX.DATA
|
||||||
|
PLA
|
||||||
|
CMP #$8D
|
||||||
|
BNE .2
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDA #$8D
|
||||||
|
.2 BIT CASEFLG TEST CASE CONVERSION FLAG
|
||||||
|
BPL .6 DO NOT CONVERT
|
||||||
|
CMP #$B0
|
||||||
|
BCC .6 DO NOT CONVERT
|
||||||
|
BIT $C063 TEST PADDLE BUTTON
|
||||||
|
BMI .5 NO SHIFTKEY PRESSED
|
||||||
|
CMP #$B0
|
||||||
|
BEQ .4
|
||||||
|
CMP #$C0
|
||||||
|
BNE .3
|
||||||
|
LDA #$D0
|
||||||
|
.3 CMP #$DB
|
||||||
|
BCC .6
|
||||||
|
AND #$CF
|
||||||
|
BNE .6
|
||||||
|
.4 LDA #$DD
|
||||||
|
.5 ORA #$20
|
||||||
|
.6 AND #$7F
|
||||||
|
STA VIDEX.CHAR
|
||||||
|
ORA #$80
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.COUT
|
||||||
|
CLD
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .1 ...NORMAL
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
PLA
|
||||||
|
ORA #$80 MAKE PRINTABLE CHARACTER
|
||||||
|
CMP #$A0
|
||||||
|
BCS .2
|
||||||
|
ORA #$40
|
||||||
|
.2 JSR VIDEX.COUT1
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.1 JMP VIDEX.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.PICK.SCREEN
|
||||||
|
STX SAVEX
|
||||||
|
BIT $CFFF TURN ON $C800 VIDEO SPACE
|
||||||
|
BIT VIDEX.CARD
|
||||||
|
*---CALCULATE POSITION-----------
|
||||||
|
CLC
|
||||||
|
TYA COLUMN 0-79
|
||||||
|
ADC VIDEX.BASEL
|
||||||
|
PHA
|
||||||
|
LDA #0
|
||||||
|
ADC VIDEX.BASEH
|
||||||
|
PHA
|
||||||
|
ASL
|
||||||
|
AND #$0C USE BIT 0 AND 1 FOR PAGING
|
||||||
|
TAX
|
||||||
|
LDA VIDEX.REG,X
|
||||||
|
PLA
|
||||||
|
LSR ODD/EVEN PAGE
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
*---GET CHAR FROM WINDOW---------
|
||||||
|
LDA $CC00,X
|
||||||
|
BCC .1
|
||||||
|
LDA $CD00,X
|
||||||
|
.1 ORA #$80
|
||||||
|
STA VIDEX.CHAR
|
||||||
|
LDX SAVEX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SAVEX .BS 1
|
||||||
|
CASEFLG .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/io.s.videx
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
166
SCMASM.30/IO.S.STB80.txt
Normal file
166
SCMASM.30/IO.S.STB80.txt
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
STB.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
STB.SLOT .EQ 3
|
||||||
|
*--------------------------------
|
||||||
|
STB.HORIZ .EQ $05F8+STB.SLOT
|
||||||
|
STB.ESCBYT .EQ $06F8+STB.SLOT
|
||||||
|
STB.FLAGS .EQ $0778+STB.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
STB.ENTRY .EQ STB.SLOT*256+$C000
|
||||||
|
STB.RDKEY1 .EQ STB.SLOT*256+$C005
|
||||||
|
STB.COUT1 .EQ STB.SLOT*256+$C019
|
||||||
|
STB.SCREEN .EQ STB.SLOT*256+$C031
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP STB.INIT
|
||||||
|
JMP STB.WARM
|
||||||
|
JMP STB.READ.KEY.WITH.CASE
|
||||||
|
JMP STB.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP STB.PICK.SCREEN
|
||||||
|
JMP STB.HTABX
|
||||||
|
JMP STB.HTAB
|
||||||
|
JMP STB.VTAB
|
||||||
|
*---Case Change MUST go here-----
|
||||||
|
LDA STB.FLAGS
|
||||||
|
EOR #$40
|
||||||
|
STA STB.FLAGS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
STB.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR STB.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.GET.HORIZ.POSN
|
||||||
|
LDA STB.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA STB.HORIZ
|
||||||
|
STB.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR STB.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
JSR .1
|
||||||
|
LDA CV
|
||||||
|
|
||||||
|
.1 CLC
|
||||||
|
ADC #$A0
|
||||||
|
JMP STB.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
STB.INIT
|
||||||
|
LDA #80
|
||||||
|
STA STB.SCREEN.WIDTH
|
||||||
|
LDA #$8C CLEAR SCREEN AND START STB-80
|
||||||
|
JSR STB.ENTRY
|
||||||
|
LDA #0
|
||||||
|
STA STB.ESCBYT DISABLE ^A AND ESC-MODE
|
||||||
|
LDA #2 DISABLE "HOME" SENSING
|
||||||
|
STA STB.FLAGS
|
||||||
|
STB.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA STB.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA STB.SLOT*2+$BE10,X
|
||||||
|
LDA STB.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA STB.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.VECTORS .DA STB.COUT
|
||||||
|
.DA STB.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
STB.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP STB.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
STB.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC FILES
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A
|
||||||
|
STA STB.SLOT*16+$C080
|
||||||
|
LDA #$07 SOLID DBL LINE CURSOR
|
||||||
|
STA STB.SLOT*16+$C081
|
||||||
|
JSR STB.RDKEY1
|
||||||
|
ORA #$80 Make sure it looks right
|
||||||
|
PHA
|
||||||
|
LDA #$0A
|
||||||
|
STA STB.SLOT*16+$C080
|
||||||
|
LDA #$20 CURSOR OFF
|
||||||
|
STA STB.SLOT*16+$C081
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.COUT
|
||||||
|
CLD
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .1 ...NORMAL
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR STB.COUT1
|
||||||
|
PLA
|
||||||
|
ORA #$80 MAKE PRINTABLE CHARACTER
|
||||||
|
CMP #$A0
|
||||||
|
BCS .2
|
||||||
|
ORA #$40
|
||||||
|
.2 JSR STB.COUT1
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.1 JMP STB.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
STB.PICK.SCREEN
|
||||||
|
STX $481
|
||||||
|
TYA
|
||||||
|
STA $482
|
||||||
|
JSR STB.HTAB
|
||||||
|
JSR STB.SCREEN
|
||||||
|
LDY $482
|
||||||
|
LDX $481
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/io.s.stb80
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
457
SCMASM.30/SCI.S.CAT.txt
Normal file
457
SCMASM.30/SCI.S.CAT.txt
Normal file
@ -0,0 +1,457 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* CATALOG COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
CAT
|
||||||
|
LDA #39
|
||||||
|
.HS 2C SKIP OVER TWO BYTES
|
||||||
|
CATALOG
|
||||||
|
LDA #79
|
||||||
|
STA CAT.WIDTH
|
||||||
|
LDA #0 CLEAR ACCUMULATED BLOCKS COUNTER
|
||||||
|
STA BLOCKS
|
||||||
|
STA BLOCKS+1
|
||||||
|
LDA FBITS TEST FOR TYPE AND PATHNAME
|
||||||
|
AND #$05
|
||||||
|
LSR PATHNAME BIT INTO CARRY
|
||||||
|
BNE .1 ...TYPE STATED
|
||||||
|
STA VAL.T SET T=0, LIST ALL TYPES
|
||||||
|
.1 BCS .2 ...PATH GIVEN
|
||||||
|
JSR GET.FILE.INFO NONE STATED, GET PREFIX
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---GET DIRECTORY----------------
|
||||||
|
.2 JSR OPEN.READ.DIR.HEADER
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
LDY #0 Print directory pathname
|
||||||
|
.15 LDA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INY
|
||||||
|
CPY PATHNAME.ONE.BUFFER
|
||||||
|
BCC .15
|
||||||
|
JSR CROUT
|
||||||
|
*---PRINT TITLES-----------------
|
||||||
|
LDA #Q.DIRHDR
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
JSR PRINT.CATALOG.LINE
|
||||||
|
*---IF NO MORE FILES, FINISHED---
|
||||||
|
.3 LDA FILE.COUNT ANY FILES LEFT?
|
||||||
|
ORA FILE.COUNT+1
|
||||||
|
BEQ .7 ...NO, FINISHED
|
||||||
|
*---NEXT FILE DESCRIPTION--------
|
||||||
|
JSR READ.NEXT.ENTRY
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
LDA VAL.T CHECK IF WE LIKE THIS TYPE
|
||||||
|
BEQ .4 ...WE LIKE THEM ALL
|
||||||
|
CMP DIRBUF+16 FILE TYPE
|
||||||
|
BNE .5 ...NO, SKIP OVER IT
|
||||||
|
.4 JSR FORMAT.CAT.ENTRY
|
||||||
|
JSR PRINT.CATALOG.LINE PRINT IT
|
||||||
|
*---CHECK FOR PAUSE/ABORT--------
|
||||||
|
.5 JSR CHECK.KEY SEE IF KEYPRESS
|
||||||
|
BMI .3 ...NO, CONTINUE CATALOG
|
||||||
|
BEQ .7 ...<CR> or <ESC>, abort
|
||||||
|
*---<CR> or <ESC>, so abort------
|
||||||
|
.6 JSR CHECK.KEY
|
||||||
|
BMI .6 WAIT FOR KEY
|
||||||
|
BNE .3 ...NOT CR OR ESC, CONTINUE
|
||||||
|
*---<CR> or <ESC>, abort---------
|
||||||
|
.7 LDX CAT.INDEX
|
||||||
|
LDA FILE.REFNUMS,X
|
||||||
|
JSR CLOSE.ONE.FILE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
JMP FREE.BLOCKS FORMAT BLOCKS FREE ETC.
|
||||||
|
.8 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.KEY
|
||||||
|
LDA $C000 SEE IF KEYSTROKE
|
||||||
|
BPL .1 ...NO
|
||||||
|
STA $C010 ...YES, CLEAR STROBE
|
||||||
|
.1 EOR #$8D SET .EQ. IF <RET>
|
||||||
|
BEQ .2 ...YES
|
||||||
|
EOR #$8D^$9B OR IF <ESC>
|
||||||
|
.2 RTS .MI. IF NO KEY
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT BLOCKS FREE/INUSE
|
||||||
|
*--------------------------------
|
||||||
|
FREE.BLOCKS
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDA #Q.BLOCKS.ABOVE
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
LDA BLOCKS
|
||||||
|
LDX BLOCKS+1
|
||||||
|
LDY #24
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
JSR PRINT.MESSAGE
|
||||||
|
*--------------------------------
|
||||||
|
LDA #PATHNAME.ONE.BUFFER+1 set up ONLINE call
|
||||||
|
STA MISC.PARMS+2 to read volume name
|
||||||
|
LDA /PATHNAME.ONE.BUFFER+1
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA UNIT
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
JSR MLI.C5 ONLINE
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---Setup GET FILE INFO call-----
|
||||||
|
LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
AND #$0F
|
||||||
|
TAX
|
||||||
|
INX
|
||||||
|
STX PATHNAME.ONE.BUFFER
|
||||||
|
LDA #"/"
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
JSR GET.FILE.INFO
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---Format the bottom line-------
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDA #Q.BLOCKS
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
*---Total Blocks in Volume-------
|
||||||
|
LDA GET.SET.PARMS+5
|
||||||
|
LDX GET.SET.PARMS+6
|
||||||
|
LDY #51
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---Blocks Used in Volume--------
|
||||||
|
LDA GET.SET.PARMS+8
|
||||||
|
LDX GET.SET.PARMS+9
|
||||||
|
LDY #24
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---Blocks Free in Volume--------
|
||||||
|
LDA GET.SET.PARMS+5
|
||||||
|
SEC
|
||||||
|
SBC GET.SET.PARMS+8
|
||||||
|
PHA
|
||||||
|
LDA GET.SET.PARMS+6
|
||||||
|
SBC GET.SET.PARMS+9
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
LDY #37
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
JSR PRINT.CATALOG.LINE
|
||||||
|
CLC
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN/READ DIRECTORY HEADER
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.READ.DIR.HEADER
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
STX CAT.INDEX
|
||||||
|
LDX #$0F IS STORAGE TYPE = VOL DIR?
|
||||||
|
CPX GET.SET.PARMS+7
|
||||||
|
BNE .1 ...NO
|
||||||
|
STX GET.SET.PARMS+4 ...YES, MAKE TYPE = DIR
|
||||||
|
.1 LDA #$01 FILE MUST BE READABLE
|
||||||
|
JSR OPEN.DIRECTORY
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
|
||||||
|
LDX CAT.INDEX
|
||||||
|
STA FILE.REFNUMS,X
|
||||||
|
LDA #DIRBUF
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /DIRBUF
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #$2B
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .3
|
||||||
|
LDX #3
|
||||||
|
.2 LDA DIRBUF+35,X ENTRY LENGTH, ENTRIES/BLOCK,
|
||||||
|
STA ENTRY.LENGTH,X and FILE COUNT
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
LDA #1
|
||||||
|
STA ENTRY.COUNTER
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* READ NEXT DIRECTORY ENTRY
|
||||||
|
*--------------------------------
|
||||||
|
READ.NEXT.ENTRY
|
||||||
|
.1 LDY ENTRY.COUNTER
|
||||||
|
CPY ENTRIES.PER.BLOCK
|
||||||
|
BCC .2
|
||||||
|
*---Skip ahead remainder bytes---
|
||||||
|
LDA #4
|
||||||
|
SBC MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
JSR MLI.CA
|
||||||
|
BCS .4 ...ERROR
|
||||||
|
LDY #0
|
||||||
|
LDA #4
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
*---Read a file description------
|
||||||
|
.2 INY NEXT ENTRY
|
||||||
|
STY ENTRY.COUNTER
|
||||||
|
LDA ENTRY.LENGTH
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
ADC MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .4 ...ERROR
|
||||||
|
*---Check if deleted file--------
|
||||||
|
LDA DIRBUF
|
||||||
|
AND #$F0
|
||||||
|
BEQ .1 ...deleted
|
||||||
|
*---Count the file---------------
|
||||||
|
LDA FILE.COUNT
|
||||||
|
BNE .3
|
||||||
|
DEC FILE.COUNT+1
|
||||||
|
.3 DEC FILE.COUNT
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT CATALOG ENTRY LINE
|
||||||
|
*--------------------------------
|
||||||
|
FORMAT.CAT.ENTRY
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDA DIRBUF LENGTH OF FILENAME
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
|
.1 LDA DIRBUF,Y
|
||||||
|
ORA #$80
|
||||||
|
STA WBUF+7,Y
|
||||||
|
DEY
|
||||||
|
BNE .1
|
||||||
|
STY ACCUM+2
|
||||||
|
*---GET FILE TYPE----------------
|
||||||
|
LDA DIRBUF+16 FILE TYPE
|
||||||
|
LDX #LAST.FILE.TYPE
|
||||||
|
LDY #3 POINT INTO WBUF
|
||||||
|
.2 CMP FILE.TYPES,X
|
||||||
|
BEQ .3 ...MATCH!
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
JMP .6
|
||||||
|
.3 DEX
|
||||||
|
LDA FILE.TYPES,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
BNE .3
|
||||||
|
*---SKIP IF 40-COLUMN------------
|
||||||
|
BIT CAT.WIDTH
|
||||||
|
BVC .7
|
||||||
|
*---Display AuxType--------------
|
||||||
|
LDY #"R" Use "R=" if type TXT
|
||||||
|
LDA DIRBUF+16 FILE TYPE
|
||||||
|
CMP #$04
|
||||||
|
BEQ .5 ...it is TXT
|
||||||
|
CMP #$06 Use "A=" if type BIN
|
||||||
|
BNE .6 ...not BIN, just show $xxxx
|
||||||
|
LDY #"A" ...BIN
|
||||||
|
.5 STY WBUF+73
|
||||||
|
LDA #"="
|
||||||
|
STA WBUF+74
|
||||||
|
.6 LDY #78
|
||||||
|
LDA DIRBUF+31 AUXTYPE
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
LDA DIRBUF+32 "
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
*---Show file length-------------
|
||||||
|
LDA DIRBUF+23 EOF MARK MSB
|
||||||
|
STA ACCUM+2
|
||||||
|
LDA DIRBUF+21 EOF MARK
|
||||||
|
LDX DIRBUF+22 " "
|
||||||
|
LDY #70
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---CREATION DATE/TIME-----------
|
||||||
|
LDX #$18 OFFSET IN DIRBUF
|
||||||
|
LDY #61 OFFSET IN WBUF
|
||||||
|
JSR FORMAT.DATE.AND.TIME
|
||||||
|
*---Blocks in the file-----------
|
||||||
|
.7 LDY #27
|
||||||
|
LDA DIRBUF+19 BLOCKS IN USE
|
||||||
|
LDX DIRBUF+20 "
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
CLC
|
||||||
|
LDA BLOCKS
|
||||||
|
ADC DIRBUF+19
|
||||||
|
STA BLOCKS
|
||||||
|
LDA BLOCKS+1
|
||||||
|
ADC DIRBUF+20
|
||||||
|
STA BLOCKS+1
|
||||||
|
*---Access code------------------
|
||||||
|
LDA DIRBUF+30 ACCESS
|
||||||
|
AND #$C2
|
||||||
|
CMP #$C2
|
||||||
|
BEQ .8
|
||||||
|
LDA #"*" LOCKED
|
||||||
|
STA WBUF+1
|
||||||
|
*---Modified Date/Time-----------
|
||||||
|
.8 LDX #$21 OFFSET IN DIRBUF
|
||||||
|
LDY #44 OFFSET IN WBUF
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT DATE & TIME
|
||||||
|
* --MSB--- --LSB---
|
||||||
|
* YYYYYYYM MMMDDDDD
|
||||||
|
*--------------------------------
|
||||||
|
FORMAT.DATE.AND.TIME
|
||||||
|
LDA DIRBUF,X MMMDDDDD
|
||||||
|
AND #$1F 000DDDDD
|
||||||
|
BEQ .1 ...DAY=0, NO DATE
|
||||||
|
STA DAY
|
||||||
|
LDA DIRBUF+1,X YYYYYYYM
|
||||||
|
LSR 0YYYYYYY
|
||||||
|
STA YEAR
|
||||||
|
CMP #100
|
||||||
|
BCS .1 ...YEAR>99, NO DATE
|
||||||
|
LDA DIRBUF+1,X YYYYYYYM
|
||||||
|
LSR M INTO CARRY
|
||||||
|
LDA DIRBUF,X MMMDDDDD
|
||||||
|
ROL MMDDDDDM M
|
||||||
|
ROL MDDDDDMM M
|
||||||
|
ROL DDDDDMMM M
|
||||||
|
ROL DDDDMMMM
|
||||||
|
AND #$0F 0000MMMM
|
||||||
|
BEQ .1 ...MONTH=0, NO DATE
|
||||||
|
CMP #13
|
||||||
|
BCC .3 ...MONTH=1...12, GOOD
|
||||||
|
*---Format <NO DATE>-------------
|
||||||
|
.1 TYA
|
||||||
|
SEC
|
||||||
|
SBC #6 BACK UP OVER TIME SLOT
|
||||||
|
TAY
|
||||||
|
LDX #8
|
||||||
|
.2 LDA NO.DATE.MSG,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
RTS
|
||||||
|
*---Format date, time------------
|
||||||
|
.3 STA MONTH
|
||||||
|
LDA DIRBUF+3,X HOURS
|
||||||
|
PHA
|
||||||
|
LDA DIRBUF+2,X MINUTES
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
CMP #60 IF > 59, USE 0
|
||||||
|
BCC .4 0...59
|
||||||
|
TXA
|
||||||
|
.4 JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDA #":" SEPARATE WITH ":"
|
||||||
|
STA WBUF+2,Y
|
||||||
|
PLA HOURS
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
CMP #24 IF > 24, USE 0
|
||||||
|
BCC .5 0...23
|
||||||
|
TXA
|
||||||
|
.5 JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDA YEAR
|
||||||
|
JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDX MONTH
|
||||||
|
LDA MONTH.NAMES-1+24,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA MONTH.NAMES-1+12,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA MONTH.NAMES-1,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA #"-"
|
||||||
|
STA WBUF+5,Y
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA DAY
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
* JMP CONVERT.TO.DECIMAL
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT TO DECIMAL
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.TO.DECIMAL
|
||||||
|
STX ACCUM+1
|
||||||
|
STA ACCUM
|
||||||
|
.1 JSR DIVIDE.ACCUM.BY.TEN
|
||||||
|
ORA #$B0
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA ACCUM
|
||||||
|
ORA ACCUM+1
|
||||||
|
ORA ACCUM+2
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT 2 DIGIT NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
CLC
|
||||||
|
ADC #100 FORCE TWO DIGITS TO PRINT
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
LDA #" " COVER UP THE "1"
|
||||||
|
INY
|
||||||
|
*--------------------------------
|
||||||
|
STUFF.WBUF.AND.BACKUP
|
||||||
|
STA WBUF+1,Y
|
||||||
|
DEY
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT TO HEX
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.TO.HEX
|
||||||
|
PHA
|
||||||
|
AND #$0F
|
||||||
|
JSR .1
|
||||||
|
PLA
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
.1 ORA #$B0
|
||||||
|
CMP #$BA
|
||||||
|
BCC .2
|
||||||
|
ADC #6
|
||||||
|
.2 JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA #"$"
|
||||||
|
STA WBUF+1,Y
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* DIVIDE ACCUM BY TEN
|
||||||
|
*--------------------------------
|
||||||
|
* DIVIDE 24-BIT VALUE IN ACCUM BY TEN
|
||||||
|
* RETURN REMAINDER IN A-REG
|
||||||
|
*--------------------------------
|
||||||
|
DIVIDE.ACCUM.BY.TEN
|
||||||
|
LDX #24 24 BITS IN DIVIDEND
|
||||||
|
LDA #0 START WITH REM=0
|
||||||
|
.1 JSR SHIFT.ACCUM.LEFT
|
||||||
|
ROL
|
||||||
|
CMP #10
|
||||||
|
BCC .2 ...STILL < 10
|
||||||
|
SBC #10
|
||||||
|
INC ACCUM QUOTIENT BIT
|
||||||
|
.2 DEX NEXT BIT
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
BLANK.WBUF
|
||||||
|
LDA #" "
|
||||||
|
LDY #79
|
||||||
|
.1 JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
NOW JSR GP.MLI
|
||||||
|
.DA #$82,0000
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDX #4
|
||||||
|
.1 LDA GP.DATE-1,X
|
||||||
|
STA DIRBUF-1,X
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
LDY #15
|
||||||
|
JSR FORMAT.DATE.AND.TIME
|
||||||
|
LDA #20
|
||||||
|
STA CAT.WIDTH
|
||||||
|
*** JMP PRINT.CATALOG.LINE
|
||||||
|
*--------------------------------
|
||||||
|
PRINT.CATALOG.LINE
|
||||||
|
LDX CAT.WIDTH
|
||||||
|
LDA #$8D
|
||||||
|
STA WBUF+1,X
|
||||||
|
JSR PRINT.MESSAGE
|
||||||
|
CLC because a SEC would indicate ERROR
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.cat
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
562
SCMASM.30/SCI.S.CPAR.txt
Normal file
562
SCMASM.30/SCI.S.CPAR.txt
Normal file
@ -0,0 +1,562 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.DA COMMAND.TABLE needed for HELP command
|
||||||
|
*--------------------------------
|
||||||
|
* PARSE COMMAND LINE
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.COMMAND
|
||||||
|
JSR SCAN.COMMAND.TABLE
|
||||||
|
BCS SYNERR2 ...SYNTAX ERROR
|
||||||
|
LDA #0
|
||||||
|
STA FBITS
|
||||||
|
STA FBITS+1
|
||||||
|
STA PATHNAME.TWO.BUFFER
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
LDA D.SLOT
|
||||||
|
STA VAL.S
|
||||||
|
LDA D.DRIV
|
||||||
|
STA VAL.D
|
||||||
|
*---Handle special cases---------
|
||||||
|
BIT PBITS Check for PR# or IN#
|
||||||
|
BVS PARSE.INPR PR# & IN# commands
|
||||||
|
BPL .1 ...not CAT(ALOG) or PREFIX
|
||||||
|
JSR MLI.C7 ...CAT, CATALOG, or PREFIX
|
||||||
|
*---TEST CHAR AFTER COMMAND------
|
||||||
|
.1 JSR GET.NEXT.NONBLANK
|
||||||
|
BNE .2 ...not comma or <CR>
|
||||||
|
BCC .5 ...<CR> already
|
||||||
|
JMP GET.ANOTHER.PARM
|
||||||
|
*---Get a pathname---------------
|
||||||
|
.2 CMP #'/' MUST START WITH "/" OR LETTER
|
||||||
|
BEQ .3
|
||||||
|
CMP #'A'
|
||||||
|
BCC SYNERR2 ...SYNTAX ERROR
|
||||||
|
.3 DEX RE-SCAN THE FIRST CHAR OF PATH
|
||||||
|
LDY #0
|
||||||
|
.4 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
STA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
JSR STORE.PATH.TWO.AND.TEST
|
||||||
|
BCC .4
|
||||||
|
DEY
|
||||||
|
STY PATHNAME.ONE.BUFFER
|
||||||
|
STY PATHNAME.TWO.BUFFER
|
||||||
|
LDA #$01 TELL THE WORLD ABOUT IT
|
||||||
|
STA FBITS
|
||||||
|
*--------------------------------
|
||||||
|
DEX RE-SCAN CHAR AFTER PATHNAME
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE SYNERR2 ...NOT COMMA OR <CR>
|
||||||
|
BCS MORE.PARMS ...COMMA
|
||||||
|
.5 JMP NO.MORE.PARMS ...<CR>
|
||||||
|
SYNERR2
|
||||||
|
JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
* PR# or IN# commands
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.INPR
|
||||||
|
JSR GET.NEXT.NONBLANK CHAR AFTER COMMAND
|
||||||
|
BEQ SYNERR2 ...comma or <CR>
|
||||||
|
DEX ...IN CASE IT IS "Axxx"
|
||||||
|
CMP #'A'
|
||||||
|
BEQ GET.ANOTHER.PARM ...HANDLE PR#Axxx or IN#Axxx
|
||||||
|
INX RESTORE X
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
STY PARM.LENM1 Y=0, 1 BYTE PARM
|
||||||
|
LDY #VAL.LB-VAL.A PARM OFFSET FROM VAL.A
|
||||||
|
STY PARM.OFFSET
|
||||||
|
LDY #$40
|
||||||
|
STY FBITS
|
||||||
|
JSR CONVERT.DECIMAL.NUMBER
|
||||||
|
BCS RTS4
|
||||||
|
LDA VAL.LB
|
||||||
|
CMP #$08
|
||||||
|
BCC TEST.IF.MORE.PARMS
|
||||||
|
SCI.ERR.RANGE
|
||||||
|
LDA #$02
|
||||||
|
SEC
|
||||||
|
RTS4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
MORE.PARMS
|
||||||
|
LDA PBITS
|
||||||
|
LSR TEST BIT 0
|
||||||
|
BCC SYNERR2 ...NO PATHNAME EXPECTED
|
||||||
|
LSR TEST BIT 1
|
||||||
|
BCC GET.ANOTHER.PARM ...NO PATH-TWO EXPECTED
|
||||||
|
*---Get second pathname----------
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR2 ...COMMA OR <CR>
|
||||||
|
DEX RE-SCAN FIRST CHAR OF PATHNAME
|
||||||
|
LDY #0
|
||||||
|
.1 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
JSR STORE.PATH.TWO.AND.TEST
|
||||||
|
BCC .1
|
||||||
|
DEY
|
||||||
|
STY PATHNAME.TWO.BUFFER
|
||||||
|
LDA #$03 WE GOT TWO PATHNAMES, SO
|
||||||
|
STA FBITS MARK THE BITS
|
||||||
|
DEX RE-SCAN TERM. CHAR
|
||||||
|
*--------------------------------
|
||||||
|
TEST.IF.MORE.PARMS
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE SYNERR2
|
||||||
|
BCC NO.MORE.PARMS
|
||||||
|
GET.ANOTHER.PARM
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR2 ...NULL PARAMETER
|
||||||
|
JSR PARSE.PARAMETER
|
||||||
|
BCC TEST.IF.MORE.PARMS
|
||||||
|
RTS ...error return
|
||||||
|
*--------------------------------
|
||||||
|
NO.MORE.PARMS
|
||||||
|
LDA VAL.S CHECK RANGE OF S AND D
|
||||||
|
BEQ SCI.ERR.RANGE
|
||||||
|
CMP #$08
|
||||||
|
BCS SCI.ERR.RANGE
|
||||||
|
LDA VAL.D
|
||||||
|
BEQ SCI.ERR.RANGE
|
||||||
|
CMP #$03
|
||||||
|
BCS SCI.ERR.RANGE
|
||||||
|
*---CHECK IF DEFERRED COMMAND----
|
||||||
|
LDA PBITS (only OPEN and WRITE are deferred)
|
||||||
|
AND #$21
|
||||||
|
LSR
|
||||||
|
BEQ .1 ...NOT DEFERRED
|
||||||
|
LDA STATE ...ARE WE IN DIRECT MODE?
|
||||||
|
BEQ .6 ...YES, DEFERRED IS ILLEGAL
|
||||||
|
*---CHECK PATHNAME---------------
|
||||||
|
.1 BCC .5 ...NO PATH PERMITTED
|
||||||
|
LDA PBITS+1
|
||||||
|
AND #$04 S OR D OK?
|
||||||
|
BEQ .5 ...NO
|
||||||
|
LDA FBITS
|
||||||
|
LSR HAVE WE A PATHNAME?
|
||||||
|
BCS .2 ...YES
|
||||||
|
LDA PBITS ...NO, IS PATH NEEDED
|
||||||
|
AND #$90
|
||||||
|
BEQ ERR.SYNTAX ...YES
|
||||||
|
BPL .5
|
||||||
|
*---NEED PREFIX OR S,D-----------
|
||||||
|
.2 LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
EOR #'/' SLASH
|
||||||
|
BEQ .3 ...EXPLICIT PREFIX
|
||||||
|
LDA PREFIX.FLAG MLI's flag
|
||||||
|
BEQ .4 ...NO PREFIX IS SET
|
||||||
|
.3 LDA FBITS+1 DID WE GET S,D?
|
||||||
|
AND #$04
|
||||||
|
BEQ .5 ...NO
|
||||||
|
BCS .4 ...YES, AND THERE IS A PATHNAME
|
||||||
|
LDA #0 ...YES, BUT NO PATHNAME
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
LDA #$01 SIGNAL WE GOT PATHNAME AFTER ALL
|
||||||
|
ORA FBITS
|
||||||
|
STA FBITS
|
||||||
|
.4 JSR INSERT.VOLUME.NAME
|
||||||
|
BCS .7
|
||||||
|
*---BRANCH TO COMMAND------------
|
||||||
|
.5 CLC SIGNAL NO ERROR
|
||||||
|
LDA COMMAND.NUMBER
|
||||||
|
BEQ EXTERNAL ...USER'S COMMAND
|
||||||
|
EOR #CN.PREFIX
|
||||||
|
BEQ INTERNAL ...PREFIX COMMAND
|
||||||
|
LDA PBITS+1 ARE S/D VALID?
|
||||||
|
AND #$04
|
||||||
|
BEQ INTERNAL ...NO
|
||||||
|
LDA FBITS ANY PATHNAME SPECIFIED?
|
||||||
|
LSR
|
||||||
|
BCC INTERNAL ...NO
|
||||||
|
JSR GET.FILE.INFO ...YES
|
||||||
|
BCC INTERNAL ...NO ERROR
|
||||||
|
ORA #0 ...ERROR, WAS IT "FILE NOT FOUND"?
|
||||||
|
BPL .7 ...NO, REAL ERROR
|
||||||
|
LDA PBITS OKAY TO CREATE PATHNAME?
|
||||||
|
AND #$08
|
||||||
|
BNE INTERNAL ...YES
|
||||||
|
LDA #$06 "PATH NOT FOUND"
|
||||||
|
.HS 2C
|
||||||
|
.6 LDA #$0F "NOT DIRECT COMMAND"
|
||||||
|
SEC
|
||||||
|
.7 RTS
|
||||||
|
*--------------------------------
|
||||||
|
INTERNAL JMP (COMMAND.ADDR)
|
||||||
|
EXTERNAL JMP (EXTERNAL.COMMAND.HANDLER)
|
||||||
|
*--------------------------------
|
||||||
|
ERR.SYNTAX
|
||||||
|
LDA #$10 SYNTAX ERROR
|
||||||
|
ERRR SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* INSERT PREFIX BEFORE PATHNAME
|
||||||
|
*--------------------------------
|
||||||
|
INSERT.VOLUME.NAME
|
||||||
|
LDA VAL.S BUILD UNIT # FROM SLOT,DRIVE
|
||||||
|
TAY SAVE VAL.S
|
||||||
|
LSR 0000.00SS S
|
||||||
|
ROR S000.000S S
|
||||||
|
ROR SS00.0000 S
|
||||||
|
ROR SSS0.0000 0
|
||||||
|
LDX VAL.D
|
||||||
|
CPX #2 .CS. if 2, .CC. if 1
|
||||||
|
ROR DSSS.0000
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
LDA #WBUF+1
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA /WBUF+1
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
JSR MLI.C5 ONLINE -- READ VOLUME NAME
|
||||||
|
BCS .4 NO SUCH SLOT AND DRIVE
|
||||||
|
STX D.DRIV UPDATE DEFAULT S AND D
|
||||||
|
STY D.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
EOR #'/' ALREADY HAVE VOLUME NAME?
|
||||||
|
BEQ .4 ...YES, DON'T NEED ANOTHER
|
||||||
|
*---ISOLATE VOLNAME LENGTH-------
|
||||||
|
LDA WBUF+1 DSSSLLLL
|
||||||
|
AND #$0F 0000LLLL
|
||||||
|
STA WBUF+1
|
||||||
|
*---MOVE PATHNAMES OVER L+2------
|
||||||
|
LDY #62
|
||||||
|
TYA
|
||||||
|
SEC
|
||||||
|
SBC WBUF+1
|
||||||
|
TAX
|
||||||
|
.1 LDA PATHNAME.ONE.BUFFER,X
|
||||||
|
STA PATHNAME.ONE.BUFFER+2,Y
|
||||||
|
LDA PATHNAME.TWO.BUFFER,X
|
||||||
|
STA PATHNAME.TWO.BUFFER+2,Y
|
||||||
|
DEY
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
*---INSERT VOLUME SLASHES--------
|
||||||
|
LDA #'/'
|
||||||
|
STA PATHNAME.ONE.BUFFER+2,Y
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
STA PATHNAME.TWO.BUFFER+2,Y
|
||||||
|
STA PATHNAME.TWO.BUFFER+1
|
||||||
|
*---COPY VOLUME NAME-------------
|
||||||
|
.2 LDA WBUF+1,Y
|
||||||
|
STA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
STA PATHNAME.TWO.BUFFER+1,Y
|
||||||
|
DEY
|
||||||
|
BNE .2
|
||||||
|
*---UPDATE PATH LENGTHS----------
|
||||||
|
CLC
|
||||||
|
LDA WBUF+1
|
||||||
|
ADC #2 INCLUDE SLASHES
|
||||||
|
TAY
|
||||||
|
ADC PATHNAME.ONE.BUFFER
|
||||||
|
CMP #64
|
||||||
|
.3 BCS ERR.SYNTAX
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
TYA
|
||||||
|
ADC PATHNAME.TWO.BUFFER
|
||||||
|
STA PATHNAME.TWO.BUFFER
|
||||||
|
CMP #64
|
||||||
|
BCS .3 ...BRIDGE TO SYNTAX ERROR
|
||||||
|
*--------------------------------
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
SCAN.COMMAND.TABLE
|
||||||
|
LDY #0 PNTR INTO COMMAND TABLE
|
||||||
|
STY COMMAND.NUMBER
|
||||||
|
DEY
|
||||||
|
*---COMPARE COMMAND NAME---------
|
||||||
|
.1 INC COMMAND.NUMBER
|
||||||
|
LDX #0 PNTR INTO WBUF
|
||||||
|
.2 INY next byte in command table
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ .4 ...end of WBUF contents
|
||||||
|
EOR COMMAND.TABLE,Y
|
||||||
|
BEQ .2 ...same so far
|
||||||
|
ASL Might be last char
|
||||||
|
BNE .4 ...No, try next command
|
||||||
|
*---We found the command---------
|
||||||
|
LDA COMMAND.TABLE+1,Y
|
||||||
|
STA COMMAND.ADDR
|
||||||
|
LDA COMMAND.TABLE+2,Y
|
||||||
|
STA COMMAND.ADDR+1
|
||||||
|
LDA COMMAND.TABLE+3,Y
|
||||||
|
STA PBITS
|
||||||
|
LDA COMMAND.TABLE+4,Y
|
||||||
|
STA PBITS+1
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*---SKIP TO NEXT COMMAND---------
|
||||||
|
.3 INY
|
||||||
|
.4 LDA COMMAND.TABLE,Y
|
||||||
|
BPL .3 ...NOT LAST CHAR YET
|
||||||
|
INY SKIP OVER ADDRESS
|
||||||
|
INY
|
||||||
|
INY SKIP OVER PBITS
|
||||||
|
INY
|
||||||
|
LDA COMMAND.TABLE+1,Y
|
||||||
|
BNE .1 ...more commands in table
|
||||||
|
*---TRY EXTERNAL COMMAND---------
|
||||||
|
LDA #$FF
|
||||||
|
STA COMMAND.NUMBER
|
||||||
|
SEC
|
||||||
|
JMP SCI.USER.CMD
|
||||||
|
*--------------------------------
|
||||||
|
SYNERR1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.PARAMETER
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
LDY #NO.PARM.NAMES-1
|
||||||
|
.1 CMP PARM.NAMES,Y
|
||||||
|
BEQ FOUND.PARM
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
CMP #'T'
|
||||||
|
BNE SYNERR1 ...SYNTAX ERROR
|
||||||
|
*---PARSE T PARAMETER------------
|
||||||
|
LDA #$04
|
||||||
|
AND PBITS
|
||||||
|
BEQ ERR.BADPARM
|
||||||
|
ORA FBITS
|
||||||
|
STA FBITS
|
||||||
|
LDA #0 SINGLE BLYTE
|
||||||
|
STA PARM.LENM1
|
||||||
|
LDA #VAL.T-VAL.A PARM OFFSET FROM VAL.A
|
||||||
|
STA PARM.OFFSET
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR1
|
||||||
|
CMP #'$'
|
||||||
|
BEQ CONVERT.HEX.NUMBER
|
||||||
|
CMP #'A'
|
||||||
|
BCC CONVERT.DECIMAL.NUMBER
|
||||||
|
JMP CONVERT.FILE.TYPE
|
||||||
|
*--------------------------------
|
||||||
|
ERR.BADPARM
|
||||||
|
SEC "INVALID PARAMETER"
|
||||||
|
LDA #$0B
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
FOUND.PARM
|
||||||
|
LDA PARM.MASKS,Y
|
||||||
|
BEQ .2
|
||||||
|
AND PBITS+1
|
||||||
|
BEQ ERR.BADPARM
|
||||||
|
CMP #$04 IS IT S OR D
|
||||||
|
BNE .1 ...NO
|
||||||
|
AND FBITS+1 ...YES, DID WE ALREADY HAVE S OR D
|
||||||
|
BNE .2 ...YES
|
||||||
|
LDA #1 ...NO, SET D=1
|
||||||
|
STA VAL.D
|
||||||
|
LDA #$04
|
||||||
|
.1 ORA FBITS+1
|
||||||
|
STA FBITS+1
|
||||||
|
.2 LDA PARM.VARIABLES,Y
|
||||||
|
AND #$03
|
||||||
|
STA PARM.LENM1
|
||||||
|
LDA PARM.VARIABLES,Y
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
STA PARM.OFFSET
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
CMP #'$'
|
||||||
|
BEQ CONVERT.HEX.NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.DECIMAL.NUMBER
|
||||||
|
STX COMMAND.LINE.LENGTH
|
||||||
|
JSR ACCUMULATE.DECIMAL.DIGIT
|
||||||
|
BCC .1
|
||||||
|
BMI GO.ERR.RANGE.1
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
.1 LDX COMMAND.LINE.LENGTH
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE CONVERT.DECIMAL.NUMBER
|
||||||
|
BEQ CHECK.PARAMETER.RANGE
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.HEX.NUMBER
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
.1 STX COMMAND.LINE.LENGTH
|
||||||
|
JSR ACCUMULATE.HEX.DIGIT
|
||||||
|
BCC .2
|
||||||
|
BMI GO.ERR.RANGE.1
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
.2 LDX COMMAND.LINE.LENGTH
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE .1
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.PARAMETER.RANGE
|
||||||
|
LDX #$02
|
||||||
|
.1 CPX PARM.LENM1
|
||||||
|
BEQ .2
|
||||||
|
LDA ACCUM,X
|
||||||
|
BNE GO.ERR.RANGE.1
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
.2 LDY PARM.OFFSET
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
STA VAL.A,Y
|
||||||
|
DEY
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
LDX COMMAND.LINE.LENGTH
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
GO.ERR.SYNTAX.1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
GO.ERR.RANGE.1 JMP SCI.ERR.RANGE
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.FILE.TYPE
|
||||||
|
STA ACCUM+2 1ST LETTER
|
||||||
|
LDY #2 GET 2ND AND 3RD
|
||||||
|
.1 JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
STA ACCUM-1,Y STORE THEM BACKWARDS
|
||||||
|
DEY
|
||||||
|
BNE .1 ...UNTIL Y=0
|
||||||
|
STX COMMAND.LINE.LENGTH SAVE X-REG
|
||||||
|
.2 LDX #2 COMPARE NEXT ENTRY
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
EOR FILE.TYPES,Y
|
||||||
|
INY
|
||||||
|
ASL IGNORE BIT 7
|
||||||
|
BNE .4 ...NOT THE SAME
|
||||||
|
DEX NEXT CHAR
|
||||||
|
BPL .3
|
||||||
|
LDA FILE.TYPES,Y
|
||||||
|
STA VAL.T
|
||||||
|
LDX COMMAND.LINE.LENGTH RESTORE X-REG
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
.4 INY
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
CPY #LAST.FILE.TYPE
|
||||||
|
BCC .2
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT NON-BLANK CHAR FROM WBUF
|
||||||
|
* CHAR Z C
|
||||||
|
* <CR> YES CLR
|
||||||
|
* COMMA YES SET
|
||||||
|
* OTHER NO ?
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.NONBLANK
|
||||||
|
.1 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
CMP #' '
|
||||||
|
BEQ .1 IGNORE BLANKS
|
||||||
|
CMP #','
|
||||||
|
BEQ .2 .CS. and .EQ.
|
||||||
|
CMP #$0D .EQ. if <CR>
|
||||||
|
CLC .CC.
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
LDA WBUF,X
|
||||||
|
BNE .1 MAKE 00==8D
|
||||||
|
LDA #$0D
|
||||||
|
.1 AND #$7F
|
||||||
|
CMP #$60 CONVERT LOWER CASE TO UPPER
|
||||||
|
BCC .2
|
||||||
|
AND #$5F
|
||||||
|
.2 INX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ACCUMULATE.DECIMAL.DIGIT
|
||||||
|
CMP #$30
|
||||||
|
BCC .1
|
||||||
|
CMP #$3A
|
||||||
|
BCC .2
|
||||||
|
.1 SEC
|
||||||
|
ORA #0
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.2 AND #$0F
|
||||||
|
PHA
|
||||||
|
LDA ACCUM+2
|
||||||
|
CMP #$1A
|
||||||
|
BCS .5
|
||||||
|
LDX #$02
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
PHA
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
LDX #0
|
||||||
|
CLC
|
||||||
|
.4 PLA
|
||||||
|
ADC ACCUM,X
|
||||||
|
STA ACCUM,X
|
||||||
|
INX
|
||||||
|
TXA
|
||||||
|
EOR #$03
|
||||||
|
BNE .4
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
.5 PLA
|
||||||
|
BCS TOOBIG
|
||||||
|
ADC ACCUM
|
||||||
|
STA ACCUM
|
||||||
|
BCC RTS1
|
||||||
|
CLC
|
||||||
|
INC ACCUM+1
|
||||||
|
BNE RTS1
|
||||||
|
INC ACCUM+2
|
||||||
|
BNE RTS1
|
||||||
|
TOOBIG LDA #$FF
|
||||||
|
SEC
|
||||||
|
RTS1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
ACCUMULATE.HEX.DIGIT
|
||||||
|
CMP #'0'
|
||||||
|
BCC .1
|
||||||
|
CMP #'9'+1
|
||||||
|
BCC .3
|
||||||
|
CMP #'A'
|
||||||
|
BCC .1
|
||||||
|
CMP #'F'+1
|
||||||
|
BCC .2
|
||||||
|
.1 SEC
|
||||||
|
ORA #0
|
||||||
|
RTS
|
||||||
|
.2 SBC #$06
|
||||||
|
.3 AND #$0F
|
||||||
|
LDX #$03
|
||||||
|
.4 JSR SHIFT.ACCUM.LEFT
|
||||||
|
BCS TOOBIG
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
ORA ACCUM
|
||||||
|
STA ACCUM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SHIFT.ACCUM.LEFT
|
||||||
|
ASL ACCUM
|
||||||
|
ROL ACCUM+1
|
||||||
|
ROL ACCUM+2
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ZERO.ACCUM
|
||||||
|
LDY #0
|
||||||
|
STY ACCUM
|
||||||
|
STY ACCUM+1
|
||||||
|
STY ACCUM+2
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN .CC. IF NOT END OF PATHNAME YET
|
||||||
|
* ELSE .CS.
|
||||||
|
*--------------------------------
|
||||||
|
STORE.PATH.TWO.AND.TEST
|
||||||
|
STA PATHNAME.TWO.BUFFER+1,Y
|
||||||
|
INY
|
||||||
|
CMP #','
|
||||||
|
BEQ .1
|
||||||
|
CMP #' '
|
||||||
|
BEQ .1
|
||||||
|
CMP #$0D
|
||||||
|
BEQ .1
|
||||||
|
CPY #65
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.cpar
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
47
SCMASM.30/SCI.S.EQ.txt
Normal file
47
SCMASM.30/SCI.S.EQ.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
*BASL .EQ $28
|
||||||
|
CSWL .EQ $36
|
||||||
|
CSWH .EQ $37
|
||||||
|
KSWL .EQ $38
|
||||||
|
KSWH .EQ $39
|
||||||
|
DRIVER.PTR .EQ $3A,3B
|
||||||
|
RETRY.COUNT .EQ $3C
|
||||||
|
*--------------------------------
|
||||||
|
SC.INFLAG .EQ $51 $Cx if .INBx
|
||||||
|
SC.LOMEM .EQ $52,53 START OF SYMBOLS
|
||||||
|
SC.EOT .EQ $54,55 END OF SYMBOL TABLE
|
||||||
|
SC.PP .EQ $56,57 START OF SOURCE PROGRAM
|
||||||
|
SC.HIMEM .EQ $58,59 END OF SOURCE PROGRAM
|
||||||
|
*PASS .EQ $63 PASS ($FF if command, 0 or 1 if assembling)
|
||||||
|
*--------------------------------
|
||||||
|
*WBUF .EQ $0200
|
||||||
|
DIRBUF .EQ $0259
|
||||||
|
PATHNAME.TWO.BUFFER .EQ $0280
|
||||||
|
*--------------------------------
|
||||||
|
GP.MLI .EQ $BF00
|
||||||
|
UNIT .EQ $BF30
|
||||||
|
BITMAP .EQ $BF58
|
||||||
|
GP.DATE .EQ $BF90 ... 93
|
||||||
|
LEVEL .EQ $BF94
|
||||||
|
PREFIX.FLAG .EQ $BF9A
|
||||||
|
*--------------------------------
|
||||||
|
KEYBOARD .EQ $C000
|
||||||
|
STROBE .EQ $C010
|
||||||
|
IO.OFF .EQ $CFFF
|
||||||
|
*--------------------------------
|
||||||
|
BELL .EQ $FBE2
|
||||||
|
ABORT.EXIT .EQ $FD10
|
||||||
|
PRBYTE .EQ $FDDA
|
||||||
|
CROUT .EQ $FD8E
|
||||||
|
COUT .EQ $FDED
|
||||||
|
*MON.SETVID .EQ $FE93
|
||||||
|
*--------------------------------
|
||||||
|
SC.HARD .EQ $8000
|
||||||
|
SC.SOFT .EQ $8003
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.eq
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
107
SCMASM.30/SCI.S.ERRORS.txt
Normal file
107
SCMASM.30/SCI.S.ERRORS.txt
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* Error Handler
|
||||||
|
*--------------------------------
|
||||||
|
ERROR.HANDLER
|
||||||
|
AND #$1F TRIM TO SIZE
|
||||||
|
STA ERROR.CODE
|
||||||
|
LDA #$0F LEVEL
|
||||||
|
STA LEVEL
|
||||||
|
JSR UNHOOK.WRITE ...IF WRITING
|
||||||
|
LDA #0
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
JSR MLI.CC CLOSE ALL FILES
|
||||||
|
BCS .1
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
JSR MLI.CD FLUSH
|
||||||
|
.1 LDA ERROR.CODE
|
||||||
|
JSR PRINT.ERROR
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
JSR CROUT
|
||||||
|
JMP SC.SOFT
|
||||||
|
*--------------------------------
|
||||||
|
ERR.FILE.BUSY
|
||||||
|
LDA #$14
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ERROR.PRINTER
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
JSR BELL
|
||||||
|
*---PRINT MESSAGE FROM WBUF------
|
||||||
|
PRINT.CR.MESSAGE
|
||||||
|
JSR CROUT
|
||||||
|
PRINT.MESSAGE
|
||||||
|
LDX #0
|
||||||
|
.1 LDA WBUF+1,X
|
||||||
|
JSR COUT
|
||||||
|
INX
|
||||||
|
CMP #$8D END OF MESSAGE?
|
||||||
|
BNE .1 ...NO
|
||||||
|
RTS ...YES
|
||||||
|
*--------------------------------
|
||||||
|
FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
LDX #0
|
||||||
|
CLC
|
||||||
|
*---SEARCH FOR MESSAGE #---------
|
||||||
|
STA WBUF
|
||||||
|
TAY
|
||||||
|
BEQ .5 ...FIRST MESSAGE
|
||||||
|
.2 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
BNE .4
|
||||||
|
.3 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
BEQ .3
|
||||||
|
BNE .2
|
||||||
|
.4 EOR #$0F
|
||||||
|
BNE .2
|
||||||
|
DEC WBUF
|
||||||
|
BNE .2
|
||||||
|
*---Put message in WBUF----------
|
||||||
|
.5 LDY #0
|
||||||
|
STY WBUF+80 SQUEEZED BLANK COUNT
|
||||||
|
.6 STY WBUF STORAGE INDEX
|
||||||
|
LDA WBUF+80 BLANK COUNT
|
||||||
|
BNE .8 ...ANOTHER BLANK
|
||||||
|
.7 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.FIRST.TABLE,Y
|
||||||
|
BNE .9 ...FREQUENT CHAR
|
||||||
|
JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.SECOND.TABLE,Y
|
||||||
|
BNE .9 ...TWO NYBBLE CHAR
|
||||||
|
JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.THIRD.TABLE,Y
|
||||||
|
BMI .9 ...REAL CHAR
|
||||||
|
STA WBUF+80 ...BLANK COUNT
|
||||||
|
.8 LDA #" "
|
||||||
|
DEC WBUF+80
|
||||||
|
BEQ .7 ...NO MORE BLANKS
|
||||||
|
.9 LDY WBUF STORAGE INDEX
|
||||||
|
STA WBUF+1,Y
|
||||||
|
INY NEXT COLUMN
|
||||||
|
EOR #$8D END OF MESSAGE?
|
||||||
|
BNE .6 ...NO
|
||||||
|
RTS ...YES
|
||||||
|
*--------------------------------
|
||||||
|
SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.MESSAGES,X
|
||||||
|
BCS .1 2ND NYBBLE
|
||||||
|
LSR 1ST NYBBLE
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TAY
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
.1 INX
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.errors
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
125
SCMASM.30/SCI.S.EXEC.txt
Normal file
125
SCMASM.30/SCI.S.EXEC.txt
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.ERR.FILE.BUSY JMP ERR.FILE.BUSY
|
||||||
|
EXEC.ERR.MISMATCH JMP TYPERR
|
||||||
|
*--------------------------------
|
||||||
|
EXEC
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCS .1 ...NOT CURRENTLY OPEN
|
||||||
|
*---File is in use---------------
|
||||||
|
BIT EXEC.FILE.CLOSING.FLAG
|
||||||
|
BPL EXEC.ERR.FILE.BUSY
|
||||||
|
*---Restarting same EXEC file----
|
||||||
|
STA MISC.PARMS+1 REFNUM
|
||||||
|
LDA #0 "REWIND" THE FILE
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
STA MISC.PARMS+4
|
||||||
|
JSR MLI.CE SET MARK
|
||||||
|
BCS CLOSE.EXEC.SAVING.ERROR
|
||||||
|
BCC .2 ...ALWAYS, RESTART
|
||||||
|
*--------------------------------
|
||||||
|
.1 JSR CLOSE.EXEC.FILE STOP ANY EXEC IN PROGRESS
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
*---Check file type--------------
|
||||||
|
LDA GET.SET.PARMS+4 FILE TYPE MUST BE TXT
|
||||||
|
CMP #$04 TXT FILETYPE CODE
|
||||||
|
BNE EXEC.ERR.MISMATCH
|
||||||
|
*---Open the file----------------
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL LEVEL
|
||||||
|
STA MISC.PARMS+2 BUFFER ADDRESS
|
||||||
|
LDA EXEC.BUFFER.BASE
|
||||||
|
STA MISC.PARMS+3 BUFFER ADDRESS HI
|
||||||
|
STA OPEN.PARMS+4 "
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
LDA OPEN.PARMS+5 REFNUM OF FILE
|
||||||
|
STA EXEC.REFNUM
|
||||||
|
*---Fill other param blocks------
|
||||||
|
.2 LDX GET.SET.PARMS+5 RECORD LENGTH
|
||||||
|
STX VAL.L
|
||||||
|
LDX GET.SET.PARMS+6
|
||||||
|
STX VAL.L+1
|
||||||
|
LDX #2 POINT AT EXEC FILE NAME
|
||||||
|
JSR SAVE.FILENAME.IN.TABLE
|
||||||
|
*---Switch EXEC on now-----------
|
||||||
|
LDA #$FF MARK EXEC ACTIVE
|
||||||
|
STA F.EXEC
|
||||||
|
LDA KSWL
|
||||||
|
STA VDOSIO+2
|
||||||
|
LDA KSWH
|
||||||
|
STA VDOSIO+3
|
||||||
|
LDA #READ.EXEC.FILE
|
||||||
|
STA KSWL
|
||||||
|
LDA /READ.EXEC.FILE
|
||||||
|
STA KSWH
|
||||||
|
CLC
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.EXEC.SAVING.ERROR
|
||||||
|
PHA SAVE ERROR CODE
|
||||||
|
JSR CLOSE.EXEC.FILE CLOSE THE FILE
|
||||||
|
PLA GET ERROR CODE
|
||||||
|
SEC SIGNAL ERROR
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CLOSE EXEC FILE
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.EXEC.FILE
|
||||||
|
CLC
|
||||||
|
LDA F.EXEC
|
||||||
|
BPL .1 ...NO EXEC IN PROGRESS
|
||||||
|
LDA VDOSIO+2 RESTORE INPUT HOOK
|
||||||
|
STA KSWL
|
||||||
|
LDA VDOSIO+3
|
||||||
|
STA KSWH
|
||||||
|
LDA #$FF
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
LDX #2
|
||||||
|
LDA EXEC.REFNUM
|
||||||
|
JSR CLOSE.ONE.FILE CLOSE THE FILE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* "EXEC" INPUT HOOK
|
||||||
|
*--------------------------------
|
||||||
|
READ.EXEC.FILE
|
||||||
|
STA (BASL),Y STOP BLINKING ON SCREEN
|
||||||
|
JSR SAVE.REGS SAVE A,X,Y
|
||||||
|
*---Check for CTRL-C Abort-------
|
||||||
|
LDA KEYBOARD
|
||||||
|
CMP #$83 CONTROL-C?
|
||||||
|
BNE .2 ...NO
|
||||||
|
JSR CLOSE.EXEC.FILE ...YES
|
||||||
|
STA STROBE
|
||||||
|
*---End of Data------------------
|
||||||
|
.1 JSR RESTORE.REGS
|
||||||
|
JMP ABORT.EXIT
|
||||||
|
*---Set up EXEC char input-------
|
||||||
|
.2 LDA EXEC.REFNUM REFNUM
|
||||||
|
STA READ.WRITE.PARMS+1
|
||||||
|
LDA #EXEC.INPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /EXEC.INPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #1 READ JUST ONE BYTE
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .3 ...ERROR OR END OF DATA
|
||||||
|
JSR RESTORE.REGS
|
||||||
|
LDA EXEC.INPUT.CHAR
|
||||||
|
ORA #$80
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.3 JSR CLOSE.EXEC.SAVING.ERROR CLOSE EXEC FILE
|
||||||
|
CMP #$05 END OF DATA?
|
||||||
|
BEQ .1 ...YES
|
||||||
|
JMP ERROR.HANDLER
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.exec
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
174
SCMASM.30/SCI.S.GP.txt
Normal file
174
SCMASM.30/SCI.S.GP.txt
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
JMP WARM.DOS
|
||||||
|
JMP PARSE.COMMAND
|
||||||
|
SCI.USER.CMD JMP GP.RTS USER COMMAND PARSER
|
||||||
|
JMP ERROR.HANDLER
|
||||||
|
PRINT.ERROR JMP ERROR.PRINTER
|
||||||
|
ERROR.CODE .HS 00
|
||||||
|
*--------------------------------
|
||||||
|
OUTVEC .DA $FDF0,$C100,$C200,$C300,$C400,$C500,$C600,$C700
|
||||||
|
INVEC .DA $FD1B,$C100,$C200,$C300,$C400,$C500,$C600,$C700
|
||||||
|
*--------------------------------
|
||||||
|
VECOUT .HS F0FD
|
||||||
|
VECIN .HS 1BFD
|
||||||
|
*--------------------------------
|
||||||
|
VDOSIO .DA 0,0 SAVE HARDWARE VECTOR DURING EXEC, WRITE
|
||||||
|
.DA 0,0 VSYSIO
|
||||||
|
*--------------------------------
|
||||||
|
D.SLOT .HS 06
|
||||||
|
D.DRIV .HS 01
|
||||||
|
*--------------------------------
|
||||||
|
PREGA .BS 1
|
||||||
|
PREGX .BS 1
|
||||||
|
PREGY .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
F.TRACE .BS 1 +=TRACE OFF, -=TRACE ON
|
||||||
|
STATE .BS 1 0=IMMD, >0=DEFERRED
|
||||||
|
F.EXEC .BS 1
|
||||||
|
F.READ .BS 1
|
||||||
|
F.WRITE .BS 1
|
||||||
|
F.PREFIX .BS 1
|
||||||
|
DIR.FILE.READ.FLAG .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
STRINGS.SPACE.COUNT .BS 1
|
||||||
|
BUFFERED.WRITE.COUNT .BS 1
|
||||||
|
COMMAND.LINE.LENGTH .BS 1
|
||||||
|
PREVIOUS.CHAR .BS 1
|
||||||
|
OPEN.FILE.COUNT .BS 1
|
||||||
|
EXEC.FILE.CLOSING.FLAG .BS 1
|
||||||
|
CATALOG.LINE.STATE .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
EXTERNAL.COMMAND.HANDLER .BS 2
|
||||||
|
COMMAND.NAME.LENGTH .BS 1
|
||||||
|
COMMAND.NUMBER .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
PBITS .HS 0000
|
||||||
|
FBITS .HS 0000
|
||||||
|
VAL.A .HS 0000
|
||||||
|
VAL.B .HS 000000
|
||||||
|
VAL.E .HS 0000
|
||||||
|
VAL.L .HS 0000
|
||||||
|
VAL.S .HS 00
|
||||||
|
VAL.D .HS 00
|
||||||
|
VAL.F .HS 0000
|
||||||
|
VAL.R .HS 0000
|
||||||
|
VAL.V .HS 00
|
||||||
|
VAL.AT .HS 0000
|
||||||
|
VAL.T .HS 00
|
||||||
|
VAL.LB .HS 00 PR# OR IN# VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.DA PATHNAME.TWO.BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
MLI.CALLER
|
||||||
|
STA .2
|
||||||
|
STX GP.SAVEX
|
||||||
|
CMP #$CF
|
||||||
|
BCC .1
|
||||||
|
LDA #$CE
|
||||||
|
.1 TAX
|
||||||
|
LDA MLI.PARM.PNTRS-$C0,X
|
||||||
|
STA .3
|
||||||
|
JSR GP.MLI
|
||||||
|
.2 .HS 00
|
||||||
|
.3 .DA *
|
||||||
|
BCC .6
|
||||||
|
LDX #0
|
||||||
|
.4 CMP MLI.ERROR.CODES,X
|
||||||
|
BEQ .5
|
||||||
|
INX
|
||||||
|
CPX #19
|
||||||
|
BCC .4
|
||||||
|
.5 LDA BI.ERROR.CODES,X
|
||||||
|
*** SEC (CARRY ALREADY SET)
|
||||||
|
.6 LDX #*-*
|
||||||
|
GP.SAVEX .EQ *-1
|
||||||
|
ORA #0
|
||||||
|
GP.RTS RTS
|
||||||
|
*--------------------------------
|
||||||
|
.HS 00 <<<SPARE>>>
|
||||||
|
*---CREATE PARMS-----------------
|
||||||
|
CREATE.PARMS
|
||||||
|
.HS 07
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS C3.00.0000.00.0000.0000
|
||||||
|
*---GET & SET PREFIX, DESTROY----
|
||||||
|
PREFIX.PARMS
|
||||||
|
.HS 01
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
*---RENAME-----------------------
|
||||||
|
RENAME.PARMS
|
||||||
|
.HS 02
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.DA PATHNAME.TWO.BUFFER
|
||||||
|
*---GET & SET FILE INFO----------
|
||||||
|
GET.SET.PARMS
|
||||||
|
.HS 0A
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS 00.00.0000
|
||||||
|
.HS 00.0000.0000.0000.0000.0000
|
||||||
|
*---MISC-------------------------
|
||||||
|
MISC.PARMS
|
||||||
|
.HS 02.00.0000
|
||||||
|
.HS 00
|
||||||
|
*---OPEN PARMS-------------------
|
||||||
|
OPEN.PARMS
|
||||||
|
.HS 03
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS 0000.00
|
||||||
|
*---SET NEWLINE PARMS------------
|
||||||
|
NEWLINE.PARMS
|
||||||
|
.HS 03.00.7F.0D
|
||||||
|
*---READ & WRITE PARMS-----------
|
||||||
|
READ.WRITE.PARMS
|
||||||
|
.HS 04.00.0000.0000.0000
|
||||||
|
*---CLOSE & FLUSH PARMS----------
|
||||||
|
CLOSE.FLUSH.PARMS
|
||||||
|
.HS 01.00
|
||||||
|
*--------------------------------
|
||||||
|
* ADDRESSES OF MLI PARM LISTS FOR EACH CALL $C0-$D3
|
||||||
|
* actual address is $BExx
|
||||||
|
*--------------------------------
|
||||||
|
MLI.PARM.PNTRS
|
||||||
|
.DA #CREATE.PARMS $C0--CREATE
|
||||||
|
.DA #PREFIX.PARMS $C1--DESTROY
|
||||||
|
.DA #RENAME.PARMS $C2--RENAME
|
||||||
|
.DA #GET.SET.PARMS $C3--SFI
|
||||||
|
.DA #GET.SET.PARMS $C4--GFI
|
||||||
|
.DA #MISC.PARMS $C5--ONLINE
|
||||||
|
.DA #PREFIX.PARMS $C6--SPFX
|
||||||
|
.DA #PREFIX.PARMS $C7--GPFX
|
||||||
|
.DA #OPEN.PARMS $C8--OPEN
|
||||||
|
.DA #NEWLINE.PARMS $C9--NEWLINE
|
||||||
|
.DA #READ.WRITE.PARMS $CA--READ
|
||||||
|
.DA #READ.WRITE.PARMS $CB--WRITE
|
||||||
|
.DA #CLOSE.FLUSH.PARMS $CC--CLOSE
|
||||||
|
.DA #CLOSE.FLUSH.PARMS $CD--FLUSH
|
||||||
|
.DA #MISC.PARMS $CE--SMARK
|
||||||
|
* .DA #MISC.PARMS $CF--GMARK
|
||||||
|
* .DA #MISC.PARMS $D0--SEOF
|
||||||
|
* .DA #MISC.PARMS $D1--GEOF
|
||||||
|
* .DA #MISC.PARMS $D2--SBUF
|
||||||
|
* .DA #MISC.PARMS $D3--GBUF
|
||||||
|
*--------------------------------
|
||||||
|
.AS -/++++/
|
||||||
|
*--------------------------------
|
||||||
|
BUFFER.BASES .HS 78.7C LOWER/UPPER BUFFERS
|
||||||
|
EXEC.BUFFER.BASE .HS 74
|
||||||
|
*--------------------------------
|
||||||
|
RTS WAS GET BUFFER
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
RTS WAS RETURN BUFFER
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
.HS 74 HIMEM PAGE
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.gp
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
381
SCMASM.30/SCI.S.LOADSAVE.txt
Normal file
381
SCMASM.30/SCI.S.LOADSAVE.txt
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
DASH
|
||||||
|
LDA GET.SET.PARMS+4 GET FILE TYPE
|
||||||
|
CMP #$06 BINARY?
|
||||||
|
BEQ .3 ...YES, BRUN
|
||||||
|
CMP #$04 TEXT?
|
||||||
|
BNE .1 ...NO, TRY SYS
|
||||||
|
JMP EXEC ...YES, EXEC
|
||||||
|
*--------------------------------
|
||||||
|
.1 CMP #$FF SYS FILE?
|
||||||
|
BEQ .2 ...YES, BRUN IT
|
||||||
|
LDA #$0D "FILE TYPE MISMATCH"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*---RUN SYS FILE-----------------
|
||||||
|
.2 JSR CLOSE.ALL.FILES
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
LDA #0
|
||||||
|
STA VAL.A
|
||||||
|
LDX #6 RELEASE $8000-$B7FF
|
||||||
|
.4 STA BITMAP+16,X
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
LDA #$01 RELEASE $B800-$BEFF
|
||||||
|
STA BITMAP+23 B800.BFFF
|
||||||
|
LDA /$2000 A$2000
|
||||||
|
STA VAL.A+1
|
||||||
|
LDA #$FF T=SYS
|
||||||
|
STA VAL.T
|
||||||
|
LDA #$80 SIGNAL FOUND T,A, AND PATHNAME
|
||||||
|
STA FBITS+1
|
||||||
|
LDA #$05
|
||||||
|
STA FBITS
|
||||||
|
.3 JMP BRUN
|
||||||
|
*--------------------------------
|
||||||
|
WARM.DOS
|
||||||
|
JSR CLOSE.ALL.FILES
|
||||||
|
JSR CROUT
|
||||||
|
JMP SC.SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* LOAD A SOURCE PROGRAM
|
||||||
|
*--------------------------------
|
||||||
|
LOAD
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
BCS .5
|
||||||
|
LDA #$01 READ
|
||||||
|
LDX #$FA FILE TYPE
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .5 ...ERROR
|
||||||
|
*---GET LENGTH OF FILE-----------
|
||||||
|
LDA SC.INFLAG
|
||||||
|
ASL
|
||||||
|
BPL .1 ...NOT .INBx
|
||||||
|
AND #$7F
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
BEQ .2 ...ALWAYS
|
||||||
|
.1 JSR MLI.D1 GET LENGTH OF FILE
|
||||||
|
BCS .5 ...ERROR
|
||||||
|
*---FIGURE LOAD ADDRESS----------
|
||||||
|
.2 SEC
|
||||||
|
LDA SC.HIMEM
|
||||||
|
SBC MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
STA VAL.A
|
||||||
|
TAX
|
||||||
|
LDA SC.HIMEM+1
|
||||||
|
SBC MISC.PARMS+3
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
STA VAL.A+1
|
||||||
|
TAY
|
||||||
|
*---CHECK FOR ROOM IN RAM--------
|
||||||
|
BMI .6 ADDRESS>$7FFF MEANS NO ROOM
|
||||||
|
TXA
|
||||||
|
CMP SC.LOMEM
|
||||||
|
TYA
|
||||||
|
SBC SC.LOMEM+1
|
||||||
|
BCC .6 ...BELOW LOMEM
|
||||||
|
*---READ FILE--------------------
|
||||||
|
LDA MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA MISC.PARMS+3
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ THE FILE
|
||||||
|
BCS .5
|
||||||
|
*---CLOSE UNLESS .INBx-----------
|
||||||
|
BIT SC.INFLAG
|
||||||
|
BVS .4 ...IT IS .INBx
|
||||||
|
.3 JSR MLI.CC CLOSE THE FILE
|
||||||
|
BCS .5
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDX VAL.A+1
|
||||||
|
LDY VAL.A
|
||||||
|
STX SC.PP+1
|
||||||
|
STY SC.PP
|
||||||
|
.5 RTS
|
||||||
|
.6 LDA #$0E "PROGRAM TOO LARGE"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SAVE SOURCE PROGRAM ON DISK
|
||||||
|
*--------------------------------
|
||||||
|
SAVE
|
||||||
|
BCC .1 ...FILE ALREADY HERE
|
||||||
|
LDA #$FA FILE TYPE "INT"
|
||||||
|
STA VAL.T
|
||||||
|
STA GET.SET.PARMS+4
|
||||||
|
LDA #$C3
|
||||||
|
STA GET.SET.PARMS+3
|
||||||
|
LDA SC.PP START OF PROGRAM
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
LDA SC.PP+1
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
JSR MAKE.A.FILE CREATE A NEW FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
.1 JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
BCS .2
|
||||||
|
LDA #$02
|
||||||
|
LDX #$FA
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
*---GET LENGTH-------------------
|
||||||
|
SEC GET LENGTH
|
||||||
|
LDA SC.HIMEM
|
||||||
|
SBC SC.PP
|
||||||
|
TAX
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA SC.HIMEM+1
|
||||||
|
SBC SC.PP+1
|
||||||
|
TAY
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+4
|
||||||
|
*---WRITE THE FILE---------------
|
||||||
|
LDA SC.PP
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA SC.PP+1
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
STX READ.WRITE.PARMS+4
|
||||||
|
STY READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CB WRITE DATA ON FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
JSR MLI.D0 SET EOF (TRUNCATE OLD LONGER FILE)
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
JSR MLI.CC CLOSE THE FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
*---UPDATE FILE INFO-------------
|
||||||
|
LDA SC.PP+1
|
||||||
|
LDX SC.PP
|
||||||
|
CMP GET.SET.PARMS+6
|
||||||
|
BNE .3
|
||||||
|
CPX GET.SET.PARMS+5
|
||||||
|
CLC
|
||||||
|
BNE .3
|
||||||
|
.2 RTS
|
||||||
|
.3 STX GET.SET.PARMS+5
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
LDA #0
|
||||||
|
STA GET.SET.PARMS+10
|
||||||
|
STA GET.SET.PARMS+11
|
||||||
|
STA GET.SET.PARMS+12
|
||||||
|
STA GET.SET.PARMS+13
|
||||||
|
JMP SET.FILE.INFO
|
||||||
|
*--------------------------------
|
||||||
|
CREATE
|
||||||
|
LDX #0
|
||||||
|
LDY #0 AuxType = 0000 unless specified
|
||||||
|
LDA FBITS+1
|
||||||
|
BPL .1 ...no A-value specified
|
||||||
|
LDX VAL.A use A-value for AuxType
|
||||||
|
LDY VAL.A+1
|
||||||
|
.1 STX CREATE.PARMS+5
|
||||||
|
STY CREATE.PARMS+6
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BNE MAKE.A.FILE
|
||||||
|
LDA #$0F
|
||||||
|
STA VAL.T
|
||||||
|
|
||||||
|
MAKE.A.FILE
|
||||||
|
LDA VAL.T
|
||||||
|
STA CREATE.PARMS+4
|
||||||
|
LDX #$C3
|
||||||
|
LDY #$01 SEEDLING
|
||||||
|
CMP #$0F
|
||||||
|
BNE .1
|
||||||
|
LDY #$0D DIRECTORY
|
||||||
|
.1 STX CREATE.PARMS+3
|
||||||
|
STY CREATE.PARMS+7
|
||||||
|
JMP MLI.C0 CREATE
|
||||||
|
*--------------------------------
|
||||||
|
RENAME LDA FBITS
|
||||||
|
AND #$02 PATH 2?
|
||||||
|
BEQ .1 ...NO, ERROR
|
||||||
|
JMP MLI.C2 RENAME
|
||||||
|
.1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
LOCK JSR GET.FILE.INFO
|
||||||
|
BCS RTS3
|
||||||
|
LDA GET.SET.PARMS+3
|
||||||
|
AND #$3C
|
||||||
|
ORA #$01
|
||||||
|
BNE LKUNLK ...ALWAYS
|
||||||
|
UNLOCK JSR GET.FILE.INFO
|
||||||
|
BCS RTS3
|
||||||
|
LDA #$C3
|
||||||
|
ORA GET.SET.PARMS+3
|
||||||
|
LKUNLK STA GET.SET.PARMS+3
|
||||||
|
JMP SET.FILE.INFO
|
||||||
|
*--------------------------------
|
||||||
|
PREFIX
|
||||||
|
LDX #0
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$04
|
||||||
|
BNE .1 ...SPECIFIED S/D
|
||||||
|
LDA FBITS SEE IF SPECIFIED PATHNAME
|
||||||
|
LSR
|
||||||
|
BCC .3 ...NO, SO PRINT CURRENT PREFIX
|
||||||
|
.1 JMP MLI.C6 SET PREFIX
|
||||||
|
*---PRINT CURRENT PREFIX---------
|
||||||
|
.2 LDA PATHNAME.ONE.BUFFER+1,X
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INX
|
||||||
|
.3 CPX PATHNAME.ONE.BUFFER
|
||||||
|
BCC .2
|
||||||
|
JSR CROUT
|
||||||
|
CLC
|
||||||
|
RTS3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
NOPREFIX
|
||||||
|
LDA #0
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
JMP MLI.C6 SET PREFIX
|
||||||
|
*--------------------------------
|
||||||
|
BSAVE
|
||||||
|
BCC .2 ...EXISTING FILE
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$B0 A-EL
|
||||||
|
CMP #$90 Require A and either E or L
|
||||||
|
BCC .3 ...Neither E nor L
|
||||||
|
LDA VAL.A
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
*---T=BIN unless specified-------
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BNE .1 ...TYPE SPECIFIED
|
||||||
|
LDA #$06 ...NO TYPE, ASSUME BINARY
|
||||||
|
STA VAL.T
|
||||||
|
.1 LDA VAL.T
|
||||||
|
STA GET.SET.PARMS+4
|
||||||
|
*--------------------------------
|
||||||
|
JSR MAKE.A.FILE
|
||||||
|
BCS .4
|
||||||
|
JSR GET.FILE.INFO
|
||||||
|
BCS .4
|
||||||
|
.2 LDA #$02
|
||||||
|
BNE B.COMMON ...ALWAYS
|
||||||
|
|
||||||
|
.3 LDA #$06 "PATH NOT FOUND"
|
||||||
|
SEC
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
BRUN
|
||||||
|
JSR BLOAD
|
||||||
|
BCS .1
|
||||||
|
JSR .2
|
||||||
|
CLC
|
||||||
|
.1 RTS
|
||||||
|
.2 JMP (READ.WRITE.PARMS+2)
|
||||||
|
*--------------------------------
|
||||||
|
BLOAD
|
||||||
|
LDA #$01
|
||||||
|
B.COMMON
|
||||||
|
PHA
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
PLA
|
||||||
|
BCS .3
|
||||||
|
LDX #$06
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .3
|
||||||
|
LDX VAL.A
|
||||||
|
LDY VAL.A+1
|
||||||
|
LDA FBITS+1
|
||||||
|
BMI .1 ...ADDRESS SPECIFIED
|
||||||
|
LDX GET.SET.PARMS+5
|
||||||
|
LDY GET.SET.PARMS+6
|
||||||
|
LDA FBITS DON'T ALLOW DEFAULT ADDRESS
|
||||||
|
AND #$04 ON NON-BINARY FILES
|
||||||
|
BEQ .0 ...T not specified, so it is BIN
|
||||||
|
LDA VAL.T T specified, better be BIN or SYS
|
||||||
|
CMP #$06 is it BIN?
|
||||||
|
BEQ .0 ...yes, use AuxType value
|
||||||
|
CMP #$FF is it SYS?
|
||||||
|
BNE .4 ...no, error
|
||||||
|
LDX #$2000 ...type SYS, assume A$2000
|
||||||
|
LDY /$2000
|
||||||
|
.0 LDA FBITS+1
|
||||||
|
.1 STX READ.WRITE.PARMS+2
|
||||||
|
STY READ.WRITE.PARMS+3
|
||||||
|
LDX VAL.L
|
||||||
|
LDY VAL.L+1
|
||||||
|
AND #$30
|
||||||
|
BEQ .5
|
||||||
|
EOR #$30
|
||||||
|
BEQ .4
|
||||||
|
AND #$10
|
||||||
|
BEQ .7
|
||||||
|
LDA VAL.E
|
||||||
|
SEC
|
||||||
|
SBC VAL.A
|
||||||
|
TAX
|
||||||
|
LDA VAL.E+1
|
||||||
|
SBC VAL.A+1
|
||||||
|
TAY
|
||||||
|
INX
|
||||||
|
BNE .2
|
||||||
|
INY
|
||||||
|
.2 BCS .7
|
||||||
|
LDA #$02 "RANGE ERROR"
|
||||||
|
SEC
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDA #$0B "INVALID PARAMETER"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.5 JSR MLI.D1 GET EOF
|
||||||
|
BCS .6
|
||||||
|
LDX MISC.PARMS+2
|
||||||
|
LDY MISC.PARMS+3
|
||||||
|
LDA MISC.PARMS+4
|
||||||
|
BEQ .7
|
||||||
|
LDA #$0E "PROGRAM TOO LARGE"
|
||||||
|
.6 SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.7 STX READ.WRITE.PARMS+4
|
||||||
|
STY READ.WRITE.PARMS+5
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$40
|
||||||
|
BEQ .10
|
||||||
|
LDX #$02
|
||||||
|
.8 LDA VAL.B,X
|
||||||
|
STA MISC.PARMS+2,X
|
||||||
|
DEX
|
||||||
|
BPL .8
|
||||||
|
.9 JSR MLI.CE SET MARK
|
||||||
|
LDX COMMAND.NUMBER
|
||||||
|
BCC .10
|
||||||
|
CMP #$02
|
||||||
|
BNE .6
|
||||||
|
CPX #CN.BSAVE
|
||||||
|
BNE .6
|
||||||
|
JSR MLI.D0 SET EOF
|
||||||
|
BCC .9
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.10 LDX COMMAND.NUMBER
|
||||||
|
CPX #CN.BSAVE
|
||||||
|
BNE .12 ...NOT BSAVE
|
||||||
|
JSR MLI.CB ...BSAVE
|
||||||
|
BCS .13 ...ERROR
|
||||||
|
.11 JMP MLI.CC
|
||||||
|
.12 JSR MLI.CA READ
|
||||||
|
BCC .11 ...GOOD, CLOSE
|
||||||
|
.13 RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.loadsave
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
75
SCMASM.30/SCI.S.ONLINE.txt
Normal file
75
SCMASM.30/SCI.S.ONLINE.txt
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
ONLINE LDA BUFFER.BASES
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
JSR MLI.C5 (Might clobber DRIVER.PTR)
|
||||||
|
*---Now display the list---------
|
||||||
|
LDA BUFFER.BASES
|
||||||
|
STA DRIVER.PTR+1
|
||||||
|
LDA #0
|
||||||
|
STA DRIVER.PTR
|
||||||
|
.1 PHA
|
||||||
|
TAY
|
||||||
|
LDA (DRIVER.PTR),Y
|
||||||
|
BEQ .5 ...END OF LIST
|
||||||
|
PHA
|
||||||
|
LDA #"S"
|
||||||
|
JSR COUT
|
||||||
|
PLA
|
||||||
|
PHA
|
||||||
|
LSR ISOLATE SLOT NUMBER
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
AND #7
|
||||||
|
ORA #"0"
|
||||||
|
JSR COUT PRINT SLOT NUMBER
|
||||||
|
LDA #","
|
||||||
|
JSR COUT
|
||||||
|
LDA #"D"
|
||||||
|
JSR COUT
|
||||||
|
PLA
|
||||||
|
PHA
|
||||||
|
ASL SET CARRY IF DRIVE 2
|
||||||
|
LDA #"1" ASSUME DRIVE 1
|
||||||
|
ADC #0 CHANGE TO 2 IF TRUE
|
||||||
|
JSR COUT
|
||||||
|
LDA #" " PRINT SPACE
|
||||||
|
JSR COUT
|
||||||
|
PLA get dsssllll again
|
||||||
|
AND #$0F isolate length
|
||||||
|
BEQ .3 no name, show error code
|
||||||
|
TAX
|
||||||
|
LDA #"/"
|
||||||
|
.2 JSR COUT
|
||||||
|
INY PRINT THE VOLUME OR FILE NAME
|
||||||
|
LDA (DRIVER.PTR),Y
|
||||||
|
ORA #$80
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
LDA #"/"
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
.3 LDA #"("
|
||||||
|
JSR COUT
|
||||||
|
INY
|
||||||
|
LDA (DRIVER.PTR),Y GET ERROR CODE
|
||||||
|
JSR PRBYTE
|
||||||
|
LDA #")"
|
||||||
|
.4 JSR COUT
|
||||||
|
JSR CROUT
|
||||||
|
*--------------------------------
|
||||||
|
.5 CLC POINT TO NEXT VOLUME NAME
|
||||||
|
PLA
|
||||||
|
ADC #16
|
||||||
|
BCC .1 STILL IN SAME PAGE
|
||||||
|
CLC NO ERROR!
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.online
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
321
SCMASM.30/SCI.S.OPENCLOSE.txt
Normal file
321
SCMASM.30/SCI.S.OPENCLOSE.txt
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* FOLLOWING USE "BIT" TO SKIP OVER TWO BYTES,
|
||||||
|
* SO CANNOT HAVE THE SECOND OF THE TWO =$CX.
|
||||||
|
*--------------------------------
|
||||||
|
MLI.C0 LDA #$00 CREATE
|
||||||
|
.HS 2C
|
||||||
|
MLI.C1 LDA #$01 DESTROY
|
||||||
|
.HS 2C
|
||||||
|
MLI.C2 LDA #$02 RENAME
|
||||||
|
.HS 2C
|
||||||
|
MLI.C3 LDA #$03 SET FILE INFO
|
||||||
|
.HS 2C
|
||||||
|
MLI.C4 LDA #$04 GET FILE INFO
|
||||||
|
.HS 2C
|
||||||
|
MLI.C5 LDA #$05 ONLINE
|
||||||
|
.HS 2C
|
||||||
|
MLI.C6 LDA #$06 SET PREFIX
|
||||||
|
.HS 2C
|
||||||
|
MLI.C7 LDA #$07 GET PREFIX
|
||||||
|
.HS 2C
|
||||||
|
MLI.C8 LDA #$08 OPEN
|
||||||
|
.HS 2C
|
||||||
|
MLI.C9 LDA #$09 NEWLINE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CA LDA #$0A READ
|
||||||
|
.HS 2C
|
||||||
|
MLI.CB LDA #$0B WRITE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CC LDA #$0C CLOSE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CD LDA #$0D FLUSH
|
||||||
|
.HS 2C
|
||||||
|
MLI.CE LDA #$0E SET MARK
|
||||||
|
.HS 2C
|
||||||
|
MLI.CF LDA #$0F GET MARK
|
||||||
|
.HS 2C
|
||||||
|
MLI.D0 LDA #$D0 SET EOF
|
||||||
|
.HS 2C
|
||||||
|
MLI.D1 LDA #$D1 GET EOF
|
||||||
|
ORA #$C0 MAKE INTO MLI CALL CODE
|
||||||
|
JMP MLI.CALLER
|
||||||
|
*--------------------------------
|
||||||
|
GET.FILE.INFO
|
||||||
|
LDA #10
|
||||||
|
STA GET.SET.PARMS
|
||||||
|
BNE MLI.C4 GET FILE INFO
|
||||||
|
*--------------------------------
|
||||||
|
SET.FILE.INFO
|
||||||
|
LDA #7
|
||||||
|
STA GET.SET.PARMS
|
||||||
|
BNE MLI.C3 SET FILE INFO
|
||||||
|
*--------------------------------
|
||||||
|
BYE
|
||||||
|
JSR CLOSE.ALL.FILES
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
JSR GP.MLI
|
||||||
|
.DA #$65,READ.WRITE.PARMS
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.A.FILE
|
||||||
|
PHA
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BEQ .1
|
||||||
|
LDX VAL.T
|
||||||
|
.1 PLA
|
||||||
|
|
||||||
|
OPEN.DIRECTORY
|
||||||
|
CPX GET.SET.PARMS+4
|
||||||
|
BNE TYPERR
|
||||||
|
AND GET.SET.PARMS+3
|
||||||
|
BEQ .3
|
||||||
|
LDA ALLOCATED.BUFFER.PAGE
|
||||||
|
STA OPEN.PARMS+4
|
||||||
|
LDA #$0F
|
||||||
|
STA LEVEL
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .1
|
||||||
|
LDA OPEN.PARMS+5
|
||||||
|
STA READ.WRITE.PARMS+1
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.3 LDA #$0A "FILE LOCKED"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VERIFY
|
||||||
|
LDA #$06 "PATH NOT FOUND"
|
||||||
|
RTS ALREADY .CS. IF ERROR
|
||||||
|
*--------------------------------
|
||||||
|
TYPERR LDA #$0D
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN -- ONLY USED BY SCASM FOR OPENING
|
||||||
|
* .TF AND "TEXT" FILES
|
||||||
|
* THE FILES MAY BE TXT OR BIN FILE TYPE
|
||||||
|
*--------------------------------
|
||||||
|
OPEN
|
||||||
|
PHP
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCC .9 ...ALREADY OPEN, ERROR
|
||||||
|
PLP ...GET SAVED STATUS
|
||||||
|
BCC .3 ...FILE ALREADY EXISTS
|
||||||
|
*---MAKE A NEW FILE--------------
|
||||||
|
LDA FBITS WAS T SPECIFIED?
|
||||||
|
AND #$04
|
||||||
|
BEQ .1 ...NO
|
||||||
|
LDA VAL.T WHAT WAS SPEC?
|
||||||
|
BCS .2 ...always, use spec'd type
|
||||||
|
.1 LDA #$06 ...new file, type not spec'd, T=BIN
|
||||||
|
BIT PASS $FF if command level, 0 or 1 if assembling
|
||||||
|
BPL .4 ...assembling, make BIN file
|
||||||
|
LDA #$04 ...command, make TXT file
|
||||||
|
.4 STA VAL.T
|
||||||
|
.2 STA GET.SET.PARMS+4
|
||||||
|
LDA #$C3 FULL ACCESS PRIVILEGES
|
||||||
|
STA GET.SET.PARMS+3
|
||||||
|
LDA #0 RECORD LENGTH = 0000
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
JSR MAKE.A.FILE CREATE THE FILE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---NOW THE FILE EXISTS----------
|
||||||
|
*---OPEN THE FILE----------------
|
||||||
|
.3 JSR ALLOCATE.LOWER.BUFFER
|
||||||
|
STA OPEN.PARMS+4 STARTING PAGE OF BUFFER
|
||||||
|
LDA #$07 LEVEL #
|
||||||
|
STA LEVEL
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---SAVE NAME, ETC OF OPEN FILE--
|
||||||
|
LDA OPEN.PARMS+4 MARK THE BUFFER IN USE
|
||||||
|
STA FILE.BUFFER.PNTRS,X
|
||||||
|
LDA OPEN.PARMS+5 REFNUM
|
||||||
|
STA FILE.REFNUMS,X
|
||||||
|
JSR SAVE.FILENAME.IN.TABLE
|
||||||
|
CLC
|
||||||
|
.8 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.9 PLP
|
||||||
|
JMP ERR.FILE.BUSY
|
||||||
|
*--------------------------------
|
||||||
|
SAVE.FILENAME.IN.TABLE
|
||||||
|
TXA
|
||||||
|
ASL INDEX TIMES 32
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
*---FORM NAME LENGTH BYTE--------
|
||||||
|
LDA PATHNAME.TWO.BUFFER
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS,X
|
||||||
|
TAY SAVE ACTUAL LENGTH
|
||||||
|
CMP #30 ONLY ROOM FOR 29 CHARS
|
||||||
|
BCC .1 ...'TWILL FIT
|
||||||
|
LDA #29 USE LAST 29 CHARS
|
||||||
|
.1 STA FNLEN
|
||||||
|
LDA VAL.L
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+1,X
|
||||||
|
LDA VAL.L+1
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
.2 INX
|
||||||
|
LDA PATHNAME.TWO.BUFFER,Y
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
DEY
|
||||||
|
DEC FNLEN
|
||||||
|
BNE .2
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SEARCH OPEN FILE NAME TABLE
|
||||||
|
* RETURN .CS., A=ERRCOD IF NO PATHNAME
|
||||||
|
* OR IF NOT IN TABLE
|
||||||
|
* RETURN .CC., A=REFNUM IF FOUND IN TABLE
|
||||||
|
*--------------------------------
|
||||||
|
GET.REFNUM.OF.OPEN.FILE
|
||||||
|
LDA FBITS WAS PATHNAME GIVEN?
|
||||||
|
LSR
|
||||||
|
BCS .1 ...YES
|
||||||
|
JMP ERR.SYNTAX ...NO, "SYNTAX ERROR"
|
||||||
|
*---CHECK AMONG NON-EXEC FILES---
|
||||||
|
.1 LDX #1 MAX # OF FILES IS 2
|
||||||
|
STX EXEC.FILE.CLOSING.FLAG
|
||||||
|
.2 LDA FILE.BUFFER.PNTRS,X SEE IF IN USE
|
||||||
|
BEQ .3 NO
|
||||||
|
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
BCC .5 ...FOUND IT
|
||||||
|
.3 DEX
|
||||||
|
BPL .2
|
||||||
|
*---CHECK EXEC FILE--------------
|
||||||
|
BIT F.EXEC IS EXEC ON?
|
||||||
|
BPL .4 ...NO, FILE NOT OPEN
|
||||||
|
LDX #2 ...YES
|
||||||
|
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
BCS .4 ...NOT THIS ONE EITHER
|
||||||
|
LDA #$FF
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
LDA EXEC.REFNUM
|
||||||
|
RTS RETURN .CC.
|
||||||
|
.4 LDA #$12 "FILE NOT OPEN"
|
||||||
|
SEC
|
||||||
|
RTS RETURN .CS.
|
||||||
|
.5 LDA FILE.REFNUMS,X
|
||||||
|
RTS RETURN .CC.
|
||||||
|
*--------------------------------
|
||||||
|
* COMPARE NAMES
|
||||||
|
* RETURN .CC. IF SAME, ELSE .CS.
|
||||||
|
*--------------------------------
|
||||||
|
COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
TXA
|
||||||
|
PHA SAVE X-REGISTER
|
||||||
|
ASL INDEX TIMES 32
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS,X
|
||||||
|
CMP PATHNAME.TWO.BUFFER
|
||||||
|
BNE .3 ...DIFFERENT LENGTHS
|
||||||
|
TAY POINT TO END OF PATHNAME
|
||||||
|
CMP #30 CHOP AT 29
|
||||||
|
BCC .1
|
||||||
|
LDA #29
|
||||||
|
.1 STA FNLEN
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS+1,X
|
||||||
|
STA RECORD.LENGTH
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
STA RECORD.LENGTH+1
|
||||||
|
.2 INX
|
||||||
|
LDA PATHNAME.TWO.BUFFER,Y
|
||||||
|
CMP OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
BNE .3 NOT THE SAME NAME
|
||||||
|
DEY
|
||||||
|
DEC FNLEN
|
||||||
|
BNE .2 MORE TO THE NAME
|
||||||
|
CLC SIGNAL SAME NAMES
|
||||||
|
.HS B0 "BCS" OPCODE, SKIPS OVER "SEC"
|
||||||
|
.3 SEC SIGNAL DIFFERENT NAMES
|
||||||
|
PLA RESTORE X-REG
|
||||||
|
TAX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE
|
||||||
|
LDA FBITS
|
||||||
|
LSR ANY PATHNAME GIVEN?
|
||||||
|
BCC CLOSE.ALL.FILES ...NO
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCC CLOSE.ONE.FILE ...OPEN, SO CLOSE IT
|
||||||
|
CLC ...NOT OPEN, SO FINISHED
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CLOSE A FILE ... REFNUM IN A-REG
|
||||||
|
* INDEX IN X-REG
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.ONE.FILE
|
||||||
|
STA CLOSE.FLUSH.PARMS+1 REFNUM
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL LEVEL 0
|
||||||
|
JSR MLI.CC CLOSE
|
||||||
|
BCS RTS2 ...ERROR
|
||||||
|
LDA #0
|
||||||
|
BIT EXEC.FILE.CLOSING.FLAG
|
||||||
|
BPL .1
|
||||||
|
STA F.EXEC
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
RTS
|
||||||
|
.1 STA FILE.BUFFER.PNTRS,X
|
||||||
|
LDA CLOSE.FLUSH.PARMS+1
|
||||||
|
EOR WRITE.REFNUM TEST .EQ., LEAVE CARRY CLEAR
|
||||||
|
BNE RTS2 ...NOT SAME AS "WRITE" FILE
|
||||||
|
*--------------------------------
|
||||||
|
UNHOOK.WRITE
|
||||||
|
BIT F.WRITE
|
||||||
|
BPL RTS2
|
||||||
|
LDA VDOSIO
|
||||||
|
STA CSWL
|
||||||
|
LDA VDOSIO+1
|
||||||
|
STA CSWH
|
||||||
|
LDA #0
|
||||||
|
STA F.WRITE
|
||||||
|
RTS2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.ALL.FILES
|
||||||
|
LDX #1 MAX FILES IS 2
|
||||||
|
.1 LDA FILE.BUFFER.PNTRS,X
|
||||||
|
BEQ .2 NOT IN USE
|
||||||
|
LDA FILE.REFNUMS,X
|
||||||
|
JSR CLOSE.ONE.FILE
|
||||||
|
BCS RTS2
|
||||||
|
.2 DEX
|
||||||
|
BPL .1
|
||||||
|
INX X=0
|
||||||
|
STX CLOSE.FLUSH.PARMS+1
|
||||||
|
LDA #$07
|
||||||
|
STA LEVEL
|
||||||
|
JMP MLI.CC CLOSE
|
||||||
|
*--------------------------------
|
||||||
|
* ALLOCATE UPPER/LOWER BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
ALLOCATE.UPPER.BUFFER
|
||||||
|
LDX #1
|
||||||
|
.HS 2C
|
||||||
|
ALLOCATE.LOWER.BUFFER
|
||||||
|
LDX #0
|
||||||
|
.2 LDA BUFFER.BASES,X
|
||||||
|
STA ALLOCATED.BUFFER.PAGE
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.openclose
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
87
SCMASM.30/SCI.S.PRIN.txt
Normal file
87
SCMASM.30/SCI.S.PRIN.txt
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* PR#slot copy address from OUTVEC,slot to CSW
|
||||||
|
* PR#Aaddr copy Aaddress into CSW
|
||||||
|
* PR#slot,Aaddr copy Aaddress into OUTVEC,slot
|
||||||
|
*
|
||||||
|
* IN#slot copy address from INVEC,slot to KSW
|
||||||
|
* IN#Aaddr copy Aaddress into KSW
|
||||||
|
* IN#slot,Aaddr copy Aaddress into INVEC,slot
|
||||||
|
*--------------------------------
|
||||||
|
PR LDA #0
|
||||||
|
.HS 2C SKIP NEXT LINE
|
||||||
|
IN LDA #2
|
||||||
|
PHA SAVE 0 OR 2
|
||||||
|
ASL
|
||||||
|
ASL 00 OR 08
|
||||||
|
ORA VAL.LB +SLOT
|
||||||
|
ASL *2
|
||||||
|
TAX
|
||||||
|
BIT FBITS WAS SLOT PARAMETER GIVEN?
|
||||||
|
BVC .1 ...NO
|
||||||
|
LDA FBITS+1 ...YES, WAS A$ PARM ALSO?
|
||||||
|
BMI .2 ...YES, SO UPDATE TABLE
|
||||||
|
TXA Check for "PR#0"
|
||||||
|
BEQ .4 ...yes, so call MON.SETVID directly
|
||||||
|
LDA OUTVEC,X ...NO, ONLY SLOT
|
||||||
|
STA VAL.A SO GET VALUE FROM TABLE
|
||||||
|
LDA OUTVEC+1,X
|
||||||
|
STA VAL.A+1
|
||||||
|
.1 JSR CHECK.IO.DRIVER
|
||||||
|
BCS .3 ...NOT VALID DRIVER
|
||||||
|
PLA POP SAVED 0 OR 2
|
||||||
|
TAX
|
||||||
|
LDA VAL.A INSTALL HOOK FOR DRIVER
|
||||||
|
STA CSWL,X
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA CSWH,X
|
||||||
|
RTS
|
||||||
|
*---ENTER NEW VALUE IN TABLE-----
|
||||||
|
.2 JSR CHECK.IO.DRIVER
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
PLA POP OFF SAVED 0 OR 2
|
||||||
|
LDA VAL.A+1 UPDATE TABLE
|
||||||
|
STA OUTVEC+1,X
|
||||||
|
LDA VAL.A
|
||||||
|
STA OUTVEC,X
|
||||||
|
RTS
|
||||||
|
.3 PLA POP OFF SAVED 0 OR 2
|
||||||
|
LDA #$03 "NO DEVICE CONNECTED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 PLA POP OFF SAVED 0 OR 2
|
||||||
|
JSR MON.SETVID
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.IO.DRIVER
|
||||||
|
LDA VAL.A GET DRIVER ADDRESS INTO PNTR
|
||||||
|
STA DRIVER.PTR
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA DRIVER.PTR+1
|
||||||
|
LDY #0
|
||||||
|
CMP #$C0 IS IT IN ROM AREA?
|
||||||
|
BCC .3 ...NO
|
||||||
|
LDA IO.OFF ...YES, TURN OFF $C800 SPACE
|
||||||
|
STY RETRY.COUNT
|
||||||
|
LDA (DRIVER.PTR),Y CHECK FOR ROM PRESENT
|
||||||
|
CMP #$FF
|
||||||
|
BEQ .4 ...NOT VALID ROM VALUE
|
||||||
|
.1 CMP (DRIVER.PTR),Y BETTER NOT CHANGE...
|
||||||
|
BNE .4 ...WOOPS, NOT ROM
|
||||||
|
DEC RETRY.COUNT TRY IT 256 TIMES
|
||||||
|
BNE .1 ...AGAIN
|
||||||
|
.2 CLC ...REALLY A DRIVER
|
||||||
|
RTS
|
||||||
|
*---VERIFY RAM-BASED DRIVER------
|
||||||
|
.3 LDA (DRIVER.PTR),Y GET FIRST BYTE
|
||||||
|
CMP #$D8 "CLD" OPCODE?
|
||||||
|
BEQ .2 ...YES, VALID DRIVER
|
||||||
|
.4 SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.prin
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
65
SCMASM.30/SCI.S.RWPA.txt
Normal file
65
SCMASM.30/SCI.S.RWPA.txt
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
WRITE
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCS .1 ...NOT OPEN
|
||||||
|
STA WRITE.REFNUM
|
||||||
|
LDA CSWL
|
||||||
|
STA VDOSIO
|
||||||
|
LDA CSWH
|
||||||
|
STA VDOSIO+1
|
||||||
|
LDA #WRITE.TEXT.FILE
|
||||||
|
STA CSWL
|
||||||
|
LDA /WRITE.TEXT.FILE
|
||||||
|
STA CSWH
|
||||||
|
LDA #$FF
|
||||||
|
STA F.WRITE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OUTPUT HOOK DURING A WRITE OPERATION
|
||||||
|
*--------------------------------
|
||||||
|
WRITE.TEXT.FILE
|
||||||
|
AND #$7F PRODOS STANDARD IS BIT7=0
|
||||||
|
STA WRITE.OUTPUT.CHAR
|
||||||
|
JSR SAVE.REGS
|
||||||
|
LDX WRITE.REFNUM
|
||||||
|
STX READ.WRITE.PARMS+1
|
||||||
|
ASL IGNORE BIT 7
|
||||||
|
BEQ .2 END OF FILE
|
||||||
|
LDA #WRITE.OUTPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /WRITE.OUTPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #1
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CB WRITE
|
||||||
|
BCC RESTORE.REGS
|
||||||
|
*--------------------------------
|
||||||
|
.1 JMP ERROR.HANDLER
|
||||||
|
*--------------------------------
|
||||||
|
.2 STX MISC.PARMS+1
|
||||||
|
JSR MLI.CF READ MARK
|
||||||
|
BCS .1
|
||||||
|
JSR MLI.D0 SET EOF
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---fall into RESTORE.REGS-------
|
||||||
|
*--------------------------------
|
||||||
|
RESTORE.REGS
|
||||||
|
LDY PREGY
|
||||||
|
LDX PREGX
|
||||||
|
LDA PREGA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SAVE.REGS
|
||||||
|
STA PREGA
|
||||||
|
STX PREGX
|
||||||
|
STY PREGY
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.rwpa
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
180
SCMASM.30/SCI.S.TABLES.txt
Normal file
180
SCMASM.30/SCI.S.TABLES.txt
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
CN. .SE 1
|
||||||
|
.MA CMD
|
||||||
|
CN. .SE CN.+1
|
||||||
|
CN.]2 .EQ CN.
|
||||||
|
.AT /]2]3/
|
||||||
|
.DA ]2
|
||||||
|
.HS ]1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
COMMAND.TABLE
|
||||||
|
.AT /-/
|
||||||
|
.DA DASH
|
||||||
|
.HS 0104
|
||||||
|
>CMD 05F4,BLOAD
|
||||||
|
>CMD 01F4,BRUN
|
||||||
|
>CMD 0DF4,BSAVE
|
||||||
|
>CMD 0000,BYE
|
||||||
|
>CMD 9504,CATALOG
|
||||||
|
>CMD 9504,CAT
|
||||||
|
>CMD 0100,CLOSE
|
||||||
|
>CMD 0D84,CREATE
|
||||||
|
|
||||||
|
* >CMD 0104,DELETE
|
||||||
|
|
||||||
|
CN. .SE CN.+1
|
||||||
|
CN.DELETE .EQ CN.
|
||||||
|
.AT /DELETE/
|
||||||
|
.DA MLI.C1
|
||||||
|
.HS 0104
|
||||||
|
|
||||||
|
>CMD 0107,EXEC
|
||||||
|
>CMD 4080,IN,#
|
||||||
|
>CMD 0504,LOAD
|
||||||
|
>CMD 0104,LOCK
|
||||||
|
>CMD 0000,NOPREFIX
|
||||||
|
>CMD 0000,NOW
|
||||||
|
>CMD 0000,ONLINE
|
||||||
|
>CMD 2D14,OPEN
|
||||||
|
>CMD 4080,PR,#
|
||||||
|
>CMD 9104,PREFIX
|
||||||
|
>CMD 0304,RENAME
|
||||||
|
>CMD 0D04,SAVE
|
||||||
|
>CMD 0104,UNLOCK
|
||||||
|
>CMD 1104,VERIFY
|
||||||
|
>CMD 2147,WRITE
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
* PARAMETER NAME TABLE
|
||||||
|
*--------------------------------
|
||||||
|
PARM.NAMES
|
||||||
|
.AS /ABELSDFRV/
|
||||||
|
NO.PARM.NAMES .EQ *-PARM.NAMES
|
||||||
|
*--------------------------------
|
||||||
|
* BIT MASK FOR PARAMETERS IN PERMISSION BITS
|
||||||
|
*--------------------------------
|
||||||
|
* A B E L S D F R V @
|
||||||
|
PARM.MASKS
|
||||||
|
.HS 80.40.20.10.04.04.02.01.00
|
||||||
|
*--------------------------------
|
||||||
|
* XXXXXXYY where yy+1= # of bytes
|
||||||
|
* xxxxxx= offset from VAL.A
|
||||||
|
* of last byte
|
||||||
|
*--------------------------------
|
||||||
|
.MA PAR
|
||||||
|
.DA #VAL.]1-VAL.A+]2-1*4+]2-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
PARM.VARIABLES
|
||||||
|
>PAR A,2
|
||||||
|
>PAR B,3
|
||||||
|
>PAR E,2
|
||||||
|
>PAR L,2
|
||||||
|
>PAR S,1
|
||||||
|
>PAR D,1
|
||||||
|
>PAR F,2
|
||||||
|
>PAR R,2
|
||||||
|
>PAR V,1
|
||||||
|
*--------------------------------
|
||||||
|
* FILE TYPE CODES
|
||||||
|
*--------------------------------
|
||||||
|
.MA FT
|
||||||
|
.AS -/]1/
|
||||||
|
.HS ]2
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
FILE.TYPES
|
||||||
|
>FT TXT,04
|
||||||
|
>FT BIN,06
|
||||||
|
>FT DIR,0F
|
||||||
|
>FT ADB,19
|
||||||
|
>FT AWP,1A
|
||||||
|
>FT ASP,1B
|
||||||
|
>FT PAS,EF
|
||||||
|
>FT CMD,F0
|
||||||
|
>FT S-C,FA (NORMALLY "INT")
|
||||||
|
>FT IVR,FB
|
||||||
|
>FT BAS,FC
|
||||||
|
>FT VAR,FD
|
||||||
|
>FT REL,FE
|
||||||
|
>FT SYS,FF
|
||||||
|
LAST.FILE.TYPE .EQ *-FILE.TYPES-1
|
||||||
|
*--------------------------------
|
||||||
|
* NAMES OF THE MONTHS
|
||||||
|
*--------------------------------
|
||||||
|
MONTH.NAMES
|
||||||
|
.AS -/JFMAMJJASOND/
|
||||||
|
.AS -/AEAPAUUUECOE/
|
||||||
|
.AS -/NBRRYNLGPTVC/
|
||||||
|
*--------------------------------
|
||||||
|
NO.DATE.MSG
|
||||||
|
.AS -/<NO DATE>/
|
||||||
|
*--------------------------------
|
||||||
|
* MLI ERROR CODES
|
||||||
|
*--------------------------------
|
||||||
|
MLI.ERROR.CODES
|
||||||
|
.HS 282B4041424344454647
|
||||||
|
.HS 48494B4C4D4E505356
|
||||||
|
*--------------------------------
|
||||||
|
* EQUIVALENT BI ERROR CODES
|
||||||
|
*--------------------------------
|
||||||
|
BI.ERROR.CODES
|
||||||
|
.HS 0304100C0C1206068613 (86 IS A TRICK)
|
||||||
|
.HS 09110D05020A140B0C08
|
||||||
|
*--------------------------------
|
||||||
|
SCI.MESSAGES
|
||||||
|
.AC 0 INIT NYBBLE.FLAG
|
||||||
|
.AC 1"ACDEFILNOPRST %"
|
||||||
|
.AC 2"BGHKMUVWXY/():."
|
||||||
|
.AC 3"QZ-4567890123@&"
|
||||||
|
Q.BLOCKS.ABOVE .EQ 0
|
||||||
|
.AC / BLOCKS SHOWN ABOVE:6%/
|
||||||
|
*--------------------------------
|
||||||
|
Q.DIRHDR .EQ 1
|
||||||
|
.AC /TYPE NAME2BLOCKS MODIFIED9CREATED9ENDFILE AUXTYPE%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC /RANGE ERROR%/
|
||||||
|
.AC /NO DEVICE CONNECTED%/
|
||||||
|
.AC /WRITE PROTECTED%/
|
||||||
|
.AC /END OF DATA%/
|
||||||
|
.AC /PATH NOT FOUND%/
|
||||||
|
*--------------------------------
|
||||||
|
Q.BLOCKS .EQ 7
|
||||||
|
.AC / VOLUME BLOCKS USED:8FREE:8TOTAL:5%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC "I/O ERROR%"
|
||||||
|
.AC /DISK FULL%/
|
||||||
|
.AC /FILE LOCKED%/
|
||||||
|
.AC /INVALID PARAMETER%/
|
||||||
|
.AC /NO BUFFERS AVAILABLE%/
|
||||||
|
.AC /FILE TYPE MISMATCH%/
|
||||||
|
.AC /PROGRAM TOO LARGE%/
|
||||||
|
.AC /NOT DIRECT COMMAND%/
|
||||||
|
.AC /SYNTAX ERROR%/
|
||||||
|
.AC /DIRECTORY FULL%/
|
||||||
|
.AC /FILE NOT OPEN%/
|
||||||
|
.AC /DUPLICATE FILE NAME%/
|
||||||
|
.AC /FILE BUSY%/
|
||||||
|
.AC /FILE(S) STILL OPEN%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC "%"
|
||||||
|
*ZZ.MESSAGES .EQ *-MESSAGES
|
||||||
|
*--------------------------------
|
||||||
|
SCI.FIRST.TABLE .EQ *
|
||||||
|
.HS 00
|
||||||
|
.AS -"ACDEFILNOPRST "
|
||||||
|
.HS 8D
|
||||||
|
SCI.SECOND.TABLE .EQ *
|
||||||
|
.HS 00
|
||||||
|
.AS -"BGHKMUVWXY/():."
|
||||||
|
SCI.THIRD.TABLE .EQ *
|
||||||
|
.AS -"JQZ-"
|
||||||
|
.HS 05.06.07.08.09.0A.0B.0C.0D.0E.0F.10 (BLANK COUNTS+1)
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.tables
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
53
SCMASM.30/SCI.S.VARS.txt
Normal file
53
SCMASM.30/SCI.S.VARS.txt
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
ALLOCATED.BUFFER.PAGE .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
FNLEN .BS 1
|
||||||
|
RECORD.LENGTH .BS 2
|
||||||
|
PARM.LENM1 .BS 1
|
||||||
|
PARM.OFFSET .BS 1
|
||||||
|
ACCUM .BS 3
|
||||||
|
OVERFLOW .BS 1
|
||||||
|
COMMAND.ADDR .BS 2
|
||||||
|
BLOCKS .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
MONTH .BS 1
|
||||||
|
DAY .BS 1
|
||||||
|
YEAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
CAT.WIDTH .BS 1
|
||||||
|
ENTRY.LENGTH .BS 1
|
||||||
|
ENTRIES.PER.BLOCK .BS 1
|
||||||
|
FILE.COUNT .BS 2
|
||||||
|
ENTRY.COUNTER .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
CAT.INDEX .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
FILE.REFNUMS .BS 2
|
||||||
|
FILE.BUFFER.PNTRS .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
EXEC.REFNUM .BS 1
|
||||||
|
EXEC.INPUT.CHAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
WRITE.REFNUM .BS 1
|
||||||
|
WRITE.OUTPUT.CHAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
PATHNAME.ONE.BUFFER .BS 1
|
||||||
|
TXTBUF .BS 65
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN FILE NAME BUFFERS
|
||||||
|
* 3 BUFFERS, 32 BYTES EACH
|
||||||
|
* 0 -- # BYTES IN FILE NAME (bits (6-0)
|
||||||
|
* Bit 7 = DIR file READ flag
|
||||||
|
* 1 -- L value lsb
|
||||||
|
* 2 -- L value msb
|
||||||
|
* 3-31 -- file name, backwards
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.FILE.NAME.BUFFERS
|
||||||
|
.BS 32*3
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/sci.s.vars
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
103
SCMASM.30/SCMASM.S.ACDIR.txt
Normal file
103
SCMASM.30/SCMASM.S.ACDIR.txt
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
TABLE1 .EQ $BE00-48
|
||||||
|
TABLE2 .EQ $BE00-32
|
||||||
|
TABLE3 .EQ $BE00-16
|
||||||
|
*--------------------------------
|
||||||
|
DIR.AC
|
||||||
|
JSR GNNB GET NEXT NON-BLANK FOR DELIMITER
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
STA DLIM IN CASE IT IS A DELIMITER
|
||||||
|
EOR #'0'
|
||||||
|
BEQ .9 ...INITIAL STRING
|
||||||
|
CMP #4
|
||||||
|
BCC .10
|
||||||
|
*---GET NEXT CHAR OF STRING------
|
||||||
|
.2 JSR GNC GET NEXT CHAR TO ENCODE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
CMP DLIM
|
||||||
|
BEQ .7 ...END OF STRING
|
||||||
|
*---SEARCH TABLE 1---------------
|
||||||
|
LDY #15
|
||||||
|
.3 CMP TABLE1,Y
|
||||||
|
BEQ .6 ...FOUND IT
|
||||||
|
DEY
|
||||||
|
BNE .3
|
||||||
|
*---SEARCH TABLE 2---------------
|
||||||
|
JSR OUTPUT.NYBBLE.Y
|
||||||
|
LDY #15
|
||||||
|
.4 CMP TABLE2,Y
|
||||||
|
BEQ .6 ...FOUND IT
|
||||||
|
DEY
|
||||||
|
BNE .4
|
||||||
|
*---SEARCH TABLE 3---------------
|
||||||
|
JSR OUTPUT.NYBBLE.Y
|
||||||
|
LDY #15
|
||||||
|
.5 CMP TABLE3,Y
|
||||||
|
BEQ .6 ...FOUND IT
|
||||||
|
DEY
|
||||||
|
BNE .5
|
||||||
|
*---NOT IN ANY TABLE-------------
|
||||||
|
JSR OUTPUT.NYBBLE.Y
|
||||||
|
PHA
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TAY
|
||||||
|
JSR OUTPUT.NYBBLE.Y
|
||||||
|
PLA
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
|
*---OUTPUT TABLE INDEX-----------
|
||||||
|
.6 JSR OUTPUT.NYBBLE.Y
|
||||||
|
*---NEXT CHAR--------------------
|
||||||
|
JMP .2
|
||||||
|
*---END OF STRING----------------
|
||||||
|
.9 STA NYBBLE.FLAG
|
||||||
|
.7 RTS
|
||||||
|
*---ERROR------------------------
|
||||||
|
.8 JMP ERBA
|
||||||
|
*---READ NEW CODING TABLES-------
|
||||||
|
.10 SBC #0 CHANGE TO 0,1,2
|
||||||
|
ASL *16
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
JSR GNC
|
||||||
|
BCS .7 ...NO STRING
|
||||||
|
STA DLIM
|
||||||
|
.11 JSR GNC ...ALLOW LOWER CASE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
CMP DLIM
|
||||||
|
BEQ .7 ...END OF STRING
|
||||||
|
INX
|
||||||
|
CPX #48
|
||||||
|
BCS .8 ...GONE TOO FAR
|
||||||
|
STA TABLE1,X
|
||||||
|
BCC .11 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
OUTPUT.NYBBLE.Y
|
||||||
|
PHA SAVE A-REG
|
||||||
|
TYA
|
||||||
|
LSR NYBBLE.FLAG
|
||||||
|
BCS .1 ...IT WAS = $01
|
||||||
|
ASL ...IT WAS = $00
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA BYTE
|
||||||
|
INC NYBBLE.FLAG
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
.1 ORA BYTE
|
||||||
|
JSR EMIT
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.acdir
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
369
SCMASM.30/SCMASM.S.ASMGEN.txt
Normal file
369
SCMASM.30/SCMASM.S.ASMGEN.txt
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* ASSEMBLER MAIN DRIVER
|
||||||
|
*--------------------------------
|
||||||
|
ASM
|
||||||
|
* LDX #0 X=0 FROM COMMAND DISPATCHER
|
||||||
|
STX PASS SET TO PASS 1
|
||||||
|
STX ERROR.COUNT
|
||||||
|
STX ERROR.COUNT+1
|
||||||
|
* STX MACRO.LEVEL ALREADY DONE IN GNL
|
||||||
|
* STX PARAM.PNTR ALREADY DONE IN GNL
|
||||||
|
* STX PAGE.LENGTH ALREADY DONE IN GNL
|
||||||
|
STX PAGE.NUMBER
|
||||||
|
STX PAGE.NUMBER+1
|
||||||
|
JSR STINIT INITIALIZE SYMBOL TABLE
|
||||||
|
JSR RESTORE IF IN INCLUDE, RESTORE
|
||||||
|
*--------------------------------
|
||||||
|
* PERFORM NEXT PASS OF ASSEMBLY
|
||||||
|
*--------------------------------
|
||||||
|
ASM1 LDA ERROR.COUNT
|
||||||
|
ORA ERROR.COUNT+1
|
||||||
|
BEQ .1
|
||||||
|
JMP ASM.END PRINT # ERRORS AND ABORT ASSEMBLY
|
||||||
|
.1 LDX #1 INIT 2-BYTE VARIABLES
|
||||||
|
.2 LDA PP,X POINT TO BEGINNING OF SOURCE PROGRAM
|
||||||
|
STA SRCP,X
|
||||||
|
STA MACSTK,X
|
||||||
|
LDA #0
|
||||||
|
STA CALL.CNTR,X TOTAL # MACRO CALLS
|
||||||
|
STA CALL.NUM,X CURRENT MACRO CALL #
|
||||||
|
STA ORGN+2,X HIGH 16 OF ORIGIN
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
*---Following = $FF--------------
|
||||||
|
STX DO.STACK SET OUTER LEVEL TRUE (=$FF)
|
||||||
|
STX LF.CONDITIONAL do not list false sets (=$FF)
|
||||||
|
*---Following = $00--------------
|
||||||
|
STA DUMMY.FLAG NOT IN DUMMY SECTION
|
||||||
|
STA PHASE.FLAG NOT IN PHASE
|
||||||
|
STA DO.INDEX SET DO.STACK TO EMPTY
|
||||||
|
STA LF.ALL turn on main listing
|
||||||
|
STA LF.MACRO list macro expansions too
|
||||||
|
STA LF.XTRA.BYTES list all bytes, use extra lines
|
||||||
|
STA TF.FLAG not in ".TF"
|
||||||
|
STA DO.SKIP.CNT not in ".DO"
|
||||||
|
STA FLAG.MA not in ".MA"
|
||||||
|
STA NYBBLE.FLAG .AC odd/even
|
||||||
|
STA ORGN ORIGIN = $0800
|
||||||
|
STA TRGT TARGET = $0800
|
||||||
|
*---Following = $08--------------
|
||||||
|
LDA #$08
|
||||||
|
STA ORGN+1
|
||||||
|
STA TRGT+1
|
||||||
|
JSR ASM.INIT Initialize for particular assembler
|
||||||
|
*--------------------------------
|
||||||
|
* MOVE NEXT LINE INTO WORKING BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
ASM2 LDA $C000 CHECK FOR ABORT WITHOUT
|
||||||
|
CMP #CHR.RETURN CLEARING STROBE
|
||||||
|
BNE .1
|
||||||
|
JMP JMP.SOFT YES, STOP RIGHT NOW
|
||||||
|
.1 LDX #$FF INITIALIZE STACK POINTER
|
||||||
|
TXS
|
||||||
|
INX MAKE X=0
|
||||||
|
STX EMIT.COLUMN
|
||||||
|
STX EXP.UNDEF CLEAR UNDEFINED FLAG
|
||||||
|
JSR SETUP.NEXT.LINE
|
||||||
|
BCC .2 GOT A LINE
|
||||||
|
JMP ENDM NO MORE LINES, ACT LIKE .EN FOUND
|
||||||
|
*---CHECK CURRENT CONDITION------
|
||||||
|
.2 LDA DO.STACK CURRENT LEVEL IN SIGN BIT
|
||||||
|
BMI ASSEMBLE.ONE.LINE TRUE, SO ASSEMBLE
|
||||||
|
*--------------------------------
|
||||||
|
* SKIP TO .FIN OR .ELSE
|
||||||
|
*--------------------------------
|
||||||
|
SKIP.TO.FIN
|
||||||
|
JSR SCAN.TO.OPCODE
|
||||||
|
BCS .3
|
||||||
|
LDX #DIR.QT.DO
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCC .1 NOT .DO
|
||||||
|
INC DO.SKIP.CNT .DO
|
||||||
|
BNE .3 ...ALWAYS
|
||||||
|
.1 LDY DO.SKIP.CNT
|
||||||
|
BNE .2 INSIDE A NESTED .DO, IGNORE .ELSE'S
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCS ASSEMBLE.ONE.LINE FOUND .ELSE
|
||||||
|
.2 LDX #DIR.QT.FI
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCC .3 NOT .FIN
|
||||||
|
LDY DO.SKIP.CNT .FIN, SEE IF NESTED ONE
|
||||||
|
BEQ ASSEMBLE.ONE.LINE NO, ASSEMBLE THIS .FIN
|
||||||
|
DEC DO.SKIP.CNT YES, POP OFF THIS NEST
|
||||||
|
.3 BIT LF.CONDITIONAL LIST CONDITIONAL LINES?
|
||||||
|
BMI ASM2 NO, SKIP IT
|
||||||
|
JSR CRLF.IF.LISTING YES, NEW LINE
|
||||||
|
JMP CMNT AND LIST IT
|
||||||
|
*--------------------------------
|
||||||
|
* ANALYZE SOURCE LINE
|
||||||
|
*--------------------------------
|
||||||
|
ASSEMBLE.ONE.LINE
|
||||||
|
JSR CRLF.IF.LISTING
|
||||||
|
JSR PACK.MACRO.LINE
|
||||||
|
BCS CMNT ...only list if MACRO definition line
|
||||||
|
JSR GNC.UC.START not MACRO line, get first char
|
||||||
|
BCS CMNT ...empty line
|
||||||
|
BEQ .3 ...blank, so no label
|
||||||
|
JSR CHECK.COMMENT.CHAR
|
||||||
|
BEQ CMNT ...comment (* or ;)
|
||||||
|
JSR LABL PROCESS LABEL DEFINITION
|
||||||
|
.3 JSR GNNB Scan to opcode field
|
||||||
|
BCS CMNT ...none, only label on this line
|
||||||
|
JSR CHECK.COMMENT.CHAR might be a comment with no opcode
|
||||||
|
BEQ CMNT ...yes, there is a comment
|
||||||
|
CMP #'> CHECK IF MACRO OPCODE
|
||||||
|
BEQ .4 ...YES
|
||||||
|
CMP #'_ CHECK IF MACRO OPCODE
|
||||||
|
BEQ .4 ...YES
|
||||||
|
CMP #'='
|
||||||
|
BEQ .5 '=' is synonym for .EQ
|
||||||
|
STA SEARCH.KEY FIRST OPCODE CHAR
|
||||||
|
JSR GNC.UC
|
||||||
|
STA SEARCH.KEY+1 2ND OPCODE CHAR
|
||||||
|
JSR GNC.UC
|
||||||
|
STA SEARCH.KEY+2 3RD OPCODE CHAR
|
||||||
|
LDA SEARCH.KEY
|
||||||
|
CMP #'. IS IT A DIRECTIVE?
|
||||||
|
BNE .6 NO, TRY NORMAL OPCODES
|
||||||
|
LDA #OPTBL.DIR
|
||||||
|
LDY /OPTBL.DIR
|
||||||
|
CLC INITIAL SEARCH
|
||||||
|
JSR SEARCH.COMPRESSED.TABLE
|
||||||
|
BCC OPER ...NOT FOUND IN TABLE
|
||||||
|
JSR PERFORM.DIRECTIVE
|
||||||
|
JMP CMNT
|
||||||
|
.4 JMP MACRO.CALL
|
||||||
|
.5 JSR PSEQ "=" is synonym for .EQ
|
||||||
|
JMP CMNT
|
||||||
|
.6 JSR ASM.PARTICULAR
|
||||||
|
*--------------------------------
|
||||||
|
CMNT LDA EXP.UNDEF
|
||||||
|
BPL .1 NO UNDEFINED EXPRESSIONS ON THIS LINE
|
||||||
|
LDA PASS
|
||||||
|
BEQ .1 IF WE GOT THIS FAR, OKAY IN PASS 1
|
||||||
|
JMP UNDF
|
||||||
|
.1 JSR LIST.SOURCE.IF.LISTING
|
||||||
|
JMP ASM2 NEXT LINE
|
||||||
|
*--------------------------------
|
||||||
|
*--------------------------------
|
||||||
|
PERFORM.DIRECTIVE
|
||||||
|
INY POINT AT HIGH BYTE OF ADDRESS
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
PHA
|
||||||
|
DEY
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
PHA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
OPER LDY #QER2 ERROR--BAD OPCODE
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* EMIT ONE BYTE OF OBJECT CODE
|
||||||
|
*
|
||||||
|
* IF IN PASS TWO THEN
|
||||||
|
* ! IF LISTING THEN <LIST>
|
||||||
|
* ! IF IN ".TF" THEN
|
||||||
|
* ! ! <WRITE BYTE ON DISK>
|
||||||
|
* ! ELSE IF NOT IN DUMMY SECTION THEN
|
||||||
|
* ! ! ! IF IN PROTECTED AREA THEN
|
||||||
|
* ! ! ! ! <ABORT ASSEMBLY>
|
||||||
|
* ! ! ! ELSE <STORE BYTE IN TARGET>
|
||||||
|
* INCREMENT ORIGIN AND ORIGIN.SAVE
|
||||||
|
* IF NOT IN DUMMY SECTION THEN INCREMENT TARGET
|
||||||
|
*--------------------------------
|
||||||
|
EMIT.ZERO
|
||||||
|
LDA #0
|
||||||
|
EMIT LDY PASS CHECK WHICH PASS
|
||||||
|
BEQ .5 PASS 1, JUST INCREMENT LOCATION
|
||||||
|
STA OBJ.BYTE SAVE OBJECT BYTE
|
||||||
|
*---LIST THE BYTE----------------
|
||||||
|
JSR P.EMITTED.BYTE
|
||||||
|
*---STORE THE BYTE---------------
|
||||||
|
BIT DUMMY.FLAG No output inside dummy section
|
||||||
|
BMI .6 ...only increment the origin
|
||||||
|
LDA OBJ.BYTE GET OUTPUT BYTE
|
||||||
|
BIT TF.FLAG SEE IF IN ".TF"
|
||||||
|
BMI .4 YES
|
||||||
|
JSR USER.OBJECT.BYTE
|
||||||
|
JMP .5 ...ALWAYS
|
||||||
|
.4 JSR DOUT WRITE ON TARGET FILE
|
||||||
|
*---INCREMENT LOCATION-----------
|
||||||
|
.5 LDA DUMMY.FLAG IF IN DUMMY SECTION,
|
||||||
|
BMI .6 THEN ONLY INCREMENT ORGN
|
||||||
|
>INCD TRGT BUMP TARGET ADDRESS
|
||||||
|
>INCD ORIGIN.SAVE AND ORIGIN OUTSIDE .PH
|
||||||
|
.6 >INCD ORGN BUMP CURRENT ORIGIN
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STORE.OBJECT.BYTE
|
||||||
|
LDA TRGT+1 TARGET PAGE
|
||||||
|
BNE .1 NOT PAGE ZERO
|
||||||
|
LDA TRGT ALLOW $00-$1E
|
||||||
|
CMP #$1F
|
||||||
|
BCC .4 SAFE
|
||||||
|
BCS .3 NOT SAFE
|
||||||
|
*---ALLOW $300-$3CF--------------
|
||||||
|
.1 CMP #$03 IN PAGE 3?
|
||||||
|
BNE .2 NO
|
||||||
|
LDA TRGT BELOW $3D0?
|
||||||
|
CMP #$D0
|
||||||
|
BCC .4 YES, SAFE
|
||||||
|
BCS .3 NO, NOT SAFE
|
||||||
|
.DO AUXMEM
|
||||||
|
*---ALLOW $800-MACSTK------------
|
||||||
|
.2 CMP #$08 BELOW PAGE 8?
|
||||||
|
BCC .3 YES, NOT SAFE
|
||||||
|
LDA TRGT
|
||||||
|
CMP MACSTK
|
||||||
|
LDA TRGT+1
|
||||||
|
SBC MACSTK+1
|
||||||
|
BCC .4 BELOW MACSTK, SAFE
|
||||||
|
.ELSE
|
||||||
|
*---ALLOW $800-MACLBL------------
|
||||||
|
.2 CMP #$08 BELOW PAGE 8?
|
||||||
|
BCC .3 YES, NOT SAFE
|
||||||
|
LDA TRGT NO, COMPARE TO MACLBL
|
||||||
|
CMP MACLBL
|
||||||
|
LDA TRGT+1
|
||||||
|
SBC MACLBL+1
|
||||||
|
BCC .4 BELOW MACLBL, SO SAFE
|
||||||
|
*---ALLOW EOT-MACSTK-------------
|
||||||
|
LDA EOT
|
||||||
|
CMP TRGT
|
||||||
|
LDA EOT+1
|
||||||
|
SBC TRGT+1
|
||||||
|
BCS .3 BELOW EOT, NOT SAFE
|
||||||
|
LDA TRGT
|
||||||
|
CMP MACSTK
|
||||||
|
LDA TRGT+1
|
||||||
|
SBC MACSTK+1
|
||||||
|
BCC .4 BELOW MACSTK, SAFE
|
||||||
|
.FIN
|
||||||
|
*---NOT SAFE, CHECK USER RANGE---
|
||||||
|
.3 LDA TRGT
|
||||||
|
CMP USER.MEM.LO
|
||||||
|
LDA TRGT+1
|
||||||
|
SBC USER.MEM.LO+1
|
||||||
|
BCC .5 DEFINITELY OUT OF BOUNDS
|
||||||
|
LDA USER.MEM.HI
|
||||||
|
CMP TRGT
|
||||||
|
LDA USER.MEM.HI+1
|
||||||
|
SBC TRGT+1
|
||||||
|
BCC .5 DEFINITELY OUT OF BOUNDS
|
||||||
|
.4 LDY #0
|
||||||
|
LDA OBJ.BYTE
|
||||||
|
STA (TRGT),Y
|
||||||
|
RTS
|
||||||
|
.5 LDY #QMEMPRO
|
||||||
|
JMP FIRM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* LIST SOURCE LINE
|
||||||
|
*--------------------------------
|
||||||
|
LIST.SOURCE.IF.LISTING
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
LIST.SOURCE.REGARDLESS
|
||||||
|
JSR P.MARGIN PRINT BLANKS TILL MARGIN
|
||||||
|
LIST.SOURCE.AT.MARGIN
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
LDY MACRO.LEVEL
|
||||||
|
BEQ .2
|
||||||
|
LDA #'>'
|
||||||
|
.1 JSR CHO
|
||||||
|
DEY
|
||||||
|
BNE .1 ...UNTIL Y=0
|
||||||
|
.2 LDA #' ' ...NOW Y=0
|
||||||
|
.3 JSR CHO
|
||||||
|
INY
|
||||||
|
LDA WBUF-1,Y
|
||||||
|
BNE .3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PRINT CRLF IF IN PASS 2 AND IF LISTING IS ON
|
||||||
|
*--------------------------------
|
||||||
|
CRLF.CAUSED.FORM.FEED
|
||||||
|
JSR FORM.FEED
|
||||||
|
CRLF.IF.LISTING
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
CRLF.WITH.PAGING
|
||||||
|
JSR CRLF
|
||||||
|
INC LINE.COUNT
|
||||||
|
LDA PAGE.LENGTH
|
||||||
|
BEQ .1 ...NOT TITLING
|
||||||
|
CMP LINE.COUNT
|
||||||
|
BCC CRLF.CAUSED.FORM.FEED ...END OF PAGE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PROCESS LABEL DEFINITION
|
||||||
|
*--------------------------------
|
||||||
|
LABL JSR PACK PACK AND CHECK SYMBOL
|
||||||
|
BCC ERR.BS BAD SYMBOL
|
||||||
|
JSR STSRCH SEE IF DEFINED
|
||||||
|
BCC ERR.DD YES, DOUBLE DEFINITION
|
||||||
|
JMP STADD ADD TO SYMBOL TABLE
|
||||||
|
*--------------------------------
|
||||||
|
ERR.DD LDY PASS ERROR IN PASS 1
|
||||||
|
BEQ ERR.DBLDF OK IN PASS 2
|
||||||
|
LDY #6 SET FLAG FOR TESTING FWD REFS
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
ORA #$40
|
||||||
|
>SYM STA,STPNTR
|
||||||
|
LDY WBUF LOOK AT COLUMN 1
|
||||||
|
CPY #': IF PRIVATE LABEL...
|
||||||
|
BEQ .2 ...THEN DON'T UPDATE C.M.LABEL
|
||||||
|
LDA STPNTR SAVE POINTER TO THIS MAJOR LABEL
|
||||||
|
STA CURRENT.MAJOR.LABEL
|
||||||
|
LDA STPNTR+1
|
||||||
|
STA CURRENT.MAJOR.LABEL+1
|
||||||
|
.2 RTS
|
||||||
|
ERR.DBLDF
|
||||||
|
LDY #QER4 DOUBLE DEFN
|
||||||
|
.HS 2C SKIP 2 BYTES
|
||||||
|
ERR.BS LDY #QER7 BAD SYMBOL
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* Search Compressed Opcode Table
|
||||||
|
* If carry clear, (Y,A) = address of table
|
||||||
|
* If carry set, continue searching same table
|
||||||
|
*
|
||||||
|
* Return with carry set if found, else carry clear.
|
||||||
|
* (OPTBL.PNTR),Y points at 16-bit value
|
||||||
|
* of entry which matched.
|
||||||
|
*--------------------------------
|
||||||
|
SEARCH.COMPRESSED.TABLE
|
||||||
|
BCS .6 ...Continue searching same table
|
||||||
|
STA OPTBL.PNTR
|
||||||
|
STY OPTBL.PNTR+1
|
||||||
|
*---Try matching 2nd letter------
|
||||||
|
LDY #0
|
||||||
|
.1 LDA (OPTBL.PNTR),Y Possible match
|
||||||
|
ORA #$40 Make it ASCII
|
||||||
|
CMP SEARCH.KEY+1 same as 2nd letter?
|
||||||
|
BEQ .6 ...yes, matched.
|
||||||
|
BNE .3 ...no
|
||||||
|
*---Scan to next 8-bit entry-----
|
||||||
|
.2 INY
|
||||||
|
INY
|
||||||
|
.3 INY
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
BMI .2 ...another 24-bit entry
|
||||||
|
ASL check if beyond our sub-group
|
||||||
|
BPL .1 ...no, valid 2nd letter option
|
||||||
|
.4 CLC ...no match in table, carry clear
|
||||||
|
RTS
|
||||||
|
*---Try matching 3rd letter------
|
||||||
|
.5 INY
|
||||||
|
.6 INY
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
BPL .4 ...no more options, not in table
|
||||||
|
INY point at data
|
||||||
|
EOR #$C0 make like ASCII
|
||||||
|
CMP SEARCH.KEY+2 compare to 3rd letter
|
||||||
|
BNE .5 ...did not match, try another
|
||||||
|
RTS ...found it, return carry set
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.asmgen
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
114
SCMASM.30/SCMASM.S.ASMNL.txt
Normal file
114
SCMASM.30/SCMASM.S.ASMNL.txt
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* SET UP NEXT LINE TO ASSEMBLE
|
||||||
|
*--------------------------------
|
||||||
|
SETUP.NEXT.LINE
|
||||||
|
.1 BIT INFLAG
|
||||||
|
BVS .5 ...INSIDE .INBx
|
||||||
|
LDA SRCP CHECK IF AT END
|
||||||
|
CMP HI.MEM TOP OF SOURCE CODE
|
||||||
|
LDA SRCP+1
|
||||||
|
SBC HI.MEM+1
|
||||||
|
BCS .7 RETURN WITH CARRY SET
|
||||||
|
.5 LDA MACRO.LEVEL IN SKELETON OR BODY?
|
||||||
|
BEQ .2 BODY
|
||||||
|
LDY #0 SEE IF END OF SKELETON
|
||||||
|
>SYM LDA,SRCP
|
||||||
|
BNE .3 NO, STILL IN SKELETON
|
||||||
|
LDA (MACSTK),Y POP SKELETON OFF MACRO STACK
|
||||||
|
STA CALL.NUM+1
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
STA CALL.NUM
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
STA LF.ALL Real value of listing option
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
STA SRCP+1
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
STA SRCP
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y (HIGH BYTE)
|
||||||
|
PHA
|
||||||
|
INY
|
||||||
|
LDA (MACSTK),Y (LOW BYTE)
|
||||||
|
STA MACSTK
|
||||||
|
PLA
|
||||||
|
STA MACSTK+1
|
||||||
|
DEC MACRO.LEVEL
|
||||||
|
JMP .1
|
||||||
|
*--------------------------------
|
||||||
|
.2 JSR GET.LINE.NUMBER BODY
|
||||||
|
.3 LDX #0
|
||||||
|
.4 JSR GET.NEXT.SOURCE.CHAR
|
||||||
|
BEQ .6 END OF LINE
|
||||||
|
STA WBUF,X PUT INTO WORKING BUFFER
|
||||||
|
INX
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
.6 STA WBUF,X PUT ZERO ON END
|
||||||
|
CLC RETURN WITH CARRY CLEAR
|
||||||
|
.7 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT CHARACTER FROM SOURCE LINE
|
||||||
|
* (IF INSIDE A MACRO SKELETON, EXPAND PARAMETERS)
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.SOURCE.CHAR
|
||||||
|
STX MACRO.SAVEX MUST PRESERVE X-REGISTER
|
||||||
|
LDY PARAM.PNTR
|
||||||
|
BNE .1 PRESENTLY EXPANDING A PARAMETER
|
||||||
|
LDA MACRO.LEVEL IN A SKELETON?
|
||||||
|
BNE .2 YES
|
||||||
|
JMP NTKN NO
|
||||||
|
*--------------------------------
|
||||||
|
.1 INC PARAM.PNTR
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
BNE .8 ...NORMAL CHAR
|
||||||
|
STA PARAM.PNTR ...END OF PARAMETER
|
||||||
|
.2 JSR NTKN
|
||||||
|
BEQ .8 END OF LINE
|
||||||
|
CMP #$7F PARAMETER?
|
||||||
|
BNE .8 NO, NORMAL CHAR
|
||||||
|
*---MACRO PARAMETER--------------
|
||||||
|
JSR NTKN YES, GET PARAM #
|
||||||
|
LDY #6
|
||||||
|
CMP #'# ]# RETURNS NUMBER OF PARAMETERS (0-9)
|
||||||
|
BEQ .5 ...FOUND ]#
|
||||||
|
SEC
|
||||||
|
SBC #'1' CHANGE "1"..."9" TO 0...8
|
||||||
|
BEQ .4 ...]1
|
||||||
|
TAX ...]2 THRU ]9
|
||||||
|
.3 INY
|
||||||
|
LDA (MACSTK),Y SKIP OVER A PARAMETER
|
||||||
|
BNE .3
|
||||||
|
DEX
|
||||||
|
BNE .3
|
||||||
|
.4 INY
|
||||||
|
STY PARAM.PNTR
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
*---NUMBER OF PARAMETERS---------
|
||||||
|
.5 CLC
|
||||||
|
LDA (MACSTK),Y
|
||||||
|
SBC MACSTK
|
||||||
|
TAY
|
||||||
|
LDX #10
|
||||||
|
.6 LDA (MACSTK),Y
|
||||||
|
BNE .7
|
||||||
|
DEX
|
||||||
|
DEY
|
||||||
|
CPY #7
|
||||||
|
BCS .6
|
||||||
|
LDX #0
|
||||||
|
.7 TXA
|
||||||
|
ORA #$30
|
||||||
|
*--------------------------------
|
||||||
|
.8 LDX MACRO.SAVEX RESTORE X-REG
|
||||||
|
CMP #0 SET "EQ" STATUS IF END OF LINE
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.asmnl
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
241
SCMASM.30/SCMASM.S.DATA.txt
Normal file
241
SCMASM.30/SCMASM.S.DATA.txt
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* PAGE ZERO VARIABLES
|
||||||
|
*--------------------------------
|
||||||
|
* $00 THRU $1F RESERVED FOR USER
|
||||||
|
*---Apple Monitor, mostly--------
|
||||||
|
MON.WIDTH .EQ $21
|
||||||
|
CH80 .EQ $57B
|
||||||
|
CH .EQ $24
|
||||||
|
CV .EQ $25
|
||||||
|
BASL .EQ $28
|
||||||
|
YSAVE .EQ $2F
|
||||||
|
ESCAPE.FLAG .EQ $30
|
||||||
|
MON.MODE .EQ $31
|
||||||
|
MON.INVFLG .EQ $32
|
||||||
|
MON.YSAV .EQ $34
|
||||||
|
HOOK.OUT .EQ $36,37
|
||||||
|
HOOK.IN .EQ $38,39
|
||||||
|
A0L .EQ $3A
|
||||||
|
A0H .EQ $3B
|
||||||
|
A1L .EQ $3C
|
||||||
|
A1H .EQ $3D
|
||||||
|
A2L .EQ $3E
|
||||||
|
A2H .EQ $3F
|
||||||
|
*--------------------------------
|
||||||
|
* ProDOS USES $40-4F
|
||||||
|
*--------------------------------
|
||||||
|
A3L .EQ $40
|
||||||
|
A3H .EQ $41
|
||||||
|
A4L .EQ $42
|
||||||
|
A4H .EQ $43
|
||||||
|
*--------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR $50
|
||||||
|
*--------------------------------
|
||||||
|
*
|
||||||
|
* Following needed at all times
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
SCREEN.WIDTH .BS 1
|
||||||
|
INFLAG .BS 1
|
||||||
|
LO.MEM .BS 2 START OF SYMBOL TABLE
|
||||||
|
EOT .BS 2 END OF SYMBOL TABLE
|
||||||
|
PP .BS 2 START OF SOURCE PROGRAM
|
||||||
|
HI.MEM .BS 2 END OF SOURCE CODE
|
||||||
|
*--------------------------------
|
||||||
|
PAGE.NUMBER .BS 2
|
||||||
|
PAGE.LENGTH .BS 1 =0 means no titles
|
||||||
|
LINE.COUNT .BS 1
|
||||||
|
DGTCNT .BS 1
|
||||||
|
INCREMENT.VALUE .BS 2 FOR AUTO-LINE-NUMBERING (INIT=10)
|
||||||
|
CURLNO .BS 2 NUMBER OF LAST-SUBMITTED LINE (INIT=990)
|
||||||
|
PASS .BS 1 PASS NUMBER (0=PASS 1, 1=PASS 2)
|
||||||
|
CHAR.PNTR .BS 1
|
||||||
|
CURRENT.CHAR .BS 1 CURRENT CHARACTER FROM 'GNC'
|
||||||
|
CURRENT.MAJOR.LABEL .BS 2 PNTR TO CURRENT MAJOR LABEL
|
||||||
|
EXP.NEW .BS 1 NEW EXPRESSION FLAG
|
||||||
|
STPNTR .BS 2 SYMBOL TABLE WORKING POINTER
|
||||||
|
TPTR .BS 2 SYMBOL TABLE TEMP POINTER
|
||||||
|
BASE.INDEX .BS 1 used in EXPR
|
||||||
|
LC.MODE .BS 1
|
||||||
|
EXP.VALUE .BS 4
|
||||||
|
EXP.VALUE64 .BS 4
|
||||||
|
SYM.VALUE .BS 4
|
||||||
|
EXP.UNDEF .BS 1 UNDEFINED TERM FLAG
|
||||||
|
EMIT.COLUMN .BS 1 KEEPS TRACK OF COLUMN FOR EMIT
|
||||||
|
ORGN .BS 4
|
||||||
|
RPTCHR .BS 1 (NML, NTKN)
|
||||||
|
RPTCNT .BS 1 (NML, NTKN)
|
||||||
|
PNTR .BS 2 SEARCH STRING PNTR
|
||||||
|
INSAVE .BS 8
|
||||||
|
*--------------------------------
|
||||||
|
CALL.NUM .BS 2 CURRENT MACRO CALL NUMBER
|
||||||
|
MACLBL .BS 2
|
||||||
|
CONV.CTRL .BS 1 CONTROL FLAG INSIDE CONVERT.LINE.NUMBER
|
||||||
|
MACRO.LEVEL .BS 1
|
||||||
|
PARAM.PNTR .BS 1
|
||||||
|
PARAM.CNT .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
PROMPT.FLAG .BS 1 NULL, "H", OR "I"
|
||||||
|
HIDE.HIMEM .BS 2 SAVES HIMEM DURING "HIDE"
|
||||||
|
CURRENT.LINE.NUMBER .BS 2
|
||||||
|
LF.ALL .BS 1 =0 TO LIST, <0 TO NOT LIST
|
||||||
|
LF.MACRO .BS 1 =0 TO LIST MACRO EXPANSIONS
|
||||||
|
FLAG.SPEED .BS 1
|
||||||
|
DLIM .BS 1 ".AS" DELIMITER, also ASM
|
||||||
|
SRCP .BS 2 POINTER TO CURRENT SOURCE LINE
|
||||||
|
ENDP .BS 2 POINTER TO END OF LINE RANGE
|
||||||
|
EXP.FWDREF .BS 1
|
||||||
|
AUTOLN.FLAG .BS 1 +=MANUAL, -=AUTO LINE NUMBERS
|
||||||
|
LINE.START .BS 2
|
||||||
|
LINE.END .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
ZP.COMMON .EQ *
|
||||||
|
*--------------------------------
|
||||||
|
*
|
||||||
|
* Variables used only during SPECIFIC commands
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
BLKSIZ .BS 1 used in MOVE.TEXT.UP and MOVE.TEXT.DOWN
|
||||||
|
MOVE.DISTANCE .BS 2 used in NML, COPY, and MOVE.TEXT.UP
|
||||||
|
AUTO.FLAG .BS 1 +=VERIFY, -=AUTO REPLACE
|
||||||
|
CHANGE.CNT .BS 1 # OF REPLACEMENTS IN THIS LINE
|
||||||
|
ED.FCOL .BS 1
|
||||||
|
ED.FKEY .BS 1
|
||||||
|
ED.PNTR .BS 1
|
||||||
|
ED.BEGLIN .BS 1
|
||||||
|
TEXT.OPTIONS .BS 1 used in TEXT command only
|
||||||
|
REPLACE.LENGTH .BS 1
|
||||||
|
SOURCE.LENGTH .BS 1
|
||||||
|
WBUF.LENGTH .BS 1
|
||||||
|
KEY.PNTR .BS 2 USED IN FIND, REPLACE
|
||||||
|
BUF.PNTR .BS 2 USED IN FIND, REPLACE
|
||||||
|
KEY.ADDR .BS 2 SEARCH KEY ADDRESS
|
||||||
|
MATCH.END .BS 1
|
||||||
|
LC.FLAG .BS 1 +=AS IS, -=ACCEPT BOTH CASES
|
||||||
|
*--------------------------------
|
||||||
|
.OR ZP.COMMON
|
||||||
|
*--------------------------------
|
||||||
|
*
|
||||||
|
* Variables used only during Assembly
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
SEARCH.KEY .BS 3 USED BY OPCODE SEARCH ROUTINE
|
||||||
|
OPTBL.PNTR .BS 2 USED BY OPCODE SEARCH ROUTINE
|
||||||
|
DO.INDEX .BS 1 DO level: =0 if empty, else 1-63
|
||||||
|
DO.STACK .BS 8 64 bits, =1 if true
|
||||||
|
DO.SKIP.CNT .BS 1 COUNTS .DO NESTS WHEN SKIPPING
|
||||||
|
NYBBLE.FLAG .BS 1 .AC DIRECTIVE
|
||||||
|
BYTE .BS 1 .AC DIRECTIVE
|
||||||
|
PHASE.FLAG .BS 1 +=NORMAL, -=IN PHASE
|
||||||
|
DUMMY.FLAG .BS 1 +=NORMAL, -=IN DUMMY SECTION
|
||||||
|
TF.FLAG .BS 1
|
||||||
|
TRGT .BS 2 TARGET ADDRESS
|
||||||
|
MACSTK .BS 2 MACRO STACK POINTER
|
||||||
|
ERROR.COUNT .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
OBJ.BYTE .BS 1
|
||||||
|
ADDR.LENGTH .BS 1
|
||||||
|
LF.CONDITIONAL .BS 1 =0 TO LIST FALSE SETS
|
||||||
|
LF.XTRA.BYTES .BS 1 =0 TO LIST XTRA BYTES ON XTRA LINES
|
||||||
|
EMIT.MARGIN .BS 1 COLUMN FOR LINE NUMBER TO START IN
|
||||||
|
MACRO.SAVEX .BS 1
|
||||||
|
DUMMY.ORGN .BS 4
|
||||||
|
ORIGIN.SAVE .BS 4
|
||||||
|
FLAG.MA .BS 1
|
||||||
|
CALL.CNTR .BS 2 TOTAL # OF MACRO CALLS
|
||||||
|
*--------------------------------
|
||||||
|
*---ONLY IN .BS DIRECTIVE--------
|
||||||
|
BS.COUNT .BS 2 # BYTES TO RESERVE
|
||||||
|
*---ONLY IN .AS & .AT DIRECTIVES
|
||||||
|
AS.HIBIT .BS 1 BIT 7 VALUE FOR .AS/.AT
|
||||||
|
AT.HIBIT .BS 1 BIT 7 TOGGLE FOR LAST BYTE BIT 7
|
||||||
|
*--------------------------------
|
||||||
|
*
|
||||||
|
*---$EB reserved for ECHO TEXTALKER software---
|
||||||
|
*
|
||||||
|
*---$F0-FF reserved for ASM.PARTICULAR---
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
.ED
|
||||||
|
*--------------------------------
|
||||||
|
* CHARACTER CODES
|
||||||
|
*--------------------------------
|
||||||
|
CHR.CTRL.I .EQ $89
|
||||||
|
CHR.RETURN .EQ $8D
|
||||||
|
CHR.BLANK .EQ $A0
|
||||||
|
CHR.DOLLAR .EQ $A4
|
||||||
|
CHR.STAR .EQ $AA
|
||||||
|
CHR.DASH .EQ $AD
|
||||||
|
CHR.PERIOD .EQ $2E
|
||||||
|
CHR.BSLASH .EQ $DC
|
||||||
|
*--------------------------------
|
||||||
|
* MISCELLANEOUS SYMBOLS
|
||||||
|
*--------------------------------
|
||||||
|
SYMBOL .EQ $0100 SYMBOL PACK AREA
|
||||||
|
HSHTBL .EQ $0130 HASH POINTER TABLE
|
||||||
|
KBUF .EQ $0170 - $01BF KEY STRING
|
||||||
|
WBUF .EQ $0200 WORKING BUFFER
|
||||||
|
WBUF.MAX .EQ 248 AND ITS LENGTH
|
||||||
|
PATHNAME .EQ $2CE (LAST 50 BYTES)
|
||||||
|
*--------------------------------
|
||||||
|
* ROM-BASED ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
MON.PRNTAX .EQ $F941
|
||||||
|
MON.PRBL2 .EQ $F94A PRINT (X) BLANKS
|
||||||
|
MON.INIT .EQ $FB2F TEXT MODE, FULL WINDOW
|
||||||
|
MON.ADVANC .EQ $FBF4
|
||||||
|
MON.BS .EQ $FC10
|
||||||
|
MON.UP .EQ $FC1A
|
||||||
|
MON.VTAB .EQ $FC22
|
||||||
|
MON.CLREOP .EQ $FC42
|
||||||
|
MON.HOME .EQ $FC58
|
||||||
|
MON.LF .EQ $FC66
|
||||||
|
MON.CLREOL .EQ $FC9C
|
||||||
|
MON.DELAY .EQ $FCA8
|
||||||
|
MON.RDKEY .EQ $FD0C READ NEXT CHAR
|
||||||
|
MON.READCH .EQ $FD18
|
||||||
|
MON.PHEX .EQ $FDDA PRINT BYTE IN HEX
|
||||||
|
MON.COUT .EQ $FDED
|
||||||
|
MON.BL1 .EQ $FE00
|
||||||
|
MON.SETKBD .EQ $FE89
|
||||||
|
MON.SETVID .EQ $FE93
|
||||||
|
MON.OUTPORT .EQ $FE95 SET NEW PR#N OUTPUT
|
||||||
|
MON.BELL .EQ $FF3A RING THE BELL
|
||||||
|
MON.RTS .EQ $FF58 ONLY AN "RTS"
|
||||||
|
MNTR .EQ $FF69 CALL-151 ENTRY INTO MONITOR
|
||||||
|
MON.GETNUM .EQ $FFA7
|
||||||
|
MON.TOSUB .EQ $FFBE
|
||||||
|
MON.CHRTBL .EQ $FFCC MONITOR COMMAND CHAR TABLE
|
||||||
|
*--------------------------------
|
||||||
|
MON.RESET .EQ $3F2 THRU 3F4
|
||||||
|
*--------------------------------
|
||||||
|
.MA INCD
|
||||||
|
INC ]1
|
||||||
|
BNE :1
|
||||||
|
INC ]1+1
|
||||||
|
:1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
RDMAIN .EQ $C002
|
||||||
|
RDAUX .EQ $C003
|
||||||
|
RDROM .EQ $C082
|
||||||
|
RDRAM .EQ $C083
|
||||||
|
WRMAIN .EQ $C004
|
||||||
|
WRAUX .EQ $C005
|
||||||
|
AUX.CODE .EQ $DF00
|
||||||
|
*--------------------------------
|
||||||
|
.MA SYM
|
||||||
|
.DO AUXMEM
|
||||||
|
JSR ]1.]2
|
||||||
|
.ELSE
|
||||||
|
]1 (]2),Y
|
||||||
|
.FIN
|
||||||
|
.EM
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.data
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
308
SCMASM.30/SCMASM.S.DIR1.txt
Normal file
308
SCMASM.30/SCMASM.S.DIR1.txt
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* DIRECTIVES
|
||||||
|
*--------------------------------
|
||||||
|
* .DUMMY -- START DUMMY SECTION
|
||||||
|
*--------------------------------
|
||||||
|
D.DUMMY
|
||||||
|
LDA DUMMY.FLAG DO NOTHING IF ALREADY IN DUMMY
|
||||||
|
BMI .2
|
||||||
|
LDX #3
|
||||||
|
.1 LDA ORGN,X
|
||||||
|
STA DUMMY.ORGN,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
STX DUMMY.FLAG SET FLAG NEGATIVE
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* .ED -- END DUMMY SECTION
|
||||||
|
*--------------------------------
|
||||||
|
D.END.DUMMY
|
||||||
|
LDA DUMMY.FLAG
|
||||||
|
BPL .2 DO NOTHING IF NOT IN .DUMMY
|
||||||
|
LDX #3
|
||||||
|
STX DUMMY.FLAG SET FLAG POSITIVE
|
||||||
|
.1 LDA DUMMY.ORGN,X
|
||||||
|
STA ORGN,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
.2 RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
*---------------------------------
|
||||||
|
* .PH -- START PHASE
|
||||||
|
*--------------------------------
|
||||||
|
D.PHASE
|
||||||
|
JSR D.END.PHASE
|
||||||
|
JSR EXPR.DEFINED GET PHASE ORIGIN
|
||||||
|
LDX #3
|
||||||
|
.1 LDA ORGN,X SAVE ORIGIN
|
||||||
|
STA ORIGIN.SAVE,X
|
||||||
|
LDA EXP.VALUE,X
|
||||||
|
STA ORGN,X SET PHASE ORIGIN
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
SEC SET FLAG TO $80
|
||||||
|
ROR PHASE.FLAG
|
||||||
|
RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
*--------------------------------
|
||||||
|
* .EP -- END PHASE
|
||||||
|
*--------------------------------
|
||||||
|
D.END.PHASE
|
||||||
|
ASL PHASE.FLAG TEST AND CLEAR FLAG
|
||||||
|
BCC .2 IT WAS ALREADY CLEAR
|
||||||
|
LDX #3
|
||||||
|
.1 LDA ORIGIN.SAVE,X
|
||||||
|
STA ORGN,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
.2 RTS
|
||||||
|
*---------------------------------
|
||||||
|
* .OR -- SET ORIGIN
|
||||||
|
*---------------------------------
|
||||||
|
PSOR JSR EXPR.DEFINED GET ORIGIN VALUE
|
||||||
|
LDX #3
|
||||||
|
.1 LDA EXP.VALUE,X STORE IT IN
|
||||||
|
STA ORGN,X LOCATION
|
||||||
|
DEX COUNTER
|
||||||
|
BPL .1
|
||||||
|
LDA DUMMY.FLAG IF IN DUMMY SECTION, DON'T
|
||||||
|
BMI RTS.1 ...IN DUMMY
|
||||||
|
NEW.TARGET
|
||||||
|
JSR TFEND END .TF IF DOING ONE
|
||||||
|
LDA EXP.VALUE STORE VALUE IN
|
||||||
|
STA TRGT TARGET ADDRESS
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
STA TRGT+1
|
||||||
|
RTS.1 RTS
|
||||||
|
*---------------------------------
|
||||||
|
* .TA -- SET TARGET ADDRESS
|
||||||
|
*---------------------------------
|
||||||
|
PSTA JSR EXPR.DEFINED GET EXPR VALUE
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE+3
|
||||||
|
BEQ NEW.TARGET
|
||||||
|
JMP RAER
|
||||||
|
*--------------------------------
|
||||||
|
* .AT -- ASCII STRING WITH LAST BYTE FLAGGED
|
||||||
|
* .AS -- ASCII STRING WITH ALL BYTES SAME
|
||||||
|
* .AZ -- Same as .AS, but with 00 terminator byte.
|
||||||
|
*--------------------------------
|
||||||
|
PSAZ JSR PSAS
|
||||||
|
JMP EMIT.ZERO
|
||||||
|
PSAT LDA #$80 LAST BYTE HAS OPPOSITE BIT 7
|
||||||
|
.HS 2C ...SKIP OVER 2 BYTES
|
||||||
|
PSAS LDA #0 ALL BYTES GET SAME BIT 7
|
||||||
|
STA AT.HIBIT
|
||||||
|
JSR GNNB Scan to next non-blank
|
||||||
|
BCS ERBA2 END OF LINE
|
||||||
|
DEC CHAR.PNTR BACK UP
|
||||||
|
.1 JSR TRY.HEX.STRING
|
||||||
|
BEQ .5 ...END OF LINE
|
||||||
|
LDY #0
|
||||||
|
STY AS.HIBIT ...assume hibit is 0
|
||||||
|
CMP #'-' 1ST NON-BLANK A MINUS?
|
||||||
|
BNE .15 ...no, hibit is 0
|
||||||
|
ROR AS.HIBIT ...yes, hibit is 1
|
||||||
|
JSR GNC.UC
|
||||||
|
.15 STA DLIM SAVE DELIMITER
|
||||||
|
JSR GNC.UC GET NEXT CHAR
|
||||||
|
BCS ERBA2 END OF LINE IS BAD NEWS
|
||||||
|
CMP DLIM CHK IF DELIMITER
|
||||||
|
BEQ .4 YES, NO STRING IN BETWEEN
|
||||||
|
.2 JSR GNC.UC GET NEXT CHAR
|
||||||
|
BCS ERBA2 END OF LINE IS BAD NEWS
|
||||||
|
CMP DLIM CHK IF DELIMITER
|
||||||
|
BEQ .3 YES, FINISH UP AND RETURN
|
||||||
|
LDA WBUF-2,Y ...NO, GET PREVIOUS CHAR
|
||||||
|
ORA AS.HIBIT MERGE WITH TOP BIT
|
||||||
|
JSR EMIT
|
||||||
|
JMP .2 GO FOR ANOTHER ONE
|
||||||
|
.3 LDA WBUF-2,Y GET PREVIOUS CHAR
|
||||||
|
ORA AS.HIBIT MERGE WITH SELECTED BIT 7
|
||||||
|
EOR AT.HIBIT TOGGLE BIT 7 IF IN .AT
|
||||||
|
JSR EMIT EMIT THE BYTE
|
||||||
|
.4 JSR GNC CHECK IF MORE IN LIST
|
||||||
|
BEQ .5
|
||||||
|
CMP #','
|
||||||
|
BEQ .1
|
||||||
|
.5 RTS
|
||||||
|
*---------------------------------
|
||||||
|
* .HS -- HEX STRING
|
||||||
|
*---------------------------------
|
||||||
|
PSHS JSR GNNB GET NEXT NON-BLANK CHAR
|
||||||
|
BCS ERBA2 END OF LINE
|
||||||
|
JSR BACKUP.CHAR.PNTR
|
||||||
|
JSR TRY.HEX.STRING
|
||||||
|
BNE ERBA2 ...ERROR, BAD ADDRESS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
THX1 JSR HEX.DIGIT GET NEXT HEX DIGIT
|
||||||
|
BCC ERBA2 ERROR, ODD DIGITS
|
||||||
|
LDA SYM.VALUE GET CONVERTED VALUE
|
||||||
|
JSR EMIT
|
||||||
|
TRY.HEX.STRING
|
||||||
|
.1 JSR HEX.DIGIT
|
||||||
|
BCS THX1
|
||||||
|
LDA CURRENT.CHAR
|
||||||
|
BEQ .2 ...END OF LINE
|
||||||
|
CMP #',' IF COMMA, GO GET MORE BYTES
|
||||||
|
BEQ .1 ...OKAY
|
||||||
|
CMP #' ' IF BLANK, VALID END OF STRING
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
ERBA2 JMP ERBA ERROR: BAD ADDRESS
|
||||||
|
GT255ERR LDY #QER8 VALUE > 255 ERROR
|
||||||
|
.HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
|
||||||
|
NOLBLERR LDY #QER1 "NO LABEL"
|
||||||
|
.HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
|
||||||
|
UNDF LDY #QER6 "UNDEF"
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*---------------------------------
|
||||||
|
* .EQ -- EQUATE
|
||||||
|
*---------------------------------
|
||||||
|
PSEQ LDY WBUF SEE IF ANY LABEL
|
||||||
|
CPY #$20
|
||||||
|
BEQ NOLBLERR NO LABEL ON LINE
|
||||||
|
LDA STPNTR SAVE STPNTR WHILE CALLING EXPR
|
||||||
|
PHA
|
||||||
|
LDA STPNTR+1
|
||||||
|
PHA
|
||||||
|
JSR EXPR.DEFINED GET VALUE
|
||||||
|
PLA RESTORE STPNTR
|
||||||
|
STA STPNTR+1
|
||||||
|
PLA
|
||||||
|
STA STPNTR
|
||||||
|
LDA PASS WHICH PASS
|
||||||
|
BNE .5 PASS 2, PRINT VALUE
|
||||||
|
*---PASS 1: DEFINE VALUE--------
|
||||||
|
LDY WBUF COLUMN 1 AGAIN
|
||||||
|
CPY #': PRIVATE LABEL?
|
||||||
|
BCC .4 ...LOCAL LABEL
|
||||||
|
BEQ .2 ...PRIVATE LABEL
|
||||||
|
*---NORMAL LABEL-----------------
|
||||||
|
LDY #2
|
||||||
|
.1 LDA EXP.VALUE-2,Y REDEFINE SYMBOL
|
||||||
|
>SYM STA,PNTR
|
||||||
|
INY
|
||||||
|
CPY #6
|
||||||
|
BCC .1
|
||||||
|
RTS
|
||||||
|
*---PRIVATE LABEL----------------
|
||||||
|
.2 LDY #0
|
||||||
|
.3 LDA EXP.VALUE,Y
|
||||||
|
>SYM STA,STPNTR
|
||||||
|
INY
|
||||||
|
CPY #4
|
||||||
|
BCC .3
|
||||||
|
RTS
|
||||||
|
*---LOCAL LABEL------------------
|
||||||
|
.4 LDY #2 COMPUTE LOCAL OFFSET
|
||||||
|
SEC
|
||||||
|
LDA EXP.VALUE
|
||||||
|
>SYM SBC,STPNTR
|
||||||
|
DEY
|
||||||
|
>SYM STA,PNTR
|
||||||
|
LDY #3
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
>SYM SBC,STPNTR
|
||||||
|
BNE GT255ERR VALUE > 255
|
||||||
|
RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
*---PASS 2: PRINT VALUE---------
|
||||||
|
.5 JMP P.EXP.VALUE.DASH
|
||||||
|
*---------------------------------
|
||||||
|
* .DA -- DATA VALUE (8- OR 16-BITS)
|
||||||
|
*---------------------------------
|
||||||
|
PSDA LDA #0 UNDEF FLAG FOR LINE
|
||||||
|
PHA
|
||||||
|
.1 JSR GNNB GET NEXT NON-BLANK CHAR
|
||||||
|
BCS ERBA2 END OF LINE
|
||||||
|
STA DLIM
|
||||||
|
*---Could be $$dstringd----------
|
||||||
|
CMP #'$' $$dstringd value?
|
||||||
|
BNE .2 ...NO
|
||||||
|
LDA WBUF,Y Look for second $
|
||||||
|
CMP #'$'
|
||||||
|
BNE .25 ...NO, MUST BE SIMPLE HEX WORD
|
||||||
|
JSR GNC SKIP OVER SECOND '$'
|
||||||
|
JSR PSAS GET dstringd
|
||||||
|
JMP .5
|
||||||
|
*---Look for size char-----------
|
||||||
|
.2 LDY #1 ASSUME 1-BYTE DATA
|
||||||
|
CMP #'#'
|
||||||
|
BEQ .3
|
||||||
|
CMP #'/'
|
||||||
|
BEQ .3
|
||||||
|
LDY #3 ASSUME 3-BYTE DATA
|
||||||
|
CMP #'<' 24-BIT SIGNAL
|
||||||
|
BEQ .3 ...3-BYTE DATA
|
||||||
|
INY ASSUME 4-BYTE DATA
|
||||||
|
CMP #'>' 32-BIT SIGNAL
|
||||||
|
BEQ .3
|
||||||
|
*---Size is two bytes------------
|
||||||
|
.25 JSR BACKUP.CHAR.PNTR
|
||||||
|
LDY #2 2-BYTE DATA
|
||||||
|
*---Get expression, emit value---
|
||||||
|
.3 STY ADDR.LENGTH
|
||||||
|
JSR EXPR CRACK EXPRESSION
|
||||||
|
LDY DLIM If preceded by /, shift over
|
||||||
|
CPY #'/'
|
||||||
|
BNE .4 ...NOT /
|
||||||
|
JSR EXP.OVER.256
|
||||||
|
.4 JSR EMIT.VALUE ACCORDING TO ADDR.LENGTH
|
||||||
|
*---Update UNDEF flag------------
|
||||||
|
PLA .DA'S UNDEF FLAG
|
||||||
|
ORA EXP.UNDEF
|
||||||
|
PHA
|
||||||
|
*---Next item in list------------
|
||||||
|
.5 JSR GNC.UC LOOK FOR ANOTHER ITEM
|
||||||
|
CMP #', COMMA?
|
||||||
|
BEQ .1 YES, GET ANOTHER ONE
|
||||||
|
PLA GET .DA'S UNDEF FLAG
|
||||||
|
STA EXP.UNDEF MERGED VALUE
|
||||||
|
RTS LIST LINE OR REPORT UNDEF ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* DO/ELSE/FIN
|
||||||
|
*--------------------------------
|
||||||
|
PSDO JSR EXPR.DEFINED GET VALUE
|
||||||
|
LDX DO.INDEX 0 IF EMPTY, ELSE 1-63
|
||||||
|
INX
|
||||||
|
CPX #64
|
||||||
|
BCC .2
|
||||||
|
LDY #QERDO2 ".DO NEST TOO DEEP"
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
.2 LDA EXP.VALUE
|
||||||
|
ORA EXP.VALUE+1 TEST FOR ZERO
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE+3
|
||||||
|
BEQ .3 ZERO, FALSE
|
||||||
|
SEC NONZERO, TRUE
|
||||||
|
.3 STX DO.INDEX
|
||||||
|
LDX #-8
|
||||||
|
.4 ROR DO.STACK+8,X
|
||||||
|
INX
|
||||||
|
BNE .4
|
||||||
|
RTS LIST THE LINE
|
||||||
|
*--------------------------------
|
||||||
|
PSEL LDX DO.INDEX
|
||||||
|
BEQ ERR.DO ERROR, NOT BTWN .DO AND .FIN
|
||||||
|
LDA DO.STACK
|
||||||
|
EOR #$80 TOGGLE CURRENT LOGIC LEVEL
|
||||||
|
STA DO.STACK
|
||||||
|
RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
*--------------------------------
|
||||||
|
ERR.DO LDY #QERDO "MISSING .DO"
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
PSFI LDX DO.INDEX
|
||||||
|
BEQ ERR.DO ERROR, NOT AFTER .DO
|
||||||
|
DEC DO.INDEX POP THIS DO
|
||||||
|
LDX #7
|
||||||
|
.1 ROL DO.STACK,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.dir1
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
279
SCMASM.30/SCMASM.S.DIR2.txt
Normal file
279
SCMASM.30/SCMASM.S.DIR2.txt
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* .IN -- INCLUDE A SOURCE FILE
|
||||||
|
*--------------------------------
|
||||||
|
PSIN LDA INFLAG SEE IF NESTED .IN
|
||||||
|
BNE .4 ...YES, ERROR
|
||||||
|
SEC
|
||||||
|
ROR INFLAG TURN ON FLAG (=$80)
|
||||||
|
LDA #'I PUT "I" IN PROMPT MESSAGE
|
||||||
|
STA PROMPT.FLAG
|
||||||
|
JSR LIST.LINE.BOTH.PASSES
|
||||||
|
*---SAVE CURRENT, SET UP NEW-----
|
||||||
|
LDX #1
|
||||||
|
.1 LDA HI.MEM,X SAVE CURRENT SOURCE POINTERS
|
||||||
|
STA INSAVE,X
|
||||||
|
LDA SRCP,X
|
||||||
|
STA INSAVE+2,X
|
||||||
|
LDA PP,X
|
||||||
|
STA HI.MEM,X
|
||||||
|
.DO AUXMEM
|
||||||
|
.ELSE
|
||||||
|
LDA LO.MEM,X MAKE DOS PROTECT THE SYMBOL TABLE
|
||||||
|
STA INSAVE+6,X DURING THE LOAD
|
||||||
|
LDA EOT,X
|
||||||
|
STA LO.MEM,X
|
||||||
|
.FIN
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
*---CHECK FOR .INBx--------------
|
||||||
|
JSR GNC.UC
|
||||||
|
CMP #'B'
|
||||||
|
BNE .2 ...NOT .INBx
|
||||||
|
JSR GNC.UC GET # OF BLOCKS
|
||||||
|
EOR #'0'
|
||||||
|
BEQ .12 ...NOT 1-9, USE 1
|
||||||
|
CMP #10
|
||||||
|
BCC .14 ...1-9
|
||||||
|
.12 LDA #1 USE 1 BLOCK
|
||||||
|
.14 ORA #$C0
|
||||||
|
STA INFLAG
|
||||||
|
*---LOAD THE FILE----------------
|
||||||
|
.2 JSR SAVE.PATHNAME
|
||||||
|
LDY #PQ.LOD LOAD COMMAND
|
||||||
|
JSR ISSUE.DOS.COMMAND
|
||||||
|
*---ASSEMBLE INCLUDED STUFF------
|
||||||
|
LDX #1
|
||||||
|
.3 LDA PP,X MOVE SRCP TO BEGINNING OF INCLUDED FILE
|
||||||
|
STA SRCP,X
|
||||||
|
STA MACSTK,X
|
||||||
|
.DO AUXMEM
|
||||||
|
.ELSE
|
||||||
|
LDA INSAVE+6,X RESTORE LO.MEM
|
||||||
|
STA LO.MEM,X
|
||||||
|
.FIN
|
||||||
|
LDA SCI.IOB.RW+6,X # BYTES ACTUALLY RECEIVED
|
||||||
|
STA INSAVE+4,X
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
LDA SCI.IOB.RW+1 REFNUM OF INB FILE
|
||||||
|
STA INSAVE+6
|
||||||
|
JMP ASM2 CONTINUE ASSEMBLY
|
||||||
|
*---NO NESTING ALLOWED-----------
|
||||||
|
.4 LDY #QNIN "NEST .IN"
|
||||||
|
JMP FIRM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* .EN -- END OF SOURCE PROGRAM
|
||||||
|
*--------------------------------
|
||||||
|
PSEN JSR LIST.SOURCE.IF.LISTING
|
||||||
|
ENDM
|
||||||
|
BIT INFLAG IN A ".IN"?
|
||||||
|
BPL .1 NO
|
||||||
|
BVC .3 ...NOT IN .INBx
|
||||||
|
LDA INSAVE+6 .INBx REFNUM
|
||||||
|
STA SCI.IOB.CLOSE+1
|
||||||
|
LDA #$CC Close the .INclude file
|
||||||
|
JSR SCI.MLI
|
||||||
|
.3 JSR RESTORE YES, BACK TO ROOT
|
||||||
|
JMP ASM2 CONTINUE ASSEMBLY
|
||||||
|
*---END OF ROOT FILE-------------
|
||||||
|
.1 JSR TFEND END .TF IF DOING ONE
|
||||||
|
LDA PASS WHICH PASS?
|
||||||
|
BNE .2 ...END OF PASS 2
|
||||||
|
INC PASS END OF PASS 1
|
||||||
|
JMP ASM1
|
||||||
|
.2 BIT LF.ALL Are we listing?
|
||||||
|
BMI ASM.END ...no, we are finished
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
LDY #QST "SYMBOL TABLE"
|
||||||
|
JSR QT.OUT
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
JSR STPRNT PRINT THE SYMBOLS
|
||||||
|
*--------------------------------
|
||||||
|
ASM.END
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
LDA ERROR.COUNT
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
LDA ERROR.COUNT+1
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
LDY #QERRCNT
|
||||||
|
JSR QT.OUT
|
||||||
|
JMP SOFT END OF ASSEMBLY
|
||||||
|
*--------------------------------
|
||||||
|
* RESTORE IF INSIDE AN INCLUDE
|
||||||
|
*--------------------------------
|
||||||
|
RESTORE
|
||||||
|
LDA INFLAG
|
||||||
|
BEQ .1 RETURN
|
||||||
|
LDX #0 CLEAR PROMPT.FLAG
|
||||||
|
STX PROMPT.FLAG
|
||||||
|
STX INFLAG CLEAR INFLAG
|
||||||
|
INX X=1
|
||||||
|
.2 LDA HI.MEM,X
|
||||||
|
STA PP,X
|
||||||
|
STA MACSTK,X
|
||||||
|
LDA INSAVE,X
|
||||||
|
STA HI.MEM,X
|
||||||
|
LDA INSAVE+2,X
|
||||||
|
STA SRCP,X
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SET UP TITLE LINE
|
||||||
|
*--------------------------------
|
||||||
|
PSTI LDA PASS
|
||||||
|
BEQ PGXIT DO NOTHING IN PASS ONE
|
||||||
|
JSR EXPR.DEFINED GET PAGE LENGTH
|
||||||
|
LDA EXP.VALUE USE MOD 256
|
||||||
|
STA PAGE.LENGTH NON-ZERO PAGE LENGTH MEANS TITLING IS ON
|
||||||
|
LDX #0 POINT AT TITLE BUFFER
|
||||||
|
JSR GNC
|
||||||
|
CMP #',
|
||||||
|
BNE .2 NO TITLE
|
||||||
|
.1 JSR GNC
|
||||||
|
BCS .2 END OF TITLE
|
||||||
|
STA KBUF,X
|
||||||
|
INX
|
||||||
|
CPX #70 MAX TITLE SIZE
|
||||||
|
BCC .1
|
||||||
|
.2 LDA #0 TERMINATE TITLE
|
||||||
|
STA KBUF,X
|
||||||
|
*---FALL INTO PSPG CODE----------
|
||||||
|
*--------------------------------
|
||||||
|
* PAGE EJECT
|
||||||
|
*--------------------------------
|
||||||
|
PSPG JSR FORM.FEED
|
||||||
|
PGXIT JMP ASM2
|
||||||
|
*--------------------------------
|
||||||
|
FORM.FEED
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
LDA #$0C FORM FEED CHAR
|
||||||
|
JSR CHO
|
||||||
|
>INCD PAGE.NUMBER
|
||||||
|
LDA PAGE.LENGTH
|
||||||
|
CMP #3 PAGE LENGTHS LESS THAN 3 CANNOT BE TITLED
|
||||||
|
BCC .1 EXIT, NOT TITLING NOW
|
||||||
|
LDX #0
|
||||||
|
STX LINE.COUNT
|
||||||
|
.3 LDA KBUF,X PRINT TITLE
|
||||||
|
BEQ .4 END OF TITLE
|
||||||
|
JSR CHO
|
||||||
|
INX
|
||||||
|
BNE .3 ...ALWAYS
|
||||||
|
.4 LDY #PAGEQT " PAGE "
|
||||||
|
JSR QT.OUT
|
||||||
|
LDA CURRENT.LINE.NUMBER SAVE LINE #
|
||||||
|
PHA
|
||||||
|
LDA CURRENT.LINE.NUMBER+1
|
||||||
|
PHA
|
||||||
|
LDA PAGE.NUMBER PRINT PAGE #
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
LDA PAGE.NUMBER+1
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
PLA RESTORE LINE #
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
PLA
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
.1 RTS RETURN
|
||||||
|
*--------------------------------
|
||||||
|
* .BS -- BLOCK STORAGE
|
||||||
|
*--------------------------------
|
||||||
|
PSBS JSR EXPR.DEFINED GET # OF BYTES
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
BNE RAER VALUE >32767
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
BMI RAER VALUE >32767
|
||||||
|
STA BS.COUNT+1
|
||||||
|
LDA EXP.VALUE
|
||||||
|
STA BS.COUNT SAVE COUNT
|
||||||
|
JSR P.ORIGIN PRINT ADDRESS
|
||||||
|
JSR GNC GET NEXT CHAR
|
||||||
|
CMP #', COMMA?
|
||||||
|
BNE .1 NO, NO VALUE PRESENT
|
||||||
|
JSR EXPR GET FILL VALUE
|
||||||
|
BPL .2 BRANCH IF GOOD EXPRESSION
|
||||||
|
.1 JSR ZERO.EXP.VALUE USE ZERO FOR FILL VALUE
|
||||||
|
.2 SEC
|
||||||
|
ROR LF.ALL TURN OFF LISTING
|
||||||
|
.3 LDA BS.COUNT GET COUNT
|
||||||
|
BNE .4 STILL MORE BYTES
|
||||||
|
DEC BS.COUNT+1
|
||||||
|
BMI .5 ...ALL THRU
|
||||||
|
.4 DEC BS.COUNT COUNT DOWN
|
||||||
|
LDA EXP.VALUE GET FILL VALUE
|
||||||
|
JSR EMIT AND EMIT IT
|
||||||
|
JMP .3
|
||||||
|
|
||||||
|
.5 ASL LF.ALL RESTORE LISTING
|
||||||
|
RTS
|
||||||
|
|
||||||
|
*--------------------------------
|
||||||
|
RAER LDY #QER3 ERROR -- OUT OF RANGE
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
|
||||||
|
*--------------------------------
|
||||||
|
* LISTING CONTROL
|
||||||
|
* .LIST ON/OFF/MON/MOFF/CON/COFF,...
|
||||||
|
*--------------------------------
|
||||||
|
PSLI LDY #LI.INDEX-2
|
||||||
|
JSR SET.FLAGS
|
||||||
|
JMP ASM2 DON'T LIST LINE
|
||||||
|
*--------------------------------
|
||||||
|
* SWITCH FLAGS ON OR OFF
|
||||||
|
*--------------------------------
|
||||||
|
SET.FLAGS
|
||||||
|
STY YSAVE
|
||||||
|
.1 LDY YSAVE
|
||||||
|
.2 INY Find letter in table
|
||||||
|
INY
|
||||||
|
LDA FLAG.TABLE,Y
|
||||||
|
BEQ .7 ...end of table, get next letter
|
||||||
|
CMP CURRENT.CHAR
|
||||||
|
BNE .2 ...try next entry in table
|
||||||
|
*---Found letter in table--------
|
||||||
|
LDX FLAG.TABLE+1,Y
|
||||||
|
.3 EOR #'N 'N' means ON
|
||||||
|
BEQ .5 ...set flag to $00
|
||||||
|
EOR #'F^'N 'F' means OFF
|
||||||
|
BEQ .4 ...set flag to $FF
|
||||||
|
EOR #',^'F comma here is an error
|
||||||
|
BEQ .9 ...oops!
|
||||||
|
JSR GNC.UC get next char from user
|
||||||
|
BNE .3 ...might be N, F, or comma
|
||||||
|
RTS ...blank or end of line
|
||||||
|
*---Turn flag ON or OFF----------
|
||||||
|
.4 LDA #$FF signal OFF with $FF
|
||||||
|
.5 STA 0,X store $00 or $FF in flag
|
||||||
|
*---Scan to a comma or eol-------
|
||||||
|
.6 JSR GNC GET NEXT CHAR
|
||||||
|
BEQ .8 ...blank or end of line
|
||||||
|
CMP #','
|
||||||
|
BNE .6 ...not comma yet
|
||||||
|
*---Get next char from user------
|
||||||
|
.7 JSR GNC.UC
|
||||||
|
BCC .1 ...not end of line yet
|
||||||
|
.8 RTS RETURN TO CALLER
|
||||||
|
.9 JMP ERBA
|
||||||
|
*--------------------------------
|
||||||
|
FLAG.TABLE
|
||||||
|
LI.INDEX .EQ *-FLAG.TABLE
|
||||||
|
.DA #'N',#LF.ALL
|
||||||
|
.DA #'F',#LF.ALL
|
||||||
|
.DA #'M',#LF.MACRO
|
||||||
|
.DA #'C',#LF.CONDITIONAL
|
||||||
|
.DA #'X',#LF.XTRA.BYTES
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.dir2
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
231
SCMASM.30/SCMASM.S.DISK.txt
Normal file
231
SCMASM.30/SCMASM.S.DISK.txt
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
SCI.TBLADR .EQ $AA00 Address of Command Table
|
||||||
|
SCI.LINBUF .EQ $BC80
|
||||||
|
SCI.STARTUP .EQ $BE00
|
||||||
|
SCI.COMMAND .EQ $BE03
|
||||||
|
SCI.ERROR .EQ $BE09
|
||||||
|
SCI.SLOT .EQ $BE3C
|
||||||
|
SCI.DRIVE .EQ $BE3D
|
||||||
|
SCI.STATE .EQ $BE42 0=immediate, else deferred
|
||||||
|
SCI.MLI .EQ $BE70 Call MLI, (A)=operation
|
||||||
|
SCI.RTS .EQ $BE9E
|
||||||
|
SCI.IOB.GETSET .EQ $BEB4 Get/Set File Info IOB
|
||||||
|
SCI.IOB.MISC .EQ $BEC6 Misc functions IOB
|
||||||
|
SCI.IOB.OPEN .EQ $BECB Open IOB
|
||||||
|
SCI.IOB.RW .EQ $BED5 Read/Write IOB
|
||||||
|
SCI.IOB.CLOSE .EQ $BEDD Close IOB
|
||||||
|
SCI.BUFFER.PAGES .EQ $BEF2,3,4 Buf1, Buf2, Exec
|
||||||
|
SCI.HIMEM.PAGE .EQ $BEFB
|
||||||
|
*--------------------------------
|
||||||
|
* LIST SOURCE CODE ON TEXT FILE
|
||||||
|
*--------------------------------
|
||||||
|
* TEXT.OPTIONS:
|
||||||
|
* TEXT <FILENAME> NO LINE NUMBERS
|
||||||
|
* TEXT#<FILENAME> WITH LINE NUMBERS
|
||||||
|
* TEXT%<FILENAME> WITH TAB.CHAR
|
||||||
|
*--------------------------------
|
||||||
|
TEXT LDX #0 00=NO LINE NUMBERS
|
||||||
|
STX TEXT.OPTIONS
|
||||||
|
JSR GNNB GET NEXT NON-BLANK CHAR
|
||||||
|
CMP #'# TEXT # MEANS WRITE LINE NUMBERS
|
||||||
|
BEQ .5 USE LINE NUMBERS
|
||||||
|
CMP #'% TEXT % MEANS WRITE CONTROL-I
|
||||||
|
BNE .6 NEITHER, WRITE TEXT ONLY
|
||||||
|
LDA TAB.CHAR
|
||||||
|
STA TEXT.OPTIONS
|
||||||
|
BNE .7 ...ALWAYS
|
||||||
|
.5 INC TEXT.OPTIONS
|
||||||
|
BNE .7 ...ALWAYS
|
||||||
|
.6 JSR BACKUP.CHAR.PNTR
|
||||||
|
.7 LDA #1 INTO "DEFERRED" STATE
|
||||||
|
STA SCI.STATE
|
||||||
|
JSR SAVE.PATHNAME
|
||||||
|
LDY #PQ.OPN
|
||||||
|
JSR ISSUE.DOS.COMMAND
|
||||||
|
LDY #PQ.WRT
|
||||||
|
JSR ISSUE.DOS.COMMAND
|
||||||
|
JSR SETUP.TEXT.POINTERS (PP --> SRCP, HIMEM --> ENDP)
|
||||||
|
.1 JSR CMP.SRCP.ENDP END OF RANGE YET?
|
||||||
|
BCS .4 ...YES
|
||||||
|
JSR GET.LINE.NUMBER
|
||||||
|
LDA TEXT.OPTIONS
|
||||||
|
BEQ .3 NO LINE #
|
||||||
|
BMI .2 TAB.CHAR
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
LDA #$20 SPACE AFTER LINE #
|
||||||
|
.2 JSR CHO
|
||||||
|
.3 JSR NTKN
|
||||||
|
BNE .2
|
||||||
|
JSR CRLF
|
||||||
|
JMP .1
|
||||||
|
.4 LDA #0 TRUNCATE REST OF FILE
|
||||||
|
JSR CHO
|
||||||
|
JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* .TF DIRECTIVE
|
||||||
|
*--------------------------------
|
||||||
|
* END EXISTING .TF IF ANY
|
||||||
|
* SET .TF FLAG ON
|
||||||
|
*
|
||||||
|
* PASS 1: THAT'S ALL
|
||||||
|
*
|
||||||
|
* PASS 2: OPEN THE FILE, WITH T=BIN
|
||||||
|
* SET MARK=EOF=0
|
||||||
|
* SET STARTING ADDRESS IN FILE-INFO
|
||||||
|
* WRITE START ADDRESS AND LENGTH
|
||||||
|
*--------------------------------
|
||||||
|
PSTF JSR TFEND CLOSE EXISTING TF IF ANY
|
||||||
|
SEC
|
||||||
|
ROR TF.FLAG SET FLAG ON
|
||||||
|
JSR LIST.LINE.BOTH.PASSES
|
||||||
|
LDA PASS WHICH PASS?
|
||||||
|
BEQ .9 ...PASS 1, EXIT NOW
|
||||||
|
JSR SAVE.PATHNAME
|
||||||
|
LDY #PQ.OPN
|
||||||
|
JSR ISSUE.DOS.COMMAND
|
||||||
|
*---Empty the file now-----------
|
||||||
|
LDA #0
|
||||||
|
STA SCI.IOB.MISC+2
|
||||||
|
STA SCI.IOB.MISC+3
|
||||||
|
STA SCI.IOB.MISC+4
|
||||||
|
LDA SCI.IOB.OPEN+5 REFNUM FOR TARGET FILE
|
||||||
|
STA TF.PRM TARGET FILE REF. NUM.
|
||||||
|
STA SCI.IOB.MISC+1
|
||||||
|
LDA #$CE SET MARK
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS JMP.PRODOS.ERR ...ERROR
|
||||||
|
LDA #$D0 SET EOF
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS JMP.PRODOS.ERR ...ERROR
|
||||||
|
*---Get current file info--------
|
||||||
|
LDA #10
|
||||||
|
STA SCI.IOB.GETSET
|
||||||
|
LDA #$C4 GET FILE INFO
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS JMP.PRODOS.ERR ...ERROR
|
||||||
|
*---Set proper file info---------
|
||||||
|
LDA #7 change IOB for set.file.info
|
||||||
|
STA SCI.IOB.GETSET
|
||||||
|
LDA SCI.IOB.GETSET+4 current file type
|
||||||
|
CMP #$04 is it type TXT?
|
||||||
|
BEQ .9 ...yes, make no changes
|
||||||
|
LDX #$2000 if type is SYS ($FF), force A=$2000
|
||||||
|
LDY /$2000
|
||||||
|
CMP #$FF is it type SYS?
|
||||||
|
BEQ .3 ...yes
|
||||||
|
LDX ORGN all other types, A=origin
|
||||||
|
LDY ORGN+1
|
||||||
|
.3 STX SCI.IOB.GETSET+5 new AuxType
|
||||||
|
STY SCI.IOB.GETSET+6
|
||||||
|
LDA #$C3 SET FILE INFO
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS JMP.PRODOS.ERR ...ERROR
|
||||||
|
.9 JMP ASM2 ...CONTINUE ASSEMBLY
|
||||||
|
*--------------------------------
|
||||||
|
JMP.PRODOS.ERR JMP PRODOS.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* OUTPUT (A) TO ALREADY OPENED DISK FILE
|
||||||
|
*--------------------------------
|
||||||
|
DOUT BIT DUMMY.FLAG
|
||||||
|
BMI .3 No output inside DUMMY section
|
||||||
|
STA TF.BUF Save in buffer outside zero-page
|
||||||
|
STX TF.SVX
|
||||||
|
LDX #4 copy parms to SCI parmblock
|
||||||
|
.1 LDA TF.PRM,X
|
||||||
|
STA SCI.IOB.RW+1,X
|
||||||
|
DEX
|
||||||
|
BPL .1 ...until all copied
|
||||||
|
LDA #$CB Write command code
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS JMP.PRODOS.ERR
|
||||||
|
LDX TF.SVX
|
||||||
|
LDA OBJ.BYTE
|
||||||
|
.3 RTS
|
||||||
|
*
|
||||||
|
TF.SVX .BS 1
|
||||||
|
TF.BUF .BS 1
|
||||||
|
TF.PRM .DA #*-*,TF.BUF,1
|
||||||
|
*--------------------------------
|
||||||
|
* TFEND - FINISH OFF A .TF SECTION
|
||||||
|
* CALLED FROM: .TF, .TA, .OR, .EN PROCESSORS
|
||||||
|
*
|
||||||
|
* IF NOT IN .TF NOW, RETURN IMMEDIATELY
|
||||||
|
* CLEAR .TF FLAG
|
||||||
|
* PASS 1 - THAT'S ALL TO DO
|
||||||
|
* PASS 2 - CLOSE FILE
|
||||||
|
*--------------------------------
|
||||||
|
TFEND ASL TF.FLAG TEST AND CLEAR FLAG SIMULTANEOUSLY
|
||||||
|
BCC .1 ...TF NOT ACTIVE, DO NOTHING
|
||||||
|
LDA PASS
|
||||||
|
BNE CLOSE.FILES ...PASS 2
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.FILES
|
||||||
|
LDY #PQ.CLS
|
||||||
|
.HS 2C
|
||||||
|
FP LDY #PQ.FP
|
||||||
|
LDA #0
|
||||||
|
STA PATHNAME
|
||||||
|
*--------------------------------
|
||||||
|
* ISSUE DOS COMMAND WITH FILE NAME
|
||||||
|
* (Y)=QUOTE OFFSET FOR COMMAND
|
||||||
|
*
|
||||||
|
* SAVES AND RESTORES CHARACTER POINTER
|
||||||
|
* SO THAT FILE NAME CAN BE USED AGAIN.
|
||||||
|
*--------------------------------
|
||||||
|
ISSUE.DOS.COMMAND
|
||||||
|
LDX #$7F SAVE WBUF (0-127)
|
||||||
|
.1 LDA WBUF,X
|
||||||
|
STA SCI.LINBUF,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
.2 INX COPY PATHNAME INTO WBUF (5...)
|
||||||
|
LDA PATHNAME,X
|
||||||
|
STA WBUF+5,X
|
||||||
|
BNE .2
|
||||||
|
TAX X=0
|
||||||
|
.3 INX COPY COMMAND INTO WBUF (0...)
|
||||||
|
INY
|
||||||
|
LDA PQTS-1,Y
|
||||||
|
STA WBUF-1,X
|
||||||
|
BPL .3
|
||||||
|
STX SCI.STATE ALLOW DEFERRED COMMANDS
|
||||||
|
JSR PASS.CMD.TO.PRODOS
|
||||||
|
LDX #$7F RESTORE WBUF (0-127)
|
||||||
|
.4 LDA SCI.LINBUF,X
|
||||||
|
STA WBUF,X
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SAVE.PATHNAME
|
||||||
|
LDX #0
|
||||||
|
.1 CPX #49
|
||||||
|
BCS .2
|
||||||
|
JSR GNNB
|
||||||
|
BCC .3
|
||||||
|
.2 LDA #0
|
||||||
|
.3 STA PATHNAME,X
|
||||||
|
INX
|
||||||
|
BCC .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
PQTS .EQ *
|
||||||
|
PQ.CLS .EQ *-PQTS
|
||||||
|
.AT /CLOSE/
|
||||||
|
PQ.OPN .EQ *-PQTS
|
||||||
|
.AT /OPEN /
|
||||||
|
PQ.WRT .EQ *-PQTS
|
||||||
|
.AT /WRITE/
|
||||||
|
PQ.LOD .EQ *-PQTS
|
||||||
|
.AT /LOAD /
|
||||||
|
PQ.FP .EQ *-PQTS
|
||||||
|
.AS /-BASIC.SYSTEM/
|
||||||
|
.HS 00FF
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.disk
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
509
SCMASM.30/SCMASM.S.EDIT..txt
Normal file
509
SCMASM.30/SCMASM.S.EDIT..txt
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* SOFT INITIALIZATION
|
||||||
|
*--------------------------------
|
||||||
|
SOFT LDA /$1000 START SYMBOL TABLE AT $1000
|
||||||
|
SYMBOL.BASE .EQ *-1
|
||||||
|
STA LO.MEM+1
|
||||||
|
LDA #0
|
||||||
|
STA LO.MEM
|
||||||
|
STA AUTOLN.FLAG TURN OFF AUTOMATIC LINE NUMBERS
|
||||||
|
JSR IO.WARM INIT SCREEN, CONNECT DOS
|
||||||
|
JSR CLOSE.FILES
|
||||||
|
*--------------------------------
|
||||||
|
FAST CLC SET TO FAST LISTING SPEED
|
||||||
|
.HS 24 (SKIP OVER SEC)
|
||||||
|
SLOW SEC SET TO SLOW LISTING SPEED
|
||||||
|
ROR FLAG.SPEED SET/CLEAR SIGN BIT
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT LINE
|
||||||
|
*--------------------------------
|
||||||
|
GNL
|
||||||
|
LDX #$FF INIT STACK
|
||||||
|
TXS
|
||||||
|
STX PASS PASS=-1 IF NOT ASSEMBLING
|
||||||
|
INX MAKE X=0
|
||||||
|
STX SCI.STATE GET INTO "IMMEDIATE" STATE
|
||||||
|
STX RPTCNT CLEAR REPEAT COUNT
|
||||||
|
STX MACRO.LEVEL
|
||||||
|
STX PARAM.PNTR
|
||||||
|
STX CHAR.PNTR
|
||||||
|
STX PAGE.LENGTH TURN OFF TITLING
|
||||||
|
JSR READ.LINE
|
||||||
|
JSR GNC.UC.START GET FIRST CHAR OF LINE
|
||||||
|
BEQ GNL EMPTY LINE OR 1ST CHAR IS BLANK
|
||||||
|
JSR CHECK.LETTER
|
||||||
|
BCC .1 NOT A LETTER
|
||||||
|
JSR SEARCH.COMMAND.TABLE
|
||||||
|
JMP GNL
|
||||||
|
*---Test for single char cmds----
|
||||||
|
.1 LDY #CHARS.FOR.COMMANDS
|
||||||
|
JSR SEARCH.CHAR.TABLES
|
||||||
|
JMP GNL
|
||||||
|
*---" LINE, ECHO ALL CHARS-------
|
||||||
|
ECHO1 JSR CHO SEND CHARACTER
|
||||||
|
ECHO.LINE
|
||||||
|
JSR GNC GET NEXT CHAR
|
||||||
|
BCC ECHO1 NOT END YET
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SYNTAX ERROR
|
||||||
|
*--------------------------------
|
||||||
|
SYNX LDY #QSYNX
|
||||||
|
JMP HARD.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* NUMBERED LINE
|
||||||
|
*--------------------------------
|
||||||
|
NML JSR GNC.START GET FIRST CHAR
|
||||||
|
JSR DECN CONVERT LINE NUMBER
|
||||||
|
LDA DGTCNT MUST BE 1 TO 5 DIGITS
|
||||||
|
BEQ SYNX
|
||||||
|
LDA SYM.VALUE+2
|
||||||
|
ORA SYM.VALUE+3
|
||||||
|
BNE SYNX > 65535
|
||||||
|
*---Compact the numbered line----
|
||||||
|
DEY Backup to previous character
|
||||||
|
JSR COMPACT.LINE
|
||||||
|
*--------------------------------
|
||||||
|
LDX #1 COPY IN BINARY LINE #
|
||||||
|
.51 LDA SYM.VALUE,X
|
||||||
|
STA CURLNO,X SAVE HERE TOO, FOR AUTO-NUMBER
|
||||||
|
STA WBUF+1,X
|
||||||
|
DEX
|
||||||
|
BPL .51
|
||||||
|
*--------------------------------
|
||||||
|
* FIND LINE, OR PLACE WHERE IT SHOULD GO
|
||||||
|
* LINE.START --> BEGINNING OF THIS LINE
|
||||||
|
* LINE.END --> BEGINNING OF NEXT LINE
|
||||||
|
*--------------------------------
|
||||||
|
LDX #SYM.VALUE POINT AT LINE NUMBER
|
||||||
|
JSR SERTXT FIND IT IF THERE
|
||||||
|
SEC GET LENGTH OF HOLE
|
||||||
|
LDA LINE.END WILL ALWAYS BE LESS THAN 256
|
||||||
|
SBC LINE.START
|
||||||
|
SEC SUBTRACT LENGTH OF NEW LINE
|
||||||
|
SBC WBUF LINE SIZE
|
||||||
|
BEQ .11 SAME SIZE EXACTLY
|
||||||
|
STA MOVE.DISTANCE
|
||||||
|
LDA #0
|
||||||
|
SBC #0
|
||||||
|
STA MOVE.DISTANCE+1
|
||||||
|
BCC .6 NEW LINE LONGER THAN HOLE
|
||||||
|
*--------------------------------
|
||||||
|
* NEW LINE SHORTER THAN HOLE
|
||||||
|
*--------------------------------
|
||||||
|
CLC COMPUTE TARGET TO MOVE UP TO
|
||||||
|
LDA LINE.START
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA A4L
|
||||||
|
LDA LINE.START+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA A4H
|
||||||
|
JSR MOVE.TEXT.UP
|
||||||
|
JMP .10 NOW HOLE IS RIGHT SIZE
|
||||||
|
*--------------------------------
|
||||||
|
* ENLARGE HOLE TO MAKE ROOM
|
||||||
|
*--------------------------------
|
||||||
|
.6 CLC (MOVE.DISTANCE) = -<#BYTES TO EXPAND>
|
||||||
|
LDA PP COMPUTE TARGET ADDRESS
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA A4L
|
||||||
|
LDA PP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA A4H
|
||||||
|
LDA A4L BE SURE THERE IS ROOM
|
||||||
|
CMP LO.MEM
|
||||||
|
LDA A4H
|
||||||
|
SBC LO.MEM+1
|
||||||
|
BCC MFER NO ROOM!
|
||||||
|
JSR MOVE.TEXT.DOWN
|
||||||
|
*---Adjust SRCP if needed--------
|
||||||
|
.10 LDA SRCP If hole is above (SRCP),
|
||||||
|
CMP LINE.END then need to add MOVE.DISTANCE
|
||||||
|
LDA SRCP+1
|
||||||
|
SBC LINE.END+1
|
||||||
|
BCS .11
|
||||||
|
LDA SRCP
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA SRCP
|
||||||
|
LDA SRCP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA SRCP+1
|
||||||
|
*--------------------------------
|
||||||
|
* COPY NEW LINE INTO THE HOLE
|
||||||
|
*--------------------------------
|
||||||
|
.11 LDX WBUF LINE SIZE
|
||||||
|
BEQ .14 NO NEW LINE TO COPY
|
||||||
|
LDY #0
|
||||||
|
.12 LDA LINE.END BACK UP POINTER TO END OF HOLE
|
||||||
|
BNE .13
|
||||||
|
DEC LINE.END+1
|
||||||
|
.13 DEC LINE.END
|
||||||
|
DEX
|
||||||
|
LDA WBUF,X
|
||||||
|
STA (LINE.END),Y
|
||||||
|
TXA
|
||||||
|
BNE .12
|
||||||
|
.14 RTS
|
||||||
|
*--------------------------------
|
||||||
|
MFER LDY #QMEMFL MEM FULL ERROR
|
||||||
|
JMP HARD.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
COMPACT.LINE
|
||||||
|
LDX #4 Start storing at WBUF+3
|
||||||
|
LDA #-1 Prime RPT pump
|
||||||
|
STA RPTCNT
|
||||||
|
.1 STA RPTCHR
|
||||||
|
.2 INY advance input pointer
|
||||||
|
INC RPTCNT (first time makes it = 0)
|
||||||
|
LDA WBUF,Y get next char
|
||||||
|
AND #$7F be sure its low ascii
|
||||||
|
CMP RPTCHR save as previous char?
|
||||||
|
BEQ .2 ...yes, just count it
|
||||||
|
PHA save new character
|
||||||
|
*--------------------------------
|
||||||
|
LDA RPTCNT
|
||||||
|
BEQ .3
|
||||||
|
JSR PROCESS.REPEAT.COUNT
|
||||||
|
*--------------------------------
|
||||||
|
.3 PLA get new character
|
||||||
|
BNE .1 ...not 00 terminator
|
||||||
|
STA WBUF-1,X store terminator
|
||||||
|
CPX #5 If only line number, make length 00
|
||||||
|
BCS .4
|
||||||
|
LDX #0
|
||||||
|
.4 STX WBUF
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
PROCESS.REPEAT.COUNT
|
||||||
|
LDA RPTCHR
|
||||||
|
CMP #' '
|
||||||
|
BEQ .5 ...compress blanks in special way
|
||||||
|
LDA RPTCNT
|
||||||
|
CMP COMPRESSION.LIMIT
|
||||||
|
BCS .2 ...enough to compress to 3 bytes
|
||||||
|
.1 LDA RPTCHR spit out uncompressed chars
|
||||||
|
STA WBUF-1,X
|
||||||
|
INX
|
||||||
|
DEC RPTCNT
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*---Compress $C0 cnt char--------
|
||||||
|
.2 STA WBUF,X store count
|
||||||
|
LDA #$C0 Compression token
|
||||||
|
STA WBUF-1,X
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
LDA RPTCHR repeated char
|
||||||
|
.3 STA WBUF-1,X
|
||||||
|
INX
|
||||||
|
LDA #0
|
||||||
|
STA RPTCNT
|
||||||
|
RTS
|
||||||
|
*---Compress blanks--------------
|
||||||
|
.4 SBC #$3F Maximum blanks in one token
|
||||||
|
STA RPTCNT
|
||||||
|
LDA #$BF $3F blanks
|
||||||
|
STA WBUF-1,X
|
||||||
|
INX
|
||||||
|
.5 LDA RPTCNT Number of blanks left
|
||||||
|
CMP #$40
|
||||||
|
BCS .4 ...too many for one token
|
||||||
|
ORA #$80 make into blank token + count
|
||||||
|
BNE .3 ...always
|
||||||
|
*--------------------------------
|
||||||
|
SCAN.3.DECIMAL.NUMBERS
|
||||||
|
LDX #6 FIRST CLEAR TO ZERO
|
||||||
|
LDA #0
|
||||||
|
.1 STA A0L-1,X
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
JSR SCAN.1.DECIMAL.NUMBER
|
||||||
|
JSR SCAN.1.DECIMAL.NUMBER
|
||||||
|
*** JMP SCAN.1.DECIMAL.NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
SCAN.1.DECIMAL.NUMBER
|
||||||
|
.1 JSR GNC
|
||||||
|
BCS .2 END OF LINE
|
||||||
|
EOR #$30 IS THIS A DIGIT?
|
||||||
|
CMP #10
|
||||||
|
BCS .1 NO
|
||||||
|
TXA SAVE X-REG
|
||||||
|
PHA
|
||||||
|
JSR DECN CONVERT NUMBER
|
||||||
|
PLA RESTORE X-REG
|
||||||
|
TAX
|
||||||
|
LDA SYM.VALUE STACK NUMBER
|
||||||
|
STA A0L,X
|
||||||
|
INX
|
||||||
|
LDA SYM.VALUE+1
|
||||||
|
STA A0L,X
|
||||||
|
INX
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* DECIMAL NUMBER INPUT
|
||||||
|
*--------------------------------
|
||||||
|
DECN JSR BACKUP.CHAR.PNTR
|
||||||
|
JSR ZERO.SYM.VALUE CLEAR ACCUMULATOR
|
||||||
|
STA DGTCNT
|
||||||
|
.1 JSR GNC GET NEXT CHAR
|
||||||
|
EOR #$30 CHECK IF DIGIT
|
||||||
|
CMP #10
|
||||||
|
BCS .5 NOT A DIGIT
|
||||||
|
PHA SAVE THE DIGIT
|
||||||
|
*---ACCUMULATOR * TEN------------
|
||||||
|
JSR ASL.SYM.VALUE
|
||||||
|
BCS .6 OVERFLOW ERROR
|
||||||
|
LDX #3
|
||||||
|
.2 LDA SYM.VALUE,X HI- TO LO-
|
||||||
|
PHA
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
.3 JSR ASL.SYM.VALUE
|
||||||
|
BCS .6 OVERFLOW ERROR
|
||||||
|
INX
|
||||||
|
BEQ .3 DO IT TWICE
|
||||||
|
PLA
|
||||||
|
ADC SYM.VALUE
|
||||||
|
STA SYM.VALUE
|
||||||
|
PLA
|
||||||
|
ADC SYM.VALUE+1
|
||||||
|
STA SYM.VALUE+1
|
||||||
|
PLA
|
||||||
|
ADC SYM.VALUE+2
|
||||||
|
STA SYM.VALUE+2
|
||||||
|
PLA
|
||||||
|
ADC SYM.VALUE+3
|
||||||
|
STA SYM.VALUE+3
|
||||||
|
BCS .6 OVERFLOW ERROR
|
||||||
|
*---ADD CURRENT DIGIT------------
|
||||||
|
PLA
|
||||||
|
ADC SYM.VALUE
|
||||||
|
STA SYM.VALUE
|
||||||
|
BCC .4
|
||||||
|
INC SYM.VALUE+1
|
||||||
|
BNE .4
|
||||||
|
INC SYM.VALUE+2
|
||||||
|
BNE .4
|
||||||
|
INC SYM.VALUE+3
|
||||||
|
BEQ .6 OVERFLOW ERROR
|
||||||
|
.4 INC DGTCNT COUNT THE DIGIT
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
.5 RTS
|
||||||
|
.6 LDY #QER3 RANGE ERROR
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT NON-BLANK CHAR
|
||||||
|
*--------------------------------
|
||||||
|
GNNB JSR GNC.UC GET NEXT CHAR IN UPPER CASE
|
||||||
|
BCS .1 END OF LINE
|
||||||
|
BEQ GNNB BLANK
|
||||||
|
.1 RTS RETURN
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT CHAR IN UPPER CASE
|
||||||
|
*--------------------------------
|
||||||
|
GNC.UC.START
|
||||||
|
LDY #0
|
||||||
|
STY CHAR.PNTR
|
||||||
|
GNC.UC JSR GNC GET NEXT CHAR ANY CASE
|
||||||
|
BEQ .1 SPACE OR <EOL>
|
||||||
|
JSR ELIMINATE.CASE MAP LOWER CASE TO UPPER CASE
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
CMP #$FF CLEAR CARRY, SET .NE.
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT CHAR
|
||||||
|
*--------------------------------
|
||||||
|
GNC.START
|
||||||
|
LDY #0 BEGINNING OF LINE
|
||||||
|
.HS 2C SKIP NEXT TWO BYTES
|
||||||
|
GNC LDY CHAR.PNTR
|
||||||
|
GNC2 LDA WBUF,Y GET CHAR
|
||||||
|
AND #$7F
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
BEQ .1 END OF LINE
|
||||||
|
INY BUMP POINTER
|
||||||
|
STY CHAR.PNTR
|
||||||
|
CMP #$20 SEE IF BLANK
|
||||||
|
CLC CARRY CLEAR SINCE NOT AT END
|
||||||
|
RTS
|
||||||
|
.1 LDA #$20 RETURN BLANK
|
||||||
|
CMP #$20 SET CARRY AND EQUAL STATUS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* BACK UP CHARACTER POINTER
|
||||||
|
*--------------------------------
|
||||||
|
BACKUP.CHAR.PNTR
|
||||||
|
PHA SAVE A-REG
|
||||||
|
LDA CURRENT.CHAR
|
||||||
|
BEQ .1 DO NOT BACK OFF THE END
|
||||||
|
LDA CHAR.PNTR
|
||||||
|
BEQ .1 DO NOT BACK BEYOND THE BEGINNING
|
||||||
|
DEC CHAR.PNTR
|
||||||
|
.1 PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT TOKEN FROM SOURCE LINE
|
||||||
|
*--------------------------------
|
||||||
|
NTKN
|
||||||
|
LDA RPTCNT
|
||||||
|
BNE .3 IN A REPEATED CHAR LOOP
|
||||||
|
JSR GNB GET NEXT CHAR FROM SOURCE
|
||||||
|
ASL ...WEIRD WAY TO TEST SIGN BIT
|
||||||
|
ROR ...AND AS WELL AS 00
|
||||||
|
BPL .4 ...NORMAL CHARACTER
|
||||||
|
CMP #$C0 SEE IF BLANKS
|
||||||
|
BCC .1 ...YES
|
||||||
|
JSR GNBI REPEAT TOKEN $C0 XX YY, GET XX
|
||||||
|
STA RPTCNT
|
||||||
|
JSR GNBI GET YY (CHAR TO BE REPEATED)
|
||||||
|
JMP .2 ...ALWAYS
|
||||||
|
.1 AND #$3F BLANK COUNT
|
||||||
|
STA RPTCNT
|
||||||
|
LDA #$20 BLANK
|
||||||
|
.2 STA RPTCHR
|
||||||
|
.3 DEC RPTCNT
|
||||||
|
LDA RPTCHR
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT BYTE FROM SOURCE
|
||||||
|
*--------------------------------
|
||||||
|
GNB LDY #0
|
||||||
|
GNBI
|
||||||
|
.DO AUXMEM
|
||||||
|
LDA MACRO.LEVEL
|
||||||
|
BEQ .0 ...NOT IN A SKELETON
|
||||||
|
>SYM LDA,SRCP
|
||||||
|
.HS 2C SKIP OVER LDA (SRCP),Y
|
||||||
|
.FIN
|
||||||
|
.0 LDA (SRCP),Y
|
||||||
|
>INCD SRCP
|
||||||
|
BIT INFLAG INSIDE BLOCKED .IN?
|
||||||
|
BVC .3 ...NO
|
||||||
|
PHA
|
||||||
|
LDA MACRO.LEVEL
|
||||||
|
BNE .25 INSIDE A SKELETON
|
||||||
|
LDA INSAVE+4 REMAINING BYTES IN THIS BLOCK
|
||||||
|
BNE .2 ...THERE ARE MORE
|
||||||
|
ORA INSAVE+5
|
||||||
|
BEQ .4 ...NO MORE IN THIS BLOCK
|
||||||
|
DEC INSAVE+5
|
||||||
|
.2 DEC INSAVE+4
|
||||||
|
.25 PLA
|
||||||
|
.3 RTS
|
||||||
|
*---TRY TO READ ANOTHER BLOCK----
|
||||||
|
.4 PLA
|
||||||
|
LDA INSAVE+6 REFNUM OF INB FILE
|
||||||
|
STA SCI.IOB.RW+1
|
||||||
|
LDA PP STARTING ADDRESS
|
||||||
|
STA SRCP
|
||||||
|
STA SCI.IOB.RW+2
|
||||||
|
LDA PP+1
|
||||||
|
STA SRCP+1
|
||||||
|
STA SCI.IOB.RW+3
|
||||||
|
SEC
|
||||||
|
LDA HI.MEM+1 NUMBER OF PAGES
|
||||||
|
SBC PP+1
|
||||||
|
STA SCI.IOB.RW+5
|
||||||
|
LDA #0
|
||||||
|
STA SCI.IOB.RW+4
|
||||||
|
LDA #$CA READ
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCC .5 ...NO ERRORS
|
||||||
|
CMP #5 END OF DATA?
|
||||||
|
BNE PRODOS.ERROR ...ERROR
|
||||||
|
.5 LDA SCI.IOB.RW+6
|
||||||
|
STA INSAVE+4 # BYTES ACTUALLY READ
|
||||||
|
LDA SCI.IOB.RW+7
|
||||||
|
STA INSAVE+5
|
||||||
|
BCC GNB ...NOT END OF DATA
|
||||||
|
LDA INSAVE+6 REFNUM
|
||||||
|
STA SCI.IOB.CLOSE+1 FOR CLOSE CALL
|
||||||
|
LDA #$CC
|
||||||
|
JSR SCI.MLI
|
||||||
|
BCS PRODOS.ERROR
|
||||||
|
JSR RESTORE END OF THE INBx FILE
|
||||||
|
JMP ASM2
|
||||||
|
*--------------------------------
|
||||||
|
PRODOS.ERROR
|
||||||
|
PHA
|
||||||
|
JSR RESTORE.IF.IN.INBX
|
||||||
|
PLA
|
||||||
|
JMP SCI.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN .CS. IF VALID CHAR
|
||||||
|
* .CC. IF INVALID CHAR
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.DOT.DIGIT.OR.LETTER
|
||||||
|
CMP #'.
|
||||||
|
BEQ CHECKS.OK
|
||||||
|
CMP #'_' allow underline in symbols too
|
||||||
|
BEQ CHECKS.OK
|
||||||
|
CHECK.DIGIT.OR.LETTER
|
||||||
|
JSR CHECK.DIGIT
|
||||||
|
BCS CHECKS.OK
|
||||||
|
CHECK.LETTER
|
||||||
|
CMP #'A
|
||||||
|
BCC CHECKS.NOT.OK
|
||||||
|
CMP #'Z+1
|
||||||
|
BCC CHECKS.OK
|
||||||
|
CHECKS.NOT.OK
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
CHECK.DIGIT
|
||||||
|
CMP #'0
|
||||||
|
BCC CHECKS.NOT.OK
|
||||||
|
CMP #'9+1
|
||||||
|
BCS CHECKS.NOT.OK
|
||||||
|
CHECKS.OK
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.COMMENT.CHAR
|
||||||
|
CMP #'* STAR?
|
||||||
|
BEQ .1 YES
|
||||||
|
CMP #'; SEMI-COLON?
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* INITIALIZE FOR HARD ENTRY
|
||||||
|
*--------------------------------
|
||||||
|
HARD.INIT
|
||||||
|
CLD
|
||||||
|
*---Establish LO.MEM & HI.MEM------
|
||||||
|
LDA SYMBOL.BASE SET UP LO.MEM
|
||||||
|
STA LO.MEM+1
|
||||||
|
LDA SCI.HIMEM.PAGE
|
||||||
|
STA HI.MEM+1
|
||||||
|
LDA #0
|
||||||
|
STA LO.MEM
|
||||||
|
STA HI.MEM
|
||||||
|
*---Init other parameters--------
|
||||||
|
STA INCREMENT.VALUE+1
|
||||||
|
STA PROMPT.FLAG
|
||||||
|
STA INFLAG
|
||||||
|
JSR STINIT INITIALIZE SYMBOL TABLE
|
||||||
|
LDA #10 SET AUTO-LINE-NUMBERING INCREMENT
|
||||||
|
STA INCREMENT.VALUE
|
||||||
|
LDA #990 SET AUTO-LINE-NUMBERING
|
||||||
|
STA CURLNO INITIAL VALUE
|
||||||
|
LDA /990
|
||||||
|
STA CURLNO+1
|
||||||
|
*---Print Heading----------------
|
||||||
|
JSR IO.INIT INIT TEXT, FULL WINDOW, ETC.
|
||||||
|
JSR VERSION Print Version Number
|
||||||
|
*--------------------------------
|
||||||
|
EMPTY.SOURCE.AREA
|
||||||
|
LDA HI.MEM
|
||||||
|
STA PP EMPTY SOURCE AREA
|
||||||
|
LDA HI.MEM+1
|
||||||
|
STA PP+1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
Q.VERSION
|
||||||
|
.DA #VERSION.LO+"0",#".",#VERSION.HI+"0"
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.edit
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
321
SCMASM.30/SCMASM.S.ELINES.txt
Normal file
321
SCMASM.30/SCMASM.S.ELINES.txt
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* EDIT ONE LINE
|
||||||
|
* TEXT OF LINE ALREADY IN WBUF
|
||||||
|
* (A1L,A1H) POINT AT LINE IN SOURCE AREA
|
||||||
|
*--------------------------------
|
||||||
|
EDIT.ONE.LINE
|
||||||
|
LDA BOTTOM.OF.SCREEN
|
||||||
|
STA ED.BEGLIN
|
||||||
|
JSR IO.VTAB
|
||||||
|
JSR E.BEG Start edit 2 columns after line #
|
||||||
|
.1 STX ED.PNTR
|
||||||
|
JSR E.DISPLAY.LINE Put line on screen
|
||||||
|
LDX ED.PNTR Restore PNTR in X
|
||||||
|
JSR E.PROCESS.CHAR
|
||||||
|
BCC .1 Not control-L, -M, or -Q
|
||||||
|
JSR E.DISPLAY.LINE ...One last time
|
||||||
|
JSR CRLF
|
||||||
|
JMP NML Submit line and return
|
||||||
|
*--------------------------------
|
||||||
|
* DISPLAY LINE FROM WBUF
|
||||||
|
*--------------------------------
|
||||||
|
E.DISPLAY.LINE
|
||||||
|
LDA ED.BEGLIN
|
||||||
|
JSR IO.VTAB
|
||||||
|
LDA #0
|
||||||
|
JSR IO.HTAB
|
||||||
|
JSR SPC One space
|
||||||
|
LDX #0
|
||||||
|
.1 LDA WBUF,X
|
||||||
|
BEQ .4 End of line
|
||||||
|
ORA #$80
|
||||||
|
CMP #$A0 Control char?
|
||||||
|
BCS .2 No
|
||||||
|
AND #$3F ...YES, MAKE IT INVERSE
|
||||||
|
.2 PHA
|
||||||
|
JSR GET.HORIZ.POSN
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
INY
|
||||||
|
CPY SCREEN.WIDTH
|
||||||
|
BCC .3 No
|
||||||
|
LDY CV Last line on screen?
|
||||||
|
CPY BOTTOM.OF.SCREEN
|
||||||
|
BCC .3 No
|
||||||
|
DEC ED.BEGLIN Yes, it will scroll
|
||||||
|
.3 JSR IO.COUT
|
||||||
|
INX
|
||||||
|
BNE .1 ...Always
|
||||||
|
.4 JMP IO.CLREOP
|
||||||
|
*--------------------------------
|
||||||
|
* PROCESS EDITING CHARACTER
|
||||||
|
*--------------------------------
|
||||||
|
E.PROCESS.CHAR
|
||||||
|
EPC.1 JSR E.INPUT Get char from keyboard
|
||||||
|
EPC.2 CMP #$A0 Control char?
|
||||||
|
BCC E.PROCESS.CNTRL
|
||||||
|
*--------------------------------
|
||||||
|
* PUT CHARACTER INTO LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.PUT.CHARACTER
|
||||||
|
LDA WBUF,X At end of line?
|
||||||
|
BNE .1 No
|
||||||
|
CPX #WBUF.MAX Line too long?
|
||||||
|
BCS .2 Yes
|
||||||
|
STA WBUF+1,X Put new <EOL>
|
||||||
|
.1 LDA CURRENT.CHAR
|
||||||
|
STA WBUF,X
|
||||||
|
INX
|
||||||
|
.2 CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PROCESS CONTROL CHAR
|
||||||
|
*--------------------------------
|
||||||
|
E.PROCESS.CNTRL
|
||||||
|
LDY #CHARS.FOR.EDIT
|
||||||
|
JMP SEARCH.CHAR.TABLES
|
||||||
|
*--------------------------------
|
||||||
|
E.ILLCHAR
|
||||||
|
JSR MON.BELL
|
||||||
|
LDX ED.PNTR Restore X-reg
|
||||||
|
JMP EPC.1
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-R: RESTORE ORIGINAL LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.RESTORE
|
||||||
|
LDA A1L Set line pointer back
|
||||||
|
STA SRCP
|
||||||
|
LDA A1H
|
||||||
|
STA SRCP+1
|
||||||
|
JSR GET.LINE.TO.WBUF
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-B: BEGINNING OF LINE
|
||||||
|
*--------------------------------
|
||||||
|
FIND.START.OF.LINE.IN.WBUF
|
||||||
|
E.BEG LDY #0 Find 1st column after line number
|
||||||
|
.1 JSR GNC2
|
||||||
|
BCS .2 End of line
|
||||||
|
JSR CHECK.DIGIT
|
||||||
|
BCS .1 Yes
|
||||||
|
INY
|
||||||
|
.2 TYA Get column # into X
|
||||||
|
TAX
|
||||||
|
DEX
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-D: DELETE CHARACTER
|
||||||
|
*--------------------------------
|
||||||
|
E.DEL LDX ED.PNTR
|
||||||
|
.1 LDA WBUF,X Are we at the end?
|
||||||
|
BEQ .3 Yes
|
||||||
|
.2 INX ADVANCE PNTR
|
||||||
|
LDA WBUF,X SLIDE REST OF LINE LEFT
|
||||||
|
STA WBUF-1,X ...to delete char
|
||||||
|
BNE .2 ...UNTIL END OF LINE
|
||||||
|
.3 LDX ED.PNTR
|
||||||
|
CLC
|
||||||
|
RTS Return with Carry clear
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-N: END OF LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.END LDX ED.PNTR
|
||||||
|
DEX
|
||||||
|
.1 INX
|
||||||
|
LDA WBUF,X End of buffer?
|
||||||
|
BNE .1 ...KEEP LOOKING
|
||||||
|
CLC
|
||||||
|
RTS Carry clear
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-F: FIND NEXT OCCURRENCE
|
||||||
|
*--------------------------------
|
||||||
|
E.FIND LDX ED.PNTR
|
||||||
|
LDA WBUF,X End of buffer?
|
||||||
|
BEQ .3 Yes
|
||||||
|
JSR E.INPUT Get 1 char
|
||||||
|
STX ED.FCOL Save beg col
|
||||||
|
STA ED.FKEY Save key to locate
|
||||||
|
.1 INX
|
||||||
|
LDA WBUF,X Text buffer
|
||||||
|
BEQ .2 End of buffer
|
||||||
|
ORA #$80
|
||||||
|
CMP ED.FKEY No, see if key
|
||||||
|
BNE .1 No, go forward
|
||||||
|
STX ED.FCOL Save this col
|
||||||
|
JSR E.INPUT Try another key
|
||||||
|
CMP ED.FKEY Same char
|
||||||
|
BEQ .1 Yes, search again
|
||||||
|
STX ED.PNTR No, exit pointing here
|
||||||
|
JMP EPC.2
|
||||||
|
.2 LDX ED.FCOL Restore col
|
||||||
|
.3 JSR MON.BELL Beep
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-H: BACKSPACE
|
||||||
|
*--------------------------------
|
||||||
|
E.BKSP LDX ED.PNTR
|
||||||
|
TXA At beginning already?
|
||||||
|
BEQ .1 Yes, stay there
|
||||||
|
DEX Backup
|
||||||
|
.1 CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-O: ALLOW INSERTION OF CONTROL CHAR
|
||||||
|
*--------------------------------
|
||||||
|
E.OVR LDX ED.PNTR
|
||||||
|
JSR E.INPUT Read char
|
||||||
|
JMP E.INS1 Skip control check
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-I: INSERT CHARACTERS
|
||||||
|
*--------------------------------
|
||||||
|
E.INS LDX ED.PNTR
|
||||||
|
JSR E.INPUT Read char
|
||||||
|
CMP #$A0 Control char pops user out
|
||||||
|
BCS E.INS1
|
||||||
|
JMP E.PROCESS.CNTRL
|
||||||
|
E.INS1 CPX #WBUF.MAX End of block
|
||||||
|
BEQ .1 Yes, stay there
|
||||||
|
INC ED.PNTR
|
||||||
|
.1 PHA Char to insert
|
||||||
|
LDA WBUF,X Save char to move
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
STA WBUF,X Put over saved char
|
||||||
|
INX
|
||||||
|
TYA Insert saved char
|
||||||
|
BNE .1 If not buffer end
|
||||||
|
CPX #WBUF.MAX At end?
|
||||||
|
BCC .2 Not yet
|
||||||
|
LDX #WBUF.MAX Yes
|
||||||
|
.2 STA WBUF,X Store end char
|
||||||
|
JSR E.DISPLAY.LINE
|
||||||
|
LDX ED.PNTR
|
||||||
|
BNE E.INS ...Always
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-Q: QUIT, DROPPING REST OF LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.RETQ JSR E.ZAP Clear rest of line
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-M: QUIT, SUBMITTING WHOLE LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.RET SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-L: SUBMIT THIS LINE, EDIT NEXT LINE
|
||||||
|
*--------------------------------
|
||||||
|
E.DOWN LDA ENDP See if at HI.MEM already
|
||||||
|
CMP HI.MEM
|
||||||
|
LDA ENDP+1
|
||||||
|
SBC HI.MEM+1
|
||||||
|
BCS .1 Yes, no need to move ENDP
|
||||||
|
JSR CMP.SRCP.ENDP End of range yet?
|
||||||
|
BCC .1 ...NO
|
||||||
|
CLC Move ENDP one line
|
||||||
|
LDY #0
|
||||||
|
LDA (SRCP),Y Line length of next line
|
||||||
|
ADC ENDP
|
||||||
|
STA ENDP
|
||||||
|
BCC .1
|
||||||
|
INC ENDP+1
|
||||||
|
.1 SEC Signal submit line
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-T: SKIP TO NEXT TAB STOP
|
||||||
|
*--------------------------------
|
||||||
|
E.TAB LDX ED.PNTR
|
||||||
|
.1 JSR E.CHECK.TAB
|
||||||
|
BCS E.RIT1 MOVE ONE MORE COLUMN
|
||||||
|
JSR E.RIT1 Move one column right
|
||||||
|
BCC .1 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-U: RIGHT ARROW
|
||||||
|
*--------------------------------
|
||||||
|
E.RIT LDX ED.PNTR
|
||||||
|
E.RIT1 LDA WBUF,X End of buffer?
|
||||||
|
BNE .1 No
|
||||||
|
CPX #WBUF.MAX
|
||||||
|
BCS .2
|
||||||
|
STA WBUF+1,X
|
||||||
|
LDA #$A0 Put a blank
|
||||||
|
STA WBUF,X To extend line
|
||||||
|
.1 INX Move ahead
|
||||||
|
.2 CLC Return
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-X: ABORT EDIT COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
E.ABORT
|
||||||
|
JSR E.DISPLAY.LINE
|
||||||
|
LDA #$DC Backslash
|
||||||
|
JSR MY.COUT
|
||||||
|
JMP GNL Get next command
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-@: CLEAR TO EOL
|
||||||
|
*--------------------------------
|
||||||
|
E.ZAP LDA #0 EOL mark
|
||||||
|
LDX ED.PNTR
|
||||||
|
STA WBUF,X
|
||||||
|
CLC
|
||||||
|
RTS Carry clear
|
||||||
|
*--------------------------------
|
||||||
|
* INPUT CHAR WHERE CURSOR SHOULD BE
|
||||||
|
*--------------------------------
|
||||||
|
E.INPUT
|
||||||
|
LDY ED.BEGLIN
|
||||||
|
INX
|
||||||
|
TXA
|
||||||
|
DEX
|
||||||
|
DEY
|
||||||
|
SEC
|
||||||
|
.1 INY
|
||||||
|
SBC SCREEN.WIDTH
|
||||||
|
BCS .1
|
||||||
|
ADC SCREEN.WIDTH
|
||||||
|
JSR IO.HTAB HTAB (A)
|
||||||
|
TYA
|
||||||
|
JSR IO.VTAB
|
||||||
|
JSR READ.KEY.WITH.CASE
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* DETERMINE IF AT TAB STOP YET
|
||||||
|
* RETURN .EQ. IF AT A TAB STOP
|
||||||
|
* .CS. IF PAST LAST TAB STOP
|
||||||
|
* .CC. IF BEFORE A TAB STOP
|
||||||
|
*--------------------------------
|
||||||
|
E.CHECK.TAB
|
||||||
|
TXA Column position
|
||||||
|
CLC
|
||||||
|
ADC #3
|
||||||
|
LDY #0
|
||||||
|
.1 CMP TAB.SETTINGS,Y
|
||||||
|
BCC .2
|
||||||
|
BEQ .2
|
||||||
|
INY
|
||||||
|
CPY #5
|
||||||
|
BCC .1
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONTROL-I -- CLEAR TO TAB STOP
|
||||||
|
*--------------------------------
|
||||||
|
E.TABI LDX ED.PNTR
|
||||||
|
LDA #" "
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
.1 JSR E.CHECK.TAB
|
||||||
|
BCS .2 ...REACHED TAB STOP
|
||||||
|
JSR E.PUT.CHARACTER
|
||||||
|
BCC .1 ...ALWAYS
|
||||||
|
.2 JMP E.PUT.CHARACTER One more space
|
||||||
|
*--------------------------------
|
||||||
|
E.TOGGLE
|
||||||
|
JSR IO.CASE.TOGGLE
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.elines
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
414
SCMASM.30/SCMASM.S.EXP.txt
Normal file
414
SCMASM.30/SCMASM.S.EXP.txt
Normal file
@ -0,0 +1,414 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* EXPRESSION CRACKER
|
||||||
|
*-------------------------------
|
||||||
|
EXPR.DEFINED
|
||||||
|
JSR EXPR
|
||||||
|
BMI .1
|
||||||
|
RTS
|
||||||
|
.1 JMP UNDF
|
||||||
|
*--------------------------------
|
||||||
|
OPERATOR.CHARS
|
||||||
|
.AS "^!|&<=>/*)], "
|
||||||
|
OPERATOR.CHARS.SIZE .EQ *-OPERATOR.CHARS
|
||||||
|
*--------------------------------
|
||||||
|
OPERATOR.INDEX
|
||||||
|
.HS 0C.0A.0A.08.0E.10.12.06.04.FF.FF.FF.FF
|
||||||
|
* ^ ! | & < = > / * ) ] , SPC
|
||||||
|
*--------------------------------
|
||||||
|
OPERATOR.TABLE
|
||||||
|
.DA EXP.SUBTRACT-1 0 FOR -<=>
|
||||||
|
.DA EXP.ADD-1 2 FOR +
|
||||||
|
.DA EXP.MULTIPLY-1 4 FOR *
|
||||||
|
.DA EXP.DIVIDE-1 6 FOR /
|
||||||
|
.DA EXP.AND-1 8 FOR &
|
||||||
|
.DA EXP.ORA-1 A FOR !|
|
||||||
|
.DA EXP.EOR-1 C FOR ^
|
||||||
|
.DA EXP.LESS-1 E FOR <
|
||||||
|
.DA EXP.EQUAL-1 10 FOR =
|
||||||
|
.DA EXP.GREATER-1 12 FOR >
|
||||||
|
*--------------------------------
|
||||||
|
ERBA3 JMP ERBA
|
||||||
|
*--------------------------------
|
||||||
|
EXPR JSR GNNB GET NEXT NON-BLANK
|
||||||
|
BCS ERBA3 NO EXPRESSION ON LINE
|
||||||
|
JSR BACKUP.CHAR.PNTR
|
||||||
|
*--------------------------------
|
||||||
|
EXP1 JSR ZERO.EXP.VALUE
|
||||||
|
STA EXP.NEW NEW EXPRESSION FLAG = 0
|
||||||
|
STA EXP.UNDEF ZERO UNDEF FLAG
|
||||||
|
LDX #$40 INIT FWD REF FLAG
|
||||||
|
STX EXP.FWDREF
|
||||||
|
*--------------------------------
|
||||||
|
EXP2 LDX #0 SET OPERATOR=0 FOR +
|
||||||
|
JSR GNC.UC
|
||||||
|
BCS .3 END OF LINE
|
||||||
|
CMP #'- MINUS
|
||||||
|
BEQ .6 X=0 FOR MINUS OR RELOPS
|
||||||
|
LDX #2 X=2 FOR ADDITION
|
||||||
|
CMP #'+ ADD
|
||||||
|
BEQ .6
|
||||||
|
LDY EXP.NEW NOT + OR -
|
||||||
|
BEQ .7 BUT IT IS NEW EXPR
|
||||||
|
LDX #OPERATOR.CHARS.SIZE-1
|
||||||
|
.1 LDA OPERATOR.CHARS,X
|
||||||
|
CMP CURRENT.CHAR
|
||||||
|
BEQ .2
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
JMP ERBA
|
||||||
|
*---FOUND OP OR TERM CHAR--------
|
||||||
|
.2 LDA OPERATOR.INDEX,X
|
||||||
|
BPL .5 ...OPERATOR
|
||||||
|
*---END OF EXPRESSION-----------
|
||||||
|
JSR BACKUP.CHAR.PNTR
|
||||||
|
.3 LDY EXP.UNDEF UNDEF FLAG
|
||||||
|
BPL .4
|
||||||
|
JSR ZERO.EXP.VALUE
|
||||||
|
TYA RECOVER UNDEF STATUS
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.5 TAX
|
||||||
|
.6 JSR GNC.UC
|
||||||
|
.7 INC EXP.NEW NOT A NEW EXPRESSION ANYMORE
|
||||||
|
LDA OPERATOR.TABLE+1,X
|
||||||
|
PHA
|
||||||
|
LDA OPERATOR.TABLE,X
|
||||||
|
PHA
|
||||||
|
*-------------------------------
|
||||||
|
* GET OPERAND
|
||||||
|
*-------------------------------
|
||||||
|
GET.OPERAND
|
||||||
|
JSR ZERO.SYM.VALUE
|
||||||
|
LDA CURRENT.CHAR
|
||||||
|
CMP #$30 FIRST CHAR OF OPERAND
|
||||||
|
BCC .3 PUNCTUATION
|
||||||
|
CMP #$3A
|
||||||
|
BCS .2 MIGHT BE LETTER, TRY LABEL
|
||||||
|
JSR DECN CONVERT DECIMAL NUMBER
|
||||||
|
.15 JMP BACKUP.CHAR.PNTR
|
||||||
|
*---TRY A LABEL------------------
|
||||||
|
.2 JSR PACK TRY LABEL
|
||||||
|
BCC .4 NO GOOD
|
||||||
|
JSR STSRCH LOOK UP THE VALUE
|
||||||
|
LDY #6 UPDATE FWD REF FLAG
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
AND EXP.FWDREF
|
||||||
|
STA EXP.FWDREF
|
||||||
|
BCC .1 DEFINED LABEL
|
||||||
|
ROR EXP.UNDEF UNDEFINED, MAKE FLAG NEGATIVE
|
||||||
|
.1 RTS
|
||||||
|
*---TRY LOCAL LABEL--------------
|
||||||
|
.3 CMP #'.
|
||||||
|
BEQ .2 LOCAL LABEL
|
||||||
|
*---TRY CONSTANTS----------------
|
||||||
|
LDX #3 3-->HEX CONSTANT
|
||||||
|
CMP #'$
|
||||||
|
BEQ .5 HEX CONSTANT
|
||||||
|
DEX 2-->OCT CONSTANT
|
||||||
|
CMP #'&'
|
||||||
|
BEQ .5 ...OCTAL
|
||||||
|
LDX #0 0-->BIN CONSTANT
|
||||||
|
CMP #'% BINARY CONSTANT
|
||||||
|
BEQ .5 ...BINARY
|
||||||
|
*---TRY LITERALS-----------------
|
||||||
|
CMP #'' (X = 0)
|
||||||
|
BEQ .6 LITERAL
|
||||||
|
CMP #'" LITERAL WITH HIGH BIT SET
|
||||||
|
BEQ .9
|
||||||
|
*---TRY STAR---------------------
|
||||||
|
CMP #'*
|
||||||
|
BNE .4 ...NONE OF THE ABOVE, ERROR
|
||||||
|
LDX #3 VALUE IS CURRENT LOCATION
|
||||||
|
.7 LDA ORGN,X
|
||||||
|
STA SYM.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .7
|
||||||
|
RTS
|
||||||
|
*---INVALID OPERAND--------------
|
||||||
|
.4 JMP ERBA BAD ADDRESS ERROR
|
||||||
|
*---HEX/OCT/BIN CONSTANT--------
|
||||||
|
.5 JSR HEX.OCT.BIN.DGT $ABCD, &777, %1010
|
||||||
|
BCC .4 NO, ERROR BAD ADDRESS
|
||||||
|
.8 JSR HEX.OCT.BIN.DGT.1 GET ANOTHER DIGIT
|
||||||
|
BCS .8
|
||||||
|
BCC .15 ...ALWAYS
|
||||||
|
*---TICK & QUOTE LITERALS-------
|
||||||
|
.9 LDX #$80 HIBIT=1
|
||||||
|
.6 STX SYM.VALUE
|
||||||
|
STA DGTCNT SAVE ' OR " FOR OPTIONAL TERMCHAR
|
||||||
|
JSR GNC GET FOLLOWING CHAR
|
||||||
|
BCS .4 END OF LINE
|
||||||
|
ORA SYM.VALUE SET HIGH BIT
|
||||||
|
STA SYM.VALUE
|
||||||
|
JSR GNC SEE IF CLOSING QUOTE
|
||||||
|
CMP DGTCNT (IT IS OPTIONAL)
|
||||||
|
BNE .15 NO, BACK UP CHAR PNTR
|
||||||
|
RTS
|
||||||
|
*-------------------------------
|
||||||
|
* IF NEXT CHAR IS VALID DIGIT,
|
||||||
|
* APPEND IT TO CURRENT VALUE
|
||||||
|
*
|
||||||
|
* (X) DETERMINES BASE: 0-->2, 2-->8, 3-->16
|
||||||
|
*-------------------------------
|
||||||
|
HEX.DIGIT
|
||||||
|
LDX #3
|
||||||
|
HEX.OCT.BIN.DGT
|
||||||
|
STX BASE.INDEX
|
||||||
|
HEX.OCT.BIN.DGT.1
|
||||||
|
.1 JSR GNC.UC IGNORE CASE
|
||||||
|
CMP #'.' ALLOW PERIODS
|
||||||
|
BEQ .1 ...BUT IGNORE THEM
|
||||||
|
EOR #$30
|
||||||
|
CMP #$0A
|
||||||
|
BCC .3 ...0-9, TEXT VALIDITY
|
||||||
|
ADC #$88 ...MIGHT BE A...F
|
||||||
|
.2 CMP #$FA
|
||||||
|
BCC .5 NOT A-F EITHER, RETURN CARRY CLEAR
|
||||||
|
AND #$0F TRIM HEX A...F
|
||||||
|
.3 LDX BASE.INDEX
|
||||||
|
CMP BASE.TABLE,X CHECK REAL RANGE
|
||||||
|
BCS .2 ...NOT VALID, CLR CARRY WITH 'CMP #$FA'
|
||||||
|
PHA SAVE DIGIT
|
||||||
|
.4 JSR ASL.SYM.VALUE
|
||||||
|
DEX MAKE ROOM FOR DIGIT
|
||||||
|
BPL .4
|
||||||
|
PLA GET DIGIT
|
||||||
|
ORA SYM.VALUE MERGE WITH PREVIOUS
|
||||||
|
STA SYM.VALUE
|
||||||
|
SEC FLAG GOT A DIGIT
|
||||||
|
.5 RTS
|
||||||
|
*--------------------------------
|
||||||
|
BASE.TABLE
|
||||||
|
.DA #2,#2,#8,#16
|
||||||
|
ASL.SYM.VALUE
|
||||||
|
CLC
|
||||||
|
ROL.SYM.VALUE
|
||||||
|
ROL SYM.VALUE
|
||||||
|
ROL SYM.VALUE+1
|
||||||
|
ROL SYM.VALUE+2
|
||||||
|
ROL SYM.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ZERO.EXP.VALUE
|
||||||
|
LDA #0
|
||||||
|
STA EXP.VALUE
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
STA EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ZERO.EXP.VALUE64
|
||||||
|
LDA #0
|
||||||
|
STA EXP.VALUE64
|
||||||
|
STA EXP.VALUE64+1
|
||||||
|
STA EXP.VALUE64+2
|
||||||
|
STA EXP.VALUE64+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ZERO.SYM.VALUE
|
||||||
|
LDA #0
|
||||||
|
STA SYM.VALUE
|
||||||
|
STA SYM.VALUE+1
|
||||||
|
STA SYM.VALUE+2
|
||||||
|
STA SYM.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EXP.AND
|
||||||
|
LDX #3
|
||||||
|
.1 LDA EXP.VALUE,X
|
||||||
|
AND SYM.VALUE,X
|
||||||
|
STA EXP.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.ORA
|
||||||
|
LDX #3
|
||||||
|
.1 LDA EXP.VALUE,X
|
||||||
|
ORA SYM.VALUE,X
|
||||||
|
STA EXP.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.EOR
|
||||||
|
LDX #3
|
||||||
|
.1 LDA EXP.VALUE,X
|
||||||
|
EOR SYM.VALUE,X
|
||||||
|
STA EXP.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.ADD
|
||||||
|
CLC PLUS
|
||||||
|
LDX #-4
|
||||||
|
.1 LDA EXP.VALUE+4,X
|
||||||
|
ADC SYM.VALUE+4,X
|
||||||
|
STA EXP.VALUE+4,X
|
||||||
|
INX
|
||||||
|
BNE .1
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.SUBTRACT
|
||||||
|
JSR EXP.SUBTRACTION
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.SUBTRACTION
|
||||||
|
SEC
|
||||||
|
LDX #-4
|
||||||
|
.7 LDA EXP.VALUE+4,X
|
||||||
|
SBC SYM.VALUE+4,X
|
||||||
|
STA EXP.VALUE+4,X
|
||||||
|
INX
|
||||||
|
BNE .7
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EXP.LESS
|
||||||
|
JSR EXP.SUBTRACTION
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
BMI EXP.TRUE
|
||||||
|
EXP.FALSE
|
||||||
|
CLC
|
||||||
|
EXP.TRUE.OR.FALSE
|
||||||
|
JSR ZERO.EXP.VALUE
|
||||||
|
ROL EXP.VALUE
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.EQUAL
|
||||||
|
JSR EXP.SUBTRACTION
|
||||||
|
JSR TEST.EXP.VALUE
|
||||||
|
BNE EXP.FALSE
|
||||||
|
EXP.TRUE
|
||||||
|
SEC
|
||||||
|
BCS EXP.TRUE.OR.FALSE
|
||||||
|
*--------------------------------
|
||||||
|
TEST.EXP.VALUE.ZP
|
||||||
|
LDA #0
|
||||||
|
.HS 2C
|
||||||
|
TEST.EXP.VALUE
|
||||||
|
LDA EXP.VALUE
|
||||||
|
ORA EXP.VALUE+1
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EXP.GREATER
|
||||||
|
JSR EXP.SUBTRACTION
|
||||||
|
JSR TEST.EXP.VALUE
|
||||||
|
BEQ EXP.FALSE
|
||||||
|
LDA EXP.VALUE+3 LOOK AT SIGN BIT
|
||||||
|
BMI EXP.FALSE
|
||||||
|
BPL EXP.TRUE
|
||||||
|
*-------------------------------
|
||||||
|
EXP.DIVIDE
|
||||||
|
JSR EXP.DIVISION
|
||||||
|
JMP EXP2
|
||||||
|
*--------------------------------
|
||||||
|
EXP.DIVISION
|
||||||
|
JSR ZERO.EXP.VALUE64
|
||||||
|
LDY #32 32 BITS
|
||||||
|
.1 ASL EXP.VALUE SHIFT DIVIDEND/QUOTIENT LEFT
|
||||||
|
ROL EXP.VALUE+1
|
||||||
|
ROL EXP.VALUE+2
|
||||||
|
ROL EXP.VALUE+3
|
||||||
|
ROL EXP.VALUE64 SHIFT PARTIAL DIVIDEND LEFT
|
||||||
|
ROL EXP.VALUE64+1
|
||||||
|
ROL EXP.VALUE64+2
|
||||||
|
ROL EXP.VALUE64+3
|
||||||
|
SEC SUBTRACT DIVISOR FROM PARTIAL DIVIDEND
|
||||||
|
LDA EXP.VALUE64
|
||||||
|
SBC SYM.VALUE
|
||||||
|
PHA SAVE LO-BYTE OF DIFFERENCE ON STACK
|
||||||
|
LDA EXP.VALUE64+1
|
||||||
|
SBC SYM.VALUE+1
|
||||||
|
PHA
|
||||||
|
LDA EXP.VALUE64+2
|
||||||
|
SBC SYM.VALUE+2
|
||||||
|
PHA
|
||||||
|
LDA EXP.VALUE64+3
|
||||||
|
SBC SYM.VALUE+3
|
||||||
|
BCC .2 REMAINDER TOO SMALL
|
||||||
|
INC EXP.VALUE SET BIT IN QUOTIENT
|
||||||
|
STA EXP.VALUE64+3 HI-BYTE OF REMAINDER
|
||||||
|
PLA RETRIEVE NEXT BYTE OF REMAINDER
|
||||||
|
STA EXP.VALUE64+2
|
||||||
|
PLA
|
||||||
|
STA EXP.VALUE64+1
|
||||||
|
PLA
|
||||||
|
STA EXP.VALUE64
|
||||||
|
BCS .3
|
||||||
|
.2 PLA STACK BACK TO NORMAL
|
||||||
|
PLA
|
||||||
|
PLA
|
||||||
|
.3 DEY NEXT BIT
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EXP.MULTIPLY
|
||||||
|
JSR ZERO.EXP.VALUE64
|
||||||
|
LDY #32 32-BIT MULTIPLY
|
||||||
|
.1 LDA EXP.VALUE CHECK LSB OF MULTIPLIER
|
||||||
|
LSR
|
||||||
|
BCC .2 IF 0, DON'T ADD MULTIPLICAND
|
||||||
|
CLC ADD MULTIPLICAND
|
||||||
|
LDA EXP.VALUE64
|
||||||
|
ADC SYM.VALUE
|
||||||
|
STA EXP.VALUE64
|
||||||
|
LDA EXP.VALUE64+1
|
||||||
|
ADC SYM.VALUE+1
|
||||||
|
STA EXP.VALUE64+1
|
||||||
|
LDA EXP.VALUE64+2
|
||||||
|
ADC SYM.VALUE+2
|
||||||
|
STA EXP.VALUE64+2
|
||||||
|
LDA EXP.VALUE64+3
|
||||||
|
ADC SYM.VALUE+3
|
||||||
|
STA EXP.VALUE64+3
|
||||||
|
.2 ROR EXP.VALUE64+3
|
||||||
|
ROR EXP.VALUE64+2
|
||||||
|
ROR EXP.VALUE64+1
|
||||||
|
ROR EXP.VALUE64
|
||||||
|
ROR EXP.VALUE+3
|
||||||
|
ROR EXP.VALUE+2
|
||||||
|
ROR EXP.VALUE+1
|
||||||
|
ROR EXP.VALUE
|
||||||
|
DEY
|
||||||
|
BNE .1
|
||||||
|
JMP EXP2
|
||||||
|
*-------------------------------
|
||||||
|
* MGO COMMAND
|
||||||
|
*-------------------------------
|
||||||
|
MGO JSR EXPR.DEFINED CRACK EXPRESSION
|
||||||
|
JMP (EXP.VALUE) ENTER USER'S PROGRAM
|
||||||
|
*--------------------------------
|
||||||
|
* VAL COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
VAL JSR EXPR.DEFINED GET VALUE OF EXPRESSION
|
||||||
|
LDA #'$'
|
||||||
|
JSR CHO
|
||||||
|
JSR P.EXP.VALUE
|
||||||
|
LDA #'='
|
||||||
|
JSR CHO
|
||||||
|
JSR ZERO.SYM.VALUE
|
||||||
|
TAX X=0
|
||||||
|
LDA #10
|
||||||
|
STA SYM.VALUE
|
||||||
|
.1 JSR EXP.DIVISION
|
||||||
|
LDA EXP.VALUE64 REMAINDER
|
||||||
|
PHA
|
||||||
|
INX
|
||||||
|
JSR TEST.EXP.VALUE
|
||||||
|
BNE .1
|
||||||
|
.2 PLA
|
||||||
|
ORA #'0'
|
||||||
|
JSR CHO
|
||||||
|
DEX
|
||||||
|
BNE .2
|
||||||
|
JMP CRLF
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.exp
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
407
SCMASM.30/SCMASM.S.FNDREP.txt
Normal file
407
SCMASM.30/SCMASM.S.FNDREP.txt
Normal file
@ -0,0 +1,407 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* FIND AND LIST COMMANDS
|
||||||
|
*--------------------------------
|
||||||
|
LIST
|
||||||
|
FIND JSR GET.KEY.STRING
|
||||||
|
JSR PARSE.LINE.RANGE
|
||||||
|
JSR HANDLE.REPLACE.OPTIONS
|
||||||
|
.1 JSR GET.LINE.TO.WBUF
|
||||||
|
BCC .2
|
||||||
|
RTS
|
||||||
|
.2 JSR FIND.KEY.IN.WBUF
|
||||||
|
BCC .1 KEY NOT IN WBUF
|
||||||
|
LDA A1L SET UP POINTER FOR LIST
|
||||||
|
LDX A1H
|
||||||
|
JSR LIST.LINE.AX
|
||||||
|
JMP .1
|
||||||
|
*--------------------------------
|
||||||
|
* PARSE <D><STRING><D> INTO FREE MEMORY
|
||||||
|
*--------------------------------
|
||||||
|
GET.KEY.STRING
|
||||||
|
LDA #KBUF
|
||||||
|
STA KEY.ADDR
|
||||||
|
LDA /KBUF
|
||||||
|
STA KEY.ADDR+1
|
||||||
|
GET.KEY2
|
||||||
|
JSR GNNB GET NEXT NON-BLANK
|
||||||
|
STA DLIM FOR DELIMITER
|
||||||
|
BCS .4 EOL
|
||||||
|
CMP #',
|
||||||
|
BEQ .4 COMMA
|
||||||
|
CMP #'. PERIOD
|
||||||
|
BEQ .4
|
||||||
|
EOR #$30
|
||||||
|
CMP #10
|
||||||
|
BCC .4 DIGIT
|
||||||
|
LDY #0
|
||||||
|
.1 STY PNTR
|
||||||
|
JSR GNC MOVE STRING
|
||||||
|
BCS .2 END OF LINE
|
||||||
|
CMP DLIM
|
||||||
|
BEQ .2 END OF STRING
|
||||||
|
LDY PNTR
|
||||||
|
STA (KEY.ADDR),Y
|
||||||
|
INY
|
||||||
|
CPY #39 SEE IF STRING FITS
|
||||||
|
BCC .1 YES, KEEP GOING
|
||||||
|
LDY #QSTRLNG NO, STRING TOO LONG
|
||||||
|
JMP HARD.ERROR
|
||||||
|
.2 LDY PNTR
|
||||||
|
LDA #0
|
||||||
|
STA (KEY.ADDR),Y
|
||||||
|
SEC WE FOUND IT
|
||||||
|
RTS
|
||||||
|
.4 LDA #0
|
||||||
|
STA PNTR
|
||||||
|
CLC DIDN'T FIND IT
|
||||||
|
JMP BACKUP.CHAR.PNTR
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT LINE INTO WBUF
|
||||||
|
* RETURN CARRY CLEAR IF SUCCESSFUL
|
||||||
|
* CARRY SET IF BEYOND <ENDP>
|
||||||
|
* X = LENGTH OF LINE
|
||||||
|
*--------------------------------
|
||||||
|
GET.LINE.TO.WBUF
|
||||||
|
LDA SRCP
|
||||||
|
STA A1L SAVE POINTER FOR LIST
|
||||||
|
LDA SRCP+1
|
||||||
|
STA A1H
|
||||||
|
JSR CMP.SRCP.ENDP END OF RANGE YET?
|
||||||
|
BCS .2 ...YES, FINISHED
|
||||||
|
JSR GET.LINE.NUMBER
|
||||||
|
LDY #0 START AT BEGINNING OF WBUF
|
||||||
|
JSR CONVERT.LINE.NUMBER.STORE PUT CONVERTED # AT WBUF,Y
|
||||||
|
LDA #$A0 APPEND A SPACE AFTER LINE NUMBER
|
||||||
|
STA WBUF,Y
|
||||||
|
INY
|
||||||
|
TYA
|
||||||
|
TAX
|
||||||
|
.1 JSR NTKN BYTE FROM PROGRAM
|
||||||
|
STA WBUF,X
|
||||||
|
INX
|
||||||
|
TAY TEST CHAR
|
||||||
|
BNE .1 END OF LINE
|
||||||
|
CLC FLAG SUCCESSFUL
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* LIST LINE POINTED TO BY <SRCP>
|
||||||
|
*--------------------------------
|
||||||
|
LIST.LINE.AX
|
||||||
|
STA SRCP
|
||||||
|
STX SRCP+1
|
||||||
|
*--------------------------------
|
||||||
|
LIST.CURRENT.LINE
|
||||||
|
JSR CRLF PRINT CARRIAGE RETURN
|
||||||
|
JSR SPC SPACE
|
||||||
|
LDA PROMPT.FLAG
|
||||||
|
BEQ .1 ...NO SPACE SINCE NOT "H"
|
||||||
|
JSR SPC
|
||||||
|
.1 JSR GET.LINE.NUMBER BODY
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
LDA #$20 SPACE
|
||||||
|
.2 JSR CHO PRINT CHAR
|
||||||
|
JSR GET.NEXT.SOURCE.CHAR
|
||||||
|
BNE .2 NOT END YET
|
||||||
|
RTS FINISHED
|
||||||
|
*--------------------------------
|
||||||
|
* FIND KEY IN WBUF
|
||||||
|
* RETURN WITH CARRY CLEAR IF NO MATCH.
|
||||||
|
* RETURN WITH CARRY SET IF MATCH, AND WITH
|
||||||
|
* (PNTR) = INDEX OF START OF MATCH
|
||||||
|
* (X) = INDEX OF LAST CHAR MATCHED + 1
|
||||||
|
*--------------------------------
|
||||||
|
FIND.KEY.IN.WBUF
|
||||||
|
JSR FIND.START.OF.LINE.IN.WBUF
|
||||||
|
LDA PNTR
|
||||||
|
BNE .1 NON-NULL KEY STRING
|
||||||
|
LDA DLIM If delimiter is slash, list
|
||||||
|
CMP #'/' only major labels
|
||||||
|
BEQ .3 ...it is
|
||||||
|
SEC ...no string, so SIGNAL MATCH
|
||||||
|
RTS
|
||||||
|
.3 LDA WBUF,X GET FIRST CHAR
|
||||||
|
JSR ELIMINATE.CASE
|
||||||
|
JMP CHECK.LETTER
|
||||||
|
.1 LDY #39 MAP SEARCH KEY INTO UPPER CASE
|
||||||
|
.2 LDA (KEY.ADDR),Y ...IF LC.FLAG IS ON
|
||||||
|
JSR ELIMINATE.CASE.MAYBE
|
||||||
|
STA (KEY.ADDR),Y
|
||||||
|
DEY
|
||||||
|
BPL .2
|
||||||
|
FIND.KEY.IN.WBUF2
|
||||||
|
LDY #0 START AT FIRST CHAR OF KEY
|
||||||
|
.1 STY KEY.PNTR CURRENT STARTING POINT IN KEY
|
||||||
|
.2 STX BUF.PNTR CURRENT STARTING POINT IN BUFFER
|
||||||
|
.3 LDA (KEY.ADDR),Y NEXT CHAR FROM KEY
|
||||||
|
BEQ .6 END OF KEY, IT MATCHES
|
||||||
|
CMP WILD.CARD NORMALLY CONTROL-W
|
||||||
|
BEQ .8 YES
|
||||||
|
LDA WBUF,X NEXT CHAR FROM BUFFER
|
||||||
|
BEQ .5 END OF BUFFER, DID NOT MATCH
|
||||||
|
JSR ELIMINATE.CASE.MAYBE MAP INTO UPPER CASE IS NEEDED
|
||||||
|
CMP (KEY.ADDR),Y COMPARE WITH KEY CHAR
|
||||||
|
BNE .4 NO MATCH
|
||||||
|
INY ADVANCE KEY POINTER
|
||||||
|
INX ADVANCE BUFFER POINTER
|
||||||
|
BNE .3 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDY KEY.PNTR TRY AGAIN FURTHER INTO BUFFER
|
||||||
|
LDX BUF.PNTR
|
||||||
|
INX
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
.5 LDA $C000
|
||||||
|
CMP #$8D ALLOW 'ABORT' WITH <RETURN>
|
||||||
|
BEQ .11
|
||||||
|
CLC SIGNAL NO MATCH
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.6 LDA KEY.PNTR SEE IF IN FIRST SEGMENT OF KEY
|
||||||
|
BNE .7 NO
|
||||||
|
LDA BUF.PNTR YES
|
||||||
|
STA PNTR
|
||||||
|
.7 SEC SIGNAL MATCH
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.8 LDA KEY.PNTR SEE IF IN FIRST SEGMENT OF KEY
|
||||||
|
BNE .9 NO
|
||||||
|
LDA BUF.PNTR YES
|
||||||
|
STA PNTR
|
||||||
|
.9 INY ADVANCE KEY POINTER
|
||||||
|
LDA (KEY.ADDR),Y PEEK AT NEXT CHAR OF KEY
|
||||||
|
BNE .1 NOT AT END YET
|
||||||
|
.10 LDA WBUF,X AT END, SO SCAN TO END OF BUFFER
|
||||||
|
BEQ .6 FOUND END, AND ALL MATCHES
|
||||||
|
INX ADVANCE BUFFER POINTER
|
||||||
|
BNE .10 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
.11 JMP SOFT HE ABORTED
|
||||||
|
*--------------------------------
|
||||||
|
* REPLACE COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
REPLACE
|
||||||
|
JSR GET.KEY.STRING
|
||||||
|
BCC R.ERR1 (SYN ERROR)
|
||||||
|
LDA PNTR NULL SEARCH FAILS
|
||||||
|
BEQ R.ERR1
|
||||||
|
JSR BACKUP.CHAR.PNTR USE DELIMITER OVER AGAIN
|
||||||
|
LDA #KBUF+40
|
||||||
|
STA KEY.ADDR
|
||||||
|
LDA /KBUF+40
|
||||||
|
STA KEY.ADDR+1 SET UP CALL
|
||||||
|
JSR GET.KEY2
|
||||||
|
BCC R.ERR1 (SYN ERROR)
|
||||||
|
STY REPLACE.LENGTH
|
||||||
|
JSR PARSE.LINE.RANGE
|
||||||
|
JSR HANDLE.REPLACE.OPTIONS
|
||||||
|
LDA #KBUF FOR SEARCH
|
||||||
|
STA KEY.ADDR
|
||||||
|
LDA /KBUF
|
||||||
|
STA KEY.ADDR+1
|
||||||
|
LDA #1
|
||||||
|
STA PNTR PNTR MUST BE > 0 FOR SEARCH
|
||||||
|
.1 JSR GET.LINE.TO.WBUF
|
||||||
|
BCS .5 FINISHED
|
||||||
|
STX WBUF.LENGTH
|
||||||
|
JSR FIND.KEY.IN.WBUF
|
||||||
|
BCC .1
|
||||||
|
LDA #0
|
||||||
|
STA CHANGE.CNT (DEF IS EQ)
|
||||||
|
.2 TXA COMPUTE # CHARS IN TARGET FIELD
|
||||||
|
SEC
|
||||||
|
SBC PNTR
|
||||||
|
STA SOURCE.LENGTH
|
||||||
|
STX MATCH.END
|
||||||
|
JSR REPLACE.REPLACE
|
||||||
|
BCS .5 NEITHER "Y" NOR "N"
|
||||||
|
BNE .3 THEY HIT 'N'
|
||||||
|
INC CHANGE.CNT
|
||||||
|
LDX MATCH.END
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
.3 LDX PNTR MATCH BEGINNING
|
||||||
|
INX +1
|
||||||
|
.4 JSR FIND.KEY.IN.WBUF2
|
||||||
|
BCS .2 LOOP IF ANOTHER
|
||||||
|
LDA CHANGE.CNT ANY CHANGES?
|
||||||
|
BEQ .1 NO - TRY NEXT LINE
|
||||||
|
JSR NML PUT LINE BACK
|
||||||
|
LDA WBUF If replacement line was null,
|
||||||
|
BEQ .6 then just lshow line number
|
||||||
|
LDA LINE.END AND LIST
|
||||||
|
LDX LINE.END+1
|
||||||
|
JSR LIST.LINE.AX
|
||||||
|
JMP .1 TRY NEXT LINE
|
||||||
|
.5 RTS FINISHED
|
||||||
|
.6 LDA WBUF+1
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
LDA WBUF+2
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
JSR CRLF
|
||||||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
||||||
|
JMP .1
|
||||||
|
*--------------------------------
|
||||||
|
R.ERR1 JMP SYNX MISSING STRING
|
||||||
|
R.ERR2 LDY #QREPLNG REP STRNG TOO LONG
|
||||||
|
JMP HARD.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* A MATCH IS FOUND, MAYBE REPLACE
|
||||||
|
* RETURNS: CARRY ZERO
|
||||||
|
* Q CS NE QUIT
|
||||||
|
* N CC NE NO CHG
|
||||||
|
* Y CC EQ CHANGE MADE
|
||||||
|
*--------------------------------
|
||||||
|
REPLACE.REPLACE
|
||||||
|
LDA AUTO.FLAG
|
||||||
|
BMI .40 - = AUTO MODE, + = VERIFY MODE
|
||||||
|
JSR PRINT.AND.PROMPT
|
||||||
|
BNE .99 Q,N EXITS
|
||||||
|
.40 SEC
|
||||||
|
LDA REPLACE.LENGTH
|
||||||
|
SBC SOURCE.LENGTH
|
||||||
|
BCC .60 (IF SHORTER)
|
||||||
|
BEQ .50 (IF EQUAL )
|
||||||
|
*--------------------------------
|
||||||
|
* REPLACE IS LONGER - MAKE SPACE
|
||||||
|
* ACC IS REP.LEN-SRC.LEN
|
||||||
|
*--------------------------------
|
||||||
|
CLC
|
||||||
|
ADC WBUF.LENGTH
|
||||||
|
BCS .45 OVER 256 LEN
|
||||||
|
CMP #WBUF.MAX
|
||||||
|
BCC .51
|
||||||
|
.45 JMP R.ERR2 TOO LONG ERR
|
||||||
|
.51 TAX
|
||||||
|
LDY WBUF.LENGTH
|
||||||
|
STX WBUF.LENGTH (RESET IT)
|
||||||
|
.52 LDA WBUF,Y
|
||||||
|
STA WBUF,X
|
||||||
|
DEX
|
||||||
|
DEY
|
||||||
|
CPY MATCH.END
|
||||||
|
BCS .52
|
||||||
|
INX
|
||||||
|
STX MATCH.END
|
||||||
|
*--------------------------------
|
||||||
|
* MOVE STRING INTO GAP
|
||||||
|
*--------------------------------
|
||||||
|
.50 LDX PNTR MOVE REPLACEMENT STRING INTO GAP
|
||||||
|
LDY #0 POINT AT REPLACEMENT STRING
|
||||||
|
.55 LDA KBUF+40,Y NEXT CHAR FROM REP. STRING
|
||||||
|
BEQ .57 END OF REP. STRING
|
||||||
|
STA WBUF,X STORE IN GAP
|
||||||
|
INX
|
||||||
|
INY
|
||||||
|
BNE .55 ...ALWAYS
|
||||||
|
.57 CLC SIGNAL SUCCESS
|
||||||
|
LDA #0 (CC,EQ)
|
||||||
|
.99 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* REPLACE IS SHORTER - REMOVE EXTRA
|
||||||
|
*--------------------------------
|
||||||
|
.60 LDA PNTR
|
||||||
|
ADC REPLACE.LENGTH
|
||||||
|
TAX
|
||||||
|
LDY MATCH.END
|
||||||
|
STX MATCH.END (RESET IT)
|
||||||
|
.1 LDA WBUF,Y
|
||||||
|
STA WBUF,X
|
||||||
|
INY
|
||||||
|
INX
|
||||||
|
CPX WBUF.LENGTH
|
||||||
|
BCC .1
|
||||||
|
STX WBUF.LENGTH (RESET THIS TOO)
|
||||||
|
BCS .50 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
* PRINT LINE AND GET Y,N,Q
|
||||||
|
* RETURNS: CARRY ZERO
|
||||||
|
* Q CS NE
|
||||||
|
* N CC NE
|
||||||
|
* Y CS EQ
|
||||||
|
*--------------------------------
|
||||||
|
PRINT.AND.PROMPT
|
||||||
|
JSR P.RETURN PRINT <CR>
|
||||||
|
LDX #0
|
||||||
|
.1 LDA WBUF,X
|
||||||
|
BEQ .4 EOL?
|
||||||
|
ORA #$80
|
||||||
|
CMP #$A0 SKIP CONTROL
|
||||||
|
BCC .3
|
||||||
|
CPX PNTR
|
||||||
|
BCC .2
|
||||||
|
CPX MATCH.END
|
||||||
|
BCS .2
|
||||||
|
JSR ELIMINATE.CASE
|
||||||
|
AND #$3F ...DISPLAY IN INVERSE
|
||||||
|
.2 JSR IO.COUT
|
||||||
|
.3 INX
|
||||||
|
BNE .1 NEXT CHAR
|
||||||
|
.4 JSR MON.CLREOL
|
||||||
|
LDY #QREPPRMT PRINT "REPLACE? "
|
||||||
|
YES.OR.NO
|
||||||
|
JSR QT.OUT
|
||||||
|
JSR READ.KEY.WITH.CASE
|
||||||
|
CMP #$A0 CONTROL CHAR?
|
||||||
|
BCC .2 ...YES, DO NOT ECHO
|
||||||
|
JSR MY.COUT
|
||||||
|
AND #$DF NOW IGNORE CASE
|
||||||
|
.2 CMP #'N+$80 NO: RETURN CC, NE
|
||||||
|
BEQ .1 ..."N"
|
||||||
|
CMP #'Y+$80 YES: RETURN CS, EQ
|
||||||
|
SEC NEITHER: CS, NE
|
||||||
|
RTS
|
||||||
|
.1 LSR WAS = N = $CE, SO CLEAR CARRY, SET NE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SET FLAGS FROM CHAR IN ACC
|
||||||
|
* CHAR FLAG MEANING
|
||||||
|
* "A" AUTO.FLAG +=VERIFY, -=AUTO
|
||||||
|
* "U" LC.FLAG +=AS TYPED, -=ACCEPT EITHER CASE
|
||||||
|
*
|
||||||
|
* RETURN CS -> VALID OPTION
|
||||||
|
* CC -> NOT AN OPTION
|
||||||
|
*--------------------------------
|
||||||
|
HANDLE.REPLACE.OPTIONS
|
||||||
|
LSR AUTO.FLAG +=VERIFY MODE
|
||||||
|
LSR LC.FLAG +=CASE AS TYPED
|
||||||
|
.1 JSR GNNB GET NEXT BYTE FROM INPUT LINE
|
||||||
|
BCS .3 END OF LINE
|
||||||
|
JSR ELIMINATE.CASE MAP LOWER TO UPPER
|
||||||
|
CMP #'A AUTO MODE?
|
||||||
|
BNE .2 NO
|
||||||
|
ROR AUTO.FLAG YES, SET SIGN BIT FROM CARRY
|
||||||
|
.2 CMP #'U ACCEPT BOTH CASES?
|
||||||
|
BNE .1 NO
|
||||||
|
ROR LC.FLAG YES, SET SIGN BIT FROM CARRY
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* MAP LOWER CASE INTO UPPER CASE
|
||||||
|
*--------------------------------
|
||||||
|
ELIMINATE.CASE.MAYBE
|
||||||
|
BIT LC.FLAG
|
||||||
|
BPL LCUC3 DON'T DO IT
|
||||||
|
ELIMINATE.CASE
|
||||||
|
PHA SAVE ORIGINAL CHAR
|
||||||
|
ORA #$80 MAKE CANONICAL FORM
|
||||||
|
CMP #$E0 IN LOWER CASE REGION?
|
||||||
|
PLA RESTORE ORIGINAL CHAR
|
||||||
|
BCC LCUC3 ...NOT LOWER CASE REGION
|
||||||
|
AND #$DF ...LC, MAP TO UPPER CASE
|
||||||
|
LCUC3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* LOAD CURRENT LINE NUMBER FROM SRCP
|
||||||
|
*--------------------------------
|
||||||
|
GET.LINE.NUMBER
|
||||||
|
JSR GNB SKIP LENGTH
|
||||||
|
JSR GNB GET LINE NUMBER
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
JSR GNB
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.fndrep
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
115
SCMASM.30/SCMASM.S.IOSTD.txt
Normal file
115
SCMASM.30/SCMASM.S.IOSTD.txt
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
IO.INIT JMP S.IO.INIT
|
||||||
|
IO.WARM JMP S.IO.WARM
|
||||||
|
READ.KEY.WITH.CASE JMP S.READ.KEY.WITH.CASE
|
||||||
|
GET.HORIZ.POSN LDA CH
|
||||||
|
RTS
|
||||||
|
IO.HOME JMP MON.HOME
|
||||||
|
IO.CLREOL JMP MON.CLREOL
|
||||||
|
IO.CLREOP JMP MON.CLREOP
|
||||||
|
IO.UP JMP MON.UP
|
||||||
|
IO.DOWN JMP MON.LF
|
||||||
|
IO.LEFT JMP MON.BS
|
||||||
|
IO.RIGHT JMP MON.ADVANC
|
||||||
|
IO.COUT JMP MON.COUT
|
||||||
|
IO.PICK.SCREEN LDA (BASL),Y
|
||||||
|
RTS
|
||||||
|
IO.HTABX STX CH
|
||||||
|
RTS
|
||||||
|
IO.HTAB STA CH
|
||||||
|
RTS
|
||||||
|
IO.VTAB JMP S.IO.VTAB
|
||||||
|
IO.CASE.TOGGLE LDA LC.MODE
|
||||||
|
EOR #$FF
|
||||||
|
STA LC.MODE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
* (ENTERED THROUGH VECTORS)
|
||||||
|
*--------------------------------
|
||||||
|
S.IO.VTAB
|
||||||
|
STA CV
|
||||||
|
JMP MON.VTAB
|
||||||
|
*--------------------------------
|
||||||
|
S.IO.INIT
|
||||||
|
LDA #40
|
||||||
|
STA SCREEN.WIDTH
|
||||||
|
JSR MON.SETKBD
|
||||||
|
JSR MON.SETVID
|
||||||
|
JSR MON.INIT
|
||||||
|
JMP MON.HOME
|
||||||
|
*--------------------------------
|
||||||
|
S.IO.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
STX LC.MODE POSITIVE VALUE
|
||||||
|
JSR MON.VTAB
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
S.READ.KEY.WITH.CASE
|
||||||
|
LDA $BE43 See if "EXEC" in progress
|
||||||
|
BMI .1 ...Yes, use straight input
|
||||||
|
LDA LC.MODE
|
||||||
|
BMI .2 Yes, use fancy translation
|
||||||
|
.1 JSR MON.RDKEY
|
||||||
|
ORA #$80 Make sure it looks right
|
||||||
|
CLC SIGNAL "NO OPEN APPLE PRESSED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.2
|
||||||
|
LDY CH Set up cursor
|
||||||
|
LDA (BASL),Y Char from screen
|
||||||
|
PHA
|
||||||
|
CMP #$E0 ELIMINATE CASE
|
||||||
|
BCC .25
|
||||||
|
AND #$DF
|
||||||
|
.25 AND #$3F Make it flash
|
||||||
|
ORA #$40
|
||||||
|
STA (BASL),Y
|
||||||
|
PLA
|
||||||
|
JSR MON.READCH
|
||||||
|
BIT $C063 Shift key down?
|
||||||
|
BPL .4 Yes
|
||||||
|
CMP #$C0 No, lower case if letter
|
||||||
|
BCC .3
|
||||||
|
ORA #$20
|
||||||
|
CLC SIGNAL "NO OPEN APPLE PRESSED"
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 CMP #$C0 Shift key down
|
||||||
|
BCC .8 Not a letter key
|
||||||
|
BEQ .7 Shift-P
|
||||||
|
CMP #$DD Shift-M
|
||||||
|
BEQ .5 Yes
|
||||||
|
CMP #$DE Shift-N
|
||||||
|
BNE .6 No
|
||||||
|
.5 AND #$EF Make capital-M or -N
|
||||||
|
.6 CLC SIGNAL "NO OPEN APPLE PRESSED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.7 LDA #$D0 Make capital-P
|
||||||
|
CLC SIGNAL "NO OPEN APPLE PRESSED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.8 CMP #$87 Look for control-shift-A thru -F
|
||||||
|
BCS .10 No
|
||||||
|
CMP #$81 Control-A
|
||||||
|
BCC .10 No, control-P
|
||||||
|
BNE .9 No, control-B thru -F
|
||||||
|
LDA #$C0-$58-1 Control-shift-A = at-sign (@)
|
||||||
|
.9 ADC #$58
|
||||||
|
.10 CLC SIGNAL "NO OPEN APPLE PRESSED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.iostd
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
222
SCMASM.30/SCMASM.S.LDR.txt
Normal file
222
SCMASM.30/SCMASM.S.LDR.txt
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
SPTR .EQ $00
|
||||||
|
DPTR .EQ $02
|
||||||
|
*--------------------------------
|
||||||
|
MLI.UNIT .EQ $BF30
|
||||||
|
MLI.BITMAP .EQ $BF58
|
||||||
|
MLI.PREFIX.FLAG .EQ $BF9A
|
||||||
|
*--------------------------------
|
||||||
|
MON.CROUT .EQ $FD8E
|
||||||
|
SETNORM .EQ $FE84
|
||||||
|
*--------------------------------
|
||||||
|
* sys file execution
|
||||||
|
* --------- ---------
|
||||||
|
* 2000-21FF LOADER
|
||||||
|
* 2200-4AFF 8000-A8FF S-C MACRO ASSEMBLER with 40-col driver
|
||||||
|
* A900-A9FF additional space for longer drivers
|
||||||
|
* 4B00-5FFF AA00-BEFF S-C ProDOS Interface
|
||||||
|
* 6000-60FF A800-A8FF //E 80-COLUMN DRIVER
|
||||||
|
* 6100-61FF A800-A8FF STB80 DRIVER
|
||||||
|
* 6200-63FF A800-A9FF VIDEX VIDEOTERM DRIVER
|
||||||
|
* 6400-65FF A800-A9FF VIDEX ULTRATERM DRIVER
|
||||||
|
* 6600-71FF D400-DFFF ASM PARTICULAR
|
||||||
|
*--------------------------------
|
||||||
|
* BLOAD SCASM (loader and Macro and 40-col driver)
|
||||||
|
* BLOAD B.SCI (ProDOS Interpreter)
|
||||||
|
* BLOAD B.IO.TWO.E (//E 80-COLUMN DRIVER)
|
||||||
|
* BLOAD B.IO.STB80
|
||||||
|
* BLOAD B.IO.VIDEX
|
||||||
|
* BLOAD B.IO.ULTRA
|
||||||
|
* BSAVE SCASM.SYS,A$2000,L$4600
|
||||||
|
*--------------------------------
|
||||||
|
.MA MOVE
|
||||||
|
LDA /]1 DESTINATION
|
||||||
|
LDY /]2 SOURCE BEGINNING
|
||||||
|
LDX /]3-]2+255 # PAGES
|
||||||
|
JSR MOVE
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
STARTUP.SC.MACRO
|
||||||
|
JMP LOAD.SC
|
||||||
|
*--------------------------------
|
||||||
|
DRIVER.FLAG .HS 00
|
||||||
|
*--------------------------------
|
||||||
|
LOAD.SC
|
||||||
|
JSR SELECT.DRIVER
|
||||||
|
>MOVE $AA00,$4B00,$5FFF
|
||||||
|
>MOVE $8000,$2200,$4AFF
|
||||||
|
LDA $C083
|
||||||
|
LDA $C083
|
||||||
|
>MOVE $D400,$6600,$71FF
|
||||||
|
LDA $C082
|
||||||
|
JSR LOAD.DRIVER
|
||||||
|
*--------------------------------
|
||||||
|
*---GET SCREEN TO NORMAL 40------
|
||||||
|
* LDA #$15 CTRL-U, TURNS OFF 80-COLUMN
|
||||||
|
* JSR MON.COUT
|
||||||
|
* JSR SETNORM
|
||||||
|
* JSR MON.INIT
|
||||||
|
* JSR MON.HOME
|
||||||
|
*---ESTABLISH RAM BITMAP---------
|
||||||
|
LDX #BITMAP.SIZE-1
|
||||||
|
.2 LDA MY.BITMAP,X
|
||||||
|
STA MLI.BITMAP,X
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
*---BUILD $3D0-3FF---------------
|
||||||
|
LDX #5
|
||||||
|
.3 LDA IMAGE.3D0,X
|
||||||
|
STA $3D0,X
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
LDX #10
|
||||||
|
.4 LDA IMAGE.3F0,X
|
||||||
|
STA $3F0,X
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
*---Establish HIMEM page---------
|
||||||
|
LDA #$74
|
||||||
|
STA SCI.HIMEM.PAGE
|
||||||
|
STA SCI.BUFFER.PAGES+2 EXEC BUFFER
|
||||||
|
CLC
|
||||||
|
ADC #4
|
||||||
|
STA SCI.BUFFER.PAGES BUF 0
|
||||||
|
ADC #4
|
||||||
|
STA SCI.BUFFER.PAGES+1 BUF 1
|
||||||
|
*---SET A NULL PREFIX------------
|
||||||
|
LDA #0
|
||||||
|
STA MLI.PREFIX.FLAG
|
||||||
|
*---SET SLOT/DRIVE DEFAULTS------
|
||||||
|
LDA MLI.UNIT
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
CMP #$08
|
||||||
|
AND #$07
|
||||||
|
STA SCI.SLOT
|
||||||
|
LDA #1
|
||||||
|
ADC #0
|
||||||
|
STA SCI.DRIVE
|
||||||
|
*--------------------------------
|
||||||
|
IIGS SEC
|
||||||
|
JSR $FE1F
|
||||||
|
BCS .2 ...NOT IIGS
|
||||||
|
*--------------------------------
|
||||||
|
LDY #GS.NUM-1
|
||||||
|
.1 LDA GS.NEW,Y
|
||||||
|
STA FAKE.MONITOR,Y
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
*---START UP ProDOS--------------
|
||||||
|
.2 JMP $8000
|
||||||
|
*--------------------------------
|
||||||
|
GS.NEW LDA #" " COVER UP THE DOLLAR SIGN
|
||||||
|
STA WBUF
|
||||||
|
LDA WBUF-1,X LOOK FOR "HEXNUM=" COMMAND
|
||||||
|
CMP #"="
|
||||||
|
BEQ .1 ...YES, DON'T APPEND " Q"
|
||||||
|
LDA #" "
|
||||||
|
STA WBUF,X APPEND " Q"
|
||||||
|
LDA #"Q"
|
||||||
|
STA WBUF+1,X
|
||||||
|
.1 JMP $FF70
|
||||||
|
GS.NUM .EQ *-GS.NEW
|
||||||
|
*--------------------------------
|
||||||
|
IMAGE.3D0
|
||||||
|
JMP SCI.STARTUP $3D0
|
||||||
|
JMP SCI.STARTUP $3D3
|
||||||
|
IMAGE.3F0
|
||||||
|
.DA $FA59 'BRK' VECTOR
|
||||||
|
.DA SCI.STARTUP,#$BE^$A5 RESET VECTOR
|
||||||
|
JMP SCI.RTS &-VECTOR
|
||||||
|
JMP SCI.RTS Y-VECTOR
|
||||||
|
*--------------------------------
|
||||||
|
MY.BITMAP
|
||||||
|
.HS C3.00.00.00.00.00.00.00 0000-3FFF
|
||||||
|
.HS 00.00.00.00.00.00.00.00 4000-7FFF
|
||||||
|
.HS FF.FF.FF.FF.FF.FF.FF.F3 8000-BFFF
|
||||||
|
BITMAP.SIZE .EQ *-MY.BITMAP
|
||||||
|
*--------------------------------
|
||||||
|
SELECT.DRIVER
|
||||||
|
LDY DRIVER.FLAG
|
||||||
|
BNE .3 ...LOAD SPECIFIC DRIVER
|
||||||
|
LDA $FBB3
|
||||||
|
CMP #6
|
||||||
|
BEQ .3 ...//E OR //C, USE //E DRIVER
|
||||||
|
*---Display menu-----------------
|
||||||
|
JSR MON.HOME
|
||||||
|
LDY #0
|
||||||
|
.1 LDA MENU,Y
|
||||||
|
BEQ .2
|
||||||
|
JSR MON.COUT
|
||||||
|
INY
|
||||||
|
BNE .1
|
||||||
|
*---Get choice-------------------
|
||||||
|
.2 JSR MON.RDKEY
|
||||||
|
EOR #$B0
|
||||||
|
BEQ .2
|
||||||
|
CMP #5
|
||||||
|
BCS .2
|
||||||
|
TAY
|
||||||
|
ORA #$B0
|
||||||
|
JSR MON.COUT
|
||||||
|
JSR MON.CROUT
|
||||||
|
*---(Y) is selected driver-------
|
||||||
|
.3 STY DRIVER.FLAG
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
LOAD.DRIVER
|
||||||
|
LDY DRIVER.FLAG
|
||||||
|
LDA DRIVER.ADDRS,Y
|
||||||
|
BEQ .4 ...40-COLUMN, RETURN NOW
|
||||||
|
TAY
|
||||||
|
LDA /$A800
|
||||||
|
LDX #2
|
||||||
|
JSR MOVE
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* MOVE (X) PAGES FROM YY00 TO AA00
|
||||||
|
*--------------------------------
|
||||||
|
MOVE
|
||||||
|
STA DPTR+1
|
||||||
|
STY SPTR+1
|
||||||
|
LDY #0
|
||||||
|
STY DPTR
|
||||||
|
STY SPTR
|
||||||
|
.1 LDA (SPTR),Y
|
||||||
|
STA (DPTR),Y
|
||||||
|
INY
|
||||||
|
BNE .1
|
||||||
|
INC SPTR+1
|
||||||
|
INC DPTR+1
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
DRIVER.ADDRS
|
||||||
|
.HS 60...00...62...64...61
|
||||||
|
* //E 40 VID ULT STB
|
||||||
|
*--------------------------------
|
||||||
|
MENU
|
||||||
|
.AS -/S-C MACRO ASSEMBLER 2.0 (PRODOS)/
|
||||||
|
.HS 8D8D
|
||||||
|
.AS -/1 -- STANDARD 40-COLUMN/
|
||||||
|
.HS 8D
|
||||||
|
.AS -/2 -- VIDEX VIDEOTERM/
|
||||||
|
.HS 8D
|
||||||
|
.AS -/3 -- VIDEX ULTRATERM/
|
||||||
|
.HS 8D
|
||||||
|
.AS -/4 -- STB-80/
|
||||||
|
.HS 8D8D
|
||||||
|
.AS -/WHICH? /
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
.AS /<<<COPYRIGHT (C) 1985, S-C SOFTWARE CORPORATION>>>/
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.ldr
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
370
SCMASM.30/SCMASM.S.MACRO.txt
Normal file
370
SCMASM.30/SCMASM.S.MACRO.txt
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* .MA DIRECTIVE
|
||||||
|
*--------------------------------
|
||||||
|
PSMA LDA PASS WHICH PASS?
|
||||||
|
BNE .2 PASS 2, SO SET FLAG AND IGNORE
|
||||||
|
LDA #'Z+1 RIGHT BRACKET CODE
|
||||||
|
STA SYMBOL+7
|
||||||
|
LDA #0 CLEAR VALUE BYTES
|
||||||
|
LDX #3
|
||||||
|
.1 STA SYMBOL+2,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
JSR GNNB GET FIRST CHAR OF MACRO NAME
|
||||||
|
LDX #1
|
||||||
|
JSR PACK.NAME
|
||||||
|
CPX #2 NEED AT LEAST TWO CHARS, COUNTING BRACKET
|
||||||
|
BCC .3 NO MACRO NAME
|
||||||
|
STX SYMBOL+6 LENGTH
|
||||||
|
JSR STSRCH
|
||||||
|
BCC .4 DOUBLE DEFN
|
||||||
|
JSR STADD ENTER INTO SYMBOL TABLE
|
||||||
|
.2 SEC SET "INSIDE MACRO DEFINITION" FLAG
|
||||||
|
ROR FLAG.MA
|
||||||
|
RTS RETURN TO MAIN LEVEL OF ASM
|
||||||
|
.3 LDY #QNONAM NO MACRO NAME
|
||||||
|
.HS 2C SKIP NEXT TWO BYTES
|
||||||
|
.4 LDY #QER4 EXTRA DEF'N
|
||||||
|
JMP FIRM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* PACK MACRO LINE
|
||||||
|
*--------------------------------
|
||||||
|
PACK.MACRO.LINE
|
||||||
|
JSR SCAN.TO.OPCODE
|
||||||
|
LDX FLAG.MA IN A MACRO DEF'N?
|
||||||
|
BPL D.SET ...NO, TRY .SE DIRECTIVE
|
||||||
|
LDX PASS WHICH PASS?
|
||||||
|
BNE .10 PASS 2
|
||||||
|
*---PASS 1-----------------------
|
||||||
|
BCS .4 ...OPCODE IS NOT A DIRECTIVE
|
||||||
|
LDX #DIR.QT.MA
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCC .2 NOT .MA
|
||||||
|
.1 LDY #QER2 "BAD OPCODE"
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
.2 JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCC .3 NOT .EM
|
||||||
|
LDA #0 TERMINATE THE SKELETON
|
||||||
|
STA CURRENT.MAJOR.LABEL+1 KILL POSSIBILITY OF LOCAL LABELS
|
||||||
|
* UNTIL ANOTHER MAJOR LABEL
|
||||||
|
JSR ADD.CHAR.TO.SKELETON
|
||||||
|
.11 LSR FLAG.MA
|
||||||
|
.12 SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.3 JSR DIR.SCAN.OR.FAIL SEE IF .IN
|
||||||
|
BCS .1 YES, SO ILLEGAL!
|
||||||
|
* FALL INTO ACCEPTABLE LINE CODE
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDY #0 BACK TO BEGINNING OF LINE
|
||||||
|
BEQ .5 ...ALWAYS
|
||||||
|
.55 LDX #$80 COMPRESSED BLANK TOKEN
|
||||||
|
.6 INX COUNT THE BLANK
|
||||||
|
CPX #$BF MAX BLANK COUNT?
|
||||||
|
BCS .7 YES, OUTPUT TOKEN NOW
|
||||||
|
JSR GNC2 GET NEXT CHARACTER
|
||||||
|
BCS .7 END OF LINE
|
||||||
|
BEQ .6 BLANK, SO COMPRESS IT
|
||||||
|
DEY NON-BLANK, SO BACK UP PNTR
|
||||||
|
.7 TXA COMPRESSED BLANK TOKEN
|
||||||
|
.8 JSR ADD.CHAR.TO.SKELETON
|
||||||
|
.5 JSR GNC2 GET NEXT CHARACTER
|
||||||
|
BCS .9 END OF LINE
|
||||||
|
BEQ .55 ...it is a blank
|
||||||
|
CMP #']' MACRO PARAMETER?
|
||||||
|
BNE .8 ...NO
|
||||||
|
TAX save ']' in X
|
||||||
|
JSR GNC2 GET PARAMETER CODE
|
||||||
|
BCS .7 ...eol, add ']' and end
|
||||||
|
CMP #']'
|
||||||
|
BEQ .8 ...two makes one
|
||||||
|
CMP #'#'
|
||||||
|
BEQ .81 ...]# is valid parameter
|
||||||
|
CMP #'9'+1 HOW ABOUT 1...9
|
||||||
|
BCS .82 ...not a parameter
|
||||||
|
CMP #'1'
|
||||||
|
BCC .82 ...not a parameter
|
||||||
|
.81 LDX #$7F valid parameter
|
||||||
|
.82 DEY back up char pntr
|
||||||
|
JMP .7 go add $7F or ']'
|
||||||
|
*--------------------------------
|
||||||
|
.9 LDA #0 TERMINATE THE LINE
|
||||||
|
JSR ADD.CHAR.TO.SKELETON
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*---PASS 2-----------------------
|
||||||
|
* IF NOT ".EM", JUST LIST THE LINE
|
||||||
|
.10 BCS .12 ...OPCODE IS NOT A DIRECTIVE
|
||||||
|
LDX #DIR.QT.EM
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCC .12 NOT .EM
|
||||||
|
BCS .11 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
* .SET DIRECTIVE
|
||||||
|
*--------------------------------
|
||||||
|
D.SET
|
||||||
|
BCS .1 NOT A DIRECTIVE
|
||||||
|
LDX #DIR.QT.SE
|
||||||
|
JSR DIR.SCAN.OR.FAIL
|
||||||
|
BCS .2 FOUND .SE
|
||||||
|
.1 CLC
|
||||||
|
RTS
|
||||||
|
.2 JSR EXPR.DEFINED GET VALUE
|
||||||
|
JSR GNC.UC.START CHECK FOR VALID LABEL
|
||||||
|
BEQ .6 ...NO LABEL ERROR
|
||||||
|
JSR CHECK.LETTER MUST BE NORMAL LABEL
|
||||||
|
BCC .7 ...DOES NOT START WITH A-Z
|
||||||
|
JSR PACK
|
||||||
|
BCC .7 ...BAD SYMBOL
|
||||||
|
JSR STSRCH
|
||||||
|
BCC .3 ...IN TABLE ALREADY
|
||||||
|
LDA SYMBOL+7
|
||||||
|
ORA #$80
|
||||||
|
STA SYMBOL+7 SET THE .SE FLAG
|
||||||
|
JSR STADD
|
||||||
|
JMP .4
|
||||||
|
.3 LDY #7 CK .SE FLAG
|
||||||
|
>SYM LDA,TPTR
|
||||||
|
BPL .9 DOUBLE DEF IF NOT SET!
|
||||||
|
LDA TPTR USE SAME PTR AS STADD
|
||||||
|
STA PNTR
|
||||||
|
LDA TPTR+1
|
||||||
|
STA PNTR+1
|
||||||
|
LDA PASS HANDLE FORWARD REFERENCES
|
||||||
|
BEQ .5 ...IN PASS ONE
|
||||||
|
DEY POINT AT FLAGS
|
||||||
|
>SYM LDA,PNTR
|
||||||
|
ORA #$40
|
||||||
|
>SYM STA,PNTR
|
||||||
|
.4 JSR P.EXP.VALUE.DASH (IF LISTING)
|
||||||
|
.5 LDY #2 PUT VALUE IN SYMBOL TABLE
|
||||||
|
.8 LDA EXP.VALUE-2,Y
|
||||||
|
>SYM STA,PNTR
|
||||||
|
INY
|
||||||
|
CPY #6
|
||||||
|
BCC .8
|
||||||
|
RTS RETURN TO ASM WITH .CS.
|
||||||
|
.6 JMP NOLBLERR
|
||||||
|
.7 JMP ERR.BS
|
||||||
|
.9 JMP ERR.DBLDF
|
||||||
|
*--------------------------------
|
||||||
|
* ADD CHARACTER TO SKELETON
|
||||||
|
*--------------------------------
|
||||||
|
ADD.CHAR.TO.SKELETON
|
||||||
|
PHA SAVE CHAR
|
||||||
|
.DO AUXMEM
|
||||||
|
LDA EOT+1
|
||||||
|
CMP /$C000
|
||||||
|
BCC .1
|
||||||
|
JMP MFER MEM FULL ERROR
|
||||||
|
.1 STA WRAUX
|
||||||
|
LDX #0
|
||||||
|
PLA
|
||||||
|
STA (EOT,X)
|
||||||
|
STA WRMAIN
|
||||||
|
.ELSE
|
||||||
|
LDA EOT
|
||||||
|
CMP PP
|
||||||
|
LDA EOT+1
|
||||||
|
SBC PP+1
|
||||||
|
BCC .1 ROOM
|
||||||
|
JMP MFER MEM FULL ERROR
|
||||||
|
.1 LDX #0
|
||||||
|
PLA
|
||||||
|
STA (EOT,X)
|
||||||
|
.FIN
|
||||||
|
>INCD EOT
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SCAN TO OPCODE
|
||||||
|
*--------------------------------
|
||||||
|
SCAN.TO.OPCODE
|
||||||
|
JSR GNC.START GET FIRST CHAR
|
||||||
|
BEQ .2 ...BLANK OR END
|
||||||
|
JSR CHECK.COMMENT.CHAR
|
||||||
|
BEQ .3 ...YES, IT IS A COMMENT
|
||||||
|
.1 JSR GNC SCAN TO A BLANK
|
||||||
|
BNE .1 ...NOT BLANK YET
|
||||||
|
.2 JSR GNNB SCAN TO NON-BLANK
|
||||||
|
BCS .3 ...END OF LINE
|
||||||
|
CMP #'.' DIRECTIVE?
|
||||||
|
BNE .3 ...NO
|
||||||
|
JSR GNC.UC GET NEXT BYTE
|
||||||
|
CLC SIGNAL IT IS A DIRECTIVE
|
||||||
|
RTS
|
||||||
|
.3 SEC SIGNAL IT IS NOT A DIRECTIVE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PROCESS MACRO CALL
|
||||||
|
*--------------------------------
|
||||||
|
MACER1 LDY #QNONAM
|
||||||
|
.HS 2C
|
||||||
|
MACER2 LDY #QERR.MACRO
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
MACRO.CALL
|
||||||
|
LDA #'Z+1 MACRO KEY IN SYMBOL TABLE
|
||||||
|
STA SYMBOL+7
|
||||||
|
LDX #1
|
||||||
|
JSR GNC.UC GET FIRST CHAR OF MACRO NAME
|
||||||
|
JSR PACK.NAME
|
||||||
|
CPX #2
|
||||||
|
BCC MACER1 ERROR, NO NAME
|
||||||
|
STX SYMBOL+6 LENGTH OF NAME
|
||||||
|
JSR STSRCH
|
||||||
|
BCS MACER2 ERROR, NO SUCH MACRO
|
||||||
|
JSR P.ORIGIN
|
||||||
|
JSR LIST.SOURCE.IF.LISTING
|
||||||
|
JSR GNNB SCAN TO PARAMETER LIST
|
||||||
|
JSR BACKUP.CHAR.PNTR
|
||||||
|
LDA MACSTK+1 SAVE PNTR FOR LATER
|
||||||
|
PHA
|
||||||
|
LDA MACSTK
|
||||||
|
PHA
|
||||||
|
LDX #0 PROCESS PARAMETER LIST
|
||||||
|
LDA #9 FIND 9 PARAMETERS
|
||||||
|
STA PARAM.CNT
|
||||||
|
.1 JSR GET.ONE.PARAMETER
|
||||||
|
DEC PARAM.CNT
|
||||||
|
BNE .1
|
||||||
|
.2 LDA WBUF-1,X
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
DEX
|
||||||
|
BNE .2
|
||||||
|
PLA PUT OLD MACSTK PNTR ON MACRO STACK
|
||||||
|
JSR PUSH.MACSTK (LOW BYTE)
|
||||||
|
PLA
|
||||||
|
JSR PUSH.MACSTK (HIGH BYTE)
|
||||||
|
LDA SRCP
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
LDA SRCP+1
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
LDA LF.ALL save current list option
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
LDA CALL.NUM STACK CURRENT CALL #
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
LDA CALL.NUM+1
|
||||||
|
JSR PUSH.MACSTK
|
||||||
|
CLC COMPUTE ADDRESS OF SKELETON
|
||||||
|
LDA #7
|
||||||
|
LDY #6 POINT AT LENGTH OF MACRO NAME
|
||||||
|
>SYM ADC,STPNTR NAME LENGTH+7
|
||||||
|
ADC STPNTR
|
||||||
|
STA SRCP
|
||||||
|
LDA STPNTR+1
|
||||||
|
ADC #0
|
||||||
|
STA SRCP+1
|
||||||
|
LDA LF.MACRO
|
||||||
|
ORA LF.ALL DON'T LIST EXPANSION IF NOT LISTING
|
||||||
|
STA LF.ALL
|
||||||
|
INC MACRO.LEVEL
|
||||||
|
>INCD CALL.CNTR COUNT THIS MACRO CALL
|
||||||
|
LDA CALL.CNTR
|
||||||
|
STA CALL.NUM
|
||||||
|
LDA CALL.CNTR+1
|
||||||
|
STA CALL.NUM+1
|
||||||
|
JMP ASM2
|
||||||
|
*--------------------------------
|
||||||
|
* PUSH A BYTE ON MACSTK
|
||||||
|
*--------------------------------
|
||||||
|
PUSH.MACSTK
|
||||||
|
PHA SAVE BYTE TO BE PUSHED
|
||||||
|
.DO AUXMEM
|
||||||
|
LDA MACSTK+1
|
||||||
|
CMP /$0800
|
||||||
|
BCS .1
|
||||||
|
.ELSE
|
||||||
|
LDA EOT
|
||||||
|
CMP MACSTK
|
||||||
|
LDA EOT+1
|
||||||
|
SBC MACSTK+1
|
||||||
|
BCC .1 STILL ROOM
|
||||||
|
.FIN
|
||||||
|
JMP MFER NO ROOM
|
||||||
|
.1 LDA MACSTK
|
||||||
|
BNE .2
|
||||||
|
DEC MACSTK+1
|
||||||
|
.2 DEC MACSTK
|
||||||
|
PLA BYTE TO BE PUSHED
|
||||||
|
LDY #0
|
||||||
|
STA (MACSTK),Y
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET ONE PARAMETER FROM MACRO CALL LINE
|
||||||
|
*--------------------------------
|
||||||
|
GET.ONE.PARAMETER
|
||||||
|
JSR GNC
|
||||||
|
BEQ .2 SPACE OR EOL, NO MORE PARAMETERS
|
||||||
|
CMP #', COMMA
|
||||||
|
BEQ .3 NULL PARAMETER
|
||||||
|
CMP #'" QUOTE
|
||||||
|
BEQ .4 QUOTED PARAMETER
|
||||||
|
.1 STA WBUF,X NORMAL PARAMETER
|
||||||
|
INX
|
||||||
|
JSR GNC
|
||||||
|
BEQ .2 END OF PARAMETER
|
||||||
|
CMP #', COMMA
|
||||||
|
BNE .1 MORE TO PARAMETER
|
||||||
|
BEQ .3 END OF PARAMETER
|
||||||
|
.2 JSR BACKUP.CHAR.PNTR
|
||||||
|
.3 LDA #0
|
||||||
|
STA WBUF,X
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
.4 JSR GNC QUOTED PARAMETER
|
||||||
|
BCS .3 END OF LINE
|
||||||
|
CMP #'"
|
||||||
|
BEQ .5 END OF QUOTED PARAMETER
|
||||||
|
.6 STA WBUF,X
|
||||||
|
INX
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
.5 JSR GNC
|
||||||
|
BEQ .2 END OF PARAMETER LIST
|
||||||
|
CMP #', COMMA
|
||||||
|
BEQ .3
|
||||||
|
BNE .6 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
* DIRECTIVE SCAN OR FAIL
|
||||||
|
* COMPARE NEXT TWO CHARS WITH TABLE ENTRY
|
||||||
|
* ENTER: FIRST CHAR SET UP BY GNC.UC
|
||||||
|
* (X)=OFFSET OF TWO-BYTE ENTRY IN DIR.QTS
|
||||||
|
*--------------------------------
|
||||||
|
DIR.SCAN.OR.FAIL
|
||||||
|
CMP DIR.QTS,X
|
||||||
|
BNE .1 FAIL
|
||||||
|
LDY CHAR.PNTR
|
||||||
|
LDA WBUF,Y NEXT CHAR
|
||||||
|
AND #$DF MAP LOWER CASE TO UPPER CASE
|
||||||
|
CMP DIR.QTS+1,X
|
||||||
|
BNE .1 FAIL
|
||||||
|
JSR GNC.UC SCAN OVER SECOND CHAR
|
||||||
|
SEC SIGNAL SUCCESS
|
||||||
|
RTS
|
||||||
|
.1 CLC SIGNAL FAILURE
|
||||||
|
LDA CURRENT.CHAR RESTORE (A)
|
||||||
|
INX ADVANCE TO NEXT QUOTE
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
DIR.QTS
|
||||||
|
DIR.QT.DO .EQ *-DIR.QTS
|
||||||
|
.AS /DO/
|
||||||
|
DIR.QT.EL .EQ *-DIR.QTS
|
||||||
|
.AS /EL/
|
||||||
|
DIR.QT.FI .EQ *-DIR.QTS
|
||||||
|
.AS /FI/
|
||||||
|
DIR.QT.MA .EQ *-DIR.QTS
|
||||||
|
.AS /MA/
|
||||||
|
DIR.QT.EM .EQ *-DIR.QTS
|
||||||
|
.AS /EM/
|
||||||
|
DIR.QT.IN .EQ *-DIR.QTS
|
||||||
|
.AS /IN/
|
||||||
|
DIR.QT.SE .EQ *-DIR.QTS
|
||||||
|
.AS /SE/
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.macro
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
266
SCMASM.30/SCMASM.S.MCMDS.txt
Normal file
266
SCMASM.30/SCMASM.S.MCMDS.txt
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
HELP
|
||||||
|
LDA #CMD.TBL
|
||||||
|
LDX /CMD.TBL
|
||||||
|
LDY #2
|
||||||
|
JSR HELP.1
|
||||||
|
JSR CRLF
|
||||||
|
LDA SCI.TBLADR
|
||||||
|
LDX SCI.TBLADR+1
|
||||||
|
LDY #4
|
||||||
|
*--------------------------------
|
||||||
|
HELP.1
|
||||||
|
STA .92+1
|
||||||
|
STX .92+2
|
||||||
|
STY .91+1
|
||||||
|
LDY #-1 POINT TO BEGINNING
|
||||||
|
LDX #10
|
||||||
|
LDA #$0D
|
||||||
|
.1 JSR CHO
|
||||||
|
BPL .2
|
||||||
|
JSR MON.PRBL2
|
||||||
|
TYA
|
||||||
|
CLC
|
||||||
|
.91 ADC #0
|
||||||
|
TAY
|
||||||
|
LDX #10
|
||||||
|
.2 INY
|
||||||
|
DEX
|
||||||
|
.92 LDA $5555,Y
|
||||||
|
BNE .1
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
HILO JSR EXPR.DEFINED
|
||||||
|
LDA EXP.VALUE+3 MUST BE 0000XX00
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE
|
||||||
|
BNE HL.RAER
|
||||||
|
LDX EXP.VALUE+1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
HIMEM JSR HILO
|
||||||
|
DEX
|
||||||
|
CPX SYMBOL.BASE
|
||||||
|
BCC HL.RAER ...BELOW OR SAME AS LOMEM
|
||||||
|
CPX SCI.BUFFER.PAGES+2 Start of Exec Buffer
|
||||||
|
BCS HL.RAER ABOVE EXEC BUFFER
|
||||||
|
INX
|
||||||
|
STX SCI.HIMEM.PAGE
|
||||||
|
JMP NEW
|
||||||
|
*--------------------------------
|
||||||
|
HL.RAER JMP RAER
|
||||||
|
*--------------------------------
|
||||||
|
LOMEM JSR HILO
|
||||||
|
CPX #8
|
||||||
|
BCC HL.RAER ...BELOW $800
|
||||||
|
CPX SCI.HIMEM.PAGE
|
||||||
|
BCS HL.RAER ...ABOVE OR SAME AS HIMEM
|
||||||
|
STX SYMBOL.BASE
|
||||||
|
JMP NEW
|
||||||
|
*--------------------------------
|
||||||
|
* SET INCREMENT VALUE FOR AUTO-LINE-NUMBERING
|
||||||
|
*--------------------------------
|
||||||
|
INCREMENT
|
||||||
|
JSR SCAN.1.DECIMAL.NUMBER
|
||||||
|
DEX be sure there was a value
|
||||||
|
BMI SYNX1 ...no, not one
|
||||||
|
.1 LDA A0L,X GET VALUE
|
||||||
|
STA INCREMENT.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
SYNX1 JMP SYNX
|
||||||
|
*--------------------------------
|
||||||
|
* AUTO & MANUAL COMMANDS
|
||||||
|
*--------------------------------
|
||||||
|
AUTO JSR SCAN.1.DECIMAL.NUMBER GET BASE, IF ANY
|
||||||
|
JSR SCAN.1.DECIMAL.NUMBER Get increment, if any
|
||||||
|
DEX Were there any parameters?
|
||||||
|
BMI .4 ...no, use current values
|
||||||
|
DEX ...yes, see if two parameters
|
||||||
|
DEX
|
||||||
|
BMI .2 ...no, only a starting line number
|
||||||
|
.1 LDA A1L,X ...yes, copy new increment
|
||||||
|
STA INCREMENT.VALUE,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
*---X=-1, form "previous" line number---
|
||||||
|
.2 SEC As written, this loop only works
|
||||||
|
.3 LDA A0L+1,X if all values are in page zero
|
||||||
|
SBC INCREMENT.VALUE+1,X because it uses negative
|
||||||
|
STA CURLNO+1,X indexing.
|
||||||
|
INX
|
||||||
|
BEQ .3
|
||||||
|
*---Set the AUTO flag------------
|
||||||
|
.4 SEC SET FLAG
|
||||||
|
.HS 90 "BCC", ALWAYS SKIP NEXT BYTE
|
||||||
|
MANUAL CLC CLEAR FLAG
|
||||||
|
ROR AUTOLN.FLAG
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
*
|
||||||
|
* EDIT COMMAND
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
EDIT
|
||||||
|
JSR GET.KEY.STRING
|
||||||
|
JSR PARSE.LINE.RANGE
|
||||||
|
.1 JSR GET.LINE.TO.WBUF
|
||||||
|
BCC .2
|
||||||
|
RTS Finished with range
|
||||||
|
.2 JSR FIND.KEY.IN.WBUF
|
||||||
|
BCC .1 Not there
|
||||||
|
JSR EDIT.ONE.LINE
|
||||||
|
JMP .1
|
||||||
|
*--------------------------------
|
||||||
|
DATE JSR SCAN.3.DECIMAL.NUMBERS Day, Month, Year
|
||||||
|
CPX #6
|
||||||
|
BCC SYNX1 NEED ALL THREE VALUES
|
||||||
|
LDA A1L MONTH
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL M-MMM00000
|
||||||
|
ORA A0L M-MMMDDDDD
|
||||||
|
STA $BF90
|
||||||
|
LDA A2L YEAR
|
||||||
|
ROL YYYYYYYM
|
||||||
|
STA $BF91
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
TIME JSR SCAN.3.DECIMAL.NUMBERS Hour, Minute
|
||||||
|
CPX #4
|
||||||
|
BCC SYNX1 NEED BOTH VALUES
|
||||||
|
LDA A0L HOUR
|
||||||
|
STA $BF93
|
||||||
|
LDA A1L MINUTE
|
||||||
|
STA $BF92
|
||||||
|
RTS
|
||||||
|
*---------------------------------
|
||||||
|
* RENUMBER COMMAND
|
||||||
|
*
|
||||||
|
* UP TO THREE PARAMETERS
|
||||||
|
* 1: BASE NUMBER (DEFAULT = 1000)
|
||||||
|
* 2: INCREMENT (DEFAULT = 10)
|
||||||
|
* 3: STARTING LINE (DEFAULT = 0)
|
||||||
|
*---------------------------------
|
||||||
|
RENUMBER
|
||||||
|
JSR SCAN.3.DECIMAL.NUMBERS Base, Increment, Starting Line
|
||||||
|
.1 CPX #3 COPY DEFAULTS IF ANY NEEDED
|
||||||
|
BCS .2 NO MORE DEFAULTS NEEDED
|
||||||
|
LDA RENDTA,X
|
||||||
|
STA A0L,X
|
||||||
|
INX
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
.2 LDX #A2L FIND STARTING LINE
|
||||||
|
JSR SERTXT
|
||||||
|
.3 LDA LINE.START TEST IF THRU YET
|
||||||
|
CMP HI.MEM
|
||||||
|
LDA LINE.START+1
|
||||||
|
SBC HI.MEM+1
|
||||||
|
BCS .4 FINISHED
|
||||||
|
LDY #0
|
||||||
|
LDA (LINE.START),Y GET LINE LENGTH
|
||||||
|
PHA SAVE FOR LATER
|
||||||
|
INY
|
||||||
|
LDA A0L STORE NEW LINE NUMBER IN LINE
|
||||||
|
STA (LINE.START),Y
|
||||||
|
ADC A1L ADD INCREMENT AS WE GO
|
||||||
|
STA A0L
|
||||||
|
INY
|
||||||
|
LDA A0H REST OF LINE NUMBER
|
||||||
|
STA (LINE.START),Y
|
||||||
|
ADC A1H ADD REST OF INCREMENT
|
||||||
|
BCS .5 YES, TOO BIG
|
||||||
|
STA A0H OK, AND CARRY CLEAR
|
||||||
|
PLA GET LINE SIZE
|
||||||
|
ADC LINE.START BUMP POINTER TO NEXT LINE
|
||||||
|
STA LINE.START
|
||||||
|
BCC .3
|
||||||
|
INC LINE.START+1
|
||||||
|
BNE .3 ...ALWAYS
|
||||||
|
.4 RTS FINISHED!
|
||||||
|
.5 LDY #QER3 RANGE ERROR
|
||||||
|
JMP HARD.ERROR
|
||||||
|
RENDTA .DA 1000 DEFAULT BASE
|
||||||
|
.DA #10 DEFAULT INCREMENT
|
||||||
|
*** .DA 0 DEFAULT STARTING LINE
|
||||||
|
*--------------------------------
|
||||||
|
* HIDE COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
HIDE JSR MERGE MERGE IF ANY PREVIOUS HIDE
|
||||||
|
LDA #'H
|
||||||
|
STA PROMPT.FLAG NO, HIDE IT ALONE
|
||||||
|
INX NOW X=1
|
||||||
|
.1 LDA HI.MEM,X SAVE HI.MEM
|
||||||
|
STA HIDE.HIMEM,X
|
||||||
|
LDA PP,X
|
||||||
|
STA HI.MEM,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* MERGE COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
MERGE LDA PROMPT.FLAG
|
||||||
|
EOR #'H
|
||||||
|
BNE .1
|
||||||
|
STA PROMPT.FLAG CLEAR PROMPT CHAR
|
||||||
|
LDA HIDE.HIMEM RESTORE HI.MEM
|
||||||
|
STA HI.MEM
|
||||||
|
LDA HIDE.HIMEM+1
|
||||||
|
STA HI.MEM+1
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* NEW COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
NEW JSR RESTORE RESTORE IF IN AN INCLUDE
|
||||||
|
JSR MERGE
|
||||||
|
JSR EMPTY.SOURCE.AREA
|
||||||
|
JMP HARD
|
||||||
|
*--------------------------------
|
||||||
|
* MEMORY COMMAND
|
||||||
|
* PRINT OUT BOUNDS ON SOURCE PROGRAM
|
||||||
|
* AND ON SYMBOL TABLE
|
||||||
|
*--------------------------------
|
||||||
|
MEMORY LDY #QSRCPRG "SOURCE PROGRAM: $"
|
||||||
|
LDX #PP
|
||||||
|
LDA #HI.MEM
|
||||||
|
JSR MEM.LINE
|
||||||
|
LDY #QSYMTBL " SYMBOL TABLE: $"
|
||||||
|
LDX #LO.MEM
|
||||||
|
LDA #EOT
|
||||||
|
MEM.LINE
|
||||||
|
PHA SAVE SECOND VALUE PNTR
|
||||||
|
TXA
|
||||||
|
PHA SAVE FIRST VALUE PNTR
|
||||||
|
JSR QT.OUT
|
||||||
|
PLA GET FIRST VALUE PNTR
|
||||||
|
JSR MEM.HEXVAL
|
||||||
|
JSR P.DASH
|
||||||
|
PLA GET SECOND VALUE PNTR
|
||||||
|
MEM.HEXVAL
|
||||||
|
TAX
|
||||||
|
LDA 1,X
|
||||||
|
JSR MON.PHEX
|
||||||
|
LDA 0,X
|
||||||
|
JMP MON.PHEX
|
||||||
|
*--------------------------------
|
||||||
|
RST JSR EXPR
|
||||||
|
LDY EXP.VALUE
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
*--------------------------------
|
||||||
|
SET.RESET.VECTOR
|
||||||
|
STY MON.RESET
|
||||||
|
STA MON.RESET+1
|
||||||
|
EOR #$A5
|
||||||
|
STA MON.RESET+2
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.mcmds
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
129
SCMASM.30/SCMASM.S.NEWQ.txt
Normal file
129
SCMASM.30/SCMASM.S.NEWQ.txt
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* Y = MESSAGE NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
QT.OUT
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
LDX #0
|
||||||
|
CLC
|
||||||
|
*---Search for message #---------
|
||||||
|
.2 JSR GET.NEXT.NYBBLE
|
||||||
|
BNE .4
|
||||||
|
.3 JSR GET.NEXT.NYBBLE
|
||||||
|
BEQ .3
|
||||||
|
BNE .2
|
||||||
|
.4 EOR #$0F
|
||||||
|
BNE .2
|
||||||
|
DEY
|
||||||
|
BNE .2
|
||||||
|
*---Print the message------------
|
||||||
|
.5 JSR GET.NEXT.NYBBLE
|
||||||
|
TAY
|
||||||
|
LDA FIRST.TABLE,Y
|
||||||
|
BNE .6 ...FREQUENT CHAR
|
||||||
|
JSR GET.NEXT.NYBBLE
|
||||||
|
TAY
|
||||||
|
LDA SECOND.TABLE,Y
|
||||||
|
BNE .6 ...TWO NYBBLE CHAR
|
||||||
|
JSR GET.NEXT.NYBBLE
|
||||||
|
TAY
|
||||||
|
LDA THIRD.TABLE,Y
|
||||||
|
.6 BPL .7 ...END OF MESSAGE
|
||||||
|
PHP
|
||||||
|
JSR MY.COUT
|
||||||
|
PLP
|
||||||
|
BMI .5 ...NEXT CHAR, ALWAYS
|
||||||
|
.7 PLA ...YES
|
||||||
|
TAX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.NYBBLE
|
||||||
|
LDA MESSAGES,X
|
||||||
|
BCS .1 2ND NYBBLE
|
||||||
|
LSR 1ST NYBBLE
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
.1 INX
|
||||||
|
AND #$0F
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
FIRST.TABLE .HS 00
|
||||||
|
.AS -/ABCDEILMNORST /
|
||||||
|
.HS 7F
|
||||||
|
SECOND.TABLE .HS 00
|
||||||
|
.AS -/FGPUXY$.*:?52/
|
||||||
|
.HS 878D
|
||||||
|
THIRD.TABLE .AS -/.HJKQVWZ>1-...../
|
||||||
|
*--------------------------------
|
||||||
|
MESSAGES
|
||||||
|
.AC 0
|
||||||
|
.AC 1/ABCDEILMNORST %/
|
||||||
|
.AC 2/FGPUXY$.*:?52!#/
|
||||||
|
.AC 3/HJKQVWZ>1-...../
|
||||||
|
*--------------------------------
|
||||||
|
.MA QT
|
||||||
|
QN. .SE QN.+1
|
||||||
|
]1 .EQ QN.
|
||||||
|
.AC /]2/
|
||||||
|
.EM
|
||||||
|
QN. .SE 0
|
||||||
|
*--------------------------------
|
||||||
|
.AC "%" ELIMINATE QT# 0
|
||||||
|
>QT QSC,"S-C MACRO ASSEMBLER %"
|
||||||
|
>QT QST,"SYMBOL TABLE%"
|
||||||
|
>QT QSTARS,"#***!! %"
|
||||||
|
>QT QSRCPRG,"#SOURCE PROGRAM: $%"
|
||||||
|
>QT QSYMTBL,"# SYMBOL TABLE: $%"
|
||||||
|
>QT QERROR," ERROR#%"
|
||||||
|
>QT PAGEQT," PAGE %"
|
||||||
|
>QT QREPPRMT,"#REPLACE? %"
|
||||||
|
>QT QERRCNT," ERRORS IN ASSEMBLY#%"
|
||||||
|
>QT QBLOADB," LOAD %"
|
||||||
|
>QT QDELOR,"DELETE ORIGINAL? %"
|
||||||
|
>QT QMEMPRO,"MEM PROTECT%"
|
||||||
|
>QT QMEMFL,"MEM FULL%"
|
||||||
|
>QT QSYNX,"SYNTAX%"
|
||||||
|
>QT QER1,"NO LABEL%"
|
||||||
|
>QT QER2,"BAD OPCODE%"
|
||||||
|
>QT QER3,"RANGE%"
|
||||||
|
>QT QER4,"EXTRA DEFINITION%"
|
||||||
|
>QT QER5,"BAD ADDRESS%"
|
||||||
|
>QT QER6,"UNDEF LABEL%"
|
||||||
|
>QT QER7,"BAD SYMBOL%"
|
||||||
|
>QT QER8,"VALUE > 255%"
|
||||||
|
>QT QER9,"NO NORMAL LABEL%"
|
||||||
|
>QT QNIN,"NESTED .IN%"
|
||||||
|
>QT QERDO,"MISSING .DO%"
|
||||||
|
>QT QERDO2,".DO NEST TOO DEEP%"
|
||||||
|
>QT QSTRLNG,"KEY TOO LONG%"
|
||||||
|
>QT QNONAM,"NO MACRO NAME%"
|
||||||
|
>QT QREPLNG,"REPLACE TOO LONG%"
|
||||||
|
>QT QERR.MACRO,"UNDEF MACRO%"
|
||||||
|
.AC "%" FLUSH LAST BYTE
|
||||||
|
*--------------------------------
|
||||||
|
.DO 0
|
||||||
|
T
|
||||||
|
LDA #1
|
||||||
|
STA 0
|
||||||
|
.1 LDA 0
|
||||||
|
JSR $FDDA
|
||||||
|
LDY 0
|
||||||
|
JSR PRINT.QUOTATION
|
||||||
|
JSR $FD8E
|
||||||
|
INC 0
|
||||||
|
LDA 0
|
||||||
|
CMP #$20
|
||||||
|
BCC .1
|
||||||
|
RTS
|
||||||
|
.FIN
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.newq
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
250
SCMASM.30/SCMASM.S.OUTPUT.txt
Normal file
250
SCMASM.30/SCMASM.S.OUTPUT.txt
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* ERROR PRINTER
|
||||||
|
*---------------------------------
|
||||||
|
FIRM.ERROR
|
||||||
|
SEC SIGNAL FIRM ERROR
|
||||||
|
.HS 24 SKIP NEXT BYTE
|
||||||
|
SOFT.ERROR
|
||||||
|
CLC SIGNAL SOFT ERROR
|
||||||
|
LDA PASS SEE IF IN ASSEMBLY
|
||||||
|
BMI HARD.ERROR ...NO
|
||||||
|
PHP SAVE CLC/SEC STATUS
|
||||||
|
LDA RDROM
|
||||||
|
JSR PRINT.ERROR.MESSAGE
|
||||||
|
>INCD ERROR.COUNT
|
||||||
|
JSR SPC
|
||||||
|
JSR LIST.SOURCE.AT.MARGIN
|
||||||
|
JSR CRLF
|
||||||
|
PLP GET SOFT/FIRM STATUS
|
||||||
|
BCS JMP.SOFT ...FIRM, ABORT ASSEMBLY
|
||||||
|
JMP ASM2 ...SOFT, CONTINUE ASSEMBLY
|
||||||
|
HARD.ERROR
|
||||||
|
JSR PRINT.ERROR.MESSAGE
|
||||||
|
JMP.SOFT
|
||||||
|
JSR RESTORE.IF.IN.INBX
|
||||||
|
JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
RESTORE.IF.IN.INBX
|
||||||
|
BIT INFLAG
|
||||||
|
BVC .1
|
||||||
|
JSR RESTORE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
P.EXP.VALUE.DASH
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
JSR P.EXP.VALUE
|
||||||
|
P.DASH LDA #'-'
|
||||||
|
.HS 2C
|
||||||
|
P.RETURN
|
||||||
|
LDA #$0D
|
||||||
|
.HS 2C
|
||||||
|
SPC LDA #' ' ONE SPACE
|
||||||
|
CHO PHA
|
||||||
|
ORA #$80 CHAR OUT
|
||||||
|
JSR MY.COUT SEND THE CHARACTER
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*---------------------------------
|
||||||
|
* PRINT A <RETURN>
|
||||||
|
* IF IN "SLOW" MODE, DELAY FIRST
|
||||||
|
* CHECK KEYBOARD FOR PAUSE OR ABORT
|
||||||
|
*--------------------------------
|
||||||
|
CRLF BIT FLAG.SPEED CHECK SLOW/FAST SPEED
|
||||||
|
BPL .1 FAST
|
||||||
|
LDA #0 SLOW
|
||||||
|
JSR MON.DELAY
|
||||||
|
.1 JSR CHECK.KEYBOARD.FOR.ABORT
|
||||||
|
BCC P.RETURN ...NO KEYPRESS
|
||||||
|
BEQ JMP.SOFT ...ABORT
|
||||||
|
.2 JSR CHECK.KEYBOARD.FOR.ABORT
|
||||||
|
BCC .2 WAIT FOR KEYPRESS
|
||||||
|
BNE P.RETURN ...CONTINUE
|
||||||
|
BEQ JMP.SOFT ...ABORT
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN .CC. AND .NE. IF NO KEYPRESS
|
||||||
|
* RETURN .CS. AND .EQ. IF <RETURN> TYPED
|
||||||
|
* RETURN .CS. AND .NE. IF ANY OTHER KEY
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.KEYBOARD.FOR.ABORT
|
||||||
|
CLC
|
||||||
|
LDA $C000
|
||||||
|
BPL .1
|
||||||
|
STA $C010
|
||||||
|
CMP #$8D
|
||||||
|
SEC
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PRINT ERROR MESSAGE
|
||||||
|
*--------------------------------
|
||||||
|
PRINT.ERROR.MESSAGE
|
||||||
|
TYA SAVE ERROR #
|
||||||
|
TAX IN X-REG
|
||||||
|
LDY #QSTARS "*** "
|
||||||
|
JSR QT.OUT
|
||||||
|
TXA
|
||||||
|
TAY
|
||||||
|
JSR QT.OUT
|
||||||
|
LDY #QERROR
|
||||||
|
JMP QT.OUT
|
||||||
|
*--------------------------------
|
||||||
|
* PRINT LOCATION COUNTER AND DASH
|
||||||
|
*--------------------------------
|
||||||
|
P.ORIGIN
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
P.ORIGIN.REGARDLESS
|
||||||
|
LDX #7 assume col. 7 after 6-digit origin
|
||||||
|
LDY #2
|
||||||
|
LDA ORGN+2 If > $FFFF, print 3 bytes
|
||||||
|
BNE .1 ...orgn > $FFFF, print 3 bytes
|
||||||
|
DEY ...orgn <$10000, print 2 bytes
|
||||||
|
LDX #5 will end up in col. 5
|
||||||
|
.1 STX EMIT.COLUMN
|
||||||
|
.2 LDA ORGN,Y HIGH BYTE FIRST
|
||||||
|
JSR MON.PHEX
|
||||||
|
DEY
|
||||||
|
BPL .2
|
||||||
|
JMP P.DASH PRINT "-"
|
||||||
|
*--------------------------------
|
||||||
|
P.EMITTED.BYTE
|
||||||
|
JSR CHECK.IF.LISTING
|
||||||
|
LDY EMIT.COLUMN
|
||||||
|
BEQ .2 ...AT BEGINNING OF LINE
|
||||||
|
LDY EMIT.MARGIN
|
||||||
|
LDA ORGN+2
|
||||||
|
BNE .1
|
||||||
|
DEY
|
||||||
|
DEY
|
||||||
|
.1 CPY EMIT.COLUMN
|
||||||
|
BCS .3 ...STILL ROOM ON THIS LINE
|
||||||
|
BIT LF.XTRA.BYTES
|
||||||
|
BMI .4
|
||||||
|
JSR CRLF.WITH.PAGING
|
||||||
|
.2 JSR P.ORIGIN
|
||||||
|
.3 LDY EMIT.COLUMN
|
||||||
|
INY MAKE ROOM FOR NEXT BYTE
|
||||||
|
INY
|
||||||
|
INY
|
||||||
|
STY EMIT.COLUMN
|
||||||
|
JSR SPC
|
||||||
|
LDA OBJ.BYTE
|
||||||
|
JMP MON.PHEX
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
P.MARGIN
|
||||||
|
SEC
|
||||||
|
LDA EMIT.MARGIN
|
||||||
|
SBC EMIT.COLUMN
|
||||||
|
TAX
|
||||||
|
LDA ORGN+2
|
||||||
|
BEQ .1
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
.1 JMP MON.PRBL2
|
||||||
|
*--------------------------------
|
||||||
|
P.EXP.VALUE
|
||||||
|
LDY #3 EXP.VALUE IS 4 BYTES
|
||||||
|
.1 LDA EXP.VALUE,Y TRIM LEADING ZERO BYTES
|
||||||
|
BNE .2 ...FIRST NON-ZERO BYTE
|
||||||
|
DEY
|
||||||
|
BNE .1 ...STILL NOT LAST BYTE
|
||||||
|
.2 TYA
|
||||||
|
ASL
|
||||||
|
ADC #3
|
||||||
|
STA EMIT.COLUMN
|
||||||
|
.3 LDA EXP.VALUE,Y PRINT REST OF EXP.VALUE
|
||||||
|
JSR MON.PHEX
|
||||||
|
DEY
|
||||||
|
BPL .3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.IF.LISTING
|
||||||
|
LDA PASS
|
||||||
|
BEQ .1 ...NO LISTING IN PASS 1
|
||||||
|
LDA LF.ALL
|
||||||
|
BPL .2 ...YES, LIST
|
||||||
|
.1 PLA POP RETURN
|
||||||
|
PLA
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
LIST.LINE.BOTH.PASSES
|
||||||
|
LDA PASS
|
||||||
|
BEQ .1 DEFINITE IN PASS 1
|
||||||
|
LDA LF.ALL
|
||||||
|
BPL .2 ...ALREADY DID CRLF
|
||||||
|
.1 JSR CRLF.WITH.PAGING
|
||||||
|
.2 JSR P.ORIGIN.REGARDLESS
|
||||||
|
JMP LIST.SOURCE.REGARDLESS
|
||||||
|
*---------------------------------
|
||||||
|
* CONVERT LINE NUMBER
|
||||||
|
* (CURRENT.LINE.NUMBER) = NUMBER TO USE
|
||||||
|
*---------------------------------
|
||||||
|
CONVERT.LINE.NUMBER.BOTH
|
||||||
|
LDA #$C0 PRINT FLAG ON, STORE FLAG ON
|
||||||
|
.HS 2C SKIP NEXT 2 BYTES
|
||||||
|
CONVERT.LINE.NUMBER.STORE
|
||||||
|
LDA #$80 PRINT FLAG OFF, STORE FLAG ON
|
||||||
|
.HS 2C SKIP NEXT 2 BYTES
|
||||||
|
CONVERT.LINE.NUMBER.PRINT
|
||||||
|
LDA #$40 PRINT FLAG ON, STORE FLAG OFF
|
||||||
|
PHA
|
||||||
|
LDX #3 CONVERT 4 DIGITS
|
||||||
|
LDA CURRENT.LINE.NUMBER
|
||||||
|
CMP #10000
|
||||||
|
LDA CURRENT.LINE.NUMBER+1
|
||||||
|
SBC /10000
|
||||||
|
BCC .1 4 DIGITS WILL DO IT
|
||||||
|
INX 5 DIGITS
|
||||||
|
.1 PLA
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT (CURRENT.LINE.NUMBER)
|
||||||
|
* (X) = ONE LESS THAN NUMBER OF DIGITS
|
||||||
|
* (A) = FLAGS: BIT 7 = 1 MEANS TO STORE AT WBUF,Y
|
||||||
|
* BIT 6 = 1 MEANS TO PRINT
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.LINE.NUMBER
|
||||||
|
STA CONV.CTRL
|
||||||
|
.5 LDA #$B0 SET DIGIT TO ASCII ZERO
|
||||||
|
.1 PHA PUSH DIGIT ON STACK
|
||||||
|
SEC SUBTRACT CURRENT DIVISOR
|
||||||
|
LDA CURRENT.LINE.NUMBER
|
||||||
|
SBC PLNTBL,X
|
||||||
|
PHA SAVE BYTE ON STACK
|
||||||
|
LDA CURRENT.LINE.NUMBER+1
|
||||||
|
SBC PLNTBH,X
|
||||||
|
BCC .2 LESS THAN DIVISOR
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
PLA GET LOW BYTE OFF STACK
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
PLA GET DIGIT FROM STACK
|
||||||
|
ADC #0 INCREMENT DIGIT
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
.2 PLA DISCARD BYTE FROM STACK
|
||||||
|
PLA GET DIGIT FROM STACK
|
||||||
|
BIT CONV.CTRL
|
||||||
|
BVC .3 NO PRINT
|
||||||
|
JSR MON.COUT PRINT CHARACTER
|
||||||
|
.3 BIT CONV.CTRL TEST BUFFER STORAGE FLAG
|
||||||
|
BPL .4 OFF, DO NOT STORE IN BUFFER
|
||||||
|
STA WBUF,Y
|
||||||
|
INY
|
||||||
|
.4 DEX NEXT DIGIT
|
||||||
|
BPL .5
|
||||||
|
RTS RETURN
|
||||||
|
*---------------------------------
|
||||||
|
PLNTBL .DA #1
|
||||||
|
.DA #10
|
||||||
|
.DA #100
|
||||||
|
.DA #1000
|
||||||
|
.DA #10000
|
||||||
|
PLNTBH .DA /1
|
||||||
|
.DA /10
|
||||||
|
.DA /100
|
||||||
|
.DA /1000
|
||||||
|
.DA /10000
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.output
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
76
SCMASM.30/SCMASM.S.PARAM.txt
Normal file
76
SCMASM.30/SCMASM.S.PARAM.txt
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
*--------------------------------
|
||||||
|
* ENTRY POINTS AND USER EXITS
|
||||||
|
*--------------------------------
|
||||||
|
* HARD ENTRY
|
||||||
|
HARD JSR HARD.INIT
|
||||||
|
*--------------------------------
|
||||||
|
* SOFT ENTRY
|
||||||
|
JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* USER DEFINED COMMAND
|
||||||
|
USR JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* USER PRINT ROUTINE
|
||||||
|
PRT JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* USER ESC-U FUNCTION
|
||||||
|
USER.ESC.U
|
||||||
|
JMP RDL.ERR
|
||||||
|
*--------------------------------
|
||||||
|
* USER "." COMMAND
|
||||||
|
USER.CMD JMP SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* USER OBJECT CODE STORAGE
|
||||||
|
USER.OBJECT.BYTE
|
||||||
|
JMP STORE.OBJECT.BYTE
|
||||||
|
*--------------------------------
|
||||||
|
* USER ASSEMBLER DIRECTIVE
|
||||||
|
PSUSER JMP CMNT
|
||||||
|
*--------------------------------
|
||||||
|
* TAB CONTROL CHARACTER AND TAB STOPS
|
||||||
|
TAB.CHAR .DA #CHR.CTRL.I
|
||||||
|
TAB.SETTINGS .DA #14,#18,#27,#32,#0
|
||||||
|
*--------------------------------
|
||||||
|
* USER COMMENT CHARACTER
|
||||||
|
* (IN ESC-L FROM COLUMN 6)
|
||||||
|
*--------------------------------
|
||||||
|
USER.COM.DELIM .DA #CHR.DASH
|
||||||
|
*--------------------------------
|
||||||
|
* COMPRESSION LOWER LIMIT
|
||||||
|
* =4 IF DESIRE COMPRESSION
|
||||||
|
* =255 IF DO NOT DESIRE COMPRESSION
|
||||||
|
*--------------------------------
|
||||||
|
COMPRESSION.LIMIT .HS 04
|
||||||
|
*--------------------------------
|
||||||
|
* WILD CARD CHARACTER FOR SEARCH STRING
|
||||||
|
*--------------------------------
|
||||||
|
WILD.CARD .HS 17 CONTROL-W
|
||||||
|
*--------------------------------
|
||||||
|
* OUTPUT A SINGLE CHARACTER TO SCREEN
|
||||||
|
*--------------------------------
|
||||||
|
MY.COUT JMP MON.COUT
|
||||||
|
*--------------------------------
|
||||||
|
USER.MEM.LO .DA $0000
|
||||||
|
USER.MEM.HI .DA $0000
|
||||||
|
*--------------------------------
|
||||||
|
* LINKAGE TO FULL SCREEN EDITOR
|
||||||
|
*--------------------------------
|
||||||
|
LINK.FSE
|
||||||
|
JMP GNL <<<REPLACE WITH ADDRESS OF F.S.E.>>>
|
||||||
|
*--------------------------------
|
||||||
|
JMP GNC.UC
|
||||||
|
JMP GNNB
|
||||||
|
JMP CMNT
|
||||||
|
JMP ERBA
|
||||||
|
JMP EMIT
|
||||||
|
*--------------------------------
|
||||||
|
BOTTOM.OF.SCREEN
|
||||||
|
.DA #23 CHANGE TO 31 OR 47 FOR LONGER SCREENS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.param
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
102
SCMASM.30/SCMASM.S.PLINE.txt
Normal file
102
SCMASM.30/SCMASM.S.PLINE.txt
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* PARSE LINE RANGE
|
||||||
|
* START END CARRY
|
||||||
|
* <EOL> (PP) (HI.MEM) SET
|
||||||
|
* #<EOL> # # CLEAR
|
||||||
|
* #1,#2<EOL> #1 #2 CLEAR
|
||||||
|
* #, # (HI.MEM) CLEAR
|
||||||
|
* ,# (PP) # CLEAR
|
||||||
|
*---------------------------------
|
||||||
|
PARSE.LINE.RANGE
|
||||||
|
JSR SETUP.TEXT.POINTERS
|
||||||
|
JSR GNNB.AUC GET NEXT NON-BLANK CHAR
|
||||||
|
BCS .4 EOL, RETURN WITH CARRY SET
|
||||||
|
BEQ .1 COMMA, SO START AT PP
|
||||||
|
JSR SCAN.LINE.NUMBER
|
||||||
|
BCS .5
|
||||||
|
LDA LINE.START
|
||||||
|
STA SRCP
|
||||||
|
LDA LINE.START+1
|
||||||
|
STA SRCP+1
|
||||||
|
JSR GNNB.AUC GET NEXT NON-BLANK AFTER LINE NUMBER
|
||||||
|
BCS .2 EOL, SO ONLY THIS ONE LINE
|
||||||
|
BNE .5 NOT COMMA, SO ERROR
|
||||||
|
.1 JSR GNNB.AUC GET NEXT NON-BLANK AFTER COMMA
|
||||||
|
BCS .3 EOL, SO GO THRU HI.MEM
|
||||||
|
BEQ .3 COMMA, SAME AS EOL
|
||||||
|
JSR SCAN.LINE.NUMBER
|
||||||
|
BCS .5
|
||||||
|
.2 LDA LINE.END
|
||||||
|
STA ENDP
|
||||||
|
LDA LINE.END+1
|
||||||
|
STA ENDP+1
|
||||||
|
.3 CLC FLAG WE GOT AT LEAST ONE NUMBER
|
||||||
|
.4 RTS
|
||||||
|
.5 JMP SYNX
|
||||||
|
*---------------------------------
|
||||||
|
* SCAN INPUT LINE FOR DIGIT OR PERIOD
|
||||||
|
* IF FIND DIGIT, CONVERT LINE NUMBER
|
||||||
|
* AND SEARCH FOR IT
|
||||||
|
* IF FIND PERIOD, SEARCH FOR <CURLNO>
|
||||||
|
* IF NEITHER, RETURN WITH CARRY SET
|
||||||
|
*---------------------------------
|
||||||
|
SCAN.LINE.NUMBER
|
||||||
|
CMP #'. DOT: USE (CURLNO)
|
||||||
|
BEQ .1
|
||||||
|
EOR #$30
|
||||||
|
CMP #10
|
||||||
|
BCS .2 NOT DOT NOR DIGIT, EXIT CARRY SET
|
||||||
|
JSR DECN CONVERT THE NUMBER
|
||||||
|
JSR BACKUP.CHAR.PNTR
|
||||||
|
LDX #SYM.VALUE
|
||||||
|
.HS 2C SKIP OVER NEXT 2 BYTES
|
||||||
|
.1 LDX #CURLNO
|
||||||
|
JSR SERTXT FIND LINE
|
||||||
|
CLC SIGNAL GOOD NUMBER
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* LOAD PP --> SRCP, HI.MEM --> ENDP
|
||||||
|
*--------------------------------
|
||||||
|
SETUP.TEXT.POINTERS
|
||||||
|
LDA PP ASSUME PP THRU HI.MEM
|
||||||
|
STA SRCP
|
||||||
|
LDA PP+1
|
||||||
|
STA SRCP+1
|
||||||
|
LDA HI.MEM
|
||||||
|
STA ENDP
|
||||||
|
LDA HI.MEM+1
|
||||||
|
STA ENDP+1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CMP.SRCP.ENDP
|
||||||
|
LDA SRCP
|
||||||
|
CMP ENDP
|
||||||
|
LDA SRCP+1
|
||||||
|
SBC ENDP+1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT NON-BLANK CHARACTER
|
||||||
|
* AND CHECK FOR A, U, OR COMMA
|
||||||
|
* SET CARRY IF A, U, OR EOL
|
||||||
|
* SET EQ IF A, U, EOL, OR COMMA
|
||||||
|
*--------------------------------
|
||||||
|
GNNB.AUC
|
||||||
|
JSR GNNB NEXT NON-BLANK, CONV LOWER TO UPPER
|
||||||
|
BCS .1 EOL
|
||||||
|
CMP #'A
|
||||||
|
BEQ .1
|
||||||
|
CMP #'U
|
||||||
|
BEQ .1
|
||||||
|
CMP #',
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
.1 JSR BACKUP.CHAR.PNTR
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.pline
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
126
SCMASM.30/SCMASM.S.PSYM.txt
Normal file
126
SCMASM.30/SCMASM.S.PSYM.txt
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
*--------------------------------
|
||||||
|
* PRINT SYMBOL TABLE IN ALPHABETICAL ORDER
|
||||||
|
*--------------------------------
|
||||||
|
SYMBOLS
|
||||||
|
STPRNT LDY #2 SKIP OVER .TF PSEUDO-SYMBOLS
|
||||||
|
.1 STY PNTR
|
||||||
|
LDA HSHTBL,Y
|
||||||
|
STA STPNTR
|
||||||
|
LDA HSHTBL+1,Y
|
||||||
|
BEQ .5
|
||||||
|
STA STPNTR+1
|
||||||
|
*---PRINT VALUE AND DASH---------
|
||||||
|
.2 LDY #2 POINT AT VALUE
|
||||||
|
.25 >SYM LDA,STPNTR
|
||||||
|
STA SYM.VALUE-2,Y SAVE FOR LOCAL OFFSETS
|
||||||
|
INY
|
||||||
|
CPY #6
|
||||||
|
BCC .25
|
||||||
|
LDY #3
|
||||||
|
.26 LDA SYM.VALUE,Y
|
||||||
|
BNE .27 ...NON-ZERO BYTE
|
||||||
|
JSR SPC
|
||||||
|
JSR SPC
|
||||||
|
DEY
|
||||||
|
BNE .26 ...UNTIL LAST BYTE
|
||||||
|
.27 LDA SYM.VALUE,Y
|
||||||
|
JSR MON.PHEX
|
||||||
|
DEY
|
||||||
|
BPL .27 ...INCLUDE LAST BYTE
|
||||||
|
JSR P.DASH
|
||||||
|
JSR SPC
|
||||||
|
*---PRINT NAME-------------------
|
||||||
|
LDY #6
|
||||||
|
>SYM LDA,STPNTR GET NAME LENGTH
|
||||||
|
PHA SAVE AGAIN FOR LOCAL LABELS FLAG
|
||||||
|
AND #$3F ISOLATE LENGTH
|
||||||
|
TAX
|
||||||
|
.3 INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
JSR CHO
|
||||||
|
DEX
|
||||||
|
BNE .3
|
||||||
|
*---CHECK FOR LOCAL LABELS-------
|
||||||
|
PLA GET LENGTH AND FLAGS
|
||||||
|
BMI .6 LOCAL LABELS
|
||||||
|
*---NEXT LABEL-------------------
|
||||||
|
.4 JSR CRLF.WITH.PAGING
|
||||||
|
LDY #1 POINT AT POINTER
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
PHA
|
||||||
|
DEY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
STA STPNTR
|
||||||
|
PLA
|
||||||
|
STA STPNTR+1
|
||||||
|
BNE .2 NEXT SYMBOL IN THIS CHAIN, IF ANY
|
||||||
|
.5 LDY PNTR
|
||||||
|
INY
|
||||||
|
INY
|
||||||
|
CPY #54 # BYTES IN HASH POINTER TABLE
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*---PRINT LOCAL LABELS-----------
|
||||||
|
.6 AND #$3F POINT AT FIRST LOCAL LABEL
|
||||||
|
CLC
|
||||||
|
ADC #7
|
||||||
|
TAY
|
||||||
|
LDA #1 FORCE CRLF BEFORE 1ST LABEL
|
||||||
|
STA EMIT.COLUMN
|
||||||
|
.7 >SYM LDA,STPNTR
|
||||||
|
BEQ .4 END OF LOCALS
|
||||||
|
AND #$7F ISOLATE NAME
|
||||||
|
PHA SAVE NAME OF SYMBOL
|
||||||
|
STY YSAVE SAVE POINTER
|
||||||
|
DEC EMIT.COLUMN
|
||||||
|
BNE .9 ...UNLESS NEED A NEW LINE
|
||||||
|
JSR CRLF.WITH.PAGING CLOBBERS Y-REG IF FORMFEED
|
||||||
|
LDY #8
|
||||||
|
.81 JSR SPC
|
||||||
|
DEY
|
||||||
|
BNE .81
|
||||||
|
LDY #7 ...SEVEN PER LINE
|
||||||
|
LDA SYM.VALUE+2
|
||||||
|
BEQ .82
|
||||||
|
LDY #5 ...FIVE PER LINE
|
||||||
|
.82 STY EMIT.COLUMN
|
||||||
|
.9 JSR SPC
|
||||||
|
JSR SPC
|
||||||
|
LDA #CHR.PERIOD
|
||||||
|
JSR CHO
|
||||||
|
PLA GET NAME
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
LDA #0
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
LDX #1 ONLY TWO DIGITS
|
||||||
|
LDA #$40 PRINT ONLY, DO NOT STORE IN WBUF
|
||||||
|
JSR CONVERT.LINE.NUMBER
|
||||||
|
LDA #'=' EQUAL SIGN
|
||||||
|
JSR CHO
|
||||||
|
LDY YSAVE GET VALUE OF SYMBOL
|
||||||
|
INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
CLC
|
||||||
|
ADC SYM.VALUE
|
||||||
|
PHA
|
||||||
|
LDA SYM.VALUE+1
|
||||||
|
ADC #0
|
||||||
|
PHA
|
||||||
|
LDA SYM.VALUE+2
|
||||||
|
ADC #0
|
||||||
|
BEQ .10 PRINT ONLY TWO BYTES
|
||||||
|
JSR MON.PHEX
|
||||||
|
.10 PLA
|
||||||
|
JSR MON.PHEX
|
||||||
|
PLA
|
||||||
|
JSR MON.PHEX
|
||||||
|
INY
|
||||||
|
BNE .7 ...ALWAYS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.psym
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
411
SCMASM.30/SCMASM.S.RLINE.txt
Normal file
411
SCMASM.30/SCMASM.S.RLINE.txt
Normal file
@ -0,0 +1,411 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.MA JTBL
|
||||||
|
.DA #$]1,]2-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
CHAR.TABLES
|
||||||
|
CHARS.FOR.COMMANDS .EQ *-CHAR.TABLES
|
||||||
|
>JTBL 22,ECHO.LINE "--ECHO REST OF LINE
|
||||||
|
>JTBL 2D,PASS.CMD.TO.PRODOS DASH COMMAND
|
||||||
|
>JTBL 2E,USER.CMD .--USER DOT COMMAND
|
||||||
|
>JTBL 2F,LINK.FSE /--LINK TO F.S.E.
|
||||||
|
>JTBL 3F,HELP ?--list commands
|
||||||
|
>JTBL 00,NML other, try numbered line
|
||||||
|
*--------------------------------
|
||||||
|
CHARS.FOR.READ.LINE.1 .EQ *-CHAR.TABLES
|
||||||
|
>JTBL 83,RDL.CATALOG ^C--MACRO FOR "CATALOG"
|
||||||
|
>JTBL 85,RDL.EDIT ^E--MACRO FOR "EDIT "
|
||||||
|
>JTBL 86,RDL.FIND ^F--MACRO FOR "FIND "
|
||||||
|
>JTBL 8C,RDL.LIST ^L--MACRO FOR "LIST "
|
||||||
|
>JTBL 90,RDL.PREFIX ^P--MACRO FOR "PREFIX"
|
||||||
|
CHARS.FOR.READ.LINE.2 .EQ *-CHAR.TABLES
|
||||||
|
>JTBL 88,RDL.BACKSPACE ^H--BACKSPACE
|
||||||
|
>JTBL 8A,RDL.DOWN ^J--DOWN ARROW KEY
|
||||||
|
>JTBL 8B,RDL.UP ^K--UP ARROW KEY
|
||||||
|
>JTBL 8D,RDL.EOL ^M--CARRIAGE RETURN
|
||||||
|
>JTBL 8F,RDL.OVERRIDE ^O--OVERRIDE
|
||||||
|
>JTBL 93,RDL.TOGGLE ^S--TOGGLE CASE FLAG
|
||||||
|
>JTBL 95,RDL.RITARR ^U--RIGHT ARROW
|
||||||
|
>JTBL 98,RDL.RUBOUT ^X--RUBOUT LINE
|
||||||
|
>JTBL 9B,RDL.ESCAPE ESC--ESCAPE MODE
|
||||||
|
>JTBL 00,RDL.ERR
|
||||||
|
*--------------------------------
|
||||||
|
CHARS.FOR.ESCAPE .EQ *-CHAR.TABLES
|
||||||
|
>JTBL C0,IO.HOME @--CLEAR SCREEN AND HOME
|
||||||
|
>JTBL C1,IO.RIGHT A--MOVE CURSOR RIGHT
|
||||||
|
>JTBL C2,IO.LEFT B--MOVE CURSOR LEFT
|
||||||
|
>JTBL C3,IO.DOWN C--MOVE CURSOR DOWN
|
||||||
|
>JTBL C4,IO.UP D--MOVE CURSOR UP
|
||||||
|
>JTBL C5,IO.CLREOL E--CLEAR TO END OF LINE
|
||||||
|
>JTBL C6,IO.CLREOP F--CLEAR TO END OF SCREEN
|
||||||
|
>JTBL C9,IO.UP I--MOVE CURSOR UP
|
||||||
|
>JTBL CA,IO.LEFT J--MOVE CURSOR LEFT
|
||||||
|
>JTBL CB,IO.RIGHT K--MOVE CURSOR RIGHT
|
||||||
|
>JTBL CC,ESCAPE.L L--"LOAD ..." OR "*---..."
|
||||||
|
>JTBL CD,IO.DOWN M--MOVE CURSOR DOWN
|
||||||
|
>JTBL D3,ESCAPE.S S--AUTO-SAVE LINE
|
||||||
|
>JTBL D5,USER.ESC.U U--USER COMMAND
|
||||||
|
>JTBL AE,ESCAPE.DOT .--LIS., COMMAND
|
||||||
|
>JTBL 88,IO.LEFT ^H--LEFT ARROW KEY
|
||||||
|
>JTBL 95,IO.RIGHT ^U--RIGHT ARROW KEY
|
||||||
|
>JTBL 8A,IO.DOWN ^J--DOWN ARROW KEY
|
||||||
|
>JTBL 8B,IO.UP ^K--UP ARROW KEY
|
||||||
|
>JTBL 00,RDL.ESC.END END ESCAPE MODE
|
||||||
|
*--------------------------------
|
||||||
|
CHARS.FOR.EDIT .EQ *-CHAR.TABLES
|
||||||
|
>JTBL 80,E.ZAP ^@ -- Clear to EOL
|
||||||
|
>JTBL 81,E.INS ^A -- Add (Insert)
|
||||||
|
>JTBL 82,E.BEG ^B
|
||||||
|
>JTBL 84,E.DEL ^D
|
||||||
|
>JTBL 86,E.FIND ^F
|
||||||
|
>JTBL 88,E.BKSP ^H
|
||||||
|
>JTBL 89,E.TABI ^I -- Clear to tab
|
||||||
|
>JTBL 8C,E.DOWN ^L
|
||||||
|
>JTBL 8D,E.RET ^M
|
||||||
|
>JTBL 8E,E.END ^N
|
||||||
|
>JTBL 8F,E.OVR ^O
|
||||||
|
>JTBL 91,E.RETQ ^Q -- Clear to EOL, Quit
|
||||||
|
>JTBL 92,E.RESTORE ^R -- Restore original line
|
||||||
|
>JTBL 93,E.TOGGLE ^S -- TOGGLE CASE FLAG
|
||||||
|
>JTBL 94,E.TAB ^T
|
||||||
|
>JTBL 95,E.RIT ^U
|
||||||
|
>JTBL 98,E.ABORT ^X
|
||||||
|
>JTBL 00,E.ILLCHAR
|
||||||
|
*--------------------------------
|
||||||
|
RDL.TOGGLE
|
||||||
|
JSR IO.CASE.TOGGLE
|
||||||
|
JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
RDL.UP
|
||||||
|
JSR IO.UP
|
||||||
|
JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
RDL.DOWN
|
||||||
|
JSR IO.DOWN
|
||||||
|
JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
* HANDLE TABULATION
|
||||||
|
*--------------------------------
|
||||||
|
TAB TXA SEE IF IN COLUMN 1
|
||||||
|
BEQ .4 YES, AUTO-LINE-NUMBER
|
||||||
|
.3 JSR E.CHECK.TAB
|
||||||
|
BCS .5 ONE MORE SPACE
|
||||||
|
LDA #CHR.BLANK
|
||||||
|
JSR INSTALL.CHAR
|
||||||
|
BCC .3 MORE TO GO
|
||||||
|
JMP RDL.RUBOUT
|
||||||
|
*--------------------------------
|
||||||
|
.4 CLC ADD INCREMENT TO CURRENT LINE #
|
||||||
|
LDA CURLNO
|
||||||
|
ADC INCREMENT.VALUE
|
||||||
|
STA CURRENT.LINE.NUMBER
|
||||||
|
LDA CURLNO+1
|
||||||
|
ADC INCREMENT.VALUE+1
|
||||||
|
STA CURRENT.LINE.NUMBER+1
|
||||||
|
LDY #0
|
||||||
|
JSR CONVERT.LINE.NUMBER.BOTH STORE AND PRINT NUMBER
|
||||||
|
TYA
|
||||||
|
TAX
|
||||||
|
*--------------------------------
|
||||||
|
.5 LDA #CHR.BLANK
|
||||||
|
JMP RDL.ADD.CHAR
|
||||||
|
*--------------------------------
|
||||||
|
* READ LINE SUBROUTINE
|
||||||
|
*--------------------------------
|
||||||
|
READ.LINE
|
||||||
|
JSR GET.HORIZ.POSN
|
||||||
|
TAX TEST FOR POSITION=0
|
||||||
|
BEQ RDL1 DON'T OUTPUT CRLF
|
||||||
|
RDL0 JSR CRLF
|
||||||
|
RDL1 LDA PROMPT.FLAG
|
||||||
|
JSR CHO NULL, "I", OR "H"
|
||||||
|
LDA #':' COLON PROMPT
|
||||||
|
JSR CHO
|
||||||
|
LDX #0 START NEW LINE
|
||||||
|
STX WBUF CLEAR OUT "$" FROM COL. 1 (JUST IN CASE)
|
||||||
|
BIT AUTOLN.FLAG SEE IF IN "AUTO" MODE
|
||||||
|
BMI TAB ...YES
|
||||||
|
RDL3 JSR READ.KEY.WITH.CASE
|
||||||
|
BCS RDL.ESCAPE.2E
|
||||||
|
LDY WBUF SEE IF IN $ OR " MODE
|
||||||
|
CPY #$A2 "?
|
||||||
|
BEQ .2
|
||||||
|
CPY #$A4 $?
|
||||||
|
BEQ .2
|
||||||
|
CMP TAB.CHAR <<ALLOW TAB.CHAR TO BE NON-CTRL
|
||||||
|
BEQ TAB
|
||||||
|
LDY #CHARS.FOR.READ.LINE.1
|
||||||
|
.HS 2C
|
||||||
|
.2 LDY #CHARS.FOR.READ.LINE.2
|
||||||
|
CMP #CHR.BLANK SEE IF CONTROL CHAR
|
||||||
|
BCS RDL.ADD.CHAR NO
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
JMP SEARCH.CHAR.TABLES
|
||||||
|
*--------------------------------
|
||||||
|
RDL.ERR
|
||||||
|
JSR MON.BELL ALARM IF NOT ONE OF THE ABOVE
|
||||||
|
JMP RDL3 AND IGNORE IT
|
||||||
|
*--------------------------------
|
||||||
|
RDL.OVERRIDE
|
||||||
|
JSR READ.KEY.WITH.CASE
|
||||||
|
JMP RDL.ADD.CHAR
|
||||||
|
*--------------------------------
|
||||||
|
RDL.RITARR
|
||||||
|
JSR GET.HORIZ.POSN
|
||||||
|
TAY
|
||||||
|
JSR IO.PICK.SCREEN
|
||||||
|
RDL.ADD.CHAR
|
||||||
|
JSR INSTALL.CHAR
|
||||||
|
BCC RDL3 STILL ROOM FOR MORE
|
||||||
|
RDL.RUBOUT
|
||||||
|
LDA #CHR.BSLASH
|
||||||
|
JSR MON.COUT
|
||||||
|
JMP READ.LINE
|
||||||
|
*--------------------------------
|
||||||
|
RDL.BACKSPACE
|
||||||
|
LDA #$88
|
||||||
|
JSR MON.COUT PRINT BACKSPACE
|
||||||
|
TXA SEE IF OVER PROMPT
|
||||||
|
BEQ RDL0 YES, START NEW LINE
|
||||||
|
DEX NO, BACK UP BUFFER POINTER
|
||||||
|
JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
RDL.PREFIX LDY #QM.PREFIX-QM.
|
||||||
|
.HS 2C
|
||||||
|
RDL.CATALOG LDY #QM.CATALOG-QM.
|
||||||
|
.HS 2C
|
||||||
|
RDL.LIST LDY #QM.LIST-QM.
|
||||||
|
.HS 2C
|
||||||
|
RDL.FIND LDY #QM.FIND-QM.
|
||||||
|
.HS 2C
|
||||||
|
RDL.EDIT LDY #QM.EDIT-QM.
|
||||||
|
*
|
||||||
|
CPX #0 ^C & ^E ONLY EFFECTIVE IN COL. 1
|
||||||
|
BNE RDL.ERR ...ELSE ERRONEOUS
|
||||||
|
.1 LDA QM.,Y SPELL OUT "EDIT " OR "CATALOG"
|
||||||
|
PHP SAVE TERMINATION STATUS
|
||||||
|
JSR INSTALL.CHAR
|
||||||
|
INY
|
||||||
|
PLP GET TERMINATION STATUS
|
||||||
|
BPL .1 ...NOT FINISHED YET
|
||||||
|
JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
* HANDLE ESCAPE EDITING
|
||||||
|
*--------------------------------
|
||||||
|
RDL.ESCAPE
|
||||||
|
JSR READ.KEY.WITH.CASE
|
||||||
|
RDL.ESCAPE.2E
|
||||||
|
JSR ELIMINATE.CASE
|
||||||
|
STA CURRENT.CHAR
|
||||||
|
LDY #CHARS.FOR.ESCAPE
|
||||||
|
JSR SEARCH.CHAR.TABLES
|
||||||
|
LDA CURRENT.CHAR
|
||||||
|
CMP #"L" STAR DASH LINE?
|
||||||
|
BEQ RDL.EOL ...YES, FINISH IT OFF
|
||||||
|
CMP #$A0 CHECK FOR ARROW KEYS (//E)
|
||||||
|
BCC RDL.ESCAPE ...YES, STAY IN ESCAPE MODE
|
||||||
|
CMP #$C9 IJKM?
|
||||||
|
BCC RDL4 ...NO, LEAVE ESCAPE MODE
|
||||||
|
CMP #$CE
|
||||||
|
BCC RDL.ESCAPE ...YES, STAY IN ESCAPE MODE
|
||||||
|
BCS RDL4 ...NO, LEAVE ESCAPE MODE
|
||||||
|
RDL.ESC.END
|
||||||
|
PLA
|
||||||
|
PLA
|
||||||
|
RDL4 JMP RDL3
|
||||||
|
*--------------------------------
|
||||||
|
RDL.EOL
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDA #CHR.RETURN
|
||||||
|
STA WBUF,X
|
||||||
|
JSR MY.COUT
|
||||||
|
LDY #0
|
||||||
|
STY MON.MODE
|
||||||
|
INY
|
||||||
|
LDA WBUF GET FIRST CHAR
|
||||||
|
CMP #CHR.DOLLAR
|
||||||
|
BEQ FAKE.MONITOR
|
||||||
|
JMP RDL.STRIP.LINE
|
||||||
|
*--------------------------------
|
||||||
|
* FAKE MONITOR
|
||||||
|
*--------------------------------
|
||||||
|
FMN1 CPX $FBC0 //C ID BYTE (X = 0 OR 1)
|
||||||
|
BCC .1 ...NOT //C (//C = 0, OTHERS > 1)
|
||||||
|
DEY
|
||||||
|
BMI FMN3 ...NOT VALID COMMAND
|
||||||
|
CPY #$13
|
||||||
|
BCS FMN2
|
||||||
|
.1 JSR MON.TOSUB
|
||||||
|
LDY MON.YSAV
|
||||||
|
FAKE.MONITOR
|
||||||
|
JSR FMN5 INDIRECT TO MON.GETNUM
|
||||||
|
STY MON.YSAV
|
||||||
|
CMP #$C6 $8D EOR $B0 PLUS $89
|
||||||
|
BEQ FMN4 ...<RETURN>
|
||||||
|
LDY #22 # CMDS - 1
|
||||||
|
FMN2 CMP MON.CHRTBL,Y
|
||||||
|
BEQ FMN1 ...FOUND CMD IN TABLE
|
||||||
|
DEY ...NEXT ENTRY
|
||||||
|
BPL FMN2 ...NEXT ENTRY
|
||||||
|
FMN3 JSR MON.BELL ...NOT IN TABLE
|
||||||
|
JMP READ.LINE
|
||||||
|
FMN4 LDA MON.MODE <RETURN> COMMAND
|
||||||
|
LDY #0
|
||||||
|
DEC MON.YSAV
|
||||||
|
JSR MON.BL1
|
||||||
|
JMP READ.LINE
|
||||||
|
FMN5 JMP ($FF74) MON.GETNUM CALL
|
||||||
|
*--------------------------------
|
||||||
|
* ESCAPE-L
|
||||||
|
* COLUMN 0: LOAD A FILE
|
||||||
|
* COL. 1-N: MAKE "*------" LINE
|
||||||
|
*--------------------------------
|
||||||
|
ESCAPE.L
|
||||||
|
TXA
|
||||||
|
BEQ .3 "LOAD ...."
|
||||||
|
*---GENERATE STAR-DASH LINE------
|
||||||
|
LDA #CHR.STAR
|
||||||
|
.1 JSR INSTALL.CHAR
|
||||||
|
LDA USER.COM.DELIM
|
||||||
|
CPX #38
|
||||||
|
BCC .1
|
||||||
|
.2 RTS
|
||||||
|
*---GENERATE LOAD COMMAND--------
|
||||||
|
.3 JSR IO.HTABX HTAB TO FIRST COLUMN
|
||||||
|
LDY #QBLOADB " LOAD "
|
||||||
|
JSR QT.OUT
|
||||||
|
LDX #22
|
||||||
|
JSR IO.HTABX
|
||||||
|
JSR GET.DOS.CMD.OFF.SCRN
|
||||||
|
PLA POP RETURN ADDRESS
|
||||||
|
PLA
|
||||||
|
JMP RDL.EOL SUBMIT COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
* ESC-S AUTO SAVE LINE
|
||||||
|
*--------------------------------
|
||||||
|
ESCAPE.S
|
||||||
|
TXA
|
||||||
|
BNE .4 ...NOT IN COLUMN 1
|
||||||
|
JSR SETUP.TEXT.POINTERS
|
||||||
|
LDX #10 MUST APPEAR IN FIRST 10 LINES
|
||||||
|
.1 LDY #3 POINT TO FIRST TEXT CHAR OF LINE
|
||||||
|
LDA (SRCP),Y
|
||||||
|
JSR CHECK.COMMENT.CHAR
|
||||||
|
BEQ .5
|
||||||
|
.2 DEX PAST 10TH LINE?
|
||||||
|
BMI .4 ...YES, LOOK NO FURTHER
|
||||||
|
LDY #0 POINT TO LENGTH
|
||||||
|
LDA (SRCP),Y
|
||||||
|
CLC
|
||||||
|
ADC SRCP
|
||||||
|
STA SRCP
|
||||||
|
BCC .3
|
||||||
|
INC SRCP+1
|
||||||
|
.3 JSR CMP.SRCP.ENDP PAST END OF PROGRAM?
|
||||||
|
BCC .1 ...NO, KEEP LOOKING
|
||||||
|
.4 RTS
|
||||||
|
.5 INY
|
||||||
|
LDA (SRCP),Y
|
||||||
|
BEQ .2 ...END OF LINE
|
||||||
|
CMP #'S'
|
||||||
|
BNE .5
|
||||||
|
JSR LIST.CURRENT.LINE
|
||||||
|
*--------------------------------
|
||||||
|
GET.DOS.CMD.OFF.SCRN
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDY #0 NOW PICK 0...39 OFF SCREEN
|
||||||
|
LDX #0 BUT NO BLANKS
|
||||||
|
.1 JSR IO.PICK.SCREEN
|
||||||
|
STA WBUF,X STORE IN BUFFER
|
||||||
|
INY
|
||||||
|
CMP #" " ELIMINATE BLANKS
|
||||||
|
BEQ .2 ...BLANK
|
||||||
|
INX
|
||||||
|
.2 CPY #39
|
||||||
|
BCC .1
|
||||||
|
.3 DEY
|
||||||
|
JSR IO.PICK.SCREEN
|
||||||
|
CMP #" "
|
||||||
|
BEQ .3
|
||||||
|
INY
|
||||||
|
TYA
|
||||||
|
JMP IO.HTAB POSITION AFTER LAST NON-BLANK
|
||||||
|
*--------------------------------
|
||||||
|
* INSTALL CHARACTER IN INPUT BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
INSTALL.CHAR
|
||||||
|
ORA #$80 ASSURE SIGN BIT ON
|
||||||
|
STA WBUF,X STORE IN INPUT BUFFER
|
||||||
|
CMP #$A0 CONTROL CHAR?
|
||||||
|
BCS .1 ...NO
|
||||||
|
AND #$3F ...YES, DISPLAY AS INVERSE
|
||||||
|
.1 JSR IO.COUT ECHO ON SCREEN
|
||||||
|
CPX #WBUF.MAX SEE IF END OF BUFFER
|
||||||
|
BCS .2 ...YES
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
.2 JSR MON.BELL
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* STRIP SIGN BITS OFF ALL BYTES
|
||||||
|
* AND CHANGE <CR> TO <EOL>
|
||||||
|
*--------------------------------
|
||||||
|
RDL.STRIP.LINE
|
||||||
|
LDY #$FF LOOP TO CLEAR HIGH BITS
|
||||||
|
.1 INY
|
||||||
|
LDA WBUF,Y
|
||||||
|
AND #$7F STRIP OFF BIT
|
||||||
|
CMP #$0D WAS IT THE END?
|
||||||
|
BNE .2 NOT YET
|
||||||
|
LDA #0 YES, SUBSTITUTE <EOL> FOR <CR>
|
||||||
|
.2 STA WBUF,Y
|
||||||
|
BNE .1 UNTIL <EOL>
|
||||||
|
TAX CLEAR X-REG
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ESCAPE.DOT
|
||||||
|
TXA
|
||||||
|
BNE .5 NOT IN COLUMN 1, IGNORE IT
|
||||||
|
JSR GET.HORIZ.POSN FIND CURSOR POSITION
|
||||||
|
TAY
|
||||||
|
.1 JSR IO.PICK.SCREEN
|
||||||
|
AND #$7F
|
||||||
|
JSR CHECK.DIGIT
|
||||||
|
BCC .2 NOT A DIGIT
|
||||||
|
STA WBUF+4,X
|
||||||
|
INX
|
||||||
|
INY
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
.2 TXA
|
||||||
|
BEQ .3 ...NO DIGITS
|
||||||
|
LDA #4
|
||||||
|
STA CHAR.PNTR
|
||||||
|
STA WBUF+4,X
|
||||||
|
LDX #CURLNO-A0L
|
||||||
|
JSR SCAN.1.DECIMAL.NUMBER
|
||||||
|
.3 LDY #4
|
||||||
|
LDX #0
|
||||||
|
.4 LDA LDC,Y
|
||||||
|
JSR INSTALL.CHAR
|
||||||
|
DEY
|
||||||
|
BPL .4
|
||||||
|
STA CURRENT.CHAR at end, current.char = comma
|
||||||
|
JSR IO.CLREOP
|
||||||
|
.5 RTS
|
||||||
|
*--------------------------------
|
||||||
|
LDC .AS /,.SIL/
|
||||||
|
*--------------------------------
|
||||||
|
QM.
|
||||||
|
QM.EDIT .AT /EDIT /
|
||||||
|
QM.CATALOG .AT /CATALOG/
|
||||||
|
QM.PREFIX .AT /PREFIX/
|
||||||
|
QM.LIST .AT /LIST /
|
||||||
|
QM.FIND .AT /FIND /
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.rline
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
118
SCMASM.30/SCMASM.S.SCMD.txt
Normal file
118
SCMASM.30/SCMASM.S.SCMD.txt
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* SEARCH COMMAND TABLE
|
||||||
|
*--------------------------------
|
||||||
|
SEARCH.COMMAND.TABLE
|
||||||
|
LDX #-1 COMMAND STRING INDEX
|
||||||
|
.1 LDY #0 BUFFER INDEX
|
||||||
|
STY CHAR.PNTR
|
||||||
|
.2 INX NEXT POSITION IN CMD.TBL
|
||||||
|
JSR GNC.UC NEXT CHARACTER OF COMMAND
|
||||||
|
BCS .7 ...END OF LINE
|
||||||
|
JSR CHECK.LETTER
|
||||||
|
BCC .6 ...NOT A LETTER
|
||||||
|
LDA CMD.TBL,X NEXT CHAR OF COMMAND NAME
|
||||||
|
BEQ PASS.CMD.TO.PRODOS ...END OF TABLE
|
||||||
|
EOR CURRENT.CHAR
|
||||||
|
BEQ .2 ...CORRECT CHARACTER
|
||||||
|
ASL SHIFT OUT END.OF.NAME FLAG
|
||||||
|
BNE .5 ...REALLY DIFFERENT
|
||||||
|
*---GO TO PROCESS COMMAND--------
|
||||||
|
.3 LDA CMD.TBL+2,X
|
||||||
|
PHA
|
||||||
|
LDA CMD.TBL+1,X
|
||||||
|
PHA
|
||||||
|
LDX #0
|
||||||
|
RTS
|
||||||
|
*---SCAN TO NEXT TABLE ENTRY-----
|
||||||
|
.5 INX
|
||||||
|
LDA CMD.TBL-1,X
|
||||||
|
BPL .5
|
||||||
|
INX SKIP OVER ADDRESS
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
*---ALL LETTERS MATCH-------------
|
||||||
|
.6 DEY BACK OFF <EOL>
|
||||||
|
STY CHAR.PNTR
|
||||||
|
.7 CPY #3 AT LEAST THREE LETTERS?
|
||||||
|
BCC PASS.CMD.TO.PRODOS ...NO, SPELLED WRONG
|
||||||
|
.9 LDA CMD.TBL,X
|
||||||
|
BMI .3 ...AT END OF COMMAND NAME
|
||||||
|
INX
|
||||||
|
BNE .9 ...ALWAYS
|
||||||
|
*---NOT FOUND IN TABLE------------
|
||||||
|
PASS.CMD.TO.PRODOS
|
||||||
|
.DO 0 NO LONGER NECESSARY, BECAUSE 00=8D IN SCI
|
||||||
|
LDX #-1 APPEND A <RETURN> FOR PRODOS
|
||||||
|
.1 INX
|
||||||
|
LDA WBUF,X LOOK FOR TERMINATING 00
|
||||||
|
BNE .1 ...NOT YET
|
||||||
|
LDA #$8D
|
||||||
|
STA WBUF,X
|
||||||
|
.FIN EFFECTIVE 10-23-86
|
||||||
|
JSR SCI.COMMAND GIVE ProDOS A SHOT AT IT
|
||||||
|
BCC .2 ProDOS liked it!
|
||||||
|
JMP PRODOS.ERROR ...not acceptable, explain why
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* COMMAND STRINGS
|
||||||
|
*--------------------------------
|
||||||
|
.MA CTBL
|
||||||
|
.AT /]1/
|
||||||
|
.DA ]1-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
CMD.TBL
|
||||||
|
>CTBL ASM
|
||||||
|
>CTBL AUTO
|
||||||
|
>CTBL COPY
|
||||||
|
>CTBL DATE
|
||||||
|
>CTBL DELETE
|
||||||
|
>CTBL EDIT
|
||||||
|
>CTBL FAST
|
||||||
|
>CTBL FIND
|
||||||
|
>CTBL FP
|
||||||
|
>CTBL HELP
|
||||||
|
>CTBL HIDE
|
||||||
|
>CTBL HIMEM
|
||||||
|
>CTBL INCREMENT
|
||||||
|
>CTBL LIST
|
||||||
|
>CTBL LOMEM
|
||||||
|
>CTBL MANUAL
|
||||||
|
>CTBL MEMORY
|
||||||
|
>CTBL MERGE
|
||||||
|
>CTBL MGO
|
||||||
|
>CTBL MNTR
|
||||||
|
>CTBL NEW
|
||||||
|
>CTBL PRT
|
||||||
|
>CTBL RENUMBER
|
||||||
|
>CTBL REPLACE
|
||||||
|
>CTBL RESTORE
|
||||||
|
>CTBL RST
|
||||||
|
>CTBL SLOW
|
||||||
|
>CTBL SYMBOLS
|
||||||
|
>CTBL TEXT
|
||||||
|
>CTBL TIME
|
||||||
|
>CTBL USR
|
||||||
|
>CTBL VAL
|
||||||
|
>CTBL VERSION
|
||||||
|
.HS 00 END OF TABLE
|
||||||
|
*--------------------------------
|
||||||
|
SCT.1 INY
|
||||||
|
INY
|
||||||
|
INY
|
||||||
|
SEARCH.CHAR.TABLES
|
||||||
|
LDA CHAR.TABLES,Y
|
||||||
|
BEQ .1 ...NOT IN TABLE
|
||||||
|
CMP CURRENT.CHAR
|
||||||
|
BNE SCT.1
|
||||||
|
.1 LDA CHAR.TABLES+2,Y
|
||||||
|
PHA
|
||||||
|
LDA CHAR.TABLES+1,Y
|
||||||
|
PHA
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.scmd
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
495
SCMASM.30/SCMASM.S.SYMT.txt
Normal file
495
SCMASM.30/SCMASM.S.SYMT.txt
Normal file
@ -0,0 +1,495 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* INITIALIZE SYMBOL TABLE
|
||||||
|
* 1. SET EOT TO BOT
|
||||||
|
* 2. CLEAR HASH POINTER TABLE
|
||||||
|
*--------------------------------
|
||||||
|
STINIT LDA LO.MEM START OF SYMBOL TABLE
|
||||||
|
STA EOT
|
||||||
|
LDA LO.MEM+1
|
||||||
|
STA EOT+1
|
||||||
|
STA MACLBL+1 PRIVATE LABELS GO DOWN FROM THERE
|
||||||
|
LDX #56 # BYTES IN HASH POINTER TABLE
|
||||||
|
LDA #0
|
||||||
|
STA MACLBL
|
||||||
|
STA CURRENT.MAJOR.LABEL+1
|
||||||
|
.1 STA HSHTBL-1,X
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
.DO AUXMEM
|
||||||
|
LDA RDRAM
|
||||||
|
LDA RDRAM
|
||||||
|
LDX #AUX.IMAGE.LEN-1
|
||||||
|
.2 LDA AUX.IMAGE,X
|
||||||
|
STA AUX.CODE,X
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
BACK.TO.ROM
|
||||||
|
PHA
|
||||||
|
LDA RDROM
|
||||||
|
PLA
|
||||||
|
.FIN
|
||||||
|
RTS RETURN WITH X=0
|
||||||
|
*--------------------------------
|
||||||
|
.DO AUXMEM
|
||||||
|
LDA.STPNTR
|
||||||
|
BIT RDRAM
|
||||||
|
JSR LDA.STPNTR.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
ADC.STPNTR
|
||||||
|
BIT RDRAM
|
||||||
|
JSR ADC.STPNTR.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
SBC.STPNTR
|
||||||
|
BIT RDRAM
|
||||||
|
JSR SBC.STPNTR.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
LDA.PNTR
|
||||||
|
BIT RDRAM
|
||||||
|
JSR LDA.PNTR.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
LDA.TPTR
|
||||||
|
BIT RDRAM
|
||||||
|
JSR LDA.TPTR.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
LDA.SRCP
|
||||||
|
BIT RDRAM
|
||||||
|
JSR LDA.SRCP.AUX
|
||||||
|
JMP BACK.TO.ROM
|
||||||
|
*
|
||||||
|
STA.PNTR
|
||||||
|
STA WRAUX
|
||||||
|
STA (PNTR),Y
|
||||||
|
STA WRMAIN
|
||||||
|
RTS
|
||||||
|
STA.STPNTR
|
||||||
|
STA WRAUX
|
||||||
|
STA (STPNTR),Y
|
||||||
|
STA WRMAIN
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
AUX.IMAGE
|
||||||
|
LDA.STPNTR.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
LDA (STPNTR),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
ADC.STPNTR.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
ADC (STPNTR),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
SBC.STPNTR.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
SBC (STPNTR),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
LDA.PNTR.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
LDA (PNTR),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
LDA.TPTR.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
LDA (TPTR),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
LDA.SRCP.AUX .EQ *-AUX.IMAGE+AUX.CODE
|
||||||
|
STA RDAUX
|
||||||
|
LDA (SRCP),Y
|
||||||
|
STA RDMAIN
|
||||||
|
RTS
|
||||||
|
AUX.IMAGE.LEN .EQ *-AUX.IMAGE
|
||||||
|
.FIN
|
||||||
|
*--------------------------------
|
||||||
|
* A table of 28 pointers begins at $130, called HSHTBL.
|
||||||
|
* Each pointer points to the beginning of a chain of
|
||||||
|
* symbol entries. The entries on a chain are kept
|
||||||
|
* in alphabetical order. If a chain is empty, the
|
||||||
|
* pointer = $0000.
|
||||||
|
*
|
||||||
|
* HSHTBL+$00: Chain for target file entries
|
||||||
|
* HSHTBL+$02: Chain for labels starting with "A"
|
||||||
|
* HSHTBL+$04: Chain for labels starting with "B"
|
||||||
|
* - - -
|
||||||
|
* HSHTBL+$34: Chain for labels starting with "Z"
|
||||||
|
* HSHTBL+$36: Chain for Macro Names and Skeletons
|
||||||
|
*
|
||||||
|
* Format of Target File Entry:
|
||||||
|
* 0,1 -- Forward chain pointer (0=end of chain)
|
||||||
|
* 2,3 -- Length of target file in bytes
|
||||||
|
* 4 -- Length of code name = $02
|
||||||
|
* 5,6 -- Target file code name:
|
||||||
|
* 5: "@" = $40
|
||||||
|
* 6: $40 + target file number ($00-$1F)
|
||||||
|
*
|
||||||
|
* Format of Label Entry:
|
||||||
|
* 0,1 -- Forward chain pointer (0=end of chain)
|
||||||
|
* 2-5 -- Value of label
|
||||||
|
* 6 -- Flags and length of label name:
|
||||||
|
* Bits 5-0: length of label name ($01-$20)
|
||||||
|
* Bit 6: =1 if forward reference
|
||||||
|
* Bit 7: =1 if has local labels
|
||||||
|
* 7 -- First character of label name, and flag.
|
||||||
|
* Bit 7 = 1 if label is .SEt label.
|
||||||
|
* thru 6+n -- The rest of the label name, with bit 7 = 0
|
||||||
|
*
|
||||||
|
* If the label has local labels, they follow.
|
||||||
|
* Each local label occupies two bytes:
|
||||||
|
* 1 -- Label number (0-99) +128
|
||||||
|
* 2 -- Label value (distance from value of
|
||||||
|
* named label)
|
||||||
|
* The local label list is terminated with a $00
|
||||||
|
* in the label number position.
|
||||||
|
*
|
||||||
|
* Format of Macro Definition Entry:
|
||||||
|
* 0,1 -- Chain to next macro name
|
||||||
|
* 2,3 -- $0000
|
||||||
|
* 4 -- Length of macro name
|
||||||
|
* 5 -- "[" + $5B
|
||||||
|
* 6-n -- Rest of Macro name
|
||||||
|
* etc.-- The packed skeleton lines, each
|
||||||
|
* terminated by $00. A final $00
|
||||||
|
* terminates the skeleton.
|
||||||
|
*
|
||||||
|
* Private Labels are kept in a separate table.
|
||||||
|
* Each label takes 7 bytes. Bytes 0-3 are the
|
||||||
|
* value, byte 4 is the colon number + $80,
|
||||||
|
* and bytes 5 and 6 are the macro call number.
|
||||||
|
* The Private Label table grows downward from
|
||||||
|
* MACLBL toward $0800.
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
* PACK SYMBOL FROM INPUT LINE
|
||||||
|
* UP TO 32 CHARACTERS PACKED AT SYMBOL+7
|
||||||
|
* AND FOLLOWING.
|
||||||
|
* # CHARS STORED IN SYMBOL+6
|
||||||
|
* RETURN CARRY CLEAR IF NO SYMBOL
|
||||||
|
* RETURN CARRY SET IF GOOD SYMBOL
|
||||||
|
*--------------------------------
|
||||||
|
PACK LDX #0 POINT AT 1ST CHAR IN NAME
|
||||||
|
CMP #CHR.PERIOD LOCAL SYMBOL?
|
||||||
|
BEQ .1 YES
|
||||||
|
CMP #': COLON MEANS MACRO PRIVATE LABEL
|
||||||
|
BNE .3 NO, NORMAL SYMBOL
|
||||||
|
.1 STA SYMBOL+7 SAVE PERIOD OR COLON
|
||||||
|
JSR GNC.UC GET NEXT CHAR
|
||||||
|
JSR CHECK.DIGIT
|
||||||
|
BCC .4 NO, BAD SYMBOL
|
||||||
|
JSR DECN CONVERT TO BINARY
|
||||||
|
LDX #0 IN CASE BAD SYMBOL...
|
||||||
|
LDA DGTCNT VALUE MUST BE < 100
|
||||||
|
CMP #3 SO MUST BE 1 OR 2 DIGITS
|
||||||
|
BCS .4 ...TOO MANY DIGITS, BAD SYMBOL
|
||||||
|
LDA SYM.VALUE
|
||||||
|
ORA #$80 BE SURE NOT 00
|
||||||
|
STA SYMBOL+8 SAVE VALUE
|
||||||
|
LDA CALL.NUM JUST IN CASE IT'S A
|
||||||
|
STA SYMBOL+9 MACRO PRIVATE LABEL
|
||||||
|
LDA CALL.NUM+1
|
||||||
|
STA SYMBOL+10
|
||||||
|
INX SIGNAL GOOD SYMBOL
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
.3 JSR PACK.NAME
|
||||||
|
.4 JSR BACKUP.CHAR.PNTR
|
||||||
|
STX SYMBOL+6 SAVE LENGTH
|
||||||
|
CPX #1 CARRY SET IF AT LEAST ONE CHAR
|
||||||
|
LDX #0 CLEAR X AGAIN
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* PACK A NAME INTO SYMBOL
|
||||||
|
*--------------------------------
|
||||||
|
PACK.NAME
|
||||||
|
JSR CHECK.LETTER
|
||||||
|
BCC .4 NOT A LETTER
|
||||||
|
.1 CPX #32 SEE IF ALREADY 32 CHARACTERS
|
||||||
|
BEQ .2 YES, IGNORE
|
||||||
|
STA SYMBOL+7,X PUT CHAR IN ENTRY
|
||||||
|
INX POINT AT NEXT SLOT
|
||||||
|
.2 JSR GNC.UC GET NEXT CHAR FROM LINE
|
||||||
|
JSR CHECK.DOT.DIGIT.OR.LETTER
|
||||||
|
BCS .1 VALID CHAR
|
||||||
|
.4 RTS END OF NAME
|
||||||
|
*--------------------------------
|
||||||
|
* SEARCH SYMBOL TABLE
|
||||||
|
* # OF CHARS STORED AT SYMBOL+6
|
||||||
|
* SYMBOL ITSELF AT SYMBOL+7 AND FOLLOWING
|
||||||
|
* JSR STSRCH
|
||||||
|
* IF FOUND: CARRY CLEAR
|
||||||
|
* (STPNTR)=ADDRESS OF ENTRY
|
||||||
|
* IF NOT FOUND: CARRY SET
|
||||||
|
* (STPNTR)=ADDRESS OF
|
||||||
|
* POINTER CELL WHICH
|
||||||
|
* SHOULD POINT AT ENTRY
|
||||||
|
*--------------------------------
|
||||||
|
STSRCH SEC CONVERT FIRST CHARACTER
|
||||||
|
LDA SYMBOL+7 OF SYMBOL TO HASH TABLE INDEX
|
||||||
|
CMP #CHR.PERIOD SEE IF LOCAL SYMBOL
|
||||||
|
BEQ .8 YES
|
||||||
|
CMP #': COLON, THEN PRIVATE LABEL
|
||||||
|
BNE .12 NO, NORMAL LABEL
|
||||||
|
JMP SEARCH.PRIVATE.LABELS
|
||||||
|
.12 SBC #$40 AT-SIGN
|
||||||
|
ASL DOUBLE INDEX, CLEAR CARRY
|
||||||
|
ADC #HSHTBL
|
||||||
|
STA STPNTR
|
||||||
|
LDA /HSHTBL
|
||||||
|
ADC #0
|
||||||
|
STA STPNTR+1
|
||||||
|
.1 LDY #0
|
||||||
|
>SYM LDA,STPNTR GET POINTER FROM ENTRY
|
||||||
|
STA TPTR
|
||||||
|
INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
BEQ .4 END OF CHAIN, NOT IN TABLE
|
||||||
|
STA TPTR+1
|
||||||
|
LDX SYMBOL+6 # CHARS IN SYMBOL
|
||||||
|
LDY #6 POINT AT LENGTH
|
||||||
|
>SYM LDA,TPTR USE MINIMUM LENGTH
|
||||||
|
AND #$3F ISOLATE LENGTH
|
||||||
|
CMP SYMBOL,Y
|
||||||
|
INY
|
||||||
|
BCS .2
|
||||||
|
TAX
|
||||||
|
.2 >SYM LDA,TPTR COMPARE BYTES FROM BOTH
|
||||||
|
AND #$7F ALLOW FLAG BITS IN SYMBOL
|
||||||
|
CMP SYMBOL,Y
|
||||||
|
BCC .3 NOT THIS ONE, BUT KEEP LOOKING
|
||||||
|
BNE .4 NOT IN THIS CHAIN
|
||||||
|
DEX
|
||||||
|
BEQ .5 THE NAME IS THE SAME OR A SUBSET
|
||||||
|
INY NEXT BYTE PAIR
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.3 JSR .7 UPDATE POINTER, CLEAR CARRY
|
||||||
|
BCC .1 ...ALWAYS
|
||||||
|
.4 SEC DID NOT FIND
|
||||||
|
LDX #0 RESTORE X=0
|
||||||
|
RTS
|
||||||
|
.5 LDY #6 TEST LENGTHS
|
||||||
|
>SYM LDA,TPTR
|
||||||
|
AND #$3F ISOLATE LENGTH
|
||||||
|
CMP SYMBOL+6 # CHARS IN SYMBOL IN TABLE
|
||||||
|
BEQ .6 SAME EXACTLY
|
||||||
|
BCS .4 NEW SYMBOL IS SHORTER
|
||||||
|
BCC .3 NEW SYMBOL IS LONGER
|
||||||
|
.6 LDY #2 POINT AT VALUE
|
||||||
|
.65 >SYM LDA,TPTR SET UP VALUE FOR EXPR SCAN
|
||||||
|
STA SYM.VALUE-2,Y
|
||||||
|
INY
|
||||||
|
CPY #6
|
||||||
|
BCC .65
|
||||||
|
.7 LDA TPTR
|
||||||
|
STA STPNTR
|
||||||
|
LDA TPTR+1
|
||||||
|
STA STPNTR+1
|
||||||
|
CLC SIGNAL DID FIND IT
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.8 LDA CURRENT.MAJOR.LABEL
|
||||||
|
STA STPNTR
|
||||||
|
LDA CURRENT.MAJOR.LABEL+1
|
||||||
|
BEQ .11
|
||||||
|
STA STPNTR+1
|
||||||
|
CLC
|
||||||
|
LDY #6 POINT AT LENGTH
|
||||||
|
>SYM LDA,STPNTR GET LENGTH OF MAJOR SYMBOL
|
||||||
|
BPL .4 NO LOCAL SYMBOLS YET
|
||||||
|
AND #$3F MASK TO REAL LENGTH
|
||||||
|
ADC #7 POINT AT LOCALS
|
||||||
|
TAY
|
||||||
|
.9 >SYM LDA,STPNTR
|
||||||
|
BEQ .4 END OF LOCALS, NOT FOUND
|
||||||
|
CMP SYMBOL+8 COMPARE TO NAME OF LOCAL
|
||||||
|
BEQ .10 FOUND IT!
|
||||||
|
INY SKIP TO NEXT LOCAL
|
||||||
|
INY
|
||||||
|
BNE .9 ...ALWAYS
|
||||||
|
.10 INY POINT AT VALUE OFFSET
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
CLC
|
||||||
|
LDY #2 POINT AT MAJOR VALUE
|
||||||
|
>SYM ADC,STPNTR
|
||||||
|
STA SYM.VALUE
|
||||||
|
INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
ADC #0
|
||||||
|
STA SYM.VALUE+1
|
||||||
|
INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
ADC #0
|
||||||
|
STA SYM.VALUE+2
|
||||||
|
INY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
ADC #0
|
||||||
|
STA SYM.VALUE+3
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
.11 LDY #QER9 NO NORMAL LABEL YET
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* SEARCH PRIVATE LABEL TABLE
|
||||||
|
*--------------------------------
|
||||||
|
SEARCH.PRIVATE.LABELS
|
||||||
|
LDA MACLBL
|
||||||
|
STA STPNTR
|
||||||
|
LDA MACLBL+1
|
||||||
|
.1 STA STPNTR+1
|
||||||
|
CMP LO.MEM+1 END OF TABLE YET?
|
||||||
|
BCS .3 ...YES, NO MORE LABELS
|
||||||
|
LDY #6
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
AND #$3F ISOLATE FROM FLAG BITS
|
||||||
|
CMP SYMBOL+10
|
||||||
|
BNE .2 NO
|
||||||
|
DEY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
CMP SYMBOL+9
|
||||||
|
BNE .2 NO
|
||||||
|
DEY
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
CMP SYMBOL+8
|
||||||
|
BEQ .4 YES, FOUND IT!
|
||||||
|
.2 CLC BUMP PNTR TO NEXT LABEL
|
||||||
|
LDA STPNTR
|
||||||
|
ADC #7
|
||||||
|
STA STPNTR
|
||||||
|
LDA STPNTR+1
|
||||||
|
ADC #0
|
||||||
|
BNE .1 ...ALWAYS
|
||||||
|
*--------------------------------
|
||||||
|
.3 SEC SIGNAL NOT FOUND
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 DEY
|
||||||
|
.5 >SYM LDA,STPNTR
|
||||||
|
STA SYM.VALUE,Y
|
||||||
|
DEY
|
||||||
|
BPL .5
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* ADD SYMBOL TO TABLE
|
||||||
|
*--------------------------------
|
||||||
|
STADD LDA SYMBOL+7 SEE IF LOCAL SYMBOL
|
||||||
|
CMP #CHR.PERIOD
|
||||||
|
BEQ .5 YES
|
||||||
|
CMP #': COLON, PRIVATE LABEL
|
||||||
|
BNE .11 NO, NORMAL LABEL
|
||||||
|
JMP ADD.PRIVATE.LABEL
|
||||||
|
.11 LDY #1 POINT AT POINTER
|
||||||
|
.1 >SYM LDA,STPNTR GET CURRENT POINTER
|
||||||
|
STA SYMBOL,Y
|
||||||
|
LDA EOT,Y
|
||||||
|
>SYM STA,STPNTR
|
||||||
|
STA PNTR,Y
|
||||||
|
STA CURRENT.MAJOR.LABEL,Y
|
||||||
|
LDA ORGN,Y VALUE
|
||||||
|
STA SYMBOL+2,Y
|
||||||
|
LDA ORGN+2,Y
|
||||||
|
STA SYMBOL+4,Y
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
CLC COMPUTE ENTRY SIZE
|
||||||
|
LDA SYMBOL+6 FROM SYMBOL SIZE
|
||||||
|
ADC #7
|
||||||
|
.2 PHA SAVE SIZE
|
||||||
|
LDY EOT+1
|
||||||
|
CLC
|
||||||
|
ADC EOT SEE IF ROOM FOR NEW ENTRY
|
||||||
|
BCC .10
|
||||||
|
INY
|
||||||
|
.DO AUXMEM
|
||||||
|
.10 CPY /$C000
|
||||||
|
BCS .4 MEM FULL ERR
|
||||||
|
STA EOT
|
||||||
|
.ELSE
|
||||||
|
.10 CMP MACSTK
|
||||||
|
TAX SAVE LOW BYTE
|
||||||
|
TYA GET HIGH BYTE
|
||||||
|
SBC MACSTK+1
|
||||||
|
BCS .4 MEM FULL ERR
|
||||||
|
STX EOT
|
||||||
|
.FIN
|
||||||
|
STY EOT+1
|
||||||
|
PLA GET SIZE
|
||||||
|
TAY
|
||||||
|
DEY CORRECT FOR INDEXING
|
||||||
|
.3 LDA SYMBOL,Y
|
||||||
|
>SYM STA,PNTR
|
||||||
|
DEY
|
||||||
|
BPL .3
|
||||||
|
RTS
|
||||||
|
.4 JMP MFER MEM FULL ERR
|
||||||
|
*--------------------------------
|
||||||
|
.5 LDY #6 LENGTH BYTE
|
||||||
|
>SYM LDA,STPNTR
|
||||||
|
BMI .6 ALREADY HAVE SOME LOCAL LABELS
|
||||||
|
ORA #$80 SET LOCAL FLAG
|
||||||
|
>SYM STA,STPNTR
|
||||||
|
BNE .8 ...ALWAYS
|
||||||
|
.6 LDA EOT BACK UP EOT
|
||||||
|
BNE .7 OVER 00 TERMINATOR
|
||||||
|
DEC EOT+1 OF LOCALS
|
||||||
|
.7 DEC EOT
|
||||||
|
.8 LDA SYMBOL+8 NAME OF LOCAL
|
||||||
|
STA SYMBOL SET UP TO ADD TO SYMBOL TABLE
|
||||||
|
SEC
|
||||||
|
LDY #1
|
||||||
|
JSR CALC.OFFSET.BYTE
|
||||||
|
JSR CALC.OFFSET.BYTE
|
||||||
|
BNE .9 ERROR > 255
|
||||||
|
JSR CALC.OFFSET.BYTE
|
||||||
|
BNE .9 ERROR > 255
|
||||||
|
JSR CALC.OFFSET.BYTE
|
||||||
|
BNE .9 ERROR > 255
|
||||||
|
LDA EOT
|
||||||
|
STA PNTR
|
||||||
|
LDA EOT+1
|
||||||
|
STA PNTR+1
|
||||||
|
LDA #3 SIZE IS 3 BYTES
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.9 JMP GT255ERR VALUE > 255
|
||||||
|
*--------------------------------
|
||||||
|
CALC.OFFSET.BYTE
|
||||||
|
INY
|
||||||
|
LDA ORGN-2,Y
|
||||||
|
>SYM SBC,STPNTR
|
||||||
|
STA SYMBOL-1,Y
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* ADD A PRIVATE LABEL
|
||||||
|
*--------------------------------
|
||||||
|
ADD.PRIVATE.LABEL
|
||||||
|
SEC
|
||||||
|
LDA MACLBL
|
||||||
|
SBC #7
|
||||||
|
STA MACLBL
|
||||||
|
STA STPNTR
|
||||||
|
LDA MACLBL+1
|
||||||
|
SBC #0
|
||||||
|
STA MACLBL+1
|
||||||
|
STA STPNTR+1
|
||||||
|
CMP #8 BELOW $0800?
|
||||||
|
BCC .3 YES, NO MORE ROOM
|
||||||
|
LDY #6 POINT AT LAST BYTE
|
||||||
|
.1 LDA SYMBOL+4,Y
|
||||||
|
CPY #4
|
||||||
|
BCS .2
|
||||||
|
LDA ORGN,Y
|
||||||
|
.2 >SYM STA,STPNTR
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
.3 JMP MFER
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.symt
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
291
SCMASM.30/SCMASM.S.TSRCH.txt
Normal file
291
SCMASM.30/SCMASM.S.TSRCH.txt
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* SEARCH TEXT BUFFER FOR LINE
|
||||||
|
*
|
||||||
|
* LINE NUMBER TO BE FOUND IS AT 0,X AND 1,X
|
||||||
|
*
|
||||||
|
* IF FOUND, RETURN CARRY SET
|
||||||
|
* (LINE.START) = ADDRESS OF LINE
|
||||||
|
* (LINE.END ) = ADDRESS OF NEXT LINE
|
||||||
|
*
|
||||||
|
* IF NOT FOUND, RETURN CARRY CLEAR
|
||||||
|
* (LINE.START) = ADDRESS OF NEXT LINE
|
||||||
|
* (LINE.END ) = ADDRESS OF NEXT LINE
|
||||||
|
*
|
||||||
|
*--------------------------------
|
||||||
|
SERTXT LDA PP START AT BEGINNING OF TEXT BUFFER
|
||||||
|
STA LINE.END
|
||||||
|
LDA PP+1
|
||||||
|
STA LINE.END+1
|
||||||
|
SERNXT LDA LINE.END+1 CONTINUE SEARCH WITH NEXT LINE
|
||||||
|
STA LINE.START+1
|
||||||
|
LDA LINE.END
|
||||||
|
STA LINE.START
|
||||||
|
CMP HI.MEM
|
||||||
|
LDA LINE.START+1 SEE IF AT END YET
|
||||||
|
SBC HI.MEM+1
|
||||||
|
BCS .3 YES, DID NOT FIND
|
||||||
|
LDY #0 POINT AT LINE LENGTH
|
||||||
|
LDA (LINE.START),Y GET LINE LENGTH
|
||||||
|
ADC LINE.END POINT TO NEXT LINE
|
||||||
|
STA LINE.END
|
||||||
|
BCC .1
|
||||||
|
INC LINE.END+1
|
||||||
|
.1 INY POINT AT LINE NUMBER
|
||||||
|
LDA (LINE.START),Y COMPARE TO DESRIRED LINE NUMBER
|
||||||
|
CMP 0,X
|
||||||
|
INY
|
||||||
|
LDA (LINE.START),Y
|
||||||
|
SBC 1,X
|
||||||
|
BCC SERNXT NOT THERE YET
|
||||||
|
BNE .2 PASSED IT UP
|
||||||
|
DEY CHECK LOW BYTE AGAIN
|
||||||
|
LDA (LINE.START),Y
|
||||||
|
CMP 0,X
|
||||||
|
BEQ .4 FOUND IT!
|
||||||
|
.2 LDA LINE.START PASSED IT UP
|
||||||
|
STA LINE.END MAKE BOTH POINT AT SAME LINE
|
||||||
|
LDA LINE.START+1
|
||||||
|
STA LINE.END+1
|
||||||
|
.3 CLC RETURN CARRY CLEAR
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* DELETE LINES
|
||||||
|
*--------------------------------
|
||||||
|
DELETE
|
||||||
|
JSR GNNB GET NEXT NON-BLANK CHAR
|
||||||
|
CMP #'/'
|
||||||
|
BEQ .1 ...PATHNAME
|
||||||
|
|
||||||
|
JSR CHECK.LETTER
|
||||||
|
BCC .2 ...NOT LETTER, PROBABLY LINES
|
||||||
|
|
||||||
|
.1 JMP PASS.CMD.TO.PRODOS
|
||||||
|
|
||||||
|
.2 JSR BACKUP.CHAR.PNTR
|
||||||
|
JSR PARSE.LINE.RANGE
|
||||||
|
BCS SYNX.3 ...NO NUMBERS, SYNTAX ERROR
|
||||||
|
|
||||||
|
DELETE.LINES
|
||||||
|
LDX #-1
|
||||||
|
SEC
|
||||||
|
.2 LDA SRCP+1,X SEE IF RANGE EMPTY OR CROSSED
|
||||||
|
STA LINE.START+1,X
|
||||||
|
LDA ENDP+1,X
|
||||||
|
STA A4L+1,X
|
||||||
|
SBC LINE.START+1,X
|
||||||
|
STA MOVE.DISTANCE+1,X
|
||||||
|
INX
|
||||||
|
BEQ .2
|
||||||
|
TAX TEST HI-BYTE OF MOVE.DISTANCE
|
||||||
|
BPL MOVE.TEXT.UP ...POSITIVE, RANGE GOOD
|
||||||
|
SYNX.3 JMP SYNX
|
||||||
|
*--------------------------------
|
||||||
|
* MOVE TEXT FROM <PP> THRU <LINE.START>
|
||||||
|
* UP <MOVE.DISTANCE> BYTES TO <A4L,A4H>
|
||||||
|
*--------------------------------
|
||||||
|
MOVE.TEXT.UP
|
||||||
|
JSR COMPUTE.BLOCK.SIZE
|
||||||
|
CLC
|
||||||
|
LDA PP
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA PP
|
||||||
|
LDA PP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA PP+1
|
||||||
|
LDY #0
|
||||||
|
BEQ .3 ...ALWAYS
|
||||||
|
*---MOVE A WHOLE BLOCK-----------
|
||||||
|
.1 LDA (LINE.START),Y MOVE BYTES 255 THRU 1 IN BLOCK
|
||||||
|
STA (A4L),Y
|
||||||
|
.2 DEY
|
||||||
|
BNE .1
|
||||||
|
LDA (LINE.START),Y MOVE LOWEST BYTE IN BLOCK
|
||||||
|
STA (A4L),Y
|
||||||
|
.3 DEC LINE.START+1 PRIOR BLOCK
|
||||||
|
DEC A4H
|
||||||
|
DEX ANY MORE BLOCKS?
|
||||||
|
BNE .2 YES
|
||||||
|
*---MOVE SHORT BLOCK IF ANY------
|
||||||
|
LDX BLKSIZ PARTIAL BLOCK SIZE
|
||||||
|
BEQ .5 NONE LEFT
|
||||||
|
.4 DEY
|
||||||
|
LDA (LINE.START),Y
|
||||||
|
STA (A4L),Y
|
||||||
|
DEX
|
||||||
|
BNE .4
|
||||||
|
.5 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* COPY L1,L2,L3
|
||||||
|
* L1 = FIRST LINE OF RANGE TO COPY
|
||||||
|
* L2 = LAST LINE OF RANGE TO COPY
|
||||||
|
* L3 = LINE NUMBER BEFORE WHICH TO INSERT
|
||||||
|
* THE COPIED LINES
|
||||||
|
*--------------------------------
|
||||||
|
ERR1 JMP SYNX
|
||||||
|
ERR2 .EQ ERR1
|
||||||
|
ERR3 JMP MFER
|
||||||
|
ERR4 .EQ ERR1
|
||||||
|
*--------------------------------
|
||||||
|
COPY
|
||||||
|
JSR PARSE.LINE.RANGE
|
||||||
|
JSR GNNB look for a comma
|
||||||
|
CMP #','
|
||||||
|
BNE ERR1 ...no comma
|
||||||
|
SEC SAVE POINTER AND COMPUTE LENGTH
|
||||||
|
LDA SRCP REALLY -(LENGTH)
|
||||||
|
SBC ENDP
|
||||||
|
STA MOVE.DISTANCE
|
||||||
|
LDA SRCP+1
|
||||||
|
SBC ENDP+1
|
||||||
|
STA MOVE.DISTANCE+1
|
||||||
|
BPL ERR2 RANGE BACKWARD OR EMPTY
|
||||||
|
*--------------------------------
|
||||||
|
CLC
|
||||||
|
LDA PP COMPUTE NEW PP POINTER
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA A4L
|
||||||
|
LDA PP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA A4H
|
||||||
|
*--------------------------------
|
||||||
|
LDA A4L SEE IF ROOM FOR THIS
|
||||||
|
CMP LO.MEM
|
||||||
|
LDA A4L+1
|
||||||
|
SBC LO.MEM+1
|
||||||
|
BCC ERR3 MEM FULL ERR
|
||||||
|
*---Get Target Line Number-------
|
||||||
|
JSR GNNB pick up first digit of target line number
|
||||||
|
JSR SCAN.LINE.NUMBER (or it might be ".")
|
||||||
|
BCS ERR1 ...not a line number of "."
|
||||||
|
LDA 0,X copy line number to A0L,H
|
||||||
|
STA A0L
|
||||||
|
LDA 1,X
|
||||||
|
STA A0H
|
||||||
|
*---Verify valid target line-----
|
||||||
|
LDA SRCP BE SURE NOT INSIDE SOURCE BLOCK
|
||||||
|
CMP LINE.START
|
||||||
|
LDA SRCP+1
|
||||||
|
SBC LINE.START+1
|
||||||
|
BCS .1 BELOW SOURCE BLOCK
|
||||||
|
LDA LINE.START
|
||||||
|
CMP ENDP
|
||||||
|
LDA LINE.START+1
|
||||||
|
SBC ENDP+1
|
||||||
|
BCC ERR4 INSIDE SOURCE BLOCK
|
||||||
|
*--------------------------------
|
||||||
|
* TARGET IS ABOVE SOURCE BLOCK, SO WE HAVE TO
|
||||||
|
* ADJUST SOURCE BLOCK POINTERS.
|
||||||
|
*--------------------------------
|
||||||
|
CLC
|
||||||
|
LDA SRCP
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA SRCP
|
||||||
|
LDA SRCP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA SRCP+1
|
||||||
|
CLC
|
||||||
|
LDA ENDP
|
||||||
|
ADC MOVE.DISTANCE
|
||||||
|
STA ENDP
|
||||||
|
LDA ENDP+1
|
||||||
|
ADC MOVE.DISTANCE+1
|
||||||
|
STA ENDP+1
|
||||||
|
*--------------------------------
|
||||||
|
.1 JSR MOVE.TEXT.DOWN MAKE THE HOLE
|
||||||
|
*--------------------------------
|
||||||
|
LDA SRCP SAVE SRCP AT A1
|
||||||
|
STA A1L (POINTS TO BLOCK TO BE COPIED)
|
||||||
|
LDA SRCP+1
|
||||||
|
STA A1H
|
||||||
|
.2 CLC ADD (Y) TO A4
|
||||||
|
TYA
|
||||||
|
ADC A4L POINTS TO BEGINNING OF NEXT
|
||||||
|
STA A4L LINE IN HOLE
|
||||||
|
BCC .3
|
||||||
|
INC A4H
|
||||||
|
.3 LDY #0
|
||||||
|
LDA (A1L),Y COPY LINE LENGTH
|
||||||
|
STA (A4L),Y
|
||||||
|
INY INSERT LINE #
|
||||||
|
LDA A0L OF TARGET LINE
|
||||||
|
STA (A4L),Y
|
||||||
|
INY INSERT LINE #
|
||||||
|
LDA A0H OF TARGET LINE
|
||||||
|
STA (A4L),Y
|
||||||
|
.4 INY COPY REST OF LINE
|
||||||
|
LDA (A1L),Y
|
||||||
|
STA (A4L),Y
|
||||||
|
BNE .4 UNTIL <EOL> TOKEN
|
||||||
|
INY
|
||||||
|
CLC
|
||||||
|
TYA
|
||||||
|
ADC A1L POINT TO NEXT SOURCE LINE
|
||||||
|
STA A1L
|
||||||
|
BCC .5
|
||||||
|
INC A1H
|
||||||
|
.5 CMP ENDP
|
||||||
|
LDA A1H
|
||||||
|
SBC ENDP+1
|
||||||
|
BCC .2
|
||||||
|
LDY #QDELOR
|
||||||
|
JSR YES.OR.NO
|
||||||
|
BNE .6
|
||||||
|
JSR DELETE.LINES
|
||||||
|
.6 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* MOVE TEXT FROM <PP> THRU <LINE.START>
|
||||||
|
* DOWN -<MOVE.DISTANCE> BYTES TO <A4L,A4H>
|
||||||
|
*--------------------------------
|
||||||
|
MOVE.TEXT.DOWN
|
||||||
|
JSR COMPUTE.BLOCK.SIZE
|
||||||
|
LDA PP
|
||||||
|
STA A2L
|
||||||
|
LDA PP+1
|
||||||
|
STA A2H
|
||||||
|
LDA A4L
|
||||||
|
STA PP
|
||||||
|
LDA A4H
|
||||||
|
STA PP+1
|
||||||
|
LDY #0
|
||||||
|
BEQ .2 ...ALWAYS
|
||||||
|
.1 LDA (A2L),Y YES, MOVE 256 BYTES
|
||||||
|
STA (A4L),Y
|
||||||
|
INY
|
||||||
|
BNE .1
|
||||||
|
INC A2H POINT AT NEXT BLOCK
|
||||||
|
INC A4H
|
||||||
|
.2 DEX ANY WHOLE BLOCKS LEFT?
|
||||||
|
BNE .1 YES
|
||||||
|
*---MOVE PARTIAL BLOCK-----------
|
||||||
|
LDX BLKSIZ SIZE OF PARTIAL BLOCK
|
||||||
|
BEQ .4 EMPTY
|
||||||
|
.3 LDA (A2L),Y
|
||||||
|
STA (A4L),Y
|
||||||
|
INY
|
||||||
|
DEX
|
||||||
|
BNE .3
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* COMPUTE SIZE OF TEXT BLOCK
|
||||||
|
* FROM <PP> TO <LINE.START>
|
||||||
|
*
|
||||||
|
* RETURN # WHOLE BLOCKS OF 256 BYTES +1 IN X
|
||||||
|
* RETURN # BYTES IN PARTIAL BLOCK IN <BLKSIZ>
|
||||||
|
*--------------------------------
|
||||||
|
COMPUTE.BLOCK.SIZE
|
||||||
|
SEC COMPUTE # OF BYTES TO BE MOVED
|
||||||
|
LDA LINE.START CURRENT TOP POINTER
|
||||||
|
SBC PP CURRENT BOTTOM POINTER
|
||||||
|
STA BLKSIZ SAVE PARTIAL PAGE AMOUNT
|
||||||
|
LDA LINE.START+1
|
||||||
|
SBC PP+1
|
||||||
|
TAX # OF WHOLE PAGES IN X
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.tsrch
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
96
SCMASM.30/SCMASM.S.VECT.txt
Normal file
96
SCMASM.30/SCMASM.S.VECT.txt
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.MA VEC
|
||||||
|
BIT RDROM
|
||||||
|
JSR ]1
|
||||||
|
BIT RDRAM
|
||||||
|
RTS
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
JMP SEARCH.COMPRESSED.TABLE
|
||||||
|
JMP GNC
|
||||||
|
JMP GNC.UC
|
||||||
|
JMP GNNB
|
||||||
|
>VEC EXPR
|
||||||
|
>VEC EXP1
|
||||||
|
JMP ASM.ERROR
|
||||||
|
>VEC EMIT
|
||||||
|
*--------------------------------
|
||||||
|
ERBA LDY #QER5
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR $D400
|
||||||
|
D4.ASM.INIT .BS 3
|
||||||
|
D4.ASM.LINE .BS 3
|
||||||
|
D4.EMIT.VALUE .BS 3
|
||||||
|
D4.DIR.OP .BS 3
|
||||||
|
D4.VERSION
|
||||||
|
.ED
|
||||||
|
*--------------------------------
|
||||||
|
ASM.INIT LDA RDRAM
|
||||||
|
JSR D4.ASM.INIT
|
||||||
|
LDA RDROM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM.PARTICULAR LDA RDRAM
|
||||||
|
JSR D4.ASM.LINE
|
||||||
|
LDA RDROM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EMIT.VALUE LDA RDRAM
|
||||||
|
JSR D4.EMIT.VALUE
|
||||||
|
LDA RDROM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
PSOP LDA RDRAM
|
||||||
|
JSR D4.DIR.OP
|
||||||
|
LDA RDROM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
EXP.OVER.256
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
STA EXP.VALUE
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
STA EXP.VALUE+2
|
||||||
|
LDA #0
|
||||||
|
STA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM.ERROR
|
||||||
|
BIT RDROM
|
||||||
|
TAX USE ERROR # FOR INDEX
|
||||||
|
LDY ASM.ERROR.TABLE,X
|
||||||
|
JMP SOFT.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
ASM.ERROR.TABLE
|
||||||
|
.DA #QER2 "BAD OPCODE"
|
||||||
|
.DA #QER5 "BAD ADDRESS"
|
||||||
|
.DA #QER3 "RANGE"
|
||||||
|
.DA #QER6 "UNDEF LABEL"
|
||||||
|
*--------------------------------
|
||||||
|
VERSION
|
||||||
|
LDY #QSC
|
||||||
|
JSR QT.OUT
|
||||||
|
LDY #2
|
||||||
|
.1 LDA Q.VERSION,Y
|
||||||
|
JSR MY.COUT
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
LDA #$8D
|
||||||
|
.2 JSR MY.COUT
|
||||||
|
INY
|
||||||
|
LDA RDRAM
|
||||||
|
LDX D4.VERSION,Y
|
||||||
|
LDA RDROM
|
||||||
|
TXA
|
||||||
|
BNE .2
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.vect
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
85
SCMASM.30/SCMASM.S.XTDIR.txt
Normal file
85
SCMASM.30/SCMASM.S.XTDIR.txt
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.DO 1
|
||||||
|
*--------------------------------
|
||||||
|
DIR. .SE 0
|
||||||
|
.MA DIR
|
||||||
|
.DO "]1"=DIR.=0
|
||||||
|
.DA #"]1"-$C0
|
||||||
|
DIR. .SE "]1"
|
||||||
|
.FIN
|
||||||
|
.DA #"]2"-$40,]3-1 .]1]2
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
OPTBL.DIR
|
||||||
|
>DIR A,C,DIR.AC ASCII STRING COMPRESSED
|
||||||
|
>DIR A,S,PSAS ASCII STRING
|
||||||
|
>DIR A,T,PSAT ASCII STRING WITH LAST BYTE
|
||||||
|
>DIR A,Z,PSAZ ASCII STRING WITH ZERO END
|
||||||
|
>DIR B,S,PSBS BLOCK STORAGE
|
||||||
|
>DIR D,A,PSDA DATA
|
||||||
|
>DIR D,O,PSDO DO
|
||||||
|
>DIR D,U,D.DUMMY DUMMY
|
||||||
|
>DIR E,D,D.END.DUMMY
|
||||||
|
>DIR E,L,PSEL ELSE
|
||||||
|
>DIR E,N,PSEN END OF SOURCE
|
||||||
|
>DIR E,P,D.END.PHASE
|
||||||
|
>DIR E,Q,PSEQ EQUATE
|
||||||
|
>DIR F,I,PSFI FIN
|
||||||
|
>DIR H,S,PSHS HEX STRING
|
||||||
|
>DIR I,N,PSIN INCLUDE
|
||||||
|
>DIR L,I,PSLI LIST ON,/ OFF
|
||||||
|
>DIR M,A,PSMA MACRO
|
||||||
|
>DIR O,P,PSOP OPCODE TABLE SELECT
|
||||||
|
>DIR O,R,PSOR ORIGIN
|
||||||
|
>DIR P,G,PSPG PAGE EJECT
|
||||||
|
>DIR P,H,D.PHASE PHASE
|
||||||
|
>DIR T,A,PSTA TARGET ADDRESS
|
||||||
|
>DIR T,F,PSTF TARGET FILE
|
||||||
|
>DIR T,I,PSTI TITLE
|
||||||
|
>DIR U,S,PSUSER USER DIRECTIVE
|
||||||
|
.HS 41 <<<TERMINATOR>>>
|
||||||
|
*--------------------------------
|
||||||
|
.ELSE
|
||||||
|
*--------------------------------
|
||||||
|
* DIRECTIVE TABLE
|
||||||
|
*--------------------------------
|
||||||
|
.MA DIR
|
||||||
|
.AS /]1/
|
||||||
|
.DA ]2-1
|
||||||
|
.EM
|
||||||
|
*---------------------------------
|
||||||
|
OPTBL.DIR
|
||||||
|
.HS 0402 ITEM SIZE, KEY SIZE
|
||||||
|
>DIR AS,PSAS ASCII STRING
|
||||||
|
>DIR AT,PSAT ASCII STRING WITH LAST BYTE
|
||||||
|
>DIR BS,PSBS BLOCK STORAGE
|
||||||
|
>DIR DA,PSDA DATA
|
||||||
|
>DIR DO,PSDO DO
|
||||||
|
>DIR DU,D.DUMMY DUMMY
|
||||||
|
>DIR ED,D.END.DUMMY
|
||||||
|
>DIR EL,PSEL ELSE
|
||||||
|
>DIR EN,PSEN END OF SOURCE
|
||||||
|
>DIR EP,D.END.PHASE
|
||||||
|
>DIR EQ,PSEQ EQUATE
|
||||||
|
>DIR FI,PSFI FIN
|
||||||
|
>DIR HS,PSHS HEX STRING
|
||||||
|
>DIR IN,PSIN INCLUDE
|
||||||
|
>DIR LI,PSLI LIST ON,/ OFF
|
||||||
|
>DIR MA,PSMA MACRO
|
||||||
|
>DIR OP,PSOP OPCODE TABLE SELECT
|
||||||
|
>DIR OR,PSOR ORIGIN
|
||||||
|
>DIR PG,PSPG PAGE EJECT
|
||||||
|
>DIR PH,D.PHASE PHASE
|
||||||
|
>DIR TA,PSTA TARGET ADDRESS
|
||||||
|
>DIR TF,PSTF TARGET FILE
|
||||||
|
>DIR TI,PSTI TITLE
|
||||||
|
>DIR US,PSUSER USER DIRECTIVE
|
||||||
|
.HS 00 MARK END OF TABLE
|
||||||
|
.FIN
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s.xtdir
|
||||||
|
LOAD usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
83
SCMASM.30/SCMASM.S.txt
Normal file
83
SCMASM.30/SCMASM.S.txt
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
.LIST OFF
|
||||||
|
.OR $2000
|
||||||
|
.TF SCMASM.30,TSYS
|
||||||
|
*--------------------------------------
|
||||||
|
VERSION.HI .EQ 3 VERSION 3.0
|
||||||
|
VERSION.LO .EQ 0
|
||||||
|
*--------------------------------
|
||||||
|
AUXMEM .EQ 1 ...USE AUXMEM FOR SYMBOL TABLE
|
||||||
|
ROCKWELL .EQ 1 0 = LEAVE OUT ROCKWELL OPTION
|
||||||
|
SWEET.16 .EQ 1 0 = LEAVE OUT SWEET-16 OPTION
|
||||||
|
*--------------------------------
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.ldr
|
||||||
|
.BS $2200-*
|
||||||
|
*--------------------------------
|
||||||
|
.PH $8000
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.data
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.param
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.edit
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.mcmds
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.scmd
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.tsrch
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.fndrep
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.rline
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.elines
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.output
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.disk
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.pline
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.asmgen
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.asmnl
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.exp
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.symt
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.psym
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.macro
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.dir1
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.dir2
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.acdir
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.newq
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.xtdir
|
||||||
|
.BS $A700-*
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.vect
|
||||||
|
.BS $A800-*
|
||||||
|
.INB usr/src/scmasm.30/scmasm.s.iostd
|
||||||
|
.BS $A900-*
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $AA00
|
||||||
|
.INB usr/src/scmasm.30/sci.s.eq
|
||||||
|
.INB usr/src/scmasm.30/sci.s.cpar
|
||||||
|
.INB usr/src/scmasm.30/sci.s.cat
|
||||||
|
.INB usr/src/scmasm.30/sci.s.exec
|
||||||
|
.INB usr/src/scmasm.30/sci.s.online
|
||||||
|
.INB usr/src/scmasm.30/sci.s.prin
|
||||||
|
.INB usr/src/scmasm.30/sci.s.errors
|
||||||
|
.INB usr/src/scmasm.30/sci.s.loadsave
|
||||||
|
.INB usr/src/scmasm.30/sci.s.openclose
|
||||||
|
.INB usr/src/scmasm.30/sci.s.rwpa
|
||||||
|
.INB usr/src/scmasm.30/sci.s.tables
|
||||||
|
.BS $BD00-*
|
||||||
|
.INB usr/src/scmasm.30/sci.s.vars
|
||||||
|
.BS $BE00-*
|
||||||
|
.INB usr/src/scmasm.30/sci.s.gp
|
||||||
|
.BS $BF00-*
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
.INB usr/src/scmasm.30/io.s.iie
|
||||||
|
.BS $6100-*
|
||||||
|
.INB usr/src/scmasm.30/io.s.stb80
|
||||||
|
.BS $6200-*
|
||||||
|
.INB usr/src/scmasm.30/io.s.videx
|
||||||
|
.BS $6400-*
|
||||||
|
.INB usr/src/scmasm.30/io.s.ultra
|
||||||
|
.BS $6600-*
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $D400
|
||||||
|
.INB usr/src/scmasm.30/asm65816.s
|
||||||
|
.BS $E000-*
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.30/scmasm.s
|
||||||
|
ASM
|
991
SCMASM.31/ASM65816.S..txt
Normal file
991
SCMASM.31/ASM65816.S..txt
Normal file
@ -0,0 +1,991 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR $A700
|
||||||
|
ASM65816.SEARCH.TABLE .BS 3
|
||||||
|
ASM65816.GNC .BS 3
|
||||||
|
ASM65816.GNC.UC .BS 3
|
||||||
|
ASM65816.GNNB .BS 3
|
||||||
|
ASM65816.EXPR .BS 10
|
||||||
|
ASM65816.EXP1 .BS 10
|
||||||
|
ASM65816.ASM.ERROR .BS 3
|
||||||
|
ASM65816.EMIT .BS 10
|
||||||
|
*--------------------------------
|
||||||
|
.OR $F0 F0-FF is ASM private ZeroPage
|
||||||
|
LEVEL.MASK .BS 1
|
||||||
|
OPBASE .BS 1
|
||||||
|
MODE.BYTE .BS 1
|
||||||
|
FORCE.ADDR.SIZE .BS 1
|
||||||
|
.ED
|
||||||
|
*--------------------------------
|
||||||
|
ERR.BAD.OPCODE .EQ 0
|
||||||
|
ERR.BAD.ADDRESS .EQ 1
|
||||||
|
ERR.RANGE .EQ 2
|
||||||
|
ERR.UNDEFINED .EQ 3
|
||||||
|
*--------------------------------
|
||||||
|
JMP ASM65816.ASM.INIT
|
||||||
|
JMP ASM65816.ASM.LINE
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
JMP DIR.OP
|
||||||
|
*--------------------------------
|
||||||
|
.AS -/FOR THE 6502, 65C02, 65R02, 65816/
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.ASM.INIT
|
||||||
|
LDA #0 MASK FOR 6502
|
||||||
|
STA LEVEL.MASK
|
||||||
|
LDA #15 MARGIN FOR 6502
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.ASM.LINE
|
||||||
|
LDA SEARCH.KEY 1ST LETTER
|
||||||
|
CMP #'A'
|
||||||
|
BCC .5 ...NOT A LETTER, SO BADOP
|
||||||
|
CMP #'Z'+1
|
||||||
|
BCS .5 ...NOT A LETTER, SO BADOP
|
||||||
|
AND #$1F MAKE 01...1A
|
||||||
|
TAX
|
||||||
|
LDA FIRST.LETTER.TABLE-1,X
|
||||||
|
BNE .8 ...UNUSED LETTER
|
||||||
|
.5 JMP BADOPERR
|
||||||
|
*---BUILD OPTBL.PNTR INTO TABLE--------
|
||||||
|
.8 ADC #OPCODE.TABLE CARRY CLEAR ALREADY
|
||||||
|
STA OPTBL.PNTR
|
||||||
|
LDY /OPCODE.TABLE
|
||||||
|
BCC .1
|
||||||
|
INY
|
||||||
|
.1 CPX #'R'-$40 WHICH HALF OF TABLE?
|
||||||
|
BCC .2 ...FIRST HALF
|
||||||
|
INY ...SECOND HALF
|
||||||
|
.2 CLC INITIAL SEARCH
|
||||||
|
.3 JSR ASM65816.SEARCH.TABLE
|
||||||
|
BCC .5 ...NOT FOUND
|
||||||
|
*---FOUND IT!--------------------
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
STA OPBASE
|
||||||
|
INY
|
||||||
|
LDA (OPTBL.PNTR),Y
|
||||||
|
AND #$E1 ISOLATE LEVEL BITS
|
||||||
|
BEQ .7 ...PLAIN 6502 LEVEL
|
||||||
|
AND LEVEL.MASK
|
||||||
|
BNE .7 ...ALLOWS 'STP' FOR BOTH 65816 & SWEET-16
|
||||||
|
SEC CONTINUE SEARCH
|
||||||
|
BCS .3 ...ALWAYS
|
||||||
|
*---BRANCH TO PROCESS OPCODE-----
|
||||||
|
.7 LDA (OPTBL.PNTR),Y
|
||||||
|
AND #$1E
|
||||||
|
TAY
|
||||||
|
LDA OP.MODE+1,Y
|
||||||
|
PHA
|
||||||
|
LDA OP.MODE,Y
|
||||||
|
PHA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.MA MODE
|
||||||
|
O..]1 .EQ *-OP.MODE
|
||||||
|
.DA OP.]1-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
OP.MODE
|
||||||
|
>MODE SNGL 0 -- SINGLE BYTE OPCODES
|
||||||
|
>MODE COPS 2 -- LDA GROUP
|
||||||
|
>MODE SHIFTS 4 -- ASL GROUP
|
||||||
|
>MODE REL16 6 -- BRL & PER
|
||||||
|
>MODE REL8 8 -- RELATIVE BRANCHES
|
||||||
|
>MODE BITS A -- BIT GROUP
|
||||||
|
>MODE MOVES C -- MVP & MVN
|
||||||
|
>MODE JUMPS E -- JUMP GROUP
|
||||||
|
>MODE ROCKB 10 -- ROCKWELL BIT OPS
|
||||||
|
>MODE ROCKC 12 -- ROCKWELL BIT OPS
|
||||||
|
>MODE XN 14 -- SWEET 16 REGISTER OPS
|
||||||
|
>MODE POP 16 -- SWEET 16 POP & POPD
|
||||||
|
>MODE SET 18 -- SWEET 16 SET
|
||||||
|
>MODE CRS 1A -- COP, REP, SEP
|
||||||
|
*--------------------------------
|
||||||
|
OP.SNGL
|
||||||
|
EMIT.OPBASE
|
||||||
|
LDA OPBASE
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
OP.CRS JSR ASM65816.GNNB
|
||||||
|
CMP #'#'
|
||||||
|
BNE ERBA.E2
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
JMP EMIT.OP.AND.EXP.BYTE
|
||||||
|
ERBA.E2
|
||||||
|
JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
OP.COPS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
LDA MODE.BYTE ALL INDIRECT MODES <<<12-16-85>>>
|
||||||
|
AND #$04 REQUIRE ZP VALUE <<<12-16-85>>>
|
||||||
|
BEQ .1 ...NOT INDIRECT <<<12-16-85>>>
|
||||||
|
CPY #14
|
||||||
|
BCC .4 ...MODES 0...13
|
||||||
|
DEC ADDR.LENGTH SHORTEN >(ZP) AND >(ZP),Y
|
||||||
|
.4 JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE ERBA.E2 ...MUST BE DIRECT VALUE
|
||||||
|
.1 LDA ADDR.MODE.BITS.CLASS.1,Y
|
||||||
|
BPL .2 VALID MODE
|
||||||
|
INC ADDR.LENGTH ...DIRECT,Y NOT VALID
|
||||||
|
LDA ADDR.MODE.BITS.CLASS.1+1,Y
|
||||||
|
.2 EOR OPBASE
|
||||||
|
CMP #$89 STA IMMED?
|
||||||
|
BEQ ERBA.E2 ...YES, NO SUCH ANIMAL
|
||||||
|
* FALL INTO EMIT.OP.AND.VALUE ***
|
||||||
|
*--------------------------------
|
||||||
|
EMIT.OP.AND.VALUE
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
ASM65816.EMIT.VALUE
|
||||||
|
JSR EMIT.EXP.BYTE
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
DEC ADDR.LENGTH
|
||||||
|
BEQ .2
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
OP.BITS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
CPY #7 ONLY MODES 0...6 LEGAL
|
||||||
|
BCS .2 ...NOT VALID MODE
|
||||||
|
LDX OPBASE
|
||||||
|
BNE .0 ...NOT BIT OPCODE
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
AND #$20
|
||||||
|
BNE .0 ...AT LEAST 65C02
|
||||||
|
LDA #$60 ONLY ZP AND ABS LEGAL
|
||||||
|
BNE .7 ...ALWAYS
|
||||||
|
.0 LDA CLASS.5.LEGAL.MODES,X
|
||||||
|
.7 AND CLASS.5.MODE.MASKS,Y
|
||||||
|
BNE .4 ...LEGAL
|
||||||
|
LDA PASS
|
||||||
|
BEQ .1 ...IN PASS 1
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .2 ...TOO BIG FOR ZP
|
||||||
|
.1 DEY CHANGE ABS TO ZP MODE
|
||||||
|
BMI .2 ...WASN'T ABS
|
||||||
|
TYA
|
||||||
|
LSR
|
||||||
|
BCC .2 ...WASN'T ABS
|
||||||
|
LDA CLASS.5.LEGAL.MODES,X
|
||||||
|
AND CLASS.5.MODE.MASKS,Y
|
||||||
|
BNE .3 ...LEGAL AFTERALL
|
||||||
|
.2 JMP ERBA.EMIT.TWO INVALID ADDRESS MODE
|
||||||
|
.3 DEC ADDR.LENGTH
|
||||||
|
*---FORM OPCODE------------------
|
||||||
|
.4 LDA ADDR.MODE.BITS.CLASS.5,Y
|
||||||
|
EOR CLASS.5.OPS,X
|
||||||
|
LDY #$89
|
||||||
|
CMP #$20
|
||||||
|
BEQ .5
|
||||||
|
LDY #$9C
|
||||||
|
CMP #$6C
|
||||||
|
BEQ .5
|
||||||
|
LDY #$9E
|
||||||
|
CMP #$7C
|
||||||
|
BNE .6
|
||||||
|
.5 TYA
|
||||||
|
.6 JMP EMIT.OP.AND.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
OP.SHIFTS
|
||||||
|
JSR ASM65816.GNC CHECK FOR ACCUMULATOR MODE
|
||||||
|
BNE .2 NOT ACCUM MODE
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BNE .2 NOT ACCUM MODE
|
||||||
|
*---ACCUMULATOR MODE-------------
|
||||||
|
LDA OPBASE
|
||||||
|
EOR #$08 MAKE ACCUM MODE OPCODE
|
||||||
|
BPL .1 NOT INC OR DEC
|
||||||
|
PHA
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
AND #$20 ONLY IN 65C02 AND ABOVE
|
||||||
|
BEQ .5
|
||||||
|
PLA
|
||||||
|
EOR #$F0 CHANGE EA-->1A, CA-->3A
|
||||||
|
.1 JMP ASM65816.EMIT
|
||||||
|
*---MODES WITH OPERAND FIELD-----
|
||||||
|
.2 DEC CHAR.PNTR
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
JSR SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
CPY #5 ONLY MODES 1...4 LEGAL
|
||||||
|
BCS .5
|
||||||
|
TYA
|
||||||
|
BEQ .5 ...NO IMMEDIATE MODE ALLOWED
|
||||||
|
LDA ADDR.MODE.BITS.CLASS.1,Y
|
||||||
|
EOR OPBASE
|
||||||
|
JMP EMIT.OP.AND.VALUE
|
||||||
|
.5 JMP ERBA.EMIT.TWO INVALID ADDRESS MODE
|
||||||
|
*--------------------------------
|
||||||
|
OP.REL8
|
||||||
|
.DO SWEET.16
|
||||||
|
LDA OPBASE CHECK FOR 'BNM1' SWEET-16 OP
|
||||||
|
CMP #$09
|
||||||
|
BNE .1 ...NOT 'BNM1'
|
||||||
|
JSR ASM65816.GNC CHECK FOR '1'
|
||||||
|
CMP #'1'
|
||||||
|
BNE BADOPERR ...NO, SO BAD OP
|
||||||
|
.FIN
|
||||||
|
.1 JSR ASM65816.EXPR
|
||||||
|
LDA OPBASE
|
||||||
|
OP.REL8.A
|
||||||
|
JSR ASM65816.EMIT EMIT OPCODE
|
||||||
|
LDA EXP.UNDEF
|
||||||
|
BMI GOEMIT ...UNDEFINED
|
||||||
|
LDY EXP.VALUE+1
|
||||||
|
CLC COMPUTE RELATIVE OFFSET
|
||||||
|
LDA EXP.VALUE
|
||||||
|
SBC ORGN
|
||||||
|
STA EXP.VALUE
|
||||||
|
BPL .2
|
||||||
|
INY
|
||||||
|
.2 TYA
|
||||||
|
SBC ORGN+1
|
||||||
|
BNE ERR.RANGE.EMIT.ONE
|
||||||
|
EMIT.EXP.BYTE
|
||||||
|
LDA EXP.VALUE
|
||||||
|
GOEMIT JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
BADOPERR
|
||||||
|
LDA #ERR.BAD.OPCODE
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
* BRL & PER, 16-bit relative
|
||||||
|
*--------------------------------
|
||||||
|
OP.REL16
|
||||||
|
JSR ASM65816.EXPR Get value of expression
|
||||||
|
JSR EMIT.OPBASE Emit the opcode, bumping origin once
|
||||||
|
LDA EXP.UNDEF If undefined, say so
|
||||||
|
BMI .3 (If we didn't, might be RANGE ERR)
|
||||||
|
CLC ADD 2 MORE TO ORIGIN
|
||||||
|
LDY ORGN+2
|
||||||
|
LDA ORGN
|
||||||
|
ADC #2
|
||||||
|
STA EXP.VALUE+3 (TEMP)
|
||||||
|
LDA ORGN+1
|
||||||
|
ADC #0
|
||||||
|
BCC .2
|
||||||
|
INY BANK BYTE
|
||||||
|
.2 CPY EXP.VALUE+2 IN SAME BANK AS TARGET?
|
||||||
|
BNE ERR.RANGE.EMIT.TWO ...NO, ERR RANGE
|
||||||
|
STA EXP.VALUE+2 YES, SAVE IN ANOTHER TEMP
|
||||||
|
LDA EXP.VALUE TARGET-ORGN+3
|
||||||
|
SBC EXP.VALUE+3
|
||||||
|
STA EXP.VALUE
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
SBC EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
.3 LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
ERR.RANGE.EMIT.TWO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ERR.RANGE.EMIT.ONE
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ASM65816.RAER
|
||||||
|
LDA #ERR.RANGE
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
*--------------------------------
|
||||||
|
OP.MOVES
|
||||||
|
JSR EMIT.OPBASE
|
||||||
|
JSR ASM65816.EXPR GET SOURCE BANK
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
PHA
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #',' MUST HAVE COMMA HERE
|
||||||
|
BNE .1 ...ILLEGAL
|
||||||
|
JSR ASM65816.EXP1 GET DESTINATION BANK
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
JSR ASM65816.EMIT
|
||||||
|
PLA
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
.1 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
OP.JUMPS
|
||||||
|
JSR GENERAL.OPERAND
|
||||||
|
LDA LEGAL.JUMP.MODES,Y
|
||||||
|
BMI .4 ...ILLEGAL
|
||||||
|
ORA OPBASE
|
||||||
|
TAY
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
BMI .1 65816, ALLOW ALL MODES
|
||||||
|
CPY #5 DISALLOW JML, JSL, AND PEA
|
||||||
|
BCS .4 ...ONE OF THOSE
|
||||||
|
CPY #1 DISALLOW JMP LONG
|
||||||
|
BEQ .4
|
||||||
|
AND #$20 SEE IF 65C02
|
||||||
|
BNE .1 ...YES
|
||||||
|
CPY #3 ...NO, DISALLOW JMP (ABS,X)
|
||||||
|
BEQ .4 ...THAT'S WHAT IT IS...
|
||||||
|
.1 LDA JUMP.OPCODES,Y
|
||||||
|
BEQ .4 ...ILLEGAL
|
||||||
|
LDY #2 ASSUME TWO BYTE ADDRESS
|
||||||
|
CMP #$5C CHECK FOR "JMP LONG"
|
||||||
|
BEQ .2 ...YES, 3 BYTES OF ADDRESS
|
||||||
|
CMP #$22 CHECK FOR "JSL"
|
||||||
|
BNE .3 ...NO, ONLY 2 BYTES OF ADDRESS
|
||||||
|
.2 INY 3 BYTE ADDRESS
|
||||||
|
.3 STY ADDR.LENGTH
|
||||||
|
JMP EMIT.OP.AND.VALUE
|
||||||
|
.4 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
ORA EXP.VALUE+2
|
||||||
|
ORA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
LONG.INDIRECT
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #']'
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BEQ .1 ...[EXP]
|
||||||
|
CMP #','
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.GNC.UC
|
||||||
|
CMP #'Y'
|
||||||
|
BNE ERBA.EMIT.TWO
|
||||||
|
LDA #$47 ...[EXP],Y
|
||||||
|
.HS 2C
|
||||||
|
.1 LDA #$44 ...[EXP],Y
|
||||||
|
STA MODE.BYTE
|
||||||
|
LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP CHECK.IF.SUFFIX.LEGAL
|
||||||
|
*--------------------------------
|
||||||
|
IMMEDIATE
|
||||||
|
JSR ASM65816.GNC.UC
|
||||||
|
CMP DLIM 16-BIT IMMEDIATE?
|
||||||
|
BNE .1 ...NO, BACKUP
|
||||||
|
LDA LEVEL.MASK 16-BIT IMMEDIATE OKAY?
|
||||||
|
BPL ERBA.EMIT.TWO ...NOT AT 65816 LEVEL
|
||||||
|
INC ADDR.LENGTH ...YES, INCREASE LENGTH
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.1 DEC CHAR.PNTR
|
||||||
|
.2 JSR ASM65816.EXP1
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
BNE ERBA.EMIT.TWO ILLEGAL
|
||||||
|
LDA DLIM
|
||||||
|
CMP #'/' #=23, /=2F, ^=5E
|
||||||
|
BCC .4 ...#
|
||||||
|
BEQ .3 .../
|
||||||
|
JSR ASM65816.EXP.OVER.256 ...^
|
||||||
|
.3 JSR ASM65816.EXP.OVER.256
|
||||||
|
.4 LDY #0 SIGNAL IMMEDIATE MODE
|
||||||
|
STY MODE.BYTE COPS NEEDS THIS <<<12-16-85>>>
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ERBA.EMIT.THREE
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ERBA.EMIT.TWO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
JSR ASM65816.EMIT.ZERO
|
||||||
|
ASM65816.ERBA
|
||||||
|
LDA #ERR.BAD.ADDRESS
|
||||||
|
JMP ASM65816.ASM.ERROR
|
||||||
|
ASM65816.EMIT.ZERO LDA #0
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN:
|
||||||
|
* # BYTES IN ADDRESS IN ADDR.LENGTH
|
||||||
|
* (Y) = INDEX TO ADDR.MODE.BITS
|
||||||
|
*--------------------------------
|
||||||
|
GENERAL.OPERAND
|
||||||
|
JSR ASM65816.GNNB GET NEXT NON-BLANK
|
||||||
|
BCS ERBA.EMIT.TWO ...NO OPERAND
|
||||||
|
*---PARSE PREFIX-----------------
|
||||||
|
LDY #1
|
||||||
|
STY ADDR.LENGTH
|
||||||
|
STA DLIM
|
||||||
|
CMP #'('
|
||||||
|
BEQ .3 ...indirect, must be ZP
|
||||||
|
CMP #'['
|
||||||
|
BEQ LONG.INDIRECT
|
||||||
|
CMP #'#'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'/'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'^'
|
||||||
|
BEQ IMMEDIATE
|
||||||
|
CMP #'<'
|
||||||
|
BEQ .3 MAKE FORCE SIZE = 1
|
||||||
|
DEY Y=0
|
||||||
|
CMP #'>'
|
||||||
|
BNE .2 ...SIZE NOT FORCED
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
LDY #3 Y=3
|
||||||
|
CMP DLIM IS IT ">>"?
|
||||||
|
BEQ .3 ...YES
|
||||||
|
DEY Y=2
|
||||||
|
STA DLIM CHANGE DLIM TO NEW VALUE
|
||||||
|
CMP #'(' IS IT (?
|
||||||
|
BEQ .3 ...YES, >(
|
||||||
|
.2 DEC CHAR.PNTR ...NO, SO BACKUP
|
||||||
|
.3 STY FORCE.ADDR.SIZE
|
||||||
|
*---PARSE THE EXPRESSION---------
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
*---FIGURE # OF BYTES------------
|
||||||
|
LDX FORCE.ADDR.SIZE
|
||||||
|
BNE .6 ...FORCED WITH <, >, OR >>
|
||||||
|
LDX #2 ASSUME 2-BYTE ADDRESS
|
||||||
|
LDA EXP.UNDEF
|
||||||
|
BMI .6
|
||||||
|
LDA PASS IGNORE FWD REF FLAG IN PASS 1
|
||||||
|
BEQ .4 ...PASS 1
|
||||||
|
LDA EXP.FWDREF ...PASS 2, DEFINED
|
||||||
|
BNE .4 ...BUT NOT FWD REF
|
||||||
|
LDA EXP.VALUE+3 ...FWD REF MUST BE ONLY
|
||||||
|
ORA EXP.VALUE+2 16 BITS
|
||||||
|
BEQ .6 ...IT FITS!
|
||||||
|
BNE ERBA.1 ...ALWAYS, ERBA
|
||||||
|
.4 LDA EXP.VALUE+3 DO NOT ALLOW 32-BITS
|
||||||
|
BNE ERBA.1 ...BAD ADDR
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
BNE .5 ...3-BYTE ADDRESS
|
||||||
|
DEX X=1
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
BEQ .6 ...ZP
|
||||||
|
.5 INX
|
||||||
|
.6 STX ADDR.LENGTH
|
||||||
|
*---PARSE SUFFIX-----------------
|
||||||
|
DEX MAKE 0, 1, OR 2
|
||||||
|
STX MODE.BYTE
|
||||||
|
LDX #6
|
||||||
|
.7 JSR ASM65816.GNC.UC
|
||||||
|
.8 CMP MODE.CHARS,X
|
||||||
|
BEQ .9
|
||||||
|
CLC
|
||||||
|
ROL MODE.BYTE
|
||||||
|
DEX
|
||||||
|
BPL .8
|
||||||
|
BMI ERBA.1
|
||||||
|
.9 CMP #' ' BLANK?
|
||||||
|
BEQ CHECK.IF.SUFFIX.LEGAL ...YES, END OF OPERAND
|
||||||
|
CMP #')' RIGHT PAREN?
|
||||||
|
BNE .10 ...NO
|
||||||
|
LDA DLIM WAS THERE A LEFT PAREN?
|
||||||
|
CMP #'('
|
||||||
|
BNE ERBA.1 ...NO
|
||||||
|
.10 SEC
|
||||||
|
ROL MODE.BYTE
|
||||||
|
DEX
|
||||||
|
BPL .7
|
||||||
|
ERBA.1 JMP ERBA.EMIT.TWO ILLEGAL
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.IF.SUFFIX.LEGAL
|
||||||
|
LDY #0 SEARCH FORWARD FOR VARIOUS REASONS
|
||||||
|
LDA MODE.BYTE
|
||||||
|
.13 INY
|
||||||
|
CPY #MODE.TABLE.SIZE+1
|
||||||
|
BCS ERBA.1 ...END OF TABLE
|
||||||
|
CMP MODE.TABLE-1,Y
|
||||||
|
BNE .13 ...KEEP LOOKING
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SEE.IF.MODE.LEGAL.AT.LEVEL
|
||||||
|
LDA LEVEL.MASK
|
||||||
|
BMI .15 ...65816 LEVEL, ALL LEGAL
|
||||||
|
CPY #9
|
||||||
|
BCC .15 ...6502 MODES
|
||||||
|
BEQ .14 ...65C02 MODE
|
||||||
|
CPY #16
|
||||||
|
BNE ERBA.1
|
||||||
|
.14 AND #$20 AT C02 LEVEL?
|
||||||
|
BEQ ERBA.1 ...NO
|
||||||
|
.15 RTS
|
||||||
|
*--------------------------------
|
||||||
|
ASM65816.EXP.OVER.256
|
||||||
|
LDA EXP.VALUE+1
|
||||||
|
STA EXP.VALUE
|
||||||
|
LDA EXP.VALUE+2
|
||||||
|
STA EXP.VALUE+1
|
||||||
|
LDA EXP.VALUE+3
|
||||||
|
STA EXP.VALUE+2
|
||||||
|
LDA #0
|
||||||
|
STA EXP.VALUE+3
|
||||||
|
RTS
|
||||||
|
.DO ROCKWELL
|
||||||
|
*--------------------------------
|
||||||
|
* ROCKWELL 65C02 EXCLUSIVES
|
||||||
|
*
|
||||||
|
* RMB bit#,zp
|
||||||
|
* SMB bit#,zp
|
||||||
|
* BBR bit#,zp,reladdr
|
||||||
|
* BBS bit#,zp,reladdr
|
||||||
|
*--------------------------------
|
||||||
|
OP.ROCKB
|
||||||
|
JSR OP.ROCKWELL
|
||||||
|
JSR ASM65816.GNC REQUIRE A COMMA
|
||||||
|
CMP #','
|
||||||
|
BNE .1 ...NO COMMA
|
||||||
|
LDA EXP.VALUE
|
||||||
|
PHA SAVE ZP VALUE
|
||||||
|
JSR ASM65816.EXP1 GET BRANCH EXPRESSION
|
||||||
|
JSR EMIT.OPBASE <<<12-16-85>>>
|
||||||
|
PLA
|
||||||
|
JMP OP.REL8.A
|
||||||
|
.1 JMP ERBA.EMIT.THREE
|
||||||
|
*--------------------------------
|
||||||
|
OP.ROCKC
|
||||||
|
JSR OP.ROCKWELL
|
||||||
|
.FIN
|
||||||
|
EMIT.OP.AND.EXP.BYTE
|
||||||
|
JSR EMIT.OPBASE <<<12-16-85>>>
|
||||||
|
JMP EMIT.EXP.BYTE <<<12-16-85>>>
|
||||||
|
*--------------------------------
|
||||||
|
.DO ROCKWELL
|
||||||
|
OP.ROCKWELL
|
||||||
|
JSR ASM65816.EXPR GET BIT #
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .1 ...MUST BE SMALL NUMBER!
|
||||||
|
LDA EXP.VALUE
|
||||||
|
CMP #8 MUST BE 0...7
|
||||||
|
BCS .1 ...TOO LARGE
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ORA OPBASE MERGE INTO OPCODE
|
||||||
|
STA OPBASE
|
||||||
|
JSR ASM65816.GNC NEED A COMMA NOW
|
||||||
|
CMP #','
|
||||||
|
BNE .1
|
||||||
|
JSR ASM65816.EXP1 GET ZP VALUE
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE .1 MUST BE ZERO PAGE
|
||||||
|
RTS
|
||||||
|
.1 JMP ERBA.EMIT.TWO
|
||||||
|
*--------------------------------
|
||||||
|
.ELSE
|
||||||
|
OP.ROCKB
|
||||||
|
OP.ROCKC
|
||||||
|
JMP BADOPERR
|
||||||
|
.FIN
|
||||||
|
|
||||||
|
.DO SWEET.16
|
||||||
|
*--------------------------------
|
||||||
|
* SWEET-16 OPCODES
|
||||||
|
*--------------------------------
|
||||||
|
OP.POP
|
||||||
|
JSR ASM65816.GNC.UC SEE WHICH: POP OR POPD
|
||||||
|
BEQ OP.XN ...POP
|
||||||
|
CMP #'D'
|
||||||
|
BEQ .1
|
||||||
|
JMP BADOPERR
|
||||||
|
.1 LDA #$A2 ...POP
|
||||||
|
STA OPBASE
|
||||||
|
*--------------------------------
|
||||||
|
OP.XN
|
||||||
|
JSR ASM65816.GNNB
|
||||||
|
BCS SWEET.ERBA
|
||||||
|
CMP #'@'
|
||||||
|
BNE .1 ...NOT '@N'
|
||||||
|
LDA OPBASE ...'@N', SEE IF LEGAL
|
||||||
|
AND #2
|
||||||
|
BEQ SWEET.ERBA ...NOT LEGAL WITH THIS OP
|
||||||
|
LDA OPBASE ...LEGAL, ADD $20
|
||||||
|
ADC #$1F .CS., SO 1F IS 20
|
||||||
|
BNE .2 ...ALWAYS
|
||||||
|
.1 DEC CHAR.PNTR Backup character pointer
|
||||||
|
LDA OPBASE
|
||||||
|
LSR
|
||||||
|
BCC SWEET.ERBA 'N' NOT LEGAL FOR THIS OP
|
||||||
|
LDA OPBASE
|
||||||
|
.2 AND #$F0 CLEAR AWAY LEGALITY FLAGS
|
||||||
|
STA OPBASE
|
||||||
|
JSR ASM65816.EXP1 GET REGISTER NUMBER
|
||||||
|
JSR ASM65816.TEST.EXP.VALUE.ZP
|
||||||
|
BNE SWEET.RAER
|
||||||
|
LDA EXP.VALUE
|
||||||
|
CMP #$10
|
||||||
|
BCS SWEET.RAER
|
||||||
|
ORA OPBASE
|
||||||
|
JMP ASM65816.EMIT
|
||||||
|
*--------------------------------
|
||||||
|
SWEET.ERBA JMP ASM65816.ERBA
|
||||||
|
SWEET.RAER JMP ASM65816.RAER
|
||||||
|
*--------------------------------
|
||||||
|
OP.SET
|
||||||
|
JSR OP.XN
|
||||||
|
JSR ASM65816.GNC
|
||||||
|
CMP #','
|
||||||
|
BNE SWEET.ERBA
|
||||||
|
JSR ASM65816.EXP1
|
||||||
|
LDA #2
|
||||||
|
STA ADDR.LENGTH
|
||||||
|
JMP ASM65816.EMIT.VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.ELSE
|
||||||
|
OP.POP
|
||||||
|
OP.XN
|
||||||
|
OP.SET
|
||||||
|
JMP BADOPERR
|
||||||
|
.FIN
|
||||||
|
*--------------------------------
|
||||||
|
LEGAL.JUMP.MODES
|
||||||
|
.HS FF.00.00.FF.FF.FF
|
||||||
|
.HS FF.FF.03.02.FF.FF
|
||||||
|
.HS 01.FF.02.FF.03
|
||||||
|
*--------------------------------
|
||||||
|
JUMP.OPCODES
|
||||||
|
.HS 4C.5C.6C.7C JMP
|
||||||
|
.HS 20.22.00.FC JSR
|
||||||
|
.HS 00.00.DC.00 JML
|
||||||
|
.HS 22.22.00.00 JSL
|
||||||
|
.HS F4.00.00.00 PEA
|
||||||
|
*--------------------------------
|
||||||
|
MODE.CHARS
|
||||||
|
.AS / Y,)SX,/
|
||||||
|
*--------------------------------
|
||||||
|
MODE.TABLE
|
||||||
|
.HS 00 1 -- DIRECT
|
||||||
|
.HS 40 2 -- ABSOLUTE
|
||||||
|
.HS 30 3 -- DIRECT,X
|
||||||
|
.HS 70 4 -- ABSOLUTE,X
|
||||||
|
.HS 21 5 -- DIRECT,Y
|
||||||
|
.HS 61 6 -- ABSOLUTE,Y
|
||||||
|
.HS 07 7 -- (DIRECT),Y
|
||||||
|
.HS 34 8 -- (DIRECT,X)
|
||||||
|
*---IN 65C02, 802, 816-----------
|
||||||
|
.HS 04 9 -- (DIRECT)
|
||||||
|
*---IN 65802, 816----------------
|
||||||
|
.HS 28 A -- ...,S
|
||||||
|
.HS 2F B -- (...,S),Y
|
||||||
|
*---ONLY IN 65816----------------
|
||||||
|
.HS 80 C -- LONG
|
||||||
|
.HS B0 D -- LONG,X
|
||||||
|
.HS 44 E -- >(DIRECT)
|
||||||
|
.HS 47 F -- >(DIRECT),Y
|
||||||
|
*---SPECIAL FOR JMP,JSR (A,X)----
|
||||||
|
.HS 74 10 -- (ABSOLUTE,X)
|
||||||
|
MODE.TABLE.SIZE .EQ *-MODE.TABLE
|
||||||
|
*--------------------------------
|
||||||
|
ADDR.MODE.BITS.CLASS.1
|
||||||
|
.HS 08 0 -- IMMEDIATE
|
||||||
|
.HS 04 1 -- DIRECT
|
||||||
|
.HS 0C 2 -- ABSOLUTE
|
||||||
|
.HS 14 3 -- DIRECT,X
|
||||||
|
.HS 1C 4 -- ABSOLUTE,X
|
||||||
|
.HS FF 5 -- DIRECT,Y <<<NOT LEGAL>>>
|
||||||
|
.HS 18 6 -- ABSOLUTE,Y
|
||||||
|
.HS 10 7 -- (DIRECT),Y
|
||||||
|
.HS 00 8 -- (DIRECT,X)
|
||||||
|
*---IN 65C02, 802, 816-----------
|
||||||
|
.HS 13 9 -- (DIRECT)
|
||||||
|
*---IN 65802, 816----------------
|
||||||
|
.HS 02 A -- ...,S
|
||||||
|
.HS 12 B -- (...,S),Y
|
||||||
|
*---ONLY IN 65816----------------
|
||||||
|
.HS 0E C -- LONG
|
||||||
|
.HS 1E D -- LONG,X
|
||||||
|
.HS 06 E -- >(DIRECT)
|
||||||
|
.HS 16 F -- >(DIRECT),Y
|
||||||
|
*--------------------------------
|
||||||
|
ADDR.MODE.BITS.CLASS.5
|
||||||
|
.HS 00 0 -- IMMEDIATE
|
||||||
|
.HS 04 1 -- DIRECT
|
||||||
|
.HS 0C 2 -- ABSOLUTE
|
||||||
|
.HS 14 3 -- DIRECT,X
|
||||||
|
.HS 1C 4 -- ABSOLUTE,X
|
||||||
|
.HS 14 5 -- DIRECT,Y
|
||||||
|
.HS 1C 6 -- ABSOLUTE,Y
|
||||||
|
*--------------------------------
|
||||||
|
CLASS.5.MODE.MASKS
|
||||||
|
.HS 80.40.20.10.08.04.02
|
||||||
|
*--------------------------------
|
||||||
|
FIRST.LETTER.TABLE
|
||||||
|
.DA #LTR.A-OPCODE.TABLE
|
||||||
|
.DA #LTR.B-OPCODE.TABLE
|
||||||
|
.DA #LTR.C-OPCODE.TABLE
|
||||||
|
.DA #LTR.D-OPCODE.TABLE
|
||||||
|
.DA #LTR.E-OPCODE.TABLE
|
||||||
|
.DA #LTR.F-OPCODE.TABLE
|
||||||
|
.DA #LTR.G-OPCODE.TABLE
|
||||||
|
.DA #LTR.H-OPCODE.TABLE
|
||||||
|
.DA #LTR.I-OPCODE.TABLE
|
||||||
|
.DA #LTR.J-OPCODE.TABLE
|
||||||
|
.DA #LTR.K-OPCODE.TABLE
|
||||||
|
.DA #LTR.L-OPCODE.TABLE
|
||||||
|
.DA #LTR.M-OPCODE.TABLE
|
||||||
|
.DA #LTR.N-OPCODE.TABLE
|
||||||
|
.DA #LTR.O-OPCODE.TABLE
|
||||||
|
.DA #LTR.P-OPCODE.TABLE
|
||||||
|
.DA #LTR.Q-OPCODE.TABLE
|
||||||
|
.DA #LTR.R-OPCODE.TABLE
|
||||||
|
.DA #LTR.S-OPCODE.TABLE
|
||||||
|
.DA #LTR.T-OPCODE.TABLE
|
||||||
|
.DA #LTR.U-OPCODE.TABLE
|
||||||
|
.DA #LTR.V-OPCODE.TABLE
|
||||||
|
.DA #LTR.W-OPCODE.TABLE
|
||||||
|
.DA #LTR.X-OPCODE.TABLE
|
||||||
|
.DA #LTR.Y-OPCODE.TABLE
|
||||||
|
.DA #LTR.Z-OPCODE.TABLE
|
||||||
|
*--------------------------------
|
||||||
|
* TWO KINDS OF ENTRIES, DISTINGUISHED BY FIRST BIT:
|
||||||
|
* 8-BIT ENTRIES: FIRST BIT = 0
|
||||||
|
* 24-BIT ENTRIES: FIRST BIT = 1
|
||||||
|
*
|
||||||
|
* FIRST ENTRY AT EACH LETTER IS AN 8-BIT ENTRY.
|
||||||
|
* EACH 8-BIT ENTRY IS FOLLOWED BY ONE OR MORE
|
||||||
|
* 24-BIT ENTRIES.
|
||||||
|
* THE SUB-LIST OF 24-BIT ENTRIES IS TERMINATED
|
||||||
|
* BY THE NEXT 8-BIT ENTRY.
|
||||||
|
* THE LIST OF 8-BIT ENTRIES IS TERMINATED BY
|
||||||
|
* AN 8-BIT ENTRY WITH BIT 6 = 1.
|
||||||
|
*
|
||||||
|
* THE VALUE OF BITS 5-0 IN AN 8-BIT ENTRY
|
||||||
|
* IS THE DIMINISHED ASCII CODE FOR THE
|
||||||
|
* SECOND LETTER OF AN OPCODE.
|
||||||
|
* THE VALUE OF BITS 5-0 OF A 24-BIT ENTRY
|
||||||
|
* IS THE DIMINISHED ASCII CODE FOR THE
|
||||||
|
* THIRD LETTER OF AN OPCODE.
|
||||||
|
* A...Z = $81...9A
|
||||||
|
* BLANK = $E0
|
||||||
|
* '1' = $F1
|
||||||
|
* THE VALUE OF THE SECOND BYTE OF A 24-BIT
|
||||||
|
* ENTRY IS AN OPCODE BASE.
|
||||||
|
* THE THIRD BYTE OF A 24-BIT ENTRY HAS TWO PARTS:
|
||||||
|
* BITS 4-1 ARE AN INDEX TO THE OP.MODE
|
||||||
|
* JUMP TABLE IN ASM.65816
|
||||||
|
* BITS 7-5 AND 0 ARE LEVEL MASK BITS.
|
||||||
|
* 000XXXX0 = 6502 OPCODE
|
||||||
|
* 000XXXX1 = SWEET-16
|
||||||
|
* 001XXXX0 = 65C02
|
||||||
|
* 010XXXX0 = ROCKWELL SPECIALS
|
||||||
|
* 100XXXX0 = 65816
|
||||||
|
*
|
||||||
|
* LEVEL.MASK = $00 FOR 6502
|
||||||
|
* = $20 FOR 65C02
|
||||||
|
* = $60 FOR ROCKWELL C02
|
||||||
|
* = $A0 FOR 65816
|
||||||
|
*--------------------------------
|
||||||
|
OP..1 .SE 0
|
||||||
|
OP..2 .SE 0
|
||||||
|
.MA OP
|
||||||
|
.DO "]1"=OP..1=0
|
||||||
|
LTR.]1 .DA #"]2"-$80 bits 76 = 01
|
||||||
|
OP..1 .SE "]1"
|
||||||
|
OP..2 .SE "]2"
|
||||||
|
.ELSE
|
||||||
|
.DO "]2"=OP..2=0
|
||||||
|
.DA #"]2"-$C0 bits 76 = 00
|
||||||
|
OP..2 .SE "]2"
|
||||||
|
.FIN
|
||||||
|
.FIN
|
||||||
|
.DA #"]3"^$40,#$]4,#O..]5!O..]6 bits 76 = 10 or 11
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
O..65816 .EQ $80
|
||||||
|
O..65R02 .EQ $40
|
||||||
|
O..65C02 .EQ $20
|
||||||
|
O..SWEET .EQ $01
|
||||||
|
O.. .EQ $00
|
||||||
|
*--------------------------------
|
||||||
|
OPCODE.TABLE
|
||||||
|
LTR.F
|
||||||
|
LTR.G
|
||||||
|
LTR.H
|
||||||
|
LTR.K
|
||||||
|
LTR.Q
|
||||||
|
LTR.U
|
||||||
|
LTR.V
|
||||||
|
LTR.Y
|
||||||
|
LTR.Z .HS 00
|
||||||
|
*--------------------------------
|
||||||
|
>OP A,D,C,61,COPS
|
||||||
|
>OP A,D,D,A1,XN,SWEET
|
||||||
|
>OP A,N,D,21,COPS
|
||||||
|
>OP A,S,L,02,SHIFTS
|
||||||
|
>OP B,C,C,90,REL8
|
||||||
|
>OP B,C,S,B0,REL8
|
||||||
|
>OP B,C," ",03,REL8,SWEET
|
||||||
|
>OP B,E,Q,F0,REL8
|
||||||
|
>OP B,G,E,B0,REL8
|
||||||
|
>OP B,I,T,00,BITS
|
||||||
|
>OP B,L,T,90,REL8
|
||||||
|
>OP B,M,I,30,REL8
|
||||||
|
>OP B,M," ",05,REL8,SWEET
|
||||||
|
>OP B,M,1,08,REL8,SWEET
|
||||||
|
>OP B,N,E,D0,REL8
|
||||||
|
>OP B,N,C,02,REL8,SWEET
|
||||||
|
>OP B,N,M,09,REL8,SWEET (BNM1)
|
||||||
|
>OP B,N,Z,07,REL8,SWEET
|
||||||
|
>OP B,P,L,10,REL8
|
||||||
|
>OP B,P," ",04,REL8,SWEET
|
||||||
|
>OP B,R,A,80,REL8,65C02
|
||||||
|
>OP B,R,K,00,SNGL
|
||||||
|
>OP B,R,L,82,REL16,65816
|
||||||
|
>OP B,R," ",01,REL8,SWEET
|
||||||
|
>OP B,V,C,50,REL8
|
||||||
|
>OP B,V,S,70,REL8
|
||||||
|
>OP B,B,R,0F,ROCKB,65R02
|
||||||
|
>OP B,B,S,8F,ROCKB,65R02
|
||||||
|
>OP B,K," ",0A,SNGL,SWEET
|
||||||
|
>OP B,S," ",0C,REL8,SWEET
|
||||||
|
>OP B,Z," ",06,REL8,SWEET
|
||||||
|
>OP C,L,C,18,SNGL
|
||||||
|
>OP C,L,D,D8,SNGL
|
||||||
|
>OP C,L,I,58,SNGL
|
||||||
|
>OP C,L,V,B8,SNGL
|
||||||
|
>OP C,M,P,C1,COPS
|
||||||
|
>OP C,O,P,02,CRS,65816
|
||||||
|
>OP C,P,X,04,BITS
|
||||||
|
>OP C,P,Y,03,BITS
|
||||||
|
>OP C,P,R,D1,XN,SWEET
|
||||||
|
>OP D,E,C,C2,SHIFTS
|
||||||
|
>OP D,E,X,CA,SNGL
|
||||||
|
>OP D,E,Y,88,SNGL
|
||||||
|
>OP D,C,R,F1,XN,SWEET
|
||||||
|
>OP E,O,R,41,COPS
|
||||||
|
>OP I,N,C,E2,SHIFTS
|
||||||
|
>OP I,N,X,E8,SNGL
|
||||||
|
>OP I,N,Y,C8,SNGL
|
||||||
|
>OP I,N,R,E1,XN,SWEET
|
||||||
|
>OP J,M,L,08,JUMPS,65816
|
||||||
|
>OP J,M,P,00,JUMPS
|
||||||
|
>OP J,S,L,0C,JUMPS,65816
|
||||||
|
>OP J,S,R,04,JUMPS
|
||||||
|
>OP L,D,A,A1,COPS
|
||||||
|
>OP L,D,X,02,BITS
|
||||||
|
>OP L,D,Y,01,BITS
|
||||||
|
>OP L,D," ",23,XN,SWEET
|
||||||
|
>OP L,D,D,42,XN,SWEET
|
||||||
|
>OP L,S,R,42,SHIFTS
|
||||||
|
>OP M,V,N,54,MOVES,65816
|
||||||
|
>OP M,V,P,44,MOVES,65816
|
||||||
|
>OP N,O,P,EA,SNGL
|
||||||
|
>OP O,R,A,01,COPS
|
||||||
|
>OP P,E,A,10,JUMPS,65816
|
||||||
|
>OP P,E,I,0A,BITS,65816
|
||||||
|
>OP P,E,R,62,REL16,65816
|
||||||
|
>OP P,H,A,48,SNGL
|
||||||
|
>OP P,H,B,8B,SNGL,65816
|
||||||
|
>OP P,H,D,0B,SNGL,65816
|
||||||
|
>OP P,H,K,4B,SNGL,65816
|
||||||
|
>OP P,H,P,08,SNGL
|
||||||
|
>OP P,H,X,DA,SNGL,65C02
|
||||||
|
>OP P,H,Y,5A,SNGL,65C02
|
||||||
|
>OP P,L,A,68,SNGL
|
||||||
|
>OP P,L,B,AB,SNGL,65816
|
||||||
|
>OP P,L,D,2B,SNGL,65816
|
||||||
|
>OP P,L,P,28,SNGL
|
||||||
|
>OP P,L,X,FA,SNGL,65C02
|
||||||
|
>OP P,L,Y,7A,SNGL,65C02
|
||||||
|
>OP P,O,P,62,POP,SWEET (POP,POPD)
|
||||||
|
>OP R,E,P,C2,CRS,65816
|
||||||
|
>OP R,O,L,22,SHIFTS
|
||||||
|
>OP R,O,R,62,SHIFTS
|
||||||
|
>OP R,T,I,40,SNGL
|
||||||
|
>OP R,T,L,6B,SNGL,65816
|
||||||
|
>OP R,T,S,60,SNGL
|
||||||
|
>OP R,T,N,00,SNGL,SWEET
|
||||||
|
>OP R,M,B,07,ROCKC,65R02
|
||||||
|
>OP R,S," ",0B,SNGL,SWEET
|
||||||
|
>OP S,B,C,E1,COPS
|
||||||
|
>OP S,E,C,38,SNGL
|
||||||
|
>OP S,E,D,F8,SNGL
|
||||||
|
>OP S,E,I,78,SNGL
|
||||||
|
>OP S,E,P,E2,CRS,65816
|
||||||
|
>OP S,E,T,11,SET,SWEET
|
||||||
|
>OP S,T,A,81,COPS
|
||||||
|
>OP S,T,P,DB,SNGL,65816
|
||||||
|
>OP S,T,P,72,XN,SWEET
|
||||||
|
>OP S,T,X,06,BITS
|
||||||
|
>OP S,T,Y,05,BITS
|
||||||
|
>OP S,T,Z,07,BITS,65C02
|
||||||
|
>OP S,T," ",33,XN,SWEET
|
||||||
|
>OP S,T,D,52,XN,SWEET
|
||||||
|
>OP S,U,B,B1,XN,SWEET
|
||||||
|
>OP S,M,B,87,ROCKC,65R02
|
||||||
|
>OP T,A,X,AA,SNGL
|
||||||
|
>OP T,A,Y,A8,SNGL
|
||||||
|
>OP T,C,D,5B,SNGL,65816
|
||||||
|
>OP T,C,S,1B,SNGL,65816
|
||||||
|
>OP T,D,C,7B,SNGL,65816
|
||||||
|
>OP T,R,B,09,BITS,65C02
|
||||||
|
>OP T,S,B,08,BITS,65C02
|
||||||
|
>OP T,S,C,3B,SNGL,65816
|
||||||
|
>OP T,S,X,BA,SNGL
|
||||||
|
>OP T,X,A,8A,SNGL
|
||||||
|
>OP T,X,S,9A,SNGL
|
||||||
|
>OP T,X,Y,9B,SNGL,65816
|
||||||
|
>OP T,Y,A,98,SNGL
|
||||||
|
>OP T,Y,X,BB,SNGL,65816
|
||||||
|
>OP W,A,I,CB,SNGL,65816
|
||||||
|
>OP W,D,M,42,SNGL,65816
|
||||||
|
>OP X,B,A,EB,SNGL,65816
|
||||||
|
>OP X,C,E,FB,SNGL,65816
|
||||||
|
.HS 40 <<<TERMINATOR>>>
|
||||||
|
*--------------------------------
|
||||||
|
CLASS.5.OPS
|
||||||
|
* BIT LDY LDX CPY CPX STY STX STZ
|
||||||
|
.HS 20..A0..A2..C0..E0..80..82..60
|
||||||
|
*
|
||||||
|
* TSB TRB PEI
|
||||||
|
.HS 00..10..D0
|
||||||
|
*
|
||||||
|
CLASS.5.LEGAL.MODES
|
||||||
|
.HS F8..F8..E6..E0..E0..70..64..78
|
||||||
|
.HS 60..60..40
|
||||||
|
*
|
||||||
|
* 80 -- IMMEDIATE
|
||||||
|
* 40 -- DIRECT
|
||||||
|
* 20 -- ABSOLUTE
|
||||||
|
* 10 -- DIRECT,X
|
||||||
|
* 08 -- ABSOLUTE,X
|
||||||
|
* 04 -- DIRECT,Y
|
||||||
|
* 02 -- ABSOLUTE,Y
|
||||||
|
* 01 -- <<<NOT USED>>>
|
||||||
|
*--------------------------------
|
||||||
|
* OPCODE TABLE SELECTION
|
||||||
|
* .OP 6502/65C02/R65C02/65816/SWEET16,...
|
||||||
|
*--------------------------------
|
||||||
|
DIR.OP LDA #0
|
||||||
|
STA LEVEL.MASK
|
||||||
|
LDA #15
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
.1 JSR ASM65816.GNC.UC GET NEXT CHARACTER
|
||||||
|
BCS .5 END
|
||||||
|
LDY #-2
|
||||||
|
.2 INY
|
||||||
|
INY
|
||||||
|
LDA PSOP.TABLE,Y
|
||||||
|
BEQ .1 ...END OF TABLE, TRY NEXT CHARACTER
|
||||||
|
CMP CURRENT.CHAR
|
||||||
|
BNE .2 ...NOT THIS ONE
|
||||||
|
.3 LDA PSOP.TABLE+1,Y
|
||||||
|
STA LEVEL.MASK
|
||||||
|
BPL .5
|
||||||
|
LDA #18
|
||||||
|
STA EMIT.MARGIN
|
||||||
|
.5 RTS RETURN TO ASSEMBLER
|
||||||
|
*--------------------------------
|
||||||
|
PSOP.TABLE
|
||||||
|
.DA #'8',#$A0 65816 = $A0
|
||||||
|
.DA #'C',#$20 65C02 = $20
|
||||||
|
.DO ROCKWELL
|
||||||
|
.DA #'R',#$60 ROCKWELL= $60
|
||||||
|
.FIN
|
||||||
|
.DO SWEET.16
|
||||||
|
.DA #'S',#$01 SWEET-16= $01
|
||||||
|
.FIN
|
||||||
|
.DA #0
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/asm65816.s
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
137
SCMASM.31/IO.S.IIE..txt
Normal file
137
SCMASM.31/IO.S.IIE..txt
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP IIE.INIT
|
||||||
|
JMP IIE.WARM
|
||||||
|
JMP IIE.RDKEY
|
||||||
|
JMP S.GET.HORIZ.POSN
|
||||||
|
JMP MON.HOME
|
||||||
|
JMP MON.CLREOL
|
||||||
|
JMP MON.CLREOP
|
||||||
|
JMP MON.UP
|
||||||
|
JMP MON.LF
|
||||||
|
JMP IIE.LEFT
|
||||||
|
JMP IIE.RIGHT
|
||||||
|
JMP IIE.COUT
|
||||||
|
JMP IIE.PICK.SCREEN
|
||||||
|
JMP IIE.HTABX
|
||||||
|
JMP IIE.HTAB
|
||||||
|
JMP IIE.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
IIE.INIT
|
||||||
|
LDA $BF98
|
||||||
|
AND #2
|
||||||
|
BEQ IO.HOME
|
||||||
|
LDA #$99 CTRL-Y
|
||||||
|
JMP $C300
|
||||||
|
*--------------------------------
|
||||||
|
IIE.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR IIE.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.HTAB
|
||||||
|
BIT $C01F
|
||||||
|
BPL .1
|
||||||
|
STA $57B
|
||||||
|
RTS
|
||||||
|
.1 STA CH
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
S.GET.HORIZ.POSN
|
||||||
|
LDA $57B
|
||||||
|
BIT $C01F
|
||||||
|
BMI .1
|
||||||
|
LDA CH
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV SAVE CV
|
||||||
|
JSR MON.INIT
|
||||||
|
TXA GET CV, FALL INTO VTAB
|
||||||
|
IIE.VTAB
|
||||||
|
STA CV
|
||||||
|
JMP MON.VTAB
|
||||||
|
*--------------------------------
|
||||||
|
IIE.RDKEY
|
||||||
|
LDA #40
|
||||||
|
BIT $C01F
|
||||||
|
BPL .1
|
||||||
|
ASL
|
||||||
|
.1 STA SCREEN.WIDTH
|
||||||
|
JSR MON.RDKEY
|
||||||
|
CMP #$FF
|
||||||
|
BNE .2
|
||||||
|
LDA #$88
|
||||||
|
.2 ASL $C061 SET CARRY IF "OPEN APPLE" PRESSED
|
||||||
|
ORA #$80
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.COUT
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .2 ...NORMAL
|
||||||
|
BIT $C01F ...INVERSE; 40- OR 80-COLUMNS?
|
||||||
|
BPL .2 ...40-COLUMN
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR MON.COUT
|
||||||
|
PLA
|
||||||
|
CMP #$20 CONTROL CHAR?
|
||||||
|
BCS .1 ...NO
|
||||||
|
ORA #$40 MAKE PRINTABLE CHARACTER
|
||||||
|
.1 ORA #$80
|
||||||
|
JSR MON.COUT
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.2 JMP MON.COUT
|
||||||
|
*--------------------------------
|
||||||
|
IIE.PICK.SCREEN
|
||||||
|
BIT $C01F
|
||||||
|
BMI .1
|
||||||
|
LDA (BASL),Y
|
||||||
|
RTS
|
||||||
|
.1 TYA
|
||||||
|
LSR
|
||||||
|
TAY
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
|
LDA $C055
|
||||||
|
BCC .2
|
||||||
|
LDA $C054
|
||||||
|
.2 LDA (BASL),Y
|
||||||
|
BIT $C054
|
||||||
|
PLP
|
||||||
|
PHA SAVE CHAR FROM SCREEN
|
||||||
|
TYA RESTORE Y-REG
|
||||||
|
ROL
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
IIE.RIGHT
|
||||||
|
BIT $C01F IN 80-COLUMN MODE?
|
||||||
|
BMI .1 ...YES
|
||||||
|
JMP MON.ADVANC
|
||||||
|
.1 LDA #$9C FORWARD SPACE
|
||||||
|
.HS 2C SKIP TWO BYTES
|
||||||
|
*--------------------------------
|
||||||
|
IIE.LEFT
|
||||||
|
LDA #$88 BACKSPACE
|
||||||
|
JMP MON.COUT
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/io.s.iie
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
270
SCMASM.31/IO.S.IIE.ULTRA.txt
Normal file
270
SCMASM.31/IO.S.IIE.ULTRA.txt
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
* VIDEX ULTRATERM DRIVER -- ASSUME SLOT 3
|
||||||
|
ULTRA.SLOT .EQ 3
|
||||||
|
SKMOD .EQ 1 SHIFT KEY MOD (=0 FOR //E VERSION)
|
||||||
|
*--------------------------------
|
||||||
|
* TO MAKE THE EDIT COMMAND USE MORE THAN 24 LINES,
|
||||||
|
* CHANGE $17 TO $1F OR $2F AT $803A
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.CARD .EQ ULTRA.SLOT*256+$C000
|
||||||
|
ULTRA.COUT1 .EQ ULTRA.SLOT*256+$C007
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.REG .EQ ULTRA.SLOT*16+$C080
|
||||||
|
ULTRA.DATA .EQ ULTRA.SLOT*16+$C081
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.HORIZ .EQ $0578+ULTRA.SLOT
|
||||||
|
ULTRA.START .EQ $06F8+ULTRA.SLOT TOP-OF-SCREEN ADDRESS / 16
|
||||||
|
ULTRA.CHPG .EQ $0678
|
||||||
|
ULTRA.TEMPX .EQ $0778
|
||||||
|
ULTRA.TEMPY .EQ $07F8
|
||||||
|
ULTRA.FLAGS .EQ $07F8+ULTRA.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP ULTRA.INIT
|
||||||
|
JMP ULTRA.WARM
|
||||||
|
JMP ULTRA.READ.KEY.WITH.CASE
|
||||||
|
JMP ULTRA.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP ULTRA.PICK.SCREEN
|
||||||
|
JMP ULTRA.HTABX
|
||||||
|
JMP ULTRA.HTAB
|
||||||
|
JMP ULTRA.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
LDA ULTRA.FLAGS
|
||||||
|
EOR #$40
|
||||||
|
STA ULTRA.FLAGS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR ULTRA.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.GET.HORIZ.POSN
|
||||||
|
LDA ULTRA.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA ULTRA.HORIZ
|
||||||
|
ULTRA.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR ULTRA.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
JSR .1
|
||||||
|
LDA CV
|
||||||
|
|
||||||
|
.1 CLC ADD $A0 OFFSET
|
||||||
|
ADC #$A0
|
||||||
|
JMP ULTRA.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.INIT
|
||||||
|
LDA #80
|
||||||
|
STA ULTRA.SCREEN.WIDTH
|
||||||
|
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||||||
|
STA $C00B SWITCH OFF //E C3 ROM
|
||||||
|
STA $C006 SWITCH OFF //E C100-C7FF ROM
|
||||||
|
JSR ULTRA.CARD
|
||||||
|
ULTRA.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA ULTRA.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA ULTRA.SLOT*2+$BE10,X
|
||||||
|
LDA ULTRA.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA ULTRA.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.VECTORS
|
||||||
|
.DA ULTRA.COUT
|
||||||
|
.DA ULTRA.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP ULTRA.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||||||
|
STA ULTRA.REG
|
||||||
|
LDA #$67
|
||||||
|
STA ULTRA.DATA
|
||||||
|
LDA #$0B
|
||||||
|
STA ULTRA.REG
|
||||||
|
LDA #$08
|
||||||
|
STA ULTRA.DATA
|
||||||
|
.1 LDA $C000
|
||||||
|
BPL .1
|
||||||
|
STA $C010
|
||||||
|
PHA
|
||||||
|
LDA #$06 HIDE THE CURSOR
|
||||||
|
STA ULTRA.DATA
|
||||||
|
PLA
|
||||||
|
CMP #$8D
|
||||||
|
BNE .2
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDA #$8D
|
||||||
|
.DO SKMOD
|
||||||
|
.2 PHA CHECK SHIFT LOCK FLAG
|
||||||
|
LDA ULTRA.FLAGS
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
PLA
|
||||||
|
BCC .5 ...SHIFT LOCK IS ON
|
||||||
|
CMP #$C0
|
||||||
|
BCC .5 NOT IN ALPHA RANGE
|
||||||
|
BEQ .3 ...@ IS CAPITAL P
|
||||||
|
ORA #$20 ADJUST TO LOWER CASE
|
||||||
|
BIT $C063 TEST SHIFT KEY (PB3)
|
||||||
|
BMI .5 ...NOT PRESSED, LOWER CASE
|
||||||
|
CMP #$FB
|
||||||
|
BCC .4 ...NORMAL A-Z
|
||||||
|
.3 EOR #$10 CHANGE @ to P, [\]^_ to KLMNO
|
||||||
|
.4 AND #$DF UPPER CASE
|
||||||
|
.5 RTS
|
||||||
|
.ELSE
|
||||||
|
.2 RTS
|
||||||
|
.FIN
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.COUT
|
||||||
|
CLD
|
||||||
|
PHA
|
||||||
|
STA MON.INVFLG BIT 7 CONTROLS INV/NORM
|
||||||
|
CMP #$20 CATCH INV CTRL CHARS
|
||||||
|
BCS .1 ...NOT ONE
|
||||||
|
ORA #$40 MAKE CTRL VISIBLE
|
||||||
|
.1 JSR ULTRA.COUT1
|
||||||
|
LDA #$FF
|
||||||
|
STA MON.INVFLG
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
W16TBL .DA #80/16
|
||||||
|
.DA #96/16
|
||||||
|
.DA #160/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #80/16
|
||||||
|
.DA #160/16
|
||||||
|
.DA #128/16
|
||||||
|
*--------------------------------
|
||||||
|
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||||||
|
*--------------------------------
|
||||||
|
ULTRA.PICK.SCREEN
|
||||||
|
STY ULTRA.TEMPY
|
||||||
|
STX ULTRA.TEMPX
|
||||||
|
BIT $CFFF
|
||||||
|
BIT ULTRA.CARD TURN ON SCREEN
|
||||||
|
*--------------------------------
|
||||||
|
LDA ULTRA.FLAGS GET MODE (0...7)
|
||||||
|
AND #$07
|
||||||
|
TAY Y = MODE INDEX (0...7)
|
||||||
|
*--------------------------------
|
||||||
|
LDA ULTRA.TEMPY HORIZ. POSN
|
||||||
|
CPY #$06 132 COL MODE?
|
||||||
|
BNE .1 ...NOT 132 COLUMNS
|
||||||
|
ADC #14 ADJUST FOR 132 COLUMN MODE
|
||||||
|
.1 STA ULTRA.CHPG
|
||||||
|
*--------------------------------
|
||||||
|
LDX W16TBL,Y GET WIDTH/16
|
||||||
|
LDA ULTRA.START CV*(WIDTH/16) + START
|
||||||
|
.2 CLC INCLUDE 'CLC' IN LOOP ON PURPOSE
|
||||||
|
ADC CV TO FORCE WRAP-AROUND
|
||||||
|
DEX
|
||||||
|
BNE .2
|
||||||
|
*--------------------------------
|
||||||
|
PHA
|
||||||
|
LSR *16
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TAX SAVE PAGE VALUE IN X-REG
|
||||||
|
PLA
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
*--------------------------------
|
||||||
|
CLC + CH (or CH+15 if 132 columns)
|
||||||
|
ADC ULTRA.CHPG
|
||||||
|
STA ULTRA.CHPG
|
||||||
|
BCC .3
|
||||||
|
INX ADD CARRY TO PAGE VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.3 TXA GET PAGE VALUE
|
||||||
|
AND #$0F
|
||||||
|
ORA MODETBL,Y
|
||||||
|
STA ULTRA.REG+2
|
||||||
|
*--------------------------------
|
||||||
|
ASL
|
||||||
|
AND #$0C
|
||||||
|
TAY
|
||||||
|
LDA ULTRA.REG,Y
|
||||||
|
TXA GET PAGE VALUE AGAIN
|
||||||
|
LSR SET CARRY IF IN 2ND PAGE
|
||||||
|
*--------------------------------
|
||||||
|
LDY ULTRA.CHPG
|
||||||
|
LDA $CC00,Y
|
||||||
|
BCC .4
|
||||||
|
LDA $CD00,Y
|
||||||
|
.4 ORA #$80 MAKE HIGH ASCII
|
||||||
|
LDY ULTRA.TEMPY RESTORE REGS
|
||||||
|
LDX ULTRA.TEMPX
|
||||||
|
RTS ALL DONE
|
||||||
|
*--------------------------------
|
||||||
|
MODETBL .HS 40 80X24 (VIDEOTERM EMULATION)
|
||||||
|
.HS 50 96X24
|
||||||
|
.HS 70 160X24
|
||||||
|
.HS 50 80X24 INTERLACE
|
||||||
|
.HS 50 80X32 INTERLACE
|
||||||
|
.HS 50 80X48 INTERLACE
|
||||||
|
.HS 70 132X24 INTERLACE
|
||||||
|
.HS 70 128X32 INTERLACE
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/io.s.ultra
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
219
SCMASM.31/IO.S.IIE.VIDEX.txt
Normal file
219
SCMASM.31/IO.S.IIE.VIDEX.txt
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.SLOT .EQ 3 ASSUME SLOT 3
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.CARD .EQ VIDEX.SLOT*256+$C000
|
||||||
|
VIDEX.COUT1 .EQ VIDEX.SLOT*256+$C007
|
||||||
|
VIDEX.REG .EQ VIDEX.SLOT*16+$C080
|
||||||
|
VIDEX.DATA .EQ VIDEX.SLOT*16+$C081
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.BASEL .EQ $0478+VIDEX.SLOT
|
||||||
|
VIDEX.BASEH .EQ $04F8+VIDEX.SLOT
|
||||||
|
VIDEX.HORIZ .EQ $0578+VIDEX.SLOT
|
||||||
|
VIDEX.CHAR .EQ $0678+VIDEX.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP VIDEX.INIT
|
||||||
|
JMP VIDEX.WARM
|
||||||
|
JMP VIDEX.READ.KEY.WITH.CASE
|
||||||
|
JMP VIDEX.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP VIDEX.PICK.SCREEN
|
||||||
|
JMP VIDEX.HTABX
|
||||||
|
JMP VIDEX.HTAB
|
||||||
|
JMP VIDEX.VTAB
|
||||||
|
*---Case Toggle MUST go here-----
|
||||||
|
LDA CASEFLG
|
||||||
|
EOR #$80
|
||||||
|
STA CASEFLG
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR VIDEX.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.GET.HORIZ.POSN
|
||||||
|
LDA VIDEX.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA VIDEX.HORIZ
|
||||||
|
VIDEX.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
CLC
|
||||||
|
ADC #$A0
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
LDA CV
|
||||||
|
ORA #$A0
|
||||||
|
JMP VIDEX.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.INIT
|
||||||
|
LDA #80
|
||||||
|
STA VIDEX.SCREEN.WIDTH
|
||||||
|
STA CASEFLG CLEAR CASEFLG (BIT7=0)
|
||||||
|
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||||||
|
JSR VIDEX.CARD
|
||||||
|
VIDEX.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA VIDEX.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA VIDEX.SLOT*2+$BE10,X
|
||||||
|
LDA VIDEX.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA VIDEX.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.VECTORS
|
||||||
|
.DA VIDEX.COUT
|
||||||
|
.DA VIDEX.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP VIDEX.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$67
|
||||||
|
STA VIDEX.DATA
|
||||||
|
LDA #$0B
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$08
|
||||||
|
STA VIDEX.DATA
|
||||||
|
.1 LDA $C000
|
||||||
|
BPL .1
|
||||||
|
STA $C010
|
||||||
|
PHA
|
||||||
|
LDA #$0A HIDE THE CURSOR
|
||||||
|
STA VIDEX.REG
|
||||||
|
LDA #$09
|
||||||
|
STA VIDEX.DATA
|
||||||
|
PLA
|
||||||
|
CMP #$8D
|
||||||
|
BNE .2
|
||||||
|
JSR IO.CLREOL
|
||||||
|
LDA #$8D
|
||||||
|
.2 BIT CASEFLG TEST CASE CONVERSION FLAG
|
||||||
|
BPL .6 DO NOT CONVERT
|
||||||
|
CMP #$B0
|
||||||
|
BCC .6 DO NOT CONVERT
|
||||||
|
BIT $C063 TEST PADDLE BUTTON
|
||||||
|
BMI .5 NO SHIFTKEY PRESSED
|
||||||
|
CMP #$B0
|
||||||
|
BEQ .4
|
||||||
|
CMP #$C0
|
||||||
|
BNE .3
|
||||||
|
LDA #$D0
|
||||||
|
.3 CMP #$DB
|
||||||
|
BCC .6
|
||||||
|
AND #$CF
|
||||||
|
BNE .6
|
||||||
|
.4 LDA #$DD
|
||||||
|
.5 ORA #$20
|
||||||
|
.6 AND #$7F
|
||||||
|
STA VIDEX.CHAR
|
||||||
|
ORA #$80
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.COUT
|
||||||
|
CLD
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .1 ...NORMAL
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR VIDEX.COUT1
|
||||||
|
PLA
|
||||||
|
ORA #$80 MAKE PRINTABLE CHARACTER
|
||||||
|
CMP #$A0
|
||||||
|
BCS .2
|
||||||
|
ORA #$40
|
||||||
|
.2 JSR VIDEX.COUT1
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.1 JMP VIDEX.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||||||
|
*--------------------------------
|
||||||
|
VIDEX.PICK.SCREEN
|
||||||
|
STX SAVEX
|
||||||
|
BIT $CFFF TURN ON $C800 VIDEO SPACE
|
||||||
|
BIT VIDEX.CARD
|
||||||
|
*---CALCULATE POSITION-----------
|
||||||
|
CLC
|
||||||
|
TYA COLUMN 0-79
|
||||||
|
ADC VIDEX.BASEL
|
||||||
|
PHA
|
||||||
|
LDA #0
|
||||||
|
ADC VIDEX.BASEH
|
||||||
|
PHA
|
||||||
|
ASL
|
||||||
|
AND #$0C USE BIT 0 AND 1 FOR PAGING
|
||||||
|
TAX
|
||||||
|
LDA VIDEX.REG,X
|
||||||
|
PLA
|
||||||
|
LSR ODD/EVEN PAGE
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
*---GET CHAR FROM WINDOW---------
|
||||||
|
LDA $CC00,X
|
||||||
|
BCC .1
|
||||||
|
LDA $CD00,X
|
||||||
|
.1 ORA #$80
|
||||||
|
STA VIDEX.CHAR
|
||||||
|
LDX SAVEX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SAVEX .BS 1
|
||||||
|
CASEFLG .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/io.s.videx
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
166
SCMASM.31/IO.S.STB80.txt
Normal file
166
SCMASM.31/IO.S.STB80.txt
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.PH $A800
|
||||||
|
*--------------------------------
|
||||||
|
STB.SCREEN.WIDTH .EQ $A5
|
||||||
|
*--------------------------------
|
||||||
|
STB.SLOT .EQ 3
|
||||||
|
*--------------------------------
|
||||||
|
STB.HORIZ .EQ $05F8+STB.SLOT
|
||||||
|
STB.ESCBYT .EQ $06F8+STB.SLOT
|
||||||
|
STB.FLAGS .EQ $0778+STB.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
STB.ENTRY .EQ STB.SLOT*256+$C000
|
||||||
|
STB.RDKEY1 .EQ STB.SLOT*256+$C005
|
||||||
|
STB.COUT1 .EQ STB.SLOT*256+$C019
|
||||||
|
STB.SCREEN .EQ STB.SLOT*256+$C031
|
||||||
|
*--------------------------------
|
||||||
|
* I/O VECTORS -- 3 BYTES EACH
|
||||||
|
*--------------------------------
|
||||||
|
JMP STB.INIT
|
||||||
|
JMP STB.WARM
|
||||||
|
JMP STB.READ.KEY.WITH.CASE
|
||||||
|
JMP STB.GET.HORIZ.POSN
|
||||||
|
LDA #$8C ^L--HOME
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9D ^]--CLREOL
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8B ^K--CLREOP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9F ^_--UP
|
||||||
|
.HS 2C
|
||||||
|
LDA #$8A ^J--DOWN
|
||||||
|
.HS 2C
|
||||||
|
LDA #$88 ^H--LEFT
|
||||||
|
.HS 2C
|
||||||
|
LDA #$9C ^\--RIGHT
|
||||||
|
NOP
|
||||||
|
JMP MON.COUT
|
||||||
|
JMP STB.PICK.SCREEN
|
||||||
|
JMP STB.HTABX
|
||||||
|
JMP STB.HTAB
|
||||||
|
JMP STB.VTAB
|
||||||
|
*---Case Change MUST go here-----
|
||||||
|
LDA STB.FLAGS
|
||||||
|
EOR #$40
|
||||||
|
STA STB.FLAGS
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* VARIABLE LENGTH ROUTINES
|
||||||
|
*--------------------------------
|
||||||
|
STB.HTABX
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
JSR STB.HTAB
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.GET.HORIZ.POSN
|
||||||
|
LDA STB.HORIZ
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.VTAB
|
||||||
|
STA CV
|
||||||
|
LDA STB.HORIZ
|
||||||
|
STB.HTAB
|
||||||
|
PHA SAVE HORIZ POSN
|
||||||
|
LDA #$9E
|
||||||
|
JSR STB.COUT1
|
||||||
|
PLA GET HORIZ POSN
|
||||||
|
JSR .1
|
||||||
|
LDA CV
|
||||||
|
|
||||||
|
.1 CLC
|
||||||
|
ADC #$A0
|
||||||
|
JMP STB.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
STB.INIT
|
||||||
|
LDA #80
|
||||||
|
STA STB.SCREEN.WIDTH
|
||||||
|
LDA #$8C CLEAR SCREEN AND START STB-80
|
||||||
|
JSR STB.ENTRY
|
||||||
|
LDA #0
|
||||||
|
STA STB.ESCBYT DISABLE ^A AND ESC-MODE
|
||||||
|
LDA #2 DISABLE "HOME" SENSING
|
||||||
|
STA STB.FLAGS
|
||||||
|
STB.INSTALL.VECTORS
|
||||||
|
LDX #1
|
||||||
|
.1 LDA STB.VECTORS,X
|
||||||
|
STA $36,X
|
||||||
|
STA STB.SLOT*2+$BE10,X
|
||||||
|
LDA STB.VECTORS+2,X
|
||||||
|
BIT F.EXEC
|
||||||
|
BMI .2
|
||||||
|
STA $38,X
|
||||||
|
.2 STA STB.SLOT*2+$BE20,X
|
||||||
|
DEX
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.VECTORS .DA STB.COUT
|
||||||
|
.DA STB.RDKEY
|
||||||
|
*--------------------------------
|
||||||
|
STB.WARM
|
||||||
|
CLD
|
||||||
|
LDX CV
|
||||||
|
JSR MON.INIT
|
||||||
|
STX CV
|
||||||
|
JMP STB.INSTALL.VECTORS
|
||||||
|
*--------------------------------
|
||||||
|
* READ KEY WITH CASE CONTROL
|
||||||
|
*--------------------------------
|
||||||
|
STB.READ.KEY.WITH.CASE
|
||||||
|
JSR MON.RDKEY
|
||||||
|
ORA #$80 REQUIRED FOR EXEC FILES
|
||||||
|
CLC SIGNAL NO OPEN APPLE
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.RDKEY
|
||||||
|
CLD
|
||||||
|
LDA #$0A
|
||||||
|
STA STB.SLOT*16+$C080
|
||||||
|
LDA #$07 SOLID DBL LINE CURSOR
|
||||||
|
STA STB.SLOT*16+$C081
|
||||||
|
JSR STB.RDKEY1
|
||||||
|
ORA #$80 Make sure it looks right
|
||||||
|
PHA
|
||||||
|
LDA #$0A
|
||||||
|
STA STB.SLOT*16+$C080
|
||||||
|
LDA #$20 CURSOR OFF
|
||||||
|
STA STB.SLOT*16+$C081
|
||||||
|
PLA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
STB.COUT
|
||||||
|
CLD
|
||||||
|
CMP #$80 NORMAL OR INVERSE?
|
||||||
|
BCS .1 ...NORMAL
|
||||||
|
PHA ...80-COLUMN
|
||||||
|
LDA #$8F SELECT INVERSE DISPLAY
|
||||||
|
JSR STB.COUT1
|
||||||
|
PLA
|
||||||
|
ORA #$80 MAKE PRINTABLE CHARACTER
|
||||||
|
CMP #$A0
|
||||||
|
BCS .2
|
||||||
|
ORA #$40
|
||||||
|
.2 JSR STB.COUT1
|
||||||
|
LDA #$8E SELECT NORMAL DISPLAY
|
||||||
|
.1 JMP STB.COUT1
|
||||||
|
*--------------------------------
|
||||||
|
STB.PICK.SCREEN
|
||||||
|
STX $481
|
||||||
|
TYA
|
||||||
|
STA $482
|
||||||
|
JSR STB.HTAB
|
||||||
|
JSR STB.SCREEN
|
||||||
|
LDY $482
|
||||||
|
LDX $481
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
.EP
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/io.s.stb80
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
491
SCMASM.31/SCI.S.CAT.txt
Normal file
491
SCMASM.31/SCI.S.CAT.txt
Normal file
@ -0,0 +1,491 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* CATALOG COMMAND
|
||||||
|
*--------------------------------
|
||||||
|
CAT
|
||||||
|
LDA #39
|
||||||
|
.HS 2C SKIP OVER TWO BYTES
|
||||||
|
CATALOG
|
||||||
|
LDA #79
|
||||||
|
STA CAT.WIDTH
|
||||||
|
LDA #0 CLEAR ACCUMULATED BLOCKS COUNTER
|
||||||
|
STA BLOCKS
|
||||||
|
STA BLOCKS+1
|
||||||
|
LDA FBITS TEST FOR TYPE AND PATHNAME
|
||||||
|
AND #$05
|
||||||
|
LSR PATHNAME BIT INTO CARRY
|
||||||
|
BNE .1 ...TYPE STATED
|
||||||
|
STA VAL.T SET T=0, LIST ALL TYPES
|
||||||
|
.1 BCS .2 ...PATH GIVEN
|
||||||
|
JSR GET.FILE.INFO NONE STATED, GET PREFIX
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---GET DIRECTORY----------------
|
||||||
|
.2 JSR OPEN.READ.DIR.HEADER
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
LDY #0 Print directory pathname
|
||||||
|
.15 LDA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INY
|
||||||
|
CPY PATHNAME.ONE.BUFFER
|
||||||
|
BCC .15
|
||||||
|
JSR CROUT
|
||||||
|
*---PRINT TITLES-----------------
|
||||||
|
LDA #Q.DIRHDR
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
JSR PRINT.CATALOG.LINE
|
||||||
|
*---IF NO MORE FILES, FINISHED---
|
||||||
|
.3 LDA FILE.COUNT ANY FILES LEFT?
|
||||||
|
ORA FILE.COUNT+1
|
||||||
|
BEQ .7 ...NO, FINISHED
|
||||||
|
*---NEXT FILE DESCRIPTION--------
|
||||||
|
JSR READ.NEXT.ENTRY
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
LDA VAL.T CHECK IF WE LIKE THIS TYPE
|
||||||
|
BEQ .4 ...WE LIKE THEM ALL
|
||||||
|
CMP DIRBUF+16 FILE TYPE
|
||||||
|
BNE .5 ...NO, SKIP OVER IT
|
||||||
|
.4 JSR FORMAT.CAT.ENTRY
|
||||||
|
JSR PRINT.CATALOG.LINE PRINT IT
|
||||||
|
*---CHECK FOR PAUSE/ABORT--------
|
||||||
|
.5 JSR CHECK.KEY SEE IF KEYPRESS
|
||||||
|
BMI .3 ...NO, CONTINUE CATALOG
|
||||||
|
BEQ .7 ...<CR> or <ESC>, abort
|
||||||
|
*---<CR> or <ESC>, so abort------
|
||||||
|
.6 JSR CHECK.KEY
|
||||||
|
BMI .6 WAIT FOR KEY
|
||||||
|
BNE .3 ...NOT CR OR ESC, CONTINUE
|
||||||
|
*---<CR> or <ESC>, abort---------
|
||||||
|
.7 LDX CAT.INDEX
|
||||||
|
LDA FILE.REFNUMS,X
|
||||||
|
JSR CLOSE.ONE.FILE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
JMP FREE.BLOCKS FORMAT BLOCKS FREE ETC.
|
||||||
|
.8 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.KEY
|
||||||
|
LDA $C000 SEE IF KEYSTROKE
|
||||||
|
BPL .1 ...NO
|
||||||
|
STA $C010 ...YES, CLEAR STROBE
|
||||||
|
.1 EOR #$8D SET .EQ. IF <RET>
|
||||||
|
BEQ .2 ...YES
|
||||||
|
EOR #$8D^$9B OR IF <ESC>
|
||||||
|
.2 RTS .MI. IF NO KEY
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT BLOCKS FREE/INUSE
|
||||||
|
*--------------------------------
|
||||||
|
FREE.BLOCKS
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDA #Q.BLOCKS.ABOVE
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
LDA BLOCKS
|
||||||
|
LDX BLOCKS+1
|
||||||
|
LDY #24
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
JSR PRINT.MESSAGE
|
||||||
|
*--------------------------------
|
||||||
|
LDA #PATHNAME.ONE.BUFFER+1 set up ONLINE call
|
||||||
|
STA MISC.PARMS+2 to read volume name
|
||||||
|
LDA /PATHNAME.ONE.BUFFER+1
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA UNIT
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
JSR MLI.C5 ONLINE
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---Setup GET FILE INFO call-----
|
||||||
|
LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
AND #$0F
|
||||||
|
TAX
|
||||||
|
INX
|
||||||
|
STX PATHNAME.ONE.BUFFER
|
||||||
|
LDA #"/"
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
JSR GET.FILE.INFO
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---Format the bottom line-------
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDA #Q.BLOCKS
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
*---Total Blocks in Volume-------
|
||||||
|
LDA GET.SET.PARMS+5
|
||||||
|
LDX GET.SET.PARMS+6
|
||||||
|
LDY #51
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---Blocks Used in Volume--------
|
||||||
|
LDA GET.SET.PARMS+8
|
||||||
|
LDX GET.SET.PARMS+9
|
||||||
|
LDY #24
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---Blocks Free in Volume--------
|
||||||
|
LDA GET.SET.PARMS+5
|
||||||
|
SEC
|
||||||
|
SBC GET.SET.PARMS+8
|
||||||
|
PHA
|
||||||
|
LDA GET.SET.PARMS+6
|
||||||
|
SBC GET.SET.PARMS+9
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
LDY #37
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
JSR PRINT.CATALOG.LINE
|
||||||
|
CLC
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN/READ DIRECTORY HEADER
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.READ.DIR.HEADER
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
STX CAT.INDEX
|
||||||
|
LDX #$0F IS STORAGE TYPE = VOL DIR?
|
||||||
|
CPX GET.SET.PARMS+7
|
||||||
|
BNE .1 ...NO
|
||||||
|
STX GET.SET.PARMS+4 ...YES, MAKE TYPE = DIR
|
||||||
|
.1 LDA #$01 FILE MUST BE READABLE
|
||||||
|
JSR OPEN.DIRECTORY
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
|
||||||
|
LDX CAT.INDEX
|
||||||
|
STA FILE.REFNUMS,X
|
||||||
|
LDA #DIRBUF
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /DIRBUF
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #$2B
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .3
|
||||||
|
LDX #3
|
||||||
|
.2 LDA DIRBUF+35,X ENTRY LENGTH, ENTRIES/BLOCK,
|
||||||
|
STA ENTRY.LENGTH,X and FILE COUNT
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
LDA #1
|
||||||
|
STA ENTRY.COUNTER
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* READ NEXT DIRECTORY ENTRY
|
||||||
|
*--------------------------------
|
||||||
|
READ.NEXT.ENTRY
|
||||||
|
.1 LDY ENTRY.COUNTER
|
||||||
|
CPY ENTRIES.PER.BLOCK
|
||||||
|
BCC .2
|
||||||
|
*---Skip ahead remainder bytes---
|
||||||
|
LDA #4
|
||||||
|
SBC MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
JSR MLI.CA
|
||||||
|
BCS .4 ...ERROR
|
||||||
|
LDY #0
|
||||||
|
LDA #4
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
*---Read a file description------
|
||||||
|
.2 INY NEXT ENTRY
|
||||||
|
STY ENTRY.COUNTER
|
||||||
|
LDA ENTRY.LENGTH
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
ADC MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .4 ...ERROR
|
||||||
|
*---Check if deleted file--------
|
||||||
|
LDA DIRBUF
|
||||||
|
AND #$F0
|
||||||
|
BEQ .1 ...deleted
|
||||||
|
*---Count the file---------------
|
||||||
|
LDA FILE.COUNT
|
||||||
|
BNE .3
|
||||||
|
DEC FILE.COUNT+1
|
||||||
|
.3 DEC FILE.COUNT
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT CATALOG ENTRY LINE
|
||||||
|
*--------------------------------
|
||||||
|
.DO LOWERCASE=1
|
||||||
|
FORMAT.CAT.BITS .HS 8040201008040201
|
||||||
|
.FIN
|
||||||
|
FORMAT.CAT.ENTRY
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
|
||||||
|
.DO LOWERCASE=1
|
||||||
|
lda DIRBUF+$1D
|
||||||
|
bpl .18
|
||||||
|
|
||||||
|
lda DIRBUF
|
||||||
|
and #$0f
|
||||||
|
tay
|
||||||
|
|
||||||
|
.10 cpy #8
|
||||||
|
bcs .13
|
||||||
|
|
||||||
|
lda DIRBUF+$1D
|
||||||
|
and FORMAT.CAT.BITS,y
|
||||||
|
beq .15
|
||||||
|
|
||||||
|
bne .14
|
||||||
|
|
||||||
|
.13 lda DIRBUF+$1C
|
||||||
|
and FORMAT.CAT.BITS-8,y
|
||||||
|
beq .15
|
||||||
|
|
||||||
|
.14 lda DIRBUF,y
|
||||||
|
eor #$20
|
||||||
|
sta DIRBUF,y
|
||||||
|
|
||||||
|
.15 dey
|
||||||
|
bne .10
|
||||||
|
|
||||||
|
.18 .FIN
|
||||||
|
|
||||||
|
LDA DIRBUF LENGTH OF FILENAME
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
|
.1 LDA DIRBUF,Y
|
||||||
|
ORA #$80
|
||||||
|
STA WBUF+7,Y
|
||||||
|
DEY
|
||||||
|
BNE .1
|
||||||
|
STY ACCUM+2
|
||||||
|
*---GET FILE TYPE----------------
|
||||||
|
LDA DIRBUF+16 FILE TYPE
|
||||||
|
LDX #LAST.FILE.TYPE
|
||||||
|
LDY #3 POINT INTO WBUF
|
||||||
|
.2 CMP FILE.TYPES,X
|
||||||
|
BEQ .3 ...MATCH!
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
JMP .6
|
||||||
|
.3 DEX
|
||||||
|
LDA FILE.TYPES,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
BNE .3
|
||||||
|
*---SKIP IF 40-COLUMN------------
|
||||||
|
BIT CAT.WIDTH
|
||||||
|
BVC .7
|
||||||
|
*---Display AuxType--------------
|
||||||
|
LDY #"R" Use "R=" if type TXT
|
||||||
|
LDA DIRBUF+16 FILE TYPE
|
||||||
|
CMP #$04
|
||||||
|
BEQ .5 ...it is TXT
|
||||||
|
CMP #$06 Use "A=" if type BIN
|
||||||
|
BNE .6 ...not BIN, just show $xxxx
|
||||||
|
LDY #"A" ...BIN
|
||||||
|
.5 STY WBUF+73
|
||||||
|
LDA #"="
|
||||||
|
STA WBUF+74
|
||||||
|
.6 LDY #78
|
||||||
|
LDA DIRBUF+31 AUXTYPE
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
LDA DIRBUF+32 "
|
||||||
|
JSR CONVERT.TO.HEX
|
||||||
|
*---Show file length-------------
|
||||||
|
LDA DIRBUF+23 EOF MARK MSB
|
||||||
|
STA ACCUM+2
|
||||||
|
LDA DIRBUF+21 EOF MARK
|
||||||
|
LDX DIRBUF+22 " "
|
||||||
|
LDY #70
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
*---CREATION DATE/TIME-----------
|
||||||
|
LDX #$18 OFFSET IN DIRBUF
|
||||||
|
LDY #61 OFFSET IN WBUF
|
||||||
|
JSR FORMAT.DATE.AND.TIME
|
||||||
|
*---Blocks in the file-----------
|
||||||
|
.7 LDY #27
|
||||||
|
LDA DIRBUF+19 BLOCKS IN USE
|
||||||
|
LDX DIRBUF+20 "
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
CLC
|
||||||
|
LDA BLOCKS
|
||||||
|
ADC DIRBUF+19
|
||||||
|
STA BLOCKS
|
||||||
|
LDA BLOCKS+1
|
||||||
|
ADC DIRBUF+20
|
||||||
|
STA BLOCKS+1
|
||||||
|
*---Access code------------------
|
||||||
|
LDA DIRBUF+30 ACCESS
|
||||||
|
AND #$C2
|
||||||
|
CMP #$C2
|
||||||
|
BEQ .8
|
||||||
|
LDA #"*" LOCKED
|
||||||
|
STA WBUF+1
|
||||||
|
*---Modified Date/Time-----------
|
||||||
|
.8 LDX #$21 OFFSET IN DIRBUF
|
||||||
|
LDY #44 OFFSET IN WBUF
|
||||||
|
*--------------------------------
|
||||||
|
* FORMAT DATE & TIME
|
||||||
|
* --MSB--- --LSB---
|
||||||
|
* YYYYYYYM MMMDDDDD
|
||||||
|
*--------------------------------
|
||||||
|
FORMAT.DATE.AND.TIME
|
||||||
|
LDA DIRBUF,X MMMDDDDD
|
||||||
|
AND #$1F 000DDDDD
|
||||||
|
BEQ .1 ...DAY=0, NO DATE
|
||||||
|
STA DAY
|
||||||
|
LDA DIRBUF+1,X YYYYYYYM
|
||||||
|
LSR 0YYYYYYY
|
||||||
|
STA YEAR
|
||||||
|
CMP #100
|
||||||
|
BCS .1 ...YEAR>99, NO DATE
|
||||||
|
LDA DIRBUF+1,X YYYYYYYM
|
||||||
|
LSR M INTO CARRY
|
||||||
|
LDA DIRBUF,X MMMDDDDD
|
||||||
|
ROL MMDDDDDM M
|
||||||
|
ROL MDDDDDMM M
|
||||||
|
ROL DDDDDMMM M
|
||||||
|
ROL DDDDMMMM
|
||||||
|
AND #$0F 0000MMMM
|
||||||
|
BEQ .1 ...MONTH=0, NO DATE
|
||||||
|
CMP #13
|
||||||
|
BCC .3 ...MONTH=1...12, GOOD
|
||||||
|
*---Format <NO DATE>-------------
|
||||||
|
.1 TYA
|
||||||
|
SEC
|
||||||
|
SBC #6 BACK UP OVER TIME SLOT
|
||||||
|
TAY
|
||||||
|
LDX #8
|
||||||
|
.2 LDA NO.DATE.MSG,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
RTS
|
||||||
|
*---Format date, time------------
|
||||||
|
.3 STA MONTH
|
||||||
|
LDA DIRBUF+3,X HOURS
|
||||||
|
PHA
|
||||||
|
LDA DIRBUF+2,X MINUTES
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
CMP #60 IF > 59, USE 0
|
||||||
|
BCC .4 0...59
|
||||||
|
TXA
|
||||||
|
.4 JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDA #":" SEPARATE WITH ":"
|
||||||
|
STA WBUF+2,Y
|
||||||
|
PLA HOURS
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
CMP #24 IF > 24, USE 0
|
||||||
|
BCC .5 0...23
|
||||||
|
TXA
|
||||||
|
.5 JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDA YEAR
|
||||||
|
JSR CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
LDX MONTH
|
||||||
|
LDA MONTH.NAMES-1+24,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA MONTH.NAMES-1+12,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA MONTH.NAMES-1,X
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA #"-"
|
||||||
|
STA WBUF+5,Y
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA DAY
|
||||||
|
LDX #0 HIGH BYTE
|
||||||
|
* JMP CONVERT.TO.DECIMAL
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT TO DECIMAL
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.TO.DECIMAL
|
||||||
|
STX ACCUM+1
|
||||||
|
STA ACCUM
|
||||||
|
.1 JSR DIVIDE.ACCUM.BY.TEN
|
||||||
|
ORA #$B0
|
||||||
|
JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA ACCUM
|
||||||
|
ORA ACCUM+1
|
||||||
|
ORA ACCUM+2
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT 2 DIGIT NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.DECIMAL.TWO.DIGITS
|
||||||
|
CLC
|
||||||
|
ADC #100 FORCE TWO DIGITS TO PRINT
|
||||||
|
JSR CONVERT.TO.DECIMAL
|
||||||
|
LDA #" " COVER UP THE "1"
|
||||||
|
INY
|
||||||
|
*--------------------------------
|
||||||
|
STUFF.WBUF.AND.BACKUP
|
||||||
|
STA WBUF+1,Y
|
||||||
|
DEY
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CONVERT TO HEX
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.TO.HEX
|
||||||
|
PHA
|
||||||
|
AND #$0F
|
||||||
|
JSR .1
|
||||||
|
PLA
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
.1 ORA #$B0
|
||||||
|
CMP #$BA
|
||||||
|
BCC .2
|
||||||
|
ADC #6
|
||||||
|
.2 JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
LDA #"$"
|
||||||
|
STA WBUF+1,Y
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* DIVIDE ACCUM BY TEN
|
||||||
|
*--------------------------------
|
||||||
|
* DIVIDE 24-BIT VALUE IN ACCUM BY TEN
|
||||||
|
* RETURN REMAINDER IN A-REG
|
||||||
|
*--------------------------------
|
||||||
|
DIVIDE.ACCUM.BY.TEN
|
||||||
|
LDX #24 24 BITS IN DIVIDEND
|
||||||
|
LDA #0 START WITH REM=0
|
||||||
|
.1 JSR SHIFT.ACCUM.LEFT
|
||||||
|
ROL
|
||||||
|
CMP #10
|
||||||
|
BCC .2 ...STILL < 10
|
||||||
|
SBC #10
|
||||||
|
INC ACCUM QUOTIENT BIT
|
||||||
|
.2 DEX NEXT BIT
|
||||||
|
BNE .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
BLANK.WBUF
|
||||||
|
LDA #" "
|
||||||
|
LDY #79
|
||||||
|
.1 JSR STUFF.WBUF.AND.BACKUP
|
||||||
|
BPL .1
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
NOW JSR GP.MLI
|
||||||
|
.DA #$82,0000
|
||||||
|
JSR BLANK.WBUF
|
||||||
|
LDX #4
|
||||||
|
.1 LDA GP.DATE-1,X
|
||||||
|
STA DIRBUF-1,X
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
LDY #15
|
||||||
|
JSR FORMAT.DATE.AND.TIME
|
||||||
|
LDA #20
|
||||||
|
STA CAT.WIDTH
|
||||||
|
*** JMP PRINT.CATALOG.LINE
|
||||||
|
*--------------------------------
|
||||||
|
PRINT.CATALOG.LINE
|
||||||
|
LDX CAT.WIDTH
|
||||||
|
LDA #$8D
|
||||||
|
STA WBUF+1,X
|
||||||
|
JSR PRINT.MESSAGE
|
||||||
|
CLC because a SEC would indicate ERROR
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.cat
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
569
SCMASM.31/SCI.S.CPAR.txt
Normal file
569
SCMASM.31/SCI.S.CPAR.txt
Normal file
@ -0,0 +1,569 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
.DA COMMAND.TABLE needed for HELP command
|
||||||
|
*--------------------------------
|
||||||
|
* PARSE COMMAND LINE
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.COMMAND
|
||||||
|
JSR SCAN.COMMAND.TABLE
|
||||||
|
BCS SYNERR2 ...SYNTAX ERROR
|
||||||
|
LDA #0
|
||||||
|
STA FBITS
|
||||||
|
STA FBITS+1
|
||||||
|
STA PATHNAME.TWO.BUFFER
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
LDA D.SLOT
|
||||||
|
STA VAL.S
|
||||||
|
LDA D.DRIV
|
||||||
|
STA VAL.D
|
||||||
|
*---Handle special cases---------
|
||||||
|
BIT PBITS Check for PR# or IN#
|
||||||
|
BVS PARSE.INPR PR# & IN# commands
|
||||||
|
BPL .1 ...not CAT(ALOG) or PREFIX
|
||||||
|
JSR MLI.C7 ...CAT, CATALOG, or PREFIX
|
||||||
|
*---TEST CHAR AFTER COMMAND------
|
||||||
|
.1 JSR GET.NEXT.NONBLANK
|
||||||
|
BNE .2 ...not comma or <CR>
|
||||||
|
BCC .5 ...<CR> already
|
||||||
|
JMP GET.ANOTHER.PARM
|
||||||
|
*---Get a pathname---------------
|
||||||
|
.2 CMP #'/' MUST START WITH "/" OR LETTER
|
||||||
|
BEQ .3
|
||||||
|
CMP #'A'
|
||||||
|
BCC SYNERR2 ...SYNTAX ERROR
|
||||||
|
.3 DEX RE-SCAN THE FIRST CHAR OF PATH
|
||||||
|
LDY #0
|
||||||
|
.4 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
STA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
JSR STORE.PATH.TWO.AND.TEST
|
||||||
|
BCC .4
|
||||||
|
DEY
|
||||||
|
STY PATHNAME.ONE.BUFFER
|
||||||
|
STY PATHNAME.TWO.BUFFER
|
||||||
|
LDA #$01 TELL THE WORLD ABOUT IT
|
||||||
|
STA FBITS
|
||||||
|
*--------------------------------
|
||||||
|
DEX RE-SCAN CHAR AFTER PATHNAME
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE SYNERR2 ...NOT COMMA OR <CR>
|
||||||
|
BCS MORE.PARMS ...COMMA
|
||||||
|
.5 JMP NO.MORE.PARMS ...<CR>
|
||||||
|
SYNERR2
|
||||||
|
JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
* PR# or IN# commands
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.INPR
|
||||||
|
JSR GET.NEXT.NONBLANK CHAR AFTER COMMAND
|
||||||
|
BEQ SYNERR2 ...comma or <CR>
|
||||||
|
DEX ...IN CASE IT IS "Axxx"
|
||||||
|
CMP #'A'
|
||||||
|
BEQ GET.ANOTHER.PARM ...HANDLE PR#Axxx or IN#Axxx
|
||||||
|
INX RESTORE X
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
STY PARM.LENM1 Y=0, 1 BYTE PARM
|
||||||
|
LDY #VAL.LB-VAL.A PARM OFFSET FROM VAL.A
|
||||||
|
STY PARM.OFFSET
|
||||||
|
LDY #$40
|
||||||
|
STY FBITS
|
||||||
|
JSR CONVERT.DECIMAL.NUMBER
|
||||||
|
BCS RTS4
|
||||||
|
LDA VAL.LB
|
||||||
|
CMP #$08
|
||||||
|
BCC TEST.IF.MORE.PARMS
|
||||||
|
SCI.ERR.RANGE
|
||||||
|
LDA #$02
|
||||||
|
SEC
|
||||||
|
RTS4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
MORE.PARMS
|
||||||
|
LDA PBITS
|
||||||
|
LSR TEST BIT 0
|
||||||
|
BCC SYNERR2 ...NO PATHNAME EXPECTED
|
||||||
|
LSR TEST BIT 1
|
||||||
|
BCC GET.ANOTHER.PARM ...NO PATH-TWO EXPECTED
|
||||||
|
*---Get second pathname----------
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR2 ...COMMA OR <CR>
|
||||||
|
DEX RE-SCAN FIRST CHAR OF PATHNAME
|
||||||
|
LDY #0
|
||||||
|
.1 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
JSR STORE.PATH.TWO.AND.TEST
|
||||||
|
BCC .1
|
||||||
|
DEY
|
||||||
|
STY PATHNAME.TWO.BUFFER
|
||||||
|
LDA #$03 WE GOT TWO PATHNAMES, SO
|
||||||
|
STA FBITS MARK THE BITS
|
||||||
|
DEX RE-SCAN TERM. CHAR
|
||||||
|
*--------------------------------
|
||||||
|
TEST.IF.MORE.PARMS
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE SYNERR2
|
||||||
|
BCC NO.MORE.PARMS
|
||||||
|
GET.ANOTHER.PARM
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR2 ...NULL PARAMETER
|
||||||
|
JSR PARSE.PARAMETER
|
||||||
|
BCC TEST.IF.MORE.PARMS
|
||||||
|
RTS ...error return
|
||||||
|
*--------------------------------
|
||||||
|
NO.MORE.PARMS
|
||||||
|
LDA VAL.S CHECK RANGE OF S AND D
|
||||||
|
BEQ SCI.ERR.RANGE
|
||||||
|
CMP #$08
|
||||||
|
BCS SCI.ERR.RANGE
|
||||||
|
LDA VAL.D
|
||||||
|
BEQ SCI.ERR.RANGE
|
||||||
|
CMP #$03
|
||||||
|
BCS SCI.ERR.RANGE
|
||||||
|
*---CHECK IF DEFERRED COMMAND----
|
||||||
|
LDA PBITS (only OPEN and WRITE are deferred)
|
||||||
|
AND #$21
|
||||||
|
LSR
|
||||||
|
BEQ .1 ...NOT DEFERRED
|
||||||
|
LDA STATE ...ARE WE IN DIRECT MODE?
|
||||||
|
BEQ .6 ...YES, DEFERRED IS ILLEGAL
|
||||||
|
*---CHECK PATHNAME---------------
|
||||||
|
.1 BCC .5 ...NO PATH PERMITTED
|
||||||
|
LDA PBITS+1
|
||||||
|
AND #$04 S OR D OK?
|
||||||
|
BEQ .5 ...NO
|
||||||
|
LDA FBITS
|
||||||
|
LSR HAVE WE A PATHNAME?
|
||||||
|
BCS .2 ...YES
|
||||||
|
LDA PBITS ...NO, IS PATH NEEDED
|
||||||
|
AND #$90
|
||||||
|
BEQ ERR.SYNTAX ...YES
|
||||||
|
BPL .5
|
||||||
|
*---NEED PREFIX OR S,D-----------
|
||||||
|
.2 LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
EOR #'/' SLASH
|
||||||
|
BEQ .3 ...EXPLICIT PREFIX
|
||||||
|
LDA PREFIX.FLAG MLI's flag
|
||||||
|
BEQ .4 ...NO PREFIX IS SET
|
||||||
|
.3 LDA FBITS+1 DID WE GET S,D?
|
||||||
|
AND #$04
|
||||||
|
BEQ .5 ...NO
|
||||||
|
BCS .4 ...YES, AND THERE IS A PATHNAME
|
||||||
|
LDA #0 ...YES, BUT NO PATHNAME
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
LDA #$01 SIGNAL WE GOT PATHNAME AFTER ALL
|
||||||
|
ORA FBITS
|
||||||
|
STA FBITS
|
||||||
|
.4 JSR INSERT.VOLUME.NAME
|
||||||
|
BCS .7
|
||||||
|
*---BRANCH TO COMMAND------------
|
||||||
|
.5 CLC SIGNAL NO ERROR
|
||||||
|
LDA COMMAND.NUMBER
|
||||||
|
BEQ EXTERNAL ...USER'S COMMAND
|
||||||
|
EOR #CN.PREFIX
|
||||||
|
BEQ INTERNAL ...PREFIX COMMAND
|
||||||
|
LDA PBITS+1 ARE S/D VALID?
|
||||||
|
AND #$04
|
||||||
|
BEQ INTERNAL ...NO
|
||||||
|
LDA FBITS ANY PATHNAME SPECIFIED?
|
||||||
|
LSR
|
||||||
|
BCC INTERNAL ...NO
|
||||||
|
JSR GET.FILE.INFO ...YES
|
||||||
|
BCC INTERNAL ...NO ERROR
|
||||||
|
ORA #0 ...ERROR, WAS IT "FILE NOT FOUND"?
|
||||||
|
BPL .7 ...NO, REAL ERROR
|
||||||
|
LDA PBITS OKAY TO CREATE PATHNAME?
|
||||||
|
AND #$08
|
||||||
|
BNE INTERNAL ...YES
|
||||||
|
LDA #$06 "PATH NOT FOUND"
|
||||||
|
.HS 2C
|
||||||
|
.6 LDA #$0F "NOT DIRECT COMMAND"
|
||||||
|
SEC
|
||||||
|
.7 RTS
|
||||||
|
*--------------------------------
|
||||||
|
INTERNAL JMP (COMMAND.ADDR)
|
||||||
|
EXTERNAL JMP (EXTERNAL.COMMAND.HANDLER)
|
||||||
|
*--------------------------------
|
||||||
|
ERR.SYNTAX
|
||||||
|
LDA #$10 SYNTAX ERROR
|
||||||
|
ERRR SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* INSERT PREFIX BEFORE PATHNAME
|
||||||
|
*--------------------------------
|
||||||
|
INSERT.VOLUME.NAME
|
||||||
|
LDA VAL.S BUILD UNIT # FROM SLOT,DRIVE
|
||||||
|
TAY SAVE VAL.S
|
||||||
|
LSR 0000.00SS S
|
||||||
|
ROR S000.000S S
|
||||||
|
ROR SS00.0000 S
|
||||||
|
ROR SSS0.0000 0
|
||||||
|
LDX VAL.D
|
||||||
|
CPX #2 .CS. if 2, .CC. if 1
|
||||||
|
ROR DSSS.0000
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
LDA #WBUF+1
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA /WBUF+1
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
JSR MLI.C5 ONLINE -- READ VOLUME NAME
|
||||||
|
BCS .4 NO SUCH SLOT AND DRIVE
|
||||||
|
STX D.DRIV UPDATE DEFAULT S AND D
|
||||||
|
STY D.SLOT
|
||||||
|
*--------------------------------
|
||||||
|
LDA PATHNAME.ONE.BUFFER+1
|
||||||
|
EOR #'/' ALREADY HAVE VOLUME NAME?
|
||||||
|
BEQ .4 ...YES, DON'T NEED ANOTHER
|
||||||
|
*---ISOLATE VOLNAME LENGTH-------
|
||||||
|
LDA WBUF+1 DSSSLLLL
|
||||||
|
AND #$0F 0000LLLL
|
||||||
|
STA WBUF+1
|
||||||
|
*---MOVE PATHNAMES OVER L+2------
|
||||||
|
LDY #62
|
||||||
|
TYA
|
||||||
|
SEC
|
||||||
|
SBC WBUF+1
|
||||||
|
TAX
|
||||||
|
.1 LDA PATHNAME.ONE.BUFFER,X
|
||||||
|
STA PATHNAME.ONE.BUFFER+2,Y
|
||||||
|
LDA PATHNAME.TWO.BUFFER,X
|
||||||
|
STA PATHNAME.TWO.BUFFER+2,Y
|
||||||
|
DEY
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
*---INSERT VOLUME SLASHES--------
|
||||||
|
LDA #'/'
|
||||||
|
STA PATHNAME.ONE.BUFFER+2,Y
|
||||||
|
STA PATHNAME.ONE.BUFFER+1
|
||||||
|
STA PATHNAME.TWO.BUFFER+2,Y
|
||||||
|
STA PATHNAME.TWO.BUFFER+1
|
||||||
|
*---COPY VOLUME NAME-------------
|
||||||
|
.2 LDA WBUF+1,Y
|
||||||
|
STA PATHNAME.ONE.BUFFER+1,Y
|
||||||
|
STA PATHNAME.TWO.BUFFER+1,Y
|
||||||
|
DEY
|
||||||
|
BNE .2
|
||||||
|
*---UPDATE PATH LENGTHS----------
|
||||||
|
CLC
|
||||||
|
LDA WBUF+1
|
||||||
|
ADC #2 INCLUDE SLASHES
|
||||||
|
TAY
|
||||||
|
ADC PATHNAME.ONE.BUFFER
|
||||||
|
CMP #64
|
||||||
|
.3 BCS ERR.SYNTAX
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
TYA
|
||||||
|
ADC PATHNAME.TWO.BUFFER
|
||||||
|
STA PATHNAME.TWO.BUFFER
|
||||||
|
CMP #64
|
||||||
|
BCS .3 ...BRIDGE TO SYNTAX ERROR
|
||||||
|
*--------------------------------
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
SCAN.COMMAND.TABLE
|
||||||
|
LDY #0 PNTR INTO COMMAND TABLE
|
||||||
|
STY COMMAND.NUMBER
|
||||||
|
DEY
|
||||||
|
*---COMPARE COMMAND NAME---------
|
||||||
|
.1 INC COMMAND.NUMBER
|
||||||
|
LDX #0 PNTR INTO WBUF
|
||||||
|
.2 INY next byte in command table
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ .4 ...end of WBUF contents
|
||||||
|
EOR COMMAND.TABLE,Y
|
||||||
|
BEQ .2 ...same so far
|
||||||
|
ASL Might be last char
|
||||||
|
BNE .4 ...No, try next command
|
||||||
|
*---We found the command---------
|
||||||
|
LDA COMMAND.TABLE+1,Y
|
||||||
|
STA COMMAND.ADDR
|
||||||
|
LDA COMMAND.TABLE+2,Y
|
||||||
|
STA COMMAND.ADDR+1
|
||||||
|
LDA COMMAND.TABLE+3,Y
|
||||||
|
STA PBITS
|
||||||
|
LDA COMMAND.TABLE+4,Y
|
||||||
|
STA PBITS+1
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*---SKIP TO NEXT COMMAND---------
|
||||||
|
.3 INY
|
||||||
|
.4 LDA COMMAND.TABLE,Y
|
||||||
|
BPL .3 ...NOT LAST CHAR YET
|
||||||
|
INY SKIP OVER ADDRESS
|
||||||
|
INY
|
||||||
|
INY SKIP OVER PBITS
|
||||||
|
INY
|
||||||
|
LDA COMMAND.TABLE+1,Y
|
||||||
|
BNE .1 ...more commands in table
|
||||||
|
*---TRY EXTERNAL COMMAND---------
|
||||||
|
LDA #$FF
|
||||||
|
STA COMMAND.NUMBER
|
||||||
|
SEC
|
||||||
|
JMP SCI.USER.CMD
|
||||||
|
*--------------------------------
|
||||||
|
SYNERR1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
PARSE.PARAMETER
|
||||||
|
JSR ZERO.ACCUM
|
||||||
|
LDY #NO.PARM.NAMES-1
|
||||||
|
.1 CMP PARM.NAMES,Y
|
||||||
|
BEQ FOUND.PARM
|
||||||
|
DEY
|
||||||
|
BPL .1
|
||||||
|
CMP #'T'
|
||||||
|
BNE SYNERR1 ...SYNTAX ERROR
|
||||||
|
*---PARSE T PARAMETER------------
|
||||||
|
LDA #$04
|
||||||
|
AND PBITS
|
||||||
|
BEQ ERR.BADPARM
|
||||||
|
ORA FBITS
|
||||||
|
STA FBITS
|
||||||
|
LDA #0 SINGLE BLYTE
|
||||||
|
STA PARM.LENM1
|
||||||
|
LDA #VAL.T-VAL.A PARM OFFSET FROM VAL.A
|
||||||
|
STA PARM.OFFSET
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ SYNERR1
|
||||||
|
CMP #'$'
|
||||||
|
BEQ CONVERT.HEX.NUMBER
|
||||||
|
CMP #'A'
|
||||||
|
BCC CONVERT.DECIMAL.NUMBER
|
||||||
|
JMP CONVERT.FILE.TYPE
|
||||||
|
*--------------------------------
|
||||||
|
ERR.BADPARM
|
||||||
|
SEC "INVALID PARAMETER"
|
||||||
|
LDA #$0B
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
FOUND.PARM
|
||||||
|
LDA PARM.MASKS,Y
|
||||||
|
BEQ .2
|
||||||
|
AND PBITS+1
|
||||||
|
BEQ ERR.BADPARM
|
||||||
|
CMP #$04 IS IT S OR D
|
||||||
|
BNE .1 ...NO
|
||||||
|
AND FBITS+1 ...YES, DID WE ALREADY HAVE S OR D
|
||||||
|
BNE .2 ...YES
|
||||||
|
LDA #1 ...NO, SET D=1
|
||||||
|
STA VAL.D
|
||||||
|
LDA #$04
|
||||||
|
.1 ORA FBITS+1
|
||||||
|
STA FBITS+1
|
||||||
|
.2 LDA PARM.VARIABLES,Y
|
||||||
|
AND #$03
|
||||||
|
STA PARM.LENM1
|
||||||
|
LDA PARM.VARIABLES,Y
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
STA PARM.OFFSET
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
CMP #'$'
|
||||||
|
BEQ CONVERT.HEX.NUMBER
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.DECIMAL.NUMBER
|
||||||
|
STX COMMAND.LINE.LENGTH
|
||||||
|
JSR ACCUMULATE.DECIMAL.DIGIT
|
||||||
|
BCC .1
|
||||||
|
BMI GO.ERR.RANGE.1
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
.1 LDX COMMAND.LINE.LENGTH
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE CONVERT.DECIMAL.NUMBER
|
||||||
|
BEQ CHECK.PARAMETER.RANGE
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.HEX.NUMBER
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
.1 STX COMMAND.LINE.LENGTH
|
||||||
|
JSR ACCUMULATE.HEX.DIGIT
|
||||||
|
BCC .2
|
||||||
|
BMI GO.ERR.RANGE.1
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
.2 LDX COMMAND.LINE.LENGTH
|
||||||
|
JSR GET.NEXT.NONBLANK
|
||||||
|
BNE .1
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.PARAMETER.RANGE
|
||||||
|
LDX #$02
|
||||||
|
.1 CPX PARM.LENM1
|
||||||
|
BEQ .2
|
||||||
|
LDA ACCUM,X
|
||||||
|
BNE GO.ERR.RANGE.1
|
||||||
|
DEX
|
||||||
|
BNE .1
|
||||||
|
.2 LDY PARM.OFFSET
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
STA VAL.A,Y
|
||||||
|
DEY
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
LDX COMMAND.LINE.LENGTH
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
GO.ERR.SYNTAX.1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
GO.ERR.RANGE.1 JMP SCI.ERR.RANGE
|
||||||
|
*--------------------------------
|
||||||
|
CONVERT.FILE.TYPE
|
||||||
|
STA ACCUM+2 1ST LETTER
|
||||||
|
LDY #2 GET 2ND AND 3RD
|
||||||
|
.1 JSR GET.NEXT.NONBLANK
|
||||||
|
BEQ GO.ERR.SYNTAX.1
|
||||||
|
STA ACCUM-1,Y STORE THEM BACKWARDS
|
||||||
|
DEY
|
||||||
|
BNE .1 ...UNTIL Y=0
|
||||||
|
STX COMMAND.LINE.LENGTH SAVE X-REG
|
||||||
|
.2 LDX #2 COMPARE NEXT ENTRY
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
EOR FILE.TYPES,Y
|
||||||
|
INY
|
||||||
|
ASL IGNORE BIT 7
|
||||||
|
BNE .4 ...NOT THE SAME
|
||||||
|
DEX NEXT CHAR
|
||||||
|
BPL .3
|
||||||
|
LDA FILE.TYPES,Y
|
||||||
|
STA VAL.T
|
||||||
|
LDX COMMAND.LINE.LENGTH RESTORE X-REG
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
.4 INY
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
CPY #LAST.FILE.TYPE
|
||||||
|
BCC .2
|
||||||
|
BCS GO.ERR.SYNTAX.1
|
||||||
|
*--------------------------------
|
||||||
|
* GET NEXT NON-BLANK CHAR FROM WBUF
|
||||||
|
* CHAR Z C
|
||||||
|
* <CR> YES CLR
|
||||||
|
* COMMA YES SET
|
||||||
|
* OTHER NO ?
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.NONBLANK
|
||||||
|
.1 JSR GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
CMP #' '
|
||||||
|
BEQ .1 IGNORE BLANKS
|
||||||
|
CMP #','
|
||||||
|
BEQ .2 .CS. and .EQ.
|
||||||
|
CMP #$0D .EQ. if <CR>
|
||||||
|
CLC .CC.
|
||||||
|
.2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
GET.NEXT.CHAR.FROM.WBUF
|
||||||
|
LDA WBUF,X
|
||||||
|
BNE .1 MAKE 00==8D
|
||||||
|
|
||||||
|
LDA #$0D
|
||||||
|
|
||||||
|
.1 AND #$7F
|
||||||
|
|
||||||
|
.DO LOWERCASE=1
|
||||||
|
.ELSE
|
||||||
|
CMP #$60 CONVERT LOWER CASE TO UPPER
|
||||||
|
BCC .2
|
||||||
|
|
||||||
|
AND #$5F
|
||||||
|
.2 .FIN
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ACCUMULATE.DECIMAL.DIGIT
|
||||||
|
CMP #$30
|
||||||
|
BCC .1
|
||||||
|
CMP #$3A
|
||||||
|
BCC .2
|
||||||
|
.1 SEC
|
||||||
|
ORA #0
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.2 AND #$0F
|
||||||
|
PHA
|
||||||
|
LDA ACCUM+2
|
||||||
|
CMP #$1A
|
||||||
|
BCS .5
|
||||||
|
LDX #$02
|
||||||
|
.3 LDA ACCUM,X
|
||||||
|
PHA
|
||||||
|
DEX
|
||||||
|
BPL .3
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
LDX #0
|
||||||
|
CLC
|
||||||
|
.4 PLA
|
||||||
|
ADC ACCUM,X
|
||||||
|
STA ACCUM,X
|
||||||
|
INX
|
||||||
|
TXA
|
||||||
|
EOR #$03
|
||||||
|
BNE .4
|
||||||
|
JSR SHIFT.ACCUM.LEFT
|
||||||
|
.5 PLA
|
||||||
|
BCS TOOBIG
|
||||||
|
ADC ACCUM
|
||||||
|
STA ACCUM
|
||||||
|
BCC RTS1
|
||||||
|
CLC
|
||||||
|
INC ACCUM+1
|
||||||
|
BNE RTS1
|
||||||
|
INC ACCUM+2
|
||||||
|
BNE RTS1
|
||||||
|
TOOBIG LDA #$FF
|
||||||
|
SEC
|
||||||
|
RTS1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
ACCUMULATE.HEX.DIGIT
|
||||||
|
CMP #'0'
|
||||||
|
BCC .1
|
||||||
|
CMP #'9'+1
|
||||||
|
BCC .3
|
||||||
|
CMP #'A'
|
||||||
|
BCC .1
|
||||||
|
CMP #'F'+1
|
||||||
|
BCC .2
|
||||||
|
.1 SEC
|
||||||
|
ORA #0
|
||||||
|
RTS
|
||||||
|
.2 SBC #$06
|
||||||
|
.3 AND #$0F
|
||||||
|
LDX #$03
|
||||||
|
.4 JSR SHIFT.ACCUM.LEFT
|
||||||
|
BCS TOOBIG
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
ORA ACCUM
|
||||||
|
STA ACCUM
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SHIFT.ACCUM.LEFT
|
||||||
|
ASL ACCUM
|
||||||
|
ROL ACCUM+1
|
||||||
|
ROL ACCUM+2
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ZERO.ACCUM
|
||||||
|
LDY #0
|
||||||
|
STY ACCUM
|
||||||
|
STY ACCUM+1
|
||||||
|
STY ACCUM+2
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* RETURN .CC. IF NOT END OF PATHNAME YET
|
||||||
|
* ELSE .CS.
|
||||||
|
*--------------------------------
|
||||||
|
STORE.PATH.TWO.AND.TEST
|
||||||
|
STA PATHNAME.TWO.BUFFER+1,Y
|
||||||
|
INY
|
||||||
|
CMP #','
|
||||||
|
BEQ .1
|
||||||
|
CMP #' '
|
||||||
|
BEQ .1
|
||||||
|
CMP #$0D
|
||||||
|
BEQ .1
|
||||||
|
CPY #65
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.cpar
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
47
SCMASM.31/SCI.S.EQ.txt
Normal file
47
SCMASM.31/SCI.S.EQ.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
*BASL .EQ $28
|
||||||
|
CSWL .EQ $36
|
||||||
|
CSWH .EQ $37
|
||||||
|
KSWL .EQ $38
|
||||||
|
KSWH .EQ $39
|
||||||
|
DRIVER.PTR .EQ $3A,3B
|
||||||
|
RETRY.COUNT .EQ $3C
|
||||||
|
*--------------------------------
|
||||||
|
SC.INFLAG .EQ $51 $Cx if .INBx
|
||||||
|
SC.LOMEM .EQ $52,53 START OF SYMBOLS
|
||||||
|
SC.EOT .EQ $54,55 END OF SYMBOL TABLE
|
||||||
|
SC.PP .EQ $56,57 START OF SOURCE PROGRAM
|
||||||
|
SC.HIMEM .EQ $58,59 END OF SOURCE PROGRAM
|
||||||
|
*PASS .EQ $63 PASS ($FF if command, 0 or 1 if assembling)
|
||||||
|
*--------------------------------
|
||||||
|
*WBUF .EQ $0200
|
||||||
|
DIRBUF .EQ $0259
|
||||||
|
PATHNAME.TWO.BUFFER .EQ $0280
|
||||||
|
*--------------------------------
|
||||||
|
GP.MLI .EQ $BF00
|
||||||
|
UNIT .EQ $BF30
|
||||||
|
BITMAP .EQ $BF58
|
||||||
|
GP.DATE .EQ $BF90 ... 93
|
||||||
|
LEVEL .EQ $BF94
|
||||||
|
PREFIX.FLAG .EQ $BF9A
|
||||||
|
*--------------------------------
|
||||||
|
KEYBOARD .EQ $C000
|
||||||
|
STROBE .EQ $C010
|
||||||
|
IO.OFF .EQ $CFFF
|
||||||
|
*--------------------------------
|
||||||
|
BELL .EQ $FBE2
|
||||||
|
ABORT.EXIT .EQ $FD10
|
||||||
|
PRBYTE .EQ $FDDA
|
||||||
|
CROUT .EQ $FD8E
|
||||||
|
COUT .EQ $FDED
|
||||||
|
*MON.SETVID .EQ $FE93
|
||||||
|
*--------------------------------
|
||||||
|
SC.HARD .EQ $8000
|
||||||
|
SC.SOFT .EQ $8003
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.eq
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
107
SCMASM.31/SCI.S.ERRORS.txt
Normal file
107
SCMASM.31/SCI.S.ERRORS.txt
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* Error Handler
|
||||||
|
*--------------------------------
|
||||||
|
ERROR.HANDLER
|
||||||
|
AND #$1F TRIM TO SIZE
|
||||||
|
STA ERROR.CODE
|
||||||
|
LDA #$0F LEVEL
|
||||||
|
STA LEVEL
|
||||||
|
JSR UNHOOK.WRITE ...IF WRITING
|
||||||
|
LDA #0
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
JSR MLI.CC CLOSE ALL FILES
|
||||||
|
BCS .1
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
JSR MLI.CD FLUSH
|
||||||
|
.1 LDA ERROR.CODE
|
||||||
|
JSR PRINT.ERROR
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
JSR CROUT
|
||||||
|
JMP SC.SOFT
|
||||||
|
*--------------------------------
|
||||||
|
ERR.FILE.BUSY
|
||||||
|
LDA #$14
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
ERROR.PRINTER
|
||||||
|
JSR FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
JSR BELL
|
||||||
|
*---PRINT MESSAGE FROM WBUF------
|
||||||
|
PRINT.CR.MESSAGE
|
||||||
|
JSR CROUT
|
||||||
|
PRINT.MESSAGE
|
||||||
|
LDX #0
|
||||||
|
.1 LDA WBUF+1,X
|
||||||
|
JSR COUT
|
||||||
|
INX
|
||||||
|
CMP #$8D END OF MESSAGE?
|
||||||
|
BNE .1 ...NO
|
||||||
|
RTS ...YES
|
||||||
|
*--------------------------------
|
||||||
|
FIND.AND.PUT.MSG.IN.WBUF
|
||||||
|
LDX #0
|
||||||
|
CLC
|
||||||
|
*---SEARCH FOR MESSAGE #---------
|
||||||
|
STA WBUF
|
||||||
|
TAY
|
||||||
|
BEQ .5 ...FIRST MESSAGE
|
||||||
|
.2 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
BNE .4
|
||||||
|
.3 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
BEQ .3
|
||||||
|
BNE .2
|
||||||
|
.4 EOR #$0F
|
||||||
|
BNE .2
|
||||||
|
DEC WBUF
|
||||||
|
BNE .2
|
||||||
|
*---Put message in WBUF----------
|
||||||
|
.5 LDY #0
|
||||||
|
STY WBUF+80 SQUEEZED BLANK COUNT
|
||||||
|
.6 STY WBUF STORAGE INDEX
|
||||||
|
LDA WBUF+80 BLANK COUNT
|
||||||
|
BNE .8 ...ANOTHER BLANK
|
||||||
|
.7 JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.FIRST.TABLE,Y
|
||||||
|
BNE .9 ...FREQUENT CHAR
|
||||||
|
JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.SECOND.TABLE,Y
|
||||||
|
BNE .9 ...TWO NYBBLE CHAR
|
||||||
|
JSR SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.THIRD.TABLE,Y
|
||||||
|
BMI .9 ...REAL CHAR
|
||||||
|
STA WBUF+80 ...BLANK COUNT
|
||||||
|
.8 LDA #" "
|
||||||
|
DEC WBUF+80
|
||||||
|
BEQ .7 ...NO MORE BLANKS
|
||||||
|
.9 LDY WBUF STORAGE INDEX
|
||||||
|
STA WBUF+1,Y
|
||||||
|
INY NEXT COLUMN
|
||||||
|
EOR #$8D END OF MESSAGE?
|
||||||
|
BNE .6 ...NO
|
||||||
|
RTS ...YES
|
||||||
|
*--------------------------------
|
||||||
|
SCI.GET.NEXT.NYBBLE
|
||||||
|
LDA SCI.MESSAGES,X
|
||||||
|
BCS .1 2ND NYBBLE
|
||||||
|
LSR 1ST NYBBLE
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TAY
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
.1 INX
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.errors
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
125
SCMASM.31/SCI.S.EXEC.txt
Normal file
125
SCMASM.31/SCI.S.EXEC.txt
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.ERR.FILE.BUSY JMP ERR.FILE.BUSY
|
||||||
|
EXEC.ERR.MISMATCH JMP TYPERR
|
||||||
|
*--------------------------------
|
||||||
|
EXEC
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCS .1 ...NOT CURRENTLY OPEN
|
||||||
|
*---File is in use---------------
|
||||||
|
BIT EXEC.FILE.CLOSING.FLAG
|
||||||
|
BPL EXEC.ERR.FILE.BUSY
|
||||||
|
*---Restarting same EXEC file----
|
||||||
|
STA MISC.PARMS+1 REFNUM
|
||||||
|
LDA #0 "REWIND" THE FILE
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
STA MISC.PARMS+4
|
||||||
|
JSR MLI.CE SET MARK
|
||||||
|
BCS CLOSE.EXEC.SAVING.ERROR
|
||||||
|
BCC .2 ...ALWAYS, RESTART
|
||||||
|
*--------------------------------
|
||||||
|
.1 JSR CLOSE.EXEC.FILE STOP ANY EXEC IN PROGRESS
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
*---Check file type--------------
|
||||||
|
LDA GET.SET.PARMS+4 FILE TYPE MUST BE TXT
|
||||||
|
CMP #$04 TXT FILETYPE CODE
|
||||||
|
BNE EXEC.ERR.MISMATCH
|
||||||
|
*---Open the file----------------
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL LEVEL
|
||||||
|
STA MISC.PARMS+2 BUFFER ADDRESS
|
||||||
|
LDA EXEC.BUFFER.BASE
|
||||||
|
STA MISC.PARMS+3 BUFFER ADDRESS HI
|
||||||
|
STA OPEN.PARMS+4 "
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
LDA OPEN.PARMS+5 REFNUM OF FILE
|
||||||
|
STA EXEC.REFNUM
|
||||||
|
*---Fill other param blocks------
|
||||||
|
.2 LDX GET.SET.PARMS+5 RECORD LENGTH
|
||||||
|
STX VAL.L
|
||||||
|
LDX GET.SET.PARMS+6
|
||||||
|
STX VAL.L+1
|
||||||
|
LDX #2 POINT AT EXEC FILE NAME
|
||||||
|
JSR SAVE.FILENAME.IN.TABLE
|
||||||
|
*---Switch EXEC on now-----------
|
||||||
|
LDA #$FF MARK EXEC ACTIVE
|
||||||
|
STA F.EXEC
|
||||||
|
LDA KSWL
|
||||||
|
STA VDOSIO+2
|
||||||
|
LDA KSWH
|
||||||
|
STA VDOSIO+3
|
||||||
|
LDA #READ.EXEC.FILE
|
||||||
|
STA KSWL
|
||||||
|
LDA /READ.EXEC.FILE
|
||||||
|
STA KSWH
|
||||||
|
CLC
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.EXEC.SAVING.ERROR
|
||||||
|
PHA SAVE ERROR CODE
|
||||||
|
JSR CLOSE.EXEC.FILE CLOSE THE FILE
|
||||||
|
PLA GET ERROR CODE
|
||||||
|
SEC SIGNAL ERROR
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CLOSE EXEC FILE
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.EXEC.FILE
|
||||||
|
CLC
|
||||||
|
LDA F.EXEC
|
||||||
|
BPL .1 ...NO EXEC IN PROGRESS
|
||||||
|
LDA VDOSIO+2 RESTORE INPUT HOOK
|
||||||
|
STA KSWL
|
||||||
|
LDA VDOSIO+3
|
||||||
|
STA KSWH
|
||||||
|
LDA #$FF
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
LDX #2
|
||||||
|
LDA EXEC.REFNUM
|
||||||
|
JSR CLOSE.ONE.FILE CLOSE THE FILE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* "EXEC" INPUT HOOK
|
||||||
|
*--------------------------------
|
||||||
|
READ.EXEC.FILE
|
||||||
|
STA (BASL),Y STOP BLINKING ON SCREEN
|
||||||
|
JSR SAVE.REGS SAVE A,X,Y
|
||||||
|
*---Check for CTRL-C Abort-------
|
||||||
|
LDA KEYBOARD
|
||||||
|
CMP #$83 CONTROL-C?
|
||||||
|
BNE .2 ...NO
|
||||||
|
JSR CLOSE.EXEC.FILE ...YES
|
||||||
|
STA STROBE
|
||||||
|
*---End of Data------------------
|
||||||
|
.1 JSR RESTORE.REGS
|
||||||
|
JMP ABORT.EXIT
|
||||||
|
*---Set up EXEC char input-------
|
||||||
|
.2 LDA EXEC.REFNUM REFNUM
|
||||||
|
STA READ.WRITE.PARMS+1
|
||||||
|
LDA #EXEC.INPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /EXEC.INPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #1 READ JUST ONE BYTE
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ
|
||||||
|
BCS .3 ...ERROR OR END OF DATA
|
||||||
|
JSR RESTORE.REGS
|
||||||
|
LDA EXEC.INPUT.CHAR
|
||||||
|
ORA #$80
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.3 JSR CLOSE.EXEC.SAVING.ERROR CLOSE EXEC FILE
|
||||||
|
CMP #$05 END OF DATA?
|
||||||
|
BEQ .1 ...YES
|
||||||
|
JMP ERROR.HANDLER
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.exec
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
174
SCMASM.31/SCI.S.GP.txt
Normal file
174
SCMASM.31/SCI.S.GP.txt
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
JMP WARM.DOS
|
||||||
|
JMP PARSE.COMMAND
|
||||||
|
SCI.USER.CMD JMP GP.RTS USER COMMAND PARSER
|
||||||
|
JMP ERROR.HANDLER
|
||||||
|
PRINT.ERROR JMP ERROR.PRINTER
|
||||||
|
ERROR.CODE .HS 00
|
||||||
|
*--------------------------------
|
||||||
|
OUTVEC .DA $FDF0,$C100,$C200,$C300,$C400,$C500,$C600,$C700
|
||||||
|
INVEC .DA $FD1B,$C100,$C200,$C300,$C400,$C500,$C600,$C700
|
||||||
|
*--------------------------------
|
||||||
|
VECOUT .HS F0FD
|
||||||
|
VECIN .HS 1BFD
|
||||||
|
*--------------------------------
|
||||||
|
VDOSIO .DA 0,0 SAVE HARDWARE VECTOR DURING EXEC, WRITE
|
||||||
|
.DA 0,0 VSYSIO
|
||||||
|
*--------------------------------
|
||||||
|
D.SLOT .HS 06
|
||||||
|
D.DRIV .HS 01
|
||||||
|
*--------------------------------
|
||||||
|
PREGA .BS 1
|
||||||
|
PREGX .BS 1
|
||||||
|
PREGY .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
F.TRACE .BS 1 +=TRACE OFF, -=TRACE ON
|
||||||
|
STATE .BS 1 0=IMMD, >0=DEFERRED
|
||||||
|
F.EXEC .BS 1
|
||||||
|
F.READ .BS 1
|
||||||
|
F.WRITE .BS 1
|
||||||
|
F.PREFIX .BS 1
|
||||||
|
DIR.FILE.READ.FLAG .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
STRINGS.SPACE.COUNT .BS 1
|
||||||
|
BUFFERED.WRITE.COUNT .BS 1
|
||||||
|
COMMAND.LINE.LENGTH .BS 1
|
||||||
|
PREVIOUS.CHAR .BS 1
|
||||||
|
OPEN.FILE.COUNT .BS 1
|
||||||
|
EXEC.FILE.CLOSING.FLAG .BS 1
|
||||||
|
CATALOG.LINE.STATE .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
EXTERNAL.COMMAND.HANDLER .BS 2
|
||||||
|
COMMAND.NAME.LENGTH .BS 1
|
||||||
|
COMMAND.NUMBER .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
PBITS .HS 0000
|
||||||
|
FBITS .HS 0000
|
||||||
|
VAL.A .HS 0000
|
||||||
|
VAL.B .HS 000000
|
||||||
|
VAL.E .HS 0000
|
||||||
|
VAL.L .HS 0000
|
||||||
|
VAL.S .HS 00
|
||||||
|
VAL.D .HS 00
|
||||||
|
VAL.F .HS 0000
|
||||||
|
VAL.R .HS 0000
|
||||||
|
VAL.V .HS 00
|
||||||
|
VAL.AT .HS 0000
|
||||||
|
VAL.T .HS 00
|
||||||
|
VAL.LB .HS 00 PR# OR IN# VALUE
|
||||||
|
*--------------------------------
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.DA PATHNAME.TWO.BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
MLI.CALLER
|
||||||
|
STA .2
|
||||||
|
STX GP.SAVEX
|
||||||
|
CMP #$CF
|
||||||
|
BCC .1
|
||||||
|
LDA #$CE
|
||||||
|
.1 TAX
|
||||||
|
LDA MLI.PARM.PNTRS-$C0,X
|
||||||
|
STA .3
|
||||||
|
JSR GP.MLI
|
||||||
|
.2 .HS 00
|
||||||
|
.3 .DA *
|
||||||
|
BCC .6
|
||||||
|
LDX #0
|
||||||
|
.4 CMP MLI.ERROR.CODES,X
|
||||||
|
BEQ .5
|
||||||
|
INX
|
||||||
|
CPX #19
|
||||||
|
BCC .4
|
||||||
|
.5 LDA BI.ERROR.CODES,X
|
||||||
|
*** SEC (CARRY ALREADY SET)
|
||||||
|
.6 LDX #*-*
|
||||||
|
GP.SAVEX .EQ *-1
|
||||||
|
ORA #0
|
||||||
|
GP.RTS RTS
|
||||||
|
*--------------------------------
|
||||||
|
.HS 00 <<<SPARE>>>
|
||||||
|
*---CREATE PARMS-----------------
|
||||||
|
CREATE.PARMS
|
||||||
|
.HS 07
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS C3.00.0000.00.0000.0000
|
||||||
|
*---GET & SET PREFIX, DESTROY----
|
||||||
|
PREFIX.PARMS
|
||||||
|
.HS 01
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
*---RENAME-----------------------
|
||||||
|
RENAME.PARMS
|
||||||
|
.HS 02
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.DA PATHNAME.TWO.BUFFER
|
||||||
|
*---GET & SET FILE INFO----------
|
||||||
|
GET.SET.PARMS
|
||||||
|
.HS 0A
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS 00.00.0000
|
||||||
|
.HS 00.0000.0000.0000.0000.0000
|
||||||
|
*---MISC-------------------------
|
||||||
|
MISC.PARMS
|
||||||
|
.HS 02.00.0000
|
||||||
|
.HS 00
|
||||||
|
*---OPEN PARMS-------------------
|
||||||
|
OPEN.PARMS
|
||||||
|
.HS 03
|
||||||
|
.DA PATHNAME.ONE.BUFFER
|
||||||
|
.HS 0000.00
|
||||||
|
*---SET NEWLINE PARMS------------
|
||||||
|
NEWLINE.PARMS
|
||||||
|
.HS 03.00.7F.0D
|
||||||
|
*---READ & WRITE PARMS-----------
|
||||||
|
READ.WRITE.PARMS
|
||||||
|
.HS 04.00.0000.0000.0000
|
||||||
|
*---CLOSE & FLUSH PARMS----------
|
||||||
|
CLOSE.FLUSH.PARMS
|
||||||
|
.HS 01.00
|
||||||
|
*--------------------------------
|
||||||
|
* ADDRESSES OF MLI PARM LISTS FOR EACH CALL $C0-$D3
|
||||||
|
* actual address is $BExx
|
||||||
|
*--------------------------------
|
||||||
|
MLI.PARM.PNTRS
|
||||||
|
.DA #CREATE.PARMS $C0--CREATE
|
||||||
|
.DA #PREFIX.PARMS $C1--DESTROY
|
||||||
|
.DA #RENAME.PARMS $C2--RENAME
|
||||||
|
.DA #GET.SET.PARMS $C3--SFI
|
||||||
|
.DA #GET.SET.PARMS $C4--GFI
|
||||||
|
.DA #MISC.PARMS $C5--ONLINE
|
||||||
|
.DA #PREFIX.PARMS $C6--SPFX
|
||||||
|
.DA #PREFIX.PARMS $C7--GPFX
|
||||||
|
.DA #OPEN.PARMS $C8--OPEN
|
||||||
|
.DA #NEWLINE.PARMS $C9--NEWLINE
|
||||||
|
.DA #READ.WRITE.PARMS $CA--READ
|
||||||
|
.DA #READ.WRITE.PARMS $CB--WRITE
|
||||||
|
.DA #CLOSE.FLUSH.PARMS $CC--CLOSE
|
||||||
|
.DA #CLOSE.FLUSH.PARMS $CD--FLUSH
|
||||||
|
.DA #MISC.PARMS $CE--SMARK
|
||||||
|
* .DA #MISC.PARMS $CF--GMARK
|
||||||
|
* .DA #MISC.PARMS $D0--SEOF
|
||||||
|
* .DA #MISC.PARMS $D1--GEOF
|
||||||
|
* .DA #MISC.PARMS $D2--SBUF
|
||||||
|
* .DA #MISC.PARMS $D3--GBUF
|
||||||
|
*--------------------------------
|
||||||
|
.AS -/++++/
|
||||||
|
*--------------------------------
|
||||||
|
BUFFER.BASES .HS 78.7C LOWER/UPPER BUFFERS
|
||||||
|
EXEC.BUFFER.BASE .HS 74
|
||||||
|
*--------------------------------
|
||||||
|
RTS WAS GET BUFFER
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
RTS WAS RETURN BUFFER
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
.HS 74 HIMEM PAGE
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.gp
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
381
SCMASM.31/SCI.S.LOADSAVE.txt
Normal file
381
SCMASM.31/SCI.S.LOADSAVE.txt
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
DASH
|
||||||
|
LDA GET.SET.PARMS+4 GET FILE TYPE
|
||||||
|
CMP #$06 BINARY?
|
||||||
|
BEQ .3 ...YES, BRUN
|
||||||
|
CMP #$04 TEXT?
|
||||||
|
BNE .1 ...NO, TRY SYS
|
||||||
|
JMP EXEC ...YES, EXEC
|
||||||
|
*--------------------------------
|
||||||
|
.1 CMP #$FF SYS FILE?
|
||||||
|
BEQ .2 ...YES, BRUN IT
|
||||||
|
LDA #$0D "FILE TYPE MISMATCH"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*---RUN SYS FILE-----------------
|
||||||
|
.2 JSR CLOSE.ALL.FILES
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
LDA #0
|
||||||
|
STA VAL.A
|
||||||
|
LDX #6 RELEASE $8000-$B7FF
|
||||||
|
.4 STA BITMAP+16,X
|
||||||
|
DEX
|
||||||
|
BPL .4
|
||||||
|
LDA #$01 RELEASE $B800-$BEFF
|
||||||
|
STA BITMAP+23 B800.BFFF
|
||||||
|
LDA /$2000 A$2000
|
||||||
|
STA VAL.A+1
|
||||||
|
LDA #$FF T=SYS
|
||||||
|
STA VAL.T
|
||||||
|
LDA #$80 SIGNAL FOUND T,A, AND PATHNAME
|
||||||
|
STA FBITS+1
|
||||||
|
LDA #$05
|
||||||
|
STA FBITS
|
||||||
|
.3 JMP BRUN
|
||||||
|
*--------------------------------
|
||||||
|
WARM.DOS
|
||||||
|
JSR CLOSE.ALL.FILES
|
||||||
|
JSR CROUT
|
||||||
|
JMP SC.SOFT
|
||||||
|
*--------------------------------
|
||||||
|
* LOAD A SOURCE PROGRAM
|
||||||
|
*--------------------------------
|
||||||
|
LOAD
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
BCS .5
|
||||||
|
LDA #$01 READ
|
||||||
|
LDX #$FA FILE TYPE
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .5 ...ERROR
|
||||||
|
*---GET LENGTH OF FILE-----------
|
||||||
|
LDA SC.INFLAG
|
||||||
|
ASL
|
||||||
|
BPL .1 ...NOT .INBx
|
||||||
|
AND #$7F
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
BEQ .2 ...ALWAYS
|
||||||
|
.1 JSR MLI.D1 GET LENGTH OF FILE
|
||||||
|
BCS .5 ...ERROR
|
||||||
|
*---FIGURE LOAD ADDRESS----------
|
||||||
|
.2 SEC
|
||||||
|
LDA SC.HIMEM
|
||||||
|
SBC MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
STA VAL.A
|
||||||
|
TAX
|
||||||
|
LDA SC.HIMEM+1
|
||||||
|
SBC MISC.PARMS+3
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
STA VAL.A+1
|
||||||
|
TAY
|
||||||
|
*---CHECK FOR ROOM IN RAM--------
|
||||||
|
BMI .6 ADDRESS>$7FFF MEANS NO ROOM
|
||||||
|
TXA
|
||||||
|
CMP SC.LOMEM
|
||||||
|
TYA
|
||||||
|
SBC SC.LOMEM+1
|
||||||
|
BCC .6 ...BELOW LOMEM
|
||||||
|
*---READ FILE--------------------
|
||||||
|
LDA MISC.PARMS+2
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA MISC.PARMS+3
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CA READ THE FILE
|
||||||
|
BCS .5
|
||||||
|
*---CLOSE UNLESS .INBx-----------
|
||||||
|
BIT SC.INFLAG
|
||||||
|
BVS .4 ...IT IS .INBx
|
||||||
|
.3 JSR MLI.CC CLOSE THE FILE
|
||||||
|
BCS .5
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDX VAL.A+1
|
||||||
|
LDY VAL.A
|
||||||
|
STX SC.PP+1
|
||||||
|
STY SC.PP
|
||||||
|
.5 RTS
|
||||||
|
.6 LDA #$0E "PROGRAM TOO LARGE"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SAVE SOURCE PROGRAM ON DISK
|
||||||
|
*--------------------------------
|
||||||
|
SAVE
|
||||||
|
BCC .1 ...FILE ALREADY HERE
|
||||||
|
LDA #$FA FILE TYPE "INT"
|
||||||
|
STA VAL.T
|
||||||
|
STA GET.SET.PARMS+4
|
||||||
|
LDA #$C3
|
||||||
|
STA GET.SET.PARMS+3
|
||||||
|
LDA SC.PP START OF PROGRAM
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
LDA SC.PP+1
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
JSR MAKE.A.FILE CREATE A NEW FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
.1 JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
BCS .2
|
||||||
|
LDA #$02
|
||||||
|
LDX #$FA
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
*---GET LENGTH-------------------
|
||||||
|
SEC GET LENGTH
|
||||||
|
LDA SC.HIMEM
|
||||||
|
SBC SC.PP
|
||||||
|
TAX
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
LDA SC.HIMEM+1
|
||||||
|
SBC SC.PP+1
|
||||||
|
TAY
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+4
|
||||||
|
*---WRITE THE FILE---------------
|
||||||
|
LDA SC.PP
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA SC.PP+1
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
STX READ.WRITE.PARMS+4
|
||||||
|
STY READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CB WRITE DATA ON FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
JSR MLI.D0 SET EOF (TRUNCATE OLD LONGER FILE)
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
JSR MLI.CC CLOSE THE FILE
|
||||||
|
BCS .2 ...ERROR
|
||||||
|
*---UPDATE FILE INFO-------------
|
||||||
|
LDA SC.PP+1
|
||||||
|
LDX SC.PP
|
||||||
|
CMP GET.SET.PARMS+6
|
||||||
|
BNE .3
|
||||||
|
CPX GET.SET.PARMS+5
|
||||||
|
CLC
|
||||||
|
BNE .3
|
||||||
|
.2 RTS
|
||||||
|
.3 STX GET.SET.PARMS+5
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
LDA #0
|
||||||
|
STA GET.SET.PARMS+10
|
||||||
|
STA GET.SET.PARMS+11
|
||||||
|
STA GET.SET.PARMS+12
|
||||||
|
STA GET.SET.PARMS+13
|
||||||
|
JMP SET.FILE.INFO
|
||||||
|
*--------------------------------
|
||||||
|
CREATE
|
||||||
|
LDX #0
|
||||||
|
LDY #0 AuxType = 0000 unless specified
|
||||||
|
LDA FBITS+1
|
||||||
|
BPL .1 ...no A-value specified
|
||||||
|
LDX VAL.A use A-value for AuxType
|
||||||
|
LDY VAL.A+1
|
||||||
|
.1 STX CREATE.PARMS+5
|
||||||
|
STY CREATE.PARMS+6
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BNE MAKE.A.FILE
|
||||||
|
LDA #$0F
|
||||||
|
STA VAL.T
|
||||||
|
|
||||||
|
MAKE.A.FILE
|
||||||
|
LDA VAL.T
|
||||||
|
STA CREATE.PARMS+4
|
||||||
|
LDX #$C3
|
||||||
|
LDY #$01 SEEDLING
|
||||||
|
CMP #$0F
|
||||||
|
BNE .1
|
||||||
|
LDY #$0D DIRECTORY
|
||||||
|
.1 STX CREATE.PARMS+3
|
||||||
|
STY CREATE.PARMS+7
|
||||||
|
JMP MLI.C0 CREATE
|
||||||
|
*--------------------------------
|
||||||
|
RENAME LDA FBITS
|
||||||
|
AND #$02 PATH 2?
|
||||||
|
BEQ .1 ...NO, ERROR
|
||||||
|
JMP MLI.C2 RENAME
|
||||||
|
.1 JMP ERR.SYNTAX
|
||||||
|
*--------------------------------
|
||||||
|
LOCK JSR GET.FILE.INFO
|
||||||
|
BCS RTS3
|
||||||
|
LDA GET.SET.PARMS+3
|
||||||
|
AND #$3C
|
||||||
|
ORA #$01
|
||||||
|
BNE LKUNLK ...ALWAYS
|
||||||
|
UNLOCK JSR GET.FILE.INFO
|
||||||
|
BCS RTS3
|
||||||
|
LDA #$C3
|
||||||
|
ORA GET.SET.PARMS+3
|
||||||
|
LKUNLK STA GET.SET.PARMS+3
|
||||||
|
JMP SET.FILE.INFO
|
||||||
|
*--------------------------------
|
||||||
|
PREFIX
|
||||||
|
LDX #0
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$04
|
||||||
|
BNE .1 ...SPECIFIED S/D
|
||||||
|
LDA FBITS SEE IF SPECIFIED PATHNAME
|
||||||
|
LSR
|
||||||
|
BCC .3 ...NO, SO PRINT CURRENT PREFIX
|
||||||
|
.1 JMP MLI.C6 SET PREFIX
|
||||||
|
*---PRINT CURRENT PREFIX---------
|
||||||
|
.2 LDA PATHNAME.ONE.BUFFER+1,X
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INX
|
||||||
|
.3 CPX PATHNAME.ONE.BUFFER
|
||||||
|
BCC .2
|
||||||
|
JSR CROUT
|
||||||
|
CLC
|
||||||
|
RTS3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
NOPREFIX
|
||||||
|
LDA #0
|
||||||
|
STA PATHNAME.ONE.BUFFER
|
||||||
|
JMP MLI.C6 SET PREFIX
|
||||||
|
*--------------------------------
|
||||||
|
BSAVE
|
||||||
|
BCC .2 ...EXISTING FILE
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$B0 A-EL
|
||||||
|
CMP #$90 Require A and either E or L
|
||||||
|
BCC .3 ...Neither E nor L
|
||||||
|
LDA VAL.A
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
*---T=BIN unless specified-------
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BNE .1 ...TYPE SPECIFIED
|
||||||
|
LDA #$06 ...NO TYPE, ASSUME BINARY
|
||||||
|
STA VAL.T
|
||||||
|
.1 LDA VAL.T
|
||||||
|
STA GET.SET.PARMS+4
|
||||||
|
*--------------------------------
|
||||||
|
JSR MAKE.A.FILE
|
||||||
|
BCS .4
|
||||||
|
JSR GET.FILE.INFO
|
||||||
|
BCS .4
|
||||||
|
.2 LDA #$02
|
||||||
|
BNE B.COMMON ...ALWAYS
|
||||||
|
|
||||||
|
.3 LDA #$06 "PATH NOT FOUND"
|
||||||
|
SEC
|
||||||
|
.4 RTS
|
||||||
|
*--------------------------------
|
||||||
|
BRUN
|
||||||
|
JSR BLOAD
|
||||||
|
BCS .1
|
||||||
|
JSR .2
|
||||||
|
CLC
|
||||||
|
.1 RTS
|
||||||
|
.2 JMP (READ.WRITE.PARMS+2)
|
||||||
|
*--------------------------------
|
||||||
|
BLOAD
|
||||||
|
LDA #$01
|
||||||
|
B.COMMON
|
||||||
|
PHA
|
||||||
|
JSR ALLOCATE.UPPER.BUFFER
|
||||||
|
PLA
|
||||||
|
BCS .3
|
||||||
|
LDX #$06
|
||||||
|
JSR OPEN.A.FILE
|
||||||
|
BCS .3
|
||||||
|
LDX VAL.A
|
||||||
|
LDY VAL.A+1
|
||||||
|
LDA FBITS+1
|
||||||
|
BMI .1 ...ADDRESS SPECIFIED
|
||||||
|
LDX GET.SET.PARMS+5
|
||||||
|
LDY GET.SET.PARMS+6
|
||||||
|
LDA FBITS DON'T ALLOW DEFAULT ADDRESS
|
||||||
|
AND #$04 ON NON-BINARY FILES
|
||||||
|
BEQ .0 ...T not specified, so it is BIN
|
||||||
|
LDA VAL.T T specified, better be BIN or SYS
|
||||||
|
CMP #$06 is it BIN?
|
||||||
|
BEQ .0 ...yes, use AuxType value
|
||||||
|
CMP #$FF is it SYS?
|
||||||
|
BNE .4 ...no, error
|
||||||
|
LDX #$2000 ...type SYS, assume A$2000
|
||||||
|
LDY /$2000
|
||||||
|
.0 LDA FBITS+1
|
||||||
|
.1 STX READ.WRITE.PARMS+2
|
||||||
|
STY READ.WRITE.PARMS+3
|
||||||
|
LDX VAL.L
|
||||||
|
LDY VAL.L+1
|
||||||
|
AND #$30
|
||||||
|
BEQ .5
|
||||||
|
EOR #$30
|
||||||
|
BEQ .4
|
||||||
|
AND #$10
|
||||||
|
BEQ .7
|
||||||
|
LDA VAL.E
|
||||||
|
SEC
|
||||||
|
SBC VAL.A
|
||||||
|
TAX
|
||||||
|
LDA VAL.E+1
|
||||||
|
SBC VAL.A+1
|
||||||
|
TAY
|
||||||
|
INX
|
||||||
|
BNE .2
|
||||||
|
INY
|
||||||
|
.2 BCS .7
|
||||||
|
LDA #$02 "RANGE ERROR"
|
||||||
|
SEC
|
||||||
|
.3 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 LDA #$0B "INVALID PARAMETER"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.5 JSR MLI.D1 GET EOF
|
||||||
|
BCS .6
|
||||||
|
LDX MISC.PARMS+2
|
||||||
|
LDY MISC.PARMS+3
|
||||||
|
LDA MISC.PARMS+4
|
||||||
|
BEQ .7
|
||||||
|
LDA #$0E "PROGRAM TOO LARGE"
|
||||||
|
.6 SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.7 STX READ.WRITE.PARMS+4
|
||||||
|
STY READ.WRITE.PARMS+5
|
||||||
|
LDA FBITS+1
|
||||||
|
AND #$40
|
||||||
|
BEQ .10
|
||||||
|
LDX #$02
|
||||||
|
.8 LDA VAL.B,X
|
||||||
|
STA MISC.PARMS+2,X
|
||||||
|
DEX
|
||||||
|
BPL .8
|
||||||
|
.9 JSR MLI.CE SET MARK
|
||||||
|
LDX COMMAND.NUMBER
|
||||||
|
BCC .10
|
||||||
|
CMP #$02
|
||||||
|
BNE .6
|
||||||
|
CPX #CN.BSAVE
|
||||||
|
BNE .6
|
||||||
|
JSR MLI.D0 SET EOF
|
||||||
|
BCC .9
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.10 LDX COMMAND.NUMBER
|
||||||
|
CPX #CN.BSAVE
|
||||||
|
BNE .12 ...NOT BSAVE
|
||||||
|
JSR MLI.CB ...BSAVE
|
||||||
|
BCS .13 ...ERROR
|
||||||
|
.11 JMP MLI.CC
|
||||||
|
.12 JSR MLI.CA READ
|
||||||
|
BCC .11 ...GOOD, CLOSE
|
||||||
|
.13 RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.loadsave
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
75
SCMASM.31/SCI.S.ONLINE.txt
Normal file
75
SCMASM.31/SCI.S.ONLINE.txt
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
ONLINE LDA BUFFER.BASES
|
||||||
|
STA MISC.PARMS+3
|
||||||
|
LDA #0
|
||||||
|
STA MISC.PARMS+2
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
JSR MLI.C5 (Might clobber DRIVER.PTR)
|
||||||
|
*---Now display the list---------
|
||||||
|
LDA BUFFER.BASES
|
||||||
|
STA DRIVER.PTR+1
|
||||||
|
LDA #0
|
||||||
|
STA DRIVER.PTR
|
||||||
|
.1 PHA
|
||||||
|
TAY
|
||||||
|
LDA (DRIVER.PTR),Y
|
||||||
|
BEQ .5 ...END OF LIST
|
||||||
|
PHA
|
||||||
|
LDA #"S"
|
||||||
|
JSR COUT
|
||||||
|
PLA
|
||||||
|
PHA
|
||||||
|
LSR ISOLATE SLOT NUMBER
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
AND #7
|
||||||
|
ORA #"0"
|
||||||
|
JSR COUT PRINT SLOT NUMBER
|
||||||
|
LDA #","
|
||||||
|
JSR COUT
|
||||||
|
LDA #"D"
|
||||||
|
JSR COUT
|
||||||
|
PLA
|
||||||
|
PHA
|
||||||
|
ASL SET CARRY IF DRIVE 2
|
||||||
|
LDA #"1" ASSUME DRIVE 1
|
||||||
|
ADC #0 CHANGE TO 2 IF TRUE
|
||||||
|
JSR COUT
|
||||||
|
LDA #" " PRINT SPACE
|
||||||
|
JSR COUT
|
||||||
|
PLA get dsssllll again
|
||||||
|
AND #$0F isolate length
|
||||||
|
BEQ .3 no name, show error code
|
||||||
|
TAX
|
||||||
|
LDA #"/"
|
||||||
|
.2 JSR COUT
|
||||||
|
INY PRINT THE VOLUME OR FILE NAME
|
||||||
|
LDA (DRIVER.PTR),Y
|
||||||
|
ORA #$80
|
||||||
|
DEX
|
||||||
|
BPL .2
|
||||||
|
LDA #"/"
|
||||||
|
BNE .4 ...ALWAYS
|
||||||
|
.3 LDA #"("
|
||||||
|
JSR COUT
|
||||||
|
INY
|
||||||
|
LDA (DRIVER.PTR),Y GET ERROR CODE
|
||||||
|
JSR PRBYTE
|
||||||
|
LDA #")"
|
||||||
|
.4 JSR COUT
|
||||||
|
JSR CROUT
|
||||||
|
*--------------------------------
|
||||||
|
.5 CLC POINT TO NEXT VOLUME NAME
|
||||||
|
PLA
|
||||||
|
ADC #16
|
||||||
|
BCC .1 STILL IN SAME PAGE
|
||||||
|
CLC NO ERROR!
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.online
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
321
SCMASM.31/SCI.S.OPENCLOSE.txt
Normal file
321
SCMASM.31/SCI.S.OPENCLOSE.txt
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* FOLLOWING USE "BIT" TO SKIP OVER TWO BYTES,
|
||||||
|
* SO CANNOT HAVE THE SECOND OF THE TWO =$CX.
|
||||||
|
*--------------------------------
|
||||||
|
MLI.C0 LDA #$00 CREATE
|
||||||
|
.HS 2C
|
||||||
|
MLI.C1 LDA #$01 DESTROY
|
||||||
|
.HS 2C
|
||||||
|
MLI.C2 LDA #$02 RENAME
|
||||||
|
.HS 2C
|
||||||
|
MLI.C3 LDA #$03 SET FILE INFO
|
||||||
|
.HS 2C
|
||||||
|
MLI.C4 LDA #$04 GET FILE INFO
|
||||||
|
.HS 2C
|
||||||
|
MLI.C5 LDA #$05 ONLINE
|
||||||
|
.HS 2C
|
||||||
|
MLI.C6 LDA #$06 SET PREFIX
|
||||||
|
.HS 2C
|
||||||
|
MLI.C7 LDA #$07 GET PREFIX
|
||||||
|
.HS 2C
|
||||||
|
MLI.C8 LDA #$08 OPEN
|
||||||
|
.HS 2C
|
||||||
|
MLI.C9 LDA #$09 NEWLINE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CA LDA #$0A READ
|
||||||
|
.HS 2C
|
||||||
|
MLI.CB LDA #$0B WRITE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CC LDA #$0C CLOSE
|
||||||
|
.HS 2C
|
||||||
|
MLI.CD LDA #$0D FLUSH
|
||||||
|
.HS 2C
|
||||||
|
MLI.CE LDA #$0E SET MARK
|
||||||
|
.HS 2C
|
||||||
|
MLI.CF LDA #$0F GET MARK
|
||||||
|
.HS 2C
|
||||||
|
MLI.D0 LDA #$D0 SET EOF
|
||||||
|
.HS 2C
|
||||||
|
MLI.D1 LDA #$D1 GET EOF
|
||||||
|
ORA #$C0 MAKE INTO MLI CALL CODE
|
||||||
|
JMP MLI.CALLER
|
||||||
|
*--------------------------------
|
||||||
|
GET.FILE.INFO
|
||||||
|
LDA #10
|
||||||
|
STA GET.SET.PARMS
|
||||||
|
BNE MLI.C4 GET FILE INFO
|
||||||
|
*--------------------------------
|
||||||
|
SET.FILE.INFO
|
||||||
|
LDA #7
|
||||||
|
STA GET.SET.PARMS
|
||||||
|
BNE MLI.C3 SET FILE INFO
|
||||||
|
*--------------------------------
|
||||||
|
BYE
|
||||||
|
JSR CLOSE.ALL.FILES
|
||||||
|
JSR CLOSE.EXEC.FILE
|
||||||
|
JSR GP.MLI
|
||||||
|
.DA #$65,READ.WRITE.PARMS
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.A.FILE
|
||||||
|
PHA
|
||||||
|
LDA FBITS
|
||||||
|
AND #$04
|
||||||
|
BEQ .1
|
||||||
|
LDX VAL.T
|
||||||
|
.1 PLA
|
||||||
|
|
||||||
|
OPEN.DIRECTORY
|
||||||
|
CPX GET.SET.PARMS+4
|
||||||
|
BNE TYPERR
|
||||||
|
AND GET.SET.PARMS+3
|
||||||
|
BEQ .3
|
||||||
|
LDA ALLOCATED.BUFFER.PAGE
|
||||||
|
STA OPEN.PARMS+4
|
||||||
|
LDA #$0F
|
||||||
|
STA LEVEL
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .1
|
||||||
|
LDA OPEN.PARMS+5
|
||||||
|
STA READ.WRITE.PARMS+1
|
||||||
|
STA CLOSE.FLUSH.PARMS+1
|
||||||
|
STA MISC.PARMS+1
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.3 LDA #$0A "FILE LOCKED"
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
VERIFY
|
||||||
|
LDA #$06 "PATH NOT FOUND"
|
||||||
|
RTS ALREADY .CS. IF ERROR
|
||||||
|
*--------------------------------
|
||||||
|
TYPERR LDA #$0D
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN -- ONLY USED BY SCASM FOR OPENING
|
||||||
|
* .TF AND "TEXT" FILES
|
||||||
|
* THE FILES MAY BE TXT OR BIN FILE TYPE
|
||||||
|
*--------------------------------
|
||||||
|
OPEN
|
||||||
|
PHP
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCC .9 ...ALREADY OPEN, ERROR
|
||||||
|
PLP ...GET SAVED STATUS
|
||||||
|
BCC .3 ...FILE ALREADY EXISTS
|
||||||
|
*---MAKE A NEW FILE--------------
|
||||||
|
LDA FBITS WAS T SPECIFIED?
|
||||||
|
AND #$04
|
||||||
|
BEQ .1 ...NO
|
||||||
|
LDA VAL.T WHAT WAS SPEC?
|
||||||
|
BCS .2 ...always, use spec'd type
|
||||||
|
.1 LDA #$06 ...new file, type not spec'd, T=BIN
|
||||||
|
BIT PASS $FF if command level, 0 or 1 if assembling
|
||||||
|
BPL .4 ...assembling, make BIN file
|
||||||
|
LDA #$04 ...command, make TXT file
|
||||||
|
.4 STA VAL.T
|
||||||
|
.2 STA GET.SET.PARMS+4
|
||||||
|
LDA #$C3 FULL ACCESS PRIVILEGES
|
||||||
|
STA GET.SET.PARMS+3
|
||||||
|
LDA #0 RECORD LENGTH = 0000
|
||||||
|
STA CREATE.PARMS+5
|
||||||
|
STA CREATE.PARMS+6
|
||||||
|
STA GET.SET.PARMS+5
|
||||||
|
STA GET.SET.PARMS+6
|
||||||
|
JSR MAKE.A.FILE CREATE THE FILE
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---NOW THE FILE EXISTS----------
|
||||||
|
*---OPEN THE FILE----------------
|
||||||
|
.3 JSR ALLOCATE.LOWER.BUFFER
|
||||||
|
STA OPEN.PARMS+4 STARTING PAGE OF BUFFER
|
||||||
|
LDA #$07 LEVEL #
|
||||||
|
STA LEVEL
|
||||||
|
JSR MLI.C8 OPEN
|
||||||
|
BCS .8 ...ERROR
|
||||||
|
*---SAVE NAME, ETC OF OPEN FILE--
|
||||||
|
LDA OPEN.PARMS+4 MARK THE BUFFER IN USE
|
||||||
|
STA FILE.BUFFER.PNTRS,X
|
||||||
|
LDA OPEN.PARMS+5 REFNUM
|
||||||
|
STA FILE.REFNUMS,X
|
||||||
|
JSR SAVE.FILENAME.IN.TABLE
|
||||||
|
CLC
|
||||||
|
.8 RTS
|
||||||
|
*--------------------------------
|
||||||
|
.9 PLP
|
||||||
|
JMP ERR.FILE.BUSY
|
||||||
|
*--------------------------------
|
||||||
|
SAVE.FILENAME.IN.TABLE
|
||||||
|
TXA
|
||||||
|
ASL INDEX TIMES 32
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
*---FORM NAME LENGTH BYTE--------
|
||||||
|
LDA PATHNAME.TWO.BUFFER
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS,X
|
||||||
|
TAY SAVE ACTUAL LENGTH
|
||||||
|
CMP #30 ONLY ROOM FOR 29 CHARS
|
||||||
|
BCC .1 ...'TWILL FIT
|
||||||
|
LDA #29 USE LAST 29 CHARS
|
||||||
|
.1 STA FNLEN
|
||||||
|
LDA VAL.L
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+1,X
|
||||||
|
LDA VAL.L+1
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
.2 INX
|
||||||
|
LDA PATHNAME.TWO.BUFFER,Y
|
||||||
|
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
DEY
|
||||||
|
DEC FNLEN
|
||||||
|
BNE .2
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* SEARCH OPEN FILE NAME TABLE
|
||||||
|
* RETURN .CS., A=ERRCOD IF NO PATHNAME
|
||||||
|
* OR IF NOT IN TABLE
|
||||||
|
* RETURN .CC., A=REFNUM IF FOUND IN TABLE
|
||||||
|
*--------------------------------
|
||||||
|
GET.REFNUM.OF.OPEN.FILE
|
||||||
|
LDA FBITS WAS PATHNAME GIVEN?
|
||||||
|
LSR
|
||||||
|
BCS .1 ...YES
|
||||||
|
JMP ERR.SYNTAX ...NO, "SYNTAX ERROR"
|
||||||
|
*---CHECK AMONG NON-EXEC FILES---
|
||||||
|
.1 LDX #1 MAX # OF FILES IS 2
|
||||||
|
STX EXEC.FILE.CLOSING.FLAG
|
||||||
|
.2 LDA FILE.BUFFER.PNTRS,X SEE IF IN USE
|
||||||
|
BEQ .3 NO
|
||||||
|
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
BCC .5 ...FOUND IT
|
||||||
|
.3 DEX
|
||||||
|
BPL .2
|
||||||
|
*---CHECK EXEC FILE--------------
|
||||||
|
BIT F.EXEC IS EXEC ON?
|
||||||
|
BPL .4 ...NO, FILE NOT OPEN
|
||||||
|
LDX #2 ...YES
|
||||||
|
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
BCS .4 ...NOT THIS ONE EITHER
|
||||||
|
LDA #$FF
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
LDA EXEC.REFNUM
|
||||||
|
RTS RETURN .CC.
|
||||||
|
.4 LDA #$12 "FILE NOT OPEN"
|
||||||
|
SEC
|
||||||
|
RTS RETURN .CS.
|
||||||
|
.5 LDA FILE.REFNUMS,X
|
||||||
|
RTS RETURN .CC.
|
||||||
|
*--------------------------------
|
||||||
|
* COMPARE NAMES
|
||||||
|
* RETURN .CC. IF SAME, ELSE .CS.
|
||||||
|
*--------------------------------
|
||||||
|
COMPARE.TO.FILE.NAME.BUFFER
|
||||||
|
TXA
|
||||||
|
PHA SAVE X-REGISTER
|
||||||
|
ASL INDEX TIMES 32
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS,X
|
||||||
|
CMP PATHNAME.TWO.BUFFER
|
||||||
|
BNE .3 ...DIFFERENT LENGTHS
|
||||||
|
TAY POINT TO END OF PATHNAME
|
||||||
|
CMP #30 CHOP AT 29
|
||||||
|
BCC .1
|
||||||
|
LDA #29
|
||||||
|
.1 STA FNLEN
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS+1,X
|
||||||
|
STA RECORD.LENGTH
|
||||||
|
LDA OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
STA RECORD.LENGTH+1
|
||||||
|
.2 INX
|
||||||
|
LDA PATHNAME.TWO.BUFFER,Y
|
||||||
|
CMP OPEN.FILE.NAME.BUFFERS+2,X
|
||||||
|
BNE .3 NOT THE SAME NAME
|
||||||
|
DEY
|
||||||
|
DEC FNLEN
|
||||||
|
BNE .2 MORE TO THE NAME
|
||||||
|
CLC SIGNAL SAME NAMES
|
||||||
|
.HS B0 "BCS" OPCODE, SKIPS OVER "SEC"
|
||||||
|
.3 SEC SIGNAL DIFFERENT NAMES
|
||||||
|
PLA RESTORE X-REG
|
||||||
|
TAX
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE
|
||||||
|
LDA FBITS
|
||||||
|
LSR ANY PATHNAME GIVEN?
|
||||||
|
BCC CLOSE.ALL.FILES ...NO
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCC CLOSE.ONE.FILE ...OPEN, SO CLOSE IT
|
||||||
|
CLC ...NOT OPEN, SO FINISHED
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
* CLOSE A FILE ... REFNUM IN A-REG
|
||||||
|
* INDEX IN X-REG
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.ONE.FILE
|
||||||
|
STA CLOSE.FLUSH.PARMS+1 REFNUM
|
||||||
|
LDA #0
|
||||||
|
STA LEVEL LEVEL 0
|
||||||
|
JSR MLI.CC CLOSE
|
||||||
|
BCS RTS2 ...ERROR
|
||||||
|
LDA #0
|
||||||
|
BIT EXEC.FILE.CLOSING.FLAG
|
||||||
|
BPL .1
|
||||||
|
STA F.EXEC
|
||||||
|
STA EXEC.FILE.CLOSING.FLAG
|
||||||
|
RTS
|
||||||
|
.1 STA FILE.BUFFER.PNTRS,X
|
||||||
|
LDA CLOSE.FLUSH.PARMS+1
|
||||||
|
EOR WRITE.REFNUM TEST .EQ., LEAVE CARRY CLEAR
|
||||||
|
BNE RTS2 ...NOT SAME AS "WRITE" FILE
|
||||||
|
*--------------------------------
|
||||||
|
UNHOOK.WRITE
|
||||||
|
BIT F.WRITE
|
||||||
|
BPL RTS2
|
||||||
|
LDA VDOSIO
|
||||||
|
STA CSWL
|
||||||
|
LDA VDOSIO+1
|
||||||
|
STA CSWH
|
||||||
|
LDA #0
|
||||||
|
STA F.WRITE
|
||||||
|
RTS2 RTS
|
||||||
|
*--------------------------------
|
||||||
|
CLOSE.ALL.FILES
|
||||||
|
LDX #1 MAX FILES IS 2
|
||||||
|
.1 LDA FILE.BUFFER.PNTRS,X
|
||||||
|
BEQ .2 NOT IN USE
|
||||||
|
LDA FILE.REFNUMS,X
|
||||||
|
JSR CLOSE.ONE.FILE
|
||||||
|
BCS RTS2
|
||||||
|
.2 DEX
|
||||||
|
BPL .1
|
||||||
|
INX X=0
|
||||||
|
STX CLOSE.FLUSH.PARMS+1
|
||||||
|
LDA #$07
|
||||||
|
STA LEVEL
|
||||||
|
JMP MLI.CC CLOSE
|
||||||
|
*--------------------------------
|
||||||
|
* ALLOCATE UPPER/LOWER BUFFER
|
||||||
|
*--------------------------------
|
||||||
|
ALLOCATE.UPPER.BUFFER
|
||||||
|
LDX #1
|
||||||
|
.HS 2C
|
||||||
|
ALLOCATE.LOWER.BUFFER
|
||||||
|
LDX #0
|
||||||
|
.2 LDA BUFFER.BASES,X
|
||||||
|
STA ALLOCATED.BUFFER.PAGE
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.openclose
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
87
SCMASM.31/SCI.S.PRIN.txt
Normal file
87
SCMASM.31/SCI.S.PRIN.txt
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
* PR#slot copy address from OUTVEC,slot to CSW
|
||||||
|
* PR#Aaddr copy Aaddress into CSW
|
||||||
|
* PR#slot,Aaddr copy Aaddress into OUTVEC,slot
|
||||||
|
*
|
||||||
|
* IN#slot copy address from INVEC,slot to KSW
|
||||||
|
* IN#Aaddr copy Aaddress into KSW
|
||||||
|
* IN#slot,Aaddr copy Aaddress into INVEC,slot
|
||||||
|
*--------------------------------
|
||||||
|
PR LDA #0
|
||||||
|
.HS 2C SKIP NEXT LINE
|
||||||
|
IN LDA #2
|
||||||
|
PHA SAVE 0 OR 2
|
||||||
|
ASL
|
||||||
|
ASL 00 OR 08
|
||||||
|
ORA VAL.LB +SLOT
|
||||||
|
ASL *2
|
||||||
|
TAX
|
||||||
|
BIT FBITS WAS SLOT PARAMETER GIVEN?
|
||||||
|
BVC .1 ...NO
|
||||||
|
LDA FBITS+1 ...YES, WAS A$ PARM ALSO?
|
||||||
|
BMI .2 ...YES, SO UPDATE TABLE
|
||||||
|
TXA Check for "PR#0"
|
||||||
|
BEQ .4 ...yes, so call MON.SETVID directly
|
||||||
|
LDA OUTVEC,X ...NO, ONLY SLOT
|
||||||
|
STA VAL.A SO GET VALUE FROM TABLE
|
||||||
|
LDA OUTVEC+1,X
|
||||||
|
STA VAL.A+1
|
||||||
|
.1 JSR CHECK.IO.DRIVER
|
||||||
|
BCS .3 ...NOT VALID DRIVER
|
||||||
|
PLA POP SAVED 0 OR 2
|
||||||
|
TAX
|
||||||
|
LDA VAL.A INSTALL HOOK FOR DRIVER
|
||||||
|
STA CSWL,X
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA CSWH,X
|
||||||
|
RTS
|
||||||
|
*---ENTER NEW VALUE IN TABLE-----
|
||||||
|
.2 JSR CHECK.IO.DRIVER
|
||||||
|
BCS .3 ...ERROR
|
||||||
|
PLA POP OFF SAVED 0 OR 2
|
||||||
|
LDA VAL.A+1 UPDATE TABLE
|
||||||
|
STA OUTVEC+1,X
|
||||||
|
LDA VAL.A
|
||||||
|
STA OUTVEC,X
|
||||||
|
RTS
|
||||||
|
.3 PLA POP OFF SAVED 0 OR 2
|
||||||
|
LDA #$03 "NO DEVICE CONNECTED"
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
.4 PLA POP OFF SAVED 0 OR 2
|
||||||
|
JSR MON.SETVID
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
CHECK.IO.DRIVER
|
||||||
|
LDA VAL.A GET DRIVER ADDRESS INTO PNTR
|
||||||
|
STA DRIVER.PTR
|
||||||
|
LDA VAL.A+1
|
||||||
|
STA DRIVER.PTR+1
|
||||||
|
LDY #0
|
||||||
|
CMP #$C0 IS IT IN ROM AREA?
|
||||||
|
BCC .3 ...NO
|
||||||
|
LDA IO.OFF ...YES, TURN OFF $C800 SPACE
|
||||||
|
STY RETRY.COUNT
|
||||||
|
LDA (DRIVER.PTR),Y CHECK FOR ROM PRESENT
|
||||||
|
CMP #$FF
|
||||||
|
BEQ .4 ...NOT VALID ROM VALUE
|
||||||
|
.1 CMP (DRIVER.PTR),Y BETTER NOT CHANGE...
|
||||||
|
BNE .4 ...WOOPS, NOT ROM
|
||||||
|
DEC RETRY.COUNT TRY IT 256 TIMES
|
||||||
|
BNE .1 ...AGAIN
|
||||||
|
.2 CLC ...REALLY A DRIVER
|
||||||
|
RTS
|
||||||
|
*---VERIFY RAM-BASED DRIVER------
|
||||||
|
.3 LDA (DRIVER.PTR),Y GET FIRST BYTE
|
||||||
|
CMP #$D8 "CLD" OPCODE?
|
||||||
|
BEQ .2 ...YES, VALID DRIVER
|
||||||
|
.4 SEC
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.prin
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
65
SCMASM.31/SCI.S.RWPA.txt
Normal file
65
SCMASM.31/SCI.S.RWPA.txt
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
WRITE
|
||||||
|
JSR GET.REFNUM.OF.OPEN.FILE
|
||||||
|
BCS .1 ...NOT OPEN
|
||||||
|
STA WRITE.REFNUM
|
||||||
|
LDA CSWL
|
||||||
|
STA VDOSIO
|
||||||
|
LDA CSWH
|
||||||
|
STA VDOSIO+1
|
||||||
|
LDA #WRITE.TEXT.FILE
|
||||||
|
STA CSWL
|
||||||
|
LDA /WRITE.TEXT.FILE
|
||||||
|
STA CSWH
|
||||||
|
LDA #$FF
|
||||||
|
STA F.WRITE
|
||||||
|
.1 RTS
|
||||||
|
*--------------------------------
|
||||||
|
* OUTPUT HOOK DURING A WRITE OPERATION
|
||||||
|
*--------------------------------
|
||||||
|
WRITE.TEXT.FILE
|
||||||
|
AND #$7F PRODOS STANDARD IS BIT7=0
|
||||||
|
STA WRITE.OUTPUT.CHAR
|
||||||
|
JSR SAVE.REGS
|
||||||
|
LDX WRITE.REFNUM
|
||||||
|
STX READ.WRITE.PARMS+1
|
||||||
|
ASL IGNORE BIT 7
|
||||||
|
BEQ .2 END OF FILE
|
||||||
|
LDA #WRITE.OUTPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+2
|
||||||
|
LDA /WRITE.OUTPUT.CHAR
|
||||||
|
STA READ.WRITE.PARMS+3
|
||||||
|
LDA #1
|
||||||
|
STA READ.WRITE.PARMS+4
|
||||||
|
LDA #0
|
||||||
|
STA READ.WRITE.PARMS+5
|
||||||
|
JSR MLI.CB WRITE
|
||||||
|
BCC RESTORE.REGS
|
||||||
|
*--------------------------------
|
||||||
|
.1 JMP ERROR.HANDLER
|
||||||
|
*--------------------------------
|
||||||
|
.2 STX MISC.PARMS+1
|
||||||
|
JSR MLI.CF READ MARK
|
||||||
|
BCS .1
|
||||||
|
JSR MLI.D0 SET EOF
|
||||||
|
BCS .1 ...ERROR
|
||||||
|
*---fall into RESTORE.REGS-------
|
||||||
|
*--------------------------------
|
||||||
|
RESTORE.REGS
|
||||||
|
LDY PREGY
|
||||||
|
LDX PREGX
|
||||||
|
LDA PREGA
|
||||||
|
RTS
|
||||||
|
*--------------------------------
|
||||||
|
SAVE.REGS
|
||||||
|
STA PREGA
|
||||||
|
STX PREGX
|
||||||
|
STY PREGY
|
||||||
|
RTS
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.rwpa
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
180
SCMASM.31/SCI.S.TABLES.txt
Normal file
180
SCMASM.31/SCI.S.TABLES.txt
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
CN. .SE 1
|
||||||
|
.MA CMD
|
||||||
|
CN. .SE CN.+1
|
||||||
|
CN.]2 .EQ CN.
|
||||||
|
.AT /]2]3/
|
||||||
|
.DA ]2
|
||||||
|
.HS ]1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
COMMAND.TABLE
|
||||||
|
.AT /-/
|
||||||
|
.DA DASH
|
||||||
|
.HS 0104
|
||||||
|
>CMD 05F4,BLOAD
|
||||||
|
>CMD 01F4,BRUN
|
||||||
|
>CMD 0DF4,BSAVE
|
||||||
|
>CMD 0000,BYE
|
||||||
|
>CMD 9504,CATALOG
|
||||||
|
>CMD 9504,CAT
|
||||||
|
>CMD 0100,CLOSE
|
||||||
|
>CMD 0D84,CREATE
|
||||||
|
|
||||||
|
* >CMD 0104,DELETE
|
||||||
|
|
||||||
|
CN. .SE CN.+1
|
||||||
|
CN.DELETE .EQ CN.
|
||||||
|
.AT /DELETE/
|
||||||
|
.DA MLI.C1
|
||||||
|
.HS 0104
|
||||||
|
|
||||||
|
>CMD 0107,EXEC
|
||||||
|
>CMD 4080,IN,#
|
||||||
|
>CMD 0504,LOAD
|
||||||
|
>CMD 0104,LOCK
|
||||||
|
>CMD 0000,NOPREFIX
|
||||||
|
>CMD 0000,NOW
|
||||||
|
>CMD 0000,ONLINE
|
||||||
|
>CMD 2D14,OPEN
|
||||||
|
>CMD 4080,PR,#
|
||||||
|
>CMD 9104,PREFIX
|
||||||
|
>CMD 0304,RENAME
|
||||||
|
>CMD 0D04,SAVE
|
||||||
|
>CMD 0104,UNLOCK
|
||||||
|
>CMD 1104,VERIFY
|
||||||
|
>CMD 2147,WRITE
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------
|
||||||
|
* PARAMETER NAME TABLE
|
||||||
|
*--------------------------------
|
||||||
|
PARM.NAMES
|
||||||
|
.AS /ABELSDFRV/
|
||||||
|
NO.PARM.NAMES .EQ *-PARM.NAMES
|
||||||
|
*--------------------------------
|
||||||
|
* BIT MASK FOR PARAMETERS IN PERMISSION BITS
|
||||||
|
*--------------------------------
|
||||||
|
* A B E L S D F R V @
|
||||||
|
PARM.MASKS
|
||||||
|
.HS 80.40.20.10.04.04.02.01.00
|
||||||
|
*--------------------------------
|
||||||
|
* XXXXXXYY where yy+1= # of bytes
|
||||||
|
* xxxxxx= offset from VAL.A
|
||||||
|
* of last byte
|
||||||
|
*--------------------------------
|
||||||
|
.MA PAR
|
||||||
|
.DA #VAL.]1-VAL.A+]2-1*4+]2-1
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
PARM.VARIABLES
|
||||||
|
>PAR A,2
|
||||||
|
>PAR B,3
|
||||||
|
>PAR E,2
|
||||||
|
>PAR L,2
|
||||||
|
>PAR S,1
|
||||||
|
>PAR D,1
|
||||||
|
>PAR F,2
|
||||||
|
>PAR R,2
|
||||||
|
>PAR V,1
|
||||||
|
*--------------------------------
|
||||||
|
* FILE TYPE CODES
|
||||||
|
*--------------------------------
|
||||||
|
.MA FT
|
||||||
|
.AS -/]1/
|
||||||
|
.HS ]2
|
||||||
|
.EM
|
||||||
|
*--------------------------------
|
||||||
|
FILE.TYPES
|
||||||
|
>FT TXT,04
|
||||||
|
>FT BIN,06
|
||||||
|
>FT DIR,0F
|
||||||
|
>FT ADB,19
|
||||||
|
>FT AWP,1A
|
||||||
|
>FT ASP,1B
|
||||||
|
>FT PAS,EF
|
||||||
|
>FT CMD,F0
|
||||||
|
>FT S-C,FA (NORMALLY "INT")
|
||||||
|
>FT IVR,FB
|
||||||
|
>FT BAS,FC
|
||||||
|
>FT VAR,FD
|
||||||
|
>FT REL,FE
|
||||||
|
>FT SYS,FF
|
||||||
|
LAST.FILE.TYPE .EQ *-FILE.TYPES-1
|
||||||
|
*--------------------------------
|
||||||
|
* NAMES OF THE MONTHS
|
||||||
|
*--------------------------------
|
||||||
|
MONTH.NAMES
|
||||||
|
.AS -/JFMAMJJASOND/
|
||||||
|
.AS -/AEAPAUUUECOE/
|
||||||
|
.AS -/NBRRYNLGPTVC/
|
||||||
|
*--------------------------------
|
||||||
|
NO.DATE.MSG
|
||||||
|
.AS -/<NO DATE>/
|
||||||
|
*--------------------------------
|
||||||
|
* MLI ERROR CODES
|
||||||
|
*--------------------------------
|
||||||
|
MLI.ERROR.CODES
|
||||||
|
.HS 282B4041424344454647
|
||||||
|
.HS 48494B4C4D4E505356
|
||||||
|
*--------------------------------
|
||||||
|
* EQUIVALENT BI ERROR CODES
|
||||||
|
*--------------------------------
|
||||||
|
BI.ERROR.CODES
|
||||||
|
.HS 0304100C0C1206068613 (86 IS A TRICK)
|
||||||
|
.HS 09110D05020A140B0C08
|
||||||
|
*--------------------------------
|
||||||
|
SCI.MESSAGES
|
||||||
|
.AC 0 INIT NYBBLE.FLAG
|
||||||
|
.AC 1"ACDEFILNOPRST %"
|
||||||
|
.AC 2"BGHKMUVWXY/():."
|
||||||
|
.AC 3"QZ-4567890123@&"
|
||||||
|
Q.BLOCKS.ABOVE .EQ 0
|
||||||
|
.AC / BLOCKS SHOWN ABOVE:6%/
|
||||||
|
*--------------------------------
|
||||||
|
Q.DIRHDR .EQ 1
|
||||||
|
.AC /TYPE NAME2BLOCKS MODIFIED9CREATED9ENDFILE AUXTYPE%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC /RANGE ERROR%/
|
||||||
|
.AC /NO DEVICE CONNECTED%/
|
||||||
|
.AC /WRITE PROTECTED%/
|
||||||
|
.AC /END OF DATA%/
|
||||||
|
.AC /PATH NOT FOUND%/
|
||||||
|
*--------------------------------
|
||||||
|
Q.BLOCKS .EQ 7
|
||||||
|
.AC / VOLUME BLOCKS USED:8FREE:8TOTAL:5%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC "I/O ERROR%"
|
||||||
|
.AC /DISK FULL%/
|
||||||
|
.AC /FILE LOCKED%/
|
||||||
|
.AC /INVALID PARAMETER%/
|
||||||
|
.AC /NO BUFFERS AVAILABLE%/
|
||||||
|
.AC /FILE TYPE MISMATCH%/
|
||||||
|
.AC /PROGRAM TOO LARGE%/
|
||||||
|
.AC /NOT DIRECT COMMAND%/
|
||||||
|
.AC /SYNTAX ERROR%/
|
||||||
|
.AC /DIRECTORY FULL%/
|
||||||
|
.AC /FILE NOT OPEN%/
|
||||||
|
.AC /DUPLICATE FILE NAME%/
|
||||||
|
.AC /FILE BUSY%/
|
||||||
|
.AC /FILE(S) STILL OPEN%/
|
||||||
|
*--------------------------------
|
||||||
|
.AC "%"
|
||||||
|
*ZZ.MESSAGES .EQ *-MESSAGES
|
||||||
|
*--------------------------------
|
||||||
|
SCI.FIRST.TABLE .EQ *
|
||||||
|
.HS 00
|
||||||
|
.AS -"ACDEFILNOPRST "
|
||||||
|
.HS 8D
|
||||||
|
SCI.SECOND.TABLE .EQ *
|
||||||
|
.HS 00
|
||||||
|
.AS -"BGHKMUVWXY/():."
|
||||||
|
SCI.THIRD.TABLE .EQ *
|
||||||
|
.AS -"JQZ-"
|
||||||
|
.HS 05.06.07.08.09.0A.0B.0C.0D.0E.0F.10 (BLANK COUNTS+1)
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.tables
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
53
SCMASM.31/SCI.S.VARS.txt
Normal file
53
SCMASM.31/SCI.S.VARS.txt
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
NEW
|
||||||
|
AUTO 3,1
|
||||||
|
*--------------------------------------
|
||||||
|
ALLOCATED.BUFFER.PAGE .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
FNLEN .BS 1
|
||||||
|
RECORD.LENGTH .BS 2
|
||||||
|
PARM.LENM1 .BS 1
|
||||||
|
PARM.OFFSET .BS 1
|
||||||
|
ACCUM .BS 3
|
||||||
|
OVERFLOW .BS 1
|
||||||
|
COMMAND.ADDR .BS 2
|
||||||
|
BLOCKS .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
MONTH .BS 1
|
||||||
|
DAY .BS 1
|
||||||
|
YEAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
CAT.WIDTH .BS 1
|
||||||
|
ENTRY.LENGTH .BS 1
|
||||||
|
ENTRIES.PER.BLOCK .BS 1
|
||||||
|
FILE.COUNT .BS 2
|
||||||
|
ENTRY.COUNTER .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
CAT.INDEX .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
FILE.REFNUMS .BS 2
|
||||||
|
FILE.BUFFER.PNTRS .BS 2
|
||||||
|
*--------------------------------
|
||||||
|
EXEC.REFNUM .BS 1
|
||||||
|
EXEC.INPUT.CHAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
WRITE.REFNUM .BS 1
|
||||||
|
WRITE.OUTPUT.CHAR .BS 1
|
||||||
|
*--------------------------------
|
||||||
|
PATHNAME.ONE.BUFFER .BS 1
|
||||||
|
TXTBUF .BS 65
|
||||||
|
*--------------------------------
|
||||||
|
* OPEN FILE NAME BUFFERS
|
||||||
|
* 3 BUFFERS, 32 BYTES EACH
|
||||||
|
* 0 -- # BYTES IN FILE NAME (bits (6-0)
|
||||||
|
* Bit 7 = DIR file READ flag
|
||||||
|
* 1 -- L value lsb
|
||||||
|
* 2 -- L value msb
|
||||||
|
* 3-31 -- file name, backwards
|
||||||
|
*--------------------------------
|
||||||
|
OPEN.FILE.NAME.BUFFERS
|
||||||
|
.BS 32*3
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE usr/src/scmasm.31/sci.s.vars
|
||||||
|
LOAD usr/src/scmasm.31/scmasm.s
|
||||||
|
ASM
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user