474 lines
12 KiB
C
474 lines
12 KiB
C
/* i85pst.c */
|
|
|
|
/*
|
|
* (C) Copyright 1989,1990
|
|
* All Rights Reserved
|
|
*
|
|
* Alan R. Baldwin
|
|
* 721 Berkeley St.
|
|
* Kent, Ohio 44240
|
|
*
|
|
* 28-Oct-97 Ported from 8085 to 8051 by John Hartman
|
|
* 30-Jan-98 JLH: add memory-space flags for .AREA
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <setjmp.h>
|
|
#include "asm.h"
|
|
#include "i8051.h"
|
|
|
|
struct mne mne[] = {
|
|
|
|
/* machine */
|
|
|
|
/* system */
|
|
|
|
{ NULL, "CON", S_ATYP, 0, A_CON},
|
|
{ NULL, "OVR", S_ATYP, 0, A_OVR},
|
|
{ NULL, "REL", S_ATYP, 0, A_REL},
|
|
{ NULL, "ABS", S_ATYP, 0, A_ABS|A_OVR},
|
|
{ NULL, "NOPAG", S_ATYP, 0, A_NOPAG},
|
|
{ NULL, "PAG", S_ATYP, 0, A_PAG},
|
|
|
|
{ NULL, "CODE", S_ATYP, 0, A_CODE},
|
|
{ NULL, "DATA", S_ATYP, 0, A_DATA},
|
|
{ NULL, "XDATA", S_ATYP, 0, A_XDATA},
|
|
{ NULL, "BIT", S_ATYP, 0, A_BIT},
|
|
|
|
{ NULL, ".byte", S_BYTE, 0, 0},
|
|
{ NULL, ".db", S_BYTE, 0, 0},
|
|
{ NULL, ".word", S_WORD, 0, 0},
|
|
{ NULL, ".dw", S_WORD, 0, 0},
|
|
{ NULL, ".ascii", S_ASCII, 0, 0},
|
|
{ NULL, ".asciz", S_ASCIZ, 0, 0},
|
|
{ NULL, ".blkb", S_BLK, 0, 1},
|
|
{ NULL, ".ds", S_BLK, 0, 1},
|
|
{ NULL, ".blkw", S_BLK, 0, 2},
|
|
{ NULL, ".page", S_PAGE, 0, 0},
|
|
{ NULL, ".title", S_TITLE, 0, 0},
|
|
{ NULL, ".sbttl", S_SBTL, 0, 0},
|
|
{ NULL, ".globl", S_GLOBL, 0, 0},
|
|
{ NULL, ".area", S_DAREA, 0, 0},
|
|
{ NULL, ".even", S_EVEN, 0, 0},
|
|
{ NULL, ".odd", S_ODD, 0, 0},
|
|
{ NULL, ".if", S_IF, 0, 0},
|
|
{ NULL, ".else", S_ELSE, 0, 0},
|
|
{ NULL, ".endif", S_ENDIF, 0, 0},
|
|
{ NULL, ".include", S_INCL, 0, 0},
|
|
{ NULL, ".radix", S_RADIX, 0, 0},
|
|
{ NULL, ".org", S_ORG, 0, 0},
|
|
{ NULL, ".module", S_MODUL, 0, 0},
|
|
{ NULL, ".ascis", S_ASCIS, 0, 0},
|
|
{ NULL, ".flat24", S_FLAT24, 0, 0},
|
|
|
|
/* 8051 */
|
|
|
|
{ NULL, "a", S_A, 0, A},
|
|
{ NULL, "ab", S_AB, 0, 0},
|
|
{ NULL, "dptr", S_DPTR, 0, DPTR},
|
|
{ NULL, "pc", S_PC, 0, PC},
|
|
{ NULL, "r0", S_REG, 0, R0},
|
|
{ NULL, "r1", S_REG, 0, R1},
|
|
{ NULL, "r2", S_REG, 0, R2},
|
|
{ NULL, "r3", S_REG, 0, R3},
|
|
{ NULL, "r4", S_REG, 0, R4},
|
|
{ NULL, "r5", S_REG, 0, R5},
|
|
{ NULL, "r6", S_REG, 0, R6},
|
|
{ NULL, "r7", S_REG, 0, R7},
|
|
|
|
{ NULL, "nop", S_INH, 0, 0x00},
|
|
{ NULL, "ret", S_INH, 0, 0x22},
|
|
{ NULL, "reti", S_INH, 0, 0x32},
|
|
|
|
{ NULL, "ajmp", S_JMP11, 0, 0x01},
|
|
{ NULL, "acall", S_JMP11, 0, 0x11},
|
|
{ NULL, "ljmp", S_JMP16, 0, 0x02},
|
|
{ NULL, "lcall", S_JMP16, 0, 0x12},
|
|
|
|
{ NULL, "rr", S_ACC, 0, 0x03},
|
|
{ NULL, "rrc", S_ACC, 0, 0x13},
|
|
{ NULL, "rl", S_ACC, 0, 0x23},
|
|
{ NULL, "rlc", S_ACC, 0, 0x33},
|
|
{ NULL, "swap", S_ACC, 0, 0xC4},
|
|
{ NULL, "da", S_ACC, 0, 0xD4},
|
|
|
|
{ NULL, "inc", S_TYP1, 0, 0x00},
|
|
{ NULL, "dec", S_TYP1, 0, 0x10},
|
|
|
|
{ NULL, "add", S_TYP2, 0, 0x20},
|
|
{ NULL, "addc", S_TYP2, 0, 0x30},
|
|
{ NULL, "subb", S_TYP2, 0, 0x90},
|
|
|
|
{ NULL, "orl", S_TYP3, 0, 0x40},
|
|
{ NULL, "anl", S_TYP3, 0, 0x50},
|
|
{ NULL, "xrl", S_TYP3, 0, 0x60},
|
|
|
|
{ NULL, "xch", S_TYP4, 0, 0xC0},
|
|
|
|
{ NULL, "mov", S_MOV, 0, 0x00},
|
|
|
|
{ NULL, "jbc", S_BITBR, 0, 0x10},
|
|
{ NULL, "jb", S_BITBR, 0, 0x20},
|
|
{ NULL, "jnb", S_BITBR, 0, 0x30},
|
|
|
|
{ NULL, "jc", S_BR, 0, 0x40},
|
|
{ NULL, "jnc", S_BR, 0, 0x50},
|
|
{ NULL, "jz", S_BR, 0, 0x60},
|
|
{ NULL, "jnz", S_BR, 0, 0x70},
|
|
{ NULL, "sjmp", S_BR, 0, 0x80},
|
|
|
|
{ NULL, "cjne", S_CJNE, 0, 0xB0},
|
|
{ NULL, "djnz", S_DJNZ, 0, 0xD0},
|
|
{ NULL, "jmp", S_JMP, 0, 0x73},
|
|
{ NULL, "movc", S_MOVC, 0, 0x83},
|
|
{ NULL, "movx", S_MOVX, 0, 0x00},
|
|
{ NULL, "div", S_AB, 0, 0x84},
|
|
{ NULL, "mul", S_AB, 0, 0xA4},
|
|
{ NULL, "clr", S_ACBIT, 0, 0xC2},
|
|
{ NULL, "cpl", S_ACBIT, 0, 0xB2},
|
|
{ NULL, "setb", S_SETB, 0, 0xD2},
|
|
{ NULL, "push", S_DIRECT, 0, 0xC0},
|
|
{ NULL, "pop", S_DIRECT, 0, 0xD0},
|
|
{ NULL, "xchd", S_XCHD, S_END, 0xD6}
|
|
};
|
|
|
|
struct PreDef preDef[] = {
|
|
{"AC", 0x00D6},
|
|
{"ac", 0x00D6},
|
|
{"A", 0x00D6},
|
|
{"a", 0x00D6},
|
|
{"ACC", 0x00E0},
|
|
{"acc", 0x00E0},
|
|
{"ACC.0", 0x00E0},
|
|
{"ACC.1", 0x00E1},
|
|
{"ACC.2", 0x00E2},
|
|
{"ACC.3", 0x00E3},
|
|
{"ACC.4", 0x00E4},
|
|
{"ACC.5", 0x00E5},
|
|
{"ACC.6", 0x00E6},
|
|
{"ACC.7", 0x00E7},
|
|
{"acc.0", 0x00E0},
|
|
{"acc.1", 0x00E1},
|
|
{"acc.2", 0x00E2},
|
|
{"acc.3", 0x00E3},
|
|
{"acc.4", 0x00E4},
|
|
{"acc.5", 0x00E5},
|
|
{"acc.6", 0x00E6},
|
|
{"acc.7", 0x00E7},
|
|
{"B", 0x00F0},
|
|
{"B.0", 0x00F0},
|
|
{"B.1", 0x00F1},
|
|
{"B.2", 0x00F2},
|
|
{"B.3", 0x00F3},
|
|
{"B.4", 0x00F4},
|
|
{"B.5", 0x00F5},
|
|
{"B.6", 0x00F6},
|
|
{"B.7", 0x00F7},
|
|
{"b", 0x00F0},
|
|
{"b.0", 0x00F0},
|
|
{"b.1", 0x00F1},
|
|
{"b.2", 0x00F2},
|
|
{"b.3", 0x00F3},
|
|
{"b.4", 0x00F4},
|
|
{"b.5", 0x00F5},
|
|
{"b.6", 0x00F6},
|
|
{"b.7", 0x00F7},
|
|
{"CPRL2", 0x00C8},
|
|
{"cprl2", 0x00C8},
|
|
{"CT2", 0x00C9},
|
|
{"ct2", 0x00C9},
|
|
{"CY", 0x00D7},
|
|
{"cy", 0x00D7},
|
|
{"DPH", 0x0083},
|
|
{"DPL", 0x0082},
|
|
{"dph", 0x0083},
|
|
{"dpl", 0x0082},
|
|
{"EA", 0x00AF},
|
|
{"ea", 0x00AF},
|
|
{"ES", 0x00AC},
|
|
{"es", 0x00AC},
|
|
{"ET0", 0x00A9},
|
|
{"et0", 0x00A9},
|
|
{"ET1", 0x00AB},
|
|
{"et1", 0x00AB},
|
|
{"ET2", 0x00AD},
|
|
{"et2", 0x00AD},
|
|
{"EX0", 0x00A8},
|
|
{"ex0", 0x00A8},
|
|
{"EX1", 0x00AA},
|
|
{"ex1", 0x00AA},
|
|
{"EXEN2", 0x00CB},
|
|
{"exen2", 0x00CB},
|
|
{"EXF2", 0x00CE},
|
|
{"exf2", 0x00CE},
|
|
{"F0", 0x00D5},
|
|
{"f0", 0x00D5},
|
|
{"IE", 0x00A8},
|
|
{"IE.0", 0x00A8},
|
|
{"IE.1", 0x00A9},
|
|
{"IE.2", 0x00AA},
|
|
{"IE.3", 0x00AB},
|
|
{"IE.4", 0x00AC},
|
|
{"IE.5", 0x00AD},
|
|
{"IE.7", 0x00AF},
|
|
{"ie", 0x00A8},
|
|
{"ie.0", 0x00A8},
|
|
{"ie.1", 0x00A9},
|
|
{"ie.2", 0x00AA},
|
|
{"ie.3", 0x00AB},
|
|
{"ie.4", 0x00AC},
|
|
{"ie.5", 0x00AD},
|
|
{"ie.7", 0x00AF},
|
|
{"IE0", 0x0089},
|
|
{"ie0", 0x0089},
|
|
{"IE1", 0x008B},
|
|
{"ie1", 0x008B},
|
|
{"INT0", 0x00B2},
|
|
{"int0", 0x00B2},
|
|
{"INT1", 0x00B3},
|
|
{"int1", 0x00B3},
|
|
{"IP", 0x00B8},
|
|
{"IP.0", 0x00B8},
|
|
{"IP.1", 0x00B9},
|
|
{"IP.2", 0x00BA},
|
|
{"IP.3", 0x00BB},
|
|
{"IP.4", 0x00BC},
|
|
{"IP.5", 0x00BD},
|
|
{"ip", 0x00B8},
|
|
{"ip.0", 0x00B8},
|
|
{"ip.1", 0x00B9},
|
|
{"ip.2", 0x00BA},
|
|
{"ip.3", 0x00BB},
|
|
{"ip.4", 0x00BC},
|
|
{"ip.5", 0x00BD},
|
|
{"IT0", 0x0088},
|
|
{"it0", 0x0088},
|
|
{"IT1", 0x008A},
|
|
{"it1", 0x008A},
|
|
{"OV", 0x00D2},
|
|
{"ov", 0x00D2},
|
|
{"P", 0x00D0},
|
|
{"p", 0x00D0},
|
|
{"P0", 0x0080},
|
|
{"P0.0", 0x0080},
|
|
{"P0.1", 0x0081},
|
|
{"P0.2", 0x0082},
|
|
{"P0.3", 0x0083},
|
|
{"P0.4", 0x0084},
|
|
{"P0.5", 0x0085},
|
|
{"P0.6", 0x0086},
|
|
{"P0.7", 0x0087},
|
|
{"p0", 0x0080},
|
|
{"p0.0", 0x0080},
|
|
{"p0.1", 0x0081},
|
|
{"p0.2", 0x0082},
|
|
{"p0.3", 0x0083},
|
|
{"p0.4", 0x0084},
|
|
{"p0.5", 0x0085},
|
|
{"p0.6", 0x0086},
|
|
{"p0.7", 0x0087},
|
|
{"P1", 0x0090},
|
|
{"P1.0", 0x0090},
|
|
{"P1.1", 0x0091},
|
|
{"P1.2", 0x0092},
|
|
{"P1.3", 0x0093},
|
|
{"P1.4", 0x0094},
|
|
{"P1.5", 0x0095},
|
|
{"P1.6", 0x0096},
|
|
{"P1.7", 0x0097},
|
|
{"p1", 0x0090},
|
|
{"p1.0", 0x0090},
|
|
{"p1.1", 0x0091},
|
|
{"p1.2", 0x0092},
|
|
{"p1.3", 0x0093},
|
|
{"p1.4", 0x0094},
|
|
{"p1.5", 0x0095},
|
|
{"p1.6", 0x0096},
|
|
{"p1.7", 0x0097},
|
|
{"P2", 0x00A0},
|
|
{"P2.0", 0x00A0},
|
|
{"P2.1", 0x00A1},
|
|
{"P2.2", 0x00A2},
|
|
{"P2.3", 0x00A3},
|
|
{"P2.4", 0x00A4},
|
|
{"P2.5", 0x00A5},
|
|
{"P2.6", 0x00A6},
|
|
{"P2.7", 0x00A7},
|
|
{"p2", 0x00A0},
|
|
{"p2.0", 0x00A0},
|
|
{"p2.1", 0x00A1},
|
|
{"p2.2", 0x00A2},
|
|
{"p2.3", 0x00A3},
|
|
{"p2.4", 0x00A4},
|
|
{"p2.5", 0x00A5},
|
|
{"p2.6", 0x00A6},
|
|
{"p2.7", 0x00A7},
|
|
{"P3", 0x00B0},
|
|
{"P3.0", 0x00B0},
|
|
{"P3.1", 0x00B1},
|
|
{"P3.2", 0x00B2},
|
|
{"P3.3", 0x00B3},
|
|
{"P3.4", 0x00B4},
|
|
{"P3.5", 0x00B5},
|
|
{"P3.6", 0x00B6},
|
|
{"P3.7", 0x00B7},
|
|
{"p3", 0x00B0},
|
|
{"p3.0", 0x00B0},
|
|
{"p3.1", 0x00B1},
|
|
{"p3.2", 0x00B2},
|
|
{"p3.3", 0x00B3},
|
|
{"p3.4", 0x00B4},
|
|
{"p3.5", 0x00B5},
|
|
{"p3.6", 0x00B6},
|
|
{"p3.7", 0x00B7},
|
|
{"PCON", 0x0087},
|
|
{"pcon", 0x0087},
|
|
{"PS", 0x00BC},
|
|
{"ps", 0x00BC},
|
|
{"PSW", 0x00D0},
|
|
{"PSW.0", 0x00D0},
|
|
{"PSW.1", 0x00D1},
|
|
{"PSW.2", 0x00D2},
|
|
{"PSW.3", 0x00D3},
|
|
{"PSW.4", 0x00D4},
|
|
{"PSW.5", 0x00D5},
|
|
{"PSW.6", 0x00D6},
|
|
{"PSW.7", 0x00D7},
|
|
{"psw", 0x00D0},
|
|
{"psw.0", 0x00D0},
|
|
{"psw.1", 0x00D1},
|
|
{"psw.2", 0x00D2},
|
|
{"psw.3", 0x00D3},
|
|
{"psw.4", 0x00D4},
|
|
{"psw.5", 0x00D5},
|
|
{"psw.6", 0x00D6},
|
|
{"psw.7", 0x00D7},
|
|
{"PT0", 0x00B9},
|
|
{"pt0", 0x00B9},
|
|
{"PT1", 0x00BB},
|
|
{"pt1", 0x00BB},
|
|
{"PT2", 0x00BD},
|
|
{"pt2", 0x00BD},
|
|
{"PX0", 0x00B8},
|
|
{"px0", 0x00B8},
|
|
{"PX1", 0x00BA},
|
|
{"px1", 0x00BA},
|
|
{"RB8", 0x009A},
|
|
{"rb8", 0x009A},
|
|
{"RCAP2H", 0x00CB},
|
|
{"rcap2h", 0x00CB},
|
|
{"RCAP2L", 0x00CA},
|
|
{"rcap2l", 0x00CA},
|
|
{"RCLK", 0x00CD},
|
|
{"rclk", 0x00CD},
|
|
{"REN", 0x009C},
|
|
{"ren", 0x009C},
|
|
{"RI", 0x0098},
|
|
{"ri", 0x0098},
|
|
{"RS0", 0x00D3},
|
|
{"rs0", 0x00D3},
|
|
{"RS1", 0x00D4},
|
|
{"rs1", 0x00D4},
|
|
{"rxd", 0x00B0},
|
|
{"RXD", 0x00B0},
|
|
{"SBUF", 0x0099},
|
|
{"sbuf", 0x0099},
|
|
{"SCON", 0x0098},
|
|
{"SCON.0", 0x0098},
|
|
{"SCON.1", 0x0099},
|
|
{"SCON.2", 0x009A},
|
|
{"SCON.3", 0x009B},
|
|
{"SCON.4", 0x009C},
|
|
{"SCON.5", 0x009D},
|
|
{"SCON.6", 0x009E},
|
|
{"SCON.7", 0x009F},
|
|
{"scon", 0x0098},
|
|
{"scon.0", 0x0098},
|
|
{"scon.1", 0x0099},
|
|
{"scon.2", 0x009A},
|
|
{"scon.3", 0x009B},
|
|
{"scon.4", 0x009C},
|
|
{"scon.5", 0x009D},
|
|
{"scon.6", 0x009E},
|
|
{"scon.7", 0x009F},
|
|
{"SM0", 0x009F},
|
|
{"sm0", 0x009F},
|
|
{"SM1", 0x009E},
|
|
{"sm1", 0x009E},
|
|
{"SM2", 0x009D},
|
|
{"sm2", 0x009D},
|
|
{"SP", 0x0081},
|
|
{"sp", 0x0081},
|
|
{"T2CON", 0x00C8},
|
|
{"T2CON.0",0x00C8},
|
|
{"T2CON.1",0x00C9},
|
|
{"T2CON.2",0x00CA},
|
|
{"T2CON.3",0x00CB},
|
|
{"T2CON.4",0x00CC},
|
|
{"T2CON.5",0x00CD},
|
|
{"T2CON.6",0x00CE},
|
|
{"T2CON.7",0x00CF},
|
|
{"t2con", 0x00C8},
|
|
{"t2con.0",0x00C8},
|
|
{"t2con.1",0x00C9},
|
|
{"t2con.2",0x00CA},
|
|
{"t2con.3",0x00CB},
|
|
{"t2con.4",0x00CC},
|
|
{"t2con.5",0x00CD},
|
|
{"t2con.6",0x00CE},
|
|
{"t2con.7",0x00CF},
|
|
{"TB8", 0x009B},
|
|
{"tb8", 0x009B},
|
|
{"TCLK", 0x00CC},
|
|
{"tclk", 0x00CC},
|
|
{"TCON", 0x0088},
|
|
{"TCON.0", 0x0088},
|
|
{"TCON.1", 0x0089},
|
|
{"TCON.2", 0x008A},
|
|
{"TCON.3", 0x008B},
|
|
{"TCON.4", 0x008C},
|
|
{"TCON.5", 0x008D},
|
|
{"TCON.6", 0x008E},
|
|
{"TCON.7", 0x008F},
|
|
{"tcon", 0x0088},
|
|
{"tcon.0", 0x0088},
|
|
{"tcon.1", 0x0089},
|
|
{"tcon.2", 0x008A},
|
|
{"tcon.3", 0x008B},
|
|
{"tcon.4", 0x008C},
|
|
{"tcon.5", 0x008D},
|
|
{"tcon.6", 0x008E},
|
|
{"tcon.7", 0x008F},
|
|
{"TF0", 0x008D},
|
|
{"tf0", 0x008D},
|
|
{"TF1", 0x008F},
|
|
{"tf1", 0x008F},
|
|
{"TF2", 0x00CF},
|
|
{"tf2", 0x00CF},
|
|
{"TH0", 0x008C},
|
|
{"th0", 0x008C},
|
|
{"TH1", 0x008D},
|
|
{"th1", 0x008D},
|
|
{"TH2", 0x00CD},
|
|
{"th2", 0x00CD},
|
|
{"TI", 0x0099},
|
|
{"ti", 0x0099},
|
|
{"TL0", 0x008A},
|
|
{"tl0", 0x008A},
|
|
{"TL1", 0x008B},
|
|
{"tl1", 0x008B},
|
|
{"TL2", 0x00CC},
|
|
{"tl2", 0x00CC},
|
|
{"TMOD", 0x0089},
|
|
{"tmod", 0x0089},
|
|
{"TR0", 0x008C},
|
|
{"tr0", 0x008C},
|
|
{"TR1", 0x008E},
|
|
{"tr1", 0x008E},
|
|
{"TR2", 0x00CA},
|
|
{"tr2", 0x00CA},
|
|
{"TXD", 0x00B1},
|
|
{"txd", 0x00B1},
|
|
{"", 0x0000},
|
|
};
|