PicoZ80 – Thay thế Z80 thả vào
Tin tức chung·Hacker News·0 lượt xem

PicoZ80 – Thay thế Z80 thả vào

PicoZ80 – Drop-In Z80 Replacement

PicoZ80 tiếp tục chủ đề tranZPUter, thay thế Z80 vật lý trong máy chủ hoặc máy tính công nghiệp bằng CPU nhanh hơn, nhiều bộ nhớ hơn, thiết bị ảo, kết nối mạng (WiFi, BT), ứng dụng nhanh...

Tổng quan

picoZ80 tiếp tục chủ đề tranZPUter, thay thế Z80 vật lý trong máy chủ hoặc máy tính công nghiệp bằng một CPU nhanh hơn, nhiều bộ nhớ hơn, thiết bị ảo, kết nối mạng (WiFi, BT), tải ứng dụng nhanh từ thẻ SD và quản lý WiFi.

Đây là một PCB tùy chỉnh được thiết kế để cắm trực tiếp vào ổ cắm CPU Z80 DIP-40 của bất kỳ máy tính dựa trên Z80 cũ nào. Thay vì sử dụng bộ xử lý Z80 riêng biệt, bo mạch này chứa một bộ vi điều khiển RP2350B — một thiết bị Cortex-M33 lõi kép 150 MHz có khả năng chạy ở tốc độ lên đến 300 MHz — có các máy trạng thái I/O (PIO) có thể lập trình đảm nhận toàn quyền kiểm soát chính xác theo chu kỳ đối với địa chỉ, dữ liệu và điều khiển Z80 xe buýt.

PicoZ80 không phải là một bộ chuyển đổi giả lập đơn giản. Mọi giao dịch xe buýt đều được xử lý trong thời gian thực bởi các công cụ PIO của RP2350, mang lại cho hệ thống máy chủ chính xác thời gian xe buýt giống như Z80 thực. Đồng thời, lõi thứ hai và SRAM trên chip phong phú của RP2350, kết hợp với 8 MB PSRAM bên ngoài và 16 MB Flash, cho phép xếp lớp các khả năng gần như không giới hạn lên trên giao diện Z80 thô — bao gồm thực thi tăng tốc, bộ nhớ ảo hóa, ngân hàng ROM, ổ đĩa ảo và mô phỏng tính cách máy đầy đủ.

Bộ đồng xử lý ESP32 cung cấp kết nối WiFi và Bluetooth, Bộ lưu trữ dung lượng lớn bằng thẻ SD và giao diện quản lý dựa trên trình duyệt. Tất cả cấu hình được điều khiển từ một tệp config.json mà con người có thể đọc được được lưu trữ trên thẻ SD, nghĩa là không cần biên dịch lại để định cấu hình lại bản đồ bộ nhớ, hình ảnh ROM hoặc lựa chọn trình điều khiển của bo mạch.

PicoZ80 đã được chứng minh là chạy được trong nhiều máy Sharp MZ. Một tập hợp các nhân cách đang được phát triển cho những điều này các máy, thực sự dành cho các hệ thống Z80 khác, để cung cấp các tính năng rất cần thiết, chẳng hạn như RAM/ROM được lưu trữ trong ngân hàng, mô phỏng đĩa mềm, Mô phỏng QuickDisk, Hệ thống lưu trữ ROM, Hệ thống lưu trữ TranZPUter, tất cả đều có khả năng hoạt động đồng thời. Cấu hình hoàn toàn dựa trên JSON, việc thêm hỗ trợ cho máy chủ dựa trên Z80 mới chỉ là chỉnh sửa tệp cấu hình và khi cần có hành vi I/O mới, hãy thêm trình điều khiển C nhỏ vào cơ sở mã.

  • Thay thế Z80 thả sẵn
    - cài đặt vào bất kỳ ổ cắm Z80 DIP-40 nào. Máy chủ lưu trữ thời gian xe buýt Z80 bình thường xuyên suốt.
  • Giao diện bus PIO chính xác theo chu kỳ
    - ba máy trạng thái RP2350 PIO xử lý đồng thời địa chỉ, dữ liệu và tín hiệu điều khiển ở tốc độ bus Z80 tối đa.
  • Dung lượng bộ nhớ lớn
    - 8 MB PSRAM được sắp xếp thành 64 ngân hàng × 64KB, mang lại tổng cộng 4 MB không gian địa chỉ được phân loại có thể truy cập được theo ngữ cảnh CPU.
  • Ngân hàng ROM/RAM
    - khối bộ nhớ có thể định cấu hình ở mức độ chi tiết 512 byte và có thể được ánh xạ dưới dạng ROM, RAM, bộ nhớ máy chủ vật lý hoặc trình xử lý chức năng ảo.
  • Khung thiết bị ảo
    - mọi khối bộ nhớ hoặc phạm vi cổng I/O 512 byte đều có thể được hỗ trợ bởi chức năng C, cho phép các thiết bị ngoại vi được ảo hóa hoàn toàn.
  • Máy Personas
    - chương trình cơ sở Z80 có thể được định cấu hình thông qua cấu hình JSON để hoạt động trong mọi máy chủ Z80. Personas đang được phát triển để thêm trình điều khiển ảo vào máy chủ, sử dụng tài nguyên của RP2350/ESP32. Mẫu MZ-700 đã có kho trình điều khiển phong phú và điều này sẽ được mở rộng cho MZ-80A, MZ-80B, MZ-800 và các máy Sharp khác. Mục đích cũng là mở rộng danh mục cá nhân sang các máy khác chẳng hạn như Amstrad PCW.
  • Mô phỏng đĩa mềm và QuickDisk
    - Bộ điều khiển đĩa mềm tương thích với WD1773 và mô phỏng ổ đĩa Sharp QuickDisk, sử dụng hình ảnh DSK/RAW trên thẻ SD.
  • Quản lý web và WiFi
    - ESP32 tích hợp cung cấp giao diện web Bootstrap gồm bảy trang cho cấu hình, quản lý tệp, cập nhật chương trình cơ sở OTA và lựa chọn cá nhân.
  • Phân vùng chương trình cơ sở kép
    - hai khe cắm chương trình cơ sở 5 MB độc lập cho phép nâng cấp OTA an toàn; phân vùng đang hoạt động được chọn từ giao diện web hoặc bộ nạp khởi động.
  • Cập nhật chương trình cơ sở USB
    - bộ nạp khởi động hiển thị cầu nối USB để flash chương trình cơ sở mà không cần phần cứng trình gỡ lỗi.

Phần cứng

PicoZ80 PCB (phiên bản 2.5) là một bo mạch nhiều lớp nhỏ gọn được thiết kế để vừa với kích thước vật lý của gói Z80 DIP-40 và khoảng trống có sẵn bên trong các vỏ máy tính cổ điển điển hình. Tất cả logic hoạt động ở mức 3,3V; việc cân nhắc việc chuyển mức và điều khiển dòng điện cho bus chủ 5V được xử lý trong thiết kế sơ đồ.

Bo mạch tích hợp năm hệ thống con trên một PCB: bộ xử lý RP2350B, giao diện bus Z80, bộ đồng xử lý ESP32, bộ nguồn và bộ chia USB.

Thành phần chính

  • RP2350B (Lõi kép Cortex-M33)
    - bộ xử lý chính, chạy ở tốc độ lên tới 300 MHz. Thực thi vòng lặp nóng mô phỏng Z80 trên Core 1 và xử lý chuyển tiếp I/O, USB và ESP32 trên Core 0. SRAM trên chip 512KB. Biến thể RP2350B (trái ngược với RP2350A) cung cấp 48 chân GPIO cần thiết cho bus Z80 đầy đủ.
  • 16 MB SPI Flash
    - lưu trữ bộ tải khởi động, hai khe chương trình cơ sở ứng dụng, hai khe cấu hình và một phân vùng cấu hình chung. Tổng số bố cục có thể định địa chỉ trải dài từ 0x10000000–0x11000000.
  • 8MB PSRAM (SPI)
    - RAM giả tĩnh bên ngoài cung cấp 64 ngân hàng × 64KB không gian địa chỉ được phân nhóm cho CPU được mô phỏng. Đã kết nối với RP2350 thông qua thiết bị ngoại vi SPI chuyên dụng.
  • Bộ đồng xử lý ESP32
    - cung cấp Wi-Fi (802.11 b/g/n, chế độ AP và máy khách), Bluetooth, đầu đọc thẻ SD và máy chủ web. Giao tiếp với RP2350 thông qua giao thức IPC nhị phân trên FSPI 50 MHz (với tính năng kiểm tra tính toàn vẹn CRC32, các kênh DMA được phân bổ trước và chuyển ngành theo cụm lên tới 16 khu vực trên mỗi giao dịch) và UART 460,8kbaud cho các lệnh điều khiển.
  • Khe cắm thẻ SD
    - FAT32, do ESP32 quản lý. Lưu trữ config.json, hình ảnh ROM, hình ảnh đĩa (DSK, QuickDisk, đĩa RAM) và cây hệ thống lưu trữ TZFS/RFS.
  • Trung tâm USB
    - trung tâm USB tích hợp để kết nối máy chủ và bắc cầu cập nhật chương trình cơ sở.
  • Nguồn điện 3,3V
    - bộ chuyển đổi Buck hiệu quả lấy từ nguồn 5V có trên ổ cắm Z80 VCC ghim.

Thiết kế bảng

Phần cứng picoZ80 được thiết kế bằng KiCad. Bản sửa đổi hiện tại là v2.5. Các tệp sơ đồ và bố cục PCB có sẵn trong kho dự án trong kicad/PICOZ80/.

Sơ đồ được chia thành năm tờ:

Trang 1 — Bộ xử lý RP2350B

Tất cả các bài tập GPIO RP2350B, tách rời, bộ tạo dao động tinh thể 12 MHz, Flash 16 MB và kết nối PSRAM 8 MB. Gói RP2350B QFN-80 được chọn riêng cho số lượng 48 GPIO - bus Z80 đầy đủ (16 địa chỉ + 8 dữ liệu + 12 tín hiệu điều khiển) cộng với tín hiệu ESP32 SPI/UART và USB tiêu thụ hầu như mọi chân có sẵn.

picoZ80 Schematic Sheet 1 — RP2350B Processor

Trang 2 — Bộ đồng xử lý ESP32

Mô-đun ESP32-S3-PICO-1, giao diện thẻ SD (SPI), ăng-ten chip, tiêu đề gỡ lỗi và giao tiếp giữa các bộ xử lý (bus FSPI ở tốc độ 50 MHz, UART ở tốc độ 460,8kbaud). Tín hiệu thẻ SD và SPI/UART liên bộ xử lý được phân tách rõ ràng trong bảng này.

picoZ80 Schematic Sheet 2 — ESP32 Co-processor

Trang 3 — Giao diện bus Z80

Các kết nối ổ cắm DIP 40 chân và mạng điện trở giao diện bus. Các đường địa chỉ A0–A15, các đường dữ liệu D0–D7 và tất cả các tín hiệu điều khiển Z80 (MREQ, IORQ, RD, WR, M1, RFSH, BUSREQ, BUSACK, HALT, INT, NMI, WAIT, CLK, RESET) được định tuyến qua các điện trở nối tiếp đến các chân GPIO RP2350 chuyên dụng được giám sát bởi các máy trạng thái PIO.

