home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 162_01 / edcode.mac < prev    next >
Text File  |  1985-08-21  |  4KB  |  262 lines

  1.     NAME    ('EDCODE')    ; Essential device code
  2.     INCLUDE DEQ.MAC
  3.  
  4.     PUBLIC    CMDBYT,STATUS,CMDIO,QUIK.1,QUIK.2,ST.FL2
  5.     PUBLIC    ST.FLU,FLSD.U,FLSD.B,FLRD,FLDS,FLDR
  6.     PUBLIC    PORTD,PORTC
  7. PORTD:    DW    PORT.D    ; Host program can overwrite
  8. PORTC:    DW    PORT.C    ; port assignments
  9.     .Z80
  10. ; The following three macros can be simplified when
  11. ; customised for individual hardware
  12. ; in a remake of dlibrary.
  13. ;
  14. OUT32D    MACRO    ; 32 data bits OUT
  15.     LD    L,C
  16.     LD    H,B
  17.     LD    BC,(PORTD)
  18.     OUT    (C),E
  19.     OUT    (C),D
  20.     OUT    (C),L
  21.     OUT    (C),H
  22.     ENDM
  23.  
  24. IN32D    MACRO    ; 32 data bits IN
  25.     LD    BC,(PORTD)
  26.     IN    H,(C)
  27.     IN    L,(C)
  28.     IN    D,(C)
  29.     IN    E,(C)
  30.     LD    C,L
  31.     LD    B,H
  32.     ENDM
  33.  
  34. IO16D    MACRO
  35.     LD    BC,(PORTD)
  36.     ENDM
  37.  
  38. ; Start of "float" area
  39. F.neg:: EQUJPS    NXF,QUIK.1
  40. F.add:: EQUJPS    .FADD,ST.FLB
  41. F.sub:: EQUJPS    .FSUB,ST.FLB
  42. F.mul:: EQUJPS    .FMUL,ST.FLB
  43. F.div:: EQUJPS    .FDIV,ST.FLB
  44. ; Start of "long" area
  45. L.neg:: EQUJPS    NXL,QUIK.1
  46. L.add:: EQUJPS    .LADD,ST.FLB
  47. L.sub:: EQUJPS    .LSUB,ST.FLB
  48. L.mul:: EQUJPS    .LMUL,ST.FLB
  49. L.div:: EQUJPS    .LDIV,ST.FLB
  50. ;
  51. ; To understand some of the following remarks,
  52. ; you must understand the macro "EQUJPS"
  53. ; in the file DEQ.MAC.
  54. ;
  55. ST.FLB:     ; equ FLSD.B, FLRD, CMDIO, FLDR
  56.     EXX
  57.     POP    HL
  58.     POP    DE    ; to alternate registers
  59.     POP    BC
  60.     PUSH    HL
  61.     OUT32D
  62.     EXX
  63. QUIK.1:     ; equ FLRD, CMDIO, FLDR
  64.     OUT32D
  65. QUIK.2:     ; equ CMDIO, FLDR
  66.     EX    AF,AF'
  67.     LD    A,(CMDBYT)
  68.     RES    7,A ; Reset device flag
  69.     LD    BC,(PORTC)
  70.     OUT    (C),A
  71. S.DEL:    LD    A,10Q ; delay set up
  72. DEL.1:    DEC    A
  73.     JP    NZ,DEL.1
  74.     LD    BC,(PORTC)
  75.     IN    A,(C)    ; status byte
  76.     ;    device busy ?
  77.     BIT    7,A
  78.     JP    NZ,S.DEL
  79.     LD    (STATUS),A
  80.     EX    AF,AF'    ; byte to alt A
  81. FLDR:
  82.     IN32D
  83.     RET
  84. FLSD.U:
  85.     EXX
  86.     POP    HL
  87.     POP    DE    ; to alternate registers
  88.     POP    BC
  89.     PUSH    BC
  90.     PUSH    DE
  91.     PUSH    HL
  92.     OUT32D
  93.     EXX
  94.     JP    (IX)
  95. FL2X:
  96.     POP    IY
  97.     POP    DE    ; to regular registers
  98.     POP    BC
  99.     PUSH    IY
  100. FLSD.B:
  101.     EXX
  102.     POP    HL
  103.     POP    DE    ; to alternate registers
  104.     POP    BC
  105.     PUSH    HL
  106.     OUT32D
  107.     EXX
  108.     JP    (IX)
  109. FLRD:
  110.     OUT32D
  111.     JP    (IX)
  112. FLDS:
  113.     EXX
  114.     POP    IY
  115.     IN32D
  116.     PUSH    BC
  117.     PUSH    DE
  118.     PUSH    IY
  119.     EXX
  120.     RET
  121.  
  122. STATUS:    DB    0
  123. CMDBYT:    DB    0
  124.  
  125. DNBUSY:        ; device not busy
  126.     EX    AF,AF'
  127.     JP    SETDEL
  128. CMDIO:            ; Command OUT, status IN
  129.     EX    AF,AF'
  130.     LD    A,(CMDBYT)
  131.     RES    7,A ; Reset device flag
  132.     LD    BC,(PORTC)
  133.     OUT    (C),A
  134. SETDEL:    LD    A,10Q ; delay set up
  135. DEL:    DEC    A
  136.     JP    NZ,DEL
  137.     LD    BC,(PORTC)
  138.     IN    A,(C)     ; status byte
  139.     ;    device busy ?
  140.     BIT    7,A
  141.     JP    NZ,SETDEL
  142.     LD    (STATUS),A
  143.     EX    AF,AF'     ; byte to alt A
  144.     JP    (IX)
  145.  
  146. ST.FLU:    EQUJPS    ,FLSD.U,QUIK.2
  147. ST.FL2:    EQUJPS    ,FL2X,FLRD,CMDIO,FL.PU2,FLDR
  148. FL.PU2:        ; float/long - push 2
  149.     POP    IY    ; save return address
  150.     PUSH    BC
  151.     PUSH    BC
  152.     PUSH    BC
  153.     PUSH    BC
  154.     PUSH    IY    ; restore return address
  155.     JP    (IX)
  156.  
  157. ; Toolworks labels as entry points
  158. ; int to float, and vice versa
  159. I..F::    EQUJPS    ITOF,SPSD.B,CMDIO,FLDS
  160. Hi.Bf:: EQUJPS    ITOF,SPRD,CMDIO,FLDR
  161.  
  162. F..I::    EQUJPS    FTOI,FLSD.B,CMDIO,SPDS
  163. Bf.Hi:: EQUJPS    FTOI,FLRD,CMDIO,SPDR
  164.  
  165. LDIY    MACRO    TARGET
  166.     LD    IY,TARGET
  167.     JP    H16.Bl
  168.     ENDM
  169.  
  170. C..L::    LDIY    Hc.Bl## ; Linker will find these target labels
  171. U..L::    LDIY    Hu.Bl## ;  in the Toolworks Mathpak file
  172. I..L::    LDIY    Hi.Bl## ;    flibrary.rel
  173.  
  174. H16.Bl:
  175.     EXX
  176.     POP    IX
  177.     POP    HL
  178.     PUSH    IX
  179.     LD    IX,RTLBL1
  180.     PUSH    IX
  181.     JP    (IY)
  182. RTLBL1:
  183.     POP    IX
  184.     PUSH    BC
  185.     PUSH    DE
  186.     PUSH    IX
  187.     EXX
  188.     RET
  189. ; Single precision (SP) 16-bit code
  190.  
  191. SPSD.U:
  192.     EXX
  193.     POP    DE
  194.     POP    HL
  195.     PUSH    HL
  196.     PUSH    DE
  197.     IO16D
  198.     OUT    (C),L
  199.     OUT    (C),H
  200.     EXX
  201.     JP    (IX)
  202. SPSD.B:
  203.     EXX
  204.     POP    DE
  205.     POP    HL
  206.     PUSH    DE
  207.     IO16D
  208.     OUT    (C),L
  209.     OUT    (C),H
  210.     EXX
  211.     JP    (IX)
  212. SPRD:
  213.     IO16D
  214.     OUT    (C),L
  215.     OUT    (C),H
  216.     JP    (IX)
  217. SPDR:
  218.     IO16D
  219.     IN    H,(C)
  220.     IN    L,(C)
  221.     RET
  222. SPDS:
  223.     EXX
  224.     POP    DE
  225.     IO16D
  226.     IN    H,(C)
  227.     IN    L,(C)
  228.     PUSH    HL
  229.     PUSH    DE
  230.     EXX
  231.     RET
  232.  
  233.     .8080
  234.     END
  235. 
  236.  
  237.     END
  238. 
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.