The universal Atari assembler
Universal 680x0 and DSP 56k assembler targeting Atari systems.
█▀▀▄ █▀▀▀ █▀█▄ █ ▀█ RESERVOIR GODS ▀ ▀ ▀▀▀▀ rg-asm 0.8.8 · 680x0 & DSP 56k assembler ✓ Assembling hello_gemdos.s ✓ Linking HELLO.PRG (136 bytes) ✓ assembled 1 file in 80ms ┌────────┬───────┐ │ item │ bytes │ ├────────┼───────┤ │ text │ 26 │ │ data │ 22 │ │ bss │ 0 │ │ sym │ 56 │ │ reloc │ 4 │ ├────────┼───────┤ │ binary │ 136 │ └────────┴───────┘ $
$ rg-asm --cpu=56001 -o FILTER.LOD filter.s56 ; ===================================================================== ; filter.s56 — Falcon 56001 FIR filter kernel with parallel data moves ; ===================================================================== org p:$0040 FirFilter: move #samples,r0 ; r0 -> input sample circular ring move #coeffs,r4 ; r4 -> impulse response filter taps move #taps-1,m0 ; enable modulo addressing on r0 move m0,m4 ; and modulo addressing on r4 clr a x:(r0)+,x0 y:(r4)+,y0 ; dual parallel prefetch rep #taps-1 ; zero-overhead loop mac x0,y0,a x:(r0)+,x0 y:(r4)+,y0 ; MAC + parallel move macr x0,y0,a ; round accumulator result movep a,x:<<$FFEE ; output 24-bit sample to host port rts ✓ assembled 1 file (FILTER.LOD) in 42ms $
$ rg-asm -m 68030 falcon_game.s -o GAME.TOS ; ===================================================================== ; falcon_game.s — In-file 68030 host driver & embedded DSP kernel ; ===================================================================== section text Start: lea DspKernel(pc),a0 ; 68030 host setup bsr UploadToDsp ; send bootstrap to DSP rts DspKernel: .56001 packed, org=p:$40 ; switch target context to DSP56001 movep x:<<$FFEB,x0 ; read 24-bit param from host port do #64,_poly ; DSP coprocessor transform loop mpy x0,y0,a x:(r0)+,x0 y:(r4)+,y0 _poly: rts .68000 ; restore host 68k context (auto even) ✓ assembled 68030 host + inline DSP56001 kernel into GAME.TOS $
█▀▀▄ █▀▀▀ █▀█▄ █ ▀█ RESERVOIR GODS ▀ ▀ ▀▀▀▀ rg-asm 0.8.8 · 680x0 & DSP 56k assembler ✓ Assembling hello_gemdos.s ✓ Linking HELLO.PRG (136 bytes) ✓ assembled 1 file in 80ms ┌──────────┬─────────────────────┬───────┬───────┬──────┬───────────────────────────────────────┐ │ addr │ bytes │ 68000 │ 68030 │ pair │ asm │ ├──────────┴─────────────────────┴───────┴───────┴──────┴───────────────────────────────────────┤ │ start 26 B · 176/109 cyc │ ├──────────┬─────────────────────┬───────┬───────┬──────┬───────────────────────────────────────┤ │ 00000000 │ 41 FA 00 00 │ 8 │ 5 │ · │ lea msg(pc),a0 │ │ 00000004 │ 2F 08 │ 12 │ 5 │ · │ move.l a0,-(sp) │ │ 00000006 │ 3F 3C 00 09 │ 12 │ 7 │ · │ move.w #9,-(sp) ; Cconws │ │ 0000000A │ 4E 41 │ 34 │ 20 │ · │ trap #1 │ │ 0000000C │ 5C 8F │ 8 │ 8 │ · │ addq.l #6,sp │ │ 0000000E │ 3F 3C 00 07 │ 12 │ 7 │ · │ move.w #7,-(sp) ; Crawcin │ │ 00000012 │ 4E 41 │ 34 │ 20 │ · │ trap #1 │ │ 00000014 │ 54 8F │ 8 │ 8 │ · │ addq.l #2,sp │ │ 00000016 │ 42 67 │ 14 │ 9 │ · │ clr.w -(sp) ; Pterm0 │ │ 00000018 │ 4E 41 │ 34 │ 20 │ · │ trap #1 │ ├──────────┴─────────────────────┴───────┴───────┴──────┴───────────────────────────────────────┤ │ ── DATA ───────────────────────────────────────────────────────────────────────────────────── │ ├───────────────────────────────────────────────────────────────────────────────────────────────┤ │ msg 22 B │ ├──────────┬─────────────────────┬───────┬───────┬──────┬───────────────────────────────────────┤ │ 00000000 │ 48 65 6C 6C 6F 20 … │ │ │ │ dc.b "Hello from rg-asm!",13,10,'$',0 │ │ │ │ │ │ │ even │ └──────────┴─────────────────────┴───────┴───────┴──────┴───────────────────────────────────────┘ $
█▀▀▄ █▀▀▀ █▀█▄ █ ▀█ RESERVOIR GODS ▀ ▀ ▀▀▀▀ rg-asm 0.8.8 · 680x0 & DSP 56k assembler ✓ Assembling hello_gemdos.s ✓ Linking HELLO.PRG (136 bytes) ✓ assembled 1 file in 80ms ┌──────────┬───────┬───────┬───────┐ │ function │ bytes │ 68000 │ 68030 │ ├──────────┼───────┼───────┼───────┤ │ start │ 26 │ 176 │ 109 │ │ msg │ 22 │ 0 │ 0 │ ├──────────┼───────┼───────┼───────┤ │ total │ 48 │ 176 │ 109 │ └──────────┴───────┴───────┴───────┘ $
rg-asm main.s util.s # assemble and link → MAIN.PRG rg-asm --obj main.s util.s # emit objects for C linkers rg-asm --raw boot.s -o BOOT.BIN # emit flat binary blob rg-asm --cpu=56001 kernel.s56 -o KERNEL.LOD # standalone Falcon DSP kernel rg-asm --cpu=56001 --format=p56 sfx.s56 -o SFX.P56 # Brainstorm P56 format rg-asm --cpu=56001 --format=dsp job.s56 -o JOB.DSP # GODLIB sDspBinary (fast 68030 blast) rg-asm falcon_game.s # 68k + inline DSP mixed-mode assembly rg-asm game.s --listing --functions --listing-cpus=68000,68030 rg-asm game.s --listing=game.lst --listing-cpus=68000,68030 # plain .lst file
On a terminal, bare --listing paints the boxed table; a file path stays plain text for CI.
After unzipping, check the extracted files (the archive includes SHA256SUMS):
sha256sum -c SHA256SUMS