picoZ80 Schematic Sheet 3 — Z80 Bus Interface

Trang 4 — Nguồn điện

Bộ chuyển đổi Buck đồng bộ TLV62590BV 5V sang 3.3V có đầu vào/đầu ra tụ lọc. Bộ chuyển đổi phải cung cấp tải kết hợp của RP2350B với tốc độ lên tới 300 MHz, PSRAM 8 MB, ESP32 và bộ chia USB từ một chân 5V VCC của ổ cắm Z80 DIP-40.

picoZ80 Schematic Sheet 4 — Power Supply

Trang 5 — Bộ điều khiển trung tâm USB

Bộ điều khiển trung tâm USB CH334F với đầu nối Mini-B, tinh thể 12 MHz và các cổng xuôi dòng được định tuyến tới cả RP2350 (để cập nhật chương trình cơ sở bắc cầu) và ESP32 (để truy cập USB trực tiếp trên các phiên bản bo mạch mới hơn).

picoZ80 Schematic Sheet 5 — USB Hub Controller

PCB

PCB được thiết kế nhỏ nhất có thể để chứa tất cả các mạch điện cần thiết và vừa vặn trong giới hạn của ổ cắm DIP-40.

Các thành phần nhỏ nhất có thể được lắp ráp thủ công đã được sử dụng. 0402/0603 thiết bị thụ động và khoảng cách bước IC 0,5mm để giảm kích thước tổng thể và xếp chồng 6 lớp được chọn để phù hợp với tất cả các thành phần cần thiết.

Các thiết kế ban đầu, v2.0 và v2.1 được lắp ráp thủ công bằng ứng dụng hàn điểm, đặt bộ phận thủ công và trạm làm lại không khí nóng. Phiên bản 2.2 được lắp ráp thủ công với lò nướng và lò nung lại. v2.3a và v2.5 được lắp ráp tại PCB Fab.

Tổng quan về PCB

Tổng quan về định tuyến lớp PCB 6

PCB đã lắp ráp

Vị trí thành phần PCB và Bảng kê vật liệu

Nhấp vào đây để xem sơ đồ vị trí thành phần PCB tương tác và Bảng kê vật liệu.


Kiến trúc

Thiết kế lõi kép

Hai lõi Cortex-M33 của RP2350B được cung cấp trách nhiệm hoàn toàn tách biệt, giao tiếp thông qua hàng đợi tin nhắn liên lõi (queue_t).

Core 0 xử lý tất cả các tác vụ không theo thời gian thực: cầu nối USB và nối tiếp CDC, phối hợp cập nhật chương trình cơ sở, I/O tệp (được chuyển tiếp tới ESP32 qua UART), gửi lệnh ESP32 (thay đổi hình ảnh đĩa mềm/QuickDisk, tải lại cấu hình, truy vấn phiên bản), quản lý phân vùng và giám sát cơ quan giám sát. Bộ hẹn giờ giám sát phần cứng giám sát trình tự khởi động và vòng lặp chính, với tiến trình khởi động được theo dõi thông qua các thanh ghi cào RP2350 vẫn tồn tại trong các lần đặt lại cơ quan giám sát. Trình xử lý lỗi toàn diện ghi lại trạng thái đăng ký và thông tin chẩn đoán vào PSRAM, cho phép phân tích sau khi thiết lập lại các lỗi cứng, lỗi bus và lỗi sử dụng. Nhật ký PSRAM liên tục (plogf) ghi lại các thông báo quan trọng về khởi động trước khi có USB, bổ sung cho hệ thống đầu ra gỡ lỗi debugf tiêu chuẩn.

Core 1 chỉ chạy vòng lặp nóng mô phỏng CPU. Nó phục vụ các FIFO PIO để xử lý các giao dịch bus Z80, phân giải từng địa chỉ dựa trên bản đồ bộ nhớ và chuyển giao dịch đến phần cứng máy chủ vật lý (loại VẬT LÝ), phục vụ nó từ PSRAM (loại RAM/ROM) hoặc gọi chức năng xử lý thiết bị ảo (loại FUNC). Độ trễ trên đường dẫn này được giảm thiểu bằng cách giữ vòng lặp bên trong trong SRAM và sử dụng SRAM 512KB RP2350 làm bảng tra cứu nhanh cho các con trỏ khối bộ nhớ.

Giao diện xe buýt PIO

Giao diện bus Z80 được triển khai hoàn toàn trong cụm RP2350 PIO (z80.pio). RP2350 cung cấp ba khối PIO (PIO 0, PIO 1, PIO 2), mỗi khối có bốn máy trạng thái. Phần sụn Z80 sử dụng cả ba khối PIO:

  • PIO 0 — Bus địa chỉ và dữ liệu (GPIO 0–23)
    - xử lý bus địa chỉ 16 bit (A0–A15, GPIO 0–15) và bus dữ liệu 8 bit hai chiều (D0–D7, GPIO 16–23). Các máy trạng thái chạy đồng thời các chương trình z80_addrz80_data, đẩy các từ địa chỉ và điều khiển hoặc lấy mẫu byte dữ liệu một cách đồng bộ.
  • PIO 1 — Tín hiệu điều khiển và thực hiện chu trình (GPIO 16–47)
    - chạy các chương trình điều khiển bus chính dựa trên phạm vi GPIO trên: yêu cầu/xác nhận bus (z80_busrq), phát hiện NMI (z80_nmi), đồng bộ hóa đồng hồ (z80_clk_sync) và xử lý xác nhận ngắt (z80_int_ack).
  • PIO 2 — Các trạng thái thời gian, đặt lại, làm mới và chờ của máy chủ
    - quản lý các tương tác quan trọng về thời gian giữa RP2350 và bus Z80 của máy chủ. Các tương tác này phải luôn chính xác ngay cả khi Core 1 đang bảo trì bộ nhớ trong. Bốn máy trạng thái chuyên dụng chạy trong PIO 2:
    • Phát hiện ĐẶT LẠI (z80_reset) — giám sát dòng RESET của máy chủ và gửi tín hiệu đến Core 1 để trạng thái mô phỏng có thể được khởi tạo lại một cách rõ ràng trong mỗi lần đặt lại phần cứng.
    • Tạo làm mới DRAM (z80_refresh) — điều khiển chu trình RFSH trên bus chủ trong khi RP2350 đang hoạt động truy cập PSRAM hoặc Flash bên trong, giữ cho DRAM máy chủ luôn được làm mới và ngăn ngừa mất dữ liệu trong các hệ thống phụ thuộc vào xác nhận /RFSH định kỳ.
    • Trình tạo trạng thái chờ (z80_wait) — chèn trạng thái chờ chu kỳ T có thể định cấu hình (được điều khiển bởi tham số JSON tcycwait) bằng cách xác nhận /WAIT trên bus chủ, kéo dài các chu kỳ bus riêng lẻ để phù hợp với thời gian yêu cầu của các thiết bị ngoại vi chậm hơn hoặc ROM/RAM được lưu trữ trong ngân hàng.
    • Đồng bộ hóa T1 (z80_sync) — phát hiện cạnh tăng của T1 trên mỗi chu kỳ bus (điểm mà Z80 đặt địa chỉ hợp lệ trên bus) và báo hiệu cho Core 1 qua IRQ. Việc đồng bộ hóa này rất cần thiết cho các ứng dụng dựa vào đồng hồ máy chủ để định thời gian chính xác — bao gồm các vòng trễ phần mềm và I/O nhạy cảm với thời gian chẳng hạn như điều khiển động cơ cassette và đập bit nối tiếp — đảm bảo rằng các hoạt động của bộ nhớ trong RP2350 không gây ra hiện tượng lệch thời gian có thể cảm nhận được.

Bộ chương trình PIO đầy đủ trong z80.pio, được nhóm theo Khối PIO:

PIO Chương trình Chức năng
0 z80_addr Xuất địa chỉ 16 bit (A0–A15) lên bus và bắt đầu chu kỳ tín hiệu.
0 z80_data Ổ đĩa hoặc mẫu D0–D7, với điều khiển ba trạng thái trong BUSRQ.
0 z80_cycle Trình sắp xếp chu trình bus cấp cao nhất — sắp xếp các chu trình tìm nạp, đọc, ghi và I/O.
0 z80_fetch Chu kỳ bus tìm nạp mã (M1 + MREQ + RD).
1 z80_mem_read Chu kỳ bus đọc bộ nhớ (MREQ + RD).
1 z80_mem_write Chu kỳ bus ghi bộ nhớ (MREQ + WR).
1 z80_io_read Chu kỳ bus đọc I/O (IORQ + RD).
1 z80_io_write Chu kỳ bus ghi I/O (IORQ + WR).
1 z80_busrq Quản lý BUSREQ/BUSACK, giải phóng /IORQ, /MREQ, /RFSH, /M1, /HALT, /WR, /RD.
1 z80_nmi Phát hiện xác nhận NMI và tín hiệu Lõi 1.
1 z80_clk_sync Đồng bộ hóa các máy ở trạng thái PIO với tín hiệu Z80 CLK.
1 z80_int_ack Xử lý các chu kỳ xác nhận ngắt (M1 + IORQ).
2 z80_reset Giám sát dòng RESET của máy chủ và báo hiệu cho Core 1 khởi động lại trạng thái mô phỏng.
2 z80_refresh Điều khiển chu kỳ RFSH trên bus chủ trong khi RP2350 phục vụ bộ nhớ trong, luôn làm mới DRAM máy chủ.
2 z80_wait Chèn trạng thái chờ chu kỳ T có thể định cấu hình trên bus chủ (được điều khiển bởi tcycwait).
2 z80_sync Phát hiện T1 trên mỗi chu kỳ bus và tín hiệu Core 1 thông qua IRQ, đồng bộ hóa các hoạt động của bộ nhớ trong với đồng hồ máy chủ.

Các máy trạng thái giao tiếp qua cờ PIO IRQ thay vì thăm dò, giúp loại bỏ độ trễ giữa các máy: IRQ 0 báo hiệu địa chỉ/khởi động chu kỳ, IRQ 1 báo hiệu pha dữ liệu, IRQ 2 biểu thị phát hiện T1, IRQ 3 báo hiệu sự kiện RESET, IRQ 4 báo hiệu NMI và IRQ 6 báo hiệu sự kiện đang hoạt động. BUSRQ.

Do các chương trình PIO thực thi độc lập với lõi Cortex-M33 nên giao diện bus tiếp tục phản hồi một cách xác định ngay cả khi Core 1 bị chiếm dụng bởi các truy cập PSRAM hoặc lệnh gọi thiết bị ảo.

Mẫu bộ nhớ ba tầng

Việc truy cập bộ nhớ được giải quyết thông qua ba tầng tăng dần độ trễ:

Cấp 1 — RP2350 SRAM (512KB, trạng thái chờ bằng 0)
Mảng 128 mục nhập gồm các giá trị 32-bit membankPtr, một giá trị trên mỗi khối 512 byte của không gian địa chỉ Z80 64KB đầy đủ, cung cấp cho Core 1 khả năng tra cứu kiểu khối O(1) cho mọi giao dịch xe buýt. Mảng này là bảng điều phối bên trong: mỗi mục nhập mã hóa loại khối và đối với các khối được hỗ trợ bởi PSRAM, phần bù PSRAM.

