From 1cbc954f7fc51f4f3b349f17790fd86bfb9399de Mon Sep 17 00:00:00 2001 From: burniouf Date: Sun, 6 Mar 2022 23:28:52 +0100 Subject: [PATCH] SCMASM.SYSTEM 3.0 & BASIC.SYSTEM 1.5 source code......many bugfxes & enh, new commands..... --- .Docs/Commands.md | 39 + .Docs/KERNEL.md | 75 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes BASIC.15/BASIC.S.A.txt | 1300 +++++++++++++++++++++++++ BASIC.15/BASIC.S.B.txt | 1687 +++++++++++++++++++++++++++++++++ BASIC.15/BASIC.S.C.txt | 1506 +++++++++++++++++++++++++++++ BASIC.15/BASIC.S.D.txt | 659 +++++++++++++ BASIC.15/BASIC.S.GP..txt | 155 +++ BASIC.15/BASIC.S.LDR.txt | 310 ++++++ BASIC.15/BASIC.S.txt | 163 ++++ BASIC.FX/BASIC.S.A.txt | 1300 +++++++++++++++++++++++++ BASIC.FX/BASIC.S.B.txt | 1687 +++++++++++++++++++++++++++++++++ BASIC.FX/BASIC.S.C.txt | 1506 +++++++++++++++++++++++++++++ BASIC.FX/BASIC.S.D.txt | 659 +++++++++++++ BASIC.FX/BASIC.S.GP..txt | 155 +++ BASIC.FX/BASIC.S.LDR.txt | 310 ++++++ BASIC.FX/BASIC.S.txt | 163 ++++ BIN/CC.S.F.txt | 4 +- BIN/CHAUX.S.txt | 361 +++++++ BIN/IRC.S.txt | 183 +++- DRV/LANCEGS.DRV.S.txt | 2 +- DRV/UTHER2.AI.DRV.S.txt | 416 ++++---- DRV/UTHERNET.DRV.S.txt | 63 +- DRV/UTHERNET2.DRV.S.txt | 1 + INC/A2osX.I.txt | 10 +- INC/LIBTCPIP.I.txt | 98 -- INC/NET.DNS.I.txt | 42 + INC/NET.TCPIP.I.txt | 73 ++ INC/NET.TLS.I.txt | 46 + INC/NIC.8900A.I.txt | 2 +- INC/NIC.91C96.I.txt | 2 +- INC/NIC.W5100.I.txt | 4 +- LIB/LIBTCPIP.S.SKT.txt | 7 +- LIB/LIBTCPIP.S.TCP.txt | 3 +- LIB/LIBTCPIP.S.txt | 2 + SBIN/NETWORKD.S.txt | 13 +- SBIN/VEDD.S.txt | 337 +++++++ SCMASM.30/ASM65816.S..txt | 991 +++++++++++++++++++ SCMASM.30/IO.S.IIE..txt | 137 +++ SCMASM.30/IO.S.IIE.ULTRA.txt | 270 ++++++ SCMASM.30/IO.S.IIE.VIDEX.txt | 219 +++++ SCMASM.30/IO.S.STB80.txt | 166 ++++ SCMASM.30/SCI.S.CAT.txt | 457 +++++++++ SCMASM.30/SCI.S.CPAR.txt | 562 +++++++++++ SCMASM.30/SCI.S.EQ.txt | 47 + SCMASM.30/SCI.S.ERRORS.txt | 107 +++ SCMASM.30/SCI.S.EXEC.txt | 125 +++ SCMASM.30/SCI.S.GP.txt | 174 ++++ SCMASM.30/SCI.S.LOADSAVE.txt | 381 ++++++++ SCMASM.30/SCI.S.ONLINE.txt | 75 ++ SCMASM.30/SCI.S.OPENCLOSE.txt | 321 +++++++ SCMASM.30/SCI.S.PRIN.txt | 87 ++ SCMASM.30/SCI.S.RWPA.txt | 65 ++ SCMASM.30/SCI.S.TABLES.txt | 180 ++++ SCMASM.30/SCI.S.VARS.txt | 53 ++ SCMASM.30/SCMASM.S.ACDIR.txt | 103 ++ SCMASM.30/SCMASM.S.ASMGEN.txt | 369 +++++++ SCMASM.30/SCMASM.S.ASMNL.txt | 114 +++ SCMASM.30/SCMASM.S.DATA.txt | 241 +++++ SCMASM.30/SCMASM.S.DIR1.txt | 308 ++++++ SCMASM.30/SCMASM.S.DIR2.txt | 279 ++++++ SCMASM.30/SCMASM.S.DISK.txt | 231 +++++ SCMASM.30/SCMASM.S.EDIT..txt | 509 ++++++++++ SCMASM.30/SCMASM.S.ELINES.txt | 321 +++++++ SCMASM.30/SCMASM.S.EXP.txt | 414 ++++++++ SCMASM.30/SCMASM.S.FNDREP.txt | 407 ++++++++ SCMASM.30/SCMASM.S.IOSTD.txt | 115 +++ SCMASM.30/SCMASM.S.LDR.txt | 222 +++++ SCMASM.30/SCMASM.S.MACRO.txt | 370 ++++++++ SCMASM.30/SCMASM.S.MCMDS.txt | 266 ++++++ SCMASM.30/SCMASM.S.NEWQ.txt | 129 +++ SCMASM.30/SCMASM.S.OUTPUT.txt | 250 +++++ SCMASM.30/SCMASM.S.PARAM.txt | 76 ++ SCMASM.30/SCMASM.S.PLINE.txt | 102 ++ SCMASM.30/SCMASM.S.PSYM.txt | 126 +++ SCMASM.30/SCMASM.S.RLINE.txt | 411 ++++++++ SCMASM.30/SCMASM.S.SCMD.txt | 118 +++ SCMASM.30/SCMASM.S.SYMT.txt | 495 ++++++++++ SCMASM.30/SCMASM.S.TSRCH.txt | 291 ++++++ SCMASM.30/SCMASM.S.VECT.txt | 96 ++ SCMASM.30/SCMASM.S.XTDIR.txt | 85 ++ SCMASM.30/SCMASM.S.txt | 83 ++ SCMASM.31/ASM65816.S..txt | 991 +++++++++++++++++++ SCMASM.31/IO.S.IIE..txt | 137 +++ SCMASM.31/IO.S.IIE.ULTRA.txt | 270 ++++++ SCMASM.31/IO.S.IIE.VIDEX.txt | 219 +++++ SCMASM.31/IO.S.STB80.txt | 166 ++++ SCMASM.31/SCI.S.CAT.txt | 491 ++++++++++ SCMASM.31/SCI.S.CPAR.txt | 569 +++++++++++ SCMASM.31/SCI.S.EQ.txt | 47 + SCMASM.31/SCI.S.ERRORS.txt | 107 +++ SCMASM.31/SCI.S.EXEC.txt | 125 +++ SCMASM.31/SCI.S.GP.txt | 174 ++++ SCMASM.31/SCI.S.LOADSAVE.txt | 381 ++++++++ SCMASM.31/SCI.S.ONLINE.txt | 75 ++ SCMASM.31/SCI.S.OPENCLOSE.txt | 321 +++++++ SCMASM.31/SCI.S.PRIN.txt | 87 ++ SCMASM.31/SCI.S.RWPA.txt | 65 ++ SCMASM.31/SCI.S.TABLES.txt | 180 ++++ SCMASM.31/SCI.S.VARS.txt | 53 ++ SCMASM.31/SCMASM.S.ACDIR.txt | 103 ++ SCMASM.31/SCMASM.S.ASMGEN.txt | 369 +++++++ SCMASM.31/SCMASM.S.ASMNL.txt | 114 +++ SCMASM.31/SCMASM.S.DATA.txt | 241 +++++ SCMASM.31/SCMASM.S.DIR1.txt | 308 ++++++ SCMASM.31/SCMASM.S.DIR2.txt | 279 ++++++ SCMASM.31/SCMASM.S.DISK.txt | 262 +++++ SCMASM.31/SCMASM.S.EDIT..txt | 509 ++++++++++ SCMASM.31/SCMASM.S.ELINES.txt | 321 +++++++ SCMASM.31/SCMASM.S.EXP.txt | 414 ++++++++ SCMASM.31/SCMASM.S.FNDREP.txt | 407 ++++++++ SCMASM.31/SCMASM.S.IOSTD.txt | 115 +++ SCMASM.31/SCMASM.S.LDR.txt | 222 +++++ SCMASM.31/SCMASM.S.MACRO.txt | 370 ++++++++ SCMASM.31/SCMASM.S.MCMDS.txt | 266 ++++++ SCMASM.31/SCMASM.S.NEWQ.txt | 129 +++ SCMASM.31/SCMASM.S.OUTPUT.txt | 250 +++++ SCMASM.31/SCMASM.S.PARAM.txt | 76 ++ SCMASM.31/SCMASM.S.PLINE.txt | 102 ++ SCMASM.31/SCMASM.S.PSYM.txt | 126 +++ SCMASM.31/SCMASM.S.RLINE.txt | 411 ++++++++ SCMASM.31/SCMASM.S.SCMD.txt | 118 +++ SCMASM.31/SCMASM.S.SYMT.txt | 495 ++++++++++ SCMASM.31/SCMASM.S.TSRCH.txt | 291 ++++++ SCMASM.31/SCMASM.S.VECT.txt | 96 ++ SCMASM.31/SCMASM.S.XTDIR.txt | 85 ++ SCMASM.31/SCMASM.S.txt | 91 ++ SYS/KERNEL.S.CORE.txt | 13 +- SYS/KERNEL.S.DEV.txt | 11 +- SYS/KERNEL.S.JMP.txt | 10 +- SYS/KERNEL.S.MOUNT.txt | 5 - SYS/KERNEL.S.PRODOS.txt | 78 ++ SYS/KERNEL.S.STAT.txt | 64 +- SYS/KERNEL.S.STDIO.txt | 20 +- SYS/KERNEL.S.UNISTD.txt | 4 +- SYS/KERNEL.S.txt | 1 + SYS/KM.VEDRIVE.S.CF.txt | 379 ++++++++ SYS/KM.VEDRIVE.S.GS.txt | 17 + SYS/KM.VEDRIVE.S.IP.txt | 529 +++++++++++ SYS/KM.VEDRIVE.S.U1.txt | 248 +++++ SYS/KM.VEDRIVE.S.U2.txt | 264 ++++++ SYS/KM.VEDRIVE.S.txt | 738 ++++++++------ 143 files changed, 36942 insertions(+), 758 deletions(-) create mode 100644 BASIC.15/BASIC.S.A.txt create mode 100644 BASIC.15/BASIC.S.B.txt create mode 100644 BASIC.15/BASIC.S.C.txt create mode 100644 BASIC.15/BASIC.S.D.txt create mode 100644 BASIC.15/BASIC.S.GP..txt create mode 100644 BASIC.15/BASIC.S.LDR.txt create mode 100644 BASIC.15/BASIC.S.txt create mode 100644 BASIC.FX/BASIC.S.A.txt create mode 100644 BASIC.FX/BASIC.S.B.txt create mode 100644 BASIC.FX/BASIC.S.C.txt create mode 100644 BASIC.FX/BASIC.S.D.txt create mode 100644 BASIC.FX/BASIC.S.GP..txt create mode 100644 BASIC.FX/BASIC.S.LDR.txt create mode 100644 BASIC.FX/BASIC.S.txt create mode 100644 BIN/CHAUX.S.txt create mode 100644 INC/NET.DNS.I.txt create mode 100644 INC/NET.TCPIP.I.txt create mode 100644 INC/NET.TLS.I.txt create mode 100644 SBIN/VEDD.S.txt create mode 100644 SCMASM.30/ASM65816.S..txt create mode 100644 SCMASM.30/IO.S.IIE..txt create mode 100644 SCMASM.30/IO.S.IIE.ULTRA.txt create mode 100644 SCMASM.30/IO.S.IIE.VIDEX.txt create mode 100644 SCMASM.30/IO.S.STB80.txt create mode 100644 SCMASM.30/SCI.S.CAT.txt create mode 100644 SCMASM.30/SCI.S.CPAR.txt create mode 100644 SCMASM.30/SCI.S.EQ.txt create mode 100644 SCMASM.30/SCI.S.ERRORS.txt create mode 100644 SCMASM.30/SCI.S.EXEC.txt create mode 100644 SCMASM.30/SCI.S.GP.txt create mode 100644 SCMASM.30/SCI.S.LOADSAVE.txt create mode 100644 SCMASM.30/SCI.S.ONLINE.txt create mode 100644 SCMASM.30/SCI.S.OPENCLOSE.txt create mode 100644 SCMASM.30/SCI.S.PRIN.txt create mode 100644 SCMASM.30/SCI.S.RWPA.txt create mode 100644 SCMASM.30/SCI.S.TABLES.txt create mode 100644 SCMASM.30/SCI.S.VARS.txt create mode 100644 SCMASM.30/SCMASM.S.ACDIR.txt create mode 100644 SCMASM.30/SCMASM.S.ASMGEN.txt create mode 100644 SCMASM.30/SCMASM.S.ASMNL.txt create mode 100644 SCMASM.30/SCMASM.S.DATA.txt create mode 100644 SCMASM.30/SCMASM.S.DIR1.txt create mode 100644 SCMASM.30/SCMASM.S.DIR2.txt create mode 100644 SCMASM.30/SCMASM.S.DISK.txt create mode 100644 SCMASM.30/SCMASM.S.EDIT..txt create mode 100644 SCMASM.30/SCMASM.S.ELINES.txt create mode 100644 SCMASM.30/SCMASM.S.EXP.txt create mode 100644 SCMASM.30/SCMASM.S.FNDREP.txt create mode 100644 SCMASM.30/SCMASM.S.IOSTD.txt create mode 100644 SCMASM.30/SCMASM.S.LDR.txt create mode 100644 SCMASM.30/SCMASM.S.MACRO.txt create mode 100644 SCMASM.30/SCMASM.S.MCMDS.txt create mode 100644 SCMASM.30/SCMASM.S.NEWQ.txt create mode 100644 SCMASM.30/SCMASM.S.OUTPUT.txt create mode 100644 SCMASM.30/SCMASM.S.PARAM.txt create mode 100644 SCMASM.30/SCMASM.S.PLINE.txt create mode 100644 SCMASM.30/SCMASM.S.PSYM.txt create mode 100644 SCMASM.30/SCMASM.S.RLINE.txt create mode 100644 SCMASM.30/SCMASM.S.SCMD.txt create mode 100644 SCMASM.30/SCMASM.S.SYMT.txt create mode 100644 SCMASM.30/SCMASM.S.TSRCH.txt create mode 100644 SCMASM.30/SCMASM.S.VECT.txt create mode 100644 SCMASM.30/SCMASM.S.XTDIR.txt create mode 100644 SCMASM.30/SCMASM.S.txt create mode 100644 SCMASM.31/ASM65816.S..txt create mode 100644 SCMASM.31/IO.S.IIE..txt create mode 100644 SCMASM.31/IO.S.IIE.ULTRA.txt create mode 100644 SCMASM.31/IO.S.IIE.VIDEX.txt create mode 100644 SCMASM.31/IO.S.STB80.txt create mode 100644 SCMASM.31/SCI.S.CAT.txt create mode 100644 SCMASM.31/SCI.S.CPAR.txt create mode 100644 SCMASM.31/SCI.S.EQ.txt create mode 100644 SCMASM.31/SCI.S.ERRORS.txt create mode 100644 SCMASM.31/SCI.S.EXEC.txt create mode 100644 SCMASM.31/SCI.S.GP.txt create mode 100644 SCMASM.31/SCI.S.LOADSAVE.txt create mode 100644 SCMASM.31/SCI.S.ONLINE.txt create mode 100644 SCMASM.31/SCI.S.OPENCLOSE.txt create mode 100644 SCMASM.31/SCI.S.PRIN.txt create mode 100644 SCMASM.31/SCI.S.RWPA.txt create mode 100644 SCMASM.31/SCI.S.TABLES.txt create mode 100644 SCMASM.31/SCI.S.VARS.txt create mode 100644 SCMASM.31/SCMASM.S.ACDIR.txt create mode 100644 SCMASM.31/SCMASM.S.ASMGEN.txt create mode 100644 SCMASM.31/SCMASM.S.ASMNL.txt create mode 100644 SCMASM.31/SCMASM.S.DATA.txt create mode 100644 SCMASM.31/SCMASM.S.DIR1.txt create mode 100644 SCMASM.31/SCMASM.S.DIR2.txt create mode 100644 SCMASM.31/SCMASM.S.DISK.txt create mode 100644 SCMASM.31/SCMASM.S.EDIT..txt create mode 100644 SCMASM.31/SCMASM.S.ELINES.txt create mode 100644 SCMASM.31/SCMASM.S.EXP.txt create mode 100644 SCMASM.31/SCMASM.S.FNDREP.txt create mode 100644 SCMASM.31/SCMASM.S.IOSTD.txt create mode 100644 SCMASM.31/SCMASM.S.LDR.txt create mode 100644 SCMASM.31/SCMASM.S.MACRO.txt create mode 100644 SCMASM.31/SCMASM.S.MCMDS.txt create mode 100644 SCMASM.31/SCMASM.S.NEWQ.txt create mode 100644 SCMASM.31/SCMASM.S.OUTPUT.txt create mode 100644 SCMASM.31/SCMASM.S.PARAM.txt create mode 100644 SCMASM.31/SCMASM.S.PLINE.txt create mode 100644 SCMASM.31/SCMASM.S.PSYM.txt create mode 100644 SCMASM.31/SCMASM.S.RLINE.txt create mode 100644 SCMASM.31/SCMASM.S.SCMD.txt create mode 100644 SCMASM.31/SCMASM.S.SYMT.txt create mode 100644 SCMASM.31/SCMASM.S.TSRCH.txt create mode 100644 SCMASM.31/SCMASM.S.VECT.txt create mode 100644 SCMASM.31/SCMASM.S.XTDIR.txt create mode 100644 SCMASM.31/SCMASM.S.txt create mode 100644 SYS/KERNEL.S.PRODOS.txt create mode 100644 SYS/KM.VEDRIVE.S.CF.txt create mode 100644 SYS/KM.VEDRIVE.S.GS.txt create mode 100644 SYS/KM.VEDRIVE.S.IP.txt create mode 100644 SYS/KM.VEDRIVE.S.U1.txt create mode 100644 SYS/KM.VEDRIVE.S.U2.txt diff --git a/.Docs/Commands.md b/.Docs/Commands.md index 6131c66e..4c444bb6 100644 --- a/.Docs/Commands.md +++ b/.Docs/Commands.md @@ -24,6 +24,45 @@ exists, thus return value is limited to whether or not a valid argument was given. +# SEQ +Prints sequences of numbers. +* + +## Arguments +**** +Starting number for the sequence of numbers. +* +**** +Count in increments of . Default is 1 if omitted. +* +**** +Last number to count to. If is less than , then the default is -1. +* + +## Return Value +N/A +* + +### Author +2021-11-17, Brian J. Bernstein . + +# XMASTREE +Displays a Christmas Tree of user defined height. Ho Ho Ho. +* + +## Arguments +**** +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 A2osX is licensed under the GNU General Public License. diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 91348402..c46dc339 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -79,15 +79,15 @@ CC = OK, CS = ERROR Y,A = FD X = hFD -# GetDevStatus +# MkFD ## C -`int getdevstatus(short int DevID, S.DIB *dstat);` +`short int mkfd(short int type, );` ## ASM `>PUSHB DevID` `>PUSHW S.DIB` -`>SYSCALL GetDevStatus` +`>SYSCALL MkFD` ## RETURN VALUE @@ -317,7 +317,7 @@ CC Initialize a MD5 computation # C -`hMD5 md5init ();` +`short int md5init();` # ASM `>SYSCALL MD5Init` @@ -430,10 +430,49 @@ Y,A = PTR to MemBlock CS : error 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 ## C / CSH -`int execl(const char *cmdline, short int flags);` +`short int execl(const char *cmdline, short int flags);` ## ASM `>PUSHW cmdline` @@ -446,7 +485,7 @@ A = Child PSID # ExecV ## C / CSH -`int execv(const char* argv[], short int flags);` +`short int execv(const char* argv[], short int flags);` ## ASM `>PUSHW argv` @@ -729,29 +768,29 @@ CS : not found ## RETURN VALUE A=hSList -# ChTyp -Change The type of a ProDOS File +# ChMod +change permissions of a file ## C -`int chtyp(const char *filepath, short int filetype);` +`int chmod(const char *pathname, int mode);` ## ASM -`>PUSHW filepath` -`>PUSHB filetype` -`>SYSCALL chtyp` +`>PUSHW pathname` +`>PUSHW mode` +`>SYSCALL chmod` ## RETURN VALUE -# SetAttr -Change Attributes of a ProDOS File +# FStat +Return information about a hFILE ## C -`int setattr(const char *filepath, short int attributes);` +`int fstat(short int hFILE, struct stat *statbuf);` ## ASM -`>PUSHW filepath` -`>PUSHB attributes` -`>SYSCALL setattr` +`>PUSHB hFILE` +`>PUSHW statbuf` +`>SYSCALL fstat` ## RETURN VALUE diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 99f937b362648f964801edc27776270bbb970a3a..c88e5ba7970bc03e518da422c7169f6eb5a79c98 100644 GIT binary patch delta 752501 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
_DxtvCTjqyi-L`1y`!XHLXYW4*40|y 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 F|34H8SB3xp delta 802952 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

`T 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∋V223uk>FJkS0mtYhr8 z5zdm6fv8n%OTCky_VgjIy{*FJ=y4ufGrT08jkCUz>3PYEVt7>qhj24AljzJ3HUto zT;+DG>0^>U2=E4lJPQ}8!<9u_>P?qC@Yh7)Nv9spO{-P77ERV-RQ|r%5`)SQ8%pCR zik?DN8Y|?j$Czu}YDzSCxu+%OXa?p1GC_KM{=%0~yI+vN7oRVE%|p(f1yWsxs=JY5 zE&TYVtvxZo+)RZs3Ime)+F9n`{F^Q(c z6*oaXOw^IS^HN`cH1{T}cvhgwc9X>`8U>w@5UH7di|vYs0V?I2T+1071-_?<-zI~U zV2Mk1`~|#~R&f8$+X)txT)=EghrPf5HR`tf@=X|8{63dCEni{1>Wlvb ztzI?JuSRewd9dH@L_Vatze*GR(L?HpFix~89o5x~cztif!+$Fp=bnYFGaTKY&ySPOTh4vde+bOHFe|@?>hay; zHZEzc9+`_5)<}E@zhR#AQ5Xqj&$&#VXh!XS0cz?s{B;MMVzcl79O-|<-p}j=lI)Ep zA#>M1`S9zR{vRazydpKD0T2=26jSf~?<)vVLw4l~GB9%<+Z^{(YR?~We_!1)RU&~O z+BT^MDq=nW7u+9Ot@Fr(stbuym)rCUDQ!C8ClLrQ-mr#h+gxf?EN1T3!^-TGCTWA> zSAgruq3S!^LG{ED&dHVKh&&FAZ4l)8o)|I;ZMr&uqrh?vi6QM*Jt*7BvcO*6MH{Ez@3mH(Ty`#%X0&x;|U zeqQiU624@6pVK|#n`PkRZ<`**j2~*IIguNc-torT{_%jX%96usuCpQYV{u}!mQC2; zgrZf|@4HGpT~@qsr@^4)4#k&L(`h$-ePDp7y0_>;l0jd#4T5?$vf)Wr{F_#)C+^g% z8kJZ1-aAjN6~aQrXGoiIYfqwwDxvnyotLckmSoaJ+0wX{m$=9|*KR;G&JFJ7DP0+f z3paP!YMeh&8ZA+YW2xVde%^{d2BmGWLvV-_lA0B}l0;;moHjkyC0E-BTuJr3x-e|IVUNJXU0sCSm7gpg(J9RfnRYOFhq@{5O<^w)l#J-o1$+> z$$3SHvPVxwdG2o`8zO}a@==jg)!Wr=w=buD$$&}EY_XHu-Rt>8h2^sbFU)WJ=zy!%@~;H&>03ZCKA1DLzy z;A^|bXO?ow3dp${rwewCP7#d{axTVT{Q^Tau3;Y(4CbDO`6^%gJBNx$MwTm(8jI!^ zQ$by@*Z4M<)+BbfoVZW`Gq@MSu7T#KI19i-P6NgDi9y3@HSN@gFIMxT?9NA4%ixC( z)3_2dM^HDwZ`&w0>T?QRq%N`_lG}hr#?QsUVn;OGnD}X(`u6P_fF_ZnJq5wV*0I8Q zdZy(9MJgZXzy4es6UU)k4_S0ET(NQwqDYjnPKe=W0^O;W2Yr(KDAtkSCvIf^)_~2g zCU`5QuIYDG=eY8LEUYyCjoBz?m5Tp_tYL8Q@1>K8ZWic$Q*&p?7bvR$Y}B$8q~l6R zwVd8m^FmSCp>>{~eHgO@W80xf74Xn!Yu6FJ0o};8J?_6nC+6D40zc4c_*zD|*?${N zqCyu-dmoDzI}epS0O6J755-S^-P?gbEsKDyjiZNUMI}{M2t53<;zWG4ZUdV)22*c; z8LDGjA0G3yAR?C1LyDgPNTSfietf>hGXsA|Hh3?16nk|b-<{Voi_N)<*(?fL#sWjn z8*kVBtvYADgbWybw1gzv>`?lT9{%pl^z6JN$$q{^yZ<^k)7@~XKOdo(Y(~F==@g^= ziv2yeS%-3oz~bC;EjM!&A}ILjTz^&N|6+3-{0V&5343j#N!4{ikN{y9O)%Tkm;ahc z3&8vqE3ZR#tt&``L!wLbG)>MUSt-%J?_xt*c=DL)My5FYF?tJ4(4H@A(97XA4mlOo zB>9R19y?9zZlumHP{>De=U;1R{)LlS_;N_N8`ZWB*~VV_qW_3IRV{SEw@Nq6E1O#w zE1Wm7jyO)=dWyv!s$Qm$f>UPf$%!IEMR<3-mG%70M81+E1^WJf?&NSP8P;Qkga*S! zIB&ghWR`AVJnX?f<9pe_IP6@4>f;eG{%wj*@2yxRe-$^ueZ>iCki!OX!@S&#vaadt z#dLq<)Ow}dXgpiCtP_tIRe0JIVETQ#gClT`9Dg=yF{9WOwI1m#fic@PW4~)d6X!>3*F2 zCuZ%i{8S9e((RDQkMuPH$;oXq)K+rNN%ghUclZ&1{=#&FDFvL-p8}>|5;_a6(}Hup z0!%J`HTr_|dy`RyQQ7Bc>Hj{=J}?^Rz$SPF71lWB$=$%(H+f`5MCpzT9FS$>F|&bM zBOt2CMX?(Sj#~7###JjaP1Fbr>v68^2gW>h(tpbSx398Yfk><8&uAgJwfz!EsKh)(!R+ybVvB>*8y_z zg8cLg-y7(&looO>z&CPW-}9efJe+NKgXR~?gLQ;8d(x||2~iZhm0)Jop8RZI+gLu? zz;1=RWvVPCjX4iom`a7AYi;dkwn?oS8Vp|*>?5aH4r!3iVWb%$i(-l8muJ%?%?wN5 zdnSjs+-p?O%xKSDYX`#S?Cmu4nbvsrSA{zIAnaUuW7S?Y;H{u)9-6RaVvXP~hsXg< zKBfA9S_F`mn0DmNkME~hhJ$ccxYlF-eYS9ePkSnP^?SpgVbYQKC)9)b2Z7!niO4~H z=W~>sk(Hm3IZqHH8b~@-WZ@m2DpLBGpSU&W8^!tFMy4uj+d`dckmkqKk@4t9p86bF z0&|mbYsWqIa4ZRw0@l?SCHH>pZv;FKkiT+(yRsvOzop5HM0sQC4lqGTUT(zaXNAz;|Mar9pF8qFoBty2@tL4K)n> zQ$Y`|oony=C%%YjM}LH1K$nos@hD0(5FC0IhIIP{z)|6IdKbg9{^#N5!;JIt#~B)1 zhUJSrsHnSi)I{zDJDciRq@Og9EmLr4E(5Ju{diAe<7F@dx7wqav2^=f{Oz6h4a&`Q zs6l)WxpZn-Lw=X!<@j)FIUgHm$M(k4v#>f-DJ~0ovj3hH^ZE4QrK;!OQ?%2&SK4hi z3eO*KY5vcyG-@<=*6MgiuyyEMkKkJze`4y9*rY`7^E#+ri&5o{de7CExDtf9f6K$bPu+%i=&lqzz~<`_C7mQN?w=|LMsCYd7SN8JxuqzTl>Kr ziSIvZa(aNH*E61rC(Y;EoN;h-iBIf%MEI_KqK63f=K{s0C)x;>WIdw(03bu7kg#!A z>EqrJP40Rko4XB*_Qh4bLk&YS=^F%6@~Y=v>u<7cQ+InPN6wux9N9jy!@aY5KMP6U z3Ve|mE$pR#N4{Orh%zOsV%l#eG9JvTUNcMZu6C?~u(0XLqbA`LJydLRf8C|S^Hv{q zV90E+pHxt~PIY*1PW{(Av~1gWiq@QgIaB&jM6+9h$vuXtw$O=fp=rxp9Z!`zaBKMX zBo2!QFQ@!EAZdiz4i4#`Xm9l=B%Q6IV4y=B-l$oFgU_NgZ0ip zn*Tcn3V|_57d>Hk{3S0V0}+^mqyyhmoX>@8QEjBuXON74L6XjKrPl3{2adK_(|kU$ zG`}cL4pNk?i=>b~eg`d5wjlSp6V=GVG6E0J~7rrAmXpm~bX}H**9BuuKPj5jf^^G`sTs z@B4@dvJ8MjKg;uF_D||ICSr!*T z2^-!7(@DxbYshRFQk^LkRkeobgA9Z!dY9r_qqMsJvU-#gmh%m1d;h+=<6(q!M4~1L z7RE>pa5a_)()xulQ*cBT4$+`$nCFbwav!NMKfbt`b2mE`keOU+zmdQ$MQShQS{{Fa zlv1sRCvR$P=ZwR_N5eFWdZRoV)yg1%?{4GXbp+)cozSBb7!yUPA$JSlM^M`<3CCqdhiRzb zu84ZvzQG0B0C&$CPr9lL7+B(}+^em6OANu;Ht=A9hM z57!dGf02O{d^sOg53t&C#w*A4O@UdeYga~BCKa|~(|ZvG#xI5eQYK>B!$}3d0ifI^ zJ(k<`&jHDO_Ne@T4046R!U6NSV#g+U=Z*b=NW(k;98)Bmuf1EkvSWf>I4#-e)IQlT zN>SE$qY=6fB7lA7H%I;yv!`-yc%IRb3XD)SC;Z#QeM&o5Cs3{ zunZ(_C8*Tp;NYTzL~YUSIp6#rc>HH)RBMV-|3mLginu1q& zp9g9# z8z>2|XtQhX&%~{J5UnZ2s6{oBgPi8~IPTG-D+%UI{_9U-OFVKQW;r*zHJJ{TKj&Q} zZI52!7Scz62m5le#a2Cx$~R7MX0&Ljv8gX+8MUFtf+UoCCwK0S-o4|=w0-xS&9Fgr9VSAr^a z9YkZgCIPjZK1bw*j1BdeoVxfw-fC8)oBUZ)Wns!0jfn|4uFI)q4>2NmAFn~*Sf$W)ldY^*6)+DW>BRnKyP93|Jn*m83Qt6F@dX6^ z{r@5q@O>r3`y%Z14Gi}`qj%XiF3a$okq=YXz$7do-M@|Gc|TyM_5-i#?9i+B+5bSi zDx7OaP|Z8D18-^yPk4pfhE;79`XXZ@>%(n-9&s7Ely%mA;KE(LhmL`D25}F}<@wpe z=}bPUG}JZ;0-DM*dpl1}j!-nNyh|H^Y}v;|gXCOsMf=Pn879>@H_68`c8u->*lW$+sF{JRK-C!O_cJMt$LO|7jQ;-c|s{5!-U^ zyH>l?P`o-1T-k8^^pt9C>Gu^#-`z{qaUI10@-p6S77sl!!clJE! zrj}eiV{$5-Q-RFvq<0}sPS+ydxw$#EBwkxhUD+IzNm0pL_0}o%N!XH@M_kXNu{@H$ z*3$B|p)h)$?mn2MnW;jBAr_&_^N&zpJm(;P@34miOLn)O<&1a0#ZqA|`H<)jxPczB zI;$Aum9ipEU2D?9>TJ}SC*{n?gV5g1OE6f4IyDX*$T{>HfzziDbVecX=@G1bo;P^w z+FUB?<;)$;i{-we)QvziIX*7MnB9c2`=(L#`Bs5SvGULZs%O{tMGwR8(oV3qrT73CTCmEyF~th`SuP|0s`k50z)n@v_Uj%Hu(&2*9nA?cc<;I^3HD{E4ktp^Y~Wm z@gAqJllOyUq!at>tw1`?u?b?QO1qo5A8#~T8s4*HWl?9n*u0!uC0B3T{E-r|+>NB;B@lG{R!4kfiBxJJUX}GZ1ALM;D@rET2v$R+<#! z`0eNXS-od=?cMDCcvD-v&HBAe@vrWx%5U+5MHNf<+tKCBZBrgJVR{K%q|tEy?;Rzz z{5(fe4BIW9SM+=Vu(*sbEXfFK-cnw0nz}YrzVzc~DBoC0n3?hz;JcPVk5wiBnoC^S zk9(2hj>8CW;bs(7M6)`j>#%)zEZr9|!Of-b4{w(&zb2YBSyrgIIZRHx{vC*V)!b5W zU9qd7I*=Q9YhjiYc%7d*v&;QEVkL<5I;E%G>l5cig6u{jy7Z#`4p|~t>}F8zucot4%BcADJDy!SDkw~d zSc7XTe2V!ZC;gtZX2ro*()hOXYXf*cou%~m9`cSG&qy&Q34x0~1hkg9UJ_5%Y4srQ zE_l89q&+0~zX^)}NsqxpZSRW#m%RMp#bFi}XJ`_x$2{jNB`u?_YvvWvTa|^uZ6i{{ z>I21|s@A$XP!HB~*Ju|J2XV?{Uvb-vseu_V(H2xkj3%RW2HN9zMR|McgG%4_5zi+E z!fBCY1ozle4z9;fhS8GlZEFSk-MLc9l1ahD0ba^uaUZw2OdNXda^=~>VJ^zy=o4y) z-Ftfj1%~f)4vrdXXCcKlMiyS2H*0WsI_i_||6TtfqB1S{XwA_Z!E+3;9@K50JOp7w z0X17gsPsU+JK_4p(qW}RVd>Dc*3zlA?>l-_p7n16f9|SBxbJZL^=p;@>O8Ea&GNap zBSxfmk5`gUn_HX_fq9#l@3RAUjxHIH9|6{jd>7HI3*{3LBRMqc9TFRH%Cr8}tdZmh z&s+V7B=wHlXS=#LOGYH$%P%ar=<}8bm?zNGAC<=tl@`a4#;Ucq{Wk{|Z}uErLE@KC zEl+l*PZS&nTL9aicEn2X7a{|IOu-62*^ae}pAcq1bD2J-6DvK>D4; zHx2iy85Z9%vQ=984_eu{RRvnYX1K&=>XA(~%Na^6A9K9_h%`76tvGUtDREr5X7@{j zC~47cR@G50dbss8=_I0uyAF)vyAksSm0Yh|oz<0rGUcPMYs69=4IM%_d$Ae=8)KuUaZn)EM33tIQwHrvQg2w!&wF|u~E(5IbR$CaIT9%1`oZ50I% zZRMX9cR)PF^NfF|XUWv)zn@)39=_b`kZJwm1?lFSyHUU%rYeUVmaTJ*_bMMt!A-4D? zJ^*|Sz=u@>mYGNpKTd2Qe%o3J^2bUt!M~spAgmJBHit#L1{l(Eo_blcUY?FUB^_>q z2%axNu53dig~v#!wb{MxkB3Z~qk8UqAbu1z*MVb(y*KCM-`g9jKHPSHx&H9(Kz1&o z=cH?$y~QV}E!owP{DVTEMjfS0akOxtxrS^rca^6Z#CFnM=~q;}{J`8Gwvk&QiUR9_ zJ7BYA{Sg00uzOJP>Q9YUYa!M@vzhX~q3}ONp9S`&j)i z5i7c+;|!%xcDOyyb3#r*7)`$Le74cvhP>sIQthj*WdO|m=f~6r(qe$}84SXi1iV2> z+on#2F@sHX%~XWJO0x^8ZjPn^bG6aArPVUgX)1iR(Z{Q^u07OpvU-_;>Ylg0F*){- z<`~eMHx;?c^|(6shngQy8Z8*c!yv3CmtB?piI#1MU1P)5;7OoOcjVy2U|dYU+%|p< zrmHM2jts{9i!&MfzJ(653p39mbk_e|2YwUb7ux@OaSrwLJ9{z2JNQxn!oW)}FzZaX zuCJlduFF^^UY&Yw5{6p$G+dlkDM(i4Qa3sHt^ZzCzkkVg+{&RLe6G(Z>*WV{A$nIl zZ%5zZnKp$sJ?fa=$suCM9tspmxo(3yvUAPE)V! znPu`23Q3$CjL36oX1P1@O`~h1kE#I0@TW4L1+C=bro&Uy8>h{j@u!em5F3Hmg!Dy# z?1-{*rF{W$BK;S~c6j@w$p6FJ@@J8OuS6~~h;J5V^>Q8V8@Id!c*m1t);!Rr2=+6i z?f5zY6l?en>|-@rU!2=rA2gVscPMY3XE-=?+he<^UoEX<1CstoIstPzC zrM?dbnU_(a1L^Q}5Cb-rneAx58 zHn8|7A;J(d1pK-(zYcKm#SS&)m0NIftKA{OZGDiV)Sm&E{)dKwffB zuXTy}5Sqp|*bg*K1Fd zZg7EoB@lqfU3ZZESI{2gTr2yUkbPunyK)2rlNvqGY!qd7ePTp8A@@Aq5P=-%ot&6o z*Z>KSxpuv7aIF8YN5*_ESxl`@B_F?}`bo-xzp$#UsreT;uD|V!a!Pm^G!;8vN8Gx4 zM!MKa_PXLonJ$Zq3>saaz-&>u;~^GvBb)E>3MjeSBk~!RYC0FXMlwJC16OieOzm7V{&OA5Qs}GB^&7HcZ!H=}MOT z4($O>C*=OMNsunf43@FzmaPLGf4X$Z!I+#T60w6AWegqKzt|!5Zm~nUjQ%9u{dXZP z5rltBg*|ZlkL7(~zIIzVN}~;@svN?Pl>dbiU(J=@E_m--Jj$TpG+6{w8ALGnR&-U1 zV4U{{UMDC$QkE0G1BNF^{HsaSQh6=BUvWb>E2K@_u8APfb!aR1|11#(z z-|~hLHhKspy8`_Mh;K};MQyg@^}vDIII`9!CGMqv7uxaCgJzwr?Yo+PfsE)ehUi}Hs>IJay;QUemECB+&LoWt`6-V$^XwWC0a}UH3;niz_T^L88vXbBm+g0i88#ErFw2)C+hHBJo016PN!!Jhg0KXlRUsp4K%-i}o3dC4C7V zYACT2Td=;KBYu2@8@SF8UkIlH_TPsG+!q0<-TWYhlmhTS=C!#s1G)#WWhFS0a8#$? zf*63?!C+b>%qg}UKB`YIl;MbG`t%>H>EP^f9!j|HY<5JAEfqz(K|KG`UhfVd%RbOa z@{RbZlJAocQlW;U3R3a(CO|sTDUqX}i;_Dzmb8ynK2ARYeD0EHpAOhgc{?auT%3Af zv&Z^15iIC&)<_xDu60Y^LG-Zi4z&6^oWAO*U2}AmfS06{{g=AjX4-mKW_I&~W*-0t zJbj+W;5|z%h%uyWl=MLV8bs?B?eX&ZPCF{mZfOq7P7?a`EQjNcbds|~Y8`a_T&}f| zn1}_gsdEh5Av)odF{f2JoT1|RM8R()&X53--j2`3;A3ru7v~*!0Bc;vi5a)#N0tuC zGo)K%@sKpu;us=FG%Khptv=jQ-)4t=}Tyc29VsewW-*HA&2%PW4LvX!XL3D0w zPQ~YK_!V#We86YkNz!a$)#F23g3DzaxZn>Q)l*q6+PMOe_ohoTSS6>d2}{I3sHnyP?J#PbIx077}7$bUH>9Z+IfmbgGljwF5T90)0@=hBQmX2x0kaD ziGdL2Gh(#_T@a^}5(B{+oLx3TX-ooz50UksLF-IR8G$LbW!f3`Xq??hbh8yH-8T-W zpXV83R>2K9f2yPYL2Zcnj8iltkEITE#;AUC&w!lf7L!OjQYNNInWAd80v@J2He9StPVw!v35@>n2&)a|zgHQljC z`tC^XPBhma8L-N)ui7D+yqlGXPEl}sQt@FYlrtz+(TIOWt5Dj|!f=4!iW5$8ZjRL0 zkipK8G&ISX^^?}XPEnicHx;tF2Z)j8ecL*gSp8&(K}nbK{S^xHk=eh{N}plTU{ zf03%gW9f*^H;1(Ky@7&{xt9xAOmTC+87vB;xoLwRh4OyncID~n$f#ZC5-gbb1ltdX zX7mqRFSm<#&N)@JCvW;zPw|!i?oEIAZg$o~N&qTItOkl4_=lYt(+n2S8hAwW zR^*PbvN|U#7Tq$2%DD<1qkPvdKJs^W;)8!Sb2U86gz;B=Ea=r9OFd+(+C)o7ULkwX z@&bPj2s*q9$bFF>u+K@W@t-lCcU$7VoDW{$K3dIjEa8KW@iUS1^#)&9$SDHMMx1TV#_LFzN77D- ze!S*^Kj+sp#HF^61;P3t#p)tj8omJSWUfq$}( zUsHc+ITzbsmi%qv#uMf|qr60Bmrx5&{{*N@r;diN-^JTW38GCsf3&ahqH+jm=gv03 z+Rovhk{;x_JNGjh0;cRncnWWU&bds7a za(Sgfy0`Dzk?xR&*e^AUja?aX?A@IDw8xcNAQV+qu>IIisR?x0VvMUZhsQX(!*#%3 zj7U1pQ-3{jiW$lzm1eXh09 zU>7GO0nO!2^h0?@z#fb9PNb#<`cr2tRlMK5ndf7o}fs~4VyJ*Q!GhPlH)ikKXk zE1z)c=Va357s(wj_AYcEFC*(B8N?5z{RwL814YR{I-D?PGfYk;8){s}*{R!y!IqL# z((selQxH{b$b)Fg@5cVRfiuuM^*z7+d;MJPwVPn=qg?|H`|a|?8#);wU0j_x|8pH+We208maDfGJz(zN4yaot@XgmK5SQ}L35&Q~DZicCvveG$+ zE@|d73$!-cMVDVhVPo#gES_<&zXB#$XyMKGylv-1^rR&fr?|l!Dvr`ndBog@muA5X zW5xMk4cm8SuI>*J>oM4+`G#l2fnp6c4mF?=GMs{JOyL!VF~UKoCv_ONK_&88G_-3O z`3x?!1}?76F~|b^P_ChLZNB*!@4lv=pQT%)yN~Ma2{)Iamv7U@ngFm6{1(kh#n8;1 zL=n=M`|+0165bI+>Xq}{dBlvzs!|6poQX%FX;WGsbTS}GPhKl*m@ z2ES~+MvSZ4Im$E7rbxAJo1NDRxmvY|FL&G+XHy_56nc1016+>(7B}}qYsn70&&W6X zMAt=h72HOwEU%`)l5+?ZA0D2nH#KLKa-sRb`7o~ z@n6-GjUW4WecJDU?3)py{)Zd0H)vTk>R*W_z!;v_t)^-w!w0o(W!I$>CwI;b=(i;x zD~svqjVqTdj*{;pnYl#25v(giW7k5vA($O2QlA|GDi5YI28xpiQQesKT&cv8A>}9? zF}b*Oz8slG5%3fnstGh6vU7LCA^Nvi$%Wf?v$z`@_6h7zq%BcZpF{MCyRakZm>?C0 zGk=dfsb+YeUzYJ7A>tX$tbtBNwJb?GO{hfKE98B4*+zTP*mR0;aw^@CL}rJurXe9oJxjtP+}cK?+#QdmBU04l~bis zY&nO_oQ93>>+|`3e}Dh}?eb68wd-{~ANTv?al2_v#dM3vo0w594Sbra61SPIJk2#b z?owBDUW%t!FFirkEu?;N6?Ve!X=Kg4`Z?!gL}iEM-tNr{bV`#4A}4BsU70>eMqEgz zdO6fCAK=?^;~oMKvBZm(mXag^r+kyH(1Y?($0@J(>M#L$2?Jg(cXsIT+Lkp|nnNG6 zb;>$B;Jem)2Us7@LoAB0nac|3pTKgn29L~2Mf2Ev@9knfSbP}>V%N1c2|IU)MPTU_ zc0vGHJO%$?oZVbnpJAzD4=u)3w6wjs|Lw-5TWBZ)fHVyRs|}zsoJXnTjW6CnQno(o zWl

