home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 148_01 / a99tbls.csm < prev    next >
Text File  |  1987-09-28  |  11KB  |  579 lines

  1.  
  2. ;TITLE    MACHINE LANGUAGE FUNCTIONS FOR THE 990 SERIES CROSS-ASSEMBLER V. 1.0
  3. ;    SUBTTL    DIRECTORY
  4. ;
  5. ;    TMS9900/99105 FAMILY CROSS-ASSEMBLER  V. 1.0
  6. ;
  7. ;    JANUARY, 1984
  8. ;
  9. ;    ORIGINAL 6800 VERSION BY WILLIAM C. COLLEY, III.
  10. ;    UPDATED  9900/99105 VERSION BY ALEXANDER CAMERON.
  11. ;
  12. ;FILE:    A99TBLS.CSM
  13. ;
  14. ;MACHINE LANGUAGE FUNCTIONS.
  15. ;
  16. ;
  17. ;
  18. ;THIS FUNCTION GETS OPCODE NUMBER NUM FROM THE OPCODE TABLE.  THE FUNCTION
  19. ;RETURNS 0 IF THE OPCODE WAS NOT FOUND, 1 IF IT WAS.
  20. ;
  21. ;FUNCTION IS CALLED AS FOLLOWS:
  22. ;
  23. ;    GETOPC(NUM,OPCODE,VALUE,ATTRIB);
  24. ;
  25. ;    NUM    CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
  26. ;            0 REPRESENTS THE FIRST ENTRY IN THE TABLE.  THE
  27. ;            TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
  28. ;            OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  29. ;    OPCODE    POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
  30. ;            OPCODE'S NAME (NULL TERMINATED).
  31. ;    VALUE    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  32. ;            VALUE.
  33. ;    ATTRIB    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  34. ;            ATTIBUTE BYTE.
  35. ;
  36.     INCLUDE A99BDS.LIB
  37.  
  38.     FUNCTION GETOPC
  39.  
  40. NUM    EQU    ARG1
  41. OPCODE    EQU    ARG2
  42. VALUE    EQU    ARG3
  43. ATTRIB1    EQU    ARG4
  44. ;
  45.     CALL    ARGHAK
  46.     LDA    NUM    ;GET ENTRY NUMBER.
  47.     CPI    OPTBLL    ;ENTRY IN TABLE?
  48.     LXI    H, 0    ;IF NOT, RETURN 0.
  49.     RNC
  50. ;
  51.     PUSH    B    ;IF SO, WE'RE GOING TO HAVE TO DO SOME
  52.     PUSH    D    ;SERIOUS CRUNCHING.
  53. ;
  54.     MOV    L,A    ;FIND ENTRY BY COMPUTING
  55.     DAD    H    ;(N * NUM) + TABLE BASE.
  56.     MOV    C,L
  57.     MOV    B,H
  58.     DAD    H
  59.     DAD    B    ;N=6
  60. ;    DAD    B    ;N=8
  61.     MOV    C,A    ;BC=NUM
  62.     MVI    B,0    
  63.     DAD    B    ;7*NUM
  64.     LXI     B,OPCTBL
  65.     DAD    B
  66.     MOV    C,L
  67.     MOV    B,H
  68.     INX    H    ;ALSO COMPUTE POSITION OF ARGUMENTS.
  69.     INX    H
  70.     INX    H
  71.     INX    H
  72.     PUSH    H
  73. ;
  74.     MVI    E, 4    ;MOVE OPCODE OUT TO RETURN AREA.
  75.     LHLD    OPCODE
  76. MOVOPC:    LDAX    B
  77.     CPI    ' '
  78.     JZ    ENDOPC
  79.     INX    B
  80.     MOV    M,A
  81.     INX    H
  82.     DCR    E
  83.     JNZ    MOVOPC
  84. ;
  85. ENDOPC:    MVI    M, 0        ;TERMINATE OPCODE.
  86. ;
  87.     LHLD    ATTRIB1        ;MOVE ATTRIBUTE BYTE OUT TO RETURN AREA.
  88.     POP    B
  89.     LDAX    B
  90.     INX    B
  91.     MOV    M,A
  92.     LHLD    VALUE        ;MOVE VALUE BYTE OUT TO RETURN AREA.
  93.     LDAX    B
  94.     INX    B
  95.     MOV    M,A
  96.     INX    H
  97.     LDAX    B
  98.     MOV    M,A
  99.     LXI    H, 1        ;RETURN 1 FOR SUCCESSFUL GET.
  100.     POP    D
  101.     POP    B
  102.     RET
  103. ;
  104. ;THE OPCODE TABLE ITSELF:
  105. ;
  106. ;    EACH ENTRY HAS A THREE-BYTE NAME, A ONE-BYTE ATTRIBUTE,
  107. ;    AND A TWO-BYTE BASIC OPCODE VALUE AS DEFINED IN THE 990 SERIES
  108. ;    HANDBOOKS.
  109. ;
  110. ;    THE ATTRIBUTE BYTE BITS ARE ALLOCATED AS FOLLOWS:
  111. ;
  112. ;        7 =     SET IF PSEUDO-OP.
  113. ;        6 =     SET IF PSEUDO-OP AND NO LABEL IS ALLOWED
  114. ;        5,4,3     REPRESENT OPCODE 2ND ADDRESSING MODE IF PRESENT
  115. ;        2,1,0         "      "    1ST     "       "   "    "
  116. ;
  117. ;    NOTES.  FOR FURTHER INFORMATION ON HOW THE ADDRESSING ATTRIBUTE
  118. ;        BITS ARE DERIVED FOR EACH INSTRUCTION REFER TO THE MANUAL.
  119. ;        SECTION 1.4.
  120. ;
  121. ;
  122. OPCTBL0    EQU    $
  123. ;
  124. OPCTBL    DB    'A   ',09H        ;MNEMONIC FOLLOWED BY ATTRRIBUTE BYTE
  125.     DW    0A000H            ;BASIC OPCODE VALUE
  126.     DB    'AB  ',09H
  127.     DW    0B000H
  128.     DB    'ABS ',01H
  129.     DW    0740H    
  130.     DB    'AI  ', 35H
  131.     DW    0220H
  132.     DB    'ANDI', 35H
  133.     DW    0240H
  134.     DB    'AORG',80H
  135.     DW    0000H
  136.     DB    'B   ',01H
  137.     DW    0440H
  138.     DB    'BIND',01H        ;TMS99000 INSTRUCTION
  139.     DW    0140H
  140.     DB    'BL  ',01H
  141.     DW    0680H
  142.     DB    'BLSK',35H        ;TMS99000 INSTRUCTION
  143.     DW    00B0H
  144.     DB    'BLWP',01H
  145.     DW    0400H
  146.     DB    'BSS ', 80H
  147.     DW    0005H
  148.     DB    'BYTE', 80H
  149.     DW    0002H
  150.     DB    'C   ', 09H
  151.     DW    8000H
  152.     DB    'CB  ', 09H
  153.     DW    9000H
  154.     DB    'CI  ',35H
  155.     DW    0280H
  156.     DB    'CKOF',00H
  157.     DW    03C0H
  158.     DB    'CKON',00H
  159.     DW    03A0H
  160.     DB    'CLR ',01H
  161.     DW    04C0H
  162.     DB    'COC ',19H
  163.     DW    2000H
  164.     DB    'CZC ',19H
  165.     DW    2400H
  166.     DB    'DEC ',01H
  167.     DW    0600H
  168.     DB    'DECT',01H
  169.     DW    0640H
  170.     DB    'DIV ',19H
  171.     DW    3C00H
  172.     DB    'DIVS',01H        ;TMS99000 INSTRUCTION
  173.     DW    0180H
  174.     DB    'DXOP',0C0H        ; Define Extended Operation 
  175.     DW    000CH
  176.     DB    'ELSE',0C0H
  177.     DW    0007H
  178.     DB    'END ',80H
  179.     DW    0006H
  180.     DB    'ENDI',0C0H
  181.     DW    0008H
  182.     DB    'EQU ',80H
  183.     DW    0001H
  184.     DB    'EVEN',80H
  185.     DW    000BH
  186.     DB    'IDLE',00H
  187.     DW    0340H
  188.     DB    'IF  ',0C0H
  189.     DW    0009H
  190.     DB    'INC ',01H
  191.     DW    0580H
  192.     DB    'INCT',01H
  193.     DW    05C0H
  194.     DB    'INV ',01H
  195.     DW    0540H
  196.     DB    'JEQ ',02H
  197.     DW    1300H
  198.     DB    'JGT ',02H
  199.     DW    1500H
  200.     DB    'JH  ',02H
  201.     DW    1B00H
  202.     DB    'JHE ',02H
  203.     DW    1400H
  204.     DB    'JL  ',02H
  205.     DW    1A00H
  206.     DB    'JLE ',02H
  207.     DW    1200H
  208.     DB    'JLT ',02H
  209.     DW    1100H
  210.     DB    'JMP ',02H
  211.     DW    1000H
  212.     DB    'JNC ',02H
  213.     DW    1700H
  214.     DB    'JNE ',02H
  215.     DW    1600H
  216.     DB    'JNO ',02H
  217.     DW    1900H
  218.     DB    'JOC ',02H
  219.     DW    1800H
  220.     DB    'JOP ',02H
  221.     DW    1C00H
  222.     DB    'LDCR',19H
  223.     DW    3000H
  224.     DB    'LI  ',35H
  225.     DW    0200H
  226.     DB    'LIMI',06H
  227.     DW    0300H
  228.     DB    'LREX',00H
  229.     DW    03E0H
  230.     DB    'LST ',05H        ;TMS99000 INSTRUCTION
  231.     DW    0080H
  232.     DB    'LWP ',05H        ;TMS99000 INSTRUCTION
  233.     DW    0090H
  234.     DB    'LWPI',06H
  235.     DW    02E0H
  236.     DB    'MOV ',09H
  237.     DW    0C000H
  238.     DB    'MOVB',09H
  239.     DW    0D000H
  240.     DB    'MPY ',19H
  241.     DW    3800H
  242.     DB    'MPYS',01H        ;TMS99000 INSTRUCTION
  243.     DW    01C0H
  244.     DB    'NEG ',01H
  245.     DW    0500H
  246.     DB    'NOP ',00H
  247.     DW    1000H
  248.     DB    'ORI ',35H
  249.     DW    0260H
  250.     DB    'RSET',00H
  251.     DW    0360H
  252.     DB    'RT  ',00H
  253.     DW    045BH
  254.     DB    'RTWP',00H
  255.     DW    0380H
  256.     DB    'S   ',09H
  257.     DW    6000H
  258.     DB    'SB  ',09H
  259.     DW    7000H
  260.     DB    'SBO ',04H
  261.     DW    1D00H
  262.     DB    'SBZ ',04H
  263.     DW    1E00H
  264.     DB    'SET ',80H
  265.     DW    000AH
  266.     DB    'SETO',01H
  267.     DW    0700H
  268.     DB    'SLA ',2DH
  269.     DW    0A00H
  270.     DB    'SOC ',09H
  271.     DW    0E000H
  272.     DB    'SOCB',09H
  273.     DW    0F000H
  274.     DB    'SRA ',2DH
  275.     DW    0800H
  276.     DB    'SRC ',2DH
  277.     DW    0B00H
  278.     DB    'SRL ',2DH
  279.     DW    0900H
  280.     DB    'STCR',09H
  281.     DW    3400H
  282.     DB    'STST',05H
  283.     DW    02C0H
  284.     DB    'STWP',05H
  285.     DW    02A0H
  286.     DB    'SWPB',01H
  287.     DW    06C0H
  288.     DB    'SZC ',09H
  289.     DW    4000H
  290.     DB    'SZCB',09H
  291.     DW    5000H
  292.     DB    'TB  ',04H
  293.     DW    1F00H
  294.     DB    'TCMB',07H        ;TMS99105 INSTRUCTION
  295.     DW    0C0AH            
  296.     DB    'TEXT', 80H
  297.     DW    0004H
  298.     DB    'TMB ',07H        ;TMS99105 INSTRUCTION
  299.     DW    0C09H
  300.     DB    'TROF',00H
  301.     DW    03C0H
  302.     DB    'TRON',00H
  303.     DW    03E0H
  304.     DB    'TSMB',07H        ;TMS99105 INSTRUCTION
  305.     DW    0C0BH
  306.     DB    'WORD',80H
  307.     DW    0003H
  308.     DB    'WREN',00H
  309.     DW    03A0H
  310.     DB    'X   ',01H
  311.     DW    0480H
  312.     DB    'XOP ',19H
  313.     DW    2C00H
  314.     DB    'XOR ',19H
  315.     DW    2800H
  316. ;
  317. OPTBLL    EQU    ($-OPCTBL0)/7    ;CALCULATE LENGTH OF TABLE.
  318. ;
  319.  
  320.     ENDFUNCTION getopc
  321. ;
  322. ;    SUBTTL    FUNCTION 2 -- GETS THE NUMBER OF OPCODES IN THE OPCODE TABLE
  323. ;    PAGE
  324. ;
  325. ;THIS FUNCTION RETURNS THE NUMBER OF OPCODES IN THE OPCODE TABLE
  326. ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  327. ;
  328. ;THIS FUNCTION IS CALLED AS FOLLOWS:
  329. ;
  330. ;    NUMOPCS();
  331. ;
  332.     
  333.     FUNCTION numopcs
  334.  
  335.     LXI    H,OPTBLL    ;RETURN NUMBER OF OPCODES
  336.     RET
  337.     
  338.     ENDFUNCTION numopcs
  339. ;
  340. ;
  341. ;;
  342. ;    SUBTTL    FUNCTION 3 -- GETS THE ATTRIBUTE BYTE OF AN ASCII CHARACTER
  343. ;    PAGE
  344. ;
  345. ;THIS FUNCTION REMOVES THE PARITY BIT FROM ITS ARGUMENT AND LOOKS IT UP IN
  346. ;A TABLE.  THE TABLE CLASSIFIES THE CHARACTER INTO ONE OF THE FOLLOWING BINS
  347. ;RETURNING THE APPROPRIATE CODE.
  348. ;
  349. ALPHA    EQU    0    ;ALPHABETIC.
  350. NUMERC    EQU    1    ;NUMERIC (0-9).
  351. ENDLIN    EQU    2    ;END OF LINE MARKERS (CR ;).
  352. COMMA    EQU    3    ;FIELD SEPARATORS (,).
  353. OPERAT    EQU    4    ;OPERATORS (* + / - > < = ( )).
  354. BASDES    EQU    5    ;BASE DESIGNATORS (# %).
  355. QUOTE    EQU    6    ;STRING DELIMITERS (' ").
  356. BLANK    EQU    10    ;WHITE SPACE CHARACTER (SPC TAB).
  357. TRASH    EQU    11    ;OTHER CONTROL CHARACTERS.
  358. ;
  359. ;THE FUNCTION IS CALLED AS FOLLOWS:
  360. ;
  361. ;    GETATTR(BYTE);
  362. ;
  363. ;    BYTE    CHARACTER VALUE TO BE LOOKED UP.
  364. ;
  365. BLOCK    MACRO    VALU,SIZE
  366.     REPT SIZE
  367.     DB    VALU
  368.     ENDM
  369.     ENDM
  370. ;
  371. ;
  372.     FUNCTION getattr
  373.  
  374.     CALL    MA1TOH
  375.     ANI    7FH        ;STRIP PARTIY BIT
  376. ;
  377.     LXI     H,ATTTBL    ;INDEX INTO TABLE
  378.     ADD    L
  379.     MOV    L,A
  380.     MVI    A, 0
  381.     ADC    H
  382.     MOV    H,A
  383. ;
  384.     MOV    L,M    ;RETURN RESULT.
  385.     MVI    H, 0
  386.     RET
  387. ;
  388. ;ATTRIBUTE TABLE ITSELF:
  389. ;
  390. ;
  391. ATTTBL:    BLOCK    TRASH,9    ; ^@ THRU ^H
  392.     DB    BLANK    ; TAB
  393.     DB    ENDLIN    ; LF
  394.     DB    TRASH    ; ^K
  395.     DB    TRASH    ; FF
  396.     DB    TRASH    ; CR
  397.     BLOCK    TRASH,18    ; ALL OTHER CONTROL CHARACTERS
  398.     DB    BLANK     ;SPC
  399.     DB    ALPHA    ; !
  400.     DB    QUOTE    ; "
  401.     DB    BASDES    ; #
  402.     DB    OPERAT    ; $
  403.     DB    BASDES    ; %
  404.     DB    ALPHA    ; &
  405.     DB    QUOTE    ; '
  406.     DB    OPERAT    ; (
  407.     DB    OPERAT    ; )
  408.     DB    OPERAT    ; *
  409.     DB    OPERAT    ; +
  410.     DB    COMMA    ; ,
  411.     DB    OPERAT    ; -
  412.     DB    ALPHA    ; .
  413.     DB    OPERAT    ; /
  414.     BLOCK    NUMERC,10    ; 0 THRU 9
  415.     DB    ALPHA    ; :
  416.     DB    ENDLIN    ; ;
  417.     DB    OPERAT    ; <
  418.     DB    OPERAT    ; =
  419.     DB    OPERAT    ; >
  420.     DB    ALPHA    ; ?
  421.     DB    OPERAT    ; @
  422.     BLOCK    ALPHA,26    ; A THRU Z
  423.     DB    ALPHA    ; [
  424.     DB    ALPHA    ; \
  425.     DB    ALPHA    ; ]
  426.     DB    ALPHA    ; ^
  427.     DB    ALPHA    ; _
  428.     DB    ALPHA    ; `
  429.     BLOCK    ALPHA,26    ; SMALL A THRU SMALL Z
  430.     DB    ALPHA    ; {
  431.     DB    ALPHA    ; |
  432.     DB    ALPHA    ; }
  433.     DB    ALPHA    ; ~
  434.     DB    TRASH    ; RUB
  435. ;
  436.     ENDFUNCTION getattr
  437. ;
  438. ;    SUBTTL    FUNCTION 4 -- GETS AN OPERATOR FROM THE OPERATOR TABLE
  439. ;    PAGE
  440. ;
  441. ;THIS FUNCTION GETS OPERATOR NUMBER NUM FROM THE OPERATOR TABLE.  THE FUNCTION
  442. ;RETURNS 0 IF THE OPERATOR WAS NOT FOUND, 1 IF IT WAS.
  443. ;
  444. ;FUNCTION IS CALLED AS FOLLOWS:
  445. ;
  446. ;    GETOPR(NUM,OPRATR,BS,TOKEN);
  447. ;
  448. ;    NUM    CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
  449. ;            0 REPRESENTS THE FIRST ENTRY IN THE TABLE.  THE
  450. ;            TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
  451. ;            OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  452. ;    OPRATR    POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
  453. ;            OPERATOR'S NAME (NULL TERMINATED).
  454. ;    BS    A DUD ARGUMENT TO MAINTAIN COMPATIBILITY WITH GETOPC.
  455. ;    TOKEN    A POINTER TO A CHARACTER THAT WILL RECEIVE THE OPERATOR'S
  456. ;            TOKEN BYTE.
  457. ;
  458. OPRATR    EQU    ARG2
  459. TOKEN    EQU    ARG4
  460. ;
  461. ;
  462. ;BODY OF FUNCTION:
  463. ;
  464. ;
  465.  
  466.     FUNCTION getopr
  467.  
  468.     CALL    ARGHAK
  469.     LDA    NUM    ;GET ENTRY NUMBER.
  470.     CPI    OPRTLL    ;ENTRY IN TABLE?
  471.     LXI    H, 0    ;IF NOT, RETURN 0.
  472.     RNC
  473. ;
  474.     PUSH    B    ;IF SO, WE'RE GOING TO HAVE TO DO SOME
  475.     PUSH    D    ;SERIOUS CRUNCHING.
  476. ;
  477.     MOV    L,A    ;FIND ENTRY BY COMPUTING
  478.     ADD    A    ;(5 * NUM) + TABLE BASE.
  479.     ADD    A
  480.     ADD    L
  481.     MOV    L,A
  482.     LXI     b,OPRTBL
  483.     DAD    B
  484.     MOV    C,L
  485.     MOV    B,H
  486.     INX    H    ;ALSO COMPUTE POSITION OF TOKEN.
  487.     INX    H
  488.     INX    H
  489.     INX    H
  490.     PUSH    H
  491. ;
  492.     MVI    E, 4    ;MOVE OPERATOR NAME TO RETURN AREA.
  493.     LHLD    OPRATR
  494. MOVOPR:    LDAX    B
  495.     CPI    ' '
  496.     JZ    ENDOPR
  497.     INX    B
  498.     MOV    M,A
  499.     INX    H
  500.     DCR    E
  501.     JNZ    MOVOPR
  502. ;
  503. ENDOPR:    MVI    M, 0    ;TERMINATE OPERATOR NAME.
  504. ;
  505.     LHLD    TOKEN    ;MOVE TOKEN TO RETURN AREA.
  506.     POP    B
  507.     LDAX    B
  508.     MOV    M,A
  509. ;
  510.     LXI    H, 1    ;RETURN 1 FOR SUCCESSFUL GET.
  511.     POP    D
  512.     POP    B
  513.     RET
  514. ;
  515. ;THE OPERATOR TABLE ITSELF:
  516. ;
  517. ;    THE OPERATOR TOKENS ARE AS FOLLOWS:
  518. ;
  519. GETKN    EQU    1
  520. NETKN    EQU    2
  521. LETKN    EQU    3
  522. ANDTKN    EQU    4
  523. ORTKN    EQU    5
  524. XORTKN    EQU    6
  525. NOTTKN    EQU    7
  526. MODTKN    EQU    8
  527. SHLTKN    EQU    9
  528. SHRTKN    EQU    10
  529. HITKN    EQU    11
  530. LOWTKN    EQU    12
  531. GTTKN    EQU    '>'
  532. EQTKN    EQU    '='
  533. LTTKN    EQU    '<'
  534. ;
  535. OPRTBL0    equ    $
  536. OPRTBL:    DB    'AND ', ANDTKN
  537.     DB    'EQ  ', EQTKN
  538.     DB    'GE  ', GETKN
  539.     DB    'GT  ', GTTKN
  540.     DB    'HIGH', HITKN
  541.     DB    'LE  ', LETKN
  542.     DB    'LOW ', LOWTKN
  543.     DB    'LT  ', LTTKN
  544.     DB    'MOD ', MODTKN
  545.     DB    'NE  ', NETKN
  546.     DB    'NOT ', NOTTKN
  547.     DB    'OR  ', ORTKN
  548.     DB    'SHL ', SHLTKN
  549.     DB    'SHR ', SHRTKN
  550.     DB    'XOR ', XORTKN
  551. ;
  552. OPRTLL    EQU    ($-OPRTBL0)/5    ;CALCULATE LENGTH OF TABLE.
  553. ;
  554.     ENDFUNCTION getopr
  555. ;
  556. ;SUBTTL    FUNCTION 5 -- GETS THE NUMBER OF OPERATORS IN THE OPERATOR TABLE
  557. ;    PAGE
  558. ;
  559. ;THIS FUNCTION RETURNS THE NUMBER OF OPERATORS IN THE OPERATOR TABLE
  560. ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  561. ;
  562. ;THIS FUNCTION IS CALLED AS FOLLOWS:
  563. ;
  564. ;    NUMOPRS();
  565. ;
  566. ;BODY OF FUNCTION:
  567. ;
  568. ;
  569.     
  570.     FUNCTION numoprs
  571.  
  572. STBOD5:    LXI    H, OPRTLL    ;RETURN NUMBER OF OPCODES.
  573.     RET
  574. ;
  575.  
  576.     ENDFUNCTION numoprs
  577. ;
  578.     END
  579.