LS-DOS 6.3.1 - CLICK Filter 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/19/99 21:10:46 CLICK/FLT - LS-DOS 6.3       Page 00001 

              00001 ;CLICK/ASM - Device Click Filter
              00003 ;
              00004 ;
              00005         IF      @MOD4
0048          00006 TONE    EQU     48H
0018          00007 LEN     EQU     18H
0090          00008 SNDPORT EQU     90H
              00009         ENDIF
              00010         IF      @MOD2
              00011 LEN     EQU     180H            ;Length
              00012 SNDPORT EQU     0A0H
              00013         ENDIF
              00014 ;
0000          00015 *GET    SVCMAC:3                ;SVC Macro equivalents
              00016 ;SVCMAC/ASM - LS-DOS Version VI
              00017 *LIST   OFF
              00409 *LIST   ON
0000          00411 *GET    VALUES:3                ;Misc. equates
              00412 ;VALUES/ASM - Version 6
              00413 *LIST OFF
              00440 *LIST ON
0000          00441 *GET    BUILDVER:3              ;<631>
              00442 ;
              00443 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00444 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00445 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00446 ;       for programs that can use that.
              00447 ;
FFFF          00448 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00449 ;       These switches activate patches made since the 1B release.
              00450 ;       It is important that all earlier patches be enabled when a higher
              00451 ;       patch is enabled.
              00452 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00453 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00454 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00455 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00456 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00457 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00458 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00459 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00460 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00461 ;
              00462 ;End of BUILDVER/ASM
0000          00463 *GET    COPYCOM:3               ;Copyright messages
              00464 ; COPYCOM - File for Copyright COMment block
              00465 ;
0000          00466 *GET BUILDVER/ASM:3
              00467 ;
              00468 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00469 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00470 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00471 ;       for programs that can use that.
              00472 ;
FFFF          00473 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00474 ;       These switches activate patches made since the 1B release.
              00475 ;       It is important that all earlier patches be enabled when a higher
              00476 ;       patch is enabled.
              00477 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00478 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00479 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00480 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00481 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00482 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00483 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00484 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00485 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00486 ;
              00487 ;End of BUILDVER/ASM
              00488         IF      @BLD631
              00490         ELSE
              00491         COM     '<*(C) 1982,3,4,6 by LSI*>'
              00492         ENDIF
              00493 ;
2400          00494         ORG     2400H
              00495 ;
              00496 START
2400          00497         @@CKBRKC
2400+3E6A     00498         LD      A,106
2402+EF       00499         RST     40
2403 2804     00500         JR      Z,STARTA        ;Continue if no BREAK
2405 21FFFF   00501         LD      HL,-1           ; set up abort RET
2408 C9       00502         RET
              00503 ;
2409 ED730B25 00504 STARTA  LD      (EXIT+1),SP     ;Save stack for error exit
240D CD1724   00505         CALL    DOINIT          ;Do initialization
2410 CD9624   00506         CALL    INSTFLT         ;Relocate/install filter
2413 210000   00507 NORMEX  LD      HL,0            ;Good exit
2416 C9       00508         RET
              00509 ;
              00510 ;       Xfer DCB ptr to IX & stuff addrs' in driver
              00511 ;
2417 D5       00512 DOINIT  PUSH    DE              ;DE => DCB+0
2418 DDE1     00513         POP     IX              ;Xfer to IX
241A ED535F24 00514         LD      (DCB),DE        ;Xfer into header
              00515 ;
              00516 ;       Sign-on 
              00517 ;
241E E5       00518         PUSH    HL
241F 215125   00519         LD      HL,HELLO$       ;Sign on message
2422 CDEC24   00520         CALL    DSPLY
              00521 ;
              00522 ;       Check PARMS and if entry from SET command
              00523 ;
2425 111125   00524         LD      DE,PRMTBL       ;Point to parms
2428 E1       00525         POP     HL              ;Recover cmdline posn
2429          00526         @@PARAM                 ;Parse the parms
2429+3E11     00527         LD      A,17
242B+EF       00528         RST     40
242C C2F224   00529         JP      NZ,IOERR        ;Exit on parm error
              00530 ;
242F          00531         @@FLAGS                 ;IY => System Flags Base
242F+3E65     00532         LD      A,101
2431+EF       00533         RST     40
2432 FDCB025E 00534         BIT     3,(IY+'C'-'A')  ;System request?
2436 CAFD24   00535         JP      Z,VIASET        ;"Install with SET
              00536 ;
              00537 ;       Before anything - Make sure hi-mem is avail
              00538 ;
