Skip to content

ZZ9000 firmware v2.8.0-rc1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Aug 08:41
· 78 commits to master since this release
v2.8.0-rc1
2320d25

First release candidate for v2.8. Please try it and report anything that looks wrong, that is what this build is for.
The final v2.8.0 follows once RC feedback settles.

Firmware runtime revision 2.8.

What's new since v2.2.0

Video playback. The card now decodes MPEG-1 video and MPEG audio itself
and puts the picture on screen through the Picasso96 video window or a
dedicated fullscreen screen, with A/V sync. Scaling runs in the FPGA. The
player is ZZPlay, shipped in the drivers release.

Display. 64-bit RTG scanout and Zorro III modes up to 1920x1080x32.
Picasso96 DPMS monitor power management. Scanlines V2 (classic, soft,
gradient) with parity control. A real RTG surface allocator, replacing one
that leaked on every off-screen bitmap free.

ZZ9000.CFG on the SD card. Settings that used to need a separate
firmware flavour or ENV: variables are now one text file read at cold
boot: native video mode, exact PAL/NTSC refresh, scanlines, INT2, MAC,
boot HDF, and the off-screen-bitmap and video-window switches. The old
ns-pal firmware flavour is gone, use videocap_mode = pal plus
nonstandard_vsync = pal. A commented sample is in every ZIP, and ZZTop
2.4+ edits it from AmigaOS without removing the card.

Storage and I/O. HDF boot from the ZZ9000's own microSD card, with
direct block I/O after boot-time discovery. Firmware update and restore
over the Zorro bus (ZZFwUpdate), so the card stays in the machine.
USB 2.0 host support for Poseidon. SD activity LED.

Networking. A real receive defect is fixed: at the receive-backlog
drain boundary, a stray acknowledgement could consume a frame the Amiga had
never read, losing it silently. The firmware now checks which frame an
acknowledgement refers to before consuming it.

This came out of the large-transfer stalls in issue #29.
The ZZ9000 side of that is believed fixed, between this and the matching
driver changes, the card no longer loses frames at the drain boundary. The
issue stays open only because the remaining stall was traced to TCP
sequence-number handling in the Amiga-side stack, and is waiting on a
Roadshow fix rather than anything further here.

If you have hit large-transfer stalls before, this release is worth
retesting; ZZNetStats output with any report is very helpful.

Under the hood. A dual-core scheduler moves long jobs (crypto,
decompression, media decode) onto the second ARM core. Accelerated LHA/LZH
extraction. Crypto offload backing the accelerated amissl.library. On
Zorro II, a dedicated host-window heap so SDK buffers stay reachable through
the 4 MB window.

Rendering fixes

These are correctness fixes in the RTG path — if you have seen any of them,
they should be gone:

  • Clipped lines. Picasso96 hands the driver clipped segments of a
    longer line. The Bresenham accumulator did not resume from where the
    previous segment left off, so the staircase and dot pattern restarted at
    each boundary, visible as broken edges and XOR-erase residue.
  • Line drawing modes. JAM2, COMPLEMENT and INVERSVID were taking the
    solid fast path, which is only correct for JAM1. Patterned and masked
    lines now go through the draw-mode-aware renderer.
  • Planar blits. Odd minterms were not using the inverted planar source,
    so some planar-to-chunky operations produced wrong colours.
  • Off-screen bitmaps. The RTG surface allocator leaked on every
    off-screen bitmap free; it is now a real allocator.

Which ZIP do I need?

ZIP Machine
zorro3 A3000/A4000, Zorro III (the usual choice)
zorro3-nofast A3000/A4000, without the extra Zorro RAM advertisement
zorro2 A2000 / Zorro II, 4 MB window
zorro2-2mb A2000 / Zorro II, 2 MB window
a500 A500 with ZZ9500CX Denise adapter, 4 MB window
a500-2mb A500 with ZZ9500CX Denise adapter, 2 MB window
a500plus A500+ or Super Denise, ZZ9500CX Denise adapter

