home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / fasm / extnd.inc < prev    next >
Encoding:
Text File  |  1985-11-17  |  7.1 KB  |  318 lines

  1. ;
  2. ;  EXTND.INC  --
  3. ;       STEPHEN R DAVIS, 214-454-2426 (GREENVILLE, TX)
  4. ;
  5. ;       WRITTEN FOR THE MICROSOFT ASSEMBLER TO DEFINE
  6. ;       THE UNIQUE INSTRUCTIONS IN NEC'S PD70108/PD70116
  7. ;       MICROPROCESSOR.  INCLUDE THIS FILE IN YOUR PROGRAM
  8. ;       WITHIN ANY SEGMENT DEFINITION BEFORE USING THE NEC
  9. ;       INSTRUCTIONS; E.G.
  10. ;
  11. ;CSEG   SEGMENT PUBLIC PARA
  12. ;       ASSUME CS:CSEG,DS:CSEG,SS:CSEG
  13. ;
  14. ;       INCLUDE EXTND.INC
  15. ;
  16. ;       ORG     100H
  17. ;START:
  18. ;       <ETC.>
  19. ;
  20. ;       NOTICE THAT:
  21. ;       1) SEGMENT OVERRIDES ARE POSSIBLE WITH THE CS_, ES_, SS_ MACROS
  22. ;       2) THE BIT INSTRUCTIONS ARE CODED BACKWARDS WRT NEC
  23. ;          FOR EXAMPLE, CLR1 CL,AX
  24. ;
  25.         .SALL                           ;;DONT BORE POEPLE WITH EXPANSION
  26.         IF1                             ;;WE NEED ONLY INVOLVE PASS 1
  27.  
  28.  
  29. ;       WE NEED TO DEFINE SOME LABELS TO HELP US DIFERENTIATE BETWEEN
  30. ;       8 BIT REGISTER ARG.S AND 16 BIT REGISTER ARG.S TO OUR MACROS
  31. ;       AND TO GIVE THE REGISTERS VALUES WITH WHICH TO BUILD INSTRUCTIONS
  32. ;
  33.     .VAL    = 0
  34.     IRPC    Z,ACDB            ;; DEFINE THE FIRST 4 16 BIT REGGIES
  35. .&Z&X    EQU THIS WORD
  36. @&Z&X    = .VAL
  37.     .VAL = .VAL + 1
  38.     ENDM
  39.  
  40.         .VAL    = 0
  41.         IRPC    Z,ACDB                  ;; DEFINE ALL OF THE 8 BIT REGISTERS
  42. .&Z&L   EQU THIS BYTE
  43. @&Z&L    = .VAL
  44. .&Z&H   EQU THIS BYTE
  45. @&Z&H    = .VAL + 4
  46.     .VAL = .VAL + 1
  47.         ENDM
  48.  
  49. ;
  50. ;SET_TYPE -
  51. ;       GIVEN AN ARGUMENT, SETS THE VARIABLE 'TYPE_OF_ARG' TO
  52. ;               0   IF IT IS AN IMMEDIATE VALUE
  53. ;               1            A  BYTE VARIABLE REFERENCE
  54. ;               2               WORD VARIABLE
  55. ;               ...        ETC
  56. ;             101               BYTE REGISTER
  57. ;             102               WORD REGISTER
  58. ;             201               BYTE PTR TYPE REFERENCE
  59. ;             202               WORD PTR TYPE REFERENCE
  60. ;
  61. SET_TYPE MACRO ARG
  62.         IFIDN <ARG>,<BYTE>
  63.         TYPE_OF_ARG = 201H
  64.     ELSE
  65.         IFIDN <ARG>,<WORD>
  66.             TYPE_OF_ARG = 202H
  67.         ELSE
  68.             TYPE_OF_ARG = TYPE ARG
  69.             IFE TYPE_OF_ARG
  70.                 IFDEF .&ARG
  71.                     TYPE_OF_ARG = TYPE .&ARG
  72.                     IF TYPE_OF_ARG
  73.                         TYPE_OF_ARG = TYPE_OF_ARG + 100H
  74.                     ENDIF
  75.                 ENDIF
  76.             ENDIF
  77.         ENDIF
  78.     ENDIF
  79.     ENDM
  80. ;
  81. ;OK WE CAN NOW BEGIN DEFINING THE NEC UNIQUE INSTRUCTIONS
  82.  
  83. ;THE BCD INSTRUCTIONS-
  84. ;       THESE HAVE NO ARGUMENTS, SO JUST PUT THE OPCODE
  85.  
  86. ADD4S    MACRO
  87.         DB    0FH,20H
  88.     ENDM
  89.  
  90. SUB4S    MACRO
  91.         DB    0FH,22H
  92.     ENDM
  93.  
  94. CMP4S    MACRO
  95.         DB    0FH,26H
  96.     ENDM
  97.  
  98.  
  99.  
  100. ;THE BIT FIELD INSTRUCTIONS-
  101. ;       THESE ALLOW EITHER TWO ONE BYTE REGISTERS OR ELSE A BYTE REGISTER
  102. ;       AND AN IMMEDIATE BYTE VALUE.  HERE WE CAN DO ALMOST COMPLETE ERROR
  103. ;       CHECKING BECAUSE OF THE SIMPLE ARGUMENT TYPES.
  104. ;       DEFINE A TEMPLATE TO DO THAT.
  105.  
  106. BIT_FIELD MACRO OC,ARG1,ARG2
  107.  
  108.     .OK = 1
  109.     SET_TYPE ARG1            ;;CHECK ARGUMENT 1 FOR VALIDITY (REG8)
  110.     IF TYPE_OF_ARG - 101H
  111.         ARG1    ; ARGUMENT MUST BE BYTE REGISTER
  112.         .OK = 0
  113.         ENDIF
  114.  
  115.     OPCODE = OC
  116.     IF .OK
  117.         SET_TYPE ARG2        ;;NOW CHECK ARGUMENT 2 (REG8 OR IMM8)
  118.         IFE TYPE_OF_ARG
  119.             OPCODE = OPCODE + 8    ;;IMMEDIATE ARG
  120.         ELSE
  121.             IF TYPE_OF_ARG-101H    ;;CHECK FOR REG8
  122.                 ARG2    ARGUMENT MUST BE BYTE REG OR IMMED
  123.                 .OK = 0
  124.             ENDIF
  125.         ENDIF
  126.     ENDIF
  127.  
  128.     IF .OK                ;;IF ARGUMENTS OK, BUILD INSTR.
  129.         DB    0FH
  130.         DB    OPCODE
  131.         IFE TYPE_OF_ARG
  132.             DB 0C0H+@&ARG1    ;;IMMED8 TYPE SECOND ARG
  133.             DB ARG2
  134.         ELSE
  135.             DB 0C0H + (@&ARG2 SHL 3) + @&ARG1 ;;REG8 TYPE 2ND ARG
  136.         ENDIF
  137.     ENDIF
  138.     ENDM
  139.  
  140. ;INS-
  141.  
  142. INS     MACRO   ARG1,ARG2
  143.         BIT_FIELD 31H,ARG1,ARG2
  144.         ENDM
  145.  
  146. ;EXT-
  147.  
  148. EXT     MACRO   ARG1,ARG2
  149.         BIT_FIELD 33H,ARG1,ARG2
  150.         ENDM
  151.  
  152. ;NOW THE BIT INSTRUCTIONS
  153. ;       THE BIT INSTRUCTIONS HAVE A COMPLICATED STRUCTURE, ALLOWING
  154. ;       EITHER CL OR ELSE AN IMMED VALUE FOLLOWED BY ANY REGISTER OR MEMORY
  155. ;       REFERENCE (IT WAS NECESSARY TO REVERSE THE ARGUMENTS FROM NEC'S
  156. ;       DEFINITION BECAUSE OF THE COMPLESITY OF THE ADDRESSING MODES ALLOWED.
  157. ;       THIS TEMPLATE BUILDS USES THE 'INC' INSTRUCTION
  158. ;       TO BUILD THE MORE COMPLICATED ADDRESSING MODES FOR IT (THE OPCODE
  159. ;       OF THE INC INSTRUCTION IS OVERWRITTEN WITH THE PROPER CODE AFTER
  160. ;       THE ASSEMBLER GENERATES IT)
  161.  
  162. BIT    MACRO    OC,ARG1,ARG2,ARG3,ARG4
  163.     LOCAL    OPC,CONT
  164.  
  165.     OPCODE = OC
  166.     .OK = 1
  167.  
  168.     IFDIF <ARG1>,<CL>        ;;1ST ARG MUST BE CL OR IMMED
  169.         SET_TYPE ARG1
  170.         IF TYPE_OF_ARG
  171.             ARG1    ; ARGUMENT MUST BE CL OR IMMEDIATE VALUE
  172.                         .OK = 0
  173.         ELSE
  174.             OPCODE = OPCODE + 8    ;;IF NOT CL, SET CL BIT IN OPCODE
  175.         ENDIF
  176.     ENDIF
  177.  
  178.     IF .OK
  179.         SET_TYPE ARG2
  180.         IFE TYPE_OF_ARG ;;2ND ARG ANYTHING BUT IMMED
  181.             ARG2    ; ARGUMENT MAY NOT BE IMMEDIATE VALUE
  182.             .OK = 0
  183.         ENDIF
  184.         IFE (TYPE_OF_ARG-2H) MOD 100H    ;;IF MEM16 OR REG16 SET W BIT IN OPCODE
  185.             OPCODE = OPCODE + 1
  186.         ENDIF
  187.         ENDIF
  188.  
  189.     IF .OK
  190.         DB    0FH
  191.         IFE (TYPE_OF_ARG-102H)    ;;FOR REG16 WE MUST BUILD INSTR
  192.             DB OPCODE
  193.             DB 0C0H+@&ARG2
  194.         ELSE
  195. OPC:            INC ARG2 ARG3 ARG4    ;;LET 'INC' BUILD THE ARGUMENT
  196. CONT:            ORG OPC
  197.             DB OPCODE        ;;NOW OVERWRITE OPCODE W/ OURS
  198.             ORG CONT
  199.         ENDIF
  200.         IFDIF <ARG1>,<CL>
  201.             DB ARG1
  202.         ENDIF
  203.     ENDIF
  204.         ENDM
  205.  
  206. ;TEST1 -
  207.  
  208. TEST1    MACRO    ARG1,ARG2,ARG3,ARG4
  209.         BIT    10H,ARG1,ARG2,ARG3,ARG4
  210.     ENDM
  211.  
  212. ;NOT1 -
  213.  
  214. NOT1    MACRO   ARG1,ARG2,ARG3,ARG4
  215.         BIT    16H,ARG1,ARG2,ARG3,ARG4
  216.     ENDM
  217.  
  218. ;CLR1 -
  219.  
  220. CLR1    MACRO   ARG1,ARG2,ARG3,ARG4
  221.         BIT    12H,ARG1,ARG2,ARG3,ARG4
  222.         ENDM
  223.  
  224. ;SET1 -
  225.  
  226. SET1    MACRO   ARG1,ARG2,ARG3,ARG4
  227.         BIT    14H,ARG1,ARG2,ARG3,ARG4
  228.     ENDM
  229.  
  230.  
  231.  
  232. ;NEW STRING PREFIXES
  233. ;       NO ARGUMENTS ALLOWED HERE
  234.  
  235. REPC    MACRO
  236.         DB    65H
  237.     ENDM
  238.  
  239. REPNC    MACRO
  240.         DB    64H
  241.     ENDM
  242.  
  243.  
  244.  
  245.  
  246. ;THE BCD ROTATES
  247. ;       ONLY ONE ARGUMENT BEING ANY VALID ONE BYTE REFERENCE.  AGAIN
  248. ;       WE USE THE 'INC' INSTRUCTION TO BUILD THE PROPER ADDRESSING BYTES
  249. ;       AND THEN OVERWRITE THE OPCODE WITH OUR OWN
  250.  
  251. BCD_ROT MACRO    OPCODE,ARG1,ARG2,ARG3
  252.     LOCAL    OPC,CONT
  253.  
  254.     SET_TYPE ARG1
  255.     IF (TYPE_OF_ARG - 01H) MOD 100H
  256.         ARG1    ARG2 ARG3; ARGUMENT MUST BE A BYTE REFERENCE
  257.         ELSE
  258.         DB    0FH
  259. OPC:        INC    ARG1 ARG2 ARG3
  260. CONT:        ORG    OPC
  261.         DB    OPCODE
  262.         ORG    CONT
  263.     ENDIF
  264.         ENDM
  265.  
  266. ;ROL4-
  267.  
  268. ROL4    MACRO ARG1,ARG2,ARG3,ARG4
  269.         BCD_ROT 28H,ARG1,ARG2,ARG3
  270.     ENDM
  271.  
  272. ;ROR4-
  273.  
  274. ROR4    MACRO ARG1,ARG2,ARG3,ARG4
  275.         BCD_ROT 2AH,ARG1,ARG2,ARG3
  276.     ENDM
  277.  
  278. ;
  279. ;SEGMENT OVERRIDE
  280. ;       PROVIDE A METHOD FOR INCLUDING SEGMENT OVERRIDES
  281. ;
  282. CS_    MACRO ARG1,ARG2,ARG3,ARG4,ARG5
  283.     DB    2EH
  284.     ARG1    ARG2,ARG3,ARG4,ARG5
  285.     ENDM
  286.  
  287. ES_    MACRO ARG1,ARG2,ARG3,ARG4,ARG5
  288.     DB    26H
  289.     ARG1    ARG2,ARG3,ARG4,ARG5
  290.     ENDM
  291.  
  292. SS_    MACRO ARG1,ARG2,ARG3,ARG4,ARG5
  293.     DB    36H
  294.     ARG1    ARG2,ARG3,ARG4,ARG5
  295.     ENDM
  296.  
  297. ;J_NOT_NEC <LABEL>
  298. ;       NOT STRICTLY A NEC UNIQUE INSTRUCTION, THIS MACRO TESTS
  299. ;       THE CPU TO DETERMINE IF IT IS AN INTEL 8086/88 OR NEC
  300. ;       V20/V30; IF IT IS THE 86/88 IT JUMPS TO THE LABEL ARGUMENT,
  301. ;       ELSE IT CONTINUES.  ALL REGISTERS ARE RETAINED EXCEPT CX.
  302.  
  303. J_NOT_NEC MACRO ARG
  304.     LOCAL    V_SERIES
  305.  
  306.     PUSH    CS            ;;PUSH CS IN CASE IT'S INTEL
  307.     XOR    CX,CX
  308.     SET1    0,CX            ;;INTEL WILL POP CS, NEC WILL SET BIT IN CX
  309.     OR    CX,CX            ;;IS CX STILL 0?
  310.     JNZ    V_SERIES
  311.     JMP    ARG            ;;YES -- AHA, ITS AN INTEL CHIP
  312. V_SERIES:
  313.     POP    CX            ;;NO -- ITS NEC, BUT READJUST THE STACK
  314.     ENDM
  315.  
  316.     ENDIF                ;;END OF MACRO INCLUDE FILE
  317.  
  318.