2439 FDCB0246 00539         BIT     0,(IY+CFLAG$)   ;High memory available ?
243D C20125   00540         JP      NZ,CANT         ;No - display error
              00541 ;
              00542 ;       Set up filter for CHAR if entered
              00543 ;
2440 110000   00544 CHARPRM LD      DE,00           ;Char parm lands here
2443 7A       00545         LD      A,D             ;Check if entered and
2444 BB       00546         CP      E               ;  is normal character
2445 C8       00547         RET     Z               ;Done if not entered
2446 FE00     00548         CP      0               ;Check is MSB is altered
2448 3E2C     00549         LD      A,44            ;Init "Parameter error
244A C2F224   00550         JP      NZ,IOERR        ;Bad if so
              00551 ;
244D 53       00552         LD      D,E             ;Set up CP nn
244E 1EFE     00553         LD      E,0FEH          ;Reverse it and 
2450 ED537424 00554         LD      (CKCHAR),DE     ; put it in the filter
2454 C9       00555         RET
              00556 ;*=*=*
              00557 ;       Actual CLICK filter Code
              00558 ;*=*=*
2455 180C     00559 HEADER  JR      FILTER
2457 0000     00560 OLDHI   DW      0               ;HIGH$ before CLICK
2459 05       00561         DB      5,'CLICK'
     43 4C 49 43 4B 
245F 0000     00562 DCB     DW      $-$             ;DCB pointing to CLICK
2461 0000     00563 SPARE   DW      0               ;System wants it
              00564 ;
              00565 ;       Is there a character here?
              00566 ;
2463 DD2A5F24 00567 FILTER  LD      IX,(DCB)        ;P/u DCB address
2467 3806     00568         JR      C,NOTCTL        ;Go if Get
2469 2804     00569         JR      Z,NOTCTL        ;  or Put
246B          00570 IS_CTL  @@CHNIO                 ;Pass the CTL call
246B+3E14     00571         LD      A,20
246D+EF       00572         RST     40
246E C9       00573         RET
246F          00574 NOTCTL  @@CHNIO                 ;Go to next in line
246F+3E14     00575         LD      A,20
2471+EF       00576         RST     40
2472 C0       00577         RET     NZ              ;None - RETurn NZ
              00578 ;
              00579 ;       Generate short Click
              00580 ;
2473 F5       00581 SOUND   PUSH    AF              ;Save registers
2474 0000     00582 CKCHAR  DW      00              ;Space for a CP instruct
2476 201C     00583         JR      NZ,POPAF        ; exit if CP above fails
2478 C5       00584 SNDNOW  PUSH    BC
2479 D5       00585         PUSH    DE
              00586         IF      @MOD2
              00587         LD      BC,LEN          ;Duration
              00588         LD      A,-1            ;ON value
              00589         OUT     (SNDPORT),A     ;Turn on sound
              00590         LD      A,16            ;Svc @PAUSE
              00591         RST     28H             ;Delay
              00592         XOR     A               ;OFF value
              00593         OUT     (SNDPORT),A     ;Turn off sound
              00594         ENDIF
              00595 ;
              00596         IF      @MOD4
              00597 ;
247A 111848   00598 STFVALS LD      DE,TONE<8!LEN   ;D = Tone, E = Length
247D 3E00     00599         LD      A,0             ;Init on/off toggle
247F 0E90     00600         LD      C,SNDPORT       ;Point to port
              00601 ;
              00602 ;       ON portion
              00603 ;
2481 3C       00604 DURLP   INC     A               ;Hold output high
2482 ED79     00605         OUT     (C),A           ;  for count of (B)
2484 42       00606         LD      B,D             ;Play tone
2485 10FE     00607         DJNZ    $
              00608 ;
              00609 ;OFF portion
              00610 ;
2487 3D       00611         DEC     A               ;  for count of (B)
2488 ED79     00612         OUT     (C),A
248A 42       00613         LD      B,D             ;Hold output low for
248B 10FE     00614         DJNZ    $
              00615 ;
248D 1D       00616         DEC     E               ;Dec the duration
248E 20F1     00617         JR      NZ,DURLP
2490 10FE     00618         DJNZ    $               ;Hold for 256 count
              00619         ENDIF
              00620 ;
