home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol140 / cpu.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.2 KB  |  321 lines

  1. ; 8080 -> 8085 OPCODE ENHANCER TABLES FOR
  2. ; BDS C VERSION 1.46
  3. ; CHRIS UNDERY APRIL 1983
  4.  
  5. ;
  6. lhlx    macro            ;; HL <- *(DE)
  7.     db    0edh
  8.     endm
  9.  
  10. shlx    macro            ;; HL -> *(DE)
  11.     db    0d9h
  12.     endm
  13.  
  14. DSUB    MACRO            ;; DOUBLE SUBTRACT
  15.     DB    8        ;HL -= BC
  16.     ENDM
  17.  
  18. ARHL    MACRO
  19.     DB    10H        ; HL >>= 1
  20.     ENDM
  21.  
  22. RDEL    MACRO    
  23.     DB    18H        ; DE <<= 1 C
  24.     ENDM
  25.  
  26. LDHI    MACRO    N        ;; DE <- HL + IMMEDIATE BYTE
  27.     DB    28H        ; 
  28.     DB    N
  29.     ENDM
  30.  
  31. LDSI    MACRO    N        ;; DE <- SP + FRAME OFFSET
  32.     DB    38H
  33.     DB    N        ; 
  34.     ENDM
  35. ;
  36. RSTV    MACRO            ;; RST ON OVERFLOW
  37.     DB    0CBH
  38.     ENDM
  39.  
  40. JNX5    MACRO            ;; JMP IF NO 16 BIT UNDER/OVERFLOW
  41.     DB    0DDH        ; (DCX INX ETC)
  42.     ENDM
  43.  
  44. JX5    MACRO            ;; JMP IF UNDER/ OVERFLOW
  45.     DB    0FDH
  46.     ENDM
  47. ;
  48. lxih    macro
  49.     db    21h
  50.     endm
  51.  
  52. externs    equ    115h
  53.  
  54.     org    100h
  55.  
  56.     DB    1        ;CPU = 8085
  57. ;
  58. ; c.ccc runtime improvements
  59. ;
  60. ; long displacement , double byte indirection
  61. ; externals referenced
  62. ; possible side effect is the loss of low byte of read data
  63. ; in reg A. This hasn't caused problem as yet.
  64. ;
  65.     db    ldei$len
  66. ldei:    pop    h
  67.     mov    e,m
  68.     inx    h
  69.     mov    d,m
  70.     inx    h
  71.     push    h
  72.     lhld    externs
  73.     dad    d
  74.     mov    a,m
  75.     inx    h
  76.     mov    h,m
  77.     mov    l,a
  78.     ret
  79. ldei$len equ    $-ldei
  80. ;
  81.     db    ldeir$len
  82. ldeir:    pop    d
  83.     lhlx
  84.     inx    d
  85.     inx    d
  86.     push    d        ;save return address
  87.     xchg
  88.     lhld    externs
  89.     dad    d
  90.     xchg
  91.     lhlx
  92.     ret
  93. ldeir$len equ    $-ldeir        ;end of function
  94. ;
  95. ; long displacement double byte local indirection
  96. ;
  97.     db    ldli$len
  98. ldli:    pop    h
  99.     mov    e,m
  100.     inx    h
  101.     mov    d,m
  102.     inx    h
  103.     push    h
  104.     xchg
  105.     dad    b
  106.     mov    a,m
  107.     inx    h
  108.     mov    h,m
  109.     mov    l,a
  110.     ret
  111. ldli$len equ    $-ldli
  112.  
  113.     db    ldlir$len
  114. ldlir:    pop    d
  115.     lhlx
  116.     inx    d
  117.     inx    d
  118.     push    d
  119.     dad    b
  120.     xchg
  121.     lhlx
  122.     ret
  123. ldlir$len equ    $-ldlir
  124. ;
  125.     db    sdli$len
  126. sdli:    pop    h
  127.     mov    e,m
  128.     inx    h
  129.     push    h
  130.     xchg
  131.     mvi    h,0
  132.     dad    b
  133.     mov    a,m
  134.     inx    h
  135.     mov    h,m
  136.     mov    l,a
  137.     ret
  138. sdli$len equ    $-sdli
  139. ;
  140.     db    sdlir$len
  141. sdlir:    pop    d
  142.     lhlx
  143.     inx    d
  144.     push    d
  145.     mvi    h,0
  146.     dad    b
  147.     xchg
  148.     lhlx
  149.     ret
  150. sdlir$len equ    $-sdlir
  151.  
  152. ;
  153. ; short displacement double byte indirection external referenced
  154. ;
  155.     db    sdei$len
  156. sdei:    pop    h
  157.     mov    e,m
  158.     inx    h
  159.     push    h
  160.     mvi    d,0
  161.     lhld    externs
  162.     dad    d
  163.     mov    a,m
  164.     inx    h
  165.     mov    h,m
  166.     mov    l,a
  167.     ret
  168. sdei$len equ    $-sdei
  169. ;
  170.     db    sdeir$len
  171. sdeir:    pop    d
  172.     lhlx
  173.     inx    d
  174.     push    d
  175.     xchg
  176.     lhld    externs
  177.     mvi    d,0
  178.     dad    d
  179.     xchg
  180.     lhlx
  181.     ret
  182. sdeir$len equ    $-sdeir
  183.  
  184. ;
  185. ;
  186. ; these sequences are very common in the inline code
  187. ; generated by the bds c compiler.
  188. ; a few micro seconds can be shaved off these instructions
  189. ;
  190.  
  191.     DB    8
  192.     DAD    D
  193.     LXI    D,0
  194.     MOV    M,E
  195.     INX    H
  196.     MOV    M,D
  197.     PUSH    D
  198. ;
  199.     DB    8
  200.     DAD    D
  201.     XCHG
  202.     LXI    H,0
  203.     SHLX
  204.     XCHG
  205.     PUSH    D
  206. ;
  207. ; THE MOST COMMON SHORT SEQUENCES
  208.  
  209.     DB    7
  210.     MOV    E,M
  211.     INX    H
  212.     MOV    D,M
  213.     DCX    D
  214.     MOV    M,D
  215.     DCX    H
  216.     MOV    M,E
  217. ;
  218.     DB    7        ;REPLACEMENT
  219.     XCHG
  220.     LHLX
  221.     DCX    H
  222.     SHLX
  223.     XCHG
  224.     NOP
  225.     NOP
  226. ;
  227.     DB    7
  228.     MOV    E,M
  229.     INX    H
  230.     MOV    D,M
  231.     INX    D
  232.     MOV    M,D
  233.     DCX    H
  234.     MOV    M,E
  235. ;
  236.     DB    7
  237.     XCHG
  238.     LHLX
  239.     INX    H
  240.     SHLX
  241.     XCHG
  242.     NOP
  243.     NOP
  244. ;
  245. ;
  246. ;
  247.     db    len1
  248. type1:    mov e,m! inx h! mov d,m! inx d! mov m,d! dcx h! mov m,e!
  249.     dcx d! xchg!
  250. len1    equ    $-type1
  251.  
  252. ; replacement sequence
  253.  
  254.     db    lrep1
  255. rep1:
  256.     xchg
  257.     lhlx
  258.     inx h
  259.     shlx
  260.     dcx h
  261.     nop
  262.     nop
  263.     nop
  264.     nop
  265. lrep1    equ    $-rep1
  266.  
  267. ;
  268.     db    0        ; THIS IS END OF FILE MARK (NULL)
  269.  
  270.     DB    LEN4
  271. TYPE4:    DAD    B
  272.     MOV    E,M
  273.     INX    H
  274.     MOV    D,M
  275.     DCX    D
  276.     MOV    M,D
  277.     DCX    H
  278.     MOV    M,E
  279.     lxih
  280. LEN4    EQU    $-TYPE4
  281. ;
  282.     DB    LREP4
  283. REP4:    DAD    B
  284.     XCHG
  285.     LHLX
  286.     DCX    H
  287.     SHLX
  288.     XCHG
  289.     NOP
  290.     NOP
  291.     lxih
  292. LREP4    EQU    $-REP4
  293.  
  294. ;
  295. ; DE = *HL--
  296. ;
  297.     db    len6
  298. type6:    DAD    B
  299.     MOV    E,M
  300.     INX    H
  301.     MOV    D,M
  302.     DCX    D
  303.     MOV    M,D
  304.     DCX    H
  305.     MOV    M,E
  306. LEN6    EQU    $-TYPE6
  307.  
  308.     DB    LREP6
  309. REP6:    DAD    B
  310.     XCHG
  311.     LHLX
  312.     DCX    H
  313.     SHLX    
  314.     XCHG    
  315.     NOP
  316.     NOP
  317. LREP6    EQU    $-REP6
  318.  
  319.     dw    0            ;end of table
  320.  
  321.