[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 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 at nemesis.lonestar.org]