2492 D1       00621         POP     DE              ;Restore regs
2493 C1       00622         POP     BC
2494 F1       00623 POPAF   POP     AF
2495 C9       00624         RET                     ;And RETurn
              00625 ;
0041          00626 LENGTH  EQU     $-HEADER        ;Length of Filter
              00627 ;
              00628 ;       INSTFLT - Relocate & Install Filter
              00629 ;
2496 DD360047 00630 INSTFLT LD      (IX+0),47H      ;Set Filter,Ctl,Get,Put
              00631 ;
              00632 ;       Pick up Old HIGH$ and save in driver
              00633 ;
249A 210000   00634         LD      HL,0            ;Get HIGH$
249D 45       00635         LD      B,L
249E          00636         @@HIGH$
249E+3E64     00637         LD      A,100
24A0+EF       00638         RST     40
24A1 225724   00639         LD      (OLDHI),HL      ;Stuff into header
              00640 ;
              00641 ;       Calculate New HIGH$ & stuff into DCB
              00642 ;
24A4 014100   00643         LD      BC,LENGTH       ;Length of driver
24A7 C5       00644         PUSH    BC              ;Save length
24A8 B7       00645         OR      A
24A9 ED42     00646         SBC     HL,BC           ;HL => New HIGH$
24AB          00647         @@HIGH$                 ;(B=0) set new HIGH$
24AB+3E64     00648         LD      A,100
24AD+EF       00649         RST     40
24AE 23       00650         INC     HL              ;Pt to driver
24AF DD7501   00651         LD      (IX+1),L        ;Stuff driver address
24B2 DD7402   00652         LD      (IX+2),H        ;  into DCB
              00653 ;
              00654 ;       Calc offset between source & dest for relo
              00655 ;
24B5 115524   00656         LD      DE,HEADER       ;Start of driver
24B8 E5       00657         PUSH    HL              ;Save Source & Dest ptrs
24B9 D5       00658         PUSH    DE
24BA B7       00659         OR      A               ;Clear carry
24BB ED52     00660         SBC     HL,DE           ;Get offset
              00661 ;
              00662 ;       Relocate internal references in driver
              00663 ;
24BD DD21DC24 00664         LD      IX,RELTBL       ;Point to relocation tbl
24C1 44       00665         LD      B,H             ;Move to BC
24C2 4D       00666         LD      C,L
24C3 DD6E00   00667 RLOOP   LD      L,(IX)          ;Get address to change
24C6 DD6601   00668         LD      H,(IX+1)
24C9 7C       00669         LD      A,H
24CA B5       00670         OR      L
24CB 2819     00671         JR      Z,RELDUN
24CD 5E       00672         LD      E,(HL)          ;P/U address
24CE 23       00673         INC     HL
24CF 56       00674         LD      D,(HL)
24D0 EB       00675         EX      DE,HL           ;Offset it
24D1 09       00676         ADD     HL,BC
24D2 EB       00677         EX      DE,HL
24D3 72       00678         LD      (HL),D          ;Put it back
24D4 2B       00679         DEC     HL
24D5 73       00680         LD      (HL),E
24D6 DD23     00681         INC     IX
24D8 DD23     00682         INC     IX
24DA 18E7     00683         JR      RLOOP           ;Loop till done
              00684 ;
              00685 ;       Relocation Table for Driver
              00686 ;
24DC 6524     00687 RELTBL  DW      FILTER+2,0,0,0,0
     0000 0000 0000 0000 
              00688 ;
              00689 ;       Transfer Filter code to high memory
              00690 ;
24E6 E1       00691 RELDUN  POP     HL              ;HL => Source DE => Dest
24E7 D1       00692         POP     DE
24E8 C1       00693         POP     BC              ;BC = length of filter
24E9 EDB0     00694         LDIR                    ;Block move
24EB C9       00695         RET                     ;RETurn
              00696 ;
              00697 ;       DSPLY - Display a string
              00698 ;
24EC D5       00699 DSPLY   PUSH    DE              ;Save DE
24ED          00700         @@DSPLY                 ;Display it
              00701         IFEQ    00H,1
              00702         LD      HL,
              00703         ENDIF
