1 ;Function 100 RSX (set/create directory label 2 ; Only for Non banked systems 3 ; 4 ; Procedure: 5 ; 1. If this BDOS call ~= f100 then go to NEXT 6 ; 2. select the current disk for BIOS calls 7 ; 3. search for current label 8 ; 4. if no label then do 9 ; a. find first empty dir slot 10 ; b. if no empties then return error 11 ; c. create dir label from user FCB in DE 12 ; d. call update SFCB 13 ; e. return 14 ; 5. if password protected then ok = password() 15 ; 6. if ~ok then return error 16 ; 7. update label from user info 17 ; 8. call update SFCB 18 ; 9. return 19 ; 20 ; P. Balma 21 FFFF = on equ 0ffffh 22 0000 = off equ 00000h 23 ; 24 FFFF = PATCH10 equ on ;to avoid lockup 25 ; verified against dirlbl.rsx patched with DRI patch 10 on 19 Oct 97 rhp 26 ; 27 ; RSX PREFIX 28 ; 29 0000 0000000000serial: db 0,0,0,0,0,0 30 0006 C31B00 jmp1: jmp ftest 31 0009 C3 NEXTj: db 0c3h ; next RSX or BDOS 32 000A 0000 NEXTa: db 0,0 ; next address 33 000C 0000 prev: dw 0 ; where from 34 000E FF remove: db 0ffh ; remove RSX at warm start 35 000F FF nbank: db 0FFh ; non banked RSX 36 0010 4449524C42rsxname: db 'DIRLBL ' 37 0018 0000 space: dw 0 38 001A 00 patch: db 0 39 ; 40 ; 41 ftest: 42 001B F5 push a ;save user regs 43 001C 79 mov a,c 44 001D FE64 cpi 64h ;compare BDOS func 100 45 001F CA2700 jz func100 46 0022 F1 pop a ;some other BDOS call 47 goto$next: 48 0023 2A0A00 lhld NEXTa ; go to next and don't return 49 0026 E9 pchl 50 51 ; Set directory label 52 ; de -> .fcb 53 ; drive location 54 ; name & type fields user's discretion 55 ; extent field definition 56 ; bit 1 (80h): enable passwords on drive 57 ; bit 2 (40h): enable file access 58 ; bit 3 (20h): enable file update stamping 59 ; bit 4 (10h): enable file create stamping 60 ; bit 8 (01h): assign new password to dir lbl 61 62 func100: 63 0027 F1 pop a 64 0028 2100003922 lxi h,0 ! dad sp ! shld ret$stack ; save user stack 65 002F 313E04 lxi sp,loc$stack 66 67 0032 EB22A503EB xchg ! shld info ! xchg 68 0037 0E19CD2300 mvi c,19h ! call goto$next ! sta curdsk ; get current disk 69 70 003F 0E1DCD2300 mvi c,1dh ! call goto$next ; is drive R/O ? 71 0044 3A92034FCD lda curdsk ! mov c,a ! call hlrotr 72 004B 7DE601C22A mov a,l ! ani 01h ! jnz read$only 73 74 0051 2AA503CD49 lhld info ! call getexta ! push a ; if user tries to set time 75 0058 E670329303 ani 0111$0000b ! sta set$time ; stamps and no SFCB's...error 76 005D 7EE67F77 mov a,m ! ani 7fh ! mov m,a ; mask off password bit 77 0061 E601329503 ani 1 ! sta newpass ; but label can have password 78 79 0066 0E69D51199 mvi c,69h ! push d ! lxi d,stamp ; get time for possible 80 006C CD2300D1 call goto$next ! pop d ; update later 81 82 0070 0E3111BD03 mvi c,31h ! lxi d,SCBPB ! call goto$next; get BDOS current dma 83 0078 22B303 shld curdma 84 85 007B 3A9203CD52 lda curdsk ! call dsksel ; BIOS select and sets 86 ; disk parameters 87 ; Does dir lbl exist on drive? 88 0081 CDB601 call search ; return if found or 89 0084 E50600 push h ! mvi b,0 ; successfully made 90 0087 1120003A9E lxi d,20h ! lda nfcbs ! mov c,a ; Are there SFCB's in directory 91 008E 197EFE21CA main0: dad d ! mov a,m ! cpi 21h ! jz main1 92 0095 043A9F033C inr b ! lda i ! inr a ! sta i ! cmp c 93 009E C28E00 jnz main0 94 95 00A1 3A9303B7C2 lda set$time ! ora a ! jnz no$SFCB ; no, but user wants to set 96 ; time stamp 97 00A8 32A103 sta SFCB ; SFCB = false 98 99 00AB 22A3037832 main1: shld SFCB$addr ! mov a,b ! sta j ! lhld info 100 00B5 EBE1E523 xchg ! pop h ! push h ! inx h ; HL => dir FCB, DE => user FCB 101 00B9 130E0C inx d ! mvi c,0ch ; prepare to move DE to HL 102 00BC CD4F033A95 call move ! lda newpass ; find out if new password ? 103 00C2 B7 ora a 104 00C3 C4BC02 cnz scramble ; scramble user pass & put in 105 ; dFCB 106 107 00C6 3AA1033CC2 lda SFCB ! inr a ! jnz mainx1 ; any SFCB's 108 109 110 main2: ; update time & date stamp 111 00CD 3AA003473E lda j ! mov b,a ! mvi a,2 ; j = FCB position from SFCB 112 00D3 90 sub b ; in 4 FCB sector (0,1,2), thus 113 ; FCBx - 2 114 ; FCBy - 1 115 ; FCBz - 0 116 ; SFCB 117 ; So, 2-j gives FCB offset in 118 ; SFCB 119 120 00D4 06004F2AA3 mvi b,0 ! mov c,a ! lhld SFCB$addr 121 00DA 23110A000C inx h ! lxi d,0ah ! inr c 122 00DF 0DCAE700 mainx0: dcr c ! jz mainx1 123 00E3 19C3DF00 dad d ! jmp mainx0 124 125 00E7 D1D5E5 mainx1: pop d ! push d ! push h ; HL => dFCB 126 00EA EB11180019 xchg ! lxi d,18h ! dad d ; HL => dfcb(24) (TS field) 127 00EF EBE1D5 xchg ! pop h ! push d ; of DIR LABEL 128 ; HL => Time/stamp pos in SFCB 129 00F2 3A9D033CC2 lda NEW ! inr a ! jnz st0 ; did we create a new DL? 130 00F9 CD7403C30D call stamper ! jmp st1 ; yes 131 132 00FF 11040019 st0: lxi d,4 ! dad d ; update time stamp 133 0103 D1E5EB1104 pop d ! push h ! xchg ! lxi d,4 ; DFCB position 134 0109 19EBE1D5 dad d ! xchg ! pop h ! push d 135 010D CD7403 st1: call stamper 136 0110 E1 pop h 137 138 0111 E1CD4903F6mainr: pop h ! call getexta ! ori 1 ! mov m,a ; set lsb extent 139 0118 CDFD02 call write$dir 140 011B AF210000C3 xra a ! lxi h,0 !jmp goback ; no SFCB, so finished 141 142 143 no$SFCB: 144 0122 3EFF21FF00 mvi a,0ffh ! lxi h,0ffh ! jmp goback 145 146 read$only: 147 012A 3EFF21FF02 mvi a,0ffh ! lxi h,02ffh 148 149 012F E52AB50336goback: push h ! lhld aDIRBCB ! mvi m,0ffh ; tell BDOS not to use buffer 150 ; contents 151 0135 F5 push a 152 153 0136 0E0DCD2300 mvi c,0dh ! call goto$next ; BDOS reset 154 013B 3A92035F0E lda curdsk ! mov e,a ! mvi c,0eh 155 0141 CD2300 call goto$next 156 0144 3A9203CDC1 lda curdsk ! call seldsk ; restore BDOS environment 157 014A F1D1 pop a ! pop d 158 014C 2AFC03F9 lhld ret$stack ! sphl ; restore user stack 159 0150 EB xchg ; move error return to h 160 0151 C9 ret 161 162 163 dsksel: ; select disk and get parameters 164 165 0152 CDC103 call seldsk ; Bios select disk 166 0155 CD5903 call gethl ; DE = XLT addr 167 0158 22AB03EB shld XLT ! xchg 168 015C 010A0009 lxi b,0ah ! dad b ; HL = addr DPB 169 0160 CD5903 call gethl 170 0163 22B703EB shld aDPB ! xchg 171 0167 01040009 lxi b,4 ! dad b ; HL = addr DIR BCB 172 016B CD590322B5 call gethl ! shld aDIRBCB 173 0171 010A0009 lxi b,0ah ! dad b ; Hl => DIR buffer 174 ; 175 if PATCH10 176 0175 CD3E04 call newcode 177 else 178 shld bufptr ; use BDOS buffer for 179 ; BIOS reads & writes 180 ; must jam FF into it to 181 ; signal don't use when done 182 endif 183 0178 2AB703 lhld aDPB 184 017B CD5903 call gethl ; get [HL] 185 017E 22AF03EB shld spt ! xchg 186 0182 2323232323 inx h! inx h! inx h ! inx h! inx h! ; HL => dirmax 187 0187 CD590322BB call gethl ! shld dirmax ! xchg 188 018E 2323 inx h ! inx h ! 189 0190 CD590322A7 call gethl ! shld checkv ! xchg 190 0197 CD590322A9 call gethl ! shld offset ! xchg 191 ; HL => phys shift 192 019E CD5903EB call gethl ! xchg ; E = physhf, D = phymsk 193 01A2 147A inr d ! mov a,d ; phys mask+1 = # 128 byte rcd 194 ; phymsk * 4 = nfcbs/rcd 195 01A4 B717B717 ora a ! ral ! ora a ! ral ; clear carry & shift phymsk 196 01A8 329E03 sta nfcbs 197 198 01AB 2AAF03 lhld spt ; spt = spt/phymsk 199 01AE 4BCD6703 mov c,e ! call hlrotr ; => spt = shl(spt,physhf) 200 01B2 22AF03 shld spt 201 01B5 C9 ret 202 203 search: ; search dir for pattern in 204 ; info of length in c 205 01B6 AF32970332 xra a ! sta sect ! sta empty 206 01BD 21000022B1 lxi h,0 ! shld dcnt 207 208 01C3 2AAD03444D lhld bufptr ! mov b,h ! mov c,l ; set BIOS dma 209 01C8 CDEE03 call setdma 210 211 01CB CDF302 src0: call read$dir 212 01CE FE00C23602 cpi 0 ! jnz oops ; if A ~= 0 then BIOS error 213 214 01D3 06003A9E03 mvi b,0 ! lda nfcbs ! mov c,a ; BC always = nfcbs 215 216 01D9 2AAD031120 lhld bufptr ! lxi d,20h ; start of buffer and FCB 217 01DF AF xra a ; do i = 0 to nfcbs - 1 218 01E0 329F037E src1: sta i ! mov a,m ; user # 219 01E4 FE20C2FA01 cpi 20h ! jnz src2 ; dir label mark 220 221 01E9 E511100019 push h ! lxi d,10h ! dad d ! mov a,m ; found label, move to DM to 222 01EF B7E1C8 ora a ! pop h ! rz ; check if label is pass prot 223 01F2 E5FE20E1C2 push h ! cpi 20h ! pop h ! jnz checkpass 224 01F9 C9 ret 225 226 01FA 3A98033CCA src2: lda empty ! inr a ! jz src3 ; record first sect with empty 227 0201 7E mov a,m 228 0202 FEE5C21202 cpi 0e5h ! jnz src3 ! lda sect ; save sector # 229 020A 32A2033EFF sta savsect ! mvi a,0ffh ! sta empty ; set empty found = true 230 0212 19 src3: dad d ; position to next FCB 231 0213 3A9F033C lda i ! inr a ; while i < nfcbs 232 0217 B9C2E001 cmp c ! jnz src1 233 234 021B 2ABB03EB2A lhld dirmax ! xchg ! lhld dcnt ; while (dcnt < dirmax) & 235 ; dir label not found 236 0222 0922B103CD dad b ! shld dcnt ! call subdh ; is dcnt <= dirmax ? 237 0229 DA3F02 jc not$found ; no 238 022C 3A97033C32 lda sect ! inr a ! sta sect ! jmp src0 239 240 0236 3EFF21FF01oops: mvi a,0ffh ! lxi h,1ffh 241 023B C1C32F01 pop b ! jmp goback ; return perm. error 242 243 not$found: ; must make a label 244 245 023F 3A98033CC2 lda empty ! inr a ! jnz no$space ; if empty = false... 246 0246 3AA2033297 lda savsect ! sta sect 247 024C CDF302 call read$dir ; get sector 248 024F 2AAD031120 lhld bufptr ! lxi d,20h ! mvi c,0 ; C = FCB offset in buffer 249 0257 7EFEE5CA62 nf0: mov a,m ! cpi 0e5h ! jz nf1 250 025D 190CC35702 dad d ! inr c !jmp nf0 ; know that empty occurs here 251 ; so don't need bounds test 252 0262 362079329F nf1: mvi m,20h ! mov a,c ! sta i 253 0268 3E00E50E20 mvi a,0 ! push h ! mvi c,32 ; clear fcb to spaces 254 026D 230DCA7602 nf2: inx h ! dcr c ! jz nf3 255 0272 77C36D02 mov m,a ! jmp nf2 256 0276 E1 nf3: pop h 257 0277 3EFF329D03 mvi a,0ffh ! sta NEW 258 027C C9 ret ; HL => dir FCB 259 260 027D 3EFF21FF00no$space: mvi a,0ffh ! lxi h,0ffh ! pop b ! jmp goback 261 262 check$pass: ; Dir is password protected, check dma for 263 ; proper password 264 265 0286 E5 push h ; save addr dir FCB 266 0287 110D00194E lxi d,0dh ! dad d ! mov c,m ; get XOR sum in S1, C = S1 267 028C 110A0019 lxi d,0ah ! dad d ; position to last char in label pass 268 0290 0608 mvi b,8 ; # chars in pass 269 0292 EB2AB303EB xchg ! lhld curdma ! xchg ; DE => user pass, HL => label pass 270 271 0297 7EA9C5 cp0: mov a,m ! xra c ! push b ; HL = XOR(HL,C) 272 029A 4F1AB9 mov c,a ! ldax d ! cmp c ; compare user and label passwords 273 029D C2B202 jnz wrong$pass 274 02A0 C1132B05 pop b ! inx d ! dcx h ! dcr b 275 02A4 C29702 jnz cp0 276 277 02A7 EB22B303 xchg ! shld curdma ; curdma => 2nd pass in field if there 278 02AB E1 pop h ; restore dir FCB addr 279 02AC 3EFF329403 mvi a,0ffh ! sta oldpass 280 02B1 C9 ret 281 282 wrong$pass: 283 02B2 3EFF21FF07 mvi a,0ffh ! lxi h,07ffh ! pop b ! pop b 284 02B9 C32F01 jmp goback 285 286 scramble: ; encrypt password at curdma 287 ; 1. sum each char of pass. 288 ; 2. XOR each char with sum 289 ; 3. reverse order of encrypted pass 290 291 02BC 0108002AB3 lxi b,8 ! lhld curdma ;checkpass sets to 2nd pos if 292 02C2 3A94033CCA lda oldpass ! inr a ! jz scr0 ;old pass else must move dma 293 02C9 0922B303 dad b ! shld curdma 294 ; B = sum, C = max size of pass 295 02CD 7E80470D scr0: mov a,m ! add b ! mov b,a ! dcr c 296 02D1 23C2CD02 inx h ! jnz scr0 297 298 299 02D5 D1E1D5 pop d ! pop h ! push d ; H => dFCB, D was return 300 02D8 110D001970 lxi d,0dh ! dad d ! mov m,b ; S1 = sum 301 02DD 110A0019 lxi d,0ah ! dad d ; position to last char in pass 302 02E1 0E08EB2AB3 mvi c,8 ! xchg ! lhld curdma 303 02E7 7EA8EB77 scr1: mov a,m ! xra b ! xchg ! mov m,a ; XOR(char) => dFCB 304 02EB EB231B0DC2 xchg ! inx h ! dcx d ! dcr c ! jnz scr1 305 306 02F2 C9 ret 307 308 309 read$dir: ; read directory into bufptr 310 311 02F3 CD0A03 call track 312 02F6 CD1903 call sector 313 02F9 CDD803 call rdsec 314 02FC C9 ret 315 316 writedir: ; write directory from bufptr 317 02FD 3A9703 lda sect 318 0300 CD0A03 call track 319 0303 CD1903 call sector 320 0306 CDDE03 call wrsec 321 0309 C9 ret 322 323 track: ; set the track for the BIOS call 324 325 030A 2AAF03CD38 lhld spt ! call intdiv ; E = integer(sect/spt) 326 0310 2AA90319EB lhld offset ! dad d ! xchg ! call settrk 327 0318 C9 ret 328 329 sector: ; set the sector for the BIOS 330 0319 3A9703 lda sect 331 031C 2AAF03CD38 lhld spt ! call intdiv ; get mod(sect,spt) 332 0322 7995 mov a,c ! sub l ; D = x * spt such that D > sect 333 ; D - spt = least x*spt s.t. D < sect 334 0324 4F3A970391 mov c,a ! lda sect ! sub c ; a => remainder of sect/spt 335 0329 06004F2AAB mvi b,0 ! mov c,a ! lhld XLT ; BC = logical sector #, DE = translate 336 032F EBCDE403 xchg ! call sectrn ; table address 337 0333 EBCDD003 xchg ! call setsec ; BC = physical sector # 338 0337 C9 ret 339 340 341 intdiv: ; compute the integer division of A/L 342 343 0338 0E00110000 mvi c,0 ! lxi d,0 344 033D F5 int0: push a ; compute the additive sum of L such 345 033E 7D814F mov a,l ! add c ! mov c,a ; that C = E*L where C = 1,2,3,... 346 0341 F1 pop a 347 348 0342 B91CD23D03 cmp C ! inr e ! jnc int0 ; if A < E*L then return E - 1 349 0347 1D dcr e 350 0348 C9 ret 351 352 getexta: 353 ; Get current extent field address to hl 354 0349 110C0019 lxi d,0ch ! dad d ; hl=.fcb(extnum) 355 034D 7E mov a,m 356 034E C9 ret 357 358 move: ; Move data length of length c from source de to 359 ; destination given by hl 360 361 034F 0C inr c ; in case it is zero 362 move0: 363 0350 0DC8 dcr c! rz ; more to move 364 0352 1A77 ldax d! mov m,a ; one byte moved 365 0354 1323 inx d! inx h ; to next byte 366 0356 C35003 jmp move0 367 368 gethl: ; get the word pointed at by HL 369 0359 5E235623 mov e,m ! inx h ! mov d,m ! inx h 370 035D EBC9 xchg ! ret 371 372 subdh: ; HL = DE - HL 373 374 035F B7 ora a ; clear carry 375 0360 7B956F mov a,e ! sub l ! mov l,a 376 0363 7A9C67 mov a,d ! sbb h ! mov h,a 377 0366 C9 ret 378 379 hlrotr: 380 ; rotate HL right by amount c 381 0367 0C inr c ; in case zero 382 0368 0DC8 hlr: dcr c! rz ; return when zero 383 036A 7CB71F67 mov a,h! ora a! rar! mov h,a ; high byte 384 036E 7D1F6F mov a,l! rar! mov l,a ; low byte 385 0371 C36803 jmp hlr 386 387 stamper: ; move time stamp into SFCB & FCB 388 0374 3AA1033C lda SFCB ! inr a ; no SFCB, update DL only 389 0378 CC8903C1D1 cz stmp ! pop b ! pop d ! push h ! xchg 390 037F C5CD8903C1 push b ! call stmp ! pop b ! xchg ! pop h ! push d 391 0387 C5 push b 392 0388 C9 ret 393 0389 1199030E04stmp: lxi d,stamp ! mvi c,4 ! call move 394 0391 C9 ret 395 396 ;********************************************************************** 397 398 0392 00 curdsk: db 0 399 0393 00 set$time: db 0 400 0394 00 oldpass: db 0 401 0395 00 newpass: db 0 402 0396 00 pass$prot db 0 403 0397 00 sect: db 0 404 0398 00 empty: db 0 405 0399 stamp: ds 4 406 039D 00 NEW: db 0 407 039E 00 nfcbs: db 0 408 039F 00 i: db 0 409 03A0 00 j: db 0 410 03A1 FF SFCB: db 0ffh 411 03A2 00 savsect: db 0 412 413 03A3 0000 SFCB$addr: dw 0 414 03A5 0000 info: dw 0 415 03A7 0000 checkv dw 0 416 03A9 0000 offset: dw 0 417 03AB 0000 XLT: dw 0 418 03AD 0000 bufptr: dw 0 419 03AF 0000 spt: dw 0 420 03B1 0000 dcnt: dw 0 421 03B3 0000 curdma: dw 0 422 03B5 0000 aDIRBCB dw 0 423 03B7 0000 aDPB: dw 0 424 03B9 0000 dFCB: dw 0 425 03BB 0000 dirmax: dw 0 426 427 SCBPB: 428 03BD 3C Soff: db 3ch 429 03BE 00 Sset: db 0 430 03BF 0000 Svalue: dw 0 431 432 ; 433 ;*********************************************************** 434 ;* * 435 ;* bios calls from for track, sector io * 436 ;* * 437 ;*********************************************************** 438 ;*********************************************************** 439 ;* * 440 ;* equates for interface to cp/m bios * 441 ;* * 442 ;*********************************************************** 443 ; 444 ; 445 0000 = base equ 0 446 0001 = wboot equ base+1h ;warm boot entry point stored here 447 0018 = sdsk equ 18h ;bios select disk entry point 448 001B = strk equ 1bh ;bios set track entry point 449 001E = ssec equ 1eh ;bios set sector entry point 450 0021 = stdma equ 21h 451 0024 = read equ 24h ;bios read sector entry point 452 0027 = write equ 27h ;bios write sector entry point 453 002D = stran equ 2dh ;bios sector translation entry point 454 ; 455 ;*********************************************************** 456 ;* * 457 ;*********************************************************** 458 seldsk: ;select drive number 0-15, in C 459 ;1-> drive no. 460 ;returns-> pointer to translate table in HL 461 03C1 4F mov c,a ;c = drive no. 462 03C2 111800 lxi d,sdsk 463 03C5 C3F403 jmp gobios 464 ; 465 ;*********************************************************** 466 ;* * 467 ;*********************************************************** 468 settrk: ;set track number 0-76, 0-65535 in BC 469 ;1-> track no. 470 03C8 42 mov b,d 471 03C9 4B mov c,e ;bc = track no. 472 03CA 111B00 lxi d,strk 473 03CD C3F403 jmp gobios 474 ; 475 ;*********************************************************** 476 ;* * 477 ;*********************************************************** 478 setsec: ;set sector number 1 - sectors per track 479 ;1-> sector no. 480 03D0 42 mov b,d 481 03D1 4B mov c,e ;bc = sector no. 482 03D2 111E00 lxi d,ssec 483 03D5 C3F403 jmp gobios 484 ; 485 ;*********************************************************** 486 ;* * 487 ;*********************************************************** 488 rdsec: ;read current sector into sector at dma addr 489 ;returns in A register: 0 if no errors 490 ; 1 non-recoverable error 491 03D8 112400 lxi d,read 492 03DB C3F403 jmp gobios 493 ;*********************************************************** 494 ;* * 495 ;*********************************************************** 496 wrsec: ;writes contents of sector at dma addr to current sector 497 ;returns in A register: 0 errors occured 498 ; 1 non-recoverable error 499 03DE 112700 lxi d,write 500 03E1 C3F403 jmp gobios 501 ; 502 ;*********************************************************** 503 ;* * 504 ;*********************************************************** 505 sectrn: ;translate sector number 506 ;1-> logical sector number (fixed(15)) 507 ;2-> pointer to translate table 508 ;returns-> physical sector number 509 03E4 D5 push d 510 03E5 112D00 lxi d,stran 511 03E8 2A0100 lhld wboot 512 03EB 19 dad d ;hl = sectran entry point 513 03EC D1 pop d 514 03ED E9 pchl 515 ; 516 ; 517 setdma: ; set dma 518 ; 1 -> BC = dma address 519 520 03EE 112100 lxi d,stdma 521 03F1 C3F403 jmp gobios 522 ; 523 ; 524 ;*********************************************************** 525 ;*********************************************************** 526 ;*********************************************************** 527 ;* * 528 ;* compute offset from warm boot and jump to bios * 529 ;* * 530 ;*********************************************************** 531 ; 532 ; 533 gobios: ;jump to bios entry point 534 ;de -> offset from warm boot entry point 535 03F4 2A0100 lhld wboot 536 03F7 19 dad d 537 03F8 110000 lxi d,0 538 03FB E9 pchl 539 ; 540 541 03FC 0000 ret$stack: dw 0 542 ; 543 if PATCH10 544 03FE ds 64 545 loc$stack: 546 newcode: 547 043E 5E mov e,m 548 043F 23 inx h 549 0440 56 mov d,m 550 0441 EB xchg 551 0442 22AD03 shld bufptr 552 0445 C9 ret 553 0446 ds 186 554 else 555 ds 32 556 loc$stack: 557 endif 558 0500 end ADIRBCB 03B5 149 172 422# ADPB 03B7 170 183 423# BASE 0000 445# 446 BUFPTR 03AD 178 208 216 248 418# 551 CHECKPASS 0286 223 262# CHECKV 03A7 189 415# CP0 0297 271# 275 CURDMA 03B3 83 269 277 291 293 302 421# CURDSK 0392 68 71 85 154 156 398# DCNT 03B1 206 234 236 420# DFCB 03B9 424# DIRMAX 03BB 187 234 425# DSKSEL 0152 85 163# EMPTY 0398 205 226 229 245 404# FTEST 001B 30 41# FUNC100 0027 45 62# GETEXTA 0349 74 138 352# GETHL 0359 166 169 172 184 187 189 190 192 368# GOBACK 012F 140 144 149# 241 260 284 GOBIOS 03F4 463 473 483 492 500 521 533# GOTONEXT 0023 47# 68 70 80 82 153 155 HLR 0368 382# 385 HLROTR 0367 71 199 379# I 039F 92 92 218 231 252 408# INFO 03A5 67 74 99 414# INT0 033D 344# 348 INTDIV 0338 325 331 341# J 03A0 99 111 409# JMP1 0006 30# LOCSTACK 043E 65 545# 556# MAIN0 008E 91# 93 MAIN1 00AB 91 99# MAIN2 00CD 110# MAINR 0111 138# MAINX0 00DF 122# 123 MAINX1 00E7 107 122 125# MOVE 034F 102 358# 393 MOVE0 0350 362# 366 NBANK 000F 35# NEW 039D 129 257 406# NEWCODE 043E 176 546# NEWPASS 0395 77 102 401# NEXTA 000A 32# 48 NEXTJ 0009 31# NF0 0257 249# 250 NF1 0262 249 252# NF2 026D 254# 255 NF3 0276 254 256# NFCBS 039E 90 196 214 407# NOSFCB 0122 95 143# NOSPACE 027D 245 260# NOTFOUND 023F 237 243# OFF 0000 22# OFFSET 03A9 190 326 416# OLDPASS 0394 279 292 400# ON FFFF 21# 24 OOPS 0236 212 240# PASSPROT 0396 402# PATCH 001A 38# PATCH10 FFFF 24# 175 543 PREV 000C 33# RDSEC 03D8 313 488# READ 0024 451# 491 READDIR 02F3 211 247 309# READONLY 012A 72 146# REMOVE 000E 34# RETSTACK 03FC 64 158 541# RSXNAME 0010 36# SAVSECT 03A2 229 246 411# SCBPB 03BD 82 427# SCR0 02CD 292 295# 296 SCR1 02E7 303# 304 SCRAMBLE 02BC 104 286# SDSK 0018 447# 462 SEARCH 01B6 88 203# SECT 0397 205 228 238 238 246 317 330 334 403# SECTOR 0319 312 319 329# SECTRN 03E4 336 505# SELDSK 03C1 156 165 458# SERIAL 0000 29# SETDMA 03EE 209 517# SETSEC 03D0 337 478# SETTIME 0393 75 95 399# SETTRK 03C8 326 468# SFCB 03A1 97 107 388 410# SFCBADDR 03A3 99 120 413# SOFF 03BD 428# SPACE 0018 37# SPT 03AF 185 198 200 325 331 419# SRC0 01CB 211# 238 SRC1 01E0 218# 232 SRC2 01FA 219 226# SRC3 0212 226 228 230# SSEC 001E 449# 482 SSET 03BE 429# ST0 00FF 129 132# ST1 010D 130 135# STAMP 0399 79 393 405# STAMPER 0374 130 135 387# STDMA 0021 450# 520 STMP 0389 389 390 STRAN 002D 453# 510 STRK 001B 448# 472 SUBDH 035F 236 372# SVALUE 03BF 430# TRACK 030A 311 318 323# WBOOT 0001 446# 511 535 WRITE 0027 452# 499 WRITEDIR 02FD 139 316# WRONGPASS 02B2 273 282# WRSEC 03DE 320 496# XLT 03AB 167 335 417#