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