Amiga 500 Trades BTC Live — Authentic 1987 Hardware Running AmigaOS 2.04

Skip to main content
Workbench screen Workbench Window Icons Tools Chip: 408K Fast: 0K Graphics: 104K --:--:--
TradeBot.v1 ▸ Amiga 500 ▸ AmigaOS 2.04 ▸ running
🕹️
AMIGA 500 TRADES BTC
Real 1987 Commodore hardware. Exec preemptive multitasking, Intuition multi-window, Copper/Blitter/Paula DMA. Paper capital only.
Released April 24, 1987 · US$699 · Bauer & Miner design · sold 6M+ units worldwide
$10,000
Paper capital
P&L
Trades
Win rate
Ticks
I/O lag
Buffer
HardwareInfo — Commodore Amiga 500 specs
CPU
Motorola MC68000 @ 7.09379 MHz PAL
ISA
56 instructions · 16/32-bit · 24-bit addr
Chip RAM
512 KB (expandable to 1 MB via A501)
Fast RAM
0 KB (A500 stock)
Chipset
OCS (Original Chip Set)
Agnus
8372A Fat · DMA + Blitter + Copper
Denise
8362 · 12-bit palette · HAM
Paula
8364 · 4ch audio + disk + serial
Gary
Bus controller · glue logic
Video
320×256 @32c · HAM6 4096c
Audio
4× 8-bit DMA @ 28 kHz stereo
Storage
Chinon CDS-560 880 KB DD floppy
Serial
Paula RS-232 · DMA · 115200 baud max
OS
AmigaOS 2.04 (Kickstart + Workbench 2.04)
Kernel
Exec v37.175 · preemptive multitasking
ChipUsage — how trading uses each chip
PAULA
MOS 8364 R7
Modem feed. RS-232 DMA at 1200 baud. CPU never blocks on I/O.
SERDATR = $2000 · bytes: 0
COPPER
inside Agnus 8372A
Ticker refresh. Copper list synced to electron beam. Pokes price at 50 Hz VBL.
COPJMP1 = $DFF088
BLITTER
inside Agnus 8372A
Buffer shift. MA-20 buffer shifted left 1 word in ~50 cycles, CPU free.
BLTSIZE = $00140001
68000 CPU
Motorola @ 7.09 MHz
Strategy kernel. MA sums via ADD+DBRA. Free to run 99.97% of time.
cycles/tick: 0 · 0.00 ms
Exec TaskList — preemptive multitasking (1985!)

Real-time snapshot of Exec kernel tasks running concurrently. Amiga had this in 1985 — Mac OS only got preemptive multitasking in 2001 (OS X).

NamePRIState
input.device25WAIT
timer.device20WAIT
trackdisk.device20WAIT
serial.device5WAIT
TradeBot0RUN
Workbench0READY
Shell0WAIT
RexxMast0WAIT
console.device0WAIT
ixemul.library0WAIT

TradeBot runs at priority 0 alongside the OS — it doesn't block music playback, disk access, or window redraws.

ARexx Port: TRADEBOT

ARexx inter-app scripting (1987). AppleScript didn't exist until 1993.

> ADDRESS 'TRADEBOT' STATUS
CAPITAL=10000 POS=NONE MA5=75420 MA20=75382
> SET MASHORT 5
OK SHORT=5
> GET LAG
LAG=0.110s
> IF MA5 > MA20 THEN 'BUY'
COND=FALSE
> EXPORT LOG TO 'DH0:trades.txt'
42 lines written
/* any other app can send commands to this port */
ExecBase — open libraries

Libraries opened via OpenLibrary(). Jump-table based OOP (1985).

