home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol147 / dumba3.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.5 KB  |  154 lines

  1. ;####################################################
  2. ;
  3. ;    DUMBA3.ASM    27-JUL-83  20:30      
  4. ;
  5. ;RUDIMENTARY MODEM PRG FOR APPLE/// SOFTCARD/// (Z80)
  6. ;SENDS INP FROM CONS TO EXTERN MODEM & RETURNS ECHOED
  7. ;CHARS VIA RDR TO CONSOLE; IF NO CHARS IN RS232 INPUT
  8. ;BUFFER, CHECKS CONSOLE FOR INPUT;IF NO CONSOLE INPUT,
  9. ;CHECKS RDR:, THENCE TO CONSOLE ETC.
  10. ;IF CONSOLE INPUT = CTRLZ, TERMINATES PRG.
  11. ;N.B. : DRIVER.SOS MUST CONTAIN .RS232 DRIVER.
  12. ;SET SOFTCARD/// CONFIG  SO THAT PUN:=PU1:=.RS232.
  13. ;RDR:=RD1:=.RS232. IF YOU ARE USING BUILT IN SERIAL
  14. ;PORT FOR BOTH OUTPUT TO PRINTER VIA LST: AND
  15. ;FOR .RS232, LST: MUST BE SET = .NULL, THAT IS,
  16. ;NOT CONFIGURED = .PRINTER.
  17. ;###########################P.J. FILLINGHAM##########
  18. ;
  19. ;    ASCII CHARS
  20. CR    EQU    0DH
  21. LF    EQU    0AH
  22. CTRLZ    EQU    1AH
  23. ;
  24. ;    CP/M BDOS FUNCS
  25. DIOF    EQU    6
  26. WPUNF    EQU    4
  27. RRDRF    EQU    3
  28. WCONF    EQU    2
  29. RCONF    EQU    1
  30. ;
  31. ;    CP/M ADDRESSES
  32. RBOOT    EQU    0
  33. BDOS    EQU    5
  34. TPA    EQU    100H
  35. ;
  36.     ORG    TPA
  37. START:    LXI    SP,STAK        ;SET UP USER'S STACK
  38. START0:    CALL    CCRLF        ; START A NEW LINE
  39.     LXI    H,SIGNON    ; WITH HEADER
  40.     CALL    COMSG
  41.     MVI    E,0FFH        ;TELL DIR I/O TO CHECK CONSOLE
  42. START1:    CALL    CKDIO        ;CHK STATUS/GET CHAR FROM CONSOLE
  43.     CALL    RDRST        ;CHECK RDR: (.RS232) BUFFER
  44.     CPI    0        ;IF EMPTY
  45.     JZ    NOCHAR        ;FORGET RDR BUFFER
  46.     CALL    RDRIN        ;IF CHAR, GET IT
  47.     MOV    E,A        ;PUT CHAR IN E FOR OUPUT TO CONS
  48.     JMP    START1        ;DO IT VIA DIRECT I/O
  49. NOCHAR:    MVI    E,0FFH        ;TELL DIR I/O TO LOOK FOR CONS CHAR
  50.     JMP    START1        ;DO IT
  51. ;
  52. RDRST:        ;DEVICE STATUS CALL TO SOS .RS232 BUFFER
  53. ;
  54. CALL65    EQU    0DF80H        ;6502 SUBROUTINE CALLER
  55. XBYTE    EQU    0E5C4H        ;ADDRESS OF X-BYTE (=00H)
  56. DEVMGR    EQU    1986H        ;ADDR OF DEVICE MANAGER
  57. DINFDT    EQU    16E0H        ;=DFE0H (Z80);START OF 32 BYTES
  58.                 ;OF RET'D DATA
  59.     LXI    H,0DFA0H    ;Z80 ADDR OF SOS DEVMGR COMMAND
  60.     MVI    M,02H        ; 2 = DEV CALL # FOR STATUS
  61.     INX    H
  62.     MVI    M,02H        ;STUFF UNIT # FROM DFB4 INTO DFA1
  63.     INX    H
  64.     MVI    M,03H        ;.RS232 SOS STAT CODE 3 INTO DFA2
  65.     INX    H
  66.     MVI    M,0E0H        ;LSB OF SOS ADDR OF RETURNED DATA
  67.     INX    H
  68.     MVI    M,016H        ;MSB OF SOS ADDR OF RET DATA
  69.     LXI    H,XBYTE        ;SOS MEMORY BANK ADDRESS
  70.     MVI    M,00H        ;$00 IS SOS MEM BANK OF DFE0
  71.     LXI    H,DEVMGR    ;SOS DEV MGR ENTRY POINT
  72.     CALL    CALL65        ;6502 SUBR CALLER
  73.     LDA    0DFE6H        ;NO. OF CHARS RDR BUFFER => (DFE6)
  74.     RET
  75. ;
  76. ;    OUTPUT CHAR FROM CONSOLE TO PUN: (THUS TO MODEM)
  77. ;
  78. PUNOUT:    PUSH    B        ;SAVE REGISTERS
  79.     PUSH    D
  80.     PUSH    H
  81.     MVI    C,WPUNF        ;OUTPUT CHARS TO PUN:
  82.     MOV    E,A
  83.     CALL     BDOS
  84.     POP    H        ;RESTORE REGS
  85.     POP    D
  86.     POP    B
  87.     RET
  88. ;
  89. ;GET A CHAR FROM RDR:
  90. ;
  91. RDRIN:    PUSH    B        ;SAVE YE OLDE REGS
  92.     PUSH    D
  93.     PUSH    H
  94.     MVI    C,RRDRF        ;GET CHAR FROM RDR:
  95.     CALL    BDOS
  96.     ANI    7FH        ;MASK TO 7 BITS
  97.     POP    H        ;RESTORE REGS
  98.     POP    D
  99.     POP    B
  100.     RET
  101. ;
  102. ;    OUTPUT CHAR IN REG A TO CONSOLE
  103. ;
  104. CONOUT:    PUSH    B        ;SAVE REGS
  105.     PUSH    D
  106.     PUSH    H
  107.     MVI    C,DIOF        ;SELECT CONS DIR I/O FUNC
  108.     MOV    E,A        ;CHAR TO E
  109.     CALL    BDOS
  110.     POP    H        ;RESTORE REGS
  111.     POP    D
  112.     POP    B
  113.     RET
  114. ;
  115. ;    CHK STATUS / GET CHAR FROM CONS
  116. CKDIO:    PUSH    B        ;SAVE REGS
  117.     PUSH    D
  118.     PUSH    H
  119.     MVI    C,DIOF        ;DIOF = 06H = DIRECT I/O FUNCTION
  120.     CALL    BDOS
  121.     CPI    0        ;IF ZERO, NO CHAR FROM CONSOLE
  122.     JZ    NOCHCN        ;THEN GET OUT
  123.     ANI    7FH        ;MASK TO 7 BITS
  124.     CPI    CTRLZ        ;WAS IT CTRLZ ?
  125.     JZ    RBOOT        ;YES, WARM BOOT. NO, RET AND
  126.     CALL    PUNOUT        ;OUTPUT TO MODEM VIA PUN:
  127. NOCHCN:    POP    H        ;ANYHOW, RESTORE REGS
  128.     POP    D
  129.     POP    B
  130.     RET
  131. ;
  132. ;    MESSAGE POINTED TO BY HL OUT TO CONSOLE
  133. COMSG:    MOV    A,M        ;GET A CHAR
  134.     ORA    A
  135.     RZ            ;RETURN ON ZERO
  136.     CALL    CONOUT        ;ELSE DISLAY CHAR
  137.     INX    H        ;POINT TO NEXT CHAR
  138.     JMP    COMSG
  139. ;
  140. ;    SIGN-ON MESSAGE
  141. SIGNON:    DB    'MODEM PROGRAM: TO EXIT TYPE CTRLZ',CR,LF,LF,0
  142. ;
  143. ;    CR LF TO CONSOLE
  144. CCRLF:    MVI    A,CR
  145.     CALL    CONOUT
  146.     MVI    A,LF
  147.     JMP    CONOUT
  148. ;
  149. ;    SET UP STACK SPACE
  150.     DS    64        ;40H LOCATIONS
  151. STAK:    DB    0        ;TOP OF STACK
  152. ;
  153.     END        ;END PRG DUMBA3.ASM
  154.