Commit Diff


commit - 2b548c651f8388d9bfaf8faec2f7deb57dfce552
commit + 09d199d623ec10bec6ec8055610375c0407cc5ae
blob - 6b8d83420498126b8fafe2d41aed1485164f430a
blob + 1b75f998e72033242211a2acd2560b2bde5c579b
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - f44362a35f3657799cb9ee508a4fc93acaea5d88
blob + cbe6d493723f9a768af3186ee2b695e54de35de9
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
@@ -6,7 +6,7 @@
 1005 REM
 1009 REM -999 [BASASM]
 1010 REM 1000 TOP COMMENT
-1015 REM 1500 (SYMBOL DEFINITIONS)
+1015 REM 1500 SYMBOL DEFINITIONS
 1020 REM 2000 LINECNT
 1030 REM 3000 SUBROUTINES
 1050 REM 5000 LINECUT
@@ -33,6 +33,9 @@
 1606 DATA MEMSIZ=, 55
 1610 DATA FA=,     186: REM CURRENT DEV
 1620 DATA BLNSW=,  204: REM CURSOR BLNK
+1700 DATA T=,      2:   REM TEMPORARY
+1710 DATA P=,      251: REM WORD/PTR 1
+1720 DATA Q=,      253: REM WORD/PTR 2
 1999 REM
 2000 DATA 'LINECNT
 2001 DATA  LDXZ, TXTTAB
@@ -360,9 +363,9 @@
 3725 DATA  JSR, CHROUT
 3726 DATA  LDA#, 13
 3727 DATA  JSR, CHROUT
-3730 DATA  LDAZ, 2
-3731 DATA  LDXZ, 251
-3732 DATA  LDYZ, 252
+3730 DATA  LDXZ, 251
+3731 DATA  LDYZ, 252
+3732 DATA  LDAZ, 2
 3733 DATA  RTS
 3799 REM
 3800 DATA 'ATOI
@@ -435,42 +438,39 @@
 4101 REM
 4102 REM 251-252  IN: DST POINTER
 4103 REM 253-254  IN: SRC POINTER
-4104 REM X/Y      IN: LEN X=MSB!
+4104 REM Y.X      IN: LEN !X=MSB!
 4105 REM
 4106 REM CLOBBERS: A, X, Y, 2, 251-254
 4107 REM