exec.library v37.175
graphics.library v37.35
intuition.library v37.245
dos.library v37.63
gadtools.library v37.6
utility.library v37.3
asl.library v37.40
workbench.library v37.12
rexxsyslib.library v37.20
serial.device v37.1
timer.device v37.4
tradebot.library v1.0
CopperDisassembler — $DFF080 program · VBL synced
$DFF080: MOVE.W #$0000,COLOR00 ; bg black
$DFF084: MOVE.W #$0F80,COLOR01 ; fg orange
$DFF088: WAIT V=$10,H=$00 ; wait line 16
$DFF08C: MOVE.W $7C61,DDFSTRT ; price hi byte
$DFF090: MOVE.W #$0180,BPLCON0 ; 1 bitplane
$DFF094: WAIT V=$F1,H=$00 ; wait VBL
$DFF098: MOVE.W #$0000,INTREQ ; clear VBL intr
$DFF09C: MOVE.W #$C020,INTENA ; enable VBL
$DFF0A0: MOVE.L #$DFF080,COP1LC ; loop
$DFF0A4: MOVE.W #$8080,COPJMP1 ; restart
Blitter — MA-20 buffer shift
BLTAPT (src):
$7FF02
BLTDPT (dst):
$7FF00
BLTSIZE:
$00140001
BLTCON0:
$09F0
BLTCON1:
$0000
Cycles:
~50
buf @$7FF00:
[────────] 20 words
↓ shift left 1 word
[───────X] X = new price
Paula Serial · 1200 baud
> AT
OK
> ATDT 555-TRADE
CONNECT 1200
RX...
DevPac 3 — Source68k · MA20.s · 68000 assembly (authentic 1987 style)
* MA-20 crossover trading kernel · MC68000 · AmigaOS 2.04 * Price buffer at Chip RAM $7FF00, 20 words * Compiled with DevPac Assembler 3 (HiSoft) ComputeMA: MOVEA.L #$7FF00,A0 ; buffer base (Chip RAM) MOVE.W D0,$26(A0) ; append new price * trigger Blitter: shift buffer left 1 word MOVE.L #$7FF02,$DFF050 ; BLTAPT (src) MOVE.L #$7FF00,$DFF054 ; BLTDPT (dst) MOVE.W #$09F0,$DFF040 ; BLTCON0 minterm MOVE.W #$140001,$DFF058 ; BLTSIZE 20w × 1 WaitBlit: BTST.B #6,$DFF002 ; DMACON BBUSY BNE.B WaitBlit * CPU: sum last 20 prices → D1 CLR.L D1 MOVE.W #19,D2 ; loop cnt (0..19) SumLoop: ADD.W (A0)+,D1 ; D1 += price; A0++ DBRA D2,SumLoop DIVU #20,D1 ; MA-20 = sum/20 * MA-5: last 5 prices → D3 MOVEA.L #$7FF1C,A0 CLR.L D3 MOVEQ #4,D2 Sum5: ADD.W (A0)+,D3 DBRA D2,Sum5 DIVU #5,D3 * crossover + signal Intuition window CMP.W D1,D3 BHI.B Bullish BLS.B Bearish Bullish: JSR OpenLong MOVE.L _RexxSysBase,A6 ; send ARexx event JSR _LVOCreateRexxMsg(A6) RTS Bearish: JSR CheckTrailStop RTS
TradeLog — recent decisions · newest first
TimeActionPriceMA-5MA-20LagCycles
Why AmigaOS was 15 years ahead
Exec (1985) had preemptive multitasking with priorities. Mac OS didn't get this until OS X in 2001. AmigaOS libraries exposed APIs via jump tables — real object-oriented programming years before C++ became mainstream. ARexx (1987) gave every app a scriptable port — AppleScript arrived 6 years later. On this page, TradeBot runs as one of ~10 concurrent Exec tasks. The CPU spends ~350 µs per tick on the strategy and is idle the remaining 99.97% — ready for disk I/O, music playback, Shell commands, or a demo's Copper effects. This is why Amiga demos could do impossible things: custom chips did the heavy lifting while the OS stayed reactive.
← Vintage Arena · ⚔️ Bot Arena · JSON API