Amiga Works < ByteSCApe (2024-03-08)
Joystick Port 2:
Cursor-keys to move, Shift to fire
Cursor-keys to move, Shift to fire
Name: | ByteSCApe |
Type: | 256 Byte Demo |
Date: | 2024-03-08 |
Coder: | Saturnus the Invincible |
Disk: | disks/ByteSCApe.adf |
Source: | ByteSCApe.asm |
Pouët: | https://www.pouet.net/prod.php?which=97083 |
Info: | A crappy 256 byte demo that draws the SCA logo in the style of our C64 demo "Flexible" from 1987. Uses mildly creative ways to access libraries and output text using BCPL functions. |
******************************************************************************** * ByteSCApe: draw the SCA logo in 256 bytes. Coded by Saturnus the Invincible. * * The Mega-Mighty Swiss Cracking Association - reaching out to you! 2024-03-08 * ******************************************************************************** include "graphics/graphics_lib.i" include "graphics/rastport.i" include "intuition/screens.i" wrch equ $e0 ; d1:char writespaces equ $d4 ; d2:amount intuitionbase equ $170 ; globvec offset eb_gfxbase equ $9c ; execbase offset _main: moveq #32,d0 ; bcpl stack frame size moveq #78,d2 ; 78 spaces movea.l writespaces(a2),a4 ; get routine from globvec jsr (a5) ; call bcpl lea text(pc),a0 .charloop: move.b (a0)+,d1 beq.b .text_done movea.l wrch(a2),a4 move.l a0,d5 ; wrch() preserves d5 but not a0 jsr (a5) moveq #' ',d1 movea.l wrch(a2),a4 jsr (a5) movea.l d5,a0 bra.b .charloop .text_done: movea.l intuitionbase(a2),a6 movea.l ib_ActiveScreen(a6),a1 lea sc_RastPort(a1),a1 movea.l 4.w,a6 movea.l eb_gfxbase(a6),a6 ; shortcut to graphics.library moveq #1,d0 ; white jsr _LVOSetAPen(a6) ; preserves a1, nice! lea sca_logo(pc),a4 movem.w (a4)+,d3-d7/a3 ; #lines,x,y,length,dx,dy .stem_loop: bsr.b draw_line addi.w #140,d4 ; x dbf d3,.stem_loop .draw_loop: move.w (a4)+,d0 ; dx beq.b draw_done add.w d0,d4 ; d4: x move.b (a4)+,d0 ; dy ext.w d0 add.w d0,d5 ; d5: y moveq #0,d6 move.b (a4)+,d6 ; d6: length (unsigned) move.b (a4)+,d7 ; d7: dx (signed) ext.w d7 move.b (a4)+,d0 ; dy (signed) ext.w d0 movea.w d0,a3 ; a3: dy bsr.b draw_line bra.b .draw_loop rts ; waste two bytes (we're gonna save them later) ; The secret BrazenHum algorithm: d4:x, d5:y, d6:length, d7:dx, a3:dy draw_line: movem.l d3-d6,-(sp) .loop: move.w d4,d0 move.w d5,d1 moveq #3,d2 ; width of ellipse moveq #2,d3 ; height jsr _LVODrawEllipse(a6) ; preserves a1, nice! add.w d7,d4 add.w a3,d5 dbf d6,.loop movem.l (sp)+,d3-d6 draw_done: moveq #0,d0 ; CLI return code (TnX Depeche for saving 2 bytes!) rts sca_logo: dc.w 3,110,72,50,-1,2 ; four stems ; array of [word dx0 byte dy0,length,dx,dy] dc.w -137 ; horizontal top line dc.b 2,143,-3,0 dc.w 593 ; horizontal bottom line dc.b 95,143,-3,0 dc.w -249 ; S top dc.b -66,24,-3,0 dc.w -91 ; S bottom dc.b 33,24,-3,0 dc.w 224 ; C dc.b -18,24,-3,0 dc.w 112 ; A horizontal dc.b -18,24,-3,0 dc.w -53 ; A vertical dc.b 33,18,-1,2 dc.w 0 ; end marker text: dc.b "The Mega-Mighty",10,0 ; 0 follows anyway, not necessary but we got the space end