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 / CPM / HEATH / MBOOTH89.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  5KB  |  383 lines

  1.  
  2. FALSE    EQU 0
  3. TRUE    EQU NOT FALSE
  4. STDCPM EQU TRUE
  5. ALTCPM EQU FALSE
  6.  IF STDCPM
  7. BASE EQU 0
  8.  ENDIF
  9.  IF ALTCPM
  10. BASE EQU 4200H
  11.  ENDIF
  12. EXITCHR EQU 01H
  13. ESC EQU 19H
  14. FASTCLK EQU FALSE
  15. SIO    EQU    FALSE
  16. I8251    EQU    FALSE
  17. IMS6402    EQU    FALSE
  18. INITREQ    EQU    FALSE
  19. BINIT EQU FALSE
  20. BINIT1 EQU 03H
  21. BAUDRP EQU 333Q
  22. MODCTLP EQU 335Q
  23. MODDATP EQU 330Q
  24. MODSNDB EQU 20H
  25. MODSNDR EQU 20H
  26. MODRCVB EQU 01H
  27. MODRCVR EQU 01H
  28. ERRLIM EQU 10
  29. SOH EQU 1
  30. EOT EQU 4
  31. ACK EQU 6
  32. NAK EQU 15H
  33. CAN EQU 18H
  34. LF  EQU 10
  35. CR  EQU 13
  36. BDOS EQU BASE+5
  37. FCB  EQU BASE+5CH
  38. ORG BASE+100H
  39. LXI H,0
  40. DAD SP
  41. SHLD STACK
  42. LXI SP,STACK
  43. CALL INITADR
  44. CALL ILPRT
  45. DB 'MBOOT as of '
  46. DB '3/21/81',CR,LF,0
  47. LDA FCB+1
  48. CPI ' '
  49. JNZ TERMI
  50. CALL ILPRT
  51. DB 'It would be nice if you told me a file name.',CR,LF,0
  52. JMP EXIT
  53. TERMI: CALL INITMOD
  54.  IN MODDATP
  55.  IN MODDATP
  56.  CALL ILPRT
  57.  DB CR,LF,'System now in terminal mode',CR,LF
  58.  DB 'CONTROL A EXITS TO CP/M, CONTROL Y BEGINS FILE TRANSFER.'
  59.  DB CR,LF,0
  60. TERM: CALL STAT
  61.  JZ TERML
  62.  CALL KEYIN
  63.  CPI EXITCHR
  64.  JZ EXIT
  65.  CPI ESC
  66.  JZ RCVFIL
  67.  OUT MODDATP
  68. TERML: IN MODCTLP
  69.  ANI MODRCVB
  70.  CPI MODRCVR
  71.  JNZ TERM
  72.  IN MODDATP
  73.  ANI 7FH
  74.  CALL TYPE
  75.  JMP TERM
  76. RCVFIL: CALL ERASFIL
  77.  CALL MAKEFIL
  78.  CALL ILPRT
  79.  DB 'File open, ready to receive.',CR,LF,0
  80. RCVLP: CALL RCVSECT
  81.  JC RCVEOT
  82.  CALL WRSECT
  83.  CALL INCRSNO
  84.  CALL SENDACK
  85.  CALL ILPRT
  86.  DB '*',0
  87.  JMP RCVLP
  88. RCVEOT: CALL WRBLOCK
  89.  CALL ILPRT
  90.  DB CR,LF,0
  91.  CALL SENDACK
  92.  CALL CLOSFIL
  93.  CALL ERXIT
  94.  DB CR,LF,'Transfer Complete... Congratulations!$'
  95. RCVSECT: XRA A
  96.  STA ERRCT
  97. RCVRPT: MVI B,10
  98.  CALL RECV
  99.  JC RCVSERR
  100.  CPI SOH
  101.  JZ RCVSOH
  102.  ORA A
  103.  JZ RCVRPT
  104.  CPI EOT
  105.  STC
  106.  RZ
  107. RCVSERR: MVI B,1
  108.  CALL RECV
  109.  JNC RCVSERR
  110.  MVI A,NAK
  111.  CALL SEND
  112.  CALL ILPRT
  113.  DB CR,LF,' Retrying Sector ',0
  114.  LDA ERRCT
  115.  INR A
  116.  STA ERRCT
  117.  CPI ERRLIM
  118.  JC RCVRPT
  119. RCVSABT: CALL CLOSFIL
  120.  CALL ERXIT
  121. DB CR,LF,'Unable to receive block'
  122. DB CR,LF,'Transfer aborted$'
  123. RCVSOH: MVI B,1
  124.  CALL RECV
  125.  JC RCVSERR
  126.  MOV D,A
  127.  MVI B,1
  128.  CALL RECV
  129.  JC RCVSERR
  130.  CMA
  131.  CMP D
  132.  JZ RCVDATA
  133.  JMP RCVSERR
  134. RCVDATA: MOV A,D
  135.  STA RCVSNO
  136.  MVI C,0
  137.  LXI H,BASE+80H
  138. RCVCHR: MVI B,1
  139.  CALL RECV
  140.  JC RCVSERR
  141.  MOV M,A
  142.  INR L
  143.  JNZ RCVCHR
  144.  MOV D,C
  145.  MVI B,1
  146.  CALL RECV
  147.  JC RCVSERR
  148.  CMP D
  149.  JNZ RCVSERR
  150.  LDA RCVSNO
  151.  MOV B,A
  152.  LDA SECTNO
  153.  CMP B
  154.  JZ RECVACK
  155.  INR A
  156.  CMP B
  157.  JNZ ABORT
  158.  RET
  159. RECVACK: CALL SENDACK
  160.  JMP RCVSECT
  161. SENDACK: MVI A,ACK
  162. SEND: PUSH PSW
  163.  ADD C
  164.  MOV C,A
  165. SENDW: IN MODCTLP
  166.  ANI MODSNDB
  167.  CPI MODSNDR
  168.  JNZ SENDW
  169.  POP PSW
  170.  OUT MODDATP
  171.  RET
  172. ABORT: LXI SP,STACK
  173. ABORTL: MVI B,1
  174.  CALL RECV
  175.  JNC ABORTL
  176.  MVI A,CAN
  177.  CALL SEND
  178. ABORTW: MVI B,1
  179.  CALL RECV
  180.  JNC ABORTW
  181.  MVI A,' '
  182.  CALL SEND
  183.  CALL ERXIT
  184.  DB 'MBOOT Program Cancelled$'
  185. INCRSNO: LDA SECTNO
  186.  INR A
  187.  STA SECTNO
  188.  RET
  189. ERASFIL: LXI D,FCB
  190.  MVI C,17
  191.  CALL BDOS
  192.  INR A
  193.  RZ
  194.  CALL ILPRT
  195.  DB 'That file already exists. Type a Y to erase and overwrite. ',0
  196.  CALL KEYIN
  197.  PUSH PSW
  198.  CALL TYPE
  199.  CALL CRLF
  200.  POP PSW
  201.  ANI 5FH
  202.  CPI 'Y'
  203.  JNZ MXIT
  204.  LXI D,FCB
  205.  MVI C,19
  206.  JMP BDOS
  207. MAKEFIL: LXI D,FCB
  208.  MVI C,22
  209.  CALL BDOS
  210.  INR A
  211.  RNZ
  212.  CALL ERXIT
  213.  DB 'ERROR- Can''t make that file.',CR,LF
  214.  DB 'The Directory must be full.$'
  215. CLOSFIL: LXI D,FCB
  216.  MVI C,16
  217.  CALL BDOS
  218.  INR A
  219.  RNZ
  220.  CALL ERXIT
  221.  DB 'Sorry, but I can''t close that file.$'
  222. WRSECT: LHLD SECPTR
  223.  XCHG
  224.  LXI H,BASE+80H
  225.  CALL MOVE128
  226.  XCHG
  227.  SHLD SECPTR
  228.  LDA SECINBF
  229.  INR A
  230.  STA SECINBF
  231.  CPI 16
  232.  RNZ
  233. WRBLOCK: LDA SECINBF
  234.  ORA A
  235.  RZ
  236.  MOV C,A
  237.  LXI D,DBUF
  238. DKWRLP: PUSH H
  239.  PUSH D
  240.  PUSH B
  241.  MVI C,26
  242.  CALL BDOS
  243.  LXI D,FCB
  244.  MVI C,21
  245.  CALL BDOS
  246.  POP B
  247.  POP D
  248.  POP H
  249.  ORA A
  250.  JNZ WRERR
  251.  LXI H,80H
  252.  DAD D
  253.  XCHG
  254.  DCR C
  255.  JNZ DKWRLP
  256.  XRA A
  257.  STA SECINBF
  258.  LXI H,DBUF
  259.  SHLD SECPTR
  260. RSDMA: LXI D,BASE+80H
  261.  MVI C,26
  262.  JMP BDOS
  263. WRERR: CALL RSDMA
  264.  CALL ILPRT
  265.  DB 'ERROR WRITING FILE.',CR,LF,0
  266.  JMP ABORT
  267. RECV: PUSH D
  268.  IF FASTCLK
  269.  MOV A,B
  270.  ADD A
  271.  MOV B,A
  272.  ENDIF
  273. MSEC: LXI D,50000
  274. MWTI: IN MODCTLP
  275.  ANI MODRCVB
  276.  CPI MODRCVR
  277.  JZ MCHAR
  278.  DCR E
  279.  JNZ MWTI
  280.  DCR D
  281.  JNZ MWTI
  282.  DCR B
  283.  JNZ MSEC
  284.  POP D
  285.  STC
  286.  RET
  287. MCHAR: IN MODDATP
  288.  POP D
  289.  PUSH PSW
  290.  ADD C
  291.  MOV C,A
  292.  POP PSW
  293.  ORA A
  294.  RET
  295. INITADR: LHLD BASE+1
  296.  LXI D,3
  297.  DAD D
  298.  SHLD VSTAT+1
  299.  DAD D
  300.  SHLD VKEYIN+1
  301.  DAD D
  302.  SHLD VTYPE+1
  303.  RET
  304. INITMOD EQU $
  305. IF INITREQ
  306.  NOP
  307.  NOP
  308.  NOP
  309.  ENDIF
  310. IF BINIT
  311.  MVI A,BINIT1
  312.  OUT BAUDRP
  313.  ENDIF
  314. RET
  315. CRLF: MVI A,CR
  316.  CALL TYPE
  317.  MVI A,LF
  318. TYPE: PUSH PSW
  319.  PUSH B
  320.  PUSH D
  321.  PUSH H
  322.  MOV C,A
  323. VTYPE: CALL $-$
  324.  POP H
  325.  POP D
  326.  POP B
  327.  POP PSW
  328.  RET
  329. STAT: PUSH B
  330.  PUSH D
  331.  PUSH H
  332. VSTAT: CALL $-$
  333.  POP H
  334.  POP D
  335.  POP B
  336.  ORA A
  337.  RET
  338. KEYIN: PUSH B
  339.  PUSH D
  340.  PUSH H
  341. VKEYIN: CALL $-$
  342.  POP H
  343.  POP D
  344.  POP B
  345.  ANI 7FH
  346. RET
  347. ILPRT: XTHL
  348. ILPLP: MOV A,M
  349.  ORA A
  350.  JZ ILPRET
  351.  CALL TYPE
  352.  INX H
  353.  JMP ILPLP
  354. ILPRET: XTHL
  355. RET
  356. ERXIT: POP D
  357.  MVI C,9
  358.  CALL BDOS
  359. MXIT: CALL ILPRT
  360.  DB CR,LF,'Don''t forget to disconnect modem!!'
  361.  DB CR,LF,0
  362. EXIT: LHLD STACK
  363.  SPHL
  364.  RET
  365. MOVE128: MVI B,128
  366. MOVE: MOV A,M
  367.  STAX D
  368.  INX H
  369.  INX D
  370.  DCR B
  371.  JNZ MOVE
  372.  RET
  373. RCVSNO: DB 0
  374. SECTNO: DB 0
  375. ERRCT: DB 0
  376. EOFLG: DB 0
  377. SECPTR: DW DBUF
  378. SECINBF: DB 0
  379.  DS 60
  380. STACK: DS 2
  381. DBUF EQU $
  382. END
  383.