-
Notifications
You must be signed in to change notification settings - Fork 2
NP6800+ Emulation
NP6800+-specific steps.
Download upgrade.bin from NP6800+修复升级包V1.0.9_20120105.rar from official website:
https://downloads.youxuepai.com/source/list.shtml#118&name=NP6800/NP6800+
See: qemu/create_system_image.sh
#!/bin/bash -x
src=$1 #upgrade.bin
pkg=upgrade.pkg
image=image.bin
qcow2=image.qcow2
# Extract data sections from upgrade.bin
[ -f $pkg ] || ./mkpkg --type=np1000 --extract $src $pkg
# Create NP6800 system image
# Ignore errors as it does not support ext3 file system format yet
rm -f $image
./create_system_image.py -s $((8*1024*1024*1024)) $pkg $image
# (Optional) Convert NAND image to qcow2 format
qemu-img convert -f raw -O qcow2 $image $qcow2Optionally create qcow2 overlay files, as snapshots, like this:
qemu-img create -f qcow2 -F qcow2 -b image.qcow2 image_overlay.qcow2The gpio-matrix-keypad device includes a very basic config parser for mapping keyboard input to device matrix keyboard.
Key names can be found in qemu/qapi/ui.json,
Or use --trace gpio_matrix_keypad_event QEMU trace log option to see key events.
Create a yaml mapping file named keymap.yaml:
---
keymap:
col-0:
row-0: "compose" # 桌面
row-4: "z" # z
row-5: "x" # x
row-6: "g" # g
row-7: "c" # c
row-8: "h" # h
row-12: "spc" # space
row-13: "m" # m
row-14: "b" # b
row-15: "k" # k
col-1:
row-0: "apostrophe" # '
row-6: "r" # r
row-7: "d" # d
row-8: "y" # y
row-10: "down" # down
row-12: "left" # left
row-13: "semicolon" # ;
row-14: "n" # n
row-15: "o" # o
col-2:
row-0: "bracket_right" # ]
row-4: "a" # a
row-5: "s" # s
row-6: "e" # e
row-7: "w" # w
row-8: "t" # t
row-10: "ret" # return
row-12: "slash" # /
row-13: "p" # p
row-14: "j" # j
row-15: "i" # i
col-3:
row-0: "minus" # -
row-5: "tab" # tab
row-6: "2" # 2
row-7: "grave_accent" # `
row-8: "4" # 4
row-10: "backspace" # 退格 backspace
row-13: "9" # 9
row-14: "6" # 6
row-15: "7" # 7
col-4:
row-0: "bracket_left" # [
row-2: "backslash" # \
row-4: "caps_lock" # caps lock
row-5: "q" # q
row-6: "3" # 3
row-7: "1" # 1
row-8: "5" # 5
row-10: "equal" # =
row-12: "up" # up
row-13: "0" # 0
row-14: "u" # u
row-15: "8" # 8
col-5:
row-0: "end" # 音量-
row-6: "f2" # 九科同步
row-7: "esc" # 退出 esc
row-8: "f4" # 诺亚词霸
row-10: "f12" # 帮助
row-12: "insert" # 发音
row-13: "f10" # 音乐
row-14: "f6" # 魔法作文
row-15: "f8" # 背单词
col-6:
row-0: "home" # 音量+
row-6: "f3" # 万维搜学
row-7: "f1" # 课本点学
row-8: "f5" # 牛津词典
row-10: "delete" # 删除 delete
row-13: "f11" # 视频
row-14: "f7" # 指法练习
row-15: "f9" # 奥数
col-7:
row-0: "dot" # .
row-1: "meta_l" # 开始
row-2: "shift" # shift
row-3: "alt" # 课本缩放
row-6: "f" # f
row-8: "v" # v
row-9: "ctrl" # ctrl
row-10: "right" # right
row-11: "pgup" # 上页 page up
row-12: "pgdn" # 下页 page down
row-13: "comma" # ,
row-15: "l" # l
pin-0: "pause" # powerThis creates this mapping:
Some dedicated pins are connected to special functions:
| Pin | Function |
|---|---|
| pin-0 | Power button |
| pin-1 | Charging not done |
| pin-2 | Disconnects external power |
| pin-3 | Disconnects SD card |
| pin-4 | Disconnects USB device port |
system_image=image_overlay.qcow2
mmc_image=mmc_overlay.qcow2
./qemu-system-mipsel \
-M noah_np6800 -cpu JZ4750 \
-d guest_errors,unimp \
-bios jz4750.bin \
-parallel null \
-serial none \
-serial none \
-serial none \
-serial mon:stdio \
-global gpio-matrix-keypad.map-file=keymap.yaml \
-spice port=5910,disable-ticketing=on \
-display none \
-audio spice \
\
-blockdev driver=file,node-name=mmc0_qcow2,filename=$system_image \
-blockdev qcow2,node-name=mmc0,file=mmc0_qcow2 \
-device sd-card,spec_version=3,drive=mmc0,bus=sd-bus-msc0 \
\
-blockdev driver=file,node-name=mmc1_qcow2,filename=$mmc_image \
-blockdev qcow2,node-name=mmc1,file=mmc1_qcow2 \
-device sd-card,spec_version=3,drive=mmc1,bus=sd-bus-msc1Force PC17 to 0 in qemu/hw/mips/noah_np6800.c to flash firmware.
TODO
Firmware update
Same as NP6800.
See: NP6800 Emulation