Each ZIP contains a BOOT.bin and a commented sample ZZ9000.CFG.

Installing

  1. Extract BOOT.bin from the ZIP for your machine.
  2. Copy it to the ZZ9000's FAT32 microSD card, replacing the existing one.
  3. Power-cycle the Amiga. A soft reset is not enough.

Already running firmware with FWUP support? ZZFwUpdate from the drivers
package can write the new BOOT.bin from AmigaOS with the card still in
the slot; it keeps the old one as BOOT.bak. Power-cycle afterwards.

Please read before updating

Update the drivers at the same time. This firmware and the v2.8.0-rc1
drivers release
are meant to be installed together.

Zorro II owners especially: ZZ9000.card must be updated with the
firmware.
This firmware reserves a 64 KB region of Zorro II VRAM for
shared SDK allocations. An older ZZ9000.card does not know about it and
puts its template-blit scratch there, which can corrupt audio being staged
for MHI or mpega.library playback.

Only Zorro III has been hardware-tested at this tag. All seven
bitstreams were rebuilt from current RTL for this release and are correct by
construction, but the Zorro II, 2 MB and A500/ZZ9500CX images have not been
bench-tested. Reports from those machines are especially welcome.

Reporting problems

Please include your machine, which ZIP you used, and your ZZ9000.CFG if
you changed it. ZZDiag from the drivers package dumps board, firmware and
subsystem state, which is the most useful single thing to attach.

Issues: https://github.com/BlitterStudio/zz9000-firmware/issues


What's Changed

  • fix(rtg): seed the line Bresenham accumulator so clipped segments resume by @midwan in #30
  • test(rtg): add BlitPattern (pattern_fill_rect) regression coverage by @midwan in #31
  • fix(eth): RX-accept serial handshake (issue #29 defense-in-depth) by @midwan in #32
  • Dual-core task scheduler: run LONG ops (crypto) on core 1 by @midwan in #34
  • Route decompression offload to core 1 (SMP-safe heap foundation) by @midwan in #38
  • Batched LZH decode on core 1 + vendored LHa-for-UNIX decode core by @midwan in #39
  • Add 64-bit RTG scanout path by @midwan in #40
  • Make the FSBL buildable from source by @midwan in #41
  • Fix Z3 fast-RAM DDR mapping and route SDK services to core 1 by @midwan in #42
  • Audio streams on core 1 + AX playback binding (MHI modernization) by @midwan in #44
  • Add a Zorro 2 host-window heap for SDK shared allocations by @midwan in #45
  • Drive SD activity LED on MIO10 by @midwan in #46
  • Add ZZ9000.CFG external config file read at cold boot by @midwan in #47
  • Document ENV-over-config precedence and ZZTop editing for ZZ9000.CFG by @midwan in #48
  • Bypass FatFs for HDF block I/O via one-time extent map by @midwan in #49
  • Replace the leaking RTG surface bump allocator with a real allocator by @midwan in #50
  • Add OP_WRITE_YUV: packed 4:2:2 YUV→RGB rect conversion by @midwan in #53
  • P96 video window (PIP): OP_VIDEO_OVERLAY + shadow-scanout compositor by @midwan in #54
  • Add firmware support for Picasso96 DPMS by @midwan in #55
  • Add native P96 video overlay acceleration by @midwan in #56
  • Add ZZ9000AX capture-ready firmware interface by @midwan in #57
  • fix(rtg): honor line mode in fast path by @midwan in #58
  • fix: complete native PIP and ZZ9000AX stereo capture by @midwan in #60
  • fix(rtg): correct P96 planar minterms by @midwan in #61
  • feat(media): MPEG-1 media sessions, hardware overlay scaling, and resumable audio drain by @midwan in #64

Full Changelog: v2.2.0...v2.8.0-rc1