日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第五篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇完结nes模拟器的移植)

發布時間:2023/12/20 编程问答 43 豆豆

話不多說,上代碼

打開nes.main.c文件

添加如下代碼

u8 nesruning = 0; //初始化為真 u8 frame_cnt; //統計幀數 //u8 *rom_file; //NES游戲rom的存儲地址 //NES 幀周期循環 void NesFrameCycle(void) {int clocks; //CPU執行時間static int NES_time;//啟動模擬器循環,檢查VROM設置,若卡帶為0,初始化VROM//if ( NesHeader.byVRomSize == 0)//設置VROM存儲區位置。frame_cnt = 0;nesruning = 1;while (nesruning){//scanline: 0~19 VBANK 段,若PPU使能NMI,將產生NMI 中斷frame_cnt++;//幀計數器SpriteHitFlag = 0;for (PPU_scanline = 0; PPU_scanline < 20; PPU_scanline++){exec6502(CLOCKS_PER_SCANLINE);}//scanline: 20, PPU加載設置,執行一次空的掃描時間exec6502(CLOCKS_PER_SCANLINE);//NesHBCycle(); //水平周期PPU_scanline++; //20++PPU_Reg.NES_R2 &= ~R2_SPR0_HIT;//scanline: 21~261for (; PPU_scanline < SCAN_LINE_DISPALY_END_NUM; PPU_scanline++){if ((SpriteHitFlag == 1) && ((PPU_Reg.NES_R2 & R2_SPR0_HIT) == 0)){clocks = sprite[0].x * CLOCKS_PER_SCANLINE / NES_DISP_WIDTH;exec6502(clocks); //需重點優化PPU_Reg.NES_R2 |= R2_SPR0_HIT;exec6502(CLOCKS_PER_SCANLINE - clocks);}else exec6502(CLOCKS_PER_SCANLINE); //耗時大戶if (PPU_Reg.NES_R1 & (R1_BG_VISIBLE | R1_SPR_VISIBLE)) //若為假,關閉顯示{if (SpriteHitFlag == 0)NES_GetSpr0HitFlag(PPU_scanline - SCAN_LINE_DISPALY_START_NUM);//查找Sprite #0 碰撞標志}if ((frame_cnt % 3) == 0) //每3幀顯示一次 //耗時大戶{NES_time = micros() ;NES_RenderLine(PPU_scanline - SCAN_LINE_DISPALY_START_NUM);//水平同步與顯示一行printf("%d\n", micros() - NES_time);}}//scanline: 262 完成一幀exec6502(CLOCKS_PER_SCANLINE);PPU_Reg.NES_R2 |= R2_VBlank_Flag;//設置VBANK 標志//若使能PPU VBANK中斷,則設置VBANKif (PPU_Reg.NES_R0 & R0_VB_NMI_EN){NMI_Flag = SET1;//完成一幀掃描,產生NMI中斷}//設置幀IRQ標志,同步計數器,APU等//A mapper function in V-Sync 存儲器切換垂直VBANK同步//MapperVSync();//讀取控制器JoyPad狀態,更新JoyPad控制器值*///NES_JoyPadUpdateValue(); //systick 中斷讀取按鍵值//單獨的返回鍵(KEY6)掃描程序// if(KEY_Scan_f())break; //退出 //退出模擬器} }

同時找到如下代碼

printf("\r\n 開始申請內存\n");res = nes_mem_creat(); //申請內存if (res == 0) //申請成功了.則運行游戲{printf("\r\n 開始申請成功\n");printf("\r\n 初始化6502\n");LCD_tft_init(); //初始化顯示設備PPU_Init(((u8 *)&rom_file[offset + 0x10] + (neshreader->romnum * 0x4000)),(neshreader->romfeature & 0x01)); //PPU_初始化key_init(); //初始化獲取按鍵值設備adc_init(); //初始化獲取方向值設備NES_JoyPadInit(); //初始化模擬手柄printf("\r\n 無限循環執行游戲\n");printf("\r\n 按下退出游戲鍵\n");}else printf("\r\n 開始申請失敗\n");nes_mem_delete();//釋放內存return res; }

改為

printf("\r\n 開始申請內存\n");res = nes_mem_creat(); //申請內存if (res == 0) //申請成功了.則運行游戲{printf("\r\n 開始申請成功\n");init6502mem(0, //exp_rom 0, //sram 由卡類型決定, 暫不支持 ((u8 *)&rom_file[offset + 0x10]), //prg_rombank, 存儲器大小 由卡類型決定 neshreader->romnum); reset6502(); //初始化6502存儲器鏡像LCD_tft_init(); //初始化顯示設備PPU_Init(((u8 *)&rom_file[offset + 0x10] + (neshreader->romnum * 0x4000)),(neshreader->romfeature & 0x01)); //PPU_初始化key_init(); //初始化獲取按鍵值設備adc_init(); //初始化獲取方向值設備NES_JoyPadInit(); //初始化模擬手柄NesFrameCycle();//模擬器循環執行 printf("\r\n 按下退出游戲鍵\n");}else printf("\r\n 開始申請失敗\n");nes_mem_delete();//釋放內存return res; }

同時找到

//CPU使用u8 *ram6502; //RAM 2K字節,由malloc申請 portMUX_TYPE isr_nes_creat = portMUX_INITIALIZER_UNLOCKED;//開辟nes運行所需的RAM. //返回值:0,成功; // 其他,錯誤代碼. u8 nes_mem_creat(void) {portENTER_CRITICAL_ISR(&isr_nes_creat);ram6502 = (u8 *)malloc(2048); //申請2K內存if (ram6502 == NULL)return 1; //申請失敗NameTable = (u8 *)malloc(2048); //申請2K內存if (NameTable == NULL)return 2;Buffer_scanline = (u16 *)malloc((8 + 256 + 8) * 2);if (Buffer_scanline == NULL)return 3;portEXIT_CRITICAL_ISR(&isr_nes_creat);return 0; }

刪掉

//CPU使用u8 *ram6502; //RAM 2K字節,由malloc申請

然后在頭文件添加

#include "6502.h"

編譯通過即可

至此,NES模擬器就此完結,完整資源鏈接為:

下面貼出6502.c和6502.h文件

