Google 網上論壇首頁
說明 | 登入
徵文
目前本群組有太多主題設為優先顯示。 要優先顯示這個主題,請將其他主題的這個選項取消。
在處理您的要求時發生錯誤。 請再試一次。
標幟
  4 個訊息 - 全部摺疊
您要留言的群組是 Usenet 群組。在此群組留言,網際網路上的任何使用者將可以看到您的電郵地址。
您的回覆郵件尚未寄出。
您已成功留言
燕南  
檢視個人資料
 更多選項 7月19日, 下午1時07分
寄件者: 燕南 <ezfo...@gmail.com>
日期: Fri, 18 Jul 2008 22:07:36 -0700 (PDT)
當地時間: 2008年7月19日(星期六) 下午1時07分
主旨: 徵文
徵文,以純 ansiForth 撰寫下列裝置!

<a>NorFlash ROM

<b>NandFlash ROM

<c>UART

<d>PWM

<e>Timer

<f>AD

<g>PS/2 KEYBoard

<h>FAT32 Disk File

<i>MAC

<j>USB


    回覆    回覆作者    轉寄  
您必須先登入才能張貼訊息。
若要張貼訊息,您必須先加入此群組
請在留言之前更新您訂閱設定網頁上的暱稱。
您沒有留言所需的權限。
燕南  
檢視個人資料
 更多選項 7月21日, 下午1時20分
寄件者: 燕南 <ezfo...@gmail.com>
日期: Sun, 20 Jul 2008 22:20:18 -0700 (PDT)
當地時間: 2008年7月21日(星期一) 下午1時20分
主旨: Re: 徵文
NorFlash 以 AMIC A29L040 為例如下:

\ [Code Begin]
\ NorFlash.F
-------------------------------------------------------------------
\ 目的:純forth code方便移植,及插入模擬硬體動作,不計效率;降低初者ReWork的負擔
\ 狀態:待除錯 20080721

\ true -1
\ false 0

\ Nrf_Variable.f
---------------------------------------------------------------
        defer pc!       ' c!   is pc!   \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        defer pc@       ' c@   is pc@ \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
\ 共用變數
        0 variable Nrf_Adr
        0 variable Nrf_Data
        0 variable Nrf_Badr
        0 variable Nrf_Buf
        0 variable Nrf_Flag
        0 variable Nrf_Temp
        0 variable Nrf_SR
        0x40 constant bit6
        0x20 constant bit5
        0x08 constant bit3

\ Nrf_AMIC_A29L040.f
-----------------------------------------------------------
\  AMIC A29L040
        0x555   constant Nrf_Command0_Adr
        0xAA    constant Nrf_Command0_Data
        0x2AA   constant Nrf_Command1_Adr
        0x55    constant Nrf_Command1_Data
        0x555   constant Nrf_CCommand2_Adr
        0xAA    constant Nrf_AutoSelectCommand
        0x90    constant Nrf_ProgramPageCommand
        0x80    constant Nrf_EraseCommand
        0x555   constant Nrf_Command3_Adr
        0xAA    constant Nrf_Command3_Data
        0x2AA   constant Nrf_Command4_Adr
        0x55    constant Nrf_Command4_Data
        0x30    constant Nrf_EraseSectorCommand
        0xF0    constant Nrf_ResetCommand

\ Nrf.f
------------------------------------------------------------------------
        \ fload Nrf_Variable.f
        \ folad Nrf_AMIC_A29L040.f
\ 程序定義

: Polling ( adr --- false|True )
  Nrf_Adr @ pc@ Nrf_SR c!
        begin
                0 Nrf_Flag !
                Nrf_Adr @ pc@ Nrf_Temp c!
                Nrf_Temp c@ Nrf_SR c@ and  bit6 and 0= if -1 Nrf_Flag ! leave then
                Nrf_Temp c@ Nrf_SR c!
                Nrf_Temp c@ bit5 and
        until

        Nrf_Flag @
        if
                -1
        else
        Nrf_Adr @ pc@ Nrf_Adr @ pc@ and 0x40 and =
                if
                        -1
                else
                        Nrf_ResetCommand Nrf_Badr @ + pc!
                        0
                then
        then
;

