package Ġandroid . emu 6 5 0 2 Ċ Ċ import Ġandroid . emu 6 5 0 2 . instructions . Symbols Ċ import Ġcom . google . common . collect . ImmutableList Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito . mock Ċ Ċ class ĠAs sembler Test Ġ{ ĊĠ Ġprivate Ġval Ġassembler Ġ= ĠAs sembler ( Memory ( mock ( Display :: class . java )), ĠS ymbols ()) ĊĊĠ Ġ@ Test Ġfun Ġtest Simple () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 0 0 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 5 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 8 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 0 2 ") ĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 9 Ġ 0 1 Ġ 8 D Ġ 0 0 Ġ 0 2 ĠA 9 Ġ 0 5 Ġ 8 D Ġ 0 1 Ġ 0 2 ĠA 9 Ġ 0 8 Ġ 8 D Ġ 0 2 Ġ 0 2 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest With Comments () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ# \$ c 0 Ġ Ġ; Load Ġthe Ġhex Ġvalue Ġ\$ c 0 Ġinto Ġthe ĠA Ġregister ", ĊĠĠĠĠĠĠĠ Ġ" T AX ĠĠĠĠĠĠ Ġ; Transfer Ġthe Ġvalue Ġin Ġthe ĠA Ġregister Ġto ĠX ", ĊĠĠĠĠĠĠĠ Ġ" IN X ĠĠĠĠĠĠ Ġ; Increment Ġthe Ġvalue Ġin Ġthe ĠX Ġregister ", ĊĠĠĠĠĠĠĠ Ġ" ADC Ġ# \$ c 4 Ġ Ġ; Add Ġthe Ġhex Ġvalue Ġ\$ c 4 Ġto Ġthe ĠA Ġregister ", ĊĠĠĠĠĠĠĠ Ġ" BR K ĠĠĠĠĠĠ Ġ; Break Ġ- Ġwe 're Ġdone ") ĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 9 ĠC 0 ĠAA ĠE 8 Ġ 6 9 ĠC 4 Ġ 0 0 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Branch And Label () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" LD X Ġ#$ 0 8 ", ĊĠĠĠĠĠĠĠ Ġ" decrement :", ĊĠĠĠĠĠĠĠ Ġ" DEX ", ĊĠĠĠĠĠĠĠ Ġ" ST X Ġ$ 0 2 0 0 ", ĊĠĠĠĠĠĠĠ Ġ" CP X Ġ#$ 0 3 ", ĊĠĠĠĠĠĠĠ Ġ" B NE Ġdecrement ", ĊĠĠĠĠĠĠĠ Ġ" ST X Ġ$ 0 2 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" BR K ") ĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 2 Ġ 0 8 ĠCA Ġ 8 E Ġ 0 0 Ġ 0 2 ĠE 0 Ġ 0 3 ĠD 0 ĠF 8 Ġ 8 E Ġ 0 1 Ġ 0 2 Ġ 0 0 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Relative () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" CMP Ġ#$ 0 2 ", ĊĠĠĠĠĠĠĠ Ġ" B NE Ġnot equal ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 2 2 ", ĊĠĠĠĠĠĠĠ Ġ" not equal :", ĊĠĠĠĠĠĠĠ Ġ" BR K ") ĊĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 9 Ġ 0 1 ĠC 9 Ġ 0 2 ĠD 0 Ġ 0 2 Ġ 8 5 Ġ 2 2 Ġ 0 0 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Indirect () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ\$ f 0 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ# \$ cc ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ\$ f 1 ", ĊĠĠĠĠĠĠĠ Ġ" J MP Ġ($ 0 0 f 0 ) Ġ; dere fer ences Ġto Ġ\$ cc 0 1 ") ĊĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 9 Ġ 0 1 Ġ 8 5 ĠF 0 ĠA 9 ĠCC Ġ 8 5 ĠF 1 Ġ 6 C ĠF 0 Ġ 0 0 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Indirect X () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" LD X Ġ#$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 5 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 6 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 ", ĊĠĠĠĠĠĠĠ Ġ" LD Y Ġ#$ 0 a ", ĊĠĠĠĠĠĠĠ Ġ" STY Ġ$ 0 6 0 5 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ($ 0 0 , X )") ĊĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (" 0 6 0 0 : ĠA 2 Ġ 0 1 ĠA 9 Ġ 0 5 Ġ 8 5 Ġ 0 1 ĠA 9 Ġ 0 6 Ġ 8 5 Ġ 0 2 ĠA 0 Ġ 0 A Ġ 8 C Ġ 0 5 Ġ 0 6 ĠA 1 Ġ\ n 0 6 1 0 : Ġ 0 0 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Indirect Y () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" LD Y Ġ#$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 3 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 7 ", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 ", ĊĠĠĠĠĠĠĠ Ġ" LD X Ġ#$ 0 a ", ĊĠĠĠĠĠĠĠ Ġ" ST X Ġ$ 0 7 0 4 ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ($ 0 1 ), Y ") ĊĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()) ĊĠĠĠĠĠĠĠ Ġ. isEqualTo (" 0 6 0 0 : ĠA 0 Ġ 0 1 ĠA 9 Ġ 0 3 Ġ 8 5 Ġ 0 1 ĠA 9 Ġ 0 7 Ġ 8 5 Ġ 0 2 ĠA 2 Ġ 0 A Ġ 8 E Ġ 0 4 Ġ 0 7 ĠB 1 Ġ\ n 0 6 1 0 : Ġ 0 1 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Jump () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" L DA Ġ#$ 0 3 ", ĊĠĠĠĠĠĠĠ Ġ" J MP Ġthere ", ĊĠĠĠĠĠĠĠ Ġ" BR K ", ĊĠĠĠĠĠĠĠ Ġ" BR K ", ĊĠĠĠĠĠĠĠ Ġ" BR K ", ĊĠĠĠĠĠĠĠ Ġ" there :", ĊĠĠĠĠĠĠĠ Ġ" STA Ġ$ 0 2 0 0 ") ĊĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 9 Ġ 0 3 Ġ 4 C Ġ 0 8 Ġ 0 6 Ġ 0 0 Ġ 0 0 Ġ 0 0 Ġ 8 D Ġ 0 0 Ġ 0 2 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Symbols () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" define Ġ Ġsys Random Ġ Ġ\$ fe Ġ; Ġan Ġad ress ", ĊĠĠĠĠĠĠĠ Ġ" define Ġ Ġa _ do zen ĠĠĠ Ġ$ 0 c Ġ; Ġa Ġconstant ", ĊĠĠĠĠĠĠĠ Ġ" L DA Ġsys Random Ġ Ġ; Ġequivalent Ġto Ġ\" L DA Ġ\$ fe \"", ĊĠĠĠĠĠĠĠ Ġ" LD X Ġ# a _ do zen ĠĠ Ġ; Ġequivalent Ġto Ġ\" LD X Ġ#$ 0 c \" ") ĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump ()). isEqualTo (" 0 6 0 0 : ĠA 5 ĠFE ĠA 2 Ġ 0 C ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Snake () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠImmutableList . of ( ĊĠĠĠĠĠĠĠ Ġ" define Ġapple L ĠĠĠĠĠĠĠĠ Ġ$ 0 0 Ġ; Ġscreen Ġlocation Ġof Ġapple , Ġlow Ġbyte ", ĊĠĠĠĠĠĠĠ Ġ" define Ġapple H ĠĠĠĠĠĠĠĠ Ġ$ 0 1 Ġ; Ġscreen Ġlocation Ġof Ġapple , Ġhigh Ġbyte ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsnake Head L ĠĠĠĠ Ġ$ 1 0 Ġ; Ġscreen Ġlocation Ġof Ġsnake Ġhead , Ġlow Ġbyte ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsnake Head H ĠĠĠĠ Ġ$ 1 1 Ġ; Ġscreen Ġlocation Ġof Ġsnake Ġhead , Ġhigh Ġbyte ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsnake Body Start Ġ$ 1 2 Ġ; Ġstart Ġof Ġsnake Ġbody Ġbyte Ġpairs ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsnake Direction Ġ$ 0 2 Ġ; Ġdirection Ġ( possible Ġvalues Ġare Ġbelow )", ĊĠĠĠĠĠĠĠ Ġ" define Ġsnake Length ĠĠĠ Ġ$ 0 3 Ġ; Ġsnake Ġlength , Ġin Ġbytes ", ĊĠĠĠĠĠĠĠ Ġ"; ĠDirection s Ġ( each Ġusing Ġa Ġseparate Ġbit )", ĊĠĠĠĠĠĠĠ Ġ" define Ġmoving Up ĠĠĠĠĠĠ 1 ", ĊĠĠĠĠĠĠĠ Ġ" define Ġmoving Right ĠĠĠ 2 ", ĊĠĠĠĠĠĠĠ Ġ" define Ġmoving Down ĠĠĠĠ 4 ", ĊĠĠĠĠĠĠĠ Ġ" define Ġmoving Left ĠĠĠĠ 8 ", ĊĠĠĠĠĠĠĠ Ġ"; ĠASCII Ġvalues Ġof Ġkeys Ġcontrolling Ġthe Ġsnake ", ĊĠĠĠĠĠĠĠ Ġ" define ĠASCII _ w ĠĠĠĠĠ Ġ$ 7 7 ", ĊĠĠĠĠĠĠĠ Ġ" define ĠASCII _ a ĠĠĠĠĠ Ġ$ 6 1 ", ĊĠĠĠĠĠĠĠ Ġ" define ĠASCII _ s ĠĠĠĠĠ Ġ$ 7 3 ", ĊĠĠĠĠĠĠĠ Ġ" define ĠASCII _ d ĠĠĠĠĠ Ġ$ 6 4 ", ĊĠĠĠĠĠĠĠ Ġ"; ĠSystem Ġvariables ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsys Random ĠĠĠ Ġ\$ fe ", ĊĠĠĠĠĠĠĠ Ġ" define Ġsys Last Key ĠĠ Ġ\$ ff ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġinit ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġloop ", ĊĠĠĠĠĠĠĠ Ġ" init :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġinit Snake ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġgenerate Apple Position ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" init Snake :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Right Ġ Ġ; start Ġdirection ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# 4 Ġ Ġ; start Ġlength Ġ( 2 Ġsegments )", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Length ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 1 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 1 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Body Start ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 0 f ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ$ 1 4 Ġ; Ġbody Ġsegment Ġ 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 0 4 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ$ 1 3 Ġ; Ġbody Ġsegment Ġ 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ$ 1 5 Ġ; Ġbody Ġsegment Ġ 2 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" generate Apple Position :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ; load Ġa Ġnew Ġrandom Ġbyte Ġinto Ġ$ 0 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsys Random ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġapple L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ; load Ġa Ġnew Ġrandom Ġnumber Ġfrom Ġ 2 Ġto Ġ 5 Ġinto Ġ$ 0 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsys Random ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġand Ġ#$ 0 3 Ġ; mask Ġout Ġlowest Ġ 2 Ġbits ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcl c ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġadc Ġ# 2 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġapple H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" loop :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġread Keys ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġcheck Collision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġupdate Snake ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġdraw Apple ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġdraw Snake ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġspin Wheel s ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjmp Ġloop ", ĊĠĠĠĠĠĠĠ Ġ" read Keys :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsys Last Key ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġ# ASCII _ w ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġup Key ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġ# ASCII _ d ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġright Key ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġ# ASCII _ s ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġdown Key ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġ# ASCII _ a ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġleft Key ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" up Key :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Down ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbit Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġillegal Move ", ĊĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Up ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" right Key :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Left ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbit Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġillegal Move ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Right ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" down Key :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Up ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbit Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġillegal Move ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Down ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" left Key :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Right ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbit Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġillegal Move ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# moving Left ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" il legal Move :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" check Collision :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġcheck Apple Collision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġcheck Snake Collision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" check Apple Collision :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġapple L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġdone Checking Apple Collision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġapple H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġdone Checking Apple Collision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ; eat Ġapple ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġinc Ġsnake Length ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġinc Ġsnake Length Ġ; increase Ġlength ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjsr Ġgenerate Apple Position ", ĊĠĠĠĠĠĠĠ Ġ" done Checking Apple Collision :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" check Snake Collision :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dx Ġ# 2 Ġ; start Ġwith Ġsecond Ġsegment ", ĊĠĠĠĠĠĠĠ Ġ" snake Collision Loop :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head L , x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġcontinue Collision Loop ", ĊĠĠĠĠĠĠĠ Ġ" maybe Col li ded :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head H , x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġdid Col lide ", ĊĠĠĠĠĠĠĠ Ġ" continue Collision Loop :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġin x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġin x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġc px Ġsnake Length ĠĠĠĠĠĠĠĠĠ Ġ; got Ġto Ġlast Ġsection Ġwith Ġno Ġcollision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġdid nt Col lide ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjmp Ġsnake Collision Loop ", ĊĠĠĠĠĠĠĠ Ġ" did Col lide :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjmp Ġgame Over ", ĊĠĠĠĠĠĠĠ Ġ" did nt Col lide :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" update Snake :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dx Ġsnake Length ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġdex ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġt xa ", ĊĠĠĠĠĠĠĠ Ġ" update loop :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head L , x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Body Start , x ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġdex ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb pl Ġupdate loop ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Direction ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl sr ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cs Ġup ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl sr ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cs Ġright ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl sr ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cs Ġdown ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl sr ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cs Ġleft ", ĊĠĠĠĠĠĠĠ Ġ" up :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsec ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġs bc Ġ#$ 2 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cc Ġup up ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" up up :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġdec Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġcollision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" right :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġinc Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 1 f ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbit Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġcollision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" down :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcl c ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġadc Ġ#$ 2 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb cs Ġdown down ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" down down :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġinc Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ#$ 6 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġsnake Head H ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġcollision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" left :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġdec Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsnake Head L ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġand Ġ#$ 1 f ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġcmp Ġ#$ 1 f ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġbe q Ġcollision ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" collision :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġjmp Ġgame Over ", ĊĠĠĠĠĠĠĠ Ġ" draw Apple :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dy Ġ# 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġsys Random ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ( apple L ), y ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" draw Snake :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dx Ġ# 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# 1 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ( snake Head L , x ) Ġ; Ġpaint Ġhead ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dx Ġsnake Length ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġlda Ġ# 0 ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġsta Ġ( snake Head L , x ) Ġ; Ġerase Ġend Ġof Ġtail ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" spin Wheel s :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġl dx Ġ# 0 ", ĊĠĠĠĠĠĠĠ Ġ" spin loop :", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġnop ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġnop ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġdex ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġb ne Ġspin loop ", ĊĠĠĠĠĠĠĠ Ġ" Ġ Ġr ts ", ĊĠĠĠĠĠĠĠ Ġ" game Over :", Ġ"\ n ") ĊĠĠĠ Ġassembler . assemble Code ( lines ) ĊĠĠĠ ĠassertThat ( assembler . hex dump (). toLowerCase ()). isEqualTo ( ĊĠĠĠĠĠĠĠ Ġ" 0 6 0 0 : Ġ 2 0 Ġ 0 6 Ġ 0 6 Ġ 2 0 Ġ 3 8 Ġ 0 6 Ġ 2 0 Ġ 0 d Ġ 0 6 Ġ 2 0 Ġ 2 a Ġ 0 6 Ġ 6 0 Ġa 9 Ġ 0 2 Ġ 8 5 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 1 0 : Ġ 0 2 Ġa 9 Ġ 0 4 Ġ 8 5 Ġ 0 3 Ġa 9 Ġ 1 1 Ġ 8 5 Ġ 1 0 Ġa 9 Ġ 1 0 Ġ 8 5 Ġ 1 2 Ġa 9 Ġ 0 f Ġ 8 5 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 2 0 : Ġ 1 4 Ġa 9 Ġ 0 4 Ġ 8 5 Ġ 1 1 Ġ 8 5 Ġ 1 3 Ġ 8 5 Ġ 1 5 Ġ 6 0 Ġa 5 Ġfe Ġ 8 5 Ġ 0 0 Ġa 5 Ġfe Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 3 0 : Ġ 2 9 Ġ 0 3 Ġ 1 8 Ġ 6 9 Ġ 0 2 Ġ 8 5 Ġ 0 1 Ġ 6 0 Ġ 2 0 Ġ 4 d Ġ 0 6 Ġ 2 0 Ġ 8 d Ġ 0 6 Ġ 2 0 Ġc 3 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 4 0 : Ġ 0 6 Ġ 2 0 Ġ 1 9 Ġ 0 7 Ġ 2 0 Ġ 2 0 Ġ 0 7 Ġ 2 0 Ġ 2 d Ġ 0 7 Ġ 4 c Ġ 3 8 Ġ 0 6 Ġa 5 Ġff Ġc 9 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 5 0 : Ġ 7 7 Ġf 0 Ġ 0 d Ġc 9 Ġ 6 4 Ġf 0 Ġ 1 4 Ġc 9 Ġ 7 3 Ġf 0 Ġ 1 b Ġc 9 Ġ 6 1 Ġf 0 Ġ 2 2 Ġ 6 0 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 6 0 : Ġa 9 Ġ 0 4 Ġ 2 4 Ġ 0 2 Ġd 0 Ġ 2 6 Ġa 9 Ġ 0 1 Ġ 8 5 Ġ 0 2 Ġ 6 0 Ġa 9 Ġ 0 8 Ġ 2 4 Ġ 0 2 Ġd 0 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 7 0 : Ġ 1 b Ġa 9 Ġ 0 2 Ġ 8 5 Ġ 0 2 Ġ 6 0 Ġa 9 Ġ 0 1 Ġ 2 4 Ġ 0 2 Ġd 0 Ġ 1 0 Ġa 9 Ġ 0 4 Ġ 8 5 Ġ 0 2 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 8 0 : Ġ 6 0 Ġa 9 Ġ 0 2 Ġ 2 4 Ġ 0 2 Ġd 0 Ġ 0 5 Ġa 9 Ġ 0 8 Ġ 8 5 Ġ 0 2 Ġ 6 0 Ġ 6 0 Ġ 2 0 Ġ 9 4 Ġ 0 6 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 9 0 : Ġ 2 0 Ġa 8 Ġ 0 6 Ġ 6 0 Ġa 5 Ġ 0 0 Ġc 5 Ġ 1 0 Ġd 0 Ġ 0 d Ġa 5 Ġ 0 1 Ġc 5 Ġ 1 1 Ġd 0 Ġ 0 7 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 a 0 : Ġe 6 Ġ 0 3 Ġe 6 Ġ 0 3 Ġ 2 0 Ġ 2 a Ġ 0 6 Ġ 6 0 Ġa 2 Ġ 0 2 Ġb 5 Ġ 1 0 Ġc 5 Ġ 1 0 Ġd 0 Ġ 0 6 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 b 0 : Ġb 5 Ġ 1 1 Ġc 5 Ġ 1 1 Ġf 0 Ġ 0 9 Ġe 8 Ġe 8 Ġe 4 Ġ 0 3 Ġf 0 Ġ 0 6 Ġ 4 c Ġaa Ġ 0 6 Ġ 4 c Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 c 0 : Ġ 3 5 Ġ 0 7 Ġ 6 0 Ġa 6 Ġ 0 3 Ġca Ġ 8 a Ġb 5 Ġ 1 0 Ġ 9 5 Ġ 1 2 Ġca Ġ 1 0 Ġf 9 Ġa 5 Ġ 0 2 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 d 0 : Ġ 4 a Ġb 0 Ġ 0 9 Ġ 4 a Ġb 0 Ġ 1 9 Ġ 4 a Ġb 0 Ġ 1 f Ġ 4 a Ġb 0 Ġ 2 f Ġa 5 Ġ 1 0 Ġ 3 8 Ġe 9 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 e 0 : Ġ 2 0 Ġ 8 5 Ġ 1 0 Ġ 9 0 Ġ 0 1 Ġ 6 0 Ġc 6 Ġ 1 1 Ġa 9 Ġ 0 1 Ġc 5 Ġ 1 1 Ġf 0 Ġ 2 8 Ġ 6 0 Ġe 6 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 6 f 0 : Ġ 1 0 Ġa 9 Ġ 1 f Ġ 2 4 Ġ 1 0 Ġf 0 Ġ 1 f Ġ 6 0 Ġa 5 Ġ 1 0 Ġ 1 8 Ġ 6 9 Ġ 2 0 Ġ 8 5 Ġ 1 0 Ġb 0 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 7 0 0 : Ġ 0 1 Ġ 6 0 Ġe 6 Ġ 1 1 Ġa 9 Ġ 0 6 Ġc 5 Ġ 1 1 Ġf 0 Ġ 0 c Ġ 6 0 Ġc 6 Ġ 1 0 Ġa 5 Ġ 1 0 Ġ 2 9 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 7 1 0 : Ġ 1 f Ġc 9 Ġ 1 f Ġf 0 Ġ 0 1 Ġ 6 0 Ġ 4 c Ġ 3 5 Ġ 0 7 Ġa 0 Ġ 0 0 Ġa 5 Ġfe Ġ 9 1 Ġ 0 0 Ġ 6 0 Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 7 2 0 : Ġa 2 Ġ 0 0 Ġa 9 Ġ 0 1 Ġ 8 1 Ġ 1 0 Ġa 6 Ġ 0 3 Ġa 9 Ġ 0 0 Ġ 8 1 Ġ 1 0 Ġ 6 0 Ġa 2 Ġ 0 0 Ġea Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 7 3 0 : Ġea Ġca Ġd 0 Ġfb Ġ 6 0 ") ĊĠ Ġ} Ċ } Ċ