#include "6502.h"//6502標志位 flags = NVRBDIZC #define C_FLAG 0x01 // 1: Carry #define Z_FLAG 0x02 // 1: Zero #define I_FLAG 0x04 // 1: Irq disabled #define D_FLAG 0x08 // 1: Decimal mode flag (NES unused) #define B_FLAG 0x10 // 1: Break #define R_FLAG 0x20 // 1: Reserved (Always 1) #define V_FLAG 0x40 // 1: Overflow #define N_FLAG 0x80 // 1: Negative// flags = NVRBDIZC BYTE a_reg,x_reg,y_reg,flag_reg,s_reg; WORD pc_reg = 0;//中斷標志 CPU_InitFlag NMI_Flag; CPU_InitFlag IRQ_Flag;// Macros for convenience #define A a_reg #define X x_reg #define Y y_reg #define P flag_reg #define S s_reg #define PC pc_reg//internal registers BYTE opcode; int clockticks6502;//help variables WORD savepc; BYTE value; int sum,saveflags; WORD help;//6502 memory map u8 *ram6502; //RAM 2K字節,由malloc申請 //u8* ppu_regbase; // PPU IO reg //u8* apu_regbase; // APU IO reg u8* exp_rom; // expansion rom u8* sram; // sram u8* prg_rombank0; // prg-rom lower bank u8* prg_rombank1; // prg-rom upper bank // arrays typedef struct {unsigned short int ticks;void (*instruction)(void);//指令void (*adrmode)(void); // }OPCODE;const OPCODE opcodetable[]= { /*0x00*/ {7, brk6502, implied6502}, /*0x01*/ {6, ora6502, indx6502}, /*0x02*/ {2, nop6502, implied6502}, /*0x03*/ {2, nop6502, implied6502}, /*0x04*/ {3, tsb6502, zp6502}, /*0x05*/ {3, ora6502, zp6502}, /*0x06*/ {5, asl6502, zp6502}, /*0x07*/ {2, nop6502, implied6502}, /*0x08*/ {3, php6502, implied6502}, /*0x09*/ {3, ora6502, immediate6502}, /*0x0A*/ {2, asla6502, implied6502}, /*0x0B*/ {2, ora6502, implied6502}, /*0x0C*/ {4, tsb6502, abs6502}, /*0x0D*/ {4, ora6502, abs6502}, /*0x0E*/ {6, asl6502, abs6502}, /*0x0F*/ {2, nop6502, implied6502},/*0x10*/ {2, bpl6502, relative6502}, /*0x11*/ {5, ora6502, indy6502}, /*0x12*/ {3, ora6502, indzp6502}, /*0x13*/ {2, nop6502, implied6502}, /*0x14*/ {3, trb6502, zp6502}, /*0x15*/ {4, ora6502, zpx6502}, /*0x16*/ {6, asl6502, zpx6502}, /*0x17*/ {2, nop6502, implied6502}, /*0x18*/ {2, clc6502, implied6502}, /*0x19*/ {4, ora6502, absy6502}, /*0x1A*/ {2, ina6502, implied6502}, /*0x1B*/ {2, nop6502, implied6502}, /*0x1C*/ {4, trb6502, abs6502}, /*0x1D*/ {4, ora6502, absx6502}, /*0x1E*/ {7, asl6502, absx6502}, /*0x1F*/ {2, nop6502, implied6502},/*0x20*/ {6, jsr6502, abs6502}, /*0x21*/ {6, and6502, indx6502}, /*0x22*/ {2, nop6502, implied6502}, /*0x23*/ {2, nop6502, implied6502}, /*0x24*/ {3, bit6502, zp6502}, /*0x25*/ {3, and6502, zp6502}, /*0x26*/ {5, rol6502, zp6502}, /*0x27*/ {2, nop6502, implied6502}, /*0x28*/ {4, plp6502, implied6502}, /*0x29*/ {3, and6502, immediate6502}, /*0x2A*/ {2, rola6502, implied6502}, /*0x2B*/ {2, nop6502, implied6502}, /*0x2C*/ {4, bit6502, abs6502}, /*0x2D*/ {4, and6502, abs6502}, /*0x2E*/ {6, rol6502, abs6502}, /*0x2F*/ {2, nop6502, implied6502},/*0x30*/ {2, bmi6502, relative6502}, /*0x31*/ {5, and6502, indy6502}, /*0x32*/ {3, and6502, indzp6502}, /*0x33*/ {2, nop6502, implied6502}, /*0x34*/ {4, bit6502, zpx6502}, /*0x35*/ {4, and6502, zpx6502}, /*0x36*/ {6, rol6502, zpx6502}, /*0x37*/ {2, nop6502, implied6502}, /*0x38*/ {2, sec6502, implied6502}, /*0x39*/ {4, and6502, absy6502}, /*0x3A*/ {2, dea6502, implied6502}, /*0x3B*/ {2, nop6502, implied6502}, /*0x3C*/ {4, bit6502, absx6502}, /*0x3D*/ {4, and6502, absx6502}, /*0x3E*/ {7, rol6502, absx6502}, /*0x3F*/ {2, nop6502, implied6502},/*0x40*/ {6, rti6502, implied6502}, /*0x41*/ {6, eor6502, indx6502}, /*0x42*/ {2, nop6502, implied6502}, /*0x43*/ {2, nop6502, implied6502}, /*0x44*/ {2, nop6502, implied6502}, /*0x45*/ {3, eor6502, zp6502}, /*0x46*/ {5, lsr6502, zp6502}, /*0x47*/ {2, nop6502, implied6502}, /*0x48*/ {3, pha6502, implied6502}, /*0x49*/ {3, eor6502, immediate6502}, /*0x4A*/ {2, lsra6502, implied6502}, /*0x4B*/ {2, nop6502, implied6502}, /*0x4C*/ {3, jmp6502, abs6502}, /*0x4D*/ {4, eor6502, abs6502}, /*0x4E*/ {6, lsr6502, abs6502}, /*0x4F*/ {2, nop6502, implied6502},/*0x50*/ {2, bvc6502, relative6502}, /*0x51*/ {5, eor6502, indy6502}, /*0x52*/ {3, eor6502, indzp6502}, /*0x53*/ {2, nop6502, implied6502}, /*0x54*/ {2, nop6502, implied6502}, /*0x55*/ {4, eor6502, zpx6502}, /*0x56*/ {6, lsr6502, zpx6502}, /*0x57*/ {2, nop6502, implied6502}, /*0x58*/ {2, cli6502, implied6502}, /*0x59*/ {4, eor6502, absy6502}, /*0x5A*/ {3, phy6502, implied6502}, /*0x5B*/ {2, nop6502, implied6502}, /*0x5C*/ {2, nop6502, implied6502}, /*0x5D*/ {4, eor6502, absx6502}, /*0x5E*/ {7, lsr6502, absx6502}, /*0x5F*/ {2, nop6502, implied6502},/*0x60*/ {6, rts6502, implied6502}, /*0x61*/ {6, adc6502, indx6502}, /*0x62*/ {2, nop6502, implied6502}, /*0x63*/ {2, nop6502, implied6502}, /*0x64*/ {3, stz6502, zp6502}, /*0x65*/ {3, adc6502, zp6502}, /*0x66*/ {5, ror6502, zp6502}, /*0x67*/ {2, nop6502, implied6502}, /*0x68*/ {4, pla6502, implied6502}, /*0x69*/ {3, adc6502, immediate6502}, /*0x6A*/ {2, rora6502, implied6502}, /*0x6B*/ {2, nop6502, implied6502}, /*0x6C*/ {5, jmp6502, indirect6502}, /*0x6D*/ {4, adc6502, abs6502}, /*0x6E*/ {6, ror6502, abs6502}, /*0x6F*/ {2, nop6502, implied6502},/*0x70*/ {2, bvs6502, implied6502}, /*0x71*/ {5, adc6502, indy6502}, /*0x72*/ {3, adc6502, indzp6502}, /*0x73*/ {2, nop6502, implied6502}, /*0x74*/ {4, stz6502, zpx6502}, /*0x75*/ {4, adc6502, zpx6502}, /*0x76*/ {6, ror6502, zpx6502}, /*0x77*/ {2, nop6502, implied6502}, /*0x78*/ {2, sei6502, implied6502}, /*0x79*/ {4, adc6502, absy6502}, /*0x7A*/ {4, ply6502, implied6502}, /*0x7B*/ {2, nop6502, implied6502}, /*0x7C*/ {6, jmp6502, indabsx6502}, /*0x7D*/ {4, adc6502, absx6502}, /*0x7E*/ {7, ror6502, absx6502}, /*0x7F*/ {2, nop6502, implied6502},/*0x80*/ {2, bra6502, relative6502}, /*0x81*/ {6, sta6502, indx6502}, /*0x82*/ {2, nop6502, implied6502}, /*0x83*/ {2, nop6502, implied6502}, /*0x84*/ {2, sty6502, zp6502}, /*0x85*/ {2, sta6502, zp6502}, /*0x86*/ {2, stx6502, zp6502}, /*0x87*/ {2, nop6502, implied6502}, /*0x88*/ {2, dey6502, implied6502}, /*0x89*/ {2, bit6502, immediate6502}, /*0x8A*/ {2, txa6502, implied6502}, /*0x8B*/ {2, nop6502, implied6502}, /*0x8C*/ {4, sty6502, abs6502}, /*0x8D*/ {4, sta6502, abs6502}, /*0x8E*/ {4, stx6502, abs6502}, /*0x8F*/ {2, nop6502, implied6502},/*0x90*/ {2, bcc6502, relative6502}, /*0x91*/ {6, sta6502, indy6502}, /*0x92*/ {3, sta6502, indzp6502}, /*0x93*/ {2, nop6502, implied6502}, /*0x94*/ {4, sty6502, zpx6502}, /*0x95*/ {4, sta6502, zpx6502}, /*0x96*/ {4, stx6502, zpy6502}, /*0x97*/ {2, nop6502, implied6502}, /*0x98*/ {2, tya6502, implied6502}, /*0x99*/ {5, sta6502, absy6502}, /*0x9A*/ {2, txs6502, implied6502}, /*0x9B*/ {2, nop6502, implied6502}, /*0x9C*/ {4, stz6502, abs6502}, /*0x9D*/ {5, sta6502, absx6502}, /*0x9E*/ {5, stz6502, absx6502}, /*0x9F*/ {2, nop6502, implied6502},/*0xA0*/ {3, ldy6502, immediate6502}, /*0xA1*/ {6, lda6502, indx6502}, /*0xA2*/ {3, ldx6502, immediate6502}, /*0xA3*/ {2, nop6502, implied6502}, /*0xA4*/ {3, ldy6502, zp6502}, /*0xA5*/ {3, lda6502, zp6502}, /*0xA6*/ {3, ldx6502, zp6502}, /*0xA7*/ {2, nop6502, implied6502}, /*0xA8*/ {2, tay6502, implied6502}, /*0xA9*/ {3, lda6502, immediate6502}, /*0xAA*/ {2, tax6502, implied6502}, /*0xAB*/ {2, nop6502, implied6502}, /*0xAC*/ {4, ldy6502, abs6502}, /*0xAD*/ {4, lda6502, abs6502}, /*0xAE*/ {4, ldx6502, abs6502}, /*0xAF*/ {2, nop6502, implied6502},/*0xB0*/ {2, bcs6502, relative6502}, /*0xB1*/ {5, lda6502, indy6502}, /*0xB2*/ {3, lda6502, indzp6502}, /*0xB3*/ {2, nop6502, implied6502}, /*0xB4*/ {4, ldy6502, zpx6502}, /*0xB5*/ {4, lda6502, zpx6502}, /*0xB6*/ {4, ldx6502, zpy6502}, /*0xB7*/ {2, nop6502, implied6502}, /*0xB8*/ {2, clv6502, implied6502}, /*0xB9*/ {4, lda6502, absy6502}, /*0xBA*/ {2, tsx6502, implied6502}, /*0xBB*/ {2, nop6502, implied6502}, /*0xBC*/ {4, ldy6502, absx6502}, /*0xBD*/ {4, lda6502, absx6502}, /*0xBE*/ {4, ldx6502, absy6502}, /*0xBF*/ {2, nop6502, implied6502},/*0xC0*/ {3, cpy6502, immediate6502}, /*0xC1*/ {6, cmp6502, indx6502}, /*0xC2*/ {2, nop6502, implied6502}, /*0xC3*/ {2, nop6502, implied6502}, /*0xC4*/ {3, cpy6502, zp6502}, /*0xC5*/ {3, cmp6502, zp6502}, /*0xC6*/ {5, dec6502, zp6502}, /*0xC7*/ {2, nop6502, implied6502}, /*0xC8*/ {2, iny6502, implied6502}, /*0xC9*/ {3, cmp6502, immediate6502}, /*0xCA*/ {2, dex6502, implied6502}, /*0xCB*/ {2, nop6502, implied6502}, /*0xCC*/ {4, cpy6502, abs6502}, /*0xCD*/ {4, cmp6502, abs6502}, /*0xCE*/ {6, dec6502, abs6502}, /*0xCF*/ {2, nop6502, implied6502},/*0xD0*/ {2, bne6502, relative6502}, /*0xD1*/ {5, cmp6502, indy6502}, /*0xD2*/ {3, cmp6502, indzp6502}, /*0xD3*/ {2, nop6502, implied6502}, /*0xD4*/ {2, nop6502, implied6502}, /*0xD5*/ {4, cmp6502, zpx6502}, /*0xD6*/ {6, dec6502, zpx6502}, /*0xD7*/ {2, nop6502, implied6502}, /*0xD8*/ {2, cld6502, implied6502}, /*0xD9*/ {4, cmp6502, absy6502}, /*0xDA*/ {3, phx6502, implied6502}, /*0xDB*/ {2, nop6502, implied6502}, /*0xDC*/ {2, nop6502, implied6502}, /*0xDD*/ {4, cmp6502, absx6502}, /*0xDE*/ {7, dec6502, absx6502}, /*0xDF*/ {2, nop6502, implied6502},/*0xE0*/ {3, cpx6502, immediate6502}, /*0xE1*/ {6, sbc6502, indx6502}, /*0xE2*/ {2, nop6502, implied6502}, /*0xE3*/ {2, nop6502, implied6502}, /*0xE4*/ {3, cpx6502, zp6502}, /*0xE5*/ {3, sbc6502, zp6502}, /*0xE6*/ {5, inc6502, zp6502}, /*0xE7*/ {2, nop6502, implied6502}, /*0xE8*/ {2, inx6502, implied6502}, /*0xE9*/ {3, sbc6502, immediate6502}, /*0xEA*/ {2, nop6502, implied6502}, /*0xEB*/ {2, nop6502, implied6502}, /*0xEC*/ {4, cpx6502, abs6502}, /*0xED*/ {4, sbc6502, abs6502}, /*0xEE*/ {6, inc6502, abs6502}, /*0xEF*/ {2, nop6502, implied6502},/*0xF0*/ {2, beq6502, relative6502}, /*0xF1*/ {5, sbc6502, indy6502}, /*0xF2*/ {3, sbc6502, indzp6502}, /*0xF3*/ {2, nop6502, implied6502}, /*0xF4*/ {2, nop6502, implied6502}, /*0xF5*/ {4, sbc6502, zpx6502}, /*0xF6*/ {6, inc6502, zpx6502}, /*0xF7*/ {2, nop6502, implied6502}, /*0xF8*/ {2, sed6502, implied6502}, /*0xF9*/ {4, sbc6502, absy6502}, /*0xFA*/ {4, plx6502, implied6502}, /*0xFB*/ {2, nop6502, implied6502}, /*0xFC*/ {2, nop6502, implied6502}, /*0xFD*/ {4, sbc6502, absx6502}, /*0xFE*/ {7, inc6502, absx6502}, /*0xFF*/ {2, nop6502, implied6502} };// //6502 存儲器鏡像讀寫 ////sprite DMA (寫地址到$4014, 左移8位,原數據地址) void SprDMA(BYTE scr_addr) //scr_addr 為高8位地址 {u8 *scr_addrptr = 0; //將傳送sprite數據 指針int i; switch(scr_addr >> 4)//選擇源地址數據區域{ case 0x0: //RAMcase 0x1: scr_addrptr = &ram6502[(scr_addr << 8)];break;case 0x6: //SRAMcase 0x7: #ifdef CHECK_POINTERcheck_pointer(sram); #endifscr_addrptr = sram + ((scr_addr << 8) - 0x6000);break;case 0x8: //程序存儲器 只讀 case 0x9:case 0xA:case 0xB:#ifdef CHECK_POINTERcheck_pointer(prg_rombank0); #endifscr_addrptr = &prg_rombank0[(scr_addr << 8) - 0x8000];break;case 0xC:case 0xD:case 0xE:case 0xF:#ifdef CHECK_POINTERcheck_pointer(prg_rombank1); #endifscr_addrptr = &prg_rombank1[(scr_addr << 8) - 0xC000];break;} #ifdef CKECK_POINTERif(scr_addrptr == NULL){printf("\r\nSprite ram DMA 地址參數錯誤!");return;} #endif for(i=0; i<256; i++){Spr_Mem.spr_ram[i] = scr_addrptr[i];} //每次傳輸,需要512 cycles (about 4.5 scanlines worth) clockticks6502 -= 512;//花掉512CPU時鐘周期 }//讀取6502存儲器 int get6502memory(WORD addr)//沒0x2000遞增 {switch(addr & 0xE000){case 0x0000: //$0000 ~ $0FFF return (ram6502[addr&0x7FF]);case 0x1000: //$1000 ~ $1FFF 鏡像return (ram6502[addr&0x7FF]);case 0x2000: //$2000 ~ $2FFFreturn PPU_RegRead(addr&0x7); //PPU IO接口 //case 0x3000: //$3000 ~ $3FFF 鏡像//break;case 0x4000://$4000 ~ $4FFF //暫不處理//APU 聲音處理 IO接口 擴展ROM //if(addr < 0x4013)return (apu_regbase[addr&0x1F]); //暫不處理 //if(addr == 0x4014){SpriteRAM_DMA();break;} //只支持寫 //if(addr == 0x4015);//pAPU Sound / Vertical Clock Signal Register if(addr == 0x4016){return NES_GetJoyPadVlaue(JOYPAD_0)|0x40;//分為3段8bit數據,第一段8bit為控制器1,第二段控制器3,第三段ID code}if(addr == 0x4017){return NES_GetJoyPadVlaue2(JOYPAD_0);//分為3段8bit數據,第一段8bit為控制器2,第二段控制器4,第三段ID code}break;//case 0x5000:// expansion rom*///#ifdef CKECK_POINTER// check_pointer(exp_rom); //#endif// return (exp_rom[addr - 0x4020]);case 0x6000://卡帶SRAM,一般用來存儲游戲進度 #ifdef CKECK_POINTERcheck_pointer(ram6502); #endif//暫不處理 break;case 0x8000://程序存儲器 只讀 case 0xA000:#ifdef CHECK_POINTERcheck_pointer(prg_rombank0); #endifreturn prg_rombank0[addr-0x8000];case 0xC000:case 0xE000:#ifdef CHECK_POINTERcheck_pointer(prg_rombank1); #endifreturn prg_rombank1[addr-0xC000]; } return (addr >> 8);//通常不會執行到此處,返回地址高八位//APU和SRAM未完成,可能執行到此處*/ }//寫6502存儲器 void put6502memory(WORD addr, BYTE value) {switch(addr & 0xE000){case 0x0000:ram6502[addr&0x7FF] = value;break;case 0x2000://PPU IO接口 PPU_RegWrite(addr&0x7, value);break;case 0x4000: //APU 聲音處理 IO接口 擴展ROM if(addr == 0x4014)SprDMA(value); //value 為將要傳送的數據地址的高八位 if(addr == 0x4016){ //bit0 JoyPad 控制 if(value & 1)//先寫bit0:1復位按鍵狀態,在寫bit0:0禁止{ NES_JoyPadReset();}else NES_JoyPadDisable(); }//其他位暫未使用 //if(addr == 0x4017)NES_SetJoyPad(value); //if(addr >= 0x4020){// exp_rom[addr - 0x6000] = value;// }//其余寄存器暫未處理break;case 0x6000://卡帶SRAM,一般用來存儲游戲進度*///#ifdef CHECK_POINTER// check_pointer(sram); //#endif// sram[addr - 0x6000] = value; //與存儲器切換有關 break;case 0x8000: //程序存儲器 只讀(寫入時與存儲器切換(mapper)有關,暫略) case 0xA000:case 0xC000:case 0xE000://Write to Mapper//MapperWrite( wAddr, byData );break;} } // //尋址模式 ////Adressing modes //Implied void implied6502(void) { }//#Immediate void immediate6502(void) {savepc=PC++; } //ABS void abs6502(void) { //savepc = gameImage[PC] + (gameImage[PC + 1] << 8);savepc=get6502memory(PC)+(get6502memory(PC+1) << 8); PC+=2; } //Branch void relative6502(void) {//savepc = gameImage[PC++];savepc = get6502memory(PC++); if(savepc & 0x80)savepc-=0x100;if((savepc>>8)!=(PC>>8))clockticks6502++; } //(ABS) void indirect6502(void) {//help = gameImage[PC] + (gameImage[PC + 1] << 8);//savepc = gameImage[help] + (gameImage[help + 1] << 8);help = get6502memory(PC)+(get6502memory(PC+1) << 8);savepc = get6502memory(help)+(get6502memory(help+1) << 8); PC+=2; } //ABS,X void absx6502(void) {//savepc = gameImage[PC] + (gameImage[PC + 1] << 8);savepc=get6502memory(PC)+(get6502memory(PC+1) << 8); PC+=2;if(opcodetable[opcode].ticks==4)if ((savepc>>8) != ((savepc+X)>>8))clockticks6502++; savepc += X; } // ABS,Y void absy6502(void) {//savepc = gameImage[PC] + (gameImage[PC + 1] << 8);savepc = get6502memory(PC)+(get6502memory(PC+1) << 8);PC+=2; if (opcodetable[opcode].ticks==4)if ((savepc>>8) != ((savepc+Y)>>8))clockticks6502++; savepc += Y; } //ZP void zp6502(void) {//savepc=gameImage[PC++];savepc = get6502memory(PC);PC++; }/* ZP,X */ void zpx6502(void) { // savepc=gameImage[PC++]+X;savepc = get6502memory(PC) + X;PC++;savepc &= 0x00ff; }//ZP,Y void zpy6502(void) {//savepc=gameImage[PC++]+Y;savepc = get6502memory(PC) + Y;PC++; savepc &= 0x00ff; } //(ZP,X) void indx6502(void) {//value = gameImage[PC++]+X;//savepc = gameImage[value] + (gameImage[value+1] << 8);value = get6502memory(PC) + Y;PC++; savepc = get6502memory(value)+(get6502memory(value + 1) << 8); }//(ZP),Y void indy6502(void) {//value = gameImage[PC++];//savepc = gameImage[value] + (gameImage[value+1] << 8);value = get6502memory(PC);PC++;savepc = get6502memory(value)+(get6502memory(value + 1) << 8); if (opcodetable[opcode].ticks==5)if ((savepc>>8) != ((savepc+Y)>>8))clockticks6502++; savepc += Y; }/* (ABS,X) */ void indabsx6502(void) {//help = gameImage[PC] + (gameImage[PC + 1] << 8) + X;//savepc = gameImage[help] + (gameImage[help + 1] << 8);help = get6502memory(PC)+((get6502memory(PC+1) << 8) +X); savepc = get6502memory(help)+(get6502memory(help + 1) << 8); }//(ZP) void indzp6502(void) {//value = gameImage[PC++];//savepc = gameImage[value] + (gameImage[value + 1] << 8);value = get6502memory(PC);PC++;savepc = get6502memory(value)+( get6502memory(value + 1) << 8 ); }// //指令 ////Instructions void adc6502(void) {opcodetable[opcode].adrmode(); value = get6502memory(savepc); saveflags=(P & 0x01);sum= ((char) A) + ((char) value) + saveflags;if ((sum>0x7f) || (sum<-0x80)) P |= 0x40; else P &= 0xbf;sum= A + value + saveflags;if (sum>0xff) P |= 0x01; else P &= 0xfe;A=sum;if (P & 0x08){P &= 0xfe;if ((A & 0x0f)>0x09)A += 0x06; if ((A & 0xf0)>0x90){A += 0x60;P |= 0x01;}}else clockticks6502++; if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void and6502(void) {opcodetable[opcode].adrmode(); value = get6502memory(savepc); A &= value;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void asl6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc);P= (P & 0xfe) | ((value >>7) & 0x01);value = value << 1;put6502memory(savepc,value);if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void asla6502(void) {P= (P & 0xfe) | ((A >>7) & 0x01);A = A << 1;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80;else P &= 0x7f; }void bcc6502(void) {if ((P & 0x01)==0){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void bcs6502(void) {if (P & 0x01){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void beq6502(void) {if (P & 0x02){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void bit6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc); //non-destrucive logically And between value and the accumulator//and set zero flag if (value & A) P &= 0xfd; else P |= 0x02; //set negative and overflow flags from value P = (P & 0x3f) | (value & 0xc0); }void bmi6502(void) {if (P & 0x80){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void bne6502(void) {if ((P & 0x02)==0){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void bpl6502(void) {if ((P & 0x80)==0) {opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void brk6502(void) {PC++;put6502memory(0x0100+S--,(BYTE)(PC>>8));put6502memory(0x0100+S--,(BYTE)(PC & 0xff));put6502memory(0x0100+S--,P);P |= 0x14;PC = get6502memory(0xFFFE) + (get6502memory(0xFFFF) << 8); }void bvc6502(void) {if ((P & 0x40)==0){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void bvs6502(void) {if (P & 0x40){opcodetable[opcode].adrmode();PC += savepc;clockticks6502++;}else value = get6502memory(PC++); }void clc6502(void) {P &= 0xfe; }void cld6502(void) {P &= 0xf7; }void cli6502(void) {P &= 0xfb; }void clv6502(void) {P &= 0xbf; }void cmp6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc);if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;value=A+0x100-value;if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void cpx6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc);if (X+0x100-value>0xff) P |= 0x01; else P &= 0xfe;value=X+0x100-value;if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void cpy6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc);if (Y+0x100-value>0xff) P |= 0x01; else P &= 0xfe;value=Y+0x100-value;if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void dec6502(void) {u8 temp; opcodetable[opcode].adrmode(); temp = get6502memory(savepc);temp--;put6502memory(savepc, temp); value = get6502memory(savepc);if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void dex6502(void) {X--;if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80; else P &= 0x7f; }void dey6502(void) {Y--;if (Y) P &= 0xfd; else P |= 0x02;if (Y & 0x80) P |= 0x80; else P &= 0x7f; }void eor6502(void) {opcodetable[opcode].adrmode(); A ^= get6502memory(savepc);if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void inc6502(void) {u8 temp; opcodetable[opcode].adrmode(); //gameImage[savepc]++;temp = get6502memory(savepc);temp++;put6502memory(savepc,temp); value = get6502memory(savepc);if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void inx6502(void) {X++;if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80; else P &= 0x7f; }void iny6502(void) {Y++;if (Y) P &= 0xfd; else P |= 0x02;if (Y & 0x80) P |= 0x80; else P &= 0x7f; }void jmp6502(void) {opcodetable[opcode].adrmode();PC=savepc; }void jsr6502(void) {PC++;put6502memory(0x0100+S--,(BYTE)(PC >> 8));put6502memory(0x0100+S--,(BYTE)(PC & 0xff));PC--;opcodetable[opcode].adrmode();PC=savepc; }void lda6502(void) {opcodetable[opcode].adrmode();A = get6502memory(savepc);// set the zero flagif (A) P &= 0xfd; else P |= 0x02;// set the negative flagif (A & 0x80) P |= 0x80; else P &= 0x7f; }void ldx6502(void) {opcodetable[opcode].adrmode();X = get6502memory(savepc);if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80;else P &= 0x7f; }void ldy6502(void) {opcodetable[opcode].adrmode();Y = get6502memory(savepc);if (Y) P &= 0xfd; else P |= 0x02;if (Y & 0x80) P |= 0x80; else P &= 0x7f; }void lsr6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc); //set carry flag if shifting right causes a bit to be lost P= (P & 0xfe) | (value & 0x01);value = value >>1;put6502memory(savepc,value);//set zero flag if value is zero if (value != 0) P &= 0xfd; else P |= 0x02; //set negative flag if bit 8 set??? can this happen on an LSR? if ((value & 0x80) == 0x80)P |= 0x80; else P &= 0x7f; }void lsra6502(void) {P= (P & 0xfe) | (A & 0x01);A = A >>1;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void nop6502(void) { }void ora6502(void) {opcodetable[opcode].adrmode();A |= get6502memory(savepc); if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void pha6502(void) {put6502memory(0x100 + S-- , A); }void php6502(void) {put6502memory(0x100 + S--, P); }void pla6502(void) {A = get6502memory(++S + 0x100);if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void plp6502(void) {P = get6502memory(++S + 0x100) | 0x20; }void rol6502(void) {saveflags=(P & 0x01);opcodetable[opcode].adrmode();value = get6502memory(savepc);P= (P & 0xfe) | ((value >>7) & 0x01);value = value << 1;value |= saveflags;put6502memory(savepc,value);if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void rola6502(void) {saveflags=(P & 0x01);P= (P & 0xfe) | ((A >>7) & 0x01);A = A << 1;A |= saveflags;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void ror6502(void) {saveflags=(P & 0x01);opcodetable[opcode].adrmode();value = get6502memory(savepc);P= (P & 0xfe) | (value & 0x01);value = value >>1;if (saveflags) value |= 0x80;put6502memory(savepc,value);if (value) P &= 0xfd; else P |= 0x02;if (value & 0x80) P |= 0x80; else P &= 0x7f; }void rora6502(void) {saveflags=(P & 0x01);P= (P & 0xfe) | (A & 0x01);A = A >>1;if (saveflags) A |= 0x80;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void rti6502(void) { P = get6502memory(++S + 0x100)|0X20;PC = get6502memory(++S + 0x100);PC |= (get6502memory(++S + 0x100) << 8); }void rts6502(void) { PC = get6502memory(++S + 0x100);PC |= (get6502memory(++S + 0x100) << 8);PC++; }void sbc6502(void) {opcodetable[opcode].adrmode();value = get6502memory(savepc) ^ 0xFF;saveflags=(P & 0x01);sum= ((char) A) + ((char) value) + (saveflags << 4);if ((sum>0x7f) || (sum<-0x80)) P |= 0x40; else P &= 0xbf;sum= A + value + saveflags;if (sum>0xff) P |= 0x01; else P &= 0xfe;A=sum;if (P & 0x08){A -= 0x66; P &= 0xfe;if ((A & 0x0f)>0x09)A += 0x06; if ((A & 0xf0)>0x90){A += 0x60;P |= 0x01;}}else clockticks6502++; if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void sec6502(void) {P |= 0x01; }void sed6502(void) {P |= 0x08; }void sei6502(void) {P |= 0x04; }void sta6502(void) {opcodetable[opcode].adrmode();put6502memory(savepc,A); }void stx6502(void) {opcodetable[opcode].adrmode();put6502memory(savepc,X); }void sty6502(void) {opcodetable[opcode].adrmode();put6502memory(savepc,Y); }void tax6502(void) {X=A;if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80; else P &= 0x7f; }void tay6502(void) {Y=A;if (Y) P &= 0xfd; else P |= 0x02;if (Y & 0x80) P |= 0x80; else P &= 0x7f; }void tsx6502(void) {X=S;if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80; else P &= 0x7f; }void txa6502(void) {A=X;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void txs6502(void) {S=X; }void tya6502(void) {A=Y;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void bra6502(void) {opcodetable[opcode].adrmode();PC += savepc;clockticks6502++; }void dea6502(void) {A--;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void ina6502(void) {A++;if (A) P &= 0xfd; else P |= 0x02;if (A & 0x80) P |= 0x80; else P &= 0x7f; }void phx6502(void) {put6502memory(0x100+S--,X); }void plx6502(void) { X = get6502memory(++S + 0x100);if (X) P &= 0xfd; else P |= 0x02;if (X & 0x80) P |= 0x80; else P &= 0x7f; }void phy6502(void) {put6502memory(0x100+S--, Y); }void ply6502(void) {Y = get6502memory(++S + 0x100); if (Y) P &= 0xfd; else P |= 0x02;if (Y & 0x80) P |= 0x80; else P &= 0x7f; }void stz6502(void) {opcodetable[opcode].adrmode();put6502memory(savepc,0); }void tsb6502(void) {u8 temp; opcodetable[opcode].adrmode();temp = get6502memory(savepc);temp |= A;put6502memory(savepc, temp);if(get6502memory(savepc))P &= 0xfd; else P |= 0x02; }void trb6502(void) {u8 temp; opcodetable[opcode].adrmode();temp = get6502memory(savepc);temp &= (A ^ 0xFF);put6502memory(savepc, temp); if(get6502memory(savepc))P &= 0xfd; else P |= 0x02; }// // CPU復位與中斷處理 ////Reset CPU void reset6502(void) {A=X=Y=P=0;P |= 0x20; //Z_FLAG | R_FLAGS=0xff;//PC = get6502memory(0xfffc & addrmask);//PC |= get6502memory(0xfffd & addrmask) << 8;PC = get6502memory(0xfffc); //復位地址,從中讀取PCPC |= get6502memory(0xfffd) << 8;NMI_Flag = CLR0;IRQ_Flag = CLR0; }//Non maskerable interrupt void nmi6502(void) {put6502memory(0x0100+S--,(BYTE)(PC>>8));put6502memory(0x0100+S--,(BYTE)(PC & 0xff));put6502memory(0x0100+S--,P);P |= 0x04; PC=get6502memory(0xfffa);PC |= get6502memory(0xfffb) << 8; }// Maskerable Interrupt void irq6502(void) {put6502memory(0x0100+S--,(BYTE)(PC>>8));put6502memory(0x0100+S--,(BYTE)(PC & 0xff));put6502memory(0x0100+S--,P);P |= 0x04; PC=get6502memory(0xfffe);PC |= get6502memory(0xffff) << 8; }// //執行指令 ////Execute Instruction void exec6502(int timerTicks) { // while (timerTicks > 0) // { // // fetch instructionopcode = gameImage[PC++]; // opcode = get6502memory(PC); // PC++; // // // execute instruction 用函數指針替代Switch改進執行效率的方法 // opcodetable[opcode].instruction(); // // // calculate clock cycles // clockticks6502 += opcodetable[opcode].ticks; // timerTicks -= clockticks6502; // clockticks6502 = 0; // }//中斷檢測 if(NMI_Flag == SET1){nmi6502();NMI_Flag = CLR0;}else{if(IRQ_Flag == SET1 && !(P & I_FLAG)){irq6502();IRQ_Flag = CLR0;}} while (timerTicks > clockticks6502) {opcode = get6502memory(PC); //讀取6502存儲器PC++;opcodetable[opcode].instruction();clockticks6502 += opcodetable[opcode].ticks;}clockticks6502 -= timerTicks; }//初始化6502 存儲器 void init6502mem( u8* exp_romptr,u8* sramptr, u8* prg_rombank0ptr, u8 rom_num) {exp_rom = exp_romptr; //expansion rom sram = sramptr; //sram prg_rombank0= prg_rombank0ptr; //prg-rom lower bank prg_rombank1= prg_rombank0ptr +(0x4000*(rom_num-1));// prg-rom upper bank clockticks6502 = 0; }