: EraseSector( adr base_adr --- false|True )
        Nrf_Command0_Data               Nrf_Command0_Adr Nrf_Badr @ + pc!
        Nrf_Command1_Data               Nrf_Command1_Adr Nrf_Badr @ + pc!
        Nrf_EraseCommand                Nrf_Command2_Adr Nrf_Badr @ + pc!
        Nrf_Command3_Data               Nrf_Command3_Adr Nrf_Badr @ + pc!
        Nrf_Command4_Data               Nrf_Command4_Adr Nrf_Badr @ + pc!
        Nrf_EraseSectorCommand  Nrf_Adr                  Nrf_Badr @ + pc!
        begin
                Nrf_Adr @ Nrf_Badr @ + pc@ bit3 and
        until
        Nrf_Adr @ Nrf_Badr @ + Polling
        ;

: Nrf_ProgramPage ( Sz buf adr base_adr --- false|True )
        Nrf_Badr !
        Nrf_Adr !
        Nrf_Buf !
        0 do
                Nrf_Command0_Data               Nrf_Command0_Adr Nrf_Badr @ + pc!
                Nrf_Command1_Data               Nrf_Command1_Adr Nrf_Badr @ + pc!
                Nrf_ProgramPageCommand  Nrf_Command2_Adr Nrf_Badr @ + pc!
        Nrf_Buf @ c@  Nrf_Adr @ Nrf_Badr @ + pc!
        Nrf_Adr @ Nrf_Badr @ + Polling if
                Nrf_Buf @ 1 + Nrf_Buf !
                Nrf_Adr @ 1 + Nrf_Adr !
                -1 Nrf_Flag !
        else
                        0 Nrf_Flag !
                        leave
        then
    loop
    Nrf_Flag @
        ;

: Nrf_AutoSelect ( Data SA base_adr --- )
        Nrf_Badr !
        Nrf_Adr !
        Nrf_Data !
        Nrf_Command0_Data               Nrf_Command0_Adr Nrf_Badr @ + pc!
        Nrf_Command1_Data               Nrf_Command1_Adr Nrf_Badr @ + pc!
        Nrf_AutoSelectCommand   Nrf_Command2_Adr Nrf_Badr @ + pc!
        Nrf_Adr Nrf_Badr @ + pc@ Nrf_Data pc!
        Nrf_ResetCommand Nrf_Badr @ + pc!
        ;
\ [code End]

在透過修改 pc! 跟pc@的處理程序,我們可以在Win32forth 上,建立模擬硬體動作程序,並移植到 實際硬體上!

在此拋磚引玉,同好努力! (敬請改良跟除錯...........)


    回覆    回覆作者    轉寄  
您必須先登入才能張貼訊息。
若要張貼訊息,您必須先加入此群組
請在留言之前更新您訂閱設定網頁上的暱稱。
您沒有留言所需的權限。
燕南  
檢視個人資料
 更多選項 7月21日, 下午11時00分
寄件者: 燕南 <ezfo...@gmail.com>
日期: Mon, 21 Jul 2008 08:00:05 -0700 (PDT)
當地時間: 2008年7月21日(星期一) 下午11時00分
主旨: Re: 徵文
Nand Flash 以hynix_Hy27ss(08/16)121M為例

\ Ndf_Variable.f
---------------------------------------------------------------
\ System共用
        \ true -1
        \ false 0
        defer pc!       ' c!   is pc!   \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        defer pc@       ' c@   is pc@   \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        defer pw!       ' w!   is pw!   \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        defer pw@       ' w@   is pw@   \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        0x01    constant bit0
\ Ndf共用變數
        0 variable Ndf_Badr
        0 variable Ndf_Buf
        0 variable Ndf_Flag
        0 variable Ndf_Len
        0 variable Ndf_Adr0
        0 variable Ndf_Adr1
        0 variable Ndf_Adr2
        0 variable Ndf_Adr3

\ Ndf_hynix_Hy27ss(08/16)121M.f
-----------------------------------------------------------
\  hynix Hy27ss(08/16)121M
        \ Adr
        0x00    constant Ndf_Data_Adr
        0x01    constant Ndf_Command_Adr
        0x02    constant Ndf_Address_Adr
        \ code
        0x00    constant Ndf_Area_A_Code
        0x01    constant Ndf_Area_B_Code
        0x50    constant Ndf_Area_C_Code
        0x90    constant Ndf_Electronic_Signature_Code
        0x70    constant Ndf_Status_Register_Code
        0x80    constant Ndf_Page_Program0_Code
        0x80    constant Ndf_Page_Program1_Code
        0x00    constant Ndf_Copy_Back_Program0_Code
        0x8A    constant Ndf_Copy_Back_Program1_Code
        0x10    constant Ndf_Copy_Back_Program2_Code
        0x60    constant Ndf_Block_Erase0_Code
        0xD0    constant Ndf_Block_Erase1_Code
        0xFF    constant Ndf_Reset_Code
        \ time
        0xFF    constant Ndf_Wait_Time
        0xFF    constant Ndf_Page_Program_Wait_Time
        0xFF    constant Ndf_Block_Erase_Wait_Time
        0xFF    constant Ndf_Copy_Back_Program_Waite_Time
