home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol141 / osbmboot.asm < prev    next >
Assembly Source File  |  1984-04-29  |  7KB  |  504 lines

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