Cấp 2 — PSRAM bên ngoài (8MB, SPI)
PSRAM chứa 64 dãy hình ảnh RAM hoặc ROM 64KB, cùng với một mảng con trỏ hàm memPtr 64KB, một mảng con trỏ hàm 64KB memioPtr và một con trỏ hàm I/O 64KB ioPtr mảng. Độ trễ truy cập PSRAM được xác định và xử lý thông qua thiết bị ngoại vi SPI của RP2350 với DMA.

Cấp 3 — Flash SPI 16MB
Chương trình cơ sở, hình ảnh ROM và config.json được rút gọn được lưu trữ trong Flash. Hình ảnh ROM được sao chép từ Flash sang PSRAM khi khởi động và sau đó được cung cấp từ PSRAM khi chạy. Flash không được truy cập trong các giao dịch bus Z80 thông thường.

Các khối bộ nhớ được định cấu hình ở mức độ chi tiết 512 byte. Các loại khối có sẵn là:

Loại Mô tả
VẬT LÝ Truyền qua phần cứng máy chủ thực — RP2350 giải phóng bus và cho phép bộ nhớ máy chủ vật lý phản hồi.
PHYSICAL_VRAM Dưới dạng VẬT LÝ nhưng có trạng thái chờ bổ sung cho thời gian RAM video máy chủ.
PHYSICAL_HW Truyền qua các thanh ghi phần cứng máy chủ.
RAM Đọc/ghi — được hỗ trợ bởi ngân hàng PSRAM.
ROM Chỉ đọc — được hỗ trợ bởi ngân hàng PSRAM; chu kỳ ghi được âm thầm bỏ qua.
VRAM RAM video được hỗ trợ bởi PSRAM; chu kỳ ghi cũng được phản ánh tới VRAM của máy chủ vật lý.
FUNC Thiết bị ảo — mỗi quyền truy cập sẽ kích hoạt lệnh gọi hàm C, cho phép mô phỏng I/O tùy ý.
PTR Chuyển hướng theo byte — mỗi byte của khối 512 byte có thể trỏ đến bất kỳ khối hoặc loại nào khác.

Bố cục bộ nhớ Flash

Flash 16 MB được phân vùng như sau:

Phân vùng Phạm vi địa chỉ Kích thước Nội dung
Bộ nạp khởi động 0x10000000–0x1001FFFF 128KB Cầu nối USB, cập nhật chương trình cơ sở, bộ chọn phân vùng
Vùng ứng dụng 1 0x10020000–0x1051FFFF 5MB Phần mềm Z80 chính (phân vùng 1)
Vùng ứng dụng 2 0x10520000–0x10A1FFFF 5MB Phần mềm Z80 chính (phân vùng 2)
Cấu hình ứng dụng 1 0x10A20000–0x10C9FFFF 2,5 MB Hình ảnh ROM + JSON cấu hình rút gọn (khe 1)
Cấu hình ứng dụng 2 0x10CA0000–0x10F1FFFF 2,5 MB Hình ảnh ROM + JSON cấu hình rút gọn (khe 2)
Cấu hình chung 0x10F20000–0x10FFEFFF 892KB Lõi cài đặt, không gian đầu
Bảng phân vùng 0x10FFF000–0x11000000 4KB Vị trí hoạt động, tổng kiểm tra, siêu dữ liệu

Mỗi khe cấu hình có thể chứa tối đa 64 hình ảnh ROM và cấu hình JSON được rút gọn 64KB. Khe hoạt động được ghi lại trong bảng phân vùng và có thể được chuyển từ giao diện web hoặc bằng cách giữ nút thích hợp trong khi khởi động.


Nhân vật máy

Tính cách đang hoạt động được chọn thông qua trang Tính cách trên giao diện web hoặc bằng cách chỉnh sửa config.json.

Hệ thống lưu trữ và ngoại vi Trình điều khiển

Khi chương trình cơ sở được xây dựng bằng INCLUDE_SHARP_DRIVERS, các trình điều khiển ngoại vi sau sẽ được biên dịch và có thể được liên kết với bất kỳ cá nhân phần cứng ảo nào thông qua cấu hình JSON:

  • MZ700.c — Bộ thiết bị ngoại vi Sharp MZ-700
    - xử lý I/O chuyển mạch ngân hàng, video và bàn phím đặc trưng của MZ-700 ở cấp độ ngoại vi.
  • WD1773.c — Bộ điều khiển đĩa mềm
    - mô phỏng FDC WD1773 hỗ trợ hình ảnh đĩa 80 rãnh, 2 đầu, 8 cung trên mỗi rãnh ở định dạng DSK và RAW được lưu trữ trên thẻ SD. Các thanh ghi WD1773 được ánh xạ dưới dạng khối I/O loại FUNC.
  • QDDrive.c — Ổ đĩa QuickDisk
    - mô phỏng ổ thu nhỏ truy cập tuần tự Sharp QuickDisk bằng cách sử dụng các tệp hình ảnh QD trên thẻ SD. Trình điều khiển cung cấp mô phỏng Z80 SIO/2 đầy đủ (Kênh A cho dữ liệu theo dõi xoắn ốc, Kênh B cho điều khiển động cơ/trạng thái), hoàn chỉnh với tính năng phát hiện byte đồng bộ hóa pha săn, điều khiển động cơ qua RTS và các hoạt động tệp không đồng bộ giữa các lõi để truy cập thẻ SD.
  • RFS.c — Hệ thống lưu trữ ROM
    - triển khai giao diện lưu trữ và lưu trữ RFS, cho phép tải các tệp chương trình MZF từ thẻ SD. Tính năng RFS bao gồm CP/M v2.23 (48K), trình thông dịch SA-1510 BASIC tùy chỉnh và Microsoft BASIC v4.7, tất cả đều được cải tiến với quyền truy cập đọc/ghi thẻ SD để các chương trình và dữ liệu có thể được tải và lưu trực tiếp từ thẻ SD mà không cần băng cassette hoặc phần cứng đĩa mềm.
  • TZFS.c — Hệ thống lưu trữ TranZPUter (đang tiến hành)
    - Khung tích hợp TZFS hiện có nhưng bổ sung logic cho bộ xử lý I/O ảo vẫn đang được phát triển. Chuyển đổi mô phỏng máy, quản lý tệp, khởi động CP/M và lệnh đọc/ghi I/O sẽ khả dụng sau khi công việc này hoàn tất.
  • MZ-1E05.c — Bộ giao diện đĩa mềm
    - mô phỏng bộ điều khiển đĩa mềm Sharp MZ-1E05, dựa trên WD1773 FDC.
  • MZ-1E14.c — Bộ điều khiển QuickDisk với BIOS ROM (MZ-700 / MZ-800)
    - mô phỏng bộ điều khiển QuickDisk MZ-1E14, bao gồm ROM BIOS tích hợp cho máy MZ-700 và MZ-800.
  • MZ-1E19.c — Bộ điều khiển QuickDisk không có ROM BIOS (MZ-800 / MZ-2000 / MZ-2200 / MZ-2500)
    - mô phỏng bộ điều khiển QuickDisk MZ-1E19, không có ROM BIOS tích hợp và nhắm mục tiêu MZ-800, MZ-2000, MZ-2200 và MZ-2500 máy móc.
  • MZ-1R12.c — Bo mạch RAM chạy bằng pin 32KB
    - mô phỏng phần mở rộng RAM chạy bằng pin MZ-1R12 32KB của Sharp. Thay vì sử dụng pin thật, hình ảnh RAM được lưu giữ và khôi phục từ thẻ SD. Bảng mạch này thường được sử dụng để lưu trữ ứng dụng nên có thể sử dụng ngay khi khởi động, tránh thời gian tải băng cassette lâu.
  • MZ-1R18.c — Bo mạch RAM 64KB
    - mô phỏng phần mở rộng RAM Sharp MZ-1R18 64KB, thường được sử dụng làm đĩa RAMFILE để lưu trữ chương trình hoặc để cung cấp bộ nhớ bổ sung cho các ứng dụng tùy chỉnh yêu cầu nhiều hơn địa chỉ tiêu chuẩn không gian.

Các tính cách bổ sung sẽ được bổ sung vào thời điểm thích hợp.

Nhiều cá tính có thể cùng tồn tại trong cấu hình JSON, mỗi cá tính được liên kết với một ngân hàng PSRAM khác nhau. Chuyển đổi nhân cách sẽ thay đổi bản đồ bộ nhớ hoạt động và tải ảnh ROM mà không cần khởi động lại máy chủ.


Hướng dẫn xây dựng

Điều kiện tiên quyết

  • CMake 3.20+
    - được dùng làm hệ thống xây dựng cho chương trình cơ sở RP2350.
  • ARM GCC toolchain
    - arm-none-eabi-gcc, thường được cài đặt qua apt install gcc-arm-none-eabi.
  • Docker
    - required for the ESP32 firmware build, which runs inside the official Espressif IDF container (espressif/idf:release-v5.4). Không cần cài đặt ESP-IDF gốc.
  • Python 3
    - được yêu cầu bởi công cụ xây dựng Pico SDK.
  • Perl
    - được tập lệnh xây dựng sử dụng để tăng phiên bản tự động.

Cấu trúc thư mục

Tất cả các đường dẫn đều liên quan đến thư mục gốc do người dùng chọn, Ở đây được gọi là <gốc>. Tập lệnh xây dựng sử dụng biến PICO_PATH ở đầu mỗi tập lệnh. Biến này phải được cập nhật để khớp với biến gốc này trước khi sử dụng lần đầu. Bố cục dự kiến sau khi thiết lập là:

<gốc>/
├── get_and_build_sdk.sh # sao chép và xây dựng pico-sdk và pico-examples
├── build_tzpuPico.sh # xây dựng firmware RP2350 (và tùy chọn ESP32)
├── picoZ80.h.tmpl # mẫu định nghĩa bảng, được sao chép vào SDK tại thời điểm xây dựng
├── pico-sdk/ # được sao chép bởi get_and_build_sdk.sh
├── pico-ví dụ/ # nhân bản bởi get_and_build_sdk.sh
└── dự án/
    ├── Thư viện giả lập Z80/ # Zeta Z80 (được sao chép thủ công)
    └── tzpuPico/ # dự án picoZ80/pico6502 chính (được sao chép thủ công)

Bước 1 — Sao chép dự án

mkdir -p <gốc>/dự án
cd <root>/dự án
# Sao chép dự án tzpuPico chính
git clone <tzpuPico-repo-url> tzpuPico
# Sao chép thư viện trình mô phỏng Zeta Z80
git clone <zeta-repo-url> Z80

Bước 2 — Đặt PICO_PATH trong Bản dựng Tập lệnh

Chỉnh sửa biến PICO_PATH ở đầu cả get_and_build_sdk.shbuild_tzpuPico.sh để trỏ tới thư mục gốc mà bạn đã chọn:

export PICO_PATH=/your/chosen/root/

Bước 3 — Tải và xây dựng SDK Pico

get_and_build_sdk.sh sao chép SDK Pico Raspberry Pi (nhánh develop) và pico-examples (master nhánh) vào thư mục gốc, khởi tạo tất cả các mô-đun con, sau đó xây dựng SDK dựa trên mục tiêu RP2350. Chạy phần mềm này một lần trước khi xây dựng chương trình cơ sở đầu tiên và chạy lại bất cứ khi nào bạn muốn cập nhật SDK.

cd <gốc>
./get_and_build_sdk.sh