\ Ndf.f
------------------------------------------------------------------------
        \ fload Ndf_Variable.f
        \ folad Ndf_hynix_Hy27ss(08/16)121M.f
\ 程序定義

: Ndf_Wait( --- )
        Ndf_Wait_Time 0 do loop
        ;

: Ndf_Page_Program_Wait
        Ndf_Page_Program_Wait_Time 0 do loop
        ;

: Ndf_Block_Erase_Wait
        Ndf_Block_Erase_Wait_Time 0 do loop
        ;

: Ndf_Copy_Back_Program_Waite
        Ndf_Copy_Back_Program_Waite_Time 0 do loop
        ;

: Ndf_Adr_resolution ( Adr --- )
        >r
        r@                        0x7f and Ndf_Adr0 !
        r@ 8  r-shift 0x7f and Ndf_Adr1 !
        r@ 16 r-shift 0x7f and Ndf_Adr2 !
        r> 24 r-shift 0x7f and Ndf_Adr3 !
        ;

        : Ndf_Check ( Badr --- true|false )
                Ndf_Badr !
                Ndf_Status_Register_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                Nand_Data_Adr Ndf_Badr @ + pw@ bit0 and 0=
                if
                        -1
                else
                        0
                then

                \  Ndf_SR ::=
                \       Bit NAME Logic Level Definition
                \       SR7 Write Protection
                \               '1' Not Protected
                \               '0' Protected
                \       SR6 Program/Erase/Read Controller
                \               '1' P/E/R C Inactive, device ready
                \               '0' P/E/R C active, device busy
                \       SR5 Program/ Erase/Read Controller
                \               '1' P/E/R C inactive, device ready
                \               '0' P/E/R C active, device busy
                \       SR4, SR3, SR2 Reserved Don't Care
                \       SR0 Generic Error
                \               '1' Error - Operation failed
                \               '0' No Error - Operation successful
                ;

        : Ndf_Reset     ( Badr --- )
                Ndf_Badr !
                Ndf_Reset_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                ;

        : Ndf_Block_Erase ( adr Badr --- true|false)
                Ndf_Badr !
                Ndf_Block_Erase0_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                Ndf_Block_Erase1_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                Ndf_Block_Erase_Wait
                Ndf_Badr @ Ndf_Check
                ;

        : Ndf_Copy_Back_Program ( Dadr Sadr Badr --- true|false)
                Ndf_Badr !

                Ndf_Copy_Back_Program0_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                Ndf_Copy_Back_Program1_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                Ndf_Copy_Back_Program2_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                Ndf_Copy_Back_Program_Waite
                Ndf_Badr @ Ndf_Check
                ;

        : Ndf_Page_Program ( dadr sadr len  Badr --- true|false )
                Ndf_Badr !
                Ndf_len !
                Ndf_Buf !

                Ndf_Page_Program0_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                        Ndf_Len @ 0 do
                                Ndf_Buf @ w@ Nand_Data_Adr Ndf_Badr @ + pc!
                                Ndf_Buf @ 1 + Ndf_Buf !
                                Ndf_Waite
                        loop
                Ndf_Page_Program1_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                Ndf_Page_Program_Waite
                Ndf_Badr @ Ndf_Check
                ;

        : Ndf_Random_Read ( adr Badr --- data )
                Ndf_Badr !
                Ndf_Area_A_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                        Nand_Data_Adr Ndf_Badr @ + pw@
                        Ndf_Waite
                ;

        : Ndf_Read_Area_A (  sadr Dadr  len Badr --- )
                Ndf_Badr !
                Ndf_len !
                Ndf_Buf !

                Ndf_Area_A_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                Ndf_len @ 0 do
                        Nand_Data_Adr Ndf_Badr @ + pw@ Ndf_Buf @ pw!
                        Ndf_Buf @ 1 + Ndf_Buf !
                        Ndf_Waite
                loop
                ;

        : Ndf_Read_Area_C (  sadr Dadr  len Badr --- )
                Ndf_Badr !
                Ndf_len !
                Ndf_Buf !

                Ndf_Area_C_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                        Ndf_Adr_resolution
                                Ndf_Adr0 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr1 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr2 Nand_Address_Adr Ndf_Badr @ + pc!
                                Ndf_Adr3 Nand_Address_Adr Ndf_Badr @ + pc!
                        Ndf_Waite
                Ndf_len @ 0 do
                        Nand_Data_Adr Ndf_Badr @ + pw@ Ndf_Buf @ pw!
                        Ndf_Buf @ 1 + Ndf_Buf !
                        Ndf_Waite
                loop
                ;

        : Ndf_Read_Electronic_Signature ( Badr --- Manufacture_Code
Device_Code )
                Ndf_Badr !
                Ndf_Electronic_Signature_Code Ndf_Command_Adr Ndf_Badr @ + pc!
                Nand_Data_Adr Ndf_Badr @ + pw@
                Nand_Data_Adr Ndf_Badr @ + pw@
                ;


    回覆    回覆作者    轉寄  
