[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]
00001 ;Filter for LDOS 6.x for intnl daisy-wheel operation 00002 ; 0000 00003 *GET SVCMAC 00004 ;SVCMAC/ASM - LS-DOS Version VI 00005 *LIST OFF 00397 *LIST ON 00399 ; General EQUates... 000A 00400 LF EQU 10 ;Linefeed character 000D 00401 CR EQU 13 ;Carriage return 0008 00402 BKSP EQU 8 ;Backspace 00403 ; 00404 ; LDOS 'SET' command handler for 6.x 00405 ; 2600 00406 ORG 2600H 2600 D5 00407 BEGIN PUSH DE ;Put DCB pointer 2601 DDE1 00408 POP IX ;Into IX register 2603 219426 00409 LD HL,SIGNON ;=>Signon message 2606 00410 @@DSPLY ;Print it 00411 IFEQ 00H,1 00412 LD HL, 00413 ENDIF 2606+3E0A 00414 LD A,10 2608+EF 00415 RST 40 2609 00416 @@FLAGS ;Point IY to flag table 2609+3E65 00417 LD A,101 260B+EF 00418 RST 40 260C FDCB025E 00419 BIT 3,(IY+2) ;System request? 2610 CA8526 00420 JP Z,NOTSET ;Must install with SET cmd 00421 ; check if memory available 2613 FDCB0246 00422 BIT 0,(IY+2) ;HIGH$ frozen? 2617 C28026 00423 JP NZ,NOROOM ;Quit if so 261A FDE5 00424 PUSH IY 261C D1 00425 POP DE 261D 210800 00426 LD HL,'I'-'A' ;Offset to IFLAG$ 2620 19 00427 ADD HL,DE 2621 226427 00428 LD (IFLG),HL ;Store in code 2624 226F27 00429 LD (IFLG2),HL 00430 ;Is it already in memory? 2627 112D27 00431 LD DE,FLTNAM 262A 00432 @@GTMOD 262A+3E53 00433 LD A,83 262C+EF 00434 RST 40 262D CA8A26 00435 JP Z,ISRES 00436 ; find available high memory 2630 210000 00437 LD HL,0 2633 45 00438 LD B,L ;B=0 2634 00439 @@HIGH$ ;Find top of avaliable memory 2634+3E64 00440 LD A,100 2636+EF 00441 RST 40 2637 223227 00442 LD (OLDMEM),HL ;Save in filter header 263A E5 00443 PUSH HL ;Save HIGH$ 263B DD223727 00444 LD (DCBADD),IX ;Put DCB address in header 00445 ; relocate JP, CALL and LD addresses in filter 263F 112328 00446 LD DE,LAST ;End of code now.. 2642 B7 00447 OR A ;Clear carry flag 2643 ED52 00448 SBC HL,DE ;Offset of move 2645 EB 00449 EX DE,HL ;Into DE 2646 2A3E27 00450 LD HL,(REL1) ;Fix absolute memory 2649 19 00451 ADD HL,DE ;References 264A 223E27 00452 LD (REL1),HL ;In filter 264D 2A4627 00453 LD HL,(REL2) 2650 19 00454 ADD HL,DE 2651 224627 00455 LD (REL2),HL 2654 2A7927 00456 LD HL,(REL3) 2657 19 00457 ADD HL,DE 2658 227927 00458 LD (REL3),HL 265B 2A7E27 00459 LD HL,(REL4) 265E 19 00460 ADD HL,DE 265F 227E27 00461 LD (REL4),HL 00462 ; move into high memory 2662 212328 00463 LD HL,LAST ;=>end of relocated code 2665 D1 00464 POP DE ;Old HIGH$=destination 2666 01F400 00465 LD BC,LAST-FENTRY+1 ;Length of relocated code 2669 EDB8 00466 LDDR ;Move it, leaving DE.. 266B EB 00467 EX DE,HL ;=>new HIGH$ 266C E5 00468 PUSH HL 266D 00469 @@HIGH$ ;Set new HIGH$ 266D+3E64 00470 LD A,100 266F+EF 00471 RST 40 2670 E1 00472 POP HL 2671 23 00473 INC HL ;Point to filter entry point 00474 ; set up new in DCB 2672 DD360047 00475 LD (IX+0),01000111B ;Filter/get/put/ctl bits 2676 DD7501 00476 LD (IX+1),L ;Set new address in DCB 2679 DD7402 00477 LD (IX+2),H ;For the new Device/filter 00478 ;*=*=* 267C 210000 00479 LD HL,0 ;Indicate no error 267F C9 00480 RET 00481 ;*=*=* 00482 ; Error handling 00483 ;*=*=* 2680 211927 00484 NOROOM LD HL,NOROOM$ 2683 1808 00485 JR ERROUT 2685 21E426 00486 NOTSET LD HL,NTSET$ 2688 1803 00487 JR ERROUT 268A 210227 00488 ISRES LD HL,ISRES$ 268D 00489 ERROUT @@LOGOT ;Display and log 00490 IFEQ 00H,1 00491 LD HL, 00492 ENDIF 268D+3E0C 00493 LD A,12 268F+EF 00494 RST 40 2690 21FFFF 00495 LD HL,0FFFFH ;Indicate error 2693 C9 00496 RET 00497 ;*=*=* 00498 ; Data area 00499 ;*=*=* 2694 49 00500 SIGNON DB 'International Daisy Wheel printer filter.',LF 6E 74 65 72 6E 61 74 69 6F 6E 61 6C 20 44 61 69 73 79 20 57 68 65 65 6C 20 70 72 69 6E 74 65 72 20 66 69 6C 74 65 72 2E 0A 26BE 43 00501 DB 'Copyright 1983 Logical Systems, Inc.' 6F 70 79 72 69 67 68 74 20 31 39 38 33 20 4C 6F 67 69 63 61 6C 20 53 79 73 74 65 6D 73 2C 20 49 6E 63 2E 26E2 0A 00502 DB LF,CR 0D 26E4 4D 00503 NTSET$ DB 'Must install with SET command',CR 75 73 74 20 69 6E 73 74 61 6C 6C 20 77 69 74 68 20 53 45 54 20 63 6F 6D 6D 61 6E 64 0D 2702 46 00504 ISRES$ DB 'Filter already loaded.',CR 69 6C 74 65 72 20 61 6C 72 65 61 64 79 20 6C 6F 61 64 65 64 2E 0D 2719 4E 00505 NOROOM$ DB 'No memory available',CR 6F 20 6D 65 6D 6F 72 79 20 61 76 61 69 6C 61 62 6C 65 0D 00506 ; 00507 ; 272D 44 00508 FLTNAM DB 'DW',3 ;Name terminated for @GTMOD 57 03 00509 ;*=*=* 00510 ; Actual filter moved to high memory 00511 ; LDOS style header... 00512 ;*=*=* 2730 180A 00513 FENTRY JR START ;Branch around linkage 2732 0000 00514 DW $-$ ;Last byte used 2732 00515 OLDMEM EQU $-2 ;<=previous HIGH$ value 00516 ; 2734 02 00517 DB 2,'DW' 44 57 2737 0000 00518 DCBADD DW $-$ ;DCB using filter 2739 0000 00519 SPARE DW 0 273B 00 00520 TOGGLE DB 0 ;On/off switch 00521 ; 00522 ;*=*=* 00523 ; Driver code 00524 ;*=*=* 273C DD2A3727 00525 START LD IX,(DCBADD) 273E 00526 REL1 EQU $-2 2740 3E14 00527 LD A,14H ;@chnio 2742 C24000 00528 JP NZ,40H ;Go if input/ctl 00529 ; 00530 ;Check input character against tables 2745 218927 00531 CKCHR LD HL,TABLE1-1 2746 00532 REL2 EQU $-2 2748 23 00533 CKCHR1 INC HL ;Bump to match char 2749 7E 00534 LD A,(HL) ;Check it 274A B9 00535 CP C 274B 23 00536 INC HL ;Bump to xlate char 274C 2833 00537 JR Z,ISCHR1 ;Go if found 274E B7 00538 OR A ;Else test for end 274F 20F7 00539 JR NZ,CKCHR1 ;Continue if not end 00540 ;HL => 2nd table 00541 ;Second table is char + two xlates 2751 7E 00542 CKCHR2 LD A,(HL) 2752 B9 00543 CP C 2753 23 00544 INC HL ;Bump to 1st sub 2754 2821 00545 JR Z,ISCHR2 2756 23 00546 INC HL ;2nd sub posn 2757 23 00547 INC HL ;Next match chr 2758 B7 00548 OR A ;Done? 2759 20F6 00549 JR NZ,CKCHR2 ;Continue if not 275B 79 00550 LD A,C ;No match, same chr 00551 ; 275C C5 00552 SCHR PUSH BC 275D 4F 00553 LD C,A ;Character 275E 0602 00554 LD B,2 ;Output 2760 E5 00555 PUSH HL 2761 DDE5 00556 PUSH IX 2763 210000 00557 LD HL,$-$ 2764 00558 IFLG EQU $-2 2766 7E 00559 LD A,(HL) ;Get IFLAG$ 2767 F5 00560 PUSH AF ;Save it 2768 CBB6 00561 RES 6,(HL) ;Turn off dvr xlates 276A 00562 @@CHNIO ;Send char 276A+3E14 00563 LD A,20 276C+EF 00564 RST 40 276D F1 00565 POP AF ;Prev IFLAG$ 276E 320000 00566 LD ($-$),A ; restore pr dvr state 276F 00567 IFLG2 EQU $-2 2771 DDE1 00568 POP IX 2773 E1 00569 POP HL 2774 C1 00570 POP BC 2775 79 00571 LD A,C ;Restore original char 2776 C9 00572 RET 00573 ; 2777 7E 00574 ISCHR2 LD A,(HL) ;Get 1st sub 2778 CD5C27 00575 CALL SCHR ;Print it 2779 00576 REL3 EQU $-2 277B 3E08 00577 LD A,BKSP ;Then back up 277D CD5C27 00578 CALL SCHR ;Printer 277E 00579 REL4 EQU $-2 2780 23 00580 INC HL ;Get next sub char 2781 7E 00581 ISCHR1 LD A,(HL) 2782 18D8 00582 JR SCHR ;Send and return 00583 ; 00584 ; patch space for table 1: 2784 00 00585 DB 0,0,0,0,0,0 00 00 00 00 00 00586 ; table 1 = match char / sub char 278A C0 00587 TABLE1 DB 0C0H,0A7H A7 278C C1 00588 DB 0C1H,080H 80 278E C2 00589 DB 0C2H,09CH 9C 2790 C3 00590 DB 0C3H,0A3H A3 2792 C4 00591 DB 0C4H,060H 60 2794 C5 00592 DB 0C5H,0A5H A5 2796 C6 00593 DB 0C6H,0A6H A6 2798 C7 00594 DB 0C7H,0BEH BE 279A C8 00595 DB 0C8H,0A8H A8 279C C9 00596 DB 0C9H,0C0H C0 279E CA 00597 DB 0CAH,0AAH AA 27A0 CB 00598 DB 0CBH,0ABH AB 27A2 CC 00599 DB 0CCH,0ACH AC 27A4 CD 00600 DB 0CDH,0ADH AD 27A6 CE 00601 DB 0CEH,0AEH AE 27A8 CF 00602 DB 0CFH,0AFH AF 27AA D0 00603 DB 0D0H,0CCH CC 27AC D1 00604 DB 0D1H,0DBH DB 27AE D2 00605 DB 0D2H,0DCH DC 27B0 D3 00606 DB 0D3H,0DDH DD 27B2 D4 00607 DB 0D4H,0DEH DE 27B4 D5 00608 DB 0D5H,07EH 7E 27B6 D6 00609 DB 0D6H,0FBH FB 27B8 D7 00610 DB 0D7H,0FCH FC 27BA D8 00611 DB 0D8H,0FDH FD 27BC D9 00612 DB 0D9H,0FEH FE 27BE DA 00613 DB 0DAH,0A9H A9 27C0 DB 00614 DB 0DBH,0BBH BB 27C2 DC 00615 DB 0DCH,0BCH BC 27C4 DD 00616 DB 0DDH,0BDH BD 27C6 DE 00617 DB 0DEH,0BEH BE 27C8 DF 00618 DB 0DFH,0BFH BF 00619 ; 27CA E5 00620 DB 0E5H,05EH 5E 00621 ; 27CC F0 00622 DB 0F0H,041H 41 27CE F1 00623 DB 0F1H,061H 61 27D0 F2 00624 DB 0F2H,041H 41 27D2 F3 00625 DB 0F3H,061H 61 00626 ; 27D4 F7 00627 DB 0F7H,045H 45 27D6 F8 00628 DB 0F8H,041H 41 27D8 F9 00629 DB 0F9H,049H 49 27DA FA 00630 DB 0FAH,04FH 4F 27DC FB 00631 DB 0FBH,055H 55 27DE FC 00632 DB 0FCH,020H 20 27E0 FD 00633 DB 0FDH,055H 55 27E2 FE 00634 DB 0FEH,045H 45 27E4 FF 00635 DB 0FFH,041H 41 27E6 00 00636 DB 0 00637 ;Table2: match char / sub char1/ sub char2 00638 ; 27E7 E0 00639 DB 0E0H,061H,05EH 61 5E 27EA E1 00640 DB 0E1H,065H,05EH 65 5E 27ED E2 00641 DB 0E2H,069H,05EH 69 5E 27F0 E3 00642 DB 0E3H,06FH,05EH 6F 5E 27F3 E4 00643 DB 0E4H,075H,05EH 75 5E 00644 ; 27F6 E6 00645 DB 0E6H,065H,0BEH 65 BE 27F9 E7 00646 DB 0E7H,069H,0BEH 69 BE 27FC E8 00647 DB 0E8H,061H,0A7H 61 A7 27FF E9 00648 DB 0E9H,069H,0A7H 69 A7 2802 EA 00649 DB 0EAH,06FH,0A7H 6F A7 2805 EB 00650 DB 0EBH,075H,0A7H 75 A7 00651 ; 2808 ED 00652 DB 0EDH,06EH,07EH 6E 7E 280B EE 00653 DB 0EEH,061H,07EH 61 7E 280E EF 00654 DB 0EFH,075H,07EH 75 7E 00655 ; 2811 F4 00656 DB 0F4H,04FH,02FH 4F 2F 2814 F5 00657 DB 0F5H,06FH,02FH 6F 2F 2817 F6 00658 DB 0F6H,06EH,07EH 6E 7E 281A 00 00659 DB 0,0,0,0,0,0,0,0,0 00 00 00 00 00 00 00 00 2823 00 00660 DB 0 00661 ; 2823 00662 LAST EQU $-1 ;Used for length calculation 00663 ; 2600 00664 END BEGIN 2600 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]