#ifndef _6502_H_ #define _6502_H_ #include "type.h" #include "PPU.h" #include "joypad.h"//Address mask. Atari Asteroids/Deluxe use 0x7fff - //but use 0xffff for full 16 bit decode //CPU中斷標志 typedef enum {CLR0 = 0, SET1 = !CLR0} CPU_InitFlag;extern CPU_InitFlag NMI_Flag; extern CPU_InitFlag NMI_Flag; //存儲器指針 extern u8* prg_rombank0; //prg-rom lower bank extern u8* prg_rombank1; //prg-rom upper bank //指令解釋 void implied6502(void); void immediate6502(void); void abs6502(void); void relative6502(void); void indirect6502(void); void absx6502(void); void absy6502(void); void zp6502(void); void zpx6502(void); void zpy6502(void); void indx6502(void); void indy6502(void); void indabsx6502(void); void indzp6502(void); void adc6502(void); void and6502(void); void asl6502(void); void asla6502(void); void bcc6502(void); void bcs6502(void); void beq6502(void); void bit6502(void); void bmi6502(void); void bne6502(void); void bpl6502(void); void brk6502(void); void bvc6502(void); void bvs6502(void); void clc6502(void); void cld6502(void); void cli6502(void); void clv6502(void); void cmp6502(void); void cpx6502(void); void cpy6502(void); void dec6502(void); void dex6502(void); void dey6502(void); void eor6502(void); void inc6502(void); void inx6502(void); void iny6502(void); void jmp6502(void); void jsr6502(void); void lda6502(void); void ldx6502(void); void ldy6502(void); void lsr6502(void); void lsra6502(void); void nop6502(void); void ora6502(void); void pha6502(void); void php6502(void); void pla6502(void); void plp6502(void); void rol6502(void); void rola6502(void); void ror6502(void); void rora6502(void); void rti6502(void); void rts6502(void); void sbc6502(void); void sec6502(void); void sed6502(void); void sei6502(void); void sta6502(void); void stx6502(void); void sty6502(void); void tax6502(void); void tay6502(void); void tsx6502(void); void txa6502(void); void txs6502(void); void tya6502(void); void bra6502(void); void dea6502(void); void ina6502(void); void phx6502(void); void plx6502(void); void phy6502(void); void ply6502(void); void stz6502(void); void tsb6502(void); void trb6502(void);//Non maskerable interrupt void nmi6502(void);//不可屏蔽中斷//Maskerable Interrupt void irq6502(void);//可屏蔽中斷//must be called first to initialise all 6502 engines arrays //初始化CPU RAM void init6502mem( u8* exp_romptr,u8* sramptr, u8* prg_rombank0ptr, u8 rom_num);//sets all of the 6502 registers. The program counter is set from //locations $FFFC and $FFFD masked with the above addrmask void reset6502(void);//run the 6502 engine for specified number of clock cycles void exec6502(int timerTicks);#endif

