Skip to content

Instantly share code, notes, and snippets.

@dpiponi
Created August 6, 2019 04:26
Show Gist options
  • Save dpiponi/d49c818dd510df3914fcc91e6333848a to your computer and use it in GitHub Desktop.
Save dpiponi/d49c818dd510df3914fcc91e6333848a to your computer and use it in GitHub Desktop.
Sandpile emulator in 6502 assembly language for Acorn Atom.
`RUN` to assemble
`GOTO s` to start it
10DIM II(3), BB(3), D(3), L(3), SS(2)
20FOR I=0 TO 1
30DIM P(-1)
40A=P
50PRINT $21
60[
70:SS1
80CLC
90LDA #84
100ADC @#10
110STA #84
120LDA #85
130ADC @#0
140STA #85
150:SS0
160LDA #85
170CMP @#50
180BCS SS2
190RTS
200:SS2
210LDY @0
220LDA (#84), Y
230STA #80
240INY
250LDA (#84), Y
260STA #81
270INY
280LDA (#84), Y
290STA #88
300INY
310LDA (#84), Y
320STA #89
330SEC
340LDA #84
350SBC @#4
360STA #84
370LDA #85
380SBC @#0
390STA #85
400JMP (#88)
410:II0
420LDY @0
430LDA (#80),Y
440CLC
450ADC @#01
460TAX
470AND @#03
480BEQ BB0
490TXA
500STA (#80),Y
510JMPSS0
520:BB0
530LDA (#80),Y
540AND @(#FF:#03)
550STA (#80),Y
560LDY @4
570]
580!D=0;!L=II1;GOSUBa
590!D=-32;!L=II0;GOSUBa
600!D=32;!L=II0;GOSUBa
610!D=1;!L=II3;GOSUBa
620[
630JMPSS1
640:II1
650LDY @0
660LDA (#80),Y
670CLC
680ADC @#04
690TAX
700AND @#0C
710BEQ BB1
720TXA
730STA (#80),Y
740JMPSS0
750:BB1
760LDA (#80),Y
770AND @(#FF:#0C)
780STA (#80),Y
790LDY @4
800]
810!D=0;!L=II2;GOSUBa
820!D=-32;!L=II1;GOSUBa
830!D=32;!L=II1;GOSUBa
840!D=0;!L=II0;GOSUBa
850[
860JMPSS1
870:II2
880LDY @0
890LDA (#80),Y
900CLC
910ADC @#10
920TAX
930AND @#30
940BEQ BB2
950TXA
960STA (#80),Y
970JMPSS0
980:BB2
990LDA (#80),Y
1000AND @(#FF:#30)
1010STA (#80),Y
1020LDY @4
1030]
1040!D=0;!L=II3;GOSUBa
1050!D=-32;!L=II2;GOSUBa
1060!D=32;!L=II2;GOSUBa
1070!D=0;!L=II1;GOSUBa
1080[
1090JMPSS1
1100:II3
1110LDY @0
1120LDA (#80),Y
1130CLC
1140ADC @#40
1150TAX
1160AND @#C0
1170BEQ BB3
1180TXA
1190STA (#80),Y
1200JMPSS0
1210:BB3
1220LDA (#80),Y
1230AND @(#FF:#C0)
1240STA (#80),Y
1250LDY @4
1260]
1270!D=-1;!L=II0;GOSUBa
1280!D=-32;!L=II3;GOSUBa
1290!D=32;!L=II3;GOSUBa
1300!D=0;!L=II2;GOSUBa
1310[
1320JMPSS1
1330]
1340PRINT $6
1350NEXT
1360CLEAR 4
1370COLOUR 0
1380END
1390sREM Seed
1400FORI=1TO10000
1410!#5000 = #8000+192/2*32+16
1420!#5002 = II0
1430REM STACK POINTER
1440!#84 = #00
1450!#85 = #50
1460LINKSS0
1470NEXTI
1480END
1490a[
1500CLC
1510LDA #80
1520ADC @(D?0)
1530STA (#84),Y
1540INY
1550LDA #81
1560ADC @(D?1)
1570STA (#84),Y
1580INY
1590LDA @(L?0)
1600STA (#84),Y
1610INY
1620LDA @(L?1)
1630STA (#84),Y
1640INY
1650]
1660RETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment