LS-DOS 6.3.1 - LBSET Assembly Listing (HTML format version)

[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 02:28:45 SET/FILTER - LS-DOS 6.2      Page 00001 

              00001 ;LBSET/ASM - Set and Filter commands
              00003 ;
000D          00004 CR      EQU     13
0000          00005 *GET    SVCMAC:3                ;SVC Macro equivalents
              00006 ;SVCMAC/ASM - LS-DOS Version VI
              00007 *LIST   OFF
              00399 *LIST   ON
              00401 ;
              00402 ;       ORG this up here to allow driver programs to
              00403 ;       load at X'2400' without clobbering this program
              00404 ;
2C00          00405         ORG     2C00H
              00406 ;
              00407 ;       FILTER entry point
              00408 ;
2C00 C3B22C   00409         JP      FILTER          ;Filter entry point
              00410 ;
              00411 ;       SET entry point
              00412 ;
2C03          00413 SET     @@FLAGS                 ;Flag table pointer
2C03+3E65     00414         LD      A,101
2C05+EF       00415         RST     40
2C06 FDCB0246 00416         BIT     0,(IY+'C'-'A')  ;Can't use if memory
2C0A C2272D   00417         JP      NZ,CANT         ;  is frozen
2C0D 11CD2D   00418         LD      DE,DEVFCB       ;Get filespec
2C10          00419         @@FSPEC
2C10+3E4E     00420         LD      A,78
2C12+EF       00421         RST     40
2C13 C2232D   00422         JP      NZ,DEVREQ       ;Quit if bad name
2C16 1A       00423         LD      A,(DE)          ;Ck on devicespec
2C17 FE2A     00424         CP      '*'
2C19 C2232D   00425         JP      NZ,DEVREQ       ;Must have device
2C1C 11ED2D   00426         LD      DE,PGMFCB       ;Get driver or filter
2C1F          00427         @@FSPEC                 ;  filespec
2C1F+3E4E     00428         LD      A,78
2C21+EF       00429         RST     40
2C22 C22B2D   00430         JP      NZ,SPCREQ       ;Must be entered
2C25 1A       00431         LD      A,(DE)          ;Target cannot be device
2C26 FE2A     00432         CP      '*'             ;  since this is SET
2C28 CA2B2D   00433         JP      Z,SPCREQ
2C2B E5       00434         PUSH    HL              ;Save INBUF$ pointer
2C2C D5       00435         PUSH    DE              ;  and FCB start
2C2D 21AD2D   00436         LD      HL,SAVSPEC      ;Save the filter/driver
2C30 EB       00437         EX      DE,HL           ;  filespec to try /DVR
2C31 012000   00438         LD      BC,32           ;  if /FLT is not found
2C34 EDB0     00439         LDIR
2C36 D1       00440         POP     DE              ;Recover FCB
2C37 210B2D   00441         LD      HL,FLTEXT       ;Default extension is FLT
2C3A          00442         @@FEXT                  ;Use default EXT if none
2C3A+3E4F     00443         LD      A,79
2C3C+EF       00444         RST     40
2C3D E1       00445         POP     HL              ;Recover cmdline posn
              00446 ;
              00447 ;       Make sure device is not in system
              00448 ;
2C3E E5       00449         PUSH    HL              ;Save INBUF$ pointer
2C3F ED5BCE2D 00450         LD      DE,(DEVFCB+1)   ;P/u device name
2C43          00451         @@GTDCB                 ;Find device DCB address
2C43+3E52     00452         LD      A,82
2C45+EF       00453         RST     40
2C46 2016     00454         JR      NZ,NEWDCB       ;Go if not found
2C48 CB5E     00455         BIT     3,(HL)          ;  else check if NIL
2C4A 3E27     00456         LD      A,39            ;Init "Device in use...
2C4C 2840     00457         JR      Z,ERRPOP        ;Error if not NIL
              00458 ;
              00459 ;       Inhibit SETting any system device
              00460 ;
2C4E E5       00461         PUSH    HL              ;Save DCB pointer
2C4F 21CD2D   00462         LD      HL,DEVFCB       ;Determine if system
2C52 54       00463         LD      D,H             ;  device by attempting
2C53 5D       00464         LD      E,L             ;  to rename it
2C54          00465         @@RENAM                 ;The error code will be
2C54+3E38     00466         LD      A,56
2C56+EF       00467         RST     40
2C57 E1       00468         POP     HL              ;  either 19 or 40
2C58 FE28     00469         CP      40              ;Protected system device?
2C5A 2832     00470         JR      Z,ERRPOP
2C5C 180A     00471         JR      GOTDCB          ;  else we have it
              00472 ;
              00473 ;       Device not found - Locate spare DCB
              00474 ;
2C5E 110000   00475 NEWDCB  LD      DE,0            ;Find spare device
2C61          00476         @@GTDCB                 ;  table position
2C61+3E52     00477         LD      A,82
2C63+EF       00478         RST     40
2C64 3E21     00479         LD      A,33            ;"no device space avail
2C66 2026     00480         JR      NZ,ERRPOP       ;Exit on error
              00481 ;
              00482 ;       DCB available - Load the driver/filter
              00483 ;
2C68 E5       00484 GOTDCB  PUSH    HL              ;Save table address
2C69 FDCB12D6 00485         SET     2,(IY+'S'-'A')  ;Allow use with EXEC only
2C6D 11ED2D   00486         LD      DE,PGMFCB       ;Load the target file
2C70          00487         @@LOAD                  ;Transfer address in HL
2C70+3E4C     00488         LD      A,76
2C72+EF       00489         RST     40
2C73 281D     00490         JR      Z,LOADOK        ;Go if file found
2C75 E63F     00491         AND     3FH             ;Strip flags
2C77 FE1F     00492         CP      31              ;Program not found?
2C79 2012     00493         JR      NZ,LOADERR      ;Abort on any other
              00494 ;
              00495 ;       No FILTER found - Check on DRIVER
              00496 ;
2C7B 11AD2D   00497         LD      DE,SAVSPEC      ;Original filename
2C7E 210E2D   00498         LD      HL,DVREXT       ;Try with /DVR
2C81          00499         @@FEXT
2C81+3E4F     00500         LD      A,79
2C83+EF       00501         RST     40
2C84 FDCB12D6 00502         SET     2,(IY+'S'-'A')  ;Allow use with EXEC only
2C88          00503         @@LOAD
2C88+3E4C     00504         LD      A,76
2C8A+EF       00505         RST     40
2C8B 2805     00506         JR      Z,LOADOK        ;Go if file found
2C8D E1       00507 LOADERR POP     HL              ;Clean the stack
2C8E E1       00508 ERRPOP  POP     HL
2C8F C3112D   00509         JP      IOERR           ;Abort on load error
              00510 ;
              00511 ;       Move device name into string buffer
              00512 ;
2C92 D1       00513 LOADOK  POP     DE              ;Rcvr table address
2C93 D5       00514         PUSH    DE
2C94 F3       00515         DI                      ;Don't interrupt me
2C95 3E08     00516         LD      A,8             ;Set up as NIL first
2C97 12       00517         LD      (DE),A
2C98 1C       00518 NOSET   INC     E               ;Transfer device name
2C99 1C       00519         INC     E               ;  entered in command
2C9A 1C       00520         INC     E               ;  to the device table
2C9B 3E08     00521         LD      A,8             ;Show RESET as NIL
2C9D 12       00522         LD      (DE),A
2C9E 1C       00523         INC     E
2C9F 1C       00524         INC     E               ;Point to name field
2CA0 1C       00525         INC     E
2CA1 3ACE2D   00526         LD      A,(DEVFCB+1)    ;Move name to DCB
2CA4 12       00527         LD      (DE),A
2CA5 1C       00528         INC     E
2CA6 3ACF2D   00529         LD      A,(DEVFCB+2)
2CA9 12       00530         LD      (DE),A
2CAA FB       00531         EI                      ;Interrupts back on
2CAB D1       00532 GODOIT  POP     DE              ;Recover DCB address
2CAC E3       00533         EX      (SP),HL         ;Stack prog's TRAADR
2CAD FDCB02DE 00534         SET     3,(IY+'C'-'A')  ;Set system request
2CB1 C9       00535         RET                     ;  & go to it
              00536 ;
              00537 ;       FILTER *dev *dev routine
              00538 ;
2CB2 11CD2D   00539 FILTER  LD      DE,DEVFCB       ;Get first spec
2CB5          00540         @@FSPEC
2CB5+3E4E     00541         LD      A,78
2CB7+EF       00542         RST     40
2CB8 C2232D   00543         JP      NZ,DEVREQ       ;Quit on bad name
2CBB 1A       00544         LD      A,(DE)          ;Ck on devicespec
2CBC FE2A     00545         CP      '*'
2CBE C2232D   00546         JP      NZ,DEVREQ       ;Must have device
2CC1 11ED2D   00547         LD      DE,PGMFCB       ;Get filter device spec
2CC4          00548         @@FSPEC
2CC4+3E4E     00549         LD      A,78
2CC6+EF       00550         RST     40
2CC7 C22B2D   00551         JP      NZ,SPCREQ       ;Must be entered
2CCA 1A       00552         LD      A,(DE)          ;Target must be a device
2CCB FE2A     00553         CP      '*'             ;  since this is FILTER
2CCD C2232D   00554         JP      NZ,DEVREQ
2CD0 ED5BEE2D 00555         LD      DE,(PGMFCB+1)   ;Get filter DCB address
2CD4          00556         @@GTDCB
2CD4+3E52     00557         LD      A,82
2CD6+EF       00558         RST     40
2CD7 2038     00559         JR      NZ,IOERR        ;Quit if not found
2CD9 CB76     00560         BIT     6,(HL)          ;Must be a filter
2CDB 2842     00561         JR      Z,NOTFLT        ;Quit if not
              00562 ;
              00563 ;       FILTER must be inactive to use it
              00564 ;
2CDD 54       00565         LD      D,H             ;Xfer FILTER DCB pointer
2CDE 5D       00566         LD      E,L             ;  to DE & locate the
2CDF 2C       00567         INC     L               ;  DCB pointer in the
2CE0 7E       00568         LD      A,(HL)          ;  the FILTER module
2CE1 2C       00569         INC     L
2CE2 66       00570         LD      H,(HL)
2CE3 6F       00571         LD      L,A
2CE4 010400   00572         LD      BC,4            ;HL now points to the
2CE7 09       00573         ADD     HL,BC           ;  entry point. Get its
2CE8 4E       00574         LD      C,(HL)          ;  DCB address by peeking
2CE9 0C       00575         INC     C               ;  past the name field
2CEA 09       00576         ADD     HL,BC
2CEB 7E       00577         LD      A,(HL)          ;Get low-order
2CEC 23       00578         INC     HL
2CED 66       00579         LD      H,(HL)          ;Get hi-order
2CEE 6F       00580         LD      L,A
              00581                                 ;If DCB is NOT pointing
2CEF ED52     00582         SBC     HL,DE           ;  to itself, then it
2CF1 2028     00583         JR      NZ,ACTFLT       ;  is an active filter
              00584 ;
              00585 ;       The filter DCB pointer points to its DCB
              00586 ;
2CF3 D5       00587         PUSH    DE              ;Save filter DCB
2CF4 ED5BCE2D 00588         LD      DE,(DEVFCB+1)   ;Find the device DCB
2CF8          00589         @@GTDCB
2CF8+3E52     00590         LD      A,82
2CFA+EF       00591         RST     40
2CFB D1       00592         POP     DE
2CFC 2013     00593         JR      NZ,IOERR        ;Quit if not found
              00594 ;
              00595 ;       Swap the 1st three bytes of DCB & FILT DCB
              00596 ;
2CFE 0603     00597         LD      B,3
2D00 4E       00598 SWAP    LD      C,(HL)
2D01 1A       00599         LD      A,(DE)
2D02 77       00600         LD      (HL),A
2D03 79       00601         LD      A,C
2D04 12       00602         LD      (DE),A
2D05 2C       00603         INC     L
2D06 1C       00604         INC     E
2D07 10F7     00605         DJNZ    SWAP
2D09 182A     00606         JR      EXIT
              00607 ;
2D0B 46       00608 FLTEXT  DB      'FLT'
     4C 54 
2D0E 44       00609 DVREXT  DB      'DVR'
     56 52 
              00610 ;
2D11 6F       00611 IOERR   LD      L,A             ;Transfer error code
2D12 2600     00612         LD      H,0             ;  to HL
2D14 F6C0     00613         OR      0C0H            ;Set abbrev & return
2D16 4F       00614         LD      C,A
2D17          00615         @@ERROR
2D17+3E1A     00616         LD      A,26
2D19+EF       00617         RST     40
2D1A C9       00618         RET
              00619 ;
2D1B 21952D   00620 ACTFLT  LD      HL,ACTFLT$
2D1E DD       00621         DB      0DDH
2D1F 217E2D   00622 NOTFLT  LD      HL,NOTFLT$
2D22 DD       00623         DB      0DDH
2D23 214F2D   00624 DEVREQ  LD      HL,DEVREQ$
2D26 DD       00625         DB      0DDH
2D27 21642D   00626 CANT    LD      HL,CANT$
2D2A DD       00627         DB      0DDH
2D2B 213C2D   00628 SPCREQ  LD      HL,SPCREQ$
2D2E          00629         @@LOGOT
              00630         IFEQ    00H,1
              00631         LD      HL,
              00632         ENDIF
2D2E+3E0C     00633         LD      A,12
2D30+EF       00634         RST     40
2D31 21FFFF   00635         LD      HL,-1
2D34 C9       00636         RET
              00637 ;
2D35 210000   00638 EXIT    LD      HL,0
2D38          00639         @@CKBRKC                ;Clear out break
2D38+3E6A     00640         LD      A,106
2D3A+EF       00641         RST     40
2D3B C9       00642         RET
              00643 ;
2D3C 46       00644 SPCREQ$ DB      'File spec required',CR
     69 6C 65 20 73 70 65 63
     20 72 65 71 75 69 72 65
     64 0D 
2D4F 44       00645 DEVREQ$ DB      'Device spec required',CR
     65 76 69 63 65 20 73 70
     65 63 20 72 65 71 75 69
     72 65 64 0D 
2D64 4E       00646 CANT$   DB      'No memory space available',CR
     6F 20 6D 65 6D 6F 72 79
     20 73 70 61 63 65 20 61
     76 61 69 6C 61 62 6C 65
     0D 
2D7E 44       00647 NOTFLT$ DB      'Device is not a filter',CR
     65 76 69 63 65 20 69 73
     20 6E 6F 74 20 61 20 66
     69 6C 74 65 72 0D 
2D95 46       00648 ACTFLT$ DB      'FILTER module is in use',CR
     49 4C 54 45 52 20 6D 6F
     64 75 6C 65 20 69 73 20
     69 6E 20 75 73 65 0D 
              00649 ;
2DAD          00650 SAVSPEC DS      32
2DCD          00651 DEVFCB  DS      32              ;Device file control block
2DED          00652 PGMFCB  DS      32              ;Driver/filter FCB
              00653 ;
2C03          00654         END     SET
2C03 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]

Valid HTML 4.01!