-4110 DATA  CPY#, 0
-4111 DATA  BEQR, MC2
-4115 DATA  STYZ, 2:  REM SAVE LO(LEN)
-4120 DATA 'MC1
-4130 DATA  DEY
-4140 DATA  LDA(Y, 253
-4141 DATA  STA(Y, 251
-4150 DATA  CPY#, 0
-4151 DATA  BNER, MC1
-4155 DATA  CLC
-4156 DATA  LDAZ, 251
-4157 DATA  ADCZ, 2
-4158 DATA  STAZ, 251
-4159 DATA  LDAZ, 252
-4160 DATA  ADC#, 0
-4161 DATA  STAZ, 252
-4162 DATA  CLC
-4163 DATA  LDAZ, 253
-4164 DATA  ADCZ, 2
-4165 DATA  STAZ, 253
-4166 DATA  LDAZ, 254
-4167 DATA  ADC#, 0
-4168 DATA  STAZ, 254
-4170 DATA 'MC2
-4175 DATA  CPX#, 0
-4176 DATA  BEQR, MC3
-4180 DATA  DEX
-4181 DATA  INCZ, 252
-4182 DATA  INCZ, 254
-4185 DATA  JMP, MC1
-4190 DATA 'MC3
-4195 DATA  RTS
+4108 REM NB: OVERLAP OKAY IF DST < SRC
+4109 REM
+4110 DATA  STYZ, T:  REM SAVE LO(LEN)
+4111 DATA  LDY#, 0
+4115 DATA  CPX#, 0
+4116 DATA  BEQR, MC3
+4130 DATA 'MC2:      REM BLOCK COPY
+4140 DATA  LDA(Y, Q
+4141 DATA  STA(Y, P
+4142 DATA  INY
+4145 DATA  LDA(Y, Q: REM UNROLL (11%)
+4146 DATA  STA(Y, P
+4147 DATA  INY
+4150 DATA  BNER, MC2
+4160 DATA  INCZ, P+
+4161 DATA  INCZ, Q+
+4165 DATA  DEX
+4166 DATA  BNER, MC2
+4170 DATA 'MC3:      REM PARTIAL BLOCK
+4175 DATA  LDAZ, T:  REM LO(LEN)
+4176 DATA  BEQR, MCRET
+4180 DATA 'MC4
+4181 DATA  LDA(Y, Q
+4182 DATA  STA(Y, P
+4183 DATA  INY
+4184 DATA  CPYZ, T
+4185 DATA  BCCR, MC4
+4190 DATA 'MCRET
+4191 DATA  RTS
 4199 REM
 4200 DATA 'GETSTASTO
 4201 REM
@@ -580,7 +580,7 @@
 4434 DATA  LDY#, BUF^
 4435 DATA  JSR, GETSTR
 4437 DATA  JSR, SETNAM
-4440 DATA  RTS
+4441 DATA  RTS
 4499 REM
 4500 DATA 'FINDLAST
 4501 REM
@@ -633,7 +633,7 @@
 5020 DATA 'LCU1
 5021 DATA  RTS:  REM NSTOP <= NSTART
 5030 DATA 'LCU2
-5060 REM LOCATE START -> PTR IN 251
+5060 REM LOCATE START -> PTR IN P (251)
 5061 DATA  LDX, NSTART
 5062 DATA  LDY, NSTART+
 5063 DATA  JSR, FINDLINE
@@ -641,60 +641,60 @@
 5065 DATA  PHA
 5066 DATA  TYA
 5067 DATA  PHA
-5070 REM LOCATE STOP LINE -> PTR IN 253
+5070 REM LOCATE STOP LINE -> PTR IN Q
 5071 DATA  LDX, NSTOP
 5072 DATA  LDY, NSTOP+
 5073 DATA  JSR, FINDNEXT
-5074 DATA  STXZ, 253
-5075 DATA  STYZ, 254
+5074 DATA  STXZ, Q
+5075 DATA  STYZ, Q+
 5076 DATA  PLA:        REM PSTART HI
-5077 DATA  STAZ, 252
+5077 DATA  STAZ, P+
 5078 DATA  PLA:        REM PSTART LO
-5079 DATA  STAZ, 251
-5240 REM CALC DELTA=STOP-START
+5079 DATA  STAZ, P
+5240 REM CALC. DELTA = PSTOP - PSTART
 5250 DATA  SEC
-5251 DATA  LDAZ, 253
-5252 DATA  SBCZ, 251
+5251 DATA  LDAZ, Q
+5252 DATA  SBCZ, P
 5253 DATA  STA, DELTA
-5254 DATA  LDAZ, 254
-5255 DATA  SBCZ, 252
+5254 DATA  LDAZ, Q+
+5255 DATA  SBCZ, P+
 5256 DATA  STA, DELTA+
 5260 REM SCAN AFTER STOP, ADJUST PTRS
-5270 DATA  LDXZ, 253
-5271 DATA  LDYZ, 254
+5270 DATA  LDXZ, Q
+5271 DATA  LDYZ, Q+
 5280 DATA  STX, TMP:   REM SAVE PSTOP
 5281 DATA  STY, TMP+
 5290 DATA 'LCU9
 5300 DATA  LDY#, 1
-5301 DATA  LDA(Y, 253
+5301 DATA  LDA(Y, Q
 5302 DATA  BEQR, LCU10: REM DONE
-5310 DATA  LDY#, 0
-5320 DATA  LDA(Y, 253
+5310 DATA  DEY
+5320 DATA  LDA(Y, Q
 5321 DATA  TAX:     REM SAVE LO(PNEXT)
 5330 DATA  SEC
 5331 DATA  SBC, DELTA
-5340 DATA  STA(Y, 253
+5340 DATA  STA(Y, Q
 5341 DATA  INY
-5350 DATA  LDA(Y, 253
-5351 DATA  STAZ, 2: REM SAVE HI(PNEXT)
+5350 DATA  LDA(Y, Q
+5351 DATA  STAZ, T: REM SAVE HI(PNEXT)
 5360 DATA  SBC, DELTA+
-5370 DATA  STA(Y, 253
-5380 DATA  LDYZ, 2
-5381 DATA  STXZ, 253: REM NEXT LINE
-5382 DATA  STYZ, 254
+5370 DATA  STA(Y, Q
+5380 DATA  LDYZ, T
+5381 DATA  STXZ, Q:   REM NEXT LINE
+5382 DATA  STYZ, Q+
 5390 DATA  JMP, LCU9
 5391 DATA 'LCU10
 5392 DATA  LDX, TMP: REM SAVED PSTOP
 5393 DATA  LDY, TMP+
-5394 DATA  STXZ, 253
-5395 DATA  STYZ, 254
+5394 DATA  STXZ, Q
+5395 DATA  STYZ, Q+
 5400 REM COPY THE REMAINING DATA DOWN
 5410 DATA  SEC:    REM LEN=STREND-PSTOP
 5411 DATA  LDAZ, STREND
-5412 DATA  SBCZ, 253
+5412 DATA  SBCZ, Q
 5413 DATA  TAY:       REM Y = LO BYTE!
 5414 DATA  LDAZ, STREND+
-5415 DATA  SBCZ, 254
+5415 DATA  SBCZ, Q+
 5416 DATA  TAX:       REM X = HI BYTE!
 5420 DATA  JSR, MEMCPY
 5430 REM ADJUST VARTAB, ARYTAB, STREND
@@ -739,8 +739,7 @@
 6020 DATA  LDA(Y, 251
 6021 DATA  PHA
 6025 DATA 'LCA1
-6030 DATA  LDA#, 1:    REM FILE NO
-6031 DATA  JSR, GETFILE
+6030 DATA  JSR, GETFILE
 6040 DATA  SEC
 6041 DATA  LDAZ, VARTAB
 6042 DATA  SBC#, 2:    REM CUT NULL OFF
@@ -753,15 +752,22 @@
 6049 DATA  LDA#, 0:    REM L/V
 6050 DATA  JSR, LOAD
 6051 DATA  BCCR, LCA1.1
-6055 DATA  LDX#, S.ERROR
-6056 DATA  LDY#, S.ERROR^
-6057 DATA  JSR, PUTSTR
-6058 DATA  RTS
-6060 DATA 'LCA1.1
-6061 DATA  STXZ, 253:  REM PSTOP
-6062 DATA  STYZ, 254
-6070 REM CHECK FOR LINE NUMBER CLASH
-6075 DATA  JMP, LCACHK
+6055 DATA  PLA
+6056 DATA  PLA
+6060 DATA  LDA#, 0
+6061 DATA  TAY
+6062 DATA  STA(Y, 251
+6063 DATA  INY
+6064 DATA  STA(Y, 251
+6065 DATA  LDX#, S.ERROR
+6066 DATA  LDY#, S.ERROR^
+6067 DATA  JSR, PUTSTR
+6068 DATA  RTS
+6070 DATA 'LCA1.1
+6071 DATA  STXZ, 253:  REM PSTOP
+6072 DATA  STYZ, 254
+6075 REM CHECK FOR LINE NUMBER CLASH
+6076 DATA  JMP, LCACHK
 6080 REM SCAN & RELINK LINES
 6081 DATA 'LCA2:      REM FOR EACH LINE
 6090 DATA  LDAZ, 252