總結

以上是生活随笔為你收集整理的第五篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇完结nes模拟器的移植)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

黄av免费| 人人模人人爽 | 亚洲激情一区二区三区 | 欧美精品国产综合久久 | 又黄又爽又刺激视频 | 在线免费高清 | 日韩超碰 | 午夜日b视频 | 国产手机视频在线播放 | 手机看片中文字幕 | 操碰av | 亚州免费视频 | 免费在线观看一级片 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91最新视频 | 日韩在线| 超碰在线个人 | 国产爽妇网 | 日本韩国精品在线 | 日日干天天 | 91在线播放综合 | 丝袜美腿在线视频 | 精品国内自产拍在线观看视频 | 亚洲欧美偷拍另类 | 一区二区三区免费网站 | 亚洲黄色一级电影 | 日韩在线观看一区二区三区 | 日韩电影久久 | 色午夜 | 国产精品24小时在线观看 | 国产黄色片免费在线观看 | 狠狠色丁香婷婷综合 | 九九九热 | 超碰精品在线观看 | 日韩成人在线免费观看 | 色综合狠狠干 | 91大神精品视频 | 国产精品免费久久久 | 日韩高清一二区 | 久久一二三四 | 色www永久免费 | 成人a大片| 久久精品视频免费播放 | 亚洲永久av | 久久久久 免费视频 | 色偷偷88欧美精品久久久 | 欧美最猛性xxx | 成年人免费av网站 | 中文字幕资源网 | 娇妻呻吟一区二区三区 | 国产午夜精品一区二区三区欧美 | 久久综合精品国产一区二区三区 | 欧美天堂视频在线 | 久久久免费 | 五月激情婷婷丁香 | 亚洲精品一区二区18漫画 | 人人揉人人揉人人揉人人揉97 | 国产成人一级 | 亚洲国产中文字幕在线观看 | 色爱成人网 | 久久久久久久久免费视频 | 欧美黑人性爽 | 99久久99久久综合 | 狠狠操狠狠插 | 精品一区二区在线观看 | 精品一区三区 | 天天摸天天干天天操天天射 | 国产一级在线观看 | 欧美激情操 | 九九在线免费视频 | 天天草天天干天天射 | 黄色精品在线看 | 欧美一二三区在线观看 | 91精品国产欧美一区二区成人 | 午夜免费视频网站 | 久久婷婷色综合 | 九九热1| 中文字幕亚洲欧美 | 亚洲国产精品一区二区尤物区 | 中文字幕一区二区三区四区视频 | 在线观看黄av| 成人黄色毛片视频 | 人人讲| 亚洲精品国 | 91禁在线看 | 综合色伊人 | 亚洲精品456在线播放第一页 | 久精品一区 | 久久精品日本啪啪涩涩 | 中文视频在线播放 | 毛片视频网址 | 伊人开心激情 | 青青视频一区 | 亚洲国产精品久久久久 | 国产69精品久久99的直播节目 | 欧美激情视频在线观看免费 | 亚洲视频免费在线看 | 欧洲在线免费视频 | 久久视频精品 | 午夜精品久久久久久 | 午夜精品久久久久久 | 日日夜夜噜噜噜 | 日韩大片免费在线观看 | 亚洲激情一区二区三区 | 日本久久久精品视频 | 久久黄色影院 | 久久只精品99品免费久23小说 | 国产一区二区三区免费视频 | a级国产片 | 日韩美在线| 亚洲成aⅴ人在线观看 | 一区二区三区四区久久 | 国产一区二区三区高清播放 | 国产xx视频 | 免费a网站 | 日本久久不卡视频 | 久久久精品久久日韩一区综合 | 欧美天堂影院 | 免费美女久久99 | 日日干综合 | 91热精品| 国产成人一区二区三区影院在线 | 欧美精彩视频在线观看 | 日韩在线视频一区二区三区 | 天天插视频 | 99精品视频免费观看视频 | 免费在线91 | 久久久免费精品 | 黄色在线小网站 | 99视频久| 色五月色开心色婷婷色丁香 | 中文字幕资源在线观看 | 亚洲黄在线观看 | 毛片网在线播放 | 99免费| 国产精品美女久久久免费 | a久久免费视频 | 九9热这里真品2 | 日韩视频一区二区三区 | 在线视频 91 | 久久这里只有精品久久 | 500部大龄熟乱视频 欧美日本三级 | 国产无套精品久久久久久 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 久久福利精品 | 天天干天天摸 | 91入口在线观看 | av免费看电影| 欧美一级视频在线观看 | 手机在线看片日韩 | 中文字幕视频一区二区 | 国产成人不卡 | 911国产精品| 国产精品99久久久久久有的能看 | 国内精品小视频 | www.天天草 | 99精品免费久久久久久久久日本 | 在线观看韩日电影免费 | 亚洲美女免费精品视频在线观看 | 国模精品在线 | 超黄视频网站 | 深爱激情站| 久久精品久久精品久久 | 久久网站最新地址 | 国产色女人| 色偷偷88888欧美精品久久 | 亚洲年轻女教师毛茸茸 | 久久亚洲影视 | 成人免费在线播放视频 | 在线播放91 | av福利在线看 | 日黄网站 | 欧美日韩不卡一区二区三区 | 99视频+国产日韩欧美 | 久一在线 | 在线看av的网址 | 国产精品久久久av久久久 | 91精品国产自产91精品 | 91在线精品一区二区 | 天天搞天天干天天色 | 999久久久欧美日韩黑人 | 天天色天天综合网 | 国产精品毛片一区二区在线看 | av在线播放中文字幕 | 亚洲视频免费在线观看 | 91爱爱免费观看 | 久草com | 国产一区成人 | 狠狠色狠狠综合久久 | 国产精品观看视频 | 免费观看丰满少妇做爰 | 五月天中文在线 | 美州a亚洲一视本频v色道 | 亚洲国产欧美在线人成大黄瓜 | 欧美午夜视频在线 | 成年人网站免费观看 | aaawww| 在线免费av播放 | 亚洲综合日韩在线 | 久久夜色精品国产欧美一区麻豆 | 最新av在线播放 | 四虎永久国产精品 | 亚洲成aⅴ人片久久青草影院 | 免费看成人av | 在线观看va | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 福利一区二区在线 | 久草在线资源观看 | 六月丁香婷婷在线 | 免费精品视频在线观看 | 最新午夜电影 | 久久伦理电影网 | www.夜色.com | 亚洲女欲精品久久久久久久18 | 国产不卡片 | 成人精品一区二区三区中文字幕 | 又黄又爽又无遮挡免费的网站 | 在线观看日本高清mv视频 | 日韩精品第1页 | 免费黄色av| 国内精品中文字幕 | 伊人国产在线观看 | 国产精品18久久久久久久久久久久 | www.亚洲精品视频 | 免费又黄又爽的视频 | 操久在线 | 综合黄色网 | 五月天婷婷免费视频 | 久久免费视频在线观看6 | 97免费| 日韩国产高清在线 | 五月激情五月激情 | 久久精品视频4 | 视频一区二区在线 | 欧美精品少妇xxxxx喷水 | 久久精品日本啪啪涩涩 | 伊人精品在线 | 欧美午夜a | 西西444www大胆无视频 | 一区二区男女 | 超碰97网站 | 久久久久久久久久久久久影院 | 精品免费视频 | 91精品亚洲影视在线观看 | 91在线中字 | av福利超碰网站 | 在线视频在线观看 | 97人人爽 | 亚洲精品网站在线 | 成人动漫视频在线 | 色九九视频 | 欧美热久久| 天天人人| 超碰99人人 | 欧美精品乱码久久久久久按摩 | 特级毛片网站 | 日韩中文字幕亚洲一区二区va在线 | 国产精品69久久久久 | 91欧美日韩国产 | 亚洲91精品 | www激情网| 日韩精品在线看 | 欧美久久久久久久久久 | 欧美高清成人 | 免费高清在线观看电视网站 | 狠狠狠干狠狠 | 激情综合网五月 | 在线观看小视频 | 91在线观看高清 | 欧美精品亚洲精品 | 五月婷婷av在线 | 97精品超碰一区二区三区 | 免费av大全 | 91成人精品一区在线播放 | 日韩精品免费在线播放 | 国产一级视频在线 | 久久久网页 | 97国产情侣爱久久免费观看 | 成人国产电影在线观看 | 日韩中文字幕免费视频 | 人人草天天草 | av在线一二三区 | 免费精品人在线二线三线 | 亚洲午夜精品福利 | 天堂av最新网址 | 午夜999 | 久久91久久久久麻豆精品 | 久久天天拍 | 亚洲乱码精品 | 五月激情片 | 中文字幕中文字幕在线一区 | 亚洲精品在线观看网站 | 久久久久久久久久久久电影 | 亚洲视屏一区 | 伊人开心激情 | 人人藻人人澡人人爽 | 久久精品亚洲精品国产欧美 | 国产欧美精品一区二区三区四区 | 狠狠干狠狠操 | 一区二区三区四区免费视频 | www.天天干 | 一区二区三高清 | av中文资源在线 | 亚洲乱亚洲乱亚洲 | 九九激情视频 | 四虎在线观看视频 | 成人国产精品久久久久久亚洲 | 久久试看 | 99精品视频免费看 | 日韩特黄av| 五月亚洲婷婷 | 在线电影日韩 | 成年人黄色免费看 | 在线观看深夜视频 | av福利在线看 | 国产aa免费视频 | 特级西西444www大精品视频免费看 | 欧美一二在线 | 蜜臀av一区二区 | 另类五月激情 | 特级西西人体444是什么意思 | av专区在线 | 国产精品久久久久一区二区 | 正在播放 久久 | 久久久这里有精品 | 国产精品一区二区三区在线看 | 日韩在线看片 | 亚洲丝袜一区 | 美女在线黄 | 久久视频在线视频 | 久久久精品在线观看 | 三级免费黄色 | 9999精品| 久久久久女人精品毛片九一 | 91大神一区二区三区 | 九九视频这里只有精品 | 一区二区不卡在线观看 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 久久爱影视i| www.久久久精品 | 日韩资源在线播放 | 久久66热这里只有精品 | 国产成人精品亚洲精品 | 亚洲欧美日韩精品久久久 | 中文字幕亚洲字幕 | 精品产品国产在线不卡 | 日韩欧美高清一区二区 | 一区二区三区韩国免费中文网站 | 亚洲乱码在线 | 国产亚洲精品久久久久久移动网络 | 久99久在线视频 | 久久久久久久久久久久久久电影 | 三级av免费看 | 在线日本看片免费人成视久网 | 欧洲精品久久久久毛片完整版 | 精品久久久久久国产91 | 高清av免费一区中文字幕 | 久久免费成人精品视频 | 99视频精品全国免费 | 久久不射影院 | 成人av av在线| 综合网伊人 | 日本中文字幕在线视频 | 天天玩天天操天天射 | 国产精品日韩 | 色多多在线观看 | 成年人免费在线播放 | 国内久久视频 | 天天射天天艹 | 人人插人人爱 | 国产首页 | 91传媒视频在线观看 | 成片免费 | 日韩精品高清视频 | 中文字幕婷婷 | 91久色蝌蚪| 91精品区 | 99久久激情| 国产日韩中文字幕在线 | 国产在线999| 亚洲高清视频在线观看免费 | 激情综合五月天 | 激情在线五月天 | 国产精品精品久久久久久 | 欧美日韩一二三四区 | 日本精品xxxx | 五月婷婷操| 免费观看一区二区三区视频 | 丁香综合av| 西西444www大胆高清图片 | 在线观看中文字幕2021 | 中字幕视频在线永久在线观看免费 | 婷婷中文字幕在线观看 | 久久婷婷网 | 麻豆国产网站 | 国产精品一区二区在线观看免费 | 久久久久国产精品视频 | 国产精品精品久久久 | 中文字幕九九 | 又黄又爽又刺激视频 | 日韩av一区二区在线播放 | 97香蕉视频 | 69精品在线观看 | 色www.| 欧美精品做受xxx性少妇 | 五月天天色 | 六月婷婷色 | 久久艹影院 | 色综合天 | 成人在线免费小视频 | 最近av在线 | 人人干在线| 超碰97人人射妻 | 精品久久久久久久久中文字幕 | 精品久久福利 | 国产美女免费视频 | 国产午夜精品久久 | 99视频精品全国免费 | 久色伊人| 亚洲精品午夜一区人人爽 | 丁香婷婷在线观看 | 九九热1 | 在线免费视 | 免费男女羞羞的视频网站中文字幕 | 日韩高清dvd | 精品在线观看国产 | 五月婷婷综合色拍 | 黄在线免费看 | 欧美亚洲国产日韩 | 蜜桃视频日本 | 日本最大色倩网站www | www日韩在线观看 | 亚洲一区二区高潮无套美女 | 精品中文字幕在线观看 | 欧美综合色在线图区 | 亚洲 欧美 综合 在线 精品 | 日韩av进入 | 久久精品久久久精品美女 | www.日韩免费| 国产91成人在在线播放 | 99欧美精品 | 免费av 在线| 国产91精品欧美 | 日韩在线 一区二区 | 亚洲三级在线免费观看 | 天天操天天射天天 | 久久免费看a级毛毛片 | 色视频网站在线观看一=区 a视频免费在线观看 | 精品国产一区二区三区不卡 | 97超碰超碰久久福利超碰 | 国产亚洲精品久久久久久 | 99免费看片 | 美女免费视频一区二区 | 国产精品av在线免费观看 | 欧洲精品码一区二区三区免费看 | 激情网五月 | 亚洲视频在线看 | 久久亚洲欧美日韩精品专区 | 国产精品久久久久久久毛片 | 蜜臀aⅴ国产精品久久久国产 | 成人免费观看视频网站 | 久草视频视频在线播放 | 丁香九月激情 | 欧美在线视频二区 | 国产一区视频在线观看免费 | 国产黄免费看 | 欧美日韩在线观看一区 | 500部大龄熟乱视频使用方法 | 黄色电影在线免费观看 | 精品国产激情 | 国产一区二区三区高清播放 | 久久国产精品视频观看 | 二区三区在线视频 | 性色大片在线观看 | 亚洲日本精品视频 | 日本护士三级少妇三级999 | 国产96精品 | 人人射人人爱 | 成人av电影在线观看 | 日本三级久久久 | 啪啪肉肉污av国网站 | 一区二区三区精品久久久 | 91免费看片黄 | 99久久精品费精品 | 91资源在线免费观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 免费久久99精品国产 | 四虎成人精品在永久免费 | 亚洲色图av | 久久国产电影 | 国产伦精品一区二区三区无广告 | 亚洲影视九九影院在线观看 | 九色视频自拍 | 天天操天天操天天操天天操天天操 | 欧美日韩免费视频 | 亚洲四虎影院 | 欧美日韩国产精品一区二区 | 中文av日韩 | 久久久久久久久电影 | 亚洲国产中文字幕在线视频综合 | 九九精品视频在线观看 | 亚洲欧美视频网站 | 欧美激情第一页xxx 午夜性福利 | 五月激情丁香婷婷 | 麻花天美星空视频 | 日韩视频图片 | 欧美日韩一区三区 | 国产中文字幕一区 | 在线v片免费观看视频 | 国产999精品视频 | 亚洲狠狠操 | 在线观看中文字幕一区 | 日韩免费福利 | 伊人va| 日韩精品视频在线观看免费 | 五月婷综合网 | 亚洲人成在线观看 | 精品1区二区 | 奇米影视8888| 久久综合欧美精品亚洲一区 | 国产午夜一级毛片 | av资源免费看 | 韩国三级av在线 | 国产精品亚 | 亚洲美女视频在线观看 | 欧美日韩精品二区第二页 | 91热爆视频| 激情五月婷婷激情 | 在线免费黄色毛片 | 欧美精品乱码99久久影院 | 久久综合久久综合久久综合 | 色吧av色av | 久久久久久久久久久国产精品 | 国产日韩欧美在线播放 | 国产精品自在欧美一区 | 久久大视频 | 久久综合之合合综合久久 | 国产精品视频在线观看 | 中文字幕在线观看免费观看 | 国产亚洲亚洲 | 97超碰人人在线 | 成人中文字幕在线 | 国产999精品久久久久久绿帽 | 综合色中文 | 爱情影院aqdy鲁丝片二区 | 久久精品人人做人人综合老师 | 日韩免费在线看 | 手机看片久久 | 久草精品电影 | 国产精品视频免费看 | 国产伦精品一区二区三区高清 | 成人av教育 | 天天舔天天射天天操 | 天堂v中文 | 国产精品大片在线观看 | 永久免费av在线播放 | 91亚洲国产成人久久精品网站 | 欧美精品久久久久久 | 国产一级免费观看 | 亚洲精品videossex少妇 | 在线成人小视频 | 国产精品久久一区二区三区, | 99亚洲视频 | 亚洲理论视频 | 激情在线网| 日韩一区二区三区高清免费看看 | 在线播放视频一区 | 丁香一区二区 | 国产精品美女久久久久久2018 | 国产高清在线观看av | 人人爽人人爽人人爽 | 久草在线最新免费 | 91中文字幕在线播放 | 日韩在线视 | 天天操天天添天天吹 | 日韩理论在线观看 | 国产福利91精品 | 亚洲成a人片综合在线 | 国产色资源 | 伊色综合久久之综合久久 | 精品视频在线看 | 91av视频在线观看 | 亚洲国产成人在线 | 亚洲妇女av | 青青河边草免费视频 | 欧美另类v | 亚洲国产中文字幕在线观看 | 91精品视频免费看 | av中文字幕第一页 | 五月婷婷色综合 | 亚洲一级电影在线观看 | 亚洲国产精品电影 | 9ⅰ精品久久久久久久久中文字幕 | 婷婷色综合色 | 日韩和的一区二在线 | 久久久精品成人 | 久99久精品视频免费观看 | 久久久久免费观看 | 狠狠操欧美 | 国产直播av| 国产精品免费看久久久8精臀av | 精品一区免费 | 五月激情丁香 | 久久久2o19精品 | 日韩三区在线观看 | 免费看成人av | 免费看黄色小说的网站 | 日本一区二区免费在线观看 | 999成人| 天天干,天天操,天天射 | 永久av免费在线观看 | 99久久99久国产黄毛片 | 成人在线免费视频 | 在线观看va | 中文字幕精品www乱入免费视频 | 国产成在线观看免费视频 | 国产成人精品一区在线 | 欧美日韩激情视频8区 | 99久久婷婷国产一区二区三区 | 91成人精品视频 | 亚洲精品国产欧美在线观看 | 一区三区在线欧 | 久久免费中文视频 | 精品久操 | 国产一线天在线观看 | 国产999精品 | 亚洲欧美视频网站 | 欧美日韩裸体免费视频 | 最近最新最好看中文视频 | 在线观看日韩视频 | 午夜免费视频网站 | 曰韩精品| 美女免费网视频 | a黄色影院 | 亚洲一区二区精品3399 | 在线免费精品视频 | 99在线观看视频 | 91视频免费| 综合久久久 | 国产精品免费看久久久8精臀av | 亚洲黄色小说网址 | 免费日韩一区二区三区 | www.97色.com | 亚洲日本色 | 国产黄色大全 | 成年人黄色免费网站 | av免费观看网站 | 91av欧美 | av在线免费不卡 | 精品国产91亚洲一区二区三区www | 欧美激情视频一二区 | 黄色成年 | 黄a网站 | 毛片久久久 | 天天综合区 | 九九九热精品免费视频观看网站 | 日韩在线电影一区二区 | 天天综合网在线 | 国产日韩欧美在线 | 国产高清免费视频 | 夜夜夜夜爽 | 成人免费电影 | 99精品视频免费 | 国产精品美女视频 | 最新婷婷色 | 五月香视频在线观看 | 人人擦 | 国产色 在线 | 日韩在线视频在线观看 | 天堂av免费 | 日韩免费视频 | 在线久热 | 青春草视频 | 国产99在线免费 | 天堂在线v| 国产精品精品国产婷婷这里av | 日韩精品欧美精品 | www..com黄色片| 99热最新网址 | 亚洲一区二区精品视频 | 激情综合婷婷 | 91大神电影 | 国产在线观看国语版免费 | 一区二区三区日韩视频在线观看 | 亚洲国内精品在线 | 国产福利免费在线观看 | 99re亚洲国产精品 | 九九综合九九 | 久久精品视频日本 | 97人人澡人人爽人人模亚洲 | 日日噜噜噜噜夜夜爽亚洲精品 | 91看成人 | 91爱爱电影 | 国产精品区二区三区日本 | 久草国产视频 | 九九爱免费视频在线观看 | 国产精品第二页 | 91av亚洲| 夜夜躁狠狠燥 | 69国产盗摄一区二区三区五区 | www.xxx.性狂虐 | 香蕉影视在线观看 | 国产手机在线播放 | 婷婷激情影院 | 九七视频在线 | 亚洲美女免费精品视频在线观看 | 久久激情网站 | 一本大道久久精品懂色aⅴ 五月婷社区 | 97色免费视频 | 天堂av官网 | 天堂av在线7 | 亚洲黄色免费在线看 | 国产一级a毛片视频爆浆 | 精品一区二区在线免费观看 | 中文字幕av最新 | 黄网站免费久久 | 中字幕视频在线永久在线观看免费 | 成人av视屏 | 五月婷久 | 婷婷色在线资源 | 久草视频在线资源站 | 日韩欧美精品在线 | 精品国产精品久久一区免费式 | 超碰在线日韩 | 人人干狠狠操 | 亚洲国产中文字幕 | 999久久国精品免费观看网站 | 国产精品日韩精品 | av在线播放不卡 | 久久久国产精品一区二区中文 | 国产成人精品一区二区 | 午夜久久久影院 | 九九久久国产精品 | 射射射av | 久久综合综合久久综合 | 毛片在线播放网址 | 久久综合久久综合这里只有精品 | 国产日韩视频在线播放 | 91精品国产成人 | 国产精久久久久久久 | 狠狠操天天射 | 久草视频在线免费 | 欧美aⅴ在线观看 | 亚洲va欧洲va国产va不卡 | 国产成人精品一区二区三区在线观看 | 日韩精品短视频 | 亚洲一区二区三区在线看 | 婷婷久草 | 狠狠干天天色 | 亚一亚二国产专区 | 亚洲爱视频 | 免费看麻豆 | 操高跟美女 | 国产96在线视频 | 天天干夜夜夜操天 | 2019久久精品 | 国产97在线观看 | 在线中文视频 | 九九免费精品 | 99热免费在线 | 超碰97人人在线 | 亚洲日本精品 | 日韩免费视频在线观看 | 久久公开视频 | 久草免费电影 | 精品国产123 | www.亚洲精品视频 | 天天色天天综合 | 亚洲国产婷婷 | 99热九九这里只有精品10 | 久久久精品在线观看 | 在线观看黄色免费视频 | 国产成人在线精品 | 在线看黄色的网站 | 婷婷av电影 | 精品在线观看免费 | 一区二区三区四区精品 | 天天操 夜夜操 | 99在线高清视频在线播放 | 国产原创在线观看 | 99精品在线观看视频 | 91大片网站 | 亚洲成熟女人毛片在线 | 99视频精品在线 | 人人干干人人 | 婷婷午夜| 日韩在线观看你懂的 | 天天草av| 97网在线观看 | 婷婷色网视频在线播放 | 中文一区在线观看 | 精品一区 在线 | 在线免费观看黄 | 久久久国产精品免费 | 九九在线视频免费观看 | 久久这里有精品 | 国产高清精品在线 | 国产资源精品在线观看 | www.色国产| av成人在线播放 | 97视频免费看 | 在线高清一区 | 五月天狠狠操 | 玖玖在线观看视频 | 午夜av在线电影 | 在线播放亚洲 | 狠狠成人 | 玖玖在线精品 | 久久试看| 首页av在线 | a一片一级 | 在线观看一区二区视频 | 国产在线一区二区三区播放 | 亚洲综合色丁香婷婷六月图片 | 日本狠狠色| 久久久久久久久久免费视频 | 久久久av免费 | 亚洲综合视频在线观看 | 黄色a在线观看 | 国产精品久久久久久久久久免费 | 久久男人中文字幕资源站 | 伊人资源视频在线 | 天天色 天天 | 国产黄色免费观看 | av一级在线观看 | 天天亚洲综合 | 国内视频一区二区 | 久久久免费高清视频 | 国产色婷婷精品综合在线手机播放 | 日韩av网站在线播放 | 嫩模bbw搡bbbb搡bbbb | 久久精品视频国产 | 四虎国产精 | 最近中文字幕大全 | 久久久久久久亚洲精品 | 国产精品成人自产拍在线观看 | 黄色在线观看www | www亚洲国产 | 日韩电影中文字幕在线 | 精品嫩模福利一区二区蜜臀 | 六月丁香六月婷婷 | www.色的| 国产高清绿奴videos | 波多野结衣综合网 | 俺要去色综合狠狠 | 一区二区三区影院 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 国产美女免费观看 | 成人av免费在线看 | 国产伦理久久 | 伊人久久av| 五月婷久久 | 国产一区二区三区在线 | 亚洲精品99久久久久久 | 九九免费观看全部免费视频 | 91手机在线看片 | 亚洲 欧洲 国产 精品 | 五月天亚洲激情 | av中文字幕不卡 | 国产亚洲综合性久久久影院 | 国产精品99久久久久久宅男 | 欧美日韩免费观看一区二区三区 | 一区二区观看 | 又黄又爽的视频在线观看网站 | 久久综合色影院 | 日韩两性视频 | 日韩大片在线播放 | 国产一区二区不卡视频 | 国产成人av一区二区三区在线观看 | 精品女同一区二区三区在线观看 | 成人三级视频 | 在线电影日韩 | 婷婷日韩| 中文字幕在线观看视频一区 | 久久精品综合 | 91成人精品一区在线播放69 | 国产精品一码二码三码在线 | 日韩艹 | 日本性生活一级片 | 中文字幕丝袜美腿 | 精品久久久久亚洲 | 国产亚洲久一区二区 | 久久精品91久久久久久再现 | 久热色超碰 | 日韩精品在线播放 | 免费日韩一区 | 免费观看全黄做爰大片国产 | 粉嫩高清一区二区三区 | 天天色影院 | 色999精品 | 精品国产1区2区3区 国产欧美精品在线观看 | 色偷偷88888欧美精品久久 | 青青草国产成人99久久 | 婷婷六月天天 | 九九久久国产 | 狠狠的日 | 97色噜噜| 精品久久久一区二区 | 91高清免费在线观看 | 亚洲撸撸 | 国产精品自拍在线 | 日韩精品一区二区三区电影 | 欧美另类网站 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 性色视频在线 | 尤物一区二区三区 | 欧美性精品 | 嫩草av在线 | 日日爱夜夜爱 | 久久亚洲专区 | 精品免费国产一区二区三区四区 | 热久久视久久精品18亚洲精品 | 中文字幕日韩电影 | 欧美一级性生活 | 人人狠狠综合久久亚洲 | 黄网站色视频 | 91福利区一区二区三区 | 国产精品成人品 | 国产精品久久久久久久久久免费看 | 国产一区二区在线播放 | 日韩免费精品 | 九色精品免费永久在线 | 国产高清在线免费 | 久久99最新地址 | 最新日韩视频在线观看 | 日韩色综合 | 成人毛片100免费观看 | 99产精品成人啪免费网站 | 日韩免费福利 | 久久久久久毛片精品免费不卡 | 亚洲永久精品在线 | 亚洲视频免费在线看 | 成人午夜电影久久影院 | 免费在线观看黄网站 | 国产精品24小时在线观看 | 操操操日日日干干干 | 九九九九热精品免费视频点播观看 | 午夜免费福利片 | 奇米网网址 | 极品美女被弄高潮视频网站 | 亚洲一级电影在线观看 | 九九视频在线 | 国产小视频免费在线观看 | 日韩一区在线免费观看 | 日韩精品无 | 亚洲日本一区二区在线 | 国产高清在线免费观看 | 超碰大片 | 97精品国自产拍在线观看 | 免费成视频 | 在线a人v观看视频 | 久久亚洲私人国产精品 | 91粉色视频 | 精品日韩视频 | 成人av资源在线 | 99在线精品观看 | 麻豆影视在线免费观看 | 日韩电影一区二区三区在线观看 | 色视频国产直接看 | 成人免费视频网站在线观看 | 久久无码av一区二区三区电影网 | 国产在线观看你懂得 | 国产资源网站 | 国产中文字幕在线观看 | 国产录像在线观看 | 久热av| 免费看毛片网站 | 国模一二三区 | 中文字幕精品一区二区精品 | 在线免费亚洲 | 粉嫩av一区二区三区免费 | 黄色免费观看网址 | 9ⅰ精品久久久久久久久中文字幕 | 日本性动态图 | 美女视频又黄又免费 | 国产精品综合在线 | 久久免费片 | 99色免费视频 | 探花视频免费观看高清视频 | 99久久99久久综合 | 亚洲国产精品成人女人久久 | 国产91免费看 | 一区二区 精品 | 久久影视一区 | 国产美女被啪进深处喷白浆视频 | 精品毛片在线 | 精品亚洲欧美一区 | 国产精品v欧美精品v日韩 | 婷婷丁香六月 | 色资源中文字幕 | 99久久激情| 五月婷婷激情网 | 久操视频在线播放 | 国产精品一区二区免费视频 | 天堂av影院| 国产一级在线免费观看 | 精品人人人 | 日韩a级黄色 |