home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol151 / mboot-rb.a86 < prev    next >
Encoding:
Text File  |  1984-04-29  |  5.5 KB  |  474 lines

  1. ; MBOOT100.A86 - MBOOT for the DEC PC100 Rainbow microcomputer
  2. ; M. J. Mellinger, St. Louis RCPM 4/10/83
  3. ;
  4. FALSE    EQU    0
  5. TRUE    EQU    NOT FALSE
  6. ;
  7. BASE    EQU    0
  8. ;
  9. EXITCHR    EQU    06H    ;CTL-F TO EXIT TERM MODE TO CP/M
  10. ESC    EQU    01H    ;CTL-A TO EXIT TERM MODE TO FILE RCVE
  11. ;
  12. FASTCLK    EQU    TRUE    ; VT180 HAS 4 MHZ CLOCK
  13. ;
  14. ;
  15. ; modem definitions
  16. modctlp    equ    042h
  17. modctl2    equ    002h
  18. modsndb    equ    4
  19. modsndr    equ    4
  20. modrcvb    equ    1
  21. modrcvr    equ    1
  22. moddatp    equ    040h
  23. baudrp    equ    006h
  24. ;
  25. ;
  26. ;
  27. ERRLIM    EQU    10
  28. ;
  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. ;
  37. FCB    EQU    BASE+5CH
  38. ;
  39.     cseg
  40. ;    ORG    BASE+100H
  41. ;
  42.     cld
  43.     CALL    INITADR
  44.     CALL    ILPRT
  45.     DB    'MBOOT-Rainbow as of '
  46.     DB    '4/10/83',CR,LF,0
  47.     mov    al,fcb+1
  48.     cmp    al,' '
  49.     JNZ    TERMI
  50.     CALL    ILPRT
  51.     DB    '++NO FILE NAME SPECIFIED++',CR,LF,0
  52.     JMP    EXIT
  53. ;
  54. TERMI:    CALL    INITMOD
  55.     IN    AL,MODDATP
  56.     IN    AL,MODDATP
  57.     CALL    ILPRT
  58.     DB    CR,LF,'Terminal mode',CR,LF
  59.     DB    'CTL-F exits to CP/M, CTL-A starts file transfer.'
  60.     DB    CR,LF,0
  61. ;
  62. TERM:    CALL    STAT
  63.     JZ    TERML
  64.     CALL    KEYIN
  65.     cmp    al,exitchr
  66.     JNZ    TERM01
  67.     JMP    EXIT
  68. TERM01:
  69.     cmp    al,esc
  70.     jz    rcvfil
  71.     OUT    MODDATP,AL
  72. TERML:    IN    AL,MODCTLP
  73.     AND    AL,MODRCVB
  74.     CMP    AL,MODRCVR
  75.     JNZ    TERM
  76.     IN    AL,MODDATP
  77.     AND    AL,7FH
  78.     CALL    TIPE
  79.     JMP    TERM
  80. ;
  81. RCVFIL:    CALL    ERASFIL
  82.     CALL    MAKEFIL
  83.     CALL    ILPRT
  84.     DB    'FILE OPEN, READY TO RECEIVE',CR,LF,0
  85. ;
  86. RCVLP:    CALL    RCVSECT
  87.     JC    RCVEOT
  88.     CALL    WRSECT
  89.     CALL    INCRSNO
  90.     CALL    SENDACK
  91.     JMP    RCVLP
  92. ;
  93. RCVEOT:    CALL    WRBLOCK
  94.     CALL    SENDACK
  95.     CALL    CLOSFIL
  96.     CALL    ERXIT
  97.     DB    CR,LF,'TRANSFER COMPLETE$'
  98. ;
  99. RCVSECT:
  100.     Xor    Al,al
  101.     mov    errct,al
  102. ;
  103. RCVRPT:    Mov    CH,10
  104.     CALL    RECV
  105.     JC    RCVSERR
  106.     cmp    al,soh
  107.     jz    rcvsoh
  108.     or    al,al
  109.     jz    rcvrpt
  110.     cmp    al,eot
  111.     STC
  112.     jnz    rcvserr
  113.     ret
  114. ;
  115. RCVSERR:
  116.     mov    CH,1
  117.     CALL    RECV
  118.     JNC    RCVSERR
  119.     mov    al,nak
  120.     CALL    SEND
  121.     MOV    AL,ERRCT
  122.     INC    AL
  123.     MOV    ERRCT,AL
  124.     CMP    AL,ERRLIM
  125.     JC    RCVRPT
  126. ;
  127. RCVSABT:
  128.     CALL    CLOSFIL
  129.     CALL    ERXIT
  130.     DB    '++UNABLE TO RECEIVE BLOCK'
  131.     DB    CR,LF,'++ABORTING++$'
  132. ;
  133. RCVSOH:    MOV    CH,1
  134.     CALL    RECV
  135.     JC    RCVSERR
  136.     MOV    DH,AL
  137.     MOV    CH,1
  138.     CALL    RECV
  139.     JC    RCVSERR
  140.     NOT    AL
  141.     CMP    AL,DH
  142.     JZ    RCVDATA
  143.     JMP    RCVSERR
  144. ;
  145. RCVDATA:
  146.     MOV    AL,DH
  147.     MOV    RCVSNO,AL
  148.     MOV    CL,0
  149.     MOV    BX,OFFSET BASE+80H
  150. ;
  151. RCVCHR:    MOV    CH,1
  152.     CALL    RECV
  153.     JC    RCVSERR
  154.     MOV    DS: BYTE PTR [BX],AL
  155.     INC    BL
  156.     JNZ    RCVCHR
  157.     MOV    DH,CL
  158.     MOV    CH,1
  159.     CALL    RECV
  160.     JC    RCVSERR
  161.     CMP    DH,AL
  162.     JZ    RCVCHR01
  163.     JMP    RCVSERR
  164. RCVCHR01:
  165.     MOV    CH,RCVSNO
  166.     MOV    AL,SECTNO
  167.     CMP    CH,AL
  168.     JZ    RECVACK
  169.     INC    AL
  170.     CMP    CH,AL
  171.     JNZ    ABORT
  172.     RET
  173. ;
  174. RECVACK:
  175.     CALL    SENDACK
  176.     JMP    RCVSECT
  177. ;
  178. SENDACK:
  179.     MOV    AL,ACK
  180. ;
  181. SEND:    PUSH    AX
  182.     ADD    CL,AL
  183. SENDW:    IN    AL,MODCTLP
  184.     AND    AL,MODSNDB
  185.     CMP    AL,MODSNDR
  186.     JNZ    SENDW
  187.     POP    AX
  188.     OUT    MODDATP,AL
  189.     RET
  190. ;
  191. ABORT:
  192. ;
  193. ABORTL:    MOV    CH,1
  194.     CALL    RECV
  195.     JNC    ABORTL
  196.     MOV    AL,CAN
  197.     CALL    SEND
  198. ;
  199. ABORTW:    MOV    CH,1
  200.     CALL    RECV
  201.     JNC    ABORTW
  202.     MOV    AL,' '
  203.     CALL    SEND
  204.     CALL    ERXIT
  205.     DB    'MBOOT PROGRAM CANCELLED$'
  206. ;
  207. INCRSNO:
  208.     INC    SECTNO
  209.     RET
  210. ;
  211. ERASFIL:
  212.     MOV    DX,OFFSET FCB
  213.     MOV    CL,17
  214.     CALL    BDOS
  215.     INC    AL
  216.     JNZ    ERAS01
  217.     RET
  218. ERAS01:
  219.     CALL    ILPRT
  220.     DB    '++FILE EXISTS, TYPE Y TO ERASE:',0
  221.     CALL    KEYIN
  222.     PUSH    AX
  223.     CALL    TIPE
  224.     CALL    CRLF
  225.     POP    AX
  226.     AND    AL,5FH
  227.     CMP    AL,'Y'
  228.     JZ    ERAS02
  229.     JMP    MXIT
  230. ERAS02:
  231.     MOV    DX,OFFSET FCB
  232.     MOV    CL,19
  233.     JMP    BDOS
  234. ;
  235. MAKEFIL:
  236.     MOV    DX,OFFSET FCB
  237.     MOV    CL,22
  238.     CALL    BDOS
  239.     INC    AL
  240.     JZ    MAKE01
  241.     RET
  242. MAKE01:
  243.     CALL    ERXIT
  244.     DB    '++ERROR - CAN''T MAKE FILE',CR,LF
  245.     DB    '++DIRECTORY MUST BE FULL$'
  246. ;
  247. CLOSFIL:
  248.     MOV    DX,OFFSET FCB
  249.     MOV    CL,16
  250.     CALL    BDOS
  251.     INC    AL
  252.     JZ    CLOS01
  253.     RET
  254. CLOS01:
  255.     CALL    ERXIT
  256.     DB    '++CAN''T CLOSE FILE$'
  257. ;
  258. WRSECT:    MOV    BX,SECPTR
  259.     XCHG    BX,DX
  260.     MOV    BX,OFFSET 80H
  261.     CALL    MOVE128
  262.     XCHG    BX,DX
  263.     MOV    SECPTR,BX
  264.     MOV    AL,SECINBF
  265.     INC    AL
  266.     MOV    SECINBF,AL
  267.     CMP    AL,16
  268.     JZ    WRBLOCK
  269.     RET
  270. ;
  271. WRBLOCK:
  272.     MOV    AL,SECINBF
  273.     OR    AL,AL
  274.     JNZ    WRBL01
  275.     RET
  276. WRBL01:
  277.     MOV    CL,AL
  278.     MOV    DX,OFFSET DBUF
  279. ;
  280. DKWRLP:    PUSH    BX
  281.     PUSH    DX
  282.     PUSH    CX
  283.     MOV    CL,26
  284.     CALL    BDOS
  285.     MOV    DX,OFFSET FCB
  286.     MOV    CL,21
  287.     CALL    BDOS
  288.     POP    CX
  289.     POP    DX
  290.     POP    BX
  291.     OR    AL,AL
  292.     JNZ    WRERR
  293.     MOV    BX,OFFSET 80H
  294.     ADD    BX,DX
  295.     XCHG    BX,DX
  296.     DEC    CL
  297.     JNZ    DKWRLP
  298.     XOR    AL,AL
  299.     MOV    SECINBF,AL
  300.     MOV    BX,OFFSET DBUF
  301.     MOV    SECPTR,BX
  302. RSDMA:
  303.     MOV    DX,OFFSET 80H
  304.     MOV    CL,26
  305.     JMP    BDOS
  306. ;
  307. WRERR:    CALL    RSDMA
  308.     CALL    ILPRT
  309.     DB    '++ERROR WRITING FILE',CR,LF,0
  310.     JMP    ABORT
  311. ;
  312. RECV:    PUSH    DX
  313. ;
  314.     IF    FASTCLK
  315.     MOV    AL,CH
  316.     ADD    AL,AL
  317.     MOV    CH,AL
  318.     ENDIF
  319. ;
  320. MSEC:    MOV    DX,15000
  321. ;
  322. MWTI:    
  323.     IN    AL,MODCTLP
  324.     AND    AL,MODRCVB
  325.     CMP    AL,MODRCVR
  326.     JZ    MCHAR
  327.     DEC    DL
  328.     JNZ    MWTI
  329.     DEC    DH
  330.     JNZ    MWTI
  331.     DEC    CH
  332.     JNZ    MSEC
  333.     POP    DX
  334.     STC
  335.     RET
  336. ;
  337. MCHAR:    IN    AL,MODDATP
  338.     POP    DX
  339.     ADD    CL,AL
  340.     OR    AL,AL
  341.     RET
  342. ;
  343. INITADR:
  344.     RET
  345. ;
  346. ;
  347. INITMOD:
  348. ;
  349.     MOV    AL,24
  350.     OUT    MODCTLP,AL
  351.     MOV    AL,4
  352.     OUT    MODCTLP,AL
  353.     MOV    AL,68
  354.     OUT    MODCTLP,AL
  355.     MOV    AL,1
  356.     OUT    MODCTLP,AL
  357.     MOV    AL,0
  358.     OUT    MODCTLP,AL
  359.     MOV    AL,3
  360.     OUT    MODCTLP,AL
  361.     MOV    AL,193
  362.     OUT    MODCTLP,AL
  363.     MOV    AL,5
  364.     OUT    MODCTLP,AL
  365.     MOV    AL,234
  366.     OUT    MODCTLP,AL
  367.     MOV    AL,0
  368.     OUT    MODCTLP,AL
  369.     MOV    AL,00        ; CLEAR BITS TO SET DTR
  370.     OUT    MODCTL2,AL    ; OUT TO COMM CONTROL REGISTER
  371.     RET
  372. ;
  373. ;
  374. EXIT:    MOV    CL,0
  375.     mov    dl,0
  376. ;
  377. BDOS:    PUSH    ES    ; PRESERVE ES
  378.     INT    224    ; CPM-86 BDOS CALL
  379.     POP    ES
  380.     RET
  381. ;
  382. CRLF:    MOV    AL,CR
  383.     CALL    TIPE
  384.     MOV    AL,LF
  385. ;
  386. TIPE:    PUSH    CX
  387.     PUSH    DX
  388.     PUSH    BX
  389.     PUSH    SI
  390.     AND    AL,07FH
  391.     MOV    DL,AL
  392.     MOV    CL,DCONIO
  393.     CALL    BDOS
  394.     POP    SI
  395.     POP    BX
  396.     POP    DX
  397.     POP    CX
  398.     RET
  399. ;KEYBOARD STATUS
  400. Stat:    mov    cl,DCONIO
  401.     mov    dl,0FEH
  402.     call    bdos
  403.     OR AL,AL    ;0 => NOT READY
  404.     RET
  405. ;
  406. ;KEYBOARD INPUT
  407. ;
  408. keyin:    mov    cl,DCONIO
  409.     mov    dl,0ffh
  410.     call    bdos
  411.     or    al,al
  412.     jz    keyin
  413.     ret
  414. ;
  415. ILPRT:    POP    SI
  416.     XCHG    BX,SI
  417.     PUSH    SI
  418. ;
  419. ILPLP:    MOV    AL,CS: byte ptr [BX]
  420.     OR    AL,AL
  421.     JZ    ILPRET
  422.     CALL    TIPE
  423.     INC    BX
  424.     JMP    ILPLP
  425. ;
  426. ILPRET:    INC    BX
  427.     POP    SI
  428.     XCHG    BX,SI
  429.     PUSH    SI
  430.     RET
  431. ;
  432. ERXIT:    POP    DX
  433.     PUSH    DS
  434.     MOV    AX,CS
  435.     MOV    DS,AX
  436.     MOV    CL,9
  437.     CALL    BDOS
  438.     POP    DS
  439. ;
  440. MXIT:    CALL    ILPRT
  441.     DB    CR,LF,'Don''t forget to disconnect modem'
  442.     DB    CR,LF,0
  443.     JMP    EXIT
  444. ;
  445. MOVE128:
  446.     MOV    CH,128
  447. ;
  448. MOVE:    MOV    AL,ds:BYTE PTR [BX]
  449.     XCHG    BX,DX
  450.     MOV    ds: byte ptr [BX],AL
  451.     XCHG    BX,DX
  452.     INC    BX
  453.     INC    DX
  454.     DEC    CH
  455.     JNZ    MOVE
  456.     RET
  457. endcs    equ    $
  458. ;
  459.     dseg
  460. ;    org    offset endcs
  461.     ORG    100H
  462. RCVSNO    DB    0
  463. SECTNO    DB    0
  464. ERRCT    DB    0
  465. EOFLG    DB    0
  466. SECPTR    DW    DBUF
  467. SECINBF    DB    0
  468. DBUF    RB    16*128
  469. ;
  470. ;bdos equates
  471. DCONIO    EQU    6
  472. CONST    EQU    11
  473.     END
  474.