experimental/credits.s

Download file

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