Release 2026-11-04-r2 · SHA256 07933951cbe2eb31dcf85beea6f95a7e9a8ad945eaed6011e326fae80c5fb2c9 · Click a line number for a direct link.
1| Boot credits after the first picture, before defaults/main menu. Renderer2| follows tools/intro.s; own text-only tile card at $2D0000, code $2D8000.3| Wait for Start only, indefinitely. Preserve the old timer/RNG word on exit.4| No save writes; screen always returns with the original SR/stack contract.5 .equ DATA, 0x2D0000 | palette (32 bytes), map (width, height, 40*28 words), tile count, tiles6 .equ MAP, DATA+327 .equ TILES, MAP+4+2*40*2889 .ifndef LEGACY_CREDITS10 .equ LEGACY_CREDITS,011 .endif12 .text13 .globl _start14_start: jsr 0x2FE280 | keep the existing first picture15 bra.w intro | then this credits card16intro: move.l #0x15E4C,0xFFB03A | as $FED7017 bclr #1,0xFFBF78 | H4018 move.w #5,0xFFB00E19 move.w #0xA000,0xFFB00820 move.w #7,0xFFB00A21 move.w #0xC000,0xFFB00422 move.w #7,0xFFB00623 move.w #0xF000,0xFFB00C24 move.w #0xF800,0xFFB00225 move.w #0xFC00,0xFFB00026 jsr 0x10F3227 movea.l #0xFFBD28,%a0 | palette buffer: black28 moveq #31,%d1291: clr.l (%a0)+30 dbra %d1,1b31 jsr 0x115AA | VDP registers, VRAM cleared32 move.w %sr,-(%sp)33 move.w #0x2700,%sr34 move.l #0x40200000,0xC00004 | VRAM write $0020 (tile 1)35 lea TILES,%a036 move.w (%a0)+,%d137 lsl.w #3,%d1 | 8 longs per tile38 subq.w #1,%d1392: move.l (%a0)+,0xC0000040 dbra %d1,2b41 lea DATA,%a0 | palette 0 into the game's palette buffer (the fade copies it to CRAM)42 movea.l #0xFFBD28,%a143 moveq #15,%d1445: move.w (%a0)+,(%a1)+45 dbra %d1,5b46 move.w #0x2700,%sr | map: plane A ($C000, 128 cells per row), and plane B ($A000) emptied47 lea MAP+4,%a048 moveq #0,%d4 | row496: move.w %d4,%d250 lsl.w #8,%d2 | row * 256 bytes51 move.w %d2,%d352 addi.w #0xC000,%d253 bsr.s vaddr54 moveq #39,%d1557: move.w (%a0)+,0xC0000056 dbra %d1,7b57 addi.w #0xA000,%d358 move.w %d3,%d259 bsr.s vaddr60 moveq #63,%d1618: move.w #0,0xC0000062 dbra %d1,8b63 addq.w #1,%d464 cmpi.w #28,%d465 blt.s 6b66 move.w (%sp)+,%sr67 move.w #0x18,0xFFBD26 | fade in, then wait as the original68 move.w #0x2500,%sr69 .if LEGACY_CREDITS70 move.w #44,0xFFD066713: moveq #4,%d072 jsr 0x1117673 tst.w %d174 bne.s 4f75 subq.w #1,0xFFD06676 bpl.s 3b774: move.w #0x2700,%sr78 rts79 .else80 move.w 0xFFD066,-(%sp)81 move.w #0x4352,0xFFD066 | active card, reuses former countdown word823: moveq #4,%d083 jsr 0x1117684 btst #7,%d1 | Genesis Start, all polled pads85 beq.s 3b864: move.w #0x2700,%sr87 move.w (%sp)+,0xFFD06688 rts89 .endif9091| vaddr: d2 = VRAM address -> VDP write address set92vaddr: move.l %d2,-(%sp)93 andi.l #0xFFFF,%d294 move.l %d2,%d095 andi.w #0x3FFF,%d096 ori.w #0x4000,%d097 swap %d098 lsr.w #8,%d299 lsr.w #6,%d2 | address >> 14100 move.w %d2,%d0101 move.l %d0,0xC00004102 move.l (%sp)+,%d2103 rts104105