|
发表于 2007-12-1 09:55:58| 字数 8,115| - 中国–广东–广州–越秀区 电信
|
显示全部楼层
给你一段源码
module PP
title 'PCMCIA Interface & Printed Port'
DECLARATIONS
"---------------------------------------- INPUTS ----------------------------"
"-- PCMCIA Interface Line (See PC Card Standard--Electrical Specification)
[A9..A0] PIN 23, 20, 17, 16, 15, 13, 12, 10, 8, 6;
"Address Line
REGn PIN 9; "Register select & I/O Enable
OEn PIN 27; "Output Enable
CE1n PIN 29; "Card Enable 1
CE2n PIN 28; "Card Enable 2
WEn PIN 18; "Write Enable
IORDn PIN 25; "I/O Read
IOWRn PIN 22; "I/O Write
Reset PIN 14; "Card Reset
"-- Printed Port Simulator Line
[PS7..PS3] PIN 65, 53, 52, 50, 68; "PP STATUS Line: : 379H, 279H, 3BDH
[PIN2..PIN0] PIN 49, 77, 78;
"---------------------------------------- OUTPUTS ---------------------------"
"-- PCMCIA Interface Line (See PC Card Standard--Electrical Specification)
INPACKn PIN 11 ISTYPE 'COM'; "Input Port Acknowledge
[D7..D0] PIN 30, 32, 33, 35, 36, 1, 3, 4 ISTYPE 'COM'; "Data Port
"-- Printed Port Simulator Line
[PB7..PB0] PIN 54, 55, 56, 58, 59, 61, 64, 67 ISTYPE 'REG_D'; "PP Data Port: 378H, 278H, 3BCH
[PC3..PC0] PIN 60, 63, 66, 76 ISTYPE 'REG_D'; "PP Control Line: 37AH, 27AH, 3BEH
PIN_O PIN ISTYPE 'COM';
"---------------------------------------- Node ------------------------------"
IORn NODE ISTYPE 'COM'; "I/O Read Select
IOWn NODE ISTYPE 'COM'; "I/O Write Select
CIS_CS NODE ISTYPE 'COM'; "Card Information Structure Select
sel200 NODE ISTYPE 'COM'; "Configuration Register-0 Select
selDat NODE ISTYPE 'COM'; "PPS Data Port Select
selSts NODE ISTYPE 'COM'; "PPS Status Port Select
selCtl NODE ISTYPE 'COM'; "PPS Control Port Select
DOE NODE ISTYPE 'COM'; "PCMCIA I/F Data Port Output Enable
[CREG7..CREG0] NODE ISTYPE 'REG_D'; "Configuration Register-0
"---------------------------------------- GROUPS ----------------------------"
ADDR = [A9..A0]; "Common Address Groups
IOADDR = [CREG1, CREG0, REGn, A9..A0]; "I/O PPS Address Groups
DAT = [D7..D0]; "PCMCIA Data Port Groups
DAT_L = [D3..D0];
DAT_H = [D7..D3];
PBDat = [PB7..PB0]; "PP Data Port Groups
PCDat = [PC3..PC0]; "PP CTRL Port Groups
PSDat = [PS7..PS3]; "PP STA Port Groups
CREG_bus = [CREG7..CREG0]; "Configuration Register-0 Groups
X = .X.;
EQUATIONS
"----------------------------------------------------------------------------"
PIN_O = PIN2 & PIN1 & PIN0;
"Attribute Memory Handler"
"(See PC Card Standard--Electrical Specification)
CIS_CS = !REGn & CE2n & !CE1n & !OEn & WEn & !A0 ;
"8-Bit Input / Output Handler"
"(See PC Card Standard--Electrical Specification)
IORn = !REGn & CE2n & !CE1n & !IORDn & IOWRn;
IOWn = !REGn & CE2n & !CE1n & IORDn & !IOWRn;
INPACKn = !IORn & !IOWn;
"Card Configuration Registers Handler"
"(See PC Card Standard--Electrical Specification)
sel200 = !REGn & CE2n & !CE1n & OEn & !WEn & A9 & !A8 & !A7 & !A6 & !A5 & !A4 & !A3 & !A2 & !A1 & !A0;
"8-Bit Input / Output PPS Address Decode"
WHEN IOADDR==^H0B78 THEN selDat=1; "PPS 378H
WHEN IOADDR==^H0B79 THEN selSts=1; "PPS 379H
WHEN IOADDR==^H0B7A THEN selCtl=1; "PPS 37AH
WHEN IOADDR==^H1278 THEN selDat=1; "PPS 278H
WHEN IOADDR==^H1279 THEN selSts=1; "PPS 279H
WHEN IOADDR==^H127A THEN selCtl=1; "PPS 27AH
WHEN IOADDR==^H1BBC THEN selDat=1; "PPS 3BCH
WHEN IOADDR==^H1BBD THEN selSts=1; "PPS 3BDH
WHEN IOADDR==^H1BBE THEN selCtl=1; "PPS 3BEH
"Configuration Register-0 Operating"
CREG_bus.D = DAT;
CREG_bus.CLK = !sel200;
CREG_bus.ACLR = Reset;
"PPS Data Port Register Operating"
PBDat.D = DAT;
PBDat.CLK = !(IOWn & selDat);
PBDat.ACLR = Reset;
"PPS STB Register Operating"
PC0.D = !D0;
PC1.D = !D1;
PC2.D = D2;
PC3.D = !D3;
PCDat.CLK = !(IOWn & selCtl);
PCDat.ACLR = Reset;
"PCMCIA I/F Data Port Output Enable Handler"
DOE = CIS_CS # (IORn & selDat) # (IORn & selSts) # (IORn & selCtl);
DAT.OE = DOE;
"Card Information Structure Body"
"(See PC Card Standard--Metaformat Specification)
WHEN ADDR==00*2 THEN DAT=^H01 ; "CISTPL_DEVICE=01H: Device Information Tuple
WHEN ADDR==01*2 THEN DAT=^H03 ; "TPL_LINK=03H: Link to Next Tuple
WHEN ADDR==02*2 THEN DAT=^H00 ; "DEVICE INFO1=00H: No Device in Common Memory
WHEN ADDR==03*2 THEN DAT=^H00 ; "00H: Empty Block of 512 bytes
WHEN ADDR==04*2 THEN DAT=^HFF ; "FFH: End of Device Info Field
WHEN ADDR==05*2 THEN DAT=^H15 ; "CISTPL_VERS_1=15H: Level 1 Version / Product Information Tuple
WHEN ADDR==06*2 THEN DAT=^H17 ; "TPL_LINK=17H: Link to Next Tuple
WHEN ADDR==07*2 THEN DAT=^H04 ; "TPLLV1_MAJOR=04H: Major Revision Number
WHEN ADDR==08*2 THEN DAT=^H01 ; "TPLLV1_MINOR=01H: Minor Revision Number
WHEN ADDR==09*2 THEN DAT=^H2A ; "2AH: '*'
WHEN ADDR==10*2 THEN DAT=^H5A ; "5AH: 'Z'
WHEN ADDR==11*2 THEN DAT=^H45 ; "45H: 'E'
WHEN ADDR==12*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==13*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==14*2 THEN DAT=^H46 ; "46H: 'F'
WHEN ADDR==15*2 THEN DAT=^H4A ; "4AH: 'J'
WHEN ADDR==16*2 THEN DAT=^H42 ; "42H: 'B'
WHEN ADDR==17*2 THEN DAT=^H20 ; "20H: ' '
WHEN ADDR==18*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==19*2 THEN DAT=^H61 ; "61H: 'a'
WHEN ADDR==20*2 THEN DAT=^H72 ; "72H: 'r'
WHEN ADDR==21*2 THEN DAT=^H64 ; "64H: 'd'
WHEN ADDR==22*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==23*2 THEN DAT=^H46 ; "46H: 'J'
WHEN ADDR==24*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==25*2 THEN DAT=^H31 ; "31H: '1'
WHEN ADDR==26*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==27*2 THEN DAT=^H41 ; "41H: 'A'
WHEN ADDR==28*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==29*2 THEN DAT=^HFF ; "FFH: End of List
WHEN ADDR==30*2 THEN DAT=^H1A ; "CISTPL_CONF=1AH: Configuration Tuple
WHEN ADDR==31*2 THEN DAT=^H05 ; "TPL_LINK=05H: Link to Next Tuple
WHEN ADDR==32*2 THEN DAT=^H01 ; "TPCC_SZ=01H: Two bytes of Address
WHEN ADDR==33*2 THEN DAT=^H03 ; "TPCC_LAST=03H: 03(3BCH) is Last entry in Configuration Table
WHEN ADDR==34*2 THEN DAT=^H00 ; "TPCC_RADR=00H: Configuration Register Base Address LSB
WHEN ADDR==35*2 THEN DAT=^H02 ; "TPCC_RADR=20H: Configuration Register Base Address MSB
WHEN ADDR==36*2 THEN DAT=^H01 ; "TPCC_RMSK=01H: One Configuration Register
WHEN ADDR==37*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==38*2 THEN DAT=^H08 ; "TPL_LINK=08H: Link to Next Tuple
WHEN ADDR==39*2 THEN DAT=^HC1 ; "TPCE_INDX=C1H: Default LPT1(01H), Interface Follows
WHEN ADDR==40*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==41*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==42*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==43*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==44*2 THEN DAT=^H78 ; "TPCE_IO=78H: Start of I/O Addr (LSB)
WHEN ADDR==45*2 THEN DAT=^H03 ; "TPCE_IO=03H: Start of I/O Addr (MSB)
WHEN ADDR==46*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3
WHEN ADDR==47*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==48*2 THEN DAT=^H08 ; "TPL_LINK=08H: Link to Next Tuple
WHEN ADDR==49*2 THEN DAT=^HC2 ; "TPCE_INDX=C2H: LPT2(02H), Interface Follows
WHEN ADDR==50*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==51*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==52*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==53*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==54*2 THEN DAT=^H78 ; "TPCE_IO=78H: Start of I/O Addr (LSB)
WHEN ADDR==55*2 THEN DAT=^H02 ; "TPCE_IO=02H: Start of I/O Addr (MSB)
WHEN ADDR==56*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3
WHEN ADDR==57*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==58*2 THEN DAT=^H08 ; "TPL_LINK=05H: Link to Next Tuple
WHEN ADDR==59*2 THEN DAT=^HC3 ; "TPCE_INDX=C3H: LPT3(03H), Interface Follows
WHEN ADDR==60*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==61*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==62*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==63*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==64*2 THEN DAT=^HBC ; "TPCE_IO=BCH: Start of I/O Addr (LSB)
WHEN ADDR==65*2 THEN DAT=^H03 ; "TPCE_IO=03H: Start of I/O Addr (MSB)
WHEN ADDR==66*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3
WHEN ADDR==67*2 THEN DAT=^HFF ; "CISTPL_END=FFH: End of Tuple Chain
"PCMCIA I/F Data Port Output Operating"
WHEN ADDR==^H200 THEN DAT=CREG_bus.Q;
WHEN ADDR==^H378 THEN DAT=PBDat.Q;
WHEN ADDR==^H379 THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H37A THEN DAT_L=PCDat $ ^H0B;
WHEN ADDR==^H278 THEN DAT=PBDat.Q;
WHEN ADDR==^H279 THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H27A THEN DAT_L=PCDat $ ^H0B;
WHEN ADDR==^H3BC THEN DAT=PBDat.Q;
WHEN ADDR==^H3BD THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H3BE THEN DAT_L=PCDat $ ^H0B;
END "End of ABEL Source Code |
|