qgG8+|@9| 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%0A#Q7 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 z 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�MSLD%GSY+fihZO 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ξt#;kS_xNz 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 zⅆ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%0AeQ*4wN| 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 z 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 JM;f;Ie*n&dxd;FN diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 1cfe44a12d85cbc5c9ac613105629f5cbd46bb85..2bdff64a10166a29715ac71ea8253fdbc876db3f 100644 GIT binary patch delta 30257 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 z z`1)oav%9TFIY5{F^3Tlw|MSoPn3?W@PT$f3D@&`sv+Sk$Lux=xVU03n6?pG-4s-sI zx_@$5bypI}5hF)H0%-NA)@rXgR-E5~_tVFlB?l!*c&3|h{lWyzU8``Ad<_+GB+Nl8 zNaN((-H@WR-n@~Tom5f}QVY{_=5sr~8D%k4-|q253e-i{#hjbEb1m4R;-#{)cHe&3 z!(aJYy5Vv+F3!(Rg_@hP8$lXy90=mgZ>D%|RPk@m;xKb2OqWd5Qkb4MpWcS)74s<& zp>Hz7)Kl=()9<2rB&31L=?bY+YGz~Y8$mT)6EA51OL{b?{)NesYNYjTS&k+MBBD#* z)VZquey-(=eWV#M!_hUx#i$L~B90@#1lM6v$D)kccXo zIKCubE>vo1q5x;aq@TDl`I2^eq!lnlw^b(0pF|SYazzDc1FY06tvJih*mOWOlX_gu zR5--CiKPmq4vWqSTXl444G$HwhN|@0FLim^3p2-ZKZB2pTPXg9f2CHKc>EHxU zNt086B{bGratzhy*rsi(iR%UqL2BtJu`&)?B3#k~*hU#_FAkm$D16Vc@Z~gMrldB% zGO{bqCfpjT&V1c&rhoKGyM^c4A#j+7nQ;x*pyLegx)PA+svePI%IE@Bm#vtYk0hgL z6-yE$!f$7>+g~Oyk_7A;8v{(7#T3@DuBqirO{`=LxTr?XGEx1p_N4V(E4c)iF=aNn z8u?=#cG!41%n6gR5{C0^{51fdF7H5d$Kf5~NZ$XNU^ zOH{TYlD3y1P!9wQ)7q{WT1hvv?x0TGRh!+pEe8vs&+>aQvn^NlXhs_Ks?m7VVx>p> qu{AxeMBBKTPR-m~n3}(ThuLuBZC1SMV*bPH|43?ijpo)W-~9z8Da!W% delta 38299 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" +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 diff --git a/BASIC.15/BASIC.S.GP..txt b/BASIC.15/BASIC.S.GP..txt new file mode 100644 index 00000000..c0e21041 --- /dev/null +++ b/BASIC.15/BASIC.S.GP..txt @@ -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 diff --git a/BASIC.15/BASIC.S.LDR.txt b/BASIC.15/BASIC.S.LDR.txt new file mode 100644 index 00000000..8d2d0bd3 --- /dev/null +++ b/BASIC.15/BASIC.S.LDR.txt @@ -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 diff --git a/BASIC.15/BASIC.S.txt b/BASIC.15/BASIC.S.txt new file mode 100644 index 00000000..1062eb07 --- /dev/null +++ b/BASIC.15/BASIC.S.txt @@ -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 diff --git a/BASIC.FX/BASIC.S.A.txt b/BASIC.FX/BASIC.S.A.txt new file mode 100644 index 00000000..993d598f --- /dev/null +++ b/BASIC.FX/BASIC.S.A.txt @@ -0,0 +1,1300 @@ +NEW + AUTO 3,1 +*-------------------------------------- +BS.ResetCSWKSW pha + lda GP.VECTOUT + sta ZP.CSW + lda GP.VECTOUT+1 + sta ZP.CSW+1 + lda GP.VECTIN + sta ZP.KSW + lda GP.VECTIN+1 + sta ZP.KSW+1 + pla + rts + +BS.SetState0 ldx #$00 + jsr BS.SetState + lda ZP.KSW+1 + cmp GP.VDOSI+1 + bne L9A26 + + jmp BS.SetCSWKSW2VDOS + +L9A26 lda ZP.CSW+1 + cmp GP.VDOSO+1 + beq BS.SetCSWKSW2VDOS + + bne BS.SaveCSWKSW + +BS.IO.OUT cmp X9F65 + bne L9A54 + + stx GP.PREGX + tsx + lda $103,x + cmp #$12 + bne L9A6E + + lda $104,x + cmp #$D8 + bne L9A6E + + ldx #$04 + jsr BS.SetState + lda X9F65 + ldx GP.PREGX + jmp BS.JMP.GP.VSYSO + +L9A54 cmp GP.CHRLAST + sta GP.CHRLAST + bne L9A74 + + cmp #$8D + bne L9A74 + + lda ZP.CH + bne L9A69 + + lda BS.CMDBUF + cmp #$3F + +L9A69 lda #$8D + bcs L9A74 + + rts + +L9A6E ldx GP.PREGX + lda X9F65 + +L9A74 jsr BS.ResetCSWKSW + jsr MON.COUT + cmp #$8D + bne BS.SaveCSWKSW + + lda AS.TRCFLG + cmp #$A5 + beq L9A8B + + sta GP.DTRACE + lda #$A5 + sta AS.TRCFLG + +L9A8B lda #$8D +BS.SaveCSWKSW pha + lda ZP.KSW+1 + sta GP.VECTIN+1 + lda ZP.KSW + sta GP.VECTIN + lda ZP.CSW+1 + sta GP.VECTOUT+1 + lda ZP.CSW + sta GP.VECTOUT + pla + +BS.SetCSWKSW2VDOS + pha + lda GP.VDOSO + sta ZP.CSW + lda GP.VDOSO+1 + sta ZP.CSW+1 + lda GP.VDOSI + sta ZP.KSW + lda GP.VDOSI+1 + sta ZP.KSW+1 + pla + rts + +BS.IO.IN bit GP.EXECACTV + bpl L9AC5 + + jsr BS.SaveAXY + jmp BS.IO.IN.EXEC + +L9AC5 jsr BS.ResetCSWKSW + jsr MON.KEYIN0 + cmp #$8D + bne L9AEB + + jsr BS.SaveAXY + sta IO.LINEBUF,x + +BS.CheckDOSCMD jsr BS.DOSCMD + bit GP.XCNUM + bmi L9AE8 + + bcs BS.ERROUT + + ldy GP.PREGY + lda #$88 + ldx #$00 + beq L9AEB + +L9AE8 jsr BS.RestoreAXY +L9AEB jmp BS.SaveCSWKSW + +BS.NODEVERR lda #$03 + +BS.ERROUT sta GP.ERRCODE + sta AS.ERRNUM + lda GP.STATE + cmp #$01 + php + lda #$0F + sta MLI.LEVEL + lda #$00 + sta GP.IFILACTV + sta GP.OFILACTV + sta GP.PFXACTV + sta GP.MLICF.REFNUM + lda #MLI.C.CLOSE + jsr GP.GOSYSTEM + bcs L9B27 + + jsr LA004 + bcs L9B27 + + lda #$00 + sta MLI.LEVEL + sta GP.MLICF.REFNUM + lda #MLI.C.FLUSH + jsr GP.GOSYSTEM + +L9B27 plp + ldx #$04 + bit AS.ERRFLG + bcs L9B30 + + ldx #$00 + +L9B30 php + jsr BS.SetState + jsr BS.SetCSWKSW2VDOS + lda GP.ERRCODE + plp + bmi L9B4D + + php + jsr GP.PRINTERR + jsr LB36B + plp + bcs L9B53 + + jsr BS.CROUT + jmp AS.RESTART1 + +L9B4D ldx AS.REMSTK + dex + dex + txs + tax + +L9B53 lda #$03 + jmp AS.BITERRFLG + +L9B58 lda #$00 + sta AS.ERRNUM + lda #$A3 + sta X9F65 + jsr AS.NORMAL + jsr BS.ResetCSWKSW + jsr BS.WriteTBUF + jsr BS.SetState0 + jsr BS.RestoreAXY + jmp BS.IO.IN + +BS.IO.IN0 jsr BS.SaveAXY + bit GP.PFXACTV + bpl L9B7E + jmp BS.IO.IN.CAT + +L9B7E bit GP.IFILACTV + bpl L9B86 + jmp BS.IO.IN.FILE + +L9B86 bit GP.EXECACTV + bmi BS.IO.IN.EXEC + + lda ZP.PROMPT + cmp #$DD + beq L9B58 + + jsr BS.ResetCSWKSW + +L9B94 lda GP.PREGA + ldy GP.PREGY + jsr MON.KEYIN0 + cmp #$88 + bne L9BAC + + lda ZP.PROMPT + cmp #$BE + beq L9BAA + + txa + beq L9B94 + +L9BAA lda #$88 +L9BAC jmp BS.SaveCSWKSW + +BS.IO.IN.EXEC sta (ZP.BASL),y + lda ZP.PROMPT + cmp #$BE + beq L9BF2 + + lda IO.KBD + bpl L9BCD + + cmp #$83 + bne L9BCD + + jsr LB36B + lda GP.STATE + bne L9C01 + + sta IO.KSTROBE + beq L9C01 + +L9BCD jsr BS.Setup4readEFBytesAt200 + jsr L9C6C + bcs L9BFA + + jsr BS.SaveAXY + bcc L9BDE + +L9BDA dex + lda IO.LINEBUF,x + +L9BDE ora #$80 + sta IO.LINEBUF,x + txa + bne L9BDA + + jsr BS.ResetCSWKSW + jsr BS.CheckDOSCMD + bit GP.XCNUM + bpl L9BCD + +L9BF1 rts + +L9BF2 jsr BS.Setup4readEFBytesAt200 + jsr BS.ReadOneByte + bcc L9BF1 + +L9BFA jsr LB2B5 + cmp #$05 + bne L9C13 + +L9C01 ldx #$00 + ldy ZP.CH + bne L9C0E + + lda #$DD + sta ZP.PROMPT + lda #$88 + rts + +L9C0E lda (ZP.BASL),y + jmp (ZP.KSW) +L9C13 jmp BS.ERROUT + +BS.IO.IN.FILE lda ZP.PROMPT + cmp #$DD + bne L9C1F + jmp L9B58 + +L9C1F lda GP.PREGA + sta (ZP.BASL),y + lda IO.KBD + bpl L9C31 + + cmp #$83 + bne L9C31 + + bit IO.KSTROBE + rts + +L9C31 lda ZP.PROMPT + bit GP.DIRFLG + bmi L9C95 + + cmp #$BE + beq L9C42 + + jsr L9C67 + bcs L9C13 + + rts + +L9C42 jsr BS.ReadOneByte + bcs L9C13 + + rts + +BS.ReadOneByte lda GP.MLIRW.COUNT + sta GP.ParamL + lda #$01 + sta GP.MLIRW.COUNT + lda #MLI.C.READ + jsr GP.GOSYSTEM + bcs L9C66 + + lda GP.ParamL + sta GP.MLIRW.COUNT + ldx GP.MLIRW.DATAPTR + lda IO.LINEBUF,x + +L9C66 rts + +L9C67 lda GP.PREGA + sta (ZP.BASL),y + +L9C6C lda #MLI.C.READ + jsr GP.GOSYSTEM + bcs L9C66 + + lda GP.MLIRW.TRANS + beq L9C8E + + clc + adc GP.MLIRW.DATAPTR + tax + lda IO.LINEBUF-1,x + and #$7F + cmp #$0D + bne L9C8E + + lda GP.FoundBITS+1 + and #$10 + bne L9C8E + + dex + +L9C8E lda #$8D + ldy GP.PREGY + clc + rts + +L9C95 cmp #$BE + beq L9C8E + + lda GP.PREGA + sta (ZP.BASL),y + lda #$4F + sta BS.CATWIDTH + lda #MLI.C.GETMARK + jsr GP.GOSYSTEM + bcs L9D1F + + lda GP.SBUFADR + ora GP.SBUFADR+1 + bne L9CDF + + lda #$02 + sta GP.CATFLAG + jsr BS.ReadDirEnt + bcs L9D1F + + lda GP.MLIRW.REFNUM + lsr + ror + ror + ror + tax + lda XBC12 + sta XBC5A,x + lda XBC13 + sta XBC5B,x + jsr LB128 + +L9CD3 lda #$A2 + sta IO.LINEBUF + lda #$8D + sta IO.LINEBUF,x + clc + rts + +L9CDF lda GP.CATFLAG + beq L9D22 + bmi L9CF9 + ldx #$00 + dec GP.CATFLAG + beq L9CD3 + jsr BS.LINEBUFCLR80 + ldx #$10 + jsr BS.PRINTERRMSGX + +L9CF5 ldx #$50 + bne L9CD3 + +L9CF9 cmp #$FF + bne L9D1C + + dec GP.CATFLAG + lda #$00 + sta GP.MLIRW.COUNT + sta GP.MLIRW.COUNT+1 + lda #MLI.C.READ + jsr GP.GOSYSTEM + jsr LB157 + pha + lda GP.MLIRW.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + pla + bcc L9CF5 + + bcs L9D1F + +L9D1C lda #$05 + sec + +L9D1F jmp BS.ERROUT + +L9D22 lda #$FF + sta XBC16 + lda GP.MLIRW.REFNUM + lsr + ror + ror + ror + tax + lda XBC5A,x + sta XBC12 + lda XBC5B,x + sta XBC13 + lda GP.SBUFADR+1 + and #$01 + tax + lda GP.SBUFADR + sec + +L9D45 inc XBC16 + sbc XBC12 + bcs L9D45 + + dex + beq L9D45 + + jsr LB241 + bcc L9D65 + + cmp #$02 + beq L9D5D + + cmp #$05 + bne L9D1F + +L9D5D dec GP.CATFLAG + ldx #$00 + jmp L9CD3 + +L9D65 jsr LA4D2 + jmp L9CF5 + +BS.IO.IN.CAT cmp #$DD + bne L9D72 + + jmp L9B58 + +L9D72 lda GP.PREGA + sta (ZP.BASL),y + lda #$00 + sta GP.PFXACTV + ldx BS.CMDBUF.LEN + +L9D7F lda BS.CMDBUF.LEN,x + sta IO.LINEBUF-1,x + dex + bne L9D7F + + ldx BS.CMDBUF.LEN + lda #$8D + rts + +BS.Setup4readEFBytesAt200 + lda XBBFE + sta GP.MLIRW.REFNUM + lda #$02 + sta GP.MLIRW.DATAPTR+1 + lda #$EF + sta GP.MLIRW.COUNT + lda #$00 + sta GP.MLIRW.COUNT+1 + sta GP.MLIRW.DATAPTR + rts + +BS.VSYSO jsr BS.SaveAXY + cmp #$84 + bne L9DC5 + + jsr BS.WriteTBUF + sta GP.INPTR + sta GP.IFILACTV + sta GP.OFILACTV + sta GP.PFXACTV + ldx #$08 + jsr BS.SetState + jmp BS.RestoreAXY + +L9DC5 ldx #$04 + jsr BS.SetState + jsr BS.RestoreAXY + jmp BS.JMP.GP.VSYSO + +BS.IO.OUT.CAT jsr BS.SaveAXY + ldx GP.INPTR + sta IO.LINEBUF,x + cmp #$8D + beq L9DEB + + inc GP.INPTR + bne L9DE7 + + lda #$10 + +L9DE4 jmp BS.ERROUT + +L9DE7 ldx GP.PREGX + rts + +L9DEB inx + dex + beq L9DFA + + jsr BS.ResetCSWKSW + jsr BS.DOSCMD + bcs L9DE4 + + jsr BS.SaveCSWKSW + +L9DFA ldx #$04 + jsr BS.SetState + jmp BS.RestoreAXY + +L9E02 sty GP.PREGY + ldy ZP.PROMPT + beq L9E15 + + dey + beq L9E15 + + dey + beq L9E15 + + ldy GP.PREGY + jmp L9A74 + +L9E15 ldy GP.TBUFPTR + and #$7F + sta (AS.HIMEM),y + ldy GP.PREGY + inc GP.TBUFPTR + bne L9E2F + + jsr BS.SaveAXY + jsr BS.WriteTBUF256 + bcs L9DE4 + + jsr BS.RestoreAXY + +L9E2F rts + +BS.IO.OUT.TRACE pha + stx GP.PREGX + tsx + lda $104,x + cmp #$12 + bne L9E46 + + lda $105,x + cmp #$D8 + bne L9E46 + + pla + bcs L9EBA + +L9E46 pla + nop + nop + nop + ldx GP.PREGX + bit GP.OFILACTV + bpl L9E70 + + cmp #$DD + bne L9E5A + + cmp ZP.PROMPT + beq L9E8A + +L9E5A cmp #$8D + bne L9E02 + + lda ZP.PROMPT + cmp #$FF + lda #$8D + bcc L9E02 + + jsr BS.WriteTBUF + sta GP.OFILACTV + lda #$8D + bne L9EA3 + +L9E70 pha + lda GP.IFILACTV + ora GP.PFXACTV + bpl L9E81 + + lda ZP.PROMPT + ora #$04 + cmp #$84 + beq L9EA6 + +L9E81 pla + cmp #$DD + bne L9EA3 + + cmp ZP.PROMPT + bne L9EA3 + +L9E8A jsr BS.SaveAXY + lda GP.OPENCNT + beq L9EA0 + + jsr BS.WriteTBUF + sta GP.OFILACTV + jsr BS.ResetCSWKSW + lda #$15 + jsr GP.PRINTERR + +L9EA0 jsr BS.RestoreAXY +L9EA3 jmp L9A74 + +L9EA6 pla + cmp #$8D + bne L9EAE + + cmp GP.CHRLAST + +L9EAE sta GP.CHRLAST + bne L9EB5 + + sta ZP.PROMPT + +L9EB5 rts + +L9EB6 inc AS.TXTPTR+1 + bne L9EBE + +L9EBA inc AS.TXTPTR + beq L9EB6 + +L9EBE ldx #$FF + stx ZP.PROMPT + ldx AS.REMSTK + txs + bit GP.DTRACE + bmi L9F3D + +L9ECA ldy #$00 + lda (AS.TXTPTR),y + bmi L9EF5 + + beq L9EF2 + +L9ED2 dec GP.STRINGS + bne L9EF0 + + lda AS.STRINGSTART+1 + sbc AS.ARRAYEND+1 + cmp #$03 + bcs L9EE9 + + jsr BS.WriteTBUF + jsr BS.KW.01 + lda AS.STRINGSTART+1 + sbc AS.ARRAYEND+1 + +L9EE9 sta GP.STRINGS + ldy #$00 + lda (AS.TXTPTR),y + +L9EF0 cmp #$3A +L9EF2 jmp AS.EXECSTMT + +L9EF5 sta ZP.PROMPT + tay + lda BS.BYTES-$80,y + bmi L9EF2 + + sta X9F00+1 + +X9F00 bne L9F02 SELF MODIFIED + +L9F02 sta ZP.PROMPT + sta GP.CHRLAST + lda BS.VSYSO.LO + sta GP.VSYSO + lda BS.VSYSO.HI + sta GP.VSYSO+1 + bne L9F32 + + lda #$01 + sta ZP.PROMPT + bne L9F32 + + lda #$02 + sta ZP.PROMPT + bne L9F32 + + tya + jmp L9ED2 + + sty GP.DTRACE + bne L9F2E + + sta GP.DTRACE + dey + +L9F2E lda #$4A + sta AS.TRCFLG + +L9F32 tya + jmp AS.EXECSTMT + + lda #$00 + sta AS.ERRNUM + tya + bne L9EF0 + +L9F3D jsr BS.ResetCSWKSW + lda #$A3 + jsr MON.COUT + ldx AS.CURLINE + lda AS.CURLINE+1 + jsr AS.INTPRINTAX + lda #$A0 + jsr MON.COUT + jsr BS.SaveCSWKSW + sec + jmp L9ECA + + lda #$E3 + bne L9F5E + + lda #$A3 + +L9F5E sta X9F65 + tya + bne L9EF0 + + brk + +X9F65 .DA #$A3 + +BS.SaveAXY sta GP.PREGA + stx GP.PREGX + sty GP.PREGY + rts + +BS.RestoreAXY lda GP.PREGA + ldx GP.PREGX + ldy GP.PREGY + rts + +BS.SetState stx GP.STATE + ldy #$00 + +L9F7F lda BS.SYSIOVECTS,x + sta GP.VSYSO,y + inx + iny + cpy #$04 + bne L9F7F + + rts + +BS.PRINTERR tay + ldx BS.ERRCODES-1,y + +BS.PRINTERRX jsr BS.PRINTERRMSGX + ldx GP.INPTR + stx BS.CATWIDTH + jsr BS.CROUT + lda #$87 + jsr BS.COUT + +BS.LINEBUFOUT ldx #$00 + +L9FA3 lda IO.LINEBUF+1,x + jsr BS.COUT + inx + cpx BS.CATWIDTH + bcc L9FA3 + +BS.CROUT lda #$8D +BS.COUT jmp MON.COUT + +BS.PRINTERRMSGX ldy #$00 + clc + sty GP.INPTR + +L9FBA jsr L9FD6 + bne L9FC4 + + jsr L9FD6 + ora #$10 + +L9FC4 tay + lda BS.TBL6,y + beq L9FD5 + + ldy GP.INPTR + sta IO.LINEBUF+1,y + inc GP.INPTR + bne L9FBA + +L9FD5 rts + +L9FD6 lda BS.TBL7,x + bcs L9FED + + beq L9FE3 + + lsr + lsr + lsr + lsr + sec + rts + +L9FE3 inx + lda BS.TBL7,x + sta GP.INPTR + inx + bne L9FD6 + +L9FED inx + and #$0F + clc + rts + +BS.WriteTBUF256 lda #$00 + ldy #$01 + bne LA00B + +BS.WriteTBUF jsr LA004 + bcc LA020 + + tay + pla + pla + tya + jmp BS.ERROUT + +LA004 ldy #$00 + lda GP.TBUFPTR + beq LA01F + +LA00B sta GP.MLIRW.COUNT + sty GP.MLIRW.COUNT+1 + lda #MLI.C.WRITE + jsr GP.GOSYSTEM + pha + lda #$00 + sta GP.TBUFPTR + pla + bcs LA020 + +LA01F clc +LA020 rts + +LA021 jsr BS.KW.01 + bcs LA047 + + lda AS.PGRMSTART+1 + sta BS.TXTTAB+1 + lda AS.PGRMSTART + sta BS.TXTTAB + lda AS.HIMEM+1 + sta XBBD8 + lda #$03 + sta XBBD9 + lda AS.STRINGSTART+1 + sta BS.MEMSIZE+1 + lda #$00 + sta BS.MEMSIZE + jsr LA089 + +LA047 rts + +BS.KW.01 lda #$00 + sta BS.TXTTAB + lda #$03 + sta XBBD9 + lda AS.HIMEM+1 + sta XBBD8 + lda AS.STRINGSTART+1 + sta BS.TXTTAB+1 + sec + sbc AS.ARRAYEND+1 + cmp #$07 + bcc LA07D + + sbc #$03 + sta XBBD9 + lda AS.ARRAYEND+1 + adc #$00 + sta XBBD8 + lda AS.HIMEM+1 + sbc AS.STRINGSTART+1 + adc #$01 + cmp XBBD9 + bcs LA07D + + sta XBBD9 + +LA07D lda AS.HIMEM+1 + sta BS.MEMSIZE+1 + lda AS.HIMEM + sta BS.MEMSIZE + sta AS.STRINGSTART + +LA089 clc + beq LA08D + + sec + +LA08D lda BS.MEMSIZE+1 + sta AS.STRINGSTART+1 + sbc #$00 + sta XBBDA + adc #$00 + sta XBBDB + lda AS.ARRAYEND+1 + adc #$01 + sta XBBDD + +LA0A3 lda AS.VARSTART + sbc #$06 + sta ZP.A2L + lda AS.VARSTART+1 + sbc #$00 + sta ZP.A2H + lda AS.ARRAYSTART + sta XBBDC + lda XBBDA + cmp BS.TXTTAB+1 + bcc LA0FA + + sbc XBBD9 + sta XBBD7 + lda AS.STRINGSTART+1 + sbc XBBDA + sbc XBBD7 + eor #$FF + adc #$02 + cmp XBBD7 + bcc LA0D6 + + lda XBBD7 + +LA0D6 cmp BS.TXTTAB+1 + bcs LA0E0 + + lda BS.TXTTAB+1 + sbc #$00 + +LA0E0 sta XBBDA + jsr LA199 + ldx AS.ARRAYSTART+1 + jsr LA0FB + bcs LA0F8 + + jsr LA131 + lda XBBDA + sta XBBDB + bcc LA0A3 + +LA0F8 lda #$0C +LA0FA rts + +LA0FB clc + +LA0FC lda ZP.A2L + adc #$07 + sta ZP.A2L + bcc LA106 + + inc ZP.A2H + +LA106 eor AS.ARRAYSTART + bne LA10E + + cpx ZP.A2H + beq LA12F + +LA10E ldy #$00 + lda (ZP.A2L),y + iny + eor (ZP.A2L),y + bpl LA0FB + + lda (ZP.A2L),y + bpl LA0FB + + ldy #$04 + lda (ZP.A2L),y + cmp XBBDA + bcc LA0FC + + cmp XBBDB + bcs LA0FB + + jsr LA1BC + bcc LA0FC + + rts + +LA12F clc + rts + +LA131 jsr LA160 + bcs LA12F + +LA136 ldy #$02 + lda (ZP.A2L),y + cmp XBBDA + bcc LA14A + + cmp XBBDB + bcs LA14A + + jsr LA1BC + bcc LA14B + + rts + +LA14A clc +LA14B lda #$03 + adc ZP.A2L + sta ZP.A2L + bcc LA155 + + inc ZP.A2H + +LA155 cmp XBBDC + bne LA136 + + cpx ZP.A2H + bne LA136 + + beq LA131 + +LA160 clc + lda XBBDC + sta ZP.A2L + stx ZP.A2H + eor AS.ARRAYEND + bne LA170 + + cpx AS.ARRAYEND+1 + beq LA198 + +LA170 ldy #$02 + lda (ZP.A2L),y + adc ZP.A2L + sta XBBDC + iny + lda (ZP.A2L),y + adc ZP.A2H + tax + ldy #$00 + lda (ZP.A2L),y + iny + eor (ZP.A2L),y + bpl LA160 + + ldy #$04 + lda (ZP.A2L),y + asl + adc #$05 + adc ZP.A2L + sta ZP.A2L + bcc LA198 + + inc ZP.A2H + + clc +LA198 rts + +LA199 lda XBBD7 + sta ZP.PCH + lda XBBD8 + sta ZP.A1H + ldy #$00 + sty ZP.PCL + sty ZP.A1L + ldx XBBD9 + inx + +LA1AD lda (ZP.PCL),y + sta (ZP.A1L),y + iny + bne LA1AD + + inc ZP.A1H + inc ZP.PCH + dex + bne LA1AD + + rts + +LA1BC cmp XBBD7 + bcc LA1C8 + + sbc XBBD7 + clc + adc XBBD8 + +LA1C8 sta ZP.PCH + dey + lda (ZP.A2L),y + sta ZP.PCL + dey + sec + lda AS.STRINGSTART + sbc (ZP.A2L),y + sta AS.STRINGSTART + iny + sta (ZP.A2L),y + lda AS.STRINGSTART+1 + sbc #$00 + sta AS.STRINGSTART+1 + iny + sta (ZP.A2L),y + dey + dey + lda (ZP.A2L),y + beq LA1F2 + + tay + +LA1EA dey + lda (ZP.PCL),y + sta (AS.STRINGSTART),y + tya + bne LA1EA + +LA1F2 clc + lda XBBDD + sbc AS.STRINGSTART+1 + rts + +LA1F9 lda #$04 +LA1FB sta XBBB5 + jsr BS.KW.01 + bcs LA24E + + lda AS.STRINGSTART+1 + sbc AS.ARRAYEND+1 + cmp XBBB5 + lda #$0C + bcc LA24E + + lda AS.STRINGSTART+1 + sta ZP.PCH + sbc XBBB5 + sta ZP.A1H + sta AS.STRINGSTART+1 + lda AS.STRINGSTART + sta ZP.PCL + sta ZP.A1L + lda AS.HIMEM + sbc ZP.PCL + sta XBBED + lda AS.HIMEM+1 + sbc ZP.PCH + sta XBBEE + jsr LA35F + lda #$00 + sec + sbc XBBB5 + sta XBBE2 + jsr LA3A3 + lda AS.HIMEM+1 + sta XBBB7 + sec + sbc XBBB5 + sta AS.HIMEM+1 + clc + adc #$04 + sta XBBE3 + rts + +LA24E sec + rts + +LA250 jsr BS.KW.01 + bcs LA29D + + lda AS.HIMEM+1 + sbc #$00 + sta ZP.PCH + adc #$03 + sta ZP.A1H + lda AS.STRINGSTART + sta ZP.PCL + sta ZP.A1L + lda AS.HIMEM + sec + sbc AS.STRINGSTART + sta XBBED + lda AS.HIMEM+1 + sbc AS.STRINGSTART+1 + sta XBBEE + jsr LA383 + lda #$04 + sta XBBE2 + clc + adc AS.HIMEM+1 + sta AS.HIMEM+1 + jsr LA3A3 + lda XBBE3 + cmp AS.HIMEM+1 + beq LA2B7 + + pha + ldx GP.OPENCNT + beq LA29B + + lda AS.HIMEM+1 + +LA293 cmp XBBEE,x + beq LA29E + + dex + bne LA293 + +LA29B pla + sec +LA29D rts + +LA29E pla +LA29F sta GP.SBUFADR+1 + sta XBBEE,x + lda #$00 + sta GP.SBUFADR + lda XBBF6,x + sta GP.MLIMRKEOFBUF.REFNUM + lda #MLI.C.SETBUF + jsr GP.GOSYSTEM + bcs LA29D + +LA2B7 clc + rts +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.a +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BASIC.FX/BASIC.S.B.txt b/BASIC.FX/BASIC.S.B.txt new file mode 100644 index 00000000..bac792a3 --- /dev/null +++ b/BASIC.FX/BASIC.S.B.txt @@ -0,0 +1,1687 @@ +NEW + AUTO 3,1 +*-------------------------------------- +BS.GETBUFR jsr LA1FB + bcs LA304 + pha + sbc #$03 + sta XBBB8 + pla + +LA2C5 sta GP.SBUFADR+1 + ldx GP.OPENCNT + beq LA2EE + + lda XBBB7 + clc + adc #$04 + sta XBBB7 + +LA2D6 cmp XBBEE,x + bne LA2EB + + lda GP.SBUFADR+1 + jsr LA356 + jsr LA29F + lda GP.SBUFADR+1 + adc #$04 + bcc LA2C5 + +LA2EB dex + bne LA2D6 + +LA2EE lda GP.SBUFADR+1 + bit GP.EXECACTV + bpl LA303 + +LA2F6 ldx #$08 + jsr LA356 + jsr LA29F + lda GP.SBUFADR+1 + adc #$04 + +LA303 clc +LA304 rts + +BS.FREEBUFR lda GP.OPENCNT + asl + asl + adc AS.HIMEM+1 + sta XBBB7 + lda AS.HIMEM+1 + sta XBBB8 + lda GP.RSHIMEM + cmp AS.HIMEM+1 + beq LA354 + + sta AS.HIMEM+1 + bit GP.EXECACTV + bpl LA327 + + jsr LA2F6 + bcc LA345 + +LA327 lda XBBB7 + ldx GP.OPENCNT + beq LA351 + +LA32F cmp XBBEE,x + bne LA34E + + lda AS.HIMEM+1 + jsr LA356 + jsr LA29F + sec + lda XBBB7 + sbc #$04 + sta XBBB7 + +LA345 lda AS.HIMEM+1 + sec + sbc #$04 + sta AS.HIMEM+1 + bcs LA327 + +LA34E dex + bne LA32F + +LA351 jsr BS.KW.01 +LA354 clc + rts + +LA356 pha + lda XBBB8 + jsr LA29F + pla + rts + +LA35F ldy #$00 + cpy XBBEE + beq LA376 + +LA366 lda (ZP.PCL),y + sta (ZP.A1L),y + iny + bne LA366 + + inc ZP.PCH + inc ZP.A1H + dec XBBEE + bne LA366 + +LA376 cpy XBBED + beq LA382 + + lda (ZP.PCL),y + sta (ZP.A1L),y + iny + bne LA376 + +LA382 rts + +LA383 ldy XBBED +XA386 beq LA38F SELF MODIFIED + +LA388 jsr LA39A + dec ZP.A1H + dec ZP.PCH + +LA38F cpy XBBEE + beq LA3A2 + + dec XBBEE + jmp LA388 + +LA39A dey + lda (ZP.PCL),y + sta (ZP.A1L),y + tya + bne LA39A + +LA3A2 rts + +LA3A3 lda AS.VARSTART+1 + sta ZP.A2H + lda AS.VARSTART + ldx AS.ARRAYSTART+1 + clc + bcc LA3B3 + +LA3AE clc + lda ZP.A2L + adc #$07 + +LA3B3 sta ZP.A2L + bcc LA3B9 + + inc ZP.A2H + +LA3B9 eor AS.ARRAYSTART + bne LA3BF + + cpx ZP.A2H + +LA3BF clc + beq LA3D6 + + ldy #$00 + lda (ZP.A2L),y + iny + eor (ZP.A2L),y + bpl LA3AE + + lda (ZP.A2L),y + bpl LA3AE + + iny + jsr LA3FD + jmp LA3AE + +LA3D6 lda ZP.A2L + sta XBBDC + +LA3DB clc + jsr LA160 + bcs LA410 + +LA3E1 ldy #$00 + clc + jsr LA3FD + clc + lda #$03 + adc ZP.A2L + sta ZP.A2L + bcc LA3F2 + + inc ZP.A2H + +LA3F2 cmp XBBDC + bne LA3E1 + + cpx ZP.A2H + bne LA3E1 + + beq LA3DB + +LA3FD lda (ZP.A2L),y + beq LA410 + + iny + iny + lda AS.VARSTART+1 + cmp (ZP.A2L),y + bcs LA410 + + lda (ZP.A2L),y + adc XBBE2 + sta (ZP.A2L),y + +LA410 rts + +LA411 jsr LA021 + bcs LA47F + + lda AS.ARRAYEND + sec + sbc AS.VARSTART + sta BS.BAS.HDR + sta XBBED + lda AS.ARRAYEND+1 + sbc AS.VARSTART+1 + sta BS.BAS.HDR+1 + sta XBBEE + lda AS.ARRAYSTART + sbc AS.VARSTART + sta BS.BAS.HDR+2 + lda AS.ARRAYSTART+1 + sbc AS.VARSTART+1 + sta BS.BAS.HDR+3 + lda AS.STRINGSTART + sbc XBBED + sta ZP.A1L + lda AS.STRINGSTART+1 + sbc #$00 + sta ZP.A1H + lda AS.ARRAYEND + sbc XBBED + sta ZP.PCL + lda AS.ARRAYEND+1 + sbc #$00 + sta ZP.PCH + lda #$03 + sta XA386+1 + jsr LA383 + lda #$07 + sta XA386+1 + lda ZP.A1L + sta XBBE9 + inc ZP.A1H + lda ZP.A1H + sta XBBEA + lda AS.HIMEM + sec + sbc ZP.A1L + sta XBBEB + lda AS.HIMEM+1 + sta BS.BAS.HDR+4 + sbc ZP.A1H + sta XBBEC + clc +LA47F rts + +LA480 lda BS.BAS.HDR + sta XBBED + clc + adc AS.VARSTART + sta AS.ARRAYEND + lda BS.BAS.HDR+1 + sta XBBEE + adc AS.VARSTART+1 + sta AS.ARRAYEND+1 + lda AS.VARSTART + sta ZP.A1L + adc BS.BAS.HDR+2 + sta AS.ARRAYSTART + lda AS.VARSTART+1 + sta ZP.A1H + adc BS.BAS.HDR+3 + sta AS.ARRAYSTART+1 + lda XBBE9 + sta ZP.PCL + lda XBBEA + sta ZP.PCH + jsr LA35F + lda XBBED + clc + adc ZP.PCL + sta AS.STRINGSTART + lda ZP.PCH + adc #$00 + sta AS.STRINGSTART+1 + sec + lda AS.HIMEM+1 + sbc BS.BAS.HDR+4 + beq LA4D0 + + sta XBBE2 + jsr LA3A3 + +LA4D0 clc + rts + +LA4D2 jsr BS.LINEBUFCLR80 + lda #$A2 + sta IO.LINEBUF + lda DIRENTBUF + and #$0F + tay + +LA4E0 lda DIRENTBUF,y + ora #$80 + sta IO.LINEBUF+1,y + dey + bne LA4E0 + + sty BS.TMPBUF4+2 + lda DIRENTBUF.TYPE + ldx #$0E + +LA4F3 iny + iny + cmp BS.PRODOSTYPES.H,x + beq LA505 + + iny + dex + bpl LA4F3 + + ldy #$13 + jsr BS.AHEX2LINEBUFY + bne LA549 + +LA505 ldx #$02 + pha + +LA508 lda BS.PRODOSTYPES.ASC,y + sta $212,x + dey + dex + bpl LA508 + pla + bit BS.CATWIDTH + bvc LA561 + + ldy #$4E + cmp #$06 + beq LA533 + + cmp #$04 + bne LA549 + + lda #$D2 + sta $249 + lda DIRENTBUF.AUXT + ldx DIRENTBUF.AUXT+1 + jsr BS.AXDEC2LINEBUFY + jmp LA544 + +LA533 lda #$C1 + sta $249 + lda DIRENTBUF.AUXT + jsr BS.AHEX2LINEBUFY + lda DIRENTBUF.AUXT+1 + jsr BS.AHEX2LINEBUFY + +LA544 lda #$BD + sta $24A + +LA549 lda DIRENTBUF.EOF+2 + sta BS.TMPBUF4+2 + lda DIRENTBUF.EOF + ldx DIRENTBUF.EOF+1 + ldy #$46 + jsr BS.AXDEC2LINEBUFY + ldx #$18 + ldy #$3D + jsr LA57E + +LA561 ldy #$1B + lda DIRENTBUF.UBLK + ldx DIRENTBUF.UBLK+1 + jsr BS.AXDEC2LINEBUFY + lda DIRENTBUF.ACCESS + and #$C2 + cmp #$C2 + beq LA57A + + lda #$AA + sta IO.LINEBUF+1 + +LA57A ldx #$21 + ldy #$2C + +LA57E lda $25A,x + lsr + sta XBC10 + lda DIRENTBUF,x + pha + and #$1F + sta XBC0F + pla + rol + rol + rol + rol + and #$0F + beq LA5B1 + + cmp #$0D + bcs LA5B1 + + sta XBC0E + asl + adc XBC0E + sta XBC0E + lda XBC0F + beq LA5B1 + + lda XBC10 + cmp #$64 + bcc LA5C3 + +LA5B1 tya + sec + sbc #$06 + tay + ldx #$08 + +LA5B8 lda BS.NODATE,x + sta IO.LINEBUF+1,y + dey + dex + bpl LA5B8 + + rts + +LA5C3 lda $25C,x + pha + lda $25B,x + ldx #$00 + cmp #$3C + bcc LA5D1 + + txa + +LA5D1 jsr LA618 + lda #$BA + sta IO.LINEBUF+1,y + dey + pla + ldx #$00 + cmp #$18 + bcc LA5E2 + + txa + +LA5E2 cmp #$0A + php + jsr BS.AXDEC2LINEBUFY + plp + bcs LA5EC + + dey + +LA5EC dey + lda XBC10 + jsr LA618 + dey + ldx XBC0E + inx + inx + inx + +LA5FA lda BS.MONTHS-4,x + sta IO.LINEBUF+1,y + dey + dex + cpx XBC0E + bne LA5FA + + lda #$AD + sta IO.LINEBUF+1,y + sta $205,y + dey + lda XBC0F + ldx #$00 + jmp BS.AXDEC2LINEBUFY + +LA618 clc + adc #$64 + jsr BS.AXDEC2LINEBUFY + iny + rts + +BS.AHEX2LINEBUFY + pha + and #$0F + jsr LA62B + pla + lsr + lsr + lsr + lsr + +LA62B ora #$B0 + cmp #$BA + bcc LA633 + + adc #$06 + +LA633 sta IO.LINEBUF+1,y + dey + lda #$A4 + sta IO.LINEBUF+1,y + rts + +BS.AXDEC2LINEBUFY + stx BS.TMPBUF4+1 + sta BS.TMPBUF4 + +LA643 jsr LA65B + lda BS.TMPBUF4+3 + ora #$B0 + sta IO.LINEBUF+1,y + dey + lda BS.TMPBUF4 + ora BS.TMPBUF4+1 + ora BS.TMPBUF4+2 + bne LA643 + + rts + +LA65B ldx #$18 + lda #$00 + sta BS.TMPBUF4+3 + +LA662 jsr BS.TMPBUF3x2 + rol BS.TMPBUF4+3 + sec + lda BS.TMPBUF4+3 + sbc #$0A + bcc LA676 + + sta BS.TMPBUF4+3 + inc BS.TMPBUF4 + +LA676 dex + bne LA662 + + rts + +BS.LINEBUFCLR80 lda #$A0 + ldx #$4F + +LA67E sta IO.LINEBUF+1,x + dex + bpl LA67E + + rts + +BS.DOSCMD lda #$FF + sta GP.XCNUM + lda #$20 + sta BS.GetCharSep + lda #$08 + sta BS.GetCharMax + jsr BS.GetKWInCmdBuf + lda BS.CMDBUF + cmp #$41 + bcs LA6A5 + + eor #$2D + beq LA6A5 + +LA6A2 jmp BS.ERR10 + +LA6A5 jsr BS.IsIntCmdMTR + bcs LA6A2 + + lda GP.STATE + bne LA6BA + + lda GP.EXECACTV + bne LA6BA + + jsr MON.CLREOL + jsr BS.CROUT + +LA6BA lda #$00 + sta GP.FoundBITS + sta GP.FoundBITS+1 + sta BS.CMDBUF + sta MLI.PATHBUF + lda GP.VDEFSLT + sta GP.ParamS + lda GP.VDEFDRV + sta GP.ParamD + lda AS.HIMEM+1 + sta XBBE3 + ldx GP.XLEN + inx + inx + stx BS.GetCharMax + lda GP.AllowedBITS + beq LA744 + + asl + bmi LA747 + + jsr BS.GetKWInCmdBuf + php + pha + lda GP.AllowedBITS + bpl LA6F8 + + lda #MLI.C.GETPREFIX + jsr GP.GOSYSTEM + +LA6F8 pla + plp + beq LA744 + + cmp #$2C + bne LA703 + jmp LA795 + +LA703 cmp #$2F + beq LA70B + + cmp #$41 + bcc LA73D + +LA70B dex + lda #$82 + sta BS.GetCharSep + lsr + sta BS.GetCharMax + ldy #$00 + jsr LAA2D + dey + sty BS.CMDBUF.LEN + lda #$01 + sta GP.FoundBITS + +LA723 lda BS.CMDBUF.LEN,y + sta MLI.PATHBUF,y + dey + bpl LA723 + + dex + jsr BS.GetCharSpaceSep + bne LA73A + + bcc LA7A6 + + lda GP.AllowedBITS + lsr + bcs LA770 + +LA73A jmp BS.ERR10 + +LA73D lda GP.XCNUM + cmp #$06 + bne LA73A + +LA744 jmp LA7A6 + +LA747 jsr BS.GetKWInCmdBuf + beq LA73A + + cmp #$41 + beq LA79A + + jsr BS.TMPBUF3Reset + sty XBC08 + ldy #$13 + sty XBC09 + ldy #$40 + sty GP.FoundBITS + jsr LA96E + bcs LA76F + + lda GP.ParamINPR + cmp #$08 + bcc LA79F + +LA76C lda #$02 + sec +LA76F rts + +LA770 lsr + bcc LA795 + + jsr BS.GetCharSpaceSep + beq LA73A + + dex + lda #$82 + sta BS.GetCharSep + ldy #$01 + jsr BS.GetPathInPathBuf + dey + dey + sty MLI.PATHBUF + lda #$03 + sta GP.FoundBITS + dex + jsr BS.GetCharSpaceSep + bne LA73A + + bcc LA7A6 + +LA795 jsr BS.GetCharSpaceSep + beq LA73A + +LA79A jsr LA8F6 + bcs LA76F + +LA79F jsr BS.GetCharSpaceSep + bne LA73A + + bcs LA795 + +LA7A6 lda GP.ParamS + beq LA76C + + cmp #$08 + bcs LA76C + + lda GP.ParamD + beq LA76C + + cmp #$03 + bcs LA76C + + lda GP.AllowedBITS + and #$21 + lsr + beq LA7C9 + + lda GP.STATE + bne LA7C9 + + lda #$0F + sec + rts + +LA7C9 bcc LA80B + + lda GP.AllowedBITS+1 + and #$04 + beq LA80B + + lda GP.FoundBITS + lsr + bcs LA7E1 + + lda GP.AllowedBITS + and #$90 + beq BS.ERR10 + + bpl LA80B + +LA7E1 lda BS.CMDBUF + eor #$2F + beq LA7ED + + lda MLI.PFIXPTR + beq LA806 + +LA7ED lda GP.FoundBITS+1 + and #$04 + beq LA80B + + bcs LA806 + + lda #$00 + sta BS.CMDBUF.LEN + sta BS.CMDBUF + lda #$01 + ora GP.FoundBITS + sta GP.FoundBITS + +LA806 jsr BS.GetVolAtSxDy + bcs LA849 + +LA80B lda GP.XCNUM + asl + tax + lda BS.KW.JMP,x + sta BS.KW.JMPADDR + lda BS.KW.JMP+1,x + sta BS.KW.JMPADDR+1 + clc + txa + beq LA844 + + eor #$32 + beq LA844 + + lda GP.AllowedBITS+1 + and #$04 + + beq LA844 + lda GP.FoundBITS + lsr + bcc LA844 + + jsr BS.GetFileInfo + bcc LA844 + + cmp #$07 + bne LA849 + + lda GP.AllowedBITS + and #$08 + bne LA844 + + lda #$06 + rts + +LA844 jmp (BS.KW.JMPADDR) + +BS.ERR10 lda #$10 +LA849 sec + rts + +BS.GetVolAtSxDy lda GP.ParamS + asl + asl + asl + asl + asl + pha + lda GP.ParamD + eor #$01 + lsr + pla + ror + sta GP.MLIMRKEOFBUF.REFNUM + lda #$01 + sta GP.SBUFADR + lda #$02 + sta GP.SBUFADR+1 + lda #MLI.C.ONLINE + jsr GP.GOSYSTEM + bcs LA849 + + lda GP.ParamD + sta GP.VDEFDRV + lda GP.ParamS + sta GP.VDEFSLT + lda BS.CMDBUF + eor #$2F + beq LA8F4 + + lda IO.LINEBUF+1 + and #$0F + adc #$02 + sta IO.LINEBUF+1 + adc BS.CMDBUF.LEN + cmp #$40 + tax + lda #$10 + bcs LA8F5 + + ldy BS.CMDBUF.LEN + stx BS.CMDBUF.LEN + +LA89D dex + dey + bmi LA8AA + + lda BS.CMDBUF,y + sta BS.CMDBUF,x + jmp LA89D + +LA8AA lda #$2F + sta BS.CMDBUF + +LA8AF sta BS.CMDBUF,x + lda IO.LINEBUF,x + dex + bne LA8AF + + lda GP.XCNUM + cmp #$0B + beq LA8F4 + + cmp #$16 + beq LA8F4 + + cmp #$08 + beq LA8F4 + + lda MLI.PATHBUF + tay + clc + adc IO.LINEBUF+1 + cmp #$40 + tax + lda #$10 + bcs LA8F5 + + stx MLI.PATHBUF + +LA8D9 dex + dey + bmi LA8E6 + + lda MLI.PATHBUF+1,y + sta MLI.PATHBUF+1,x + jmp LA8D9 + +LA8E6 lda #$2F + sta MLI.PATHBUF+1 + +LA8EB sta MLI.PATHBUF+1,x + lda IO.LINEBUF,x + dex + bne LA8EB + +LA8F4 clc + +LA8F5 rts + +LA8F6 jsr BS.TMPBUF3Reset + ldy #$09 + +LA8FB cmp BS.KW.OPT,y + beq LA935 + + dey + bpl LA8FB + + cmp #$54 + beq LA90A + +LA907 jmp BS.ERR10 + +LA90A lda #$04 + and GP.AllowedBITS + beq LA931 + + ora GP.FoundBITS + sta GP.FoundBITS + lda #$00 + sta XBC08 + lda #$12 + sta XBC09 + jsr BS.GetCharSpaceSep + beq LA907 + + cmp #$24 + beq LA984 + + cmp #$41 + bcc LA96E + + jmp BS.GetFTypeASC + +LA931 sec + lda #$0B + rts + +LA935 lda BS.KW.OPT.PBITSLO,y + beq LA955 + + and GP.AllowedBITS+1 + beq LA931 + + cmp #$04 + bne LA94F + + and GP.FoundBITS+1 + bne LA955 + + lda #$01 + sta GP.ParamD + lda #$04 + +LA94F ora GP.FoundBITS+1 + sta GP.FoundBITS+1 + +LA955 lda BS.KW.OPT.PBITSHI,y + and #$03 + sta XBC08 + lda BS.KW.OPT.PBITSHI,y + lsr + lsr + sta XBC09 + jsr BS.GetCharSpaceSep + beq LA9BE + + cmp #$24 + beq LA984 + +LA96E stx GP.INPTR + jsr LAA6A + bcc LA97A + + bmi LA9C1 + + bcs LA9BE + +LA97A ldx GP.INPTR + jsr BS.GetCharSpaceSep + bne LA96E + + beq LA99D + +LA984 jsr BS.GetCharSpaceSep + beq LA9BE + +LA989 stx GP.INPTR + jsr LAABC + bcc LA995 + + bmi LA9C1 + + bcs LA9BE + +LA995 ldx GP.INPTR + jsr BS.GetCharSpaceSep + bne LA989 + +LA99D ldx #$02 +LA99F cpx XBC08 + beq LA9AC + + lda BS.TMPBUF4,x + bne LA9C1 + + dex + bne LA99F + +LA9AC ldy XBC09 +LA9AF lda BS.TMPBUF4,x + sta GP.ParamA,y + dey + dex + bpl LA9AF + + ldx GP.INPTR + clc + rts + +LA9BE jmp BS.ERR10 +LA9C1 jmp LA76C + +BS.GetFTypeASC ldy #$00 + +LA9C6 sta BS.TMPBUF4,y + iny + cpy #$03 + beq LA9D5 + + jsr BS.GetCharSpaceSep + bne LA9C6 + + beq LA9BE + +LA9D5 stx GP.INPTR +LA9D8 ldx #$00 + lda XBC08 + cmp #$0F + beq LA9BE + + asl + adc XBC08 + tay + +LA9E6 lda BS.TMPBUF4,x + eor BS.PRODOSTYPES.ASC,y + asl + bne LA9F7 + + iny + inx + cpx #$03 + bne LA9E6 + + beq LA9FC + +LA9F7 inc XBC08 + bne LA9D8 + +LA9FC lda #$0E + sec + sbc XBC08 + tay + lda BS.PRODOSTYPES.H,y + sta GP.ParamT + ldx GP.INPTR + clc + rts + +BS.GetPathInPathBuf + jsr BS.GetCharUC + sta MLI.PATHBUF,y + iny + cmp #$2C + beq LAA45 + + cmp #$20 + beq LAA45 + + cmp #$0D + beq LAA56 + + cpy BS.GetCharMax + bcc BS.GetPathInPathBuf + + ora #$00 + rts + +BS.GetKWInCmdBuf + ldx #$00 + ldy #$00 + +LAA2D jsr BS.GetCharUC + sta BS.CMDBUF,y + iny + cmp #$2C + beq LAA45 + + cmp #$20 + beq LAA45 + + cmp #$0D + beq LAA56 + + cpy BS.GetCharMax + bcc LAA2D + +LAA45 ora #$00 + rts + +BS.GetCharSpaceSep + lda #$20 + sta BS.GetCharSep + jsr BS.GetCharUC + cmp #$2C + beq LAA57 + + cmp #$0D + +LAA56 clc +LAA57 rts + +BS.GetCharUC lda IO.LINEBUF,x + and #$7F + cmp #$61 + bcc LAA63 + + and #$5F + +LAA63 inx + cmp BS.GetCharSep + beq BS.GetCharUC + + rts + +LAA6A cmp #$30 + bcc LAA72 + + cmp #$3A + bcc LAA76 + +LAA72 sec + ora #$00 + rts + +LAA76 and #$0F + pha + lda BS.TMPBUF4+2 + cmp #$1A + bcs LAAA2 + + ldx #$02 + +LAA82 lda BS.TMPBUF4,x + pha + dex + bpl LAA82 + + jsr BS.TMPBUF3x2 + jsr BS.TMPBUF3x2 + ldx #$00 + clc + +LAA92 pla + adc BS.TMPBUF4,x + sta BS.TMPBUF4,x + inx + txa + eor #$03 + bne LAA92 + + jsr BS.TMPBUF3x2 + +LAAA2 pla + bcs LAAB8 + + adc BS.TMPBUF4 + sta BS.TMPBUF4 + bcc LAABB + + clc + inc BS.TMPBUF4+1 + bne LAABB + + inc BS.TMPBUF4+2 + bne LAABB + +LAAB8 lda #$FF + sec +LAABB rts + +LAABC cmp #$30 + bcc LAACC + + cmp #$3A + bcc LAAD2 + + cmp #$41 + bcc LAACC + + cmp #$47 + bcc LAAD0 + +LAACC sec + ora #$00 + rts + +LAAD0 sbc #$06 +LAAD2 and #$0F + ldx #$03 + +LAAD6 jsr BS.TMPBUF3x2 + bcs LAAB8 + + dex + bpl LAAD6 + + ora BS.TMPBUF4 + sta BS.TMPBUF4 + rts + +BS.TMPBUF3x2 asl BS.TMPBUF4 + rol BS.TMPBUF4+1 + rol BS.TMPBUF4+2 + rts + +BS.IsIntCmd ldx #$1F + stx GP.XCNUM + lda BS.CMDBUF + eor #$2D + bne LAB03 + + inc GP.XCNUM + sta GP.XLEN + bne LAB20 + +LAB03 ldy #$08 + sty GP.XLEN + +LAB08 lda BS.KW.LEN,x + bpl LAB13 + + and #$7F + dey + dec GP.XLEN + +LAB13 tax +LAB14 lda BS.CMDBUF,y + cmp BS.KW.TABLE,x + bne LAB33 + + dex + dey + bpl LAB14 + +LAB20 lda GP.XCNUM + asl + tax + lda BS.KW.PBITS-1,x + sta GP.AllowedBITS+1 + lda BS.KW.PBITS-2,x + sta GP.AllowedBITS + clc + rts + +LAB33 ldy GP.XLEN + dec GP.XCNUM + ldx GP.XCNUM + bne LAB08 + + dec GP.XCNUM + sec + jmp GP.EXTRNCMD + +BS.TMPBUF3Reset ldy #$00 + sty BS.TMPBUF4 + sty BS.TMPBUF4+1 + sty BS.TMPBUF4+2 + rts + +BS.KW.APPEND lda GP.FITYPE + cmp #$FC + beq BS.KW.02 + + cmp #$06 + beq LABA3 + + cmp #$04 + bne LAB63 + + jmp BS.KW.EXEC + +LAB63 cmp #$FF + beq LAB6F + cmp #$B3 + beq LAB6F + lda #$0D + sec + rts + +LAB6F pha + jsr LB562 + jsr LB36B + lda #$00 + sta GP.ParamA + sta MLI.MEMTABL+19 + sta MLI.MEMTABL+20 + sta MLI.MEMTABL+21 + sta MLI.MEMTABL+22 + lda #$01 + sta MLI.MEMTABL+23 + lda #$20 + sta GP.ParamA+1 + pla + cmp #$FF + bne LABA6 + + sta GP.ParamT + lda #$80 + sta GP.FoundBITS+1 + lda #$05 + sta GP.FoundBITS +LABA3 jmp BS.KW.BRUN + +LABA6 sec + jsr MON.IIGSID + bcs LABA3 + + jmp LB099 + +BS.KW.X05 jsr LA411 + lda AS.HIMEM+1 + sta BS.AS.HIMEMSave + ldx XBBEA + dex + stx AS.HIMEM+1 + jsr LAC22 + ldx BS.AS.HIMEMSave + stx AS.HIMEM+1 + bcs LAC33 + + jsr AS.CLEAR1 + jsr LA480 + lda #$00 + beq LABE6 + +BS.KW.02 lda #$00 + sta GP.IFILACTV + sta AS.ERRNUM + lda GP.FoundBITS + lsr + bcc LABF4 + + jsr LAC1D + bcs LAC33 + + jsr AS.CLEAR1 + +LABE6 sta AS.ERRFLG + jsr LACB6 + jsr BS.SaveCSWKSW + jsr LABF4 + jmp AS.NEXTSTMT + +LABF4 jsr AS.NORMAL + lda #$A3 + sta X9F65 + lda #$FF + sta GP.XCNUM + sta ZP.PROMPT + ldx #$04 + jsr BS.SetState + jmp BS.ERR10 + +BS.KW.RESTORE jsr LAC1D + bcs LAC33 + +BS.ENTRY jsr AS.CLEAR1 + jsr BS.SetState0 + lda #$00 + sta ZP.CH + jmp AS.RESTART1 + +LAC1D jsr LB562 + bcs LAC33 + +LAC22 jsr LAC34 + bcs LAC33 + + sty AS.ARRAYSTART + sty AS.VARSTART + sty AS.ARRAYEND + stx AS.ARRAYSTART+1 + stx AS.VARSTART+1 + stx AS.ARRAYEND+1 + +LAC33 rts + +LAC34 lda #$01 + ldx #$FC + jsr BS.CheckFTypeXAccessA + bcs LAC33 + + lda #MLI.C.GETEOF + jsr GP.GOSYSTEM + bcs LAC33 + + lda AS.PGRMSTART + sta GP.MLIRW.DATAPTR + adc GP.SBUFADR + sta GP.ParamA + lda AS.PGRMSTART+1 + sta GP.MLIRW.DATAPTR+1 + adc GP.SBUFADR+1 + sta GP.ParamA+1 + bcs LAC5E + + cmp AS.HIMEM+1 + +LAC5E lda #$0E + bcs LAC33 + + ldx GP.SBUFADR + ldy GP.SBUFADR+1 + jsr BS.ReadXYBytes + bcs LAC33 + + jsr BS.FileClose + bcs LAC33 + + jsr LAC80 + ldx GP.ParamA+1 + ldy GP.ParamA + stx AS.PGRMEND+1 + sty AS.PGRMEND + rts + +LAC80 sec + lda AS.PGRMSTART + sbc GP.FIAUXTYPE + sta ZP.A1L + lda AS.PGRMSTART+1 + sbc GP.FIAUXTYPE+1 + sta ZP.A1H + ora ZP.A1L + clc + beq LACD9 + + ldx AS.PGRMSTART + lda AS.PGRMSTART+1 + +LAC98 stx ZP.PCL + sta ZP.PCH + ldy #$01 + lda (ZP.PCL),y + dey + ora (ZP.PCL),y + beq LACD9 + + lda (ZP.PCL),y + adc ZP.A1L + tax + sta (ZP.PCL),y + iny + lda (ZP.PCL),y + adc ZP.A1H + sta (ZP.PCL),y + clc + bcc LAC98 + +LACB6 lda GP.FoundBITS+1 + and #$08 + clc + beq LACD9 + + lda GP.ParamAT + sta AS.LINNUM + lda GP.ParamAT+1 + sta AS.LINNUM+1 + jsr AS.FINDLINE + clc + lda AS.LOWTR + adc #$FF + sta AS.TXTPTR + lda AS.LOWTR+1 + adc #$FF + sta AS.TXTPTR+1 + clc +LACD9 rts + +BS.KW.STORE bcc LACFE + + lda #$FC + sta GP.ParamT + sta GP.FITYPE + lda #$C3 + sta GP.FIACCESS + lda AS.PGRMSTART + sta GP.CRAUXTYPE + sta GP.FIAUXTYPE + lda AS.PGRMSTART+1 + sta GP.CRAUXTYPE+1 + sta GP.FIAUXTYPE+1 + jsr BS.CreateFileOrDir + bcs LAD47 + +LACFE lda #$02 + ldx #$FC + jsr BS.CheckFTypeXAccessA + bcs LAD47 + + lda AS.PGRMEND + sec + sbc AS.PGRMSTART + tax + sta GP.SBUFADR + lda AS.PGRMEND+1 + sbc AS.PGRMSTART+1 + tay + sta GP.SBUFADR+1 + lda #$00 + sta GP.SBUFADR+2 + lda AS.PGRMSTART + sta GP.MLIRW.DATAPTR + lda AS.PGRMSTART+1 + sta GP.MLIRW.DATAPTR+1 + jsr BS.WriteXYBytes + bcs LAD47 + + lda #MLI.C.SETEOF + jsr GP.GOSYSTEM + bcs LAD47 + + jsr BS.FileClose + bcs LAD47 + + lda AS.PGRMSTART+1 + ldx AS.PGRMSTART + cmp GP.FIAUXTYPE+1 + bne LAD48 + + cpx GP.FIAUXTYPE + clc + bne LAD48 + +LAD47 rts + +LAD48 stx GP.FIAUXTYPE + sta GP.FIAUXTYPE+1 + jmp BS.SetFileInfoNoDate + +BS.KW.CREATE lda #$00 + sta GP.CRAUXTYPE + sta GP.CRAUXTYPE+1 + lda GP.FoundBITS + and #$04 + bne BS.CreateFileOrDir + + lda #$0F + sta GP.ParamT +BS.CreateFileOrDir + lda GP.EXECACTV + asl + lda #$00 + adc GP.OPENCNT + cmp #$08 + bcs LAD8D + + lda GP.ParamT + sta GP.CRTYPE + ldx #$C3 + ldy #$01 + cmp #$0F + bne LAD82 + + ldy #$0D + +LAD82 stx GP.CRACCESS + sty GP.CRSTTYPE + lda #MLI.C.CREATE + jmp GP.GOSYSTEM + +LAD8D lda #$0C + rts + +BS.KW.RENAME lda GP.FoundBITS + lsr + lsr + lda #MLI.C.RENAME + bcs LAD9E + + jmp BS.ERR10 + +BS.KW.DELETE lda #MLI.C.DESTROY + +LAD9E jmp GP.GOSYSTEM + +BS.KW.LOCK jsr BS.GetFileInfo + lda GP.FIACCESS + and #$3C + ora #$01 + sta GP.FIACCESS + jmp BS.SetFileInfo + +BS.KW.UNLOCK jsr BS.GetFileInfo + lda #$C3 + ora GP.FIACCESS + sta GP.FIACCESS + jmp BS.SetFileInfo + +BS.KW.PREFIX lda GP.FoundBITS+1 + and #$04 + sec + bne LADCB + + lda GP.FoundBITS + lsr + +LADCB lda #$C6 + bcs LAD9E + + lda ZP.PROMPT + beq LADF0 + + jsr BS.CROUT + ldx #$00 + +LADD8 cpx BS.CMDBUF.LEN + beq LADE8 + + lda BS.CMDBUF,x + ora #$80 + jsr BS.COUT + inx + bne LADD8 + +LADE8 jsr BS.CROUT + jsr BS.CROUT + clc + rts + +LADF0 lda #$FF + sta GP.PFXACTV + clc + rts +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.b +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BASIC.FX/BASIC.S.C.txt b/BASIC.FX/BASIC.S.C.txt new file mode 100644 index 00000000..31d9b463 --- /dev/null +++ b/BASIC.FX/BASIC.S.C.txt @@ -0,0 +1,1506 @@ +NEW + AUTO 3,1 +*-------------------------------------- +BS.KW.BSAVE bcc LAE2D + + lda GP.FoundBITS+1 + and #$B0 + cmp #$90 + +XAE00 bcc LAE31 + + lda GP.ParamA + sta GP.CRAUXTYPE + sta GP.FIAUXTYPE + lda GP.ParamA+1 + sta GP.CRAUXTYPE+1 + sta GP.FIAUXTYPE+1 + lda #$06 + sta GP.ParamT + sta GP.FITYPE + lda GP.FoundBITS + and #$04 + bne LAE31 + + jsr BS.CreateFileOrDir + bcs LAE33 + + jsr BS.GetFileInfo + bcs LAE33 + +LAE2D lda #$02 + bne LAE44 + +LAE31 lda #$06 + +LAE33 sec + rts + +BS.KW.BRUN jsr BS.KW.BLOAD + bcs LAE33 + + jsr LAE3F + clc + rts + +LAE3F jmp (GP.MLIRW.DATAPTR) + +BS.KW.BLOAD lda #$01 +LAE44 ldx #$06 + jsr BS.CheckFTypeXAccessA + bcs LAE33 + + ldx GP.ParamA + ldy GP.ParamA+1 + lda GP.FoundBITS+1 + bmi LAE66 + + ldx GP.FIAUXTYPE + ldy GP.FIAUXTYPE+1 + lda GP.FoundBITS + and #$04 + bne LAEAB + + lda GP.FoundBITS+1 + +LAE66 stx GP.MLIRW.DATAPTR + sty GP.MLIRW.DATAPTR+1 + bit GP.FoundBITS+1 + bvs LAE80 + + pha + lda GP.FITYPE + cmp #$06 + bne LAE7F + + stx GP.FIAUXTYPE + sty GP.FIAUXTYPE+1 + +LAE7F pla +LAE80 ldx GP.ParamL + ldy GP.ParamL+1 + and #$30 + beq LAEAF + + eor #$30 + beq LAEAB + + and #$10 + beq LAEC5 + + lda GP.ParamE + sec + sbc GP.ParamA + tax + lda GP.ParamE+1 + sbc GP.ParamA+1 + tay + inx + bne LAEA5 + + iny + +LAEA5 bcs LAEC5 + + lda #$02 + sec + rts + +LAEAB lda #$0B + sec + rts + +LAEAF lda #MLI.C.GETEOF + jsr GP.GOSYSTEM + bcs LAEC3 + + ldx GP.SBUFADR + ldy GP.SBUFADR+1 + lda GP.SBUFADR+2 + beq LAEC5 + + lda #$0E +LAEC3 sec + rts + +LAEC5 stx GP.MLIRW.COUNT + sty GP.MLIRW.COUNT+1 + lda GP.FoundBITS+1 + and #$40 + beq LAEF7 + + ldx #$02 +LAED4 lda GP.ParamB,x + sta GP.SBUFADR,x + dex + bpl LAED4 + +LAEDD lda #MLI.C.SETMARK + jsr GP.GOSYSTEM + ldx GP.XCNUM + bcc LAEF7 + + cmp #$02 + bne LAEC3 + + cpx #$0F + bne LAEC3 + + lda #MLI.C.SETEOF + jsr GP.GOSYSTEM + bcc LAEDD + rts + +LAEF7 ldx GP.XCNUM + lda #$CA + cpx #$0F + bne LAF24 + + bit GP.FoundBITS+1 + bvs LAF22 + + lda GP.FoundBITS+1 + and #$30 + beq LAF22 + + lda GP.MLIRW.COUNT + sta GP.SBUFADR + lda GP.MLIRW.COUNT+1 + sta GP.SBUFADR+1 + lda #$00 + sta GP.SBUFADR+2 + lda #MLI.C.SETEOF + jsr GP.GOSYSTEM + +LAF22 lda #MLI.C.WRITE + +LAF24 jsr GP.GOSYSTEM + bcs LAF38 + bit GP.FoundBITS+1 + bvs LAF35 + + cpx #$0F + bne LAF35 + + jsr BS.SetFileInfoNoDate + +LAF35 jmp BS.FileClose + +LAF38 sec + rts + +BS.KW.SAVE bcc LAF4E + + lda #$FD + sta GP.ParamT + sta GP.FITYPE + lda #$C3 + sta GP.FIACCESS + jsr BS.CreateFileOrDir + bcs LAF9C + +LAF4E jsr LA411 + bcs LAF9C + + ldx #$FD + lda #$02 + jsr BS.CheckFTypeXAccessA + bcs LAF95 + + jsr BS.SetupRW5AtBBE4 + jsr BS.WriteXYBytes + bcs LAF95 + + lda XBBE9 + sta GP.MLIRW.DATAPTR + sta GP.FIAUXTYPE + lda XBBEA + sta GP.MLIRW.DATAPTR+1 + sta GP.FIAUXTYPE+1 + ldy XBBEC + ldx XBBEB + jsr BS.WriteXYBytes + bcs LAF95 + + lda #MLI.C.GETMARK + jsr GP.GOSYSTEM + lda #MLI.C.SETEOF + jsr GP.GOSYSTEM + bcs LAF95 + + jsr BS.SetFileInfoNoDate + bcs LAF95 + + jsr BS.FileClose + +LAF95 php + pha + jsr LA480 + pla + plp +LAF9C rts + +BS.SetupRW5AtBBE4 + lda #$E4 + sta GP.MLIRW.DATAPTR + lda #$BB + sta GP.MLIRW.DATAPTR+1 + ldy #$00 + ldx #$05 + rts + +BS.KW.LOAD ldx #$FD + lda #$01 + jsr BS.CheckFTypeXAccessA + bcs LAF9C + + jsr BS.SetupRW5AtBBE4 + jsr BS.ReadXYBytes + bcs LAF9C + + lda GP.FIAUXTYPE + sta XBBE9 + sta GP.MLIRW.DATAPTR + lda AS.HIMEM+1 + sec + sbc BS.BAS.HDR+4 + clc + adc GP.FIAUXTYPE+1 + sta GP.MLIRW.DATAPTR+1 + sta XBBEA + cmp AS.PGRMEND+1 + bcc LAFF3 + + beq LAFF3 + + lda #$00 + sbc XBBE9 + tax + lda AS.HIMEM+1 + sbc XBBEA + tay + jsr BS.ReadXYBytes + bcs LAF9C + + jsr BS.FileClose + jmp LAF95 + +LAFF3 lda #$0E + sec + rts + +BS.FileClose lda #MLI.C.CLOSE + bne LB007 + +BS.ReadXYBytes lda #MLI.C.READ + bne LB001 + +BS.WriteXYBytes lda #MLI.C.WRITE +LB001 sty GP.MLIRW.COUNT+1 + stx GP.MLIRW.COUNT + +LB007 jmp GP.GOSYSTEM + +BS.KW.IN lda #$00 + sta BS.GetCharSep + beq LB018 + +BS.KW.PR lda #$02 + sta BS.GetCharSep + lda #$08 +LB018 ora GP.ParamINPR + asl + tax + lda GP.FoundBITS + and #$40 + beq LB035 + + lda GP.FoundBITS+1 + bmi LB04A + + lda GP.OUTVECT0,x + sta GP.ParamA + lda GP.OUTVECT0+1,x + sta GP.ParamA+1 + +LB035 jsr LB05C + bcs LB049 + + ldy BS.GetCharSep + lda GP.ParamA + sta ZP.CSW,y + lda GP.ParamA+1 + sta ZP.CSW+1,y +LB049 rts + +LB04A jsr LB05C + bcs LB05B + + lda GP.ParamA+1 + sta GP.OUTVECT0+1,x + lda GP.ParamA + sta GP.OUTVECT0,x +LB05B rts + +LB05C lda GP.ParamA + sta ZP.PCL + lda GP.ParamA+1 + sta ZP.PCH + ldy #$00 + cmp #$C0 + bcc LB081 + + lda $CFFF + sty ZP.A1L + lda (ZP.PCL),y + cmp #$FF + beq LB087 + +LB077 cmp (ZP.PCL),y + bne LB087 + + dec ZP.A1L + bne LB077 + +LB07F clc + rts + +LB081 lda (ZP.PCL),y + cmp #$D8 + beq LB07F + +LB087 lda #$03 + sec + rts + +BS.KW.BYE jsr LB562 + jsr LB36B + lda #$65 + jsr MLI + .DA #MLI.C.QUIT + .DA GP.MLIRW + +LB099 jsr MLI + .DA #MLI.C.QUIT + .DA BS.MLIQUIT2.Param +BS.MLIQUIT2.Param + .DA #4 + .DA #$EE + .DA MLI.PATHBUF + .DA #0 + .DA 0 + +BS.KW.CAT lda #$27 + bne LB0AC + +BS.KW.CATALOG lda #$4F + +LB0AC sta BS.CATWIDTH + lda GP.FoundBITS + and #$05 + lsr + bne LB0BA + + sta GP.ParamT + +LB0BA bcs LB0C1 + + jsr BS.GetFileInfo + bcs LB127 + +LB0C1 jsr LB1BA + bcs LB127 + + jsr BS.CROUT + jsr LB128 + jsr BS.LINEBUFOUT + jsr BS.CROUT + jsr BS.LINEBUFCLR80 + ldx #$10 + jsr BS.PRINTERRMSGX + jsr BS.LINEBUFOUT + jsr BS.CROUT + lda XBC14 + ora XBC15 + nop + nop + +LB0E8 jsr LB241 + bcs LB113 + + lda GP.ParamT + beq LB0F7 + + cmp DIRENTBUF.TYPE + bne LB0FD + +LB0F7 jsr LA4D2 + jsr BS.LINEBUFOUT + +LB0FD lda IO.KBD + cmp #$83 + bne LB10E + + lda GP.STATE + bne LB113 + + bit IO.KSTROBE + bcs LB113 + +LB10E nop + lda #$FF + bne LB0E8 + +LB113 jsr BS.FileClose + bcs LB127 + + jsr BS.CROUT + jsr LB157 + bcs LB127 + + jsr BS.LINEBUFOUT + jsr BS.CROUT + + clc +LB127 rts + +LB128 jsr BS.LINEBUFCLR80 + ldx #$01 + ldy DIRENTBUF.STNL + lda #$AF + cpy #$F0 + bcc LB13A + + sta IO.LINEBUF,x + inx + +LB13A tya + and #$0F + sta IO.LINEBUF + ldy #$05 + +LB142 lda DIRENTBUF,y + ora #$80 + sta IO.LINEBUF,x + iny + inx + dec IO.LINEBUF + bne LB142 + + lda #$A2 + sta IO.LINEBUF + rts + +LB157 lda #$18 + sta GP.SBUFADR + lda #$BC + sta GP.SBUFADR+1 + lda MLI.DEVNUM + sta GP.MLIMRKEOFBUF.REFNUM + lda #MLI.C.ONLINE + jsr GP.GOSYSTEM + bcs LB127 + + lda BS.CMDBUF + and #$0F + tax + inx + stx BS.CMDBUF.LEN + lda #$AF + sta BS.CMDBUF + jsr BS.GetFileInfo + bcs LB127 + + jsr BS.LINEBUFCLR80 + ldx #$36 + jsr BS.PRINTERRMSGX + jsr BS.TMPBUF3Reset + lda GP.FIAUXTYPE + ldx GP.FIAUXTYPE+1 + ldy #$3D + jsr BS.AXDEC2LINEBUFY + lda GP.FIBLOKS + ldx GP.FIBLOKS+1 + ldy #$26 + jsr BS.AXDEC2LINEBUFY + lda GP.FIAUXTYPE + sec + sbc GP.FIBLOKS + pha + lda GP.FIAUXTYPE+1 + sbc GP.FIBLOKS+1 + tax + pla + ldy #$10 + jsr BS.AXDEC2LINEBUFY + clc + rts + +LB1BA lda #$01 + ldx #$0F + ldy GP.STTYPE + cpy #$0F + bne LB1C8 + + stx GP.FITYPE + +LB1C8 jsr LB210 + bcs LB203 + +BS.ReadDirEnt lda #$59 + sta GP.MLIRW.DATAPTR + lda #$02 + sta GP.MLIRW.DATAPTR+1 + lda #$2B + sta GP.MLIRW.COUNT + lda #$00 + sta GP.MLIRW.COUNT+1 + lda #MLI.C.READ + jsr GP.GOSYSTEM + bcs LB203 + + ldx #$03 + +LB1EA lda $27C,x + sta XBC12,x + dex + bpl LB1EA + + sta GP.MLIRW.COUNT + lda #$01 + sta XBC16 + lda #$00 + sta GP.SBUFADR+1 + sta GP.SBUFADR+2 +LB203 rts + +BS.CheckFTypeXAccessA + pha + lda GP.FoundBITS + and #$04 + beq LB20F + + ldx GP.ParamT + +LB20F pla + +LB210 cpx GP.FITYPE + bne LB239 + + and GP.FIACCESS + beq LB23D + + lda XBBE3 + sta GP.OSYSBUF+1 + lda #$0F + sta MLI.LEVEL + lda #MLI.C.OPEN + jsr GP.GOSYSTEM + bcs LB238 + + lda GP.OREFNUM + sta GP.MLIRW.REFNUM + sta GP.MLICF.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + +LB238 rts + +LB239 lda #$0D + sec + rts + +LB23D lda #$0A + sec + rts + +LB241 lda GP.SBUFADR+1 + and #$FE + sta GP.SBUFADR+1 + ldy XBC16 + lda #$00 + cpy XBC13 + bcc LB25D + + tay + sty XBC16 + inc GP.SBUFADR+1 + +LB25A inc GP.SBUFADR+1 + +LB25D dey + clc + bmi LB268 + + adc XBC12 + bcc LB25D + + bcs LB25A + +LB268 adc #$04 + sta GP.SBUFADR + lda #MLI.C.SETMARK + jsr GP.GOSYSTEM + bcs LB28D + + lda #MLI.C.READ + jsr GP.GOSYSTEM + bcs LB28D + + inc XBC16 + lda DIRENTBUF + and #$F0 + beq LB241 + + dec XBC14 + bne LB28D + + dec XBC15 + +LB28D rts +BS.JMP.XTRNADDR jmp (GP.XTRNADDR) + +BS.KW.EXEC jsr BS.CheckFilename + bcs LB2C0 + + bit GP.EXECFILE + bpl LB2BC + + sta GP.MLIMRKEOFBUF.REFNUM + lda #$00 + sta GP.SBUFADR + sta GP.SBUFADR+1 + sta GP.SBUFADR+2 + lda #MLI.C.SETMARK + jsr GP.GOSYSTEM + bcs LB2B5 + + lda GP.MLIMRKEOFBUF.REFNUM + bne LB333 + +LB2B5 pha + jsr LB36B + pla + sec + rts + +LB2BC lda #$14 + sec + rts + +LB2C0 bit GP.EXECACTV + bpl LB2CA + + jsr LB36B + bcs LB2D3 + +LB2CA lda GP.FITYPE + cmp #$04 + beq LB2D5 + + lda #$0D +LB2D3 sec + rts + +LB2D5 jsr LA1F9 + bcs LB2D3 + + lda #$00 + sta GP.SBUFADR + lda XBBE3 + sta GP.SBUFADR+1 + ldx GP.OPENCNT + beq LB30E + + tay + txa + asl + asl + adc XBBE3 + pha +LB2F2 cmp XBBEE,x + beq LB2FB + + dex + bne LB2F2 + + brk + +LB2FB tya + sta XBBEE,x + lda XBBF6,x + sta GP.MLIMRKEOFBUF.REFNUM + lda #MLI.C.SETBUF + jsr GP.GOSYSTEM + bcc LB30D + + brk + +LB30D pla +LB30E sta XBBE3 + sta GP.OSYSBUF+1 + lda #$00 + sta MLI.LEVEL + lda #MLI.C.OPEN + jsr GP.GOSYSTEM + bcc LB327 + + pha + jsr LA250 + pla + sec + rts + +LB327 ldx GP.OSYSBUF+1 + stx XBBF6 + lda GP.OREFNUM + sta XBBFE +LB333 sta GP.MLIRW.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + sta GP.NEWLREF + ldx GP.FIAUXTYPE + stx GP.ParamL + ldx GP.FIAUXTYPE+1 + stx GP.ParamL+1 + jsr LB45B + lda #$7F + sta GP.NLINEMASK + lda #MLI.C.NEWLINE + jsr GP.GOSYSTEM + lda GP.FoundBITS+1 + and #$03 + beq LB364 + + jsr LB592 + bcc LB364 + + jmp LB2B5 + +LB364 lda #$FF + sta GP.EXECACTV + clc + rts + +LB36B lda GP.EXECACTV + bpl LB37B + + sta GP.EXECFILE + ldx #$08 + lda XBBF6,x + jsr LB515 + +LB37B rts + +BS.KW.X10 bcs LB3B7 + + lda GP.FoundBITS + and #$01 + bne LB38D + + ldx #$00 + jsr BS.PRINTERRX + jsr BS.CROUT + +LB38D clc + rts + + lda #$00 + beq LB39F + +BS.KW.FLUSH lda GP.FoundBITS + and #$01 + beq LB39F + + jsr BS.CheckFilename + bcs LB3A7 + +LB39F sta GP.MLICF.REFNUM + lda #MLI.C.FLUSH + jsr GP.GOSYSTEM + +LB3A7 rts + +BS.KW.03 php + jsr BS.CheckFilename + bcs LB3BB + + plp + lda #$14 + sec + rts + +LB3B3 lda #$0D + sec + rts + +LB3B7 lda #$06 +LB3B9 sec + rts + +LB3BB plp + ldx #$00 + ldy #$00 + lda GP.FoundBITS+1 + and #$10 + bne LB3CD + + stx GP.ParamL+1 + sty GP.ParamL + +LB3CD lda GP.FoundBITS + and #$04 + eor #$04 + beq LB3DB + + lda #$04 + sta GP.ParamT + +LB3DB bcc LB3FE + + beq LB3B7 + + sta GP.FITYPE + lda #$C3 + sta GP.FIACCESS + ldx GP.ParamL+1 + ldy GP.ParamL + stx GP.CRAUXTYPE+1 + stx GP.FIAUXTYPE+1 + sty GP.CRAUXTYPE + sty GP.FIAUXTYPE + jsr BS.CreateFileOrDir + bcs LB3B9 + +LB3FE lda GP.FITYPE + cmp GP.ParamT + bne LB3B3 + + cmp #$04 + bne LB41D + + ldx GP.FIAUXTYPE+1 + ldy GP.FIAUXTYPE + lda GP.FoundBITS+1 + and #$10 + bne LB41D + + stx GP.ParamL+1 + sty GP.ParamL + +LB41D jsr LA1F9 + bcs LB3B9 + + lda XBBE3 + sta GP.OSYSBUF+1 + lda #$07 + sta MLI.LEVEL + lda #MLI.C.OPEN + jsr GP.GOSYSTEM + bcc LB43B + + pha + jsr LA250 + pla + sec + rts + +LB43B lda GP.FITYPE + cmp #$0F + beq LB443 + + clc + +LB443 lda #$00 + ror + sta GP.DIRFLG + ldx GP.OPENCNT + lda XBBE3 + sta XBBEF,x + lda GP.OREFNUM + sta XBBF7,x + inc GP.OPENCNT +LB45B asl + asl + asl + asl + asl + tax + lda MLI.PATHBUF + ora GP.DIRFLG + sta XBC59,x + and #$7F + tay + cmp #$1E + bcc LB473 + + lda #$1D + +LB473 sta ZP.PCL + lda GP.ParamL + sta XBC5A,x + lda GP.ParamL+1 + sta XBC5B,x + +LB481 inx + lda MLI.PATHBUF,y + sta XBC5B,x + dey + dec ZP.PCL + bne LB481 + +BS.KW.X07 clc + rts + +BS.CheckFilename + lda GP.FoundBITS + and #$01 + bne LB49A + + lda #$10 + sec + rts + +LB49A ldx GP.OPENCNT + beq LB4B8 + + stx GP.EXECFILE + +LB4A2 stx ZP.PCH + lda XBBF6,x + jsr LB4D2 + bne LB4B3 + + ldx ZP.PCH + +LB4AE lda XBBF6,x +LB4B1 clc + rts + +LB4B3 ldx ZP.PCH + dex + bne LB4A2 + +LB4B8 lda GP.EXECACTV + bpl LB4CE + + lda XBBFE + jsr LB4D2 + bne LB4CE + + lda #$FF + sta GP.EXECFILE + ldx #$08 + bne LB4AE + +LB4CE lda #$12 + sec + rts + +LB4D2 asl + asl + asl + asl + asl + tax + lda XBC59,x + sta GP.DIRFLG + and #$7F + cmp MLI.PATHBUF + bne LB508 + + tay + cmp #$1E + bcc LB4EC + + lda #$1D + +LB4EC sta ZP.PCL + lda XBC5A,x + sta XBBFF + lda XBC5B,x + sta XBC00 + +LB4FA inx + lda MLI.PATHBUF,y + cmp XBC5B,x + bne LB508 + + dey + dec ZP.PCL + bne LB4FA + +LB508 rts + +BS.KW.X06 lda GP.FoundBITS + and #$01 + beq LB562 + + jsr BS.CheckFilename + bcs LB4B1 + +LB515 sta GP.MLICF.REFNUM + lda XBBEE,x + sta XBBE3 + bit GP.EXECFILE + bmi LB53F + + ldy GP.OPENCNT + pha + lda XBBEE,y + sta XBBEE,x + pla + sta XBBEE,y + lda XBBF6,x + pha + lda XBBF6,y + sta XBBF6,x + pla + sta XBBF6,y + +LB53F lda #$00 + sta MLI.LEVEL + lda #MLI.C.CLOSE + jsr GP.GOSYSTEM + bcs LB572 + + jsr LA250 + bit GP.EXECFILE + bpl LB55E + + pha + lda #$00 + sta GP.EXECACTV + sta GP.EXECFILE + pla + rts + +LB55E dec GP.OPENCNT + rts + +LB562 ldx GP.OPENCNT + beq LB573 + + stx GP.EXECFILE + lda XBBF6,x + jsr LB515 + bcc LB562 + +LB572 rts + +LB573 lda #$00 + sta GP.MLICF.REFNUM + lda #$07 + sta MLI.LEVEL + lda #MLI.C.CLOSE + jmp GP.GOSYSTEM + +BS.KW.CLOSE jsr BS.CheckFilename + bcs LB5EF + + sta GP.MLIRW.REFNUM + sta GP.NEWLREF + bit GP.DIRFLG + bmi LB5F0 + +LB592 lda GP.FoundBITS+1 + and #$03 + beq LB5ED + + cmp #$03 + beq LB5ED + + and #$01 + beq LB5AD + + lda GP.ParamR + sta GP.ParamF + lda GP.ParamR+1 + sta GP.ParamF+1 + +LB5AD lda #$EF + sta GP.MLIRW.COUNT + lda #$00 + sta GP.MLIRW.COUNT+1 + sta GP.MLIRW.DATAPTR + lda #$02 + sta GP.MLIRW.DATAPTR+1 + lda #$7F + sta GP.NLINEMASK + lda #MLI.C.NEWLINE + jsr GP.GOSYSTEM + bcs LB5EF + +LB5CB lda GP.ParamF + ora GP.ParamF+1 + clc + beq LB5F0 + + lda #MLI.C.READ + jsr GP.GOSYSTEM + bcs LB5EF + + lda GP.ParamF + sbc #$00 + sta GP.ParamF + lda GP.ParamF+1 + sbc #$00 + sta GP.ParamF+1 + bcs LB5CB + +LB5ED lda #$0B +LB5EF sec +LB5F0 rts + +LB5F1 lda XBBFF + sta BS.TMPBUF4 + lda XBC00 + sta BS.TMPBUF4+1 + lda #$00 + sta BS.TMPBUF4+2 + sta BS.TMPBUF4+3 + sta GP.SBUFADR + sta GP.SBUFADR+1 + sta GP.SBUFADR+2 +LB60E lsr GP.ParamR+1 + ror GP.ParamR + ldx #$00 + bcc LB62F + + clc + +LB619 lda BS.TMPBUF4,x + adc GP.SBUFADR,x + sta GP.SBUFADR,x + inx + txa + eor #$03 + bne LB619 + + bcs LB642 + + ldx BS.TMPBUF4+3 + bne LB642 + +LB62F rol BS.TMPBUF4,x + inx + txa + eor #$04 + bne LB62F + + lda GP.ParamR + ora GP.ParamR+1 + bne LB60E + + clc + rts + +LB642 lda #$02 + sec + rts + +BS.KW.X04 jsr BS.CheckFilename + bcs LB69B + + sta GP.MLIRW.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + sta GP.NEWLREF + bit GP.DIRFLG + bmi LB69C + + jsr LB6D0 + bcs LB69B + + ldx #$7F + ldy #$EF + lda GP.FoundBITS+1 + and #$10 + beq LB67C + + ldy GP.ParamL + ldx GP.ParamL+1 + bne LB6CB + + cpy #$EF + bcs LB6CB + + lda #$22 + sta IO.LINEBUF + + lda #$01 + +LB67C sta GP.MLIRW.DATAPTR + sty GP.MLIRW.COUNT + stx GP.NLINEMASK + lda #$02 + sta GP.MLIRW.DATAPTR+1 + lda #$00 + sta GP.MLIRW.COUNT+1 + lda #MLI.C.NEWLINE + jsr GP.GOSYSTEM + bcs LB69B + +LB696 lda #$FF + sta GP.IFILACTV +LB69B rts + +LB69C lda #$59 + sta GP.MLIRW.DATAPTR + lda #$02 + sta GP.MLIRW.DATAPTR+1 + lda #$01 + sta GP.CATFLAG + lda GP.FoundBITS+1 + and #$01 + clc + beq LB696 + + lda #$00 + sta GP.SBUFADR + sta GP.SBUFADR+1 + sta GP.SBUFADR+2 + lda #MLI.C.SETMARK + jsr GP.GOSYSTEM + bcs LB6CA + + lda #$FF + sta GP.IFILACTV + +LB6CA rts + +LB6CB lda #$02 + tax + sec + rts + +LB6D0 lda GP.FoundBITS+1 + and #$43 + beq LB719 + + and #$01 + beq LB6E5 + + jsr LB5F1 + bcs LB6CB + +LB6E0 jsr LB712 + bcs LB71A +LB6E5 + lda GP.FoundBITS+1 + and #$02 + beq LB6F1 + + jsr LB5AD + bcs LB71A + +LB6F1 lda GP.FoundBITS+1 + and #$40 + beq LB719 + + lda #MLI.C.GETMARK + jsr GP.GOSYSTEM + bcs LB71A + + ldx #$00 + ldy #$02 + +LB703 lda GP.ParamB,x + adc GP.SBUFADR,x + sta GP.SBUFADR,x + inx + dey + bpl LB703 + + bcs LB6CB + +LB712 lda #MLI.C.SETMARK + jsr GP.GOSYSTEM + bcs LB71A + +LB719 clc +LB71A ldx #$00 + rts + +BS.KW.X08 jsr BS.CheckFilename + bcs LB732 + + sta GP.MLIRW.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + sta GP.NEWLREF + bit GP.DIRFLG + bpl LB734 + + lda #$0A + +LB732 sec + rts + +LB734 lda #$00 + sta GP.MLIRW.DATAPTR + lda #$02 + sta GP.MLIRW.DATAPTR+1 + jsr LB6D0 + bcc LB757 + + cmp #$02 + bne LB732 + + cpx #$02 + beq LB732 + +LB74B lda #MLI.C.SETEOF + jsr GP.GOSYSTEM + bcs LB732 + + jsr LB6E0 + bcs LB732 + +LB757 lda AS.HIMEM + sta GP.MLIRW.DATAPTR + lda AS.HIMEM+1 + sta GP.MLIRW.DATAPTR+1 + lda #$FF + sta GP.OFILACTV + clc + rts + +BS.KW.X09 php + jsr BS.CheckFilename + bcc LB77A + + plp + jsr BS.KW.03 + bcs LB788 + + lda GP.OREFNUM + bne LB77B + + brk + +LB77A plp + +LB77B sta GP.MLIRW.REFNUM + sta GP.MLIMRKEOFBUF.REFNUM + bit GP.DIRFLG + bpl LB78A + + lda #$0A + +LB788 sec + rts + +LB78A ldx GP.ParamL + ldy GP.ParamL+1 + lda GP.FoundBITS+1 + and #$10 + bne LB79D + + ldx GP.FIAUXTYPE + ldy GP.FIAUXTYPE+1 +LB79D txa + pha + lda GP.MLIRW.REFNUM + lsr + ror + ror + ror + tax + pla + sta XBC5A,x + sta XBBFF + tya + sta XBC5B,x + sta XBC00 + lda #MLI.C.GETEOF + jsr GP.GOSYSTEM + bcs LB788 + + lda XBC00 + bne LB7C8 + + lda XBBFF + cmp #$02 + bcc LB7CD + +LB7C8 jsr LB7D0 + bcs LB788 + +LB7CD jmp LB74B + +LB7D0 ldx #$03 +LB7D2 lda GP.MLIMRKEOFBUF.REFNUM,x + sta XBC09,x + dex + bne LB7D2 + + stx BS.TMPBUF4+3 + stx XBC0E + ldy #$18 + +LB7E3 jsr BS.TMPBUF3x2 + rol BS.TMPBUF4+3 + rol XBC0E + sec + lda BS.TMPBUF4+3 + sbc XBBFF + tax + lda XBC0E + sbc XBC00 + bcc LB805 + + stx BS.TMPBUF4+3 + sta XBC0E + inc BS.TMPBUF4 + +LB805 dey + bne LB7E3 + + lda BS.TMPBUF4+3 + ora XBC0E + clc + beq LB839 + + lda XBBFF + sec + sbc BS.TMPBUF4+3 + tax + lda XBC00 + sbc XBC0E + tay + txa + clc + adc GP.SBUFADR + sta GP.SBUFADR + tya + adc GP.SBUFADR+1 + sta GP.SBUFADR+1 + lda GP.SBUFADR+2 + adc #$00 + sta GP.SBUFADR+2 + lda #$02 + +LB839 rts + +BS.GetFileInfo lda #$0A + sta GP.SSGINFO + lda #MLI.C.GETFILEINFO + bne LB858 + +BS.SetFileInfoNoDate + lda #$00 + sta GP.FIMDATE + sta GP.FIMDATE+1 + sta GP.FICDATE + sta GP.FICDATE+1 + +BS.SetFileInfo lda #$07 + sta GP.SSGINFO + lda #MLI.C.SETFILEINFO + +LB858 jmp GP.GOSYSTEM + +BS.JMP.GP.VSYSO jmp (GP.VSYSO) +BS.JMP.GP.VSYSI jmp (GP.VSYSI) +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.c +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BASIC.FX/BASIC.S.D.txt b/BASIC.FX/BASIC.S.D.txt new file mode 100644 index 00000000..6d242a48 --- /dev/null +++ b/BASIC.FX/BASIC.S.D.txt @@ -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 -"" +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 diff --git a/BASIC.FX/BASIC.S.GP..txt b/BASIC.FX/BASIC.S.GP..txt new file mode 100644 index 00000000..37fe2087 --- /dev/null +++ b/BASIC.FX/BASIC.S.GP..txt @@ -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 diff --git a/BASIC.FX/BASIC.S.LDR.txt b/BASIC.FX/BASIC.S.LDR.txt new file mode 100644 index 00000000..c3a2a70c --- /dev/null +++ b/BASIC.FX/BASIC.S.LDR.txt @@ -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 diff --git a/BASIC.FX/BASIC.S.txt b/BASIC.FX/BASIC.S.txt new file mode 100644 index 00000000..4154900a --- /dev/null +++ b/BASIC.FX/BASIC.S.txt @@ -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 diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index 57540cc3..ab2dce82 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -232,7 +232,9 @@ CC.F.CallRetV sec lda #0 Expected T/Q = 0 if VARIADIC tay -.4 jsr CC.EXP.Eval +.4 and #$F0 CONST+VOLATILE+FUNC+FASTCALL + + jsr CC.EXP.Eval bcs .93 jsr CC.SYM.GetYASizeOfInAXC diff --git a/BIN/CHAUX.S.txt b/BIN/CHAUX.S.txt new file mode 100644 index 00000000..69deebae --- /dev/null +++ b/BIN/CHAUX.S.txt @@ -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 diff --git a/BIN/IRC.S.txt b/BIN/IRC.S.txt index 1c0f7fa4..1e24b475 100644 --- a/BIN/IRC.S.txt +++ b/BIN/IRC.S.txt @@ -4,12 +4,17 @@ NEW .OP 65C02 .OR $2000 .TF bin/irc +*-------------------------------------- +TLS .EQ 0 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i .INB inc/eth.i .INB inc/libtcpip.i + .DO TLS=1 + .INB inc/net.tls.i + .FIN *-------------------------------------- TIMEOUT.MAX .EQ 250 25 sec. MSGSIZE .EQ 4096 @@ -21,12 +26,11 @@ TEXTMAX .EQ 240 .OR ZPBIN ZS.START ZPPtr1 .BS 2 +ZPPtr2 .BS 2 bEscMode .BS 1 bJoin .BS 1 TimeOut .BS 1 hSocket .BS 1 -TextPtr .BS 1 -TextLen .BS 1 ZPRespPtr .BS 2 ZPMsg .BS 2 @@ -42,6 +46,9 @@ BufPtr .BS 1 BufLen .BS 1 ZPBufPtr .BS 2 +TextPtr .BS 1 +TextLen .BS 1 + bPendingMsg .BS 1 ZS.END .ED @@ -111,6 +118,12 @@ J.ESC .DA CS.RUN.CHARIN.LEFT .DA CS.RUN.CHARIN.DOWN .DA CS.RUN.CHARIN.UP .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 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP @@ -128,11 +141,16 @@ CS.RUN jsr CS.RUN.CheckTCPIP jsr CS.RUN.CheckArgs bcs CS.INIT.RTS + jsr CS.RUN.GetBuffers + bcs CS.INIT.RTS + jsr CS.RUN.Connect bcs CS.INIT.RTS - jsr CS.RUN.GetBuffers + .DO TLS=1 + jsr CS.RUN.TLS bcs CS.INIT.RTS + .FIN jsr CS.RUN.SCRSETUP bcs CS.INIT.RTS @@ -263,6 +281,41 @@ CS.RUN.CheckArgs >SYSCALL PrintF 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 >PUSHBI 0 no protocol >LIBCALL hLIBTCPIP,LIBTCPIP.Socket @@ -300,41 +353,64 @@ CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM >SYSCALL PrintF rts *-------------------------------------- -CS.RUN.GetBuffers - >LDYAI 256 - >SYSCALL GetMem + .DO TLS=1 +CS.RUN.TLS jsr CS.RUN.TLS.init + + >PUSHB hSocket + >PUSHW L.TLS.CHELLO + >PUSHWI TLS.CHELLO.L + >LIBCALL hLIBTCPIP,LIBTCPIP.Write bcs .9 - >STYA ZPBufPtr - txa - >STA.G hBufBuf +.1 >SLEEP - >LDYAI MSGSIZE - >SYSCALL GetMem + lda TimeOut + bne .1 + + >PUSHB hSocket + >PUSHW ZPBufPtr + >PUSHWI 2048 + >LIBCALL hLIBTCPIP,LIBTCPIP.Read 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 - + >STYA ZPPtr2 RCVD len + >PUSHW L.MSG.TLS.1 + >PUSHW ZPPtr2 + >PUSHBI 2 + >SYSCALL PrintF + + sec + rts + +.8 clc .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 jsr CS.RUN.STATUSMSG @@ -363,7 +439,7 @@ CS.RUN.Register >LDYA L.MSG.REGISTER *-------------------------------------- CS.RUN.GetMsg bit bPendingMsg bmi .10 - + >LDYA ZPMsg >STYA ZPMsgPtr @@ -391,7 +467,7 @@ CS.RUN.GetMsg bit bPendingMsg sta (ZPMsgPtr) inc ZPMsgPtr bne .3 - + inc ZPMsgPtr+1 .3 inc BufPtr @@ -593,7 +669,7 @@ CS.RUN.CMD.PING >PUSHW ZPRespPtr *-------------------------------------- CS.RUN.CMD.JOIN sec ror bJoin - + >LDYA L.MSG.NULL jsr CS.RUN.STATUSPDATE *-------------------------------------- @@ -732,8 +808,7 @@ CS.RUN.TXTCLR.RTS CS.RUN.TOPUPDATE >PUSHW ZPOutputBufPtr >PUSHW L.MSG.TOPBAR - >PUSHB #K.VER - >PUSHB /K.VER + >PUSHW A2osX.KVER lda #1 >SYSCALL ArgV @@ -978,10 +1053,10 @@ CS.DOEVENT lda (pEvent) *-------------------------------------- CS.QUIT ldy #hOutputBuf jsr .7 - + ldy #hRespBuf jsr .7 - + ldy #hMsgBuf jsr .7 @@ -1003,9 +1078,9 @@ CS.QUIT ldy #hOutputBuf .7 lda (pData),y beq .8 - + >SYSCALL FreeMem -.8 rts +.8 rts *-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip" @@ -1017,6 +1092,10 @@ MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d:%D (%s)..." MSG.SKTKO .AZ "Failed to Open Socket." MSG.SKTOK .AZ "Connected\r\n(Exit key is Ctrl-T)\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.JOIN .AZ "Joining Channel..." 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 4 S.SOCKADDR.ADDR .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 .OR 0 diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index 6e270fa3..3fdb8cbe 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -55,7 +55,7 @@ Dev.Detect >STYA ARGS bne .2 lda L91C96.BSR+1,x - cmp #DEVID + cmp #L91C96.DEVID beq .3 .2 dec FD.DEV.NAME+3 diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index 5dba29a4..f59e5197 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -1,16 +1,18 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF .OP 65C02 .OR $2000 .TF drv/uther2.ai.drv *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i + .INB inc/kernel.i .INB inc/mli.e.i .INB inc/nic.i .INB inc/nic.w5100.i .INB inc/eth.i + .INB inc/net.tcpip.i .INB inc/libtcpip.i *-------------------------------------- ZPArgPtr .EQ ZPBIN @@ -79,7 +81,7 @@ Dev.Detect >STYA ARGS cmp /2000 bne .2 - lda W5100.DR,x Get RTR LO + lda W5100.DR,x Get RTR LO cmp #2000 beq .3 @@ -146,7 +148,7 @@ Dev.ParseArgs >LDYA ARGS .1 >PUSHW ZPArgPtr >PUSHW L.SSCANF.MAC - + ldx #0 .2 >PUSHW L.MAC0,x @@ -154,9 +156,9 @@ Dev.ParseArgs >LDYA ARGS inx cpx #12 bne .2 - + >PUSHBI 12 6 x byte PTRs - + >SYSCALL SScanF bcc .8 @@ -248,7 +250,7 @@ STATUS.9 lda #MLI.E.BADCTL rts *-------------------------------------- CONTROL jsr GET.IOCTLBUFPTR - + ldy #S.IOCTL.C lda (ZPIOCTL),y cmp #S.IOCTL.C.SETDCB @@ -260,7 +262,7 @@ CONTROL jsr GET.IOCTLBUFPTR sta DCB,y dey bpl .2 - + bra OPEN.I *-------------------------------------- OPEN lda #S.DIB.S.OPENED @@ -278,6 +280,15 @@ OPEN.I jsr CLOSE lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND 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 ldy #0 @@ -298,16 +309,7 @@ OPEN.I jsr CLOSE cpy #4 bne .3 -* >AR.SELECT SHAR - ldy #0 - -.1 lda DCB+S.DCB.NIC.MAC,y - sta W5100.DR,x - iny - cpy #6 - bne .1 - -* >AR.SELECT SIPR + >AR.SELECT SIPR ldy #0 @@ -316,7 +318,7 @@ OPEN.I jsr CLOSE iny cpy #4 bne .4 - + >AR.SELECT RMSR lda #%01010101 RAW=2k,ICMP=2k,UDP=2k,TCP=2k sta W5100.DR,x ...for Socket RX Buffers @@ -329,26 +331,26 @@ OPEN.I jsr CLOSE >AR.SELECT S0.CR lda #W5100.AR.Sn.CR.OPEN sta W5100.DR,x - +*-------------------------------------- lda /W5100.AR.S1.MR sta Sn.IO - + ldy #S.IP.PROTOCOL.ICMP jsr OPEN.SnY - + inc Sn.IO - + ldy #S.IP.PROTOCOL.UDP jsr OPEN.SnY - + inc Sn.IO - + ldy #S.IP.PROTOCOL.TCP jsr OPEN.SnY - + lda #S.DIB.S.OPENED tsb DIB+S.DIB.S - + clc rts *-------------------------------------- @@ -361,11 +363,11 @@ OPEN.SnY >AR.Sn.SELECT S0.MR sta W5100.DR,x * >AR.Sn.SELECT Sn.TOS - stz W5100.DR,x +* stz W5100.DR,x * >AR.Sn.SELECT Sn.TTL - lda #K.IP.TTL - sta W5100.DR,x +* lda #K.IP.TTL +* sta W5100.DR,x >AR.Sn.SELECT S0.CR lda #W5100.AR.Sn.CR.OPEN @@ -386,10 +388,10 @@ CLOSE ldx DEVSLOTx0 .2 eor $C019 bpl .2 - + lda #S.DIB.S.OPENED trb DIB+S.DIB.S - + clc rts *-------------------------------------- @@ -400,179 +402,33 @@ READ php ldx DEVSLOTx0 - lda /W5100.AR.S1.MR + ldy #Sn.Cnt-1 + +.1 lda Sn.IO.BASE,y sta Sn.IO sta W5100.AR,x lda #W5100.AR.S0.RX.RSR sta W5100.AR+1,x - + lda W5100.DR,x get the received size HI ora W5100.DR,x LO - bne READ.ICMP - + beq .2 + + jmp READ.IPRAW + +.2 dey + bne .1 + lda /W5100.AR.S0.RX.RSR - sta Sn.IO sta W5100.AR,x lda #W5100.AR.S0.RX.RSR sta W5100.AR+1,x - + lda W5100.DR,x get the received size HI ora W5100.DR,x LO - beq .9 - - jmp READ.RAW - + bne READ.RAW + .9 jmp READWRITE.NODATA - -READ.ICMP lda #S.IP.PROTOCOL.ICMP - sta FRM.HDR.PROTO - lda Sn.RX.BASE+1 - sta Sn.BASE - lda Sn.RXTX.MASK+1 - sta Sn.MASK - - >AR.Sn.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 Sn.MASK - ora Sn.BASE - sta W5100.AR,x - tya - sta W5100.AR+1,x - - ldy #0 - -.10 lda W5100.DR,x IPRAW:Get Source IP - sta RX.IP,y - iny - cpy #4 - bne .10 - - lda W5100.DR,x get RX.Size HI (not including 6 bytes Header) - sta RXTX.Size+1 - eor #$ff - sta Counter+1 - - lda W5100.DR,x get RX.Size LO - sta RXTX.Size - eor #$ff - sta Counter - - eor #$ff - - clc - adc #S.IP - sta BUF.Size - ldy #S.IOCTL.BYTECNT - sta (ZPIOCTL),y - - iny - - lda RXTX.Size+1 - adc /S.IP - sta BUF.Size+1 - - lda RXTX.Size - clc - adc #6 IPRAW: Add 6 bytes to Total Size - sta RXTX.Size - bcc .11 - inc RXTX.Size+1 - -.11 lda RXTX.Size - clc - adc #S.IP-S.ETH.EII - sta FRM.HDR.IPLEN+1 - - lda RXTX.Size+1 - adc /S.IP-S.ETH.EII - sta FRM.HDR.IPLEN - - >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 #S.ETH.EII.TYPE - -.15 lda FRM.HDR-S.ETH.EII.TYPE,y - sta (ZPBufPtr),y - iny - cpy #S.ETH.EII.TYPE+FRM.HDR.LEN - bne .15 - - ldx #3 - ldy #S.IP.SRC+3 - -.12 lda RX.IP,x - sta (ZPBufPtr),y - dey - dex - bpl .12 - - ldx #3 - ldy #S.IP.DST+3 - -.13 lda DCB+S.DCB.NIC.IP,x - sta (ZPBufPtr),y - dey - dex - bpl .13 - - ldy #S.IP - - 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.Sn.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.Sn.SELECT S0.CR - lda #W5100.AR.Sn.CR.RCVD - sta W5100.DR,x - - pla hMem - - plp - clc - rts *-------------------------------------- READ.RAW >AR.SELECT S0.RX.RD lda W5100.DR,x get the received ptr HI @@ -593,15 +449,15 @@ READ.RAW >AR.SELECT S0.RX.RD ldy #S.IOCTL.BYTECNT sec - sbc #2 MACRAW:strip 2 bytes Header from Size + 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 + iny sta (ZPIOCTL),y sta BUF.Size+1 eor #$ff @@ -626,7 +482,7 @@ READ.RAW >AR.SELECT S0.RX.RD ldy #0 ldx DEVSLOTx0 - + .2 inc Counter bne .3 @@ -662,7 +518,158 @@ READ.RAW >AR.SELECT S0.RX.RD plp clc - rts + rts +*-------------------------------------- +READ.IPRAW lda Sn.IP.PROTOCOL,y + sta FRM.HDR.PROTO + + 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 + lda W5100.DR,x get the received ptr HI + sta Offset+1 + ldy W5100.DR,x get the received ptr LO + sty Offset + + and Sn.MASK + ora Sn.BASE + sta W5100.AR,x + tya + sta W5100.AR+1,x + + ldy #0 + +.10 lda W5100.DR,x IPRAW:Get Source IP + sta RX.IP,y + iny + cpy #4 + bne .10 + + lda W5100.DR,x get RX.Size HI (not including 6 bytes Header) + sta RXTX.Size+1 + eor #$ff + sta Counter+1 + + lda W5100.DR,x get RX.Size LO + sta RXTX.Size + eor #$ff + sta Counter + + eor #$ff + + clc + adc #S.IP + sta BUF.Size + ldy #S.IOCTL.BYTECNT + sta (ZPIOCTL),y + + lda RXTX.Size+1 + adc /S.IP + sta BUF.Size+1 + iny + sta (ZPIOCTL),y + + lda RXTX.Size + clc + adc #6 IPRAW: Add 6 bytes to Total Size + sta RXTX.Size + bcc .11 + inc RXTX.Size+1 + +.11 lda RXTX.Size + clc + adc #S.IP-S.ETH.EII + sta FRM.HDR.IPLEN+1 + + lda RXTX.Size+1 + adc /S.IP-S.ETH.EII + sta FRM.HDR.IPLEN + + >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 #S.ETH.EII.TYPE + +.15 lda FRM.HDR-S.ETH.EII.TYPE,y + sta (ZPBufPtr),y + iny + cpy #S.ETH.EII.TYPE+FRM.HDR.LEN + bne .15 + + ldx #3 + ldy #S.IP.SRC+3 + +.12 lda RX.IP,x + sta (ZPBufPtr),y + dey + dex + bpl .12 + + ldx #3 + ldy #S.IP.DST+3 + +.13 lda DCB+S.DCB.NIC.IP,x + sta (ZPBufPtr),y + dey + dex + bpl .13 + + ldy #S.IP + + 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.Sn.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.Sn.SELECT S0.CR + lda #W5100.AR.Sn.CR.RCVD + sta W5100.DR,x + + pla hMem + + plp + clc + rts *-------------------------------------- READWRITE.NODATA lda #E.NODATA @@ -697,24 +704,25 @@ WRITE php ldy #S.IP.PROTOCOL lda (ZPBufPtr),y - - ldx #Sn.cnt-1 - -.10 cmp Sn.IP.PROTOCOL,x + + ldy #Sn.cnt-1 + +.10 cmp Sn.IP.PROTOCOL,y beq .11 - dex + + dey bne .10 - + plp lda #MLI.E.IO sec rts -.11 lda Sn.IO.BASE,x +.11 lda Sn.IO.BASE,y sta Sn.IO - lda Sn.TX.BASE,x + lda Sn.TX.BASE,y sta Sn.BASE - lda Sn.RXTX.MASK,x + lda Sn.RXTX.MASK,y sta Sn.MASK ldx DEVSLOTx0 diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index ddb163c8..d566d54e 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -58,17 +58,20 @@ Dev.Detect >STYA ZPArgPtr .1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!! bne .2 + lda /PP.ID sta PacketPagePTR+1,x lda #PP.ID sta PacketPagePTR,x lda PacketPageDATA+1,x - cmp /DEVID + cmp /CS8900A.DEVID bne .2 + lda PacketPageDATA,x - cmp #DEVID + cmp #CS8900A.DEVID beq .3 + .2 dec FD.DEV.NAME+3 txa sec @@ -76,6 +79,7 @@ Dev.Detect >STYA ZPArgPtr tax dey bne .1 + >LDYA L.MSG.DETECT.KO >SYSCALL PutS @@ -261,6 +265,7 @@ STATUS.9 lda #MLI.E.BADCTL OPEN lda #S.DIB.S.OPENED bit DIB+S.DIB.S bne .9 + jsr CLOSE * ldx DEVSLOTx0 Done by CLOSE @@ -279,16 +284,31 @@ OPEN lda #S.DIB.S.OPENED lda #PP.MAC sta PacketPagePTR,x - >LDYA DCB+S.DCB.NIC.MAC - >STYA PacketPageDATA,x - >LDYAI PP.MAC+2 - >STYA PacketPagePTR,x - >LDYA DCB+S.DCB.NIC.MAC+2 - >STYA PacketPageDATA,x - >LDYAI PP.MAC+4 - >STYA PacketPagePTR,x - >LDYA DCB+S.DCB.NIC.MAC+4 - >STYA PacketPageDATA,x + lda DCB+S.DCB.NIC.MAC+1 + sta PacketPageDATA+1,x + lda DCB+S.DCB.NIC.MAC+0 + sta PacketPageDATA,x + + lda /PP.MAC+2 + sta PacketPagePTR+1,x + lda #PP.MAC+2 + sta PacketPagePTR,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 sta PacketPagePTR+1,x lda #PP.LineCTL @@ -302,6 +322,7 @@ OPEN lda #S.DIB.S.OPENED tsb DIB+S.DIB.S clc rts + .9 lda #MLI.E.OPEN sec rts @@ -320,13 +341,17 @@ CLOSE ldx DEVSLOTx0 sta PacketPagePTR+1,x lda #PP.SelfST sta PacketPagePTR,x + ldy #0 + .1 lda PacketPageDATA+1,x lda PacketPageDATA,x and #PP.SelfST.InitDone bne .8 + iny bne .1 + .8 lda #S.DIB.S.OPENED trb DIB+S.DIB.S clc @@ -374,6 +399,7 @@ READ php pla >SYSCALL2 GetMem bcs READWRITE.99 + >STYA ZPBufPtr phx phy @@ -388,8 +414,10 @@ READ php .2 inc Counter bne .3 + inc Counter+1 beq .8 + .3 lda RTDATA,x sta (ZPBufPtr),y iny @@ -397,8 +425,10 @@ READ php sta (ZPBufPtr),y iny bne .2 + inc ZPBufPtr+1 bra .2 + .8 pla hMem plp @@ -449,14 +479,17 @@ WRITE php ldy PacketPageDATA,x bit /PP.BusST.Rdy4TxNOW beq READWRITE.9 + ldy #S.IOCTL.BUFPTR lda (ZPIOCTL),y sta ZPBufPtr iny lda (ZPIOCTL),y sta ZPBufPtr+1 + ldx #5 ldy #S.ETH.SRCMAC+5 + .10 lda DCB+S.DCB.NIC.MAC,x sta (ZPBufPtr),y dey @@ -469,19 +502,25 @@ WRITE php .1 inc Counter bne .2 + inc Counter+1 beq .8 + .2 lda (ZPBufPtr),y sta RTDATA,x iny bne .3 + inc ZPBufPtr+1 + .3 lda (ZPBufPtr),y sta RTDATA+1,x iny bne .1 + inc ZPBufPtr+1 bne .1 + .8 plp clc rts diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index 7a9cc4d1..3ad1d21b 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -7,6 +7,7 @@ NEW *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i + .INB inc/kernel.i .INB inc/mli.e.i .INB inc/nic.i .INB inc/nic.w5100.i diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 4f384788..6fbdb5ac 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -171,7 +171,7 @@ SEEK.END .EQ $02 * A2osX.SYSCALL Functions Indexes *--------------------------------------D1 * STAT -SYS.ChTyp .EQ $00 +* .EQ $00 SYS.ChMod .EQ $02 SYS.FStat .EQ $04 SYS.Stat .EQ $06 @@ -222,15 +222,15 @@ SYS.SScanF .EQ $4E * .EQ $54 * .EQ $56 -* .EQ $58 -* .EQ $5A -* .EQ $5C +SYS.Online .EQ $58 +SYS.ChTyp .EQ $5A +SYS.ChAux .EQ $5C SYS.SetAttr .EQ $5E *--------------------------------------D2 * MOUNT SYS.Mount .EQ $60 SYS.UMount .EQ $62 -SYS.Online .EQ $64 +* .EQ $64 SYS.GetStkObj .EQ $66 * ARG SYS.Shift .EQ $68 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index dfe99256..886d7cdd 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -69,7 +69,6 @@ ERR.DNS.ERROR .EQ $B8 ERR.ARP.PENDING .EQ $B5 *-------------------------------------- -UDP.PORT.DNS .EQ 53 UDP.PORT.PMAP .EQ 111 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.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 SAVE inc/libtcpip.i LOAD usr/src/lib/libtcpip.s diff --git a/INC/NET.DNS.I.txt b/INC/NET.DNS.I.txt new file mode 100644 index 00000000..0fa2bf07 --- /dev/null +++ b/INC/NET.DNS.I.txt @@ -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 diff --git a/INC/NET.TCPIP.I.txt b/INC/NET.TCPIP.I.txt new file mode 100644 index 00000000..89716dde --- /dev/null +++ b/INC/NET.TCPIP.I.txt @@ -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 diff --git a/INC/NET.TLS.I.txt b/INC/NET.TLS.I.txt new file mode 100644 index 00000000..9d8d6a4d --- /dev/null +++ b/INC/NET.TLS.I.txt @@ -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 diff --git a/INC/NIC.8900A.I.txt b/INC/NIC.8900A.I.txt index 01514515..238f637f 100644 --- a/INC/NIC.8900A.I.txt +++ b/INC/NIC.8900A.I.txt @@ -5,7 +5,7 @@ AUTO 4,1 *-------------------------------------- * CS8900A IO Registers *-------------------------------------- -DEVID .EQ $630E +CS8900A.DEVID .EQ $630E *-------------------------------------- RTDATA .EQ $C080 Receive/Transmit Data (DWORD) TxCMD .EQ $C084 Transmit Command diff --git a/INC/NIC.91C96.I.txt b/INC/NIC.91C96.I.txt index 7a0def3a..47451148 100644 --- a/INC/NIC.91C96.I.txt +++ b/INC/NIC.91C96.I.txt @@ -5,7 +5,7 @@ AUTO 4,1 *-------------------------------------- * SMSC L91C96 IO Registers *-------------------------------------- -DEVID .EQ $33 +L91C96.DEVID .EQ $33 *-------------------------------------- L91C96.0.TCR .EQ $C080 L91C96.0.TCR.FDSE .EQ %10000000.00000000 diff --git a/INC/NIC.W5100.I.txt b/INC/NIC.W5100.I.txt index add39b32..d0e4c691 100644 --- a/INC/NIC.W5100.I.txt +++ b/INC/NIC.W5100.I.txt @@ -58,10 +58,10 @@ W5100.AR.Sn.CR.OPEN .EQ $01 *W5100.AR.Sn.CR.CONNECT .EQ $04 *W5100.AR.Sn.CR.DISCON .EQ $08 *W5100.AR.Sn.CR.CLOSE .EQ $10 -W5100.AR.Sn.CR.SEND .EQ $20 +W5100.AR.Sn.CR.SEND .EQ $20 *W5100.AR.Sn.CR.SENDMAC .EQ $21 *W5100.AR.Sn.CR.SENDKEEP .EQ $22 -W5100.AR.Sn.CR.RCVD .EQ $40 +W5100.AR.Sn.CR.RCVD .EQ $40 W5100.AR.S0.IR .EQ $0402 W5100.AR.S0.SR .EQ $0403 W5100.AR.S0.PORT .EQ $0404 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index b452a6d5..77581d5b 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -499,7 +499,10 @@ SKT.GetDataFromSktIn jsr SKT.SubDataInLenAtSktX 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 clc @@ -569,12 +572,14 @@ SKT.AddDataToSktIn lda SKT.Cache+S.SOCKET.TCP.INHEAD+1 cmp /K.TCP.WSIZE bne .1 + stz SKT.Cache+S.SOCKET.TCP.INHEAD+1 lda ZPTmpPtr1+1 * sec sbc /K.TCP.WSIZE sta ZPTmpPtr1+1 bra .1 + .9 sec rts diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 6d43def0..d3bf47f6 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -227,7 +227,8 @@ TCP.IN.JMP.ESTBLSH jsr TCP.AddAYToSktCacheAtX jsr SKT.StoreTCB update socket - + bra .7 + .70 jsr TCP.SetSocketTCPO.ACK ...and ack data .7 ldy #S.TCP.OPTIONS diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 7940a4a2..0a688e6c 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -35,6 +35,8 @@ AUXPIPE .EQ 1 .INB inc/mli.e.i .INB inc/nic.i .INB inc/eth.i + .INB inc/net.tcpip.i + .INB inc/net.dns.i .INB inc/lib.net.i .INB inc/libtcpip.i *-------------------------------------- diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index a3de9962..bdfc806b 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -306,15 +306,12 @@ CS.RUN ldx #IOCTL.READ *-------------------------------------- .DO DBG=1 CS.RUN.FILTER lda (pBuf) - cmp #$ff - beq .9 +* cmp #$ff +* beq .9 - dec - beq .9 - - ldy #S.ETH.EII.TYPE+1 - lda (pBuf),y - bne .9 +* ldy #S.ETH.EII.TYPE+1 +* lda (pBuf),y +* bne .9 clc rts diff --git a/SBIN/VEDD.S.txt b/SBIN/VEDD.S.txt new file mode 100644 index 00000000..8c6d5862 --- /dev/null +++ b/SBIN/VEDD.S.txt @@ -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 [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 diff --git a/SCMASM.30/ASM65816.S..txt b/SCMASM.30/ASM65816.S..txt new file mode 100644 index 00000000..a5a2d2d1 --- /dev/null +++ b/SCMASM.30/ASM65816.S..txt @@ -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 <<>> + .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 <<>> +*-------------------------------- +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 -- <<>> +*-------------------------------- +* 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 diff --git a/SCMASM.30/IO.S.IIE..txt b/SCMASM.30/IO.S.IIE..txt new file mode 100644 index 00000000..7b6a29fa --- /dev/null +++ b/SCMASM.30/IO.S.IIE..txt @@ -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 diff --git a/SCMASM.30/IO.S.IIE.ULTRA.txt b/SCMASM.30/IO.S.IIE.ULTRA.txt new file mode 100644 index 00000000..a4fbb248 --- /dev/null +++ b/SCMASM.30/IO.S.IIE.ULTRA.txt @@ -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 diff --git a/SCMASM.30/IO.S.IIE.VIDEX.txt b/SCMASM.30/IO.S.IIE.VIDEX.txt new file mode 100644 index 00000000..bc141359 --- /dev/null +++ b/SCMASM.30/IO.S.IIE.VIDEX.txt @@ -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 diff --git a/SCMASM.30/IO.S.STB80.txt b/SCMASM.30/IO.S.STB80.txt new file mode 100644 index 00000000..3bbf4ca9 --- /dev/null +++ b/SCMASM.30/IO.S.STB80.txt @@ -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 diff --git a/SCMASM.30/SCI.S.CAT.txt b/SCMASM.30/SCI.S.CAT.txt new file mode 100644 index 00000000..e5cfd6c6 --- /dev/null +++ b/SCMASM.30/SCI.S.CAT.txt @@ -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 ... or , abort +*--- or , so abort------ +.6 JSR CHECK.KEY + BMI .6 WAIT FOR KEY + BNE .3 ...NOT CR OR ESC, CONTINUE +*--- or , 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 + BEQ .2 ...YES + EOR #$8D^$9B OR IF +.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 ------------- +.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 diff --git a/SCMASM.30/SCI.S.CPAR.txt b/SCMASM.30/SCI.S.CPAR.txt new file mode 100644 index 00000000..8fba8a79 --- /dev/null +++ b/SCMASM.30/SCI.S.CPAR.txt @@ -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 + BCC .5 ... 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 + BCS MORE.PARMS ...COMMA +.5 JMP NO.MORE.PARMS ... +SYNERR2 + JMP ERR.SYNTAX +*-------------------------------- +* PR# or IN# commands +*-------------------------------- +PARSE.INPR + JSR GET.NEXT.NONBLANK CHAR AFTER COMMAND + BEQ SYNERR2 ...comma or + 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 + 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 +* 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 + 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 diff --git a/SCMASM.30/SCI.S.EQ.txt b/SCMASM.30/SCI.S.EQ.txt new file mode 100644 index 00000000..a00cd510 --- /dev/null +++ b/SCMASM.30/SCI.S.EQ.txt @@ -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 diff --git a/SCMASM.30/SCI.S.ERRORS.txt b/SCMASM.30/SCI.S.ERRORS.txt new file mode 100644 index 00000000..d423b0ec --- /dev/null +++ b/SCMASM.30/SCI.S.ERRORS.txt @@ -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 diff --git a/SCMASM.30/SCI.S.EXEC.txt b/SCMASM.30/SCI.S.EXEC.txt new file mode 100644 index 00000000..1c742a0e --- /dev/null +++ b/SCMASM.30/SCI.S.EXEC.txt @@ -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 diff --git a/SCMASM.30/SCI.S.GP.txt b/SCMASM.30/SCI.S.GP.txt new file mode 100644 index 00000000..a1880f46 --- /dev/null +++ b/SCMASM.30/SCI.S.GP.txt @@ -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 <<>> +*---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 diff --git a/SCMASM.30/SCI.S.LOADSAVE.txt b/SCMASM.30/SCI.S.LOADSAVE.txt new file mode 100644 index 00000000..64028b2f --- /dev/null +++ b/SCMASM.30/SCI.S.LOADSAVE.txt @@ -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 diff --git a/SCMASM.30/SCI.S.ONLINE.txt b/SCMASM.30/SCI.S.ONLINE.txt new file mode 100644 index 00000000..de4d07f6 --- /dev/null +++ b/SCMASM.30/SCI.S.ONLINE.txt @@ -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 diff --git a/SCMASM.30/SCI.S.OPENCLOSE.txt b/SCMASM.30/SCI.S.OPENCLOSE.txt new file mode 100644 index 00000000..1601a74b --- /dev/null +++ b/SCMASM.30/SCI.S.OPENCLOSE.txt @@ -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 diff --git a/SCMASM.30/SCI.S.PRIN.txt b/SCMASM.30/SCI.S.PRIN.txt new file mode 100644 index 00000000..a1f05ed7 --- /dev/null +++ b/SCMASM.30/SCI.S.PRIN.txt @@ -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 diff --git a/SCMASM.30/SCI.S.RWPA.txt b/SCMASM.30/SCI.S.RWPA.txt new file mode 100644 index 00000000..271cb588 --- /dev/null +++ b/SCMASM.30/SCI.S.RWPA.txt @@ -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 diff --git a/SCMASM.30/SCI.S.TABLES.txt b/SCMASM.30/SCI.S.TABLES.txt new file mode 100644 index 00000000..89e2a4a9 --- /dev/null +++ b/SCMASM.30/SCI.S.TABLES.txt @@ -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 -// +*-------------------------------- +* 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 diff --git a/SCMASM.30/SCI.S.VARS.txt b/SCMASM.30/SCI.S.VARS.txt new file mode 100644 index 00000000..336c7f7d --- /dev/null +++ b/SCMASM.30/SCI.S.VARS.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.ACDIR.txt b/SCMASM.30/SCMASM.S.ACDIR.txt new file mode 100644 index 00000000..315cdd24 --- /dev/null +++ b/SCMASM.30/SCMASM.S.ACDIR.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.ASMGEN.txt b/SCMASM.30/SCMASM.S.ASMGEN.txt new file mode 100644 index 00000000..af3afc2b --- /dev/null +++ b/SCMASM.30/SCMASM.S.ASMGEN.txt @@ -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 +* ! IF IN ".TF" THEN +* ! ! +* ! ELSE IF NOT IN DUMMY SECTION THEN +* ! ! ! IF IN PROTECTED AREA THEN +* ! ! ! ! +* ! ! ! ELSE +* 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 diff --git a/SCMASM.30/SCMASM.S.ASMNL.txt b/SCMASM.30/SCMASM.S.ASMNL.txt new file mode 100644 index 00000000..044f416f --- /dev/null +++ b/SCMASM.30/SCMASM.S.ASMNL.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.DATA.txt b/SCMASM.30/SCMASM.S.DATA.txt new file mode 100644 index 00000000..f0738c5d --- /dev/null +++ b/SCMASM.30/SCMASM.S.DATA.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.DIR1.txt b/SCMASM.30/SCMASM.S.DIR1.txt new file mode 100644 index 00000000..685034a0 --- /dev/null +++ b/SCMASM.30/SCMASM.S.DIR1.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.DIR2.txt b/SCMASM.30/SCMASM.S.DIR2.txt new file mode 100644 index 00000000..07a98189 --- /dev/null +++ b/SCMASM.30/SCMASM.S.DIR2.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.DISK.txt b/SCMASM.30/SCMASM.S.DISK.txt new file mode 100644 index 00000000..816f3687 --- /dev/null +++ b/SCMASM.30/SCMASM.S.DISK.txt @@ -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 NO LINE NUMBERS +* TEXT# WITH LINE NUMBERS +* TEXT% 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 diff --git a/SCMASM.30/SCMASM.S.EDIT..txt b/SCMASM.30/SCMASM.S.EDIT..txt new file mode 100644 index 00000000..51bdc240 --- /dev/null +++ b/SCMASM.30/SCMASM.S.EDIT..txt @@ -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 + 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 diff --git a/SCMASM.30/SCMASM.S.ELINES.txt b/SCMASM.30/SCMASM.S.ELINES.txt new file mode 100644 index 00000000..af8b212a --- /dev/null +++ b/SCMASM.30/SCMASM.S.ELINES.txt @@ -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 +.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 diff --git a/SCMASM.30/SCMASM.S.EXP.txt b/SCMASM.30/SCMASM.S.EXP.txt new file mode 100644 index 00000000..241d1d49 --- /dev/null +++ b/SCMASM.30/SCMASM.S.EXP.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.FNDREP.txt b/SCMASM.30/SCMASM.S.FNDREP.txt new file mode 100644 index 00000000..f3aeb707 --- /dev/null +++ b/SCMASM.30/SCMASM.S.FNDREP.txt @@ -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 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 +* 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 +*-------------------------------- +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 + 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 + 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 diff --git a/SCMASM.30/SCMASM.S.IOSTD.txt b/SCMASM.30/SCMASM.S.IOSTD.txt new file mode 100644 index 00000000..595e264f --- /dev/null +++ b/SCMASM.30/SCMASM.S.IOSTD.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.LDR.txt b/SCMASM.30/SCMASM.S.LDR.txt new file mode 100644 index 00000000..c58ece58 --- /dev/null +++ b/SCMASM.30/SCMASM.S.LDR.txt @@ -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 /<<>>/ +*-------------------------------------- +MAN +SAVE usr/src/scmasm.30/scmasm.s.ldr +LOAD usr/src/scmasm.30/scmasm.s +ASM diff --git a/SCMASM.30/SCMASM.S.MACRO.txt b/SCMASM.30/SCMASM.S.MACRO.txt new file mode 100644 index 00000000..dbf3f6d4 --- /dev/null +++ b/SCMASM.30/SCMASM.S.MACRO.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.MCMDS.txt b/SCMASM.30/SCMASM.S.MCMDS.txt new file mode 100644 index 00000000..83952e66 --- /dev/null +++ b/SCMASM.30/SCMASM.S.MCMDS.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.NEWQ.txt b/SCMASM.30/SCMASM.S.NEWQ.txt new file mode 100644 index 00000000..9ac520d6 --- /dev/null +++ b/SCMASM.30/SCMASM.S.NEWQ.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.OUTPUT.txt b/SCMASM.30/SCMASM.S.OUTPUT.txt new file mode 100644 index 00000000..2d834e9a --- /dev/null +++ b/SCMASM.30/SCMASM.S.OUTPUT.txt @@ -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 +* 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 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 diff --git a/SCMASM.30/SCMASM.S.PARAM.txt b/SCMASM.30/SCMASM.S.PARAM.txt new file mode 100644 index 00000000..4de9018f --- /dev/null +++ b/SCMASM.30/SCMASM.S.PARAM.txt @@ -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 <<>> +*-------------------------------- + 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 diff --git a/SCMASM.30/SCMASM.S.PLINE.txt b/SCMASM.30/SCMASM.S.PLINE.txt new file mode 100644 index 00000000..57b90657 --- /dev/null +++ b/SCMASM.30/SCMASM.S.PLINE.txt @@ -0,0 +1,102 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* PARSE LINE RANGE +* START END CARRY +* (PP) (HI.MEM) SET +* # # # CLEAR +* #1,#2 #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 +* 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 diff --git a/SCMASM.30/SCMASM.S.PSYM.txt b/SCMASM.30/SCMASM.S.PSYM.txt new file mode 100644 index 00000000..f76c3df2 --- /dev/null +++ b/SCMASM.30/SCMASM.S.PSYM.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.RLINE.txt b/SCMASM.30/SCMASM.S.RLINE.txt new file mode 100644 index 00000000..718bbe95 --- /dev/null +++ b/SCMASM.30/SCMASM.S.RLINE.txt @@ -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 < 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 ... + 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 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 TO +*-------------------------------- +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 FOR +.2 STA WBUF,Y + BNE .1 UNTIL + 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 diff --git a/SCMASM.30/SCMASM.S.SCMD.txt b/SCMASM.30/SCMASM.S.SCMD.txt new file mode 100644 index 00000000..6a2a685d --- /dev/null +++ b/SCMASM.30/SCMASM.S.SCMD.txt @@ -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 + 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 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 diff --git a/SCMASM.30/SCMASM.S.SYMT.txt b/SCMASM.30/SCMASM.S.SYMT.txt new file mode 100644 index 00000000..85cf95ad --- /dev/null +++ b/SCMASM.30/SCMASM.S.SYMT.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.TSRCH.txt b/SCMASM.30/SCMASM.S.TSRCH.txt new file mode 100644 index 00000000..62d26ded --- /dev/null +++ b/SCMASM.30/SCMASM.S.TSRCH.txt @@ -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 THRU +* UP BYTES TO +*-------------------------------- +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 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 THRU +* DOWN - BYTES TO +*-------------------------------- +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 TO +* +* RETURN # WHOLE BLOCKS OF 256 BYTES +1 IN X +* RETURN # BYTES IN PARTIAL BLOCK IN +*-------------------------------- +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 diff --git a/SCMASM.30/SCMASM.S.VECT.txt b/SCMASM.30/SCMASM.S.VECT.txt new file mode 100644 index 00000000..f119ac25 --- /dev/null +++ b/SCMASM.30/SCMASM.S.VECT.txt @@ -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 diff --git a/SCMASM.30/SCMASM.S.XTDIR.txt b/SCMASM.30/SCMASM.S.XTDIR.txt new file mode 100644 index 00000000..af189726 --- /dev/null +++ b/SCMASM.30/SCMASM.S.XTDIR.txt @@ -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 <<>> +*-------------------------------- + .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 diff --git a/SCMASM.30/SCMASM.S.txt b/SCMASM.30/SCMASM.S.txt new file mode 100644 index 00000000..1b063cb3 --- /dev/null +++ b/SCMASM.30/SCMASM.S.txt @@ -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 diff --git a/SCMASM.31/ASM65816.S..txt b/SCMASM.31/ASM65816.S..txt new file mode 100644 index 00000000..7f5bb1f9 --- /dev/null +++ b/SCMASM.31/ASM65816.S..txt @@ -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 <<>> + .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 <<>> +*-------------------------------- +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 -- <<>> +*-------------------------------- +* 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 diff --git a/SCMASM.31/IO.S.IIE..txt b/SCMASM.31/IO.S.IIE..txt new file mode 100644 index 00000000..c6fafd57 --- /dev/null +++ b/SCMASM.31/IO.S.IIE..txt @@ -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 diff --git a/SCMASM.31/IO.S.IIE.ULTRA.txt b/SCMASM.31/IO.S.IIE.ULTRA.txt new file mode 100644 index 00000000..38a51ad1 --- /dev/null +++ b/SCMASM.31/IO.S.IIE.ULTRA.txt @@ -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 diff --git a/SCMASM.31/IO.S.IIE.VIDEX.txt b/SCMASM.31/IO.S.IIE.VIDEX.txt new file mode 100644 index 00000000..cf15d188 --- /dev/null +++ b/SCMASM.31/IO.S.IIE.VIDEX.txt @@ -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 diff --git a/SCMASM.31/IO.S.STB80.txt b/SCMASM.31/IO.S.STB80.txt new file mode 100644 index 00000000..6b85185f --- /dev/null +++ b/SCMASM.31/IO.S.STB80.txt @@ -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 diff --git a/SCMASM.31/SCI.S.CAT.txt b/SCMASM.31/SCI.S.CAT.txt new file mode 100644 index 00000000..3cfe476f --- /dev/null +++ b/SCMASM.31/SCI.S.CAT.txt @@ -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 ... or , abort +*--- or , so abort------ +.6 JSR CHECK.KEY + BMI .6 WAIT FOR KEY + BNE .3 ...NOT CR OR ESC, CONTINUE +*--- or , 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 + BEQ .2 ...YES + EOR #$8D^$9B OR IF +.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 ------------- +.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 diff --git a/SCMASM.31/SCI.S.CPAR.txt b/SCMASM.31/SCI.S.CPAR.txt new file mode 100644 index 00000000..ba1e7695 --- /dev/null +++ b/SCMASM.31/SCI.S.CPAR.txt @@ -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 + BCC .5 ... 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 + BCS MORE.PARMS ...COMMA +.5 JMP NO.MORE.PARMS ... +SYNERR2 + JMP ERR.SYNTAX +*-------------------------------- +* PR# or IN# commands +*-------------------------------- +PARSE.INPR + JSR GET.NEXT.NONBLANK CHAR AFTER COMMAND + BEQ SYNERR2 ...comma or + 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 + 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 +* 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 + 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 diff --git a/SCMASM.31/SCI.S.EQ.txt b/SCMASM.31/SCI.S.EQ.txt new file mode 100644 index 00000000..fb610059 --- /dev/null +++ b/SCMASM.31/SCI.S.EQ.txt @@ -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 diff --git a/SCMASM.31/SCI.S.ERRORS.txt b/SCMASM.31/SCI.S.ERRORS.txt new file mode 100644 index 00000000..6fa63b5f --- /dev/null +++ b/SCMASM.31/SCI.S.ERRORS.txt @@ -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 diff --git a/SCMASM.31/SCI.S.EXEC.txt b/SCMASM.31/SCI.S.EXEC.txt new file mode 100644 index 00000000..186dd15b --- /dev/null +++ b/SCMASM.31/SCI.S.EXEC.txt @@ -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 diff --git a/SCMASM.31/SCI.S.GP.txt b/SCMASM.31/SCI.S.GP.txt new file mode 100644 index 00000000..864af053 --- /dev/null +++ b/SCMASM.31/SCI.S.GP.txt @@ -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 <<>> +*---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 diff --git a/SCMASM.31/SCI.S.LOADSAVE.txt b/SCMASM.31/SCI.S.LOADSAVE.txt new file mode 100644 index 00000000..a753a4b7 --- /dev/null +++ b/SCMASM.31/SCI.S.LOADSAVE.txt @@ -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 diff --git a/SCMASM.31/SCI.S.ONLINE.txt b/SCMASM.31/SCI.S.ONLINE.txt new file mode 100644 index 00000000..f8b7d698 --- /dev/null +++ b/SCMASM.31/SCI.S.ONLINE.txt @@ -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 diff --git a/SCMASM.31/SCI.S.OPENCLOSE.txt b/SCMASM.31/SCI.S.OPENCLOSE.txt new file mode 100644 index 00000000..5dca5d84 --- /dev/null +++ b/SCMASM.31/SCI.S.OPENCLOSE.txt @@ -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 diff --git a/SCMASM.31/SCI.S.PRIN.txt b/SCMASM.31/SCI.S.PRIN.txt new file mode 100644 index 00000000..3000003f --- /dev/null +++ b/SCMASM.31/SCI.S.PRIN.txt @@ -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 diff --git a/SCMASM.31/SCI.S.RWPA.txt b/SCMASM.31/SCI.S.RWPA.txt new file mode 100644 index 00000000..ffb9a320 --- /dev/null +++ b/SCMASM.31/SCI.S.RWPA.txt @@ -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 diff --git a/SCMASM.31/SCI.S.TABLES.txt b/SCMASM.31/SCI.S.TABLES.txt new file mode 100644 index 00000000..f8ce0fd0 --- /dev/null +++ b/SCMASM.31/SCI.S.TABLES.txt @@ -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 -// +*-------------------------------- +* 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 diff --git a/SCMASM.31/SCI.S.VARS.txt b/SCMASM.31/SCI.S.VARS.txt new file mode 100644 index 00000000..e156de41 --- /dev/null +++ b/SCMASM.31/SCI.S.VARS.txt @@ -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 diff --git a/SCMASM.31/SCMASM.S.ACDIR.txt b/SCMASM.31/SCMASM.S.ACDIR.txt new file mode 100644 index 00000000..0d575471 --- /dev/null +++ b/SCMASM.31/SCMASM.S.ACDIR.txt @@ -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.31/scmasm.s.acdir +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.ASMGEN.txt b/SCMASM.31/SCMASM.S.ASMGEN.txt new file mode 100644 index 00000000..c522204a --- /dev/null +++ b/SCMASM.31/SCMASM.S.ASMGEN.txt @@ -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 +* ! IF IN ".TF" THEN +* ! ! +* ! ELSE IF NOT IN DUMMY SECTION THEN +* ! ! ! IF IN PROTECTED AREA THEN +* ! ! ! ! +* ! ! ! ELSE +* 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.31/scmasm.s.asmgen +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.ASMNL.txt b/SCMASM.31/SCMASM.S.ASMNL.txt new file mode 100644 index 00000000..c47cb4c3 --- /dev/null +++ b/SCMASM.31/SCMASM.S.ASMNL.txt @@ -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.31/scmasm.s.asmnl +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.DATA.txt b/SCMASM.31/SCMASM.S.DATA.txt new file mode 100644 index 00000000..e18c2fd6 --- /dev/null +++ b/SCMASM.31/SCMASM.S.DATA.txt @@ -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.31/scmasm.s.data +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.DIR1.txt b/SCMASM.31/SCMASM.S.DIR1.txt new file mode 100644 index 00000000..edfdc948 --- /dev/null +++ b/SCMASM.31/SCMASM.S.DIR1.txt @@ -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.31/scmasm.s.dir1 +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.DIR2.txt b/SCMASM.31/SCMASM.S.DIR2.txt new file mode 100644 index 00000000..ecf026b4 --- /dev/null +++ b/SCMASM.31/SCMASM.S.DIR2.txt @@ -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.31/scmasm.s.dir2 +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.DISK.txt b/SCMASM.31/SCMASM.S.DISK.txt new file mode 100644 index 00000000..3cd60101 --- /dev/null +++ b/SCMASM.31/SCMASM.S.DISK.txt @@ -0,0 +1,262 @@ +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 NO LINE NUMBERS +* TEXT# WITH LINE NUMBERS +* TEXT% 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 .DO LOWERCASE=1 + ldx #0 + +.1 cpx #49 + bcs .2 + + jsr .8 + bcc .3 + +.2 lda #0 + +.3 sta PATHNAME,x + inx + bcc .1 + + rts + +.8 jsr GNC GET NEXT CHAR ANY CASE + beq .9 SPACE OR + + sta CURRENT.CHAR + cmp #$FF CLEAR CARRY, SET .NE. + +.9 rts + + .ELSE + LDX #0 + +.1 CPX #49 + BCS .2 + + JSR GNNB + BCC .3 + +.2 LDA #0 + +.3 STA PATHNAME,X + INX + BCC .1 + + RTS + .FIN +*-------------------------------- +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.31/scmasm.s.disk +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.EDIT..txt b/SCMASM.31/SCMASM.S.EDIT..txt new file mode 100644 index 00000000..3346aae0 --- /dev/null +++ b/SCMASM.31/SCMASM.S.EDIT..txt @@ -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 + 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.31/scmasm.s.edit +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.ELINES.txt b/SCMASM.31/SCMASM.S.ELINES.txt new file mode 100644 index 00000000..756d3416 --- /dev/null +++ b/SCMASM.31/SCMASM.S.ELINES.txt @@ -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 +.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.31/scmasm.s.elines +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.EXP.txt b/SCMASM.31/SCMASM.S.EXP.txt new file mode 100644 index 00000000..0cbc6641 --- /dev/null +++ b/SCMASM.31/SCMASM.S.EXP.txt @@ -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.31/scmasm.s.exp +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.FNDREP.txt b/SCMASM.31/SCMASM.S.FNDREP.txt new file mode 100644 index 00000000..44922dcb --- /dev/null +++ b/SCMASM.31/SCMASM.S.FNDREP.txt @@ -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 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 +* 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 +*-------------------------------- +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 + 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 + 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.31/scmasm.s.fndrep +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.IOSTD.txt b/SCMASM.31/SCMASM.S.IOSTD.txt new file mode 100644 index 00000000..60437afc --- /dev/null +++ b/SCMASM.31/SCMASM.S.IOSTD.txt @@ -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.31/scmasm.s.iostd +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.LDR.txt b/SCMASM.31/SCMASM.S.LDR.txt new file mode 100644 index 00000000..d2ecf079 --- /dev/null +++ b/SCMASM.31/SCMASM.S.LDR.txt @@ -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 /<<>>/ +*-------------------------------------- +MAN +SAVE usr/src/scmasm.31/scmasm.s.ldr +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.MACRO.txt b/SCMASM.31/SCMASM.S.MACRO.txt new file mode 100644 index 00000000..ab785fd3 --- /dev/null +++ b/SCMASM.31/SCMASM.S.MACRO.txt @@ -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.31/scmasm.s.macro +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.MCMDS.txt b/SCMASM.31/SCMASM.S.MCMDS.txt new file mode 100644 index 00000000..bcf3002b --- /dev/null +++ b/SCMASM.31/SCMASM.S.MCMDS.txt @@ -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.31/scmasm.s.mcmds +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.NEWQ.txt b/SCMASM.31/SCMASM.S.NEWQ.txt new file mode 100644 index 00000000..03adc8c7 --- /dev/null +++ b/SCMASM.31/SCMASM.S.NEWQ.txt @@ -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.31/scmasm.s.newq +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.OUTPUT.txt b/SCMASM.31/SCMASM.S.OUTPUT.txt new file mode 100644 index 00000000..f7ed69be --- /dev/null +++ b/SCMASM.31/SCMASM.S.OUTPUT.txt @@ -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 +* 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 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.31/scmasm.s.output +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.PARAM.txt b/SCMASM.31/SCMASM.S.PARAM.txt new file mode 100644 index 00000000..b98ee02b --- /dev/null +++ b/SCMASM.31/SCMASM.S.PARAM.txt @@ -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 <<>> +*-------------------------------- + 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.31/scmasm.s.param +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.PLINE.txt b/SCMASM.31/SCMASM.S.PLINE.txt new file mode 100644 index 00000000..02d3d78f --- /dev/null +++ b/SCMASM.31/SCMASM.S.PLINE.txt @@ -0,0 +1,102 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* PARSE LINE RANGE +* START END CARRY +* (PP) (HI.MEM) SET +* # # # CLEAR +* #1,#2 #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 +* 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.31/scmasm.s.pline +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.PSYM.txt b/SCMASM.31/SCMASM.S.PSYM.txt new file mode 100644 index 00000000..994e2c54 --- /dev/null +++ b/SCMASM.31/SCMASM.S.PSYM.txt @@ -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.31/scmasm.s.psym +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.RLINE.txt b/SCMASM.31/SCMASM.S.RLINE.txt new file mode 100644 index 00000000..56ea542b --- /dev/null +++ b/SCMASM.31/SCMASM.S.RLINE.txt @@ -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 < 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 ... + 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 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 TO +*-------------------------------- +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 FOR +.2 STA WBUF,Y + BNE .1 UNTIL + 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.31/scmasm.s.rline +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.SCMD.txt b/SCMASM.31/SCMASM.S.SCMD.txt new file mode 100644 index 00000000..a6f78f31 --- /dev/null +++ b/SCMASM.31/SCMASM.S.SCMD.txt @@ -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 + 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 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.31/scmasm.s.scmd +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.SYMT.txt b/SCMASM.31/SCMASM.S.SYMT.txt new file mode 100644 index 00000000..cbc2e3bf --- /dev/null +++ b/SCMASM.31/SCMASM.S.SYMT.txt @@ -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.31/scmasm.s.symt +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.TSRCH.txt b/SCMASM.31/SCMASM.S.TSRCH.txt new file mode 100644 index 00000000..823f7965 --- /dev/null +++ b/SCMASM.31/SCMASM.S.TSRCH.txt @@ -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 THRU +* UP BYTES TO +*-------------------------------- +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 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 THRU +* DOWN - BYTES TO +*-------------------------------- +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 TO +* +* RETURN # WHOLE BLOCKS OF 256 BYTES +1 IN X +* RETURN # BYTES IN PARTIAL BLOCK IN +*-------------------------------- +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.31/scmasm.s.tsrch +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.VECT.txt b/SCMASM.31/SCMASM.S.VECT.txt new file mode 100644 index 00000000..aa1f142b --- /dev/null +++ b/SCMASM.31/SCMASM.S.VECT.txt @@ -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.31/scmasm.s.vect +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.XTDIR.txt b/SCMASM.31/SCMASM.S.XTDIR.txt new file mode 100644 index 00000000..4c657152 --- /dev/null +++ b/SCMASM.31/SCMASM.S.XTDIR.txt @@ -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 <<>> +*-------------------------------- + .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.31/scmasm.s.xtdir +LOAD usr/src/scmasm.31/scmasm.s +ASM diff --git a/SCMASM.31/SCMASM.S.txt b/SCMASM.31/SCMASM.S.txt new file mode 100644 index 00000000..42ab02a1 --- /dev/null +++ b/SCMASM.31/SCMASM.S.txt @@ -0,0 +1,91 @@ +NEW + AUTO 3,1 + .LIST OFF + .OR $2000 + .TF SCMASM.SYSTEM,TSYS +*-------------------------------------- +VERSION.HI .EQ 3 VERSION 3.0 +VERSION.LO .EQ 1 +*-------------------------------- +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 +*-------------------------------------- + .MA DEBUG +:1 bit $C000 + bpl :1 + sta $C010 + .EM +*-------------------------------------- +LOWERCASE .EQ 1 +*-------------------------------------- + .INB usr/src/scmasm.31/scmasm.s.ldr + .BS $2200-* +*-------------------------------- + .PH $8000 + .INB usr/src/scmasm.31/scmasm.s.data + .INB usr/src/scmasm.31/scmasm.s.param + .INB usr/src/scmasm.31/scmasm.s.edit + .INB usr/src/scmasm.31/scmasm.s.mcmds + .INB usr/src/scmasm.31/scmasm.s.scmd + .INB usr/src/scmasm.31/scmasm.s.tsrch + .INB usr/src/scmasm.31/scmasm.s.fndrep + .INB usr/src/scmasm.31/scmasm.s.rline + .INB usr/src/scmasm.31/scmasm.s.elines + .INB usr/src/scmasm.31/scmasm.s.output + .INB usr/src/scmasm.31/scmasm.s.disk + .INB usr/src/scmasm.31/scmasm.s.pline + .INB usr/src/scmasm.31/scmasm.s.asmgen + .INB usr/src/scmasm.31/scmasm.s.asmnl + .INB usr/src/scmasm.31/scmasm.s.exp + .INB usr/src/scmasm.31/scmasm.s.symt + .INB usr/src/scmasm.31/scmasm.s.psym + .INB usr/src/scmasm.31/scmasm.s.macro + .INB usr/src/scmasm.31/scmasm.s.dir1 + .INB usr/src/scmasm.31/scmasm.s.dir2 + .INB usr/src/scmasm.31/scmasm.s.acdir + .INB usr/src/scmasm.31/scmasm.s.newq + .INB usr/src/scmasm.31/scmasm.s.xtdir + .BS $A700-* + .INB usr/src/scmasm.31/scmasm.s.vect + .BS $A800-* + .INB usr/src/scmasm.31/scmasm.s.iostd + .BS $A900-* + .EP +*-------------------------------------- + .PH $AA00 + .INB usr/src/scmasm.31/sci.s.eq + .INB usr/src/scmasm.31/sci.s.cpar + .INB usr/src/scmasm.31/sci.s.cat + .INB usr/src/scmasm.31/sci.s.exec + .INB usr/src/scmasm.31/sci.s.online + .INB usr/src/scmasm.31/sci.s.prin + .INB usr/src/scmasm.31/sci.s.errors + .INB usr/src/scmasm.31/sci.s.loadsave + .INB usr/src/scmasm.31/sci.s.openclose + .INB usr/src/scmasm.31/sci.s.rwpa + .INB usr/src/scmasm.31/sci.s.tables + .BS $BD00-* + .INB usr/src/scmasm.31/sci.s.vars + .BS $BE00-* + .INB usr/src/scmasm.31/sci.s.gp + .BS $BF00-* + .EP +*-------------------------------------- + .INB usr/src/scmasm.31/io.s.iie + .BS $6100-* + .INB usr/src/scmasm.31/io.s.stb80 + .BS $6200-* + .INB usr/src/scmasm.31/io.s.videx + .BS $6400-* + .INB usr/src/scmasm.31/io.s.ultra + .BS $6600-* +*-------------------------------------- + .PH $D400 + .INB usr/src/scmasm.31/asm65816.s + .BS $E000-* + .EP +*-------------------------------------- +MAN +SAVE usr/src/scmasm.31/scmasm.s +ASM diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index e060fe45..4d0b7a19 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -142,11 +142,18 @@ CORE.Quit php >MLICALL MLIDEALLOCIRQ - ldx #5 + bit RDIOUDIS + sta SETIOUDIS + sta CLRDHIRES + bmi .1 -.1 stz K.MLI.PARAMS+1,x + sta CLRIOUDIS + +.1 ldx #5 + +.2 stz K.MLI.PARAMS+1,x dex - bpl .1 + bpl .2 lda #4 ldx #MLIQUIT diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index bf103ad9..c2a153bc 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -210,11 +210,6 @@ DEV.OPEN ldx #IOCTL.OPEN .9 rts *-------------------------------------- -DEV.CLOSE ldx #IOCTL.CLOSE - lda IO.hFD - - jmp (pDrv) -*-------------------------------------- DEV.READ ldx #IOCTL.READ .HS 2C BIT ABS *-------------------------------------- @@ -237,9 +232,9 @@ DEV.EOF lda #S.IOCTL.S.EOF DEV.GetStatus sta K.S.IOCTL+S.IOCTL.S ldx #IOCTL.STATUS -* ldy #S.FD.DEV.DEVID -* lda (pFD),y -* sta K.S.IOCTL+S.IOCTL.UNITNUM + .HS 2C BIT ABS +*-------------------------------------- +DEV.CLOSE ldx #IOCTL.CLOSE *-------------------------------------- DEV.pDrvJmp >LDYAI K.S.IOCTL jmp (pDrv) diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 0b3a66d1..1b72fe0c 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -5,7 +5,7 @@ NEW *-------------------------------------- * Bank 1 *-------------------------------------- -K.SYSCALL .DA K.ChTyp $00 : STAT +K.SYSCALL .DA 0 $00 : STAT .DA K.ChMod .DA K.FStat .DA K.Stat @@ -54,16 +54,16 @@ K.SYSCALL .DA K.ChTyp $00 : STAT .DA 0 .DA 0 .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA K.Online $58 : PRODOS + .DA K.ChTyp + .DA K.ChAux .DA K.SetAttr *-------------------------------------- * Bank 2 *-------------------------------------- .DA K.Mount $60 .DA K.UMount - .DA K.Online + .DA 0 .DA K.GetStkObj .DA K.Shift $68 : ARG .DA K.ArgV diff --git a/SYS/KERNEL.S.MOUNT.txt b/SYS/KERNEL.S.MOUNT.txt index d81198a1..11456f7f 100644 --- a/SYS/KERNEL.S.MOUNT.txt +++ b/SYS/KERNEL.S.MOUNT.txt @@ -54,11 +54,6 @@ K.UMount tax .9 lda #E.INVH sec rts -*-------------------------------------- -K.Online >PULLW K.MLI.PARAMS+2 - >PULLB K.MLI.PARAMS+1 - >MLICALL MLIONLINE - rts */-------------------------------------- * # GetStkObj * ## C diff --git a/SYS/KERNEL.S.PRODOS.txt b/SYS/KERNEL.S.PRODOS.txt new file mode 100644 index 00000000..fb27db00 --- /dev/null +++ b/SYS/KERNEL.S.PRODOS.txt @@ -0,0 +1,78 @@ +NEW + AUTO 3,1 +*-------------------------------------- +K.Online >PULLW K.MLI.PARAMS+2 + >PULLB K.MLI.PARAMS+1 + >MLICALL MLIONLINE + rts +*/-------------------------------------- +* # 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 +*\-------------------------------------- +K.ChTyp jsr PFT.CheckPath1 + bcs PRODOS.RET3 + + >MLICALL MLIGETFILEINFO + bcs PRODOS.RET3 + + >PULLB K.MLI.PARAMS+S.FI.T + bra PRODOS.SFIRET2 +*/-------------------------------------- +* # 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 +*\-------------------------------------- +K.ChAux jsr PFT.CheckPath2 + bcs PRODOS.RET4 + + >MLICALL MLIGETFILEINFO + bcs PRODOS.RET4 + + >PULLW K.MLI.PARAMS+S.FI.AUXTYPE + bra PRODOS.SFIRET2 +*/-------------------------------------- +* # 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 +*\-------------------------------------- +K.SetAttr jsr PFT.CheckPath1 + bcs PRODOS.RET3 + + >MLICALL MLIGETFILEINFO + bcs PRODOS.RET3 + + >PULLB K.MLI.PARAMS+S.FI.A + +PRODOS.SFIRET2 >MLICALL MLISETFILEINFO + bra PRODOS.RET2 + +PRODOS.RET4 inc pStack +PRODOS.RET3 inc pStack +PRODOS.RET2 inc pStack + inc pStack + + rts +*-------------------------------------- +MAN +SAVE usr/src/sys/kernel.s.prodos +LOAD usr/src/sys/kernel.s +ASM diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 168f676a..4ab11f25 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -1,48 +1,6 @@ NEW AUTO 3,1 */-------------------------------------- -* # 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 -*\-------------------------------------- -K.ChTyp jsr PFT.CheckPath1 - bcs K.ChMod.RET3 - - >MLICALL MLIGETFILEINFO - bcs K.ChMod.RET3 - - lda (pStack) - sta K.MLI.PARAMS+S.FI.T - bra K.SetAttr.I -*/-------------------------------------- -* # 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 -*\-------------------------------------- -K.SetAttr jsr PFT.CheckPath1 - bcs K.ChMod.RET3 - - >MLICALL MLIGETFILEINFO - bcs K.ChMod.RET3 - - lda (pStack) - sta K.MLI.PARAMS+S.FI.A - -K.SetAttr.I >MLICALL MLISETFILEINFO - bra K.ChMod.RET3 -*-------------------------------------- * # ChMod * change permissions of a file * ## C @@ -52,9 +10,9 @@ K.SetAttr.I >MLICALL MLISETFILEINFO * `>PUSHW mode` * `>SYSCALL chmod` * ## RETURN VALUE -*-------------------------------------- +*\-------------------------------------- K.ChMod jsr PFT.CheckPath2 - bcs K.ChMod.RET4 + bcs STAT.RET4 jsr STAT.PM @@ -72,13 +30,13 @@ K.ChMod jsr PFT.CheckPath2 >MLICALL MLIACL .9 rts -K.ChMod.RET4 inc pStack +STAT.RET4 inc pStack -K.ChMod.RET3 inc pStack +STAT.RET3 inc pStack inc pStack inc pStack rts -*-------------------------------------- +*/-------------------------------------- * # FStat * Return information about a hFILE * ## C @@ -88,10 +46,10 @@ K.ChMod.RET3 inc pStack * `>PUSHW statbuf` * `>SYSCALL fstat` * ## RETURN VALUE -*-------------------------------------- +*\-------------------------------------- K.FStat ldy #2 jsr PFT.CheckNodeY - bcs K.ChMod.RET3 + bcs STAT.RET3 >PULLW K.Stat.Store.2+1 @@ -139,7 +97,7 @@ STAT.RTS rts * ## RETURN VALUE *\-------------------------------------- K.Stat jsr PFT.CheckPath2 - bcs K.ChMod.RET4 go discard statbuf + bcs STAT.RET4 go discard statbuf >PULLW K.Stat.Store.2+1 @@ -165,7 +123,7 @@ K.Stat jsr PFT.CheckPath2 * A = EC *\------------------------------------- K.MKDir jsr PFT.CheckPath2 - bcs K.ChMod.RET4 + bcs STAT.RET4 jsr STAT.PM @@ -196,7 +154,7 @@ K.MKFIFO jsr STAT.PM ldy #0 -.1 lda STAT.FIFO,y +.1 lda UNISTD.DEVFIFO,y sta (ZPPtr1),y fill pathname buffer iny cpy #9 @@ -220,8 +178,6 @@ K.MKFIFO jsr STAT.PM inc ZPPtr1+1 bra K.MkNod.I -*-------------------------------------- -STAT.FIFO .AS "/dev/fifo" */-------------------------------------- * # MkNod * Create a special or ordinary file. diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index b9d1eb3b..3f7a4d75 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -1130,6 +1130,7 @@ PrintF.PutC phy inc pIOBuf+1 inc PrintF.Cnt+1 + .8 clc rts @@ -1194,7 +1195,7 @@ K.FScanF ldx #2 K.SScanF ldx #3 *-------------------------------------- K.SScanF.1 clc format string->ptr1 - jsr STDIO.GetParams + jsr STDIO.GetParams stz PrintF.Cnt stx ZPPtr2 sta ZPPtr2+1 Output buffer->ZPPtr2 @@ -1270,10 +1271,11 @@ K.SScanF.1 clc format string->ptr1 jsr .5 bcs .9 out of Ptr on stack - inc .8+1 parsed one more arg! - bra .1 + inc PrintF.Cnt parsed one more arg! + bra .1 no chance more than 256 ptrs on stack -.8 lda #$ff SELF MODIFIED Arg processed +.8 ldy PrintF.Cnt Arg processed + lda #0 clc jmp STDIO.Exit *-------------------------------------- @@ -1307,16 +1309,16 @@ K.SScanF.H lda K.SScanFTBL+1,x Get VAR size jsr MATH.Hex2ACC32 -K.SScanF.GetVAL jsr SHARED.AddY2P2 Y=char count parsed +K.SScanF.GetVAL jsr SHARED.AddY2P2 Y=char count parsed -.1 ply get back VAL size + ply get back VAL size -.2 lda ACC32-1,y +.1 lda ACC32-1,y dey sta (ZPPtr3),y - bne .2 + bne .1 -.9 rts + rts *-------------------------------------- K.SScanF.S ldy #$ff diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index 05a24ae4..6206f35f 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -26,7 +26,7 @@ UNISTD.Open ldx #5 /dev/ bcs .8 .1 lda K.MLI.PATH,x - cmp IO.DEV-1,x + cmp UNISTD.DEVFIFO-1,x bne .8 dex @@ -192,7 +192,7 @@ K.ChOwn jsr PFT.CheckPath2 .9 >RET 4 *-------------------------------------- -IO.DEV .AS "/dev/" +UNISTD.DEVFIFO .AS "/dev/fifo" *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.unistd diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 5d31ee32..36d2ff1c 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -80,6 +80,7 @@ D1.B .PH $D000 .INB usr/src/sys/kernel.s.dirent .INB usr/src/sys/kernel.s.unistd .INB usr/src/sys/kernel.s.stdio + .INB usr/src/sys/kernel.s.prodos .INB usr/src/sys/kernel.s.dev .INB usr/src/sys/kernel.s.sock .INB usr/src/sys/kernel.s.pipe diff --git a/SYS/KM.VEDRIVE.S.CF.txt b/SYS/KM.VEDRIVE.S.CF.txt new file mode 100644 index 00000000..682f9850 --- /dev/null +++ b/SYS/KM.VEDRIVE.S.CF.txt @@ -0,0 +1,379 @@ +NEW + AUTO 3,1 +*-------------------------------------- +VEDRIVE.ReadConf + jsr MLI + .DA #MLIGETPREFIX + .DA MLIGETPREFIX.P + bcs .9 + + ldx #0 + ldy CONF.FILEPATH + +.1 lda CONF.FILENAME,x + iny + sta CONF.FILEPATH,y + inx + cpx #CONF.FILENAME.L + bne .1 + + sty CONF.FILEPATH + + lda #CONF.FILEPATH + pha + lda /CONF.FILEPATH + pha + >LDYAI VEDRIVE.CONF + jsr PrintFYA + + jsr MLI + .DA #MLIOPEN + .DA MLIOPEN.P + bcc .10 + + >LDYAI VEDRIVE.CONFKO + jsr PrintFYA + sec + rts + +.10 lda MLIOPEN.P+5 + sta MLINEWLINE.P+1 + sta MLIREAD.P+1 + sta MLICLOSE.P+1 + + jsr MLI + .DA #MLINEWLINE + .DA MLINEWLINE.P + bcs .9 + +.2 jsr MLI + .DA #MLIREAD + .DA MLIREAD.P + bcs .8 + + jsr VEDRIVE.CONF.L + bcc .2 + + >LDYAI VEDRIVE.CONFSYN + jsr PrintFYA + + sec + bra .9 + +.8 cmp #MLI.E.EOF + sec + bne .9 + + lda CONF.NIC + bmi .9 + + lda CONF.SLOT + beq .9 + + lda CONF.SERVER + beq .9 + + clc + +.9 php + pha + jsr MLI + .DA #MLICLOSE + .DA MLICLOSE.P + pla + plp + rts +*-------------------------------------- +VEDRIVE.CONF.L lda CONF.LBUF + + cmp #13 CR + beq .8 + + cmp #'#' comment + beq .8 + + lda #CONF.LBUF + sta ZPPtr1 + lda /CONF.LBUF + sta ZPPtr1+1 + + ldy #CONF.KW + lda /CONF.KW + jsr VEDRIVE.CONF.KW + bcs .9 + + ldx idx + jmp (.5,x) + +.5 .DA VEDRIVE.CONF.KW.NIC + .DA VEDRIVE.CONF.KW.SLOT + .DA VEDRIVE.CONF.KW.ADDRESS + .DA VEDRIVE.CONF.KW.MASK + .DA VEDRIVE.CONF.KW.GATEWAY + .DA VEDRIVE.CONF.KW.SERVER + .DA VEDRIVE.CONF.KW.PORT + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.CONF.KW.NIC + jsr VEDRIVE.CONF.SKIPSP + bcs .9 + + ldy #CONF.KW.NIC + lda /CONF.KW.NIC + + jsr VEDRIVE.CONF.KW + bcs .9 + + lda idx + sta CONF.NIC + + clc +.9 rts +*-------------------------------------- +VEDRIVE.CONF.KW.SLOT + jsr VEDRIVE.CONF.SKIPSP + bcs .9 + + lda (ZPPtr1) + cmp #'1' + bcc .9 + + cmp #'8' + bcs .9 + + and #$0F + sta CONF.SLOT + + clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.CONF.KW.ADDRESS + ldx #CONF.ADDRESS-CONF.IPCFG + .HS 2C BIT ABS +VEDRIVE.CONF.KW.MASK + ldx #CONF.MASK-CONF.IPCFG + .HS 2C BIT ABS +VEDRIVE.CONF.KW.GATEWAY + ldx #CONF.GATEWAY-CONF.IPCFG + .HS 2C BIT ABS +VEDRIVE.CONF.KW.SERVER + ldx #CONF.SERVER-CONF.IPCFG + + jsr VEDRIVE.CONF.SKIPSP + bcs .9 + + jsr VEDRIVE.CONF.GetIPatX + +.9 rts +*-------------------------------------- +VEDRIVE.CONF.KW.PORT + jsr VEDRIVE.CONF.SKIPSP + bcs .9 + + jsr VEDRIVE.CONF.GetInt + bcs .9 + + lda int + sta CONF.PORT+1 + + lda int+1 + sta CONF.PORT + +.9 rts +*-------------------------------------- +VEDRIVE.CONF.KW sty ZPPtr2 + sta ZPPtr2+1 + + ldy #$ff + +.1 iny + lda (ZPPtr1),y + cmp #13 CR + beq .2 + + cmp #32 SPACE + bne .1 + +.2 sty len + + stz idx + +.3 lda len + cmp (ZPPtr2) + bne .6 + + tay + +.4 lda (ZPPtr2),y + dey + cmp (ZPPtr1),y + bne .6 + + tya + bne .4 + + lda ZPPtr1 + clc + adc len + sta ZPPtr1 + bcc .5 + + inc ZPPtr1+1 + +.5 clc + rts + +.6 lda (ZPPtr2) + sec + adc ZPPtr2 + sta ZPPtr2 + bcc .7 + + inc ZPPtr2+1 + +.7 inc idx + inc idx + lda (ZPPtr2) + bne .3 + + sec + rts +*-------------------------------------- +VEDRIVE.CONF.SKIPSP + lda (ZPPtr1) + cmp #32 + bne .9 + + bra .3 + +.1 lda (ZPPtr1) + cmp #13 + beq .9 + +.2 cmp #32 + bne .8 + +.3 inc ZPPtr1 + bne .1 + + inc ZPPtr1+1 + bra .1 + +.8 clc + +.9 rts +*-------------------------------------- +VEDRIVE.CONF.GetIPatX + jsr VEDRIVE.CONF.GetShort + bcs .9 + + ldy #4 + +.1 sta CONF.IPCFG,x + inx + dey + beq .9 CC + + jsr VEDRIVE.GetCharPtr1 + bcs .9 + + cmp #'.' + sec + bne .9 + + jsr VEDRIVE.CONF.GetShort + bcc .1 + +.9 rts +*-------------------------------------- +VEDRIVE.CONF.GetShort + jsr VEDRIVE.CONF.GetInt + bcs .9 + + lda int+1 + sec + bne .9 + + lda int + clc + +.9 rts +*-------------------------------------- +VEDRIVE.CONF.GetInt + stz int + stz int+1 + +.1 lda (ZPPtr1) + cmp #'0' + bcc .8 + + cmp #'9'+1 + bcs .8 + + inc ZPPtr1 + bne .2 + + inc ZPPtr1+1 + +.2 and #$0F + pha + + lda int+1 + pha + lda int + pha + + asl int + rol int+1 x2 + asl int + rol int+1 x4 + + pla + clc + adc int + sta int + + pla + adc int+1 + sta int+1 x4+1 = x5 + + asl int + rol int+1 x10 + + pla + clc + adc int + sta int + bcc .1 + + inc int+1 + bra .1 + +.8 clc + rts +*-------------------------------------- +VEDRIVE.GetCharPtr1 + lda (ZPPtr1) + cmp #13 + beq .9 + + inc ZPPtr1 + bne .8 + + inc ZPPtr1+1 + +.8 clc +.9 rts +*-------------------------------------- +MAN +SAVE usr/src/sys/km.vedrive.s.cf +LOAD usr/src/sys/km.vedrive.s +ASM diff --git a/SYS/KM.VEDRIVE.S.GS.txt b/SYS/KM.VEDRIVE.S.GS.txt new file mode 100644 index 00000000..7e88e826 --- /dev/null +++ b/SYS/KM.VEDRIVE.S.GS.txt @@ -0,0 +1,17 @@ +NEW + AUTO 3,1 +*-------------------------------------- +GS.Init sec + rts +*-------------------------------------- +DRV.GS .EQ * + .PH $D400 + + +*-------------------------------------- + .EP +*-------------------------------------- +MAN +SAVE usr/src/sys/km.vedrive.s.gs +LOAD usr/src/sys/km.vedrive.s +ASM diff --git a/SYS/KM.VEDRIVE.S.IP.txt b/SYS/KM.VEDRIVE.S.IP.txt new file mode 100644 index 00000000..8eebba1e --- /dev/null +++ b/SYS/KM.VEDRIVE.S.IP.txt @@ -0,0 +1,529 @@ +NEW + AUTO 3,1 +*-------------------------------------- +VEDRIVE.MACInit ldx #5 + +.1 lda CONF.SRCMAC,x + sta DHCP.DISC.SRCMAC,x + sta DHCP.REQ.SRCMAC,x + sta DHCP.DISC.CHADDR,x + sta DHCP.REQ.CHADDR,x + sta ARP.REQ.SRCMAC,x + sta ARP.REQ.SHA,x + sta ARP.REP.SRCMAC,x + sta ARP.REP.SHA,x + sta ADT.REQ.SRCMAC,x + dex + bpl .1 + + rts +*-------------------------------------- +VEDRIVE.IPInit ldx #3 + +.1 lda CONF.ADDRESS,x + sta ARP.REQ.SPA,x + sta ARP.REP.TPA,x + sta ADT.REQ.IP.SRC,x + + lda CONF.SERVER,x + sta ARP.REQ.TPA,x + sta ADT.REQ.IP.DST,x + dex + bpl .1 + + rts +*-------------------------------------- +VEDRIVE.DHCPReq >LDYAI DHCP.DISC + >STYA ZPBufPtr + >LDYAI DHCP.DISC.LEN + >STYA ZPBufCnt + jsr VEDRIVE.SendUDP + bcs .9 + + jsr VEDRIVE.InitTimer + +.2 jsr VEDRIVE.READ + bcc .3 + + jsr VEDRIVE.Wait + bcc .2 + + rts + +.3 jsr VEDRIVE.CheckDHCPOffer + bcs .2 + + >LDYAI DHCP.REQ + >STYA ZPBufPtr + >LDYAI DHCP.REQ.LEN + >STYA ZPBufCnt + jsr VEDRIVE.SendUDP + bcs .9 + + jsr VEDRIVE.InitTimer + +.4 jsr VEDRIVE.READ + bcc .5 + + jsr VEDRIVE.Wait + bcc .4 + + rts + +.5 >LDYAI FRAMEBUF + >STYA ZPBufPtr + + jsr VEDRIVE.CheckDHCPFrame + bcs .4 + + eor #S.DHCP.OPTIONS.DHCPAck + bne .4 + +* clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.IPChecksum + ldy #S.IP.TOTAL.LENGTH+1 + lda ZPBufCnt + sec + sbc #S.ETH.EII + sta (ZPBufPtr),y + dey + lda ZPBufCnt+1 + sbc /S.ETH.EII + sta (ZPBufPtr),y + lda #0 + ldy #S.IP.HDR.CHECKSUM + sta (ZPBufPtr),y + iny + sta (ZPBufPtr),y + + stz ZPCheckSum RESET IP CHECKSUM + stz ZPCheckSum+1 + + clc + + ldy #S.IP.V.IHL + + ldx #10 10 words for IP Header + +.2 lda (ZPBufPtr),y + adc ZPCheckSum + sta ZPCheckSum + iny + lda (ZPBufPtr),y + adc ZPCheckSum+1 + sta ZPCheckSum+1 + iny + dex + bne .2 + + ldy #S.IP.HDR.CHECKSUM + lda ZPCheckSum + adc #0 + eor #$FF + sta (ZPBufPtr),y + iny + lda ZPCheckSum+1 + adc #0 + eor #$FF + sta (ZPBufPtr),y + rts +*-------------------------------------- +VEDRIVE.UDPChecksum + clc + + ldy #S.UDP.LENGTH+1 + lda (ZPBufPtr),y + adc #S.IP.PROTOCOL.UDP + sta ZPCheckSum+1 + + dey + lda (ZPBufPtr),y + adc /S.IP.PROTOCOL.UDP (all zero) + sta ZPCheckSum + jsr VEDRIVE.AddSrcDstIPToChecksum + + ldy #S.UDP.LENGTH+1 + lda (ZPBufPtr),y + eor #$ff + tax + + dey + lda (ZPBufPtr),y + eor #$ff + ldy #S.UDP.CHECKSUM +*-------------------------------------- +* X,A = !ByteCount, Y = Offset in Frame +*-------------------------------------- +VEDRIVE.ComputeChecksum + phy Save Offset + pha Save !ByteCount.HI + + lda #0 Reset Checksum + sta (ZPBufPtr),y + iny + sta (ZPBufPtr),y + + >LDYA ZPBufPtr + >STYA ZPPtr1 + + ldy #S.IP + +.1 inx + bne .11 + + pla + inc + beq .8 + + pha +.11 lda (ZPPtr1),y + adc ZPCheckSum + sta ZPCheckSum + + iny + bne .20 + + inc ZPPtr1+1 +.20 inx + bne .2 + + pla + inc + beq .7 + + pha + +.2 lda (ZPPtr1),y + + adc ZPCheckSum+1 + sta ZPCheckSum+1 + iny + bne .1 + + inc ZPPtr1+1 + bra .1 + +.7 adc ZPCheckSum+1 A=0 from beq .7 + sta ZPCheckSum+1 + +.8 ply + lda ZPCheckSum + adc #0 Don't forget to add last carry!!! + eor #$FF + sta (ZPBufPtr),y + iny + lda ZPCheckSum+1 + adc #0 Don't forget to add last carry!!! + eor #$FF + sta (ZPBufPtr),y + rts +*-------------------------------------- +VEDRIVE.AddSrcDstIPToChecksum + ldy #S.IP.SRC + ldx #4 4 words for SRC & DST IP + +.1 lda (ZPBufPtr),y + adc ZPCheckSum + sta ZPCheckSum + iny + lda (ZPBufPtr),y + adc ZPCheckSum+1 + sta ZPCheckSum+1 + iny + dex + bne .1 + + rts +*-------------------------------------- +VEDRIVE.CheckDHCPOffer + >LDYAI FRAMEBUF + >STYA ZPBufPtr + + jsr VEDRIVE.CheckDHCPFrame + bcs .9 + + cmp #S.DHCP.OPTIONS.DHCPOffer + bne .9 + + ldy #S.DHCP.YIADDR+3 + ldx #3 + +.2 lda (ZPBufPtr),y + sta DHCP.REQ.OPT.REQIP,x + sta CONF.ADDRESS,x + dey + dex + bpl .2 + + ldy #S.DHCP.SIADDR+3 + lda (ZPBufPtr),y + bne .3 + + ldy #S.IP.SRC+3 + +.3 ldx #3 + +.4 lda (ZPBufPtr),y + sta DHCP.REQ.OPT.SVRIP,x + dey + dex + bpl .4 + +.5 inc ZPPtr1 skip Option 53 (DHCPOffer:530102) + bne .6 + + inc ZPPtr1+1 + +.6 lda (ZPPtr1) + sec + adc ZPPtr1 add option len + 1 + sta ZPPtr1 + bcc .7 + + inc ZPPtr1+1 + +.7 lda (ZPPtr1) + cmp #S.DHCP.OPTIONS.END + beq .8 + + jsr VEDRIVE.GetDHCPOption + bra .5 + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.CheckDHCPFrame + jsr VEDRIVE.CheckUDPFrame + bcs .9 + + ldy #S.DHCP.XID+3 + ldx #3 + +.1 lda (ZPBufPtr),y + cmp DHCP.DISC.XID,x same XID ? + bne .9 + + dey + dex + bpl .1 + + lda ZPBufPtr + clc + adc #S.DHCP.OPTIONS + sta ZPPtr1 + + lda ZPBufPtr+1 + adc /S.DHCP.OPTIONS + sta ZPPtr1+1 + + lda (ZPPtr1) + cmp #S.DHCP.OPTIONS.MSGTYPE + bne .9 + + ldy #2 + lda (ZPPtr1),y + + clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.GetDHCPOption + cmp #S.DHCP.OPTIONS.MASK + bne .1 + + ldx #CONF.MASK-CONF.IPCFG + bra .5 + +.1 cmp #S.DHCP.OPTIONS.GW + bne .2 + + ldx #CONF.GATEWAY-CONF.IPCFG + bra .5 + +.2 cmp #S.DHCP.OPTIONS.SRVID + bne .9 + + ldy #5 + ldx #3 + +.3 lda (ZPPtr1),y + sta DHCP.REQ.OPT.SVRIP,x + dey + dex + bpl .3 + + rts + +.5 ldy #2 Skip Byte count + lda #4 + +.6 pha + lda (ZPPtr1),y + sta CONF.IPCFG,x + iny + inx + pla + dec + bne .6 + +.9 rts +*-------------------------------------- +VEDRIVE.CheckADTRep + jsr VEDRIVE.CheckUDPFrame + bcs .9 + + ldy #S.TCPUDP.DSTPORT + lda (ZPBufPtr),y + cmp #$C0 + bne .9 + + iny + lda (ZPBufPtr),y + bne .9 + + clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.CheckUDPFrame + ldy #S.ETH.EII.TYPE + lda (ZPBufPtr),y + cmp /S.ETH.EII.TYPE.IP + bne .9 + + iny + lda (ZPBufPtr),y + cmp #S.ETH.EII.TYPE.IP + bne .9 + + ldy #S.IP.PROTOCOL + lda (ZPBufPtr),y + cmp #S.IP.PROTOCOL.UDP + bne .9 + + clc + rts + +.9 sec + rts +*-------------------------------------- +VEDRIVE.ARPReq >LDYAI ARP.REQ + >STYA ZPBufPtr + >LDYAI S.ARP + >STYA ZPBufCnt + jsr VEDRIVE.SendARP + bcs .9 + + jsr VEDRIVE.InitTimer + + stz bRemoteMac + +.2 jsr VEDRIVE.READ + bcc .3 + + jsr VEDRIVE.Wait + bcc .2 + + rts + +.3 jsr VEDRIVE.CheckARPFrame + + bit bRemoteMac + bpl .2 + + clc +.9 rts +*-------------------------------------- +VEDRIVE.CheckARPFrame + ldy #S.ETH.EII.TYPE + lda (ZPBufPtr),y + cmp /S.ETH.EII.TYPE.ARP + bne .9 + + iny + lda (ZPBufPtr),y + cmp #S.ETH.EII.TYPE.ARP + bne .9 + + ldy #S.ARP.OPERATION+1 + lda (ZPBufPtr),y + + cmp #S.ARP.OPERATION.REP + bne .5 +*-------------------------------------- + ldy #S.ARP.SPA+3 + ldx #3 + +.1 lda (ZPBufPtr),y + cmp CONF.SERVER,x + bne .8 + + dey + dex + bpl .1 + + ldy #S.ARP.SHA+5 + ldx #5 + +.2 lda (ZPBufPtr),y + sta ADT.REQ.DSTMAC,x + dey + dex + bpl .2 + + dec bRemoteMac + + clc + rts +*-------------------------------------- +.5 cmp #S.ARP.OPERATION.REQ + bne .8 + + ldy #S.ARP.TPA+3 + ldx #3 + +.6 lda (ZPBufPtr),y + cmp CONF.ADDRESS,x + bne .8 + + dey + dex + bpl .6 + + ldy #S.ARP.SHA+9 + ldx #9 + +.7 lda (ZPBufPtr),y + sta ARP.REP.THA,x + dey + dex + bpl .7 + + >LDYAI ARP.REP + >STYA ZPBufPtr + >LDYAI S.ARP + >STYA ZPBufCnt + jsr VEDRIVE.SendARP + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +MAN +SAVE usr/src/sys/km.vedrive.s.ip +LOAD usr/src/sys/km.vedrive.s +ASM diff --git a/SYS/KM.VEDRIVE.S.U1.txt b/SYS/KM.VEDRIVE.S.U1.txt new file mode 100644 index 00000000..045911df --- /dev/null +++ b/SYS/KM.VEDRIVE.S.U1.txt @@ -0,0 +1,248 @@ +NEW + AUTO 3,1 +*-------------------------------------- +U1.Init lda CONF.SLOT + asl + asl + asl + asl + sta DRV.U1+2 set DRV.U1.Slotn0 + + tax + + lda /PP.ID + sta PacketPagePTR+1,x + lda #PP.ID + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + cmp /CS8900A.DEVID + bne .9 + + lda PacketPageDATA,x + cmp #CS8900A.DEVID + beq .1 + +.9 sec + rts + +.1 lda CONF.SLOT + pha + + lda /PP.REVISION Get Revision# of ths chip... + sta PacketPagePTR+1,x + lda #PP.REVISION + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + pha + lda PacketPageDATA,x + pha + + lda #U1.Name + pha + lda /U1.Name + pha + + >LDYAI VEDRIVE.NICOK + jsr PrintFYA + + ldx DRV.U1+2 + + lda /PP.RxCTL + sta PacketPagePTR+1,x + lda #PP.RxCTL + sta PacketPagePTR,x + lda /PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA + sta PacketPageDATA+1,x + lda #PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA + sta PacketPageDATA,x + + lda /PP.MAC + sta PacketPagePTR+1,x + lda #PP.MAC + sta PacketPagePTR,x + + lda CONF.SRCMAC+1 + sta PacketPageDATA+1,x + lda CONF.SRCMAC+0 + sta PacketPageDATA,x + + lda /PP.MAC+2 + sta PacketPagePTR+1,x + lda #PP.MAC+2 + sta PacketPagePTR,x + + lda CONF.SRCMAC+3 + sta PacketPageDATA+1,x + lda CONF.SRCMAC+2 + sta PacketPageDATA,x + + lda /PP.MAC+4 + sta PacketPagePTR+1,x + lda #PP.MAC+4 + sta PacketPagePTR,x + + lda CONF.SRCMAC+5 + sta PacketPageDATA+1,x + lda CONF.SRCMAC+4 + sta PacketPageDATA,x + + lda /PP.LineCTL + sta PacketPagePTR+1,x + lda #PP.LineCTL + sta PacketPagePTR,x + + lda /PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT + sta PacketPageDATA+1,x + lda #PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT + sta PacketPageDATA,x + + clc + rts +*-------------------------------------- +U1.READ php + sei + + ldx DRV.U1+2 + + lda /PP.RxEvent + sta PacketPagePTR+1,x + lda #PP.RxEvent + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + ldy PacketPageDATA,x + and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt + beq U1.READWRITE.9 + + lda RTDATA+1,x discard RxStatus + lda RTDATA,x + + lda RTDATA+1,x get RxLength + sta ZPBufCnt+1 + eor #$ff + sta ZPnCnt+1 + + lda RTDATA,x + sta ZPBufCnt + eor #$ff + sta ZPnCnt + + ldx DRV.U1+2 + + lda ZPBufPtr+1 + pha + + ldy #0 + +.2 inc ZPnCnt + bne .3 + + inc ZPnCnt+1 + beq .8 + +.3 lda RTDATA,x + sta (ZPBufPtr),y + iny + + inc ZPnCnt + bne .4 + + inc ZPnCnt+1 + beq .8 + +.4 lda RTDATA+1,x + sta (ZPBufPtr),y + iny + bne .2 + + inc ZPBufPtr+1 + bra .2 + +.8 pla + sta ZPBufPtr+1 + + plp + clc + rts +*-------------------------------------- +U1.READWRITE.9 plp + sec + rts +*-------------------------------------- +U1.WRITE php + sei + + ldx DRV.U1+2 + + lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL + sta TxCMD+1,x + lda #PP.TxCMD.LID+PP.TxCMD.TxStartFULL + sta TxCMD,x + + lda ZPBufCnt+1 + sta TxLength+1,x + eor #$ff + sta ZPnCnt+1 + + lda ZPBufCnt + sta TxLength,x + eor #$ff + sta ZPnCnt + + lda /PP.BusST + sta PacketPagePTR+1,x + lda #PP.BusST + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + ldy PacketPageDATA,x + bit /PP.BusST.Rdy4TxNOW + beq U1.READWRITE.9 + + ldx DRV.U1+2 + + ldy #0 + +.1 inc ZPnCnt + bne .2 + + inc ZPnCnt+1 + beq .8 + +.2 lda (ZPBufPtr),y + sta RTDATA,x + iny + + inc ZPnCnt + bne .3 + + inc ZPnCnt+1 + beq .8 + +.3 lda (ZPBufPtr),y + sta RTDATA+1,x + iny + bne .1 + + inc ZPBufPtr+1 + bne .1 + +.8 plp + clc + rts +*-------------------------------------- +U1.Name >PSTR "Uthernet V1" +*-------------------------------------- +DRV.U1 .EQ * + .PH $D400 + cld + ldx #$ff SELF MODIFIED + + .EP +*-------------------------------------- +MAN +SAVE usr/src/sys/km.vedrive.s.u1 +LOAD usr/src/sys/km.vedrive.s +ASM diff --git a/SYS/KM.VEDRIVE.S.U2.txt b/SYS/KM.VEDRIVE.S.U2.txt new file mode 100644 index 00000000..af58f865 --- /dev/null +++ b/SYS/KM.VEDRIVE.S.U2.txt @@ -0,0 +1,264 @@ +NEW + AUTO 3,1 +*-------------------------------------- +U2.Init lda CONF.SLOT + asl + asl + asl + asl + clc + adc #$88 + sta DRV.U2+2 set DRV.U2.Slotn0 + tax + + lda #W5100.MR.RST + sta W5100.MR,x + + lda #0 + +.1 dec give some time.... + bne .1 + + lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND + sta W5100.MR,x + + pha + pla + + lda W5100.MR,x + cmp #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND + bne .9 + + >AR.SELECT RTR + lda W5100.DR,x Get RTR HI + cmp /2000 + bne .9 + + lda W5100.DR,x Get RTR LO + cmp #2000 + beq .3 + +.9 sec + rts + +.3 lda CONF.SLOT + pha + + lda #0 + pha + pha + + lda #U2.Name + pha + lda /U2.Name + pha + + >LDYAI VEDRIVE.NICOK + jsr PrintFYA + + ldx DRV.U2+2 + + lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND + sta W5100.MR,x + + >AR.SELECT SHAR + ldy #0 + +.4 lda CONF.SRCMAC,y + sta W5100.DR,x + iny + cpy #6 + bne .4 + + >AR.SELECT RMSR + lda #3 8k,0k,0k,0k + sta W5100.DR,x ...for Socket RX Buffers + sta W5100.DR,x ...for Socket TX Buffers + + >AR.SELECT S0.MR + lda #W5100.AR.Sn.MR.MACRAW+W5100.AR.Sn.MR.MF + sta W5100.DR,x + + >AR.SELECT S0.CR + lda #W5100.AR.Sn.CR.OPEN + sta W5100.DR,x + + + clc + rts +*-------------------------------------- +U2.Read php + sei + + ldx DRV.U2+2 + + >AR.SELECT S0.RX.RSR + lda W5100.DR,x get the received size HI + nop + nop + ora W5100.DR,x LO + bne .1 + + jmp U2.READWRITE.9 + +.1 >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 /RXTX.MASK + 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 TotalSize+1 + lda W5100.DR,x get RX.Size LO + sta TotalSize + + sec + sbc #2 MACRAW:strip 2 bytes Header from Size + sta ZPBufCnt + eor #$ff + sta ZPnCnt + + lda TotalSize+1 + sbc #0 + sta ZPBufCnt + eor #$ff + sta ZPnCnt+1 + + lda ZPBufPtr+1 + pha + + ldy #0 + +.2 inc ZPnCnt + bne .3 + + inc ZPnCnt+1 + beq .8 + +.3 lda W5100.DR,x + sta (ZPBufPtr),y + iny + bne .2 + + inc ZPBufPtr+1 + bra .2 + +.8 >AR.SELECT S0.RX.RD + + lda Offset + clc + adc TotalSize + pha save LO + + lda Offset+1 + adc TotalSize+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 + sta ZPBufPtr+1 + + plp + clc + rts +*-------------------------------------- +U2.READWRITE.9 plp + sec + rts +*-------------------------------------- +U2.Write php + sei + + ldx DRV.U2+2 + + lda ZPBufCnt + eor #$ff + sta ZPnCnt + + lda ZPBufCnt+1 + eor #$ff + sta ZPnCnt+1 + + >AR.SELECT S0.TX.FSR + lda W5100.DR,x get send size HI + nop + nop + ldy W5100.DR,x LO + cpy ZPBufCnt + sbc ZPBufCnt+1 + bcc U2.READWRITE.9 + + >AR.SELECT S0.TX.WR + lda W5100.DR,x Get HI + nop + nop + ldy W5100.DR,x Get LO + and /RXTX.MASK + ora /TX.BASE + sta W5100.AR,x Write HI + sta Offset+1 + tya + sta W5100.AR+1,x Write LO + sta Offset + + ldy #0 + +.2 inc ZPnCnt + bne .3 + + inc ZPnCnt+1 + beq .8 + +.3 lda (ZPBufPtr),y + sta W5100.DR,x + iny + bne .2 + + inc ZPBufPtr+1 + bra .2 + +.8 >AR.SELECT S0.TX.WR + lda Offset + clc + adc ZPBufCnt + pha save LO + lda Offset+1 + adc ZPBufCnt+1 + sta W5100.DR,x write HI + pla + sta W5100.DR,x write LO + + >AR.SELECT S0.CR + lda #W5100.AR.Sn.CR.SEND + sta W5100.DR,x + + plp + clc + rts +*-------------------------------------- +U2.Name >PSTR "Uthernet II" +Offset .BS 2 +TotalSize .BS 2 +*-------------------------------------- +DRV.U2 .EQ * + .PH $D400 + cld + ldx #$ff SELF MODIFIED + + .EP +*-------------------------------------- +MAN +SAVE usr/src/sys/km.vedrive.s.u2 +LOAD usr/src/sys/km.vedrive.s +ASM diff --git a/SYS/KM.VEDRIVE.S.txt b/SYS/KM.VEDRIVE.S.txt index 2ef7d66e..90a9cc5b 100644 --- a/SYS/KM.VEDRIVE.S.txt +++ b/SYS/KM.VEDRIVE.S.txt @@ -3,221 +3,258 @@ NEW .LIST OFF .OP 65C02 .OR $2000 - .TF sys/km.vedrive +* .TF sys/km.vedrive + .TF vedrive.pm *-------------------------------------- .INB inc/macros.i .INB inc/io.i .INB inc/monitor.i .INB inc/mli.i .INB inc/mli.e.i + .INB inc/nic.i + .INB inc/nic.8900a.i + .INB inc/nic.w5100.i + .INB inc/nic.91c96.i + .INB inc/eth.i + .INB inc/net.tcpip.i + .INB inc/net.dhcp.i +*-------------------------------------- +ZPPtr1 .EQ $0 +ZPPtr2 .EQ $2 +len .EQ 4 +idx .EQ 5 +int .EQ 6 +ZPBufPtr .EQ 8 +ZPBufCnt .EQ 10 +ZPnCnt .EQ 12 +ZPCheckSum .EQ 14 +timerS .EQ 16 +timerC .EQ 17 +bRemoteMac .EQ 18 *-------------------------------------- -TmpPtr1 .EQ $0 ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope ADT.CMD.PING .EQ $D9 "Y": PING DRV.EntryPoint .EQ $BF41 +DRV.ADDR .EQ $D400 *-------------------------------------- -VSDRIVE.Init >LDYAI VSDRIVE.MSG0 +CONF.FBUF .EQ $4000 +CONF.LBUF .EQ $4400 +CONF.FILEPATH .EQ $4500 +FRAMEBUF .EQ $4600 +*-------------------------------------- +VEDRIVE.Init >LDYAI VEDRIVE.MSG0 jsr PrintFYA - jsr VSDRIVE.Check - bcs .90 - -.1 lda #$C1 Self Modified + jsr VEDRIVE.CheckDRV + bcc .1 -.2 jsr SSC.Detect - bcs .99 + >LDYAI VEDRIVE.DRVKO + jsr PrintFYA + rts - stx DRV+2 DRV.Slotn0 +.1 jsr VEDRIVE.ReadConf + bcc .2 - sta .1+1 Slot Cn - and #$0F - pha slot n - >LDYAI VSDRIVE.SSCOK + >LDYAI VEDRIVE.CONFINV + jsr PrintFYA + rts + +.2 jsr VEDRIVE.CheckHW + bcc .3 + + >LDYAI VEDRIVE.NICKO + jsr PrintFYA + rts + +.3 jsr VEDRIVE.MACInit + + lda CONF.ADDRESS + bne .4 + + >LDYAI VEDRIVE.DHCP jsr PrintFYA - jsr VSDRIVE.Ping + jsr VEDRIVE.DHCPReq + bcc .4 - bcs .92 + >LDYAI VEDRIVE.DHCPKO + jsr PrintFYA + rts - >LDYAI VSDRIVE.SRVOK +.4 jsr VEDRIVE.IPInit + + jsr VEDRIVE.ARPReq + bcc .5 + + >LDYAI VEDRIVE.IPKO jsr PrintFYA - jsr VSDRIVE.SetSlot - bcs .91 - pha Push slot + rts + +.5 ldx #11 + +.6 lda CONF.ADDRESS,x + pha + dex + bpl .6 + + >LDYAI VEDRIVE.IPOK + jsr PrintFYA + + jsr VEDRIVE.Ping + bcc .7 + + >LDYAI VEDRIVE.SRVKO + jsr PrintFYA + rts + +.7 >LDYAI VEDRIVE.SRVOK + jsr PrintFYA + + jsr VEDRIVE.SetSlot + bcc .8 + + >LDYAI VEDRIVE.NOSLOT + jsr PrintFYA + rts + +.8 pha Push slot pha 2 times - >LDYAI VSDRIVE.DEVOK + >LDYAI VEDRIVE.DEVOK jsr PrintFYA - jsr VSDRIVE.Install - >LDYAI VSDRIVE.OK - jsr PrintFYA - rts -.90 >LDYAI VSDRIVE.DRVKO - jsr PrintFYA - rts -.91 >LDYAI VSDRIVE.NOSLOT - jsr PrintFYA - rts -.92 pha Push EC - >LDYAI VSDRIVE.SRVKO - jsr PrintFYA - inc .1+1 - lda .1+1 - cmp #$C8 - bne .2 Go try next SSC.... + jsr VEDRIVE.Install + bcc .9 -.99 >LDYAI VSDRIVE.SSCKO + >LDYAI VEDRIVE.DRVIKO + jsr PrintFYA + rts + +.9 >LDYAI VEDRIVE.DRVIOK jsr PrintFYA rts *-------------------------------------- -VSDRIVE.Check bit RRAMWRAMBNK2 +VEDRIVE.CheckDRV + bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 clc - lda $D001 - eor DRV + lda $D400 + eor #$D8 CLD bne .8 - lda $D002 - eor DRV+1 + + lda $D401 + eor #$A2 LDX #imm bne .8 + sec + .8 bit RROMBNK1 rts *-------------------------------------- -SSC.Detect stz TmpPtr1 - sta TmpPtr1+1 -.1 ldx #DEVSIG.Value-DEVSIG.Offset-1 +VEDRIVE.Ping lda CONF.PORT + sta ADT.REQ.UDP.DST -.2 ldy DEVSIG.Offset,x - lda (TmpPtr1),y - cmp DEVSIG.Value,x - bne .3 - dex - bpl .2 - lda TmpPtr1+1 A=SlotCN - asl - asl - asl - asl - tax X=SlotN0 - stz SSC.RESET,x - jsr VSDRIVE.Wait - lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP - sta SSC.CTL,x - jsr VSDRIVE.Wait - lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR - sta SSC.CMD,x - jsr VSDRIVE.Wait + lda CONF.PORT+1 + sta ADT.REQ.UDP.DST+1 - lda TmpPtr1+1 A=Slot Cn, X=n0 + >LDYAI ADT.REQ + >STYA ZPBufPtr - clc - rts X=SlotN0, A=SlotCN -.3 inc TmpPtr1+1 no match, try next slot.... - lda TmpPtr1+1 - cmp #$C8 - bne .1 -.9 sec + >LDYAI ADT.REQ.LEN + >STYA ZPBufCnt + jsr VEDRIVE.SendUDP + bcs .9 + + jsr VEDRIVE.InitTimer + +.3 jsr VEDRIVE.READ + bcc .4 + + jsr VEDRIVE.Wait + bcc .3 + + rts + +.4 jsr VEDRIVE.CheckADTRep + bcc .8 + + jsr VEDRIVE.CheckARPFrame + bra .3 + +.8 +* clc +.9 rts +*-------------------------------------- +VEDRIVE.CheckHW ldx CONF.NIC + jmp (.1,x) + +.1 .DA GS.Init + .DA U1.Init + .DA U2.Init +*-------------------------------------- +VEDRIVE.SendUDP jsr VEDRIVE.IPChecksum + jsr VEDRIVE.UDPChecksum + +VEDRIVE.SendARP ldx CONF.NIC + jmp (.1,x) + +.1 .DA U1.WRITE + .DA U1.WRITE + .DA U2.WRITE +*-------------------------------------- +VEDRIVE.READ >LDYAI FRAMEBUF + >STYA ZPBufPtr + + ldx CONF.NIC + jmp (.1,x) + +.1 .DA U1.READ + .DA U1.READ + .DA U2.READ +*-------------------------------------- +VEDRIVE.InitTimer + lda VBL + sta timerS + stz timerC rts *-------------------------------------- -VSDRIVE.Ping ldx DRV+2 DRV.Slotn0 - - stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 +VEDRIVE.Wait lda VBL + tax + eor timerS + bpl .8 -.10 jsr VSDRIVE.IncTimer Wait....... - bne .10 - ldy #10 -.1 lda SSC.STATUS,x - and #SSC.STATUS.TDRE Ready for transmit? - bne .20 - - jsr VSDRIVE.IncTimer Wait....... - bne .1 - dey - bne .1 - lda #1 - sec - rts Time Out..... -.20 stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 + stx timerS - ldy #5 5 bytes to send - -.2 lda VSDRIVE.CMDS-1,y - sta SSC.DATA,x -.3 lda SSC.STATUS,x - and #SSC.STATUS.TDRE char transmitted? - bne .4 - - jsr VSDRIVE.IncTimer - bne .3 - lda #2 - sec - rts -.4 dey - bne .2 next byte - lda #521^$ffff 522 bytes to recieve - sta VSDRIVE.Ping.BC - lda /521^$ffff - sta VSDRIVE.Ping.BC+1 - stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 - - ldy #3 EC if no byte recieved -.5 lda SSC.STATUS,x - and #SSC.STATUS.RDRF incoming char? - bne .6 -* jsr VSDRIVE.Wait - jsr VSDRIVE.IncTimer - bne .5 - tya - sec - rts -.6 ldy #4 EC=4 if recieved only partial reply - - lda SSC.DATA,x - inc VSDRIVE.Ping.BC - bne .5 - inc VSDRIVE.Ping.BC+1 - bne .5 - clc - rts -*-------------------------------------- -VSDRIVE.IncTimer - inc VSDRIVE.Ping.TO + dec timerC bne .8 - inc VSDRIVE.Ping.TO+1 -.8 rts -*-------------------------------------- -VSDRIVE.Wait lda #0 -.1 dec - bne .1 + + sec + rts + +.8 clc rts -*-------------------------------------- -VSDRIVE.CMDS .HS C6.00.00.03 - .DA #ADT.CMD.VSD -* C6=C5 eor 03 eor 00 eor 00 -VSDRIVE.Ping.TO .BS 2 -VSDRIVE.Ping.BC .BS 2 *-------------------------------------- * Find 2 free slots in DEVPTRS (D1 & D2) *-------------------------------------- -VSDRIVE.SetSlot ldx #2 Starts at Slot1 +VEDRIVE.SetSlot ldx #2 Starts at Slot1 .1 lda DEVPTRS,x Drive1 cmp DEVPTRS pointing to S0D1 NODEV ? bne .2 + lda DEVPTRS+1,x cmp DEVPTRS+1 bne .2 + lda DEVPTRS+16,x Drive2 cmp DEVPTRS bne .2 + lda DEVPTRS+17,x cmp DEVPTRS+1 bne .2 + lda #DRV.EntryPoint sta DEVPTRS,x sta DEVPTRS+16,x @@ -240,63 +277,56 @@ VSDRIVE.SetSlot ldx #2 Starts at Slot1 lsr exit with A=SLOT clc rts + .2 inx inx cpx #16 bne .1 + rts sec from CPX *-------------------------------------- -VSDRIVE.Install ldx #PATCH.SIZE +VEDRIVE.Install ldx #PATCH.SIZE .1 lda PATCH-1,x sta DRV.EntryPoint-1,x dex bne .1 + bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 - ldx #DRV.SIZE -.2 lda DRV-1,x - sta $D000,x - dex - bne .2 + + + + + + + bit RROMBNK1 clc rts *-------------------------------------- .INB usr/src/shared/x.printf.s *-------------------------------------- -DEVSIG.Offset .HS 05070B0C -DEVSIG.Value .HS 38180131 -VSDRIVE.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver For A2osX\n" -VSDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\n" -VSDRIVE.SSCKO .AZ "Uthernet2 Not Detected.\n" -VSDRIVE.SSCOK .AZ "Uthernet2 Found At Slot %d.\nContacting ADTPro Server..." -VSDRIVE.SRVKO .AZ "No Response From ADTPro Server (EC=%d).\n" -VSDRIVE.SRVOK .AZ "ADTPro Server Is Online.\n" -VSDRIVE.NOSLOT .AZ "No ProDOS device slot available.\n" -VSDRIVE.DEVOK .AZ "VEDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\n" -VSDRIVE.OK .AZ "VEDRIVE Driver Successfully Installed.\n" -*-------------------------------------- * ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes) *-------------------------------------- PATCH .PH DRV.EntryPoint bit RRAMWRAMBNK2 - jsr $D001 + jsr $D002 bit RRAMWRAMBNK1 rts .EP PATCH.SIZE .EQ *-PATCH *-------------------------------------- -* Driver +* Drivers *-------------------------------------- * OP = 2 : Write drv1 * OP = 3 : Read drv1 * OP = 4 : Write drv2 * OP = 5 : Read drv2 * CMD = $C5+OP+BLKLO+BLKHI+CHKSUM -* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS +* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS * reuses them after Block operation -* A1,A2 are used by Disk II Driver, +* A1,A2 are used by Disk II Driver, * so we use it safely as Tmp Ptr *-------------------------------------- DRV.A1L .EQ $3C @@ -305,51 +335,52 @@ DRV.A2L .EQ $3E DRV.A2H .EQ $3F DRV.COMMAND .EQ $42 DRV.UNITNUM .EQ $43 -DRV.BUFF .EQ $44 +DRV.BUFF .EQ $44 DRV.BLKNUM .EQ $46 *-------------------------------------- -DRV .EQ * - .PH $D001 Main LC Bnk 2 $D001->$DFFF - cld -DRV.Slotn0 ldx #$ff Self Modified +DRV.FrmBuf .EQ $DA00 Frame Buffer = 1536 bytes +DRV.FrmBuf.Env .EQ DRV.FrmBuf+S.UDP +DRV.FrmBuf.Cmd .EQ DRV.FrmBuf+S.UDP+1 +DRV.FrmBuf.BlkL .EQ DRV.FrmBuf+S.UDP+2 +DRV.FrmBuf.BlkH .EQ DRV.FrmBuf+S.UDP+3 +DRV.FrmBuf.Sum .EQ DRV.FrmBuf+S.UDP+4 +DRV.FrmBuf.Data .EQ DRV.FrmBuf+S.UDP+5 +*-------------------------------------- +DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF + +DRV.START .BS 1 SELF MODIFIED slot 0n + lda DRV.COMMAND S=0,R=1,W=2,F=3 bne .1 + ldx #$ff return Status ldy #$ff + .8 lda #0 clc rts + .1 cmp #3 beq .8 Format .... + * bcs DRV.DO.CMD.ERR more....IO error ora #2 W=2,R=3 ldy DRV.UNITNUM bpl .2 + adc #2 CC from bcs -.2 sta DRV.CmdBuf.Cmd store cmd + +.2 sta DRV.FrmBuf.Cmd store cmd eor #ADT.CMD.VSD eor DRV.BLKNUM eor DRV.BLKNUM+1 - sta DRV.CmdBuf.Sum Compute & store CheckSum + sta DRV.FrmBuf.Sum Compute & store CheckSum + lda DRV.BLKNUM - sta DRV.CmdBuf.BlkL - + sta DRV.FrmBuf.BlkL lda DRV.BLKNUM+1 - sta DRV.CmdBuf.BlkH -* send CMD+CS - ldy #4 Send 5 bytes including Sum -.3 lda DRV.CmdBuf.Sum,y - jsr DRV.SSCSend - dey - bpl .3 - - ldy #8 - -.5 lda DRV.READWRITE,y - sta $100,y - dey - bpl .5 + sta DRV.FrmBuf.BlkH *-------------------------------------- lda DRV.COMMAND dec 1-1=0 if read @@ -359,18 +390,16 @@ DRV.Slotn0 ldx #$ff Self Modified *-------------------------------------- DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes -.1 jsr DRV.SSCGet - eor DRV.CmdBuf.BlkH,y +.1 eor DRV.FrmBuf.BlkH,y bne DRV.DO.CMD.ERR + dey bpl .1 ldy #4 Read 4 bytes DATE/TIME + 1 Byte Checksum -.2 jsr DRV.SSCGet - - eor DRV.CmdBuf.Sum - sta DRV.CmdBuf.Sum +.2 eor DRV.FrmBuf.Sum + sta DRV.FrmBuf.Sum dey bpl .2 @@ -379,12 +408,12 @@ DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes * Y=0 from TAY - stz DRV.CmdBuf.Sum + stz DRV.FrmBuf.Sum sec -.3 jsr DRV.SSCGet - jsr $100 - eor DRV.CmdBuf.Sum - sta DRV.CmdBuf.Sum + +.3 jsr $100 + eor DRV.FrmBuf.Sum + sta DRV.FrmBuf.Sum iny bne .3 bcc .4 @@ -393,14 +422,16 @@ DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes bcc .3 .4 dec DRV.BUFF+1 - jsr DRV.SSCGet - eor DRV.CmdBuf.Sum + + eor DRV.FrmBuf.Sum bne DRV.DO.CMD.ERR rts A=0,CC from bcc .4 *-------------------------------------- -DRV.DO.CMD.ERR1 pla +DRV.DO.CMD.ERR1 pla -DRV.DO.CMD.ERR lda #MLI.E.IO + pla +DRV.DO.CMD.ERR + lda #MLI.E.IO sec rts *-------------------------------------- @@ -411,13 +442,13 @@ DRV.DO.CMD.W lda #$B1 lda (),y sta $103 ldy #0 - stz DRV.CmdBuf.Sum + stz DRV.FrmBuf.Sum sec -.1 jsr $100 - jsr DRV.SSCSend - eor DRV.CmdBuf.Sum - sta DRV.CmdBuf.Sum + +.1 + eor DRV.FrmBuf.Sum + sta DRV.FrmBuf.Sum iny bne .1 bcc .2 @@ -425,80 +456,23 @@ DRV.DO.CMD.W lda #$B1 lda (),y clc bcc .1 .2 dec DRV.BUFF+1 -* A = DRV.CmdBuf.Sum +* A = DRV.FrmBuf.Sum + - jsr DRV.SSCSend * read back CMD ldy #4 Read 5 bytes (echo from server) -.3 jsr DRV.SSCGet - - eor DRV.CmdBuf.Sum,y Check 5 bytes (including block Sum) +.3 + eor DRV.FrmBuf.Sum,y Check 5 bytes (including block Sum) bne DRV.DO.CMD.ERR dey bpl .3 rts *-------------------------------------- -DRV.SendRCmd - - -DRV.SendWCmd - - ldx DRV.Slotn0 - - >AR.Sn.SELECT S0.TX.FSR - lda W5100.DR,x get send size HI - ldy W5100.DR,x LO - - cpy #5 - sbc /5 - bcc IOERR - - >AR.Sn.SELECT S0.TX.WR - lda W5100.DR,x Get HI - ldy W5100.DR,x Get LO - and /TX.BASE - ora /RXTX.MASK - sta W5100.AR,x Write HI - pha - tya - sta W5100.AR+1,x Write LO - clc - adc #5 - sta .3+1 - pla - adc /0 - sta .2+1 - - ldy #4 - -.1 lda DRV.CmdBuf.Sum,y - sta W5100.DR,x - dey - bpl .1 - - >AR.SELECT S0.TX.WR - -.2 lda #$ff SELF MODIFIED - sta W5100.DR,x write HI -.3 lda #$ff SELF MODIFIED - sta W5100.DR,x write LO - - >AR.Sn.SELECT S0.CR - lda #W5100.AR.Sn.CR.SEND - sta W5100.DR,x - rts -*-------------------------------------- -DRV.READWRITE bit RRAMWRAMBNK1 +DRV.RWBYTE bit RRAMWRAMBNK1 sta (DRV.BUFF),y bit RRAMWRAMBNK2 rts -*-------------------------------------- -DRV.CmdBuf.Sum .BS 1 Reverse order for dey -DRV.CmdBuf.BlkH .BS 1 -DRV.CmdBuf.BlkL .BS 1 -DRV.CmdBuf.Cmd .BS 1 -DRV.CmdBuf.Env .DA #ADT.CMD.VSD *-------------------------------------- .EP *-------------------------------------- @@ -512,6 +486,212 @@ DRV.SIZE .EQ *-DRV * ERROR:DRV.SIZE too big .FIN *-------------------------------------- + + +*-------------------------------------- + .INB usr/src/sys/km.vedrive.s.cf + .INB usr/src/sys/km.vedrive.s.ip + .INB usr/src/sys/km.vedrive.s.u1 + .INB usr/src/sys/km.vedrive.s.u2 + .INB usr/src/sys/km.vedrive.s.gs +*-------------------------------------- +VEDRIVE.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\n" +VEDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\n" +VEDRIVE.CONF .AZ "Checking %S...\n" +VEDRIVE.CONFKO .AZ "Error reading VEDRIVE.CONF file.\n" +VEDRIVE.CONFSYN .AZ "Syntax error in VEDRIVE.CONF file.\n" +VEDRIVE.CONFINV .AZ "Invalid VEDRIVE.CONF file.\n" +VEDRIVE.NICKO .AZ "Hardware not detected.\n" +VEDRIVE.NICOK .AZ "%S Rev. %d.%d Found At Slot %d.\n" +VEDRIVE.DHCP .AZ "Querying DHCP...\n" +VEDRIVE.DHCPKO .AZ "No response from DHCP.\n" +VEDRIVE.IPKO .AZ "Unable to setup IP configuration.\n" +VEDRIVE.IPOK .AZ "IP config : %d.%d.%d.%d/%d.%d.%d.%d GW=%d.%d.%d.%d\n" +VEDRIVE.SRV .AZ "Contacting ADTPro Server..." +VEDRIVE.SRVKO .AZ "No Response From ADTPro Server.\n" +VEDRIVE.SRVOK .AZ "ADTPro Server Is Online.\n" +VEDRIVE.NOSLOT .AZ "No ProDOS device slot available.\n" +VEDRIVE.DEVOK .AZ "VEDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\n" +VEDRIVE.DRVIKO .AZ "Unable to install VEDRIVE.\n" +VEDRIVE.DRVIOK .AZ "VEDRIVE Successfully Installed.\n" +*-------------------------------------- +CONF.FILENAME .AS "vedrive.conf" +CONF.FILENAME.L .EQ *-CONF.FILENAME +*-------------------------------------- +CONF.KW >PSTR "nic" + >PSTR "slot" + >PSTR "address" + >PSTR "netmask" + >PSTR "gateway" + >PSTR "server" + >PSTR "port" + .HS 00 +*-------------------------------------- +CONF.KW.NIC >PSTR "lancegs" + >PSTR "uthernet" + >PSTR "uthernet2" + .HS 00 +*-------------------------------------- +CONF.NIC .HS FF +CONF.SLOT .HS 00 +CONF.IPCFG .EQ * +CONF.SRCMAC .HS 000E3A123456 +CONF.ADDRESS .HS 00000000 +CONF.MASK .HS 00000000 +CONF.GATEWAY .HS 00000000 +CONF.SERVER .HS 00000000 +CONF.PORT .DA /1977,#1977 +*-------------------------------------- +MLIGETPREFIX.P .DA #1 + .DA CONF.FILEPATH +*-------------------------------------- +MLIOPEN.P .DA #3 + .DA CONF.FILEPATH + .DA CONF.FBUF + .BS 1 FILE# +*-------------------------------------- +MLINEWLINE.P .DA #3 + .BS 1 + .DA #$7F + .DA #$0D +*-------------------------------------- +MLIREAD.P .DA #4 + .BS 1 + .DA CONF.LBUF + .DA 255 + .BS 2 +*-------------------------------------- +MLICLOSE.P .DA #1 + .BS 1 +*-------------------------------------- +ARP.REQ .HS FFFFFFFFFFFF S.ETH.DSTMAC +ARP.REQ.SRCMAC .BS 6 +ARP.REQ.ETYPE .DA /S.ETH.EII.TYPE.ARP + .DA #S.ETH.EII.TYPE.ARP + .HS 0001.0800.06.04 +ARP.REQ.OP .DA /S.ARP.OPERATION.REQ + .DA #S.ARP.OPERATION.REQ +ARP.REQ.SHA .BS 6 +ARP.REQ.SPA .BS 4 +ARP.REQ.THA .BS 6 +ARP.REQ.TPA .BS 4 +*-------------------------------------- +ARP.REP .EQ * +ARP.REP.DSTMAC .BS 6 +ARP.REP.SRCMAC .BS 6 +ARP.REP.ETYPE .DA /S.ETH.EII.TYPE.ARP + .DA #S.ETH.EII.TYPE.ARP + .HS 0001.0800.06.04 +ARP.REP.OP .DA /S.ARP.OPERATION.REP + .DA #S.ARP.OPERATION.REP +ARP.REP.SHA .BS 6 +ARP.REP.SPA .BS 4 +ARP.REP.THA .BS 6 +ARP.REP.TPA .BS 4 +*-------------------------------------- +DHCP.DISC .HS FFFFFFFFFFFF DST MAC +DHCP.DISC.SRCMAC .BS 6 + .DA /S.ETH.EII.TYPE.IP + .DA #S.ETH.EII.TYPE.IP +DHCP.DISC.IP .HS 4500 + .DA /DHCP.DISC.END-DHCP.DISC.IP,#DHCP.DISC.END-DHCP.DISC.IP + .HS 0000 + .HS 0000 + .DA #64 TTL + .DA #S.IP.PROTOCOL.UDP + .BS 2 IP CHECKSUM + .HS 00000000 + .HS FFFFFFFF +*-------------------------------------- +DHCP.DISC.UDP .DA #0,#UDP.PORT.DHCPC + .DA #0,#UDP.PORT.DHCPS + .DA /DHCP.DISC.END-DHCP.DISC.UDP,#DHCP.DISC.END-DHCP.DISC.UDP + .BS 2 UDP CHECKSUM +*-------------------------------------- + .HS 01010600 OP,HTYPE,HLEN,HOPS +DHCP.DISC.XID .HS 54328574 + .HS 0000 SECS + .DA S.DHCP.FLAGS.BRDCST + .HS 00000000 CIADDR +DHCP.DISC.YIADDR .HS 00000000 + .HS 00000000 SIADDR +DHCP.DISC.GIADDR .HS 00000000 +DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000 + .BS 64 SNAME + .BS 128 FILE + .HS 63825363 COOKIE + .HS 3501 OPT + .DA #S.DHCP.OPTIONS.DHCPDiscover + .HS 37020103FF 37040103060FFF +DHCP.DISC.END .EQ * +DHCP.DISC.LEN .EQ *-DHCP.DISC +*-------------------------------------- +DHCP.REQ .HS FFFFFFFFFFFF DST MAC +DHCP.REQ.SRCMAC .BS 6 + .DA /S.ETH.EII.TYPE.IP + .DA #S.ETH.EII.TYPE.IP +DHCP.REQ.IP .HS 4500 + .DA /DHCP.REQ.END-DHCP.REQ.IP,#DHCP.REQ.END-DHCP.REQ.IP + .HS 0000 + .HS 0000 + .DA #64 TTL + .DA #S.IP.PROTOCOL.UDP + .BS 2 IP CHECKSUM + .HS 00000000 + .HS FFFFFFFF +*-------------------------------------- +DHCP.REQ.UDP .DA #0,#UDP.PORT.DHCPC + .DA #0,#UDP.PORT.DHCPS + .DA /DHCP.REQ.END-DHCP.REQ.UDP,#DHCP.REQ.END-DHCP.REQ.UDP + .BS 2 UDP CHECKSUM +*-------------------------------------- + .HS 01010600 OP,HTYPE,HLEN,HOPS +DHCP.REQ.XID .HS 54328574 + .HS 0000 SECS + .DA S.DHCP.FLAGS.BRDCST + .HS 00000000 CIADDR +DHCP.REQ.YIADDR .HS 00000000 + .HS 00000000 SIADDR + .HS 00000000 GIADDR +DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000 + .BS 64 SNAME + .BS 128 FILE + .HS 63825363 COOKIE + .HS 3501 OPT + .DA #S.DHCP.OPTIONS.DHCPRequest + .HS 3204 +DHCP.REQ.OPT.REQIP .BS 4 + .HS 3604 +DHCP.REQ.OPT.SVRIP .BS 4 + .HS FF +DHCP.REQ.END .EQ * +DHCP.REQ.LEN .EQ *-DHCP.REQ +*-------------------------------------- +ADT.REQ +ADT.REQ.DSTMAC .BS 6 DST MAC +ADT.REQ.SRCMAC .BS 6 + .DA /S.ETH.EII.TYPE.IP + .DA #S.ETH.EII.TYPE.IP +ADT.REQ.IP .HS 4500 + .DA /ADT.REQ.END-ADT.REQ.IP,#ADT.REQ.END-ADT.REQ.IP + .HS 0000 + .HS 0000 + .DA #64 TTL + .DA #S.IP.PROTOCOL.UDP + .BS 2 IP CHECKSUM +ADT.REQ.IP.SRC .BS 4 SRC IP +ADT.REQ.IP.DST .BS 4 DST IP +*-------------------------------------- +ADT.REQ.UDP .DA #$C0,#$00 SRC PORT +ADT.REQ.UDP.DST .BS 2 DST PORT + .DA /ADT.REQ.END-ADT.REQ.UDP,#ADT.REQ.END-ADT.REQ.UDP + .BS 2 UDP CHECKSUM +*-------------------------------------- + .DA #ADT.CMD.VSD + .HS 030000C6 READ D1, BLK 0 +ADT.REQ.END .EQ * +ADT.REQ.LEN .EQ *-ADT.REQ +*-------------------------------------- MAN SAVE usr/src/sys/km.vedrive.s ASM