home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol054 / ttcbios.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  6.1 KB  |  466 lines

  1. ;    TTCBIOS.ASM
  2. ;
  3. ;
  4. ;
  5. ;      Original coding by:  Thinker Toys
  6. ;                Richmond, CA
  7. ;
  8. ;
  9. ;       Patching to minimize size to fit ok for cp/m 2.2
  10. ;    by: Jack Burge
  11. ;        518A Fifth Street
  12. ;        East Northport, LI NY   11731
  13. ;
  14. ;           (516) 261-7219
  15. ;
  16. ;    Patching to automatically determine `START` equate value
  17. ;       inserted by:
  18. ;            Henry B. Rothberg
  19. ;            1 Laticrete Park North
  20. ;            Bethany,  CT 06525
  21. ;    1/12/82                    
  22. ;
  23. ;            From excellent coding done by:
  24. ;
  25. ;            TKI (The Kendall Institute)
  26. ;                
  27. ;                Bruce Kendall
  28. ;                334-A  Camille Court
  29. ;                Mountain View,  CA  94040
  30. ;
  31. ;
  32. ;    To use this and ttboot.asm see TTSDDJ.HLP
  33. ;
  34. ;    To use, change the values at MSIZE & DELTA for
  35. ;    your system size, then change the I/O routines
  36. ;    below to match your system requirements.
  37. ;
  38. ;*************************************************************
  39. ;                                                          ***
  40. MSIZE    EQU    56    ; Insert system size in KB here    ***
  41. ;                                                          ***
  42. ;*************************************************************
  43. ;
  44. DELTA    EQU    0000H    ; Offset from standard CP/M
  45. ;
  46. ;*************************************************************
  47. ;
  48. BIAS    EQU    (MSIZE-20)*1024-DELTA    ; Offset from 20K CP/M system
  49. ;
  50. CCP    EQU    3400H+BIAS        ; Base of CP/M
  51. ;
  52. OFFSET  EQU    980H-CCP        ; Offset used to read in ttcbios.hex
  53. ;                      with ddt.com during configuration
  54.  
  55. ;
  56. ;    TITLE 'CBIOS DRIVERS FOR E000H'
  57. ;CBIOS DRIVERS FOR CP/M
  58. ;
  59. CPM    EQU    CCP         ; For ALL cp/m 2.2 systems
  60. ;
  61. ENTRY    EQU    CPM+806H
  62. CDISK    EQU    4
  63. ORIGIN    EQU    0E000H         ; For prom at E000H
  64. INPUT    EQU    ORIGIN+3
  65. OUTPUT    EQU    ORIGIN+6
  66. TKZERO    EQU    ORIGIN+9H
  67. TSEEK    EQU    ORIGIN+0CH
  68. SECTOR    EQU    ORIGIN+0FH
  69. DMA    EQU    ORIGIN+12H
  70. DISKR    EQU    ORIGIN+15H
  71. DISKW    EQU    ORIGIN+18H
  72. STACK    EQU    ORIGIN+26EH
  73. DRIVE    EQU    ORIGIN+273H
  74. DMAADR    EQU    ORIGIN+274H
  75. TRACK    EQU    ORIGIN+277H
  76. STATUS    EQU    ORIGIN+302H
  77. DELAY    EQU    ORIGIN+1F3H
  78. SCON    EQU    ORIGIN+270H
  79. IOBYTE    EQU    3H
  80. INTIOBY    EQU    0
  81. RDYMSK    EQU    80H
  82. WPTCT    EQU    1
  83. ;
  84. ;
  85.     ORG    CPM+1600H
  86. ;
  87. NSECTS    EQU    ($-CPM)/128
  88. ;
  89. START    JMP    BOOT    
  90. WBOOTE    JMP    WBOOT
  91.     JMP    CONST
  92.     JMP    CHRIN
  93. CPOUT    JMP    CONOUT
  94.     JMP    LIST
  95.     JMP    PUNCH
  96.     JMP    READER
  97.     JMP    HOME
  98.     JMP    SELDISK
  99.     JMP    SETTRK
  100.     JMP    SETSEC
  101.     JMP    DMA
  102.     JMP    READ
  103.     JMP    WRITE
  104.           JMP    LISTST
  105.     JMP    SECTRAN
  106. ;    DISK PARAMETER HEADER FOR DISK 00
  107. DPBASE    DW    TRANS,0000H
  108.     DW    0000H,0000H
  109.     DW    DIRBF,DPBLK
  110.     DW    CHK00,ALL00
  111. ;    DISK PARAMETER HEADER FOR DISK 01
  112.     DW    TRANS,0000H
  113.     DW    0000H,0000H
  114.     DW    DIRBF,DPBLK
  115.     DW    CHK01,ALL01
  116. ;    DISK PARAMETER HEADER FOR DISK 02
  117.     DW    TRANS,0000H
  118.     DW    0000H,0000H
  119.     DW    DIRBF,DPBLK
  120.     DW    CHK02,ALL02
  121. ;    DISK PARAMETER HEADER FOR DISK 03
  122.     DW    TRANS,0000H
  123.     DW    0000H,0000H
  124.     DW    DIRBF,DPBLK
  125.     DW    CHK03,ALL03
  126. ;    SECTOR TRANSLATE VECTOR
  127. TRANS    DB    1,7,13,19
  128.     DB    25,5,11,17
  129.     DB    23,3,9,15
  130.     DB    21,2,8,14
  131.     DB    20,26,6,12
  132.     DB    18,24,4,10
  133.     DB    16,22
  134. ;
  135. DPBLK    DW    26
  136.     DB    3
  137.     DB    7
  138.     DB    0
  139.     DW    242
  140.     DW    63
  141.     DB    192
  142.     DB    0
  143.     DW    16
  144.     DW    2
  145. ;
  146. ;
  147. ;
  148. BOOT    LXI    SP,STACK
  149.     CALL    TINIT
  150.     CALL     QINIT
  151.     LXI    H,PROMPT
  152.     CALL    MESSG
  153.     XRA    A
  154.     STA    CDISK
  155. GOCPM    LXI    H,80H
  156.     SHLD    DMAADR
  157.     MVI    A,0C3H
  158.     STA    0
  159.     LXI    H,START+3
  160.     SHLD    1
  161.     STA    5
  162.     LXI    H,ENTRY
  163.     SHLD    6
  164.     LDA    CDISK
  165.     MOV    C,A
  166.     JMP    CPM
  167. ;
  168. TINIT    MVI    A,INTIOBY
  169.     STA    IOBYTE
  170.     LXI    H,0
  171.     RET
  172. ;
  173. WBOOT    LXI    SP,STACK
  174.     LXI    B,0080H
  175.     CALL    DMA
  176.     MVI    A,88H 
  177.     STA    DRIVE
  178.     CALL    ORIGIN+2AH
  179.     LXI    H,GOCPM
  180.     SHLD    0092H
  181.     MVI    A,2DH
  182.     STA    00CFH
  183.     MVI    A,(CPM+1600H)/100H
  184.     STA    00FAH
  185.     JMP    0080H
  186. ;
  187. HOME    CALL    SELDSK
  188.     CALL    TKZERO
  189.     RET
  190. ;
  191. ;
  192. LISTST    IN    04
  193.     ANI    40H
  194.     MVI    A,0
  195.     RZ
  196.     CMA
  197.     RET
  198. ;
  199. ;
  200. CONST    IN    000
  201.     ANI    40H
  202.     MVI    A,00
  203.     RZ
  204.     CMA
  205.     RET
  206. ;
  207. ;
  208. STATUS5    DB    00
  209. SETTRK    PUSH    B
  210.     CALL    SELDSK
  211.     POP    B
  212.     JMP    TSEEK
  213. ;
  214. ;
  215. CONIN    LXI    H,CITBLE
  216. CONIN1    LDA    IOBYTE
  217.     RAL
  218. SELDEV    ANI    6H
  219.     MVI    D,0
  220.     MOV    E,A
  221.     DAD    D
  222.     MOV    A,M
  223.     INX    H
  224.     MOV    H,M
  225.     MOV    L,A
  226.     PCHL
  227. ;
  228. CONOUT    IN     00H
  229.     ANI    80H
  230.     JZ    CONOUT
  231.     MOV    A,C
  232.     OUT    01H
  233.     RET
  234. ;
  235. ;
  236. ;
  237. READER    JMP    CONIN
  238. ;
  239. ;
  240. PUNCH    JMP      CONOUT
  241. ;
  242. LIST    IN     04H
  243.     ANI    80H
  244.     JZ    LIST
  245.     MOV    A,C
  246.     OUT    05H
  247.     RET
  248. ;
  249. ;
  250. CITBLE    DW    CITTY
  251.     DW    CICRT
  252.     DW    READER
  253.     DW    CIUC1
  254. COTBLE    DW    COTTY
  255.     DW    COCRT
  256.     DW    LIST
  257.     DW    COUC1
  258. LTBLE    DW    LITTY
  259.     DW    COCRT
  260.     DW    LITTY
  261.     DW    COUL1
  262. PTBLE    DW    COTTY
  263.     DW    COPTP
  264.     DW    COUP1
  265.     DW    COUP2
  266. RTBLE    DW    CITTY
  267.     DW    CIPTR
  268.     DW    CIUR1
  269.     DW    CIUR2
  270. COTTY    EQU    $    
  271. COCRT    EQU    $
  272. COUC1    EQU    $
  273. COLPT    EQU    $
  274. COUL1    EQU    $
  275. COPTP    EQU    $
  276. COUP1    EQU    $
  277. COUP2    EQU    $
  278. ;
  279. CHROUT    JMP    CONOUT
  280. ;
  281. CITTY    EQU    $
  282. CICRT    EQU    $
  283. CIPTR    EQU    $
  284. CIUC1    EQU    $
  285. CIUR1    EQU    $
  286. CIUR2    EQU    $
  287.     LXI    H,STATUS5
  288.     MOV    A,M
  289.     ORA    A
  290.     JZ     CHRIN
  291.     MVI    M,0
  292.     RET
  293. ;
  294. CHRIN    IN    00
  295.     ANI    40H
  296.     JZ    CHRIN
  297.     IN    01
  298.     ANI    07FH
  299.     RET
  300. ;
  301. ;
  302. SELDISK    MOV    A,C
  303.     STA    NEWDRV+1
  304.     MOV    L,A
  305.     MVI    H,0
  306.     DAD    H
  307.     DAD    H
  308.     DAD    H
  309.     DAD    H
  310.     LXI    D,DPBASE
  311.     DAD    D
  312.     RET
  313. ;
  314. SELDSK    LXI    H,CDISKA
  315. NEWDRV    MVI    A,0
  316.     CMP    M
  317.     MOV    M,A
  318.     RZ
  319.     MOV    C,A
  320. ;
  321. SELDSK1    LDA    DRIVE
  322.     PUSH    PSW
  323.     ANI    0F7H
  324.     LXI    H,DTABLE
  325.     PUSH    H
  326. SLOOP    CMP    M
  327.     JZ    FOUND
  328.     INX    H
  329.     INX    H
  330.     JMP    SLOOP
  331. FOUND    INX    H
  332.     LDA    TRACK
  333.     MOV    M,A
  334.     POP    H
  335.     MOV    A,C
  336.     ADD    A
  337.     ADD    L
  338.     MOV    L,A
  339.     JNC    HISOK
  340.     INR    H
  341. HISOK    POP    PSW
  342.     ANI    8
  343.     ORA    M
  344.     STA    STATUS
  345.     STA    DRIVE
  346.     INX    H
  347.     MOV    A,M
  348.     STA    TRACK
  349.     XRA    A
  350.     LXI    D,STATUS
  351.     CALL    DELAY
  352.     LDA    CDISKA
  353.     MOV    L,A
  354.     MVI    H,0
  355.     DAD    H
  356.     DAD    H
  357.     DAD    H
  358.     DAD    H
  359.     LXI    D,DPBASE
  360.     DAD    D
  361.     RET
  362. ;
  363. DTABLE    DB    80H
  364.     DB    0
  365.     DB    1
  366.     DB    0
  367.     DB    20H
  368.     DB    0
  369.     DB    2
  370.     DB    0
  371. CDISKA    DB    0
  372. ;
  373. SETSEC    MOV    A,C
  374.     STA    SECTORA+1
  375.     RET
  376. ;
  377. SECTORA    MVI    C,0
  378.     JMP    SECTOR
  379. ;
  380. READ    CALL    SELDSK
  381.     CALL    SECTORA
  382.     MVI    C,10
  383. READ1    PUSH    B
  384.     CALL    DISKR
  385.     POP    B
  386.     ANA    A
  387.     RZ
  388.     DCR    C
  389.     JNZ    READ1
  390. READY    CMA
  391.     RET
  392. ;
  393. WRITE    CALL    SELDSK
  394.     CALL    SECTORA
  395.     MVI    C,10
  396. DSKW    PUSH    B
  397.     CALL    DISKW
  398.     POP    B
  399.     ANA    A
  400.     RZ
  401.     DCR    C
  402.     JNZ    DSKW
  403. PROTCT    LDA    STATUS
  404.     ANI    WPTCT
  405.     JZ    READY
  406.     LXI    H,PTCTMSG
  407. MESSG    MOV    A,M
  408.     ANA    A
  409.     RZ
  410.     PUSH    H
  411.     MOV    C,A
  412.     CALL    CHROUT
  413.     POP    H
  414.     INX    H
  415.     JMP    MESSG
  416. ;
  417. ;
  418. QINIT:    RET
  419. ;    MVI    A,0CEH
  420. ;    OUT    03
  421. ;    OUT    05
  422. ;    MVI    A,25H
  423. ;    OUT    03
  424. ;    OUT    05
  425. ;    RET
  426. ;
  427. LITTY:    IN    05H
  428.     ANI    01
  429.     JZ    LITTY
  430.     MOV    A,C
  431.     OUT    04H
  432.     RET
  433. ;
  434. ;
  435. SECTRAN    XCHG
  436.     DAD    B
  437.     MOV    L,M
  438.     MVI    H,0
  439.     RET
  440. ;
  441. PROMPT    DS    0
  442.     DB    1AH,0DH,0AH
  443.     DB    0DH,0AH
  444.     DB    '20K CP/M 2.2, '
  445.     DB    'Version '
  446.     DB    '1.1 as of 1/11/82'
  447.     DB    0DH,0AH
  448.     DB    0
  449. PTCTMSG    DB    0DH,0AH
  450.     DB    'PROTECT'
  451.     DB    0DH,0AH
  452.     DB    0
  453. ;
  454. DIRBF    DS    128
  455. ALL00    DS    31
  456. ALL01    DS    31
  457. ALL02    DS    31
  458. ALL03    DS    31
  459. CHK00    DS    16
  460. CHK01    DS    16
  461. CHK02    DS    16
  462. CHK03    DS    16
  463. ;
  464. ;
  465.     END
  466.