Tập lệnh sẽ sao chép vào <root>/pico-sdk/<root>/pico-examples/, sau đó xây dựng SDK với:

cmake -DPICO_BOARD=pimoroni_pga2350 -DPICO_PLATFORM=rp2350-arm-s -DPICO_SDK_PATH=<root>/pico-sdk/ ..
làm

Bước 4 — Xây dựng RP2350 Phần sụn

build_tzpuPico.sh xử lý bản dựng RP2350 hoàn chỉnh: nó sao chép định nghĩa bảng picoZ80.h vào SDK, sao lưu phiên bản hiện tại, chạy CMake và make -j4, tăng phiên bản trên bản dựng thành công và sao chép các tệp chương trình cơ sở kết quả vào projects/tzpuPico/fw/uf2/projects/tzpuPico/fw/bin/ với tên tệp được đóng dấu phiên bản. Thư mục fw/uf2/ chứa hình ảnh Bootloader UF2 (được sử dụng để nhấp nháy bộ lưu trữ lớn USB ban đầu); thư mục fw/bin/ chứa hình ảnh phân vùng ứng dụng nhị phân thuần túy (.bin) được sử dụng để cập nhật OTA. Các phân vùng ứng dụng được đặt tại các địa chỉ flash không chuẩn mà định dạng UF2 không thể thể hiện, do đó, nhị phân đơn giản được sử dụng cho tất cả các lần truyền OTA.

Tập lệnh chấp nhận một đối số tùy chọn:

cd <gốc>
# Bản phát hành tiêu chuẩn (chỉ RP2350)
./build_tzpuPico.sh
# Bản dựng gỡ lỗi (RP2350 chỉ CMAKE_BUILD_TYPE=Gỡ lỗi)
./build_tzpuPico.sh GỠ LỖI
# Bản dựng đầy đủ — chương trình cơ sở RP2350 cộng với chương trình cơ sở ESP32 qua Docker
./build_tzpuPico.sh TẤT CẢ

Xây dựng chương trình cơ sở ESP32 riêng biệt

Phần sụn ESP32 cũng có thể được xây dựng độc lập bằng Docker. Thêm bí danh sau vào cấu hình shell của bạn (~/.bashrc hoặc ~/.zshrc), sau đó gọi idf54 từ esp32/ thư mục:

# Thêm vào hồ sơ shell
bí danh idf54='docker run --rm --privileged \
  --khối lượng /dev:/dev\
  --volume /sys:/sys:ro \
  --volume /dev/bus/usb:/dev/bus/usb \
  -v $PWD:/dự án \
  -w /dự án \
  -it espressif/idf:release-v5.4 idf.py "$@"'
cd <root>/projects/tzpuPico/esp32
bản dựng idf54
# Phần sụn nhị phân: build/tzpuPico_esp32.bin
# Tải lên qua trang web OTA (ota-esp32.htm) hoặc flash trực tiếp qua USB

Nhấp nháy

Đèn flash RP2350 ban đầu

Không có nút BOOTSEL hoặc Reset vật lý trên bo mạch picoZ80. Cả hai tín hiệu đều được hiển thị trên tiêu đề gỡ lỗi 6 chân:

Ghim 1 Chân 2 Chân 3 Chân 4 Chân 5 Chân 6
SWCLK SWD Đặt lại RP2350 Đặt lại ESP32 GND BOOTSEL

Để vào chế độ lưu trữ lớn của bộ nạp khởi động RP2350, hãy sử dụng jumper hoặc đầu dò trên tiêu đề gỡ lỗi:

  1. Giữ Chân 6 (BOOTSEL) ở mức thấp.
  2. Cấp nguồn hoặc xác nhận Chân 3 (Đặt lại RP2350) ở mức thấp rồi nhả ra — RP2350 bắt đầu khởi động.
  3. Thả BOOTSEL ngay sau khi bật nguồn hoặc đặt lại. Việc giữ ở mức thấp sau thời điểm khởi động ban đầu sẽ ngăn RP2350 truy cập FlashRAM.
  4. Kết nối cổng USB picoZ80 với PC — RP2350 liệt kê như một thiết bị lưu trữ dung lượng lớn USB.
  5. Sao chép Bootloader_<version>.uf2 vào ổ đĩa được gắn. RP2350 tự flash bộ nạp khởi động và khởi động lại.

Tất cả các bản cập nhật chương trình cơ sở RP2350 tiếp theo có thể được thực hiện thông qua trang web OTA mà không cần chạm vào tiêu đề gỡ lỗi.

Đèn flash ESP32 ban đầu

ESP32 được flash bằng esptool qua môi trường ảo Python. Trên các phiên bản bo mạch mới hơn, ESP32 xuất hiện dưới dạng thiết bị USB của chính nó; trên các bo mạch gốc có một cổng USB duy nhất, nó chỉ có thể truy cập được thông qua RP2350 hoạt động như một cầu nối USB-UART. Trong cả hai trường hợp Chân 4 (Đặt lại ESP32) trên tiêu đề gỡ lỗi được sử dụng để giữ ESP32 ở trạng thái đặt lại trong trình tự khởi động RP2350 khi được yêu cầu.

Thiết lập môi trường Esptool một lần:

python3 -m venv ./venv/
nguồn ./venv/bin/activate
cd $HOME/esptool
[[TAG_1151]

Sau đó flash tất cả bốn thành phần chương trình cơ sở ESP32 trong một lệnh, điều chỉnh PORT để khớp với nút thiết bị do hệ điều hành của bạn chỉ định và BINPATH vào thư mục chứa các tệp nhị phân được tạo:

PORT=/dev/tty.usbmodem141403 # điều chỉnh cho phù hợp với hệ thống của bạn
BINPATH=/path/to/build/output
python3 ./esptool.py \
  -p ${PORT -b 115200 \
  --trước default_reset --sau hard_reset \
  --chip Esp32s3 \
  write_flash \
  --chế độ flash dio --flash_size 4MB --flash_freq 80m \
  0x0 ${BINPATH/bootloader.bin \
  0x8000 ${BINPATH/partition-table.bin \
  0x9000 ${BINPATH/ota_data_initial.bin \
  0x10000 ${BINPATH/sd_card.bin

Tất cả tiếp theo Có thể thực hiện cập nhật chương trình cơ sở ESP32 qua trang web OTA (ota-esp32.htm) mà không cần Esptool.

Ghi chú sửa đổi bo mạch: Bo mạch picoZ80 gốc (v2.0 đến v2.2) có một cổng USB duy nhất được kết nối với RP2350. Trên các bo mạch này, ESP32 phải được lập trình thông qua RP2350 hoạt động như một cầu nối USB-UART. Các phiên bản bo mạch mới hơn bổ sung thêm cổng USB thứ hai được kết nối trực tiếp với ESP32, cho phép Esptool xử lý cổng đó một cách độc lập.

Bản cập nhật OTA (sau lần flash đầu tiên)

  • RP2350 OTA
    - điều hướng đến http://<device-ip>/ota-rp2350.htm, chọn phiên bản .bin tệp từ fw/bin/ và tải lên. Các phân vùng ứng dụng tồn tại ở các địa chỉ flash không chuẩn, do đó cần có nhị phân thuần túy (không phải UF2). Bộ nạp khởi động xác minh tổng kiểm tra hình ảnh trước khi kích hoạt phân vùng mới.
  • ESP32 OTA
    - điều hướng đến http://<device-ip>/ota-esp32.htm và tải lên tệp nhị phân chương trình cơ sở ESP32. ESP32 tự động khởi động lại vào chương trình cơ sở mới. Trang này cũng chấp nhận kho lưu trữ FilePack được phiên bản để cập nhật hệ thống tệp web ESP32 trên thẻ SD — xem Tải lên FilePack bên dưới.

Chuẩn bị thẻ SD

Định dạng thẻ SD là FAT32. Đặt config.json vào thư mục gốc. Tạo thư mục con cho ảnh ROM, ảnh đĩa và cây hệ thống lưu trữ như được tham chiếu trong cấu hình của bạn. Khi bo mạch đang chạy, thẻ SD cũng có thể được quản lý hoàn toàn thông qua trang Trình quản lý tệp trên web.


Đang gỡ lỗi

PicoZ80 hỗ trợ gỡ lỗi cấp nguồn đầy đủ cho cả lõi RP2350 và bộ đồng xử lý ESP32. RP2350 được gỡ lỗi trên SWD bằng đầu dò CMSIS-DAP, với OpenOCD cung cấp máy chủ GDB hai mục tiêu (một cổng cho mỗi lõi). ESP32-S3 được gỡ lỗi trên giao diện USB-JTAG tích hợp bằng chuỗi công cụ Xtensa GDB.

RP2350 — Gỡ lỗi SWD

Kết nối phần cứng
Kết nối đầu dò ARM DAPLink / CMSIS-DAP (ví dụ: Đầu dò gỡ lỗi Raspberry Pi, Đầu dò ma thuật đen hoặc bất kỳ bộ chuyển đổi tương thích CMSIS-DAP nào) với tiêu đề gỡ lỗi 6 chân trên bảng picoZ80. Chỉ cần ba kết nối:

Ghim tiêu đề gỡ lỗi Tín hiệu Chức năng SWD
Ghim 1SWCLKĐồng hồ dây nối tiếp
Chân 2SWDIODữ liệu dây nối tiếp
Chân 5GNDTham chiếu mặt đất

Đang bắt đầu OpenOCD
OpenOCD hiển thị hai cổng máy chủ GDB - cổng 3333 cho Core 0 và cổng 3334 cho Core 1. PicoZ80 yêu cầu một sửa đổi nhỏ đối với tập lệnh đích OpenOCD RP2350 tiêu chuẩn để cho phép gỡ lỗi SMP thực sự với các cổng GDB riêng biệt cho mỗi lõi. Sao chép tập lệnh chuẩn và bỏ ghi chú dòng target smp:

sudo cp /usr/local/share/openocd/scripts/target/rp2350.cfg \
        /usr/local/share/openocd/scripts/target/rp2350_tzpu.cfg

Sau đó chỉnh sửa rp2350_tzpu.cfg — tìm dòng target smp bên trong if {[string so sánh $_USE_CORE SMP] == 0 chặn và xóa # hàng đầu:

# Trước (rp2350.cfg):
    #target smp $_TARGETNAME_0 $_TARGETNAME_1
# Sau (rp2350_tzpu.cfg):
    mục tiêu smp $_TARGETNAME_0 $_TARGETNAME_1

Thay đổi duy nhất này kích hoạt chế độ SMP để OpenOCD đăng ký Core 0 trên cổng GDB 3333 và Core 1 trên cổng 3334, cho phép mỗi lõi được gắn và bước độc lập. Khởi chạy OpenOCD từ thư mục gốc của dự án trước khi khởi động GDB:

openocd -f giao diện/cmsis-dap.cfg -f target/rp2350_tzpu.cfg -c "tốc độ bộ chuyển đổi 5000"

Khởi tạo GDB toàn cầu (~/.gdbinit)
GDB yêu cầu quyền rõ ràng để tự động tải các tệp .gdbinit trên mỗi thư mục. Thêm phần sau vào ~/.gdbinit, điều chỉnh đường dẫn cho phù hợp với vị trí dự án của bạn (hiển thị ở đây liên quan đến thư mục gốc của dự án — sử dụng đường dẫn tuyệt đối trong ~/.gdbinit nếu bạn chạy GDB từ các thư mục khác nhau):

bật lịch sử lưu
đặt tên tệp lịch sử ~/.gdb_history
đặt kích thước lịch sử 65536
thêm đường dẫn tự động tải-an toàn build/bin/model/BaseZ80/.gdbinit:build/bin/model/Bootloader/.gdbinit

Gỡ lỗi bộ nạp khởi động

Sao chép tệp .gdbinit thích hợp vào thư mục bản dựng Bootloader, sau đó khởi chạy gdb-multiarch. Tệp .gdbinit.bootloader.3333 kết nối với Core 0 (cổng 3333) và ghi nhật ký đầu ra vào gdb_core0.txt; .gdbinit.bootloader.3334 kết nối với Core 1 (cổng 3334) và ghi nhật ký vào gdb_core1.txt. Mở hai thiết bị đầu cuối để gỡ lỗi đồng thời cả hai lõi:

# Nhà ga 1 — Lõi 0
bản dựng cd/bin/model/Bộ nạp khởi động
cp ../../../../.gdbinit.bootloader.3333 .gdbinit
gdb-multiarch Bootloader.elf
# Nhà ga 2 — Lõi 1
bản dựng cd/bin/model/Bộ nạp khởi động
cp ../../../../.gdbinit.bootloader.3334 .gdbinit
gdb-multiarch Bootloader.elf

Gỡ lỗi chương trình cơ sở chính

chính firmware .gdbinit (.gdbinit.3333.gdbinit.3334) xác định một xac tùy chỉnh Lệnh <address> <count> kết xuất bộ nhớ dưới dạng đầu ra hex và ASCII kết hợp, kết nối với cổng GDB tương ứng và tiếp tục thực thi. Điều này hữu ích để kiểm tra nội dung ngân hàng PSRAM và trạng thái thiết bị được ánh xạ bộ nhớ mà không làm dừng vòng lặp mô phỏng:

# Nhà ga 1 — Lõi 0
bản dựng cd/bin/model/BaseZ80
cp ../../../../.gdbinit.3333 .gdbinit
gdb-multiarch BaseZ80_0x10020000.elf
# Nhà ga 2 — Lõi 1
bản dựng cd/bin/model/BaseZ80
cp ../../../../.gdbinit.3334 .gdbinit
gdb-multiarch BaseZ80_0x10020000.elf
# Ví dụ về kết xuất bộ nhớ (trong dấu nhắc GDB):
(gdb) xac 0x20000000 64

ESP32 — Gỡ lỗi USB

Bộ đồng xử lý ESP32-S3 có giao diện USB-JTAG tích hợp — không cần đầu dò gỡ lỗi bên ngoài. Kết nối trực tiếp cáp USB từ PC chủ với cổng USB ESP32 trên bo mạch picoZ80.

Khởi động OpenOCD bằng cấu hình JTAG tích hợp ESP32-S3:

openocd -f board/esp32s3-buildin.cfg

Sau đó khởi chạy Xtensa GDB trỏ vào ELF firmware ESP32 (nằm tại esp32/build/main.elf liên quan đến thư mục gốc của dự án) và đính kèm vào OpenOCD Máy chủ GDB:

xtensa-esp32s3-elf-gdb Esp32/build/main.elf
(gdb) mục tiêu mở rộng-từ xa :3333

Đảm bảo ELF được xây dựng từ cùng một bản sửa đổi nguồn khi chương trình cơ sở được flash vào thiết bị để các ký hiệu và địa chỉ căn chỉnh chính xác.


Cấu hình (JSON)

Tất cả hành vi của picoZ80 được điều khiển bởi config.json trên thẻ SD. RP2350 đọc tệp này khi khởi động thông qua ESP32, thu nhỏ nó và lưu kết quả vào Flash. Nếu không có thẻ SD, cấu hình đã lưu trước đó sẽ được sử dụng. Cấu hình có thể được chỉnh sửa trực tiếp trong trình duyệt bằng trang Trình chỉnh sửa cấu hình.

Cấu trúc cấp cao nhất là:

{
  "esp32": { "cốt lõi": {
      "thiết bị": "Z80",
      "chế độ": 0 },
    "wifi": {
      "ghi đè": 1,
      "chế độ wifi": "khách hàng",
      "ssid": "Mạng của tôi",
      "mật khẩu": "Mật khẩu của tôi", "ip": "192.168.1.192",
      "netmask": "255.255.255.0",
      "cổng": "192.168.1.1",
      "dhcp": 0,
      "webfs": "webfs", "kiên trì": 0
    
  },
  "rp2350": { "cốt lõi": {
      "cpufreq": 300000000,
      "psramfreq": 133000000,
      "điện áp": 1,10
    },
    "z80": [ {
        "bộ nhớ": [ ... ],
        "io": [ ... ],
        "trình điều khiển": [ ... ]
       ]
  

esp32 — Cấu hình ESP32

Đối tượng cấp cao nhất esp32 định cấu hình bộ đồng xử lý ESP32. Nó chứa hai đối tượng phụ: corewifi.

esp32.core

Khóa Loại Mô tả
thiết bị chuỗi Loại thiết bị CPU — cho ESP32 biết nên sử dụng tính cách bộ xử lý nào. Các giá trị hợp lệ: "Z80" (picoZ80), "6502" (pico6502), "6512" (pico6512).
chế độ số nguyên Chế độ khởi động mặc định: 0 = chế độ máy khách (trạm), 1 = chế độ Điểm truy cập. Giá trị này được duy trì trong NVS và được sử dụng trong lần khởi động tiếp theo nếu trình quản lý WiFi không ghi đè nó.

esp32.wifi

Đối tượng wifi cung cấp cơ chế đưa thông tin đăng nhập WiFi và cài đặt mạng từ config.json, ghi đè mọi thứ được lưu trữ trong NVS. Điều này hữu ích cho việc cung cấp ban đầu hoặc để triển khai cấu hình mạng đã biết rõ mà không cần sử dụng Trình quản lý WiFi trên web. Đặt ghi đè thành 0 để bỏ qua hoàn toàn tệp cấu hình và dựa vào cài đặt NVS vẫn tồn tại trước đó.

Khóa Loại Mô tả
ghi đè 0/1 Công tắc chính. 1 = áp dụng tất cả cài đặt bên dưới; 0 = bỏ qua khối này và sử dụng cài đặt NVS liên tục.
chế độ wifi chuỗi "ap" dành cho chế độ Điểm truy cập (ESP32 tạo mạng riêng); "client" dành cho chế độ máy khách/trạm (ESP32 tham gia mạng hiện có).
ssid chuỗi Tên mạng WiFi (SSID) để tạo (chế độ AP) hoặc tham gia (chế độ máy khách).
mật khẩu chuỗi Cụm mật khẩu WiFi cho SSID.
ip chuỗi Địa chỉ IP cố định (ví dụ: "192.168.1.192"). Được sử dụng trong cả chế độ AP và máy khách khi dhcp0.
netmask chuỗi Mặt nạ mạng con (ví dụ: "255.255.255.0").
cổng chuỗi Địa chỉ cổng mặc định (ví dụ: "192.168.1.1").
dhcp 0/1 Chỉ chế độ máy khách. 1 = lấy địa chỉ qua DHCP; 0 = sử dụng ip/netmask/gateway cố định ở trên.
webfs chuỗi Ghi đè thư mục gốc của hệ thống tệp web trên thẻ SD (mặc định "webfs"). Cho phép phân phối nội dung giao diện người dùng web thay thế.
kiên trì 0/1 1 = ghi lại cài đặt WiFi đã giải quyết vào NVS để chúng vẫn tồn tại khi khởi động lại ngay cả sau khi override bị xóa; 0 = đăng ký cho phiên này chỉ.

lõi — Thông số vận hành RP2350

Khóa Loại Mô tả
cpufreq số nguyên Tần số xung nhịp hệ thống RP2350 tính bằng Hz (ví dụ: 300000000 cho 300 MHz).
psramfreq số nguyên Tần số xung nhịp PSRAM SPI tính bằng Hz (ví dụ: 133000000 cho 133 MHz).
điện áp thả nổi Điện áp lõi RP2350 tính bằng vôn (ví dụ: 1,10). Tốc độ xung nhịp cao hơn có thể yêu cầu điện áp cao hơn.

bộ nhớ — Bản đồ bộ nhớ

Mảng bộ nhớ xác định bản đồ bộ nhớ Z80. Mỗi mục bao gồm một vùng liền kề của không gian địa chỉ Z80 64KB, được làm tròn thành ranh giới khối 512 byte.

Khóa Loại Mô tả
bật 0/1 Mục này có hoạt động hay không.
addr chuỗi thập lục phân Địa chỉ bắt đầu trong không gian địa chỉ Z80 (ví dụ: "0x0000").
kích thước chuỗi thập lục phân Kích thước của khu vực (ví dụ: "0x2000" cho 8KB).
loại chuỗi Loại khối: PHYSICAL, PHYSICAL_VRAM, PHYSICAL_HW, RAM, ROM, VRAM, FUNC, PTR.
ngân hàng số nguyên Số ngân hàng PSRAM (0–63) cho các loại RAM/ROM/VRAM.
tcycwait số nguyên Số trạng thái chờ chu kỳ T bổ sung chèn vào quyền truy cập.
tcycsync số nguyên Bật đồng bộ hóa với cạnh tăng T1.
nhiệm vụ chuỗi Mã nhận dạng nhiệm vụ tùy chọn cho các khối loại FUNC.
tệp chuỗi Đường dẫn thẻ SD tới hình ảnh ROM để tải vào khối này khi khởi động.
tệp của số nguyên Độ lệch byte trong tệp hình ảnh ROM để bắt đầu đọc từ đó.
"bộ nhớ": [
  {
    "bật": 1, "addr": "0x0000",
    "kích thước": "0x1000",
    "loại": "ROM",
    "ngân hàng": 0,
    "tcycwait": 0, "tcycsync": 0,
    "nhiệm vụ": "",
    "tệp": "/TZFS/tzfs.rom",
    "fileof": 0
  },
  {
    "bật": 1,
    "addr": "0x1000",
    "kích thước": "0xCFFF", "loại": "RAM",
    "ngân hàng": 0,
    "tcycwait": 0,
    "tcycsync": 0,
    "nhiệm vụ": "", "tệp": "",
    "fileof": 0
  },
  { "bật": 1,
    "addr": "0xD000",
    "kích thước": "0x1000",
    "loại": "PHYSICAL_VRAM",
    "ngân hàng": 0, "tcycwait": 2,
    "tcycsync": 0,
    "nhiệm vụ": "",
    "tệp": "",
    "fileof": 0 
]

io — Bản đồ cổng I/O

Mảng io ánh xạ các phạm vi cổng I/O Z80 tới các trình xử lý. Chu kỳ I/O được phân biệt với chu kỳ bộ nhớ bằng tín hiệu Z80 IORQ mà máy trạng thái điều khiển PIO giám sát.

Khóa Loại Mô tả
bật 0/1 Mục này có hoạt động hay không.
addr chuỗi thập lục phân Địa chỉ cổng I/O bắt đầu (ví dụ: "0xE0").
kích thước chuỗi thập lục phân Số cổng trong phạm vi.
loại chuỗi VẬT LÝ (chuyển tới máy chủ), FUNC (gọi trình xử lý C).
func chuỗi Tên hàm xử lý cho loại FUNC.
"io": [
  {
    "bật": 1,
    "addr": "0xE0", "kích thước": "0x08",
    "loại": "FUNC",
    "func": "mz700_io"
  },
  {
    "bật": 1,
    "addr": "0x00",
    "kích thước": "0xE0",
    "loại": "VẬT LÝ" 
]

trình điều khiển — Trình điều khiển máy

Mảng drivers liên kết các phiên bản trình điều khiển được đặt tên với ngữ cảnh Z80. Mỗi trình điều khiển có một hoặc nhiều giao diện (được liệt kê trong khóa "if"), mỗi trình điều khiển có thể tải hình ảnh ROM, ánh xạ lại dải địa chỉ, ánh xạ lại phạm vi cổng I/O và nhận các tệp tham số.

Khóa Loại Mô tả
bật 0/1 Trình điều khiển này đã được tải chưa.
tên chuỗi Tên trình điều khiển (phải khớp với trình điều khiển được biên dịch sẵn, ví dụ: "MZ700", "RFS", "TZFS").
loại chuỗi VẬT LÝ hoặc VIRTUAL.
nếu mảng Mảng đối tượng giao diện (xem bên dưới).

Đối tượng giao diện (if[]):

Khóa Loại Mô tả
bật 0/1 Giao diện này có hoạt động hay không.
tên chuỗi Tên phiên bản giao diện.
loại chuỗi VẬT LÝ hoặc VIRTUAL.
rom mảng Hình ảnh ROM sẽ tải vào PSRAM khi khởi động.
addrmap mảng Quy tắc ánh xạ lại địa chỉ cho giao diện này.
iomap mảng Quy tắc ánh xạ lại cổng I/O cho giao diện này.
thông số mảng Tệp tham số được truyền tới trình điều khiển.

rom[] mục nhập:

Khóa Loại Mô tả
bật 0/1 Liệu mục nhập ROM này có hoạt động hay không.
tệp chuỗi Đường dẫn thẻ SD tới tệp nhị phân ROM.
loadaddr mảng Địa chỉ tải bộ mô tả (vị trí, địa chỉ, ngân hàng, kích thước, trạng thái chờ).

addrmap[] mục nhập:

Khóa Loại Mô tả
bật 0/1 Liệu ánh xạ này có đang hoạt động hay không.
srcAddr chuỗi thập lục phân Địa chỉ nguồn trong không gian Z80.
kích thước chuỗi thập lục phân Kích thước của vùng được ánh xạ.
dstAddr chuỗi thập lục phân Địa chỉ đích sau khi ánh xạ lại.

iomap[] mục nhập:

Khóa Loại Mô tả
bật 0/1 Liệu ánh xạ I/O này có đang hoạt động hay không.
srcAddr hex chuỗi Cổng I/O nguồn.
kích thước chuỗi thập lục phân Số cổng.
dstAddr chuỗi thập lục phân Cổng đích sau khi ánh xạ lại.
16bit 0/1 Có sử dụng địa chỉ I/O 16 bit hay không.
"trình điều khiển": [
  { "bật": 1,
    "tên": "MZ700",
    "loại": "VẬT LÝ",
    "if": [
      {
        "bật": 1, "tên": "chính",
        "loại": "VẬT LÝ",
        "rom": [
          {
            "bật": 1,
            "tệp": "/MZ700/mz700.rom",
            "loadaddr": [
              {
                "bật": 1,
                "vị trí": 0,
                "addr": "0x0000", "ngân hàng": 0,
                "kích thước": "0x1000",
                "tcycwait": 0,
                "tcycsync": 0
              
            ]
           ],
        "addrmap": [
          {
            "bật": 1, "srcAddr": "0x0000",
            "kích thước": "0x1000",
            "dstAddr": "0x0000"
          
        ],
        "iomap": [
          { "bật": 1,
            "srcAddr": "0xE0",
            "kích thước": "0x08",
            "dstAddr": "0xE0",
            "16bit": 0 
        ],
        "param": [
          {
            "bật": 1,
            "tệp": "/config/mz700.cfg"
          
        ]
       ]
  },
  {
    "bật": 1,
    "tên": "MZ-1E05",
    "loại": "VẬT LÝ",
    "if": [
      { "bật": 1,
        "tên": "fdc0",
        "loại": "VẬT LÝ",
        "rom": [],
        "addrmap": [], "iomap": [
          {
            "bật": 1, "srcAddr": "0xD8",
            "kích thước": "0x04",
            "dstAddr": "0xD8",
            "16bit": 0
          
        ],
        "param": [
          {
            "bật": 1,
            "tệp": "/DSK/MZ700/disk0.dsk" 
        ]
      
    ]
  
]

Hoàn thành cấu hình tối thiểu Ví dụ

Sau đây là cấu hình tối thiểu khởi động MZ-700 với ROM, RAM 48KB, VRAM chủ và bộ điều khiển đĩa mềm WD1773:

{
  "rp2350": { "cốt lõi": {
      "cpufreq": 300000000,
      "psramfreq": 133000000,
      "điện áp": 1,10
    },
    "z80": [ {
        "bộ nhớ": [
          { "bật":1, "addr":"0x0000", "kích thước":"0x1000", "loại":"ROM", "ngân hàng":0, "tcycwait":0, "tcycsync":0, "nhiệm vụ":"",
            "tệp":"/MZ700/mz700.rom", "fileof":0 }, { "bật":1, "addr":"0x1000", "kích thước":"0xCFFF", "loại":"RAM",
            "ngân hàng":0, "tcycwait":0, "tcycsync":0, "nhiệm vụ":"", "tệp":"", "fileof":0 },
          { "bật":1, "addr":"0xD000", "kích thước":"0x1000", "loại":"PHYSICAL_VRAM",
            "ngân hàng":0, "tcycwait":2, "tcycsync":0, "nhiệm vụ":"", "tệp":"", "fileof":0 },
          { "bật":1, "addr":"0xE000", "kích thước":"0x2000", "loại":"VẬT LÝ", "ngân hàng":0, "tcycwait":0, "tcycsync":0, "nhiệm vụ":"", "tệp":"", "fileof":0  ],
        "io": [
          { "bật":1, "addr":"0xE0", "kích thước":"0x08", "loại":"FUNC", "func":"mz700_io" },
          { "bật":1, "addr":"0xD8", "kích thước":"0x04", "loại":"FUNC", "func":"wd1773_io" 
        ],
        "trình điều khiển": [
          { "bật":1, "tên":"MZ700", "loại":"VẬT LÝ", "if": [{ "bật":1, "tên":"main", "loại":"VẬT LÝ",
                     "rom":[], "addrmap":[], "iomap":[], "param":[] }]
          },
          {
            "bật":1, "tên":"MZ-1E05", "loại":"VẬT LÝ",
            "if": [{ "bật":1, "tên":"fdc0", "loại":"VẬT LÝ", "rom":[], "addrmap":[], "iomap":[],
                     "param":[{ "bật":1, "tệp":"/DSK/MZ700/disk0.dsk" }] }]
           ]
      
    ]
  


Giao diện web

Bộ đồng xử lý ESP32 lưu trữ một trang web giao diện quản lý được xây dựng bằng Bootstrap 4. Kết nối với mạng WiFi của picoZ80 (hoặc định cấu hình chế độ máy khách để tham gia mạng hiện có của bạn) và điều hướng đến http://<device-ip>/ — theo mặc định http://192.168.4.1/ ở chế độ Điểm truy cập.

Khi bật nguồn lần đầu, bo mạch sẽ bắt đầu ở chế độ WiFi AP. Sử dụng trang Trình quản lý WiFi để định cấu hình chế độ máy khách và chỉ định địa chỉ IP cố định trên mạng của bạn. Tất cả bảy trang đều có chung một thanh điều hướng bên trái cho phép truy cập bằng một cú nhấp chuột vào Trạng thái, Trình chỉnh sửa cấu hình, Trình quản lý tệp, Cài đặt (Chương trình cơ sở → ESP32 / RP2350, Trình quản lý WiFi) và Persona.

Trang tổng quan — Trạng thái (index.htm)

Trang đích hiển thị trực tiếp của bảng trạng thái trên ba bảng:

  • Cấu hình WiFi
    - SSID hiện tại, địa chỉ IP được chỉ định, mặt nạ mạng và cổng. Tên bảng (tzpuPico) và chuỗi bản quyền được máy chủ web ESP32 phân phát dưới dạng biến mẫu.
  • Thông tin phiên bản
    - Bảng phân vùng ESP32 hiển thị tất cả các vị trí OTA với loại, loại phụ, địa chỉ flash, kích thước, phiên bản chương trình cơ sở, dấu thời gian xây dựng và vị trí nào hiện đang chạy. Điều này giúp việc xác nhận chương trình cơ sở nào đang hoạt động sau khi cập nhật OTA trở nên dễ dàng.
  • Phân vùng RP2350
    - bảng phân vùng flash RP2350 với số phân vùng, địa chỉ, kích thước, tổng kiểm tra, cờ hoạt động/đang chạy, giấy phép, tác giả, mô tả, phiên bản, ngày xây dựng và bản quyền — cung cấp ảnh chụp nhanh hoàn chỉnh về trạng thái chương trình cơ sở RP2350 cùng với ESP32 thông tin.

Hai menu thả xuống ở thanh điều hướng phía trên bên phải có sẵn trên mỗi trang:

  • Menu tác vụ
    - Change Floppy Disk 1 / 2 — chọn tệp hình ảnh DSK mới từ thẻ SD và gắn nó vào khe 1 hoặc khe 2 của bộ điều khiển đĩa mềm WD1773 ảo mà không cần khởi động lại. Tên tệp ảnh đĩa hiện được tải sẽ hiển thị bên cạnh mỗi mục nhập (hoặc "không" nếu không có ảnh nào được tải).
    - Change QD Disk — hoán đổi tệp hình ảnh QuickDisk đang hoạt động một cách nhanh chóng. Tên tệp hình ảnh QD hiện được tải được hiển thị bên cạnh mục nhập.
    - Tải lại cấu hình RP2350 — gửi lệnh tải lại tới RP2350 qua ESP32–RP2350 UART; RP2350 phân tích lại config.json và áp dụng lại bản đồ bộ nhớ và cấu hình trình điều khiển mà không cần cấp nguồn đầy đủ.
  • Menu khởi động lại
    - ESP32 — khởi động lại mềm bộ đồng xử lý ESP32 (khởi động lại máy chủ web và ngăn xếp WiFi, RP2350 không bị ảnh hưởng).
    - RP2350B — đặt lại bộ xử lý RP2350 (chạy lại bộ nạp khởi động và tải lại khe cắm chương trình cơ sở đang hoạt động, CPU chủ bị tạm dừng trong khi đặt lại).
    - Host — xác nhận dòng đặt lại của máy tính chủ, khởi động lại máy tính cũ trong ổ cắm Z80 mà không ảnh hưởng đến bo mạch picoZ80 chính nó.

picoZ80 Web Interface — Status Dashboard

Trình chỉnh sửa cấu hình (config.htm)

Trang Trình chỉnh sửa cấu hình cung cấp toàn quyền kiểm soát chỉnh sửa đối với tệp cấu hình JSON. Thay đổi cấu hình bằng trình chỉnh sửa wysiwyg, lưu khi cần và nhấp vào Áp dụng để xử lý lại cấu hình.

Thẻ SD giữ các bản sao lưu được đánh số tự động của mọi cấu hình đã lưu (config.json;1, config.json;2, … với số cao nhất là số gần đây nhất), do đó luôn có thể quay lại cấu hình làm việc trước đó. Các cấu hình đã chỉnh sửa sẽ được lưu lại vào thẻ SD; nhấp vào Áp dụng hoặc hành động menu "Tải lại" sau đó gửi lệnh tải lại tới RP2350 qua UART ESP32–RP2350, khiến RP2350 phân tích lại và áp dụng lại cấu hình mới và khiến ESP32 phân tích cú pháp và tải lại cấu hình của nó.

picoZ80 Web Interface — Config Editor

Trình quản lý tệp (filemanager.htm)

Trình quản lý tệp cung cấp trình duyệt tệp dựa trên web đầy đủ cho thẻ SD, cung cấp bố cục danh sách thư mục để xem tệp trên thẻ SD.

Nó được thiết kế để bảo trì thẻ SD chung: tải lên hình ảnh ROM, hình ảnh đĩa mềm (DSK), hình ảnh QuickDisk (QD), hình ảnh đĩa RAM và cập nhật hệ thống tệp web mà không cần xóa thẻ.

Mỗi mục nhập đều có các nút tác vụ để sao chép, xóa, tải xuống hoặc chỉnh sửa tệp văn bản và nút tải lên Select File ở trên cùng cho phép truyền các tệp mới từ PC. Điều hướng thư mục cho phép đi xuống các thư mục con như roms/, dsk/, qd/ram/.

Tải lên tệp tar hoặc gzip sẽ tự động giải nén và giải nén tệp tar hoặc gzip (hoặc tar.gz) trong SD hiện tại thư mục.

picoZ80 Web Interface — File Manager

Tính cách Lựa chọn (tính cách.htm)

Trang Persona định cấu hình tính cách máy đang hoạt động một cách độc lập cho từng phân vùng trong số hai phân vùng chương trình cơ sở RP2350. Mỗi phân vùng có cột nút radio riêng bao gồm mọi loại máy Sharp MZ được hỗ trợ:

  • CPU cơ bản — mô phỏng Z80 thuần túy không có trình điều khiển dành riêng cho máy; hữu ích cho việc phát triển Z80 chung.
  • MZ-80AMZ-80B — Dòng MZ-80 sắc nét (ROM màn hình 1Z-013A, bàn phím MZ-80, bộ nhớ tiêu chuẩn bản đồ).
  • MZ-700 — Sharp MZ-700 với VRAM chuyển đổi ngân hàng, bộ điều khiển bàn phím và trình điều khiển đĩa mềm/QuickDisk tùy chọn.
  • MZ-800 — MZ-800 sắc nét với các chế độ video mở rộng và hỗ trợ QuickDisk.
  • MZ-1500 — Sharp MZ-1500 với QuickDisk và đĩa mềm tùy chọn.
  • MZ-2000, MZ-2200, MZ-2500 — dòng Sharp MZ sau này có video độ phân giải cao và bộ nhớ mở rộng.

Chọn một nhân vật và nhấp vào Chọn Personae ghi config.json dựng sẵn tương ứng vào thẻ SD (sao lưu tệp hiện tại trước) và kích hoạt một tải lại cấu hình. Bởi vì mỗi phân vùng chương trình cơ sở có thể chứa một cá tính khác nhau, nên bo mạch có thể được chuyển đổi giữa, chẳng hạn như cá tính MZ-700 trên phân vùng 1 và cá tính MZ-80A trên phân vùng 2 mà không cần chỉnh sửa thẻ SD.

picoZ80 Web Interface — Persona Selection

Cập nhật chương trình cơ sở — ESP32 (ota-esp32.htm)

Trang OTA ESP32 báo cáo đầy đủ kiểm kê phần mềm của ESP32 trước khi chấp nhận tải lên chương trình cơ sở:

  • Bảng điều khiển mô-đun
    - hiển thị phiên bản của từng thành phần phần mềm ESP32: ứng dụng ESP32 chính, thư viện NVS (lưu trữ cố định), ngăn xếp WiFi, FilePack (trình đóng gói hệ thống tệp web) và WebFS (hệ thống tệp web trong flash). Điều này giúp dễ dàng xác nhận tất cả các thành phần đều nhất quán sau khi cập nhật.
  • Bảng phân vùng ESP32
    - hiển thị bảng phân vùng OTA ESP32 đầy đủ (otadata, nvs, phy_init, ota_0, ota_1) với địa chỉ, kích thước, phiên bản chương trình cơ sở, dấu thời gian xây dựng và khe OTA nào hiện đang hoạt động (được đánh dấu là "Có").
  • Bảng tải lên chương trình cơ sở ESP32
    - chấp nhận tệp nhị phân ESP32 (.bin) do bản dựng ESP-IDF tạo ra. Sau khi tải lên, ESP32 khởi động lại vào chương trình cơ sở mới và khe cắm cũ được giữ lại làm dự phòng.
  • Bảng tải lên FilePack
    - tải tệp lưu trữ FilePack đã được phiên bản lên thẻ SD. FilePack gói tất cả nội dung web tĩnh ESP32 (HTML, CSS, mẫu JavaScript và tệp phụ trợ) vào một kho lưu trữ có thể phân phối duy nhất. Khi tải lên ESP32 sẽ giải nén tệp lưu trữ vào thư mục hệ thống tệp web của thẻ SD; mọi tệp được thay thế sẽ tự động được đổi tên để bao gồm số phiên bản trước đó (ví dụ: webfswebfs.2.80), giữ nguyên phiên bản cũ để khôi phục. Điều này phù hợp với phiên bản kiểu VAX/VMS được sử dụng ở nơi khác trên thẻ SD, trong đó mỗi bản sửa đổi liên tiếp của tệp có thể chỉnh sửa được lưu giữ bằng hậu tố số: config.json;1, config.json;2, v.v. — đảm bảo không có chỉnh sửa nào bị ghi đè âm thầm.

picoZ80 Web Interface — ESP32 Firmware Update

Cập nhật chương trình cơ sở — RP2350 (ota-rp2350.htm)

Trang OTA RP2350 quản lý hai phân vùng chương trình cơ sở RP2350:

  • Bảng phân vùng RP2350
    - liệt kê tất cả ba phân vùng: phân vùng 0 (Bộ nạp khởi động), phân vùng 1 (khe ứng dụng đầu tiên, ví dụ: "Trình mô phỏng CPU Z80") và phân vùng 2 (khe thứ hai). Mỗi hàng hiển thị địa chỉ flash, kích thước, tổng kiểm tra, cờ hoạt động/đang chạy, giấy phép, tác giả, mô tả, phiên bản và ngày xây dựng. Phân vùng hiện đang chạy được đánh dấu là "Có" trong cột Hoạt động.
  • Bảng tải lên chương trình cơ sở RP2350
    - chấp nhận tệp chương trình cơ sở nhị phân thuần túy .bin từ fw/bin/. UF2 không được sử dụng ở đây — các phân vùng ứng dụng được đặt tại các địa chỉ flash không chuẩn mà UF2 không thể biểu thị, do đó quá trình truyền OTA sử dụng nhị phân thô. Sử dụng các nút radio Phân vùng 1 / Phân vùng 2 để chọn vùng mục tiêu. Có hai hộp kiểm bổ sung: Xóa cấu hình ứng dụng xóa hình ảnh ROM và phân vùng cấu hình JSON được rút gọn được liên kết với vị trí đích (hữu ích khi nâng cấp lên phiên bản chương trình cơ sở có lược đồ cấu hình không tương thích) và Xóa tiêu đề flash đặt lại tiêu đề phân vùng flash về mặc định ban đầu, xây dựng lại bảng phân vùng từ đầu trong khi vẫn giữ nguyên bộ nạp khởi động cấu hình. Quá trình tải lên được xác minh bằng tổng kiểm tra trước khi phân vùng mới được kích hoạt.
  • Bảng phân vùng hoạt động RP2350
    - chuyển đổi phân vùng hoạt động một cách độc lập mà không cần tải chương trình cơ sở mới lên. Việc chọn một phân vùng ở đây sẽ kích hoạt quá trình khởi động lại tự động vào khe đã chọn — hữu ích để chuyển đổi giữa hai biến thể chương trình cơ sở được tải sẵn (ví dụ: Z80 và bản dựng thử nghiệm) mà không cần truyền bất kỳ tệp nào.

picoZ80 Web Interface — RP2350 Firmware Update

Trình quản lý WiFi (wifimanager.htm)

Trình quản lý WiFi định cấu hình cách picoZ80 kết nối với mạng. Bảng trên cùng hiển thị cấu hình WiFi hiện đang hoạt động (SSID, IP được chỉ định, mặt nạ mạng và cổng). Biểu mẫu Định cấu hình WiFi bên dưới hiển thị tất cả các cài đặt:

  • Chế độ WiFi
    - Điểm truy cập: picoZ80 phát SSID của chính nó và bạn kết nối trực tiếp với SSID đó (hữu ích trong quá trình thiết lập ban đầu hoặc khi không có mạng cơ sở hạ tầng). Máy khách: picoZ80 tham gia mạng WiFi hiện có dưới dạng trạm.
  • SSID và Mật khẩu
    - tên và cụm mật khẩu của mạng để tham gia (chế độ máy khách) hoặc để phát sóng (chế độ AP).
  • Chế độ DHCP
    - Đã bật: bo mạch yêu cầu địa chỉ từ máy chủ DHCP của mạng. Đã tắt: sử dụng IP tĩnh, mặt nạ mạng và cổng như đã nhập vào các trường bên dưới. Nên sử dụng IP cố định để địa chỉ giao diện web luôn có thể dự đoán được.

Cài đặt được lưu vào NVS (bộ lưu trữ cố định) của ESP32 bằng cách nhấp vào Save và có hiệu lực vào lần tiếp theo khởi động lại.

[[TAG_5111]


Trang web tham khảo

Bảng bên dưới chứa tất cả các địa điểm được tham chiếu trong thiết kế và lập trình của picoZ80.

Trang web Ngôn ngữ Mô tả
Bảng dữ liệu RP2350 Tiếng Anh Bảng dữ liệu và tài liệu tham khảo kỹ thuật chính thức của Raspberry Pi RP2350.
Pico SDK Tiếng Anh Raspberry Pi Pico C/C++ SDK — xây dựng hệ thống và tính năng trừu tượng hóa phần cứng được chương trình cơ sở picoZ80 sử dụng.
Hướng dẫn sử dụng CPU Z80 Tiếng Anh Hướng dẫn sử dụng dòng CPU Zilog Z80 — thời gian bus, bộ lệnh và mô tả tín hiệu.
ESP-IDF Tiếng Anh Khung phát triển IoT của Espresso được sử dụng cho chương trình cơ sở của bộ đồng xử lý ESP32.
Dòng MZ sắc nét Tiếng Anh Tài nguyên cộng đồng về phần cứng, phần mềm và kỹ thuật máy tính Sharp MZ tài liệu.


Sách hướng dẫn sử dụng và bảng dữ liệu

Bảng bên dưới chứa tất cả các bảng dữ liệu và hướng dẫn sử dụng được tham chiếu trong quá trình thiết kế và lập trình picoZ80.

Bảng dữ liệu Ngôn ngữ Mô tả
RP2350 Tiếng Anh Bảng dữ liệu bộ vi điều khiển Raspberry Pi RP2350.
ESP32-S3 Tiếng Anh Bảng dữ liệu SoC Espressif ESP32-S3 — Bộ đồng xử lý WiFi/BT trên bo mạch picoZ80.
APS6404L PSRAM Tiếng Anh Bảng dữ liệu SPI PSRAM 8MB — RAM mở rộng chính dùng cho ngân hàng bộ nhớ.
W25Q128 Flash Tiếng Anh Bảng dữ liệu Winbond 16 MB SPI NOR Flash — lưu trữ hình ảnh chương trình cơ sở và ROM.
TLV62590 Tiếng Anh Bộ chuyển đổi nguồn đồng bộ Texas Instruments 5V→3,3V cấp nguồn cho picoZ80 từ chân Z80 DIP-40 VCC.
CH334F Tiếng Anh CH334F Bộ điều khiển trung tâm USB 2.0 4 cổng — cung cấp chức năng trung tâm USB để cập nhật chương trình cơ sở.


Xem trước dự án

Bản trình diễn Video

picoZ80 chạy RFS (Hệ thống lưu trữ ROM) — Bản trình diễn 1

PicoZ80 được cài đặt trong Sharp MZ-700, chạy tính năng Hệ thống lưu trữ ROM (RFS). Video thể hiện khả năng lưu trữ ổ đĩa ảo và bộ nhớ của bo mạch.


Hạn chế sử dụng thương mại

Không được phép sử dụng cho mục đích thương mại nếu không có văn bản rõ ràng sự cho phép.

Thiết kế phần cứng picoZ80 (sơ đồ, bố cục PCB, tệp KiCad), chương trình cơ sở và tất cả phần mềm liên quan chỉ được cung cấp cho mục đích sử dụng cá nhân, giáo dục và phi thương mại. Không phần nào của thiết kế này - bao gồm nhưng không giới hạn ở tác phẩm nghệ thuật PCB, danh mục vật liệu, chương trình cơ sở nhị phân, mã nguồn hoặc tài liệu - có thể được sử dụng, sao chép, sản xuất, bán hoặc kết hợp vào bất kỳ sản phẩm hoặc dịch vụ thương mại nào mà không có sự cho phép rõ ràng bằng văn bản của tác giả (Philip D. Thông minh).

Để yêu cầu giấy phép thương mại hoặc thảo luận về các mục đích sử dụng được phép, vui lòng liên hệ với tác giả qua trang web eaw.app.


Tín dụng

Dự án picoZ80 được xây dựng dựa trên công việc của một số cá nhân và dự án nguồn mở. Những đóng góp của họ được ghi nhận một cách biết ơn.

  • Manuel Sainz de Baranda y Goñi
    Tác giả của Z80 thư viện mô phỏng CPU Z80 ngôn ngữ C (github.com/redcode/Z80). Lõi mô phỏng Z80 có độ chính xác cao, chính xác theo chu kỳ này được phần mềm picoZ80 sử dụng khi chạy các lệnh Z80 nội bộ trên RP2350, cung cấp hành vi gắn cờ chính xác và hỗ trợ opcode không có giấy tờ. Thư viện được sử dụng theo các điều khoản của Giấy phép Công cộng GNU v3.
  • Raspberry Pi Ltd
    Tác giả của Pico SDK và phần cứng RP2350. Trình biên dịch mã PIO, C SDK, tích hợp chuỗi công cụ CMake và silicon RP2350B giúp cho giao diện bus chính xác theo chu kỳ có thể thực hiện được.
  • Hệ thống Espresso
    Tác giả của khung ESP-IDF và phần cứng ESP32. Bộ đồng xử lý ESP32, ngăn xếp WiFi, thư viện OTA và khung lưu trữ NVS làm nền tảng cho giao diện quản lý web.
  • Philip Smart
    Thiết kế phần cứng (sơ đồ KiCad và bố cục PCB), chương trình cơ sở RP2350 PIO, ứng dụng web ESP32, hệ thống cấu hình JSON, trình điều khiển nhân vật máy Sharp MZ và tất cả tài liệu dự án.
  • Thật tuyệt vời (xAI)
    Trợ lý AI đã cung cấp trợ giúp có giá trị trong quá trình gỡ lỗi máy ở trạng thái PIO — đặc biệt là trong chẩn đoán các trường hợp biên về thời gian và các sự cố tương tác bus chính xác theo chu kỳ trong chương trình RP2350 PIO.
  • Claude (Nhân loại)
    Trợ lý AI đóng góp cho dự án này trên nhiều lĩnh vực: soạn thảo và cấu trúc tài liệu dự án, phân tích FSPI/UART giao diện giữa RP2350 và ESP32, đồng thời cung cấp các đề xuất cải tiến chương trình cơ sở cũng như hỗ trợ phát triển chương trình cơ sở liên tục.

Giấy phép

Dự án picoZ80 bao gồm một số thành phần, mỗi thành phần có giấy phép riêng:

Thành phần Giấy phép
Chương trình cơ sở picoZ80 RP2350 (nguồn PIO, C)Giấy phép Công cộng GNU v3
Phần mềm cơ sở picoZ80 ESP32 và giao diện webGiấy phép Công cộng GNU v3
Thư viện mô phỏng CPU Z80 (Manuel Sainz de Baranda y Goñi)Giấy phép Công cộng GNU v3
Tệp thiết kế phần cứng KiCad (sơ đồ, PCB, Gerbers)Creative Commons BY-NC-SA 4.0
Tài liệu và hướng dẫn sử dụngCreative Commons BY-NC-SA 4.0
Quả mâm xôi Pi Pico SDKĐiều khoản 3 BSD
Khung ESP-IDFGiấy phép Apache 2.0
Bootstrap 4 (giao diện web)Giấy phép MIT

Tóm lại: chương trình cơ sở và phần mềm bạn xây dựng từ mã nguồn của dự án này là nguồn mở theo GPL v3; phần cứng thiết kế và tài liệu được cấp phép theo CC BY-NC-SA 4.0 (chỉ sử dụng cho mục đích phi thương mại — cấp phép thương mại có sẵn theo yêu cầu); thư viện bên thứ ba giữ lại giấy phép của riêng họ như được liệt kê ở trên. Xem các tệp LICENSENOTICE trong kho lưu trữ để biết đầy đủ chi tiết.


Điều khoản cấp phép

Bản quyền © 2019–2026 Philip Smart. Mọi quyền được bảo lưu.

Thiết kế phần cứng — CC BY-NC-SA 4.0
Tất cả các thiết kế phần cứng (sơ đồ KiCad, bố cục PCB, tệp chế tạo Gerber, hóa đơn vật liệu) đều được cấp phép theo Giấy phép quốc tế Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4.0. Bạn được tự do chia sẻ và điều chỉnh các thiết kế chỉ cho các mục đích phi thương mại, miễn là bạn ghi công phù hợp và phân phối mọi sửa đổi theo cùng một giấy phép. Việc sản xuất hoặc bán vì mục đích thương mại cần có giấy phép riêng — vui lòng liên hệ info@eaw.app.

Phần sụn & Phần mềm — GNU GPL v3
Mã nguồn chương trình cơ sở và phần mềm là phần mềm miễn phí theo Giấy phép Công cộng GNU v3. Bạn có thể phân phối lại và sửa đổi mã theo các điều khoản GPL v3. Mọi sửa đổi được phân phối cũng phải được cấp phép theo GPL v3 với mã nguồn sẵn có.

Thương hiệu & Ghi công
Các tên picoZ80, pico6502engineers@work là các nhãn hiệu của Philip Smart. Bạn không được sử dụng những tên này để quảng cáo các sản phẩm phái sinh mà không có sự cho phép bằng văn bản. Bạn không được xóa hoặc thay đổi thông báo bản quyền, ghi công của tác giả hoặc tín dụng màn hình khởi động/giật gân. Việc đặt lại thương hiệu cho dự án này và trình bày nó như tác phẩm của chính bạn đều bị nghiêm cấm. Xem tệp NOTICE trong kho lưu trữ để biết đầy đủ chi tiết.

Cấp phép thương mại
Nếu bạn là nhà sản xuất hoặc nhà phân phối quan tâm đến việc sản xuất bo mạch picoZ80 hoặc pico6502 để bán thương mại, vui lòng liên hệ: info@eaw.app. Việc sử dụng cá nhân, giáo dục và sở thích/câu lạc bộ luôn được cho phép theo các giấy phép nguồn mở ở trên.

Văn bản giấy phép đầy đủ được bao gồm trong kho lưu trữ dưới dạng LICENSE, LICENSE-HARDWARE.txtLICENSE-SOFTWARE.txt.


Quy định về mạng không dây Thông báo

Thiết bị này kết hợp với mô-đun không dây ESP32-S3-PICO-1 truyền ở băng tần ISM 2,4 GHz, khiến thiết bị trở thành bộ bức xạ có chủ ý tuân theo các quy định về tần số vô tuyến trên toàn thế giới (bao gồm FCC Phần 15 Tiểu phần C ở Hoa Kỳ và Chỉ thị về Thiết bị Vô tuyến 2014/53/EU ở Châu Âu Liên minh).

Mặc dù bản thân mô-đun ESP32-S3-PICO-1 mang các chứng nhận theo quy định hiện có (FCC, CE và các chứng nhận khác), các chứng nhận cấp mô-đun đó không tự động mở rộng cho thành phẩm kết hợp với mô-đun. Miễn trừ mô-đun được chứng nhận trước cho phép những người có sở thích cá nhân xây dựng một số lượng thiết bị giới hạn để sử dụng cá nhân, thử nghiệm hoặc giáo dục mà không cần xin phép thiết bị riêng.

Các hạn chế quan trọng

  • Không được bán, cung cấp các thiết bị đã lắp ráp để bán, tặng hoặc phân phối cho bên thứ ba trừ khi thành phẩm đã được kiểm tra độc lập và được cấp phép thiết bị riêng (ví dụ: FCC ID, dấu CE với đánh giá của Cơ quan thông báo) ở khu vực pháp lý liên quan.
  • Việc xây dựng dự án này cho mục đích sử dụng cá nhân với số lượng hạn chế thường được cho phép theo các điều khoản sử dụng theo sở thích và thử nghiệm (ví dụ: FCC § 15.23), miễn là thiết bị không gây nhiễu có hại.
  • Các yêu cầu pháp lý khác nhau tùy theo quốc gia. Các nhà xây dựng bên ngoài Hoa Kỳ nên tham khảo ý kiến của cơ quan quản lý tần số vô tuyến quốc gia để biết các quy tắc hiện hành.

Trách nhiệm của người xây dựng
Trách nhiệm duy nhất của nhà xây dựng là đảm bảo rằng mọi thiết bị được chế tạo từ những thiết kế này đều tuân thủ tất cả các quy định về tần số vô tuyến hiện hành trong phạm vi quyền hạn của họ. Tác giả cung cấp những thiết kế này cho mục đích sử dụng cá nhân, giáo dục và sở thích và không tuyên bố rằng một thiết bị được chế tạo từ chúng đáp ứng các yêu cầu quy định về phân phối thương mại.

Tác giả: rickcarlino

#discussion