您必須先登入才能張貼訊息。
若要張貼訊息,您必須先加入此群組
請在留言之前更新您訂閱設定網頁上的暱稱。
您沒有留言所需的權限。
燕南  
檢視個人資料
 更多選項 7月22日, 上午12時12分
寄件者: 燕南 <ezfo...@gmail.com>
日期: Mon, 21 Jul 2008 09:12:12 -0700 (PDT)
當地時間: 2008年7月22日(星期二) 上午12時12分
主旨: Re: 徵文
Timer1 以 Nxp LPC2210 Timer1為例

\ defer.f
---------------------------------------------------------------
        defer p!        ' !   is p!     \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
        defer p@        ' @   is p@     \ 當I/O 非 memory MAP or 模擬晶片動作時 修改

\ VIC_Nxp2210.f
-----------------------------------------------------------
        0xFFFFF000 constant VICIRQStatus
        0xFFFFF004 constant VICFIQStatus
        0xFFFFF008 constant VICRawIntr
        0xFFFFF00C constant VICIntSelect
        0xFFFFF010 constant VICIntEnable
        0xFFFFF014 constant VICIntEnClr
        0xFFFFF018 constant VICSoftInt
        0xFFFFF01C constant VICSoftIntClr
        0xFFFFF020 constant VICProtection
        0xFFFFF030 constant VICVectAddr
        0xFFFFF034 constant VICDefVectAddr
        0xFFFFF100 constant VICVectAddr0
        0xFFFFF104 constant VICVectAddr1
        0xFFFFF108 constant VICVectAddr2
        0xFFFFF10C constant VICVectAddr3
        0xFFFFF110 constant VICVectAddr4
        0xFFFFF114 constant VICVectAddr5
        0xFFFFF118 constant VICVectAddr6
        0xFFFFF11C constant VICVectAddr7
        0xFFFFF120 constant VICVectAddr8
        0xFFFFF128 constant VICVectAddr10
        0xFFFFF12C constant VICVectAddr11
        0xFFFFF130 constant VICVectAddr12
        0xFFFFF134 constant VICVectAddr13
        0xFFFFF138 constant VICVectAddr14
        0xFFFFF13C constant VICVectAddr15
        0xFFFFF200 constant VICVectCntl0
        0xFFFFF204 constant VICVectCntl1
        0xFFFFF208 constant VICVectCntl2
        0xFFFFF20C constant VICVectCntl3
        0xFFFFF210 constant VICVectCntl4
        0xFFFFF214 constant VICVectCntl5
        0xFFFFF218 constant VICVectCntl6
        0xFFFFF21C constant VICVectCntl7
        0xFFFFF220 constant VICVectCntl8
        0xFFFFF224 constant VICVectCntl9
        0xFFFFF228 constant VICVectCntl10
        0xFFFFF22C constant VICVectCntl11
        0xFFFFF230 constant VICVectCntl12
        0xFFFFF234 constant VICVectCntl13
        0xFFFFF23C constant VICVectCntl15

        0x1             constant VIC_Mask_WDT
        0x4             constant VIC_Mask_ICERx
        0x8             constant VIC_Mask_ICETx
        0x10            constant VIC_Mask_TIMER0
        0x20            constant VIC_Mask_TIMER1
        0x40            constant VIC_Mask_UART0
        0x80            constant VIC_Mask_UART1
        0x100   constant VIC_Mask_PWM
        0x200   constant VIC_Mask_SPI0
        0x400   constant VIC_Mask_SPI1
        0x800   constant VIC_Mask_SSP
        0x1000  constant VIC_Mask_PLL
        0x2000  constant VIC_Mask_RTC
        0x4000  constant VIC_Mask_EINT0
        0x8000  constant VIC_Mask_EINT1
        0x10000 constant VIC_Mask_EINT2
        0x20000 constant VIC_Mask_EINT3
        0x40000 constant VIC_Mask_ADC

        0x0      constant EnableFIQ
        0x20 constant EnableIRQ

        EnableIRQ 0 or constant VIC_Hex_WDT
        EnableIRQ 2 or constant VIC_Hex_ICERX
        EnableIRQ 3 or constant VIC_Hex_ICETX
        EnableIRQ 4 or constant VIC_Hex_TIMER0
        EnableIRQ 5 or constant VIC_Hex_TIMER1
        EnableIRQ 6 or constant VIC_Hex_UART0
        EnableIRQ 7 or constant VIC_Hex_UART1
        EnableIRQ 8 or constant VIC_Hex_PWM
        EnableIRQ 9 or constant VIC_Hex_SPI0
        EnableIRQ 10 or constant  VIC_Hex_SPI1
        EnableIRQ 11 or constant VIC_Hex_SSP
        EnableIRQ 12 or constant VIC_Hex_PLL
        EnableIRQ 13 or constant VIC_Hex_RTC
        EnableIRQ 14 or constant VIC_Hex_EINT0
        EnableIRQ 15 or constant VIC_Hex_EINT1
        EnableIRQ 16 or constant VIC_Hex_EINT2
        EnableIRQ 17 or constant VIC_Hex_EINT3
        EnableIRQ 18 or constant VIC_Hex_ADC

