[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/11/99 22:35:07 BASIC/OV2 Page 00001 00001 ;BMOVE/ASM 00003 ; 00004 ; 0000 00005 *GET BUILDVER/ASM ;<631> 00006 ; 00007 ; Buildver/asm is a bit of a kludge since not all utilities can load 00008 ; equates from LDOS60 and still compile. LOWCORE and everybody else 00009 ; relies on this setting, and it eventually ends up in LDOS60/EQU 00010 ; for programs that can use that. 00011 ; FFFF 00012 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B) 00013 ; These switches activate patches made since the 1B release. 00014 ; It is important that all earlier patches be enabled when a higher 00015 ; patch is enabled. 00016 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the 00017 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.) FFFF 00018 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI) FFFF 00019 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR) FFFF 00020 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT) FFFF 00021 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL) 00022 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19. FFFF 00023 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *) FFFF 00024 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY) 00025 ; 00026 ;End of BUILDVER/ASM 0000 00027 *GET NEWB/EQU 0000 00028 @@1 DEFL 0000H 0000 00029 @@2 DEFL 0000H 0000 00030 @@3 DEFL 0000H 0000 00031 @@4 DEFL 0000H 1E00 00032 DOSOVR@ EQU 1E00H 819F 00033 LISTLIN@ EQU 819FH 83E0 00034 LSTKEY$ EQU 83E0H 83DC 00035 LSTLIN$ EQU 83DCH 83DE 00036 LSTNUM$ EQU 83DEH 83DB 00037 LSTTYP$ EQU 83DBH 83E1 00038 LSTVAR$ EQU 83E1H 80F4 00039 NOBRK@ EQU 80F4H 8277 00040 OVRLAY$ EQU 8277H 0069 00041 OVRLY$ EQU 0069H 8515 00042 PRMERR$ EQU 8515H 854E 00043 SIGNON$ EQU 854EH 854D 00044 STOR1$ EQU 854DH 8549 00045 STOR2$ EQU 8549H 854B 00046 STOR3$ EQU 854BH 000D 00047 CR EQU 13 000E 00048 NUMTOKE EQU 0EH ;Token for line ref. 5AB4 00049 FIND EQU 5AB4H 5920 00050 READY EQU 5920H ;Print ready msg 5E93 00051 NXTCHR EQU 5E93H ;parse down line 5F9A 00052 NUM2DE EQU 5F9AH ;HL => value in DE 7178 00053 HIPT EQU 7178H ;Ptr to highest avail 71A3 00054 LOPT EQU 71A3H ;Ptr to lowest avail 6E9E 00055 PGMBGN EQU 6E9EH ;Ptr to start of pgm 7F1F 00056 OV1 EQU 7F1FH ;Entry to reload ov1 5FAE 00057 NUMPOSN EQU 5FAEH ;Find refed number 7145 00058 IPOS EQU 7145H ;Continuation pt after ref. # 7039 00059 INBUF EQU 7039H ;Input buffer 7A0D 00060 UNTOKE EQU 7A0DH 6EF9 00061 LBUF EQU 6EF9H 7192 00062 CURLIN EQU 7192H 5F95 00063 FUNCERR EQU 5F95H 425C 00064 OMERR EQU 425CH 46A5 00065 BASDSP EQU 46A5H 3139 00066 NUMDSP EQU 3139H 00067 ; 00068 ; 1E00 00069 ORG DOSOVR@ 00070 ; 00071 ; 00072 ; MOVE - Upon entry, HL => cmdline fm basic 00073 ; 00074 ; 1E00 ED735223 00075 LD (SAVSTK),SP ;Stack after clear done 1E04 FE05 00076 CP 5 1E06 CAC522 00077 JP Z,COPY 1E09 FE02 00078 CP 2 1E0B C2C020 00079 JP NZ,DOFIND 00080 ; 1E0E CD4A1E 00081 MOVE: CALL NXTLIN ;Get a line # 1E11 ED535623 00082 LD (NUM1),DE ;Start line 1E15 ED43A71E 00083 LD (STRTLIN),BC ;Line start pointer 1E19 D5 00084 PUSH DE 1E1A CD4A1E 00085 CALL NXTLIN ;Get ending line 1E1D ED535823 00086 LD (NUM2),DE 1E21 ED43AA1E 00087 LD (ENDLIN),BC ;Line start pointer 1E25 44 00088 LD B,H ;Save HL 1E26 4D 00089 LD C,L 1E27 EB 00090 EX DE,HL ;End to HL 1E28 D1 00091 POP DE 1E29 B7 00092 OR A 1E2A ED52 00093 SBC HL,DE ;End > start! 1E2C DA4623 00094 JP C,BADLIN 1E2F 60 00095 LD H,B 1E30 69 00096 LD L,C ;Restore buffer ptr 1E31 CD935E 00097 CALL NXTCHR ;Must be last now 1E34 CA4623 00098 JP Z,BADLIN 1E37 CD9A5F 00099 CALL NUM2DE ;Get number 1E3A C24623 00100 JP NZ,BADLIN 1E3D CD561E 00101 CALL NXTLIN1 1E40 ED539C1E 00102 LD (NUM3),DE ;Save endline 1E44 ED43861E 00103 LD (POSN3),BC ;Save line start 1E48 181A 00104 JR GOTLIN 00105 ; 00106 ; Get and check a line 00107 ; 1E4A CD935E 00108 NXTLIN CALL NXTCHR ;Pt to a line # 1E4D CA4623 00109 JP Z,BADLIN ;Must have something 1E50 CD9A5F 00110 CALL NUM2DE ;Get the value 1E53 CA4623 00111 JP Z,BADLIN 1E56 7A 00112 NXTLIN1 LD A,D ;Not line zero 1E57 B3 00113 OR E 1E58 CA4623 00114 JP Z,BADLIN 1E5B E5 00115 PUSH HL ;Save buffer ptr 1E5C CDB45A 00116 CALL FIND 1E5F E1 00117 POP HL 1E60 D8 00118 RET C ;Back if real line 1E61 C34623 00119 JP BADLIN 00120 ; 1E64 ED5B9C1E 00121 GOTLIN: LD DE,(NUM3) ;Get newline posn 1E68 CDBA1F 00122 CALL RANGE ;Check that not in block! 1E6B D24623 00123 JP NC,BADLIN ;Quit if it is 1E6E CDB45A 00124 CALL FIND ;Find num3 1E71 23 00125 INC HL 1E72 23 00126 INC HL ;Pt to following line # 1E73 5E 00127 LD E,(HL) 1E74 23 00128 INC HL 1E75 56 00129 LD D,(HL) ;Line # to DE 1E76 2A5623 00130 LD HL,(NUM1) 1E79 B7 00131 OR A 1E7A ED52 00132 SBC HL,DE ;Be sure a move will be made 1E7C CA4623 00133 JP Z,BADLIN 1E7F 210000 00134 LD HL,0 ;First, zero line ctr 1E82 22C31E 00135 LD (BLANKS),HL 1E85 210000 00136 LD HL,$-$ ;Move line posn 1E86 00137 POSN3 EQU $-2 1E88 5E 00138 LD E,(HL) ;Get next line address 1E89 23 00139 INC HL 1E8A 56 00140 LD D,(HL) 1E8B ED535E23 00141 LD (NEWLIN),DE ;Save for move 1E8F EB 00142 EX DE,HL ;HL to nxt line 1E90 7E 00143 LD A,(HL) ;See if end 1E91 23 00144 INC HL ;Pt to line # 1E92 B6 00145 OR (HL) 1E93 23 00146 INC HL 1E94 5E 00147 LD E,(HL) 1E95 23 00148 INC HL 1E96 56 00149 LD D,(HL) 1E97 EB 00150 EX DE,HL ;Nxt line to HL 1E98 280C 00151 JR Z,GOODRM ;If so, have enuf lines! 1E9A 2B 00152 DEC HL ;Cant be this line 1E9B 110000 00153 LD DE,$-$ 1E9C 00154 NUM3 EQU $-2 1E9E ED52 00155 SBC HL,DE ;Get blanks avail. 1EA0 CA4623 00156 JP Z,BADLIN ;Quit if no room 1EA3 22C31E 00157 LD (BLANKS),HL ;Save this number 00158 ; 00159 ; Now, count the lines to move 00160 ; 1EA6 210000 00161 GOODRM: LD HL,$-$ 1EA7 00162 STRTLIN EQU $-2 1EA9 110000 00163 LD DE,$-$ 1EAA 00164 ENDLIN EQU $-2 1EAC 010100 00165 LD BC,1 ;Line counter 1EAF B7 00166 CNTLP: OR A 1EB0 E5 00167 PUSH HL 1EB1 ED52 00168 SBC HL,DE ;See if at end 1EB3 E1 00169 POP HL 1EB4 CAC21E 00170 JP Z,ENDCNT ;Go if so 1EB7 7E 00171 LD A,(HL) ;Get nxt line start 1EB8 23 00172 INC HL 1EB9 66 00173 LD H,(HL) 1EBA 6F 00174 LD L,A 1EBB B4 00175 OR H ;Just in case, dont go to end 1EBC CA4623 00176 JP Z,BADLIN 1EBF 03 00177 INC BC ;Show another coming 1EC0 18ED 00178 JR CNTLP 00179 ; 1EC2 210000 00180 ENDCNT: LD HL,$-$ ;Get lines avail 1EC3 00181 BLANKS EQU $-2 1EC5 7C 00182 LD A,H 1EC6 B5 00183 OR L ;If 0, always enough 1EC7 2805 00184 JR Z,OKLINS 1EC9 ED42 00185 SBC HL,BC ;Sub count fm avail 1ECB DA4623 00186 JP C,BADLIN ;"Not enuf lines avail... 1ECE ED435A23 00187 OKLINS: LD (LTM),BC ;Save count of lines 00188 ; 00189 ; Now check the memory needed 00190 ; 1ED2 2A7871 00191 LD HL,(HIPT) 1ED5 ED5BA371 00192 LD DE,(LOPT) 1ED9 B7 00193 OR A 1EDA ED52 00194 SBC HL,DE ;HL has free memory 1EDC E5 00195 PUSH HL 1EDD 2AAA1E 00196 LD HL,(ENDLIN) ;Ptr to last lin 1EE0 5E 00197 LD E,(HL) ;This pts to end of 1EE1 23 00198 INC HL ; line+1 1EE2 56 00199 LD D,(HL) 1EE3 EB 00200 EX DE,HL ;End+1 to HL 1EE4 ED5BA71E 00201 LD DE,(STRTLIN) ;Start posn 1EE8 B7 00202 OR A 1EE9 ED52 00203 SBC HL,DE ;This is needed space 1EEB 225C23 00204 LD (TOMOVE),HL ;Save byte count 1EEE EB 00205 EX DE,HL ;Needed to DE 1EEF E1 00206 POP HL ;Available space 1EF0 ED52 00207 SBC HL,DE 1EF2 DA4A23 00208 JP C,NOMEM 00209 ; 00210 ; Determine direction of shuffle 00211 ; 1EF5 2AA71E 00212 LD HL,(STRTLIN) 1EF8 ED5B5E23 00213 LD DE,(NEWLIN) 1EFC B7 00214 OR A 1EFD ED52 00215 SBC HL,DE ;CF set means up 1EFF F5 00216 PUSH AF ;Save dir flag 00217 ; 00218 ; Now, mark all program ref's to these lines 00219 ; First, get offset fm current locn in mem to 00220 ; where the lines to be moved will end up. 00221 ; 1F00 2A861E 00222 LD HL,(POSN3) ;Ptr to line to go after 1F03 5E 00223 LD E,(HL) ;Now get nxt posn 1F04 23 00224 INC HL ; as this will be start 1F05 56 00225 LD D,(HL) ; of insert point 1F06 2AA71E 00226 LD HL,(STRTLIN) ;Starting posn 1F09 EB 00227 EX DE,HL 1F0A F5 00228 PUSH AF 1F0B B7 00229 OR A 1F0C ED52 00230 SBC HL,DE ;This is the offset 1F0E F1 00231 POP AF ;Get back dir 1F0F 3007 00232 JR NC,DIR2 ;Done if move down 1F11 ED5B5C23 00233 LD DE,(TOMOVE) ;Else need to sub this also 1F15 B7 00234 OR A 1F16 ED52 00235 SBC HL,DE 1F18 22CC1F 00236 DIR2: LD (OFFSET),HL 00237 ; 00238 ; Now find line refs and insert a 0D token and the line 00239 ; address PLUS the offset. This must be done to get 00240 ; the renumbered lines after the move when they are in 00241 ; their new positions. 00242 ; 1F1B F601 00243 OR 1 1F1D 325523 00244 TIME2 LD (DOPASS1),A ;Make NZ 1F20 2A9E6E 00245 LD HL,(PGMBGN) ;Get the start of the pgrm 1F23 2B 00246 DEC HL 1F24 23 00247 PAS1 INC HL ;Pt to next char 1F25 7E 00248 LD A,(HL) 1F26 23 00249 INC HL 1F27 B6 00250 OR (HL) ;Ck for end 1F28 CAD31F 00251 JP Z,PAS1DUN ;Go if done 1F2B 23 00252 INC HL 1F2C 5E 00253 LD E,(HL) ;Get the line # into DE 1F2D 23 00254 INC HL 1F2E 56 00255 LD D,(HL) 1F2F CD935E 00256 PAS1A CALL NXTCHR ;Get another char fm line 1F32 B7 00257 PAS1B OR A ;See if line end 1F33 28EF 00258 JR Z,PAS1 ;New line if so 1F35 4F 00259 LD C,A ;Save the token 1F36 3A5523 00260 LD A,(DOPASS1) ;Is this pass 1 or 2? 1F39 B7 00261 OR A 1F3A 79 00262 LD A,C ;Recover token 1F3B 285B 00263 JR Z,PAS2 ;Go if pass 2 1F3D FEA8 00264 CP 0A8H ;Ck for ON ERROR 1F3F 2018 00265 JR NZ,PAS1C ;Go if not 1F41 CD935E 00266 CALL NXTCHR 1F44 FE89 00267 CP 89H ;See if goto 1F46 20EA 00268 JR NZ,PAS1B 1F48 CD935E 00269 CALL NXTCHR 1F4B FE0E 00270 CP 0EH ;Line number next? 1F4D 20E3 00271 JR NZ,PAS1B 1F4F D5 00272 PUSH DE ;Save the line number 1F50 CDAE5F 00273 CALL NUMPOSN ;get refed line # posn 1F53 7A 00274 LD A,D ;See if "0" 1F54 B3 00275 OR E 1F55 200A 00276 JR NZ,PAS1D ;Go if not 1F57 182E 00277 JR PAS1F ; else skip - cant adjust a 0 1F59 FE0E 00278 PAS1C: CP 0EH ;Line # follows? 1F5B 20D2 00279 JR NZ,PAS1A ;No, get another token 1F5D D5 00280 PUSH DE ;Save curr line 1F5E CDAE5F 00281 CALL NUMPOSN ;Get refed line # posn 1F61 E5 00282 PAS1D: PUSH HL ;Save posn in line 1F62 CDB45A 00283 CALL FIND ;Get posn of refed line 1F65 300A 00284 JR NC,UNDEF 1F67 CDBA1F 00285 CALL RANGE ;See if a moved ref. 1F6A 381A 00286 JR C,PAS1E ;Dont do if not in range 1F6C 0B 00287 DEC BC 1F6D 3E0D 00288 LD A,0DH 1F6F 1839 00289 JR PAS2A ;Go if line found 00290 ; 00291 ; Undefined line error report 00292 ; 1F71 CDE941 00293 UNDEF: CALL 41E9H 1F74 218B1F 00294 LD HL,UNDEF$ 1F77 D5 00295 PUSH DE 1F78 CDA546 00296 CALL 46A5H ;Dsply undefined 1F7B E1 00297 POP HL 1F7C CD3931 00298 CALL 3139H ;Dsply the line # 1F7F C1 00299 POP BC 1F80 E1 00300 POP HL 1F81 E5 00301 PUSH HL 1F82 C5 00302 PUSH BC 1F83 CD3131 00303 CALL 3131H ;Dsply source line # 00304 ; 1F86 E1 00305 PAS1E: POP HL 1F87 D1 00306 PAS1F: POP DE 1F88 2B 00307 DEC HL 1F89 18A4 00308 PAS1G: JR PAS1A 1F8B 55 00309 UNDEF$ DB 'Undef. line ',00H 6E 64 65 66 2E 20 6C 69 6E 65 20 00 00310 ; 00311 ; Install new line # references 00312 ; 1F98 FE0D 00313 PAS2: CP 0DH ;Token fm pass 1? 1F9A 20ED 00314 JR NZ,PAS1G ;Go if not 1F9C D5 00315 PUSH DE 1F9D CDAE5F 00316 CALL NUMPOSN ;Get refed line posn 1FA0 E5 00317 PUSH HL 1FA1 EB 00318 EX DE,HL 1FA2 23 00319 INC HL 1FA3 23 00320 INC HL 1FA4 23 00321 INC HL 1FA5 4E 00322 LD C,(HL) ;P/u new line # 1FA6 23 00323 INC HL 1FA7 46 00324 LD B,(HL) ; into BC 1FA8 3E0E 00325 LD A,0EH ;Restore line ref token 1FAA 21861F 00326 PAS2A: LD HL,PAS1E ;Return point 1FAD E5 00327 PUSH HL 1FAE 2A4571 00328 LD HL,(IPOS) ;Posn in line +1 1FB1 E5 00329 PUSH HL ;Save for nxtchr 1FB2 2B 00330 DEC HL ;Ref'ed line # 1FB3 70 00331 LD (HL),B ;Insert whatever 1FB4 2B 00332 DEC HL 1FB5 71 00333 LD (HL),C 1FB6 2B 00334 DEC HL 1FB7 77 00335 LD (HL),A ;Insert 0D or 0E 1FB8 E1 00336 POP HL ;Set for scan continue 1FB9 C9 00337 RET 00338 ; 00339 ; See if line # in DE is in the move range 00340 ; BC,DE must not be altered 00341 ; 1FBA 2A5823 00342 RANGE: LD HL,(NUM2) ;Ending line # 1FBD B7 00343 OR A 1FBE ED52 00344 SBC HL,DE ;Sub refed line 1FC0 D8 00345 RET C ;Back if line greater 1FC1 2A5623 00346 LD HL,(NUM1) ;Get starting line 1FC4 B7 00347 OR A 1FC5 ED52 00348 SBC HL,DE 1FC7 2802 00349 JR Z,RNG1 1FC9 3F 00350 CCF 1FCA D8 00351 RET C ;Back if less 1FCB 210000 00352 RNG1: LD HL,$-$ ;Get the offset 1FCC 00353 OFFSET EQU $-2 1FCE 09 00354 ADD HL,BC 1FCF 44 00355 LD B,H 1FD0 4D 00356 LD C,L ;New offset to BC 1FD1 B7 00357 OR A 1FD2 C9 00358 RET 00359 ; 00360 ; Done with adjust, where did we come from? 00361 ; 00362 PAS1DUN: 1FD3 3A5523 00363 LD A,(DOPASS1) 1FD6 B7 00364 OR A ;NZ=pass1 1FD7 CA4E23 00365 JP Z,EXIT ;Go if done 00366 ; 00367 ; Now, we need to move the lines and change the memory 00368 ; pointers on the move lines and the shuffled lines. 00369 ; Start by jerking out the move block 00370 ; 1FDA 2AA71E 00371 LD HL,(STRTLIN) ;Ptr to 1st line to move 1FDD ED5BA371 00372 LD DE,(LOPT) ;Free mem 1FE1 ED4B5C23 00373 LD BC,(TOMOVE) 1FE5 EDB0 00374 LDIR ;Block now moved into memory 1FE7 ED535F20 00375 LD (ENDPT),DE ;For block adjust 00376 ; 00377 ; CF has direction, CF=UP 00378 ; Init upward move 00379 ; 1FEB F1 00380 POP AF 1FEC F5 00381 PUSH AF 1FED 2AAA1E 00382 LD HL,(ENDLIN) ;Pt past end line 1FF0 7E 00383 LD A,(HL) 1FF1 23 00384 INC HL 1FF2 66 00385 LD H,(HL) 1FF3 6F 00386 LD L,A ;Ptr to HL 1FF4 E5 00387 PUSH HL 1FF5 E5 00388 PUSH HL 1FF6 C1 00389 POP BC ;Endlin+1 to BC 1FF7 2A5E23 00390 LD HL,(NEWLIN) 1FFA B7 00391 OR A 1FFB ED42 00392 SBC HL,BC ;This is bytes to move 1FFD 44 00393 LD B,H 1FFE 4D 00394 LD C,L ;Count to BC 1FFF E1 00395 POP HL 2000 ED5BA71E 00396 LD DE,(STRTLIN) 2004 F1 00397 POP AF 2005 3EB0 00398 LD A,0B0H ;LDIR byte 2007 F5 00399 PUSH AF ;Keep CF 2008 3811 00400 JR C,DOMOV 00401 ; 00402 ; No, is downward 00403 ; 200A EB 00404 EX DE,HL ;HL=>STRT, DE=>END 200B 2B 00405 DEC HL 200C 1B 00406 DEC DE 200D E5 00407 PUSH HL 200E ED4B5E23 00408 LD BC,(NEWLIN) ;Start-1 2012 B7 00409 OR A 2013 ED42 00410 SBC HL,BC 2015 23 00411 INC HL 2016 44 00412 LD B,H ;Count to BC 2017 4D 00413 LD C,L 2018 E1 00414 POP HL 2019 3EB8 00415 LD A,0B8H ;LDDR inst. 00416 ; 201B 322320 00417 DOMOV: LD (DIRECT),A ;Set direction 201E ED438C20 00418 LD (TOCNG),BC ;Count for adj later 2022 ED 00419 DB 0EDH ;LDxx opcode 2023 B0 00420 DIRECT DB 0B0H ;Either DR or IR opcode 2024 3004 00421 JR NC,ADJ0 ;Go if downward 2026 ED537220 00422 LD (UPSTART),DE ;Save is move was up 00423 ; 00424 ; Move done, adjust block pointers and line #'s 00425 ; 202A 2AA371 00426 ADJ0: LD HL,(LOPT) ;Pt to moved block 202D E5 00427 PUSH HL ;Save start 202E ED5BA71E 00428 LD DE,(STRTLIN) ;Where it came from 2032 B7 00429 OR A 2033 ED52 00430 SBC HL,DE 2035 225A20 00431 LD (OFFSET1),HL ;Save this offset 2038 E1 00432 POP HL ;HL to blk start 2039 ED4BCC1F 00433 LD BC,(OFFSET) ;Amount moved 203D 5E 00434 ADJ1: LD E,(HL) ;LSB old ptr 203E 23 00435 INC HL 203F 56 00436 LD D,(HL) ;MSB old ptr 2040 D5 00437 PUSH DE ;Save old ptr valu 2041 EB 00438 EX DE,HL ;Old ptr to HL 2042 09 00439 ADD HL,BC ;New ptr in HL 2043 EB 00440 EX DE,HL ;New ptr in DE 00441 ; 2044 E5 00442 PUSH HL ;Save, make new line # 2045 D5 00443 PUSH DE 2046 ED5B9C1E 00444 LD DE,(NUM3) ;Request line 204A 13 00445 INC DE 204B ED539C1E 00446 LD (NUM3),DE 204F 23 00447 INC HL 2050 73 00448 LD (HL),E ;Insert new line # 2051 23 00449 INC HL 2052 72 00450 LD (HL),D 2053 D1 00451 POP DE 2054 E1 00452 POP HL 00453 ; 2055 72 00454 LD (HL),D ;Put in new ptr 2056 2B 00455 DEC HL 2057 73 00456 LD (HL),E 2058 E1 00457 POP HL ;Old ptr value 2059 110000 00458 LD DE,$-$ ;Mem offset 205A 00459 OFFSET1 EQU $-2 205C 19 00460 ADD HL,DE ;This next HL posn 205D EB 00461 EX DE,HL ;Save in DE 205E 210000 00462 LD HL,$-$ ;End of move blk 205F 00463 ENDPT EQU $-2 2061 B7 00464 OR A 2062 ED52 00465 SBC HL,DE ;At the end? 2064 2803 00466 JR Z,ADJ2 ;Go if so 2066 EB 00467 EX DE,HL ;HL pts to new ptr 2067 18D4 00468 JR ADJ1 00469 ; 2069 ED5B5E23 00470 ADJ2: LD DE,(NEWLIN) ;Get new posn in pgm area 206D F1 00471 POP AF ;See shich direction 206E F5 00472 PUSH AF 206F 3003 00473 JR NC,ADJ2A ;Ok if is down 2071 110000 00474 LD DE,$-$ ;Else this is new locn 2072 00475 UPSTART EQU $-2 2074 2AA371 00476 ADJ2A: LD HL,(LOPT) ;Where we stored the block 2077 ED4B5C23 00477 LD BC,(TOMOVE) ;Block len 207B EDB0 00478 LDIR 00479 ; 00480 ; Now all line pointers need adjustment except 00481 ; those in the moved block. AF still on stack with 00482 ; CF indicating direction. 00483 ; 207D 2AA71E 00484 LD HL,(STRTLIN) ;Init was upward 2080 ED4B5C23 00485 LD BC,(TOMOVE) 2084 F1 00486 POP AF 2085 3804 00487 JR C,WASUP ;Go if ok 2087 2A5E23 00488 LD HL,(NEWLIN) 208A 09 00489 ADD HL,BC 00490 ; 00491 ; Now, get the offset to adjust. TOMOVE has the right 00492 ; adjustment, but must be made negative if the move 00493 ; was in an upward position 00494 ; 208B 010000 00495 WASUP: LD BC,$-$ ;Len of moved pgm 208C 00496 TOCNG EQU $-2 208E F5 00497 PUSH AF ;Save flags 208F E5 00498 PUSH HL ;Save start 2090 09 00499 ADD HL,BC ;This is end 2091 22AF20 00500 LD (ENDPT1),HL 2094 E1 00501 POP HL 2095 F1 00502 POP AF 2096 ED4B5C23 00503 LD BC,(TOMOVE) ;This is move offset 209A 3009 00504 JR NC,ADJ3 ;Go if move was down 209C E5 00505 PUSH HL 209D B7 00506 OR A ;Reset CF 209E ED62 00507 SBC HL,HL ;HL = 0 20A0 ED42 00508 SBC HL,BC ;Offset negative 20A2 44 00509 LD B,H ; and back to BC 20A3 4D 00510 LD C,L 20A4 E1 00511 POP HL 20A5 5E 00512 ADJ3: LD E,(HL) ;LSB old ptr 20A6 23 00513 INC HL 20A7 56 00514 LD D,(HL) ;MSB old ptr 20A8 EB 00515 EX DE,HL ;Old ptr to HL 20A9 09 00516 ADD HL,BC ;New ptr in HL 20AA EB 00517 EX DE,HL ;New ptr in DE 20AB 72 00518 LD (HL),D ;Put in new ptr 20AC 2B 00519 DEC HL 20AD 73 00520 LD (HL),E 20AE 210000 00521 LD HL,$-$ ;End of move blk 20AF 00522 ENDPT1 EQU $-2 20B1 B7 00523 OR A 20B2 ED52 00524 SBC HL,DE ;At the end? 20B4 2803 00525 JR Z,ADJ4 ;Go if so 20B6 EB 00526 EX DE,HL ;HL pts to new ptr 20B7 18EC 00527 JR ADJ3 00528 ; 00529 ; Now, go back and fix line # refs 00530 ; 20B9 AF 00531 ADJ4: XOR A ;Set pass 2 20BA 325523 00532 LD (DOPASS1),A ;This msut be 0 20BD C31D1F 00533 JP TIME2 00534 ; 00535 ; 00536 ; Find something 00537 ; 00538 DOFIND: 20C0 32E921 00539 LD (DTYPE),A ;Save display mode 20C3 AF 00540 XOR A 20C4 32F121 00541 LD (FTIME),A ;Dsply flag 20C7 21FA6E 00542 LD HL,LBUF+1 ;Pt to command 20CA CD935E 00543 CALL NXTCHR ;Get 1st char of command 20CD CA6522 00544 JP Z,AGAIN ;Repeat previous 20D0 FE22 00545 CP '"' ;Literal string? 20D2 CA4623 00546 JP Z,BADLIN ;Error - cant find strings 20D5 FE41 00547 CP 'A' ;See if variable 20D7 3804 00548 JR C,CPNUM ;Go if not 20D9 FE5B 00549 CP 'Z'+1 20DB 384F 00550 JR C,VARFIND ;Go if it is variable 20DD FE30 00551 CPNUM: CP '0' 20DF DA4623 00552 JP C,BADLIN ;Can't be less 20E2 FE3A 00553 CP '9'+1 20E4 DA1E22 00554 JP C,NUMFIND ;Go if number 00555 ; 00556 ; Find a keyword 00557 ; 00558 KEYFIND: 20E7 32DB83 00559 LD (LSTTYP$),A ;Save the type 20EA FEFF 00560 CP 0FFH ;Special 2 byter? 20EC 06FF 00561 LD B,0FFH ;Init one part only 20EE 2002 00562 JR NZ,KF1 ;Go if not 20F0 23 00563 INC HL 20F1 46 00564 LD B,(HL) ;Get the 2nd half 20F2 4F 00565 KF1: LD C,A ;Save main token 20F3 78 00566 LD A,B 20F4 32E083 00567 LD (LSTKEY$),A ;Save 2nd type 20F7 2A9E6E 00568 LD HL,(PGMBGN) ;Find the program start 20FA 2B 00569 KEYREP: DEC HL 20FB CDDA21 00570 KEYLP: CALL GTPTR 20FE CA4E23 00571 JP Z,EXIT ;Go if no more 2101 23 00572 INC HL 2102 5E 00573 LD E,(HL) ;Get this line # 2103 23 00574 INC HL 2104 56 00575 LD D,(HL) 2105 ED53DC83 00576 LD (LSTLIN$),DE ;Save for next time 2109 CD935E 00577 KEYLP1: CALL NXTCHR ;Get a char 210C B7 00578 OR A 210D 28EC 00579 JR Z,KEYLP ;Go on line end 210F FEFF 00580 CP 0FFH ;Spcl? 2111 2805 00581 JR Z,KEY2 ;Yes, ck it out 2113 B9 00582 CP C ;Was not spcl 2114 2811 00583 JR Z,KEY3 ;Go if match 2116 18F1 00584 JR KEYLP1 2118 B9 00585 KEY2: CP C ;Looking for FF? 2119 08 00586 EX AF,AF' ;Save result flag 211A CD935E 00587 CALL NXTCHR ; and get next always 211D B7 00588 OR A ;EOL? 211E 28DB 00589 JR Z,KEYLP ;Done if so 2120 B8 00590 CP B ;Set for this char cp 2121 08 00591 EX AF,AF' ;Was C a match? 2122 20E5 00592 JR NZ,KEYLP1 ;No, do more 2124 08 00593 EX AF,AF' ;C was, was B? 2125 20E2 00594 JR NZ,KEYLP1 ;No, domore 2127 CDE821 00595 KEY3: CALL SHOW 212A 18CF 00596 JR KEYLP 00597 ; 00598 VARFIND: 212C 11E183 00599 LD DE,LSTVAR$ ;Save variable 212F 060A 00600 LD B,10 ;Max cmp len 2131 7E 00601 VAR1: LD A,(HL) ;Get a char 2132 23 00602 INC HL 2133 CD9D22 00603 CALL VALID ;See if real char 2136 2004 00604 JR NZ,VAR2 ;Found end if not 2138 12 00605 LD (DE),A ;Save char 2139 13 00606 INC DE 213A 10F5 00607 DJNZ VAR1 ;Find more 213C EB 00608 VAR2: EX DE,HL 213D 3600 00609 LD (HL),0 ;Terminate variable 213F 3E0A 00610 LD A,10 2141 90 00611 SUB B ;Get len of variable 2142 CA4623 00612 JP Z,BADLIN ;No len is immpossible 2145 32DB83 00613 LD (LSTTYP$),A ;Len = type 2148 47 00614 LD B,A ;Save len in B and 2149 4F 00615 LD C,A ; in C 214A 2A9E6E 00616 LD HL,(PGMBGN) ;Pt to start 214D 2B 00617 VARREP: DEC HL 214E CDDA21 00618 VARLP: CALL GTPTR 2151 CA4E23 00619 JP Z,EXIT 2154 41 00620 LD B,C ;Always reset counter 2155 23 00621 INC HL ;Now get line # 2156 5E 00622 LD E,(HL) 2157 23 00623 INC HL 2158 56 00624 LD D,(HL) 2159 ED53DC83 00625 LD (LSTLIN$),DE ;Save for a match 215D 11E183 00626 VARLP3: LD DE,LSTVAR$ ;Pt to stored var. 2160 CD935E 00627 VARLP1: CALL NXTCHR ;Get a char 2163 B7 00628 OR A ;Line end? 2164 28E8 00629 JR Z,VARLP ;Go if so 2166 FE8F 00630 CP 8FH ;REM line 2168 CCD321 00631 VP0: CALL Z,DUMPLIN 216B 28E1 00632 JR Z,VARLP 00633 IF @BLD631 216D FE84 00634 CP 84H ;<631> 216F 28F7 00635 JR Z,VP0 ;<631> 2171 FEFF 00636 CP 0FFH ;<631> 2173 2003 00637 JR NZ,VP0A ;<631> 2175 23 00638 INC HL ;<631> 2176 18E8 00639 JR VARLP1 ;<631> 00640 ELSE 00641 JP PATCH1 ;Go to patch #6 00642 NOP 00643 ENDIF 2178 FE22 00644 VP0A CP '"' ;String start? 217A 2835 00645 JR Z,BYSTR ;Bypass if so 217C FE41 00646 CP 'A' ;Some variable? 217E 38E0 00647 JR C,VARLP1 ;No, not a variable 2180 FE5B 00648 CP 'Z'+1 2182 30DC 00649 JR NC,VARLP1 ;Go if not variable 2184 EB 00650 VARLP2: EX DE,HL ;DE to line, HL to var storage 2185 BE 00651 CP (HL) ;A match? 2186 EB 00652 EX DE,HL ;Back to normal 2187 2034 00653 JR NZ,BYVAR ;No, bypass entire variable 2189 13 00654 INC DE ;Next var. posn 218A 05 00655 DEC B ;Count down var len 218B C2A921 00656 JP NZ,VAR3 ;Go if not end 218E FE28 00657 CP '(' ;If subscripted, always ok 2190 2803 00658 JR Z,VAR5 2192 79 00659 LD A,C ;Was it full 10 chars? 2193 FE0A 00660 CP 10 2195 CCE821 00661 VAR5: CALL Z,SHOW ;If so, can be spcl 2198 28B4 00662 JR Z,VARLP 219A 23 00663 INC HL ;Ck if next is spcl 219B 47 00664 LD B,A ;Save orig char 219C 7E 00665 LD A,(HL) ;If it is, not a match 219D 2B 00666 DEC HL 219E CD9D22 00667 CALL VALID 21A1 78 00668 LD A,B ;Get back char 21A2 2819 00669 JR Z,BYVAR ;Bypass if spcl 21A4 CDE821 00670 CALL SHOW ;Else show line 21A7 18A5 00671 JR VARLP ; and on to next 21A9 CD935E 00672 VAR3: CALL NXTCHR ;Get nxt char 21AC B7 00673 OR A 21AD 289F 00674 JR Z,VARLP ;Go on line end 21AF 18D3 00675 JR VARLP2 ;Ck another char 21B1 CD935E 00676 BYSTR: CALL NXTCHR ;Get either str or var char 21B4 B7 00677 OR A 21B5 2897 00678 JR Z,VARLP ;Go on line end 21B7 FE22 00679 CP '"' ;End of string? 21B9 28A2 00680 JR Z,VARLP3 ;Yes, cont search 21BB 18F4 00681 JR BYSTR ;If not, do another 21BD 41 00682 BYVAR: LD B,C ;Reset counter! 21BE FE28 00683 CP '(' ;Subscript (groan!) 21C0 289B 00684 JR Z,VARLP3 ;Yes, ck subs. 21C2 CD935E 00685 BYV1: CALL NXTCHR ;Get a char 21C5 B7 00686 OR A 21C6 2886 00687 JR Z,VARLP ;Go on line end 21C8 FE28 00688 CP '(' ;Start subscript? 21CA 2891 00689 JR Z,VARLP3 ;Yes, return 21CC CD9D22 00690 CALL VALID ;End of var? 21CF 208C 00691 JR NZ,VARLP3 ;Go if so 21D1 18EF 00692 JR BYV1 ;Not end, another char 00693 ; 21D3 CD935E 00694 DUMPLIN: CALL NXTCHR 21D6 B7 00695 OR A ;Line end? 21D7 20FA 00696 JR NZ,DUMPLIN 21D9 C9 00697 RET 00698 ; 00699 ; 21DA 23 00700 GTPTR: INC HL 21DB 7E 00701 LD A,(HL) ;Get ptr lsb 21DC 320722 00702 LD (NXTPO),A 21DF F5 00703 PUSH AF 21E0 23 00704 INC HL 21E1 7E 00705 LD A,(HL) ;Get ptr msb 21E2 320822 00706 LD (NXTPO+1),A 21E5 F1 00707 POP AF 21E6 B6 00708 OR (HL) ;End of pgm? 21E7 C9 00709 RET 00710 ; 00711 ; 00712 ; See if display line or number 00713 ; 21E8 3E00 00714 SHOW: LD A,$-$ 21E9 00715 DTYPE EQU $-1 ;Get the command 21EA FE03 00716 CP 3 ;Search? 21EC 2823 00717 JR Z,SHOLIN ;Go if Search 00718 ; 00719 SHONUM: 21EE D5 00720 PUSH DE 21EF C5 00721 PUSH BC ;These must be saved 21F0 3E00 00722 LD A,$-$ 21F1 00723 FTIME EQU $-1 ;Z if first time 21F2 B7 00724 OR A 21F3 3E01 00725 LD A,1 21F5 32F121 00726 LD (FTIME),A ;Show not first 21F8 2806 00727 JR Z,SHO1 ;Go if was first 21FA 210E22 00728 LD HL,COMSTR 21FD CDA546 00729 CALL BASDSP 2200 2ADC83 00730 SHO1: LD HL,(LSTLIN$) ;Get number 2203 CD3931 00731 CALL NUMDSP ;Let basic show it 2206 210000 00732 LD HL,$-$ 2207 00733 NXTPO EQU $-2 2209 2B 00734 DEC HL ;1 before nxt line 220A AF 00735 XOR A ;Show was done 220B C1 00736 POP BC 220C D1 00737 POP DE 220D C9 00738 RET 00739 ; 220E 2C 00740 COMSTR DB ', ',0 20 00 00741 ; 00742 ; 00743 ; Show the line found 00744 ; 00745 SHOLIN: 2211 ED5BDC83 00746 LD DE,(LSTLIN$) ;Get the number 2215 ED539271 00747 LD (CURLIN),DE ;Make it current 2219 3E2E 00748 LD A,'.' ;Set show current 221B C34223 00749 JP DOLINE ;Show it! 00750 ; 00751 ; Find a reference to a line number 00752 ; 00753 NUMFIND: 221E CD9A5F 00754 CALL NUM2DE ;Get the number in DE 2221 C24E23 00755 JP NZ,EXIT ;Quit on error 2224 ED53DE83 00756 LD (LSTNUM$),DE ;Save for retry 2228 2A9E6E 00757 LD HL,(PGMBGN) ;Get start of pgm 222B 3E0E 00758 LD A,NUMTOKE ;What to look for 222D 32DB83 00759 LD (LSTTYP$),A ;Save also for repeat 2230 2B 00760 NUMREP: DEC HL 2231 4F 00761 LD C,A ;token to match 2232 D5 00762 PUSH DE ;Save cp valu on stack 2233 CDDA21 00763 NUMLP: CALL GTPTR 2236 CA4E23 00764 JP Z,EXIT 2239 23 00765 INC HL 223A 5E 00766 LD E,(HL) ;Get this line # 223B 23 00767 INC HL 223C 56 00768 LD D,(HL) 223D ED53DC83 00769 LD (LSTLIN$),DE ;Save for next time 2241 E3 00770 NUMLP1: EX (SP),HL ;Save HL, posn in line 2242 E5 00771 PUSH HL ;Save # 2243 B7 00772 OR A 2244 ED52 00773 SBC HL,DE ;See if a match 2246 E1 00774 POP HL 2247 E3 00775 EX (SP),HL ;All back in posn now 2248 ED5BDC83 00776 LD DE,(LSTLIN$) ;Get line # back 224C 2005 00777 JR NZ,NUMLP2 224E CDE821 00778 CALL SHOW ;All done, found a match 2251 18E0 00779 JR NUMLP 2253 CD935E 00780 NUMLP2: CALL NXTCHR ;Get the next char fm line 2256 B7 00781 OR A 2257 28DA 00782 JR Z,NUMLP ;Go if line end 2259 B9 00783 CP C ;Is it a ref token? 225A 20F7 00784 JR NZ,NUMLP2 ;Cont if not 225C CD9A5F 00785 CALL NUM2DE 225F 2A4571 00786 LD HL,(IPOS) ;Get back buff posn 2262 2B 00787 DEC HL 2263 18DC 00788 JR NUMLP1 ;See if a match 00789 ; 00790 ; Entry was F with no parms, use last ones 00791 ; 2265 3AE921 00792 AGAIN: LD A,(DTYPE) ;Get command type 2268 FE04 00793 CP 4 ;Is it find? 226A CA4E23 00794 JP Z,EXIT ;Can't "again" a find command 226D 3ADB83 00795 LD A,(LSTTYP$) ;Get the last search type 2270 B7 00796 OR A ;Was their one? 2271 CA4623 00797 JP Z,BADLIN ;Back if not 2274 F5 00798 PUSH AF ;Save type 2275 ED5BDC83 00799 LD DE,(LSTLIN$) ;P/u where we left off 2279 CDB45A 00800 CALL FIND ;Get the address of next 227C D24623 00801 JP NC,BADLIN ;Something goofed 227F F1 00802 POP AF 2280 ED5BDE83 00803 LD DE,(LSTNUM$) ;Get previous 2284 FE0E 00804 CP NUMTOKE ;Numeric? 2286 28A8 00805 JR Z,NUMREP ;Go if so 2288 FE80 00806 CP 80H ;Keyword? 228A 3808 00807 JR C,AGN1 ;Go if not 228C 4F 00808 LD C,A ;Token to C 228D 3AE083 00809 LD A,(LSTKEY$) ;Get 2nd half 2290 47 00810 LD B,A 2291 C3FA20 00811 JP KEYREP ;Start find 2294 47 00812 AGN1: LD B,A ;Must be var. set up len 2295 4F 00813 LD C,A 2296 11E183 00814 LD DE,LSTVAR$ ;Pt to old var. 2299 D5 00815 PUSH DE ;Get on stack 229A C34D21 00816 JP VARREP ;Go do it 00817 ; 00818 ; Check for valid variable chars - NZ on end 00819 ; 229D FE2E 00820 VALID: CP '.' ;Valid char 229F C8 00821 RET Z 22A0 FE41 00822 CP 'A' 22A2 3804 00823 JR C,VAL1 ;Not a letter 22A4 FE5B 00824 CP 'Z'+1 22A6 380C 00825 JR C,VALZ ;Yes - back 22A8 FE30 00826 VAL1: CP '0' 22AA 3804 00827 JR C,SPCL ;Not digit, ck more 22AC FE3A 00828 CP '9'+1 22AE 3804 00829 JR C,VALZ ;Yes, a number 22B0 CDB622 00830 SPCL: CALL CKSPCL ;Ck for special 22B3 C9 00831 RET ;Return result 22B4 BF 00832 VALZ: CP A ;Set Z 22B5 C9 00833 RET 00834 ; 22B6 FE21 00835 CKSPCL: CP '!' 22B8 C8 00836 RET Z 22B9 FE23 00837 CP '#' 22BB C8 00838 RET Z 22BC FE24 00839 CP '$' 22BE C8 00840 RET Z 22BF FE25 00841 CP '%' 22C1 C8 00842 RET Z 22C2 FE28 00843 CP '(' 22C4 C9 00844 RET 00845 ; 00846 ; 00847 COPY: 22C5 213970 00848 LD HL,INBUF 22C8 CD935E 00849 CALL NXTCHR ;Pt to possible parm 22CB 2873 00850 JR Z,ILLEG ;Bad if at end 22CD CD9A5F 00851 CALL NUM2DE ;Get the 1st number 22D0 286E 00852 JR Z,ILLEG ;Bad if end 22D2 7A 00853 LD A,D 22D3 B3 00854 OR E 22D4 286A 00855 JR Z,ILLEG ;Go if not a number 22D6 E5 00856 PUSH HL ;Must save buffer 22D7 CDB45A 00857 CALL FIND 22DA 3064 00858 JR NC,ILLEG ;Go if can't find 22DC B7 00859 OR A 22DD 03 00860 INC BC 22DE 03 00861 INC BC ;Past line ptr 22DF ED42 00862 SBC HL,BC ;Len to HL 22E1 2B 00863 DEC HL 22E2 2B 00864 DEC HL ;Past line # 22E3 E3 00865 EX (SP),HL ;Save len on stack 22E4 CD935E 00866 CALL NXTCHR ;On to next number 22E7 2857 00867 JR Z,ILLEG 22E9 CD9A5F 00868 CALL NUM2DE 22EC 2052 00869 JR NZ,ILLEG ;Now must be end 22EE 7A 00870 LD A,D 22EF B3 00871 OR E 22F0 284E 00872 JR Z,ILLEG ;Go if not number 22F2 C5 00873 PUSH BC ;Save old line address 22F3 CDB45A 00874 CALL FIND 22F6 E1 00875 POP HL ;New posn in BC,old in HL 22F7 3847 00876 JR C,ILLEG ;Can't have new line already 22F9 C1 00877 POP BC ;Get len old line 00878 ; 00879 ; Copy a line 00880 ; 22FA D5 00881 PUSH DE ;Save new line # 22FB 23 00882 INC HL 22FC 23 00883 INC HL ;Pass nxt line ptr 22FD 11FA6E 00884 LD DE,LBUF+1 ; else setup for move 2300 D5 00885 PUSH DE ;Save buffer 2301 EDB0 00886 LDIR 2303 E1 00887 MAKLIN: POP HL ;Back to buffer 2304 2B 00888 DEC HL 2305 CD0D7A 00889 CALL UNTOKE 2308 C5 00890 PUSH BC ;Save current eol 2309 210500 00891 LD HL,5 ;Max ascii line # 230C 09 00892 ADD HL,BC ;New end 230D EB 00893 EX DE,HL ;End to DE 230E 60 00894 LD H,B ;HL to buffer end 230F 69 00895 LD L,C 2310 013970 00896 LD BC,INBUF ;Line start 2313 B7 00897 OR A 2314 ED42 00898 SBC HL,BC ;Len of line 2316 44 00899 LD B,H 2317 4D 00900 LD C,L ;Len to BC 2318 E1 00901 POP HL ;Pt to curr end 2319 EDB8 00902 LDDR ;Make room for line # 231B EB 00903 EX DE,HL ;HL to buff start 231C 0606 00904 LD B,6 ;Clear line # area 231E 3620 00905 CLRLP: LD (HL),20H ; with spaces 2320 2B 00906 DEC HL 2321 10FB 00907 DJNZ CLRLP 2323 D1 00908 POP DE ;Line # back 2324 EB 00909 EX DE,HL 2325 13 00910 INC DE ;Input buffer start 2326 D5 00911 PUSH DE 2327 3E61 00912 LD A,97 ;HEXDEC, make # ascii 2329 EF 00913 RST 28H 232A 13 00914 ENDL: INC DE ;Find 0 byte 232B 1A 00915 LD A,(DE) 232C B7 00916 OR A 232D 20FB 00917 JR NZ,ENDL 232F E1 00918 POP HL ;Line start 2330 D5 00919 PUSH DE ;Line end 2331 3E0D 00920 LD A,13 2333 12 00921 LD (DE),A ;For dsp 2334 3E0A 00922 LD A,10 ;@@dsply 2336 EF 00923 RST 40 2337 D1 00924 POP DE 2338 AF 00925 XOR A 2339 12 00926 LD (DE),A 233A 213870 00927 LD HL,INBUF-1 ;Treat as typed line 233D C39359 00928 JP 5993H 2340 1804 00929 ILLEG: JR BADLIN 00930 ; 00931 ; 2342 21F480 00932 DOLINE: LD HL,NOBRK@ 2345 DD 00933 DB 0DDH 2346 21955F 00934 BADLIN: LD HL,FUNCERR 2349 DD 00935 DB 0DDH 234A 215C42 00936 NOMEM: LD HL,OMERR 234D DD 00937 DB 0DDH 234E 212059 00938 EXIT: LD HL,READY 2351 310000 00939 EXIT1: LD SP,$-$ 2352 00940 SAVSTK EQU $-2 2354 E9 00941 JP (HL) 00942 ; 2355 00 00943 DOPASS1 DB 0 2356 0000 00944 NUM1 DW 0 2358 0000 00945 NUM2 DW 0 235A 0000 00946 LTM DW 0 235C 0000 00947 TOMOVE DW 0 235E 0000 00948 NEWLIN DW 0 00949 ; 00950 IFGT $,23FFH 00951 ERR 'Overflow into LIB region' 00952 ENDIF 00953 ; 00954 ; 00955 IF @BLD631 00956 ELSE 00957 PATCH1 CP 84H 00958 JP Z,VP0 00959 CP 0FFH 00960 JP NZ,VP0A 00961 INC HL 00962 JP VARLP1 00963 ENDIF 1E00 00964 END 1E00H 1E00 is the transfer address 00000 Total errors
[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]