www.pudn.com > e047_pcmciatob.zip > pp.abl


""""""""""""""""""""""""""""""""""""""" 
"   PCMCIA PP CPLD ABEL Source Code   " 
"   Version: 1.10                     " 
"   Device: XC9572-TQ100              " 
"   Designer: Hangzhou ZEC            " 
"   Date: 2003/06/27                  " 
""""""""""""""""""""""""""""""""""""""" 
 
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