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 / STARTKIT / APMBOOT.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  7KB  |  504 lines

  1. ;
  2. ; APMBOOT.ASM ver 3.0
  3. ; (revised 5 Nov 80)
  4. ;
  5. ; MODIFIED FOR USE ON APPLE W/MMII BY DAVID MORITZ, 2/1/81
  6. ;
  7. ;MODEM BOOT PROGRAM by Keith Petersen, W8SDZ.
  8. ;Thanks to John Taylor for idea of incorporating
  9. ;simple terminal routine.  Based on MODEM.ASM V2.0,
  10. ;by Ward Christensen with enhancements from MODEM527.
  11. ;
  12. ;CP/M - CP/M file transfer program (receive-only)
  13. ;
  14. ;This program is intended for use as a way to
  15. ;initially transfer APMODEM.COM or APMODEM.ASM to
  16. ;A NEW USER.
  17. ;ALL EQUATES, FLAGS AND PORTS ARE SET UP FOR
  18. ;DCH MMII: 'ORIGINATE' MODE, 300BAUD.
  19. ;
  20. ;A simple terminal routine at start of program allows
  21. ;user to communicate with a remote system prior to
  22. ;receiving a file to make it possible to down-load
  23. ;a file without intervention on the part of the host
  24. ;system's operator.
  25. ;
  26. ;COMMANDS:  MBOOT FILENAME.FILETYPE
  27. ; or  MBOOT A:FILENAME.FILETYPE
  28. ; or  MBOOT B:FILENAME.FILETYPE
  29. ;
  30. ;The program will operate as a dumb terminal until
  31. ;an 'ESC' key is typed (ctrl-[).  It then branches
  32. ;to the receive routine.  The user may also exit
  33. ;to CP/M without opening the receive file by typing
  34. ;ctrl-E from the terminal.  The values for the escape
  35. ;and exit keys may be changed in accordance with the
  36. ;needs of the user - some keyboards do not have the
  37. ;'ESC' key and/or provision for control characters.
  38. ;See equates.
  39. ;
  40. ;HOW TO USE APBOOT.ASM: THE PROGRAM IS SHORT ENOUGH
  41. ;TO TYPE IN WITHIN A REASONABLE PERIOD OF TIME.
  42. ;ONCE INSTALLED AS A COM FILE, DIAL A REMOTE SYSTEM
  43. ;CONTAINING A COPY OF APMODEM.ASM(ANY VERSION) AND
  44. ;WHEN THE CARIER IS HEARD TYPE: APMBOOT APMODEM.ASM (CR).
  45. ;THIS WILL TURN ON YOUR MMII IN ORIGINATE MODE AND
  46. ;ALLOW YOU YOU COMMUNICATE WITH THE REMOTE AS A TERMINAL.
  47. ;  THEN TYPE:XMODEM S APMODEM.ASM AND A CR. WHEN THE
  48. ;REMOTE IS PROPERLY INITIATED TOSEND, TYPE AN ESC 
  49. ;AND THE PROGRAM WILL BEGIN TO TRANSFER. THE TRANSFER
  50. ;IS 'QUIET' AND TAKES ABOUT 20 MIN (A GUESS) SO THE 
  51. ;ONLY WAY YOU'LL KNOW THE PROGRAM WORKS IS BY WATCHING
  52. ;FOR THE DISK ACCESS LED TO COME ON AS THE BUFFER IS
  53. ;DUMPED TO DISK EVERY 16 SECTORS. IF YOU HAVE ANY 
  54. ;PROBLEMS OR QUESTIONS FEEL FREE TO CONTACT ME.:
  55. ;           DAVID MORITZ
  56. ;           312 384-4762
  57. ;           (24HR MODEM)
  58. ;
  59. ;NOTE: Comments for the source code and tabs have been
  60. ;removed to make this file easier to transport from one
  61. ;system to another.  (KBP)
  62. ;  NOTE:IF TYPING IN PROG..BEGINHERE:
  63. ;
  64. FALSE EQU 0
  65. TRUE  EQU NOT FALSE
  66. ;
  67. ;
  68. BASE EQU 0
  69. ;
  70. ;
  71. EXITCHR EQU 05H ;CTL-E TO EXIT TERM MODE TO CP/M
  72. ESC     EQU 1BH ;ESCAPE TO EXIT TERM MODE TO FILE RCVE
  73. ;
  74. FASTCLK EQU FALSE ;TRUE FOR 4 MHZ CLOCK
  75. ;
  76. ;
  77. ;IF YOU ARE USING AN EXTERNAL MODEM (NOT S-100 PLUG-IN)
  78. ;CHANGE THESE EQUATES FOR YOUR MODEM PORT REQUIREMENTS
  79. ;
  80. ;
  81. ;
  82. ;
  83. MODCTLP EQU 0E0A6H
  84. MODSNDB EQU 2
  85. MODSNDR EQU 2
  86. MODRCVB EQU 1
  87. MODRCVR EQU 1
  88. MODDATP EQU 0E0A7H
  89. MODCTL2 EQU 0E0A5H
  90. ORIGMOD EQU 8FH
  91. ANSWMOD EQU 8AH
  92. ;
  93. ERRLIM EQU 10
  94. ;
  95. SOH EQU 1
  96. EOT EQU 4
  97. ACK EQU 6
  98. NAK EQU 15H
  99. CAN EQU 18H
  100. LF  EQU 10
  101. CR  EQU 13
  102. BDOS EQU BASE+5
  103. FCB  EQU BASE+5CH
  104. ;
  105.  ORG BASE+100H
  106. ;
  107.  LXI H,0
  108.  DAD SP
  109.  SHLD STACK
  110.  LXI SP,STACK
  111.  CALL INITADR
  112.  CALL ILPRT
  113.  DB 'APMBOOT as of '
  114.  DB '2/1/81',CR,LF,0
  115.  LDA FCB+1
  116.  CPI ' '
  117.  JNZ TERMI
  118.  CALL ILPRT
  119.  DB '++NO FILE NAME SPECIFIED++',CR,LF,0
  120.  JMP EXIT
  121. ;
  122. TERMI CALL INITMOD
  123.  LDA MODDATP
  124.  LDA MODDATP
  125.  CALL ILPRT
  126.  DB CR,LF,'TERMINAL MODE',CR,LF
  127.  DB 'CTL-E exits to CP/M, ESC starts file transfer'
  128.  DB CR,LF,0
  129. ;
  130. TERM CALL STAT
  131.  JZ TERML
  132.  CALL KEYIN
  133.  CPI EXITCHR
  134.  JZ EXIT
  135.  CPI ESC
  136.  JZ RCVFIL
  137.  STA MODDATP
  138. ;
  139. ;
  140. TERML LDA MODCTLP
  141. ;
  142.  ANI MODRCVB
  143.  CPI MODRCVR
  144.  JNZ TERM
  145.  LDA MODDATP
  146.  ANI 7FH
  147.  CALL TYPE
  148.  JMP TERM
  149. ;
  150. RCVFIL CALL ERASFIL
  151.  CALL MAKEFIL
  152.  CALL ILPRT
  153.  DB 'FILE OPEN, READY TO RECEIVE',CR,LF,0
  154. ;
  155. RCVLP CALL RCVSECT
  156.  JC RCVEOT
  157.  CALL WRSECT
  158.  CALL INCRSNO
  159.  CALL SENDACK
  160.  JMP RCVLP
  161. ;
  162. RCVEOT CALL WRBLOCK
  163.  CALL SENDACK
  164.  CALL CLOSFIL
  165.  CALL ERXIT
  166.  DB CR,LF,'TRANSFER COMPLETE$' 
  167. ;
  168. RCVSECT XRA A
  169.  STA ERRCT
  170. ;
  171. RCVRPT MVI B,10
  172.  CALL RECV
  173.  JC RCVSERR
  174.  CPI SOH
  175.  JZ RCVSOH
  176.  ORA A
  177.  JZ RCVRPT
  178.  CPI EOT
  179.  STC
  180.  RZ
  181. ;
  182. RCVSERR MVI B,1
  183.  CALL RECV
  184.  JNC RCVSERR
  185.  MVI A,NAK
  186.  CALL SEND
  187.  LDA ERRCT
  188.  INR A
  189.  STA ERRCT
  190.  CPI ERRLIM
  191.  JC RCVRPT
  192. ;
  193. RCVSABT CALL CLOSFIL
  194.  CALL ERXIT
  195.  DB '++UNABLE TO RECEIVE BLOCK'
  196.  DB CR,LF,'++ABORTING++$'
  197. ;
  198. RCVSOH MVI B,1
  199.  CALL RECV
  200.  JC RCVSERR
  201.  MOV D,A
  202.  MVI B,1
  203.  CALL RECV
  204.  JC RCVSERR
  205.  CMA
  206.  CMP D
  207.  JZ RCVDATA
  208.  JMP RCVSERR
  209. ;
  210. RCVDATA MOV A,D
  211.  STA RCVSNO
  212.  MVI C,0
  213.  LXI H,BASE+80H
  214. ;
  215. RCVCHR MVI B,1
  216.  CALL RECV
  217.  JC RCVSERR
  218.  MOV M,A
  219.  INR L
  220.  JNZ RCVCHR
  221.  MOV D,C
  222.  MVI B,1
  223.  CALL RECV
  224.  JC RCVSERR
  225.  CMP D
  226.  JNZ RCVSERR
  227.  LDA RCVSNO
  228.  MOV B,A
  229.  LDA SECTNO
  230.  CMP B
  231.  JZ RECVACK
  232.  INR A
  233.  CMP B
  234.  JNZ ABORT
  235.  RET
  236. ;
  237. RECVACK CALL SENDACK
  238.  JMP RCVSECT
  239. ;
  240. SENDACK MVI A,ACK
  241. ;
  242. SEND PUSH PSW
  243.  ADD C
  244.  MOV C,A
  245. ;
  246. ;
  247. SENDW LDA MODCTLP
  248. ;
  249.  ANI MODSNDB
  250.  CPI MODSNDR
  251.  JNZ SENDW
  252.  POP PSW
  253.  STA MODDATP
  254.  RET
  255. ;
  256. ABORT LXI SP,STACK
  257. ;
  258. ABORTL MVI B,1
  259.  CALL RECV
  260.  JNC ABORTL
  261.  MVI A,CAN
  262.  CALL SEND
  263. ;
  264. ABORTW MVI B,1
  265.  CALL RECV
  266.  JNC ABORTW
  267.  MVI A,' '
  268.  CALL SEND
  269.  CALL ERXIT
  270.  DB 'APMBOOT PROGRAM CANCELLED$'
  271. ;
  272. INCRSNO LDA SECTNO
  273.  INR A
  274.  STA SECTNO
  275.  RET
  276. ;
  277. ERASFIL LXI D,FCB
  278.  MVI C,17
  279.  CALL BDOS
  280.  INR A
  281.  RZ
  282.  CALL ILPRT
  283.  DB '++FILE EXISTS, TYPE Y TO ERASE: ',0
  284.  CALL KEYIN
  285.  PUSH PSW
  286.  CALL TYPE
  287.  CALL CRLF
  288.  POP PSW
  289.  ANI 5FH
  290.  CPI 'Y'
  291.  JNZ MXIT
  292.  LXI D,FCB
  293.  MVI C,19
  294.  JMP BDOS
  295. ;
  296. MAKEFIL LXI D,FCB
  297.  MVI C,22
  298.  CALL BDOS
  299.  INR A
  300.  RNZ
  301.  CALL ERXIT
  302.  DB '++ERROR - CAN''T MAKE FILE',CR,LF
  303.  DB '++DIRECTORY MUST BE FULL$'
  304. ;
  305. CLOSFIL LXI D,FCB
  306.  MVI C,16
  307.  CALL BDOS
  308.  INR A
  309.  RNZ
  310.  CALL ERXIT
  311.  DB '++CAN''T CLOSE FILE$'
  312. ;
  313. WRSECT LHLD SECPTR
  314.  XCHG
  315.  LXI H,BASE+80H
  316.  CALL MOVE128
  317.  XCHG
  318.  SHLD SECPTR
  319.  LDA SECINBF
  320.  INR A
  321.  STA SECINBF
  322.  CPI 16
  323.  RNZ
  324. ;
  325. WRBLOCK LDA SECINBF
  326.  ORA A
  327.  RZ
  328.  MOV C,A
  329.  LXI D,DBUF
  330. ;
  331. DKWRLP PUSH H
  332.  PUSH D
  333.  PUSH B
  334.  MVI C,26
  335.  CALL BDOS
  336.  LXI D,FCB
  337.  MVI C,21
  338.  CALL BDOS
  339.  POP B
  340.  POP D
  341.  POP H
  342.  ORA A
  343.  JNZ WRERR
  344.  LXI H,80H
  345.  DAD D
  346.  XCHG
  347.  DCR C
  348.  JNZ DKWRLP
  349.  XRA A
  350.  STA SECINBF
  351.  LXI H,DBUF
  352.  SHLD SECPTR
  353. ;
  354. RSDMA LXI D,BASE+80H
  355.  MVI C,26
  356.  JMP BDOS
  357. ;
  358. WRERR CALL RSDMA
  359.  CALL ILPRT
  360.  DB '++ERROR WRITING FILE',CR,LF,0
  361.  JMP ABORT
  362. ;
  363. RECV PUSH D
  364. ;
  365. ;
  366. MSEC LXI D,50000
  367. ;
  368. ;
  369. MWTI LDA MODCTLP
  370. ;
  371.  ANI MODRCVB
  372.  CPI MODRCVR
  373.  JZ MCHAR
  374.  DCR E
  375.  JNZ MWTI
  376.  DCR D
  377.  JNZ MWTI
  378.  DCR B
  379.  JNZ MSEC
  380.  POP D
  381.  STC
  382.  RET
  383. ;
  384. MCHAR LDA MODDATP
  385.  POP D
  386.  PUSH PSW
  387.  ADD C
  388.  MOV C,A
  389.  POP PSW
  390.  ORA A
  391.  RET
  392. ;
  393. INITADR LHLD BASE+1
  394.  LXI D,3
  395.  DAD D
  396.  SHLD VSTAT+1
  397.  DAD D
  398.  SHLD VKEYIN+1
  399.  DAD D
  400.  SHLD VTYPE+1
  401.  RET
  402. ;
  403. INITMOD EQU $
  404. ;
  405. ;
  406. ;
  407.  MVI A,15H
  408.  STA MODCTLP
  409. ;
  410. ;
  411.  LXI H,4000
  412. ;
  413. OFFDLY DCR L
  414.  JNZ OFFDLY
  415.  DCR H
  416.  JNZ OFFDLY
  417.  MVI A,ORIGMOD 
  418.  STA MODCTL2
  419. ;
  420.  RET  ;<--THIS RET MUST BE HERE
  421. ;
  422. CRLF MVI A,CR
  423.  CALL TYPE
  424.  MVI A,LF
  425. ;
  426. TYPE PUSH PSW
  427.  PUSH B
  428.  PUSH D
  429.  PUSH H
  430.  MOV C,A
  431. VTYPE CALL $-$
  432.  POP H
  433.  POP D
  434.  POP B
  435.  POP PSW
  436.  RET
  437. ;
  438. STAT PUSH B
  439.  PUSH D
  440.  PUSH H
  441. VSTAT CALL $-$
  442.  POP H
  443.  POP D
  444.  POP B
  445.  ORA A
  446.  RET
  447. ;
  448. KEYIN PUSH B
  449.  PUSH D
  450.  PUSH H
  451. VKEYIN CALL $-$
  452.  POP H
  453.  POP D
  454.  POP B
  455.  ANI 7FH
  456.  RET
  457. ;
  458. ILPRT XTHL
  459. ;
  460. ILPLP MOV A,M
  461.  ORA A
  462.  JZ ILPRET
  463.  CALL TYPE
  464.  INX H
  465.  JMP ILPLP
  466. ;
  467. ILPRET XTHL
  468.  RET
  469. ;
  470. ERXIT POP D
  471.  MVI C,9
  472.  CALL BDOS
  473. ;
  474. MXIT CALL ILPRT
  475.  DB CR,LF,'DON''T FORGET TO DISCONNECT MODEM'
  476.  DB CR,LF,0
  477. ;
  478. EXIT LHLD STACK
  479.  SPHL
  480.  RET
  481. ;
  482. MOVE128 MVI B,128
  483. ;
  484. MOVE MOV A,M
  485.  STAX D
  486.  INX H
  487.  INX D
  488.  DCR B
  489.  JNZ MOVE
  490.  RET
  491. ;
  492. RCVSNO DB 0
  493. SECTNO DB 0
  494. ERRCT DB 0
  495. EOFLG DB 0
  496. SECPTR DW DBUF
  497. SECINBF DB 0
  498.  DS 60
  499. STACK DS 2
  500. DBUF EQU $
  501. ;
  502.  END
  503.