\ Timer1_Nxp2210.f
-----------------------------------------------------------
        0xE0008000      constant T1IR
        0xE0008004      constant T1TCR
        0xE0008008      constant T1TC
        0xE000800C      constant T1PR
        0xE0008010      constant T1PC
        0xE0008014      constant T1MCR
        0xE0008018      constant T1MR0
        0xE000801C      constant T1MR1
        0xE0008020      constant T1MR2
        0xE0008024      constant T1MR3
        0xE0008028      constant T1CCR
        0xE000802C      constant T1CR0
        0xE0008030      constant T1CR1
        0xE0008034      constant T1CR2
        0xE0008038      constant T1CR3
        0xE000803C      constant T1EMR

\ Set_Timer1_Nxp2210.f
---------------------------------------------------------
: Set_Timer1( time --- )
        0x0 T1TCR P!
        0x0     T1TC    P!
        0x2 T1PR        p!
        0x0 T1PC        p!
                  T1MR0 p!    \ (PCLK/Sec)+1
        0x5 T1MCR p!
        0x01 T1TCR p!
        ;

: Set_VIC ( --- )
        0x0     VICIntSelect p!
        VIC_Mask_TIMER1 VICIntEnable p!
        VIC_Hex_TIMER1 VICVectCntl0 p!
        Timer1_ISR VICVectAddr0 p!
        ;

\ Timer1_ISR_Nxp2210.f
: Timer1_ISR ( --- )
        \ Timer1程式處理_begin

        \ Timer1程式處理_end
        0x1 T1IR p!
        0xFF VICVectAddr p!
        ;

\ demo.f
        \ fload defer.f
        \ fload VIC_Nxp2210.f
        \ fload Timer1_Nxp2210.f
        \ fload Set_Timer1_Nxp2210.f
        \ fload Timer1_ISR_Nxp2210.f
: demo ( --- )
        12000000 1000 / + 1  Set_Timer1         \ Timer1 to 1ms in PCLK=12MHz
        Set_VIC
        ;


    回覆    回覆作者    轉寄  
您必須先登入才能張貼訊息。
若要張貼訊息,您必須先加入此群組
請在留言之前更新您訂閱設定網頁上的暱稱。
您沒有留言所需的權限。
主題尾端
« 返回討論主題 « 較新的主題     較舊的主題 »

建立群組 - Google 網上論壇 - Google 首頁 - 服務條款 - 隱私權政策
©2008 Google