Skip to content
Norman Zhi edited this page May 2, 2026 · 4 revisions

NP6800+-specific steps.

Create initial system image

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 $qcow2

Create qcow2 overlay files

Optionally create qcow2 overlay files, as snapshots, like this:

qemu-img create -f qcow2 -F qcow2 -b image.qcow2 image_overlay.qcow2

Keyboard mapping file

The 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"            # power

This creates this mapping:
Keyboard 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

Start QEMU

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-msc1

Force PC17 to 0 in qemu/hw/mips/noah_np6800.c to flash firmware.

Gallery

TODO

Firmware update

Same as NP6800.
See: NP6800 Emulation

OpenNoah

Software

Devices variants

Clone this wiki locally