LS-DOS 6.3.1 - DW 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]
              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]

Valid HTML 4.01!