24ED+3E0A     00704         LD      A,10
24EF+EF       00705         RST     40
24F0 D1       00706         POP     DE              ;
24F1 C8       00707         RET     Z               ;Return if good
              00708 ;
              00709 ;       IOERR - Any fatal Errors come here
              00710 ;
24F2 6F       00711 IOERR   LD      L,A             ;Xfer error # to HL
24F3 2600     00712         LD      H,0             ;
24F5 F6C0     00713         OR      0C0H            ;Short msg & RETurn
24F7 4F       00714         LD      C,A
24F8          00715         @@ERROR                 ;Display error
24F8+3E1A     00716         LD      A,26
24FA+EF       00717         RST     40
24FB 180D     00718         JR      EXIT            ;Go to exit routine
              00719 ;
              00720 ;       Error Handler
              00721 ;
24FD 213C25   00722 VIASET  LD      HL,VIASET$      ;"Install with Set
2500 DD       00723         DB      0DDH
2501 212225   00724 CANT    LD      HL,CANT$        ;"No memory space
              00725 ;
2504          00726         @@LOGOT                 ;Log error
              00727         IFEQ    00H,1
              00728         LD      HL,
              00729         ENDIF
2504+3E0C     00730         LD      A,12
2506+EF       00731         RST     40
2507 21FFFF   00732         LD      HL,-1           ;Set abort code
              00733 ;
250A 310000   00734 EXIT    LD      SP,$-$          ;P/u original SP
250D          00735         @@CKBRKC                ;Clear out break
250D+3E6A     00736         LD      A,106
250F+EF       00737         RST     40
2510 C9       00738         RET                     ;  and RETurn
              00739 ;
2511 43       00740 PRMTBL  DB      'CHAR  '
     48 41 52 20 20 
2517 4124     00741         DW      CHARPRM+1
2519 43       00742         DB      'C     '
     20 20 20 20 20 
251F 4124     00743         DW      CHARPRM+1
2521 00       00744         NOP                     ;End of table
              00745 ;
              00746 ;
2522 4E       00747 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 
253C 4D       00748 VIASET$ DB      'Must install via SET',CR
     75 73 74 20 69 6E 73 74
     61 6C 6C 20 76 69 61 20
     53 45 54 0D 
              00749 ;
2551 43       00750 HELLO$  DB      'CLICK'
     4C 49 43 4B 
2556          00751 *GET    CLIENT:3
              00752 ;CLIENT/ASM - File to establish sign-on headers
              00753 ; and version numbers.
              00754 ;
              00755 ; EACH STRING SHOULD CONTAIN ONLY 63 CHARACTERS !!
              00756 ;
              00757         IF      @BLD631
              00758 ;                12345678901234567890123456789012345678901234567890
2556 20       00759         DB      ' - 6.3.1 - Copyright 1982/83/84/86/90 by MISOSYS, ';<631>
     2D 20 36 2E 33 2E 31 20
     2D 20 43 6F 70 79 72 69
     67 68 74 20 31 39 38 32
     2F 38 33 2F 38 34 2F 38
     36 2F 39 30 20 62 79 20
     4D 49 53 4F 53 59 53 2C
     20 
2588 49       00760         DB      'Inc.,       ',10       ;<631>
     6E 63 2E 2C 20 20 20 20
     20 20 20 0A 
              00761         ELSE
              00762         DB      ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst'
              00763         DB      'ems, Inc.   ',10
              00764         ENDIF
              00765 ;
              00766 ;       DB      'All Rights Reserved. Licensed 1982/83/84 to Tandy '
              00767 ;       DB      'Corporation.',10,13
              00768 ;
              00769 ;       DB      'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI'
              00770 ;       DB      'STRIBUTE !! ',10,13
              00771 ;       DB      'All Rights reserved by LSI, 8970 N. 55th St. Milwa'
              00772 ;       DB      'ukee, Wisc. ',10,13
2595 41       00773         DB      'All Rights Reserved. Unauthorized duplication is p'
     6C 6C 20 52 69 67 68 74
     73 20 52 65 73 65 72 76
     65 64 2E 20 55 6E 61 75
     74 68 6F 72 69 7A 65 64
     20 64 75 70 6C 69 63 61
     74 69 6F 6E 20 69 73 20
     70 
25C7 72       00774         DB      'rohibited.  ',10,13
     6F 68 69 62 69 74 65 64
     2E 20 20 0A 0D 
              00775 ;
2400          00776         END     START
2400 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!