簡要規格
CPU:M900 XCM2010GP40 (全志F1C100S)
RAM:32MB
屏幕:3.0吋 320x240解析度
卡槽:MicroSD
按鍵:十字鍵、4顆按鍵、Start、Select、L、R、電源鍵、音量鍵
USB:充電功能(並沒有連接到USB DP、DM)
電池:3.7V 1100mA或AAA x 3
尺寸:140mm x 68mm x 18mm
重量:110克
正面
下邊
側邊
上邊
側邊
相當感謝背包胖雄告知司徒這台掌機的存在,於是司徒上淘寶看了一下,發現一台才115 RMB,這也太便宜了吧!比起現今的開源掌機,動不動就350 RMB起跳,司徒覺得這麼貴的開源掌機已經變味了,強調的東西已經不是當初開源掌機訴求的模擬樂趣,反而是花錢收藏的詭異現象,除非是司徒相當喜愛的外觀(如:Wiz掌機),否則司徒有錢也不願意購買現今那種昂貴的掌機,不過可能太久沒有買掌機了,司徒竟然不小心,手滑買了4台FC3000掌機
這質感真的相當不錯,完全對得起這個價格
另一個配色也相當好看
Micro USB、AV輸出
沒有東西
L、R按鍵,這設計真是...
電源按鍵、音量按鍵
背面摸起來還蠻舒服的
這空間相當適合改機
電池和卡帶
BL-5C電池
這卡帶是用來回味童年的嗎?
背面
竟然有螺絲,不過,當看到時,已經被司徒爆力拆解了
A21?這難道是1MB記憶體擴充?
背面
司徒已經很久沒有看到這長的螺絲了...
A面
按鍵導電膠,這導電膠有點軟
十字鍵缺乏支撐點
正面
霧面屏
24Pin排線
PCB
背光電路
25Q064A
PCB
斜面喇吧
PCB
側邊
側邊
另一顆25Q064A
M900,其實仔細一看腳位,對照一下Miyoo電路圖,就知道是Allwinner F1C100S
1. 2腳、3腳短路
2. 30腳、31腳、32腳是DRAM-VCC
3. 51腳、52腳是振盪器
4. 59腳、60腳、61腳、62腳是啟動SPI Flash
Miyoo電路圖
LM4890、加密IC
MicroSD
這張MicroSDC看來只存放模擬器相關的東西
离线
原本的USB D-是接到PD0、D+是接到PD9
為了可以進行USB下載,司徒只好把線割了
跳線
接著短路SPI Flash第1腳跟第2腳,然後上電
進入燒錄模式
$ sudo dmesg -c
[50227.418454] usb 1-1: USB disconnect, device number 115
[50302.847603] usb 1-1: new full-speed USB device number 116 using xhci_hcd
[50302.996616] usb 1-1: New USB device found, idVendor=1f3a, idProduct=efe8, bcdDevice= 2.b3
[50302.996620] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
$ lsusb
Bus 001 Device 116: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode
离线
不知道为什么图片都看不到
其实都有关注司徒的网站,但不知道更新了什么,每次都要先从github看时间,再去网站查看对应的更新
离线
司徒量測了一下按鍵,發現沒有適合可用,因此,決定焊接一顆獨立燒錄按鍵,因此,找到一塊風水寶地
完成,之後只要按下按鍵開機,即可進入燒錄模式
進入燒錄模式
執行如下命令
$ sunxi-fel -p spiflash-read 0 8388608 boot_spiflash.img
100% [================================================] 8389 kB, 193.6 kB/s
离线
正所謂工欲善其事,必先利其器,目前已經確定CPU是F1C100S,也就是可以確定百分百可以把開源的東西移植上來,畢竟有荔枝派Nano這麼優秀的開源專案在,不過,如果可以把點屏的事情搞定,那才可以稱得上一部比較完美的開源掌機,因此,司徒參考暈哥其他篇文章關於JTAG的介紹,也製作了JTAG連接,這樣至少就可以開始單步除錯原廠的韌體程式
由於JTAG腳位與MicroSD卡腳位共用,但是,司徒量測後,發現有幾根腳位並沒有拉到MicroSD,因此,司徒只好找尋一下焊點
跳線
接著,請先拔掉JTAG的USB電源,然後,讓F1C100S進入燒錄模式,接著連接JATG USB電源
連接成功
离线
@司徒
听闻司徒大佬捣鼓新开源机,特意注册账号来膜拜大佬,
竟然也是100s,那不就是miyoo换壳么,
搞出来也和miyoo一样啊,大佬为何不直接再优化下miyoo的系统呢?
最近编辑记录 怀旧堂 (2021-06-11 15:00:07)
离线
感谢分享。
离线
看了这么些年司徒的帖子,司徒基本上还是这个套路。
离线
@司徒
司徒大佬别介意,"套路"在大陆我认为是中性词,没有感情色彩。
离线
感谢大佬分享
离线
看了这么些年司徒的帖子,司徒基本上还是这个套路。
一步步记录,方便以后查看,特别是遇到问题后心路历程
离线
@三木同子
真心感謝幫忙整理這個文件
2018-12-27 ~ 2019-04-22是當初Miyoo開發開源的時間,在短短不到半年的時間,擠出那個開源系統,確實太倉促,很多東西都沒有好好製作,因此,此次結合FC3000以及小橫米(PocketGo),司徒會把整個開發開源的週期拉長到一年的時間,這次看看有無機會把一些系統以及模擬器都再次優化,意思就是,當大家進入whycan論壇時,就會常常看到這個貼子,哈
我也把當初移植Linux到Miyoo的過程放到GitHub,供需要的人可以參考
Miyoo掌機 移植Linux系統和模擬器.pdf
离线
@司徒
没诈骗这个意思。是指固定作业模式。
离线
接著,我們必須找出屏的初始化代碼,這樣才可以順利進到下一個步驟,不過,要找出初始化代碼是一個困難點,因為就司徒所知,官方韌體有加密IC保護,因此,我們有可能會被加密IC繞圈圈,不過,總是要先試試才知道困難點
接著開始Debug官方韌體程式,由於BROM只有32KB,加上韌體程式在前面就會把主要ROM複製到0x80000000,因此,抓前面32KB就可以,注意此時SPI Flash要燒錄官方原本的韌體,這樣才可以讓它加載到0x80000000
$ dd if=boot_spiflash.img of=loader.bin bs=1K count=32
32+0 records in
32+0 records out
32768 bytes (33 kB, 32 KiB) copied, 0.000192325 s, 170 MB/s
接著拔除JTAG接線,讓F1C100S進入燒錄模式,接著連接JTAG並且使用如下命令載入程式
接著開啟J-Link GDB Server,記得選ARM9晶片
Listening on TCP/IP port 2331
接著使用IDA Pro載入loader.bin
Debugger > Switch debugger...
連接到localhost 2331
目前PC還是在BROM,設定斷點在0x00000000
按下F9,讓它跑到斷點位置
接著就可以開始單步
跳轉到0x81f80164
不知道是否為山寨板J-Link仿真器的問題,司徒發現,常常Debug到一半就跑飛了,哈,這叫我如何是好呢...
离线
司徒,不要debug了,这里有原始码,不要怀疑,这个loader的源头都在这里。
https://github.com/xboot/xboot/blob/master/src/arch/arm32/mach-f1c100s/start.S
离线
/* Initial system clock, ddr add uart */
bl sys_clock_init
bl sys_dram_init
bl sys_uart_init
/* Boot speed up, leave slower sram */
adr r0, _start
ldr r1, =_start
cmp r0, r1
beq _speedup
ldr r0, =0x81f80000
adr r1, _start
ldr r2, =__spl_size
bl memcpy
ldr r0, =_speedup
ldr r1, =_start
sub r0, r0, r1
ldr r1, =0x81f80000
add r0, r0, r1
mov pc, r0
_speedup:
nop
/* Copyself to link address */
adr r0, _start
ldr r1, =_start
cmp r0, r1
beq 1f
bl sys_copyself
1: nop
离线
@xboot
我要找出屏的初始化代碼或者初始數據,我逆了一些代碼後,發現有一些代碼跟xboot很像,但是又不是完全一樣,你應該早點來的告訴我的,哈,這個FC3000掌機的作者應該是在你的xboot QQ群,你可以幫我問下,是否可以給我屏的初始化代碼嗎?這樣我就可以跳過這個步驟,繼續往下走,哈,不然,要找出屏的初始化代碼,可能會花上一些時間,感謝啦
@哇酷小二
這個屏應該是CPU Interface,你看看可不可以幫忙找出TCON設定以及輸出那段在哪?感謝啦
SPI Flash Image
离线
CPU接口的3寸24pin的320x240,掐指一算可能是st7789
司徒可以尝试一下量第3脚,看看是不是背光
离线
@luali
敢問閣下是否為加藤鷹傳人,你這一掐指果真厲害,屏的背光控制是第三腳位沒錯,由PE6腳位控制,那這樣我用ST7789來點屏看看,感謝
測試代碼
.global _start
.equ GPIO_BASE, 0x01c20800
.equ PE_CFG0, (GPIO_BASE + (4 * 0x24) + 0x00)
.equ PE_DATA, (GPIO_BASE + (4 * 0x24) + 0x10)
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r0, =PE_CFG0
ldr r1, =0x1000000
str r1, [r0]
ldr r0, =PE_DATA
0:
ldr r2, =100000
1:
subs r2, #1
bne 1b
eor r1, #(1 << 6)
str r1, [r0]
b 0b
.end
可以成功控制屏的背光
离线
@司徒
假如第三脚是背光的话,引脚定义如下所示。其他你懂的:
1 VDD
2 GND
3 LEDA
4 /RESET
5 /CS
6 /RS
7 /WR
8 /RD
9 DB0
10 DB1
11 DB2
12 DB3
13 DB4
14 DB5
15 DB6
16 DB7
17 DB8
18 DB9
19 DB10
20 DB11
21 DB12
22 DB13
23 DB14
24 DB15
离线
离线
目前使用ST7789的初始化代碼測試,發現還是無法點亮這個屏,而量測後的屏腳位,我也感覺怪怪的,因為那個DB順序好像有點故意把高低5 Bits做交換,雖然我也測試了高低5 Bits交換,但是,還是一樣點不亮這個屏,不過,就目前量測的腳位來看,這個屏沒有TS腳位(Tear),所以這個屏應該是有閃屏問題才是,目前F1C100S系列掌機(PocketGo, Miyoo, Q90, V90, Trimui),就我可以看到的資料,就只有PocketGo是可以解掉閃屏問題,因為它有TS腳位
Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST PE11
Pin-05 CS PD21
Pin-06 RS PD19
Pin-07 WR PD18
Pin-08 VDD
Pin-09 DB11 PD13
Pin-10 DB12 PD14
Pin-11 DB13 PD15
Pin-12 DB14 PD16
Pin-13 DB15 PD17
Pin-14 DB5 PD6
Pin-15 DB6 PD7
Pin-16 DB7 PD8
Pin-17 DB8 PD10
Pin-18 DB9 PD11
Pin-19 DB10 PD12
Pin-20 DB0 PD1
Pin-21 DB1 PD2
Pin-22 DB2 PD3
Pin-23 DB3 PD4
Pin-24 DB4 PD5
測試代碼
.global _start
.equiv PIO_BASE, 0x01c20800
.equiv PD, (0x24 * 3)
.equiv PE, (0x24 * 4)
.equiv PIO_CFG0, 0x00
.equiv PIO_CFG1, 0x04
.equiv PIO_CFG2, 0x08
.equiv PIO_DATA, 0x10
.equiv LCD_CS, (1 << 21)
.equiv LCD_RS, (1 << 19)
.equiv LCD_WR, (1 << 18)
.equiv LCD_RST, (1 << 11)
.equiv LCD_BL, (1 << 6)
/*
Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST PE11
Pin-05 CS PD21
Pin-06 RS PD19
Pin-07 WR PD18
Pin-08 VDD
Pin-09 DB11 PD13
Pin-10 DB12 PD14
Pin-11 DB13 PD15
Pin-12 DB14 PD16
Pin-13 DB15 PD17
Pin-14 DB5 PD6
Pin-15 DB6 PD7
Pin-16 DB7 PD8
Pin-17 DB8 PD10
Pin-18 DB9 PD11
Pin-19 DB10 PD12
Pin-20 DB0 PD1
Pin-21 DB1 PD2
Pin-22 DB2 PD3
Pin-23 DB3 PD4
Pin-24 DB4 PD5
*/
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
mov sp, #0x1000
ldr r1, =0x11111111
ldr r4, =PIO_BASE + PD
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
str r1, [r4, #PIO_CFG2]
ldr r4, =PIO_BASE + PE
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
ldr r1, =0xffffffff
ldr r4, =PIO_BASE + PD
str r1, [r4, #PIO_DATA]
ldr r4, =PIO_BASE + PE
str r1, [r4, #PIO_DATA]
bl lcd_rst
ldr r0, =0x11
bl lcd_cmd
ldr r0, =1000
bl delay
ldr r0, =0x36
bl lcd_cmd
ldr r0, =0xb0
bl lcd_dat
ldr r0, =0x3a
bl lcd_cmd
ldr r0, =0x05
bl lcd_dat
ldr r0, =0x2a
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x3f
bl lcd_dat
ldr r0, =0x2b
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0xef
bl lcd_dat
ldr r0, =0xb2
bl lcd_cmd
ldr r0, =116
bl lcd_dat
ldr r0, =16
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x33
bl lcd_dat
ldr r0, =0x33
bl lcd_dat
ldr r0, =0xb7
bl lcd_cmd
ldr r0, =0x35
bl lcd_dat
ldr r0, =0xb8
bl lcd_cmd
ldr r0, =0x2f
bl lcd_dat
ldr r0, =0x2b
bl lcd_dat
ldr r0, =0x2f
bl lcd_dat
ldr r0, =0xbb
bl lcd_cmd
ldr r0, =0x15
bl lcd_dat
ldr r0, =0xc0
bl lcd_cmd
ldr r0, =0x3c
bl lcd_dat
ldr r0, =0x35
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0xc2
bl lcd_cmd
ldr r0, =0x01
bl lcd_dat
ldr r0, =0xc3
bl lcd_cmd
ldr r0, =0x13
bl lcd_dat
ldr r0, =0xc4
bl lcd_cmd
ldr r0, =0x20
bl lcd_dat
ldr r0, =0xc6
bl lcd_cmd
ldr r0, =0x07
bl lcd_dat
ldr r0, =0xd0
bl lcd_cmd
ldr r0, =0xa4
bl lcd_dat
ldr r0, =0xa1
bl lcd_dat
ldr r0, =0xe8
bl lcd_cmd
ldr r0, =0x03
bl lcd_dat
ldr r0, =0xe9
bl lcd_cmd
ldr r0, =0x0d
bl lcd_dat
ldr r0, =0x12
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0xe0
bl lcd_cmd
ldr r0, =0xd0
bl lcd_dat
ldr r0, =0x08
bl lcd_dat
ldr r0, =0x10
bl lcd_dat
ldr r0, =0x0d
bl lcd_dat
ldr r0, =0x0c
bl lcd_dat
ldr r0, =0x07
bl lcd_dat
ldr r0, =0x37
bl lcd_dat
ldr r0, =0x53
bl lcd_dat
ldr r0, =0x4c
bl lcd_dat
ldr r0, =0x39
bl lcd_dat
ldr r0, =0x15
bl lcd_dat
ldr r0, =0x15
bl lcd_dat
ldr r0, =0x2a
bl lcd_dat
ldr r0, =0x2d
bl lcd_dat
ldr r0, =0xe1
bl lcd_cmd
ldr r0, =0xd0
bl lcd_dat
ldr r0, =0x0d
bl lcd_dat
ldr r0, =0x12
bl lcd_dat
ldr r0, =0x08
bl lcd_dat
ldr r0, =0x08
bl lcd_dat
ldr r0, =0x15
bl lcd_dat
ldr r0, =0x34
bl lcd_dat
ldr r0, =0x34
bl lcd_dat
ldr r0, =0x4a
bl lcd_dat
ldr r0, =0x36
bl lcd_dat
ldr r0, =0x12
bl lcd_dat
ldr r0, =0x13
bl lcd_dat
ldr r0, =0x2b
bl lcd_dat
ldr r0, =0x2f
bl lcd_dat
ldr r0, =0x29
bl lcd_cmd
ldr r0, =0x2c
bl lcd_cmd
ldr r4, =640
ldr r5, =0xf800
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
0:
eor r5, #LCD_BL
str r5, [r4, #PIO_DATA]
ldr r0, =50000
bl delay
b 0b
delay:
push {lr}
0:
subs r0, #1
bne 0b
pop {pc}
lcd_rst:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
bic r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
orr r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
pop {r4, r5, pc}
lcd_wr:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PD
/*
mov r2, r0, lsl #11
and r2, #(0x1f << 11)
mov r3, r0, lsr #11
and r3, #0x1f
orr r2, r3
and r3, r0, #0x7e0
orr r2, r3
mov r0, r2
*/
and r2, r0, #0x00ff
and r3, r0, #0xff00
lsl r2, #1
lsl r3, #2
mov r5, #0
orr r5, r1
orr r5, r2
orr r5, r3
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
bic r5, #LCD_WR
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
orr r5, #LCD_WR | LCD_CS
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
pop {r4, r5, pc}
lcd_dat:
push {lr}
mov r1, #LCD_WR | LCD_RS
bl lcd_wr
pop {pc}
lcd_cmd:
push {lr}
mov r1, #LCD_WR
bl lcd_wr
pop {pc}
.end
离线
正所謂風水輪流轉,一定有其道理,人的一生,總是高低起伏,在低處得到的經驗總是特別珍貴,今天司徒就來訴說一下得到的經驗值(F1C100S超頻到1.2GHz)
基本上,可以使用如下幾種方式,把屏的初始化資料找出來:
1. 使用J-Link Debug官方韌體程式
2. 使用QEMU跑官方韌體程式,然後把存取暫存器的內容Dump出來 (不過需要破解加密IC)
3. 使用邏輯分析儀
雖然第一種方式是司徒覺得最好的方式,可惜那個山寨J-Link在Debug官方韌體程式時,常常跑飛,所以目前只能先放棄第一種方式,至於第二種方式,看似簡單,不過需要花一些時間,雖然司徒在最新版QEMU有找到支援Orangepi-PC開發板(Allwinner H3),不過要改成F1C100S還是需要一點點時間,所以司徒接下來想測試一下邏輯分析儀的部份,不過司徒手上剛好沒有專用的邏輯分析儀,因此,司徒想使用芒果派F1C200S來當作分析儀使用,於是開始製作過程
括除焊點
勇敢的芒果派站了出來
腳位
Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST PE11
Pin-05 CS PD21
Pin-06 RS PD19 => (F1C200S)PD12
Pin-07 WR PD18 => (F1C200S)PD0
Pin-08 VDD
Pin-09 DB11 PD13 => (F1C200S)PE11
Pin-10 DB12 PD14 => (F1C200S)PA0
Pin-11 DB13 PD15 => (F1C200S)PA1
Pin-12 DB14 PD16 => (F1C200S)PA2
Pin-13 DB15 PD17 => (F1C200S)PA3
Pin-14 DB5 PD6 => (F1C200S)PE5
Pin-15 DB6 PD7 => (F1C200S)PE6
Pin-16 DB7 PD8 => (F1C200S)PE7
Pin-17 DB8 PD10 => (F1C200S)PE8
Pin-18 DB9 PD11 => (F1C200S)PE9
Pin-19 DB10 PD12 => (F1C200S)PE10
Pin-20 DB0 PD1 => (F1C200S)PE0
Pin-21 DB1 PD2 => (F1C200S)PE1
Pin-22 DB2 PD3 => (F1C200S)PE2
Pin-23 DB3 PD4 => (F1C200S)PE3
Pin-24 DB4 PD5 => (F1C200S)PE4
跳線
測試程式
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv UART1_BASE, 0x01c25400
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PA, (0x24 * 0)
.equiv PB, (0x24 * 1)
.equiv PC, (0x24 * 2)
.equiv PD, (0x24 * 3)
.equiv PE, (0x24 * 4)
.equiv PORT_CFG0, 0x00
.equiv PORT_CFG1, 0x04
.equiv PORT_CFG2, 0x08
.equiv PORT_DATA, 0x10
.equiv PORT_PUL0, 0x1c
.equiv PORT_PUL1, 0x20
.equiv UART_RBR, 0x00
.equiv UART_DLL, 0x00
.equiv UART_DLH, 0x04
.equiv UART_IER, 0x04
.equiv UART_IIR, 0x08
.equiv UART_LCR, 0x0c
.equiv UART_MCR, 0x10
.equiv UART_USR, 0x7c
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r0, =CCU_BASE
ldr r1, =0x80041800
str r1, [r0, #PLL_PERIPH_CTRL_REG]
ldr r1, =0x00003180
str r1, [r0, #AHB_APB_HCLKC_CFG_REG]
ldr r4, =GPIO_BASE
mov r1, #0x00000000
str r1, [r4, #(PA + PORT_CFG0)]
str r1, [r4, #(PC + PORT_CFG0)]
str r1, [r4, #(PD + PORT_CFG0)]
str r1, [r4, #(PD + PORT_CFG1)]
str r1, [r4, #(PE + PORT_CFG0)]
str r1, [r4, #(PE + PORT_CFG1)]
ldr r1, =0x55555555
str r1, [r4, #(PD + PORT_PUL0)]
str r1, [r4, #(PD + PORT_PUL1)]
str r1, [r4, #(PE + PORT_PUL0)]
str r1, [r4, #(PE + PORT_PUL1)]
ldr r5, =0x4000
ldr r6, =64
mov r1, #0
mov r2, r5
mov r3, r6
0:
str r1, [r2]
add r2, #4
subs r3, #4
bne 0b
ldr r4, =GPIO_BASE
0:
ldr r1, [r4, #(PD + PORT_DATA)]
ands r1, #(1 << 0)
bne 0b
mov r1, #0
ldr r2, [r4, #(PD + PORT_DATA)]
and r2, #(1 << 12)
lsl r2, #20
orr r1, r2
ldr r2, [r4, #(PA + PORT_DATA)]
and r2, #0x07
lsl r2, #12
orr r1, r2
ldr r2, [r4, #(PE + PORT_DATA)]
ldr r3, =0x7ff
and r2, r3
orr r1, r2
str r1, [r5]
1:
ldr r1, [r4, #(PD + PORT_DATA)]
ands r1, #(1 << 0)
beq 1b
add r5, #4
subs r6, #4
bne 0b
bl uart_init
ldr r0, =0x11223344
bl uart_4byte
ldr r5, =0x4000
ldr r6, =64
0:
ldr r0, [r5]
bl uart_4byte
ldr r0, =0xaa
bl uart_byte
add r5, #4
subs r6, #4
bne 0b
b .
uart_init:
push {r4, lr}
ldr r4, =CCU_BASE
ldr r1, =(1 << 21)
str r1, [r4, #BUS_CLK_GATING_REG2]
str r1, [r4, #BUS_SOFT_RST_REG2]
ldr r4, =GPIO_BASE
ldr r1, =0x5500
str r1, [r4, #(PA + PORT_CFG0)]
ldr r4, =UART1_BASE
ldr r1, =0x00
str r1, [r4, #UART_IER]
ldr r1, =0xf7
str r1, [r4, #UART_IIR]
ldr r1, =0x00
str r1, [r4, #UART_MCR]
ldr r1, [r4, #UART_LCR]
orr r1, #(1 << 7)
str r1, [r4, #UART_LCR]
ldr r1, =54
str r1, [r4, #UART_DLL]
ldr r1, =0x00
str r1, [r4, #UART_DLH]
ldr r1, [r4, #UART_LCR]
bic r1, #(1 << 7)
str r1, [r4, #UART_LCR]
ldr r1, [r4, #UART_LCR]
bic r1, #0x1f
orr r1, #0x03
str r1, [r4, #UART_LCR]
pop {r4, pc}
uart_byte:
push {r4, lr}
ldr r4, =UART1_BASE
1:
ldr r1, [r4, #UART_USR]
tst r1, #(1 << 1)
beq 1b
strb r0, [r4, #UART_RBR]
pop {r4, pc}
uart_4byte:
push {r4, lr}
mov r4, r0
lsr r0, #24
bl uart_byte
mov r0, r4
lsr r0, #16
bl uart_byte
mov r0, r4
lsr r0, #8
bl uart_byte
mov r0, r4
bl uart_byte
pop {r4, pc}
.end
P.S. PA3先拔除
但是詭異的事情發生了,每次量測到的資料竟然都不一樣
於是,司徒寫了一個GPIO Toggle量測
F1C200S I/O速度只有2.8MHz...
屏的LCD_WR速度則是4.7MHz,難怪取出來的資料每次都不一樣,因為,最低取樣頻率至少要是原生的兩倍...
司徒心想,這種事情嚇不倒我,從小被嚇到大,CPU 602MHz跑不動,那就幫你超頻到900MHz,總該脫胎換骨了吧!於是,劇情繼續往下走...
VCC_CORE電壓足夠,才可以做超頻的動作,VCC_CORE是由EA3036供電,目前是1.2V
電壓計算方式如下,從公式可以得知,只要把R13改成75K,輸出電壓就可以變成 0.6 * (150K / 75K) + 0.6 = 1.8V
絲印位置
幸好司徒有夠多芒果派開發板...
焊接
確定電壓是1.8V
CPU速度計算公式
PLL = (24MHz*N*K)/(M*P)
N = 13
K = 4
M = 1
P = 1
PLL = (24MHz*13*4)/(1*1) = 1248MHz
測試程式
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv PLL_CPU_CTRL_REG, 0x0000
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PD, (0x24 * 3)
.equiv PORT_CFG0, 0x00
.equiv PORT_CFG1, 0x04
.equiv PORT_CFG2, 0x08
.equiv PORT_DATA, 0x10
.equiv PORT_PUL0, 0x1c
.equiv PORT_PUL1, 0x20
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =CCU_BASE
ldr r1, =(1 << 31) | (12 << 8) | (3 << 4)
str r1, [r4, #PLL_CPU_CTRL_REG]
0:
ldr r1, [r4, #PLL_CPU_CTRL_REG]
tst r1, #(1 << 28)
beq 0b
ldr r1, =(1 << 31) | (1 << 18) | (31 << 8)
str r1, [r4, #PLL_PERIPH_CTRL_REG]
0:
ldr r1, [r4, #PLL_PERIPH_CTRL_REG]
tst r1, #(1 << 28)
beq 0b
ldr r1, =(3 << 12)
str r1, [r4, #AHB_APB_HCLKC_CFG_REG]
ldr r4, =GPIO_BASE
mov r1, #1
str r1, [r4, #(PD + PORT_CFG0)]
0:
eor r1, #1
str r1, [r4, #(PD + PORT_DATA)]
b 0b
.end
接著測量一下I/O速度
I/O速度為2.8MHz,不過CPU速度已經可以跑到1.2GHz,如果電壓再繼續增加,司徒相信CPU還可以操到更高,因為官方說最高可以到2.6GHz
司徒心想,端午節吃完粽子,應該可以繼續開幹...
离线
非常欣赏司徒的探索精神,比打怪升级还过瘾!!! 持续关注
离线
今天是端午佳節,祝福大家端午快樂,小弟再次贈上一個實驗數據,F1C100S CORE 2.4V 可以超頻到2.0GHz ,過程如下分析
既然官方說最高可以超頻到2.6GHz,那最高到底可以超到多少呢?基於這個好奇心,司徒決定研究一下超頻,因此,司徒找來芒果四兄弟
首先挺身而出的是芒果大哥,大哥深知,超頻可以會讓自己變成一隻燒雞,剛好今天是端午佳節,明年的今天可能會是自己的清明節...
由於司徒並沒有太多精密電阻做分壓測試,因此,趕緊從隔壁找來老王協助
為了避免發生榨妻的嫌疑,司徒量測一下老王的電壓,果然,老王還是無法信任...
遺憾的是,司徒手上剛好沒有溫度測量器,因此,勇敢的五姊妹挺身而出,由二姐負責量測...
芒果派果然值得信任,固定輸出1.2V
接著,司徒開始從1.8V測試
啟動後,吃掉0.05V
確定LED可以閃爍,代表此時的CPU頻率是可以工作的
測試程式
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv PLL_CPU_CTRL_REG, 0x0000
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PA, (0x24 * 0)
.equiv PORT_CFG0, 0x00
.equiv PORT_DATA, 0x10
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =CCU_BASE
ldr r1, =(1 << 31) | (20 << 8) | (3 << 4)
str r1, [r4, #PLL_CPU_CTRL_REG]
0:
ldr r1, [r4, #PLL_CPU_CTRL_REG]
tst r1, #(1 << 28)
beq 0b
ldr r0, =GPIO_BASE
ldr r1, =0x1000
str r1, [r0, #(PA + PORT_CFG0)]
0:
eor r1, #8
str r1, [r0, #(PA + PORT_DATA)]
ldr r2, =1000000
1:
subs r2, #1
bne 1b
b 0b
.end
P.S. 在最早的測試,司徒忘記N最大只有到31,因此,在此次測試,司徒先把K設定成3,然後依序調整N,上面的程式:24MHz * N * K = 24MHz * 21 * 4 = 2016MHz
接著就開始慢慢調整電壓測試,找出該CPU頻率下,最低可以接受的電壓
二姐持續量測溫度...
最後,司徒測試發現,電壓2.4V時,CPU可以超頻到2016MHz,此時CPU還可以正常運作,不過已經呈現發燙的狀態(可憐的二姐),可以加上散熱片使用,而電壓再往上增加時,CPU已經無法運作
最後,芒果四兄弟依然健在
幸好二姐也平安無事
F1C200S在2.0GHz下,I/O速度可以多快呢?答案是7MHz
离线
大佬,为什么表格里的频率单位是Hz?不应该是MHz吗?
还真不知道 arm926ej-s 能超频到2GHz…… 大佬们真是要彻底榨干这颗芯片啊
离线
v3s是不是也能上2g
离线
如果F1C100S可以長時間運作在2.0GHz下,那這顆CPU也真是有無窮的潛力,這樣小橫米(PocketGo)要跑順PS1模擬器,看來日子不遠已!
ddr ram会是一个问题,它跑不快。
离线
这个研究很有趣
离线
司徒目前還是處於低潮,不過,物極必反,司徒相信應該快要可以飛龍在天了~
司徒目前準備使用STM32F103當作邏輯分析儀使用,因此,使用STM32F103開發板,Toggle I/O測試一下,發現速度只有別人的2/3,雖然目前這個速度應該是夠用,不過如果有人知道問題在哪,在麻煩告知一下司徒,過程如下說明
Ref: https://stackoverflow.com/questions/59708656/stm32f103c8-gpio-speed-limit
STM32F103測試程式(PLL 128MHz)
.thumb
.cpu cortex-m3
.syntax unified
.equiv GPIOA_CRL, 0x40010800
.equiv GPIOA_CRH, 0x40010804
.equiv GPIOA_IDR, 0x40010808
.equiv GPIOA_ODR, 0x4001080c
.equiv GPIOC_CRL, 0x40011000
.equiv GPIOC_CRH, 0x40011004
.equiv GPIOC_IDR, 0x40011008
.equiv GPIOC_ODR, 0x4001100c
.equiv RCC_CR, 0x40021000
.equiv RCC_CFGR, 0x40021004
.equiv RCC_APB2ENR, 0x40021018
.equiv FLASH_ACR, 0x40022000
.equiv STACKINIT, 0x20005000
.global _start
.section .text
.org 0x0
.word STACKINIT
.word _start
.org 0x100
.align 2
.thumb_func
_start:
bl rcc_init
bl flash_init
ldr r4, =RCC_APB2ENR
ldr r1, =(1 << 2)
str r1, [r4]
ldr r4, =GPIOA_CRH
ldr r1, =(3 << 0)
str r1, [r4]
ldr r4, =GPIOA_ODR
ldr r1, =0xffffffff
ldr r2, =0x00000000
0:
str r1, [r4]
str r2, [r4]
@eor r2, #(1 << 8)
@str r2, [r4]
b 0b
.align 2
.thumb_func
rcc_init:
push {r4, lr}
ldr r4, =RCC_CR
mov r1, #(1 << 16)
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 17)
bne 0b
ldr r4, =RCC_CFGR
@mov r1, #(7 << 18) @ 72MHz
mov r1, #(14 << 18) @ 128MHz
orr r1, #(1 << 16)
str r1, [r4]
ldr r4, =RCC_CR
ldr r1, [r4]
orr r1, #(1 << 24)
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 25)
bne 0b
ldr r4, =RCC_CFGR
ldr r1, [r4]
orr r1, #2
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 3)
bne 0b
pop {r4, pc}
.align
.thumb_func
flash_init:
push {r4, lr}
ldr r4, =FLASH_ACR
mov r1, #0x32
str r1, [r4]
pop {r4, pc}
.end
PA8輸出
PLL 72MHz時,I/O Toggle可以達到12MHz,不過,stackoverflow的人說可以達到18MHz
PLL 128MHz時,I/O Toggle可以達到21MHz,不過,stackoverflow的人說可以達到36MHz
值得注意的是eor指令比str指令更耗時間,多了一倍指令週期,如下是PLL 128MHz時,使用eor指令的I/O Toggle速度
离线
发现司徒的测试代码都是汇编,最近在研究汇编,向大神看齐
最近编辑记录 kekemuyu (2021-06-14 21:09:07)
离线
以下純屬個人看法
在有限的時間內,盡可能去學習Assembly,才能夠更貼近你想看的那個東西,更了解它,
因為Assembly是最接近機器的語言,不過卻是離你最遠的語言
或許有人認為司徒老掉牙,還在守舊,現今GNU GCC編譯器只要打開O3旗標,
用C語言都可以寫的比你的Assembly還要高效率
關鍵技術總是藏在底層,選擇看什麼東西或者寫什麼東西,那是個人自由,
埋藏在GNU GCC後面的東西,你可能不知道,或許也不想知道,總之,技術就是藏在別人手上
有些人寫出來的C語言總是特別高效,但是,有些人寫出來的C語言效率卻是相當糟糕,
這其中的奧妙不知道有幾個人仔細想過
學習Assembly,不見得要放棄C語言,學習東西不是在為了要放棄另一個東西做準備
總之,學習態度、處事態度,決定一切,也決定你的人生走向
共勉之~
离线
从来不以功利目的去学习技术,只是跟随兴趣。学习汇编也是对计算机底层的兴趣,从学编程的第一天开始就对操作系统、编译原理感兴趣。
最近研究汇编也是为了学习写汇编器、编译器。前几天刚把avr的汇编器的词法分析部分写完。写汇编器之前,想参考一下开源的汇编器,发现除了gcc的,很少有人专门写一个汇编器了(除了cpu设计公司,甚至他们也是给gcc写个后端)。有意思的是看到了一个avr的开源汇编器是pascal写的,分析了一下竟然没有按照编译原理写,硬是靠自己的想法堆出来了。它的地址:http://www.avr-asm-tutorial.net/gavrasm/index_en.html,有兴趣可以看一下。
最近编辑记录 kekemuyu (2021-06-15 00:08:40)
离线
如果不介意编程语言,我推荐《编译器设计之路》这本书。这是一本实战的书,里面有pascal编译器的完整实现及源码。代码量不大,很适合入门。
这个编译器的源码是c++实现,源码地址:https://sourceforge.net/projects/neopascal/
最近编辑记录 kekemuyu (2021-06-15 12:52:56)
离线
司徒還是一樣處於低潮,測試STM32F103後,發現還是不行,取到的資料,還是會有不一致的問題,雖然嘗試取兩次、三次做平均,但是,時間似乎不允許,因此,司徒短期很難飛龍在天了~
重新跳線
接著開始測試,將LCD_WR接到PB1,經由負緣觸發中斷時,接著將PC的資料寫到RAM,讀取完64Bytes後,透過UART傳回電腦
STM32F103測試程式(PB0:LCD_RS, PB1:LCD_WR, PC:LCD_DB)
.thumb
.cpu cortex-m3
.syntax unified
.equiv NVIC_ISER0, 0xe000e100
.equiv AFIO_EXTICR1, 0x40010008
.equiv EXTI_IMR, 0x40010400
.equiv EXTI_EMR, 0x40010404
.equiv EXTI_RTSR, 0x40010408
.equiv EXTI_FTSR, 0x4001040c
.equiv EXTI_SWIER, 0x40010410
.equiv EXTI_PR, 0x40010414
.equiv GPIOA_CRL, 0x40010800
.equiv GPIOA_CRH, 0x40010804
.equiv GPIOA_IDR, 0x40010808
.equiv GPIOA_ODR, 0x4001080c
.equiv GPIOB_CRL, 0x40010c00
.equiv GPIOB_CRH, 0x40010c04
.equiv GPIOB_IDR, 0x40010c08
.equiv GPIOB_ODR, 0x40010c0c
.equiv GPIOC_CRL, 0x40011000
.equiv GPIOC_CRH, 0x40011004
.equiv GPIOC_IDR, 0x40011008
.equiv GPIOC_ODR, 0x4001100c
.equiv RCC_CR, 0x40021000
.equiv RCC_CFGR, 0x40021004
.equiv RCC_APB2ENR, 0x40021018
.equiv FLASH_ACR, 0x40022000
.equiv UART1_SR, 0x40013800
.equiv UART1_DR, 0x40013804
.equiv UART1_BRR, 0x40013808
.equiv UART1_CR1, 0x4001380c
.equiv UART1_CR2, 0x40013810
.equiv UART1_CR3, 0x40013814
.equiv STACKINIT, 0x20005000
.global _start
.section .text
.org 0x0000
.word STACKINIT
.word _start
.org 0x005c
.word _exti1
.org 0x0200
.align 2
.thumb_func
_exti1:
push {r4, lr}
ldrh r1, [r7]
strh r1, [r5, #2]!
ldrh r2, [r8]
strh r2, [r5, #2]!
ldr r4, =EXTI_PR
mov r1, #(1 << 1)
str r1, [r4]
pop {r4, pc}
.align 2
.thumb_func
_start:
bl rcc_init
bl flash_init
bl uart_init
ldr r4, =RCC_APB2ENR
ldr r1, [r4]
orr r1, #(1 << 4) | (1 << 3) | (1 << 2)
str r1, [r4]
ldr r4, =GPIOB_CRL
ldr r1, =0x88888888
str r1, [r4]
ldr r4, =GPIOB_CRH
ldr r1, =0x88888888
str r1, [r4]
ldr r4, =GPIOC_CRL
ldr r1, =0x88888888
str r1, [r4]
ldr r4, =GPIOC_CRH
ldr r1, =0x88888888
str r1, [r4]
ldr r4, =EXTI_IMR
ldr r1, =(1 << 1)
str r1, [r4]
ldr r4, =EXTI_EMR
ldr r1, =(1 << 1)
str r1, [r4]
ldr r4, =EXTI_FTSR
ldr r1, =(1 << 1)
str r1, [r4]
ldr r4, =AFIO_EXTICR1
ldr r1, =(1 << 4)
str r1, [r4]
ldr r5, =buf
ldr r6, =buf
ldr r7, =GPIOB_IDR
ldr r8, =GPIOC_IDR
ldr r4, =NVIC_ISER0
ldr r1, =(1 << 7)
str r1, [r4]
add r6, #(64 * 2 * 2)
0:
cmp r5, r6
bcc 0b
ldr r4, =NVIC_ISER0
mov r1, #0
str r1, [r4]
ldr r4, =AFIO_EXTICR1
mov r1, #0
str r1, [r4]
ldr r5, =buf
ldr r6, =64
0:
ldrh r1, [r5, #2]!
lsl r1, #31
eor r0, r0
ldrh r0, [r5, #2]!
orr r0, r1
bl uart_4byte
subs r6, #1
bne 0b
ldr r0, =0x11223344
bl uart_4byte
b .
.align 2
.thumb_func
uart_init:
push {r4, lr}
ldr r4, =RCC_APB2ENR
ldr r1, [r4]
ldr r2, =(1 << 14) | (1 << 2) | (1 << 0)
orr r1, r2
str r1, [r4]
ldr r4, =GPIOA_CRH
ldr r1, [r4]
bic r1, #0xff0
orr r1, #0x4b0
str r1, [r4]
ldr r4, =UART1_BRR
@ldr r1, =(39 << 4) | (1 << 0) @ 115200bps 72MHz
ldr r1, =(69 << 4) | (7 << 0) @ 115200bps 128MHz
str r1, [r4]
ldr r4, =UART1_CR1
ldr r1, =(1 << 13) | (1 << 3)
str r1, [r4]
pop {r4, pc}
.align 2
.thumb_func
uart_byte:
push {r4, lr}
ldr r4, =UART1_SR
0:
ldr r1, [r4]
tst r1, #(1 << 7)
beq 0b
ldr r4, =UART1_DR
str r0, [r4]
pop {r4, pc}
.align 2
.thumb_func
uart_4byte:
push {r4, lr}
mov r4, r0
lsr r0, #24
bl uart_byte
mov r0, r4
lsr r0, #16
bl uart_byte
mov r0, r4
lsr r0, #8
bl uart_byte
mov r0, r4
bl uart_byte
pop {r4, pc}
.align 2
.thumb_func
rcc_init:
push {r4, lr}
ldr r4, =RCC_CR
ldr r1, =(1 << 26) | (1 << 16)
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 17)
bne 0b
ldr r4, =RCC_CFGR
@mov r1, #(7 << 18) @ 72MHz
mov r1, #(14 << 18) @ 128MHz
orr r1, #(1 << 16)
str r1, [r4]
ldr r4, =RCC_CR
ldr r1, [r4]
orr r1, #(1 << 24)
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 25)
bne 0b
ldr r4, =RCC_CFGR
ldr r1, [r4]
orr r1, #2
str r1, [r4]
0:
ldr r1, [r4]
tst r1, #(1 << 3)
bne 0b
pop {r4, pc}
.align 2
.thumb_func
flash_init:
push {r4, lr}
ldr r4, =FLASH_ACR
mov r1, #0x32
str r1, [r4]
pop {r4, pc}
.data
.align 2
buf: .skip (64 * 2 * 2)
.end
測試後發現,資料還是會有不一致的狀況,因此,STM32F103目前無法勝任這個任務...
离线
直接上逻辑分析仪吧,专用工具也就在这个时候用的,现在不用,啥时候用。
离线
@司徒
如果知道显示屏的驱动芯片有帮助吗?
可以试试这个驱动,可能是这个芯片:GC9306
这个是驱动参考文章
https://blog.csdn.net/zhoubingda/article/details/107993689
DS由于没有积分无法下载,放个链接
https://download.csdn.net/download/doctoryi/11707588
一个长得很像的屏拆解
https://www.bilibili.com/video/BV1HT4y1F7tE
https://www.bilibili.com/video/av370221820/
https://www.mydigit.cn/forum.php?mod=viewthread&tid=69269
https://haokan.baidu.com/v?pd=wisenatural&vid=10566489192155907891
https://www.gcores.com/articles/119028
另外,这个屏应该是2.8寸且分辨率为240*320(也就是常说的竖屏),商家为了显示大,宣传的3.0寸,3.0寸可能是指带塑料框的尺寸
最近编辑记录 三木同子 (2021-06-15 20:24:49)
离线
因為還沒到貨...
如果你在深圳,可以到我这里直接取一个先用着,坐标南山。
如果你手上有一个FPGA开发板,写两行代码就可以实现这个抓取。两倍采样率是采不清楚的,至少需要4~5倍,理想情况下10倍。
其实我还是没搞懂,你都搞过miyoo了,还搞这个干嘛?无非就是换了个屏嘛,没啥技术乐趣,不过你超频那段还是蛮有意思的。
最近编辑记录 shawn.d (2021-06-15 20:42:44)
离线
@三木同子
相當感謝你,GC9306,有意思,TRIMUI則是使用GC9308,我找時間試試,相當感謝你的資源
@shawn.d
感謝你,可惜,我目前在台灣,只是不知道何時才可以收到邏輯分析儀...
我下午找了許久,有找到一片FPGA開發板,MAX II有接上50MHZ振盪器,我正想用這片,我需要抓取後,儲存64 Bytes,透過UART回傳,你可以給我代碼嗎,不然我就要慢慢刻出來,哈
其實,我以前搞過Miyoo是沒錯,不過,之前沒有好好把一些東西弄好,不管是效能或者是代碼整潔,加上也沒有很了解F1C100S這顆晶片,因此,我這次野心比較大,我想要從頭把Bootloader、Kernel、系統、模擬器,盡我可能的重新整理一遍,重寫或者重新移植,至少這是我目前想做的,所以我才會從頭搞起,而不是直接針對Miyoo系統再繼續,當然我不是說放棄之前的東西,我只是想要從頭整理一遍,所以對象比較偏向是我個人的移植開源路程,哈
針對這個標題研究FC3000掌機的開源可行性,我心想我應該是已經做到了,因為確定CPU是F1C100S後,基本上,就鐵定可以開源了,只是說,能夠開源到哪種程度
加上我之前也說過,連Miyoo也會一起更新,所以這個貼子就會變得很混亂,因為裡面有FC3000的東西,也有Miyoo的東西,哈,所以,我打算把這個貼子,當作是F1C100S系列掌機的移植過程,意思就是,FC3000掌機、Miyoo掌機、Q8掌機、Trimui掌機,就都寫在這個貼子上面,一起更新好了,前期只要把屏以及按鍵搞定,後續就可以通吃了,哈,所以這樣就變得比較有意思,但是,我想,應該會更混亂,哈
离线
@三木同子
我測試了GC9300、GC9306初始化代碼,不過還是一樣點不亮這個屏,我也仔細多次檢查代碼,應該是沒問題才是,總之,先感謝你的資訊,我在努力找找
GC9306測試代碼,供日後需要使用
.global _start
.equiv PIO_BASE, 0x01c20800
.equiv PD, (0x24 * 3)
.equiv PE, (0x24 * 4)
.equiv PIO_CFG0, 0x00
.equiv PIO_CFG1, 0x04
.equiv PIO_CFG2, 0x08
.equiv PIO_DATA, 0x10
.equiv LCD_CS, (1 << 21)
.equiv LCD_RS, (1 << 19)
.equiv LCD_WR, (1 << 18)
.equiv LCD_RST, (1 << 11)
.equiv LCD_BL, (1 << 6)
/*
Pin-01 VDD
Pin-02 GND
Pin-03 LEDA PE6
Pin-04 RST PE11
Pin-05 CS PD21
Pin-06 RS PD19
Pin-07 WR PD18
Pin-08 VDD
Pin-09 DB11 PD13
Pin-10 DB12 PD14
Pin-11 DB13 PD15
Pin-12 DB14 PD16
Pin-13 DB15 PD17
Pin-14 DB5 PD6
Pin-15 DB6 PD7
Pin-16 DB7 PD8
Pin-17 DB8 PD10
Pin-18 DB9 PD11
Pin-19 DB10 PD12
Pin-20 DB0 PD1
Pin-21 DB1 PD2
Pin-22 DB2 PD3
Pin-23 DB3 PD4
Pin-24 DB4 PD5
*/
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =PIO_BASE + PD
ldr r1, =0x11111111
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
str r1, [r4, #PIO_CFG2]
ldr r4, =PIO_BASE + PE
ldr r1, =0x11111111
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
ldr r4, =PIO_BASE + PD
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
ldr r4, =PIO_BASE + PE
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
bl lcd_rst
ldr r0, =0xfe
bl lcd_cmd
ldr r0, =0xef
bl lcd_cmd
ldr r0, =0x36
bl lcd_cmd
ldr r0, =0x28
bl lcd_dat
ldr r0, =0x3a
bl lcd_cmd
ldr r0, =0x05
bl lcd_dat
ldr r0, =0xa4
bl lcd_cmd
ldr r0, =0x44
bl lcd_dat
ldr r0, =0x44
bl lcd_dat
ldr r0, =0xa5
bl lcd_cmd
ldr r0, =0x42
bl lcd_dat
ldr r0, =0x42
bl lcd_dat
ldr r0, =0xaa
bl lcd_cmd
ldr r0, =0x88
bl lcd_dat
ldr r0, =0x88
bl lcd_dat
ldr r0, =0xe8
bl lcd_cmd
ldr r0, =0x11
bl lcd_dat
ldr r0, =0x0b
bl lcd_dat
ldr r0, =0xe3
bl lcd_cmd
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x10
bl lcd_dat
ldr r0, =0xff
bl lcd_cmd
ldr r0, =0x61
bl lcd_dat
ldr r0, =0xac
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0xad
bl lcd_cmd
ldr r0, =0x33
bl lcd_dat
ldr r0, =0xae
bl lcd_cmd
ldr r0, =0x2b
bl lcd_dat
ldr r0, =0xaf
bl lcd_cmd
ldr r0, =0x55
bl lcd_dat
ldr r0, =0xa6
bl lcd_cmd
ldr r0, =0x2a
bl lcd_dat
ldr r0, =0x2a
bl lcd_dat
ldr r0, =0xa7
bl lcd_cmd
ldr r0, =0x2b
bl lcd_dat
ldr r0, =0x2b
bl lcd_dat
ldr r0, =0xa8
bl lcd_cmd
ldr r0, =0x18
bl lcd_dat
ldr r0, =0x18
bl lcd_dat
ldr r0, =0xa9
bl lcd_cmd
ldr r0, =0x2a
bl lcd_dat
ldr r0, =0x2a
bl lcd_dat
ldr r0, =0x2b
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0xef
bl lcd_dat
ldr r0, =0x2a
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x3f
bl lcd_dat
ldr r0, =0x2c
bl lcd_cmd
ldr r0, =0xf0
bl lcd_cmd
ldr r0, =0x02
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x06
bl lcd_dat
ldr r0, =0x09
bl lcd_dat
ldr r0, =0x0c
bl lcd_dat
ldr r0, =0xf1
bl lcd_cmd
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x03
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x3a
bl lcd_dat
ldr r0, =0x3e
bl lcd_dat
ldr r0, =0x09
bl lcd_dat
ldr r0, =0xf2
bl lcd_cmd
ldr r0, =0x0c
bl lcd_dat
ldr r0, =0x09
bl lcd_dat
ldr r0, =0x26
bl lcd_dat
ldr r0, =0x07
bl lcd_dat
ldr r0, =0x07
bl lcd_dat
ldr r0, =0x30
bl lcd_dat
ldr r0, =0xf3
bl lcd_cmd
ldr r0, =0x09
bl lcd_dat
ldr r0, =0x06
bl lcd_dat
ldr r0, =0x57
bl lcd_dat
ldr r0, =0x03
bl lcd_dat
ldr r0, =0x03
bl lcd_dat
ldr r0, =0x6b
bl lcd_dat
ldr r0, =0xf4
bl lcd_cmd
ldr r0, =0x0d
bl lcd_dat
ldr r0, =0x1d
bl lcd_dat
ldr r0, =0x1c
bl lcd_dat
ldr r0, =0x06
bl lcd_dat
ldr r0, =0x08
bl lcd_dat
ldr r0, =0x0f
bl lcd_dat
ldr r0, =0xf5
bl lcd_cmd
ldr r0, =0x0c
bl lcd_dat
ldr r0, =0x05
bl lcd_dat
ldr r0, =0x06
bl lcd_dat
ldr r0, =0x33
bl lcd_dat
ldr r0, =0x31
bl lcd_dat
ldr r0, =0x0f
bl lcd_dat
ldr r0, =0x11
bl lcd_cmd
ldr r0, =10000
bl delay
ldr r0, =0x29
bl lcd_cmd
ldr r0, =10000
bl delay
ldr r0, =0x2c
bl lcd_cmd
ldr r4, =320*30
ldr r5, =0xf800
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
0:
eor r5, #LCD_BL
str r5, [r4, #PIO_DATA]
ldr r0, =50000
bl delay
b 0b
delay:
push {lr}
0:
subs r0, #1
bne 0b
pop {pc}
lcd_rst:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
bic r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
orr r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
pop {r4, r5, pc}
lcd_wr:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PD
/*
mov r2, r0, lsl #11
and r2, #(0x1f << 11)
mov r3, r0, lsr #11
and r3, #0x1f
orr r2, r3
and r3, r0, #0x7e0
orr r2, r3
mov r0, r2
*/
and r2, r0, #0x00ff
and r3, r0, #0xff00
lsl r2, #1
lsl r3, #2
mov r5, #0
orr r5, r1
orr r5, r2
orr r5, r3
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
bic r5, #LCD_CS
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
bic r5, #LCD_WR
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
orr r5, #LCD_WR
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
orr r5, #LCD_CS
str r5, [r4, #PIO_DATA]
ldr r0, =100
bl delay
pop {r4, r5, pc}
lcd_dat:
push {lr}
mov r1, #LCD_CS | LCD_WR | LCD_RS
bl lcd_wr
pop {pc}
lcd_cmd:
push {lr}
mov r1, #LCD_CS | LCD_WR
bl lcd_wr
pop {pc}
.end
离线
@司徒
如果你的MAX ii 是EPM570以上的,内部有PLL,可以倍频,如果是240,那就没办法用signaltap。在可以用signalTap的情况下,最简单的做法是将所有其它信号用屏的时钟寄存两拍即可,不需要使用板载时钟,也不用使用PLL,然后用signaltap把这些寄存信号采出来。signaltap的数据可以直接导出到matlab进行解码啥的。导出的csv文件,你可以用python或者C++来处理解码。
最近编辑记录 shawn.d (2021-06-16 08:36:10)
离线
膜拜,牛人,破解高手
离线
我也觉得司徒大神搞这个机器没意思,大神对F1C100S这个芯片研究很厉害了 ,这个和荔枝派NANO一样,还不如搞个荔枝派NANO能用的游戏系统,直接烧录镜像就可以用,而且支持各尺寸的SPI屏,方便大家DIY各种各样的游戏机。
离线
财务自由的人才能有兴趣了,我看这屏像这个
https://item.taobao.com/item.htm?id=625742759811
话说我尝试超频,CORE VDD上1.6V电压才能超到900M,再高就不启动了.有空再试试2.4V.如果能到2GHz,这颗芯片就好玩多了
离线
我无意冒犯司徒大神,树莓派我只玩过ZEROW,功耗大,而且烧录LAKKA或RECALBOX,玩游戏非常卡,记忆中只有FC、世嘉MEGA DRIVE游戏流畅一些,GBA都卡,而且性价比不高,现在单片树莓派ZERO W价格接近200元人民币了,而且树莓派3代4代价格更高,国产的ORANGEPAI PC性能不错,跑LAKKA顺畅连PSP都可以模拟,但功耗太高,发热量巨大,不太适合掌机,F1C100S的机器我有小霸王Q2升级版(我是贴吧发拆机哪个,当时跟大神还有短暂交流)V90游戏机,我惊叹于司徒大神开发的系统,基本秒开,而且在处理器频率不高的情况下,V90游戏机 702MHZ就可以流畅模拟PS1游戏了(当然有些游戏得跳帧),而且还可以超频,荔枝派NANO就是F1C100S的开发板,所以才会有这种想法。
离线
@shawn.d
感謝,我的是EPM240,在邏輯分析儀來之前,我來寫看看,哈
@skywalk00
原來那個人是你,我正好要找你,因為你說小霸王Q2也是F1C100S ? 你可以測試一下Miyoo系統嗎,看看可不可以跑起來嗎 ?
@zzm24
感謝你的資訊,經過我測試,這個屏應該不是GC9306,另外超頻部份,下面說明
司徒也在懷疑是否LCD輸出那部份有問題,於是測試下R61520在Miyoo上,確實可以跑得
測試Q8掌機的HX8357C,也是可以點亮屏
將FC3000的屏拿到Q8掌機測試,結果還是點不亮,共測試GC9300、GC9306、ST7789、HX8357C、R61520初始化程式,還是不行...
同場加映,司徒決定測試一下F1C100S超頻的持久度,這問題,真是一個老男人心中的痛...,於是,司徒找來幾顆精密電阻,0.6 * (464K / 150K) + 0.6 = 2.456V
2.456V,雖然多了0.056V,不過應該差不多,這個電壓是司徒之前測試,F1C100S最大可以承受的電壓
接著,司徒再度詢問芒果四兄弟,此時,勇敢的二哥二話不說,馬上挺身而出
移除R12、R13
0.6 * (464K / 150K) + 0.6 = 2.456V,司徒也幫二哥焊接一顆光明燈,期許實驗平安順利
既然,芒果都由二哥出戰了,於是司徒詢問三姐的意願,三姐說它不適合拍照,司徒不相信,要求三姐給一張照片證明
恩,三姐還是不要出戰好了,不然,司徒可能會變成殘障人士...
於是,司徒請來金大哥,聽說金大哥練過金鐘罩...
開始測驗,CPU=2016MHz,二哥忍耐一下,馬上就可以脫離苦海了...
二哥的光明燈開始閃爍
6秒後...,芒果二哥終於離開人間,再怎麼連接USB,都無法進入燒錄模式,願二哥安祥...
於是,司徒找來另外的精密點組,442K電阻配上160K電阻,0.6 * (442K / 160K) + 0.6 = 2.2575V
此時,三哥默默走了出來,司徒替三哥治裝...,0.6 * (442K / 160K) + 0.6 = 2.2575V
三哥開始...
CPU=2016MHz,10秒後掛點,不過插入USB,還是可以進入燒錄模式,因此,電壓2.2575V是不會燒毀F1C100S的保險電壓,而司徒測試CPU=1920MHz,三哥竟然撐過60秒,三哥真男人
60秒後,二姐馬上量測溫度,果然會燙...
於是,小護士準備幫三哥打針,可惜司徒臨時找不到散熱片...
那就只好電風扇伺候...
二姐測量溫度,果然還是有點燙,不過,CPU=1920MHz,跑了三分鐘,依然沒有問題,因此,司徒覺得1920MHz,加上散熱片,應該是可以拿來使用的
僅存的芒果三兄弟
測試代碼
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv PLL_CPU_CTRL_REG, 0x0000
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PA, (0x24 * 0)
.equiv PORT_CFG0, 0x00
.equiv PORT_DATA, 0x10
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =CCU_BASE
ldr r1, =(1 << 31) | (19 << 8) | (3 << 4)
str r1, [r4, #PLL_CPU_CTRL_REG]
0:
ldr r1, [r4, #PLL_CPU_CTRL_REG]
tst r1, #(1 << 28)
beq 0b
ldr r0, =GPIO_BASE
ldr r1, =0x1000
str r1, [r0, #(PA + PORT_CFG0)]
0:
ldr r1, =0x08
str r1, [r0, #(PA + PORT_DATA)]
ldr r2, =500000
1:
subs r2, #1
bne 1b
ldr r1, =0x00
str r1, [r0, #(PA + PORT_DATA)]
ldr r2, =500000
2:
subs r2, #1
bne 2b
b 0b
.end
結論:
CPU=2016MHz,需要找出臨界電壓,容易燒毀,不建議使用
CPU=1920MHz,F1C100S加上散熱片,可以跑,目前只有測試GPIO Toggle,只在芒果派上測試,其他開發板不保證電壓如表格一樣
离线
我试过小霸王Q2升级版直接插V90翻盖游戏机(我那款叫POWKIDDY不过应该一样)的内存卡,结果灯亮黑屏,我猜可能要把华邦八脚的SPI FALSH吹掉再试试,一直没时间搞,等我把他用风枪吹掉再试一试。
离线
@司徒
EPM240不支持内嵌逻辑分析仪,如果只是想UARTl输出,可以用下面这个现成的代码。前端打两拍或三拍采一下,用FIFO更好,时钟要用屏的时钟,不要用板载的。
https://opencores.org/projects/uart16550
离线
@shawn.d
好,我找時間試試,感謝
荔枝姐詢問司徒,為何最近都在搞芒果哥?這問題...,司徒如何啟齒...
目前VCC_CORE=1.1V,超頻首要工作就是加大電壓,電壓公式:0.6 * (R47 / R48) + 0.6)
R47、R48位置
移除R47、R48
R47=442K、R48=160K,0.6 * (442K / 160K) + 0.6 = 2.2575V
CPU=2016MHz,三秒就掛了,於是,電風扇伺候,CPU=1920MHz,可以跑I/O Toggle了...
司徒一摸荔枝姐,這...溫度怎麼比芒果哥還要激情...
測試程式
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv PLL_CPU_CTRL_REG, 0x0000
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PE, (0x24 * 4)
.equiv PORT_CFG0, 0x00
.equiv PORT_DATA, 0x10
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =CCU_BASE
ldr r1, =(1 << 31) | (19 << 8) | (3 << 4)
str r1, [r4, #PLL_CPU_CTRL_REG]
0:
ldr r1, [r4, #PLL_CPU_CTRL_REG]
tst r1, #(1 << 28)
beq 0b
ldr r0, =GPIO_BASE
ldr r1, =0x10000
str r1, [r0, #(PE + PORT_CFG0)]
0:
eor r1, #0x10
str r1, [r0, #(PE + PORT_DATA)]
ldr r2, =500000
1:
subs r2, #1
bne 1b
b 0b
.end
結論:
荔枝派一樣可以超頻到1.9GHz,只是溫度感覺比芒果派稍微高一點,錯覺?
离线
司徒買一台山寨Saleae Logic 16,體積很迷你
不過,同時開啟16通道時,取樣率只有16MS/s...
在測試過16通道16MS/s取樣率後,司徒發現每次取的資料都有變動,資料不一致性有點大,這邏輯分析儀...,於是,司徒改成使用12通道25MS/s的取樣率
測試幾次後,發現資料不一致性還是有,不過已經好很多了,不過LCD是16Bits,在加上LCD_WR、LCD_RS,需要18通道才行,於是司徒分兩次擷取
低位元資料(取5次):LCD_RS、LCD_WR、LCD_DB0~LCD_DB9
高位元資料(取5次):LCD_RS、LCD_WR、LCD_DB6~LCD_DB15
擷取後,把高位元資料進行排列,假定這些多餘的資料為雜訊,手動濾掉
低位元資料進行排列,假定這些多餘的資料為雜訊,手動濾掉
再做合併時,發現低位元資料少一筆,這...,不過,仔細一看,資料都是一筆CMD、一筆DAT,然後LCD_DB6~LCD_DB9是疊加取樣,因此,交叉比對後,發現第一筆高位元資料是雜訊
合併後的初始化命令
CMD:0x800
DAT:0x100
CMD:0x1000
DAT:0x700
CMD:0x1800
DAT:0xc002
CMD:0x2000
DAT:0x0
CMD:0x4000
DAT:0x1200
CMD:0x4800
DAT:0x0
CMD:0x5000
DAT:0x0
CMD:0x6000
DAT:0x0
CMD:0x6800
DAT:0x0
CMD:0x7800
DAT:0x0
CMD:0x8000
DAT:0x0
CMD:0x8800
DAT:0x3800
CMD:0x9000
DAT:0x0
CMD:0x9800
DAT:0x0
CMD:0x3800
DAT:0x800
CMD:0x8000
DAT:0x8682
CMD:0x8800
DAT:0x3e60
CMD:0x9000
DAT:0xc080
CMD:0x9800
DAT:0x603
CMD:0x4820
DAT:0xf000
CMD:0x5820
DAT:0x7000
CMD:0x20
DAT:0x0
CMD:0x820
DAT:0x0
CMD:0x8020
DAT:0x0
CMD:0x8820
DAT:0x3d00
CMD:0x9020
DAT:0x2000
CMD:0xa820
DAT:0x2a00
CMD:0xb020
DAT:0x2000
CMD:0xb820
DAT:0x3b00
CMD:0xc020
DAT:0x1000
CMD:0xc820
DAT:0x3f00
CMD:0xe020
DAT:0x1500
CMD:0xe820
DAT:0x2000
CMD:0x8040
DAT:0x0
CMD:0x8840
DAT:0x78e0
CMD:0x9040
DAT:0x0
CMD:0x9840
DAT:0xf920
CMD:0x60
DAT:0x714
CMD:0x860
DAT:0x800
CMD:0x5060
DAT:0x0
CMD:0x80
DAT:0x0
CMD:0x880
DAT:0x0
CMD:0x1080
DAT:0x0
CMD:0x1880
DAT:0x0
CMD:0x2080
DAT:0x0
CMD:0x2880
DAT:0x0
CMD:0x8080
DAT:0x8000
CMD:0x9080
DAT:0x600
CMD:0x1800
DAT:0x4020
CMD:0x3800
DAT:0x9920
CMD:0x8040
DAT:0x0
CMD:0x8840
DAT:0x78e0
CMD:0x9040
DAT:0x0
CMD:0x9840
DAT:0xf920
CMD:0x20
DAT:0x78e0
CMD:0x820
DAT:0x0
CMD:0x1020
DAT:0x0
測試程式
.global _start
.equiv PIO_BASE, 0x01c20800
.equiv PD, (0x24 * 3)
.equiv PE, (0x24 * 4)
.equiv PIO_CFG0, 0x00
.equiv PIO_CFG1, 0x04
.equiv PIO_CFG2, 0x08
.equiv PIO_DATA, 0x10
.equiv LCD_CS, (1 << 21)
.equiv LCD_RD, (1 << 20)
.equiv LCD_RS, (1 << 19)
.equiv LCD_WR, (1 << 18)
.equiv LCD_RST, (1 << 11)
.equiv LCD_BL, (1 << 6)
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =PIO_BASE + PD
ldr r1, =0x11111111
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
ldr r1, =0x00111111
str r1, [r4, #PIO_CFG2]
ldr r4, =PIO_BASE + PE
ldr r1, [r4, #PIO_CFG0]
bic r1, #0xf000000
orr r1, #0x1000000
str r1, [r4, #PIO_CFG0]
ldr r1, [r4, #PIO_CFG1]
bic r1, #0xf000
orr r1, #0x1000
str r1, [r4, #PIO_CFG1]
ldr r4, =PIO_BASE + PD
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
ldr r4, =PIO_BASE + PE
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
bl lcd_rst
ldr r0, =0x800
bl lcd_cmd
ldr r0, =0x100
bl lcd_dat
ldr r0, =0x1000
bl lcd_cmd
ldr r0, =0x700
bl lcd_dat
ldr r0, =0x1800
bl lcd_cmd
ldr r0, =0xc002
bl lcd_dat
ldr r0, =0x2000
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x4000
bl lcd_cmd
ldr r0, =0x1200
bl lcd_dat
ldr r0, =0x4800
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x5000
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x6000
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x6800
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x7800
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8000
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8800
bl lcd_cmd
ldr r0, =0x3800
bl lcd_dat
ldr r0, =0x9000
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x9800
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x3800
bl lcd_cmd
ldr r0, =0x800
bl lcd_dat
ldr r0, =0x8000
bl lcd_cmd
ldr r0, =0x8682
bl lcd_dat
ldr r0, =0x8800
bl lcd_cmd
ldr r0, =0x3e60
bl lcd_dat
ldr r0, =0x9000
bl lcd_cmd
ldr r0, =0xc080
bl lcd_dat
ldr r0, =0x9800
bl lcd_cmd
ldr r0, =0x603
bl lcd_dat
ldr r0, =0x4820
bl lcd_cmd
ldr r0, =0xf000
bl lcd_dat
ldr r0, =0x5820
bl lcd_cmd
ldr r0, =0x7000
bl lcd_dat
ldr r0, =0x20
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x820
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8020
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8820
bl lcd_cmd
ldr r0, =0x3d00
bl lcd_dat
ldr r0, =0x9020
bl lcd_cmd
ldr r0, =0x2000
bl lcd_dat
ldr r0, =0xa820
bl lcd_cmd
ldr r0, =0x2a00
bl lcd_dat
ldr r0, =0xb020
bl lcd_cmd
ldr r0, =0x2000
bl lcd_dat
ldr r0, =0xb820
bl lcd_cmd
ldr r0, =0x3b00
bl lcd_dat
ldr r0, =0xc020
bl lcd_cmd
ldr r0, =0x1000
bl lcd_dat
ldr r0, =0xc820
bl lcd_cmd
ldr r0, =0x3f00
bl lcd_dat
ldr r0, =0xe020
bl lcd_cmd
ldr r0, =0x1500
bl lcd_dat
ldr r0, =0xe820
bl lcd_cmd
ldr r0, =0x2000
bl lcd_dat
ldr r0, =0x8040
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8840
bl lcd_cmd
ldr r0, =0x78e0
bl lcd_dat
ldr r0, =0x9040
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x9840
bl lcd_cmd
ldr r0, =0xf920
bl lcd_dat
ldr r0, =0x60
bl lcd_cmd
ldr r0, =0x714
bl lcd_dat
ldr r0, =0x860
bl lcd_cmd
ldr r0, =0x800
bl lcd_dat
ldr r0, =0x5060
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x80
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x880
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x1080
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x1880
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x2080
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x2880
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8080
bl lcd_cmd
ldr r0, =0x8000
bl lcd_dat
ldr r0, =0x9080
bl lcd_cmd
ldr r0, =0x600
bl lcd_dat
ldr r0, =0x1800
bl lcd_cmd
ldr r0, =0x4020
bl lcd_dat
ldr r0, =0x3800
bl lcd_cmd
ldr r0, =0x9920
bl lcd_dat
ldr r0, =0x8040
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x8840
bl lcd_cmd
ldr r0, =0x78e0
bl lcd_dat
ldr r0, =0x9040
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x9840
bl lcd_cmd
ldr r0, =0xf920
bl lcd_dat
ldr r0, =0x20
bl lcd_cmd
ldr r0, =0x78e0
bl lcd_dat
ldr r0, =0x820
bl lcd_cmd
ldr r0, =0x0
bl lcd_dat
ldr r0, =0x1020
bl lcd_cmd
ldr r4, =320*80
ldr r5, =0x1f
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =320*80
ldr r5, =0x7e0
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =320*80
ldr r5, =0xf800
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
b .
delay:
push {lr}
0:
subs r0, #1
bne 0b
pop {pc}
lcd_rst:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
bic r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
orr r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
pop {r4, r5, pc}
lcd_wr:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PD
and r2, r0, #0x00ff
and r3, r0, #0xff00
lsl r2, #1
lsl r3, #2
eor r5, r5
orr r5, r1
orr r5, r2
orr r5, r3
orr r5, #LCD_RD
str r5, [r4, #PIO_DATA]
orr r5, #LCD_WR
str r5, [r4, #PIO_DATA]
pop {r4, r5, pc}
lcd_dat:
push {lr}
mov r1, #LCD_RS
bl lcd_wr
pop {pc}
lcd_cmd:
push {lr}
mov r1, #0
bl lcd_wr
pop {pc}
.end
感動的一刻
离线
接著司徒花了一些時間,把腳位找了出來,這樣FC3000掌機就進入備戰狀態了~
UP PF0
DOWN PF5
LEFT PF4
RIGHT PE2
A PE3
B PE4
X PE5
Y PA3
I BTA54C(Pin3)
BAT54C(Pin1)PA2
R PA2, 1AM-C(Pin3)
L PA1, 1AM-C(Pin3)
START PE12, BAT54C(Pin2)
SELECT PE12, BAT54C(Pin1)
Encrypt IC(Pin6) I2C_SCK PE0
Encrypt IC(Pin7) I2C_SDA PE1
Encrypt IC(Pin2) Blue LED-
LTH7 CHRG Red LED-
MicroSD D0 PF1
MicroSD CLK PF2
MicroSD CMD PF3
Boot SPI Flash CS PC1
Boot SPI Flash MISO PC2
Boot SPI Flash MOSI PC3
Boot SPI Flash SCK PC0
SPI Flash CS PE7
SPI Flash MISO PE10
SPI Flash MOSI PE8
SPI Flash CLK PE9
LCD BK PE6
LCD RST PE11
LCD CS PD21
LCD RS PD19
LCD WR PD18
LCD DB11 PD13
LCD DB12 PD14
LCD DB13 PD15
LCD DB14 PD16
LCD DB15 PD17
LCD DB5 PD6
LCD DB6 PD7
LCD DB7 PD8
LCD DB8 PD10
LCD DB9 PD11
LCD DB10 PD12
LCD DB0 PD1
LCD DB1 PD2
LCD DB2 PD3
LCD DB3 PD4
LCD DB4 PD5
离线
🍀司徒🍀大佬真牛🐂
请问液晶的驱动芯片确定了吗?
离线
如果有玩家想要讓FC3000掌機跑Linux系統,需要飛三根線,這是最少的改機步驟
接著需要改機,否則無法從MicroSD開機
需要跳三根線
這樣就可以從MicroSD開機
不要插入卡帶,MicroSD卡的位置很方便替換
fc3000_lcd_test.img
下載fc3000_lcd_test.img,直接DD到MicroSD即可,插入MicroSD卡後,開機上電,這樣就可以測試是否改機完成,屏會一直換顏色
使用原本官方MicroSD開機,則可以進入原本系統
插入卡帶
則開機進入NES遊戲畫面,做到這一步,FC3000掌機已經具備跑Linux系統的能力,因此,一般玩家想要讓FC3000掌機可以具備跑Linux的能力,只要跳三根線即可
离线
大神认真的精神令人佩服。
离线
几天没关注,进展这么快啦,大佬就是大佬。
司徒大佬啥时也搞搞funkeys啊?V3S比100S强大的多啊。
论坛有人发帖了。
发现一个蛮精致的开源掌机叫FunKey,使用的V3s
离线
@司徒
这就飞龙在天了,哈哈!
离线
確實有飛龍在天的感覺,難怪司徒昨晚在夢境之中有雙飛的感覺,雙龍飛舞的意思,不要誤會
能夠走到這一步,小弟在此感謝所有幫助過的人
FC3000掌機的目標很明確,就是要跑Linux Kernel,因此,司徒需要一個Bootloader用來載入Kernel,
而這個Bootloader的動作也很明確,就是初始化DRAM,然後從MicroSD載入Kernel,跳轉Kernel,
司徒要訂一個很嚴格的目標:FC3000掌機上電後,執行完Kernel,UART顯示Login畫面,必須在一秒內,執行完畢
看似不太可能,不過總是要試試才知道~
目前在應用上,最熱門就是UBoot,不過,UBoot真的太肥、太大了,XBoot也需要瘦身,司徒在whycan有看到一些人,自己做精簡版Bootloader,不過,司徒最後決定自己幹一個超精簡Bootloader給FC3000掌機專用,所以,可能幾個月後,才會在更新了~哈
离线
@司徒
只是引导linux,坛子里有人做过了。代码才3k,https://whycan.com/t_5060.html
离线
司徒原本沈浸在雙飛的感覺之中,心情愉悅,於是爽爽的寫FC3000程式,結果,竟然吃土了!
今天就來分享一下遇到的問題
目前FC3000掌機已經可以從MicroSD開機執行,於是,司徒依照個人慣例,都會把一些基本I/O程式練習一遍
所以,第一個測試就是點屏,這個沒有問題,第二個測試程式則是UART,結果竟然卡關...
但是,一樣的程式燒到SPI Flash竟然可以執行,司徒編譯後的Binary程式大小只有512 Bytes
後來交叉測試,發現F1C100S只會從MicroSD載入大於512 Bytes的Binary程式,意思就是寫到MicroSD的程式必須大於等於1024 Bytes,這也是為何司徒的短小測試程式無法從MicroSD執行的原因,SPI Flash就沒有這個限制,跟大家分享一下~
离线
哈!真是相當對不起有改機的玩家,因為,經過司徒測試,FC3000掌機其實不需要改機就可以安裝Linux系統,因為F1C100S支援MicroSD 1bit/SPI模式開機
經過幾天奮戰,司徒的自幹Bootloader已經差不多了,然而,司徒這才發現FC3000 V2版本的機器,硬件跟V1版本一模一樣,只有SPI Flash不一樣,所以,司徒決定先來幹一件事情,那就是製作V1、V2系統升級程序,哈,有點擋人財路的感覺,司徒只是個人興趣愛好研究,請勿將此程序作為商業用途
步驟如下:
1. 下載fc3000_v1_v2_flash.img.7z
2. 解壓縮後,將fc3000_v1_v2_flash.img直接燒錄到MicroSD
$ sudo dd if=fc3000_v1_v2_flash.img of=/dev/sdX bs=1M && sync && sync
64+0 records in
64+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 6.40316 s, 10.5 MB/s
P.S. sdX為當下的MicroSD位置
司徒目前只有測試SanDisk記憶卡
3. 移除卡帶
4. 插入剛剛燒錄完成的MicroSD
5. 插入電池,開機上電
按下SELECT:刷入v1版本官方系統(8大模擬器)
按下START:刷入v2版本官方系統(10大模擬器)
6. 更新時間大約3分鐘
7. 完成
v1版本系統(8大模擬器)
v2版本系統(10大模擬器)
既然Bootloader都自幹完畢了,那司徒接下來就準備要開始移植Linux Kernel,目前有三種可行方式:
1. 使用當初司徒移植給Miyoo的Linux Kernel (Linux Kernel 4.14.0)
2. 從荔枝派GitHub官網Clone移植 (Linux Kernel 5.2)
3. 從目前最新的Linux Kernel從頭移植 (Linux Kernel 5.12.9)
為了榨乾F1C100S效能,司徒最後決定從目前最新的Linux Kernel 5.12.9從頭移植,所以可能幾個月後,司徒才會在更新了!哈哈~
不過,移植Linux Kernel需要一些時間,因此,司徒也會把預定的四台掌機(FC3000、Q8、TRIMUI、PocketGo)做整理,因此,當移植累了,司徒就會整理這四台掌機,讓這四台掌機都處於備戰狀態(硬體都解析出來),所以接下來,可能是混亂的開始,哈~
离线
非常感谢司徒大神,为我们带来这么多可以玩的东西,特别是您的掌机网站,对我们来说可是无价之宝喔!详细的拆解过程以及何种芯片主控何种屏幕,对于我们这些爱拆机爱DIY的业余无线电玩家,可以避免走很多弯路,非常感谢!
离线
司徒先生,我用 Win32DiskImager 燒入 fc3000_v1_v2_flash.img檔 後 fc3000 開機黑屏,沒有升級的選擇畫面
檢查寫入完成的 SD CARD ,發現裡面只有一個空的fc3000 分區,裡面沒有資料,請問是哪裡操做有問題?
感謝您
离线
司徒先生日安,不好意思再度麻煩你,我用Apacer 8G ,ADATA 64G ,SanDisk 32GB 測試也都一樣黑屏,會不會是因為我使用的是FC3000 V1版本機器的關係?
另外,是否麻煩你再上傳一次 fc3000_v1_v2_flash.img檔,因為我怎麼檢查它都是空的
再次感謝你
离线
我重新上傳了一份:https://github.com/steward-fu/fc3000/releases/download/v1.0/fc3000_v1_v2_flash.img
你可以使用SHA1工具算一下檔案
fc3000_v1_v2_flash.img: a9d34ff94169f5a3f2afa768345540156c99d501
如果還是無法一樣進入燒錄選單的話,那~就遵照老天的旨意吧~
离线
司徒先生日安,跟你回報一下,結果還是黑屏無法進入燒錄選單,真的是天意如此,感謝你的耐心回復
离线
太棒了,看司徒大大折腾的过程就已经是种享受,感谢你
离线
司徒接下來除了把重點鎖定在移植Linux Kernel之外,也同時鎖定另一台機器,那就是TRIMUI掌機,這台掌機使用F1C200S當作CPU,不過,司徒比較喜愛的是他的大小尺寸,相當便攜,可惜的是,司徒曾經試著聯繫廠商提供源代碼,一直沒有得到回覆(預期結果),當然,司徒只想知道TRIMUI掌機是否會閃屏,因為就司徒手上的資料,這台掌機應該也是有閃屏問題(8Bits BUS,沒有TE),為了解決這個好奇心,司徒又開始折騰...
四台F1C100S系列掌機比較
價格便宜:Q8 > FC3000 > TRIMUI > PocketGo
容易攜帶:TRIMUI > PocketGo > Q8 > FC3000
實際可玩:PocketGo > TRIMUI > FC3000 > Q8
有閃屏問題:FC3000、Q8
沒有閃屏問題:PocketGo
全視角屏幕:PocketGo、TRIMUI
司徒的目標很明確,就是要確定TRIMUI掌機是否有閃屏問題,而PocketGo掌機已經由司徒確定可以解決閃屏問題,只是司徒目前手上沒有PocketGo掌機,因此,重新下單,所以Q8掌機、PocektGo掌機的研究順序排位在最後
TRIMUI屏視角
TRIMUI大小比較
TRIMUI拆機
磨掉型號的IC(F1C200S)、MX35LF1GE4AB-241
INANBO-T20CR6I-V20 2.0" IPS 320x240
离线
目前司徒的TRIMUI掌機是無法進入系統的,其實更正確的說,應該是司徒把它搞掛了~司徒嘗試使用官方建議方式,安裝燒錄軟體進行燒錄,可惜,司徒一直無法燒錄成功,於是,司徒心想,那就寫一個Bootloadert程式,用來把官方固件寫回NAND Flash就好,但是,司徒看了一下官方固件,發現格式怪怪的,於是開始挖掘這口乾枯的深井....
Ref:
https://github.com/Ithamar/awutils
https://stackoverflow.com/questions/48872746/what-is-an-imagewty-firmware-format
官方燒錄檔案 trimui_model_S_dark_V0.105_en.img
$ xxd trimui_model_S_dark_V0.105_en.img | head
00000000: 494d 4147 4557 5459 0003 0000 6000 0000 IMAGEWTY....`...
00000010: 0000 d004 3402 1000 00c8 5606 0000 0000 ....4.....V.....
00000020: 0004 0000 3412 0000 4387 0000 0001 0000 ....4...C.......
00000030: 0001 0000 0100 0000 0004 0000 1c00 0000 ................
00000040: 0004 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 00c1 8449 10d9 a471 4011 e4b9 9069 4421 ...I...q@....iD!
00000070: 00e1 c4a9 9079 6451 4031 2419 1009 0401 .....ydQ@1$.....
00000080: 0001 0409 1019 2431 4051 6479 90a9 c4e1 ......$1@Qdy....
00000090: 0021 4469 90b9 e411 4071 a4d9 1049 84c1 .!Di....@q...I..
官方固件是IMAGEWTY格式,於是司徒找到awutils工具,可以用來拆解
$ cd
$ git clone https://github.com/Ithamar/awutils
$ cd awutils
$ gcc parsecfg.c twofish.c rc6.c awimage.c -o awimage -I.
解開 trimui_model_S_dark_V0.105_en.img
$ ./awimage ../trimui_model_S_dark_V0.105_en.img
./awimage: unpacking ../trimui_model_S_dark_V0.105_en.img to ../trimui_model_S_dark_V0.105_en.img.dump
Extracting: COMMON SYS_CONFIG100000 (45841, 45856)
Extracting: COMMON SYS_CONFIG_BIN00 (28672, 28672)
Extracting: COMMON SPLIT_0000000000 (512, 512)
Extracting: COMMON SYS_CONFIG000000 (3119, 3120)
Extracting: COMMON DTB_CONFIG000000 (50176, 50176)
Extracting: BOOT BOOT0_0000000000 (16384, 16384)
Extracting: 12345678 1234567890BOOT_0 (32768, 32768)
Extracting: 12345678 UBOOT_0000000000 (671744, 671744)
Extracting: 12345678 TOC1_00000000000 (8, 16)
Extracting: 12345678 TOC0_00000000000 (8, 16)
Extracting: FES FES_1-0000000000 (11648, 11648)
Extracting: 12345678 BOOTPKG-00000000 (753664, 753664)
Extracting: PXTOOLSB XXXXXXXXXXXXXXXX (147968, 147968)
Extracting: UPFLYTLS XXXXXXXXXXXXXXXX (165019, 165024)
Extracting: UPFLTL32 XXXXXXXXXXXXXXXX (150847, 150848)
Extracting: 12345678 1234567890CARDTL (73216, 73216)
Extracting: 12345678 1234567890SCRIPT (1758, 1760)
Extracting: 12345678 1234567890___MBR (65536, 65536)
Extracting: 12345678 1234567890DLINFO (16384, 16384)
Extracting: 12345678 1234567890ARISC (15, 16)
Extracting: RFSFAT16 BOOTLOGO_FEX0000 (153738, 153744)
Extracting: RFSFAT16 VBOOTLOGO_FEX000 (4, 16)
Extracting: RFSFAT16 ENV_FEX000000000 (131072, 131072)
Extracting: RFSFAT16 VENV_FEX00000000 (4, 16)
Extracting: RFSFAT16 BOOT_FEX00000000 (3124088, 3124096)
Extracting: RFSFAT16 VBOOT_FEX0000000 (4, 16)
Extracting: RFSFAT16 ROOTFS_FEX000000 (100663296, 100663296)
Extracting: RFSFAT16 VROOTFS_FEX00000 (4, 16)
結果竟然不小心發現了 uImage 和 DTB,哈~感謝老天的恩賜!
$ file * | grep -i Linux
RFSFAT16_BOOT_FEX00000000: u-boot legacy uImage, ARM OpenWrt Linux-3.10.65, Linux/ARM, OS Kernel Image (Not compressed), 3124024 bytes, Thu Jan 1 00:00:00 1970, Load Address: 0x80008000, Entry Point: 0x80008000, Header CRC: 0x1877E4E2, Data CRC: 0x8DD5320A
RFSFAT16_ROOTFS_FEX000000: Linux rev 1.0 ext2 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
$ strings RFSFAT16_BOOT_FEX00000000 | grep Linux
ARM OpenWrt Linux-3.10.65
Uncompressing Linux...
Linux Documentah
Linux
OpenWRT 3.10.65 ? 真假,哈~
提取 zImage
$ dd if=RFSFAT16_BOOT_FEX00000000 of=zImage bs=1 skip=64
3124024+0 records in
3124024+0 records out
3124024 bytes (3.1 MB, 3.0 MiB) copied, 5.43237 s, 575 kB/s
$ file zImage
zImage: Linux kernel ARM boot executable zImage (little-endian)
這個zImage似乎有點怪怪的,因為並沒有找到gzip的Header
接著看一下DTB
$ file "COMMON _DTB_CONFIG000000"
COMMON _DTB_CONFIG000000: Device Tree Blob version 17, size=45683, boot CPU=0, string block size=7371, DT structure block size=38240
$ cp "COMMON _DTB_CONFIG000000" dtb
$ dtc -I dtb -O dts -f dtb -o trimui.dts
$ vim trimui.dts
lcd0@0 {
allwinner,pins = "PD3\0PD4\0PD5\0PD6\0PD7\0PD8\0PD18\0PD20\0PD21";
allwinner,function = "lcd0";
allwinner,pname = "lcdd5\0lcdd6\0lcdd7\0lcdd10\0lcdd11\0lcdd12\0lcdclk\0lcdhsync\0lcdvsync";
sdc0@0 {
allwinner,pins = "PF0\0PF1\0PF2\0PF3\0PF4\0PF5";
lcd0@01c0c000 {
lcd_x = < 0x140 >;
lcd_y = < 0xf0 >;
lcd_width = < 0x32 >;
lcd_height = < 0x25 >;
lcd_pwm_used = < 0x01 >;
lcd_pwm_ch = < 0x01 >;
lcd_hbp = < 0x26 >;
lcd_ht = < 0x465 >;
lcd_hspw = < 0x12 >;
lcd_vbp = < 0x06 >;
lcd_vt = < 0x11e >;
lcd_vspw = < 0x04 >;
lcd_cpu_if = < 0x00 >;
keyboard {
compatible = "allwinner,keyboard_2000mv";
chosen {
bootargs = "earlyprintk=sunxi-uart,0x01c25000 loglevel=8 initcall_debug=1 console=ttyS0 init=/init";
lcd_cpu_if = < 0x00 >,不是CPU屏?哈~有趣有趣,司徒越來越激情了~哈
离线
感谢司徒大佬能够分享你的工作成果。今天在群里看到你在折腾FC3000,特地跑过来看一下。去年入手FC3000之后感觉还真的挺不错的,目前市场上的机器清一色都是右边十字形排列的四颗按键,我个人就是想要这种仿FC手柄排列方式的按键来玩FC或者GB一类的老游戏。可惜最遗憾的是原系统没有调整屏幕比例的选项,让我玩着太难受。如今有能刷机的希望,真是太开心了。
离线
...我手上這台 也許,可能,就是 IPS版本.....
難怪之前的升級檔怎樣都不能用
最近编辑记录 masahiko (2021-06-26 20:41:35)
离线
我在蝦皮買的,不過剛剛查了一下,賣家已經沒賣了,以下是當時的訊息,你參考一下
离线
台灣!真高興能夠在此遇到~
能夠幫我一個忙嗎?把這個fc300_ips_dump.img.7z解壓縮後,寫到MicroSD,然後插入你的機器,開機後會黑屏,然後開始dump spi flash,大約五分鐘後,屏的背光會開始閃爍,此時,代表完成dump,關機後,把MicroSD裡面的v1com.img傳給我,感謝~
https://github.com/steward-fu/fc3000/releases/download/v1.0/fc300_ips_dump.img.7z
离线
看到司徒大哥再次燃起激情,也有很多大神级响应,感到非常高兴!小白只有旁观同感喜悦!大哥加油!
离线
沒有,開機後背光沒亮,最後背光也沒有閃爍,完全黑屏,我是等到十分鐘後才關機取出dump rom
离线
如果有時間,可以在幫忙測試一下這一版嗎?
https://github.com/steward-fu/fc3000/releases/download/v1.0/ips_fc3000_dump_0627_1.img.7z
步驟:
1. 解壓縮後,寫到MicroSD
2. 插入MicroSD到IPS FC3000
3. 上電 (黑屏)
4. 開始Dump Stock ROM (還是黑屏狀態)
5. 五分鐘後,背光要開始閃爍
6. 關機,把v1rom.img給我
离线
司徒大佬,TRIMUI已经有几个外国人制作了前端,增加了好些模拟器,也能进行超频,不知道对你的开发有没有帮助
https://nitroxyz.com/archives/trimuigmenunx-210611_21006121.html
离线
ips_fc3000_dump_0627_1.img 燒入測試狀況和上次一樣,開機後背光沒亮,最後背光也沒有閃爍,完全黑屏,一樣等到十分鐘後才關機取出dump rom
dump rom 檔案如附件,請查收
离线
感謝你的資訊,你給的資訊對我有幫助,但是有限~由於TRIMUI內核沒有公開,有一些細節地方會有地雷,我不想踩第二次,這也是為何我研究東西,通常都是從頭做起的原因,對於核心掌握度不高的東西,我一般不會玩太深,不是我要排擠他人,是因為我真的踩過太多雷了,當遇到閃屏、聲音延遲、按鍵鬼鍵或延遲、記憶體無法映射、屏掃描是否足夠60FPS...等等問題,在未知的細節去猜問題,那就真的...,不過,如果興趣在於移植,那倒也無所謂,可惜我目前不是,哈,感謝你的資訊~
离线
哈~正所謂有志者、事竟成,總有一天會迴光返照~
司徒一直苦惱,為何我的TRIMUI掌機就是無法使用PhoenixSuit軟件燒錄,終於,司徒突然領悟了~原來我當初焊接使用的是芒果派的NAND Flash,並不是原廠的NAND Flash(MX35LF1GE4AB-241),於是,司徒購買新的焊接回去後,終於可以使用PhoenixSuit軟件燒錄了~原來司徒命中帶屎,哈
接著,司徒就想再度看看許久未見的TRIMUI系統,結果UART Login需要密碼,這...,擺明叫司徒搞你,司徒真是不得已...
updater
#!/bin/sh
dir=`dirname $0`
cd $dir
mount -o remount,rw /
cp inittab /etc/
sync
reboot
inittab
null::sysinit:/bin/mount -o remount,rw /
null::sysinit:/bin/mkdir -p /dev/pts
null::sysinit:/bin/mount -a
::sysinit:/etc/init.d/rcS boot
/dev/console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
null::shutdown:/bin/umount -a -r
打包成TrimuiUpdateV9999_root_login.zip
$ zip TrimuiUpdateV9999_root_login.zip updater inittab
接著刷入TrimuiUpdateV9999_root_login.zip,開機就會以root帳號登入(baudrate: 115200bps)
BusyBox v1.27.2 () built-in shell (ash)
_____ _ __ _
|_ _||_| ___ _ _ | | |_| ___ _ _ _ _
| | _ | || | | |__ | || || | ||_'_|
| | | || | || _ | |_____||_||_|_||___||_,_|
|_| |_||_|_||_|_| Tina is Based on OpenWrt!
----------------------------------------------
Tina Linux (Neptune, 5C1C9C53)
----------------------------------------------
root@Linux:/#
原來是全志的Tina Linux,哈~難怪我要不到內核代碼
接著司徒想要測試一下閃屏問題,確定一下TRIMUI是否會閃屏,司徒從ext2 rootfs找到官方閃屏測試檔案lcdteartest
root@Linux:/usr/trimui/bin# ./lcdteartest 60
================= lcd_fb_init ===============
fb width:320 height:240 bpp:16
render fps 63
render fps 62
render fps 62
render fps 62
render fps 62
render fps 62
render fps 62
render fps 62
render fps 62
不過,官方測試是白色區塊位移,一般司徒不這樣測試,司徒要整面畫面RGB依序切換,才能看出所有像素點是否有被重疊,因此,司徒想到稍早有位熱心朋友告知GMenuNx的消息,於是,司徒找了一下GMenuNx的toolchain,想要自己寫一個測試閃屏程式,但是,這個toolchain並沒有被釋出?這...真是難為司徒了~
离线
好吧~接下來的話,說出來可能會很傷人,但是,司徒最初只是想知道目前TRIMUI掌機是否會有閃屏問題,沒有要得罪人的意思,請不要誤會我~為何司徒想要知道是否有閃屏的問題呢?因為閃屏是決定這台掌機是否可以拿來玩遊戲的衡量指標,所以,結論:目前TRIMUI(trimui_model_S_dark_V0.105_en.img)還是存在閃屏問題,過程如下說明
司徒找了許久,還是沒有找到GMenuNX的toolchain,當然TRIMUI的toolchain更不用說,一定沒有,司徒真好奇,那些外國人怎麼拿到的,不過,那也沒關係,反正,那也只是Link問題而已,小問題,於是,司徒寫了一個閃屏測試程式
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
int main(int argc, char** argv)
{
uint32_t cnt=0;
SDL_Surface* screen=NULL;
uint32_t col[]={0xf800, 0x7e0, 0x1f};
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE | SDL_DOUBLEBUF);
while(cnt < 600){
cnt+= 1;
SDL_FillRect(screen, &screen->clip_rect, col[cnt % 3]);
SDL_Flip(screen);
SDL_Delay(1000 / 60);
}
SDL_Quit();
return 0;
}
updater
#!/bin/sh
dir=`dirname $0`
cd $dir
killall updateui
killall keymon
LD_LIBRARY_PATH=/usr/trimui/lib ./main
編譯
$ arm-linux-gnueabi-gcc main.c -o main -I/usr/include/SDL /xxx/usr/trimui/lib/libSDL-1.2.so.0
P.S. libSDL-1.2.so.0是從機器複製出來的
打包
$ zip TrimuiUpdateV9999_tearing.zip updater main
https://github.com/steward-fu/trimui/releases/download/v1.0/TrimuiUpdateV9999_tearing.zip
刷入TrimuiUpdateV9999_tearing.zip就可以測試閃屏問題,可以看出目前TRIMUI(trimui_model_S_dark_V0.105_en.img)還是存在閃屏問題,使用者可以拿司徒的測試包測試,看看你是否可以察覺出來
從上面的測試,可以發現在單一畫面顯示時,出現兩個畫面,一個是目前,另外一個則是上一個畫面,這種現象就是閃屏,為何會有這樣的現象呢?司徒從幾個角度說明一下:
上層應用程式(或模擬器)
模擬器一般顯示設定在60fps,因此,模擬器會保證畫完一個畫面後,往驅動程式傳送,所以傳送當下是保證是一個單一畫面,接著第二個畫面...依此類推
中層驅動程式
驅動程式收到模擬器的畫面資料後,會往硬件(屏)送出,但是,如果沒有Double Buffer,在往硬件傳送中,會被模擬器再次傳送的資料覆蓋,導致兩個畫面重疊
下層硬體顯示
CPU屏:由LCD Driver負責畫面更新,一般不會有Double RAM,因此,會靠TE腳位通知驅動程式,目前在掃屏,請不要傳送資料給我,等空閒在送資料
RGB屏:如果是直寫RAM,那掃屏由驅動程式負責,這一般不會有問題,有問題的是,透過RAM掃屏,那一樣會有覆蓋問題
從這個測試結果可以看到畫面是水平分割,而非斜角,水平分割一般是驅動程式處理的問題,而斜角一般則是硬件刷新同步問題,驅動程式在處理PAN_DISPLAY跟中斷時,一般考慮由中斷優先取得,但是,從結果看來,缺少判斷PAN_DISPLAY是否更新完畢,這是司徒猜測的問題,因為司徒手上也沒有驅動程式可以參考修改,不過,你現在給我內核代碼,我也不想要了~哈
有Double Buffer就有Triple Buffer或者更多,不過,一般是用於加速,因為SDL在做SDL_Flip時,是靠複製資料給驅動程式,這個複製(320*240*2)是很耗時的,因此,像PCSX-ReARMed就是用DMA Mapping方式,省掉複製的時間,WIZ的PCSX就是這樣加速的,司徒當初幫RG、小橫米移植PS1模擬器時,也是這樣加速PS1模擬效能
离线
ips_fc3000_dump_0627_1.img 燒入測試狀況和上次一樣,開機後背光沒亮,最後背光也沒有閃爍,完全黑屏,一樣等到十分鐘後才關機取出dump rom
dump rom 檔案如附件,請查收
不好意思,我漏看訊息,後來老外有幫忙提取,感謝你的測試
离线
我剛好也有這個機子,一黑一白,黑色8模擬器,白色10模擬器的,試了司徒大大的刷機鏡像,兩臺機子都成功了還有這兩臺機子屏幕不一樣,黑色一臺缺上下視角,白色缺左右視角,感覺兩個屏幕是不是就是換了方向。
最近编辑记录 kofjin (2021-06-28 09:22:57)
离线
w
我这台白色的是V2版的,从四个角度看都颜色正常,应该是IPS屏的,就是颜色有点淡,像3DS和NDS的屏幕一样。
离线
司徒大神真的是台灣黑客之光,膜拜中~ 從剛知道大神已經是丁果a320後期了,時間也飛逝的很快也已過十多年,從貼吧、自己的網站到現在這地方,一直跟隨大神,司徒大還記得你在露天買到一台韓國開源機嗎?就是小弟本人榮幸能展轉給你,那時也是極愛開源機,第一台就是經典的小A,之後再到國外網購買回那台,所以那時你說竟在台灣拍賣有這台,沒錯!高價買來低價亂賣,然而也找不到那種感覺的機器了,而且那時大神還答應會研究開源的2p模式,雖已經到後期、但還是希望小a能更完善。目前市面上已經有太多換湯不換藥的開源,也知道左岸業者是無法研發新的心臟,不然早已開發第一線掌機了,感覺就像在榨乾不懂開源機的新手購買,真的好可怕,直到看到司徒燃起FC3000鬥志,又有A320的影子,於是直接買了二台,過後才發現大部份賣家全部都漲價,可想而知應該知道司徒要開往一條道路吧!哈哈哈,在此辛苦了司徒大,看你的每一篇文章都好想在開箱很刺激。還有據我知道很多台灣人默默在看這篇文章
最近编辑记录 george5497 (2021-06-28 14:33:54)
离线
@kofjin @除恶务尽
恭喜買到還不錯的機器,如果有發現IPS FC3000機器,麻煩告知司徒,司徒也希望可以移植Linux系統到IPS FC3000
@george5497
哈,真是很高興可以買到你的機器,丁果320 2P功能,我還記得,等回頭整理丁果A320,在一起製作了~
秉持熱誠研究開源掌機,能走多遠,但看天意了~
感謝每一位支持司徒的朋友,小弟在此至上謝意
接著,司徒來談談TRIMUI掌機,TRIMUI是唯一可以跟小橫米對打的低價優質機種,小橫米經過幾代演進,硬件已經達到可玩的程度,TRIMUI也很接近,只可惜很多資料並沒有公佈,至於反骨仔的機器,那種垃圾就不需要比較了~直接歸類到Q8掌機等級去,所以,司徒還是很看好TRIMUI掌機,哈,相信大家應該是看不出來,司徒正為不小心把閃屏問題說出來而圓謊,哈~
昨晚在夢境之中,司徒竟然看到TRIMUI在哭泣,一個人默默坐在河邊,這場景...,讓司徒真是相當不捨,為了補償,司徒最後決定移植仙劍奇俠傳給TRIMUI掌機,但是,司徒手上並沒有TRIMUI toolchain可以做移植編譯,這...,真是難為司徒了~
目前TRIMUI只有三款移植遊戲,司徒查了一下才發現是Hardcode在程式裡面
Binary Patch
這才發現顯示驅動不支援8Bits顯示,只好關掉仙劍的淡化效果...
安裝包
https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_sdlpal_20210628.7z
下載安裝包並解壓縮到MicroSD,接著安裝TrimuiUpdateV20210628_sdlpal.zip,安裝後系統自動重新啟動
進入其他遊戲就可以看到仙劍奇俠傳
仙劍奇俠傳 四合一版
其實,司徒一開始就說沒有內核代碼,移植會有很多問題,像是很多不支援的配置,或者按鍵鍵位亂配置,當然更多問題是,你永遠不知道還有多少地雷,只可惜大家只想到我就是不要給別人抄襲~
离线
@司徒
Please forgive my English reply. We've made a lot of progress on the Trimui in the Retro Game Handhelds Discord: https://discord.com/channels/529983248114122762/540168599063756802 We have a toolchain: https://git.crowdedwood.com/trimui-toolchain/ and source code for GMenuNX (among very many other things): https://www.dropbox.com/sh/5e9xwvp672vt8cr/AAAkfmYQeqdAalPiTramOz9Ma You might find collaborating with us helpful. If not, I hope this information aids in your progress. Good luck!
最近编辑记录 shauninman (2021-06-28 22:04:20)
离线
@shauninman
ha ha, it is amazing ! amazing !
firstly, thanks for your information, it helps me a lot
based on your link, now, I can build trimui toolchain from scratch and the application built from my toolchain works on trimui handheld
amazing !
since the GmenuNX source are put on DropBox, it might be broken soon
I will put them in my gtihub, if it is not permitted to do this, please tell me, thanks
honestly, it is very weird because nothing can be found from google by using keyword: trimui toolchain, even though trimui-toolchain, ha ha
anyway, it helps me a lot to port some emulators or games into trimui handheld later
thanks for your information
but I am very curious why do you know such more detailed configuration in buildroot ? ha ha, even it is glibc library ? ha
感謝許多朋友幫忙傳遞司徒找不到trimui toolchain的訊息, 哈, 小弟在此感謝啦!
离线
感谢司徒,trimui终于有仙剑了
国外友人也提供了trimui toolchain,这是大大的利好啊
离线
司徒,方便贴一下TRIUIMI的lcd初始化代码吗?买了个triuimi,准备试试。
离线
@fanelwin
不客氣
@xboot
我目前沒有LCD初始化代碼,我正在用邏輯分析儀抓取,我目前有的資訊如下
我使用電錶量測出來的腳位
LCD TE NC
LCD RESET 4.7K RC
LCD K N-CHANNEL MOSFET D (AO3416 AE9T)
LCD A 90416 PIN-6
LCD D0 PD3
LCD D1 PD4
LCD D2 PD5
LCD D3 PD6
LCD D4 PD7
LCD D5 PD8
LCD CS PD11
LCD SCL PD9
LCD DCLK PD18
LCD HS PD20
LCD VS PD21
LCD SDA PD10
离线
6-bit Parallel RGB Interface ? 神奇的模式,貌似不是I8080接口
离线
离线
@xboot
哈,真想不到,這鬼東西竟然有這一款相當特別的屏~
昨晚司徒在夢境之中,又再度看到TRIMUI歡樂的模樣,司徒心中真是相當高興,只是司徒不好意思跟它說,那是你的最後一餐,記得吃飽上路...,於是,手術台上...
LCD腳位
焊接
山寨邏輯分析儀出場...
取得的命令
0x7F
0x77
0x1B
0xA0
0x1D
0xAA
0x42
0x82
0x43
0xFD
0x43
0xBC
0x44
0x85
0x45
0x90
0x45
0xC0
0x46
0x9D
0x47
0xE7
0x76
0x99
0x81
0xA6
0x4C
0x9F
0x4E
0xA5
0x4C
0x9F
0x4E
0xA5
0x4D
0xAA
0x74
0x88
0x80
0x7F
0xB1
0x61
0x90
0x62
0x81
0x64
0x85
0x1D
0xAA
0x42
0xB0
0x45
0xA0
0x7B
0xE3
0x58
0xB1
0x5A
0x81
0x81
0x8A
0x78
0xA5
0x88
0x85
0x85
0x93
0x9C
0x79
0xA5
0x88
0x85
0x85
0x93
0x9C
0x78
0xA8
0xC7
0xD7
0x9D
0x9F
0xBF
0x79
0xA8
0xC7
0xD7
0x9D
0x9F
0xBF
0x5D
0x85
0x1A
0x80
0x10
0x7F
0x77
0x08
0x14
0x16
第一個指令是0x7F,於是,司徒翻了一下手冊,這...,我怎麼沒有看到0x7F的說明,難道是國王的初始化命令?有智慧才可以看到?看來司徒...沒有智慧~
离线
三线模式,之前见识过这种初始化接口,SDA的第一位是D/C标识,后面8位是数据,所以,你逻辑分析仪用spi解析,就会出错了,后移一位就正确了。SCL上升沿,判断SDA的状态,就可以了,9个上升沿。9个bit,没特别快的方式,只能自己慢慢数吧
离线
@xboot
閣下果然是有智慧的人才~遵照你的方式,我讓分析儀再往後取一位,把8Bits改成9Bits,就對了,感謝啦~
重新解析後的命令,最後是0x29 0x2c命令,這個就很熟悉了~
0x00FE
0x00EF
0x0036
0x0140
0x003A
0x0155
0x0084
0x0104
0x0086
0x01FB
0x0087
0x0179
0x0089
0x010B
0x008A
0x0120
0x008B
0x0180
0x008D
0x013B
0x008E
0x01CF
0x00EC
0x0133
0x0102
0x014C
0x0098
0x013E
0x009C
0x014B
0x0099
0x013E
0x009D
0x014B
0x009B
0x0155
0x00E8
0x0111
0x0100
0x00FF
0x0162
0x00C3
0x0120
0x00C4
0x0103
0x00C9
0x010A
0x003A
0x0155
0x0084
0x0161
0x008A
0x0140
0x00F6
0x01C7
0x00B0
0x0163
0x00B5
0x0102
0x0102
0x0114
0x00F0
0x014A
0x0110
0x010A
0x010A
0x0126
0x0139
0x00F2
0x014A
0x0110
0x010A
0x010A
0x0126
0x0139
0x00F1
0x0150
0x018F
0x01AF
0x013B
0x013F
0x017F
0x00F3
0x0150
0x018F
0x01AF
0x013B
0x013F
0x017F
0x00BA
0x010A
0x0035
0x0100
0x0021
0x00FE
0x00EE
0x0011
0x0029
0x002C
离线
有了初始化数据后,模拟gpio就可以初始化了,但6位并行RGB模式,是我第一次见,这个估计要研究如何配置F1C100S的TCON了,跟传统的16位RGB肯定有差别。
离线
@司徒
I'm glad it's helpful! Early on (while I was waiting for my device to arrive in the mail) I extracted the firmware factory recovery image (available from the manufacturer http://trimui.com/page.php?id=2) and ran strings and binwalk on the results. We found things like:
GCC: (OpenWrt/Linaro GCC 6.4-2017.11 2017-11) 6.4.1
and
Unix path: /home/<username>/Work/<username>/F1C100S_TINA/out/violin-F1C200s/compile_dir/toolchain/glibc-2.23-final/csu/abi-note.o
as well as library version numbers in the so filenames.
neonloop, the person who put together the toolchain, worked from there, with reasoning and trial and error. For those of us without your knowhow and soldering skills, discovering that the device has adbd was a huge productivity booster, giving us shell access to a running device without having to install a UART and the ability to push and pull files without having to remove and re-insert the SD card.
Another dev, eggs (who maintains the Dropbox folder), figured out a patch for SDL to fix the screen tearing just recently. He also figured out USB audio, how to initialize the LCD, and a host of other invaluable things.
I'm a novice when it comes to hardware and firmware hacking but I was able to put together a custom launcher that maintains the simplicity of the stock UI but updates the emulators and exposes their individual settings menus: https://github.com/shauninman/MinUI It's been a fun process of learning and discovery for everyone I think.
You should visit the discord, the other devs are much more knowledgable than I am
最近编辑记录 shauninman (2021-06-29 21:36:41)
离线
@shauninman
got it, thanks to share your experiences to me
looking at the results, you have find out all of information or settings you want from trimui handheld already.
it is highly recommended to create a new rootfs based your applications, not just improve original trimui system.
because I noticed that it has performances drop issue in original trimui system when you play your lovely game.
so, if you keep to improve it, I guess some unexpected issues might come out soon.
so, tweaking existing pseudo_init file in nandd and then boot from usb or microsd (from your new rootfs) is good choice.
but it depends on you, anyway, thanks all of your works and the others contributed to trimui-toolchain project, Thanks
离线
俗語說的好:麻雀雖小、五臟俱全,這或許就是XBOOT的最佳寫照,於是,司徒就先用XBOOT來測試一下,如果可以把屏點亮,那TRIMUI掌機距離備戰狀態不遠已!
xboot/src/arch/arm32/mach-f1c500s/driver/fb-f1c500s.c
/*
* driver/fb-f1c500s.c
*
* Copyright(c) 2007-2021 Jianjun Jiang <8192542@qq.com>
* Official site: http://xboot.org
* Mobile phone: +86-18665388956
* QQ: 8192542
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
#include <xboot.h>
#include <dma/dma.h>
#include <clk/clk.h>
#include <reset/reset.h>
#include <gpio/gpio.h>
#include <led/led.h>
#include <interrupt/interrupt.h>
#include <framebuffer/framebuffer.h>
#include <f1c500s-gpio.h>
#include <f1c500s/reg-tcon.h>
#include <f1c500s/reg-debe.h>
#include <f1c500s/reg-defe.h>
#define F1C500S_GPIO_BASE (0x01c20800)
#define F1C500S_GPIOD_CFG0 ((3 * 0x24) + 0x00)
#define F1C500S_GPIOD_DATA ((3 * 0x24) + 0x10)
struct fb_f1c500s_pdata_t
{
virtual_addr_t virtdefe;
virtual_addr_t virtdebe;
virtual_addr_t virttcon;
virtual_addr_t virtgpio;
char * clkdefe;
char * clkdebe;
char * clktcon;
int rstdefe;
int rstdebe;
int rsttcon;
int width;
int height;
int pwidth;
int pheight;
int bits_per_pixel;
int bytes_per_pixel;
int pixlen;
int index;
void * vram[2];
struct region_list_t * nrl, * orl;
struct {
int pixel_clock_hz;
int h_front_porch;
int h_back_porch;
int h_sync_len;
int v_front_porch;
int v_back_porch;
int v_sync_len;
int h_sync_active;
int v_sync_active;
int den_active;
int clk_active;
} timing;
struct led_t * backlight;
int brightness;
};
static inline void spi_9bits_write(struct fb_f1c500s_pdata_t * pdat, u32_t val)
{
uint8_t cnt=0;
uint32_t tmp=read32(pdat->virtgpio + F1C500S_GPIOD_DATA);
tmp&= ~(1 << 11);
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
for(cnt=0; cnt<9; cnt++){
tmp&= ~(1 << 10);
if(val & 0x100){
tmp|= (1 << 10);
}
val<<= 1;
tmp&= ~(1 << 9);
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
tmp|= (1 << 9);
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
}
tmp|= (1 << 11);
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
}
static inline void gc9308_init(struct fb_f1c500s_pdata_t * pdat)
{
spi_9bits_write(pdat, 0x00fe);
spi_9bits_write(pdat, 0x00ef);
spi_9bits_write(pdat, 0x0036);
spi_9bits_write(pdat, 0x0140);
spi_9bits_write(pdat, 0x003a);
spi_9bits_write(pdat, 0x0155);
spi_9bits_write(pdat, 0x0084);
spi_9bits_write(pdat, 0x0104);
spi_9bits_write(pdat, 0x0086);
spi_9bits_write(pdat, 0x01fb);
spi_9bits_write(pdat, 0x0087);
spi_9bits_write(pdat, 0x0179);
spi_9bits_write(pdat, 0x0089);
spi_9bits_write(pdat, 0x010b);
spi_9bits_write(pdat, 0x008a);
spi_9bits_write(pdat, 0x0120);
spi_9bits_write(pdat, 0x008b);
spi_9bits_write(pdat, 0x0180);
spi_9bits_write(pdat, 0x008d);
spi_9bits_write(pdat, 0x013b);
spi_9bits_write(pdat, 0x008e);
spi_9bits_write(pdat, 0x01cf);
spi_9bits_write(pdat, 0x00ec);
spi_9bits_write(pdat, 0x0133);
spi_9bits_write(pdat, 0x0102);
spi_9bits_write(pdat, 0x014c);
spi_9bits_write(pdat, 0x0098);
spi_9bits_write(pdat, 0x013e);
spi_9bits_write(pdat, 0x009c);
spi_9bits_write(pdat, 0x014b);
spi_9bits_write(pdat, 0x0099);
spi_9bits_write(pdat, 0x013e);
spi_9bits_write(pdat, 0x009d);
spi_9bits_write(pdat, 0x014b);
spi_9bits_write(pdat, 0x009b);
spi_9bits_write(pdat, 0x0155);
spi_9bits_write(pdat, 0x00e8);
spi_9bits_write(pdat, 0x0111);
spi_9bits_write(pdat, 0x0100);
spi_9bits_write(pdat, 0x00ff);
spi_9bits_write(pdat, 0x0162);
spi_9bits_write(pdat, 0x00c3);
spi_9bits_write(pdat, 0x0120);
spi_9bits_write(pdat, 0x00c4);
spi_9bits_write(pdat, 0x0103);
spi_9bits_write(pdat, 0x00c9);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x003a);
spi_9bits_write(pdat, 0x0155);
spi_9bits_write(pdat, 0x0084);
spi_9bits_write(pdat, 0x0161);
spi_9bits_write(pdat, 0x008a);
spi_9bits_write(pdat, 0x0140);
spi_9bits_write(pdat, 0x00f6);
spi_9bits_write(pdat, 0x01c7);
spi_9bits_write(pdat, 0x00b0);
spi_9bits_write(pdat, 0x0163);
spi_9bits_write(pdat, 0x00b5);
spi_9bits_write(pdat, 0x0102);
spi_9bits_write(pdat, 0x0102);
spi_9bits_write(pdat, 0x0114);
spi_9bits_write(pdat, 0x00f0);
spi_9bits_write(pdat, 0x014a);
spi_9bits_write(pdat, 0x0110);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x0126);
spi_9bits_write(pdat, 0x0139);
spi_9bits_write(pdat, 0x00f2);
spi_9bits_write(pdat, 0x014a);
spi_9bits_write(pdat, 0x0110);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x0126);
spi_9bits_write(pdat, 0x0139);
spi_9bits_write(pdat, 0x00f1);
spi_9bits_write(pdat, 0x0150);
spi_9bits_write(pdat, 0x018f);
spi_9bits_write(pdat, 0x01af);
spi_9bits_write(pdat, 0x013b);
spi_9bits_write(pdat, 0x013f);
spi_9bits_write(pdat, 0x017f);
spi_9bits_write(pdat, 0x00f3);
spi_9bits_write(pdat, 0x0150);
spi_9bits_write(pdat, 0x018f);
spi_9bits_write(pdat, 0x01af);
spi_9bits_write(pdat, 0x013b);
spi_9bits_write(pdat, 0x013f);
spi_9bits_write(pdat, 0x017f);
spi_9bits_write(pdat, 0x00ba);
spi_9bits_write(pdat, 0x010a);
spi_9bits_write(pdat, 0x0035);
spi_9bits_write(pdat, 0x0100);
spi_9bits_write(pdat, 0x0021);
spi_9bits_write(pdat, 0x00fe);
spi_9bits_write(pdat, 0x00ee);
spi_9bits_write(pdat, 0x0011);
spi_9bits_write(pdat, 0x0029);
spi_9bits_write(pdat, 0x002c);
}
static inline void r61520_write(struct fb_f1c500s_pdata_t * pdat, u32_t isdat, u32_t val)
{
u32_t tmp;
tmp = (val & 0x00ff) << 1;
tmp |= (val & 0xff00) << 2;
tmp |= isdat ? 0x80000 : 0;
tmp |= 0x100000;
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
tmp |= 0x40000;
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, tmp);
}
static void r61520_write_cmd(struct fb_f1c500s_pdata_t * pdat, u32_t val)
{
r61520_write(pdat, 0, val);
}
static void r61520_write_dat(struct fb_f1c500s_pdata_t * pdat, u32_t val)
{
r61520_write(pdat, 1, val);
}
static inline void r61520_init(struct fb_f1c500s_pdata_t * pdat)
{
r61520_write_cmd(pdat, 0xb0);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xb1);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xb3);
r61520_write_dat(pdat, 0x02);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xb4);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xc0);
r61520_write_dat(pdat, 0x07);
r61520_write_dat(pdat, 0x4f);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x01);
r61520_write_dat(pdat, 0x33);
r61520_write_cmd(pdat, 0xc1);
r61520_write_dat(pdat, 0x01);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x1a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x08);
r61520_write_cmd(pdat, 0xc3);
r61520_write_dat(pdat, 0x01);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x1a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x08);
r61520_write_cmd(pdat, 0xc4);
r61520_write_dat(pdat, 0x11);
r61520_write_dat(pdat, 0x01);
r61520_write_dat(pdat, 0x43);
r61520_write_dat(pdat, 0x01);
r61520_write_cmd(pdat, 0xc8);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x8a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x09);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x23);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x60);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xc9);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x8a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x09);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x23);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x09);
r61520_write_dat(pdat, 0x88);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x23);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xca);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x8a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x09);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x23);
r61520_write_dat(pdat, 0x10);
r61520_write_dat(pdat, 0x05);
r61520_write_dat(pdat, 0x09);
r61520_write_dat(pdat, 0x88);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x08);
r61520_write_dat(pdat, 0x0a);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x23);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0xd0);
r61520_write_dat(pdat, 0x07);
r61520_write_dat(pdat, 0xc6);
r61520_write_dat(pdat, 0xdc);
r61520_write_cmd(pdat, 0xd1);
r61520_write_dat(pdat, 0x54);
r61520_write_dat(pdat, 0x0d);
r61520_write_dat(pdat, 0x02);
r61520_write_cmd(pdat, 0xd2);
r61520_write_dat(pdat, 0x63);
r61520_write_dat(pdat, 0x24);
r61520_write_cmd(pdat, 0xd4);
r61520_write_dat(pdat, 0x63);
r61520_write_dat(pdat, 0x24);
r61520_write_cmd(pdat, 0xd8);
r61520_write_dat(pdat, 0x07);
r61520_write_dat(pdat, 0x07);
r61520_write_cmd(pdat, 0xe0);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0x13);
r61520_write_cmd(pdat, 0x20);
r61520_write_cmd(pdat, 0x35);
r61520_write_dat(pdat, 0x00);
r61520_write_cmd(pdat, 0x44);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x30);
r61520_write_cmd(pdat, 0x36);
r61520_write_dat(pdat, 0xe0);
r61520_write_cmd(pdat, 0x3a);
r61520_write_dat(pdat, 0x55);
r61520_write_cmd(pdat, 0x2a);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x01);
r61520_write_dat(pdat, 0x3f);
r61520_write_cmd(pdat, 0x2b);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0x00);
r61520_write_dat(pdat, 0xef);
r61520_write_cmd(pdat, 0x11);
r61520_write_cmd(pdat, 0x29);
r61520_write_cmd(pdat, 0x2c);
}
static inline void f1c500s_debe_set_mode(struct fb_f1c500s_pdata_t * pdat)
{
struct f1c500s_debe_reg_t * debe = (struct f1c500s_debe_reg_t *)(pdat->virtdebe);
u32_t val;
val = read32((virtual_addr_t)&debe->mode);
val |= (1 << 0);
write32((virtual_addr_t)&debe->mode, val);
write32((virtual_addr_t)&debe->disp_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));
write32((virtual_addr_t)&debe->layer0_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));
write32((virtual_addr_t)&debe->layer0_stride, ((pdat->width) << 5));
write32((virtual_addr_t)&debe->layer0_addr_low32b, (u32_t)(pdat->vram[pdat->index]) << 3);
write32((virtual_addr_t)&debe->layer0_addr_high4b, (u32_t)(pdat->vram[pdat->index]) >> 29);
write32((virtual_addr_t)&debe->layer0_attr1_ctrl, 9 << 8);
val = read32((virtual_addr_t)&debe->mode);
val |= (1 << 8);
write32((virtual_addr_t)&debe->mode, val);
val = read32((virtual_addr_t)&debe->reg_ctrl);
val |= (1 << 0);
write32((virtual_addr_t)&debe->reg_ctrl, val);
val = read32((virtual_addr_t)&debe->mode);
val |= (1 << 1);
write32((virtual_addr_t)&debe->mode, val);
}
static inline void f1c500s_debe_set_address(struct fb_f1c500s_pdata_t * pdat, void * vram)
{
struct f1c500s_debe_reg_t * debe = (struct f1c500s_debe_reg_t *)(pdat->virtdebe);
write32((virtual_addr_t)&debe->layer0_addr_low32b, (u32_t)vram << 3);
write32((virtual_addr_t)&debe->layer0_addr_high4b, (u32_t)vram >> 29);
}
static inline void f1c500s_tcon_enable(struct fb_f1c500s_pdata_t * pdat)
{
struct f1c500s_tcon_reg_t * tcon = (struct f1c500s_tcon_reg_t *)pdat->virttcon;
u32_t val;
val = read32((virtual_addr_t)&tcon->ctrl);
val |= (1 << 31);
write32((virtual_addr_t)&tcon->ctrl, val);
val = read32((virtual_addr_t)&tcon->tcon0_cpu_intf);
val |= (1 << 28);
write32((virtual_addr_t)&tcon->tcon0_cpu_intf, val);
}
static inline void f1c500s_tcon_disable(struct fb_f1c500s_pdata_t * pdat)
{
struct f1c500s_tcon_reg_t * tcon = (struct f1c500s_tcon_reg_t *)pdat->virttcon;
u32_t val;
write32((virtual_addr_t)&tcon->ctrl, 0);
write32((virtual_addr_t)&tcon->int0, 0);
val = read32((virtual_addr_t)&tcon->tcon0_dclk);
val &= ~(0xf << 28);
write32((virtual_addr_t)&tcon->tcon0_dclk, val);
write32((virtual_addr_t)&tcon->tcon0_io_tristate, 0xffffffff);
write32((virtual_addr_t)&tcon->tcon1_io_tristate, 0xffffffff);
}
static inline void f1c500s_tcon_set_mode(struct fb_f1c500s_pdata_t * pdat)
{
struct f1c500s_tcon_reg_t * tcon = (struct f1c500s_tcon_reg_t *)pdat->virttcon;
int bp, total;
u32_t val;
val = read32((virtual_addr_t)&tcon->ctrl);
val &= ~(0x1 << 0);
write32((virtual_addr_t)&tcon->ctrl, val);
val = (pdat->timing.v_front_porch + pdat->timing.v_back_porch + pdat->timing.v_sync_len);
write32((virtual_addr_t)&tcon->tcon0_ctrl, (1 << 31) | ((val & 0x1f) << 4));
val = clk_get_rate(pdat->clktcon) / pdat->timing.pixel_clock_hz;
write32((virtual_addr_t)&tcon->tcon0_dclk, (0xf << 28) | (val << 0));
write32((virtual_addr_t)&tcon->tcon0_timing_active, ((pdat->width - 1) << 16) | ((pdat->height - 1) << 0));
bp = pdat->timing.h_sync_len + pdat->timing.h_back_porch;
total = pdat->width * 3 + pdat->timing.h_front_porch + bp;
write32((virtual_addr_t)&tcon->tcon0_timing_h, ((total - 1) << 16) | ((bp - 1) << 0));
bp = pdat->timing.v_sync_len + pdat->timing.v_back_porch;
total = pdat->height + pdat->timing.v_front_porch + bp;
write32((virtual_addr_t)&tcon->tcon0_timing_v, ((total * 2) << 16) | ((bp - 1) << 0));
write32((virtual_addr_t)&tcon->tcon0_timing_sync, ((pdat->timing.h_sync_len - 1) << 16) | ((pdat->timing.v_sync_len - 1) << 0));
write32((virtual_addr_t)&tcon->tcon0_hv_intf, (1 << 31));
write32((virtual_addr_t)&tcon->tcon0_cpu_intf, 0);
write32((virtual_addr_t)&tcon->tcon0_io_polarity, (1 << 28));
write32((virtual_addr_t)&tcon->tcon0_io_tristate, 0);
}
static inline void fb_f1c500s_cfg_gpios(int base, int n, int cfg, enum gpio_pull_t pull, enum gpio_drv_t drv)
{
for(; n > 0; n--, base++)
{
gpio_set_cfg(base, cfg);
gpio_set_pull(base, pull);
gpio_set_drv(base, drv);
}
}
static inline void fb_f1c500s_init(struct fb_f1c500s_pdata_t * pdat)
{
fb_f1c500s_cfg_gpios(F1C500S_GPIOD9, 3, 1, GPIO_PULL_NONE, GPIO_DRV_STRONG);
write32(pdat->virtgpio + F1C500S_GPIOD_DATA, 0xffffffff);
//r61520_init(pdat);
gc9308_init(pdat);
fb_f1c500s_cfg_gpios(F1C500S_GPIOD1, 7, 2, GPIO_PULL_NONE, GPIO_DRV_STRONG);
fb_f1c500s_cfg_gpios(F1C500S_GPIOD10, 12, 2, GPIO_PULL_NONE, GPIO_DRV_STRONG);
f1c500s_tcon_disable(pdat);
f1c500s_debe_set_mode(pdat);
f1c500s_tcon_set_mode(pdat);
f1c500s_tcon_enable(pdat);
}
static void fb_setbl(struct framebuffer_t * fb, int brightness)
{
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
led_set_brightness(pdat->backlight, brightness);
}
static int fb_getbl(struct framebuffer_t * fb)
{
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
return led_get_brightness(pdat->backlight);
}
static struct surface_t * fb_create(struct framebuffer_t * fb)
{
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
return surface_alloc(pdat->width, pdat->height, NULL);
}
static void fb_destroy(struct framebuffer_t * fb, struct surface_t * s)
{
surface_free(s);
}
static void fb_present(struct framebuffer_t * fb, struct surface_t * s, struct region_list_t * rl)
{
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
struct region_list_t * nrl = pdat->nrl;
region_list_clear(nrl);
region_list_merge(nrl, pdat->orl);
region_list_merge(nrl, rl);
region_list_clone(pdat->orl, rl);
pdat->index = (pdat->index + 1) & 0x1;
if(nrl->count > 0)
present_surface(pdat->vram[pdat->index], s, nrl);
else
memcpy(pdat->vram[pdat->index], s->pixels, s->pixlen);
dma_cache_sync(pdat->vram[pdat->index], pdat->pixlen, DMA_TO_DEVICE);
f1c500s_debe_set_address(pdat, pdat->vram[pdat->index]);
}
static struct device_t * fb_f1c500s_probe(struct driver_t * drv, struct dtnode_t * n)
{
struct fb_f1c500s_pdata_t * pdat;
struct framebuffer_t * fb;
struct device_t * dev;
char * clkdefe = dt_read_string(n, "clock-name-defe", NULL);
char * clkdebe = dt_read_string(n, "clock-name-debe", NULL);
char * clktcon = dt_read_string(n, "clock-name-tcon", NULL);
int i;
if(!search_clk(clkdefe) || !search_clk(clkdebe) || !search_clk(clktcon))
return NULL;
pdat = malloc(sizeof(struct fb_f1c500s_pdata_t));
if(!pdat)
return NULL;
fb = malloc(sizeof(struct framebuffer_t));
if(!fb)
{
free(pdat);
return NULL;
}
pdat->virtdefe = phys_to_virt(F1C500S_DEFE_BASE);
pdat->virtdebe = phys_to_virt(F1C500S_DEBE_BASE);
pdat->virttcon = phys_to_virt(F1C500S_TCON_BASE);
pdat->virtgpio = phys_to_virt(F1C500S_GPIO_BASE);
pdat->clkdefe = strdup(clkdefe);
pdat->clkdebe = strdup(clkdebe);
pdat->clktcon = strdup(clktcon);
pdat->rstdefe = dt_read_int(n, "reset-defe", -1);
pdat->rstdebe = dt_read_int(n, "reset-debe", -1);
pdat->rsttcon = dt_read_int(n, "reset-tcon", -1);
pdat->width = dt_read_int(n, "width", 320);
pdat->height = dt_read_int(n, "height", 240);
pdat->pwidth = dt_read_int(n, "physical-width", 216);
pdat->pheight = dt_read_int(n, "physical-height", 135);
pdat->bits_per_pixel = 18;
pdat->bytes_per_pixel = 4;
pdat->pixlen = pdat->width * pdat->height * pdat->bytes_per_pixel;
pdat->index = 0;
pdat->vram[0] = dma_alloc_noncoherent(pdat->pixlen);
pdat->vram[1] = dma_alloc_noncoherent(pdat->pixlen);
pdat->nrl = region_list_alloc(0);
pdat->orl = region_list_alloc(0);
pdat->timing.pixel_clock_hz = dt_read_long(n, "clock-frequency", 8000000);
pdat->timing.h_front_porch = dt_read_int(n, "hfront-porch", 40);
pdat->timing.h_back_porch = dt_read_int(n, "hback-porch", 87);
pdat->timing.h_sync_len = dt_read_int(n, "hsync-len", 1);
pdat->timing.v_front_porch = dt_read_int(n, "vfront-porch", 13);
pdat->timing.v_back_porch = dt_read_int(n, "vback-porch", 31);
pdat->timing.v_sync_len = dt_read_int(n, "vsync-len", 1);
pdat->timing.h_sync_active = dt_read_bool(n, "hsync-active", 0);
pdat->timing.v_sync_active = dt_read_bool(n, "vsync-active", 0);
pdat->timing.den_active = dt_read_bool(n, "den-active", 0);
pdat->timing.clk_active = dt_read_bool(n, "clk-active", 0);
pdat->backlight = search_led(dt_read_string(n, "backlight", NULL));
fb->name = alloc_device_name(dt_read_name(n), dt_read_id(n));
fb->width = pdat->width;
fb->height = pdat->height;
fb->pwidth = pdat->pwidth;
fb->pheight = pdat->pheight;
fb->setbl = fb_setbl;
fb->getbl = fb_getbl;
fb->create = fb_create;
fb->destroy = fb_destroy;
fb->present = fb_present;
fb->priv = pdat;
clk_enable(pdat->clkdefe);
clk_enable(pdat->clkdebe);
clk_enable(pdat->clktcon);
if(pdat->rstdefe >= 0)
reset_deassert(pdat->rstdefe);
if(pdat->rstdebe >= 0)
reset_deassert(pdat->rstdebe);
if(pdat->rsttcon >= 0)
reset_deassert(pdat->rsttcon);
for(i = 0x0800; i < 0x1000; i += 4)
write32(pdat->virtdebe + i, 0);
fb_f1c500s_init(pdat);
if(!(dev = register_framebuffer(fb, drv)))
{
clk_disable(pdat->clkdefe);
clk_disable(pdat->clkdebe);
clk_disable(pdat->clktcon);
free(pdat->clkdefe);
free(pdat->clkdebe);
free(pdat->clktcon);
dma_free_noncoherent(pdat->vram[0]);
dma_free_noncoherent(pdat->vram[1]);
region_list_free(pdat->nrl);
region_list_free(pdat->orl);
free_device_name(fb->name);
free(fb->priv);
free(fb);
return NULL;
}
return dev;
}
static void fb_f1c500s_remove(struct device_t * dev)
{
struct framebuffer_t * fb = (struct framebuffer_t *)dev->priv;
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
if(fb)
{
unregister_framebuffer(fb);
clk_disable(pdat->clkdefe);
clk_disable(pdat->clkdebe);
clk_disable(pdat->clktcon);
free(pdat->clkdefe);
free(pdat->clkdebe);
free(pdat->clktcon);
dma_free_noncoherent(pdat->vram[0]);
dma_free_noncoherent(pdat->vram[1]);
region_list_free(pdat->nrl);
region_list_free(pdat->orl);
free_device_name(fb->name);
free(fb->priv);
free(fb);
}
}
static void fb_f1c500s_suspend(struct device_t * dev)
{
struct framebuffer_t * fb = (struct framebuffer_t *)dev->priv;
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
pdat->brightness = led_get_brightness(pdat->backlight);
led_set_brightness(pdat->backlight, 0);
}
static void fb_f1c500s_resume(struct device_t * dev)
{
struct framebuffer_t * fb = (struct framebuffer_t *)dev->priv;
struct fb_f1c500s_pdata_t * pdat = (struct fb_f1c500s_pdata_t *)fb->priv;
led_set_brightness(pdat->backlight, pdat->brightness);
}
static struct driver_t fb_f1c500s = {
.name = "fb-f1c500s",
.probe = fb_f1c500s_probe,
.remove = fb_f1c500s_remove,
.suspend = fb_f1c500s_suspend,
.resume = fb_f1c500s_resume,
};
static __init void fb_f1c500s_driver_init(void)
{
register_driver(&fb_f1c500s);
}
static __exit void fb_f1c500s_driver_exit(void)
{
unregister_driver(&fb_f1c500s);
}
driver_initcall(fb_f1c500s_driver_init);
driver_exitcall(fb_f1c500s_driver_exit);
xboot/src/arch/arm32/mach-f1c500s/romdisk/boot/miyoo.json
"fb-f1c500s@0": {
"clock-name-defe": "link-defe",
"clock-name-debe": "link-debe",
"clock-name-tcon": "link-tcon",
"reset-defe": 46,
"reset-debe": 44,
"reset-tcon": 36,
"width": 320,
"height": 240,
"physical-width": 216,
"physical-height": 135,
"clock-frequency": 18000000,
"hfront-porch": 32,
"hback-porch": 20,
"hsync-len": 10,
"vfront-porch": 1,
"vback-porch": 1,
"vsync-len": 10,
"hsync-active": false,
"vsync-active": false,
"den-active": true,
"clk-active": true,
"backlight": "led-pwm-bl.0"
},
當初司徒在Miyoo上面移植的顏色
TRIMUI掌機的顏色,這...,難道是司徒的120Hz鷹眼有問題?
但是,測試紅色,看起來正常
綠色也是
藍色也是
於是,司徒再把仙劍的顏色拿出來比較一下,這是電腦上的畫面
這個是TRIMUI掌機顯示的顏色,這...,難道又是國王的顏色,有智慧才看得出來?不知大家的智慧如何?哈哈
离线
这屏是有gamma配置吗?如果没有gamma配置差别,这显示效果差异也太明显了点,很有可能还是tcon配置之类的问题,用原版系统显示这张仙剑奇侠传也是这个效果吗?如果不一样基本就是tcon配置问题,如果一样,这ips屏效果不敢恭维。
离线
哈,司徒目前使用電錶把TRIMUI掌機比較重要的腳位量測出來了,這樣的話TRIMUI掌機就進入備戰狀態了~
腳位
UP PA0
DOWN PE2
LEFT PE4
RIGHT PE8
A PD19
B PD12
X PD2
Y PD17
L PD0
R PD1
SELECT PD14
MENU PE11
START PD13
LED RED PE5
LED BLUE +3.3v
SPI FLASH CS PC1
SPI FLASH DO PC2
SPI FLASH DI PC3
SPI FLASH CLK PC0
LCD TE NC
LCD RESET 4.7K RC
LCD BL PE6
LCD D0 PD3
LCD D1 PD4
LCD D2 PD5
LCD D3 PD6
LCD D4 PD7
LCD D5 PD8
LCD CS PD11
LCD SCL PD9
LCD DCLK PD18
LCD HS PD20
LCD VS PD21
LCD SDA PD10
MicroSD D0 PF1
MicroSD D1 PF0
MicroSD D2 PF5
MicroSD D3 PF4
MicroSD CLK PF2
MicroSD CMD PF3
MicroSD CD PE4
离线
感動~ 這畫面跟外觀真的回到全盛時期的A320,司徒大; 真的辛苦了,雖沒全世界黑客一起優化的A320,
像單打獨鬥的孤獨獅子,但一定有死忠粉絲跟從,hahhhhhhhh
講真的司徒;讓我感覺這台FC3000有那時、西班牙那位丁果黑客領頭羊的風範。
前端開頭,最怕沒人一起優化的人。這就是那時為什麼對A320感動,也能破解PS3的神奇小不點
最近编辑记录 george5497 (2021-07-01 04:22:13)
离线
@司徒
对于tcon问题,有一种特别有效的方法,来找到问题点,就是在原版trimui系统里,先dump tcon的寄存器,然后与自己系统里的配置做比较,找到差异点后,对照寄存器手册,再分析,基本就可以解决这种问题。或者dump出来后,先一股脑写进去试试,看效果是否有变化,如有变化,那么肯定就在这些配置里了。
离线
@xboot
我把TCON Dump出來比對了一下,只有差在FRM的設定,補了上去,還是無法顯示正確的顏色,於是,我看了一下DEFE,沒有使用,接著查一下DEBE,TRIMUI只有使用一個Layer3並且設定成COLOR-RGB565,我也跟著設定,但是,結果還是一樣無法顯示正確的顏色,HWC PALETTE我也補上,但是,還是無法顯示正確的顏色,這...,可能需要有智慧的人去做,司徒沒有智慧,哈,等回頭整理顯示驅動時,我在研究看看,或許從GC9308改設定會比較快一點,哈~
TCON
0x0000: 0x80000000
0x0004: 0x80000000
0x0008: 0x00000000
0x000c: 0x00000000
0x0010: 0x80000000
0x0014: 0x00000001
0x0018: 0x00000003
0x001c: 0x00000005
0x0020: 0x00000007
0x0024: 0x0000000b
0x0028: 0x0000000d
0x002c: 0x01010000
0x0030: 0x15151111
0x0034: 0x57575555
0x0038: 0x7f7f7777
0x003c: 0x00000000
0x0040: 0x800001f0
0x0044: 0xf000000f
0x0048: 0x013f00ef
0x004c: 0x04640025
0x0050: 0x023c0005
0x0054: 0x00110003
0x0058: 0x80000000
0x005c: 0x00000000
0x0060: 0x00000000
0x0064: 0x00000000
0x0068: 0x00000000
0x006c: 0x00000000
0x0070: 0x00000000
0x0074: 0x00000000
0x0078: 0x00000000
0x007c: 0x00000000
0x0080: 0x00000000
0x0084: 0x00000000
0x0088: 0x00000000
0x008c: 0xe0000000
0x0090: 0x00000000
0x0094: 0x00000000
0x0098: 0x00000000
0x009c: 0x00000000
0x00a0: 0x00000000
0x00a4: 0x00000000
0x00a8: 0x00000000
0x00ac: 0x00000000
0x00b0: 0x00000000
0x00b4: 0x00000000
0x00b8: 0x00000000
0x00bc: 0x00000000
0x00c0: 0x00000000
0x00c4: 0x00000000
0x00c8: 0x00000000
0x00cc: 0x00000000
0x00d0: 0x00000000
0x00d4: 0x00000000
0x00d8: 0x00000000
0x00dc: 0x00000000
0x00e0: 0x00000000
0x00e4: 0x00000000
0x00e8: 0x00000000
0x00ec: 0x00000000
0x00f0: 0x00000000
0x00f4: 0xffffffff
0x00f8: 0x00000000
0x00fc: 0x10f10000
DEFE
0x0000: 0x00000000
0x0004: 0x00000000
0x0008: 0x00000000
0x000c: 0x00000000
0x0010: 0x00000000
0x0014: 0x00000000
0x0018: 0x00000000
0x001c: 0x16190478
0x0020: 0x00000000
0x0024: 0x00000000
0x0028: 0x00000000
0x002c: 0x00000000
0x0030: 0x00000000
0x0034: 0x00000000
0x0038: 0x00000000
0x003c: 0x20101013
0x0040: 0x00000000
0x0044: 0x00000000
0x0048: 0x00000000
0x004c: 0x00000000
0x0050: 0x00000000
0x0054: 0x00000000
0x0058: 0x00000000
0x005c: 0x00000000
0x0060: 0x00000000
0x0064: 0x00000000
0x0068: 0x00000000
0x006c: 0x00000000
0x0070: 0x00000000
0x0074: 0x00000000
0x0078: 0x00000000
0x007c: 0x00000000
0x0080: 0x00000000
0x0084: 0x00000000
0x0088: 0x00000000
0x008c: 0x00000000
0x0090: 0x00000000
0x0094: 0x00000000
0x0098: 0x00000000
0x009c: 0x00000000
0x00a0: 0x00000000
0x00a4: 0x00000000
0x00a8: 0x00000000
0x00ac: 0x00000000
0x00b0: 0x00000000
0x00b4: 0x00000000
0x00b8: 0x00000000
0x00bc: 0x00000000
0x00c0: 0x00000000
0x00c4: 0x00000000
0x00c8: 0x00000000
0x00cc: 0x00000000
0x00d0: 0x00000000
0x00d4: 0x00000000
0x00d8: 0x00000000
0x00dc: 0x00000000
0x00e0: 0x00000000
0x00e4: 0x00000000
0x00e8: 0x00000000
0x00ec: 0x00000000
0x00f0: 0x00000000
0x00f4: 0x00000000
0x00f8: 0x00000000
0x00fc: 0x00000000
DEBE
0x0800: 0x00000803
0x0804: 0x00000000
0x0808: 0x00ef013f
0x080c: 0x00000000
0x0810: 0xffffffff
0x0814: 0xffffffff
0x0818: 0xffffffff
0x081c: 0x00ef013f
0x0820: 0x00000000
0x0824: 0x00000000
0x0828: 0x00000000
0x082c: 0x00000000
0x0830: 0x00000000
0x0834: 0x00000000
0x0838: 0x00000000
0x083c: 0x00000000
0x0840: 0x00000000
0x0844: 0x00000000
0x0848: 0x00000000
0x084c: 0x00001400
0x0850: 0x00000000
0x0854: 0x00000000
0x0858: 0x00000000
0x085c: 0x1c400000
0x0860: 0x04000000
0x0864: 0x00000000
0x0868: 0x00000000
0x086c: 0x00000000
0x0870: 0x00000002
0x0874: 0x00000000
0x0878: 0x00000000
0x087c: 0x00000000
0x0880: 0x00000000
0x0884: 0x00000000
0x0888: 0x00000000
0x088c: 0x00000000
0x0890: 0x00000000
0x0894: 0x00000400
0x0898: 0x00000800
0x089c: 0x00008c00
0x08a0: 0x00000a00
0x08a4: 0x00000a00
0x08a8: 0x00000a00
0x08ac: 0x00000500
0x08b0: 0x00000000
0x08b4: 0x00000000
0x08b8: 0x00000000
0x08bc: 0x00000000
0x08c0: 0x00000002
0x08c4: 0x00000001
0x08c8: 0x00000000
0x08cc: 0x00000000
0x08d0: 0x00000000
0x08d4: 0x00000000
0x08d8: 0x00000000
0x08dc: 0x00000000
0x08e0: 0x00000000
0x08e4: 0x00000000
0x08e8: 0x00000000
0x08ec: 0x00000000
0x08f0: 0x00000000
0x08f4: 0x00000000
0x08f8: 0x00000000
0x08fc: 0x00000000
0x0900: 0x00000000
0x0904: 0x00000000
0x0908: 0x00000000
0x090c: 0x00000000
0x0910: 0x00000000
0x0914: 0x00000000
0x0918: 0x00000000
0x091c: 0x00000000
0x0920: 0x00000000
0x0924: 0x00000000
0x0928: 0x00000000
0x092c: 0x00000000
0x0930: 0x00000000
0x0934: 0x00000000
0x0938: 0x00000000
0x093c: 0x00000000
0x0940: 0x00000000
0x0944: 0x00000000
0x0948: 0x00000000
0x094c: 0x00000000
0x0950: 0x00000000
0x0954: 0x00000000
0x0958: 0x00000000
0x095c: 0x00000000
0x0960: 0x00000000
0x0964: 0x00000000
0x0968: 0x00000000
0x096c: 0x00000000
0x0970: 0x00000000
0x0974: 0x00000000
0x0978: 0x00000000
0x097c: 0x00000000
0x0980: 0x00000000
0x0984: 0x00000000
0x0988: 0x00000000
0x098c: 0x00000000
0x0990: 0x00000000
0x0994: 0x00000000
0x0998: 0x00000000
0x099c: 0x00000000
0x09a0: 0x00000000
0x09a4: 0x00000000
0x09a8: 0x00000000
0x09ac: 0x00000000
0x09b0: 0x00000000
0x09b4: 0x00000000
0x09b8: 0x00000000
0x09bc: 0x00000000
0x09c0: 0x00000001
0x09c4: 0x00000000
0x09c8: 0x00000000
0x09cc: 0x00000000
0x09d0: 0x000003c4
0x09d4: 0x00000000
0x09d8: 0x00000000
0x09dc: 0x0000000c
0x09e0: 0x00000000
0x09e4: 0x000003c4
0x09e8: 0x00000000
0x09ec: 0x0000000c
0x09f0: 0x00000000
0x09f4: 0x00000000
0x09f8: 0x000003c4
0x09fc: 0x0000000c
0x0a00: 0x00000000
0x0a04: 0x00000000
0x0a08: 0x00000000
0x0a0c: 0x00000000
0x0a10: 0x00000000
0x0a14: 0x00000000
0x0a18: 0x00000000
0x0a1c: 0x00000000
0x0a20: 0x00000000
0x0a24: 0x00000000
0x0a28: 0x00000000
0x0a2c: 0x00000000
0x0a30: 0x00000000
0x0a34: 0x00000000
0x0a38: 0x00000000
0x0a3c: 0x00000000
0x0a40: 0x00000000
0x0a44: 0x00000000
0x0a48: 0x00000000
0x0a4c: 0x00000000
0x0a50: 0x00000000
0x0a54: 0x00000000
0x0a58: 0x00000000
0x0a5c: 0x00000000
0x0a60: 0x00000000
0x0a64: 0x00000000
0x0a68: 0x00000000
0x0a6c: 0x00000000
0x0a70: 0x00000000
0x0a74: 0x00000000
0x0a78: 0x00000000
0x0a7c: 0x00000000
0x0a80: 0x00000000
0x0a84: 0x00000000
0x0a88: 0x00000000
0x0a8c: 0x00000000
0x0a90: 0x00000000
0x0a94: 0x00000000
0x0a98: 0x00000000
0x0a9c: 0x00000000
0x0aa0: 0x00000000
0x0aa4: 0x00000000
0x0aa8: 0x00000000
0x0aac: 0x00000000
0x0ab0: 0x00000000
0x0ab4: 0x00000000
0x0ab8: 0x00000000
0x0abc: 0x00000000
0x0ac0: 0x00000000
0x0ac4: 0x00000000
0x0ac8: 0x00000000
0x0acc: 0x00000000
0x0ad0: 0x00000000
0x0ad4: 0x00000000
0x0ad8: 0x00000000
0x0adc: 0x00000000
0x0ae0: 0x00000000
0x0ae4: 0x00000000
0x0ae8: 0x00000000
0x0aec: 0x00000000
0x0af0: 0x00000000
0x0af4: 0x00000000
0x0af8: 0x00000000
0x0afc: 0x00000000
0x0b00: 0x00000000
0x0b04: 0x00000000
0x0b08: 0x00000000
0x0b0c: 0x00000000
0x0b10: 0x00000000
0x0b14: 0x00000000
0x0b18: 0x00000000
0x0b1c: 0x00000000
0x0b20: 0x00000000
0x0b24: 0x00000000
0x0b28: 0x00000000
0x0b2c: 0x00000000
0x0b30: 0x00000000
0x0b34: 0x00000000
0x0b38: 0x00000000
0x0b3c: 0x00000000
0x0b40: 0x00000000
0x0b44: 0x00000000
0x0b48: 0x00000000
0x0b4c: 0x00000000
0x0b50: 0x00000000
0x0b54: 0x00000000
0x0b58: 0x00000000
0x0b5c: 0x00000000
0x0b60: 0x00000000
0x0b64: 0x00000000
0x0b68: 0x00000000
0x0b6c: 0x00000000
0x0b70: 0x00000000
0x0b74: 0x00000000
0x0b78: 0x00000000
0x0b7c: 0x00000000
0x0b80: 0x00000000
0x0b84: 0x00000000
0x0b88: 0x00000000
0x0b8c: 0x00000000
0x0b90: 0x00000000
0x0b94: 0x00000000
0x0b98: 0x00000000
0x0b9c: 0x00000000
0x0ba0: 0x00000000
0x0ba4: 0x00000000
0x0ba8: 0x00000000
0x0bac: 0x00000000
0x0bb0: 0x00000000
0x0bb4: 0x00000000
0x0bb8: 0x00000000
0x0bbc: 0x00000000
0x0bc0: 0x00000000
0x0bc4: 0x00000000
0x0bc8: 0x00000000
0x0bcc: 0x00000000
0x0bd0: 0x00000000
0x0bd4: 0x00000000
0x0bd8: 0x00000000
0x0bdc: 0x00000000
0x0be0: 0x00000000
0x0be4: 0x00000000
0x0be8: 0x00000000
0x0bec: 0x00000000
0x0bf0: 0x00000000
0x0bf4: 0x00000000
0x0bf8: 0x00000000
0x0bfc: 0x00000000
0x0c00: 0x00000000
0x0c04: 0x00000000
0x0c08: 0x00000000
0x0c0c: 0x00000000
0x0c10: 0x00000000
0x0c14: 0x00000000
0x0c18: 0x00000000
0x0c1c: 0x00000000
0x0c20: 0x00000000
0x0c24: 0x00000000
0x0c28: 0x00000000
0x0c2c: 0x00000000
0x0c30: 0x00000000
0x0c34: 0x00000000
0x0c38: 0x00000000
0x0c3c: 0x00000000
0x0c40: 0x00000000
0x0c44: 0x00000000
0x0c48: 0x00000000
0x0c4c: 0x00000000
0x0c50: 0x00000000
0x0c54: 0x00000000
0x0c58: 0x00000000
0x0c5c: 0x00000000
0x0c60: 0x00000000
0x0c64: 0x00000000
0x0c68: 0x00000000
0x0c6c: 0x00000000
0x0c70: 0x00000000
0x0c74: 0x00000000
0x0c78: 0x00000000
0x0c7c: 0x00000000
0x0c80: 0x00000000
0x0c84: 0x00000000
0x0c88: 0x00000000
0x0c8c: 0x00000000
0x0c90: 0x00000000
0x0c94: 0x00000000
0x0c98: 0x00000000
0x0c9c: 0x00000000
0x0ca0: 0x00000000
0x0ca4: 0x00000000
0x0ca8: 0x00000000
0x0cac: 0x00000000
0x0cb0: 0x00000000
0x0cb4: 0x00000000
0x0cb8: 0x00000000
0x0cbc: 0x00000000
0x0cc0: 0x00000000
0x0cc4: 0x00000000
0x0cc8: 0x00000000
0x0ccc: 0x00000000
0x0cd0: 0x00000000
0x0cd4: 0x00000000
0x0cd8: 0x00000000
0x0cdc: 0x00000000
0x0ce0: 0x00000000
0x0ce4: 0x00000000
0x0ce8: 0x00000000
0x0cec: 0x00000000
0x0cf0: 0x00000000
0x0cf4: 0x00000000
0x0cf8: 0x00000000
0x0cfc: 0x00000000
0x0d00: 0x00000000
0x0d04: 0x00000000
0x0d08: 0x00000000
0x0d0c: 0x00000000
0x0d10: 0x00000000
0x0d14: 0x00000000
0x0d18: 0x00000000
0x0d1c: 0x00000000
0x0d20: 0x00000000
0x0d24: 0x00000000
0x0d28: 0x00000000
0x0d2c: 0x00000000
0x0d30: 0x00000000
0x0d34: 0x00000000
0x0d38: 0x00000000
0x0d3c: 0x00000000
0x0d40: 0x00000000
0x0d44: 0x00000000
0x0d48: 0x00000000
0x0d4c: 0x00000000
0x0d50: 0x00000000
0x0d54: 0x00000000
0x0d58: 0x00000000
0x0d5c: 0x00000000
0x0d60: 0x00000000
0x0d64: 0x00000000
0x0d68: 0x00000000
0x0d6c: 0x00000000
0x0d70: 0x00000000
0x0d74: 0x00000000
0x0d78: 0x00000000
0x0d7c: 0x00000000
0x0d80: 0x00000000
0x0d84: 0x00000000
0x0d88: 0x00000000
0x0d8c: 0x00000000
0x0d90: 0x00000000
0x0d94: 0x00000000
0x0d98: 0x00000000
0x0d9c: 0x00000000
0x0da0: 0x00000000
0x0da4: 0x00000000
0x0da8: 0x00000000
0x0dac: 0x00000000
0x0db0: 0x00000000
0x0db4: 0x00000000
0x0db8: 0x00000000
0x0dbc: 0x00000000
0x0dc0: 0x00000000
0x0dc4: 0x00000000
0x0dc8: 0x00000000
0x0dcc: 0x00000000
0x0dd0: 0x00000000
0x0dd4: 0x00000000
0x0dd8: 0x00000000
0x0ddc: 0x00000000
0x0de0: 0x00000000
0x0de4: 0x00000000
0x0de8: 0x00000000
0x0dec: 0x00000000
0x0df0: 0x00000000
0x0df4: 0x00000000
0x0df8: 0x00000000
0x0dfc: 0x00000000
0x0e00: 0x00000000
0x0e04: 0x00000000
0x0e08: 0x00000000
0x0e0c: 0x00000000
0x0e10: 0x00000000
0x0e14: 0x00000000
0x0e18: 0x00000000
0x0e1c: 0x00000000
0x0e20: 0x00000000
0x0e24: 0x00000000
0x0e28: 0x00000000
0x0e2c: 0x00000000
0x0e30: 0x00000000
0x0e34: 0x00000000
0x0e38: 0x00000000
0x0e3c: 0x00000000
0x0e40: 0x00000000
0x0e44: 0x00000000
0x0e48: 0x00000000
0x0e4c: 0x00000000
0x0e50: 0x00000000
0x0e54: 0x00000000
0x0e58: 0x00000000
0x0e5c: 0x00000000
0x0e60: 0x00000000
0x0e64: 0x00000000
0x0e68: 0x00000000
0x0e6c: 0x00000000
0x0e70: 0x00000000
0x0e74: 0x00000000
0x0e78: 0x00000000
0x0e7c: 0x00000000
0x0e80: 0x00000000
0x0e84: 0x00000000
0x0e88: 0x00000000
0x0e8c: 0x00000000
0x0e90: 0x00000000
0x0e94: 0x00000000
0x0e98: 0x00000000
0x0e9c: 0x00000000
0x0ea0: 0x00000000
0x0ea4: 0x00000000
0x0ea8: 0x00000000
0x0eac: 0x00000000
0x0eb0: 0x00000000
0x0eb4: 0x00000000
0x0eb8: 0x00000000
0x0ebc: 0x00000000
0x0ec0: 0x00000000
0x0ec4: 0x00000000
0x0ec8: 0x00000000
0x0ecc: 0x00000000
0x0ed0: 0x00000000
0x0ed4: 0x00000000
0x0ed8: 0x00000000
0x0edc: 0x00000000
0x0ee0: 0x00000000
0x0ee4: 0x00000000
0x0ee8: 0x00000000
0x0eec: 0x00000000
0x0ef0: 0x00000000
0x0ef4: 0x00000000
0x0ef8: 0x00000000
0x0efc: 0x00000000
0x0f00: 0x00000000
0x0f04: 0x00000000
0x0f08: 0x00000000
0x0f0c: 0x00000000
0x0f10: 0x00000000
0x0f14: 0x00000000
0x0f18: 0x00000000
0x0f1c: 0x00000000
0x0f20: 0x00000000
0x0f24: 0x00000000
0x0f28: 0x00000000
0x0f2c: 0x00000000
0x0f30: 0x00000000
0x0f34: 0x00000000
0x0f38: 0x00000000
0x0f3c: 0x00000000
0x0f40: 0x00000000
0x0f44: 0x00000000
0x0f48: 0x00000000
0x0f4c: 0x00000000
0x0f50: 0x00000000
0x0f54: 0x00000000
0x0f58: 0x00000000
0x0f5c: 0x00000000
0x0f60: 0x00000000
0x0f64: 0x00000000
0x0f68: 0x00000000
0x0f6c: 0x00000000
0x0f70: 0x00000000
0x0f74: 0x00000000
0x0f78: 0x00000000
0x0f7c: 0x00000000
0x0f80: 0x00000000
0x0f84: 0x00000000
0x0f88: 0x00000000
0x0f8c: 0x00000000
0x0f90: 0x00000000
0x0f94: 0x00000000
0x0f98: 0x00000000
0x0f9c: 0x00000000
0x0fa0: 0x00000000
0x0fa4: 0x00000000
0x0fa8: 0x00000000
0x0fac: 0x00000000
0x0fb0: 0x00000000
0x0fb4: 0x00000000
0x0fb8: 0x00000000
0x0fbc: 0x00000000
0x0fc0: 0x00000000
0x0fc4: 0x00000000
0x0fc8: 0x00000000
0x0fcc: 0x00000000
0x0fd0: 0x00000000
0x0fd4: 0x00000000
0x0fd8: 0x00000000
0x0fdc: 0x00000000
0x0fe0: 0x00000000
0x0fe4: 0x00000000
0x0fe8: 0x00000000
0x0fec: 0x00000000
0x0ff0: 0x00000000
0x0ff4: 0x00000000
0x0ff8: 0x00000000
0x0ffc: 0x00000000
0x1000: 0x50e0de97
0x1004: 0xef3a0091
0x1008: 0xd8b0f68a
0x100c: 0x9df63d6c
0x1010: 0x488a6b5d
0x1014: 0x85bfe200
0x1018: 0x6eec3257
0x101c: 0x89d5c141
0x1020: 0xa5fdc96e
0x1024: 0xbcc19c7c
0x1028: 0xff8a61fc
0x102c: 0x7adb81d9
0x1030: 0xa452e561
0x1034: 0xede6d524
0x1038: 0xbc2433a3
0x103c: 0xa7571596
0x1040: 0x18a7afb7
0x1044: 0x26e6b65b
0x1048: 0x20a77112
0x104c: 0x2eb7a1c2
0x1050: 0xa0051e75
0x1054: 0xf6d5ed10
0x1058: 0x8824f3ea
0x105c: 0x30458add
0x1060: 0x6be2576b
0x1064: 0x5bdd4b10
0x1068: 0xa0b55bdf
0x106c: 0x5dc75f02
0x1070: 0xd236f76e
0x1074: 0x6b44fc0c
0x1078: 0x22ec6e7c
0x107c: 0x937b16b9
0x1080: 0x04346dd0
0x1084: 0xa7b9dbc0
0x1088: 0xf02f18bf
0x108c: 0x11cba753
0x1090: 0x0ffc6db6
0x1094: 0x4ccca56d
0x1098: 0x0ec4f73c
0x109c: 0xf27640ec
0x10a0: 0xc224767a
0x10a4: 0xcc688366
0x10a8: 0x2547449b
0x10ac: 0xbb3e3058
0x10b0: 0x4243dc83
0x10b4: 0xa5596310
0x10b8: 0x467c1e6d
0x10bc: 0xe7c6bb14
0x10c0: 0x3e0465dd
0x10c4: 0x565a04b1
0x10c8: 0xd016799f
0x10cc: 0xd499cd96
0x10d0: 0xc3ef58e7
0x10d4: 0x0f911c31
0x10d8: 0x481784d5
0x10dc: 0xbfc45a88
0x10e0: 0x31474aa3
0x10e4: 0x365b08c8
0x10e8: 0x53f094b4
0x10ec: 0x67ce18c0
0x10f0: 0x285001f7
0x10f4: 0x185f3d3a
0x10f8: 0x34d43f0a
0x10fc: 0x55b39521
0x1100: 0xd040d92b
0x1104: 0xf9e236ea
0x1108: 0x83aaaeac
0x110c: 0x2fe702dd
0x1110: 0x48c18fee
0x1114: 0x4ed3ada4
0x1118: 0xc0651a30
0x111c: 0xc9522870
0x1120: 0x912e212a
0x1124: 0x0c2045b0
0x1128: 0xa12211c1
0x112c: 0xeb279368
0x1130: 0xd974ccdc
0x1134: 0xf1bacaac
0x1138: 0x751982c3
0x113c: 0x854a0538
0x1140: 0xce94f686
0x1144: 0xeecdbb10
0x1148: 0x4cd87f50
0x114c: 0x1e8b0a52
0x1150: 0x08f67d9a
0x1154: 0xf5431b1d
0x1158: 0xac2d957e
0x115c: 0x99d01e85
0x1160: 0x4d237fc8
0x1164: 0xdc51c5e8
0x1168: 0x78993875
0x116c: 0xd736183c
0x1170: 0x7c2dd8be
0x1174: 0x9b111d99
0x1178: 0x5294e7ce
0x117c: 0xecdb1ea9
0x1180: 0x4324ff9d
0x1184: 0xf5ff0359
0x1188: 0x70a7b7d1
0x118c: 0xd1c3bc22
0x1190: 0xc3d411f3
0x1194: 0x37cc4c9c
0x1198: 0x4e94b489
0x119c: 0xc42d601e
0x11a0: 0x0a008bcc
0x11a4: 0xfeeda434
0x11a8: 0xac57c6af
0x11ac: 0x5b0f5f8b
0x11b0: 0x85717c48
0x11b4: 0x9ff58003
0x11b8: 0x6a51ee86
0x11bc: 0x38dee85e
0x11c0: 0x4b05ff83
0x11c4: 0xbf223520
0x11c8: 0x9abc1833
0x11cc: 0xab9f2834
0x11d0: 0x800c9ede
0x11d4: 0x7cafe4dc
0x11d8: 0x541fd9d7
0x11dc: 0x2caf9d29
0x11e0: 0x0173ffcc
0x11e4: 0x5cfc1ac6
0x11e8: 0x4f92eeee
0x11ec: 0x949d9538
0x11f0: 0x5c3e827e
0x11f4: 0xb9e4204c
0x11f8: 0x04454a6d
0x11fc: 0x15a84969
0x1200: 0x3396e4db
0x1204: 0x96bb0618
0x1208: 0x464ababf
0x120c: 0xbfb9c033
0x1210: 0x27fcdfde
0x1214: 0x532226b2
0x1218: 0x8541336c
0x121c: 0x42b74278
0x1220: 0x282866be
0x1224: 0x82960fe6
0x1228: 0x4a603d70
0x122c: 0x26db8c40
0x1230: 0xc210cd9f
0x1234: 0x1bda3246
0x1238: 0xcf01743e
0x123c: 0xa1d708ca
0x1240: 0x64356366
0x1244: 0x3499ae57
0x1248: 0x2ca3c237
0x124c: 0x8b39a051
0x1250: 0xe90cb5e7
0x1254: 0xae7405d0
0x1258: 0xa7c8ed0f
0x125c: 0xd996a001
0x1260: 0x87018103
0x1264: 0x8fd1b1b8
0x1268: 0xd3398d06
0x126c: 0xdb8d102a
0x1270: 0x4284d9d2
0x1274: 0x7afd9710
0x1278: 0xdc58f459
0x127c: 0x7b1f696f
0x1280: 0xb868ac73
0x1284: 0xcc8e237a
0x1288: 0x4990ca89
0x128c: 0x486e7908
0x1290: 0x73e83da9
0x1294: 0x3e390c68
0x1298: 0x2213a0a6
0x129c: 0xd8561188
0x12a0: 0x30c66ffc
0x12a4: 0x76f70475
0x12a8: 0x00912ccd
0x12ac: 0x715e1837
0x12b0: 0x083a1bb1
0x12b4: 0xdb73c785
0x12b8: 0x5310acec
0x12bc: 0xb634a49e
0x12c0: 0x99c06d4c
0x12c4: 0xf492842a
0x12c8: 0x6f128cab
0x12cc: 0xfaff393e
0x12d0: 0x6e9c3c3b
0x12d4: 0xffb3f05c
0x12d8: 0x870e2ed3
0x12dc: 0x55162cb3
0x12e0: 0x015777cf
0x12e4: 0x976009ca
0x12e8: 0x143eb066
0x12ec: 0x97f8cba2
0x12f0: 0xe6fc7f2e
0x12f4: 0x9d7bc5bd
0x12f8: 0xf8f1bfdf
0x12fc: 0x0dcd0160
0x1300: 0x0524689b
0x1304: 0x28bf19e4
0x1308: 0x1d736989
0x130c: 0x551e3b71
0x1310: 0x81f18d48
0x1314: 0xdf6b0a89
0x1318: 0x088cb783
0x131c: 0x7ed9cb3e
0x1320: 0xe51cfa1c
0x1324: 0xa362c0a1
0x1328: 0x11e1b56f
0x132c: 0x381e3d4b
0x1330: 0x2b7cff7e
0x1334: 0x7e2fa425
0x1338: 0x5622b979
0x133c: 0xc65ada84
0x1340: 0x3049c23d
0x1344: 0x535fd2c4
0x1348: 0xc3a49ab6
0x134c: 0x6dde3260
0x1350: 0x9ec4e7db
0x1354: 0xbf6b44d2
0x1358: 0x4614d0a0
0x135c: 0x5d3b4d08
0x1360: 0x1d1b3cd4
0x1364: 0xb2c19e70
0x1368: 0x083dd29f
0x136c: 0xfab97f49
0x1370: 0x6d2c7208
0x1374: 0x5f6765d9
0x1378: 0x58bbba94
0x137c: 0x56f512c7
0x1380: 0x8fbed947
0x1384: 0xf39b35e3
0x1388: 0xa605928d
0x138c: 0x03bf9830
0x1390: 0x6c97628e
0x1394: 0xa9b4004d
0x1398: 0x4aa8fff4
0x139c: 0xa9a089c6
0x13a0: 0xd71eff65
0x13a4: 0x7f1170c7
0x13a8: 0xe778e704
0x13ac: 0x66e414e3
0x13b0: 0x6c21be59
0x13b4: 0xa7ffa52a
0x13b8: 0x14212e7b
0x13bc: 0x063afb3f
0x13c0: 0xf758aa93
0x13c4: 0x71b7603c
0x13c8: 0x8d14e5c2
0x13cc: 0xaf776fdd
0x13d0: 0xcc5031d9
0x13d4: 0x46f13000
0x13d8: 0x1158d3bd
0x13dc: 0xd4f3e199
0x13e0: 0xc947f6eb
0x13e4: 0xc50b0e89
0x13e8: 0x2a909ac2
0x13ec: 0x370d044e
0x13f0: 0xda8ab710
0x13f4: 0x3554100e
0x13f8: 0x5e547a96
0x13fc: 0x320a1113
0x1400: 0xe0022c6d
0x1404: 0xc586bba9
0x1408: 0x9c48824d
0x140c: 0xe7bc144d
0x1410: 0xd189bb93
0x1414: 0x50263001
0x1418: 0xf648ceae
0x141c: 0x0873c9b5
0x1420: 0x4c513bef
0x1424: 0xffbcc6cd
0x1428: 0xae42a992
0x142c: 0x09be284f
0x1430: 0x08c6a8fd
0x1434: 0x997537f8
0x1438: 0x8accaad4
0x143c: 0x18a89f56
0x1440: 0x10b67d04
0x1444: 0xbdd61d4e
0x1448: 0x694c56fb
0x144c: 0x1e77c4e7
0x1450: 0xbf82c964
0x1454: 0xb5ef5f30
0x1458: 0x517a78a6
0x145c: 0x16f8aae5
0x1460: 0x3a7fd367
0x1464: 0xf4ddf0d6
0x1468: 0x62498b89
0x146c: 0xbfd7225d
0x1470: 0x7d8b5717
0x1474: 0x3fe4a544
0x1478: 0x87d9d1b7
0x147c: 0x961b6120
0x1480: 0xe0c38fd3
0x1484: 0xcfd12b8b
0x1488: 0x22033a1d
0x148c: 0x6ae2ae68
0x1490: 0xa9a05bc7
0x1494: 0x4ca982e9
0x1498: 0xf34f7da8
0x149c: 0xfec53001
0x14a0: 0x875a35dc
0x14a4: 0x76b36971
0x14a8: 0xb42310d6
0x14ac: 0xf10ed060
0x14b0: 0x4037e6e2
0x14b4: 0x46159884
0x14b8: 0x5774fa66
0x14bc: 0xdbca12c5
0x14c0: 0x14e0fab4
0x14c4: 0xdeac6e5e
0x14c8: 0x1442b54f
0x14cc: 0xf42860a0
0x14d0: 0x5108b3dc
0x14d4: 0x1fa97442
0x14d8: 0x88149ff6
0x14dc: 0xebd99c94
0x14e0: 0xc713f9b3
0x14e4: 0xbeb12dab
0x14e8: 0x12fc203e
0x14ec: 0xb5a20e3d
0x14f0: 0xd163ba72
0x14f4: 0x4e55f9b8
0x14f8: 0x31457ba2
0x14fc: 0x4b668119
0x1500: 0xc6b1b777
0x1504: 0xafe3eab8
0x1508: 0xce62a363
0x150c: 0xef0cb506
0x1510: 0xd6fe6fcf
0x1514: 0x6cfa9633
0x1518: 0x980cb59b
0x151c: 0xcbf0659d
0x1520: 0x3800f7ff
0x1524: 0x81e96d8a
0x1528: 0x04959c1a
0x152c: 0xebfe6621
0x1530: 0x093056fe
0x1534: 0x7e658078
0x1538: 0x14dc64f8
0x153c: 0xc9e1e13a
0x1540: 0x0c247693
0x1544: 0x69ffed50
0x1548: 0xc3369d9d
0x154c: 0xa8e50786
0x1550: 0x25cf495f
0x1554: 0x998b641c
0x1558: 0x21f05e32
0x155c: 0xf3fb0498
0x1560: 0x0dacbd2f
0x1564: 0x63382d43
0x1568: 0x1222ef4a
0x156c: 0x6bed32c4
0x1570: 0x66a36179
0x1574: 0xcec98f37
0x1578: 0x9f9aa06e
0x157c: 0x1b0e5c03
0x1580: 0x1d3d0bdd
0x1584: 0xa0233333
0x1588: 0x4a863f86
0x158c: 0xc9896245
0x1590: 0x1ca09b1f
0x1594: 0xc9892316
0x1598: 0x20d8d2cb
0x159c: 0xc8eb7907
0x15a0: 0x5ba0b3ee
0x15a4: 0xd15b84aa
0x15a8: 0x209bcb60
0x15ac: 0xfce9e022
0x15b0: 0x089dda0e
0x15b4: 0x3c4b4c61
0x15b8: 0xeb650d7e
0x15bc: 0xda355cc9
0x15c0: 0x38f82dec
0x15c4: 0x54eb956f
0x15c8: 0x019773b7
0x15cc: 0xe24bd865
0x15d0: 0x548bf16b
0x15d4: 0x9adf67e4
0x15d8: 0x01a4fcf0
0x15dc: 0x88bbfab0
0x15e0: 0x580fca6c
0x15e4: 0xf9e2d4d0
0x15e8: 0xdb42c877
0x15ec: 0x7da42f01
0x15f0: 0xade01f1d
0x15f4: 0x5b4f2188
0x15f8: 0x206899ec
0x15fc: 0x87d802fe
0x1600: 0x00000000
0x1604: 0x00000000
0x1608: 0x00000000
0x160c: 0x00000000
0x1610: 0x00000000
0x1614: 0x00000000
0x1618: 0x00000000
0x161c: 0x00000000
0x1620: 0x00000000
0x1624: 0x00000000
0x1628: 0x00000000
0x162c: 0x00000000
0x1630: 0x00000000
0x1634: 0x00000000
0x1638: 0x00000000
0x163c: 0x00000000
0x1640: 0x00000000
0x1644: 0x00000000
0x1648: 0x00000000
0x164c: 0x00000000
0x1650: 0x00000000
0x1654: 0x00000000
0x1658: 0x00000000
0x165c: 0x00000000
0x1660: 0x00000000
0x1664: 0x00000000
0x1668: 0x00000000
0x166c: 0x00000000
0x1670: 0x00000000
0x1674: 0x00000000
0x1678: 0x00000000
0x167c: 0x00000000
0x1680: 0x00000000
0x1684: 0x00000000
0x1688: 0x00000000
0x168c: 0x00000000
0x1690: 0x00000000
0x1694: 0x00000000
0x1698: 0x00000000
0x169c: 0x00000000
0x16a0: 0x00000000
0x16a4: 0x00000000
0x16a8: 0x00000000
0x16ac: 0x00000000
0x16b0: 0x00000000
0x16b4: 0x00000000
0x16b8: 0x00000000
0x16bc: 0x00000000
0x16c0: 0x00000000
0x16c4: 0x00000000
0x16c8: 0x00000000
0x16cc: 0x00000000
0x16d0: 0x00000000
0x16d4: 0x00000000
0x16d8: 0x00000000
0x16dc: 0x00000000
0x16e0: 0x00000000
0x16e4: 0x00000000
0x16e8: 0x00000000
0x16ec: 0x00000000
0x16f0: 0x00000000
0x16f4: 0x00000000
0x16f8: 0x00000000
0x16fc: 0x00000000
0x1700: 0x00000000
0x1704: 0x00000000
0x1708: 0x00000000
0x170c: 0x00000000
0x1710: 0x00000000
0x1714: 0x00000000
0x1718: 0x00000000
0x171c: 0x00000000
0x1720: 0x00000000
0x1724: 0x00000000
0x1728: 0x00000000
0x172c: 0x00000000
0x1730: 0x00000000
0x1734: 0x00000000
0x1738: 0x00000000
0x173c: 0x00000000
0x1740: 0x00000000
0x1744: 0x00000000
0x1748: 0x00000000
0x174c: 0x00000000
0x1750: 0x00000000
0x1754: 0x00000000
0x1758: 0x00000000
0x175c: 0x00000000
0x1760: 0x00000000
0x1764: 0x00000000
0x1768: 0x00000000
0x176c: 0x00000000
0x1770: 0x00000000
0x1774: 0x00000000
0x1778: 0x00000000
0x177c: 0x00000000
0x1780: 0x00000000
0x1784: 0x00000000
0x1788: 0x00000000
0x178c: 0x00000000
0x1790: 0x00000000
0x1794: 0x00000000
0x1798: 0x00000000
0x179c: 0x00000000
0x17a0: 0x00000000
0x17a4: 0x00000000
0x17a8: 0x00000000
0x17ac: 0x00000000
0x17b0: 0x00000000
0x17b4: 0x00000000
0x17b8: 0x00000000
0x17bc: 0x00000000
0x17c0: 0x00000000
0x17c4: 0x00000000
0x17c8: 0x00000000
0x17cc: 0x00000000
0x17d0: 0x00000000
0x17d4: 0x00000000
0x17d8: 0x00000000
0x17dc: 0x00000000
0x17e0: 0x00000000
0x17e4: 0x00000000
0x17e8: 0x00000000
0x17ec: 0x00000000
0x17f0: 0x00000000
0x17f4: 0x00000000
0x17f8: 0x00000000
0x17fc: 0x00000000
0x1800: 0x00000000
0x1804: 0x00000000
0x1808: 0x00000000
0x180c: 0x00000000
0x1810: 0x00000000
0x1814: 0x00000000
0x1818: 0x00000000
0x181c: 0x00000000
0x1820: 0x00000000
0x1824: 0x00000000
0x1828: 0x00000000
0x182c: 0x00000000
0x1830: 0x00000000
0x1834: 0x00000000
0x1838: 0x00000000
0x183c: 0x00000000
0x1840: 0x00000000
0x1844: 0x00000000
0x1848: 0x00000000
0x184c: 0x00000000
0x1850: 0x00000000
0x1854: 0x00000000
0x1858: 0x00000000
0x185c: 0x00000000
0x1860: 0x00000000
0x1864: 0x00000000
0x1868: 0x00000000
0x186c: 0x00000000
0x1870: 0x00000000
0x1874: 0x00000000
0x1878: 0x00000000
0x187c: 0x00000000
0x1880: 0x00000000
0x1884: 0x00000000
0x1888: 0x00000000
0x188c: 0x00000000
0x1890: 0x00000000
0x1894: 0x00000000
0x1898: 0x00000000
0x189c: 0x00000000
0x18a0: 0x00000000
0x18a4: 0x00000000
0x18a8: 0x00000000
0x18ac: 0x00000000
0x18b0: 0x00000000
0x18b4: 0x00000000
0x18b8: 0x00000000
0x18bc: 0x00000000
0x18c0: 0x00000000
0x18c4: 0x00000000
0x18c8: 0x00000000
0x18cc: 0x00000000
0x18d0: 0x00000000
0x18d4: 0x00000000
0x18d8: 0x00000000
0x18dc: 0x00000000
0x18e0: 0x00000000
0x18e4: 0x00000000
0x18e8: 0x00000000
0x18ec: 0x00000000
0x18f0: 0x00000000
0x18f4: 0x00000000
0x18f8: 0x00000000
0x18fc: 0x00000000
0x1900: 0x00000000
0x1904: 0x00000000
0x1908: 0x00000000
0x190c: 0x00000000
0x1910: 0x00000000
0x1914: 0x00000000
0x1918: 0x00000000
0x191c: 0x00000000
0x1920: 0x00000000
0x1924: 0x00000000
0x1928: 0x00000000
0x192c: 0x00000000
0x1930: 0x00000000
0x1934: 0x00000000
0x1938: 0x00000000
0x193c: 0x00000000
0x1940: 0x00000000
0x1944: 0x00000000
0x1948: 0x00000000
0x194c: 0x00000000
0x1950: 0x00000000
0x1954: 0x00000000
0x1958: 0x00000000
0x195c: 0x00000000
0x1960: 0x00000000
0x1964: 0x00000000
0x1968: 0x00000000
0x196c: 0x00000000
0x1970: 0x00000000
0x1974: 0x00000000
0x1978: 0x00000000
0x197c: 0x00000000
0x1980: 0x00000000
0x1984: 0x00000000
0x1988: 0x00000000
0x198c: 0x00000000
0x1990: 0x00000000
0x1994: 0x00000000
0x1998: 0x00000000
0x199c: 0x00000000
0x19a0: 0x00000000
0x19a4: 0x00000000
0x19a8: 0x00000000
0x19ac: 0x00000000
0x19b0: 0x00000000
0x19b4: 0x00000000
0x19b8: 0x00000000
0x19bc: 0x00000000
0x19c0: 0x00000000
0x19c4: 0x00000000
0x19c8: 0x00000000
0x19cc: 0x00000000
0x19d0: 0x00000000
0x19d4: 0x00000000
0x19d8: 0x00000000
0x19dc: 0x00000000
0x19e0: 0x00000000
0x19e4: 0x00000000
0x19e8: 0x00000000
0x19ec: 0x00000000
0x19f0: 0x00000000
0x19f4: 0x00000000
0x19f8: 0x00000000
0x19fc: 0x00000000
0x1a00: 0x00000000
0x1a04: 0x00000000
0x1a08: 0x00000000
0x1a0c: 0x00000000
0x1a10: 0x00000000
0x1a14: 0x00000000
0x1a18: 0x00000000
0x1a1c: 0x00000000
0x1a20: 0x00000000
0x1a24: 0x00000000
0x1a28: 0x00000000
0x1a2c: 0x00000000
0x1a30: 0x00000000
0x1a34: 0x00000000
0x1a38: 0x00000000
0x1a3c: 0x00000000
0x1a40: 0x00000000
0x1a44: 0x00000000
0x1a48: 0x00000000
0x1a4c: 0x00000000
0x1a50: 0x00000000
0x1a54: 0x00000000
0x1a58: 0x00000000
0x1a5c: 0x00000000
0x1a60: 0x00000000
0x1a64: 0x00000000
0x1a68: 0x00000000
0x1a6c: 0x00000000
0x1a70: 0x00000000
0x1a74: 0x00000000
0x1a78: 0x00000000
0x1a7c: 0x00000000
0x1a80: 0x00000000
0x1a84: 0x00000000
0x1a88: 0x00000000
0x1a8c: 0x00000000
0x1a90: 0x00000000
0x1a94: 0x00000000
0x1a98: 0x00000000
0x1a9c: 0x00000000
0x1aa0: 0x00000000
0x1aa4: 0x00000000
0x1aa8: 0x00000000
0x1aac: 0x00000000
0x1ab0: 0x00000000
0x1ab4: 0x00000000
0x1ab8: 0x00000000
0x1abc: 0x00000000
0x1ac0: 0x00000000
0x1ac4: 0x00000000
0x1ac8: 0x00000000
0x1acc: 0x00000000
0x1ad0: 0x00000000
0x1ad4: 0x00000000
0x1ad8: 0x00000000
0x1adc: 0x00000000
0x1ae0: 0x00000000
0x1ae4: 0x00000000
0x1ae8: 0x00000000
0x1aec: 0x00000000
0x1af0: 0x00000000
0x1af4: 0x00000000
0x1af8: 0x00000000
0x1afc: 0x00000000
0x1b00: 0x00000000
0x1b04: 0x00000000
0x1b08: 0x00000000
0x1b0c: 0x00000000
0x1b10: 0x00000000
0x1b14: 0x00000000
0x1b18: 0x00000000
0x1b1c: 0x00000000
0x1b20: 0x00000000
0x1b24: 0x00000000
0x1b28: 0x00000000
0x1b2c: 0x00000000
0x1b30: 0x00000000
0x1b34: 0x00000000
0x1b38: 0x00000000
0x1b3c: 0x00000000
0x1b40: 0x00000000
0x1b44: 0x00000000
0x1b48: 0x00000000
0x1b4c: 0x00000000
0x1b50: 0x00000000
0x1b54: 0x00000000
0x1b58: 0x00000000
0x1b5c: 0x00000000
0x1b60: 0x00000000
0x1b64: 0x00000000
0x1b68: 0x00000000
0x1b6c: 0x00000000
0x1b70: 0x00000000
0x1b74: 0x00000000
0x1b78: 0x00000000
0x1b7c: 0x00000000
0x1b80: 0x00000000
0x1b84: 0x00000000
0x1b88: 0x00000000
0x1b8c: 0x00000000
0x1b90: 0x00000000
0x1b94: 0x00000000
0x1b98: 0x00000000
0x1b9c: 0x00000000
0x1ba0: 0x00000000
0x1ba4: 0x00000000
0x1ba8: 0x00000000
0x1bac: 0x00000000
0x1bb0: 0x00000000
0x1bb4: 0x00000000
0x1bb8: 0x00000000
0x1bbc: 0x00000000
0x1bc0: 0x00000000
0x1bc4: 0x00000000
0x1bc8: 0x00000000
0x1bcc: 0x00000000
0x1bd0: 0x00000000
0x1bd4: 0x00000000
0x1bd8: 0x00000000
0x1bdc: 0x00000000
0x1be0: 0x00000000
0x1be4: 0x00000000
0x1be8: 0x00000000
0x1bec: 0x00000000
0x1bf0: 0x00000000
0x1bf4: 0x00000000
0x1bf8: 0x00000000
0x1bfc: 0x00000000
0x1c00: 0x00000000
0x1c04: 0x00000000
0x1c08: 0x00000000
0x1c0c: 0x00000000
0x1c10: 0x00000000
0x1c14: 0x00000000
0x1c18: 0x00000000
0x1c1c: 0x00000000
0x1c20: 0x00000000
0x1c24: 0x00000000
0x1c28: 0x00000000
0x1c2c: 0x00000000
0x1c30: 0x00000000
0x1c34: 0x00000000
0x1c38: 0x00000000
0x1c3c: 0x00000000
0x1c40: 0x00000000
0x1c44: 0x00000000
0x1c48: 0x00000000
0x1c4c: 0x00000000
0x1c50: 0x00000000
0x1c54: 0x00000000
0x1c58: 0x00000000
0x1c5c: 0x00000000
0x1c60: 0x00000000
0x1c64: 0x00000000
0x1c68: 0x00000000
0x1c6c: 0x00000000
0x1c70: 0x00000000
0x1c74: 0x00000000
0x1c78: 0x00000000
0x1c7c: 0x00000000
0x1c80: 0x00000000
0x1c84: 0x00000000
0x1c88: 0x00000000
0x1c8c: 0x00000000
0x1c90: 0x00000000
0x1c94: 0x00000000
0x1c98: 0x00000000
0x1c9c: 0x00000000
0x1ca0: 0x00000000
0x1ca4: 0x00000000
0x1ca8: 0x00000000
0x1cac: 0x00000000
0x1cb0: 0x00000000
0x1cb4: 0x00000000
0x1cb8: 0x00000000
0x1cbc: 0x00000000
0x1cc0: 0x00000000
0x1cc4: 0x00000000
0x1cc8: 0x00000000
0x1ccc: 0x00000000
0x1cd0: 0x00000000
0x1cd4: 0x00000000
0x1cd8: 0x00000000
0x1cdc: 0x00000000
0x1ce0: 0x00000000
0x1ce4: 0x00000000
0x1ce8: 0x00000000
0x1cec: 0x00000000
0x1cf0: 0x00000000
0x1cf4: 0x00000000
0x1cf8: 0x00000000
0x1cfc: 0x00000000
0x1d00: 0x00000000
0x1d04: 0x00000000
0x1d08: 0x00000000
0x1d0c: 0x00000000
0x1d10: 0x00000000
0x1d14: 0x00000000
0x1d18: 0x00000000
0x1d1c: 0x00000000
0x1d20: 0x00000000
0x1d24: 0x00000000
0x1d28: 0x00000000
0x1d2c: 0x00000000
0x1d30: 0x00000000
0x1d34: 0x00000000
0x1d38: 0x00000000
0x1d3c: 0x00000000
0x1d40: 0x00000000
0x1d44: 0x00000000
0x1d48: 0x00000000
0x1d4c: 0x00000000
0x1d50: 0x00000000
0x1d54: 0x00000000
0x1d58: 0x00000000
0x1d5c: 0x00000000
0x1d60: 0x00000000
0x1d64: 0x00000000
0x1d68: 0x00000000
0x1d6c: 0x00000000
0x1d70: 0x00000000
0x1d74: 0x00000000
0x1d78: 0x00000000
0x1d7c: 0x00000000
0x1d80: 0x00000000
0x1d84: 0x00000000
0x1d88: 0x00000000
0x1d8c: 0x00000000
0x1d90: 0x00000000
0x1d94: 0x00000000
0x1d98: 0x00000000
0x1d9c: 0x00000000
0x1da0: 0x00000000
0x1da4: 0x00000000
0x1da8: 0x00000000
0x1dac: 0x00000000
0x1db0: 0x00000000
0x1db4: 0x00000000
0x1db8: 0x00000000
0x1dbc: 0x00000000
0x1dc0: 0x00000000
0x1dc4: 0x00000000
0x1dc8: 0x00000000
0x1dcc: 0x00000000
0x1dd0: 0x00000000
0x1dd4: 0x00000000
0x1dd8: 0x00000000
0x1ddc: 0x00000000
0x1de0: 0x00000000
0x1de4: 0x00000000
0x1de8: 0x00000000
0x1dec: 0x00000000
0x1df0: 0x00000000
0x1df4: 0x00000000
0x1df8: 0x00000000
0x1dfc: 0x00000000
0x1e00: 0x00000000
0x1e04: 0x00000000
0x1e08: 0x00000000
0x1e0c: 0x00000000
0x1e10: 0x00000000
0x1e14: 0x00000000
0x1e18: 0x00000000
0x1e1c: 0x00000000
0x1e20: 0x00000000
0x1e24: 0x00000000
0x1e28: 0x00000000
0x1e2c: 0x00000000
0x1e30: 0x00000000
0x1e34: 0x00000000
0x1e38: 0x00000000
0x1e3c: 0x00000000
0x1e40: 0x00000000
0x1e44: 0x00000000
0x1e48: 0x00000000
0x1e4c: 0x00000000
0x1e50: 0x00000000
0x1e54: 0x00000000
0x1e58: 0x00000000
0x1e5c: 0x00000000
0x1e60: 0x00000000
0x1e64: 0x00000000
0x1e68: 0x00000000
0x1e6c: 0x00000000
0x1e70: 0x00000000
0x1e74: 0x00000000
0x1e78: 0x00000000
0x1e7c: 0x00000000
0x1e80: 0x00000000
0x1e84: 0x00000000
0x1e88: 0x00000000
0x1e8c: 0x00000000
0x1e90: 0x00000000
0x1e94: 0x00000000
0x1e98: 0x00000000
0x1e9c: 0x00000000
0x1ea0: 0x00000000
0x1ea4: 0x00000000
0x1ea8: 0x00000000
0x1eac: 0x00000000
0x1eb0: 0x00000000
0x1eb4: 0x00000000
0x1eb8: 0x00000000
0x1ebc: 0x00000000
0x1ec0: 0x00000000
0x1ec4: 0x00000000
0x1ec8: 0x00000000
0x1ecc: 0x00000000
0x1ed0: 0x00000000
0x1ed4: 0x00000000
0x1ed8: 0x00000000
0x1edc: 0x00000000
0x1ee0: 0x00000000
0x1ee4: 0x00000000
0x1ee8: 0x00000000
0x1eec: 0x00000000
0x1ef0: 0x00000000
0x1ef4: 0x00000000
0x1ef8: 0x00000000
0x1efc: 0x00000000
0x1f00: 0x00000000
0x1f04: 0x00000000
0x1f08: 0x00000000
0x1f0c: 0x00000000
0x1f10: 0x00000000
0x1f14: 0x00000000
0x1f18: 0x00000000
0x1f1c: 0x00000000
0x1f20: 0x00000000
0x1f24: 0x00000000
0x1f28: 0x00000000
0x1f2c: 0x00000000
0x1f30: 0x00000000
0x1f34: 0x00000000
0x1f38: 0x00000000
0x1f3c: 0x00000000
0x1f40: 0x00000000
0x1f44: 0x00000000
0x1f48: 0x00000000
0x1f4c: 0x00000000
0x1f50: 0x00000000
0x1f54: 0x00000000
0x1f58: 0x00000000
0x1f5c: 0x00000000
0x1f60: 0x00000000
0x1f64: 0x00000000
0x1f68: 0x00000000
0x1f6c: 0x00000000
0x1f70: 0x00000000
0x1f74: 0x00000000
0x1f78: 0x00000000
0x1f7c: 0x00000000
0x1f80: 0x00000000
0x1f84: 0x00000000
0x1f88: 0x00000000
0x1f8c: 0x00000000
0x1f90: 0x00000000
0x1f94: 0x00000000
0x1f98: 0x00000000
0x1f9c: 0x00000000
0x1fa0: 0x00000000
0x1fa4: 0x00000000
0x1fa8: 0x00000000
0x1fac: 0x00000000
0x1fb0: 0x00000000
0x1fb4: 0x00000000
0x1fb8: 0x00000000
0x1fbc: 0x00000000
0x1fc0: 0x00000000
0x1fc4: 0x00000000
0x1fc8: 0x00000000
0x1fcc: 0x00000000
0x1fd0: 0x00000000
0x1fd4: 0x00000000
0x1fd8: 0x00000000
0x1fdc: 0x00000000
0x1fe0: 0x00000000
0x1fe4: 0x00000000
0x1fe8: 0x00000000
0x1fec: 0x00000000
0x1ff0: 0x00000000
0x1ff4: 0x00000000
0x1ff8: 0x00000000
0x1ffc: 0x00000000
离线
司徒目前整合的差不多了,按鍵、顯示、聲音都可以運作,細節部份,司徒還要在測試一下,不過,由於缺少屏的相關控制以及同步,閃屏蠻嚴重的,在沒有TE腳位的協助,司徒將屏的輸出調整到60Hz,不過,從下圖可以看出,屏的掃描跟60Hz差距頗大,司徒需要在想一下如何調整到比較好的狀態
目前司徒整合Jutleys PocketGo v1.3.3整合包,畫面算是美觀,不過缺少中文化支援,這部份司徒還需要想一下
紀錄一下目前PCSX鐵拳3,在沒有超頻的狀態下,關閉Frameskip,大約跑在39 fps
司徒預計將系統狀態調整到比較可玩的狀態下才發布,需要一些時間
离线
司徒大佬动作好快,期待trimui~
离线
FC100S与FC3000是一个内核吗
离线
哈~我突然想起之前我的discord有一個ID跟你的名字好像喔~不知道是否是那個經銷商,如果是的話,那我建議你去跟廠商建議改進會比較好~如果你可以拿到內核源碼,那我想我的速度會飛快,就像飛龍在天一樣~哈
呃 discord我只有在funkey那边有过发言,应该不是我,trimui厂商基本处于半放弃状态,我倒是问过他们能否提供内核,还没收到答复
离线
@sunxiang
恩@fanelwin
了解,不好意思誤會了~敢問閣下為何對TRIMUI掌機這麼熱愛?
就是因为喜欢他的外观而且非常轻薄,夏天放裤袋里也不会特别突出,miyoo、小龙王这方面就不行了
离线
為了感謝芒果兄弟的慘烈付出,司徒決定也幫FC3000超渡一下,於是,文章繼續往下走
目前兩顆電阻都是25K,因此,電壓:0.6 * (25K / 25K) + 0.6 = 1.2V
解焊
司徒換上,如下電阻,電壓:0.6 * (442K / 160K) + 0.6 = 2.2575V
量測後,竟然差了0.2V
CPU=672MHz (39 fps, CPU=98%),PS1 鐵拳3 (關閉FramesSkip)
CPU=1500MHz (50 fps, CPU=97%),PS1 鐵拳3 (關閉FramesSkip),相較於672MHz,提昇11 fps,不過3D遊戲,沒有參考價值
CPU=672MHz (40 fps, CPU=96%),PS1 機器人大戰F (關閉FramesSkip)
CPU=1500MHz (56 fps, CPU=94%),PS1 機器人大戰F (關閉FramesSkip),相較於672MHz,提昇16 fps,具有參考價值
結論:
2.05V下,目前司徒最高只能讓FC3000超頻到1536MHz,機器不會燙,對於PS1 2D遊戲明顯提昇,相信對於其它模擬器,也是會有相當提昇
离线
我补充个trimui官方镜像相关gpio分配信息
GPIOs 0-191, platform/pio, pio:
gpio-0 (GPIO Key Up ) in hi
gpio-96 (GPIO Key L ) in hi
gpio-97 (GPIO Key R ) in hi
gpio-98 (GPIO Key X ) in hi
gpio-108 (GPIO Key B ) in hi
gpio-109 (GPIO Key START ) in hi
gpio-110 (GPIO Key SELECT ) in hi
gpio-111 (alpu_scl ) out hi
gpio-112 (alpu_sda ) out hi
gpio-113 (GPIO Key A ) in hi
gpio-115 (GPIO Key Y ) in hi
gpio-129 (lcd_reset ) out hi
gpio-130 (GPIO Key Down ) in hi
gpio-131 (sdc0 cd ) in hi
gpio-132 (GPIO Key Left ) in hi
gpio-134 (? ) in hi
gpio-135 (otg_det ) in lo
gpio-136 (GPIO Key Right ) in hi
gpio-137 (otg_id ) in hi
gpio-139 (GPIO Key MENU ) in hi
platform/1c21000.pwm, 2 PWM devices
pwm-0 ((null) ):
pwm-1 (lcd ): requested enabled
Requested pin control handlers their pinmux maps:
device: pio current state: none
device: twi0 current state: default
state: default
type: MUX_GROUP controller pio group: PD12 (24) function: twi0 (19)
type: CONFIGS_GROUP controller pio group PD12 (24) 00000000 00000000 00000000
type: MUX_GROUP controller pio group: PD0 (12) function: twi0 (19)
type: CONFIGS_GROUP controller pio group PD0 (12) 00000000 00000000 00000000
state: sleep
type: MUX_GROUP controller pio group: PD12 (24) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PD12 (24) 00140009 00000005
type: MUX_GROUP controller pio group: PD0 (12) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PD0 (12) 00140009 00000005
device: uart1 current state: default
state: default
type: MUX_GROUP controller pio group: PA2 (2) function: uart1 (4)
type: CONFIGS_GROUP controller pio group PA2 (2) 00000003 00000000 00000000
type: MUX_GROUP controller pio group: PA3 (3) function: uart1 (4)
type: CONFIGS_GROUP controller pio group PA3 (3) 00000003 00000000 00000000
state: sleep
type: MUX_GROUP controller pio group: PA3 (3) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PA3 (3) 00140009 00000003
type: MUX_GROUP controller pio group: PA2 (2) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PA2 (2) 00140009 00000003
device: spinand current state: default
state: default
type: MUX_GROUP controller pio group: PC1 (9) function: spi0 (14)
type: CONFIGS_GROUP controller pio group PC1 (9) 00000003 00000000 00000000
type: MUX_GROUP controller pio group: PC0 (8) function: spi0 (14)
type: CONFIGS_GROUP controller pio group PC0 (8) 00000000 00000000 00000000
type: MUX_GROUP controller pio group: PC3 (11) function: spi0 (14)
type: CONFIGS_GROUP controller pio group PC3 (11) 00000000 00000000 00000000
type: MUX_GROUP controller pio group: PC2 (10) function: spi0 (14)
type: CONFIGS_GROUP controller pio group PC2 (10) 00000000 00000000 00000000
state: sleep
type: MUX_GROUP controller pio group: PC0 (8) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PC0 (8) 00140009 00000005
type: MUX_GROUP controller pio group: PC1 (9) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PC1 (9) 00140009 00000005
type: MUX_GROUP controller pio group: PC2 (10) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PC2 (10) 00140009 00000005
type: MUX_GROUP controller pio group: PC3 (11) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PC3 (11) 00140009 00000005
device: sdc0 current state: sleep
state: default
type: MUX_GROUP controller pio group: PF0 (47) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF0 (47) 00280009 00000003 00000000
type: MUX_GROUP controller pio group: PF1 (48) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF1 (48) 00280009 00000003 00000000
type: MUX_GROUP controller pio group: PF2 (49) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF2 (49) 00280009 00000003 00000000
type: MUX_GROUP controller pio group: PF3 (50) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF3 (50) 00280009 00000003 00000000
type: MUX_GROUP controller pio group: PF4 (51) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF4 (51) 00280009 00000003 00000000
type: MUX_GROUP controller pio group: PF5 (52) function: sdc0 (29)
type: CONFIGS_GROUP controller pio group PF5 (52) 00280009 00000003 00000000
state: sleep
type: MUX_GROUP controller pio group: PF0 (47) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF0 (47) 00140009 00000003
type: MUX_GROUP controller pio group: PF1 (48) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF1 (48) 00140009 00000003
type: MUX_GROUP controller pio group: PF2 (49) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF2 (49) 00140009 00000003
type: MUX_GROUP controller pio group: PF3 (50) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF3 (50) 00140009 00000003
type: MUX_GROUP controller pio group: PF4 (51) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF4 (51) 00140009 00000003
type: MUX_GROUP controller pio group: PF5 (52) function: io_disabled (6)
type: CONFIGS_GROUP controller pio group PF5 (52) 00140009 00000003
device: lcd0 current state: active
state: active
type: MUX_GROUP controller pio group: PD3 (15) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD3 (15) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD4 (16) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD4 (16) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD5 (17) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD5 (17) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD6 (18) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD6 (18) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD7 (19) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD7 (19) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD8 (20) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD8 (20) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD18 (30) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD18 (30) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD20 (32) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD20 (32) 00000005 00000000 00000000
type: MUX_GROUP controller pio group: PD21 (33) function: lcd0 (18)
type: CONFIGS_GROUP controller pio group PD21 (33) 00000005 00000000 00000000
Pinctrl maps:
device twi0
state default
type MUX_GROUP (2)
controlling device pio
group PD12
function twi0
device twi0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PD12
config 00000000
config 00000000
config 00000000
device twi0
state default
type MUX_GROUP (2)
controlling device pio
group PD0
function twi0
device twi0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PD0
config 00000000
config 00000000
config 00000000
device twi0
state sleep
type MUX_GROUP (2)
controlling device pio
group PD12
function io_disabled
device twi0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PD12
config 00140009
config 00000005
device twi0
state sleep
type MUX_GROUP (2)
controlling device pio
group PD0
function io_disabled
device twi0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PD0
config 00140009
config 00000005
device uart1
state default
type MUX_GROUP (2)
controlling device pio
group PA2
function uart1
device uart1
state default
type CONFIGS_GROUP (4)
controlling device pio
group PA2
config 00000003
config 00000000
config 00000000
device uart1
state default
type MUX_GROUP (2)
controlling device pio
group PA3
function uart1
device uart1
state default
type CONFIGS_GROUP (4)
controlling device pio
group PA3
config 00000003
config 00000000
config 00000000
device uart1
state sleep
type MUX_GROUP (2)
controlling device pio
group PA3
function io_disabled
device uart1
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PA3
config 00140009
config 00000003
device uart1
state sleep
type MUX_GROUP (2)
controlling device pio
group PA2
function io_disabled
device uart1
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PA2
config 00140009
config 00000003
device spinand
state default
type MUX_GROUP (2)
controlling device pio
group PC1
function spi0
device spinand
state default
type CONFIGS_GROUP (4)
controlling device pio
group PC1
config 00000003
config 00000000
config 00000000
device spinand
state default
type MUX_GROUP (2)
controlling device pio
group PC0
function spi0
device spinand
state default
type CONFIGS_GROUP (4)
controlling device pio
group PC0
config 00000000
config 00000000
config 00000000
device spinand
state default
type MUX_GROUP (2)
controlling device pio
group PC3
function spi0
device spinand
state default
type CONFIGS_GROUP (4)
controlling device pio
group PC3
config 00000000
config 00000000
config 00000000
device spinand
state default
type MUX_GROUP (2)
controlling device pio
group PC2
function spi0
device spinand
state default
type CONFIGS_GROUP (4)
controlling device pio
group PC2
config 00000000
config 00000000
config 00000000
device spinand
state sleep
type MUX_GROUP (2)
controlling device pio
group PC0
function io_disabled
device spinand
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PC0
config 00140009
config 00000005
device spinand
state sleep
type MUX_GROUP (2)
controlling device pio
group PC1
function io_disabled
device spinand
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PC1
config 00140009
config 00000005
device spinand
state sleep
type MUX_GROUP (2)
controlling device pio
group PC2
function io_disabled
device spinand
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PC2
config 00140009
config 00000005
device spinand
state sleep
type MUX_GROUP (2)
controlling device pio
group PC3
function io_disabled
device spinand
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PC3
config 00140009
config 00000005
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF0
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF0
config 00280009
config 00000003
config 00000000
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF1
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF1
config 00280009
config 00000003
config 00000000
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF2
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF2
config 00280009
config 00000003
config 00000000
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF3
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF3
config 00280009
config 00000003
config 00000000
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF4
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF4
config 00280009
config 00000003
config 00000000
device sdc0
state default
type MUX_GROUP (2)
controlling device pio
group PF5
function sdc0
device sdc0
state default
type CONFIGS_GROUP (4)
controlling device pio
group PF5
config 00280009
config 00000003
config 00000000
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF0
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF0
config 00140009
config 00000003
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF1
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF1
config 00140009
config 00000003
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF2
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF2
config 00140009
config 00000003
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF3
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF3
config 00140009
config 00000003
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF4
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF4
config 00140009
config 00000003
device sdc0
state sleep
type MUX_GROUP (2)
controlling device pio
group PF5
function io_disabled
device sdc0
state sleep
type CONFIGS_GROUP (4)
controlling device pio
group PF5
config 00140009
config 00000003
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD3
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD3
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD4
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD4
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD5
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD5
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD6
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD6
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD7
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD7
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD8
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD8
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD18
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD18
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD20
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD20
config 00000005
config 00000000
config 00000000
device lcd0
state active
type MUX_GROUP (2)
controlling device pio
group PD21
function lcd0
device lcd0
state active
type CONFIGS_GROUP (4)
controlling device pio
group PD21
config 00000005
config 00000000
config 00000000
GPIO ranges handled:
0: pio GPIOS [0 - 0] PINS [0 - 0]
1: pio GPIOS [1 - 1] PINS [1 - 1]
2: pio GPIOS [2 - 2] PINS [2 - 2]
3: pio GPIOS [3 - 3] PINS [3 - 3]
32: pio GPIOS [32 - 32] PINS [32 - 32]
33: pio GPIOS [33 - 33] PINS [33 - 33]
34: pio GPIOS [34 - 34] PINS [34 - 34]
35: pio GPIOS [35 - 35] PINS [35 - 35]
64: pio GPIOS [64 - 64] PINS [64 - 64]
65: pio GPIOS [65 - 65] PINS [65 - 65]
66: pio GPIOS [66 - 66] PINS [66 - 66]
67: pio GPIOS [67 - 67] PINS [67 - 67]
96: pio GPIOS [96 - 96] PINS [96 - 96]
97: pio GPIOS [97 - 97] PINS [97 - 97]
98: pio GPIOS [98 - 98] PINS [98 - 98]
99: pio GPIOS [99 - 99] PINS [99 - 99]
100: pio GPIOS [100 - 100] PINS [100 - 100]
101: pio GPIOS [101 - 101] PINS [101 - 101]
102: pio GPIOS [102 - 102] PINS [102 - 102]
103: pio GPIOS [103 - 103] PINS [103 - 103]
104: pio GPIOS [104 - 104] PINS [104 - 104]
105: pio GPIOS [105 - 105] PINS [105 - 105]
106: pio GPIOS [106 - 106] PINS [106 - 106]
107: pio GPIOS [107 - 107] PINS [107 - 107]
108: pio GPIOS [108 - 108] PINS [108 - 108]
109: pio GPIOS [109 - 109] PINS [109 - 109]
110: pio GPIOS [110 - 110] PINS [110 - 110]
111: pio GPIOS [111 - 111] PINS [111 - 111]
112: pio GPIOS [112 - 112] PINS [112 - 112]
113: pio GPIOS [113 - 113] PINS [113 - 113]
114: pio GPIOS [114 - 114] PINS [114 - 114]
115: pio GPIOS [115 - 115] PINS [115 - 115]
116: pio GPIOS [116 - 116] PINS [116 - 116]
117: pio GPIOS [117 - 117] PINS [117 - 117]
128: pio GPIOS [128 - 128] PINS [128 - 128]
129: pio GPIOS [129 - 129] PINS [129 - 129]
130: pio GPIOS [130 - 130] PINS [130 - 130]
131: pio GPIOS [131 - 131] PINS [131 - 131]
132: pio GPIOS [132 - 132] PINS [132 - 132]
133: pio GPIOS [133 - 133] PINS [133 - 133]
134: pio GPIOS [134 - 134] PINS [134 - 134]
135: pio GPIOS [135 - 135] PINS [135 - 135]
136: pio GPIOS [136 - 136] PINS [136 - 136]
137: pio GPIOS [137 - 137] PINS [137 - 137]
138: pio GPIOS [138 - 138] PINS [138 - 138]
139: pio GPIOS [139 - 139] PINS [139 - 139]
140: pio GPIOS [140 - 140] PINS [140 - 140]
160: pio GPIOS [160 - 160] PINS [160 - 160]
161: pio GPIOS [161 - 161] PINS [161 - 161]
162: pio GPIOS [162 - 162] PINS [162 - 162]
163: pio GPIOS [163 - 163] PINS [163 - 163]
164: pio GPIOS [164 - 164] PINS [164 - 164]
165: pio GPIOS [165 - 165] PINS [165 - 165]
No config found for dev/state/pin, expected:
Searched dev:
Searched state:
Searched pin:
Use: modify config_pin <devname> <state> <pinname> <value>
Pin config settings per pin group
Format: group (name): configs
0 (PA0):
1 (PA1):
2 (PA2):
3 (PA3):
4 (PB0):
5 (PB1):
6 (PB2):
7 (PB3):
8 (PC0):
9 (PC1):
10 (PC2):
11 (PC3):
12 (PD0):
13 (PD1):
14 (PD2):
15 (PD3):
16 (PD4):
17 (PD5):
18 (PD6):
19 (PD7):
20 (PD8):
21 (PD9):
22 (PD10):
23 (PD11):
24 (PD12):
25 (PD13):
26 (PD14):
27 (PD15):
28 (PD16):
29 (PD17):
30 (PD18):
31 (PD19):
32 (PD20):
33 (PD21):
34 (PE0):
35 (PE1):
36 (PE2):
37 (PE3):
38 (PE4):
39 (PE5):
40 (PE6):
41 (PE7):
42 (PE8):
43 (PE9):
44 (PE10):
45 (PE11):
46 (PE12):
47 (PF0):
48 (PF1):
49 (PF2):
50 (PF3):
51 (PF4):
52 (PF5):
Pin config settings per pin
Format: pin (name): configs
pin 0 (PA0):
pin 1 (PA1):
pin 2 (PA2):
pin 3 (PA3):
pin 32 (PB0):
pin 33 (PB1):
pin 34 (PB2):
pin 35 (PB3):
pin 64 (PC0):
pin 65 (PC1):
pin 66 (PC2):
pin 67 (PC3):
pin 96 (PD0):
pin 97 (PD1):
pin 98 (PD2):
pin 99 (PD3):
pin 100 (PD4):
pin 101 (PD5):
pin 102 (PD6):
pin 103 (PD7):
pin 104 (PD8):
pin 105 (PD9):
pin 106 (PD10):
pin 107 (PD11):
pin 108 (PD12):
pin 109 (PD13):
pin 110 (PD14):
pin 111 (PD15):
pin 112 (PD16):
pin 113 (PD17):
pin 114 (PD18):
pin 115 (PD19):
pin 116 (PD20):
pin 117 (PD21):
pin 128 (PE0):
pin 129 (PE1):
pin 130 (PE2):
pin 131 (PE3):
pin 132 (PE4):
pin 133 (PE5):
pin 134 (PE6):
pin 135 (PE7):
pin 136 (PE8):
pin 137 (PE9):
pin 138 (PE10):
pin 139 (PE11):
pin 140 (PE12):
pin 160 (PF0):
pin 161 (PF1):
pin 162 (PF2):
pin 163 (PF3):
pin 164 (PF4):
pin 165 (PF5):
registered pin groups:
group: PA0
pin 0 (PA0)
group: PA1
pin 1 (PA1)
group: PA2
pin 2 (PA2)
group: PA3
pin 3 (PA3)
group: PB0
pin 32 (PB0)
group: PB1
pin 33 (PB1)
group: PB2
pin 34 (PB2)
group: PB3
pin 35 (PB3)
group: PC0
pin 64 (PC0)
group: PC1
pin 65 (PC1)
group: PC2
pin 66 (PC2)
group: PC3
pin 67 (PC3)
group: PD0
pin 96 (PD0)
group: PD1
pin 97 (PD1)
group: PD2
pin 98 (PD2)
group: PD3
pin 99 (PD3)
group: PD4
pin 100 (PD4)
group: PD5
pin 101 (PD5)
group: PD6
pin 102 (PD6)
group: PD7
pin 103 (PD7)
group: PD8
pin 104 (PD8)
group: PD9
pin 105 (PD9)
group: PD10
pin 106 (PD10)
group: PD11
pin 107 (PD11)
group: PD12
pin 108 (PD12)
group: PD13
pin 109 (PD13)
group: PD14
pin 110 (PD14)
group: PD15
pin 111 (PD15)
group: PD16
pin 112 (PD16)
group: PD17
pin 113 (PD17)
group: PD18
pin 114 (PD18)
group: PD19
pin 115 (PD19)
group: PD20
pin 116 (PD20)
group: PD21
pin 117 (PD21)
group: PE0
pin 128 (PE0)
group: PE1
pin 129 (PE1)
group: PE2
pin 130 (PE2)
group: PE3
pin 131 (PE3)
group: PE4
pin 132 (PE4)
group: PE5
pin 133 (PE5)
group: PE6
pin 134 (PE6)
group: PE7
pin 135 (PE7)
group: PE8
pin 136 (PE8)
group: PE9
pin 137 (PE9)
group: PE10
pin 138 (PE10)
group: PE11
pin 139 (PE11)
group: PE12
pin 140 (PE12)
group: PF0
pin 160 (PF0)
group: PF1
pin 161 (PF1)
group: PF2
pin 162 (PF2)
group: PF3
pin 163 (PF3)
group: PF4
pin 164 (PF4)
group: PF5
pin 165 (PF5)
function: gpio_in, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PC1 PC2 PC3 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PD8 PD9 PD10 PD11 PD12 PD13 PD14 PD15 PD16 PD17 PD18 PD19 PD20 PD21 PE0 PE1 PE2 PE3 PE4 PE5 PE6 ]
function: gpio_out, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PC0 PC1 PC2 PC3 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PD8 PD9 PD10 PD11 PD12 PD13 PD14 PD15 PD16 PD17 PD18 PD19 PD20 PD21 PE0 PE1 PE2 PE3 PE4 PE5]
function: tp0, groups = [ PA0 PA1 PA2 PA3 ]
function: da0, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PD7 PD8 PD9 PD10 PD11 PE3 PE4 PE5 PE6 PE12 ]
function: uart1, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PD1 PD2 PD3 PD4 ]
function: spi1, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PE7 PE8 PE9 PE10 ]
function: io_disabled, groups = [ PA0 PA1 PA2 PA3 PB0 PB1 PB2 PB3 PC0 PC1 PC2 PC3 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PD8 PD9 PD10 PD11 PD12 PD13 PD14 PD15 PD16 PD17 PD18 PD19 PD20 PD21 PE0 PE1 PE2 PE3 PE4 ]
function: pwm0, groups = [ PA2 PB2 PE12 ]
function: ir0, groups = [ PA3 PB3 PE11 PF0 ]
function: dqs0, groups = [ PB0 ]
function: twi1, groups = [ PB0 PB1 PD5 PD6 ]
function: dqs1, groups = [ PB1 ]
function: ckb, groups = [ PB2 ]
function: ddr_ref_d, groups = [ PB3 ]
function: spi0, groups = [ PC0 PC1 PC2 PC3 PD18 PD19 PD20 PD21 ]
function: sdc1, groups = [ PC0 PC1 PC2 ]
function: vdevice, groups = [ PC0 PC1 ]
function: uart0, groups = [ PC3 PE0 PE1 PF2 PF4 ]
function: lcd0, groups = [ PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PD8 PD9 PD10 PD11 PD12 PD13 PD14 PD15 PD16 PD17 PD18 PD19 PD20 PD21 PE0 PE1 PE2 PE3 PE4 PE5 ]
function: twi0, groups = [ PD0 PD12 PE11 PE12 ]
function: rsb0, groups = [ PD0 PD12 PE3 PE4 ]
function: irq, groups = [ PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PD8 PD9 PD10 PD11 PD12 PD13 PD14 PD15 PD16 PD17 PD18 PD19 PD20 PD21 PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7 PE8 PE9 PE10 PE11 PE12 PF0 PF1 PF2 PF3 PF4 P]
function: uart2, groups = [ PD13 PD15 PD16 PE7 PE8 PE9 PE10 ]
function: lvds1, groups = [ PD14 ]
function: twi2, groups = [ PD15 PD16 PE0 PE1 ]
function: spdif0, groups = [ PD17 PE6 ]
function: csi0, groups = [ PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7 PE8 PE9 PE10 ]
function: clk0, groups = [ PE2 PE11 ]
function: pwm1, groups = [ PE6 ]
function: sdc0, groups = [ PF0 PF1 PF2 PF3 PF4 PF5 ]
function: dbg0, groups = [ PF0 PF3 PF5 ]
function: dgb0, groups = [ PF1 ]
function: pmw1, groups = [ PF5 ]
Pinmux settings per pin
Format: pin (name): mux_owner gpio_owner hog?
pin 0 (PA0): (MUX UNCLAIMED) pio:0
pin 1 (PA1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 2 (PA2): uart1 (GPIO UNCLAIMED) function uart1 group PA2
pin 3 (PA3): uart1 (GPIO UNCLAIMED) function uart1 group PA3
pin 32 (PB0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 33 (PB1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 34 (PB2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 35 (PB3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 64 (PC0): spinand (GPIO UNCLAIMED) function spi0 group PC0
pin 65 (PC1): spinand (GPIO UNCLAIMED) function spi0 group PC1
pin 66 (PC2): spinand (GPIO UNCLAIMED) function spi0 group PC2
pin 67 (PC3): spinand (GPIO UNCLAIMED) function spi0 group PC3
pin 96 (PD0): twi0 pio:96 function twi0 group PD0
pin 97 (PD1): (MUX UNCLAIMED) pio:97
pin 98 (PD2): (MUX UNCLAIMED) pio:98
pin 99 (PD3): lcd0 (GPIO UNCLAIMED) function lcd0 group PD3
pin 100 (PD4): lcd0 (GPIO UNCLAIMED) function lcd0 group PD4
pin 101 (PD5): lcd0 (GPIO UNCLAIMED) function lcd0 group PD5
pin 102 (PD6): lcd0 (GPIO UNCLAIMED) function lcd0 group PD6
pin 103 (PD7): lcd0 (GPIO UNCLAIMED) function lcd0 group PD7
pin 104 (PD8): lcd0 (GPIO UNCLAIMED) function lcd0 group PD8
pin 105 (PD9): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 106 (PD10): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 107 (PD11): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 108 (PD12): twi0 pio:108 function twi0 group PD12
pin 109 (PD13): (MUX UNCLAIMED) pio:109
pin 110 (PD14): (MUX UNCLAIMED) pio:110
pin 111 (PD15): (MUX UNCLAIMED) pio:111
pin 112 (PD16): (MUX UNCLAIMED) pio:112
pin 113 (PD17): (MUX UNCLAIMED) pio:113
pin 114 (PD18): lcd0 (GPIO UNCLAIMED) function lcd0 group PD18
pin 115 (PD19): (MUX UNCLAIMED) pio:115
pin 116 (PD20): lcd0 (GPIO UNCLAIMED) function lcd0 group PD20
pin 117 (PD21): lcd0 (GPIO UNCLAIMED) function lcd0 group PD21
pin 128 (PE0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 129 (PE1): (MUX UNCLAIMED) pio:129
pin 130 (PE2): (MUX UNCLAIMED) pio:130
pin 131 (PE3): (MUX UNCLAIMED) pio:131
pin 132 (PE4): (MUX UNCLAIMED) pio:132
pin 133 (PE5): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 134 (PE6): (MUX UNCLAIMED) pio:134
pin 135 (PE7): (MUX UNCLAIMED) pio:135
pin 136 (PE8): (MUX UNCLAIMED) pio:136
pin 137 (PE9): (MUX UNCLAIMED) pio:137
pin 138 (PE10): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 139 (PE11): (MUX UNCLAIMED) pio:139
pin 140 (PE12): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 160 (PF0): sdc0 (GPIO UNCLAIMED) function io_disabled group PF0
pin 161 (PF1): sdc0 (GPIO UNCLAIMED) function io_disabled group PF1
pin 162 (PF2): sdc0 (GPIO UNCLAIMED) function io_disabled group PF2
pin 163 (PF3): sdc0 (GPIO UNCLAIMED) function io_disabled group PF3
pin 164 (PF4): sdc0 (GPIO UNCLAIMED) function io_disabled group PF4
pin 165 (PF5): sdc0 (GPIO UNCLAIMED) function io_disabled group PF5
registered pins: 53
pin 0 (PA0)
pin 1 (PA1)
pin 2 (PA2)
pin 3 (PA3)
pin 32 (PB0)
pin 33 (PB1)
pin 34 (PB2)
pin 35 (PB3)
pin 64 (PC0)
pin 65 (PC1)
pin 66 (PC2)
pin 67 (PC3)
pin 96 (PD0)
pin 97 (PD1)
pin 98 (PD2)
pin 99 (PD3)
pin 100 (PD4)
pin 101 (PD5)
pin 102 (PD6)
pin 103 (PD7)
pin 104 (PD8)
pin 105 (PD9)
pin 106 (PD10)
pin 107 (PD11)
pin 108 (PD12)
pin 109 (PD13)
pin 110 (PD14)
pin 111 (PD15)
pin 112 (PD16)
pin 113 (PD17)
pin 114 (PD18)
pin 115 (PD19)
pin 116 (PD20)
pin 117 (PD21)
pin 128 (PE0)
pin 129 (PE1)
pin 130 (PE2)
pin 131 (PE3)
pin 132 (PE4)
pin 133 (PE5)
pin 134 (PE6)
pin 135 (PE7)
pin 136 (PE8)
pin 137 (PE9)
pin 138 (PE10)
pin 139 (PE11)
pin 140 (PE12)
pin 160 (PF0)
pin 161 (PF1)
pin 162 (PF2)
pin 163 (PF3)
pin 164 (PF4)
pin 165 (PF5)
最近编辑记录 xboot (2021-07-01 18:37:46)
离线
司徒竟然忘記PS1最基本的2D測試是惡魔城,哈,於是,司徒補測一下數據,不過,目前FC3000掌機的MicroSD只有1bit的存取速度,加上F1C100S的RAM只有32MB,因此,後續的小米柚(PocketGo)看來頗有看頭,假定跑1.5GHz,順暢PS1 2D遊戲,看來頗有機會,哈哈~
CPU=672MHz (FPS=60, CPU=97%),關閉FrameSkip
CPU=1.5GHz (FPS=60, CPU=72%),關閉FrameSkip,這個CPU使用率才是真的可以跑順遊戲
离线
@司徒
trimui硬件存在多个版本,我现在手上的版本,跟你不太一致,IO,有更换,请注意!比如LCD的 reset管脚,SD卡的cd脚,等等
离线
比较这个地方,跟你的是不一致的
离线
屏幕颜色显示正确了,但还是有一点点抖动,估计是需要提升video 相关的pll 到297M
离线
"fb-f1c200s@0": {
"clock-name-defe": "link-defe",
"clock-name-debe": "link-debe",
"clock-name-tcon": "link-tcon",
"reset-defe": 46,
"reset-debe": 44,
"reset-tcon": 36,
"width": 320,
"height": 240,
"physical-width": 41,
"physical-height": 31,
"clock-frequency": 19000000,
"hfront-porch": 749,
"hback-porch": 38,
"hsync-len": 18,
"vfront-porch": 36,
"vback-porch": 6,
"vsync-len": 4,
"hsync-active": false,
"vsync-active": false,
"den-active": true,
"clk-active": true,
"backlight": "led-pwm-bl.0"
},
时序参数是这样,"hfront-porch": 749, 估计没人敢设这么大,哈哈
离线
https://github.com/xboot/xboot/tree/master/src/arch/arm32/mach-trimui
这是bsp代码,提升video pll到297M,不闪烁了,但屏幕有点偏移。
离线
@司徒
大佬,1.5Ghz有没有做过老化试验?比如连续跑8小时。芯片温度大概多少度?
离线
真的耶!看來電路真的有改變,不可思議,這樣的差異,可能會有兼容問題
https://gitee.com/stewardfu/website/raw/master/handheld/trimui/teardown/14.jpg
少了几个元器件,TYPE-C母座质量缩水
离线
显示不闪烁了,但屏幕整体右下方偏移。
新版本,还有一个异常,就是红色LED灯的拉高,拉低,会影响屏幕,高低变化时,屏幕会变化,估计是背光,或者LCD电源被影响了。
离线
@xboot
大佬你一出手,果然厲害,TRIMUI瞬間變成超級賽亞人~
把back_porch縮小就可以~感謝你的XBOOT
"fb-f1c200s@0": {
"clock-name-defe": "link-defe",
"clock-name-debe": "link-debe",
"clock-name-tcon": "link-tcon",
"reset-defe": 46,
"reset-debe": 44,
"reset-tcon": 36,
"width": 320,
"height": 240,
"physical-width": 41,
"physical-height": 31,
"clock-frequency": 19000000,
"hfront-porch": 749,
"hback-porch": 2,
"hsync-len": 18,
"vfront-porch": 36,
"vback-porch": 0,
"vsync-len": 4,
"hsync-active": false,
"vsync-active": false,
"den-active": true,
"clk-active": true,
"backlight": "led-pwm-bl.0"
},
离线
https://github.com/xboot/xboot/commit/14d2c3a114fef60c649ca2b3a5d77978b54d506a
就是这段代码不能加,这个仅仅是实现红色led灯心跳功能。
"led-gpio@0": {
"gpio": 133,
"gpio-config": 1,
"active-low": false,
"default-brightness": 0
},
"ledtrigger-heartbeat@0": {
"led-name": "led-gpio.0",
"period-ms": 1260
},
#define F1C200S_GPIOE5 (133)
离线
深度怀疑PE5根本就不是控制红色LED的,而是控制某路电源,没分析硬件,不知道啥情况。
离线
提供两种方法,在不破坏trimui原版spi nand 镜像,或者短路spi nand管脚进入fel模式的方案。
第一种,制作一个TF卡,里面烧写一个fel-sdboot.sunxi镜像即可
dd if=fel-sdboot.sunxi of=/dev/sdX bs=1024 seek=8
第二种,引出trimui的串口1,然后在串口终端里一直按着按键“2”,然后trimui开机,这时就会立即进入fel模式
貌似还有第三种,L+R一起按着开机,然后就进入fel了。
离线
I2C2总线上挂了一个加密芯片,下面是能找到的相关信息,不过这个研究起来意义也不大
[ 2.282601] ++++++++++++++++ alpu_init +++++++++++++
[ 2.288299] proc create successtrimui_sunxi_gpio_init: ver Sep 19 2020
[ 2.299220] serial: 0000000B5C
[ 2.312637] Bypass Test OK!
[ 2.315843] test enc
[ 2.323461] ret=0
[ 2.325597] test dec
[ 2.333355] ret=0
[ 2.335500] DEC: ARE LINK TEST 12
[ 2.339584] -------- keytabcheck_init -------
xboot: /sys/device/i2c/i2c-f1c200s.2# cat detect
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
离线
既然XBOOT大佬都說有加密IC在I2C-2上面,司徒只好找一下,給個交待,於是故事繼續往下走...
XBOOT大佬說有一顆加密IC而且是透過I2C介面傳輸,於是搜尋一下I2C字眼
$ grep -i i2c usr/trimui/ -r
Binary file usr/trimui/bin/MainUI matches
Binary file usr/trimui/apps/cdogs/music/game/space_dimensions_8bit.ogg matches
Binary file usr/trimui/lib/libarelink.so matches
P.S. 原來是Arelink安瑞易连,哈
接著開啟libarelink.so,果真有I2C副程式
發現寶庫
開啟MainUI去找尋arelink_req_enc_dec就可以看到關鍵字/tmp/.cmdenc
再度搜尋一下
$ grep cmdenc . -r
Binary file ./usr/trimui/bin/MainUI matches
Binary file ./root/gameloader matches
./etc/init.d/main: if [ -f /tmp/.cmdenc ] ; then
./main: if [ -f /tmp/.cmdenc ] ; then
P.S. /etc/init.d/main
/etc/init.d/main
if [ -f /tmp/.cmdenc ] ; then
/root/gameloader
elif [ -f /tmp/cmd_to_run.sh ] ; then
chmod a+x /tmp/cmd_to_run.sh
/tmp/cmd_to_run.sh
rm /tmp/cmd_to_run.sh
fi
P.S. 原來是透過gameloader做後續的動作,哈
開啟gameloader就可以看到/tmp/.cmdenc相關資訊,而且長度是256,哈
於是,司徒修改測試
if [ -f /tmp/.cmdenc ] ; then
dd if=/dev/urandom of=/tmp/.cmdenc bs=1 count=256
/root/gameloader
接著,司徒使用FC 1942遊戲測試
trimui_sunxi_gpio_init: ver Aug 1 2020
serial: 00000002ED
file /tmp/.cmdenc len=256
DEC1: Nz1=v.N>ZTOZ>F੨R.u
[ 17.423914] write len=256
[ 17.820278] exec! there result of call_usermodehelper is 0
[ 17.826401] exec! the process is "gameloader", pid is 183.
[ 17.832694] BASE64:0wiSJBoxSQ/reYr9IPNlu0XPhZ3kv6xh0WwuWz36EDlzvzxTFL+JUQCWXtSWVLJQ1rwI+4Ul3yGYusGOe9GNvWf+X46ZmNg7J8xXuYcc1BNn/l+OmZjYOyfMV7mHHNQTZ/5fjpmY2DsnzFe5hxzUE2f+X46ZmNg7J8xXuYc=
bye
P.S. 加密禁忌就是輸出挑戰的訊息,哈
拿掉測試那行,重新載入FC 1942遊戲,則顯示如下
trimui_sunxi_gpio_init: ver Aug 1 2020
serial: 00000002ED
file /tmp/.cmdenc len=256
DEC1: cd /usr/trimui/bin/;HOME=/mnt/SDCARD/Roms/FC/ /usr/trimui/bin/fceux "/mnt/SDCARD/Roms/FC//1942[MS漢化](JU)[STG](0.31Mb).nes"
[ 25.267101] write len=256
/tmp/.cmdenc
於是,司徒找了一下MainUI,再度發現了寶庫
接著把呼叫加解密Patch成NOP
接著測試一下
Load nes rom cd /usr/trimui/bin/;HOME=/mnt/SDCARD/Roms/FC/ /usr/trimui/bin/fceux "/mnt/SDCARD/Roms/FC//1942[MS漢化](JU)[STG](0.31Mb).nes"
sth wrong, encoded != decoded !!!!
接著看一下MainUI寫出的檔案
# ls -al
drwxrwxrwt 3 root root 120 Jan 1 00:00 .
drwxr-xr-x 19 root root 4096 Jan 1 00:00 ..
-rw-r--r-- 1 root root 256 Jan 1 00:00 decode
-rw-r--r-- 1 root root 256 Jan 1 00:00 encode
-rw-r--r-- 1 root root 424 Jan 1 00:00 game_output.txt
drwxr-xr-x 2 root root 60 Jan 1 00:00 log
# cat /tmp/encode
g_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'Wg_;'W
# cat /tmp/decode
/mnt/SDCARD/Roms/FC//1942[MS漢化](JU)[STG](0.31Mb).nes
接著修改一下
if [ -f /tmp/.cmdenc ] ; then
echo "#!/bin/sh" > /tmp/run.sh
echo "cd /usr/trimui/bin/;HOME=/mnt/SDCARD/Roms/FC/ /usr/trimui/bin/fceux \"" >> /tmp/run.sh
cat /tmp/decode >> /tmp/run.sh
echo "\"" >> /tmp/run.sh
chmod +x /tmp/run.sh
/tmp/run.sh
#/root/gameloader
elif [ -f /tmp/cmd_to_run.sh ] ; then
chmod a+x /tmp/cmd_to_run.sh
/tmp/cmd_to_run.sh
rm /tmp/cmd_to_run.sh
fi
接著,再度載入FC 1942遊戲,成功繞過加密IC
离线
这加密究竟加了个啥,游戏rom加密?限制只能玩trimui释放出的rom?还是限制无加密芯片,无法玩任何游戏。
如果是第二种,那么内核里的鉴权也需要去掉,这样,就可以去掉加密芯片,然后抄板了。
最近编辑记录 xboot (2021-07-02 15:01:39)
离线
trimui原厂真应该来挖坑网看下这篇文章
在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。
https://whycan.com/t_6507.html
虽然没采用加密芯片,但加密强度甩trimui加密方案几条街。没有完整性保护的固件,都是可以爆破的。
离线
FC3000v2这个机子无法玩FC的龙珠英雄 (半熟英雄) [外星科技汉化],应该是fceux模拟器的问题,如何解决呢?
离线
@司徒
152楼这个游戏叫什么名字,比较喜欢这个画面。
离线
@lemoine
不知道@shawn.d
PS1 惡魔城X 月下夜想曲
谢谢
离线
司徒,打扰一下,这个trimui掌机玩街机无法运行合金弹头3和5,是不是街机模拟器版本太低,我用了所有知道的合金弹头3和5的rom试了试都不行
离线
厂商内置的模拟器很拉胯
这边有国外网友弄的gngeo,我还没试,应该玩snk游戏没有问题
https://github.com/liartes/gngeo/releases/tag/gngeo-trimui-20210701
离线
感谢司徒和fanelwin两位大佬,我去试试行不行
离线
大佬黑客的过程太刺激了,膜拜!
我想买个掌机来学习,不知道哪个版本的可玩性高些?在不考虑价格的情况下
离线
@zpyws
找一台自己喜愛的外觀就可以,不好意思,我無法給你建議~
正所謂:有志者、事竟成,經過幾天糞戰後,第一版TFT FC3000刷機包終於出爐,由於FC3000官方系統的模擬器還不錯,司徒為了保留這項特色,特別設計了多重開機選單,結果搞死自己~不知為何,始終無法在MicroSD啟動狀態下,再去啟動SPI官方系統,也感謝暈哥提供很多協助以及資訊,不過,最終還是失敗,終於有一天司徒在夢境之中,夢到司徒小時候的哺乳畫面~這...,聽說夢境跟現實是相反的,難道這是叫司徒去吃屎的意思嗎?最後,司徒終於領悟了,必須用力使出吃奶的力氣,這才發現,在MicroSD啟動下,可以直接呼叫BROM去載入SPI Flash (ldr pc, =0xffff4110),藉此跳轉從SPI啟動
.try_boot_SPINOR:
ffff4110: eb0006e6 bl load_from_spinor ; load SPL from SPI NOR-flash
ffff4114: e1a04000 mov r4, r0 ; r4 = load_from_spinor();
ffff4118: e3540000 cmp r4, #0x0 ; see if load_from_spinor returned 0
ffff411c: 1a000000 bne .none_found ; if load_from_spinor returned 0 boot from FEL mode (via .none_found)
ffff4120: ea000003 b .boot ; else skip to .boot_spl
目前小橫米系統有兩個主要底包,一個是中文化系統,由江西恐龍製作,雖然這人不好相處,不過倒是蠻熱心,另一個則是Jutleys製作,該包主要以英文語言為主,相當感謝兩位的熱心付出,在此,給予最高敬意,也感謝社群的協助,因此,司徒基於這兩個底包,幫FC3000掌機製作了兩個刷機包
江西恐龍刷機包:https://github.com/steward-fu/fc3000/releases/download/v1.0/fc3000_tft_od_jckl_no_roms.img.7z
Jutleys刷機包:https://github.com/steward-fu/fc3000/releases/download/v1.0/fc3000_tft_od_jutleys_no_roms.img.7z
P.S. 第一分割區目前只有256MB,第二個分割區有1.7GB,使用者可以都自己調整,只要把檔案先複製出來,調整後,在複製回去就好,記得最前面的32MB檔頭不能刪除,第一個分割區放官方系統遊戲,第二個分割區放OpenDingux系統的東西以及遊戲
刷入MicroSD後,開機畫面如下,可以:A鍵.進入原廠系統、B鍵.進入OpenDingux系統、X鍵.刷入V1官方系統、Y鍵.刷入V2官方系統
此刷機包是司徒利用空閒時間製作,嚴禁使用於商業用途,無法同意者,請不要使用
江西恐龍刷機包
Jutleys刷機包
仙劍奇俠傳
怒鐵
DOOM
究竟怎樣的系統才可以稱呼OpenDingux呢?這問題司徒也不知道,不過,司徒這一次把系統製作成SQUASHFS,避免容易發生卡崩的問題,使用的Loader則是OpenDingux的Mininit,因此,司徒稱呼這個系統為OpenDingux系統,應該是可以的~由於,小橫米的按鍵雜亂,這問題目前也發生在FC3000身上,不過,作為折騰的機器,應該是可以接受的,接著,如果熱愛超頻的玩家,可以好好把玩看看,測試一下PS1鐵拳3,最高可以跑到多少FPS~
快速按鍵:
MENU + Y(亮度變暗)
MENU + X(亮度變亮)
离线
系统包发出后第一个留名,感谢司徒的付出
离线
首先非常感谢司徒的付出!
真没想到F1C100S能超到1500。。。
以前玩miyoo完全想不到。。
这个机子就是屏幕有点不行,如果能买到IPS屏的版本就好了!
离线
@司徒
感谢分享,换了台tft屏幕的机器,试了一下,很不错。
但是有个突出的问题,FC3000的LR键是自动连发的,按下默认就是连发,导致玩PS1的生化危机3时,手拿机枪的JILL无法开枪,不知道司徒是否有方法可以解决?
离线
司徒的小橫米(PocketGo)終於到貨了,下單一個月後,終於到司徒手上,不知道的人還以為是從火星發過來的~可惜,屏越來越差了~還有漏光問題,司徒有點失望,不過,路還是要繼續往下走,於是,接著登場的則是Q8掌機,這掌機的硬件,基本上跟小橫米很相似,是一台適合研究學習的機器,但是,不是一台可以拿來玩遊戲的機器,所以司徒會盡量簡單帶過,司徒會把重心放在TRIMUI和小橫米身上,畢竟這兩台是比較可以拿來玩遊戲的掌機~
屏視角
拆機
這個屏的腳位跟FC3000一樣
GB1 ZH1901MP02C,其實就是F1C100S
為了可以透過USB燒錄,需要修復電路,USB預設並沒有連接,而且有一些下拉電阻
移除兩顆下拉電阻後,短路DM、DP的接線
短路SPI Flash第一腳位和第二腳位,接著連接USB
$ lsusb
Bus 001 Device 074: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode
UART1位置
离线
Q8掌機的腳位如下
UP PE10
DOWN PE9
LEFT PE8
RIGHT PE7
A PE2
B PA0
X PE3
Y PD0
SELECT PA1(1V)
START PA1(0V)
L PE12
R PD9
VOL PA1(2V)
LCD BK PE6
LCD RST PE11
LCD CS PD21
LCD RD PD20
LCD RS PD19
LCD WR PD18
LCD DB11 PD13
LCD DB12 PD14
LCD DB13 PD15
LCD DB14 PD16
LCD DB15 PD17
LCD DB5 PD6
LCD DB6 PD7
LCD DB7 PD8
LCD DB8 PD10
LCD DB9 PD11
LCD DB10 PD12
LCD DB0 PD1
LCD DB1 PD2
LCD DB2 PD3
LCD DB3 PD4
LCD DB4 PD5
SPI Flash CS PC1
SPI Flash MISO PC2
SPI Flash MOSI PC3
SPI Flash SCK PC0
MicroSD D0 PF1
MicroSD D1 PF0
MicroSD D2 PF5
MicroSD D3 PF4
MicroSD CLK PF2
MicroSD CMD PF3
离线
Q8點屏
測試代碼
.global _start
.equiv PIO_BASE, 0x01c20800
.equiv PD, (0x24 * 3)
.equiv PE, (0x24 * 4)
.equiv PIO_CFG0, 0x00
.equiv PIO_CFG1, 0x04
.equiv PIO_CFG2, 0x08
.equiv PIO_DATA, 0x10
.equiv LCD_CS, (1 << 21)
.equiv LCD_RD, (1 << 20)
.equiv LCD_RS, (1 << 19)
.equiv LCD_WR, (1 << 18)
.equiv LCD_RST, (1 << 11)
.equiv LCD_BL, (1 << 6)
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r4, =PIO_BASE + PD
ldr r1, =0x11111111
str r1, [r4, #PIO_CFG0]
str r1, [r4, #PIO_CFG1]
ldr r1, =0x00111111
str r1, [r4, #PIO_CFG2]
ldr r4, =PIO_BASE + PE
ldr r1, [r4, #PIO_CFG0]
bic r1, #0xf000000
orr r1, #0x1000000
str r1, [r4, #PIO_CFG0]
ldr r1, [r4, #PIO_CFG1]
bic r1, #0xf000
orr r1, #0x1000
str r1, [r4, #PIO_CFG1]
ldr r4, =PIO_BASE + PD
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
ldr r4, =PIO_BASE + PE
ldr r1, =0xffffffff
str r1, [r4, #PIO_DATA]
bl lcd_rst
ldr r0, =0xb9
bl lcd_cmd
ldr r0, =0xff
bl lcd_dat
ldr r0, =0x83
bl lcd_dat
ldr r0, =0x57
bl lcd_dat
ldr r0, =1000
bl delay
ldr r0, =0xb6
bl lcd_cmd
ldr r0, =0x2c
bl lcd_dat
ldr r0, =0x11
bl lcd_cmd
ldr r0, =1000
bl delay
ldr r0, =0x35
bl lcd_cmd
ldr r0, =0x3a
bl lcd_cmd
ldr r0, =0x05
bl lcd_dat
ldr r0, =0x36
bl lcd_cmd
ldr r0, =0x38
bl lcd_dat
ldr r0, =0xb0
bl lcd_cmd
ldr r0, =0x68
bl lcd_dat
ldr r0, =0x2b
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0x3f
bl lcd_dat
ldr r0, =0x2a
bl lcd_cmd
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x00
bl lcd_dat
ldr r0, =0x01
bl lcd_dat
ldr r0, =0xdf
bl lcd_dat
ldr r0, =0x29
bl lcd_cmd
ldr r0, =0x2c
bl lcd_cmd
ldr r4, =320*80
ldr r5, =0xf800
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =320*80
ldr r5, =0x7e0
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
ldr r4, =320*80
ldr r5, =0x1f
0:
mov r0, r5
bl lcd_dat
subs r4, #1
bne 0b
b .
delay:
push {lr}
0:
subs r0, #1
bne 0b
pop {pc}
lcd_rst:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PE
ldr r5, =0xffffffff
bic r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
orr r5, #LCD_RST
str r5, [r4, #PIO_DATA]
ldr r0, =10000
bl delay
pop {r4, r5, pc}
lcd_wr:
push {r4, r5, lr}
ldr r4, =PIO_BASE + PD
and r2, r0, #0x00ff
and r3, r0, #0xff00
lsl r2, #1
lsl r3, #2
eor r5, r5
orr r5, r1
orr r5, r2
orr r5, r3
orr r5, #LCD_RD
str r5, [r4, #PIO_DATA]
orr r5, #LCD_WR
str r5, [r4, #PIO_DATA]
pop {r4, r5, pc}
lcd_dat:
push {lr}
mov r1, #LCD_RS
bl lcd_wr
pop {pc}
lcd_cmd:
push {lr}
mov r1, #0
bl lcd_wr
pop {pc}
.end
离线
@司徒
非常棒的移植,感谢你的无私奉献。不过有无办法可以直接把系统给刷了,开机直接进OpenDingux,我不需要原版系统,因为我还有一台。再次感谢。
离线
@akting
很抱歉目前沒有辦法
目前基於FC3000的資源,司徒幫Q8掌機製作了兩個客製化系統,不過,不建議拿來玩遊戲,比較適合研究使用...
江西恐龍刷機包:https://github.com/steward-fu/q8/releases/download/v1.0/q8_od_jckl_no_roms.img.7z
Jutleys刷機包:https://github.com/steward-fu/q8/releases/download/v1.0/q8_od_jutleys_no_roms.img.7z
燒錄到MicroSD即可
江西恐龍底包
Jutleys底包
仙劍奇俠傳
怒鐵
相信大家一定很好奇,司徒都說Q8只適合研究不適合玩遊戲,那為何司徒還要幫Q8做刷機包呢?此奶天生我才必有用,Q8就是在幫小橫米鋪路,因為比較恐怖的測試,司徒不敢在小橫米上測試,畢竟司徒可不想再下單一台,因為那又要等一個月了...,因此,勇敢的Q8再度佔了出來,司徒幫它量一下身高體重,果然是標準的1.14V
兩顆電阻都是156K
替換成160K和442K電阻
電壓2.23V
PS1 惡魔城,CPU=672MHz,關閉FrameSkip,54 FPS,CPU=95%
PS1 鐵拳3,CPU=672MHz,關閉FrameSkip,36 FPS,CPU=96%
PS1 惡魔城,CPU=1536MHz,關閉FrameSkip,60 FPS,CPU=75%
PS1 鐵拳3,CPU=1536MHz,關閉FrameSkip,40 FPS,CPU=94%
PS1 惡魔城,CPU=1632MHz,關閉FrameSkip,60 FPS,CPU=59%
PS1 鐵拳3,CPU=1632MHz,關閉FrameSkip,44 FPS,CPU=96%
CORE-VDD電壓是影響溫度的關鍵,司徒即使跑960MHz,還是感覺有點溫熱...
結論:經由FC3000和Q8測試得到的數據,顯示RAM不足是一個問題,即使Q8已經是MicroSD 4 bits速度,跑出來的效果跟FC3000差別不大,而CPU速度再往上超頻時,FPS漂移更嚴重,代表SWAP已經不敷使用,因此,如何優化算法,在這種低階CPU更顯重要
离线
圣剑传说玛娜传奇,超频后能玩吗? 横米在不超频时,总是会卡
离线
我将所有的ps1游戏上传到了阿里云盘,如何私信分享给你呢?
离线
好快 q8也成了 这算最廉价的开源掌机了吧?(闲鱼上经常有不到50人民币的) ,不给还是最期待trimui
离线
終於來到小橫米(PocketGo)了~司徒覺得目前最可以拿來玩遊戲的機器,應該就屬TRIMUI和小橫米兩台,因此,後續的重心都會放在這兩台機器上,雖然司徒相當看好小橫米,畢竟它是可以用來玩格鬥遊戲,搓招相對容易,TRIMUI在這方面就比較不適合玩格鬥遊戲,但是,當司徒收到購買的小橫米時,那屏幕真的讓司徒蠻失望的,不過,比起其它F1C100S系列掌機,小橫米還是可以甩掉他們幾條街,因此,司徒調整一下順序,先把小橫米整頓一下,最後在整頓TRIMUI
小橫米2021版的屏
小橫米2021版的拆機
包裝
附贈的東西
屏幕越來越爛,左下角露光,下方有四條明顯露光的條紋
司徒換一張背景圖片測試,果真是屏幕問題
肉雞就定位
上方
側邊
下邊
側邊
背面
背蓋
終於使用比較正常一點的電池
前蓋
主要零件
F1C100S、LM4809
屏的型號是ST7789
离线
小横米的屏总会有一个漏光点,就很奇怪,不知道怎么设计的
离线
去掉保护玻璃,屏幕看起来好多了。
离线
從司徒做過這麼多的實驗來看,CPU 1.2GHz是一個臨界值,超過1.2GHz後,效能沒有明顯改善,同時,為了保持正常晶片溫度,1.65V的CORE-VDD電壓是最適合使用,因此,司徒把小橫米的電阻改成160K和91K(必須使用1%精密電阻),可以超頻到1.2GHz,而且讓F1C100S的溫度保持正常,通過公式換算:(0.6 * (161K / 91K)) + 0.6 = 1.65V,這個改造是相當安全的改機,司徒已經使用10姊妹測試過,沒有問題~建議玩家可以手動改造,相信CPU 1.2GHz的小橫米相當有看頭~
兩顆電阻都是25K
電壓1.13V
改成160K和91K(必須使用1%精密電阻)
實際電壓
离线
小橫米2021版腳位如下:
UP PE2
DOWN PE3
LEFT PE4
RIGHT PE5
A PE9
B PE7
X PD9
Y PE8
L PC1
R PC2
START PE0
SELECT PD0
MENU PE1
LCD BK PE6
LCD TE PE10
LCD RST PE11
LCD CS PD21
LCD RD PD20
LCD RS PD19
LCD WR PD18
LCD DB11 PD13
LCD DB12 PD14
LCD DB13 PD15
LCD DB14 PD16
LCD DB15 PD17
LCD DB5 PD6
LCD DB6 PD7
LCD DB7 PD8
LCD DB8 PD10
LCD DB9 PD11
LCD DB10 PD12
LCD DB0 PD1
LCD DB1 PD2
LCD DB2 PD3
LCD DB3 PD4
LCD DB4 PD5
SPI Flash CS PC1
SPI Flash MISO PC2
SPI Flash MOSI PC3
SPI Flash SCK PC0
MicroSD D0 PF1
MicroSD D1 PF0
MicroSD D2 PF5
MicroSD D3 PF4
MicroSD CLK PF2
MicroSD CMD PF3
离线
目前司徒已經將閃屏問題解決並且打包兩個刷機包,一個是基於江西恐龍包,另一個則是Jutleys刷機包,下圖是解決閃屏後的測試畫面
原本的閃屏畫面
新的刷機包開機畫面
江西恐龍包
Jutley包
經典的KOF98,沒有閃屏的小橫米再配上超頻到1.2GHz的驚人潛力,相信玩家會更愛小橫米
江西恐龍包:https://github.com/steward-fu/pocketgo/releases/download/v1.0/pocketgo_od_jckl_no_roms.img.7z
Jutleys包:https://github.com/steward-fu/pocketgo/releases/download/v1.0/pocketgo_od_jutleys_no_roms.img.7z
快速鍵:
MENU + UP (屏幕變亮)
MENU + DOWN (屏幕變暗)
离线
司徒大哥,那个最早的GB造型的miyoo有没有可能解决闪屏问题啊,我记得我还有一台最初的版本,那种改了按键的。
离线
最早那一批R61520的屏應該是可以修復閃屏問題,不過需要飛線,加上存在鬼鍵問題,我不會花時間去修復它,因為鬼鍵是真的無法玩遊戲,抱歉了~
不需要抱歉啊大哥,我也就是问一下,没折腾的必要的话就继续让那台机子生存在收纳柜里吧,嘿嘿
离线
建議有玩小橫米的玩家刷Jutleys包,遇到亂碼問題,只要把如下font.ttf覆蓋掉原本的gmenu2x/skins/GameShow/font.ttf就可以
font.ttf.zip
完成後,爽度就差很多了,在加上超頻1.2GHz,小橫米已經是最強的低價開源掌機
离线
我用的是初版的小横miyoo,然后刷完发现在模拟器里A变成B,B变成A,XY按键也都反了,好像在模拟器设置里修改AB按键定义只能修改运行游戏里的按键,不能修改模拟器默认按键值
离线
司徒大哥试过了吗,小横米UI界面和模拟器里的按键是相反的,我刷的是恐龙的那个包:D
离线
按鍵部份,你修改gmenu2x/input.cfg,把306跟308對調就可以,按鍵現在很亂~
大家先不要刷這兩個包好了,我發現這兩個包的CPU超頻設定是有問題,沒有任何作用,我的測試方是自己寫一個超頻程序,啟動後直接執行並且跑PS1模擬器,但是,把我的超頻程序加到啟動模擬器之前執行,會當機,而且這兩個包都會有卡頓問題,就是間歇性卡頓,原因目前不知道,我決定放棄這兩個刷機底包~所以大家先不要用,不過如果只是要看閃屏問題,可以刷機測試,測試NEOGEO模擬器就可以感受到~
超頻代碼
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <time.h>
int main(int argc, char* argv[])
{
int fd = open("/dev/mem", O_RDWR);
if(fd < 0){
printf("failed to open /dev/mem\n");
return -1;
}
uint32_t *mem = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x01c20000);
printf("mem ptr: 0x%x\n", mem);
*mem = (1 << 31) | (12 << 8) | (3 << 4);
close(fd);
return 0;
}
离线
@司徒
好的大哥,两个新包我都刷了,模拟器预设按键跟UI界面不一样这个已经说了,群友测试GBA的塞尔达缩小帽移动场景时会有撕裂,我自己试了一下画面确实会有部分撕裂,但跟以前版本那种撕裂不同,比较随机一些。
离线
@yesiraperfect
我測試了一下,沒有看出你說那個撕裂問題,你可以使用原始解析度、關掉FrameSkip測試一下嗎?如果還是會有,你可以上傳一下照片,跟我說一下在哪個畫面容易發生,以及怎樣移動才比較容易重製出來~
非常抱歉没有及时回复,我本职工作是公司狗,现在刚刚下班到家做好饭等媳妇浪完回家吃饭,看到司徒大哥回复所以临时拍了几张照片,就在下面、、
现在设置的是不跳帧,然后画面缩放模式是点对点的,在缩小帽开游戏第一个可操作场景,两个房间来回移动时可以看到有间歇性的撕裂,跟脉搏似的“撕裂→正常→撕裂→正常”这样,也有可能是模拟器问题?我在测试FC游戏“三目童子”时横向移动没有发现有这种间歇性的撕裂情况。可能只是个例吧
离线
q8的包也存在同样的问题吗?
离线
橫米又會分新舊 @O@!?
請問舊版也是跟著換電阻就行?
看錯了,完來是將25K換成 91K 和 160K
那可不可以使用 0402 貼片?
最近编辑记录 kit0072 (2021-07-09 04:18:33)
离线
@lzgame02
你這個是要給PSP的吧?你這人...,我目前環境有問題,目前無法幫你編譯,不好意思~哈
@yesiraperfect
你這個問題我可以複製出來,我追了一下問題,發現是那個GPSP模擬器問題,它沒有開雙緩衝,然後又交給SDL處理,導致自己蓋自己的畫面,我測試當初移植給小橫米的GPSP也同樣有問題,於是,我基於當初小橫米的GPSP修了一下,目前看來可以,你在幫我測試一下,檔案:gpsp_sdl_doublebuf_fix.zip
P.S. 原來目前的GPSP模擬器也是那個死法國佬改的,這人的人品...真是...不敢恭維,而且這GBA模擬器畫面竟然糊成這樣...,這人就不能好好做事情嗎~哈
@fanelwin
全部都有問題~
离线
@司徒
好的好的大哥,我明天到公司下载试一下,现在已经在床上了
离线
@司徒
不是給 PSP 的喔 , 是給開源掌機的 PPSSPP ....
PSP 主機只能 333mhz 而已 , 開源掌機可 > 600 mhz
是想測試下破解 333 調高後 , PSP Port 的 DOS Game 速度會不會變快 .... ^^
是 for 開源掌機的喔 ....
而且 PSP 之前就可以跑 win95 了 , 開源掌機說不定也成還更快 ......
那 開源掌機 + Diablo 2 也是可行的唷 .....
---
幫編譯 : http://github.com/PSP-Archive/dosbox_psp
編譯前 , 先將 dos_programs.cpp 裏頭的 333 改成 999
編完後分享下 , 想測看看這樣模擬 DOS 的效果能不能提升 .....
先感謝啦 .....
mailto : lzgame02@qq.com
最近编辑记录 lzgame02 (2021-07-09 09:59:08)
离线
@司徒
刚刚测试了,效果很好!刚开始我是在emus下新建gpsp文件夹,然后在miyoo里建立新的程序链接发现读游戏时会黑屏,然后我翻开收藏的第一第二版miyoo刷机包(司徒大哥做的最后版本),拷贝gpsp文件夹下的对应文件,就可以正常运行游戏了!现在撕裂没有了,场景切换画面非常整齐!
然后我遇到一个新的问题,我把gpsp文件夹下的GBA边框图拷贝到新文件夹下后在模拟器中设置点对点模式可以显示边框图,但是会闪烁,这个应该是BUG现象吧。
离线
不知道上传到贴子里的图会不会被压缩,我传一份zip压缩档吧
miyoo GBA边框.zip
离线
这个下载需要5积分是默认设置吗?我是直接添加上传你的附件,没有设置需要积分才可以下载的选项啊。:/
离线
离线
@哇酷小二
哦哦,我只是担心发司徒开源的旧资源然后需要积分会被误会。。。 ,如果能添加一个是否需要积分的选项就更好了。
离线
@yesiraperfect
啟動黑屏是因為BIOS錯誤,隨意按一個按鍵就可以繼續
邊框閃爍問題,是因為開啟雙緩衝後,邊框只填到其中一個畫面,導致閃爍
我把邊框閃爍以及BIOS卡住問題都修掉了,檔案:gpsp_fix_border_tearing_bios.zip
現在畫面正常了~
接下來我會先把TRIMUI掌機整頓好,模擬器相關問題,要等TRIMUI掌機整頓好再繼續處理~
有模擬器相關問題要回報的,請等我把TRIMUI整頓好在回報,感謝~
离线
@司徒
好的大哥,非常感谢!;)
离线
@司徒
QQ 加不了 , mail 沒回 ..... @@
离线
刚买的FC3000V2,试了两个rom image,均黑屏
是使用Win32DiskImager写入的。
离线
@lzgame02
天意如此,我也沒有辦法~@cddxhy
黑屏代表是目前沒有支援的FC3000型號
我是有依照 github 步驟 .....
但是到了 Run "make" 的時候 , 一開始就噴找不到 pspdev
明明 psp toolchain 有裝 , 裏頭的 export 路徑也照設的
就不知道為何掛在這最後一步 ....
离线
@司徒
一開始也是缺很多 lib .... 有幾招加快補缺
apt install xxxxxx
xxxxx =
1. 直接加上缺的 lib 名稱
2. 缺的 lib 名稱後面加 * or -dev*
3. 缺的 lib 名稱前面加 *
4. google ..... linux + lib 關鍵字 + not found , 找出缺的 lib 後來改名封裝到哪個 lib 中了 ....
我也是這樣補起來的 , 用虛擬機編譯大概 1個多小時就邊完了
虛擬機本來就比較慢 , 如果有更好的環境預估半小時內可以搞定 .....
离线
司徒有测试FC3000的FBA a320吗?
我根据这个模拟器的说明,似乎没有办法同时按L+R+start打开模拟的菜单,游戏里也无法退出游戏,只能强制关机,是键位的映射存在问题吗?
FBA a320的其他组合键,比如开关FPS显示,我也是一个都按不出来。
离线
@lzgame02
太好了,既然施主都已經查閱完畢了,那就加油了,司徒祝你早日脫離苦海~阿弥陀佛~
剛脫離苦海 .... 基本上還是編譯不出來
不過換個方式用 Hack 的方式 .... Hex 硬改
目前測試非常完美 .... 哈哈 ..... 反正能用就成了 ....
离线
司徒老大,加油,我也是trimui的和fc3000的拥有者,紧跟你的脚步!
离线
@司徒
看样子要修改fba a320的源代码才能调出菜单了。大致看了一下,在https://github.com/dmitrysmagin/fba-a320/tree/master/src/sdl-dingux/sdl_input.cpp里有如下代码(203-221行):
if ((keypc & BUTTON_SL) && (keypc & BUTTON_SR)) {
if (keypc & BUTTON_Y) {
ChangeFrameskip();
keypc &= ~BUTTON_Y;
} else if (keypc & BUTTON_B && !bPauseOn) {
StatedSave(nSavestateSlot);
keypc &= ~BUTTON_B;
} else if (keypc & BUTTON_A && !bPauseOn) {
StatedLoad(nSavestateSlot);
keypc &= ~BUTTON_A;
bPauseOn = 0;
} else if (keypc & BUTTON_START) {
keypc = keypad = 0;
SndPause(1);
gui_Run();
SndPause(0);
} else if (keypc & BUTTON_SELECT) ServiceRequest = 1;
}
else if ((keypc & BUTTON_START) && (keypc & BUTTON_SELECT)) P1P2Start = 1;
这应该是控制快捷操作的按键组合,把贴出的代码的第一行&& (keypc & BUTTON_SR)删掉,应该就可以避免L+R=MENU的困境了。
又或者,干脆用retrofw的fba-a320编译,retrofw所用的fba-a320修改了菜单的快捷组合键,可以避免按键冲突之尴尬。
代码可参考如下:https://github.com/retrofw/fba-a320/blob/master/src/sdl-dingux/sdl_input.cpp
只是不知道这个模拟器如何编译?
在下并没有编译过此类项目的经验,不知道司徒能否教授一下编译方法?
最近编辑记录 除恶务尽 (2021-07-09 23:07:12)
离线
司徒大佬研究完毕后,会开源trimui的buildroot和kernel吗?
离线
@除恶务尽
fba-a320的a68k只有支援x86和MIPS,你可以註解掉或者去找a68k for ARM,編譯步驟如下說明
diff Makefile
7,8c7,8
< CHAINPREFIX := /opt/mipsel-RetroFW-linux-uclibc
< CROSS_COMPILE := $(CHAINPREFIX)/usr/bin/mipsel-linux-
---
> CHAINPREFIX := /opt/miyoo
> CROSS_COMPILE := $(CHAINPREFIX)/bin/arm-linux-
45c45
< BUILD_A68K = 1
---
> #BUILD_A68K = 1
276c276
< CFLAGS = -fpermissive -O2 -G0 -march=mips32 -pipe -fno-builtin -fno-common -mno-shared -ffast-math \
---
> CFLAGS = -fpermissive -O2 -pipe -fno-builtin -fno-common -ffast-math \
編譯
$ cd
$ wget https://github.com/steward-fu/miyoo/releases/download/v1.0/toolchain.7z
$ 7za x toolchain.7z
$ sudo mv miyoo /opt
$ export PATH=$PATH:/opt/miyoo/bin
$ git clone https://github.com/retrofw/fba-a320
$ cd fba-a320
$ make
@sanikoyes
於結束維護後,司徒會放出所有源代碼,可以關注司徒的TRIMUI GitHub,司徒預設維護開發週期為一年,因此,距離釋出還有11個月,為何要結束開發後才釋出源代碼呢?因為我可不想再被說偷偷賣掉其它開發者的東西,人在做、天在看,說話要憑良心,人為何總是要打壓他人來提高自己的聲望呢?司徒最後只能選擇自保,切斷跟所有開發者的關聯,源代碼盡量自己從頭做起,這樣在司徒開發的期間,就不會有人說我偷偷賣掉他的人東西,避免紛爭,人心可畏,人言更可畏!
离线
司徒老哥,看到你又对miyoo 出手,让我又燃起了拯救我竖米的希望。等你开源后,我的竖米可能就有救了。我是DestinyCod
离线
@司徒
聽說 PSPDev 也有 docker 跟 Windows 版的
應該也可以試試看 .... 畢竟破解的方式不太正統 ....
离线
另外 分享下当年各个角落搜集整合的 miyoo 模拟器源码。 https://github.com/littlehui/miyoo-emu
特别是
FC:帧率优化后,支持振动。
FBA: z80 和 C68K用的 drz80和cylone汇编。 miyoo的fba-a320编译出来很慢。替换完汇编实现后,部分游戏可以满帧,但是有的游戏会破音。 发出来,如果能够帮上忙我会很开心。
离线
司徒大 剛用Win32DiskImager寫入FC3000 TF卡裡,開機後還是一樣原本畫面,請問哪裡操控錯誤 謝謝
最近编辑记录 george5497 (2021-07-10 15:02:23)
离线
@波贺顺顺
感謝支持
@lzgame02
感謝告知
@george5497
不好意思,你的機器無法支援,因為FC3000有太多變種的屏,所以黑屏,就是無法支援的意思
@littlehui
當初說我偷偷拿開發者的東西去賣,就是你GitHub裡面的那些開發者,從當初流出的截圖,他們還將此事告知你,我想你應該是不會忘記才是,以及如何批評XBOOT,我想這件事你應該也還記得,這些二流的開發者,我司徒何德何能敢拿來使用呢?你說是不是~事情過了,追究沒有任何意義,大家劃清界線就好~不過,如果可以,請幫我轉達,我目前在移植的東西,請高抬貴手,不要前來搗亂~感謝
离线
现在原来那个地方乌烟瘴气的,我早就不去了,都是一大堆发广告的和YY,真正玩机、讨论改机的已经绝迹,大陆的开源掌机圈能建立起来,起码一大半功劳是来自司徒兄当初为RS97移植系统的,这些人不感谢也就算了,还在那污蔑人,真是利欲熏心。
离线
离线
@司徒
感谢指导,但是不知道怎么回事,编译后的bin文件,在读取ROM完毕后,就黑屏死机没反应了。
@littlehui
你贴出的那个使用drz80和cylone的fba-a320,可有源头?至于Q sound无声的问题,OopsWare有提到过:
让人郁闷的 Q-Sound
用 Reesy 的 DrZ80 替换 Doze 后,运行总不能得到预计的结果。细读 Doze 代码后才发现,使用 Q-Sound 芯片的游戏ROM里,Z80代码是加密的,以游戏dino为例,128KB 的 cd_q.rom 文件经过解密后( 算法见 burn/capcom/kabuki.cpp )得到一个256K的内存,Zet 把这段内存分成两部分,分别映射为 MemFetch 和 MemFetchData 。Doze在模拟执行 Z80 的 ROM 时,OpCode 和 ImmData 分别来自 MemFetch 和 MemFetchData 。看来要对 DrZ80 做个大手术才行......
https://sites.google.com/site/oopsware2/finalburnalpha
最近编辑记录 除恶务尽 (2021-07-10 21:44:19)
离线
@司徒
老哥,抱歉让你想起伤心事,污蔑司徒老哥的人真是太可恶。但是上面说我记得的事情,我看的云里雾里的 老哥会不会是记错人了哈?不过这些都不重要。希望在这里司徒老哥不会被打扰到,移植更多更好玩的东西。
@除恶务尽
我贴出的fba-miyoo-playable 是在 https://github.com/retrofw/fba-a320 这个基础上改的。我能力有限搞不出来了,如果你有兴趣可以接着搞哈。
离线
我试了fc3000的固件,刷一次不行,二次就能开机,基本上还是适应的。现在个trimui装了仙剑,插卡住乌屏。甜着拔卡开机再插卡,如买?
离线
我给我的FC3000_V1版刷了Jutleys包(未换电阻,32G_TF卡),分两种情况:
1法,刷之后第一分区不动,仅从原出厂卡中拷贝部分游戏进去,作为测试(最终留有52M空余空间),第二分区进行了扩容,各主流模拟器均拷贝了一些ROM进去;接着插卡上电开机,按A原系统可以进入,没有问题;按B可以进新固件,第一次进,在非商业警示界面好像是停留了较长时间(可能心理作用。但感觉第二次比第一次快了一至二秒)。测试了两模拟器FC与SFC,在默认设置上好像FC模拟器有爆音小卡顿,跳帧为1后要好一些(后又再测试发现,此现象为个另游戏,如魂斗罗12IN1片头音乐有此问题,其余游戏均正常);SFC默认设置到是很流畅;其他等测试后在反馈;
2法.刷完镜像用DiskGenius将OD分区删除,调整FC3000分区至4G(格式仍保留FAT16+隐藏属性),其他空闲空间格式化后给OD分区用(FAT32),然后将原分区内容分别新分区,FC3000分区将原出厂卡所有内容拷入,OD分区主流模拟器拷入相应测试ROM,插卡上电开机,看到选择界面,原系统按A能进入,但模拟器游戏选择界面不能显示游戏清单;按B能进新固件,但卡在非商业警示画面不动了!
最近编辑记录 guwei94301 (2021-07-11 11:24:58)
离线
我试了fc3000的固件,刷一次不行,二次就能开机,基本上还是适应的。现在个trimui装了仙剑,插卡住乌屏。甜着拔卡开机再插卡,如买?
我的是霸王小子A66,固件升级到TrimuiUpdateV0.105.en,然后再将系统升级至Trimui_GMenuNX20210708最新版,也安装了司徒大大的仙剑,在原系统下是可以流畅运行仙剑的,Trimui_GMenuNX下看不到
离线
感谢司徒分享的横米超频资讯,等电阻到手就可以开干了。
离线
司徒,我更换了一张32G的SD卡,重新写入后,FC3000成功点亮。谢谢!
离线
trimui仙剑打斗时卡声音,吱吱声
离线
我的q8刷后开机花屏,打开机身后盖看了下,果然和司徒你的q8的排线规格有所不同......
离线
@lzgame02 请别冒充台湾同胞,打着司徒旗号,给司徒招黑。做人不是你这样子的,司徒己经费心解答了你的问题。
离线
我翻看了你之前在这个主题贴下发的回复,既然你都懂得自己搞环境了,自己补全库了,这点小事还是自己随便动一下手编译的好,如果不是小事那么也请不要用“那有空”开头作为请求,给大家感觉好像司徒大哥本人有欠你什么而你因为对方满足不了自己的要求只能退而求其次。
司徒大哥也只是靠兴趣发电,在“研究FC3000掌机的开源可行性”这个主题贴下我相信无论是司徒大哥还是其他关注这个主题帖的朋友都想看到更多围绕这款F1C100s核心的研究贴和讨论帖吧!
在关于“研究FC3000掌机的开源可行性”这个主题贴上,如果出不了力,也请不要拉后腿。也希望回复“求帮助一些跟司徒大哥发表主题无关的话题”可以通过其他方式联系司徒大哥,搞那些回复跟主题完全无关的话题,忽略和删帖我觉得是可以的。
我言辞可能比较尖利,如有冒犯万分抱歉。
离线
感谢司徒分享的横米超频资讯,等电阻到手就可以开干了。
我也买了1%精度的电阻,今天应该就到了!开心!
晚上开始搞!
离线
@lzgame02
你不是說已經做完Binary Patch完成了嗎?為何還需要編譯?你的問題,司徒已經說過沒有環境,建議你去PSP相關論壇討論,如果你在這樣繼續發言,後果自負~
@littlehui
這樣阿~那我了解了~另外,關於你GitHub上面的東西,二流的人格做出來的東西還是屬於二流等級,對司徒來說,完全沒有任何參考價值,說白話一點,垃圾做出來的東西還是垃圾,你GitHub上面的東西,我司徒一個也不會使用,不過,很高興你還可以繼續玩你的機器,建議你遠離那些人,不然哪天被賣了都不知道~
關於FC3000和Q8刷機問題,這兩台機器的屏有相當多的差異,司徒只能就手上的機器做移植,如果你刷機後,開機後黑屏,代表是沒有支援的型號,或許可以換張MicroSD卡或者讀卡機試試,如果依然是黑屏,請不要繼續操作,否則機器可能變磚,司徒不負擔任何責任~
此篇文章已經快破一萬的點閱率,討論的人員越來越多,很高興能夠讓大家一起參與討論,也因為這樣,好人壞人已經很難分辨,如果抱持挑釁的心態前來搗亂,後果自己負責~
司徒慢慢熟悉TRIMUI掌機之後,發現用料確實不錯,加上有自己獨特的官方系統,價格基本上跟小橫米相當,確實是一台相當不錯的小掌機,加上是司徒喜愛的小掌機,為此,司徒特地花了一些時間製作雙系統,目前已經完成,特此,分享給玩家使用,此次,一樣是基於江西恐龍和Jutleys底包製作,請勿使用於商業用途
江西恐龍刷機包:https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_od_jckl_no_roms.img.7z
Jutleys刷機包:https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_od_jutleys_no_roms.img.7z
快捷鍵
屏變亮:MENU + UP
屏變暗:MENU + DOWN
聲音變小:MENU + LEFT
聲音變大:MENU + RIGHT
司徒首先介紹一下超頻改機,目前電阻都是6.3K,電壓是1.12V
司徒把電阻改成如下160K和91K(必須使用1%精密電阻),可以超頻到1.2GHz,而且讓F1C200S的溫度保持正常,通過公式換算:(0.6 * (160K / 91K)) + 0.6 = 1.65V
實際測得的電壓1.62V
PS1 惡魔城,CPU=672MHz,關閉FrameSkip,55 FPS,CPU=91%
PS1 鐵拳3,CPU=672MHz,關閉FrameSkip,28 FPS,CPU=97%
PS1 惡魔城,CPU=1248MHz,關閉FrameSkip,60 FPS,CPU=81%
P.S. 從測試到的數據顯示,F1C200S超頻的效果,最高只有到1GHz,即使超頻到1.2GHz,效果依然只有1GHz的效能
原廠TRIMUI系統的閃屏問題
閃屏測試工具:https://github.com/steward-fu/trimui/releases/download/v1.0/TrimuiUpdateV9999_tearing.zip
OpenDingux系統保證沒有閃屏問題(驅動程式到硬體這段保證沒有閃屏問題)
閃屏測試工具:screen_tearing_test.zip
開機畫面(L鍵:OpenDingux系統,R鍵:原廠系統)
禁止商業用途
江西恐龍
Jutleys
針對Jutleys包,司徒加入中文化字型
遊戲畫面
目前司徒已經完成四台F1C100S系列掌機的刷機包製作,司徒相當感謝各位的支持,在此至上謝意,另外也相當感謝whycan論壇提供一個這麼好的地方讓司徒撰寫文章,尤其是管理員:暈哥、xboot、哇酷小二都是相當優秀的人才,也願意幫大家解惑,在這個年代,確實是相當了不起,在此特別致謝~不過,網站總是需要營運成本,如果大家有閒錢,可以捐獻給whycan網站,讓一個好網站可以再戰10年~
接下來的重點除了新內核和草食系統之外,就是模擬器優化,目前司徒第一個鎖定的模擬器是GNGEO模擬器,目前司徒看到的問題有:
1. 閃屏
2. 間歇卡頓
3. 大型遊戲無法執行
司徒會朝這三個方向改進,如果玩家有遇到GNGEO模擬器的其它問題,歡迎回報,一次針對一個模擬器優化,目前是GNGEO模擬器,非GNGEO模擬器問題,請不要回報,感謝
离线
TRIMUI也有了,撒花庆祝~
另外,司徒大大,我的q8刷后是花屏不是黑屏,这个也是屏幕型号不一致的原因吗?
最近编辑记录 fanelwin (2021-07-12 10:39:12)
离线
@司徒
大哥好!那个横米通过刷之前的底包加第二分区采用TRIMUI底包的文件是不是就能实现正常超频了?如果键值不同再重新拷贝覆盖横米的键值“gmenu2x/input.cfg”文件到对应位置是不是大概就能玩了 。
我买的电阻到了,今天晚上就可以快快乐乐的超频了!
离线
@yesiraperfect
目前那兩個刷機包的超頻設定有問題,沒有作用,所以這個部份讓我想一下如何實現比較好,你先把硬件改好~
玩開源掌機最重要就是讓自己快樂,很高興你可以快樂遊玩~
@司徒 我的FC 3000 刷入了jxkl包,超频那部分试过,不能做任何修改,改高一点点或改低一点点,都会死机。
供你参考。
离线
@cddxhy
死机正常,现在超频功能是不正常的。
离线
@司徒
trimui我两个包都刷了 江西恐龙包好像存在不少问题,模拟器路径主频保存不了,Suspend挂起后恢复不了,mame4all等添加不了
另外外国人的包没这些问题,刚刚开始测试
P.S: 我使用的分区软件是diskgen,OD分区好像只能缩小不能扩容?是需要把roms分区先删掉再扩容OD分区吗?
最近编辑记录 fanelwin (2021-07-12 17:29:31)
离线
横米机改装电阻已经完成!测试电压1.65,应该是正常的,然后插卡开机,在模拟器设置里发现CPU频率最高只能设置到900。
关机拔卡重新接入电脑,在ROMS-gmenu2x里打开gmenu2x.conf文件(我用的是写字板)然后把“cpuMAX=900”的900改成1200,保存。重新插卡开机,噢耶!模拟器最高频率可以调到1200了!我测试了一下PS模拟器的恶魔城游戏,感觉CPU频率设置确实没有生效,开场CPU占用满,帧数55+。
接下来就等司徒大哥更新系统了
离线
离线
哈~造成閃屏的兇手就是司徒,果然司徒命中帶屎~過程如下分析
如果底層驅動可以確保沒有閃屏問題,上層模擬器只要開啟SDL_DOUBLEBUF就可以解決閃屏問題,於是司徒追了一下代碼,發現GNGEO本身就有支援這個選項,位於src/blitter/soft.c
vsync = CF_BOOL(cf_get_item_by_name("vsync"));
sdl_flags |= (vsync?SDL_DOUBLEBUF:0);
選項預設是關閉的,位於src/conf.c
cf_create_bool_item("vsync", "Synchronise the display with VBLANK", 0, GN_FLASE);
在模擬器頁面可以手動設置
但是,詭異的事情發生了~設置Vsync true後,模擬器就黑屏,這...,難道又是需要有智慧的人才看得到?於是,司徒再度追的一下代碼,發現一個奇怪的設定,位於src/blitter/soft.c
#ifdef DEVKIT8000
SDL_Flip(screen);
#else
if (vsync)
SDL_Flip(screen);
else
SDL_UpdateRect(screen, 0, 0, 0, 0);
#endif
SDL_Flip(screen);
#endif
vsync做SDL_Flip()合理,但是,為何下一步還再做一次呢?這種情形,司徒只有在丁果A320 Dingux(非OpenDingux)上才看過,因為當初底層有一些問題,所以Toggle兩次才可以正確顯示,可是目前PocketGo、TRIMUI顯示驅動是沒有這樣的問題,這個行為有點怪異
於是司徒找了一下GNGEO GitHub代碼
Ref 1: https://github.com/linuxlinks/gngeo
Ref 2: https://github.com/sflores12/gngeo
這才發現,第二個SDL_Flip()是註解掉的,哈,司徒也不知道為何當初移植Miyoo GNGEO時,將此行代碼反註解掉,所以Vsync黑屏的問題就是這一行造成,司徒另外看一下當初移植給RS97的代碼,並沒有Miyoo GNGEO這個問題,哈~
司徒目前將預設選項做比較好的配置,使用者不需要做任何修改就可以使用
修復後的檔案(直接覆蓋掉原本檔案就可以):gngeo_fix_screentearing_20210713.zip
在PocketGo上測試,已經沒有閃屏問題
在TRIMUI上測試,已經沒有閃屏問題
另外,關於GNGEO家用版的使用,司徒大約說明一下,首先需要使用有支援的BIOS(司徒使用UBIOS v1.3),在顯示如下畫面時,同時按下A+B+C就可以做BIOS設定,Mode: CONSOLE就是家用機的意思
第一個選項設定
把Mode改成CONSOLE就可以
接著司徒就繼續找卡頓的問題,不過這個問題有點棘手,因為它跟RAM、SWAP有絕對關係...
离线
目前PocketGo、TRIMUI玩GNGEO遊戲不會閃屏,爽度確實增加不少,不過PocketGo比較可惜的設計是那個音量鍵,音量鍵其實不適合放在左右側,因為司徒玩格鬥遊戲時,會雙手托住,因此,這個音量鍵常常誤觸
最適合的位置在下方,不過目前已經被UART佔住,因此,司徒需要再度動刀
由於下方已經開口,因此,這個尺寸的音量鍵最適合
可惜司徒只有10K電阻,但是官方的是20K
首先移除原本的UART
焊接音量鍵
UART移到原本音量鍵的位置
還不錯~
UART母座密合的不錯
方便連接UART
慢慢接近完美的低價開源掌機
离线
@司徒
司徒大佬不用上班么
离线
@司徒
司徒大佬不用上班么
司徒良田千亩,别墅靠海,为什么要上班?
离线
最后这台白色掌机淘买的吗,不知什么价位?
离线
最后这台白色掌机淘买的吗,不知什么价位?
淘宝有卖的吧。应该是100+
离线
zpyws 说:最后这台白色掌机淘买的吗,不知什么价位?
淘宝有卖的吧。应该是100+
这机器现在淘宝已经卖到快200了
离线
yesiraperfect 说:zpyws 说:最后这台白色掌机淘买的吗,不知什么价位?
淘宝有卖的吧。应该是100+
这机器现在淘宝已经卖到快200了
我看了一下,没有低于200的:(
离线
离线
除恶务尽 说:yesiraperfect 说:淘宝有卖的吧。应该是100+
这机器现在淘宝已经卖到快200了
我看了一下,没有低于200的:(
闲鱼有100+的二手卖,印象里这个机子没那么贵啊。。。
离线
@司徒
刚刚下载更新了司徒大哥新更新的模拟器,但是发现自己的电脑里没有街机游戏文件 ,所以测试不了了。
离线
@yesiraperfect
OK
機器價格過高就不建議入手,畢竟低價開源掌機才是趨勢~
目前司徒大約測試了一下GNGEO模擬器卡頓問題,司徒使用KOF98測試,發現小橫米、TRIMUI、RG280M都有這個問題,那個卡頓現象,似乎是模擬器陷入一個奇怪狀態,導致在那0.5~1秒之間,整個模擬器呈現卡住狀態,音效也停止輸出(underrun occurred),KOF98的配置記憶體需要大約RAM 160MB,如果RG280M(CPU:JZ4770 + RAM:512MB)都會卡,那代表是模擬器有問題,這部份司徒會繼續追下去,不過,可能會花上一些時間,所以司徒會先切到IPS FC3000這一部份,Dingoonity論壇有老外可以幫忙司徒測試IPS FC3000,司徒會先看看有無機會移植OpenDingux到IPS FC3000掌機,後續有消息時,司徒在更新了~
离线
大佬 trimui刷机后typec耳机还可以用吗?
离线
哦 没有usb驱动,可惜了,原系统和外国人做的前端是可以用usbtypec的,蓝牙耳机也有人试过
离线
司徒大神辛苦了,坐等trimui的能超频的系统,电阻已经换好了。
离线
@司徒
试了一下,虽然在FC3000上有不可避免的撕裂,但这个GPsp的速度真的很不错!载入游戏有点慢,但大部分的GBA游戏速度都是全速。
不知道司徒演示图片的这个边框是怎么加载的?这个模拟器菜单里并没有看到相关载入边框的选项。
离线
司徒老大躺著中槍了
离线
@除恶务尽
將圖片檔名改成border.png,接著進入選單Graphics and Sound options,改成unscaled 3:2就可以~
關於超頻部份,司徒花了一點時間尋找GMenu2X(支援GameShow主題)的GitHub,可惜司徒最後並沒有找到這個GitHub,司徒就當做是它是在一個目前我無法取得的地方~
所以司徒就直接用MiyooCFW GMenu2X做修改,順便改回以前那種簡潔的GUI~
GMenu2X修復超頻問題(直接覆蓋就可以):gmenunx_fix_overclock.zip
src/gmenu2x.cpp
#if defined(TARGET_MIYOO)
static uint32_t oc_table[] = {
((96 * 2) << 16) | ((1 << 8) | (3 << 4)),
((96 * 3) << 16) | ((2 << 8) | (3 << 4)),
((96 * 4) << 16) | ((3 << 8) | (3 << 4)),
((96 * 5) << 16) | ((4 << 8) | (3 << 4)),
((96 * 6) << 16) | ((5 << 8) | (3 << 4)),
((96 * 7) << 16) | ((6 << 8) | (3 << 4)),
((96 * 8) << 16) | ((7 << 8) | (3 << 4)),
((96 * 9) << 16) | ((8 << 8) | (3 << 4)),
((96 * 10) << 16) | ((9 << 8) | (3 << 4)),
((96 * 11) << 16) | ((10 << 8) | (3 << 4)),
((96 * 12) << 16) | ((11 << 8) | (3 << 4)),
((96 * 13) << 16) | ((12 << 8) | (3 << 4)),
((96 * 14) << 16) | ((13 << 8) | (3 << 4)),
((96 * 15) << 16) | ((14 << 8) | (3 << 4)),
};
int oc_choices[] = {(2*96), (3*96), (4*96), (5*96), (6*96), (7*96), (8*96), (9*96), (10*96), (11*96), (12*96), (13*96), (14*96), (15*96)};
int oc_choices_size = sizeof(oc_choices)/sizeof(int);
#endif
OR 0x80000000
#elif defined(TARGET_MIYOO)
uint32_t x, v;
uint32_t total=sizeof(oc_table)/sizeof(uint32_t);
for(x=0; x<total; x++){
if((oc_table[x] >> 16) >= mhz){
memregs[0] = (1 << 31) | (oc_table[x] & 0x0000ffff);
break;
}
}
INFO("Set CPU clock: %d(0x%08x)", mhz, v);
#endif
回歸原本的純淨~
預設CPU跑672MHz
小橫米目前司徒是超頻到1.2GHz(最大可以設定到1.4GHz)
跑起來的效果應該是這樣,不過,因為RAM不足,跳動比較大,PS1預設是關閉FrameSkip的,測試完畢,建議開啟FrameSkip,玩遊戲比較順暢~
TRIMUI的純淨界面
F1C200S的超頻效果只有1GHz(最大可以設定到1.4GHz)~
跑起來的效果應該是這樣,不過,因為RAM不足,跳動比較大,PS1預設是關閉FrameSkip的,測試完畢,建議開啟FrameSkip,玩遊戲比較順暢~
由於歷史因素,系統按鍵或者設定都是比較混亂,大家就先忍痛使用吧~等之後有時間,司徒在整理了~
离线
@除恶务尽关于GBA模拟器司徒大哥上面发了一个单独的支持滤镜和修复撕裂的GBA模拟器核心,需要重新建立一个程序链接,你翻一下上面的回复,我在回复里应该写了大概要怎么新建程序链接了。
离线
离线
司徒大哥,我忘了说,最新发布的TRIMUI刷机包好像没有放最新的GPSP,应该没放吧。。。。记不清了。
离线
gmenunx_fix_overclock.zip
还有我下载的这个10kb压缩包打开就提示损坏或错误
哦 明白了 下载要进入网站的下载后台才行,不能用软件直接下
最近编辑记录 fanelwin (2021-07-15 10:00:23)
离线
@yesiraperfect
不好意思,目前都是一邊修復一邊釋出,所以是有一點混亂,先忍耐一下,自己更新~等司徒製作好草食系統後,會一次大更新~
没事没事,这不上面有坛友回复说GPSP有撕裂嘛,我就自己下载了看了一下,我还是非常鼓励大家从第一帖看到最后,这样司徒大哥的辛苦、心里路程和其中遇到的波折才能让大家有所了解。
我已经覆盖了司徒大哥最新放出的新gmenu2x!发现一个非常有意思的现象,就是用旧的gmenu文件启动PS模拟器玩恶魔城在复杂场景无法满足60帧,但在能满足60帧的场景CPU占用显示的却比新版gmenu超频到1152时要低一些,不过用新gmenu超频到1152时同样的复杂场景是可以满60帧的。
更新:发现新gmenu2x在部分场景(开机,退出游戏,关机)时会闪过黄色或者是黄绿色画面。不知是司徒大哥特意设计还是BUG。
旧版
新版
旧版
新版
最近编辑记录 yesiraperfect (2021-07-15 10:43:46)
离线
@司徒 @yesiraperfect
感谢二位,已经试验成功
最近编辑记录 除恶务尽 (2021-07-16 07:55:20)
离线
@yesiraperfect
圣剑传说玛娜传奇 超频后能玩吗?
离线
看到老大的硬改超頻,自己想了想,有什麼掌機本來是廢殘,如果能超頻變成可以一玩……?
有了!! RetroMini(RS90) ,主要玩GBA/GB,CPU主頻是384MHz,刷了開源系統後可超頻到456MHz,但玩GBA依然不完美,
如果硬改後能超到7XXMHz不就完美?
可惜查看cpu原來是 JZ4725B,還沒有大神有興趣研究……
好吧,放下執念,拿起小橫米首先去換換電阻
离线
其實,司徒不是不玩RetroMini(RS90),是因為有一些因素存在,導致司徒沒有繼續玩RS90~
事情是這樣的,多年前,OpenDingux團隊發布RS90的OD系統,網友告訴司徒這一個好消息,於是,司徒馬上安裝測試,發現OD團隊還是蠻強的,竟然可以移植成功,不過,司徒發現沒有SWAP支援,於是,司徒加入SWAP支援並且重新編譯Kernel和Buildroot,接著發布,SWAP補丁、系統補丁、PS1模擬器,但是,OD團隊過沒多久又發布新系統,但是,還是一樣沒有支援SWAP,當然在發布之前,已經有很多人跟他們反應這個問題,但是就是不加入SWAP支援,只有選擇使用ZRAM選項,不過,這代表司徒又要重新做一次補丁,這...,司徒不可能一直花時間再做補丁吧~接著,他們開發者在IRC的聊天紀錄被人截圖傳到discord,意思是司徒搞亂了一些東西,所以最新的PCSX4ALL代碼不會上傳到GitHub公開,這不是擺明要封殺司徒嗎?當初RetroGame(RS97),司徒在移植PCSX4ALL時,你們開發人員還指導司徒關閉SHM選項,怎麼變成是我在搞亂一切呢?天意如此,我也只能順從~於是,我刪除所有RS90開發的東西,從此再也沒有去玩RS90~
不過,看你心心念念RS90超頻,司徒就來個番外篇吧~司徒看了一下JZ4725B手冊,發現有兩個電壓應該是跟超頻有關聯,那就是VDDPLL和VDDCORE
君正在手冊上寫建議電壓是1.8V,不過最大電壓則是寫上2.5V,這...,你是叫司徒操你的意思嗎?
司徒確認一下RetroMini(RS90)的電壓腳位,都是連接到VCORE_1_8V
VCORE_1_8V則是由WD1011EA驅動
司徒翻了一下手冊,找出電壓計算公式
目前是200K和100K電阻,換算電壓則是:0.6 * (1 + (200K / 100K)) = 1.8V
果然是精密電阻
司徒手上剛好有7.5K和2.7K電阻,換算電壓則是:0.6 * (1 + (7.5K / 2.7K)) = 2.27V
換裝完畢
測量到的電壓則是2.25V
接著,司徒發現系統上沒有/dev/mem,這...
而且超頻選項只有到456MHz,這...
於是,司徒抓了OpenDingux Kernel 5.1.0並且加入/dev/mem的支援
但是,更新Kernel後,發現USB有問題,司徒無法登入RS90操作,於是司徒又補上RNDIS的配置
萬事具備只欠東風
接著司徒查了一下PLL Register
CPU頻率的公式:(12MHz * (M + 2)) / (N + 2)
君正自己都說可以到500MHz...
接著,司徒使用Snes9x4D模擬器並且把頻率設定到456MHz
雖然Snes9x4D沒有關閉FrameSkip的選項,不過,還是勉強可以當作一個比較基準,CPU=456MHz時,FPS=21
超頻程式
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <time.h>
int main(int argc, char* argv[])
{
int fd = open("/dev/mem", O_RDWR);
if(fd < 0){
printf("failed to open /dev/mem\n");
return -1;
}
uint32_t M=0, N=0;
uint8_t *mem = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x10000000);
if(mem == NULL){
close(fd);
printf("failed to mmap memory\n");
return -1;
}
printf("MEM: 0x%08x\n", mem);
printf("Cur CPCCR: 0x%08x\n", *((uint32_t*)(mem + 0x00)));
printf("Cur CPPCR: 0x%08x\n", *((uint32_t*)(mem + 0x10)));
printf("Cur CPPSR: 0x%08x\n", *((uint32_t*)(mem + 0x14)));
// (12MHz * (84 + 2)) / (0 + 2) = 516MHz
M = 84;
N = 0;
*((uint32_t*)(mem + 0x10)) = (M << 23) | (N < 18) | 0x00000520;
printf("New CPCCR: 0x%08x\n", *((uint32_t*)(mem + 0x00)));
printf("New CPPCR: 0x%08x\n", *((uint32_t*)(mem + 0x10)));
printf("New CPPSR: 0x%08x\n", *((uint32_t*)(mem + 0x14)));
munmap(mem, 4096);
close(fd);
return 0;
}
登入RS90後,啟動超頻程式,CPU從456MHz超頻到516MHz
P.S. 司徒測試後,發現516MHz是最大極限
CPU=516MHz時,FPS=30
或許是電壓不足,導致CPU卡在516MHz,於是進階超頻登場,司徒使用4.7K和1.5K電阻,換算電壓則是:0.6 * (1 + (4.7K / 1.5K)) = 2.48V
量測到的電壓是2.45V,不過,CPU頻率依舊卡在516MHz
司徒心想,超級賽亞人也是慢慢變身,才達到終極型態,因此,可能又是電壓不足的原因造成,於是,442K和120K電阻登場,換算電壓則是:0.6 * (1 + (442K / 120K)) = 2.81V
量測到的電壓是2.84V,不過,CPU頻率依舊卡在516MHz
雖然從目前測試到的數據顯示,JZ4725B最高的CPU頻率就是516MHz,不過,司徒好奇,如果電壓再繼續加上去呢?搞不好,它真的可以變身成最強型態...,於是,442K和105K電阻登場,換算電壓則是:0.6 * (1 + (442K / 105K)) = 3.13V
量測到的電壓是3.21V,不過,CPU頻率依舊卡在516MHz,因此,JZ4725B的最高CPU頻率應該就是516MHz
最後,司徒派出二姐量測溫度,發現MIPS果然沒有ARM來得激情...
結論:
司徒只是藉由實驗說明JZ4725B還是可以繼續超頻到516MHz,OpenDingux團隊是否加入這些超頻選項,我無從插手~有任何需求,請建議給OpenDingux團隊,不要建議給司徒,感謝~
离线
霸王小子新出了个Q20 MINI的小掌机,估计是小横米的换壳机,2.4寸全贴合的ips屏。
离线
我需要拜托司徒大哥一件事。。。我帮朋友改TRIMUI电阻,眼花吹错电阻把第一排的两个电阻吹下来找不到了 ,大哥抽时间帮忙量一下这两个电阻的参数,我好买来焊上。。
就是图中这两个
离线
我看了下Q20 Mini參數是118mm x 54mm x 15mm,而小橫米則是123mm x 56mm x 14mm,竟然如此迷你~不過那價格,如果落在150RMB,就很好,可惜了~
刚出来的估计是贵点,210可以买到,估计过些时候会便宜的,如果q20 mini是f1c100s的主控,司徒大神会出手盘它吗?
离线
@司徒
太谢谢司徒大哥了!可真是救了命了
离线
@司徒,提升cpu主频后,如果某些模拟器性能无法再提升了,这个时候得考虑提升ddr的主频了,我之前测试过f1c100s的ddr带宽特别低,不到100MB/S,官方默认运行的ddr频率很低,应该是312MHZ,如果能提升下ddr的频率,带宽问题应该可以改善。结合主频的提升,很多模拟器估计可以流畅运行了。ddr也可以尝试下加压,极限压榨f1c100s的能力
离线
謝謝司徒分享說明,希望他們或其他大神看到超頻的可行性來個新固件,
繼續關注小橫米
离线
我看了下Q20 Mini參數是118mm x 54mm x 15mm,而小橫米則是123mm x 56mm x 14mm,竟然如此迷你~不過那價格,如果落在150RMB,就很好,可惜了~
估摸着,那个Q20 Mini应该又是miyoo原版电路直接改版的,屏估计都是一样的,
所以可以直接用miyoo的那套开源系统,美其名曰司徒开源系统,哈哈哈!
miyoo老板真是傻,把电路直接公布出来,结果让同行抢了自己的生意。
离线
@xboot
F1C100S里面内置的是一颗DDR2,现在核心频率仅有156MHZ,还有很大提升空间,可以尝试加压下,看看DDR频率能提升到多少,频率提升跟带宽基本是线性关系,和CPU主频提升一样,效果都是很明显的。
VCC-DRAM现在默认应该是2.5V,DRAM参考电压是它的1/2,只要提升VCC-DRAM电压就可以超频了。
这里有篇文章描述DDR频率相关的概念,可以看看。
https://blog.csdn.net/qq_29809781/article/details/89421988
最近编辑记录 xboot (2021-07-19 09:23:59)
离线
简单做了下测试,不加电压的情况下,默认2.5V
156MHZ核心频率
xboot: /# wboxtest benchmark
[benchmark]-[memcmp]
Bandwidth: 29.441MB/s
[benchmark]-[memcpy]
Bandwidth: 57.540MB/s
[benchmark]-[memmove]
Bandwidth: 57.540MB/s
[benchmark]-[memset]
Bandwidth: 283.500MB/s
xboot: /# wboxtest dma benchmark
[dma]-[benchmark]
Bandwidth: 4.853MB/s
204MHZ核心频率
xboot: /# wboxtest benchmark
[benchmark]-[memcmp]
Bandwidth: 32.083MB/s
[benchmark]-[memcpy]
Bandwidth: 76.347MB/s
[benchmark]-[memmove]
Bandwidth: 76.347MB/s
[benchmark]-[memset]
Bandwidth: 444.555MB/s
xboot: /# wboxtest dma benchmark
[dma]-[benchmark]
Bandwidth: 6.290MB/s
当DDR的核心频率从156MHZ,提升到204MHZ时,DDR的带宽提升了32.68%
离线
@怀旧堂
原理圖是不小心被我在XBOOT群放出來的~哈,因為,謝工希望我可以延遲六個月後才發布開源資料,只是當初不小心先把原理圖放出來,哈~我終於了解為何我會被黑了~哈
@xboot
薑果然是老的辣~你這個建議真的很有感覺~DRAM從156MHz提升到204MHz後,Kernel整體效能明顯提昇~另外,想請問一下,204MHz是如何測試出來的?我應該可以慢慢手動加大MHz測試,對吧?
DRAM 156MHz
[ 0.900000] ALSA device list:
[ 0.900000] #0: pocketgo audio card
[ 0.910000] Waiting for root device /dev/mmcblk0p1...
[ 0.950000] mmc0: host does not support reading read-only switch, assuming write-enable
[ 0.970000] mmc0: new high speed SDHC card at address aaaa
[ 0.970000] mmcblk0: mmc0:aaaa SL08G 7.40 GiB
[ 0.980000] mmcblk0: p1 p2
[ 1.020000] VFS: Mounted root (vfat filesystem) readonly on device 179:1.
[ 1.030000] devtmpfs: mounted
[ 1.030000] Freeing unused kernel memory: 1024K
[ 1.550000] FAT-fs (mmcblk0p2): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 3.020000] Adding 262140k swap on /mnt/.swap.img. Priority:-2 extents:2 across:1687476k SSFS
DRAM 204MHz
[ 0.860000] ALSA device list:
[ 0.860000] #0: pocketgo audio card
[ 0.870000] Waiting for root device /dev/mmcblk0p1...
[ 0.910000] mmc0: host does not support reading read-only switch, assuming write-enable
[ 0.930000] mmc0: new high speed SDHC card at address aaaa
[ 0.930000] mmcblk0: mmc0:aaaa SL08G 7.40 GiB
[ 0.940000] mmcblk0: p1 p2
[ 0.980000] VFS: Mounted root (vfat filesystem) readonly on device 179:1.
[ 0.980000] devtmpfs: mounted
[ 0.990000] Freeing unused kernel memory: 1024K
[ 1.470000] FAT-fs (mmcblk0p2): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 2.880000] Adding 262140k swap on /mnt/.swap.img. Priority:-2 extents:2 across:1687476k SSFS
离线
全志的DDR,是每24M一档,核心频率你可以每12M步进一下,试试能到多高。带宽测试,linux下,你可以用tinymembench这个程序来测试,测试结果比较详细。
离线
@xboot
了解~感謝啦~那我找時間好好研究一下DRAM超頻,哈~
小橫米,CPU=1.2GHz
PS1 惡魔城 (關閉FrameSkip),DRAM=204MHz,CPU=51%,FPS=60 (DRAM=156MHz,CPU=72%,FPS=60)
TRIMUI,CPU=1.2GHz
PS1 惡魔城 (關閉FrameSkip),DRAM=204MHz,CPU=53%,FPS=60 (DRAM=156MHz,CPU=81%,FPS=60)
對於RAM不足,需要大量依賴SWAP的F1C100S,超頻DRAM後,效果明顯提昇~
离线
SFC 性能 能提升到什么情况?
离线
小橫米 (SanDISK 8GB C10),PocketSNES 新機動戰記 (關閉FrameSkip),CPU=1.2GHz,DRAM=156MHz
小橫米 (SanDISK 8GB C10),PocketSNES 新機動戰記 (關閉FrameSkip),CPU=1.2GHz,DRAM=204MHz
TRIMUI (TOSHIBA M203 16GB),PocketSNES 新機動戰記 (關閉FrameSkip),CPU=1.2GHz,DRAM=156MHz
TRIMUI (TOSHIBA M203 16GB),PocketSNES 新機動戰記 (關閉FrameSkip),CPU=1.2GHz,DRAM=204MHz
离线
牛牛牛牛牛~!这不是口吃,是回声,f1c100s越来越好用了!
离线
司徒補一下tinymembench測試數據,供日後參考使用
測試機器:小橫米PocketGo (RAM: 32MB)
測試工具:tinymembench (Test Size: 8MB)
CPU=672MHz, DRAM=156MHz
=== Memory bandwidth tests ===
C copy backwards : 83.7 MB/s (4.4%)
C copy backwards (32 byte blocks) : 95.5 MB/s
C copy backwards (64 byte blocks) : 95.4 MB/s
C copy : 95.6 MB/s
C copy prefetched (32 bytes step) : 95.2 MB/s
C copy prefetched (64 bytes step) : 95.6 MB/s
C 2-pass copy : 80.9 MB/s
C 2-pass copy prefetched (32 bytes step) : 81.6 MB/s
C 2-pass copy prefetched (64 bytes step) : 80.6 MB/s (0.1%)
C fill : 283.7 MB/s
C fill (shuffle within 16 byte blocks) : 283.7 MB/s
C fill (shuffle within 32 byte blocks) : 283.7 MB/s
C fill (shuffle within 64 byte blocks) : 283.7 MB/s
---
standard memcpy : 97.4 MB/s
standard memset : 283.7 MB/s
---
ARM fill (STRD) : 283.7 MB/s
ARM fill (STM with 8 registers) : 544.2 MB/s
ARM fill (STM with 4 registers) : 544.2 MB/s
ARM copy prefetched (incr pld) : 128.8 MB/s
ARM copy prefetched (wrap pld) : 128.8 MB/s
ARM 2-pass copy prefetched (incr pld) : 111.9 MB/s
ARM 2-pass copy prefetched (wrap pld) : 111.9 MB/s
=== Framebuffer read tests ===
ARM copy (from framebuffer) : 128.9 MB/s
ARM 2-pass copy (from framebuffer) : 110.1 MB/s
=== Memory latency test ===
block size : single random read / dual random read
1024 : 1.0 ns / 1.9 ns
2048 : 1.1 ns / 2.3 ns
4096 : 1.2 ns / 2.5 ns
8192 : 1.4 ns / 2.7 ns
16384 : 1.9 ns / 3.6 ns
32768 : 109.1 ns / 226.5 ns
65536 : 177.1 ns / 364.7 ns
131072 : 211.7 ns / 434.9 ns
262144 : 229.7 ns / 471.3 ns
524288 : 369.6 ns / 751.2 ns
1048576 : 458.2 ns / 928.7 ns
2097152 : 501.5 ns / 1015.4 ns
4194304 : 521.8 ns / 1056.0 ns
8388608 : 533.2 ns / 1078.8 ns
16777216 : 539.3 ns / 1090.9 ns
CPU=1.2GHz, DRAM=156MHz
=== Memory bandwidth tests ===
C copy backwards : 86.8 MB/s (4.3%)
C copy backwards (32 byte blocks) : 98.4 MB/s
C copy backwards (64 byte blocks) : 98.4 MB/s
C copy : 98.4 MB/s
C copy prefetched (32 bytes step) : 98.2 MB/s
C copy prefetched (64 bytes step) : 98.4 MB/s
C 2-pass copy : 85.3 MB/s (0.2%)
C 2-pass copy prefetched (32 bytes step) : 86.0 MB/s
C 2-pass copy prefetched (64 bytes step) : 85.3 MB/s
C fill : 284.2 MB/s
C fill (shuffle within 16 byte blocks) : 284.2 MB/s
C fill (shuffle within 32 byte blocks) : 284.2 MB/s
C fill (shuffle within 64 byte blocks) : 284.2 MB/s
---
standard memcpy : 101.4 MB/s
standard memset : 284.1 MB/s
---
ARM fill (STRD) : 284.2 MB/s
ARM fill (STM with 8 registers) : 547.4 MB/s
ARM fill (STM with 4 registers) : 545.2 MB/s
ARM copy prefetched (incr pld) : 136.7 MB/s
ARM copy prefetched (wrap pld) : 136.7 MB/s
ARM 2-pass copy prefetched (incr pld) : 119.0 MB/s
ARM 2-pass copy prefetched (wrap pld) : 119.0 MB/s
=== Framebuffer read tests ===
ARM copy (from framebuffer) : 136.3 MB/s
ARM 2-pass copy (from framebuffer) : 117.0 MB/s
=== Memory latency test ===
block size : single random read / dual random read
1024 : 0.5 ns / 1.0 ns
2048 : 0.6 ns / 1.2 ns
4096 : 0.7 ns / 1.3 ns
8192 : 0.7 ns / 1.4 ns
16384 : 1.0 ns / 2.0 ns
32768 : 114.6 ns / 234.4 ns
65536 : 181.0 ns / 367.4 ns
131072 : 214.6 ns / 434.9 ns
262144 : 232.1 ns / 469.9 ns
524288 : 363.2 ns / 732.2 ns
1048576 : 436.1 ns / 878.0 ns
2097152 : 487.8 ns / 981.7 ns
4194304 : 508.1 ns / 1022.2 ns
8388608 : 519.3 ns / 1044.6 ns
16777216 : 525.2 ns / 1056.4 ns
CPU=672MHz, DRAM=204MHz
=== Memory bandwidth tests ===
C copy backwards : 110.1 MB/s (0.9%)
C copy backwards (32 byte blocks) : 125.6 MB/s
C copy backwards (64 byte blocks) : 125.6 MB/s
C copy : 125.6 MB/s
C copy prefetched (32 bytes step) : 124.7 MB/s
C copy prefetched (64 bytes step) : 125.6 MB/s
C 2-pass copy : 103.7 MB/s (0.1%)
C 2-pass copy prefetched (32 bytes step) : 104.9 MB/s
C 2-pass copy prefetched (64 bytes step) : 103.7 MB/s
C fill : 375.9 MB/s
C fill (shuffle within 16 byte blocks) : 375.7 MB/s
C fill (shuffle within 32 byte blocks) : 375.9 MB/s
C fill (shuffle within 64 byte blocks) : 375.8 MB/s
---
standard memcpy : 125.6 MB/s
standard memset : 375.8 MB/s
---
ARM fill (STRD) : 375.8 MB/s
ARM fill (STM with 8 registers) : 717.0 MB/s
ARM fill (STM with 4 registers) : 717.1 MB/s
ARM copy prefetched (incr pld) : 165.6 MB/s
ARM copy prefetched (wrap pld) : 165.6 MB/s
ARM 2-pass copy prefetched (incr pld) : 142.9 MB/s
ARM 2-pass copy prefetched (wrap pld) : 143.0 MB/s
=== Framebuffer read tests ===
ARM copy (from framebuffer) : 165.3 MB/s
ARM 2-pass copy (from framebuffer) : 141.0 MB/s
=== Memory latency test ===
block size : single random read / dual random read
1024 : 1.0 ns / 1.9 ns
2048 : 1.1 ns / 2.3 ns
4096 : 1.2 ns / 2.5 ns
8192 : 1.3 ns / 2.6 ns
16384 : 1.8 ns / 3.3 ns
32768 : 80.6 ns / 168.4 ns
65536 : 133.0 ns / 275.8 ns
131072 : 159.6 ns / 330.1 ns
262144 : 173.5 ns / 358.1 ns
524288 : 280.7 ns / 572.9 ns
1048576 : 344.2 ns / 700.1 ns
2097152 : 382.2 ns / 776.2 ns
4194304 : 398.1 ns / 808.0 ns
8388608 : 407.0 ns / 825.8 ns
16777216 : 411.7 ns / 835.2 ns
CPU=1.2GHz,DRAM=204MHz
=== Memory bandwidth tests ===
C copy backwards : 114.8 MB/s (0.5%)
C copy backwards (32 byte blocks) : 129.9 MB/s
C copy backwards (64 byte blocks) : 129.9 MB/s
C copy : 130.4 MB/s
C copy prefetched (32 bytes step) : 129.5 MB/s
C copy prefetched (64 bytes step) : 130.4 MB/s
C 2-pass copy : 110.9 MB/s (3.6%)
C 2-pass copy prefetched (32 bytes step) : 111.1 MB/s
C 2-pass copy prefetched (64 bytes step) : 110.9 MB/s
C fill : 376.5 MB/s
C fill (shuffle within 16 byte blocks) : 376.6 MB/s
C fill (shuffle within 32 byte blocks) : 376.7 MB/s
C fill (shuffle within 64 byte blocks) : 376.5 MB/s
---
standard memcpy : 130.7 MB/s
standard memset : 376.7 MB/s
---
ARM fill (STRD) : 376.5 MB/s
ARM fill (STM with 8 registers) : 721.4 MB/s
ARM fill (STM with 4 registers) : 720.4 MB/s
ARM copy prefetched (incr pld) : 175.1 MB/s
ARM copy prefetched (wrap pld) : 175.1 MB/s
ARM 2-pass copy prefetched (incr pld) : 152.9 MB/s
ARM 2-pass copy prefetched (wrap pld) : 152.9 MB/s
=== Framebuffer read tests ===
ARM copy (from framebuffer) : 174.8 MB/s
ARM 2-pass copy (from framebuffer) : 150.7 MB/s
=== Memory latency test ===
block size : single random read / dual random read
1024 : 0.5 ns / 1.0 ns
2048 : 0.6 ns / 1.2 ns
4096 : 0.7 ns / 1.3 ns
8192 : 0.7 ns / 1.4 ns
16384 : 1.0 ns / 1.8 ns
32768 : 86.0 ns / 177.0 ns
65536 : 137.5 ns / 280.5 ns
131072 : 163.7 ns / 333.1 ns
262144 : 177.3 ns / 360.1 ns
524288 : 276.8 ns / 559.5 ns
1048576 : 338.0 ns / 682.1 ns
2097152 : 372.8 ns / 752.0 ns
4194304 : 387.7 ns / 781.7 ns
8388608 : 396.1 ns / 798.5 ns
16777216 : 400.6 ns / 807.5 ns
測試後,司徒有兩個方向要進行:
1. DRAM=204MHz,會有崩潰的疑慮,因此,需要做一個實驗,找出適合使用的DRAM電壓
2. MicroSD高速卡是否有超頻潛能,需要研究一下
离线
@司徒
要開個別的專區嗎 , 感覺這題問倒很多人說 ......
肯定老外藏一手 , 給殘的代碼 ....
從 Linux 編到 windows 再到 VC2003 都有一堆錯 ....
感覺上留一手 , 還是算了不浪費時間專研了 .... @@ ...
离线
@lzgame02
你指的是GNGEO模擬器嗎?
雖身攜帶小橫米、TRIMUI出門,空閒時,拿出來搓兩把格鬥遊戲,這是司徒最想要的掌機,如果GNGEO模擬器都無法優化好,那等於是提早舉白旗放棄這兩台掌機,所以,即使花掉剩下的十個月時間優化GNGEO模擬器,司徒還是會做,盡力做到最好,而經由司徒測試,發現只要CPU使用率可以從目前的100%降到75%,可以有效壓制卡頓問題,所以硬件超頻、軟件優化同時進行下,司徒覺得一定有機會解決卡頓問題~
這個貼子相當混亂,什麼問題都混在一起,真是相當抱歉~因為都是同一系列CPU,加上,掌機怎麼玩就是那幾個模擬器,因此,司徒才想說就當作一個總貼研究,避免問題發散,然而,模擬器再不突破優化,恐怕只能停留在過去的美好,為了可以出門搓兩把格鬥遊戲,司徒只能盡力,能走多遠,但看天意~
所以結論就是,司徒不會再開其它專區討論,然後,會一直專研下去,直到GNGEO模擬器達到司徒的要求,如果玩家無法等待,請玩其它符合你需求的掌機~
离线
运行内存也可以超频了,牛皮普拉斯👍
离线
这商家没底线了吧。。。我猜肯定卖的不便宜。
离线
kit0072 说:这商家没底线了吧。。。我猜肯定卖的不便宜。
卖220,就是个加大换壳的横米
离线
感謝xboot提供DRAM超頻資訊,司徒做了一些實驗測試,發現DRAM電壓2.8V,DRAM可以超頻到252MHz,這是可以穩定工作的電壓以及頻率,搭配CPU=1.2GHz,司徒只能說效果真是相當不可思議!測試GNGEO模擬器,使用CPU=1.2GHZ、DRAM=252MHz,測試KOF98,FPS可以穩定跑到60,而且CPU使用率降到55%,真是太神奇了傑克 !
預設電阻是14.8K和46.8K,電壓輸出:2.5V
第1組測試登場,電阻120K搭配442K,電壓輸出:0.6 * (1 + (442K / 120K)) = 2.81V
實際測得電壓2.78V,F1C100S溫度正常,DRAM可以超頻到252MHz,可以開機進入系統
第2組測試登場,電阻120K搭配464K,電壓輸出:0.6 * (1 + (464K / 120K)) = 2.92V
實際測得電壓2.89V,F1C100S溫度正常,DRAM已經開始不穩定,即使降頻到240MHz,依然不穩定
第3組測試登場,電阻105K搭配442K,電壓輸出:0.6 * (1 + (442K / 105K)) = 3.13V
實際測得電壓3.12V,F1C100S溫度正常,DRAM已經無法工作
司徒接著會依序整理FC3000、小橫米、TRIMUI的超頻比較圖並且釋出補丁給玩家測試~
离线
Q8掌機已經確定不會在更新,而FC3000掌機,沒意外的話,這是最後一次更新,在此次更新中,司徒把FC3000的按鍵連按問題也一併修掉,如果玩家打完補丁後,還是發現有問題,再麻煩回報給司徒,而停止更新的機器,司徒會開始著手整理源代碼,秉持開源的精神,於整理後發布在司徒的GitHub~司徒最後的重點就是放在小橫米和TRIMUI掌機~
FC3000 DRAM超頻補丁(包含Kernel補丁):https://github.com/steward-fu/fc3000/releases/download/v1.0/fc3000_dram_patch.zip
由於DRAM-VCC是使用固定2.5V輸出,因此,無法使用電阻方式改機,可以從如下位置割斷PCB,然後使用3.3V轉2.8V穩壓IC供電,因為DRAM超頻,必須確保DRAM-VCC有2.8V電壓
由於司徒目前手上沒有3.3V轉2.8V穩壓IC,因此,使用外部供電方式,不過,無法正確運作...
在沒有改機的狀態下,有些機器(不是每一台都可以)可以把DRAM超頻到204MHz,因此,司徒製作了一個補丁工具,玩家只要執行run.sh就可以打補丁
A:DRAM超頻到156MHz(按鍵連按問題也會一起更新)
B:DRAM超頻到204MHz(按鍵連按問題也會一起更新)
X:DRAM超頻到252MHz(按鍵連按問題也會一起更新)
Y:離開補丁工具
更新中
更新完成,重新開機就可以生效
左上角會顯示目前DRAM超頻速度
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=42
PCSX ReARMed,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=60,CPU使用率89%
GNGEO,KOF98,CPU=1.2GHZ,DRAM=156MHz,FPS=60,CPU使用率80%
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=204MHz,FPS=51
PCSX ReARMed,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=204MHz,FPS=60,CPU使用率79%
GNGEO,KOF98,CPU=1.2GHZ,DRAM=204MHz,FPS=60,CPU使用率68%
离线
@司徒
感谢,L R和SELECT START的连发问题确实解决了。
没改机,试了一下204MHZ,运行生化危机3时看地图就死机了,看来我这台机器不改机只能156MHZ了。
另外不知道报告一个不知道是不是BUG的问题:我刷的是恐龙包,在主界面按MENU键,如果选择重启后机器只是黑屏,并不重启。
离线
@除恶务尽
如果想DRAM超频不需要改机,只需要打开壳子按照司徒大哥图里那样,把那条线路切断即可。
离线
@除恶务尽
WatchDog被我關掉,導致系統調用reboot時,無法重啟,FC3000在下版更新時會修正~感謝回報問題@yesiraperfect
割掉是為了接2.8V穩壓IC,目前PCB上,沒有2.8V可以用,所以準備好3.3V轉2.8V穩壓IC後,再進行割線的動作~
重新一字一句的阅读了一遍司徒大哥的详细说明,原来是这样,是我理解错误。看来2.8v稳压IC是必须要准备的了!
离线
看了下Q20 MINI的主板,结构跟小横米、trimui完全不一样,根本就找不到换91k和160k电阻的位置,看来是超频无望了。而且主控被打磨了,看不到型号,不过界面跟小横米一模一样。
离线
玩家如果沒有硬改DRAM電路,預設小橫米DRAM有機會跑到204MHz(不是每一台都可以),硬改後,DRAM可以跑到252MHz~
小橫米DRAM超頻工具:https://github.com/steward-fu/pocketgo/releases/download/v1.0/pocketgo_dram_patch.zip
小橫米的DRAM-VCC是使用LP3992,因此,無法使用電阻方式改機,不過,從電路圖上,可以發現AVCC是2.8V,因此,可以從這裡偷電
2.5V位置
割線
連接到AVCC
實際測得電壓2.78V
執行run.sh,DRAM超頻可以選擇156MHz~252MHz
補丁更新中~司徒最懷念的降龍快打,司徒還記得在小學時期,中午都偷偷跑去街機廳打2局,1局5元新台幣,哈~
更新完成,重新開機就可以生效
重新開機後,右上角會顯示目前DRAM超頻速度
禁止使用於商業用途
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=40
PCSX ReARMED,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=60,CPU使用率81%
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=252MHz,FPS=54
PCSX ReARMED,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=252MHz,FPS=60,CPU使用率57%
离线
@gamece
可以分享一下拆機圖嗎?
手机不行,拍得不楚!
离线
@gamece
看來穩壓IC都改成固定電壓方式~
另外,這機器不是1.4cm ? 我怎麼看起來很厚?
确实有点厚,而且壳内的剩余空间很大
离线
现在q20 mini已经降到170了,估计过一些还要降价
离线
@司徒
我花兩天時間搞定 dosbox mod版了,原來 lib庫不能用新的,要用當時的版本
GitHub上的參數也有問題寫錯兩處,代碼只有 config.h 一處有問題
就不打擾了,編譯的比較正統些,用破解的有點暴力,怕是有缺陷不怎麼完美
也沒多複雜就花時間而已
最近编辑记录 lzgame02 (2021-07-23 15:41:40)
离线
司徒大神,小横米的CPU和RAM的超频部分,硬件加电压和软件补丁,都已经完成了?
离线
@司徒
没有改DRAM电压,目前测试DRAM超频到204mhz是能正常玩游戏的。等下班回家改一下2.8v超252试试
我有个疑问,这里是需要切断的吗?
最近编辑记录 yesiraperfect (2021-07-23 19:15:39)
离线
@司徒
没有改DRAM电压,目前测试DRAM超频到204mhz是能正常玩游戏的。等下班回家改一下2.8v超252试试我有个疑问,这里是需要切断的吗?
https://whycan.com/files/members/6841/要切断吗?.png
我也是这么理解的
离线
司徒 说:@gamece
可以分享一下拆機圖嗎?手机不行,拍得不楚!
看看这个主板,再对比看Miyoo用料是真的足,不过能实现相同功能的产品,还是偏向用料少的。
离线
TRIMUI DRAM超頻補丁:https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_dram_patch.zip
之前量測到的DRAM-VCC是2.48V
司徒使用120K搭配442K電阻,電壓:0.6 * (1 + (442K / 120K)) = 2.81V
量測到的電壓是2.82V
執行run.sh
DRAM超頻可以選擇156MHz~252MHz,沒有改機的話,大部份機器(不是每一台都可以)應該是可以跑到204MHz
補丁更新中~不知道有多少人還記得這樣的圖片,司徒當初在選PS1和SS時,最後選擇SS主機,後來才發現玩KOF97竟然還需要買加速卡...
更新完成,重新開機即可生效,KOF97大流行時,比賽到最後都是看誰的積分最高,司徒只記得,大部分積分高的人都是考試很會作弊的人...
DRAM超頻速度會顯示在中下方
禁止商業用途
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=39
PCSX ReARMED,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=156MHz,FPS=60,CPU使用率78%
PocketSNES,新機動戰記,關閉FrameSkip,CPU=1.2GHZ,DRAM=252MHz,FPS=56
PCSX ReARMED,惡魔城,關閉FrameSkip,CPU=1.2GHZ,DRAM=252MHz,FPS=60,CPU使用率58%
關於MicroSD部份,C10的MicroSD卡,在小橫米上跑出22MB/s,SD2.0理論值差不多是25MB/s,因此,這部份應該是很不錯了~所以司徒不會繼續MicroSD速度研究,司徒調整一下接下來的順序方向:
1. GNGEO如何載入大型遊戲,GNGEO支援GNO檔案,可以用來載入大型ROM,載入速度也很快,不過目前GNGEO模擬器似乎有問題~
2. GNGEO卡頓問題,雖然CPU使用率已經降到很低,不過在小橫米上,還是會有小卡頓問題,司徒想研究一下Tile以及Sound部份,看看是否有機會縮小
离线
已经改完!cpu升压和dram升压全部部署完毕!下面是测试图,大家一起来见证小横米的力量进化!
这一张是司徒大哥的新版系统,改电阻后未成功超频时的帧数和CPU使用率
这一张是司徒大哥的新版系统,打了Gmenu2x补丁后CPU超频到1152时的帧数和CPU使用率
最后这张是CPU超频到1152,并且将DRAM超频到252mhz时的帧数和CPU使用率
感觉小横米重获新生!
不止恶魔城,放荡冒险谭也可以流畅的运行了!
在帧数显示为 30 60时,右边的CPU占用显示为80+。
真的太棒了!!!
感谢司徒大哥对F1C100S这款处理器所做的一切!
离线
@司徒
其实不止GNGEO,我在玩sega MD模拟器时也发现了,我运行的是《幽游白书:魔强统一战》这款游戏,游戏里人物的影子闪烁会非常规律的停顿一下,感觉非常明显。
离线
厉害,玩到芯片的性能极限。还可以运行GNGEO
离线
想入手一个一起折腾,结果发现价格翻倍了,汗;某宝某鱼全都250左右
离线
请问同款屏幕的Q8掌机哪里可以买到?有没有朋友买到一样的?
离线
想入手一个一起折腾,结果发现价格翻倍了,汗;某宝某鱼全都250左右
你买霸王小子的A66,相对便宜些,我是203入手的,固件与TRIMUI通用,不喜欢他开机LOGO等网上有替换程序
离线
@yesiraperfect
我看了一下幽游白书:魔强统一战,它的ROM才4MB,RAM應該是夠用,所以可能模擬器要看一下問題,等整理SMD模擬器時,你在跟我提醒一下~
GNO檔案(司徒轉了一些常玩的遊戲):https://github.com/steward-fu/neogeo/releases/tag/v1.1
GNGEO模擬器支援GNO檔案(直接覆蓋就可以):https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_fix_gno_v20210724.zip
司徒先說一下結論,GNGEO模擬器使用GNO檔案,載入飛快,下表是載入ZIP和GNO的時間比較
接下來說明一下過程,其實GNGEO模擬器本身是支援GNO檔案格式,只是不知道為何在載入ROM的時候,要做剔除副檔名的動作(src/main.c)
但是,後續處理ROM時卻又判斷是否有.GNO檔案
因此,司徒在一開始先判斷是否為.GNO副檔名,如果不是,才做剔除的動作
那接下來的問題是,什麼是GNO檔案呢?(src/rom.c)
int dr_save_gno(GAME_ROMS *r, char *filename) {
FILE *gno;
char *fid = "gnodmpv1";
char fname[9];
Uint8 nb_sec = 0;
int i;
gno = fopen(filename, "wb");
if (!gno)
return GN_FALSE;
/* restore game vector */
memcpy(memory.rom.cpu_m68k.p, memory.game_vector, 0x80);
for (i = 0; i < 0x80; i++)
printf("%02x ", memory.rom.cpu_m68k.p[i]);
printf("\n");
if (r->cpu_m68k.p)
nb_sec++;
if (r->cpu_z80.p)
nb_sec++;
if (r->adpcma.p)
nb_sec++;
if (r->adpcmb.p && (r->adpcmb.p != r->adpcma.p))
nb_sec++;
if (r->game_sfix.p)
nb_sec++;
if (r->tiles.p)
nb_sec += 2; /* Sprite + Sprite usage */
if (r->gfix_usage.p)
nb_sec++;
/* Do we need Custom Bios? */
if ((r->info.flags & HAS_CUSTOM_CPU_BIOS)) {
nb_sec++;
}
if ((r->info.flags & HAS_CUSTOM_SFIX_BIOS)) {
nb_sec++;
}
/* Header information */
fwrite(fid, 8, 1, gno);
snprintf(fname, 9, "%-8s", r->info.name);
fwrite(fname, 8, 1, gno);
fwrite(&r->info.flags, sizeof (Uint32), 1, gno);
fwrite(&nb_sec, sizeof (Uint8), 1, gno);
/* Now each section */
dump_region(gno, &r->cpu_m68k, REGION_MAIN_CPU_CARTRIDGE, 0, 0);
dump_region(gno, &r->cpu_z80, REGION_AUDIO_CPU_CARTRIDGE, 0, 0);
dump_region(gno, &r->adpcma, REGION_AUDIO_DATA_1, 0, 0);
if (r->adpcma.p != r->adpcmb.p)
dump_region(gno, &r->adpcmb, REGION_AUDIO_DATA_2, 0, 0);
dump_region(gno, &r->game_sfix, REGION_FIXED_LAYER_CARTRIDGE, 0, 0);
dump_region(gno, &r->spr_usage, REGION_SPR_USAGE, 0, 0);
dump_region(gno, &r->gfix_usage, REGION_GAME_FIX_USAGE, 0, 0);
if ((r->info.flags & HAS_CUSTOM_CPU_BIOS)) {
dump_region(gno, &r->bios_m68k, REGION_MAIN_CPU_BIOS, 0, 0);
}
if ((r->info.flags & HAS_CUSTOM_SFIX_BIOS)) {
dump_region(gno, &r->bios_sfix, REGION_FIXED_LAYER_BIOS, 0, 0);
}
/* TODO, there is a bug in the loading routine, only one compressed (type 1)
* region can be present at the end of the file */
dump_region(gno, &r->tiles, REGION_SPRITES, 1, 4096);
fclose(gno);
return GN_TRUE;
}
P.S. 其實就是儲存已經解完密的每個REGION資料,所以小橫米、TRIMUI掌機應該要使用這種格式
那另外一個問題是,如何DUMP呢?(src/main.c)
P.S. 只要在啟動gngeo時,使用--dump就可以做DUMP的動作
如下
$ ./gngeo --dump
P.S. 載入遊戲後,gngeo會自動離開並且產生(null).gno檔案,因為char dump並沒有被初始化
司徒把沒有用到的選項都刪除了,當然,看不懂、用不到的代碼也都刪除了
FPS顯示還包含CPU使用率
CPU使用率計算方式
那最後的問題是,如何載入GNO檔案?其實就跟載入ZIP一樣,選擇GNO檔案就可以
目前看來,如果小橫米可以換成F1C200S晶片,那玩GNGEO模擬器將會是一個很棒的體驗~
离线
@司徒
臨走之前喵到一堆簡易的代碼 .....
請問你是在 win / linux / mac osx 哪個環境進行開發編譯的呢 ?
另外 , 看 war2 , starcraft 都能移植編譯
有沒考慮嘗試下 serious-engine (serious sam) 呢 ?
看都可以移植到安卓上了 , github 上有引擎源碼 .....
最近编辑记录 lzgame02 (2021-07-24 15:46:53)
离线
trimui的电池太小了,要是能换一块1000以上的电池,那还不错
离线
司徒你好,久仰大名。小横米的gba模拟器就没有办法了吗?相信大家还是主玩gba游戏多些。现在的模拟器毛病很多。
离线
司徒你好,久仰大名。小横米的gba模拟器就没有办法了吗?相信大家还是主玩gba游戏多些。现在的模拟器毛病很多。
我怎么看你说话就这么让人生气呢,GBA模拟器之前就更新过两次了,现在画面不撕裂了,边框也可以正常使用,模拟性能也没问题。
不要说你刷包了试了不能用,翻一下司徒大哥上面的回复,GPSP模拟器已经更新了两个版本,只是没有打包到刷机包里而已。替换和使用方法我在帖子回复里也说过了,如果你不会用可以仔细翻一下上面的回复。
我建议你等司徒大哥搞完GNGEO模拟器后再反馈GBA模拟器目前存在的问题。
建议直接说明具体的毛病内容,不要粗略的整一句 毛病很多 就算完事了。
最后希望大家反馈问题可以尽量的 温柔 一些,态度 客气 一些好吧,大家谁也不欠谁什么,不要抱怨不要激气。
离线
司徒大神您好,我用小霸王Q2升级版试了Q8掌机的江西恐龙刷机包结果可用,只不过显示全部是反的,而且按键没有反应,希望大神可以完善一下让小霸王Q2升级版这个小掌机也可以用。
离线
gba 模器我只想原比列放大,畫面會做優化,可能性能做不到,原比列放大很醜很難看
离线
@司徒
dump gno文件是否只能在trimui这个机器上操作?
我在FC3000上,运行一个写有
/mnt/emus/gngeo/gngeo --dump
的sh脚本,就会打开模拟器。
读取ROM后,模拟器并未直接退出游戏,而是继续运行游戏。
然后我退出游戏,用文件浏览器查看,在ZIP所在的路径下,并没有生成GNO格式的文件。
离线
@lzgame02
小強無誤~生命力確實厲害~開發環境主要以Debian為主力~也許等之後有時間,在移植看看吧~感謝你的告知,請安息吧~
@gamece
TRIMUI如果可以多厚0.2cm,那整體會不錯~
@时尚电子王
RK3326的GBA是點對點拉伸,符合你的需求,建議你去玩RK3326
@yesiraperfect
哈~
@skywalk00
很抱歉,目前不會再支援任何機種~Q8資源正在整理中,整理完畢後會開源,你可以繼續研究~
@kit0072
GBA模擬器我最想做的就是等比拉伸不模糊,還有選單改進,同時ARM模擬器ARM不是我要的,有蠻多想改進的,不過,這個要等研究GBA模擬器時在討論~
@除恶务尽
我是在Linux PC上跑的,不要在F1C100S機器上跑,因為RAM不夠~你可以直接使用Miyoo gngeo.7z編譯測試
离线
@yesiraperfect
拜托,你仔细阅读我的语境。哪里来的什么抱怨和激气,请你不要断章取义。其实我是非常感激像司徒这样的无私的开发者的,正是他们给我们这些开源玩家带来了
更多乐趣。关于模拟器问题,我会后续跟进说明的。目前正在搞gngeo,慢慢来不着急。
离线
@司徒
我是不会入200以上的开源机的,与其那样还不如ps3手柄有线连接老手机。司徒你也可以试试体验不错。我的小横米也是年初入的120元32g
离线
刚100在咸鱼上收了个小横米,电阻换了,线也飞了,实测cpu和ram的电压都上去了,电压正常,系统刷了,就是运行模拟器加载rom死机,试了几个,都死机,不知道问题出在哪里。
离线
原系统不死机
离线
真遗憾,不过也许司徒大神有自己的想法(毕竟动了别人的蛋糕,可能有些js会不爽),那么关于显示反像是不是屏幕驱动的问题?还有无法控制是不是键值不对应的问题,我再试试其他镜像看看,非常感谢司徒大神所做的一切!
离线
刚100在咸鱼上收了个小横米,电阻换了,线也飞了,实测cpu和ram的电压都上去了,电压正常,系统刷了,就是运行模拟器加载rom死机,试了几个,都死机,不知道问题出在哪里。
试出来了,是模拟器的频率调高了,调低点就可以了
离线
@时尚电子王
OK
@gamece
OK
@skywalk00
屏反向是屏幕驅動的問題,按鍵每台機器不一樣,所以建議你先把所有按鍵量測出來,這樣些改驅動比較容易,我指的是你改,不是我改~
GNGEO模擬器支援LR按鍵設定(直接覆蓋就可以):https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_lr_mapping.zip
其實司徒不是很喜歡KOF的輔助系統,因為那個真的太婊了~司徒記得學生時期,當初流行KOF 99時,被人用全勳 + 八神連到死,差一點上演真人快打~不過,在掌機上,要按出輔助角色(B+C),應該是沒人可以快速按出來,就連司徒的加藤鷹之手也是辦不到,因此,司徒加入L、R按鍵的設定,可以把L、R設定成ABCD的組合鍵,Set L Button(設定L按鍵),Set R Button(設定R按鍵)
進去後,可以選擇想要的組合按鍵,None代表沒有做任何按鍵映射
設定完成後,記得儲存,這樣下次啟動就可以讀取到
离线
trimui进游戏很快,小横米很慢,主要是因为小横米的内存只有32m,trimui有64m,小横米可以把主控换成f1c200s吗?直接换主控,不动其他电路,可以做到吗?我看这两个主控的区别就在内存。
离线
@司徒
司徒先生,还没有改电阻和接飞线给cpu和内存超频(电阻没到货),只刷了你发布的系统,更新了你上面的gbsp修复版。发现一些gba游戏它会中途关闭退出(例如鸟人战队系例)这种情况是不是也是由于f1c100s的内存不足造成的呢?
最近编辑记录 时尚电子王 (2021-07-26 09:51:17)
离线
trimui进游戏很快,小横米很慢,主要是因为小横米的内存只有32m,trimui有64m,小横米可以把主控换成f1c200s吗?直接换主控,不动其他电路,可以做到吗?我看这两个主控的区别就在内存。
买个F1C200S寄去网上,给修手机的大神换吧,据说通用。。。。
离线
司徒大神,小横米经过你的改造,已经升值了不少,新的基本上涨了100块钱,二手的也涨了50左右。
离线
@时尚电子王
CPU频率设置过高会导致模拟器自动退出,如果你已经打了新版的GMENU2X补丁,且没用硬改主板,那么需要在模拟器选择界面按ST,然后选择“编辑模拟器”,然后把CPU频率改回700以下,覆盖GMENU2X后默认频率应该是1152还是多少来着,需要自己动手降频。
不止GPSP模拟器,没硬改主板前所有模拟器都需要手动设置cpu降频。
离线
@司徒
感谢司徒对gngeo的修正,去除闪屏和添加L R的快捷键,能不能提供一下现在最新的源代码,
我原先在您的代码上自己瞎改了下
离线
@司徒
好的,我试试
@yesiraperfect
谢谢,答疑
离线
@司徒
@yesiraperfect
我替换掉了gmenu2x那两个文件,把gbsp频率改为672,出现定屏死机故障所有的按键都无用。只能下拨电源键重新开机。于是我继续更换其它不同频率,568,480,384一样出现定屏死机,只是频率越低定屏死机现象越靠后。而且我还发现有个问题那就是select+r不能调整亮度了,变成了截图。
最近编辑记录 时尚电子王 (2021-07-26 15:25:57)
离线
@gamece
超過200RMB的機器就不建議入手了~
@qllbee
其實我在前面已經說過,在開發期間不開源,畢竟我也不想再次被誤會,不過,總是希望可以更多人參與開源,唉~兩難~
目前GNGEO源代碼GNGEO v20210726:https://github.com/steward-fu/trimui/releases/download/v1.2/gngeo_v20210726.tar.gz
离线
@skywalk00
在网上买了个f1c200s,等到货后,找个修手机的店子吹上去。
离线
@时尚电子王
你那个是小横米还是那个T(我记不住名字)的机子啊?换新系统之前有这个问题吗?
离线
@yesiraperfect
横米,换系统之前运行此类会死机,而且会发出噪音。特别是鸟人战队整个系列
离线
@时尚电子王
天意如此,那也沒辦法了~因為看不出問題在哪~
司徒算了一下目前GNGEO支援的ROM遊戲,一共有238個遊戲,司徒盡最大能力找出所有ROM並且轉換成GNO檔案格式,目前總共轉出212個GNO,轉完後,才發現,其實有蠻多特殊加密的遊戲是無法執行的~
GNGEO GNO檔案位置:https://github.com/steward-fu/neogeo/releases/tag/v1.1
所以接下來的兩大方向就是:
1. 優化卡頓問題
2. 修復無法執行的遊戲檔案
司徒相信這兩個項目如果可以做完,GNGEO應該就很完美,司徒也可以繼續往下一個模擬器邁進~只是目前看來,好像難度很高,哈~
离线
@司徒
感谢提供了现阶段的代码 昨天一天都瞎忙也没具体查看
看到您都转换了gno格式,
我说下我以前在小横米上测试过的所有的rom后的结果
kof2000 kof2002好像不行 这2个我记不清楚了
kof2003 我没有成功生成dcy文件 无法运行
mslug5 我生成了dcy文件 游戏成功运行 但是开始画面花屏 1秒后退出
pspike2 玩一小会基本上就没有声音了
samsh5 我没有成功生成dcy文件 无法运行
samsho5sp 我没有成功生成dcy文件 无法运行
sonicwi2 无声
sonicwi3 无声
svc 我没有成功生成dcy文件 无法运行
svcplus 我没有成功生成dcy文件 无法运行
离线
@yesiraperfect
横米,换系统之前运行此类会死机,而且会发出噪音。特别是鸟人战队整个系列
试了一下 鸟人1可以正常玩。鸟人2会死机。鸟人3会死机。鸟人4会死机。鸟人5会死机。我用的是恐龙包里的rom,不出意外你用的应该也是。
如果你对这几款游戏感兴趣可以另外找游戏rom再试一下,如果还是不行那就只能是模拟器本身不支持这几款游戏了。
离线
trimui怎么调声音?
离线
@yesiraperfect
rom是恐龙包里的,应该就是模拟器本身有问题吧。我再试试
离线
这个fc3000不是出过屏幕改版。变成ips屏幕了吗。司徒的怎么还是缺视角屏幕
离线
@gamece
MENU + UP (亮度變亮)
MENU + DOWN (亮度變暗)
MENU + LEFT (聲音調小)
MENU + RIGHT (聲音調大)
@wotou
天注定~
司徒目前已經先把GNGEO KOF94~KOF2001的問題修正完畢,所以目前都可以正常遊玩~
GNGEO GNO 遊戲:https://github.com/steward-fu/neogeo/releases/tag/v1.1
GNGEO v20210728 模擬器:https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_v20210728.zip
司徒把全部238個遊戲,盡可能測試一輪,發現幾乎一半都無法玩,司徒整理如下(原圖1283x803)
GNGEO整個源碼幾乎都快被司徒改掉了,因為,問題確實有點多,沒辦法,開源專案的魅力就是這樣~從這一版開始司徒刪除gngeo_data.zip,不在需要這個檔案,因為裡面的drv只是ROM的描述,相當不方便修改,這種格式太老舊了,司徒仿效MAME和FBA的作法,司徒將其全部轉換到代碼裡面,方便做CRC修正~
离线
哪个...有个不情之请...能不能...请大佬...把能玩的gno格式打个包:D ?
离线
迅雷可以批量下载的
离线
@司徒
请教几个问题,
1.我玩的snk游戏有几个是自己hack过的游戏,我用 ./gngeo --dump运行,载入rom后 没有像您说的那样自动退出并生成gno,而是直接运行了游戏
2.以前是修改gngeorc文件更改默认的abcd设置,我习惯YBXA→abcd,而不是现在的BAYX→abcd,现在的配置文件在哪个目录啊, 或者在源代码中哪里修改下?
3.Enable Raster effect这个选项不应该去掉,我记不清楚哪个游戏 开关此项有特别效果 我记在一个本子上 但是本子不知道藏哪里去了..
离线
@司徒
电阻还没有到货,想问下trimui超频后铁拳3跑多少帧呢?
离线
@qllbee
Raster effect,光栅效果,部分游戏需要开启这个才能正常。
最突出的就是得点王系列,如果关闭,球场的显示将不正常。
这项开启后对模拟性能有较大影响,一般游戏需要关闭。
离线
@司徒 刷了Q8的2个包,都是启动花屏,是屏幕还不一样?
离线
这个fc3000不是出过屏幕改版。变成ips屏幕了吗。司徒的怎么还是缺视角屏幕
问过商家,去年出过,今年屏幕涨价缺货,都没出ips了
离线
@司徒
其实我对您源代码基本没改动 只是原先想多支持几个dcy文件 奈何水平太菜只成功运行了少数几个 现在改成gno格式 就更不需要改动了...
我有2台横米 一台就是原装的系统 ,另一台我开机直接就运行了 ./gngeo samsho2.
因为亮度原因,需要进入一次gmenu2x调成合适的亮度以后, 下次就不需要再进gmenu2x了(这个亮度有时候会重置成最亮)
1.
好久没碰横米了,这次看到用了gno文件 确实神速~~~
但是,亮度每次都得进入gmenu2x调节了.直接运行./gngeo samsho2必然是最大亮度,不知道我什么地方搞坏了...原先还能记忆亮度
不知道gngeo模拟器能不能内置亮度调节功能,或者横米能添加个亮度调节旋钮就完美了
2.以前是./gngeo samsho2运行的是samsho2.zip文件,,现在改成gno,我测试了./gngeo samsho2.gno是不可以的 有没有什么命令行方式可以运行的办法
离线
大佬厉害!还好自带翻译工具,不然看起来还有点费劲:D
离线
@司徒 感谢解答,还有几个问题求助
1. $ echo 5 > /sys/devices/platform/backlight/backlight/backlight/brightness 谢谢指出,
请问声音调节命令是什么,是不是也是类似的命令
2.横米系统声音貌似只有右声道,而不是那种左右合并输出到唯一的一个喇叭上,缺少左侧一部分声效,请问系统输出能不能改成mono输出到这唯一的一个小喇叭上,或者通过更改硬件 把左右声道都接到这个喇叭上(当然大部分早期游戏都是单声道的,基本不影响使用)
3.怎么添加原先未支持游戏 例如b2b.zip(棒棒破坏者/情侣破坏王)这个游戏,能不能以这个游戏为例具体发一下代码,(还有一些改了几乎所有rom还扩容的kof游戏,希望能够支持运行)
离线
@qllbee
A1: 聲音部份,你去看一下Miyoo那個daemon.7z,我當初做音效驅動時,留一個控制後門~當然你也可以使用傳統音效控制方式~
A2: 小橫米是雙聲道,而且據謝工說,那個喇吧也是支援雙聲道~你懷疑?難道~你不相信謝工為人?
A3: 想不到你對司徒這麼好,還要我舉一個例子給你說明,好吧~送佛送上天~移植過程如下說明~
首先找到ROM,然後,看一下他的檔案名稱
接著架設一個可以跑的專案,司徒使用RetroArch + 搭配fbalpha測試,方便Debug
https://github.com/libretro/fbalpha
在src/burn/drv/neogeo/d_neogeo.cpp可以找到相關資訊,這些資訊照抄就可以
接著看一下是否有需要特別解密的東西,需要追進去fbalpha或者印log,幸好這個遊戲比較單純,想不到你對司徒真好~
幸好司徒目前已經把drv轉換成程式代碼,我就知道早晚有人要來踢館,所以,明天的洞,司徒今天已經幫你挖好了~貼上就可以
GNGEO目前使用的格式,雖然比較老舊,不過如果繼續維護,你需要知道他的格式是什麼~
加好drv後,編譯就可以跑了,簡單測試一下,應該是沒有問題
司徒已經把GNO檔案轉好了~大爺請笑納~
GNGEO GNO:https://github.com/steward-fu/neogeo/releases/tag/v1.1
离线
@司徒
不好意思,我问的太多了,要求也很过分,确实.我开始只是把问题想的太简单,以为添加个游戏比较"容易",以免出现 能不能添加这个那个以及其他游戏的更多烦人问题.
这个模拟器只有会写且愿意写代码的您能做,只能问您,打扰之处,只能求谅解,作揖~~~
1.小橫米是雙聲道,而且據謝工說,那個喇吧也是支援雙聲道~你懷疑?難道~你不相信謝工為人?
这个不是相信不相信的问题,是确实存在的现象.
我有多个snk的mvs基板,其中之一以前存在同样的状况(实体硬件故障竟然和横米状况一样...).
具体您可以测试:真侍魂samsho2.zip,B是投计,真侍魂的投计有2次落地音效,人物被摔在地上反弹一下再次落地,"咚~咚~".
snk-mvs基板有单声道mono也有双声道立体声输出的,我的彩监都是只有单声道输入的.不管基板单声道或是双声道合二为一,
这个"咚~咚~"的音效都是没有问题的.
唯独一个基板,我选1p角色,cpu 2p,我站在左边投,"咚~咚~",没问题.我站在右边投,"咚~"只有一次落地音效,没有反弹后的音效.
后来发帖,经过多位大神指点,最终找到了故障,就是早期很多街机营业厅的音箱都是单声道连接,所以老板为了省事,基板上故意将左声道接地了.
将连焊处去掉,立体声ok.
横米也是一样"故障",站在右边投,"咚~"只有一次落地音效,没有反弹后的音效.
因为我老玩这个游戏,所以认为这个横米只有右声道,当然也可能我想的有问题.
或者怎么修改gngeo的代码,让左右声道先合并然后输出单声道...(我的天,我又在求改代码...)
2.确实很麻烦您改写添加代码,您还得浪费时间贴图,这个确实太难太复杂,我这个自学一丢丢C语言的学不来.
我感觉您最新的代码应该相对来说更容易添加新游戏了,而且已经加好了b2b或者更多的游戏..厚着脸皮再要下最新gngeo代码,可以不
离线
neogeo这模拟器可以自定义ABXY键吗?
离线
@司徒
A2: 小橫米是雙聲道,而且據謝工說,那個喇吧也是支援雙聲道~你懷疑?難道~你不相信謝工為人?
@qllbee老兄说的没错,是偷工减料了,省了一个电阻电容,应该是少了一个声道,司徒大佬帮忙看下miyoo的电路,这里应该焊接什么参数,感谢!
离线
相信大家都有看到,是怀旧堂說謝工偷工減料,不是司徒說的喔~司徒相信人性本善,不可能有人會幹這種缺德的事情,但是,怀旧堂既然都說這事了,司徒就只好去查看看,前因後果大家要搞清楚,人可是怀旧堂殺的,不是司徒~
左右聲道測試程序:speak-test.sh.zip
$ speaker-test -t wav -c 6
Time per period = 12.163623
0 - Front Left
4 - Center
1 - Front Right
3 - Rear Right
2 - Rear Left
5 - LFE
果然跑到Fron Left時,喇吧沒有聲音輸出,而耳機是正常的
司徒對了一下電路圖,發現左右聲道是有連接的
怀旧堂說謝工偷工減料
果然是偷料,司徒標下位置
為了減少底噪,司徒把兩顆電阻都改成3K,完成後,就有左右聲道了~
司徒也測試TRIMUI掌機,發現TRIMUI有左右聲道,沒有這個問題,TRIMUI的廠商果然比謝工可靠~而為了報答大家,司徒幫GNGEO加入人性化的按鍵設定
GNGEO v20210731源代碼:https://github.com/steward-fu/trimui/releases/download/v1.2/gngeo_v20210731.zip
GNGEO模擬器 (支援b2b遊戲、按鍵設定):https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_b2b_abxy_v20210731.zip
按鍵設定畫面,可以針對A、B、X、Y、L、R按鍵做個別設定,記得設定完成後要儲存~
從這版開始,聲音都固定輸出44.1KHz,無法調整,不好的體驗不用保留,而Aduio Buffer Size原本只有64Bytes,有點詭異的設定,司徒也調大到2KB
离线
司徒好像開始老人癡呆,按鍵ABXY搞亂了~
目前按鍵ABXY位置如下:
請使用如下修正ABXY位置問題的GNGEO模擬器
GNGEO模擬器 (支援b2b遊戲、按鍵設定):GNGEOhttps://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_fix_abxy_v20210731.zip
离线
@司徒
相信大家都有看到,是怀旧堂說謝工偷工減料,不是司徒說的喔~司徒相信人性本善,不可能有人會幹這種缺德的事情,但是,怀旧堂既然都說這事了,司徒就只好去查看看,前因後果大家要搞清楚,人可是怀旧堂殺的,不是司徒~
哈哈,我也是从技术讨论的角度看待问题,缺了就是缺了,事实如此,年轻人不要整天打打杀杀的,木耳度都能听出来,总不能明明只有一个声道非要觉得他是立体声吧,从技术的角度来说,这样不严谨,哈哈哈。
离线
正好需要这个
离线
@司徒
我很菜的,都是去琵琶行论坛( https://www.ppxclub.com/forum.php?mod=forumdisplay&fid=142 )
找现成的补丁,哈哈:) 那些hack大神都是汇编高手
还有一些基础电子书教程 比较傻瓜式适合我,照着改一些拳皇97类常见游戏的出招还是可以的
还是要问下添加游戏的问题
"b2b", "neogeo", "Bang Bang Busters (2010 NCI release)", 2010,
0x00000000, 0x00020000, 0x00000000, 0x00100000, 0x00000000,
0x00000000, 0x00020000, 0x00000000, 0x00080000, 0x00400000,
6,
...
"071.c2", 9, 0x00000000, 0x00000001, 0x200000, 0xce7b6248,
1.
0x00000000, 0x00020000, 0x00000000, 0x00100000, 0x00000000,
0x00000000, 0x00020000, 0x00000000, 0x00080000, 0x00400000,
这10个是什么..怎么搞出来的? romsize?
2.最后一行 0x00000000, 0x00000001, 0x200000, 0xce7b6248,
第三个0x200000是rom大小,第四个0xce7b6248是crc check.第一个我看貌似都是0x00000000? 第二个是什么?怎么搞出来的 不明白
离线
@qllbee
我也很菜, 我也都是去琵琶行论坛找現成的東西, 照着改一些还是可以的~
在回答你的問題之前,司徒必須先說,這是一個態度問題,因為司徒已經盡量回答你的問題,但是,你的回答卻是叫司徒去找論壇,從你可以聽出左右聲道問題,接著到你懂補丁、CRC以及懂軟件,司徒並不覺得你菜,因為打完補丁,CRC一定跑掉,你如何解決?所以你一定是資深玩家~不過,算了,這個就當做是司徒回答你的最後一個問題,之後,麻煩你去琵琶行论坛詢問街機相關的問題~
Q1.
0x00000000, 0x00020000, 0x00000000, 0x00100000, 0x00000000,
0x00000000, 0x00020000, 0x00000000, 0x00080000, 0x00400000,
这10个是什么..怎么搞出来的? romsize?
A1. 這是ROM Size,你把每個Region加起來就可以
Q2.最后一行 0x00000000, 0x00000001, 0x200000, 0xce7b6248,
第三个0x200000是rom大小,第四个0xce7b6248是crc check.第一个我看貌似都是0x00000000? 第二个是什么?怎么搞出来的 不明白
A2. 第一個是來源(Source)位址,你要從BIN的哪個地方開始複製,第二個是目的(Destination)位址,你要把BIN複製到哪個地方,一般來說,大同小異,如果有特別的ROM,需要從FBAlpha去找一下複製的區間
离线
目前司徒又修復一些無法玩的NEOGEO ROMs,因為GNO是加解密後的檔案,因此,司徒會持續更新修復後的檔案,如果玩家無法玩,請再次下載一次
GNO檔案:https://github.com/steward-fu/neogeo/releases/tag/v1.1
GNGEO模擬器v20210801:https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_fix_roms_v20210801.zip
目前表格狀態(原圖1367x777)
离线
@司徒
.左右声道问题这是我确实存在的硬件问题,老玩游戏就必然会发现这个故障,然后到处找人解答,这不是我水平高,而是最终有高手解答了,整个基板只有此处焊接了,我不懂原理,不懂硬件,只是将此处焊开,就解决了.就像你给出的小横米超频,我虽然还没改,即使我不懂硬件,但是买几个电阻,照着您的图,很菜的我应该还是可以改出来的.
.crc跑掉 确实是个问题,我多年以前也到处问过这个问题,因为傻瓜式电子书给出了如何简单修改招式,我也改好了,但是模拟器无法运行,
当时我还不知道是crc的问题,无果.然后今年我又问了一次,又是高手给出了答案,CRC32编辑器 修正MameHackRom 4字节.zip
用软件改4个字节修正crc即可
如果您想知道某些内容,直接说就可以了,我会的肯定会直接答复的,因为我只玩snk的游戏,对gngeo非常关注,我甚至为了编译gngeo,看了您所有的教程,(当然是我能看懂的一小部分,无数难点只能pass)
花了很长很长时间,问了很多人现在看来很愚蠢的问题,才最终编译成功,从结果来看,对高手来说应该1个小时信手拈来,我却用了1一个月.又是debian又是虚拟机又是toolchain,这些我都从来没有接触过.
您问我分享一下HACK ROM的過程,我真的是不知道怎么分享,
我就是拿来主义,大神发布了无数游戏补丁,选择我需要的打到rom上即可,然后再照着各路大神的初级教程改一些简单的游戏出招例如侍魂 拳皇,
我肚子里真的没有什么高级货...
.这些hack相关的东西,以前有很多论坛,现在好像都倒闭了,只有琵琶行论坛了,所以我只能推荐这个给您,您却说我态度有问题,我真的很无语.
很多您给的解释我真的看不明白....只能继续问
A1. 這是ROM Size,你把每個Region加起來就可以,
A2. 第一個是來源(Source)位址,你要從BIN的哪個地方開始複製,第二個是目的(Destination)位址,你要把BIN複製到哪個地方,一般來說,大同小異,如果有特別的ROM,需要從FBAlpha去找一下複製的區間
我真的又想提问,能不能以b2b这个游戏为例具体发一下怎么加起來的,10个rom size,而b2b.zip里面只有7个rom,这是怎么加的,我完全对不上号.
source,destination又是怎么得到的... 像kof97.zip source都是0x00000000,destination却有7个不是.b2b只有一个是0x00000001.
离线
@司徒
教程 HACK资料合集.zip
这是我看的教程,不知道您用不用的上,
像侍魂2,里面给出了详细的出招地址以及各种出招,想把一种出招改成另一种,替换即可
高难度的汇编部分我是完全不会,全部跳过
还得求最新的gngeo代码......
最近编辑记录 qllbee (2021-08-01 01:31:43)
离线
司徒,trimui的外国人包音量调节不了,显示有大小,但实际没变化。还有个机友没声音。
离线
@司徒
本來要走了 , 不過突然想到還有一件事要說下 ....
昨天移植了 sm64 , descent 1 , 2 到 RGB10 上 ....
然後又喵到了 Github 上除了 Serious Engine 這開源的之外
Diablo 2 似乎也有 Github 上也有 OpenDiablo 2 的開源代碼 ....
當然只是隨便喵一眼而已 .... 如果有空的話也試試 .....
因為剩下的移植我會自己弄 .....
到目前為止也都我自己弄出來的 ....
好了感覺沒啥事了 , 要走了 .....
离线
請問上面說到的小橫米喇叭,那個 104貼片電容 (我沒說錯零件名字吧?) 是使用 0603 嗎?
离线
司徒能不能找到FC3000合适的IPS屏换上呢?
离线
@司徒
特意注册一个账户来膜拜大佬
感恩技术大佬圆我儿时梦中的fc掌机形象
说一下FC3000刷机注意事项
1.原装卡最好别动,rom可以拿出来用开源系统玩儿。
2.原装16G tf黑屏 可能看脸 毕竟我只有一张
3.老8G以下tf卡最好拿Class 10级别卡支持完美。
4.市面上64G普速卡烧入镜像,进入开源系统很完美,商业图1秒过。进游戏也很快,注意千万别用sc2以上的高速卡,进游戏会画面撕裂。
5.镜像烧好后别动32MB那个区,FC3000那个区最好别改4G,否则进原厂系统识别不了游戏,OD区可以改大,但是别用删除重建分区这种操作,直接扩容。OD删除重建绝对卡商业图,我8G 16G 32G 64G都试过百分之百!
希望能帮上新朋友们
离线
@qllbee
好,那我了解了~那個GAME_ROMS的struct你沒有仔細看,所以你才對不上,如下面的例子,9是Region 9的意思,所以那10個Size就是把每個Region個別加起來
"071.c1", 9, 0x00000000, 0x00000000, 0x200000, 0x23d84a7a,
Sprite的固定存放方式是0x00000000接著0x00000001
代碼部份,司徒不會再發佈,在結束小橫米、TRIMUI維護後(預計 2022/06/01),司徒會整理釋出,你不用擔心拿不到源碼
@波贺顺顺
你打的字,我看了100次後,我依然看不懂你的意思,請問你是來自哪個星球?可否知道七龍珠悟空最近過得如何?
老外有問題,相當歡迎來此詢問,雖然英語不是司徒的母語,司徒即使語言能力不佳,司徒也會盡力幫忙~
@lzgame02
你這隻打不死的蟑螂~司徒有收到你的資訊了~你~可以安心去跟閻羅王報到了~
@kit0072
0402
@lemoine
成本會變高,改機難度也會變高~最終失去它的原本價值~所以司徒最終沒有對它動大刀~
@迪卡
司徒翻了一下A20手冊,確實有此溫度感測Register,也確實可以從F1C100S、F1C200S讀到數值,但是,這個數值不可靠,因為範圍從30~100,如果是溫度的意思,那司徒的小橫米、TRIMUI應該已經駕鶴歸西,不過,司徒也貼出代碼,供人參考
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <time.h>
uint32_t push_it(uint32_t v)
{
int cc=0, r=0;
static uint32_t buf[32]={0};
for(cc=0; cc<31; cc++){
buf[cc] = buf[cc + 1];
}
buf[31] = v;
r = 0;
for(cc=0; cc<32; cc++){
r+= buf[cc];
}
return (r >> 5);
}
int main(int argc, char* argv[])
{
int fd=-1;
uint8_t *mem=NULL;
uint32_t *TP_TPR=NULL;
uint32_t *TP_FIFOCS=NULL;
uint32_t *TEMP_DATA=NULL;
uint32_t *TP_CTRL_REG1=NULL;
fd = open("/dev/mem", O_RDWR);
mem = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x1c24000);
printf("mmap addr: %p\n", mem);
TP_TPR = (uint32_t*)&mem[0x818];
TP_FIFOCS = (uint32_t*)&mem[0x814];
TEMP_DATA = (uint32_t*)&mem[0x820];
TP_CTRL_REG1 = (uint32_t*)&mem[0x804];
*TP_CTRL_REG1 = (1 << 5);
*TP_TPR = (1 << 16);
while(1){
if(*TP_FIFOCS & (1 << 18)){
*TP_FIFOCS = 0xffffffff;
printf("temp: %d\n", push_it(*TEMP_DATA));
}
usleep(300000);
}
munmap(mem, 4096);
close(fd);
return 0;
}
@Beigo
相當感謝你的支持~
离线
@司徒
我貌似看明白了您说的,但是搞了好长时间也没有成功,我把下面的加入到b2b的下面,编译ok,但是运行扫描不到 kof96ae.zip,
不知道还得修改哪些文件?亦或者是我根本就没写对.(我搜索了下b2b,只有drv这个文件里面包含)
{
"kof96ae", "neogeo", "the kof96ae (final?version)", 1996, 0x00000000, 0x00020000, 0x00000000, 0x00c00000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00500000, 0x03000000, 19,
"214ae-p1.bin", 8, 0x00000000, 0x00000000, 0x00100000, 0x47660e7c,
"214ae-p2.bin", 8, 0x00000000, 0x00100000, 0x00400000, 0x824ff3eb,
"214ae-s1.bin", 6, 0x00000000, 0x00000000, 0x00020000, 0x203b3aaf,
"214ae-m1.bin", 1, 0x00000000, 0x00000000, 0x00020000, 0xc9dd0348,
"214-v1.bin", 3, 0x00000000, 0x00000000, 0x00400000, 0x63f7b045,
"214-v2.bin", 3, 0x00000000, 0x00400000, 0x00400000, 0x25929059,
"214ae-v3.bin", 3, 0x00000000, 0x00800000, 0x00400000, 0x143923a7,
"214ae-c1.bin", 9, 0x00000000, 0x00000000, 0x00400000, 0xb308c1f9,
"214ae-c2.bin", 9, 0x00000000, 0x00000001, 0x00400000, 0x220a92b2,
"214-c3.bin", 9, 0x00000000, 0x00800000, 0x00400000, 0x64989a65,
"214-c4.bin", 9, 0x00000000, 0x00800001, 0x00400000, 0xafbea515,
"214ae-c5.bin", 9, 0x00000000, 0x01000000, 0x00400000, 0x6e03cb0c,
"214ae-c6.bin", 9, 0x00000000, 0x01000001, 0x00400000, 0xa90bc55d,
"214ae-c7.bin", 9, 0x00000000, 0x01800000, 0x00400000, 0x08021fd6,
"214ae-c8.bin", 9, 0x00000000, 0x01800001, 0x00400000, 0xbbd21b08,
"214ae-c9.bin", 9, 0x00000000, 0x02000000, 0x00400000, 0x57e5bf80,
"214ae-c10.bin", 9, 0x00000000, 0x02000001, 0x00400000, 0xcbe44c81,
"214ae-c11.bin", 9, 0x00000000, 0x02800000, 0x00400000, 0x5c7ddc8b,
"214ae-c12.bin", 9, 0x00000000, 0x02800001, 0x00400000, 0x48d8b574,
},
我之所以老是要新版的代码,是我知道很多hack的游戏都很少有人玩,一些功能与gngeo也没有什么关系,为了追求代码简洁您也不太可能增加这些功能.
我要是天天发 能不能支持这个kof96改版,能不能支持这个新出的侍魂完美版,能不能让gngeo内置亮度和声音调节功能,这样会更惹人烦不是,
我也知道老被人追着要最新代码肯定不高兴,但是还是想请您考虑下别明年才发代码好不,能不能每隔1个月或者2个月发一次...好歹我也能玩上一些新支持了的游戏,同时对比新旧代码的更新,也能学到那么一些我能看的懂那部分知识
离线
新出的小横米换壳机,q20mini,已经降到159了,跟2手的小横米一个价了。
离线
新出的小横米换壳机,q20mini,已经降到159了,跟2手的小横米一个价了。
还是199吧
离线
不好意思啊,是我没表达清楚,就是我们刷了你改的那个trimui的包(一个基于外国人包改的,一个基于江西恐龙包改的,我们刷那个基于外国人改的包),然后我是音量最大,试了调节音量,有音量进度条,但是实际音量没变化。另一个机友是有进度条没声音。
离线
gamece 说:新出的小横米换壳机,q20mini,已经降到159了,跟2手的小横米一个价了。
还是199吧
阿里巴巴现在160左右
离线
@司徒
1.我其实这里也是添加了的,我加在最后面,我看这里没有b2b.zip(我忘记是b2b.gno了),以为加不加无所谓,所以也没有提
"/zintrckb.zip", "/zupapa.zip", "/kof96ae.zip", NULL
我刚试了下把b2b和kof97ae都添加到前面了.
在LOADGAME界面没有出现这2个zip游戏
2.怎么转成gno?上次您说是需要用老版本的gngeo,可是老版本的好像只能转支持了的游戏....
最近编辑记录 qllbee (2021-08-02 11:35:19)
离线
@司徒
我又用您发的8月1日的版本 也搜索不到任何zip文件 例如samsho2.zip,这几天都在使用gno 没发现扫描不到zip文件了,这是不是个bug?还是我设置问题
3.我用8月1日版本,我尝试加入
biospath /mnt/roms/neogeo
system unibios
biospath /mnt/roms/neogeo这行肯定会被自动去除,gno游戏载入不了unibios,7月31的代码是可以的
离线
@qllbee
這種小問題,你應該自我訓練會比較好,不過我看了一下,問題在dr_check_zip這裡,修正如下
ROM_DEF *dr_check_zip(const char *filename)
{
char *z;
ROM_DEF *drv;
char *game = strdup(basename(filename));
printf("check rom=%s\n", game);
if(game == NULL) {
return NULL;
}
z = strstr(game, ".zip");
if(z == NULL) {
free(game);
return NULL;
}
z[0] = 0;
drv = res_load_drv(game);
free(game);
return drv;
}
建議你拉出UART,這樣可以方便Debug,也可以用gdb debug,系統預設都有包含gdb,
GNO DUMP部份,先等我一下,我在整理一些東西,整理完後,我再給一版可以DUMP的,
不過,我看KOF96AE,跑不起來,你可以自己Debug看看,估計會花上一些時間~該是你展現熱血的時候了~
离线
@司徒
我自学的这点C语言是不够看的...谢谢帮忙,等您最新的代码 ...unibios您也看下无法载入
最近编辑记录 qllbee (2021-08-02 15:39:42)
离线
@司徒
没必要,你可以看中文字幕版的,哈哈哈哈:)
unibios好像是我的问题?现在7月31日版本也载入不聊了,我崩溃了呀
kof96ae直接运行了....!!! 我什么都没干,就抄写了给的代码
链接: https://pan.baidu.com/s/14kPGYpSX0SbE4CVpB8poRQ 提取码: frqn
是不是我们下载的版本不一样啊
最近编辑记录 qllbee (2021-08-02 16:54:34)
离线
@司徒
unibios是有问题的!
我开始一直用的是26日发的代码,unibios没有问题
为了添加游戏开始使用31日发的代码,没注意unibios,这个版本和8月1日发的都是载入不了unibios的,我搞混了
离线
偷偷跑過來支持司徒哥一下😂
离线
离线
就是L+select呼出菜单,然后LR调节。
离线
群里的机友也有人刷了正常的,真是奇怪哦。随机出现声音相关的不同问题。
离线
司徒最近看起来忙了。
离线
离线
我来了~~~请问司徒,原先skin里面的界面图片在新版里都改成了hex*.h文件,是如何互相转换的? 有没有什么工具
离线
@司徒 能否给f1c系列移植个Xmame啊?
离线
@波贺顺顺
最近很忙~
@hanwei
https://github.com/steward-fu/rs97/releases/download/v1.0/bin2header.7z
@fanelwin
沒有這樣的計畫~
离线
谢谢。搞定,就是我的图片hex文件很大,原图减肥的话,细节丢失严重。
离线
@司徒 兄
不好意思打擾,我從教學站找到FC3000的V1升V2 img
沒注意到自己是IPS版,目前刷完後黑屏,目前只能使用AV輸出
請問方便作一個IPS版的復原img嗎? 非常感謝
离线
@zonbix
很抱歉我手上沒有每台IPS的ROM,因為每台IPS的原廠ROM都不一樣,所以,你的機器有可能救不回來~不過,你可以試著刷入這個IPS ROM看看,這個是西班牙老外協助DUMP出來的ROM,刷入方式一樣是燒到MicroSD,接著插入FC3000,等待5分鐘後,背光閃爍代表完成,拔除MicroSD後,重新開機~
https://github.com/steward-fu/fc3000/releases/download/v1.0/ips_fc3000_v1.img.7z
离线
@司徒 兄
非常感謝,我嘗試看看,有結果再回報
离线
又看了一遍所有的内容,有个类似的问题,不拆机增加电容电阻的情况下,如何修改下gngeo模拟器声音部分,实现单喇叭输出双声道
离线
司徒,能不能把官方系统去掉,直接进你的系统?trimui的。还有,你修改的外国人包的游戏缩略图要放哪里?我新建images文件夹也不行,是在模拟器里设置吗?我找不到设置选项。
离线
@司徒 兄
非常感謝! 473樓的復原img確認可以使用,我成功刷回V1後可以正常點屏了
過程稍微說一下。
將復原ROM刷入TF卡後放入黑屏機器後開機,刷成功後並不會如預期那樣點亮背光閃爍
仍然會一片黑,我是謹慎起見等待10分鐘後再拔出TF卡,重新開機後就正常了。
另外小插曲,原裝TF卡我有先備份,機子還原成功後使用MiniTool Partition Format出來FAT32
的TF卡會無法使用,開機黑屏,後來重新用SDformater格式化為FAT格式就可正常使用
离线
@司徒
我又试了下7月30日给出的代码程序 运行几个游戏
①kof97me.zip 我覆盖了4个文件,生成kof97me.gno 扫描出来了,完美运行(只有这个可以扫描出来)
②samsho2me.zip 我只改了p1的出招部分,生成 samsho2me.gno但是gngeo扫描不出来,只能玩zip格式
③kof96ae.zip fbas的rom,生成 kof96ae.gno但是gngeo扫描不出来,只能玩zip格式
④kof96ae20.zip fbas的rom,生成 kof96ae20.gno但是gngeo扫描不出来,只能玩zip格式
⑤kof95sp.zip fbas的rom,不会写drv.c 载入游戏后 gngeo报错
{//p1me 为什么p1分2个部分?
"samsho2me", "neogeo", "Samurai Shodown II (me)", 1994,
0x00000000, 0x00020000, 0x00000000, 0x00700000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00200000, 0x01000000, 16,
"063-p1.bin", 8, 0x00000000, 0x00100000, 0x00100000, 0x1061cdda,
"063-p1.bin", 8, 0x00100000, 0x00000000, 0x00100000, 0x1061cdda,
{
"kof95sp", "neogeo", "The King of Fighters '95 (sp)", 1995,
0x00000000, 0x00020000, 0x00000000, 0x00900000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00220000, 0x01a00000, 16,
"084-p1.bin", 8, 0x00000000, 0x00000000, 0x00100000, 0x8bcca012,
"084-p2.bin", 8, 0x00000000, 0x00100000, 0x00100000, 0x5cb1af9e,
"084-p3.bin", 8, 0x00000000, 0x00200000, 0x00020000, 0x030e71cb,
"084-s1.bin", 6, 0x00000000, 0x00000000, 0x00020000, 0x83cbae60,
我上传了
②我改的samsho2的p1 samsho2me p1.zip
⑤下载的kof95sp kof95sp.zip
请帮忙看下,为什么
②③④gngeo可以生成gno文件,为什么扫描不到? 只能扫描到修改的97
⑤这个kof95sp的drv.c怎么写才是正确的 (只有4个文件我改名成p1.bin p2.bin p3.bin s1.bin了)
最近编辑记录 qllbee (2021-08-10 10:50:39)
离线
司徒大神,Q20 mini已经降到110~130了,有兴趣盘它吗?
离线
司徒大神,Q20 mini已经降到110~130了,有兴趣盘它吗?
价格并没有降下来,1688的批发价格仍然在150左右
离线
gamece 说:司徒大神,Q20 mini已经降到110~130了,有兴趣盘它吗?
价格并没有降下来,1688的批发价格仍然在150左右
并夕夕13X,有的优惠20后,就是11X了
离线
電容貼片肉眼看起來是黑色,和電阻一樣,還以為店家寄錯了,但使用強光,放大鏡,電話相機,原來它不是黑色的……
既然買了回家,唯有相信這堆電容,電阻沒錯……
离线
@kit0072
用万用表量量电阻值,+—1%
离线
我不会才问你的啊,你回个加油,真的还不如不回复...哇凉哇凉
离线
@司徒
大神 有没有 荔枝pi nano 开发板能用的 固件啊?我没有这些机器 就一个开发板,我也想研究研究这个。
离线
好吧,我不再问问题了,最后一个请求,上传下最新的代码行不,新的可以正常运行篮球足球体育游戏了,别等几个月了......太难了o(╥﹏╥)o,
发一下吧,不再骚扰你了,菜b我滚远点
......
我自己解决了个简单的,名字不超过8个字母就可以扫出来了,多了就不行很奇怪,那个95sp搞不了了,放弃
离线
@qllbee (不再骚扰你了,菜b我滚远点)
身為旁觀者的我都看不下去了,請教別人用這種態度,簡直跟無理取鬧的小孩沒兩樣,你是幾歲的人啊?
家裡的大人都沒再教的啊?
@論壇管理員
不好意思,有些話不吐不快,如果有不合論壇規矩的地方,請將此條留言刪除
最近编辑记录 masahiko (2021-08-13 21:08:57)
离线
离线
對於支持司徒的朋友,司徒在此至上謝意,而無法接受司徒個人作風的朋友,只能說聲抱歉並請您安靜的離開~
司徒有兩個更新給大家:
1. GNGEO模擬器v20210814:修復一些以前無法正常玩的ROM、直接內置BIOS,可以針對每個遊戲設定不同BIOS
2. TRIMUI改機:十字鍵改造、解決落塵問題、電池1000mA改造
修復後的表格
GNGEO模擬器v20210814:https://github.com/steward-fu/trimui/releases/download/v1.0/gngeo_20210814.zip
內置BIOS,BIOS直接內建在模擬器裡面,玩家不用在準備BIOS檔案
BIOS列表參考FBA模擬器,玩家可以選擇想要的BIOS,共29個BIOS,選擇後記得保存,模擬器需要重啟才可以套用新的BIOS
這也是最後一版使用GNGEO名字發布的模擬器,再接下來,司徒將使用RK名字取代,也就是諧音ARCADE,因為,此模擬器已經改掉很多東西,當然,司徒之後也會開始添加非NEOGEO的遊戲,因此,繼續使用GNGEO並不適合,RK模擬器將專注優化給小橫米、TRIMUI使用,期望多數街機遊戲都可以流暢運行~
接著是Maker的最愛,也就是TRIMUI機器改造的介紹
原本TRIMUI厚度是9.8mm,這個厚度相當薄,玩格鬥遊戲比較不適合,於是,司徒上Thingiverse找尋是否有相關STL素材
果然人間自有真情在~司徒發現Liartes製作了三個相關素材,十字鍵改造、保護殼、電池後蓋
https://www.thingiverse.com/search?q=trimui&type=things&sort=relevant
十字鍵改造就是墊高它,讓十字鍵變硬一點
https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_dpad_pivot_v12.stl
司徒使用0.12mm厚度列印,感覺還可以接受
安裝上\
相當吻合
正面看的形狀
十字鍵被墊高了,不再是軟綿綿的按鍵
司徒是無法接受落塵的現象,因此,司徒把前蓋的屏幕部份,手動裁切掉
裁切後不夠美觀,於是,司徒畫了一個修飾的架子
https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_fdm_border_20210814.stl
司徒畫的很薄,避免影響觸感
裝飾上,感覺還不錯
接著就是電池後蓋,這是原作者的素材,司徒找了淘寶店家使用鋁合金製作,可惜,店家說電池接觸的那個地方太薄,無法製作
https://github.com/steward-fu/trimui/releases/download/v1.0/backplate_a66_larger_battery_v11_6.2mm.stl
於是,司徒使用OpenSCAD改造一下,載入原本STL
填補
司徒挖出更多空間,厚度都符合店家規定,可惜,淘寶店家最後還是無法製作...
https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_aluminum_back_20210814.stl
最後,司徒使用自己的3D列印機打印,厚度設定0.12mm,列印出來的質感還可以接受
https://github.com/steward-fu/trimui/releases/download/v1.0/trimui_fdm_back_20210814.stl
接著改造電池,這是原本司徒改的600mA電池
原作者推薦的1000mA電池
F1C200S如果有超頻的機器,請不要把電池蓋在F1C200S上面,避免爆炸
厚度
司徒覺得還不錯的列印精度
這樣的厚度最適合指腹搓招
改造後的厚度是11.8mm
重量68g
永遠的KOF
OpenSCAD源代碼
$fn = 100;
module string(str, f="Monospace", h=10, z=1) {
linear_extrude(height=z) {
text(str, size=h, font=f, halign="center", valign="center");
}
}
module meniscus(h=10, r=1){
difference(){
translate([r/2+0.1, r/2+0.1, 0]){
cube([r+0.2, r+0.1, h+0.2], center=true);
}
cylinder(h=h+0.2, r=r, center=true);
}
}
module cube_round_corner(w=10, h=10, z=10, r=1){
difference(){
cube([w, h, z], center=true);
translate([(w/2)-r, (h/2)-r]){
rotate(0){
meniscus(z, r);
}
}
translate([(-w/2)+r, (h/2)-r]){
rotate(90){
meniscus(z, r);
}
}
translate([(-w/2)+r, (-h/2)+r]){
rotate(180){
meniscus(z, r);
}
}
translate([(w/2)-r, (-h/2)+r]){
rotate(270){
meniscus(z, r);
}
}
}
}
module 3dprint_aluminum_back(){
difference(){
union(){
import("trimui_liartes.stl", convexity=3);
translate([50, 7, 0]){
cube([60, 40, 3.2]);
}
}
translate([21, 8, 1.2]){
cube([89, 50, 5]);
}
translate([16, 13, 1.2]){
cube([99, 40, 5]);
}
}
}
module 3dprint_fdm_back(){
difference(){
translate([0, 0, 0]){
3dprint_aluminum_back();
}
translate([80, 0, 0]){
cube([100, 100, 20]);
}
}
difference(){
translate([1, 0, 0]){
3dprint_aluminum_back();
}
translate([0, 0, 0]){
cube([80, 100, 20]);
}
}
}
module 3dprint_fdm_border(){
translate([(48-43)/2, 3, -2]){
difference(){
cube([43, 33, 2]);
translate([1, 1, 0]){
cube([41, 31, 2]);
}
}
}
difference(){
translate([48/2, 43/2, 0]){
cube_round_corner(48, 43, 0.5, 1);
}
translate([(48-41)/2, 4, -1]){
cube([41, 31, 2]);
}
translate([48/2, 39, -0.3]){
string("Retro Game", 1, 5);
}
}
}
//3dprint_aluminum_back();
3dprint_fdm_back();
//3dprint_fdm_border();
离线
牛皮普拉斯
离线
@司徒
这两天我刚刚换了小横米的右边四个按键的导电胶,自带的导电胶很不耐用手感也不好。发现switch lite的原装导电胶不大不小,不高不低正合适。换后手感提升很大,你也可以试试。
离线
司徒大神,有人根据你超小横米的思路,把q20mini超频了,实测有效果,就是ram还超不了,就是你给小横米和trimui写的ram超频补丁运行选择频率后,就自动退出补丁了,没有效果。
离线
司徒發現自己用3D印表機打印的後蓋似乎小了一點點,導致有點變形,長時間可能會讓PCB變形
因此,司徒最後提高厚度1mm
再度打印後,果然相當吻合~
司徒也再度巡視四個邊,目前這樣相當不錯~
修改後的OpenSCAD源代碼
$fn = 100;
module string(str, f="Monospace", h=10, z=1) {
linear_extrude(height=z) {
text(str, size=h, font=f, halign="center", valign="center");
}
}
module meniscus(h=10, r=1){
difference(){
translate([r/2+0.1, r/2+0.1, 0]){
cube([r+0.2, r+0.1, h+0.2], center=true);
}
cylinder(h=h+0.2, r=r, center=true);
}
}
module cube_round_corner(w=10, h=10, z=10, r=1){
difference(){
cube([w, h, z], center=true);
translate([(w/2)-r, (h/2)-r]){
rotate(0){
meniscus(z, r);
}
}
translate([(-w/2)+r, (h/2)-r]){
rotate(90){
meniscus(z, r);
}
}
translate([(-w/2)+r, (-h/2)+r]){
rotate(180){
meniscus(z, r);
}
}
translate([(w/2)-r, (-h/2)+r]){
rotate(270){
meniscus(z, r);
}
}
}
}
module 3dprint_original(){
difference(){
union(){
import("trimui_liartes.stl", convexity=3);
translate([50, 7, 0]){
cube([60, 40, 3.2]);
}
}
}
}
module 3dprint_fdm_back(){
difference(){
translate([0, 0, 0]){
3dprint_original();
}
translate([80, 0, 0]){
cube([100, 100, 20]);
}
translate([0, 0, 3]){
cube([150, 100, 20]);
}
}
difference(){
translate([0, 0, 1]){
3dprint_original();
}
translate([80, 0, 0]){
cube([100, 100, 20]);
}
translate([0, 0, 0]){
cube([150, 100, 3]);
}
}
difference(){
translate([1, 0, 0]){
3dprint_original();
}
translate([0, 0, 0]){
cube([80, 100, 20]);
}
translate([0, 0, 3]){
cube([150, 100, 20]);
}
}
difference(){
translate([1, 0, 1]){
3dprint_original();
}
translate([0, 0, 0]){
cube([80, 100, 20]);
}
translate([0, 0, 0]){
cube([150, 100, 3]);
}
}
}
module 3dprint_fdm_border(){
translate([(48-43)/2, 3, -2]){
difference(){
cube([43, 33, 2]);
translate([1, 1, 0]){
cube([41, 31, 2]);
}
}
}
difference(){
translate([48/2, 43/2, 0]){
cube_round_corner(48, 43, 0.5, 1);
}
translate([(48-41)/2, 4, -1]){
cube([41, 31, 2]);
}
translate([48/2, 39, -0.3]){
string("Retro Game", 1, 5);
}
}
}
difference(){
3dprint_fdm_back();
translate([21, 8, 1.2]){
cube([89, 50, 5]);
}
translate([16, 13, 1.2]){
cube([99, 40, 5]);
}
}
//3dprint_fdm_border();
离线
司徒大哥,我试过把你的POCKGO包用在miyoo上,结果开机过了绿圈logo图片就白屏了,按理是一样的屏控IC和接口不通用么,难道是旧版小横米miyoo屏没TE/TS脚位或者是我的机器换了F1C200S的原因?
离线
司徒你是想改大电池吗?干嘛加厚后盖,打出来效果还不错嘛
离线