home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG001.ARK / TREAD.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  195 lines

  1. ;********************************;
  2. ;   PAPER TAPE TO DISK COPY      ;
  3. ;********************************;
  4.     ORG    100H
  5. SETUP:    LXI    SP,STACK
  6.     LXI    H,IOBUF    ;GET ADDRESS OF CIRC. BUFFER
  7.     SHLD    FPNT    ;SET FILL POINTER
  8.     SHLD    EPNT    ;SET EMPTY POINTER
  9.     LXI    D,BGMSG    ;BEGIN MESSAGE
  10.     MVI    C,WCONB    ;WRITE CONSOLE BUFFER
  11.     CALL    CPM    ;WRITE START MESSAGE
  12.     MVI    C,RCON    ;WAIT FOR CR
  13.     CALL    CPM
  14.     CPI    0DH    ;CR?
  15.     JZ    BEGIN    ;START PROCESS
  16.     CPI    03H    ;CONTROL C?
  17.     JZ    BOOT    ;REBOOT
  18.     JMP    SETUP    ;START AGAIN
  19.  
  20. BEGIN:    LXI    D,CRLF
  21.     MVI    C,WCONB
  22.     CALL    CPM
  23.     LXI    D,TFCB    ;POINT TO INITIALIZED FCB
  24.     MVI    C,CREATE    ;SET UP TO CREATE 
  25.     CALL    CPM
  26.     CPI    0FFH    ;SUCCESSFULL?
  27.     JZ    ERR    ;NO, ERROR
  28. LOOP1:    CALL    GETBUF    ;GET BUFFER
  29.     CALL    PUTBUF    ;PUT BUFFER
  30.     JMP    LOOP1    ;CONTINUE
  31.  
  32. ERR:    MVI    C,WCONB
  33.     LXI    D,EMSG
  34.     CALL    CPM
  35.     JMP    BOOT
  36.  
  37. FINIS:    LXI    D,TFCB
  38.     MVI    C,WRITE
  39.     CALL    CPM
  40.     CPI    00
  41.     JNZ    ERR
  42.     LXI    D,TFCB
  43.     MVI    C,CLOSE
  44.     CALL    CPM
  45.     CPI    0FFH
  46.     JZ    ERR
  47.     JMP    BOOT
  48.  
  49.  
  50. GETBUF:    MVI    C,11H    ;START READER CHAR
  51.     CALL    CONOUT    ;START READER
  52. GB2:    CALL    CONIN
  53.     CPI    07FH    ;RUBOUT?
  54.     JZ    GB2    ;IGNORE
  55.     CPI    00H    ;NULL?
  56.     JZ    GB2    ;IGNORE
  57.     CPI    0AH    ;LF?
  58.     JZ    GB2    ;IGNORE
  59.     LHLD    FPNT    ;GET FILL POINTER
  60.     MOV    M,A    ;STORE CHAR
  61.     INX    H    ;BUMP FILL POINTER
  62.     CALL    WRAP
  63.     SHLD    FPNT    ;SAVE
  64.     CPI    1AH    ;TEST FOR CONTROL Z
  65.     JZ    GB3    ;YES, DONE
  66.     CPI    0DH    ;TEST FOR CR
  67.     JNZ    GB2
  68.     LHLD    FPNT
  69.     MVI    M,0AH    ;ADD LF AFTER CR
  70.     INX    H    ;BUMP POINTER
  71.     CALL    WRAP    ;WRAP POINTER
  72.     SHLD    FPNT    ;SAVE POINTER
  73. GB3:    MVI    C,13H    ;STOP READER
  74.     CALL    CONOUT
  75.     RET
  76.  
  77. PUTBUF:    LDA    BCNT    ;GET DISK BUFFER COUNT
  78.     CPI    128    ;FULL?
  79.     JNZ    PB2    ;NO,CONTINUE
  80.     LXI    D,TFCB    ;FCB ADDRESS
  81.     MVI    C,WRITE    ;WRITE BLOCK
  82.     CALL    CPM
  83.     CPI    00    ;OK?
  84.     JNZ    ERR    ;ERROR
  85.     MVI    A,00
  86.     STA    BCNT    ;ZERO BUFFER COUNT
  87.     LXI    H,TBUF    ;BUFFER POINTER
  88.     SHLD    BPNT
  89. PB2:    LHLD    EPNT    ;GET EMPTY POINTER
  90.     XCHG        ;INTO DE
  91.     LHLD    FPNT
  92.     CALL    CPHL
  93.     RZ        ;NO MORE CHARS
  94.     LHLD    EPNT
  95.     MOV    A,M    ;GET BYTE
  96.     INX    H    ;BUMP POINTER
  97.     CALL    WRAP
  98.     SHLD    EPNT    ;SAVE
  99.     LHLD    BPNT    ;DISK BUFFER POINTER
  100.     MOV    M,A    ;STORE BYTE
  101.     CPI    1AH    ;CONTROL Z?
  102.     JZ    FINIS    ;DONE
  103.     INX    H    ;BUMP POINTER
  104.     SHLD    BPNT
  105.     LXI    H,BCNT
  106.     INR    M    ;BUMP B COUNT
  107.     JMP    PUTBUF
  108.  
  109. WRAP:    PUSH    D
  110.     PUSH    B
  111.     PUSH    PSW
  112.     PUSH    H
  113.     XCHG
  114.     LXI    H,IOBUF+4096
  115.     CALL    CPHL
  116.     JNZ    WRAPX
  117.     LXI    H,IOBUF
  118.     XTHL
  119. WRAPX:    POP    H
  120.     POP    PSW
  121.     POP    B
  122.     POP    D
  123.     RET
  124.  
  125. CPHL:    MOV    A,D
  126.     CMP    H
  127.     RNZ
  128.     MOV    A,E
  129.     CMP    L
  130.     RET
  131.  
  132. CONOUT:    MOV    E,C
  133.     MVI    C,WPUN
  134.     CALL    CPM
  135.     RET
  136.  
  137. CONIN:    MVI    C,RRDR
  138.     CALL    CPM
  139.     RET
  140.  
  141.  
  142. FPNT:    DW    IOBUF
  143. EPNT:    DW    IOBUF
  144. BPNT:    DW    TBUF
  145. BCNT:    DB    00
  146. BGMSG:    DB    'SET UP DISK, PAPER TAPE, TYPE RETURN $'
  147. EMSG:    DB    'I/O ERROR $'
  148. CRLF:    DB    0DH,0AH,'$'
  149.     DS    32
  150. STACK    EQU    $
  151. IOBUF:    DS    4096
  152. ;***********************************;
  153. ;         CP/M STANDARD EQUATES     ;
  154. ;***********************************;
  155.  
  156. BOOT    EQU    0000H    ;WARM START ADDRESS
  157. TFCB    EQU    005CH    ;DEFAULT FCB ADDRESS
  158. TBUF    EQU    0080H    ;DEFAULT BUFFER ADDRESS
  159. TBASE    EQU    0100H    ;TRANSIENT PROGRAM BASE
  160. CBASE    EQU    2900H    ;CCP BASE ADDRESS
  161. CPM    EQU    0005H    ;CPM ENTRY POINT
  162.  
  163. ;***********************************;
  164. ;       CP/M FUNCTION CODES         ;
  165. ;***********************************;
  166.  
  167. SRSET    EQU    00    ;SYSTEM RESET
  168. RCON    EQU    01    ;READ CONSOLE
  169. WCON    EQU    02    ;WRITE CONSOLE
  170. RRDR    EQU    03    ;READ READER
  171. WPUN    EQU    04    ;WRITE PUNCH
  172. WLST    EQU    05    ;WRITE LIST
  173. ISTAT    EQU    07    ;GET IOSTATUS
  174. SSTAT    EQU    08    ;SET IOSTATUS
  175. WCONB    EQU    09    ;WRITE CONSOLE BUFFER
  176. RCONB    EQU    10    ;READ CONSOLE BUFFER
  177. CSTAT    EQU    11    ;CHECK CONSOLE STATUS
  178. LHEAD    EQU    12    ;LIFT DISK HEAD
  179. RSDSK    EQU    13    ;RESET DISK SYSTEM
  180. SDISK    EQU    14    ;SELECT DISK
  181. OPEN    EQU    15    ;OPEN FILE
  182. CLOSE    EQU    16    ;CLOSE FILE
  183. SFRST    EQU    17    ;SEARCH FIRST
  184. SNEXT    EQU    18    ;SEARCH NEXT
  185. FDELT    EQU    19    ;DELETE FILE
  186. READ    EQU    20    ;READ RECORD
  187. WRITE    EQU    21    ;WRITE RECORD
  188. CREATE    EQU    22    ;CREATE FILE
  189. RENAM    EQU    23    ;RENAME FILE
  190. LOGIN    EQU    24    ;GET LOGIN
  191. IDISK    EQU    25    ;GET DISK NUMBER
  192. SDMA    EQU    26    ;SET DMA VECTOR
  193. IALLOC    EQU    27    ;GET ALLOCATION VECTOR
  194.     END
  195.